1
0
Fork 0
You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

738 lines
3.1 MiB

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

/*
* 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/).
*/
/******/ (() => { // webpackBootstrap
/******/ var __webpack_modules__ = ({
/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/CurrencyInput.vue?vue&type=script&lang=js&":
/*!********************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/CurrencyInput.vue?vue&type=script&lang=js& ***!
\********************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n//\n//\n//\n//\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n name: \"CurrencyInput\",\n props: ['id', 'classes', 'name', 'value', 'placeholder'],\n data: function data() {\n return {\n content: this.value\n };\n },\n methods: {\n handleInput: function handleInput(e) {\n this.$emit('input', this.nocomma(this.content));\n },\n fix: function fix() {\n this.content = this.commafy(this.content);\n this.$emit('keyup');\n },\n nocomma: function nocomma(num) {\n var a = num.replace(/\\,/g, ''); // 1125, but a string, so convert it to number\n\n return a.toString();\n },\n commafy: function commafy(num) {\n num = this.nocomma(num);\n var str = num.toString().split('.');\n\n if (str[0].length >= 4) {\n str[0] = str[0].replace(/(\\d)(?=(\\d{3})+$)/g, '$1,');\n }\n\n if (str[1] && str[1].length >= 4) {\n str[1] = str[1].replace(/(\\d{3})/g, '$1,');\n }\n\n return str.join('.');\n }\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01WzBdLnJ1bGVzWzBdLnVzZVswXSEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvQ3VycmVuY3lJbnB1dC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBTUEsaUVBQWU7RUFDZkEscUJBREE7RUFFQUMsd0RBRkE7RUFHQUMsSUFIQSxrQkFHQTtJQUNBO01BQ0FDO0lBREE7RUFHQSxDQVBBO0VBUUFDO0lBQ0FDLFdBREEsdUJBQ0FDLENBREEsRUFDQTtNQUNBO0lBQ0EsQ0FIQTtJQUlBQztNQUNBO01BQ0E7SUFDQSxDQVBBO0lBUUFDO01BQ0EsK0JBREEsQ0FDQTs7TUFDQTtJQUNBLENBWEE7SUFZQUM7TUFDQUM7TUFDQTs7TUFDQTtRQUNBQztNQUNBOztNQUNBO1FBQ0FBO01BQ0E7O01BQ0E7SUFDQTtFQXRCQTtBQVJBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vL3Jlc291cmNlcy9qcy9jb21wb25lbnRzL0N1cnJlbmN5SW5wdXQudnVlPzJhZGYiXSwic291cmNlc0NvbnRlbnQiOlsiPHRlbXBsYXRlPlxuICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIDpjbGFzcz1cImNsYXNzZXNcIiBAa2V5dXA9XCJmaXhcIiBAaW5wdXQ9XCJoYW5kbGVJbnB1dFwiIDppZD1cImlkXCIgdi1tb2RlbD1cImNvbnRlbnRcIiA6bmFtZT1cIm5hbWVcIiA6cGxhY2Vob2xkZXI9XCJwbGFjZWhvbGRlclwiLz5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBuYW1lOiBcIkN1cnJlbmN5SW5wdXRcIixcbiAgICBwcm9wczpbJ2lkJywnY2xhc3NlcycsJ25hbWUnLCd2YWx1ZScsJ3BsYWNlaG9sZGVyJ10sXG4gICAgZGF0YSAoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiB0aGlzLnZhbHVlXG4gICAgICAgIH1cbiAgICB9LFxuICAgIG1ldGhvZHM6IHtcbiAgICAgICAgaGFuZGxlSW5wdXQgKGUpIHtcbiAgICAgICAgICAgIHRoaXMuJGVtaXQoJ2lucHV0JywgdGhpcy5ub2NvbW1hKHRoaXMuY29udGVudCkpO1xuICAgICAgICB9LFxuICAgICAgICBmaXg6ZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdGhpcy5jb250ZW50ID0gdGhpcy5jb21tYWZ5KHRoaXMuY29udGVudCk7XG4gICAgICAgICAgICB0aGlzLiRlbWl0KCdrZXl1cCcpO1xuICAgICAgICB9LFxuICAgICAgICBub2NvbW1hOiBmdW5jdGlvbiAobnVtKSB7XG4gICAgICAgICAgICBsZXQgYSA9IG51bS5yZXBsYWNlKC9cXCwvZywgJycpOyAvLyAxMTI1LCBidXQgYSBzdHJpbmcsIHNvIGNvbnZlcnQgaXQgdG8gbnVtYmVyXG4gICAgICAgICAgICByZXR1cm4gYS50b1N0cmluZygpO1xuICAgICAgICB9LFxuICAgICAgICBjb21tYWZ5OiBmdW5jdGlvbiAobnVtKSB7XG4gICAgICAgICAgICBudW0gPSB0aGlzLm5vY29tbWEobnVtKTtcbiAgICAgICAgICAgIHZhciBzdHIgPSBudW0udG9TdHJpbmcoKS5zcGxpdCgnLicpO1xuICAgICAgICAgICAgaWYgKHN0clswXS5sZW5ndGggPj0gNCkge1xuICAgICAgICAgICAgICAgIHN0clswXSA9IHN0clswXS5yZXBsYWNlKC8oXFxkKSg/PShcXGR7M30pKyQpL2csICckMSwnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzdHJbMV0gJiYgc3RyWzFdLmxlbmd0aCA+PSA0KSB7XG4gICAgICAgICAgICAgICAgc3RyWzFdID0gc3RyWzFdLnJlcGxhY2UoLyhcXGR7M30pL2csICckMSwnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzdHIuam9pbignLicpO1xuICAgICAgICB9LFxuICAgIH1cbn1cbjwvc2NyaXB0PlxuXG48c3R5bGUgc2NvcGVkPlxuXG48L3N0eWxlPlxuIl0sIm5hbWVzIjpbIm5hbWUiLCJwcm9wcyIsImRhdGEiLCJjb250ZW50IiwibWV0aG9kcyIsImhhbmRsZUlucHV0IiwiZSIsImZpeCIsIm5vY29tbWEiLCJjb21tYWZ5IiwibnVtIiwic3RyIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/CurrencyInput.vue?vue&type=script&lang=js&\n");
/***/ }),
/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/ExampleComponent.vue?vue&type=script&lang=js&":
/*!***********************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/ExampleComponent.vue?vue&type=script&lang=js& ***!
\***********************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n mounted: function mounted() {\n console.log('Component mounted.');\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01WzBdLnJ1bGVzWzBdLnVzZVswXSEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvRXhhbXBsZUNvbXBvbmVudC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBaUJBO0VBQ0FBLE9BREEscUJBQ0E7SUFDQUM7RUFDQTtBQUhBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vL3Jlc291cmNlcy9qcy9jb21wb25lbnRzL0V4YW1wbGVDb21wb25lbnQudnVlPzE0ZGYiXSwic291cmNlc0NvbnRlbnQiOlsiPHRlbXBsYXRlPlxuICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLThcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXJcIj5FeGFtcGxlIENvbXBvbmVudDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIEknbSBhbiBleGFtcGxlIGNvbXBvbmVudC5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuICAgIGV4cG9ydCBkZWZhdWx0IHtcbiAgICAgICAgbW91bnRlZCgpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdDb21wb25lbnQgbW91bnRlZC4nKVxuICAgICAgICB9XG4gICAgfVxuPC9zY3JpcHQ+XG4iXSwibmFtZXMiOlsibW91bnRlZCIsImNvbnNvbGUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/ExampleComponent.vue?vue&type=script&lang=js&\n");
/***/ }),
/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/MetaElement.vue?vue&type=script&lang=js&":
/*!******************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/MetaElement.vue?vue&type=script&lang=js& ***!
\******************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var vue_multiselect__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue-multiselect */ \"./node_modules/vue-multiselect/dist/vue-multiselect.min.js\");\n/* harmony import */ var vue_multiselect__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue_multiselect__WEBPACK_IMPORTED_MODULE_0__);\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it[\"return\"] != null) it[\"return\"](); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\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//\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//\n//\n//\n//\n//\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n name: \"MetaElement\",\n components: {\n multiselect: (vue_multiselect__WEBPACK_IMPORTED_MODULE_0___default())\n },\n data: function data() {\n return {\n b: true,\n content: this.value,\n value: '',\n t: window.translate,\n classes: 'form-control',\n elms: [],\n defaults: {}\n };\n },\n props: ['jdata', 'searchable', 'defz'],\n mounted: function mounted() {\n this.updateJdata(this.jdata, this.defz);\n },\n methods: {\n upd: function upd() {\n this.$forceUpdate();\n },\n makeVal: function makeVal(ob) {\n return JSON.stringify(ob);\n },\n updateJdata: function updateJdata(e) {\n var def = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n\n try {\n // make defaults\n var _iterator = _createForOfIteratorHelper(def),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var d = _step.value;\n this.defaults[d.key] = d.value;\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n\n if (typeof e == 'string') {\n this.elms = JSON.parse(e);\n } else {\n this.elms = e;\n }\n\n var _iterator2 = _createForOfIteratorHelper(this.elms),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var _e = _step2.value;\n\n try {\n _e.options = JSON.parse(_e.options); // fix for multi select object\n\n if (_e.type === 'multi' || _e.type === '' && this.searchable) {\n this.defaults[_e.name] = JSON.parse(this.defaults[_e.name]);\n } // console.log(JSON.parse(e.options));\n\n } catch (_unused) {}\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n } catch (e) {\n this.elms = [];\n console.log('no meta ele', e.message);\n }\n },\n handleInput: function handleInput(e) {\n this.$emit('input', this.content);\n }\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01WzBdLnJ1bGVzWzBdLnVzZVswXSEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvTWV0YUVsZW1lbnQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJi5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQW9GMEM7QUFFMUMsaUVBQWU7RUFDZkEsbUJBREE7RUFFQUM7SUFBQUMsYUFBQUEsd0RBQUFBO0VBQUEsQ0FGQTtFQUdBQztJQUNBO01BQ0FDLE9BREE7TUFFQUMsbUJBRkE7TUFHQUMsU0FIQTtNQUlBQyxtQkFKQTtNQUtBQyx1QkFMQTtNQU1BQyxRQU5BO01BT0FDO0lBUEE7RUFTQSxDQWJBO0VBY0FDLHNDQWRBO0VBZUFDLE9BZkEscUJBZUE7SUFDQTtFQUNBLENBakJBO0VBa0JBQztJQUNBQztNQUNBO0lBQ0EsQ0FIQTtJQUlBQztNQUNBO0lBQ0EsQ0FOQTtJQU9BQztNQUFBOztNQUNBO1FBRUE7UUFGQSwyQ0FHQUMsR0FIQTtRQUFBOztRQUFBO1VBR0E7WUFBQTtZQUNBO1VBQ0E7UUFMQTtVQUFBO1FBQUE7VUFBQTtRQUFBOztRQU9BO1VBQ0E7UUFDQSxDQUZBLE1BRUE7VUFDQTtRQUNBOztRQVhBLDRDQWNBLFNBZEE7UUFBQTs7UUFBQTtVQWNBO1lBQUE7O1lBQ0E7Y0FDQUMsb0NBREEsQ0FFQTs7Y0FDQTtnQkFDQTtjQUNBLENBTEEsQ0FNQTs7WUFDQSxDQVBBLENBT0EsaUJBQ0E7VUFDQTtRQXhCQTtVQUFBO1FBQUE7VUFBQTtRQUFBO01BMkJBLENBM0JBLENBMkJBO1FBQ0E7UUFDQUM7TUFDQTtJQUVBLENBeENBO0lBeUNBQyxXQXpDQSx1QkF5Q0FGLENBekNBLEVBeUNBO01BQ0E7SUFDQTtFQTNDQTtBQWxCQSIsInNvdXJjZXMiOlsid2VicGFjazovLy9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9NZXRhRWxlbWVudC52dWU/OGEzZCJdLCJzb3VyY2VzQ29udGVudCI6WyI8dGVtcGxhdGU+XG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICA8ZGl2IHYtZm9yPVwiZCBpbiBlbG1zXCIgOmNsYXNzPVwiZC53aWR0aCsnIG1iLTMnXCI+XG4gICAgICAgICAgICA8ZGl2IHYtaWY9XCJkLnR5cGUgPT09ICd0ZXh0J1wiPlxuICAgICAgICAgICAgICAgIDxsYWJlbCA6Zm9yPVwiZC5uYW1lXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IGQubGFiZWwgfX1cbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dCB2LW1vZGVsPVwiZGVmYXVsdHNbZC5uYW1lXVwiIHR5cGU9XCJ0ZXh0XCIgOmlkPVwiZC5uYW1lXCIgOm5hbWU9XCInbWV0YVsnK2QubmFtZSsnXSdcIlxuICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IHYtZWxzZS1pZj1cImQudHlwZSA9PT0gJ251bWJlcidcIj5cbiAgICAgICAgICAgICAgICA8bGFiZWwgOmZvcj1cImQubmFtZVwiPlxuICAgICAgICAgICAgICAgICAgICB7eyBkLmxhYmVsIH19XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gICAgICAgICAgICAgICAgICAgIFwie3tkZWZhdWx0c1tkLm5hbWVdfX1cIi0tPlxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiB2LW1vZGVsPVwiZGVmYXVsdHNbZC5uYW1lXVwiIDpwbGFjZWhvbGRlcj1cImQubGFiZWxcIiA6aWQ9XCJkLm5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICA6bmFtZT1cIidtZXRhWycrZC5uYW1lKyddJ1wiIGNsYXNzPVwiZm9ybS1jb250cm9sXCI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgdi1lbHNlLWlmPVwiZC50eXBlID09PSAnY29sb3InXCIgOmlkPVwiZC5uYW1lXCIgOm5hbWU9XCInbWV0YVsnK2QubmFtZSsnXSdcIj5cbiAgICAgICAgICAgICAgICA8bGFiZWwgOmZvcj1cImQubmFtZVwiPlxuICAgICAgICAgICAgICAgICAgICB7eyBkLmxhYmVsIH19XG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8c2VsZWN0IHYtbW9kZWw9XCJkZWZhdWx0c1tkLm5hbWVdXCIgOm5hbWU9XCInbWV0YVsnK2QubmFtZSsnXSdcIiA6aWQ9XCJkLm5hbWVcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiXCI+IHt7IGQubGFiZWwgfX08L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiA6c3R5bGU9XCInYmFja2dyb3VuZC1jb2xvcjonICsgby52YWx1ZSBcIiA6dmFsdWU9XCJvLnZhbHVlXCIgdi1mb3I9XCJvIGluIGQub3B0aW9uc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgby50aXRsZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiB2LWVsc2UtaWY9XCJkLnR5cGUgPT09ICdjaGVja2JveCdcIj5cbiAgICAgICAgICAgICAgICA8bGFiZWwgOmZvcj1cImQubmFtZVwiPlxuICAgICAgICAgICAgICAgICAgICB7eyBkLmxhYmVsIH19XG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8YnI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBhbmVsIHBhbmVsLWRlZmF1bHQgXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYW5lbC1ib2R5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tT25seSBjb2RlIHlvdSBuZWVkIGlzIHRoaXMgbGFiZWwtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInN3aXRjaFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCA6bmFtZT1cIidtZXRhWycrZC5uYW1lKyddJ1wiICB2LW1vZGVsPVwiZGVmYXVsdHNbZC5uYW1lXVwiIHR5cGU9XCJjaGVja2JveFwiID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2xpZGVyIHJvdW5kXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHA+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiB2LWVsc2UtaWY9XCJkLnR5cGUgPT09ICdzZWxlY3QnXCI+XG4gICAgICAgICAgICAgICAgPGxhYmVsIDpmb3I9XCJkLm5hbWVcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgZC5sYWJlbCB9fVxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPHNlbGVjdCB2LW1vZGVsPVwiZGVmYXVsdHNbZC5uYW1lXVwiIDpuYW1lPVwiJ21ldGFbJytkLm5hbWUrJ10nXCIgOmlkPVwiZC5uYW1lXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIj5cbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiPiB7eyBkLmxhYmVsIH19PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gOnZhbHVlPVwiby52YWx1ZVwiIHYtZm9yPVwibyBpbiBkLm9wdGlvbnNcIj4ge3sgby50aXRsZSB9fTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IHYtZWxzZS1pZj1cImQudHlwZSA9PT0gJ211bHRpJ1wiPlxuICAgICAgICAgICAgICAgIDxsYWJlbCA6Zm9yPVwiZC5uYW1lXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IGQubGFiZWwgfX1cbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxtdWx0aXNlbGVjdCBAc2VsZWN0PVwidXBkKClcIiA6bXVsdGlwbGU9XCJ0cnVlXCIgOnRhZ2dhYmxlPVwidHJ1ZVwiIGxhYmVsPVwidGl0bGVcIiB2LW1vZGVsPVwiZGVmYXVsdHNbZC5uYW1lXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpwbGFjZWhvbGRlcj1cImQubGFiZWxcIiA6b3B0aW9ucz1cImQub3B0aW9uc1wiPjwvbXVsdGlzZWxlY3Q+XG4gICAgICAgICAgICAgICAgPGlucHV0IDppZD1cImQubGFiZWxcIiB0eXBlPVwiaGlkZGVuXCIgOm5hbWU9XCInbWV0YVsnK2QubmFtZSsnXSdcIiA6dmFsdWU9XCJtYWtlVmFsKGRlZmF1bHRzW2QubmFtZV0pXCI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgdi1lbHNlLWlmPVwiZC50eXBlID09PSAnc2luZ2xlbXVsdGknXCI+XG4gICAgICAgICAgICAgICAgPGxhYmVsIDpmb3I9XCJkLm5hbWVcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgZC5sYWJlbCB9fVxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPGRpdiB2LWlmPVwic2VhcmNoYWJsZVwiPlxuICAgICAgICAgICAgICAgICAgICA8bXVsdGlzZWxlY3QgQHNlbGVjdD1cInVwZCgpXCIgdi1tb2RlbD1cImRlZmF1bHRzW2QubmFtZV1cIiA6bXVsdGlwbGU9XCJ0cnVlXCIgOnRhZ2dhYmxlPVwidHJ1ZVwiIGxhYmVsPVwidGl0bGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOnBsYWNlaG9sZGVyPVwiZC5sYWJlbFwiIDpvcHRpb25zPVwiZC5vcHRpb25zXCI+PC9tdWx0aXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiA6bmFtZT1cIidtZXRhWycrZC5uYW1lKyddJ1wiIDp2YWx1ZT1cImRlZmF1bHRzW2QubmFtZV1cIj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8c2VsZWN0IHYtZWxzZSB2LW1vZGVsPVwiZGVmYXVsdHNbZC5uYW1lXVwiIDpuYW1lPVwiJ21ldGFbJytkLm5hbWUrJ10nXCIgOmlkPVwiZC5uYW1lXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIj5cbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiPiB7eyBkLmxhYmVsIH19PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gOnZhbHVlPVwiby52YWx1ZVwiIHYtZm9yPVwibyBpbiBkLm9wdGlvbnNcIj4ge3sgby50aXRsZSB9fTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBtdWx0aXNlbGVjdCBmcm9tICd2dWUtbXVsdGlzZWxlY3QnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gICAgbmFtZTogXCJNZXRhRWxlbWVudFwiLFxuICAgIGNvbXBvbmVudHM6IHttdWx0aXNlbGVjdH0sXG4gICAgZGF0YTogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYjogdHJ1ZSxcbiAgICAgICAgICAgIGNvbnRlbnQ6IHRoaXMudmFsdWUsXG4gICAgICAgICAgICB2YWx1ZTogJycsXG4gICAgICAgICAgICB0OiB3aW5kb3cudHJhbnNsYXRlLFxuICAgICAgICAgICAgY2xhc3NlczogJ2Zvcm0tY29udHJvbCcsXG4gICAgICAgICAgICBlbG1zOiBbXSxcbiAgICAgICAgICAgIGRlZmF1bHRzOiB7fSxcbiAgICAgICAgfVxuICAgIH0sXG4gICAgcHJvcHM6IFsnamRhdGEnLCAnc2VhcmNoYWJsZScsICdkZWZ6J10sXG4gICAgbW91bnRlZCgpIHtcbiAgICAgICAgdGhpcy51cGRhdGVKZGF0YSh0aGlzLmpkYXRhLCB0aGlzLmRlZnopO1xuICAgIH0sXG4gICAgbWV0aG9kczoge1xuICAgICAgICB1cGQ6ZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdGhpcy4kZm9yY2VVcGRhdGUoKTtcbiAgICAgICAgfSxcbiAgICAgICAgbWFrZVZhbDpmdW5jdGlvbiAob2IpIHtcbiAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShvYik7XG4gICAgICAgIH0sXG4gICAgICAgIHVwZGF0ZUpkYXRhOiBmdW5jdGlvbiAoZSwgZGVmID0gW10pIHtcbiAgICAgICAgICAgIHRyeSB7XG5cbiAgICAgICAgICAgICAgICAvLyBtYWtlIGRlZmF1bHRzXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBkIG9mIGRlZikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRlZmF1bHRzW2Qua2V5XSA9IGQudmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBlID09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZWxtcyA9IEpTT04ucGFyc2UoZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbG1zID0gZTtcbiAgICAgICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZSBvZiB0aGlzLmVsbXMpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGUub3B0aW9ucyA9IEpTT04ucGFyc2UoZS5vcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZpeCBmb3IgbXVsdGkgc2VsZWN0IG9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUudHlwZSA9PT0gJ211bHRpJyB8fCAoZS50eXBlID09PScnICYmIHRoaXMuc2VhcmNoYWJsZSkpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVmYXVsdHNbZS5uYW1lXSA9IEpTT04ucGFyc2UodGhpcy5kZWZhdWx0c1tlLm5hbWVdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKEpTT04ucGFyc2UoZS5vcHRpb25zKSk7XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVsbXMgPSBbXTtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnbm8gbWV0YSBlbGUnLCBlLm1lc3NhZ2UpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0sXG4gICAgICAgIGhhbmRsZUlucHV0KGUpIHtcbiAgICAgICAgICAgIHRoaXMuJGVtaXQoJ2lucHV0JywgdGhpcy5jb250ZW50KTtcbiAgICAgICAgfSxcbiAgICB9XG59XG48L3NjcmlwdD5cblxuPHN0eWxlIHNjb3BlZD5cbi5zd2l0Y2gge1xuICAgIG1hcmdpbi10b3A6IDEwcHg7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICB3aWR0aDogMzVweDtcbiAgICBoZWlnaHQ6IDIwcHg7XG59XG5cbi5zd2l0Y2ggaW5wdXQge1xuICAgIGRpc3BsYXk6IG5vbmU7XG59XG5cbi5zbGlkZXIge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgdG9wOiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgcmlnaHQ6IDA7XG4gICAgYm90dG9tOiAwO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNjY2M7XG4gICAgLXdlYmtpdC10cmFuc2l0aW9uOiAwLjRzO1xuICAgIHRyYW5zaXRpb246IDAuNHM7XG59XG5cbi5zbGlkZXI6YmVmb3JlIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgY29udGVudDogXCJcIjtcbiAgICBoZWlnaHQ6IDE2cHg7XG4gICAgd2lkdGg6IDE2cHg7XG4gICAgbGVmdDogMnB4O1xuICAgIGJvdHRvbTogMnB4O1xuICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICAgIC13ZWJraXQtdHJhbnNpdGlvbjogMC40cztcbiAgICB0cmFuc2l0aW9uOiAwLjRzO1xufVxuXG5pbnB1dDpjaGVja2VkICsgLnNsaWRlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzFkNjhhNztcbn1cblxuaW5wdXQ6Zm9jdXMgKyAuc2xpZGVyIHtcbiAgICBib3gtc2hhZG93OiAwIDAgMXB4ICMxZDY4YTc7XG59XG5cbmlucHV0OmNoZWNrZWQgKyAuc2xpZGVyOmJlZm9yZSB7XG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMTZweCk7XG4gICAgLW1zLXRyYW5zZm9ybTogdHJhbnNsYXRlWCgxNnB4KTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMTZweCk7XG59XG5cbi5zbGlkZXIucm91bmQge1xuICAgIGJvcmRlci1yYWRpdXM6IDM0cHg7XG59XG5cbi5zbGlkZXIucm91bmQ6YmVmb3JlIHtcbiAgICBib3JkZXItcmFkaXVzOiA1MCU7XG59XG48L3N0eWxlPlxuIl0sIm5hbWVzIjpbIm5hbWUiLCJjb21wb25lbnRzIiwibXVsdGlzZWxlY3QiLCJkYXRhIiwiYiIsImNvbnRlbnQiLCJ2YWx1ZSIsInQiLCJjbGFzc2VzIiwiZWxtcyIsImRlZmF1bHRzIiwicHJvcHMiLCJtb3VudGVkIiwibWV0aG9kcyIsInVwZCIsIm1ha2VWYWwiLCJ1cGRhdGVKZGF0YSIsImRlZiIsImUiLCJjb25zb2xlIiwiaGFuZGxlSW5wdXQiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/MetaElement.vue?vue&type=script&lang=js&\n");
/***/ }),
/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/MetaPrice.vue?vue&type=script&lang=js&":
/*!****************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/MetaPrice.vue?vue&type=script&lang=js& ***!
\****************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it[\"return\"] != null) it[\"return\"](); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\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//\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//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n name: \"MetaPrice\",\n data: function data() {\n return {\n quantities: [],\n elms: [],\n t: window.translate,\n q: {},\n last: [],\n onSelectImage: 0,\n modal: false\n };\n },\n props: ['jdata', 'defz', 'images', 'counts'],\n mounted: function mounted() {\n this.updateJdata(this.jdata, this.defz);\n },\n watch: {\n quantities: {\n handler: function handler(val, oldVal) {// Return the object that changed\n // console.log('changed qn');\n },\n deep: true\n }\n },\n methods: {\n changeImg: function changeImg($k) {\n this.quantities[this.onSelectImage].image = $k;\n },\n showModal: function showModal(i) {\n // this.showModal(i);\n this.onSelectImage = i;\n this.modal = true;\n },\n hideModal: function hideModal() {\n this.modal = false;\n },\n updateJdata: function updateJdata(e) {\n var def = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n\n try {\n // make defaults\n if (this.quantities.length == 0) {\n for (var d in def) {\n this.quantities[d] = JSON.parse(def[d]);\n this.quantities[d].count = this.counts[d];\n }\n }\n\n if (typeof e == 'string') {\n this.elms = JSON.parse(e);\n } else {\n this.elms = e;\n }\n\n var _iterator = _createForOfIteratorHelper(this.elms),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var _e = _step.value;\n\n try {\n _e.options = JSON.parse(_e.options);\n } catch (_unused) {}\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n } catch (e) {\n this.elms = [];\n console.log('no meta ele', e.message);\n }\n\n this.$forceUpdate();\n },\n updateForce: function updateForce(e) {\n // this.quantities[e.target.getAttribute('data-id')][e.target.getAttribute('data-key')] = e.target.value;\n this.quantities.push({});\n this.quantities.pop();\n },\n adding: function adding() {\n var temp = {\n count: 0,\n price: 0,\n image: 0\n };\n\n var _iterator2 = _createForOfIteratorHelper(this.elms),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var meta = _step2.value;\n temp[meta.name] = '';\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n\n this.quantities.push(temp);\n },\n parsing: function parsing(e) {\n try {\n return JSON.parse(e);\n } catch (e) {\n console.log(e.message);\n return [];\n }\n },\n rem: function rem(i) {\n // console.log(this.quantities[i]);\n this.quantities.splice(i, 1);\n }\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01WzBdLnJ1bGVzWzBdLnVzZVswXSEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvTWV0YVByaWNlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQW1HQSxpRUFBZTtFQUNmQSxpQkFEQTtFQUVBQztJQUNBO01BQ0FDLGNBREE7TUFFQUMsUUFGQTtNQUdBQyxtQkFIQTtNQUlBQyxLQUpBO01BS0FDLFFBTEE7TUFNQUMsZ0JBTkE7TUFPQUM7SUFQQTtFQVNBLENBWkE7RUFhQUMsNENBYkE7RUFjQUMsT0FkQSxxQkFjQTtJQUNBO0VBQ0EsQ0FoQkE7RUFpQkFDO0lBQ0FUO01BQ0FVLHdDQUNBO1FBQ0E7TUFDQSxDQUpBO01BS0FDO0lBTEE7RUFEQSxDQWpCQTtFQTBCQUM7SUFDQUM7TUFDQTtJQUNBLENBSEE7SUFJQUM7TUFDQTtNQUNBO01BQ0E7SUFDQSxDQVJBO0lBU0FDO01BRUE7SUFDQSxDQVpBO0lBYUFDO01BQUE7O01BQ0E7UUFFQTtRQUNBO1VBQ0E7WUFDQTtZQUNBO1VBQ0E7UUFDQTs7UUFFQTtVQUNBO1FBQ0EsQ0FGQSxNQUVBO1VBQ0E7UUFDQTs7UUFkQSwyQ0FpQkEsU0FqQkE7UUFBQTs7UUFBQTtVQWlCQTtZQUFBOztZQUNBO2NBQ0FDO1lBQ0EsQ0FGQSxDQUVBLGlCQUNBO1VBQ0E7UUF0QkE7VUFBQTtRQUFBO1VBQUE7UUFBQTtNQXlCQSxDQXpCQSxDQXlCQTtRQUNBO1FBQ0FDO01BQ0E7O01BRUE7SUFFQSxDQTlDQTtJQStDQUM7TUFDQTtNQUNBO01BQ0E7SUFDQSxDQW5EQTtJQW9EQUM7TUFDQTtRQUNBQyxRQURBO1FBRUFDLFFBRkE7UUFHQUM7TUFIQTs7TUFEQSw0Q0FNQSxTQU5BO01BQUE7O01BQUE7UUFNQTtVQUFBO1VBQ0FDO1FBQ0E7TUFSQTtRQUFBO01BQUE7UUFBQTtNQUFBOztNQVNBO0lBQ0EsQ0E5REE7SUErREFDO01BQ0E7UUFDQTtNQUNBLENBRkEsQ0FFQTtRQUNBUDtRQUNBO01BQ0E7SUFDQSxDQXRFQTtJQXVFQVEsR0F2RUEsZUF1RUFDLENBdkVBLEVBdUVBO01BQ0E7TUFDQTtJQUNBO0VBMUVBO0FBMUJBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vL3Jlc291cmNlcy9qcy9jb21wb25lbnRzL01ldGFQcmljZS52dWU/ZmU3MCJdLCJzb3VyY2VzQ29udGVudCI6WyI8dGVtcGxhdGU+XG4gICAgPGRpdj5cbiAgICAgICAgPGgzPlxuICAgICAgICAgICAge3sgdC5zcGVjaWFsUXVhbnRpdHkgfX1cbiAgICAgICAgPC9oMz5cbiAgICAgICAgPGRpdiBjbGFzcz1cImJ0biBidG4tc3VjY2VzcyBtYi0zXCIgQGNsaWNrPVwiYWRkaW5nKClcIj5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtcGx1c1wiPjwvaT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJib3JkZXIgcC0yXCIgdi1mb3I9XCIocSxrKSBpbiBxdWFudGl0aWVzXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICAgICAgPGRpdiB2LWZvcj1cIihtZXRhLGkpIGluIGVsbXNcIiB2LWlmPVwibWV0YS5wcmljZWFibGVcIiBjbGFzcz1cImNvbC1tZFwiPlxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgOmZvcj1cIm1ldGEubmFtZStrXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBtZXRhLmxhYmVsIH19XG4gICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgdi1pZj1cIm1ldGEudHlwZSA9PSAnc2VsZWN0JyB8fCBtZXRhLnR5cGUgPT0gJ211bHRpJyB8fCBtZXRhLnR5cGUgPT0gJ3NpbmdsZW11bHRpJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBAY2hhbmdlPVwidXBkYXRlRm9yY2VcIiB2LW1vZGVsPVwicXVhbnRpdGllc1trXVttZXRhLm5hbWVdXCIgOmlkPVwibWV0YS5uYW1lK2tcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Y2xhc3M9XCInZm9ybS1jb250cm9sICcrKHFbbWV0YS5uYW1lXSA9PT0gJyc/J2lzLWludmFsaWQnOicnKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJcIj57eyB0LmNob29zZSB9fTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gOnZhbHVlPVwib3AudmFsdWVcIiB2LWZvcj1cIihvcCxqKSBpbiBtZXRhLm9wdGlvbnNcIj4ge3sgb3AudGl0bGUgfX08L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWVsc2UtaWY9XCJtZXRhLnR5cGUgPT0gJ2NvbG9yJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBAY2hhbmdlPVwidXBkYXRlRm9yY2VcIiB2LW1vZGVsPVwicVttZXRhLm5hbWVdXCIgOmlkPVwibWV0YS5uYW1lK2tcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Y2xhc3M9XCInZm9ybS1jb250cm9sICcrKHF1YW50aXRpZXNba11bbWV0YS5uYW1lXSA9PT0gJyc/J2lzLWludmFsaWQnOicnKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJcIj57eyB0LmNob29zZSB9fTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gOnN0eWxlPVwiJ2JhY2tncm91bmQtY29sb3I6JyArIG8udmFsdWUgXCIgOnZhbHVlPVwiby52YWx1ZVwiIHYtZm9yPVwibyBpbiBtZXRhLm9wdGlvbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgby50aXRsZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtZWxzZS1pZj1cIm1ldGEudHlwZSA9PSAnbnVtYmVyJyB8fCBtZXRhLnR5cGUgPT0gJ3RleHQnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgQGJsdXI9XCJ1cGRhdGVGb3JjZVwiIHR5cGU9XCJ0ZXh0XCIgdi1tb2RlbD1cInF1YW50aXRpZXNba11bbWV0YS5uYW1lXVwiIDppZD1cIm1ldGEubmFtZStrXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Y2xhc3M9XCInZm9ybS1jb250cm9sICcrKHFbbWV0YS5uYW1lXSA9PT0gJyc/J2lzLWludmFsaWQnOicnKVwiPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWVsc2U+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IEBjaGFuZ2U9XCJ1cGRhdGVGb3JjZVwiIHYtbW9kZWw9XCJxdWFudGl0aWVzW2tdW21ldGEubmFtZV1cIiA6aWQ9XCJtZXRhLm5hbWUra1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpjbGFzcz1cIidmb3JtLWNvbnRyb2wgJysocVttZXRhLm5hbWVdID09PSAnJz8naXMtaW52YWxpZCc6JycpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiPnt7IHQuY2hvb3NlIH19PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIjBcIj4ge3sgdC5mYWxzZSB9fTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCIxXCI+IHt7IHQudHJ1ZSB9fTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIDpmb3I9XCIncHJpY2UnK2tcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IHQucHJpY2UgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPGN1cnJlbmN5IEBrZXl1cD1cInVwZGF0ZUZvcmNlXCIgdi1tb2RlbD1cInF1YW50aXRpZXNba10ucHJpY2VcIiA6cGxhY2Vob2xkZXI9XCJ0LnByaWNlXCIgOmlkPVwiJ3ByaWNlJytrXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzZXM9XCJmb3JtLWNvbnRyb2xcIi8+XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIHYtbW9kZWw9XCJxLnByaWNlXCIgOnBsYWNlaG9sZGVyPVwidC5wcmljZVwiIDppZD1cIidwcmljZScra1wiIGNsYXNzPVwiY3VycmVuY3l4IGZvcm0tY29udHJvbFwiPi0tPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZFwiPlxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgOmZvcj1cIidxJytrXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyB0LmNvdW50IH19XG4gICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBAa2V5dXA9XCJ1cGRhdGVGb3JjZVwiIDpkYXRhLWlkPVwia1wiIGRhdGEta2V5PVwiY291bnRcIiB0eXBlPVwidGV4dFwiIDpwbGFjZWhvbGRlcj1cInQucmVtb3ZlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHYtbW9kZWw9XCJxdWFudGl0aWVzW2tdLmNvdW50XCIgOmlkPVwiJ3EnK2tcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGJyPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuIGJ0bi1kYXJrIG10LTJcIiBAY2xpY2s9XCJzaG93TW9kYWwoaylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtaW1hZ2VcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGJyPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuIGJ0bi1kYW5nZXIgbXQtMlwiIEBjbGljaz1cInJlbShrKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgdC5yZW1vdmUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtdHJhc2hcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJxdWFudGl0eVwiIDp2YWx1ZT1cIkpTT04uc3RyaW5naWZ5KHF1YW50aXRpZXMpXCI+XG5cbiAgICAgICAgPGRpdiBpZD1cIm92ZXJsYXlcIiB2LWlmPVwibW9kYWxcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICA8aW1nIHNyYz1cIlwiIGFsdD1cIlwiIGNsYXNzPVwic2VsZWN0ZWRcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmVcIiAvPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0yIGNvbC1zbS02IG10LTNcIiB2LWZvcj1cIihpbWcsa2V5LGkpIGluIGltYWdlc1wiIDprZXk9XCJrZXlcIiBAY2xpY2s9XCJjaGFuZ2VJbWcoaSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgOnNyYz1cImltZy5vcmlnaW5hbF91cmxcIiA6Y2xhc3M9XCJxdWFudGl0aWVzW29uU2VsZWN0SW1hZ2VdLmltYWdlID09PSBpPydzZWxlY3RlZCc6JycgXCIgYWx0PVwiXCI+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxocj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuIGJ0bi1kYW5nZXJcIiBAY2xpY2s9XCJoaWRlTW9kYWxcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZhIGZhLXRpbWVzXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIEBjbGljaz1cImhpZGVNb2RhbFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmEgZmEtY2hlY2tcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICAgIG5hbWU6IFwiTWV0YVByaWNlXCIsXG4gICAgZGF0YTogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcXVhbnRpdGllczogW10sXG4gICAgICAgICAgICBlbG1zOiBbXSxcbiAgICAgICAgICAgIHQ6IHdpbmRvdy50cmFuc2xhdGUsXG4gICAgICAgICAgICBxOiB7fSxcbiAgICAgICAgICAgIGxhc3Q6IFtdLFxuICAgICAgICAgICAgb25TZWxlY3RJbWFnZTogMCxcbiAgICAgICAgICAgIG1vZGFsOiBmYWxzZSxcbiAgICAgICAgfVxuICAgIH0sXG4gICAgcHJvcHM6IFsnamRhdGEnLCAnZGVmeicsICdpbWFnZXMnLCdjb3VudHMnXSxcbiAgICBtb3VudGVkKCkge1xuICAgICAgICB0aGlzLnVwZGF0ZUpkYXRhKHRoaXMuamRhdGEsIHRoaXMuZGVmeik7XG4gICAgfSxcbiAgICB3YXRjaDoge1xuICAgICAgICBxdWFudGl0aWVzOiB7XG4gICAgICAgICAgICBoYW5kbGVyOiBmdW5jdGlvbiAodmFsLCBvbGRWYWwpIHtcbiAgICAgICAgICAgICAgICAvLyBSZXR1cm4gdGhlIG9iamVjdCB0aGF0IGNoYW5nZWRcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnY2hhbmdlZCBxbicpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRlZXA6IHRydWVcbiAgICAgICAgfVxuICAgIH0sXG4gICAgbWV0aG9kczoge1xuICAgICAgICBjaGFuZ2VJbWc6ZnVuY3Rpb24gKCRrKSB7XG4gICAgICAgICAgICB0aGlzLnF1YW50aXRpZXNbdGhpcy5vblNlbGVjdEltYWdlXS5pbWFnZSA9ICRrO1xuICAgICAgICB9LFxuICAgICAgICBzaG93TW9kYWw6IGZ1bmN0aW9uIChpKSB7XG4gICAgICAgICAgICAvLyB0aGlzLnNob3dNb2RhbChpKTtcbiAgICAgICAgICAgIHRoaXMub25TZWxlY3RJbWFnZSA9IGk7XG4gICAgICAgICAgICB0aGlzLm1vZGFsID0gdHJ1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgaGlkZU1vZGFsOmZ1bmN0aW9uICgpe1xuXG4gICAgICAgICAgICB0aGlzLm1vZGFsID0gZmFsc2U7XG4gICAgICAgIH0sXG4gICAgICAgIHVwZGF0ZUpkYXRhOiBmdW5jdGlvbiAoZSwgZGVmID0gW10pIHtcbiAgICAgICAgICAgIHRyeSB7XG5cbiAgICAgICAgICAgICAgICAvLyBtYWtlIGRlZmF1bHRzXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucXVhbnRpdGllcy5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGQgaW4gZGVmKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnF1YW50aXRpZXNbZF0gPSBKU09OLnBhcnNlKGRlZltkXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnF1YW50aXRpZXNbZF0uY291bnQgPSB0aGlzLmNvdW50c1tkXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZSA9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVsbXMgPSBKU09OLnBhcnNlKGUpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZWxtcyA9IGU7XG4gICAgICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGUgb2YgdGhpcy5lbG1zKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlLm9wdGlvbnMgPSBKU09OLnBhcnNlKGUub3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVsbXMgPSBbXTtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnbm8gbWV0YSBlbGUnLCBlLm1lc3NhZ2UpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLiRmb3JjZVVwZGF0ZSgpO1xuXG4gICAgICAgIH0sXG4gICAgICAgIHVwZGF0ZUZvcmNlOiBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgLy8gdGhpcy5xdWFudGl0aWVzW2UudGFyZ2V0LmdldEF0dHJpYnV0ZSgnZGF0YS1pZCcpXVtlLnRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEta2V5JyldID0gZS50YXJnZXQudmFsdWU7XG4gICAgICAgICAgICB0aGlzLnF1YW50aXRpZXMucHVzaCh7fSk7XG4gICAgICAgICAgICB0aGlzLnF1YW50aXRpZXMucG9wKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGFkZGluZzogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IHRlbXAgPSB7XG4gICAgICAgICAgICAgICAgY291bnQ6IDAsXG4gICAgICAgICAgICAgICAgcHJpY2U6IDAsXG4gICAgICAgICAgICAgICAgaW1hZ2U6MCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBmb3IgKGNvbnN0IG1ldGEgb2YgdGhpcy5lbG1zKSB7XG4gICAgICAgICAgICAgICAgdGVtcFttZXRhLm5hbWVdID0gJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnF1YW50aXRpZXMucHVzaCh0ZW1wKTtcbiAgICAgICAgfSxcbiAgICAgICAgcGFyc2luZzogZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoZSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coZS5tZXNzYWdlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHJlbShpKSB7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyh0aGlzLnF1YW50aXRpZXNbaV0pO1xuICAgICAgICAgICAgdGhpcy5xdWFudGl0aWVzLnNwbGljZShpLCAxKTtcbiAgICAgICAgfSxcblxuICAgIH1cbn1cbjwvc2NyaXB0PlxuXG48c3R5bGUgc2NvcGVkPlxuI292ZXJsYXkge1xuICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICBsZWZ0OiAwO1xuICAgIHJpZ2h0OiAwO1xuICAgIGJvdHRvbTogMDtcbiAgICB0b3A6IDA7XG4gICAgYmFja2dyb3VuZDogI0ZGRkZGRjk5O1xuICAgIHotaW5kZXg6IDk5OTtcbiAgICBvdmVyZmxvdy15OiBzY3JvbGw7XG59XG5cblxuI292ZXJsYXkgaW1nIHtcbiAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAgb3BhY2l0eTogLjc1O1xufVxuXG4jb3ZlcmxheSBpbWcuc2VsZWN0ZWQge1xuICAgIG9wYWNpdHk6IDE7XG4gICAgYm9yZGVyOiAzcHggZG91YmxlIGJsYWNrO1xufVxuPC9zdHlsZT5cbiJdLCJuYW1lcyI6WyJuYW1lIiwiZGF0YSIsInF1YW50aXRpZXMiLCJlbG1zIiwidCIsInEiLCJsYXN0Iiwib25TZWxlY3RJbWFnZSIsIm1vZGFsIiwicHJvcHMiLCJtb3VudGVkIiwid2F0Y2giLCJoYW5kbGVyIiwiZGVlcCIsIm1ldGhvZHMiLCJjaGFuZ2VJbWciLCJzaG93TW9kYWwiLCJoaWRlTW9kYWwiLCJ1cGRhdGVKZGF0YSIsImUiLCJjb25zb2xlIiwidXBkYXRlRm9yY2UiLCJhZGRpbmciLCJjb3VudCIsInByaWNlIiwiaW1hZ2UiLCJ0ZW1wIiwicGFyc2luZyIsInJlbSIsImkiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/MetaPrice.vue?vue&type=script&lang=js&\n");
/***/ }),
/***/ "./resources/js/app.js":
/*!*****************************!*\
!*** ./resources/js/app.js ***!
\*****************************/
/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
eval("function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return exports; }; var exports = {}, Op = Object.prototype, hasOwn = Op.hasOwnProperty, $Symbol = \"function\" == typeof Symbol ? Symbol : {}, iteratorSymbol = $Symbol.iterator || \"@@iterator\", asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\", toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\"; function define(obj, key, value) { return Object.defineProperty(obj, key, { value: value, enumerable: !0, configurable: !0, writable: !0 }), obj[key]; } try { define({}, \"\"); } catch (err) { define = function define(obj, key, value) { return obj[key] = value; }; } function wrap(innerFn, outerFn, self, tryLocsList) { var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator, generator = Object.create(protoGenerator.prototype), context = new Context(tryLocsList || []); return generator._invoke = function (innerFn, self, context) { var state = \"suspendedStart\"; return function (method, arg) { if (\"executing\" === state) throw new Error(\"Generator is already running\"); if (\"completed\" === state) { if (\"throw\" === method) throw arg; return doneResult(); } for (context.method = method, context.arg = arg;;) { var delegate = context.delegate; if (delegate) { var delegateResult = maybeInvokeDelegate(delegate, context); if (delegateResult) { if (delegateResult === ContinueSentinel) continue; return delegateResult; } } if (\"next\" === context.method) context.sent = context._sent = context.arg;else if (\"throw\" === context.method) { if (\"suspendedStart\" === state) throw state = \"completed\", context.arg; context.dispatchException(context.arg); } else \"return\" === context.method && context.abrupt(\"return\", context.arg); state = \"executing\"; var record = tryCatch(innerFn, self, context); if (\"normal\" === record.type) { if (state = context.done ? \"completed\" : \"suspendedYield\", record.arg === ContinueSentinel) continue; return { value: record.arg, done: context.done }; } \"throw\" === record.type && (state = \"completed\", context.method = \"throw\", context.arg = record.arg); } }; }(innerFn, self, context), generator; } function tryCatch(fn, obj, arg) { try { return { type: \"normal\", arg: fn.call(obj, arg) }; } catch (err) { return { type: \"throw\", arg: err }; } } exports.wrap = wrap; var ContinueSentinel = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var IteratorPrototype = {}; define(IteratorPrototype, iteratorSymbol, function () { return this; }); var getProto = Object.getPrototypeOf, NativeIteratorPrototype = getProto && getProto(getProto(values([]))); NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol) && (IteratorPrototype = NativeIteratorPrototype); var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype); function defineIteratorMethods(prototype) { [\"next\", \"throw\", \"return\"].forEach(function (method) { define(prototype, method, function (arg) { return this._invoke(method, arg); }); }); } function AsyncIterator(generator, PromiseImpl) { function invoke(method, arg, resolve, reject) { var record = tryCatch(generator[method], generator, arg); if (\"throw\" !== record.type) { var result = record.arg, value = result.value; return value && \"object\" == _typeof(value) && hasOwn.call(value, \"__await\") ? PromiseImpl.resolve(value.__await).then(function (value) { invoke(\"next\", value, resolve, reject); }, function (err) { invoke(\"throw\", err, resolve, reject); }) : PromiseImpl.resolve(value).then(function (unwrapped) { result.value = unwrapped, resolve(result); }, function (error) { return invoke(\"throw\", error, resolve, reject); }); } reject(record.arg); } var previousPromise; this._invoke = function (method, arg) { function callInvokeWithMethodAndArg() { return new PromiseImpl(function (resolve, reject) { invoke(method, arg, resolve, reject); }); } return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); }; } function maybeInvokeDelegate(delegate, context) { var method = delegate.iterator[context.method]; if (undefined === method) { if (context.delegate = null, \"throw\" === context.method) { if (delegate.iterator[\"return\"] && (context.method = \"return\", context.arg = undefined, maybeInvokeDelegate(delegate, context), \"throw\" === context.method)) return ContinueSentinel; context.method = \"throw\", context.arg = new TypeError(\"The iterator does not provide a 'throw' method\"); } return ContinueSentinel; } var record = tryCatch(method, delegate.iterator, context.arg); if (\"throw\" === record.type) return context.method = \"throw\", context.arg = record.arg, context.delegate = null, ContinueSentinel; var info = record.arg; return info ? info.done ? (context[delegate.resultName] = info.value, context.next = delegate.nextLoc, \"return\" !== context.method && (context.method = \"next\", context.arg = undefined), context.delegate = null, ContinueSentinel) : info : (context.method = \"throw\", context.arg = new TypeError(\"iterator result is not an object\"), context.delegate = null, ContinueSentinel); } function pushTryEntry(locs) { var entry = { tryLoc: locs[0] }; 1 in locs && (entry.catchLoc = locs[1]), 2 in locs && (entry.finallyLoc = locs[2], entry.afterLoc = locs[3]), this.tryEntries.push(entry); } function resetTryEntry(entry) { var record = entry.completion || {}; record.type = \"normal\", delete record.arg, entry.completion = record; } function Context(tryLocsList) { this.tryEntries = [{ tryLoc: \"root\" }], tryLocsList.forEach(pushTryEntry, this), this.reset(!0); } function values(iterable) { if (iterable) { var iteratorMethod = iterable[iteratorSymbol]; if (iteratorMethod) return iteratorMethod.call(iterable); if (\"function\" == typeof iterable.next) return iterable; if (!isNaN(iterable.length)) { var i = -1, next = function next() { for (; ++i < iterable.length;) { if (hasOwn.call(iterable, i)) return next.value = iterable[i], next.done = !1, next; } return next.value = undefined, next.done = !0, next; }; return next.next = next; } } return { next: doneResult }; } function doneResult() { return { value: undefined, done: !0 }; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, define(Gp, \"constructor\", GeneratorFunctionPrototype), define(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, \"GeneratorFunction\"), exports.isGeneratorFunction = function (genFun) { var ctor = \"function\" == typeof genFun && genFun.constructor; return !!ctor && (ctor === GeneratorFunction || \"GeneratorFunction\" === (ctor.displayName || ctor.name)); }, exports.mark = function (genFun) { return Object.setPrototypeOf ? Object.setPrototypeOf(genFun, GeneratorFunctionPrototype) : (genFun.__proto__ = GeneratorFunctionPrototype, define(genFun, toStringTagSymbol, \"GeneratorFunction\")), genFun.prototype = Object.create(Gp), genFun; }, exports.awrap = function (arg) { return { __await: arg }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, asyncIteratorSymbol, function () { return this; }), exports.AsyncIterator = AsyncIterator, exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) { void 0 === PromiseImpl && (PromiseImpl = Promise); var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl); return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) { return result.done ? result.value : iter.next(); }); }, defineIteratorMethods(Gp), define(Gp, toStringTagSymbol, \"Generator\"), define(Gp, iteratorSymbol, function () { return this; }), define(Gp, \"toString\", function () { return \"[object Generator]\"; }), exports.keys = function (object) { var keys = []; for (var key in object) { keys.push(key); } return keys.reverse(), function next() { for (; keys.length;) { var key = keys.pop(); if (key in object) return next.value = key, next.done = !1, next; } return next.done = !0, next; }; }, exports.values = values, Context.prototype = { constructor: Context, reset: function reset(skipTempReset) { if (this.prev = 0, this.next = 0, this.sent = this._sent = undefined, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = undefined, this.tryEntries.forEach(resetTryEntry), !skipTempReset) for (var name in this) { \"t\" === name.charAt(0) && hasOwn.call(this, name) && !isNaN(+name.slice(1)) && (this[name] = undefined); } }, stop: function stop() { this.done = !0; var rootRecord = this.tryEntries[0].completion; if (\"throw\" === rootRecord.type) throw rootRecord.arg; return this.rval; }, dispatchException: function dispatchException(exception) { if (this.done) throw exception; var context = this; function handle(loc, caught) { return record.type = \"throw\", record.arg = exception, context.next = loc, caught && (context.method = \"next\", context.arg = undefined), !!caught; } for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i], record = entry.completion; if (\"root\" === entry.tryLoc) return handle(\"end\"); if (entry.tryLoc <= this.prev) { var hasCatch = hasOwn.call(entry, \"catchLoc\"), hasFinally = hasOwn.call(entry, \"finallyLoc\"); if (hasCatch && hasFinally) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } else if (hasCatch) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); } else { if (!hasFinally) throw new Error(\"try statement without catch or finally\"); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } } } }, abrupt: function abrupt(type, arg) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc <= this.prev && hasOwn.call(entry, \"finallyLoc\") && this.prev < entry.finallyLoc) { var finallyEntry = entry; break; } } finallyEntry && (\"break\" === type || \"continue\" === type) && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc && (finallyEntry = null); var record = finallyEntry ? finallyEntry.completion : {}; return record.type = type, record.arg = arg, finallyEntry ? (this.method = \"next\", this.next = finallyEntry.finallyLoc, ContinueSentinel) : this.complete(record); }, complete: function complete(record, afterLoc) { if (\"throw\" === record.type) throw record.arg; return \"break\" === record.type || \"continue\" === record.type ? this.next = record.arg : \"return\" === record.type ? (this.rval = this.arg = record.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === record.type && afterLoc && (this.next = afterLoc), ContinueSentinel; }, finish: function finish(finallyLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.finallyLoc === finallyLoc) return this.complete(entry.completion, entry.afterLoc), resetTryEntry(entry), ContinueSentinel; } }, \"catch\": function _catch(tryLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc === tryLoc) { var record = entry.completion; if (\"throw\" === record.type) { var thrown = record.arg; resetTryEntry(entry); } return thrown; } } throw new Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(iterable, resultName, nextLoc) { return this.delegate = { iterator: values(iterable), resultName: resultName, nextLoc: nextLoc }, \"next\" === this.method && (this.arg = undefined), ContinueSentinel; } }, exports; }\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it[\"return\"] != null) it[\"return\"](); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\n\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\n\n/**\n * First we will load all of this project's JavaScript dependencies which\n * includes Vue and other libraries. It is a great starting point when\n * building robust, powerful web applications using Vue and Laravel.\n */\n__webpack_require__(/*! ./bootstrap */ \"./resources/js/bootstrap.js\");\n\n__webpack_require__(/*! jquery-sortable/source/js/jquery-sortable */ \"./node_modules/jquery-sortable/source/js/jquery-sortable.js\"); // require('persian-datepicker/dist/js/persian-datepicker.min');\n\n\nvar loadJsAfterDone = ['/js/persian-datepicker.min', '/js/persian-date.min'];\nwindow.Vue = (__webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.esm.js\")[\"default\"]);\n\n__webpack_require__(/*! ./wizard */ \"./resources/js/wizard.js\");\n\n__webpack_require__(/*! ./currncy */ \"./resources/js/currncy.js\");\n\n__webpack_require__(/*! ./multi-image-uploader */ \"./resources/js/multi-image-uploader.js\");\n\n__webpack_require__(/*! ./propz */ \"./resources/js/propz.js\");\n\n__webpack_require__(/*! ./product */ \"./resources/js/product.js\");\n\n__webpack_require__(/*! ./customer */ \"./resources/js/customer.js\");\n\n__webpack_require__(/*! ./other */ \"./resources/js/other.js\");\n\n__webpack_require__(/*! ./general */ \"./resources/js/general.js\");\n/**\n * The following block of code may be used to automatically register your\n * Vue components. It will recursively scan this directory for the Vue\n * components and automatically register them with their \"basename\".\n *\n * Eg. ./components/ExampleComponent.vue -> <example-component></example-component>\n */\n// const files = require.context('./', true, /\\.vue$/i)\n// files.keys().map(key => Vue.component(key.split('/').pop().split('.')[0], files(key).default))\n\n\nVue.component('example-component', (__webpack_require__(/*! ./components/ExampleComponent.vue */ \"./resources/js/components/ExampleComponent.vue\")[\"default\"]));\n/**\n * Next, we will create a fresh Vue application instance and attach it to\n * the page. Then, you may begin adding components to this application\n * or customize the JavaScript scaffolding to fit your unique needs.\n */\n\nwindow.addEventListener(\"load\", /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {\n var _iterator, _step, js;\n\n return _regeneratorRuntime().wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n _iterator = _createForOfIteratorHelper(loadJsAfterDone);\n _context.prev = 1;\n\n _iterator.s();\n\n case 3:\n if ((_step = _iterator.n()).done) {\n _context.next = 9;\n break;\n }\n\n js = _step.value;\n _context.next = 7;\n return $.getScript(js + \".js\");\n\n case 7:\n _context.next = 3;\n break;\n\n case 9:\n _context.next = 14;\n break;\n\n case 11:\n _context.prev = 11;\n _context.t0 = _context[\"catch\"](1);\n\n _iterator.e(_context.t0);\n\n case 14:\n _context.prev = 14;\n\n _iterator.f();\n\n return _context.finish(14);\n\n case 17:\n $('.dtp').each(function () {\n $(this).persianDatepicker({\n observer: true,\n initialValue: false,\n format: 'YYYY/MM/DD',\n altField: $(this).data('reuslt')\n });\n });\n $('.dtp').dblclick(function () {\n $(this).val('-');\n $($(this).data('reuslt')).val('');\n });\n\n case 19:\n case \"end\":\n return _context.stop();\n }\n }\n }, _callee, null, [[1, 11, 14, 17]]);\n})));\nVue.component('example-component', (__webpack_require__(/*! ./components/ExampleComponent.vue */ \"./resources/js/components/ExampleComponent.vue\")[\"default\"]));\nVue.component('meta-price', (__webpack_require__(/*! ./components/MetaPrice.vue */ \"./resources/js/components/MetaPrice.vue\")[\"default\"]));\nVue.component('currency', (__webpack_require__(/*! ./components/CurrencyInput.vue */ \"./resources/js/components/CurrencyInput.vue\")[\"default\"]));\nVue.component('meta-element', (__webpack_require__(/*! ./components/MetaElement.vue */ \"./resources/js/components/MetaElement.vue\")[\"default\"]));\nvar app = new Vue({\n el: '#app',\n data: {\n metaz: '123',\n jdata: [],\n def: []\n },\n mounted: function mounted() {},\n created: function created() {\n if (document.querySelector('#jDataSrc') !== undefined) {\n try {\n this.jdata = JSON.parse(document.querySelector('#jDataSrc').value);\n this.def = JSON.parse(document.querySelector('#jDef').value);\n } catch (_unused) {\n console.log('json error: for meta product page');\n }\n }\n },\n methods: {},\n watch: {\n jdata: {\n handler: function handler(n) {\n this.$refs.metaEl.updateJdata(n);\n this.$refs.metaPr.updateJdata(n);\n },\n deep: true\n }\n }\n});\nwindow.app = app;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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c0Q7TUFDbEQsSUFBSTtRQUNBLEtBQUtOLEtBQUwsR0FBYU8sSUFBSSxDQUFDQyxLQUFMLENBQVdKLFFBQVEsQ0FBQ0MsYUFBVCxDQUF1QixXQUF2QixFQUFvQ0ksS0FBL0MsQ0FBYjtRQUNBLEtBQUtSLEdBQUwsR0FBV00sSUFBSSxDQUFDQyxLQUFMLENBQVdKLFFBQVEsQ0FBQ0MsYUFBVCxDQUF1QixPQUF2QixFQUFnQ0ksS0FBM0MsQ0FBWDtNQUNILENBSEQsQ0FHRSxnQkFBTTtRQUNKQyxPQUFPLENBQUNDLEdBQVIsQ0FBWSxtQ0FBWjtNQUNIO0lBQ0o7RUFDSixDQW5CYTtFQW9CZEMsT0FBTyxFQUFFLEVBcEJLO0VBc0JkQyxLQUFLLEVBQUM7SUFDRmIsS0FBSyxFQUFDO01BQ0ZjLE9BQU8sRUFBRSxpQkFBU0MsQ0FBVCxFQUFZO1FBQ2pCLEtBQUtDLEtBQUwsQ0FBV0MsTUFBWCxDQUFrQkMsV0FBbEIsQ0FBOEJILENBQTlCO1FBQ0EsS0FBS0MsS0FBTCxDQUFXRyxNQUFYLENBQWtCRCxXQUFsQixDQUE4QkgsQ0FBOUI7TUFDSCxDQUpDO01BS0ZLLElBQUksRUFBRTtJQUxKO0VBREo7QUF0QlEsQ0FBUixDQUFWO0FBZ0NBdkMsTUFBTSxDQUFDZ0IsR0FBUCxHQUFhQSxHQUFiIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL2FwcC5qcz9jZWQ2Il0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRmlyc3Qgd2Ugd2lsbCBsb2FkIGFsbCBvZiB0aGlzIHByb2plY3QncyBKYXZhU2NyaXB0IGRlcGVuZGVuY2llcyB3aGljaFxuICogaW5jbHVkZXMgVnVlIGFuZCBvdGhlciBsaWJyYXJpZXMuIEl0IGlzIGEgZ3JlYXQgc3RhcnRpbmcgcG9pbnQgd2hlblxuICogYnVpbGRpbmcgcm9idXN0LCBwb3dlcmZ1bCB3ZWIgYXBwbGljYXRpb25zIHVzaW5nIFZ1ZSBhbmQgTGFyYXZlbC5cbiAqL1xuXG5yZXF1aXJlKCcuL2Jvb3RzdHJhcCcpO1xucmVxdWlyZSgnanF1ZXJ5LXNvcnRhYmxlL3NvdXJjZS9qcy9qcXVlcnktc29ydGFibGUnKTtcbi8vIHJlcXVpcmUoJ3BlcnNpYW4tZGF0ZXBpY2tlci9kaXN0L2pzL3BlcnNpYW4tZGF0ZXBpY2tlci5taW4nKTtcblxubGV0IGxvYWRKc0FmdGVyRG9uZSA9IFtcbiAgICAnL2pzL3BlcnNpYW4tZGF0ZXBpY2tlci5taW4nLFxuICAgICcvanMvcGVyc2lhbi1kYXRlLm1pbidcbl1cblxud2luZG93LlZ1ZSA9IHJlcXVpcmUoJ3Z1ZScpLmRlZmF1bHQ7XG5yZXF1aXJlKCcuL3dpemFyZCcpO1xucmVxdWlyZSgnLi9jdXJybmN5Jyk7XG5yZXF1aXJlKCcuL211bHRpLWltYWdlLXVwbG9hZGVyJyk7XG5yZXF1aXJlKCcuL3Byb3B6Jyk7XG5yZXF1aXJlKCcuL3Byb2R1Y3QnKTtcbnJlcXVpcmUoJy4vY3VzdG9tZXInKVxucmVxdWlyZSgnLi9vdGhlcicpO1xucmVxdWlyZSgnLi9nZW5lcmFsJyk7XG5cbi8qKlxuICogVGhlIGZvbGxvd2luZyBibG9jayBvZiBjb2RlIG1heSBiZSB1c2VkIHRvIGF1dG9tYXRpY2FsbHkgcmVnaXN0ZXIgeW91clxuICogVnVlIGNvbXBvbmVudHMuIEl0IHdpbGwgcmVjdXJzaXZlbHkgc2NhbiB0aGlzIGRpcmVjdG9yeSBmb3IgdGhlIFZ1ZVxuICogY29tcG9uZW50cyBhbmQgYXV0b21hdGljYWxseSByZWdpc3RlciB0aGVtIHdpdGggdGhlaXIgXCJiYXNlbmFtZVwiLlxuICpcbiAqIEVnLiAuL2NvbXBvbmVudHMvRXhhbXBsZUNvbXBvbmVudC52dWUgLT4gPGV4YW1wbGUtY29tcG9uZW50PjwvZXhhbXBsZS1jb21wb25lbnQ+XG4gKi9cblxuLy8gY29uc3QgZmlsZXMgPSByZXF1aXJlLmNvbnRleHQoJy4vJywgdHJ1ZSwgL1xcLnZ1ZSQvaSlcbi8vIGZpbGVzLmtleXMoKS5tYXAoa2V5ID0+IFZ1ZS5jb21wb25lbnQoa2V5LnNwbGl0KCcvJykucG9wKCkuc3BsaXQoJy4nKVswXSwgZmlsZXMoa2V5KS5kZWZhdWx0KSlcblxuVnVlLmNvbXBvbmVudCgnZXhhbXBsZS1jb21wb25lbnQnLCByZXF1aXJlKCcuL2NvbXBvbmVudHMvRXhhbXBsZUNvbXBvbmVudC52dWUnKS5kZWZhdWx0KTtcblxuLyoqXG4gKiBOZXh0LCB3ZSB3aWxsIGNyZWF0ZSBhIGZyZXNoIFZ1ZSBhcHBsaWNhdGlvbiBpbnN0YW5jZSBhbmQgYXR0YWNoIGl0IHRvXG4gKiB0aGUgcGFnZS4gVGhlbiwgeW91IG1heSBiZWdpbiBhZGRpbmcgY29tcG9uZW50cyB0byB0aGlzIGFwcGxpY2F0aW9uXG4gKiBvciBjdXN0b21pemUgdGhlIEphdmFTY3JpcHQgc2NhZmZvbGRpbmcgdG8gZml0IHlvdXIgdW5pcXVlIG5lZWRzLlxuICovXG5cblxuXG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImxvYWRcIiwgYXN5bmMgZnVuY3Rpb24oKSB7XG4gICBmb3IoIGNvbnN0IGpzIG9mIGxvYWRKc0FmdGVyRG9uZSkge1xuICAgICAgIGF3YWl0ICQuZ2V0U2NyaXB0KGpzK1wiLmpzXCIpO1xuICAgfVxuICAgJCgnLmR0cCcpLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAkKHRoaXMpLnBlcnNpYW5EYXRlcGlja2VyKHtcbiAgICAgICAgICAgb2JzZXJ2ZXI6IHRydWUsXG4gICAgICAgICAgIGluaXRpYWxWYWx1ZTogZmFsc2UsXG4gICAgICAgICAgIGZvcm1hdDogJ1lZWVkvTU0vREQnLFxuICAgICAgICAgICBhbHRGaWVsZDogJCh0aGlzKS5kYXRhKCdyZXVzbHQnKVxuICAgICAgIH0pO1xuICAgfSk7XG4gICAgJCgnLmR0cCcpLmRibGNsaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICQodGhpcykudmFsKCctJyk7XG4gICAgICAkKCQodGhpcykuZGF0YSgncmV1c2x0JykpLnZhbCgnJyk7XG4gICAgfSk7XG5cblxuXG59KTtcblZ1ZS5jb21wb25lbnQoJ2V4YW1wbGUtY29tcG9uZW50JywgcmVxdWlyZSgnLi9jb21wb25lbnRzL0V4YW1wbGVDb21wb25lbnQudnVlJykuZGVmYXVsdCk7XG5WdWUuY29tcG9uZW50KCdtZXRhLXByaWNlJywgcmVxdWlyZSgnLi9jb21wb25lbnRzL01ldGFQcmljZS52dWUnKS5kZWZhdWx0KTtcblZ1ZS5jb21wb25lbnQoJ2N1cnJlbmN5JywgcmVxdWlyZSgnLi9jb21wb25lbnRzL0N1cnJlbmN5SW5wdXQudnVlJykuZGVmYXVsdCk7XG5WdWUuY29tcG9uZW50KCdtZXRhLWVsZW1lbnQnLCByZXF1aXJlKCcuL2NvbXBvbmVudHMvTWV0YUVsZW1lbnQudnVlJykuZGVmYXVsdCk7XG52YXIgYXBwID0gbmV3IFZ1ZSh7XG4gICAgZWw6ICcjYXBwJyxcbiAgICBkYXRhOiB7XG4gICAgICAgIG1ldGF6OiAnMTIzJyxcbiAgICAgICAgamRhdGE6IFtdLFxuICAgICAgICBkZWY6IFtdLFxuICAgIH0sXG4gICAgbW91bnRlZCgpIHtcblxuICAgIH0sXG4gICAgY3JlYXRlZCgpIHtcbiAgICAgICAgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNqRGF0YVNyYycpICE9PSB1bmRlZmluZWQpe1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICB0aGlzLmpkYXRhID0gSlNPTi5wYXJzZShkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjakRhdGFTcmMnKS52YWx1ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5kZWYgPSBKU09OLnBhcnNlKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNqRGVmJykudmFsdWUpO1xuICAgICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ2pzb24gZXJyb3I6IGZvciBtZXRhIHByb2R1Y3QgcGFnZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbiAgICBtZXRob2RzOiB7XG4gICAgfSxcbiAgICB3YXRjaDp7XG4gICAgICAgIGpkYXRhOntcbiAgICAgICAgICAgIGhhbmRsZXI6IGZ1bmN0aW9uKG4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLiRyZWZzLm1ldGFFbC51cGRhdGVKZGF0YShuKTtcbiAgICAgICAgICAgICAgICB0aGlzLiRyZWZzLm1ldGFQci51cGRhdGVKZGF0YShuKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkZWVwOiB0cnVlXG4gICAgICAgIH0sXG4gICAgfVxufSk7XG53aW5kb3cuYXBwID0gYXBwO1xuIl0sIm5hbWVzIjpbInJlcXVpcmUiLCJsb2FkSnNBZnRlckRvbmUiLCJ3aW5kb3ciLCJWdWUiLCJjb21wb25lbnQiLCJhZGRFdmVudExpc3RlbmVyIiwianMiLCIkIiwiZ2V0U2NyaXB0IiwiZWFjaCIsInBlcnNpYW5EYXRlcGlja2VyIiwib2JzZXJ2ZXIiLCJpbml0aWFsVmFsdWUiLCJmb3JtYXQiLCJhbHRGaWVsZCIsImRhdGEiLCJkYmxjbGljayIsInZhbCIsImFwcCIsImVsIiwibWV0YXoiLCJqZGF0YSIsImRlZiIsIm1vdW50ZWQiLCJjcmVhdGVkIiwiZG9jdW1lbnQiLCJxdWVyeVNlbGVjdG9yIiwidW5kZWZpbmVkIiwiSlNPTiIsInBhcnNlIiwidmFsdWUiLCJjb25zb2xlIiwibG9nIiwibWV0aG9kcyIsIndhdGNoIiwiaGFuZGxlciIsIm4iLCIkcmVmcyIsIm1ldGFFbCIsInVwZGF0ZUpkYXRhIiwibWV0YVByIiwiZGVlcCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./resources/js/app.js\n");
/***/ }),
/***/ "./resources/js/bootstrap.js":
/*!***********************************!*\
!*** ./resources/js/bootstrap.js ***!
\***********************************/
/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
eval("// window._ = require('lodash');\n\n/**\n * We'll load jQuery and the Bootstrap jQuery plugin which provides support\n * for JavaScript based Bootstrap features such as modals and tabs. This\n * code may be modified to fit the specific needs of your application.\n */\ntry {\n // window.Popper = require('popper.js').default;\n window.$ = window.jQuery = window.jq = __webpack_require__(/*! jquery */ \"./node_modules/jquery/dist/jquery.js\"); // require('bootstrap');\n} catch (e) {}\n/**\n * We'll load the axios HTTP library which allows us to easily issue requests\n * to our Laravel back-end. This library automatically handles sending the\n * CSRF token as a header based on the value of the \"XSRF\" token cookie.\n */\n// window.axios = require('axios');\n//\n// window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';\n\n/**\n * Echo exposes an expressive API for subscribing to channels and listening\n * for events that are broadcast by Laravel. Echo and event broadcasting\n * allows your team to easily build robust real-time web applications.\n */\n// import Echo from 'laravel-echo';\n// window.Pusher = require('pusher-js');\n// window.Echo = new Echo({\n// broadcaster: 'pusher',\n// key: process.env.MIX_PUSHER_APP_KEY,\n// cluster: process.env.MIX_PUSHER_APP_CLUSTER,\n// forceTLS: true\n// });\n// console.log('xd');\n\n\nsetTimeout(function () {// $(\"#wrapper.rvnm-mobile\").addClass('rvnm-mobile-wrapper').removeClass('rvnm-mobile');\n // $(\"#navbar\").find('a').each(function () {\n // if ($(this).attr('href') !== undefined){\n // $(this).off('click');\n // $(this).click(function () {\n // window.location.href = $(this).attr('href');\n // })\n // }\n // });\n}, 1200);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvYm9vdHN0cmFwLmpzLmpzIiwibWFwcGluZ3MiOiJBQUFBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQSxJQUFJO0VBQ0E7RUFDQUEsTUFBTSxDQUFDQyxDQUFQLEdBQVdELE1BQU0sQ0FBQ0UsTUFBUCxHQUFnQkYsTUFBTSxDQUFDRyxFQUFQLEdBQVlDLG1CQUFPLENBQUMsb0RBQUQsQ0FBOUMsQ0FGQSxDQUtBO0FBQ0gsQ0FORCxDQU1FLE9BQU9DLENBQVAsRUFBVSxDQUFFO0FBR2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBOzs7QUFDQUMsVUFBVSxDQUFDLFlBQVksQ0FDckI7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0FBQ0QsQ0FWUyxFQVVSLElBVlEsQ0FBViIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3Jlc291cmNlcy9qcy9ib290c3RyYXAuanM/NmRlNyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyB3aW5kb3cuXyA9IHJlcXVpcmUoJ2xvZGFzaCcpO1xuXG4vKipcbiAqIFdlJ2xsIGxvYWQgalF1ZXJ5IGFuZCB0aGUgQm9vdHN0cmFwIGpRdWVyeSBwbHVnaW4gd2hpY2ggcHJvdmlkZXMgc3VwcG9ydFxuICogZm9yIEphdmFTY3JpcHQgYmFzZWQgQm9vdHN0cmFwIGZlYXR1cmVzIHN1Y2ggYXMgbW9kYWxzIGFuZCB0YWJzLiBUaGlzXG4gKiBjb2RlIG1heSBiZSBtb2RpZmllZCB0byBmaXQgdGhlIHNwZWNpZmljIG5lZWRzIG9mIHlvdXIgYXBwbGljYXRpb24uXG4gKi9cblxudHJ5IHtcbiAgICAvLyB3aW5kb3cuUG9wcGVyID0gcmVxdWlyZSgncG9wcGVyLmpzJykuZGVmYXVsdDtcbiAgICB3aW5kb3cuJCA9IHdpbmRvdy5qUXVlcnkgPSB3aW5kb3cuanEgPSByZXF1aXJlKCdqcXVlcnknKTtcblxuXG4gICAgLy8gcmVxdWlyZSgnYm9vdHN0cmFwJyk7XG59IGNhdGNoIChlKSB7fVxuXG5cbi8qKlxuICogV2UnbGwgbG9hZCB0aGUgYXhpb3MgSFRUUCBsaWJyYXJ5IHdoaWNoIGFsbG93cyB1cyB0byBlYXNpbHkgaXNzdWUgcmVxdWVzdHNcbiAqIHRvIG91ciBMYXJhdmVsIGJhY2stZW5kLiBUaGlzIGxpYnJhcnkgYXV0b21hdGljYWxseSBoYW5kbGVzIHNlbmRpbmcgdGhlXG4gKiBDU1JGIHRva2VuIGFzIGEgaGVhZGVyIGJhc2VkIG9uIHRoZSB2YWx1ZSBvZiB0aGUgXCJYU1JGXCIgdG9rZW4gY29va2llLlxuICovXG5cblxuLy8gd2luZG93LmF4aW9zID0gcmVxdWlyZSgnYXhpb3MnKTtcbi8vXG4vLyB3aW5kb3cuYXhpb3MuZGVmYXVsdHMuaGVhZGVycy5jb21tb25bJ1gtUmVxdWVzdGVkLVdpdGgnXSA9ICdYTUxIdHRwUmVxdWVzdCc7XG5cbi8qKlxuICogRWNobyBleHBvc2VzIGFuIGV4cHJlc3NpdmUgQVBJIGZvciBzdWJzY3JpYmluZyB0byBjaGFubmVscyBhbmQgbGlzdGVuaW5nXG4gKiBmb3IgZXZlbnRzIHRoYXQgYXJlIGJyb2FkY2FzdCBieSBMYXJhdmVsLiBFY2hvIGFuZCBldmVudCBicm9hZGNhc3RpbmdcbiAqIGFsbG93cyB5b3VyIHRlYW0gdG8gZWFzaWx5IGJ1aWxkIHJvYnVzdCByZWFsLXRpbWUgd2ViIGFwcGxpY2F0aW9ucy5cbiAqL1xuXG4vLyBpbXBvcnQgRWNobyBmcm9tICdsYXJhdmVsLWVjaG8nO1xuXG4vLyB3aW5kb3cuUHVzaGVyID0gcmVxdWlyZSgncHVzaGVyLWpzJyk7XG5cbi8vIHdpbmRvdy5FY2hvID0gbmV3IEVjaG8oe1xuLy8gICAgIGJyb2FkY2FzdGVyOiAncHVzaGVyJyxcbi8vICAgICBrZXk6IHByb2Nlc3MuZW52Lk1JWF9QVVNIRVJfQVBQX0tFWSxcbi8vICAgICBjbHVzdGVyOiBwcm9jZXNzLmVudi5NSVhfUFVTSEVSX0FQUF9DTFVTVEVSLFxuLy8gICAgIGZvcmNlVExTOiB0cnVlXG4vLyB9KTtcblxuXG4vLyBjb25zb2xlLmxvZygneGQnKTtcbnNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAvLyAkKFwiI3dyYXBwZXIucnZubS1tb2JpbGVcIikuYWRkQ2xhc3MoJ3J2bm0tbW9iaWxlLXdyYXBwZXInKS5yZW1vdmVDbGFzcygncnZubS1tb2JpbGUnKTtcbiAgLy8gJChcIiNuYXZiYXJcIikuZmluZCgnYScpLmVhY2goZnVuY3Rpb24gKCkge1xuICAvLyAgICAgaWYgKCQodGhpcykuYXR0cignaHJlZicpICE9PSB1bmRlZmluZWQpe1xuICAvLyAgICAgICAgICQodGhpcykub2ZmKCdjbGljaycpO1xuICAvLyAgICAgICAgICQodGhpcykuY2xpY2soZnVuY3Rpb24gKCkge1xuICAvLyAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gJCh0aGlzKS5hdHRyKCdocmVmJyk7XG4gIC8vICAgICAgICAgfSlcbiAgLy8gICAgIH1cbiAgLy8gfSk7XG59LDEyMDApO1xuXG5cbiJdLCJuYW1lcyI6WyJ3aW5kb3ciLCIkIiwialF1ZXJ5IiwianEiLCJyZXF1aXJlIiwiZSIsInNldFRpbWVvdXQiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./resources/js/bootstrap.js\n");
/***/ }),
/***/ "./resources/js/currncy.js":
/*!*********************************!*\
!*** ./resources/js/currncy.js ***!
\*********************************/
/***/ (() => {
eval("// by a1gard for commafy input price\nfunction nocomma(num) {\n a = num.replace(/\\,/g, ''); // 1125, but a string, so convert it to number\n\n return a.toString();\n}\n\nfunction commafy(num) {\n num = nocomma(num);\n var str = num.toString().split('.');\n\n if (str[0].length >= 4) {\n str[0] = str[0].replace(/(\\d)(?=(\\d{3})+$)/g, '$1,');\n }\n\n if (str[1] && str[1].length >= 4) {\n str[1] = str[1].replace(/(\\d{3})/g, '$1,');\n }\n\n return str.join('.');\n}\n\n(function ($) {\n $(function () {\n // handle commafy when edit or focus\n $(\".currency\").bind('focus keyup', function () {\n $(this).val(commafy($(this).val()));\n }); // remove comma for form submit ;)\n\n $(\".currency\").bind('blur', function () {\n $(this).val(nocomma($(this).val()));\n });\n });\n})(jQuery);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJub2NvbW1hIiwibnVtIiwiYSIsInJlcGxhY2UiLCJ0b1N0cmluZyIsImNvbW1hZnkiLCJzdHIiLCJzcGxpdCIsImxlbmd0aCIsImpvaW4iLCIkIiwiYmluZCIsInZhbCIsImpRdWVyeSJdLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvY3Vycm5jeS5qcz81NDIzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIGJ5IGExZ2FyZCBmb3IgY29tbWFmeSBpbnB1dCBwcmljZVxuXG5cbmZ1bmN0aW9uIG5vY29tbWEobnVtKSB7XG4gICAgYSA9IG51bS5yZXBsYWNlKC9cXCwvZywgJycpOyAvLyAxMTI1LCBidXQgYSBzdHJpbmcsIHNvIGNvbnZlcnQgaXQgdG8gbnVtYmVyXG4gICAgcmV0dXJuIGEudG9TdHJpbmcoKTtcbn1cblxuZnVuY3Rpb24gY29tbWFmeShudW0pIHtcbiAgICBudW0gPSBub2NvbW1hKG51bSk7XG4gICAgdmFyIHN0ciA9IG51bS50b1N0cmluZygpLnNwbGl0KCcuJyk7XG4gICAgaWYgKHN0clswXS5sZW5ndGggPj0gNCkge1xuXG4gICAgICAgIHN0clswXSA9IHN0clswXS5yZXBsYWNlKC8oXFxkKSg/PShcXGR7M30pKyQpL2csICckMSwnKTtcbiAgICB9XG4gICAgaWYgKHN0clsxXSAmJiBzdHJbMV0ubGVuZ3RoID49IDQpIHtcblxuICAgICAgICBzdHJbMV0gPSBzdHJbMV0ucmVwbGFjZSgvKFxcZHszfSkvZywgJyQxLCcpO1xuICAgIH1cbiAgICByZXR1cm4gc3RyLmpvaW4oJy4nKTtcbn1cblxuXG4oZnVuY3Rpb24gKCQpIHtcbiAgICAkKGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAvLyBoYW5kbGUgY29tbWFmeSB3aGVuIGVkaXQgb3IgZm9jdXNcbiAgICAgICAgJChcIi5jdXJyZW5jeVwiKS5iaW5kKCdmb2N1cyBrZXl1cCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICQodGhpcykudmFsKGNvbW1hZnkoJCh0aGlzKS52YWwoKSkpO1xuICAgICAgICB9KTtcbiAgICAgICAgLy8gcmVtb3ZlIGNvbW1hIGZvciBmb3JtIHN1Ym1pdCA7KVxuICAgICAgICAkKFwiLmN1cnJlbmN5XCIpLmJpbmQoJ2JsdXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAkKHRoaXMpLnZhbChub2NvbW1hKCQodGhpcykudmFsKCkpKTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcbn0pKGpRdWVyeSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBR0EsU0FBU0EsT0FBVCxDQUFpQkMsR0FBakIsRUFBc0I7RUFDbEJDLENBQUMsR0FBR0QsR0FBRyxDQUFDRSxPQUFKLENBQVksS0FBWixFQUFtQixFQUFuQixDQUFKLENBRGtCLENBQ1U7O0VBQzVCLE9BQU9ELENBQUMsQ0FBQ0UsUUFBRixFQUFQO0FBQ0g7O0FBRUQsU0FBU0MsT0FBVCxDQUFpQkosR0FBakIsRUFBc0I7RUFDbEJBLEdBQUcsR0FBR0QsT0FBTyxDQUFDQyxHQUFELENBQWI7RUFDQSxJQUFJSyxHQUFHLEdBQUdMLEdBQUcsQ0FBQ0csUUFBSixHQUFlRyxLQUFmLENBQXFCLEdBQXJCLENBQVY7O0VBQ0EsSUFBSUQsR0FBRyxDQUFDLENBQUQsQ0FBSCxDQUFPRSxNQUFQLElBQWlCLENBQXJCLEVBQXdCO0lBRXBCRixHQUFHLENBQUMsQ0FBRCxDQUFILEdBQVNBLEdBQUcsQ0FBQyxDQUFELENBQUgsQ0FBT0gsT0FBUCxDQUFlLG9CQUFmLEVBQXFDLEtBQXJDLENBQVQ7RUFDSDs7RUFDRCxJQUFJRyxHQUFHLENBQUMsQ0FBRCxDQUFILElBQVVBLEdBQUcsQ0FBQyxDQUFELENBQUgsQ0FBT0UsTUFBUCxJQUFpQixDQUEvQixFQUFrQztJQUU5QkYsR0FBRyxDQUFDLENBQUQsQ0FBSCxHQUFTQSxHQUFHLENBQUMsQ0FBRCxDQUFILENBQU9ILE9BQVAsQ0FBZSxVQUFmLEVBQTJCLEtBQTNCLENBQVQ7RUFDSDs7RUFDRCxPQUFPRyxHQUFHLENBQUNHLElBQUosQ0FBUyxHQUFULENBQVA7QUFDSDs7QUFHRCxDQUFDLFVBQVVDLENBQVYsRUFBYTtFQUNWQSxDQUFDLENBQUMsWUFBWTtJQUVWO0lBQ0FBLENBQUMsQ0FBQyxXQUFELENBQUQsQ0FBZUMsSUFBZixDQUFvQixhQUFwQixFQUFtQyxZQUFZO01BQzNDRCxDQUFDLENBQUMsSUFBRCxDQUFELENBQVFFLEdBQVIsQ0FBWVAsT0FBTyxDQUFDSyxDQUFDLENBQUMsSUFBRCxDQUFELENBQVFFLEdBQVIsRUFBRCxDQUFuQjtJQUNILENBRkQsRUFIVSxDQU1WOztJQUNBRixDQUFDLENBQUMsV0FBRCxDQUFELENBQWVDLElBQWYsQ0FBb0IsTUFBcEIsRUFBNEIsWUFBWTtNQUNwQ0QsQ0FBQyxDQUFDLElBQUQsQ0FBRCxDQUFRRSxHQUFSLENBQVlaLE9BQU8sQ0FBQ1UsQ0FBQyxDQUFDLElBQUQsQ0FBRCxDQUFRRSxHQUFSLEVBQUQsQ0FBbkI7SUFDSCxDQUZEO0VBSUgsQ0FYQSxDQUFEO0FBWUgsQ0FiRCxFQWFHQyxNQWJIIiwiZmlsZSI6Ii4vcmVzb3VyY2VzL2pzL2N1cnJuY3kuanMuanMiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./resources/js/currncy.js\n");
/***/ }),
/***/ "./resources/js/customer.js":
/*!**********************************!*\
!*** ./resources/js/customer.js ***!
\**********************************/
/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
eval("function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it[\"return\"] != null) it[\"return\"](); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nvar data = __webpack_require__(/*! ./plugins/data */ \"./resources/js/plugins/data.js\");\n\nvar isSendSms = false;\n\nfunction nocomma(num) {\n a = num.toString().replace(/\\,/g, ''); // 1125, but a string, so convert it to number\n\n return a.toString();\n}\n\nfunction commafy(num) {\n num = nocomma(num);\n var str = num.toString().split('.');\n\n if (str[0].length >= 4) {\n str[0] = str[0].replace(/(\\d)(?=(\\d{3})+$)/g, '$1,');\n }\n\n if (str[1] && str[1].length >= 4) {\n str[1] = str[1].replace(/(\\d{3})/g, '$1,');\n }\n\n return str.join('.');\n}\n\nfunction findNextTabStop(el) {\n var universe = document.querySelectorAll('input, button, select, textarea, a[href]');\n var list = Array.prototype.filter.call(universe, function (item) {\n return item.tabIndex >= \"0\";\n });\n var index = list.indexOf(el);\n return list[index + 1] || list[0];\n}\n\nfunction findPervTabStop(el) {\n var universe = document.querySelectorAll('input, button, select, textarea, a[href]');\n var list = Array.prototype.filter.call(universe, function (item) {\n return item.tabIndex >= \"0\";\n });\n var index = list.indexOf(el);\n return list[index - 1] || list[0];\n}\n\njQuery(function ($) {\n $('.sms-pass').bind('focus', function () {\n this.setSelectionRange(0, this.value.length);\n });\n $('.sms-pass').bind('keyup', function () {\n if ($(this).val().length == 1) {\n var x = findNextTabStop(this);\n x.focus();\n } else if ($(this).val().length == 0) {\n var _x = findPervTabStop(this);\n\n _x.focus();\n }\n });\n\n if ($(\"#state\").length != 0) {\n var tx = '<option value=\"\"></option>';\n\n var _iterator = _createForOfIteratorHelper(data().states),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var s = _step.value;\n tx += \"<option value=\\\"\".concat(s.id, \"\\\">\").concat(s.name, \"</option>\");\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n\n $(\"#state\").append(tx);\n $(\"#state\").val($(\"#state\").data('val'));\n $(\"#state\").change(function () {\n var v = $(this).val();\n var tx = '';\n\n var _iterator2 = _createForOfIteratorHelper(data().cities),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var city = _step2.value;\n\n if (city.state_id == v) {\n tx += \"<option value=\\\"\".concat(city.id, \"\\\">\").concat(city.name, \"</option>\");\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n\n $(\"#city\").html(tx);\n });\n $(\"#state\").change();\n $(\"#city\").val($(\"#city\").data('val'));\n }\n\n if ($(\"#state_\").length != 0) {\n var tx = '<option value=\"\"></option>';\n\n var _iterator3 = _createForOfIteratorHelper(data().states),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var _s = _step3.value;\n tx += \"<option value=\\\"\".concat(_s.id, \"\\\">\").concat(_s.name, \"</option>\");\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n\n $(\"#state_\").append(tx);\n $(\"#state_\").val($(\"#state_\").data('val'));\n $(\"#state_\").change(function () {\n var v = $(this).val();\n var tx = '';\n\n var _iterator4 = _createForOfIteratorHelper(data().cities),\n _step4;\n\n try {\n for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n var city = _step4.value;\n\n if (city.state_id == v) {\n tx += \"<option value=\\\"\".concat(city.id, \"\\\">\").concat(city.name, \"</option>\");\n }\n }\n } catch (err) {\n _iterator4.e(err);\n } finally {\n _iterator4.f();\n }\n\n $(\"#city_\").html(tx);\n });\n $(\"#state_\").change();\n $(\"#city_\").val($(\"#city_\").data('val'));\n }\n\n $(\"#sms-btn\").bind('click', function () {\n if ($(\"#mobile\").val().length !== 11) {\n window.alertify.error(window.translate.errMobile);\n return;\n }\n\n $(\"#sms-btn\").attr('disabled', true);\n\n if (!isSendSms) {\n axios.post($(this).data('send'), {\n mobile: $(\"#mobile\").val()\n }).then(function (e) {\n if (e.data.OK == true) {\n window.alertify.success(e.data.msg);\n $(\"#sms-code\").slideDown(500);\n $(\"#sms-first\").focus();\n isSendSms = true;\n }\n\n $(\"#sms-btn\").removeAttr('disabled');\n })[\"catch\"](function () {\n window.alertify.error('Server Error');\n $(\"#sms-btn\").removeAttr('disabled');\n });\n } else {\n var pass = '';\n $(\".sms-pass\").each(function () {\n pass += $(this).val();\n });\n var login = $(this).data('customer');\n axios.post($(this).data('check'), {\n mobile: $(\"#mobile\").val(),\n pass: pass\n }).then(function (e) {\n $(\"#sms-btn\").removeAttr('disabled');\n\n if (e.data.OK == true) {\n window.alertify.success(e.data.msg);\n setTimeout(function () {\n window.location.href = login;\n }, 2000);\n } else {\n window.alertify.error(e.data.err);\n }\n })[\"catch\"](function () {\n $(\"#sms-btn\").removeAttr('disabled');\n window.alertify.error('Server Error');\n });\n }\n });\n $(\".count-dec\").bind('click', function () {\n var inp = $(this).parent().find('input');\n\n if (parseInt($(inp).val()) - 1 < 1) {\n $(inp).val(1);\n } else {\n $(inp).val(parseInt($(inp).val()) - 1);\n }\n\n $(inp).change();\n });\n $(\".count-inc\").bind('click', function () {\n var inp = $(this).parent().find('input');\n\n if (parseInt($(inp).val()) + 1 > $(inp).attr('max')) {\n $(inp).val($(inp).attr('max'));\n } else {\n $(inp).val(parseInt($(inp).val()) + 1);\n }\n\n $(inp).change();\n });\n $(\".quantity\").bind('click', function () {\n $(this).closest('td').find('.quantity').removeClass('active');\n $(this).closest('td').find('.quantity input').removeAttr('checked');\n $(this).addClass('active');\n $(this).find('input')[0].checked = true;\n $(this).closest('tr').find('.price-td').attr('data-price', $(this).data('price'));\n $(this).closest('tr').find('.price').text(commafy($(this).data('price')));\n $(this).closest('tr').find('.product-count input').attr('max', $(this).data('count'));\n\n if ($(this).data('count') == 0) {\n $(this).closest('tr').find('.product-count input').attr('max', 0);\n }\n\n updateCard();\n });\n $('.product-count input').bind('change', function () {\n updateCard();\n });\n\n function updateCard() {\n var totalPrice = 0;\n\n var _iterator5 = _createForOfIteratorHelper(document.querySelectorAll('.price-td')),\n _step5;\n\n try {\n for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n var td = _step5.value;\n var price = parseInt($(td).attr('data-price'));\n var count = parseInt($(td).closest('tr').find('.product-count input').val());\n $(td).closest('tr').find('.product-count input').attr('max', $(td).closest('tr').find('.active').data('count')); // maybe need comment\n\n if ($(td).closest('tr').find('.product-count input').attr('max') == '0') {\n $(td).closest('tr').find('.product-count input').attr('max', 1);\n }\n\n totalPrice += price * count;\n } // check price\n\n } catch (err) {\n _iterator5.e(err);\n } finally {\n _iterator5.f();\n }\n\n try {\n var discount = JSON.parse($(\"#discount\").attr('data-discount'));\n\n if (!isNaN(parseInt(discount.amount))) {\n if (discount.type === 'price') {\n totalPrice -= parseInt(discount.amount);\n } else {\n totalPrice -= (100 - parseInt(discount.amount)) * totalPrice / 100;\n }\n }\n } catch (e) {\n console.log(e.message);\n }\n\n var lastprice = totalPrice;\n\n if ($(\".transport:checked\").data('price') !== undefined) {\n lastprice += parseInt($(\".transport:checked\").data('price'));\n } // transport\n\n\n $('#total-card').text(commafy(totalPrice));\n $('#last-price').text(commafy(lastprice));\n }\n\n $(\".reserve\").change(function () {\n if ($(\".reserve:checked\").length > 0) {\n $(\".transport\").removeAttr('checked');\n }\n\n $(\"#resv\").hide();\n $(\"#flexSwitchCheckDefault\").removeAttr('checked');\n updateCard();\n });\n $(\".transport\").change(function () {\n if ($(\".transport:checked\").length > 0) {\n $(\".reserve\").removeAttr('checked');\n }\n\n $(\"#resv\").show();\n updateCard();\n }); // discount\n\n $(\"#discount\").bind('click', function () {\n axios.post($(this).data('url'), {\n code: $(\"#discount-code\").val()\n }).then(function (e) {\n $(\"#discount\").attr('data-discount', JSON.stringify(e.data));\n window.alertify.success(window.translate.discountCodeAccept);\n updateCard();\n })[\"catch\"](function () {\n $(\"#discount\").attr('data-discount', '{}');\n window.alertify.error(window.translate.discountCodeError);\n updateCard();\n });\n });\n $(\"#profile-tab li\").bind('click', function () {\n $(\"#profile-tab li\").removeClass('active');\n $(this).addClass('active');\n $(\".profile-tab.active\").slideUp(300, function () {\n $(this).removeClass('active');\n });\n $($(this).data('id')).slideDown(300, function () {\n $(this).addClass('active');\n });\n });\n updateCard();\n setTimeout(function () {\n if ($(\"#catId\").length > 0) {\n var url = $(\"#catId\").data('url');\n $.get(url, function (e) {\n // console.log(app);\n app.jdata = e[1];\n });\n }\n }, 500);\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Q0FBRCxDQUFZN0IsSUFBWixDQUFpQixLQUFqQixDQUFWO01BQ0E2QixDQUFDLENBQUMyRSxHQUFGLENBQU1ELEdBQU4sRUFBVyxVQUFVN0MsQ0FBVixFQUFhO1FBQ3BCO1FBQ0ErQyxHQUFHLENBQUNDLEtBQUosR0FBWWhELENBQUMsQ0FBQyxDQUFELENBQWI7TUFDSCxDQUhEO0lBSUg7RUFDSixDQVJTLEVBUVAsR0FSTyxDQUFWO0FBU0gsQ0F0T0ssQ0FBTiIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3Jlc291cmNlcy9qcy9jdXN0b21lci5qcz8wNmJiIl0sInNvdXJjZXNDb250ZW50IjpbInZhciBkYXRhID0gcmVxdWlyZSgnLi9wbHVnaW5zL2RhdGEnKTtcbnZhciBpc1NlbmRTbXMgPSBmYWxzZTtcblxuZnVuY3Rpb24gbm9jb21tYShudW0pIHtcbiAgICBhID0gbnVtLnRvU3RyaW5nKCkucmVwbGFjZSgvXFwsL2csICcnKTsgLy8gMTEyNSwgYnV0IGEgc3RyaW5nLCBzbyBjb252ZXJ0IGl0IHRvIG51bWJlclxuICAgIHJldHVybiBhLnRvU3RyaW5nKCk7XG59XG5cbmZ1bmN0aW9uIGNvbW1hZnkobnVtKSB7XG4gICAgbnVtID0gbm9jb21tYShudW0pO1xuICAgIHZhciBzdHIgPSBudW0udG9TdHJpbmcoKS5zcGxpdCgnLicpO1xuICAgIGlmIChzdHJbMF0ubGVuZ3RoID49IDQpIHtcblxuICAgICAgICBzdHJbMF0gPSBzdHJbMF0ucmVwbGFjZSgvKFxcZCkoPz0oXFxkezN9KSskKS9nLCAnJDEsJyk7XG4gICAgfVxuICAgIGlmIChzdHJbMV0gJiYgc3RyWzFdLmxlbmd0aCA+PSA0KSB7XG5cbiAgICAgICAgc3RyWzFdID0gc3RyWzFdLnJlcGxhY2UoLyhcXGR7M30pL2csICckMSwnKTtcbiAgICB9XG4gICAgcmV0dXJuIHN0ci5qb2luKCcuJyk7XG59XG5cbmZ1bmN0aW9uIGZpbmROZXh0VGFiU3RvcChlbCkge1xuICAgIHZhciB1bml2ZXJzZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0LCBidXR0b24sIHNlbGVjdCwgdGV4dGFyZWEsIGFbaHJlZl0nKTtcbiAgICB2YXIgbGlzdCA9IEFycmF5LnByb3RvdHlwZS5maWx0ZXIuY2FsbCh1bml2ZXJzZSwgZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIGl0ZW0udGFiSW5kZXggPj0gXCIwXCJcbiAgICB9KTtcbiAgICB2YXIgaW5kZXggPSBsaXN0LmluZGV4T2YoZWwpO1xuICAgIHJldHVybiBsaXN0W2luZGV4ICsgMV0gfHwgbGlzdFswXTtcbn1cblxuZnVuY3Rpb24gZmluZFBlcnZUYWJTdG9wKGVsKSB7XG4gICAgdmFyIHVuaXZlcnNlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnaW5wdXQsIGJ1dHRvbiwgc2VsZWN0LCB0ZXh0YXJlYSwgYVtocmVmXScpO1xuICAgIHZhciBsaXN0ID0gQXJyYXkucHJvdG90eXBlLmZpbHRlci5jYWxsKHVuaXZlcnNlLCBmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICByZXR1cm4gaXRlbS50YWJJbmRleCA+PSBcIjBcIlxuICAgIH0pO1xuICAgIHZhciBpbmRleCA9IGxpc3QuaW5kZXhPZihlbCk7XG4gICAgcmV0dXJuIGxpc3RbaW5kZXggLSAxXSB8fCBsaXN0WzBdO1xufVxuXG5qUXVlcnkoZnVuY3Rpb24gKCQpIHtcblxuICAgICQoJy5zbXMtcGFzcycpLmJpbmQoJ2ZvY3VzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnNldFNlbGVjdGlvblJhbmdlKDAsIHRoaXMudmFsdWUubGVuZ3RoKTtcbiAgICB9KTtcbiAgICAkKCcuc21zLXBhc3MnKS5iaW5kKCdrZXl1cCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCQodGhpcykudmFsKCkubGVuZ3RoID09IDEpIHtcbiAgICAgICAgICAgIGxldCB4ID0gZmluZE5leHRUYWJTdG9wKHRoaXMpO1xuICAgICAgICAgICAgeC5mb2N1cygpO1xuICAgICAgICB9IGVsc2UgaWYgKCQodGhpcykudmFsKCkubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgIGxldCB4ID0gZmluZFBlcnZUYWJTdG9wKHRoaXMpO1xuICAgICAgICAgICAgeC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgaWYgKCQoXCIjc3RhdGVcIikubGVuZ3RoICE9IDApIHtcblxuICAgICAgICB2YXIgdHggPSAnPG9wdGlvbiB2YWx1ZT1cIlwiPjwvb3B0aW9uPic7XG4gICAgICAgIGZvciAoY29uc3QgcyBvZiBkYXRhKCkuc3RhdGVzKSB7XG4gICAgICAgICAgICB0eCArPSBgPG9wdGlvbiB2YWx1ZT1cIiR7cy5pZH1cIj4ke3MubmFtZX08L29wdGlvbj5gO1xuICAgICAgICB9XG4gICAgICAgICQoXCIjc3RhdGVcIikuYXBwZW5kKHR4KTtcbiAgICAgICAgJChcIiNzdGF0ZVwiKS52YWwoJChcIiNzdGF0ZVwiKS5kYXRhKCd2YWwnKSk7XG5cbiAgICAgICAgJChcIiNzdGF0ZVwiKS5jaGFuZ2UoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHYgPSAkKHRoaXMpLnZhbCgpO1xuICAgICAgICAgICAgdmFyIHR4ID0gJyc7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNpdHkgb2YgZGF0YSgpLmNpdGllcykge1xuICAgICAgICAgICAgICAgIGlmIChjaXR5LnN0YXRlX2lkID09IHYpIHtcbiAgICAgICAgICAgICAgICAgICAgdHggKz0gYDxvcHRpb24gdmFsdWU9XCIke2NpdHkuaWR9XCI+JHtjaXR5Lm5hbWV9PC9vcHRpb24+YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAkKFwiI2NpdHlcIikuaHRtbCh0eCk7XG4gICAgICAgIH0pO1xuICAgICAgICAkKFwiI3N0YXRlXCIpLmNoYW5nZSgpO1xuICAgICAgICAkKFwiI2NpdHlcIikudmFsKCQoXCIjY2l0eVwiKS5kYXRhKCd2YWwnKSk7XG5cbiAgICB9XG5cbiAgICBpZiAoJChcIiNzdGF0ZV9cIikubGVuZ3RoICE9IDApIHtcblxuICAgICAgICB2YXIgdHggPSAnPG9wdGlvbiB2YWx1ZT1cIlwiPjwvb3B0aW9uPic7XG4gICAgICAgIGZvciAoY29uc3QgcyBvZiBkYXRhKCkuc3RhdGVzKSB7XG4gICAgICAgICAgICB0eCArPSBgPG9wdGlvbiB2YWx1ZT1cIiR7cy5pZH1cIj4ke3MubmFtZX08L29wdGlvbj5gO1xuICAgICAgICB9XG4gICAgICAgICQoXCIjc3RhdGVfXCIpLmFwcGVuZCh0eCk7XG4gICAgICAgICQoXCIjc3RhdGVfXCIpLnZhbCgkKFwiI3N0YXRlX1wiKS5kYXRhKCd2YWwnKSk7XG5cbiAgICAgICAgJChcIiNzdGF0ZV9cIikuY2hhbmdlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciB2ID0gJCh0aGlzKS52YWwoKTtcbiAgICAgICAgICAgIHZhciB0eCA9ICcnO1xuICAgICAgICAgICAgZm9yIChjb25zdCBjaXR5IG9mIGRhdGEoKS5jaXRpZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2l0eS5zdGF0ZV9pZCA9PSB2KSB7XG4gICAgICAgICAgICAgICAgICAgIHR4ICs9IGA8b3B0aW9uIHZhbHVlPVwiJHtjaXR5LmlkfVwiPiR7Y2l0eS5uYW1lfTwvb3B0aW9uPmA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJChcIiNjaXR5X1wiKS5odG1sKHR4KTtcbiAgICAgICAgfSk7XG4gICAgICAgICQoXCIjc3RhdGVfXCIpLmNoYW5nZSgpO1xuICAgICAgICAkKFwiI2NpdHlfXCIpLnZhbCgkKFwiI2NpdHlfXCIpLmRhdGEoJ3ZhbCcpKTtcblxuICAgIH1cblxuXG4gICAgJChcIiNzbXMtYnRuXCIpLmJpbmQoJ2NsaWNrJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoJChcIiNtb2JpbGVcIikudmFsKCkubGVuZ3RoICE9PSAxMSkge1xuICAgICAgICAgICAgd2luZG93LmFsZXJ0aWZ5LmVycm9yKHdpbmRvdy50cmFuc2xhdGUuZXJyTW9iaWxlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAkKFwiI3Ntcy1idG5cIikuYXR0cignZGlzYWJsZWQnLCB0cnVlKTtcbiAgICAgICAgaWYgKCFpc1NlbmRTbXMpIHtcbiAgICAgICAgICAgIGF4aW9zLnBvc3QoJCh0aGlzKS5kYXRhKCdzZW5kJyksIHttb2JpbGU6ICQoXCIjbW9iaWxlXCIpLnZhbCgpfSkudGhlbihmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICAgIGlmIChlLmRhdGEuT0sgPT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICB3aW5kb3cuYWxlcnRpZnkuc3VjY2VzcyhlLmRhdGEubXNnKTtcbiAgICAgICAgICAgICAgICAgICAgJChcIiNzbXMtY29kZVwiKS5zbGlkZURvd24oNTAwKTtcbiAgICAgICAgICAgICAgICAgICAgJChcIiNzbXMtZmlyc3RcIikuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICAgICAgaXNTZW5kU21zID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgJChcIiNzbXMtYnRuXCIpLnJlbW92ZUF0dHIoJ2Rpc2FibGVkJyk7XG4gICAgICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgd2luZG93LmFsZXJ0aWZ5LmVycm9yKCdTZXJ2ZXIgRXJyb3InKTtcbiAgICAgICAgICAgICAgICAkKFwiI3Ntcy1idG5cIikucmVtb3ZlQXR0cignZGlzYWJsZWQnKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IHBhc3MgPSAnJztcbiAgICAgICAgICAgICQoXCIuc21zLXBhc3NcIikuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcGFzcyArPSAkKHRoaXMpLnZhbCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBsZXQgbG9naW4gPSAkKHRoaXMpLmRhdGEoJ2N1c3RvbWVyJyk7XG4gICAgICAgICAgICBheGlvcy5wb3N0KCQodGhpcykuZGF0YSgnY2hlY2snKSwge21vYmlsZTogJChcIiNtb2JpbGVcIikudmFsKCksIHBhc3M6IHBhc3N9KS50aGVuKGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgICAgJChcIiNzbXMtYnRuXCIpLnJlbW92ZUF0dHIoJ2Rpc2FibGVkJyk7XG4gICAgICAgICAgICAgICAgaWYgKGUuZGF0YS5PSyA9PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5hbGVydGlmeS5zdWNjZXNzKGUuZGF0YS5tc2cpO1xuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gbG9naW47XG4gICAgICAgICAgICAgICAgICAgIH0sIDIwMDApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5hbGVydGlmeS5lcnJvcihlLmRhdGEuZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgJChcIiNzbXMtYnRuXCIpLnJlbW92ZUF0dHIoJ2Rpc2FibGVkJyk7XG4gICAgICAgICAgICAgICAgd2luZG93LmFsZXJ0aWZ5LmVycm9yKCdTZXJ2ZXIgRXJyb3InKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICAkKFwiLmNvdW50LWRlY1wiKS5iaW5kKCdjbGljaycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbGV0IGlucCA9ICQodGhpcykucGFyZW50KCkuZmluZCgnaW5wdXQnKTtcbiAgICAgICAgaWYgKHBhcnNlSW50KCQoaW5wKS52YWwoKSkgLSAxIDwgMSkge1xuICAgICAgICAgICAgJChpbnApLnZhbCgxKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICQoaW5wKS52YWwocGFyc2VJbnQoJChpbnApLnZhbCgpKSAtIDEpO1xuICAgICAgICB9XG4gICAgICAgICQoaW5wKS5jaGFuZ2UoKTtcbiAgICB9KTtcbiAgICAkKFwiLmNvdW50LWluY1wiKS5iaW5kKCdjbGljaycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbGV0IGlucCA9ICQodGhpcykucGFyZW50KCkuZmluZCgnaW5wdXQnKTtcbiAgICAgICAgaWYgKHBhcnNlSW50KCQoaW5wKS52YWwoKSkgKyAxID4gJChpbnApLmF0dHIoJ21heCcpKSB7XG4gICAgICAgICAgICAkKGlucCkudmFsKCQoaW5wKS5hdHRyKCdtYXgnKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAkKGlucCkudmFsKHBhcnNlSW50KCQoaW5wKS52YWwoKSkgKyAxKTtcbiAgICAgICAgfVxuICAgICAgICAkKGlucCkuY2hhbmdlKCk7XG4gICAgfSk7XG5cbiAgICAkKFwiLnF1YW50aXR5XCIpLmJpbmQoJ2NsaWNrJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAkKHRoaXMpLmNsb3Nlc3QoJ3RkJykuZmluZCgnLnF1YW50aXR5JykucmVtb3ZlQ2xhc3MoJ2FjdGl2ZScpO1xuICAgICAgICAkKHRoaXMpLmNsb3Nlc3QoJ3RkJykuZmluZCgnLnF1YW50aXR5IGlucHV0JykucmVtb3ZlQXR0cignY2hlY2tlZCcpO1xuICAgICAgICAkKHRoaXMpLmFkZENsYXNzKCdhY3RpdmUnKTtcbiAgICAgICAgJCh0aGlzKS5maW5kKCdpbnB1dCcpWzBdLmNoZWNrZWQgPSB0cnVlO1xuICAgICAgICAkKHRoaXMpLmNsb3Nlc3QoJ3RyJykuZmluZCgnLnByaWNlLXRkJykuYXR0cignZGF0YS1wcmljZScsICQodGhpcykuZGF0YSgncHJpY2UnKSk7XG4gICAgICAgICQodGhpcykuY2xvc2VzdCgndHInKS5maW5kKCcucHJpY2UnKS50ZXh0KGNvbW1hZnkoJCh0aGlzKS5kYXRhKCdwcmljZScpKSk7XG4gICAgICAgICQodGhpcykuY2xvc2VzdCgndHInKS5maW5kKCcucHJvZHVjdC1jb3VudCBpbnB1dCcpLmF0dHIoJ21heCcsICQodGhpcykuZGF0YSgnY291bnQnKSk7XG4gICAgICAgIGlmICgkKHRoaXMpLmRhdGEoJ2NvdW50JykgPT0gMCkge1xuICAgICAgICAgICAgJCh0aGlzKS5jbG9zZXN0KCd0cicpLmZpbmQoJy5wcm9kdWN0LWNvdW50IGlucHV0JykuYXR0cignbWF4JywgMCk7XG4gICAgICAgIH1cbiAgICAgICAgdXBkYXRlQ2FyZCgpO1xuICAgIH0pO1xuXG4gICAgJCgnLnByb2R1Y3QtY291bnQgaW5wdXQnKS5iaW5kKCdjaGFuZ2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHVwZGF0ZUNhcmQoKVxuICAgIH0pO1xuXG4gICAgZnVuY3Rpb24gdXBkYXRlQ2FyZCgpIHtcbiAgICAgICAgbGV0IHRvdGFsUHJpY2UgPSAwO1xuICAgICAgICBmb3IgKGNvbnN0IHRkIG9mIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5wcmljZS10ZCcpKSB7XG4gICAgICAgICAgICBsZXQgcHJpY2UgPSBwYXJzZUludCgkKHRkKS5hdHRyKCdkYXRhLXByaWNlJykpO1xuICAgICAgICAgICAgbGV0IGNvdW50ID0gcGFyc2VJbnQoJCh0ZCkuY2xvc2VzdCgndHInKS5maW5kKCcucHJvZHVjdC1jb3VudCBpbnB1dCcpLnZhbCgpKTtcbiAgICAgICAgICAgICQodGQpLmNsb3Nlc3QoJ3RyJykuZmluZCgnLnByb2R1Y3QtY291bnQgaW5wdXQnKS5hdHRyKCdtYXgnLCAkKHRkKS5jbG9zZXN0KCd0cicpLmZpbmQoJy5hY3RpdmUnKS5kYXRhKCdjb3VudCcpKTtcblxuICAgICAgICAgICAgLy8gbWF5YmUgbmVlZCBjb21tZW50XG4gICAgICAgICAgICBpZiAoJCh0ZCkuY2xvc2VzdCgndHInKS5maW5kKCcucHJvZHVjdC1jb3VudCBpbnB1dCcpLmF0dHIoJ21heCcpID09ICcwJyl7XG4gICAgICAgICAgICAgICAgJCh0ZCkuY2xvc2VzdCgndHInKS5maW5kKCcucHJvZHVjdC1jb3VudCBpbnB1dCcpLmF0dHIoJ21heCcsMSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRvdGFsUHJpY2UgKz0gcHJpY2UgKiBjb3VudDtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgLy8gY2hlY2sgcHJpY2VcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGxldCBkaXNjb3VudCA9IEpTT04ucGFyc2UoJChcIiNkaXNjb3VudFwiKS5hdHRyKCdkYXRhLWRpc2NvdW50JykpO1xuICAgICAgICAgICAgaWYgKCFpc05hTihwYXJzZUludChkaXNjb3VudC5hbW91bnQpKSkge1xuICAgICAgICAgICAgICAgIGlmIChkaXNjb3VudC50eXBlID09PSAncHJpY2UnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRvdGFsUHJpY2UgLT0gcGFyc2VJbnQoZGlzY291bnQuYW1vdW50KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0b3RhbFByaWNlIC09ICgoMTAwIC0gcGFyc2VJbnQoZGlzY291bnQuYW1vdW50KSkgKiB0b3RhbFByaWNlKSAvIDEwMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGUubWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGxhc3RwcmljZSA9IHRvdGFsUHJpY2U7XG4gICAgICAgIGlmICgkKFwiLnRyYW5zcG9ydDpjaGVja2VkXCIpLmRhdGEoJ3ByaWNlJykgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbGFzdHByaWNlICs9IHBhcnNlSW50KCQoXCIudHJhbnNwb3J0OmNoZWNrZWRcIikuZGF0YSgncHJpY2UnKSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gdHJhbnNwb3J0XG4gICAgICAgICQoJyN0b3RhbC1jYXJkJykudGV4dChjb21tYWZ5KHRvdGFsUHJpY2UpKTtcbiAgICAgICAgJCgnI2xhc3QtcHJpY2UnKS50ZXh0KGNvbW1hZnkobGFzdHByaWNlKSk7XG5cbiAgICB9XG5cbiAgICAkKFwiLnJlc2VydmVcIikuY2hhbmdlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCQoXCIucmVzZXJ2ZTpjaGVja2VkXCIpLmxlbmd0aCA+IDApe1xuICAgICAgICAgICAgJChcIi50cmFuc3BvcnRcIikucmVtb3ZlQXR0cignY2hlY2tlZCcpO1xuICAgICAgICB9XG4gICAgICAgICQoXCIjcmVzdlwiKS5oaWRlKCk7XG4gICAgICAgICQoXCIjZmxleFN3aXRjaENoZWNrRGVmYXVsdFwiKS5yZW1vdmVBdHRyKCdjaGVja2VkJyk7XG4gICAgICAgIHVwZGF0ZUNhcmQoKTtcbiAgICB9KTtcbiAgICAkKFwiLnRyYW5zcG9ydFwiKS5jaGFuZ2UoZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoJChcIi50cmFuc3BvcnQ6Y2hlY2tlZFwiKS5sZW5ndGggPiAwKXtcbiAgICAgICAgICAgICQoXCIucmVzZXJ2ZVwiKS5yZW1vdmVBdHRyKCdjaGVja2VkJyk7XG4gICAgICAgIH1cbiAgICAgICAgJChcIiNyZXN2XCIpLnNob3coKTtcbiAgICAgICAgdXBkYXRlQ2FyZCgpO1xuICAgIH0pO1xuICAgIC8vIGRpc2NvdW50XG4gICAgJChcIiNkaXNjb3VudFwiKS5iaW5kKCdjbGljaycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYXhpb3MucG9zdCgkKHRoaXMpLmRhdGEoJ3VybCcpLCB7Y29kZTogJChcIiNkaXNjb3VudC1jb2RlXCIpLnZhbCgpfSkudGhlbihmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgJChcIiNkaXNjb3VudFwiKS5hdHRyKCdkYXRhLWRpc2NvdW50JywgSlNPTi5zdHJpbmdpZnkoZS5kYXRhKSk7XG4gICAgICAgICAgICB3aW5kb3cuYWxlcnRpZnkuc3VjY2Vzcyh3aW5kb3cudHJhbnNsYXRlLmRpc2NvdW50Q29kZUFjY2VwdCk7XG4gICAgICAgICAgICB1cGRhdGVDYXJkKCk7XG4gICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICQoXCIjZGlzY291bnRcIikuYXR0cignZGF0YS1kaXNjb3VudCcsICd7fScpO1xuICAgICAgICAgICAgd2luZG93LmFsZXJ0aWZ5LmVycm9yKHdpbmRvdy50cmFuc2xhdGUuZGlzY291bnRDb2RlRXJyb3IpO1xuICAgICAgICAgICAgdXBkYXRlQ2FyZCgpO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgICQoXCIjcHJvZmlsZS10YWIgbGlcIikuYmluZCgnY2xpY2snLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICQoXCIjcHJvZmlsZS10YWIgbGlcIikucmVtb3ZlQ2xhc3MoJ2FjdGl2ZScpO1xuICAgICAgICAkKHRoaXMpLmFkZENsYXNzKCdhY3RpdmUnKTtcbiAgICAgICAgJChcIi5wcm9maWxlLXRhYi5hY3RpdmVcIikuc2xpZGVVcCgzMDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICQodGhpcykucmVtb3ZlQ2xhc3MoJ2FjdGl2ZScpO1xuICAgICAgICB9KTtcbiAgICAgICAgJCgkKHRoaXMpLmRhdGEoJ2lkJykpLnNsaWRlRG93bigzMDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICQodGhpcykuYWRkQ2xhc3MoJ2FjdGl2ZScpO1xuICAgICAgICB9KVxuICAgIH0pO1xuXG4gICAgdXBkYXRlQ2FyZCgpO1xuXG4gICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICgkKFwiI2NhdElkXCIpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGxldCB1cmwgPSAkKFwiI2NhdElkXCIpLmRhdGEoJ3VybCcpO1xuICAgICAgICAgICAgJC5nZXQodXJsLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGFwcCk7XG4gICAgICAgICAgICAgICAgYXBwLmpkYXRhID0gZVsxXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSwgNTAwKTtcbn0pO1xuXG4iXSwibmFtZXMiOlsiZGF0YSIsInJlcXVpcmUiLCJpc1NlbmRTbXMiLCJub2NvbW1hIiwibnVtIiwiYSIsInRvU3RyaW5nIiwicmVwbGFjZSIsImNvbW1hZnkiLCJzdHIiLCJzcGxpdCIsImxlbmd0aCIsImpvaW4iLCJmaW5kTmV4dFRhYlN0b3AiLCJlbCIsInVuaXZlcnNlIiwiZG9jdW1lbnQiLCJxdWVyeVNlbGVjdG9yQWxsIiwibGlzdCIsIkFycmF5IiwicHJvdG90eXBlIiwiZmlsdGVyIiwiY2FsbCIsIml0ZW0iLCJ0YWJJbmRleCIsImluZGV4IiwiaW5kZXhPZiIsImZpbmRQZXJ2VGFiU3RvcCIsImpRdWVyeSIsIiQiLCJiaW5kIiwic2V0U2VsZWN0aW9uUmFuZ2UiLCJ2YWx1ZSIsInZhbCIsIngiLCJmb2N1cyIsInR4Iiwic3RhdGVzIiwicyIsImlkIiwibmFtZSIsImFwcGVuZCIsImNoYW5nZSIsInYiLCJjaXRpZXMiLCJjaXR5Iiwic3RhdGVfaWQiLCJodG1sIiwid2luZG93IiwiYWxlcnRpZnkiLCJlcnJvciIsInRyYW5zbGF0ZSIsImVyck1vYmlsZSIsImF0dHIiLCJheGlvcyIsInBvc3QiLCJtb2JpbGUiLCJ0aGVuIiwiZSIsIk9LIiwic3VjY2VzcyIsIm1zZyIsInNsaWRlRG93biIsInJlbW92ZUF0dHIiLCJwYXNzIiwiZWFjaCIsImxvZ2luIiwic2V0VGltZW91dCIsImxvY2F0aW9uIiwiaHJlZiIsImVyciIsImlucCIsInBhcmVudCIsImZpbmQiLCJwYXJzZUludCIsImNsb3Nlc3QiLCJyZW1vdmVDbGFzcyIsImFkZENsYXNzIiwiY2hlY2tlZCIsInRleHQiLCJ1cGRhdGVDYXJkIiwidG90YWxQcmljZSIsInRkIiwicHJpY2UiLCJjb3VudCIsImRpc2NvdW50IiwiSlNPTiIsInBhcnNlIiwiaXNOYU4iLCJhbW91bnQiLCJ0eXBlIiwiY29uc29sZSIsImxvZyIsIm1lc3NhZ2UiLCJsYXN0cHJpY2UiLCJ1bmRlZmluZWQiLCJoaWRlIiwic2hvdyIsImNvZGUiLCJzdHJpbmdpZnkiLCJkaXNjb3VudENvZGVBY2NlcHQiLCJkaXNjb3VudENvZGVFcnJvciIsInNsaWRlVXAiLCJ1cmwiLCJnZXQiLCJhcHAiLCJqZGF0YSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./resources/js/customer.js\n");
/***/ }),
/***/ "./resources/js/general.js":
/*!*********************************!*\
!*** ./resources/js/general.js ***!
\*********************************/
/***/ (() => {
eval("jQuery(function () {\n $(\"nav [href='\" + window.location.href + \"']\").closest('li').addClass('current'); // console.log(\n\n setTimeout(function () {\n if ($(\"nav .current\").closest('.main-nav').find('> a').attr('href') == undefined) {\n $(\"nav .current\").closest('.main-nav').find('> a').click();\n }\n\n if ($(\"nav .current\").parent().parent().hasClass('rvnm-expandable')) {\n $(\"nav .current\").parent().parent().find('> a').click();\n }\n }, 500);\n $(\"#menu-manage li\").bind('dblclick', function () {\n if (confirm('Are sure?')) {\n $(this).remove();\n }\n }); // );\n // $(\"nav .current\").closest('li').click();\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJqUXVlcnkiLCIkIiwid2luZG93IiwibG9jYXRpb24iLCJocmVmIiwiY2xvc2VzdCIsImFkZENsYXNzIiwic2V0VGltZW91dCIsImZpbmQiLCJhdHRyIiwidW5kZWZpbmVkIiwiY2xpY2siLCJwYXJlbnQiLCJoYXNDbGFzcyIsImJpbmQiLCJjb25maXJtIiwicmVtb3ZlIl0sInNvdXJjZXMiOlsid2VicGFjazovLy8uL3Jlc291cmNlcy9qcy9nZW5lcmFsLmpzPzg0MDgiXSwic291cmNlc0NvbnRlbnQiOlsialF1ZXJ5KGZ1bmN0aW9uICgpIHtcbiAgICAkKFwibmF2IFtocmVmPSdcIiArIHdpbmRvdy5sb2NhdGlvbi5ocmVmICsgXCInXVwiKS5jbG9zZXN0KCdsaScpLmFkZENsYXNzKCdjdXJyZW50Jyk7XG4gICAgLy8gY29uc29sZS5sb2coXG4gICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgIGlmICgkKFwibmF2IC5jdXJyZW50XCIpLmNsb3Nlc3QoJy5tYWluLW5hdicpLmZpbmQoJz4gYScpLmF0dHIoJ2hyZWYnKSA9PSB1bmRlZmluZWQpe1xuICAgICAgICAgICAgICAgJChcIm5hdiAuY3VycmVudFwiKS5jbG9zZXN0KCcubWFpbi1uYXYnKS5maW5kKCc+IGEnKS5jbGljaygpO1xuICAgICAgICAgICB9XG4gICAgICAgICAgIGlmICgkKFwibmF2IC5jdXJyZW50XCIpLnBhcmVudCgpLnBhcmVudCgpLmhhc0NsYXNzKCdydm5tLWV4cGFuZGFibGUnKSl7XG4gICAgICAgICAgICAgICAkKFwibmF2IC5jdXJyZW50XCIpLnBhcmVudCgpLnBhcmVudCgpLmZpbmQoJz4gYScpLmNsaWNrKCk7XG4gICAgICAgICAgIH1cbiAgICAgICB9LDUwMCk7XG5cbiAgICAgICAkKFwiI21lbnUtbWFuYWdlIGxpXCIpLmJpbmQoJ2RibGNsaWNrJyxmdW5jdGlvbiAoKSB7XG4gICAgICAgICBpZiAoY29uZmlybSgnQXJlIHN1cmU/Jykpe1xuICAgICAgICAgICAgICQodGhpcykucmVtb3ZlKCk7XG4gICAgICAgICB9XG4gICAgICAgfSk7XG4gICAgLy8gKTtcbiAgICAvLyAkKFwibmF2IC5jdXJyZW50XCIpLmNsb3Nlc3QoJ2xpJykuY2xpY2soKTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQUEsTUFBTSxDQUFDLFlBQVk7RUFDZkMsQ0FBQyxDQUFDLGdCQUFnQkMsTUFBTSxDQUFDQyxRQUFQLENBQWdCQyxJQUFoQyxHQUF1QyxJQUF4QyxDQUFELENBQStDQyxPQUEvQyxDQUF1RCxJQUF2RCxFQUE2REMsUUFBN0QsQ0FBc0UsU0FBdEUsRUFEZSxDQUVmOztFQUNHQyxVQUFVLENBQUMsWUFBWTtJQUNuQixJQUFJTixDQUFDLENBQUMsY0FBRCxDQUFELENBQWtCSSxPQUFsQixDQUEwQixXQUExQixFQUF1Q0csSUFBdkMsQ0FBNEMsS0FBNUMsRUFBbURDLElBQW5ELENBQXdELE1BQXhELEtBQW1FQyxTQUF2RSxFQUFpRjtNQUM3RVQsQ0FBQyxDQUFDLGNBQUQsQ0FBRCxDQUFrQkksT0FBbEIsQ0FBMEIsV0FBMUIsRUFBdUNHLElBQXZDLENBQTRDLEtBQTVDLEVBQW1ERyxLQUFuRDtJQUNIOztJQUNELElBQUlWLENBQUMsQ0FBQyxjQUFELENBQUQsQ0FBa0JXLE1BQWxCLEdBQTJCQSxNQUEzQixHQUFvQ0MsUUFBcEMsQ0FBNkMsaUJBQTdDLENBQUosRUFBb0U7TUFDaEVaLENBQUMsQ0FBQyxjQUFELENBQUQsQ0FBa0JXLE1BQWxCLEdBQTJCQSxNQUEzQixHQUFvQ0osSUFBcEMsQ0FBeUMsS0FBekMsRUFBZ0RHLEtBQWhEO0lBQ0g7RUFDSixDQVBTLEVBT1IsR0FQUSxDQUFWO0VBU0FWLENBQUMsQ0FBQyxpQkFBRCxDQUFELENBQXFCYSxJQUFyQixDQUEwQixVQUExQixFQUFxQyxZQUFZO0lBQy9DLElBQUlDLE9BQU8sQ0FBQyxXQUFELENBQVgsRUFBeUI7TUFDckJkLENBQUMsQ0FBQyxJQUFELENBQUQsQ0FBUWUsTUFBUjtJQUNIO0VBQ0YsQ0FKRCxFQVpZLENBaUJmO0VBQ0E7QUFDSCxDQW5CSyxDQUFOIiwiZmlsZSI6Ii4vcmVzb3VyY2VzL2pzL2dlbmVyYWwuanMuanMiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./resources/js/general.js\n");
/***/ }),
/***/ "./resources/js/multi-image-uploader.js":
/*!**********************************************!*\
!*** ./resources/js/multi-image-uploader.js ***!
\**********************************************/
/***/ (() => {
eval("function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it[\"return\"] != null) it[\"return\"](); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\n// var uploadFormData = [];\nfunction previewImage(input, i) {\n try {\n var oFReader = new FileReader();\n oFReader.readAsDataURL(input);\n\n oFReader.onload = function (oFREvent) {\n var img = oFREvent.target.result;\n $(\"#uploading-images\").append(\"<div data-id=\\\"\".concat(i, \"\\\" class=\\\"col-xl-3 col-md-4 border p-3\\\">\\n <div class=\\\"img-preview\\\" style=\\\"background-image: url('\").concat(img, \"')\\\"></div>\\n <div class=\\\"btn btn-danger upload-remove-image\\\">\\n <span class=\\\"fa fa-trash\\\"></span>\\n </div>\\n </div>\"));\n };\n\n if (xTimer != undefined) {\n clearTimeout(xTimer);\n }\n\n var xTimer = setTimeout(function () {\n $('.img-preview').css('height', $('.img-preview').width() + 'px');\n $(window).resize();\n }, 300);\n } catch (e) {}\n}\n\n;\njQuery(function () {\n $(\"#uploading-images .image-index\").bind('dblclick', function () {\n $('.indexed').removeClass('indexed');\n $(this).addClass('indexed');\n $(\"#indexImage\").val($(this).data('key'));\n });\n $('.img-preview').height($('.img-preview').width());\n $(\"#upload-drag-drop\").off('click').bind('click', function () {\n $(\"#upload-image-select\").off('click').click();\n });\n $(\"#upload-image-select\").off('change').bind('change', function () {\n for (var i in $(this)[0].files) {\n var file = $(this)[0].files[i];\n uploadFormData.push(file);\n previewImage(file, uploadFormData.length);\n }\n });\n $(document).on('click', \".upload-remove-image\", function () {\n var data = $(this).closest('.col-md-4').data('id');\n delete uploadFormData[data - 1];\n $(this).closest('.col-md-4').slideUp(400, function () {\n $(this).remove();\n });\n });\n $('#upload-drag-drop').off('dragover').on('dragover', function (e) {\n e.preventDefault();\n e.stopPropagation();\n $(this).addClass(\".active\");\n });\n $('#upload-drag-drop').off('dragenter').off('dragstart').on('dragenter dragstart', function (e) {\n e.preventDefault();\n e.stopPropagation();\n $(this).addClass(\"active\");\n });\n $('#upload-drag-drop').off('dragend').off('ondragleave').bind('ondragleave dragend', function (e) {\n e.preventDefault();\n e.stopPropagation();\n $(this).removeClass(\"active\");\n });\n $('#upload-drag-drop').off('drop').on('drop', function (e) {\n $(this).removeClass(\"active\");\n\n if (e.originalEvent.dataTransfer && e.originalEvent.dataTransfer.files.length) {\n e.preventDefault();\n e.stopPropagation();\n /*UPLOAD FILES HERE*/\n\n var _iterator = _createForOfIteratorHelper(e.originalEvent.dataTransfer.files),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var f = _step.value;\n previewImage(f, uploadFormData.length);\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n }\n });\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJwcmV2aWV3SW1hZ2UiLCJpbnB1dCIsImkiLCJvRlJlYWRlciIsIkZpbGVSZWFkZXIiLCJyZWFkQXNEYXRhVVJMIiwib25sb2FkIiwib0ZSRXZlbnQiLCJpbWciLCJ0YXJnZXQiLCJyZXN1bHQiLCIkIiwiYXBwZW5kIiwieFRpbWVyIiwidW5kZWZpbmVkIiwiY2xlYXJUaW1lb3V0Iiwic2V0VGltZW91dCIsImNzcyIsIndpZHRoIiwid2luZG93IiwicmVzaXplIiwiZSIsImpRdWVyeSIsImJpbmQiLCJyZW1vdmVDbGFzcyIsImFkZENsYXNzIiwidmFsIiwiZGF0YSIsImhlaWdodCIsIm9mZiIsImNsaWNrIiwiZmlsZXMiLCJmaWxlIiwidXBsb2FkRm9ybURhdGEiLCJwdXNoIiwibGVuZ3RoIiwiZG9jdW1lbnQiLCJvbiIsImNsb3Nlc3QiLCJzbGlkZVVwIiwicmVtb3ZlIiwicHJldmVudERlZmF1bHQiLCJzdG9wUHJvcGFnYXRpb24iLCJvcmlnaW5hbEV2ZW50IiwiZGF0YVRyYW5zZmVyIiwiZiJdLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvbXVsdGktaW1hZ2UtdXBsb2FkZXIuanM/MDYxMCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyB2YXIgdXBsb2FkRm9ybURhdGEgPSBbXTtcblxuZnVuY3Rpb24gcHJldmlld0ltYWdlKGlucHV0LCBpKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgdmFyIG9GUmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICAgICAgb0ZSZWFkZXIucmVhZEFzRGF0YVVSTChpbnB1dCk7XG5cbiAgICAgICAgb0ZSZWFkZXIub25sb2FkID0gZnVuY3Rpb24gKG9GUkV2ZW50KSB7XG4gICAgICAgICAgICBsZXQgaW1nID0gb0ZSRXZlbnQudGFyZ2V0LnJlc3VsdDtcbiAgICAgICAgICAgICQoXCIjdXBsb2FkaW5nLWltYWdlc1wiKS5hcHBlbmQoYDxkaXYgZGF0YS1pZD1cIiR7aX1cIiBjbGFzcz1cImNvbC14bC0zIGNvbC1tZC00IGJvcmRlciBwLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbWctcHJldmlld1wiIHN0eWxlPVwiYmFja2dyb3VuZC1pbWFnZTogdXJsKCcke2ltZ30nKVwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0biBidG4tZGFuZ2VyIHVwbG9hZC1yZW1vdmUtaW1hZ2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhIGZhLXRyYXNoXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PmApO1xuICAgICAgICB9O1xuICAgICAgICBpZiAoeFRpbWVyICE9IHVuZGVmaW5lZCl7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQoeFRpbWVyKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgeFRpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAkKCcuaW1nLXByZXZpZXcnKS5jc3MoJ2hlaWdodCcsJCgnLmltZy1wcmV2aWV3Jykud2lkdGgoKSsncHgnKTtcbiAgICAgICAgICAgICQod2luZG93KS5yZXNpemUoKTtcbiAgICAgICAgfSwgMzAwKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgfVxuXG59O1xualF1ZXJ5KGZ1bmN0aW9uICgpIHtcblxuICAgICQoXCIjdXBsb2FkaW5nLWltYWdlcyAuaW1hZ2UtaW5kZXhcIikuYmluZCgnZGJsY2xpY2snLGZ1bmN0aW9uICgpIHtcbiAgICAgICQoJy5pbmRleGVkJykucmVtb3ZlQ2xhc3MoJ2luZGV4ZWQnKTtcbiAgICAgICQodGhpcykuYWRkQ2xhc3MoJ2luZGV4ZWQnKTtcbiAgICAgICQoXCIjaW5kZXhJbWFnZVwiKS52YWwoJCh0aGlzKS5kYXRhKCdrZXknKSk7XG4gICAgfSlcbiAgICAkKCcuaW1nLXByZXZpZXcnKS5oZWlnaHQoJCgnLmltZy1wcmV2aWV3Jykud2lkdGgoKSk7XG5cbiAgICAkKFwiI3VwbG9hZC1kcmFnLWRyb3BcIikub2ZmKCdjbGljaycpLmJpbmQoJ2NsaWNrJyxmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgJChcIiN1cGxvYWQtaW1hZ2Utc2VsZWN0XCIpLm9mZignY2xpY2snKS5jbGljaygpO1xuICAgIH0pO1xuICAgICQoXCIjdXBsb2FkLWltYWdlLXNlbGVjdFwiKS5vZmYoJ2NoYW5nZScpLmJpbmQoJ2NoYW5nZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZm9yIChjb25zdCBpIGluICQodGhpcylbMF0uZmlsZXMpIHtcbiAgICAgICAgICAgIHZhciBmaWxlID0gJCh0aGlzKVswXS5maWxlc1tpXTtcbiAgICAgICAgICAgIHVwbG9hZEZvcm1EYXRhLnB1c2goZmlsZSk7XG4gICAgICAgICAgICBwcmV2aWV3SW1hZ2UoZmlsZSwgdXBsb2FkRm9ybURhdGEubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgICQoZG9jdW1lbnQpLm9uKCdjbGljaycsXCIudXBsb2FkLXJlbW92ZS1pbWFnZVwiLGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGRhdGEgPSAkKHRoaXMpLmNsb3Nlc3QoJy5jb2wtbWQtNCcpLmRhdGEoJ2lkJyk7XG4gICAgICAgIGRlbGV0ZSB1cGxvYWRGb3JtRGF0YVtkYXRhLTFdO1xuICAgICAgICAkKHRoaXMpLmNsb3Nlc3QoJy5jb2wtbWQtNCcpLnNsaWRlVXAoNDAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAkKHRoaXMpLnJlbW92ZSgpO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgICQoJyN1cGxvYWQtZHJhZy1kcm9wJykub2ZmKCdkcmFnb3ZlcicpLm9uKFxuICAgICAgICAnZHJhZ292ZXInLFxuICAgICAgICBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgJCh0aGlzKS5hZGRDbGFzcyhcIi5hY3RpdmVcIik7XG4gICAgICAgIH1cbiAgICApO1xuICAgICQoJyN1cGxvYWQtZHJhZy1kcm9wJykub2ZmKCdkcmFnZW50ZXInKS5vZmYoJ2RyYWdzdGFydCcpLm9uKFxuICAgICAgICAnZHJhZ2VudGVyIGRyYWdzdGFydCcsXG4gICAgICAgIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAkKHRoaXMpLmFkZENsYXNzKFwiYWN0aXZlXCIpO1xuICAgICAgICB9XG4gICAgKTtcbiAgICAkKCcjdXBsb2FkLWRyYWctZHJvcCcpLm9mZignZHJhZ2VuZCcpLm9mZignb25kcmFnbGVhdmUnKS5iaW5kKFxuICAgICAgICAnb25kcmFnbGVhdmUgZHJhZ2VuZCcsXG4gICAgICAgIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAkKHRoaXMpLnJlbW92ZUNsYXNzKFwiYWN0aXZlXCIpO1xuICAgICAgICB9XG4gICAgKTtcblxuICAgICQoJyN1cGxvYWQtZHJhZy1kcm9wJykub2ZmKCdkcm9wJykub24oXG4gICAgICAgICdkcm9wJyxcbiAgICAgICAgZnVuY3Rpb24oZSl7XG4gICAgICAgICAgICAkKHRoaXMpLnJlbW92ZUNsYXNzKFwiYWN0aXZlXCIpO1xuICAgICAgICAgICAgaWYoZS5vcmlnaW5hbEV2ZW50LmRhdGFUcmFuc2ZlciAmJiBlLm9yaWdpbmFsRXZlbnQuZGF0YVRyYW5zZmVyLmZpbGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgIC8qVVBMT0FEIEZJTEVTIEhFUkUqL1xuICAgICAgICAgICAgICAgIGZvciggY29uc3QgZiBvZiBlLm9yaWdpbmFsRXZlbnQuZGF0YVRyYW5zZmVyLmZpbGVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHByZXZpZXdJbWFnZShmLCB1cGxvYWRGb3JtRGF0YS5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgKTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTtBQUVBLFNBQVNBLFlBQVQsQ0FBc0JDLEtBQXRCLEVBQTZCQyxDQUE3QixFQUFnQztFQUM1QixJQUFJO0lBQ0EsSUFBSUMsUUFBUSxHQUFHLElBQUlDLFVBQUosRUFBZjtJQUNBRCxRQUFRLENBQUNFLGFBQVQsQ0FBdUJKLEtBQXZCOztJQUVBRSxRQUFRLENBQUNHLE1BQVQsR0FBa0IsVUFBVUMsUUFBVixFQUFvQjtNQUNsQyxJQUFJQyxHQUFHLEdBQUdELFFBQVEsQ0FBQ0UsTUFBVCxDQUFnQkMsTUFBMUI7TUFDQUMsQ0FBQyxDQUFDLG1CQUFELENBQUQsQ0FBdUJDLE1BQXZCLDBCQUErQ1YsQ0FBL0MsdUpBQ2lGTSxHQURqRjtJQU1ILENBUkQ7O0lBU0EsSUFBSUssTUFBTSxJQUFJQyxTQUFkLEVBQXdCO01BQ3BCQyxZQUFZLENBQUNGLE1BQUQsQ0FBWjtJQUNIOztJQUNELElBQUlBLE1BQU0sR0FBR0csVUFBVSxDQUFDLFlBQVk7TUFDaENMLENBQUMsQ0FBQyxjQUFELENBQUQsQ0FBa0JNLEdBQWxCLENBQXNCLFFBQXRCLEVBQStCTixDQUFDLENBQUMsY0FBRCxDQUFELENBQWtCTyxLQUFsQixLQUEwQixJQUF6RDtNQUNBUCxDQUFDLENBQUNRLE1BQUQsQ0FBRCxDQUFVQyxNQUFWO0lBQ0gsQ0FIc0IsRUFHcEIsR0FIb0IsQ0FBdkI7RUFJSCxDQXBCRCxDQW9CRSxPQUFPQyxDQUFQLEVBQVUsQ0FD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LENBQ0kscUJBREosRUFFSSxVQUFTRixDQUFULEVBQVk7SUFDUkEsQ0FBQyxDQUFDb0IsY0FBRjtJQUNBcEIsQ0FBQyxDQUFDcUIsZUFBRjtJQUNBL0IsQ0FBQyxDQUFDLElBQUQsQ0FBRCxDQUFRYSxXQUFSLENBQW9CLFFBQXBCO0VBQ0gsQ0FOTDtFQVNBYixDQUFDLENBQUMsbUJBQUQsQ0FBRCxDQUF1QmtCLEdBQXZCLENBQTJCLE1BQTNCLEVBQW1DUSxFQUFuQyxDQUNJLE1BREosRUFFSSxVQUFTaEIsQ0FBVCxFQUFXO0lBQ1BWLENBQUMsQ0FBQyxJQUFELENBQUQsQ0FBUWEsV0FBUixDQUFvQixRQUFwQjs7SUFDQSxJQUFHSCxDQUFDLENBQUNzQixhQUFGLENBQWdCQyxZQUFoQixJQUFnQ3ZCLENBQUMsQ0FBQ3NCLGFBQUYsQ0FBZ0JDLFlBQWhCLENBQTZCYixLQUE3QixDQUFtQ0ksTUFBdEUsRUFBOEU7TUFDMUVkLENBQUMsQ0FBQ29CLGNBQUY7TUFDQXBCLENBQUMsQ0FBQ3FCLGVBQUY7TUFDQTs7TUFIMEUsMkNBSTFEckIsQ0FBQyxDQUFDc0IsYUFBRixDQUFnQkMsWUFBaEIsQ0FBNkJiLEtBSjZCO01BQUE7O01BQUE7UUFJMUUsb0RBQW9EO1VBQUEsSUFBekNjLENBQXlDO1VBQ2hEN0MsWUFBWSxDQUFDNkMsQ0FBRCxFQUFJWixjQUFjLENBQUNFLE1BQW5CLENBQVo7UUFDSDtNQU55RTtRQUFBO01BQUE7UUFBQTtNQUFBO0lBUTdFO0VBQ0osQ0FiTDtBQWVILENBcEVLLENBQU4iLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvbXVsdGktaW1hZ2UtdXBsb2FkZXIuanMuanMiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./resources/js/multi-image-uploader.js\n");
/***/ }),
/***/ "./resources/js/other.js":
/*!*******************************!*\
!*** ./resources/js/other.js ***!
\*******************************/
/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
eval("window.sel2 = __webpack_require__(/*! select2/dist/js/select2.min */ \"./node_modules/select2/dist/js/select2.min.js\");\njQuery(function () {\n // document.body.style.zoom = (window.innerWidth / window.outerWidth)\n try {\n // window.sel2(jQuery);\n $('.sel2').select2();\n } catch (e) {\n console.log('sel2 error', e.message);\n }\n\n group = $(\".srt\").sortable({\n group: 'sorting',\n onDrop: function onDrop($item, container, _super) {\n var data = group.sortable(\"serialize\").get()[0];\n var jsonString = JSON.stringify(data);\n $(\"#sort-result\").val(jsonString);\n\n _super($item, container);\n }\n });\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvb3RoZXIuanMuanMiLCJtYXBwaW5ncyI6IkFBQUFBLE1BQU0sQ0FBQ0MsSUFBUCxHQUFjQyxtQkFBTyxDQUFDLGtGQUFELENBQXJCO0FBQ0FDLE1BQU0sQ0FBQyxZQUFZO0VBQ2Y7RUFFQSxJQUFJO0lBQ0E7SUFDQUMsQ0FBQyxDQUFDLE9BQUQsQ0FBRCxDQUFXQyxPQUFYO0VBQ0gsQ0FIRCxDQUdFLE9BQU9DLENBQVAsRUFBVTtJQUNSQyxPQUFPLENBQUNDLEdBQVIsQ0FBWSxZQUFaLEVBQTBCRixDQUFDLENBQUNHLE9BQTVCO0VBQ0g7O0VBRURDLEtBQUssR0FBR04sQ0FBQyxDQUFDLE1BQUQsQ0FBRCxDQUFVTyxRQUFWLENBQW1CO0lBQ3ZCRCxLQUFLLEVBQUUsU0FEZ0I7SUFFdkJFLE1BQU0sRUFBRSxnQkFBVUMsS0FBVixFQUFpQkMsU0FBakIsRUFBNEJDLE1BQTVCLEVBQW9DO01BQ3hDLElBQUlDLElBQUksR0FBR04sS0FBSyxDQUFDQyxRQUFOLENBQWUsV0FBZixFQUE0Qk0sR0FBNUIsR0FBa0MsQ0FBbEMsQ0FBWDtNQUNBLElBQUlDLFVBQVUsR0FBR0MsSUFBSSxDQUFDQyxTQUFMLENBQWVKLElBQWYsQ0FBakI7TUFDQVosQ0FBQyxDQUFDLGNBQUQsQ0FBRCxDQUFrQmlCLEdBQWxCLENBQXNCSCxVQUF0Qjs7TUFDQUgsTUFBTSxDQUFDRixLQUFELEVBQVFDLFNBQVIsQ0FBTjtJQUNIO0VBUHNCLENBQW5CLENBQVI7QUFTSCxDQW5CSyxDQUFOIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL290aGVyLmpzPzdiMTciXSwic291cmNlc0NvbnRlbnQiOlsid2luZG93LnNlbDIgPSByZXF1aXJlKCdzZWxlY3QyL2Rpc3QvanMvc2VsZWN0Mi5taW4nKTtcbmpRdWVyeShmdW5jdGlvbiAoKSB7XG4gICAgLy8gZG9jdW1lbnQuYm9keS5zdHlsZS56b29tID0gKHdpbmRvdy5pbm5lcldpZHRoIC8gd2luZG93Lm91dGVyV2lkdGgpXG5cbiAgICB0cnkge1xuICAgICAgICAvLyB3aW5kb3cuc2VsMihqUXVlcnkpO1xuICAgICAgICAkKCcuc2VsMicpLnNlbGVjdDIoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdzZWwyIGVycm9yJywgZS5tZXNzYWdlKTtcbiAgICB9XG5cbiAgICBncm91cCA9ICQoXCIuc3J0XCIpLnNvcnRhYmxlKHtcbiAgICAgICAgZ3JvdXA6ICdzb3J0aW5nJyxcbiAgICAgICAgb25Ecm9wOiBmdW5jdGlvbiAoJGl0ZW0sIGNvbnRhaW5lciwgX3N1cGVyKSB7XG4gICAgICAgICAgICB2YXIgZGF0YSA9IGdyb3VwLnNvcnRhYmxlKFwic2VyaWFsaXplXCIpLmdldCgpWzBdO1xuICAgICAgICAgICAgdmFyIGpzb25TdHJpbmcgPSBKU09OLnN0cmluZ2lmeShkYXRhKTtcbiAgICAgICAgICAgICQoXCIjc29ydC1yZXN1bHRcIikudmFsKGpzb25TdHJpbmcpO1xuICAgICAgICAgICAgX3N1cGVyKCRpdGVtLCBjb250YWluZXIpO1xuICAgICAgICB9XG4gICAgfSk7XG59KTtcblxuIl0sIm5hbWVzIjpbIndpbmRvdyIsInNlbDIiLCJyZXF1aXJlIiwialF1ZXJ5IiwiJCIsInNlbGVjdDIiLCJlIiwiY29uc29sZSIsImxvZyIsIm1lc3NhZ2UiLCJncm91cCIsInNvcnRhYmxlIiwib25Ecm9wIiwiJGl0ZW0iLCJjb250YWluZXIiLCJfc3VwZXIiLCJkYXRhIiwiZ2V0IiwianNvblN0cmluZyIsIkpTT04iLCJzdHJpbmdpZnkiLCJ2YWwiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./resources/js/other.js\n");
/***/ }),
/***/ "./resources/js/plugins/data.js":
/*!**************************************!*\
!*** ./resources/js/plugins/data.js ***!
\**************************************/
/***/ ((module) => {
eval("function data() {\n var data = {};\n data.states = [{\n \"id\": 1,\n \"name\": \"آذربایجان شرقی\",\n \"slug\": \"آذربایجان-شرقی\"\n }, {\n \"id\": 2,\n \"name\": \"آذربایجان غربی\",\n \"slug\": \"آذربایجان-غربی\"\n }, {\n \"id\": 3,\n \"name\": \"اردبیل\",\n \"slug\": \"اردبیل\"\n }, {\n \"id\": 4,\n \"name\": \"اصفهان\",\n \"slug\": \"اصفهان\"\n }, {\n \"id\": 5,\n \"name\": \"البرز\",\n \"slug\": \"البرز\"\n }, {\n \"id\": 6,\n \"name\": \"ایلام\",\n \"slug\": \"ایلام\"\n }, {\n \"id\": 7,\n \"name\": \"بوشهر\",\n \"slug\": \"بوشهر\"\n }, {\n \"id\": 8,\n \"name\": \"تهران\",\n \"slug\": \"تهران\"\n }, {\n \"id\": 9,\n \"name\": \"چهارمحال و بختیاری\",\n \"slug\": \"چهارمحال-و-بختیاری\"\n }, {\n \"id\": 10,\n \"name\": \"خراسان جنوبی\",\n \"slug\": \"خراسان-جنوبی\"\n }, {\n \"id\": 11,\n \"name\": \"خراسان رضوی\",\n \"slug\": \"خراسان-رضوی\"\n }, {\n \"id\": 12,\n \"name\": \"خراسان شمالی\",\n \"slug\": \"خراسان-شمالی\"\n }, {\n \"id\": 13,\n \"name\": \"خوزستان\",\n \"slug\": \"خوزستان\"\n }, {\n \"id\": 14,\n \"name\": \"زنجان\",\n \"slug\": \"زنجان\"\n }, {\n \"id\": 15,\n \"name\": \"سمنان\",\n \"slug\": \"سمنان\"\n }, {\n \"id\": 16,\n \"name\": \"سیستان و بلوچستان\",\n \"slug\": \"سیستان-و-بلوچستان\"\n }, {\n \"id\": 17,\n \"name\": \"فارس\",\n \"slug\": \"فارس\"\n }, {\n \"id\": 18,\n \"name\": \"قزوین\",\n \"slug\": \"قزوین\"\n }, {\n \"id\": 19,\n \"name\": \"قم\",\n \"slug\": \"قم\"\n }, {\n \"id\": 20,\n \"name\": \"کردستان\",\n \"slug\": \"کردستان\"\n }, {\n \"id\": 21,\n \"name\": \"کرمان\",\n \"slug\": \"کرمان\"\n }, {\n \"id\": 22,\n \"name\": \"کرمانشاه\",\n \"slug\": \"کرمانشاه\"\n }, {\n \"id\": 23,\n \"name\": \"کهگیلویه و بویراحمد\",\n \"slug\": \"کهگیلویه-و-بویراحمد\"\n }, {\n \"id\": 24,\n \"name\": \"گلستان\",\n \"slug\": \"گلستان\"\n }, {\n \"id\": 25,\n \"name\": \"لرستان\",\n \"slug\": \"لرستان\"\n }, {\n \"id\": 26,\n \"name\": \"گیلان\",\n \"slug\": \"گیلان\"\n }, {\n \"id\": 27,\n \"name\": \"مازندران\",\n \"slug\": \"مازندران\"\n }, {\n \"id\": 28,\n \"name\": \"مرکزی\",\n \"slug\": \"مرکزی\"\n }, {\n \"id\": 29,\n \"name\": \"هرمزگان\",\n \"slug\": \"هرمزگان\"\n }, {\n \"id\": 30,\n \"name\": \"همدان\",\n \"slug\": \"همدان\"\n }, {\n \"id\": 31,\n \"name\": \"یزد\",\n \"slug\": \"یزد\"\n }];\n data.cities = [{\n \"id\": 1,\n \"name\": \"اسکو\",\n \"slug\": \"اسکو\",\n \"state_id\": 1\n }, {\n \"id\": 2,\n \"name\": \"اهر\",\n \"slug\": \"اهر\",\n \"state_id\": 1\n }, {\n \"id\": 3,\n \"name\": \"ایلخچی\",\n \"slug\": \"ایلخچی\",\n \"state_id\": 1\n }, {\n \"id\": 4,\n \"name\": \"آبش احمد\",\n \"slug\": \"آبش-احمد\",\n \"state_id\": 1\n }, {\n \"id\": 5,\n \"name\": \"آذرشهر\",\n \"slug\": \"آذرشهر\",\n \"state_id\": 1\n }, {\n \"id\": 6,\n \"name\": \"آقکند\",\n \"slug\": \"آقکند\",\n \"state_id\": 1\n }, {\n \"id\": 7,\n \"name\": \"باسمنج\",\n \"slug\": \"باسمنج\",\n \"state_id\": 1\n }, {\n \"id\": 8,\n \"name\": \"بخشایش\",\n \"slug\": \"بخشایش\",\n \"state_id\": 1\n }, {\n \"id\": 9,\n \"name\": \"بستان آباد\",\n \"slug\": \"بستان-آباد\",\n \"state_id\": 1\n }, {\n \"id\": 10,\n \"name\": \"بناب\",\n \"slug\": \"بناب\",\n \"state_id\": 1\n }, {\n \"id\": 11,\n \"name\": \"بناب جدید\",\n \"slug\": \"بناب-جدید\",\n \"state_id\": 1\n }, {\n \"id\": 12,\n \"name\": \"تبریز\",\n \"slug\": \"تبریز\",\n \"state_id\": 1\n }, {\n \"id\": 13,\n \"name\": \"ترک\",\n \"slug\": \"ترک\",\n \"state_id\": 1\n }, {\n \"id\": 14,\n \"name\": \"ترکمانچای\",\n \"slug\": \"ترکمانچای\",\n \"state_id\": 1\n }, {\n \"id\": 15,\n \"name\": \"تسوج\",\n \"slug\": \"تسوج\",\n \"state_id\": 1\n }, {\n \"id\": 16,\n \"name\": \"تیکمه داش\",\n \"slug\": \"تیکمه-داش\",\n \"state_id\": 1\n }, {\n \"id\": 17,\n \"name\": \"جلفا\",\n \"slug\": \"جلفا\",\n \"state_id\": 1\n }, {\n \"id\": 18,\n \"name\": \"خاروانا\",\n \"slug\": \"خاروانا\",\n \"state_id\": 1\n }, {\n \"id\": 19,\n \"name\": \"خامنه\",\n \"slug\": \"خامنه\",\n \"state_id\": 1\n }, {\n \"id\": 20,\n \"name\": \"خراجو\",\n \"slug\": \"خراجو\",\n \"state_id\": 1\n }, {\n \"id\": 21,\n \"name\": \"خسروشهر\",\n \"slug\": \"خسروشهر\",\n \"state_id\": 1\n }, {\n \"id\": 22,\n \"name\": \"خضرلو\",\n \"slug\": \"خضرلو\",\n \"state_id\": 1\n }, {\n \"id\": 23,\n \"name\": \"خمارلو\",\n \"slug\": \"خمارلو\",\n \"state_id\": 1\n }, {\n \"id\": 24,\n \"name\": \"خواجه\",\n \"slug\": \"خواجه\",\n \"state_id\": 1\n }, {\n \"id\": 25,\n \"name\": \"دوزدوزان\",\n \"slug\": \"دوزدوزان\",\n \"state_id\": 1\n }, {\n \"id\": 26,\n \"name\": \"زرنق\",\n \"slug\": \"زرنق\",\n \"state_id\": 1\n }, {\n \"id\": 27,\n \"name\": \"زنوز\",\n \"slug\": \"زنوز\",\n \"state_id\": 1\n }, {\n \"id\": 28,\n \"name\": \"سراب\",\n \"slug\": \"سراب\",\n \"state_id\": 1\n }, {\n \"id\": 29,\n \"name\": \"سردرود\",\n \"slug\": \"سردرود\",\n \"state_id\": 1\n }, {\n \"id\": 30,\n \"name\": \"سهند\",\n \"slug\": \"سهند\",\n \"state_id\": 1\n }, {\n \"id\": 31,\n \"name\": \"سیس\",\n \"slug\": \"سیس\",\n \"state_id\": 1\n }, {\n \"id\": 32,\n \"name\": \"سیه رود\",\n \"slug\": \"سیه-رود\",\n \"state_id\": 1\n }, {\n \"id\": 33,\n \"name\": \"شبستر\",\n \"slug\": \"شبستر\",\n \"state_id\": 1\n }, {\n \"id\": 34,\n \"name\": \"شربیان\",\n \"slug\": \"شربیان\",\n \"state_id\": 1\n }, {\n \"id\": 35,\n \"name\": \"شرفخانه\",\n \"slug\": \"شرفخانه\",\n \"state_id\": 1\n }, {\n \"id\": 36,\n \"name\": \"شندآباد\",\n \"slug\": \"شندآباد\",\n \"state_id\": 1\n }, {\n \"id\": 37,\n \"name\": \"صوفیان\",\n \"slug\": \"صوفیان\",\n \"state_id\": 1\n }, {\n \"id\": 38,\n \"name\": \"عجب شیر\",\n \"slug\": \"عجب-شیر\",\n \"state_id\": 1\n }, {\n \"id\": 39,\n \"name\": \"قره آغاج\",\n \"slug\": \"قره-آغاج\",\n \"state_id\": 1\n }, {\n \"id\": 40,\n \"name\": \"کشکسرای\",\n \"slug\": \"کشکسرای\",\n \"state_id\": 1\n }, {\n \"id\": 41,\n \"name\": \"کلوانق\",\n \"slug\": \"کلوانق\",\n \"state_id\": 1\n }, {\n \"id\": 42,\n \"name\": \"کلیبر\",\n \"slug\": \"کلیبر\",\n \"state_id\": 1\n }, {\n \"id\": 43,\n \"name\": \"کوزه کنان\",\n \"slug\": \"کوزه-کنان\",\n \"state_id\": 1\n }, {\n \"id\": 44,\n \"name\": \"گوگان\",\n \"slug\": \"گوگان\",\n \"state_id\": 1\n }, {\n \"id\": 45,\n \"name\": \"لیلان\",\n \"slug\": \"لیلان\",\n \"state_id\": 1\n }, {\n \"id\": 46,\n \"name\": \"مراغه\",\n \"slug\": \"مراغه\",\n \"state_id\": 1\n }, {\n \"id\": 47,\n \"name\": \"مرند\",\n \"slug\": \"مرند\",\n \"state_id\": 1\n }, {\n \"id\": 48,\n \"name\": \"ملکان\",\n \"slug\": \"ملکان\",\n \"state_id\": 1\n }, {\n \"id\": 49,\n \"name\": \"ملک کیان\",\n \"slug\": \"ملک-کیان\",\n \"state_id\": 1\n }, {\n \"id\": 50,\n \"name\": \"ممقان\",\n \"slug\": \"ممقان\",\n \"state_id\": 1\n }, {\n \"id\": 51,\n \"name\": \"مهربان\",\n \"slug\": \"مهربان\",\n \"state_id\": 1\n }, {\n \"id\": 52,\n \"name\": \"میانه\",\n \"slug\": \"میانه\",\n \"state_id\": 1\n }, {\n \"id\": 53,\n \"name\": \"نظرکهریزی\",\n \"slug\": \"نظرکهریزی\",\n \"state_id\": 1\n }, {\n \"id\": 54,\n \"name\": \"هادی شهر\",\n \"slug\": \"هادی-شهر\",\n \"state_id\": 1\n }, {\n \"id\": 55,\n \"name\": \"هرگلان\",\n \"slug\": \"هرگلان\",\n \"state_id\": 1\n }, {\n \"id\": 56,\n \"name\": \"هریس\",\n \"slug\": \"هریس\",\n \"state_id\": 1\n }, {\n \"id\": 57,\n \"name\": \"هشترود\",\n \"slug\": \"هشترود\",\n \"state_id\": 1\n }, {\n \"id\": 58,\n \"name\": \"هوراند\",\n \"slug\": \"هوراند\",\n \"state_id\": 1\n }, {\n \"id\": 59,\n \"name\": \"وایقان\",\n \"slug\": \"وایقان\",\n \"state_id\": 1\n }, {\n \"id\": 60,\n \"name\": \"ورزقان\",\n \"slug\": \"ورزقان\",\n \"state_id\": 1\n }, {\n \"id\": 61,\n \"name\": \"یامچی\",\n \"slug\": \"یامچی\",\n \"state_id\": 1\n }, {\n \"id\": 62,\n \"name\": \"ارومیه\",\n \"slug\": \"ارومیه\",\n \"state_id\": 2\n }, {\n \"id\": 63,\n \"name\": \"اشنویه\",\n \"slug\": \"اشنویه\",\n \"state_id\": 2\n }, {\n \"id\": 64,\n \"name\": \"ایواوغلی\",\n \"slug\": \"ایواوغلی\",\n \"state_id\": 2\n }, {\n \"id\": 65,\n \"name\": \"آواجیق\",\n \"slug\": \"آواجیق\",\n \"state_id\": 2\n }, {\n \"id\": 66,\n \"name\": \"باروق\",\n \"slug\": \"باروق\",\n \"state_id\": 2\n }, {\n \"id\": 67,\n \"name\": \"بازرگان\",\n \"slug\": \"بازرگان\",\n \"state_id\": 2\n }, {\n \"id\": 68,\n \"name\": \"بوکان\",\n \"slug\": \"بوکان\",\n \"state_id\": 2\n }, {\n \"id\": 69,\n \"name\": \"پلدشت\",\n \"slug\": \"پلدشت\",\n \"state_id\": 2\n }, {\n \"id\": 70,\n \"name\": \"پیرانشهر\",\n \"slug\": \"پیرانشهر\",\n \"state_id\": 2\n }, {\n \"id\": 71,\n \"name\": \"تازه شهر\",\n \"slug\": \"تازه-شهر\",\n \"state_id\": 2\n }, {\n \"id\": 72,\n \"name\": \"تکاب\",\n \"slug\": \"تکاب\",\n \"state_id\": 2\n }, {\n \"id\": 73,\n \"name\": \"چهاربرج\",\n \"slug\": \"چهاربرج\",\n \"state_id\": 2\n }, {\n \"id\": 74,\n \"name\": \"خوی\",\n \"slug\": \"خوی\",\n \"state_id\": 2\n }, {\n \"id\": 75,\n \"name\": \"دیزج دیز\",\n \"slug\": \"دیزج-دیز\",\n \"state_id\": 2\n }, {\n \"id\": 76,\n \"name\": \"ربط\",\n \"slug\": \"ربط\",\n \"state_id\": 2\n }, {\n \"id\": 77,\n \"name\": \"سردشت\",\n \"slug\": \"آذربایجان-غربی-سردشت\",\n \"state_id\": 2\n }, {\n \"id\": 78,\n \"name\": \"سرو\",\n \"slug\": \"سرو\",\n \"state_id\": 2\n }, {\n \"id\": 79,\n \"name\": \"سلماس\",\n \"slug\": \"سلماس\",\n \"state_id\": 2\n }, {\n \"id\": 80,\n \"name\": \"سیلوانه\",\n \"slug\": \"سیلوانه\",\n \"state_id\": 2\n }, {\n \"id\": 81,\n \"name\": \"سیمینه\",\n \"slug\": \"سیمینه\",\n \"state_id\": 2\n }, {\n \"id\": 82,\n \"name\": \"سیه چشمه\",\n \"slug\": \"سیه-چشمه\",\n \"state_id\": 2\n }, {\n \"id\": 83,\n \"name\": \"شاهین دژ\",\n \"slug\": \"شاهین-دژ\",\n \"state_id\": 2\n }, {\n \"id\": 84,\n \"name\": \"شوط\",\n \"slug\": \"شوط\",\n \"state_id\": 2\n }, {\n \"id\": 85,\n \"name\": \"فیرورق\",\n \"slug\": \"فیرورق\",\n \"state_id\": 2\n }, {\n \"id\": 86,\n \"name\": \"قره ضیاءالدین\",\n \"slug\": \"قره-ضیاءالدین\",\n \"state_id\": 2\n }, {\n \"id\": 87,\n \"name\": \"قطور\",\n \"slug\": \"قطور\",\n \"state_id\": 2\n }, {\n \"id\": 88,\n \"name\": \"قوشچی\",\n \"slug\": \"قوشچی\",\n \"state_id\": 2\n }, {\n \"id\": 89,\n \"name\": \"کشاورز\",\n \"slug\": \"کشاورز\",\n \"state_id\": 2\n }, {\n \"id\": 90,\n \"name\": \"گردکشانه\",\n \"slug\": \"گردکشانه\",\n \"state_id\": 2\n }, {\n \"id\": 91,\n \"name\": \"ماکو\",\n \"slug\": \"ماکو\",\n \"state_id\": 2\n }, {\n \"id\": 92,\n \"name\": \"محمدیار\",\n \"slug\": \"محمدیار\",\n \"state_id\": 2\n }, {\n \"id\": 93,\n \"name\": \"محمودآباد\",\n \"slug\": \"آذربایجان-غربی-محمودآباد\",\n \"state_id\": 2\n }, {\n \"id\": 94,\n \"name\": \"مهاباد\",\n \"slug\": \"آذربایجان-غربی-مهاباد\",\n \"state_id\": 2\n }, {\n \"id\": 95,\n \"name\": \"میاندوآب\",\n \"slug\": \"میاندوآب\",\n \"state_id\": 2\n }, {\n \"id\": 96,\n \"name\": \"میرآباد\",\n \"slug\": \"میرآباد\",\n \"state_id\": 2\n }, {\n \"id\": 97,\n \"name\": \"نالوس\",\n \"slug\": \"نالوس\",\n \"state_id\": 2\n }, {\n \"id\": 98,\n \"name\": \"نقده\",\n \"slug\": \"نقده\",\n \"state_id\": 2\n }, {\n \"id\": 99,\n \"name\": \"نوشین\",\n \"slug\": \"نوشین\",\n \"state_id\": 2\n }, {\n \"id\": 100,\n \"name\": \"اردبیل\",\n \"slug\": \"شهر-اردبیل\",\n \"state_id\": 3\n }, {\n \"id\": 101,\n \"name\": \"اصلاندوز\",\n \"slug\": \"اصلاندوز\",\n \"state_id\": 3\n }, {\n \"id\": 102,\n \"name\": \"آبی بیگلو\",\n \"slug\": \"آبی-بیگلو\",\n \"state_id\": 3\n }, {\n \"id\": 103,\n \"name\": \"بیله سوار\",\n \"slug\": \"بیله-سوار\",\n \"state_id\": 3\n }, {\n \"id\": 104,\n \"name\": \"پارس آباد\",\n \"slug\": \"پارس-آباد\",\n \"state_id\": 3\n }, {\n \"id\": 105,\n \"name\": \"تازه کند\",\n \"slug\": \"تازه-کند\",\n \"state_id\": 3\n }, {\n \"id\": 106,\n \"name\": \"تازه کندانگوت\",\n \"slug\": \"تازه-کندانگوت\",\n \"state_id\": 3\n }, {\n \"id\": 107,\n \"name\": \"جعفرآباد\",\n \"slug\": \"جعفرآباد\",\n \"state_id\": 3\n }, {\n \"id\": 108,\n \"name\": \"خلخال\",\n \"slug\": \"خلخال\",\n \"state_id\": 3\n }, {\n \"id\": 109,\n \"name\": \"رضی\",\n \"slug\": \"رضی\",\n \"state_id\": 3\n }, {\n \"id\": 110,\n \"name\": \"سرعین\",\n \"slug\": \"سرعین\",\n \"state_id\": 3\n }, {\n \"id\": 111,\n \"name\": \"عنبران\",\n \"slug\": \"عنبران\",\n \"state_id\": 3\n }, {\n \"id\": 112,\n \"name\": \"فخرآباد\",\n \"slug\": \"فخرآباد\",\n \"state_id\": 3\n }, {\n \"id\": 113,\n \"name\": \"کلور\",\n \"slug\": \"کلور\",\n \"state_id\": 3\n }, {\n \"id\": 114,\n \"name\": \"کوراییم\",\n \"slug\": \"کوراییم\",\n \"state_id\": 3\n }, {\n \"id\": 115,\n \"name\": \"گرمی\",\n \"slug\": \"گرمی\",\n \"state_id\": 3\n }, {\n \"id\": 116,\n \"name\": \"گیوی\",\n \"slug\": \"گیوی\",\n \"state_id\": 3\n }, {\n \"id\": 117,\n \"name\": \"لاهرود\",\n \"slug\": \"لاهرود\",\n \"state_id\": 3\n }, {\n \"id\": 118,\n \"name\": \"مشگین شهر\",\n \"slug\": \"مشگین-شهر\",\n \"state_id\": 3\n }, {\n \"id\": 119,\n \"name\": \"نمین\",\n \"slug\": \"نمین\",\n \"state_id\": 3\n }, {\n \"id\": 120,\n \"name\": \"نیر\",\n \"slug\": \"اردبیل-نیر\",\n \"state_id\": 3\n }, {\n \"id\": 121,\n \"name\": \"هشتجین\",\n \"slug\": \"هشتجین\",\n \"state_id\": 3\n }, {\n \"id\": 122,\n \"name\": \"هیر\",\n \"slug\": \"هیر\",\n \"state_id\": 3\n }, {\n \"id\": 123,\n \"name\": \"ابریشم\",\n \"slug\": \"ابریشم\",\n \"state_id\": 4\n }, {\n \"id\": 124,\n \"name\": \"ابوزیدآباد\",\n \"slug\": \"ابوزیدآباد\",\n \"state_id\": 4\n }, {\n \"id\": 125,\n \"name\": \"اردستان\",\n \"slug\": \"اردستان\",\n \"state_id\": 4\n }, {\n \"id\": 126,\n \"name\": \"اژیه\",\n \"slug\": \"اژیه\",\n \"state_id\": 4\n }, {\n \"id\": 127,\n \"name\": \"اصفهان\",\n \"slug\": \"شهر-اصفهان\",\n \"state_id\": 4\n }, {\n \"id\": 128,\n \"name\": \"افوس\",\n \"slug\": \"افوس\",\n \"state_id\": 4\n }, {\n \"id\": 129,\n \"name\": \"انارک\",\n \"slug\": \"انارک\",\n \"state_id\": 4\n }, {\n \"id\": 130,\n \"name\": \"ایمانشهر\",\n \"slug\": \"ایمانشهر\",\n \"state_id\": 4\n }, {\n \"id\": 131,\n \"name\": \"آران وبیدگل\",\n \"slug\": \"آران-وبیدگل\",\n \"state_id\": 4\n }, {\n \"id\": 132,\n \"name\": \"بادرود\",\n \"slug\": \"بادرود\",\n \"state_id\": 4\n }, {\n \"id\": 133,\n \"name\": \"باغ بهادران\",\n \"slug\": \"باغ-بهادران\",\n \"state_id\": 4\n }, {\n \"id\": 134,\n \"name\": \"بافران\",\n \"slug\": \"بافران\",\n \"state_id\": 4\n }, {\n \"id\": 135,\n \"name\": \"برزک\",\n \"slug\": \"برزک\",\n \"state_id\": 4\n }, {\n \"id\": 136,\n \"name\": \"برف انبار\",\n \"slug\": \"برف-انبار\",\n \"state_id\": 4\n }, {\n \"id\": 137,\n \"name\": \"بهاران شهر\",\n \"slug\": \"بهاران-شهر\",\n \"state_id\": 4\n }, {\n \"id\": 138,\n \"name\": \"بهارستان\",\n \"slug\": \"بهارستان\",\n \"state_id\": 4\n }, {\n \"id\": 139,\n \"name\": \"بوئین و میاندشت\",\n \"slug\": \"بوئین-میاندشت\",\n \"state_id\": 4\n }, {\n \"id\": 140,\n \"name\": \"پیربکران\",\n \"slug\": \"پیربکران\",\n \"state_id\": 4\n }, {\n \"id\": 141,\n \"name\": \"تودشک\",\n \"slug\": \"تودشک\",\n \"state_id\": 4\n }, {\n \"id\": 142,\n \"name\": \"تیران\",\n \"slug\": \"تیران\",\n \"state_id\": 4\n }, {\n \"id\": 143,\n \"name\": \"جندق\",\n \"slug\": \"جندق\",\n \"state_id\": 4\n }, {\n \"id\": 144,\n \"name\": \"جوزدان\",\n \"slug\": \"جوزدان\",\n \"state_id\": 4\n }, {\n \"id\": 145,\n \"name\": \"جوشقان و کامو\",\n \"slug\": \"جوشقان-کامو\",\n \"state_id\": 4\n }, {\n \"id\": 146,\n \"name\": \"چادگان\",\n \"slug\": \"چادگان\",\n \"state_id\": 4\n }, {\n \"id\": 147,\n \"name\": \"چرمهین\",\n \"slug\": \"چرمهین\",\n \"state_id\": 4\n }, {\n \"id\": 148,\n \"name\": \"چمگردان\",\n \"slug\": \"چمگردان\",\n \"state_id\": 4\n }, {\n \"id\": 149,\n \"name\": \"حبیب آباد\",\n \"slug\": \"حبیب-آباد\",\n \"state_id\": 4\n }, {\n \"id\": 150,\n \"name\": \"حسن آباد\",\n \"slug\": \"اصفهان-حسن-آباد\",\n \"state_id\": 4\n }, {\n \"id\": 151,\n \"name\": \"حنا\",\n \"slug\": \"حنا\",\n \"state_id\": 4\n }, {\n \"id\": 152,\n \"name\": \"خالدآباد\",\n \"slug\": \"خالدآباد\",\n \"state_id\": 4\n }, {\n \"id\": 153,\n \"name\": \"خمینی شهر\",\n \"slug\": \"خمینی-شهر\",\n \"state_id\": 4\n }, {\n \"id\": 154,\n \"name\": \"خوانسار\",\n \"slug\": \"خوانسار\",\n \"state_id\": 4\n }, {\n \"id\": 155,\n \"name\": \"خور\",\n \"slug\": \"اصفهان-خور\",\n \"state_id\": 4\n }, {\n \"id\": 157,\n \"name\": \"خورزوق\",\n \"slug\": \"خورزوق\",\n \"state_id\": 4\n }, {\n \"id\": 158,\n \"name\": \"داران\",\n \"slug\": \"داران\",\n \"state_id\": 4\n }, {\n \"id\": 159,\n \"name\": \"دامنه\",\n \"slug\": \"دامنه\",\n \"state_id\": 4\n }, {\n \"id\": 160,\n \"name\": \"درچه\",\n \"slug\": \"درچه\",\n \"state_id\": 4\n }, {\n \"id\": 161,\n \"name\": \"دستگرد\",\n \"slug\": \"دستگرد\",\n \"state_id\": 4\n }, {\n \"id\": 162,\n \"name\": \"دهاقان\",\n \"slug\": \"دهاقان\",\n \"state_id\": 4\n }, {\n \"id\": 163,\n \"name\": \"دهق\",\n \"slug\": \"دهق\",\n \"state_id\": 4\n }, {\n \"id\": 164,\n \"name\": \"دولت آباد\",\n \"slug\": \"اصفهان-دولت-آباد\",\n \"state_id\": 4\n }, {\n \"id\": 165,\n \"name\": \"دیزیچه\",\n \"slug\": \"دیزیچه\",\n \"state_id\": 4\n }, {\n \"id\": 166,\n \"name\": \"رزوه\",\n \"slug\": \"رزوه\",\n \"state_id\": 4\n }, {\n \"id\": 167,\n \"name\": \"رضوانشهر\",\n \"slug\": \"اصفهان-رضوانشهر\",\n \"state_id\": 4\n }, {\n \"id\": 168,\n \"name\": \"زاینده رود\",\n \"slug\": \"زاینده-رود\",\n \"state_id\": 4\n }, {\n \"id\": 169,\n \"name\": \"زرین شهر\",\n \"slug\": \"زرین-شهر\",\n \"state_id\": 4\n }, {\n \"id\": 170,\n \"name\": \"زواره\",\n \"slug\": \"زواره\",\n \"state_id\": 4\n }, {\n \"id\": 171,\n \"name\": \"زیباشهر\",\n \"slug\": \"زیباشهر\",\n \"state_id\": 4\n }, {\n \"id\": 172,\n \"name\": \"سده لنجان\",\n \"slug\": \"سده-لنجان\",\n \"state_id\": 4\n }, {\n \"id\": 173,\n \"name\": \"سفیدشهر\",\n \"slug\": \"سفیدشهر\",\n \"state_id\": 4\n }, {\n \"id\": 174,\n \"name\": \"سگزی\",\n \"slug\": \"سگزی\",\n \"state_id\": 4\n }, {\n \"id\": 175,\n \"name\": \"سمیرم\",\n \"slug\": \"سمیرم\",\n \"state_id\": 4\n }, {\n \"id\": 176,\n \"name\": \"شاهین شهر\",\n \"slug\": \"شاهین-شهر\",\n \"state_id\": 4\n }, {\n \"id\": 177,\n \"name\": \"شهرضا\",\n \"slug\": \"شهرضا\",\n \"state_id\": 4\n }, {\n \"id\": 178,\n \"name\": \"طالخونچه\",\n \"slug\": \"طالخونچه\",\n \"state_id\": 4\n }, {\n \"id\": 179,\n \"name\": \"عسگران\",\n \"slug\": \"عسگران\",\n \"state_id\": 4\n }, {\n \"id\": 180,\n \"name\": \"علویجه\",\n \"slug\": \"علویجه\",\n \"state_id\": 4\n }, {\n \"id\": 181,\n \"name\": \"فرخی\",\n \"slug\": \"فرخی\",\n \"state_id\": 4\n }, {\n \"id\": 182,\n \"name\": \"فریدونشهر\",\n \"slug\": \"فریدونشهر\",\n \"state_id\": 4\n }, {\n \"id\": 183,\n \"name\": \"فلاورجان\",\n \"slug\": \"فلاورجان\",\n \"state_id\": 4\n }, {\n \"id\": 184,\n \"name\": \"فولادشهر\",\n \"slug\": \"فولادشهر\",\n \"state_id\": 4\n }, {\n \"id\": 185,\n \"name\": \"قمصر\",\n \"slug\": \"قمصر\",\n \"state_id\": 4\n }, {\n \"id\": 186,\n \"name\": \"قهجاورستان\",\n \"slug\": \"قهجاورستان\",\n \"state_id\": 4\n }, {\n \"id\": 187,\n \"name\": \"قهدریجان\",\n \"slug\": \"قهدریجان\",\n \"state_id\": 4\n }, {\n \"id\": 188,\n \"name\": \"کاشان\",\n \"slug\": \"کاشان\",\n \"state_id\": 4\n }, {\n \"id\": 189,\n \"name\": \"کرکوند\",\n \"slug\": \"کرکوند\",\n \"state_id\": 4\n }, {\n \"id\": 190,\n \"name\": \"کلیشاد و سودرجان\",\n \"slug\": \"کلیشاد-سودرجان\",\n \"state_id\": 4\n }, {\n \"id\": 191,\n \"name\": \"کمشچه\",\n \"slug\": \"کمشچه\",\n \"state_id\": 4\n }, {\n \"id\": 192,\n \"name\": \"کمه\",\n \"slug\": \"کمه\",\n \"state_id\": 4\n }, {\n \"id\": 193,\n \"name\": \"کهریزسنگ\",\n \"slug\": \"کهریزسنگ\",\n \"state_id\": 4\n }, {\n \"id\": 194,\n \"name\": \"کوشک\",\n \"slug\": \"کوشک\",\n \"state_id\": 4\n }, {\n \"id\": 195,\n \"name\": \"کوهپایه\",\n \"slug\": \"کوهپایه\",\n \"state_id\": 4\n }, {\n \"id\": 196,\n \"name\": \"گرگاب\",\n \"slug\": \"گرگاب\",\n \"state_id\": 4\n }, {\n \"id\": 197,\n \"name\": \"گزبرخوار\",\n \"slug\": \"گزبرخوار\",\n \"state_id\": 4\n }, {\n \"id\": 198,\n \"name\": \"گلپایگان\",\n \"slug\": \"گلپایگان\",\n \"state_id\": 4\n }, {\n \"id\": 199,\n \"name\": \"گلدشت\",\n \"slug\": \"گلدشت\",\n \"state_id\": 4\n }, {\n \"id\": 200,\n \"name\": \"گلشهر\",\n \"slug\": \"گلشهر\",\n \"state_id\": 4\n }, {\n \"id\": 201,\n \"name\": \"گوگد\",\n \"slug\": \"گوگد\",\n \"state_id\": 4\n }, {\n \"id\": 202,\n \"name\": \"لای بید\",\n \"slug\": \"لای-بید\",\n \"state_id\": 4\n }, {\n \"id\": 203,\n \"name\": \"مبارکه\",\n \"slug\": \"مبارکه\",\n \"state_id\": 4\n }, {\n \"id\": 204,\n \"name\": \"مجلسی\",\n \"slug\": \"مجلسی\",\n \"state_id\": 4\n }, {\n \"id\": 205,\n \"name\": \"محمدآباد\",\n \"slug\": \"اصفهان-محمدآباد\",\n \"state_id\": 4\n }, {\n \"id\": 206,\n \"name\": \"مشکات\",\n \"slug\": \"مشکات\",\n \"state_id\": 4\n }, {\n \"id\": 207,\n \"name\": \"منظریه\",\n \"slug\": \"منظریه\",\n \"state_id\": 4\n }, {\n \"id\": 208,\n \"name\": \"مهاباد\",\n \"slug\": \"اصفهان-مهاباد\",\n \"state_id\": 4\n }, {\n \"id\": 209,\n \"name\": \"میمه\",\n \"slug\": \"اصفهان-میمه\",\n \"state_id\": 4\n }, {\n \"id\": 210,\n \"name\": \"نائین\",\n \"slug\": \"نائین\",\n \"state_id\": 4\n }, {\n \"id\": 211,\n \"name\": \"نجف آباد\",\n \"slug\": \"نجف-آباد\",\n \"state_id\": 4\n }, {\n \"id\": 212,\n \"name\": \"نصرآباد\",\n \"slug\": \"اصفهان-نصرآباد\",\n \"state_id\": 4\n }, {\n \"id\": 213,\n \"name\": \"نطنز\",\n \"slug\": \"نطنز\",\n \"state_id\": 4\n }, {\n \"id\": 214,\n \"name\": \"نوش آباد\",\n \"slug\": \"نوش-آباد\",\n \"state_id\": 4\n }, {\n \"id\": 215,\n \"name\": \"نیاسر\",\n \"slug\": \"نیاسر\",\n \"state_id\": 4\n }, {\n \"id\": 216,\n \"name\": \"نیک آباد\",\n \"slug\": \"نیک-آباد\",\n \"state_id\": 4\n }, {\n \"id\": 217,\n \"name\": \"هرند\",\n \"slug\": \"هرند\",\n \"state_id\": 4\n }, {\n \"id\": 218,\n \"name\": \"ورزنه\",\n \"slug\": \"ورزنه\",\n \"state_id\": 4\n }, {\n \"id\": 219,\n \"name\": \"ورنامخواست\",\n \"slug\": \"ورنامخواست\",\n \"state_id\": 4\n }, {\n \"id\": 220,\n \"name\": \"وزوان\",\n \"slug\": \"وزوان\",\n \"state_id\": 4\n }, {\n \"id\": 221,\n \"name\": \"ونک\",\n \"slug\": \"ونک\",\n \"state_id\": 4\n }, {\n \"id\": 222,\n \"name\": \"اسارا\",\n \"slug\": \"اسارا\",\n \"state_id\": 5\n }, {\n \"id\": 223,\n \"name\": \"اشتهارد\",\n \"slug\": \"اشتهارد\",\n \"state_id\": 5\n }, {\n \"id\": 224,\n \"name\": \"تنکمان\",\n \"slug\": \"تنکمان\",\n \"state_id\": 5\n }, {\n \"id\": 225,\n \"name\": \"چهارباغ\",\n \"slug\": \"چهارباغ\",\n \"state_id\": 5\n }, {\n \"id\": 226,\n \"name\": \"سیف آباد\",\n \"slug\": \"سیف-آباد\",\n \"state_id\": 5\n }, {\n \"id\": 227,\n \"name\": \"شهر جدید هشتگرد\",\n \"slug\": \"شهر-جدید-هشتگرد\",\n \"state_id\": 5\n }, {\n \"id\": 228,\n \"name\": \"طالقان\",\n \"slug\": \"طالقان\",\n \"state_id\": 5\n }, {\n \"id\": 229,\n \"name\": \"کرج\",\n \"slug\": \"کرج\",\n \"state_id\": 5\n }, {\n \"id\": 230,\n \"name\": \"کمال شهر\",\n \"slug\": \"کمال-شهر\",\n \"state_id\": 5\n }, {\n \"id\": 231,\n \"name\": \"کوهسار\",\n \"slug\": \"کوهسار\",\n \"state_id\": 5\n }, {\n \"id\": 232,\n \"name\": \"گرمدره\",\n \"slug\": \"گرمدره\",\n \"state_id\": 5\n }, {\n \"id\": 233,\n \"name\": \"ماهدشت\",\n \"slug\": \"ماهدشت\",\n \"state_id\": 5\n }, {\n \"id\": 234,\n \"name\": \"محمدشهر\",\n \"slug\": \"البرز-محمدشهر\",\n \"state_id\": 5\n }, {\n \"id\": 235,\n \"name\": \"مشکین دشت\",\n \"slug\": \"مشکین-دشت\",\n \"state_id\": 5\n }, {\n \"id\": 236,\n \"name\": \"نظرآباد\",\n \"slug\": \"نظرآباد\",\n \"state_id\": 5\n }, {\n \"id\": 237,\n \"name\": \"هشتگرد\",\n \"slug\": \"هشتگرد\",\n \"state_id\": 5\n }, {\n \"id\": 1117,\n \"name\": \"فردیس\",\n \"slug\": \"فردیس\",\n \"state_id\": 5\n }, {\n \"id\": 1118,\n \"name\": \"مارلیک\",\n \"slug\": \"مارلیک\",\n \"state_id\": 5\n }, {\n \"id\": 238,\n \"name\": \"ارکواز\",\n \"slug\": \"ارکواز\",\n \"state_id\": 6\n }, {\n \"id\": 239,\n \"name\": \"ایلام\",\n \"slug\": \"شهر-ایلام\",\n \"state_id\": 6\n }, {\n \"id\": 240,\n \"name\": \"ایوان\",\n \"slug\": \"ایوان\",\n \"state_id\": 6\n }, {\n \"id\": 241,\n \"name\": \"آبدانان\",\n \"slug\": \"آبدانان\",\n \"state_id\": 6\n }, {\n \"id\": 242,\n \"name\": \"آسمان آباد\",\n \"slug\": \"آسمان-آباد\",\n \"state_id\": 6\n }, {\n \"id\": 243,\n \"name\": \"بدره\",\n \"slug\": \"بدره\",\n \"state_id\": 6\n }, {\n \"id\": 244,\n \"name\": \"پهله\",\n \"slug\": \"پهله\",\n \"state_id\": 6\n }, {\n \"id\": 245,\n \"name\": \"توحید\",\n \"slug\": \"توحید\",\n \"state_id\": 6\n }, {\n \"id\": 246,\n \"name\": \"چوار\",\n \"slug\": \"چوار\",\n \"state_id\": 6\n }, {\n \"id\": 247,\n \"name\": \"دره شهر\",\n \"slug\": \"دره-شهر\",\n \"state_id\": 6\n }, {\n \"id\": 248,\n \"name\": \"دلگشا\",\n \"slug\": \"دلگشا\",\n \"state_id\": 6\n }, {\n \"id\": 249,\n \"name\": \"دهلران\",\n \"slug\": \"دهلران\",\n \"state_id\": 6\n }, {\n \"id\": 250,\n \"name\": \"زرنه\",\n \"slug\": \"زرنه\",\n \"state_id\": 6\n }, {\n \"id\": 251,\n \"name\": \"سراب باغ\",\n \"slug\": \"سراب-باغ\",\n \"state_id\": 6\n }, {\n \"id\": 252,\n \"name\": \"سرابله\",\n \"slug\": \"سرابله\",\n \"state_id\": 6\n }, {\n \"id\": 253,\n \"name\": \"صالح آباد\",\n \"slug\": \"ایلام-صالح-آباد\",\n \"state_id\": 6\n }, {\n \"id\": 254,\n \"name\": \"لومار\",\n \"slug\": \"لومار\",\n \"state_id\": 6\n }, {\n \"id\": 255,\n \"name\": \"مهران\",\n \"slug\": \"مهران\",\n \"state_id\": 6\n }, {\n \"id\": 256,\n \"name\": \"مورموری\",\n \"slug\": \"مورموری\",\n \"state_id\": 6\n }, {\n \"id\": 257,\n \"name\": \"موسیان\",\n \"slug\": \"موسیان\",\n \"state_id\": 6\n }, {\n \"id\": 258,\n \"name\": \"میمه\",\n \"slug\": \"ایلام-میمه\",\n \"state_id\": 6\n }, {\n \"id\": 259,\n \"name\": \"امام حسن\",\n \"slug\": \"امام-حسن\",\n \"state_id\": 7\n }, {\n \"id\": 260,\n \"name\": \"انارستان\",\n \"slug\": \"انارستان\",\n \"state_id\": 7\n }, {\n \"id\": 261,\n \"name\": \"اهرم\",\n \"slug\": \"اهرم\",\n \"state_id\": 7\n }, {\n \"id\": 262,\n \"name\": \"آب پخش\",\n \"slug\": \"آب-پخش\",\n \"state_id\": 7\n }, {\n \"id\": 263,\n \"name\": \"آبدان\",\n \"slug\": \"آبدان\",\n \"state_id\": 7\n }, {\n \"id\": 264,\n \"name\": \"برازجان\",\n \"slug\": \"برازجان\",\n \"state_id\": 7\n }, {\n \"id\": 265,\n \"name\": \"بردخون\",\n \"slug\": \"بردخون\",\n \"state_id\": 7\n }, {\n \"id\": 266,\n \"name\": \"بندردیر\",\n \"slug\": \"بندردیر\",\n \"state_id\": 7\n }, {\n \"id\": 267,\n \"name\": \"بندردیلم\",\n \"slug\": \"بندردیلم\",\n \"state_id\": 7\n }, {\n \"id\": 268,\n \"name\": \"بندرریگ\",\n \"slug\": \"بندرریگ\",\n \"state_id\": 7\n }, {\n \"id\": 269,\n \"name\": \"بندرکنگان\",\n \"slug\": \"بندرکنگان\",\n \"state_id\": 7\n }, {\n \"id\": 270,\n \"name\": \"بندرگناوه\",\n \"slug\": \"بندرگناوه\",\n \"state_id\": 7\n }, {\n \"id\": 271,\n \"name\": \"بنک\",\n \"slug\": \"بنک\",\n \"state_id\": 7\n }, {\n \"id\": 272,\n \"name\": \"بوشهر\",\n \"slug\": \"شهر-بوشهر\",\n \"state_id\": 7\n }, {\n \"id\": 273,\n \"name\": \"تنگ ارم\",\n \"slug\": \"تنگ-ارم\",\n \"state_id\": 7\n }, {\n \"id\": 274,\n \"name\": \"جم\",\n \"slug\": \"جم\",\n \"state_id\": 7\n }, {\n \"id\": 275,\n \"name\": \"چغادک\",\n \"slug\": \"چغادک\",\n \"state_id\": 7\n }, {\n \"id\": 276,\n \"name\": \"خارک\",\n \"slug\": \"خارک\",\n \"state_id\": 7\n }, {\n \"id\": 277,\n \"name\": \"خورموج\",\n \"slug\": \"خورموج\",\n \"state_id\": 7\n }, {\n \"id\": 278,\n \"name\": \"دالکی\",\n \"slug\": \"دالکی\",\n \"state_id\": 7\n }, {\n \"id\": 279,\n \"name\": \"دلوار\",\n \"slug\": \"دلوار\",\n \"state_id\": 7\n }, {\n \"id\": 280,\n \"name\": \"ریز\",\n \"slug\": \"ریز\",\n \"state_id\": 7\n }, {\n \"id\": 281,\n \"name\": \"سعدآباد\",\n \"slug\": \"سعدآباد\",\n \"state_id\": 7\n }, {\n \"id\": 282,\n \"name\": \"سیراف\",\n \"slug\": \"سیراف\",\n \"state_id\": 7\n }, {\n \"id\": 283,\n \"name\": \"شبانکاره\",\n \"slug\": \"شبانکاره\",\n \"state_id\": 7\n }, {\n \"id\": 284,\n \"name\": \"شنبه\",\n \"slug\": \"شنبه\",\n \"state_id\": 7\n }, {\n \"id\": 285,\n \"name\": \"عسلویه\",\n \"slug\": \"عسلویه\",\n \"state_id\": 7\n }, {\n \"id\": 286,\n \"name\": \"کاکی\",\n \"slug\": \"کاکی\",\n \"state_id\": 7\n }, {\n \"id\": 287,\n \"name\": \"کلمه\",\n \"slug\": \"کلمه\",\n \"state_id\": 7\n }, {\n \"id\": 288,\n \"name\": \"نخل تقی\",\n \"slug\": \"نخل-تقی\",\n \"state_id\": 7\n }, {\n \"id\": 289,\n \"name\": \"وحدتیه\",\n \"slug\": \"وحدتیه\",\n \"state_id\": 7\n }, {\n \"id\": 290,\n \"name\": \"ارجمند\",\n \"slug\": \"ارجمند\",\n \"state_id\": 8\n }, {\n \"id\": 291,\n \"name\": \"اسلامشهر\",\n \"slug\": \"اسلامشهر\",\n \"state_id\": 8\n }, {\n \"id\": 292,\n \"name\": \"اندیشه\",\n \"slug\": \"اندیشه\",\n \"state_id\": 8\n }, {\n \"id\": 293,\n \"name\": \"آبسرد\",\n \"slug\": \"آبسرد\",\n \"state_id\": 8\n }, {\n \"id\": 294,\n \"name\": \"آبعلی\",\n \"slug\": \"آبعلی\",\n \"state_id\": 8\n }, {\n \"id\": 295,\n \"name\": \"باغستان\",\n \"slug\": \"باغستان\",\n \"state_id\": 8\n }, {\n \"id\": 296,\n \"name\": \"باقرشهر\",\n \"slug\": \"باقرشهر\",\n \"state_id\": 8\n }, {\n \"id\": 297,\n \"name\": \"بومهن\",\n \"slug\": \"بومهن\",\n \"state_id\": 8\n }, {\n \"id\": 298,\n \"name\": \"پاکدشت\",\n \"slug\": \"پاکدشت\",\n \"state_id\": 8\n }, {\n \"id\": 299,\n \"name\": \"پردیس\",\n \"slug\": \"پردیس\",\n \"state_id\": 8\n }, {\n \"id\": 300,\n \"name\": \"پیشوا\",\n \"slug\": \"پیشوا\",\n \"state_id\": 8\n }, {\n \"id\": 301,\n \"name\": \"تهران\",\n \"slug\": \"شهر-تهران\",\n \"state_id\": 8\n }, {\n \"id\": 302,\n \"name\": \"جوادآباد\",\n \"slug\": \"جوادآباد\",\n \"state_id\": 8\n }, {\n \"id\": 303,\n \"name\": \"چهاردانگه\",\n \"slug\": \"چهاردانگه\",\n \"state_id\": 8\n }, {\n \"id\": 304,\n \"name\": \"حسن آباد\",\n \"slug\": \"تهران-حسن-آباد\",\n \"state_id\": 8\n }, {\n \"id\": 305,\n \"name\": \"دماوند\",\n \"slug\": \"دماوند\",\n \"state_id\": 8\n }, {\n \"id\": 306,\n \"name\": \"دیزین\",\n \"slug\": \"دیزین\",\n \"state_id\": 8\n }, {\n \"id\": 307,\n \"name\": \"ری\",\n \"slug\": \"ری\",\n \"state_id\": 8\n }, {\n \"id\": 308,\n \"name\": \"رباط کریم\",\n \"slug\": \"رباط-کریم\",\n \"state_id\": 8\n }, {\n \"id\": 309,\n \"name\": \"رودهن\",\n \"slug\": \"رودهن\",\n \"state_id\": 8\n }, {\n \"id\": 310,\n \"name\": \"شاهدشهر\",\n \"slug\": \"شاهدشهر\",\n \"state_id\": 8\n }, {\n \"id\": 311,\n \"name\": \"شریف آباد\",\n \"slug\": \"شریف-آباد\",\n \"state_id\": 8\n }, {\n \"id\": 312,\n \"name\": \"شمشک\",\n \"slug\": \"شمشک\",\n \"state_id\": 8\n }, {\n \"id\": 313,\n \"name\": \"شهریار\",\n \"slug\": \"شهریار\",\n \"state_id\": 8\n }, {\n \"id\": 314,\n \"name\": \"صالح آباد\",\n \"slug\": \"تهران-صالح-آباد\",\n \"state_id\": 8\n }, {\n \"id\": 315,\n \"name\": \"صباشهر\",\n \"slug\": \"صباشهر\",\n \"state_id\": 8\n }, {\n \"id\": 316,\n \"name\": \"صفادشت\",\n \"slug\": \"صفادشت\",\n \"state_id\": 8\n }, {\n \"id\": 317,\n \"name\": \"فردوسیه\",\n \"slug\": \"فردوسیه\",\n \"state_id\": 8\n }, {\n \"id\": 318,\n \"name\": \"فشم\",\n \"slug\": \"فشم\",\n \"state_id\": 8\n }, {\n \"id\": 319,\n \"name\": \"فیروزکوه\",\n \"slug\": \"فیروزکوه\",\n \"state_id\": 8\n }, {\n \"id\": 320,\n \"name\": \"قدس\",\n \"slug\": \"قدس\",\n \"state_id\": 8\n }, {\n \"id\": 321,\n \"name\": \"قرچک\",\n \"slug\": \"قرچک\",\n \"state_id\": 8\n }, {\n \"id\": 322,\n \"name\": \"کهریزک\",\n \"slug\": \"کهریزک\",\n \"state_id\": 8\n }, {\n \"id\": 323,\n \"name\": \"کیلان\",\n \"slug\": \"کیلان\",\n \"state_id\": 8\n }, {\n \"id\": 324,\n \"name\": \"گلستان\",\n \"slug\": \"شهر-گلستان\",\n \"state_id\": 8\n }, {\n \"id\": 325,\n \"name\": \"لواسان\",\n \"slug\": \"لواسان\",\n \"state_id\": 8\n }, {\n \"id\": 326,\n \"name\": \"ملارد\",\n \"slug\": \"ملارد\",\n \"state_id\": 8\n }, {\n \"id\": 327,\n \"name\": \"میگون\",\n \"slug\": \"میگون\",\n \"state_id\": 8\n }, {\n \"id\": 328,\n \"name\": \"نسیم شهر\",\n \"slug\": \"نسیم-شهر\",\n \"state_id\": 8\n }, {\n \"id\": 329,\n \"name\": \"نصیرآباد\",\n \"slug\": \"نصیرآباد\",\n \"state_id\": 8\n }, {\n \"id\": 330,\n \"name\": \"وحیدیه\",\n \"slug\": \"وحیدیه\",\n \"state_id\": 8\n }, {\n \"id\": 331,\n \"name\": \"ورامین\",\n \"slug\": \"ورامین\",\n \"state_id\": 8\n }, {\n \"id\": 1116,\n \"name\": \"پرند\",\n \"slug\": \"پرند\",\n \"state_id\": 8\n }, {\n \"id\": 332,\n \"name\": \"اردل\",\n \"slug\": \"اردل\",\n \"state_id\": 9\n }, {\n \"id\": 333,\n \"name\": \"آلونی\",\n \"slug\": \"آلونی\",\n \"state_id\": 9\n }, {\n \"id\": 334,\n \"name\": \"باباحیدر\",\n \"slug\": \"باباحیدر\",\n \"state_id\": 9\n }, {\n \"id\": 335,\n \"name\": \"بروجن\",\n \"slug\": \"بروجن\",\n \"state_id\": 9\n }, {\n \"id\": 336,\n \"name\": \"بلداجی\",\n \"slug\": \"بلداجی\",\n \"state_id\": 9\n }, {\n \"id\": 337,\n \"name\": \"بن\",\n \"slug\": \"بن\",\n \"state_id\": 9\n }, {\n \"id\": 338,\n \"name\": \"جونقان\",\n \"slug\": \"جونقان\",\n \"state_id\": 9\n }, {\n \"id\": 339,\n \"name\": \"چلگرد\",\n \"slug\": \"چلگرد\",\n \"state_id\": 9\n }, {\n \"id\": 340,\n \"name\": \"سامان\",\n \"slug\": \"سامان\",\n \"state_id\": 9\n }, {\n \"id\": 341,\n \"name\": \"سفیددشت\",\n \"slug\": \"سفیددشت\",\n \"state_id\": 9\n }, {\n \"id\": 342,\n \"name\": \"سودجان\",\n \"slug\": \"سودجان\",\n \"state_id\": 9\n }, {\n \"id\": 343,\n \"name\": \"سورشجان\",\n \"slug\": \"سورشجان\",\n \"state_id\": 9\n }, {\n \"id\": 344,\n \"name\": \"شلمزار\",\n \"slug\": \"شلمزار\",\n \"state_id\": 9\n }, {\n \"id\": 345,\n \"name\": \"شهرکرد\",\n \"slug\": \"شهرکرد\",\n \"state_id\": 9\n }, {\n \"id\": 346,\n \"name\": \"طاقانک\",\n \"slug\": \"طاقانک\",\n \"state_id\": 9\n }, {\n \"id\": 347,\n \"name\": \"فارسان\",\n \"slug\": \"فارسان\",\n \"state_id\": 9\n }, {\n \"id\": 348,\n \"name\": \"فرادبنه\",\n \"slug\": \"فرادبنه\",\n \"state_id\": 9\n }, {\n \"id\": 349,\n \"name\": \"فرخ شهر\",\n \"slug\": \"فرخ-شهر\",\n \"state_id\": 9\n }, {\n \"id\": 350,\n \"name\": \"کیان\",\n \"slug\": \"کیان\",\n \"state_id\": 9\n }, {\n \"id\": 351,\n \"name\": \"گندمان\",\n \"slug\": \"گندمان\",\n \"state_id\": 9\n }, {\n \"id\": 352,\n \"name\": \"گهرو\",\n \"slug\": \"گهرو\",\n \"state_id\": 9\n }, {\n \"id\": 353,\n \"name\": \"لردگان\",\n \"slug\": \"لردگان\",\n \"state_id\": 9\n }, {\n \"id\": 354,\n \"name\": \"مال خلیفه\",\n \"slug\": \"مال-خلیفه\",\n \"state_id\": 9\n }, {\n \"id\": 355,\n \"name\": \"ناغان\",\n \"slug\": \"ناغان\",\n \"state_id\": 9\n }, {\n \"id\": 356,\n \"name\": \"نافچ\",\n \"slug\": \"نافچ\",\n \"state_id\": 9\n }, {\n \"id\": 357,\n \"name\": \"نقنه\",\n \"slug\": \"نقنه\",\n \"state_id\": 9\n }, {\n \"id\": 358,\n \"name\": \"هفشجان\",\n \"slug\": \"هفشجان\",\n \"state_id\": 9\n }, {\n \"id\": 359,\n \"name\": \"ارسک\",\n \"slug\": \"ارسک\",\n \"state_id\": 10\n }, {\n \"id\": 360,\n \"name\": \"اسدیه\",\n \"slug\": \"اسدیه\",\n \"state_id\": 10\n }, {\n \"id\": 361,\n \"name\": \"اسفدن\",\n \"slug\": \"اسفدن\",\n \"state_id\": 10\n }, {\n \"id\": 362,\n \"name\": \"اسلامیه\",\n \"slug\": \"اسلامیه\",\n \"state_id\": 10\n }, {\n \"id\": 363,\n \"name\": \"آرین شهر\",\n \"slug\": \"آرین-شهر\",\n \"state_id\": 10\n }, {\n \"id\": 364,\n \"name\": \"آیسک\",\n \"slug\": \"آیسک\",\n \"state_id\": 10\n }, {\n \"id\": 365,\n \"name\": \"بشرویه\",\n \"slug\": \"بشرویه\",\n \"state_id\": 10\n }, {\n \"id\": 366,\n \"name\": \"بیرجند\",\n \"slug\": \"بیرجند\",\n \"state_id\": 10\n }, {\n \"id\": 367,\n \"name\": \"حاجی آباد\",\n \"slug\": \"خراسان-جنوبی-حاجی-آباد\",\n \"state_id\": 10\n }, {\n \"id\": 368,\n \"name\": \"خضری دشت بیاض\",\n \"slug\": \"خضری-دشت-بیاض\",\n \"state_id\": 10\n }, {\n \"id\": 369,\n \"name\": \"خوسف\",\n \"slug\": \"خوسف\",\n \"state_id\": 10\n }, {\n \"id\": 370,\n \"name\": \"زهان\",\n \"slug\": \"زهان\",\n \"state_id\": 10\n }, {\n \"id\": 371,\n \"name\": \"سرایان\",\n \"slug\": \"سرایان\",\n \"state_id\": 10\n }, {\n \"id\": 372,\n \"name\": \"سربیشه\",\n \"slug\": \"سربیشه\",\n \"state_id\": 10\n }, {\n \"id\": 373,\n \"name\": \"سه قلعه\",\n \"slug\": \"سه-قلعه\",\n \"state_id\": 10\n }, {\n \"id\": 374,\n \"name\": \"شوسف\",\n \"slug\": \"شوسف\",\n \"state_id\": 10\n }, {\n \"id\": 375,\n \"name\": \"طبس \",\n \"slug\": \"خراسان-جنوبی-طبس-\",\n \"state_id\": 10\n }, {\n \"id\": 376,\n \"name\": \"فردوس\",\n \"slug\": \"فردوس\",\n \"state_id\": 10\n }, {\n \"id\": 377,\n \"name\": \"قاین\",\n \"slug\": \"قاین\",\n \"state_id\": 10\n }, {\n \"id\": 378,\n \"name\": \"قهستان\",\n \"slug\": \"قهستان\",\n \"state_id\": 10\n }, {\n \"id\": 379,\n \"name\": \"محمدشهر\",\n \"slug\": \"خراسان-جنوبی-محمدشهر\",\n \"state_id\": 10\n }, {\n \"id\": 380,\n \"name\": \"مود\",\n \"slug\": \"مود\",\n \"state_id\": 10\n }, {\n \"id\": 381,\n \"name\": \"نهبندان\",\n \"slug\": \"نهبندان\",\n \"state_id\": 10\n }, {\n \"id\": 382,\n \"name\": \"نیمبلوک\",\n \"slug\": \"نیمبلوک\",\n \"state_id\": 10\n }, {\n \"id\": 383,\n \"name\": \"احمدآباد صولت\",\n \"slug\": \"احمدآباد-صولت\",\n \"state_id\": 11\n }, {\n \"id\": 384,\n \"name\": \"انابد\",\n \"slug\": \"انابد\",\n \"state_id\": 11\n }, {\n \"id\": 385,\n \"name\": \"باجگیران\",\n \"slug\": \"باجگیران\",\n \"state_id\": 11\n }, {\n \"id\": 386,\n \"name\": \"باخرز\",\n \"slug\": \"باخرز\",\n \"state_id\": 11\n }, {\n \"id\": 387,\n \"name\": \"بار\",\n \"slug\": \"بار\",\n \"state_id\": 11\n }, {\n \"id\": 388,\n \"name\": \"بایگ\",\n \"slug\": \"بایگ\",\n \"state_id\": 11\n }, {\n \"id\": 389,\n \"name\": \"بجستان\",\n \"slug\": \"بجستان\",\n \"state_id\": 11\n }, {\n \"id\": 390,\n \"name\": \"بردسکن\",\n \"slug\": \"بردسکن\",\n \"state_id\": 11\n }, {\n \"id\": 391,\n \"name\": \"بیدخت\",\n \"slug\": \"بیدخت\",\n \"state_id\": 11\n }, {\n \"id\": 392,\n \"name\": \"تایباد\",\n \"slug\": \"تایباد\",\n \"state_id\": 11\n }, {\n \"id\": 393,\n \"name\": \"تربت جام\",\n \"slug\": \"تربت-جام\",\n \"state_id\": 11\n }, {\n \"id\": 394,\n \"name\": \"تربت حیدریه\",\n \"slug\": \"تربت-حیدریه\",\n \"state_id\": 11\n }, {\n \"id\": 395,\n \"name\": \"جغتای\",\n \"slug\": \"جغتای\",\n \"state_id\": 11\n }, {\n \"id\": 396,\n \"name\": \"جنگل\",\n \"slug\": \"جنگل\",\n \"state_id\": 11\n }, {\n \"id\": 397,\n \"name\": \"چاپشلو\",\n \"slug\": \"چاپشلو\",\n \"state_id\": 11\n }, {\n \"id\": 398,\n \"name\": \"چکنه\",\n \"slug\": \"چکنه\",\n \"state_id\": 11\n }, {\n \"id\": 399,\n \"name\": \"چناران\",\n \"slug\": \"چناران\",\n \"state_id\": 11\n }, {\n \"id\": 400,\n \"name\": \"خرو\",\n \"slug\": \"خرو\",\n \"state_id\": 11\n }, {\n \"id\": 401,\n \"name\": \"خلیل آباد\",\n \"slug\": \"خلیل-آباد\",\n \"state_id\": 11\n }, {\n \"id\": 402,\n \"name\": \"خواف\",\n \"slug\": \"خواف\",\n \"state_id\": 11\n }, {\n \"id\": 403,\n \"name\": \"داورزن\",\n \"slug\": \"داورزن\",\n \"state_id\": 11\n }, {\n \"id\": 404,\n \"name\": \"درگز\",\n \"slug\": \"درگز\",\n \"state_id\": 11\n }, {\n \"id\": 405,\n \"name\": \"در رود\",\n \"slug\": \"در-رود\",\n \"state_id\": 11\n }, {\n \"id\": 406,\n \"name\": \"دولت آباد\",\n \"slug\": \"خراسان-رضوی-دولت-آباد\",\n \"state_id\": 11\n }, {\n \"id\": 407,\n \"name\": \"رباط سنگ\",\n \"slug\": \"رباط-سنگ\",\n \"state_id\": 11\n }, {\n \"id\": 408,\n \"name\": \"رشتخوار\",\n \"slug\": \"رشتخوار\",\n \"state_id\": 11\n }, {\n \"id\": 409,\n \"name\": \"رضویه\",\n \"slug\": \"رضویه\",\n \"state_id\": 11\n }, {\n \"id\": 410,\n \"name\": \"روداب\",\n \"slug\": \"روداب\",\n \"state_id\": 11\n }, {\n \"id\": 411,\n \"name\": \"ریوش\",\n \"slug\": \"ریوش\",\n \"state_id\": 11\n }, {\n \"id\": 412,\n \"name\": \"سبزوار\",\n \"slug\": \"سبزوار\",\n \"state_id\": 11\n }, {\n \"id\": 413,\n \"name\": \"سرخس\",\n \"slug\": \"سرخس\",\n \"state_id\": 11\n }, {\n \"id\": 414,\n \"name\": \"سفیدسنگ\",\n \"slug\": \"سفیدسنگ\",\n \"state_id\": 11\n }, {\n \"id\": 415,\n \"name\": \"سلامی\",\n \"slug\": \"سلامی\",\n \"state_id\": 11\n }, {\n \"id\": 416,\n \"name\": \"سلطان آباد\",\n \"slug\": \"سلطان-آباد\",\n \"state_id\": 11\n }, {\n \"id\": 417,\n \"name\": \"سنگان\",\n \"slug\": \"سنگان\",\n \"state_id\": 11\n }, {\n \"id\": 418,\n \"name\": \"شادمهر\",\n \"slug\": \"شادمهر\",\n \"state_id\": 11\n }, {\n \"id\": 419,\n \"name\": \"شاندیز\",\n \"slug\": \"شاندیز\",\n \"state_id\": 11\n }, {\n \"id\": 420,\n \"name\": \"ششتمد\",\n \"slug\": \"ششتمد\",\n \"state_id\": 11\n }, {\n \"id\": 421,\n \"name\": \"شهرآباد\",\n \"slug\": \"شهرآباد\",\n \"state_id\": 11\n }, {\n \"id\": 422,\n \"name\": \"شهرزو\",\n \"slug\": \"شهرزو\",\n \"state_id\": 11\n }, {\n \"id\": 423,\n \"name\": \"صالح آباد\",\n \"slug\": \"خراسان-رضوی-صالح-آباد\",\n \"state_id\": 11\n }, {\n \"id\": 424,\n \"name\": \"طرقبه\",\n \"slug\": \"طرقبه\",\n \"state_id\": 11\n }, {\n \"id\": 425,\n \"name\": \"عشق آباد\",\n \"slug\": \"خراسان-رضوی-عشق-آباد\",\n \"state_id\": 11\n }, {\n \"id\": 426,\n \"name\": \"فرهادگرد\",\n \"slug\": \"فرهادگرد\",\n \"state_id\": 11\n }, {\n \"id\": 427,\n \"name\": \"فریمان\",\n \"slug\": \"فریمان\",\n \"state_id\": 11\n }, {\n \"id\": 428,\n \"name\": \"فیروزه\",\n \"slug\": \"فیروزه\",\n \"state_id\": 11\n }, {\n \"id\": 429,\n \"name\": \"فیض آباد\",\n \"slug\": \"فیض-آباد\",\n \"state_id\": 11\n }, {\n \"id\": 430,\n \"name\": \"قاسم آباد\",\n \"slug\": \"قاسم-آباد\",\n \"state_id\": 11\n }, {\n \"id\": 431,\n \"name\": \"قدمگاه\",\n \"slug\": \"قدمگاه\",\n \"state_id\": 11\n }, {\n \"id\": 432,\n \"name\": \"قلندرآباد\",\n \"slug\": \"قلندرآباد\",\n \"state_id\": 11\n }, {\n \"id\": 433,\n \"name\": \"قوچان\",\n \"slug\": \"قوچان\",\n \"state_id\": 11\n }, {\n \"id\": 434,\n \"name\": \"کاخک\",\n \"slug\": \"کاخک\",\n \"state_id\": 11\n }, {\n \"id\": 435,\n \"name\": \"کاریز\",\n \"slug\": \"کاریز\",\n \"state_id\": 11\n }, {\n \"id\": 436,\n \"name\": \"کاشمر\",\n \"slug\": \"کاشمر\",\n \"state_id\": 11\n }, {\n \"id\": 437,\n \"name\": \"کدکن\",\n \"slug\": \"کدکن\",\n \"state_id\": 11\n }, {\n \"id\": 438,\n \"name\": \"کلات\",\n \"slug\": \"کلات\",\n \"state_id\": 11\n }, {\n \"id\": 439,\n \"name\": \"کندر\",\n \"slug\": \"کندر\",\n \"state_id\": 11\n }, {\n \"id\": 440,\n \"name\": \"گلمکان\",\n \"slug\": \"گلمکان\",\n \"state_id\": 11\n }, {\n \"id\": 441,\n \"name\": \"گناباد\",\n \"slug\": \"گناباد\",\n \"state_id\": 11\n }, {\n \"id\": 442,\n \"name\": \"لطف آباد\",\n \"slug\": \"لطف-آباد\",\n \"state_id\": 11\n }, {\n \"id\": 443,\n \"name\": \"مزدآوند\",\n \"slug\": \"مزدآوند\",\n \"state_id\": 11\n }, {\n \"id\": 444,\n \"name\": \"مشهد\",\n \"slug\": \"مشهد\",\n \"state_id\": 11\n }, {\n \"id\": 445,\n \"name\": \"ملک آباد\",\n \"slug\": \"ملک-آباد\",\n \"state_id\": 11\n }, {\n \"id\": 446,\n \"name\": \"نشتیفان\",\n \"slug\": \"نشتیفان\",\n \"state_id\": 11\n }, {\n \"id\": 447,\n \"name\": \"نصرآباد\",\n \"slug\": \"خراسان-رضوی-نصرآباد\",\n \"state_id\": 11\n }, {\n \"id\": 448,\n \"name\": \"نقاب\",\n \"slug\": \"نقاب\",\n \"state_id\": 11\n }, {\n \"id\": 449,\n \"name\": \"نوخندان\",\n \"slug\": \"نوخندان\",\n \"state_id\": 11\n }, {\n \"id\": 450,\n \"name\": \"نیشابور\",\n \"slug\": \"نیشابور\",\n \"state_id\": 11\n }, {\n \"id\": 451,\n \"name\": \"نیل شهر\",\n \"slug\": \"نیل-شهر\",\n \"state_id\": 11\n }, {\n \"id\": 452,\n \"name\": \"همت آباد\",\n \"slug\": \"همت-آباد\",\n \"state_id\": 11\n }, {\n \"id\": 453,\n \"name\": \"یونسی\",\n \"slug\": \"یونسی\",\n \"state_id\": 11\n }, {\n \"id\": 454,\n \"name\": \"اسفراین\",\n \"slug\": \"اسفراین\",\n \"state_id\": 12\n }, {\n \"id\": 455,\n \"name\": \"ایور\",\n \"slug\": \"ایور\",\n \"state_id\": 12\n }, {\n \"id\": 456,\n \"name\": \"آشخانه\",\n \"slug\": \"آشخانه\",\n \"state_id\": 12\n }, {\n \"id\": 457,\n \"name\": \"بجنورد\",\n \"slug\": \"بجنورد\",\n \"state_id\": 12\n }, {\n \"id\": 458,\n \"name\": \"پیش قلعه\",\n \"slug\": \"پیش-قلعه\",\n \"state_id\": 12\n }, {\n \"id\": 459,\n \"name\": \"تیتکانلو\",\n \"slug\": \"تیتکانلو\",\n \"state_id\": 12\n }, {\n \"id\": 460,\n \"name\": \"جاجرم\",\n \"slug\": \"جاجرم\",\n \"state_id\": 12\n }, {\n \"id\": 461,\n \"name\": \"حصارگرمخان\",\n \"slug\": \"حصارگرمخان\",\n \"state_id\": 12\n }, {\n \"id\": 462,\n \"name\": \"درق\",\n \"slug\": \"درق\",\n \"state_id\": 12\n }, {\n \"id\": 463,\n \"name\": \"راز\",\n \"slug\": \"راز\",\n \"state_id\": 12\n }, {\n \"id\": 464,\n \"name\": \"سنخواست\",\n \"slug\": \"سنخواست\",\n \"state_id\": 12\n }, {\n \"id\": 465,\n \"name\": \"شوقان\",\n \"slug\": \"شوقان\",\n \"state_id\": 12\n }, {\n \"id\": 466,\n \"name\": \"شیروان\",\n \"slug\": \"شیروان\",\n \"state_id\": 12\n }, {\n \"id\": 467,\n \"name\": \"صفی آباد\",\n \"slug\": \"خراسان-شمالی-صفی-آباد\",\n \"state_id\": 12\n }, {\n \"id\": 468,\n \"name\": \"فاروج\",\n \"slug\": \"فاروج\",\n \"state_id\": 12\n }, {\n \"id\": 469,\n \"name\": \"قاضی\",\n \"slug\": \"قاضی\",\n \"state_id\": 12\n }, {\n \"id\": 470,\n \"name\": \"گرمه\",\n \"slug\": \"گرمه\",\n \"state_id\": 12\n }, {\n \"id\": 471,\n \"name\": \"لوجلی\",\n \"slug\": \"لوجلی\",\n \"state_id\": 12\n }, {\n \"id\": 472,\n \"name\": \"اروندکنار\",\n \"slug\": \"اروندکنار\",\n \"state_id\": 13\n }, {\n \"id\": 473,\n \"name\": \"الوان\",\n \"slug\": \"الوان\",\n \"state_id\": 13\n }, {\n \"id\": 474,\n \"name\": \"امیدیه\",\n \"slug\": \"امیدیه\",\n \"state_id\": 13\n }, {\n \"id\": 475,\n \"name\": \"اندیمشک\",\n \"slug\": \"اندیمشک\",\n \"state_id\": 13\n }, {\n \"id\": 476,\n \"name\": \"اهواز\",\n \"slug\": \"اهواز\",\n \"state_id\": 13\n }, {\n \"id\": 477,\n \"name\": \"ایذه\",\n \"slug\": \"ایذه\",\n \"state_id\": 13\n }, {\n \"id\": 478,\n \"name\": \"آبادان\",\n \"slug\": \"آبادان\",\n \"state_id\": 13\n }, {\n \"id\": 479,\n \"name\": \"آغاجاری\",\n \"slug\": \"آغاجاری\",\n \"state_id\": 13\n }, {\n \"id\": 480,\n \"name\": \"باغ ملک\",\n \"slug\": \"باغ-ملک\",\n \"state_id\": 13\n }, {\n \"id\": 481,\n \"name\": \"بستان\",\n \"slug\": \"بستان\",\n \"state_id\": 13\n }, {\n \"id\": 482,\n \"name\": \"بندرامام خمینی\",\n \"slug\": \"بندرامام-خمینی\",\n \"state_id\": 13\n }, {\n \"id\": 483,\n \"name\": \"بندرماهشهر\",\n \"slug\": \"بندرماهشهر\",\n \"state_id\": 13\n }, {\n \"id\": 484,\n \"name\": \"بهبهان\",\n \"slug\": \"بهبهان\",\n \"state_id\": 13\n }, {\n \"id\": 485,\n \"name\": \"ترکالکی\",\n \"slug\": \"ترکالکی\",\n \"state_id\": 13\n }, {\n \"id\": 486,\n \"name\": \"جایزان\",\n \"slug\": \"جایزان\",\n \"state_id\": 13\n }, {\n \"id\": 487,\n \"name\": \"چمران\",\n \"slug\": \"چمران\",\n \"state_id\": 13\n }, {\n \"id\": 488,\n \"name\": \"چویبده\",\n \"slug\": \"چویبده\",\n \"state_id\": 13\n }, {\n \"id\": 489,\n \"name\": \"حر\",\n \"slug\": \"حر\",\n \"state_id\": 13\n }, {\n \"id\": 490,\n \"name\": \"حسینیه\",\n \"slug\": \"حسینیه\",\n \"state_id\": 13\n }, {\n \"id\": 491,\n \"name\": \"حمزه\",\n \"slug\": \"حمزه\",\n \"state_id\": 13\n }, {\n \"id\": 492,\n \"name\": \"حمیدیه\",\n \"slug\": \"حمیدیه\",\n \"state_id\": 13\n }, {\n \"id\": 493,\n \"name\": \"خرمشهر\",\n \"slug\": \"خرمشهر\",\n \"state_id\": 13\n }, {\n \"id\": 494,\n \"name\": \"دارخوین\",\n \"slug\": \"دارخوین\",\n \"state_id\": 13\n }, {\n \"id\": 495,\n \"name\": \"دزآب\",\n \"slug\": \"دزآب\",\n \"state_id\": 13\n }, {\n \"id\": 496,\n \"name\": \"دزفول\",\n \"slug\": \"دزفول\",\n \"state_id\": 13\n }, {\n \"id\": 497,\n \"name\": \"دهدز\",\n \"slug\": \"دهدز\",\n \"state_id\": 13\n }, {\n \"id\": 498,\n \"name\": \"رامشیر\",\n \"slug\": \"رامشیر\",\n \"state_id\": 13\n }, {\n \"id\": 499,\n \"name\": \"رامهرمز\",\n \"slug\": \"رامهرمز\",\n \"state_id\": 13\n }, {\n \"id\": 500,\n \"name\": \"رفیع\",\n \"slug\": \"رفیع\",\n \"state_id\": 13\n }, {\n \"id\": 501,\n \"name\": \"زهره\",\n \"slug\": \"زهره\",\n \"state_id\": 13\n }, {\n \"id\": 502,\n \"name\": \"سالند\",\n \"slug\": \"سالند\",\n \"state_id\": 13\n }, {\n \"id\": 503,\n \"name\": \"سردشت\",\n \"slug\": \"خوزستان-سردشت\",\n \"state_id\": 13\n }, {\n \"id\": 504,\n \"name\": \"سوسنگرد\",\n \"slug\": \"سوسنگرد\",\n \"state_id\": 13\n }, {\n \"id\": 505,\n \"name\": \"شادگان\",\n \"slug\": \"شادگان\",\n \"state_id\": 13\n }, {\n \"id\": 506,\n \"name\": \"شاوور\",\n \"slug\": \"شاوور\",\n \"state_id\": 13\n }, {\n \"id\": 507,\n \"name\": \"شرافت\",\n \"slug\": \"شرافت\",\n \"state_id\": 13\n }, {\n \"id\": 508,\n \"name\": \"شوش\",\n \"slug\": \"شوش\",\n \"state_id\": 13\n }, {\n \"id\": 509,\n \"name\": \"شوشتر\",\n \"slug\": \"شوشتر\",\n \"state_id\": 13\n }, {\n \"id\": 510,\n \"name\": \"شیبان\",\n \"slug\": \"شیبان\",\n \"state_id\": 13\n }, {\n \"id\": 511,\n \"name\": \"صالح شهر\",\n \"slug\": \"صالح-شهر\",\n \"state_id\": 13\n }, {\n \"id\": 512,\n \"name\": \"صفی آباد\",\n \"slug\": \"خوزستان-صفی-آباد\",\n \"state_id\": 13\n }, {\n \"id\": 513,\n \"name\": \"صیدون\",\n \"slug\": \"صیدون\",\n \"state_id\": 13\n }, {\n \"id\": 514,\n \"name\": \"قلعه تل\",\n \"slug\": \"قلعه-تل\",\n \"state_id\": 13\n }, {\n \"id\": 515,\n \"name\": \"قلعه خواجه\",\n \"slug\": \"قلعه-خواجه\",\n \"state_id\": 13\n }, {\n \"id\": 516,\n \"name\": \"گتوند\",\n \"slug\": \"گتوند\",\n \"state_id\": 13\n }, {\n \"id\": 517,\n \"name\": \"لالی\",\n \"slug\": \"لالی\",\n \"state_id\": 13\n }, {\n \"id\": 518,\n \"name\": \"مسجدسلیمان\",\n \"slug\": \"مسجدسلیمان\",\n \"state_id\": 13\n }, {\n \"id\": 520,\n \"name\": \"ملاثانی\",\n \"slug\": \"ملاثانی\",\n \"state_id\": 13\n }, {\n \"id\": 521,\n \"name\": \"میانرود\",\n \"slug\": \"میانرود\",\n \"state_id\": 13\n }, {\n \"id\": 522,\n \"name\": \"مینوشهر\",\n \"slug\": \"مینوشهر\",\n \"state_id\": 13\n }, {\n \"id\": 523,\n \"name\": \"هفتگل\",\n \"slug\": \"هفتگل\",\n \"state_id\": 13\n }, {\n \"id\": 524,\n \"name\": \"هندیجان\",\n \"slug\": \"هندیجان\",\n \"state_id\": 13\n }, {\n \"id\": 525,\n \"name\": \"هویزه\",\n \"slug\": \"هویزه\",\n \"state_id\": 13\n }, {\n \"id\": 526,\n \"name\": \"ویس\",\n \"slug\": \"ویس\",\n \"state_id\": 13\n }, {\n \"id\": 527,\n \"name\": \"ابهر\",\n \"slug\": \"ابهر\",\n \"state_id\": 14\n }, {\n \"id\": 528,\n \"name\": \"ارمغان خانه\",\n \"slug\": \"ارمغان-خانه\",\n \"state_id\": 14\n }, {\n \"id\": 529,\n \"name\": \"آب بر\",\n \"slug\": \"آب-بر\",\n \"state_id\": 14\n }, {\n \"id\": 530,\n \"name\": \"چورزق\",\n \"slug\": \"چورزق\",\n \"state_id\": 14\n }, {\n \"id\": 531,\n \"name\": \"حلب\",\n \"slug\": \"حلب\",\n \"state_id\": 14\n }, {\n \"id\": 532,\n \"name\": \"خرمدره\",\n \"slug\": \"خرمدره\",\n \"state_id\": 14\n }, {\n \"id\": 533,\n \"name\": \"دندی\",\n \"slug\": \"دندی\",\n \"state_id\": 14\n }, {\n \"id\": 534,\n \"name\": \"زرین آباد\",\n \"slug\": \"زرین-آباد\",\n \"state_id\": 14\n }, {\n \"id\": 535,\n \"name\": \"زرین رود\",\n \"slug\": \"زرین-رود\",\n \"state_id\": 14\n }, {\n \"id\": 536,\n \"name\": \"زنجان\",\n \"slug\": \"شهر-زنجان\",\n \"state_id\": 14\n }, {\n \"id\": 537,\n \"name\": \"سجاس\",\n \"slug\": \"سجاس\",\n \"state_id\": 14\n }, {\n \"id\": 538,\n \"name\": \"سلطانیه\",\n \"slug\": \"سلطانیه\",\n \"state_id\": 14\n }, {\n \"id\": 539,\n \"name\": \"سهرورد\",\n \"slug\": \"سهرورد\",\n \"state_id\": 14\n }, {\n \"id\": 540,\n \"name\": \"صائین قلعه\",\n \"slug\": \"صائین-قلعه\",\n \"state_id\": 14\n }, {\n \"id\": 541,\n \"name\": \"قیدار\",\n \"slug\": \"قیدار\",\n \"state_id\": 14\n }, {\n \"id\": 542,\n \"name\": \"گرماب\",\n \"slug\": \"گرماب\",\n \"state_id\": 14\n }, {\n \"id\": 543,\n \"name\": \"ماه نشان\",\n \"slug\": \"ماه-نشان\",\n \"state_id\": 14\n }, {\n \"id\": 544,\n \"name\": \"هیدج\",\n \"slug\": \"هیدج\",\n \"state_id\": 14\n }, {\n \"id\": 545,\n \"name\": \"امیریه\",\n \"slug\": \"امیریه\",\n \"state_id\": 15\n }, {\n \"id\": 546,\n \"name\": \"ایوانکی\",\n \"slug\": \"ایوانکی\",\n \"state_id\": 15\n }, {\n \"id\": 547,\n \"name\": \"آرادان\",\n \"slug\": \"آرادان\",\n \"state_id\": 15\n }, {\n \"id\": 548,\n \"name\": \"بسطام\",\n \"slug\": \"بسطام\",\n \"state_id\": 15\n }, {\n \"id\": 549,\n \"name\": \"بیارجمند\",\n \"slug\": \"بیارجمند\",\n \"state_id\": 15\n }, {\n \"id\": 550,\n \"name\": \"دامغان\",\n \"slug\": \"دامغان\",\n \"state_id\": 15\n }, {\n \"id\": 551,\n \"name\": \"درجزین\",\n \"slug\": \"درجزین\",\n \"state_id\": 15\n }, {\n \"id\": 552,\n \"name\": \"دیباج\",\n \"slug\": \"دیباج\",\n \"state_id\": 15\n }, {\n \"id\": 553,\n \"name\": \"سرخه\",\n \"slug\": \"سرخه\",\n \"state_id\": 15\n }, {\n \"id\": 554,\n \"name\": \"سمنان\",\n \"slug\": \"شهر-سمنان\",\n \"state_id\": 15\n }, {\n \"id\": 555,\n \"name\": \"شاهرود\",\n \"slug\": \"شاهرود\",\n \"state_id\": 15\n }, {\n \"id\": 556,\n \"name\": \"شهمیرزاد\",\n \"slug\": \"شهمیرزاد\",\n \"state_id\": 15\n }, {\n \"id\": 557,\n \"name\": \"کلاته خیج\",\n \"slug\": \"کلاته-خیج\",\n \"state_id\": 15\n }, {\n \"id\": 558,\n \"name\": \"گرمسار\",\n \"slug\": \"گرمسار\",\n \"state_id\": 15\n }, {\n \"id\": 559,\n \"name\": \"مجن\",\n \"slug\": \"مجن\",\n \"state_id\": 15\n }, {\n \"id\": 560,\n \"name\": \"مهدی شهر\",\n \"slug\": \"مهدی-شهر\",\n \"state_id\": 15\n }, {\n \"id\": 561,\n \"name\": \"میامی\",\n \"slug\": \"میامی\",\n \"state_id\": 15\n }, {\n \"id\": 562,\n \"name\": \"ادیمی\",\n \"slug\": \"ادیمی\",\n \"state_id\": 16\n }, {\n \"id\": 563,\n \"name\": \"اسپکه\",\n \"slug\": \"اسپکه\",\n \"state_id\": 16\n }, {\n \"id\": 564,\n \"name\": \"ایرانشهر\",\n \"slug\": \"ایرانشهر\",\n \"state_id\": 16\n }, {\n \"id\": 565,\n \"name\": \"بزمان\",\n \"slug\": \"بزمان\",\n \"state_id\": 16\n }, {\n \"id\": 566,\n \"name\": \"بمپور\",\n \"slug\": \"بمپور\",\n \"state_id\": 16\n }, {\n \"id\": 567,\n \"name\": \"بنت\",\n \"slug\": \"بنت\",\n \"state_id\": 16\n }, {\n \"id\": 568,\n \"name\": \"بنجار\",\n \"slug\": \"بنجار\",\n \"state_id\": 16\n }, {\n \"id\": 569,\n \"name\": \"پیشین\",\n \"slug\": \"پیشین\",\n \"state_id\": 16\n }, {\n \"id\": 570,\n \"name\": \"جالق\",\n \"slug\": \"جالق\",\n \"state_id\": 16\n }, {\n \"id\": 571,\n \"name\": \"چابهار\",\n \"slug\": \"چابهار\",\n \"state_id\": 16\n }, {\n \"id\": 572,\n \"name\": \"خاش\",\n \"slug\": \"خاش\",\n \"state_id\": 16\n }, {\n \"id\": 573,\n \"name\": \"دوست محمد\",\n \"slug\": \"دوست-محمد\",\n \"state_id\": 16\n }, {\n \"id\": 574,\n \"name\": \"راسک\",\n \"slug\": \"راسک\",\n \"state_id\": 16\n }, {\n \"id\": 575,\n \"name\": \"زابل\",\n \"slug\": \"زابل\",\n \"state_id\": 16\n }, {\n \"id\": 576,\n \"name\": \"زابلی\",\n \"slug\": \"زابلی\",\n \"state_id\": 16\n }, {\n \"id\": 577,\n \"name\": \"زاهدان\",\n \"slug\": \"زاهدان\",\n \"state_id\": 16\n }, {\n \"id\": 578,\n \"name\": \"زهک\",\n \"slug\": \"زهک\",\n \"state_id\": 16\n }, {\n \"id\": 579,\n \"name\": \"سراوان\",\n \"slug\": \"سراوان\",\n \"state_id\": 16\n }, {\n \"id\": 580,\n \"name\": \"سرباز\",\n \"slug\": \"سرباز\",\n \"state_id\": 16\n }, {\n \"id\": 581,\n \"name\": \"سوران\",\n \"slug\": \"سوران\",\n \"state_id\": 16\n }, {\n \"id\": 582,\n \"name\": \"سیرکان\",\n \"slug\": \"سیرکان\",\n \"state_id\": 16\n }, {\n \"id\": 583,\n \"name\": \"علی اکبر\",\n \"slug\": \"علی-اکبر\",\n \"state_id\": 16\n }, {\n \"id\": 584,\n \"name\": \"فنوج\",\n \"slug\": \"فنوج\",\n \"state_id\": 16\n }, {\n \"id\": 585,\n \"name\": \"قصرقند\",\n \"slug\": \"قصرقند\",\n \"state_id\": 16\n }, {\n \"id\": 586,\n \"name\": \"کنارک\",\n \"slug\": \"کنارک\",\n \"state_id\": 16\n }, {\n \"id\": 587,\n \"name\": \"گشت\",\n \"slug\": \"گشت\",\n \"state_id\": 16\n }, {\n \"id\": 588,\n \"name\": \"گلمورتی\",\n \"slug\": \"گلمورتی\",\n \"state_id\": 16\n }, {\n \"id\": 589,\n \"name\": \"محمدان\",\n \"slug\": \"محمدان\",\n \"state_id\": 16\n }, {\n \"id\": 590,\n \"name\": \"محمدآباد\",\n \"slug\": \"سیستان-و-بلوچستان-محمدآباد\",\n \"state_id\": 16\n }, {\n \"id\": 591,\n \"name\": \"محمدی\",\n \"slug\": \"محمدی\",\n \"state_id\": 16\n }, {\n \"id\": 592,\n \"name\": \"میرجاوه\",\n \"slug\": \"میرجاوه\",\n \"state_id\": 16\n }, {\n \"id\": 593,\n \"name\": \"نصرت آباد\",\n \"slug\": \"نصرت-آباد\",\n \"state_id\": 16\n }, {\n \"id\": 594,\n \"name\": \"نگور\",\n \"slug\": \"نگور\",\n \"state_id\": 16\n }, {\n \"id\": 595,\n \"name\": \"نوک آباد\",\n \"slug\": \"نوک-آباد\",\n \"state_id\": 16\n }, {\n \"id\": 596,\n \"name\": \"نیک شهر\",\n \"slug\": \"نیک-شهر\",\n \"state_id\": 16\n }, {\n \"id\": 597,\n \"name\": \"هیدوچ\",\n \"slug\": \"هیدوچ\",\n \"state_id\": 16\n }, {\n \"id\": 598,\n \"name\": \"اردکان\",\n \"slug\": \"فارس-اردکان\",\n \"state_id\": 17\n }, {\n \"id\": 599,\n \"name\": \"ارسنجان\",\n \"slug\": \"ارسنجان\",\n \"state_id\": 17\n }, {\n \"id\": 600,\n \"name\": \"استهبان\",\n \"slug\": \"استهبان\",\n \"state_id\": 17\n }, {\n \"id\": 601,\n \"name\": \"اشکنان\",\n \"slug\": \"اشکنان\",\n \"state_id\": 17\n }, {\n \"id\": 602,\n \"name\": \"افزر\",\n \"slug\": \"افزر\",\n \"state_id\": 17\n }, {\n \"id\": 603,\n \"name\": \"اقلید\",\n \"slug\": \"اقلید\",\n \"state_id\": 17\n }, {\n \"id\": 604,\n \"name\": \"امام شهر\",\n \"slug\": \"امام-شهر\",\n \"state_id\": 17\n }, {\n \"id\": 605,\n \"name\": \"اهل\",\n \"slug\": \"اهل\",\n \"state_id\": 17\n }, {\n \"id\": 606,\n \"name\": \"اوز\",\n \"slug\": \"اوز\",\n \"state_id\": 17\n }, {\n \"id\": 607,\n \"name\": \"ایج\",\n \"slug\": \"ایج\",\n \"state_id\": 17\n }, {\n \"id\": 608,\n \"name\": \"ایزدخواست\",\n \"slug\": \"ایزدخواست\",\n \"state_id\": 17\n }, {\n \"id\": 609,\n \"name\": \"آباده\",\n \"slug\": \"آباده\",\n \"state_id\": 17\n }, {\n \"id\": 610,\n \"name\": \"آباده طشک\",\n \"slug\": \"آباده-طشک\",\n \"state_id\": 17\n }, {\n \"id\": 611,\n \"name\": \"باب انار\",\n \"slug\": \"باب-انار\",\n \"state_id\": 17\n }, {\n \"id\": 612,\n \"name\": \"بالاده\",\n \"slug\": \"فارس-بالاده\",\n \"state_id\": 17\n }, {\n \"id\": 613,\n \"name\": \"بنارویه\",\n \"slug\": \"بنارویه\",\n \"state_id\": 17\n }, {\n \"id\": 614,\n \"name\": \"بهمن\",\n \"slug\": \"بهمن\",\n \"state_id\": 17\n }, {\n \"id\": 615,\n \"name\": \"بوانات\",\n \"slug\": \"بوانات\",\n \"state_id\": 17\n }, {\n \"id\": 616,\n \"name\": \"بیرم\",\n \"slug\": \"بیرم\",\n \"state_id\": 17\n }, {\n \"id\": 617,\n \"name\": \"بیضا\",\n \"slug\": \"بیضا\",\n \"state_id\": 17\n }, {\n \"id\": 618,\n \"name\": \"جنت شهر\",\n \"slug\": \"جنت-شهر\",\n \"state_id\": 17\n }, {\n \"id\": 619,\n \"name\": \"جهرم\",\n \"slug\": \"جهرم\",\n \"state_id\": 17\n }, {\n \"id\": 620,\n \"name\": \"جویم\",\n \"slug\": \"جویم\",\n \"state_id\": 17\n }, {\n \"id\": 621,\n \"name\": \"زرین دشت\",\n \"slug\": \"زرین-دشت\",\n \"state_id\": 17\n }, {\n \"id\": 622,\n \"name\": \"حسن آباد\",\n \"slug\": \"فارس-حسن-آباد\",\n \"state_id\": 17\n }, {\n \"id\": 623,\n \"name\": \"خان زنیان\",\n \"slug\": \"خان-زنیان\",\n \"state_id\": 17\n }, {\n \"id\": 624,\n \"name\": \"خاوران\",\n \"slug\": \"خاوران\",\n \"state_id\": 17\n }, {\n \"id\": 625,\n \"name\": \"خرامه\",\n \"slug\": \"خرامه\",\n \"state_id\": 17\n }, {\n \"id\": 626,\n \"name\": \"خشت\",\n \"slug\": \"خشت\",\n \"state_id\": 17\n }, {\n \"id\": 627,\n \"name\": \"خنج\",\n \"slug\": \"خنج\",\n \"state_id\": 17\n }, {\n \"id\": 628,\n \"name\": \"خور\",\n \"slug\": \"فارس-خور\",\n \"state_id\": 17\n }, {\n \"id\": 629,\n \"name\": \"داراب\",\n \"slug\": \"داراب\",\n \"state_id\": 17\n }, {\n \"id\": 630,\n \"name\": \"داریان\",\n \"slug\": \"داریان\",\n \"state_id\": 17\n }, {\n \"id\": 631,\n \"name\": \"دبیران\",\n \"slug\": \"دبیران\",\n \"state_id\": 17\n }, {\n \"id\": 632,\n \"name\": \"دژکرد\",\n \"slug\": \"دژکرد\",\n \"state_id\": 17\n }, {\n \"id\": 633,\n \"name\": \"دهرم\",\n \"slug\": \"دهرم\",\n \"state_id\": 17\n }, {\n \"id\": 634,\n \"name\": \"دوبرجی\",\n \"slug\": \"دوبرجی\",\n \"state_id\": 17\n }, {\n \"id\": 635,\n \"name\": \"رامجرد\",\n \"slug\": \"رامجرد\",\n \"state_id\": 17\n }, {\n \"id\": 636,\n \"name\": \"رونیز\",\n \"slug\": \"رونیز\",\n \"state_id\": 17\n }, {\n \"id\": 637,\n \"name\": \"زاهدشهر\",\n \"slug\": \"زاهدشهر\",\n \"state_id\": 17\n }, {\n \"id\": 638,\n \"name\": \"زرقان\",\n \"slug\": \"زرقان\",\n \"state_id\": 17\n }, {\n \"id\": 639,\n \"name\": \"سده\",\n \"slug\": \"سده\",\n \"state_id\": 17\n }, {\n \"id\": 640,\n \"name\": \"سروستان\",\n \"slug\": \"سروستان\",\n \"state_id\": 17\n }, {\n \"id\": 641,\n \"name\": \"سعادت شهر\",\n \"slug\": \"سعادت-شهر\",\n \"state_id\": 17\n }, {\n \"id\": 642,\n \"name\": \"سورمق\",\n \"slug\": \"سورمق\",\n \"state_id\": 17\n }, {\n \"id\": 643,\n \"name\": \"سیدان\",\n \"slug\": \"سیدان\",\n \"state_id\": 17\n }, {\n \"id\": 644,\n \"name\": \"ششده\",\n \"slug\": \"ششده\",\n \"state_id\": 17\n }, {\n \"id\": 645,\n \"name\": \"شهرپیر\",\n \"slug\": \"شهرپیر\",\n \"state_id\": 17\n }, {\n \"id\": 646,\n \"name\": \"شهرصدرا\",\n \"slug\": \"شهرصدرا\",\n \"state_id\": 17\n }, {\n \"id\": 647,\n \"name\": \"شیراز\",\n \"slug\": \"شیراز\",\n \"state_id\": 17\n }, {\n \"id\": 648,\n \"name\": \"صغاد\",\n \"slug\": \"صغاد\",\n \"state_id\": 17\n }, {\n \"id\": 649,\n \"name\": \"صفاشهر\",\n \"slug\": \"صفاشهر\",\n \"state_id\": 17\n }, {\n \"id\": 650,\n \"name\": \"علامرودشت\",\n \"slug\": \"علامرودشت\",\n \"state_id\": 17\n }, {\n \"id\": 651,\n \"name\": \"فدامی\",\n \"slug\": \"فدامی\",\n \"state_id\": 17\n }, {\n \"id\": 652,\n \"name\": \"فراشبند\",\n \"slug\": \"فراشبند\",\n \"state_id\": 17\n }, {\n \"id\": 653,\n \"name\": \"فسا\",\n \"slug\": \"فسا\",\n \"state_id\": 17\n }, {\n \"id\": 654,\n \"name\": \"فیروزآباد\",\n \"slug\": \"فارس-فیروزآباد\",\n \"state_id\": 17\n }, {\n \"id\": 655,\n \"name\": \"قائمیه\",\n \"slug\": \"قائمیه\",\n \"state_id\": 17\n }, {\n \"id\": 656,\n \"name\": \"قادرآباد\",\n \"slug\": \"قادرآباد\",\n \"state_id\": 17\n }, {\n \"id\": 657,\n \"name\": \"قطب آباد\",\n \"slug\": \"قطب-آباد\",\n \"state_id\": 17\n }, {\n \"id\": 658,\n \"name\": \"قطرویه\",\n \"slug\": \"قطرویه\",\n \"state_id\": 17\n }, {\n \"id\": 659,\n \"name\": \"قیر\",\n \"slug\": \"قیر\",\n \"state_id\": 17\n }, {\n \"id\": 660,\n \"name\": \"کارزین (فتح آباد)\",\n \"slug\": \"کارزین-فتح-آباد\",\n \"state_id\": 17\n }, {\n \"id\": 661,\n \"name\": \"کازرون\",\n \"slug\": \"کازرون\",\n \"state_id\": 17\n }, {\n \"id\": 662,\n \"name\": \"کامفیروز\",\n \"slug\": \"کامفیروز\",\n \"state_id\": 17\n }, {\n \"id\": 663,\n \"name\": \"کره ای\",\n \"slug\": \"کره-ای\",\n \"state_id\": 17\n }, {\n \"id\": 664,\n \"name\": \"کنارتخته\",\n \"slug\": \"کنارتخته\",\n \"state_id\": 17\n }, {\n \"id\": 665,\n \"name\": \"کوار\",\n \"slug\": \"کوار\",\n \"state_id\": 17\n }, {\n \"id\": 666,\n \"name\": \"گراش\",\n \"slug\": \"گراش\",\n \"state_id\": 17\n }, {\n \"id\": 667,\n \"name\": \"گله دار\",\n \"slug\": \"گله-دار\",\n \"state_id\": 17\n }, {\n \"id\": 668,\n \"name\": \"لار\",\n \"slug\": \"لار\",\n \"state_id\": 17\n }, {\n \"id\": 669,\n \"name\": \"لامرد\",\n \"slug\": \"لامرد\",\n \"state_id\": 17\n }, {\n \"id\": 670,\n \"name\": \"لپویی\",\n \"slug\": \"لپویی\",\n \"state_id\": 17\n }, {\n \"id\": 671,\n \"name\": \"لطیفی\",\n \"slug\": \"لطیفی\",\n \"state_id\": 17\n }, {\n \"id\": 672,\n \"name\": \"مبارک آباددیز\",\n \"slug\": \"مبارک-آباددیز\",\n \"state_id\": 17\n }, {\n \"id\": 673,\n \"name\": \"مرودشت\",\n \"slug\": \"مرودشت\",\n \"state_id\": 17\n }, {\n \"id\": 674,\n \"name\": \"مشکان\",\n \"slug\": \"مشکان\",\n \"state_id\": 17\n }, {\n \"id\": 675,\n \"name\": \"مصیری\",\n \"slug\": \"مصیری\",\n \"state_id\": 17\n }, {\n \"id\": 676,\n \"name\": \"مهر\",\n \"slug\": \"مهر\",\n \"state_id\": 17\n }, {\n \"id\": 677,\n \"name\": \"میمند\",\n \"slug\": \"میمند\",\n \"state_id\": 17\n }, {\n \"id\": 678,\n \"name\": \"نوبندگان\",\n \"slug\": \"نوبندگان\",\n \"state_id\": 17\n }, {\n \"id\": 679,\n \"name\": \"نوجین\",\n \"slug\": \"نوجین\",\n \"state_id\": 17\n }, {\n \"id\": 680,\n \"name\": \"نودان\",\n \"slug\": \"نودان\",\n \"state_id\": 17\n }, {\n \"id\": 681,\n \"name\": \"نورآباد\",\n \"slug\": \"فارس-نورآباد\",\n \"state_id\": 17\n }, {\n \"id\": 682,\n \"name\": \"نی ریز\",\n \"slug\": \"نی-ریز\",\n \"state_id\": 17\n }, {\n \"id\": 683,\n \"name\": \"وراوی\",\n \"slug\": \"وراوی\",\n \"state_id\": 17\n }, {\n \"id\": 684,\n \"name\": \"ارداق\",\n \"slug\": \"ارداق\",\n \"state_id\": 18\n }, {\n \"id\": 685,\n \"name\": \"اسفرورین\",\n \"slug\": \"اسفرورین\",\n \"state_id\": 18\n }, {\n \"id\": 686,\n \"name\": \"اقبالیه\",\n \"slug\": \"اقبالیه\",\n \"state_id\": 18\n }, {\n \"id\": 687,\n \"name\": \"الوند\",\n \"slug\": \"الوند\",\n \"state_id\": 18\n }, {\n \"id\": 688,\n \"name\": \"آبگرم\",\n \"slug\": \"آبگرم\",\n \"state_id\": 18\n }, {\n \"id\": 689,\n \"name\": \"آبیک\",\n \"slug\": \"آبیک\",\n \"state_id\": 18\n }, {\n \"id\": 690,\n \"name\": \"آوج\",\n \"slug\": \"آوج\",\n \"state_id\": 18\n }, {\n \"id\": 691,\n \"name\": \"بوئین زهرا\",\n \"slug\": \"بوئین-زهرا\",\n \"state_id\": 18\n }, {\n \"id\": 692,\n \"name\": \"بیدستان\",\n \"slug\": \"بیدستان\",\n \"state_id\": 18\n }, {\n \"id\": 693,\n \"name\": \"تاکستان\",\n \"slug\": \"تاکستان\",\n \"state_id\": 18\n }, {\n \"id\": 694,\n \"name\": \"خاکعلی\",\n \"slug\": \"خاکعلی\",\n \"state_id\": 18\n }, {\n \"id\": 695,\n \"name\": \"خرمدشت\",\n \"slug\": \"خرمدشت\",\n \"state_id\": 18\n }, {\n \"id\": 696,\n \"name\": \"دانسفهان\",\n \"slug\": \"دانسفهان\",\n \"state_id\": 18\n }, {\n \"id\": 697,\n \"name\": \"رازمیان\",\n \"slug\": \"رازمیان\",\n \"state_id\": 18\n }, {\n \"id\": 698,\n \"name\": \"سگزآباد\",\n \"slug\": \"سگزآباد\",\n \"state_id\": 18\n }, {\n \"id\": 699,\n \"name\": \"سیردان\",\n \"slug\": \"سیردان\",\n \"state_id\": 18\n }, {\n \"id\": 700,\n \"name\": \"شال\",\n \"slug\": \"شال\",\n \"state_id\": 18\n }, {\n \"id\": 701,\n \"name\": \"شریفیه\",\n \"slug\": \"شریفیه\",\n \"state_id\": 18\n }, {\n \"id\": 702,\n \"name\": \"ضیاآباد\",\n \"slug\": \"ضیاآباد\",\n \"state_id\": 18\n }, {\n \"id\": 703,\n \"name\": \"قزوین\",\n \"slug\": \"شهر-قزوین\",\n \"state_id\": 18\n }, {\n \"id\": 704,\n \"name\": \"کوهین\",\n \"slug\": \"کوهین\",\n \"state_id\": 18\n }, {\n \"id\": 705,\n \"name\": \"محمدیه\",\n \"slug\": \"محمدیه\",\n \"state_id\": 18\n }, {\n \"id\": 706,\n \"name\": \"محمودآباد نمونه\",\n \"slug\": \"محمودآباد-نمونه\",\n \"state_id\": 18\n }, {\n \"id\": 707,\n \"name\": \"معلم کلایه\",\n \"slug\": \"معلم-کلایه\",\n \"state_id\": 18\n }, {\n \"id\": 708,\n \"name\": \"نرجه\",\n \"slug\": \"نرجه\",\n \"state_id\": 18\n }, {\n \"id\": 709,\n \"name\": \"جعفریه\",\n \"slug\": \"جعفریه\",\n \"state_id\": 19\n }, {\n \"id\": 710,\n \"name\": \"دستجرد\",\n \"slug\": \"دستجرد\",\n \"state_id\": 19\n }, {\n \"id\": 711,\n \"name\": \"سلفچگان\",\n \"slug\": \"سلفچگان\",\n \"state_id\": 19\n }, {\n \"id\": 712,\n \"name\": \"قم\",\n \"slug\": \"شهر-قم\",\n \"state_id\": 19\n }, {\n \"id\": 713,\n \"name\": \"قنوات\",\n \"slug\": \"قنوات\",\n \"state_id\": 19\n }, {\n \"id\": 714,\n \"name\": \"کهک\",\n \"slug\": \"کهک\",\n \"state_id\": 19\n }, {\n \"id\": 715,\n \"name\": \"آرمرده\",\n \"slug\": \"آرمرده\",\n \"state_id\": 20\n }, {\n \"id\": 716,\n \"name\": \"بابارشانی\",\n \"slug\": \"بابارشانی\",\n \"state_id\": 20\n }, {\n \"id\": 717,\n \"name\": \"بانه\",\n \"slug\": \"بانه\",\n \"state_id\": 20\n }, {\n \"id\": 718,\n \"name\": \"بلبان آباد\",\n \"slug\": \"بلبان-آباد\",\n \"state_id\": 20\n }, {\n \"id\": 719,\n \"name\": \"بوئین سفلی\",\n \"slug\": \"بوئین-سفلی\",\n \"state_id\": 20\n }, {\n \"id\": 720,\n \"name\": \"بیجار\",\n \"slug\": \"بیجار\",\n \"state_id\": 20\n }, {\n \"id\": 721,\n \"name\": \"چناره\",\n \"slug\": \"چناره\",\n \"state_id\": 20\n }, {\n \"id\": 722,\n \"name\": \"دزج\",\n \"slug\": \"دزج\",\n \"state_id\": 20\n }, {\n \"id\": 723,\n \"name\": \"دلبران\",\n \"slug\": \"دلبران\",\n \"state_id\": 20\n }, {\n \"id\": 724,\n \"name\": \"دهگلان\",\n \"slug\": \"دهگلان\",\n \"state_id\": 20\n }, {\n \"id\": 725,\n \"name\": \"دیواندره\",\n \"slug\": \"دیواندره\",\n \"state_id\": 20\n }, {\n \"id\": 726,\n \"name\": \"زرینه\",\n \"slug\": \"زرینه\",\n \"state_id\": 20\n }, {\n \"id\": 727,\n \"name\": \"سروآباد\",\n \"slug\": \"سروآباد\",\n \"state_id\": 20\n }, {\n \"id\": 728,\n \"name\": \"سریش آباد\",\n \"slug\": \"سریش-آباد\",\n \"state_id\": 20\n }, {\n \"id\": 729,\n \"name\": \"سقز\",\n \"slug\": \"سقز\",\n \"state_id\": 20\n }, {\n \"id\": 730,\n \"name\": \"سنندج\",\n \"slug\": \"سنندج\",\n \"state_id\": 20\n }, {\n \"id\": 731,\n \"name\": \"شویشه\",\n \"slug\": \"شویشه\",\n \"state_id\": 20\n }, {\n \"id\": 732,\n \"name\": \"صاحب\",\n \"slug\": \"صاحب\",\n \"state_id\": 20\n }, {\n \"id\": 733,\n \"name\": \"قروه\",\n \"slug\": \"قروه\",\n \"state_id\": 20\n }, {\n \"id\": 734,\n \"name\": \"کامیاران\",\n \"slug\": \"کامیاران\",\n \"state_id\": 20\n }, {\n \"id\": 735,\n \"name\": \"کانی دینار\",\n \"slug\": \"کانی-دینار\",\n \"state_id\": 20\n }, {\n \"id\": 736,\n \"name\": \"کانی سور\",\n \"slug\": \"کانی-سور\",\n \"state_id\": 20\n }, {\n \"id\": 737,\n \"name\": \"مریوان\",\n \"slug\": \"مریوان\",\n \"state_id\": 20\n }, {\n \"id\": 738,\n \"name\": \"موچش\",\n \"slug\": \"موچش\",\n \"state_id\": 20\n }, {\n \"id\": 739,\n \"name\": \"یاسوکند\",\n \"slug\": \"یاسوکند\",\n \"state_id\": 20\n }, {\n \"id\": 740,\n \"name\": \"اختیارآباد\",\n \"slug\": \"اختیارآباد\",\n \"state_id\": 21\n }, {\n \"id\": 741,\n \"name\": \"ارزوئیه\",\n \"slug\": \"ارزوئیه\",\n \"state_id\": 21\n }, {\n \"id\": 742,\n \"name\": \"امین شهر\",\n \"slug\": \"امین-شهر\",\n \"state_id\": 21\n }, {\n \"id\": 743,\n \"name\": \"انار\",\n \"slug\": \"انار\",\n \"state_id\": 21\n }, {\n \"id\": 744,\n \"name\": \"اندوهجرد\",\n \"slug\": \"اندوهجرد\",\n \"state_id\": 21\n }, {\n \"id\": 745,\n \"name\": \"باغین\",\n \"slug\": \"باغین\",\n \"state_id\": 21\n }, {\n \"id\": 746,\n \"name\": \"بافت\",\n \"slug\": \"بافت\",\n \"state_id\": 21\n }, {\n \"id\": 747,\n \"name\": \"بردسیر\",\n \"slug\": \"بردسیر\",\n \"state_id\": 21\n }, {\n \"id\": 748,\n \"name\": \"بروات\",\n \"slug\": \"بروات\",\n \"state_id\": 21\n }, {\n \"id\": 749,\n \"name\": \"بزنجان\",\n \"slug\": \"بزنجان\",\n \"state_id\": 21\n }, {\n \"id\": 750,\n \"name\": \"بم\",\n \"slug\": \"بم\",\n \"state_id\": 21\n }, {\n \"id\": 751,\n \"name\": \"بهرمان\",\n \"slug\": \"بهرمان\",\n \"state_id\": 21\n }, {\n \"id\": 752,\n \"name\": \"پاریز\",\n \"slug\": \"پاریز\",\n \"state_id\": 21\n }, {\n \"id\": 753,\n \"name\": \"جبالبارز\",\n \"slug\": \"جبالبارز\",\n \"state_id\": 21\n }, {\n \"id\": 754,\n \"name\": \"جوپار\",\n \"slug\": \"جوپار\",\n \"state_id\": 21\n }, {\n \"id\": 755,\n \"name\": \"جوزم\",\n \"slug\": \"جوزم\",\n \"state_id\": 21\n }, {\n \"id\": 756,\n \"name\": \"جیرفت\",\n \"slug\": \"جیرفت\",\n \"state_id\": 21\n }, {\n \"id\": 757,\n \"name\": \"چترود\",\n \"slug\": \"چترود\",\n \"state_id\": 21\n }, {\n \"id\": 758,\n \"name\": \"خاتون آباد\",\n \"slug\": \"خاتون-آباد\",\n \"state_id\": 21\n }, {\n \"id\": 759,\n \"name\": \"خانوک\",\n \"slug\": \"خانوک\",\n \"state_id\": 21\n }, {\n \"id\": 760,\n \"name\": \"خورسند\",\n \"slug\": \"خورسند\",\n \"state_id\": 21\n }, {\n \"id\": 761,\n \"name\": \"درب بهشت\",\n \"slug\": \"درب-بهشت\",\n \"state_id\": 21\n }, {\n \"id\": 762,\n \"name\": \"دهج\",\n \"slug\": \"دهج\",\n \"state_id\": 21\n }, {\n \"id\": 763,\n \"name\": \"رابر\",\n \"slug\": \"رابر\",\n \"state_id\": 21\n }, {\n \"id\": 764,\n \"name\": \"راور\",\n \"slug\": \"راور\",\n \"state_id\": 21\n }, {\n \"id\": 765,\n \"name\": \"راین\",\n \"slug\": \"راین\",\n \"state_id\": 21\n }, {\n \"id\": 766,\n \"name\": \"رفسنجان\",\n \"slug\": \"رفسنجان\",\n \"state_id\": 21\n }, {\n \"id\": 767,\n \"name\": \"رودبار\",\n \"slug\": \"کرمان-رودبار\",\n \"state_id\": 21\n }, {\n \"id\": 768,\n \"name\": \"ریحان شهر\",\n \"slug\": \"ریحان-شهر\",\n \"state_id\": 21\n }, {\n \"id\": 769,\n \"name\": \"زرند\",\n \"slug\": \"زرند\",\n \"state_id\": 21\n }, {\n \"id\": 770,\n \"name\": \"زنگی آباد\",\n \"slug\": \"زنگی-آباد\",\n \"state_id\": 21\n }, {\n \"id\": 771,\n \"name\": \"زیدآباد\",\n \"slug\": \"زیدآباد\",\n \"state_id\": 21\n }, {\n \"id\": 772,\n \"name\": \"سیرجان\",\n \"slug\": \"سیرجان\",\n \"state_id\": 21\n }, {\n \"id\": 773,\n \"name\": \"شهداد\",\n \"slug\": \"شهداد\",\n \"state_id\": 21\n }, {\n \"id\": 774,\n \"name\": \"شهربابک\",\n \"slug\": \"شهربابک\",\n \"state_id\": 21\n }, {\n \"id\": 775,\n \"name\": \"صفائیه\",\n \"slug\": \"صفائیه\",\n \"state_id\": 21\n }, {\n \"id\": 776,\n \"name\": \"عنبرآباد\",\n \"slug\": \"عنبرآباد\",\n \"state_id\": 21\n }, {\n \"id\": 777,\n \"name\": \"فاریاب\",\n \"slug\": \"فاریاب\",\n \"state_id\": 21\n }, {\n \"id\": 778,\n \"name\": \"فهرج\",\n \"slug\": \"فهرج\",\n \"state_id\": 21\n }, {\n \"id\": 779,\n \"name\": \"قلعه گنج\",\n \"slug\": \"قلعه-گنج\",\n \"state_id\": 21\n }, {\n \"id\": 780,\n \"name\": \"کاظم آباد\",\n \"slug\": \"کاظم-آباد\",\n \"state_id\": 21\n }, {\n \"id\": 781,\n \"name\": \"کرمان\",\n \"slug\": \"شهر-کرمان\",\n \"state_id\": 21\n }, {\n \"id\": 782,\n \"name\": \"کشکوئیه\",\n \"slug\": \"کشکوئیه\",\n \"state_id\": 21\n }, {\n \"id\": 783,\n \"name\": \"کهنوج\",\n \"slug\": \"کهنوج\",\n \"state_id\": 21\n }, {\n \"id\": 784,\n \"name\": \"کوهبنان\",\n \"slug\": \"کوهبنان\",\n \"state_id\": 21\n }, {\n \"id\": 785,\n \"name\": \"کیانشهر\",\n \"slug\": \"کیانشهر\",\n \"state_id\": 21\n }, {\n \"id\": 786,\n \"name\": \"گلباف\",\n \"slug\": \"گلباف\",\n \"state_id\": 21\n }, {\n \"id\": 787,\n \"name\": \"گلزار\",\n \"slug\": \"گلزار\",\n \"state_id\": 21\n }, {\n \"id\": 788,\n \"name\": \"لاله زار\",\n \"slug\": \"لاله-زار\",\n \"state_id\": 21\n }, {\n \"id\": 789,\n \"name\": \"ماهان\",\n \"slug\": \"ماهان\",\n \"state_id\": 21\n }, {\n \"id\": 790,\n \"name\": \"محمدآباد\",\n \"slug\": \"کرمان-محمدآباد\",\n \"state_id\": 21\n }, {\n \"id\": 791,\n \"name\": \"محی آباد\",\n \"slug\": \"محی-آباد\",\n \"state_id\": 21\n }, {\n \"id\": 792,\n \"name\": \"مردهک\",\n \"slug\": \"مردهک\",\n \"state_id\": 21\n }, {\n \"id\": 793,\n \"name\": \"مس سرچشمه\",\n \"slug\": \"مس-سرچشمه\",\n \"state_id\": 21\n }, {\n \"id\": 794,\n \"name\": \"منوجان\",\n \"slug\": \"منوجان\",\n \"state_id\": 21\n }, {\n \"id\": 795,\n \"name\": \"نجف شهر\",\n \"slug\": \"نجف-شهر\",\n \"state_id\": 21\n }, {\n \"id\": 796,\n \"name\": \"نرماشیر\",\n \"slug\": \"نرماشیر\",\n \"state_id\": 21\n }, {\n \"id\": 797,\n \"name\": \"نظام شهر\",\n \"slug\": \"نظام-شهر\",\n \"state_id\": 21\n }, {\n \"id\": 798,\n \"name\": \"نگار\",\n \"slug\": \"نگار\",\n \"state_id\": 21\n }, {\n \"id\": 799,\n \"name\": \"نودژ\",\n \"slug\": \"نودژ\",\n \"state_id\": 21\n }, {\n \"id\": 800,\n \"name\": \"هجدک\",\n \"slug\": \"هجدک\",\n \"state_id\": 21\n }, {\n \"id\": 801,\n \"name\": \"یزدان شهر\",\n \"slug\": \"یزدان-شهر\",\n \"state_id\": 21\n }, {\n \"id\": 802,\n \"name\": \"ازگله\",\n \"slug\": \"ازگله\",\n \"state_id\": 22\n }, {\n \"id\": 803,\n \"name\": \"اسلام آباد غرب\",\n \"slug\": \"اسلام-آباد-غرب\",\n \"state_id\": 22\n }, {\n \"id\": 804,\n \"name\": \"باینگان\",\n \"slug\": \"باینگان\",\n \"state_id\": 22\n }, {\n \"id\": 805,\n \"name\": \"بیستون\",\n \"slug\": \"بیستون\",\n \"state_id\": 22\n }, {\n \"id\": 806,\n \"name\": \"پاوه\",\n \"slug\": \"پاوه\",\n \"state_id\": 22\n }, {\n \"id\": 807,\n \"name\": \"تازه آباد\",\n \"slug\": \"تازه-آباد\",\n \"state_id\": 22\n }, {\n \"id\": 808,\n \"name\": \"جوان رود\",\n \"slug\": \"جوان-رود\",\n \"state_id\": 22\n }, {\n \"id\": 809,\n \"name\": \"حمیل\",\n \"slug\": \"حمیل\",\n \"state_id\": 22\n }, {\n \"id\": 810,\n \"name\": \"ماهیدشت\",\n \"slug\": \"ماهیدشت\",\n \"state_id\": 22\n }, {\n \"id\": 811,\n \"name\": \"روانسر\",\n \"slug\": \"روانسر\",\n \"state_id\": 22\n }, {\n \"id\": 812,\n \"name\": \"سرپل ذهاب\",\n \"slug\": \"سرپل-ذهاب\",\n \"state_id\": 22\n }, {\n \"id\": 813,\n \"name\": \"سرمست\",\n \"slug\": \"سرمست\",\n \"state_id\": 22\n }, {\n \"id\": 814,\n \"name\": \"سطر\",\n \"slug\": \"سطر\",\n \"state_id\": 22\n }, {\n \"id\": 815,\n \"name\": \"سنقر\",\n \"slug\": \"سنقر\",\n \"state_id\": 22\n }, {\n \"id\": 816,\n \"name\": \"سومار\",\n \"slug\": \"سومار\",\n \"state_id\": 22\n }, {\n \"id\": 817,\n \"name\": \"شاهو\",\n \"slug\": \"شاهو\",\n \"state_id\": 22\n }, {\n \"id\": 818,\n \"name\": \"صحنه\",\n \"slug\": \"صحنه\",\n \"state_id\": 22\n }, {\n \"id\": 819,\n \"name\": \"قصرشیرین\",\n \"slug\": \"قصرشیرین\",\n \"state_id\": 22\n }, {\n \"id\": 820,\n \"name\": \"کرمانشاه\",\n \"slug\": \"شهر-کرمانشاه\",\n \"state_id\": 22\n }, {\n \"id\": 821,\n \"name\": \"کرندغرب\",\n \"slug\": \"کرندغرب\",\n \"state_id\": 22\n }, {\n \"id\": 822,\n \"name\": \"کنگاور\",\n \"slug\": \"کنگاور\",\n \"state_id\": 22\n }, {\n \"id\": 823,\n \"name\": \"کوزران\",\n \"slug\": \"کوزران\",\n \"state_id\": 22\n }, {\n \"id\": 824,\n \"name\": \"گهواره\",\n \"slug\": \"گهواره\",\n \"state_id\": 22\n }, {\n \"id\": 825,\n \"name\": \"گیلانغرب\",\n \"slug\": \"گیلانغرب\",\n \"state_id\": 22\n }, {\n \"id\": 826,\n \"name\": \"میان راهان\",\n \"slug\": \"میان-راهان\",\n \"state_id\": 22\n }, {\n \"id\": 827,\n \"name\": \"نودشه\",\n \"slug\": \"نودشه\",\n \"state_id\": 22\n }, {\n \"id\": 828,\n \"name\": \"نوسود\",\n \"slug\": \"نوسود\",\n \"state_id\": 22\n }, {\n \"id\": 829,\n \"name\": \"هرسین\",\n \"slug\": \"هرسین\",\n \"state_id\": 22\n }, {\n \"id\": 830,\n \"name\": \"هلشی\",\n \"slug\": \"هلشی\",\n \"state_id\": 22\n }, {\n \"id\": 831,\n \"name\": \"باشت\",\n \"slug\": \"باشت\",\n \"state_id\": 23\n }, {\n \"id\": 832,\n \"name\": \"پاتاوه\",\n \"slug\": \"پاتاوه\",\n \"state_id\": 23\n }, {\n \"id\": 833,\n \"name\": \"چرام\",\n \"slug\": \"چرام\",\n \"state_id\": 23\n }, {\n \"id\": 834,\n \"name\": \"چیتاب\",\n \"slug\": \"چیتاب\",\n \"state_id\": 23\n }, {\n \"id\": 835,\n \"name\": \"دهدشت\",\n \"slug\": \"دهدشت\",\n \"state_id\": 23\n }, {\n \"id\": 836,\n \"name\": \"دوگنبدان\",\n \"slug\": \"دوگنبدان\",\n \"state_id\": 23\n }, {\n \"id\": 837,\n \"name\": \"دیشموک\",\n \"slug\": \"دیشموک\",\n \"state_id\": 23\n }, {\n \"id\": 838,\n \"name\": \"سوق\",\n \"slug\": \"سوق\",\n \"state_id\": 23\n }, {\n \"id\": 839,\n \"name\": \"سی سخت\",\n \"slug\": \"سی-سخت\",\n \"state_id\": 23\n }, {\n \"id\": 840,\n \"name\": \"قلعه رئیسی\",\n \"slug\": \"قلعه-رئیسی\",\n \"state_id\": 23\n }, {\n \"id\": 841,\n \"name\": \"گراب سفلی\",\n \"slug\": \"گراب-سفلی\",\n \"state_id\": 23\n }, {\n \"id\": 842,\n \"name\": \"لنده\",\n \"slug\": \"لنده\",\n \"state_id\": 23\n }, {\n \"id\": 843,\n \"name\": \"لیکک\",\n \"slug\": \"لیکک\",\n \"state_id\": 23\n }, {\n \"id\": 844,\n \"name\": \"مادوان\",\n \"slug\": \"مادوان\",\n \"state_id\": 23\n }, {\n \"id\": 845,\n \"name\": \"مارگون\",\n \"slug\": \"مارگون\",\n \"state_id\": 23\n }, {\n \"id\": 846,\n \"name\": \"یاسوج\",\n \"slug\": \"یاسوج\",\n \"state_id\": 23\n }, {\n \"id\": 847,\n \"name\": \"انبارآلوم\",\n \"slug\": \"انبارآلوم\",\n \"state_id\": 24\n }, {\n \"id\": 848,\n \"name\": \"اینچه برون\",\n \"slug\": \"اینچه-برون\",\n \"state_id\": 24\n }, {\n \"id\": 849,\n \"name\": \"آزادشهر\",\n \"slug\": \"آزادشهر\",\n \"state_id\": 24\n }, {\n \"id\": 850,\n \"name\": \"آق قلا\",\n \"slug\": \"آق-قلا\",\n \"state_id\": 24\n }, {\n \"id\": 851,\n \"name\": \"بندرترکمن\",\n \"slug\": \"بندرترکمن\",\n \"state_id\": 24\n }, {\n \"id\": 852,\n \"name\": \"بندرگز\",\n \"slug\": \"بندرگز\",\n \"state_id\": 24\n }, {\n \"id\": 853,\n \"name\": \"جلین\",\n \"slug\": \"جلین\",\n \"state_id\": 24\n }, {\n \"id\": 854,\n \"name\": \"خان ببین\",\n \"slug\": \"خان-ببین\",\n \"state_id\": 24\n }, {\n \"id\": 855,\n \"name\": \"دلند\",\n \"slug\": \"دلند\",\n \"state_id\": 24\n }, {\n \"id\": 856,\n \"name\": \"رامیان\",\n \"slug\": \"رامیان\",\n \"state_id\": 24\n }, {\n \"id\": 857,\n \"name\": \"سرخنکلاته\",\n \"slug\": \"سرخنکلاته\",\n \"state_id\": 24\n }, {\n \"id\": 858,\n \"name\": \"سیمین شهر\",\n \"slug\": \"سیمین-شهر\",\n \"state_id\": 24\n }, {\n \"id\": 859,\n \"name\": \"علی آباد کتول\",\n \"slug\": \"علی-آباد-کتول\",\n \"state_id\": 24\n }, {\n \"id\": 860,\n \"name\": \"فاضل آباد\",\n \"slug\": \"فاضل-آباد\",\n \"state_id\": 24\n }, {\n \"id\": 861,\n \"name\": \"کردکوی\",\n \"slug\": \"کردکوی\",\n \"state_id\": 24\n }, {\n \"id\": 862,\n \"name\": \"کلاله\",\n \"slug\": \"کلاله\",\n \"state_id\": 24\n }, {\n \"id\": 863,\n \"name\": \"گالیکش\",\n \"slug\": \"گالیکش\",\n \"state_id\": 24\n }, {\n \"id\": 864,\n \"name\": \"گرگان\",\n \"slug\": \"گرگان\",\n \"state_id\": 24\n }, {\n \"id\": 865,\n \"name\": \"گمیش تپه\",\n \"slug\": \"گمیش-تپه\",\n \"state_id\": 24\n }, {\n \"id\": 866,\n \"name\": \"گنبدکاووس\",\n \"slug\": \"گنبدکاووس\",\n \"state_id\": 24\n }, {\n \"id\": 867,\n \"name\": \"مراوه\",\n \"slug\": \"مراوه\",\n \"state_id\": 24\n }, {\n \"id\": 868,\n \"name\": \"مینودشت\",\n \"slug\": \"مینودشت\",\n \"state_id\": 24\n }, {\n \"id\": 869,\n \"name\": \"نگین شهر\",\n \"slug\": \"نگین-شهر\",\n \"state_id\": 24\n }, {\n \"id\": 870,\n \"name\": \"نوده خاندوز\",\n \"slug\": \"نوده-خاندوز\",\n \"state_id\": 24\n }, {\n \"id\": 871,\n \"name\": \"نوکنده\",\n \"slug\": \"نوکنده\",\n \"state_id\": 24\n }, {\n \"id\": 872,\n \"name\": \"ازنا\",\n \"slug\": \"ازنا\",\n \"state_id\": 25\n }, {\n \"id\": 873,\n \"name\": \"اشترینان\",\n \"slug\": \"اشترینان\",\n \"state_id\": 25\n }, {\n \"id\": 874,\n \"name\": \"الشتر\",\n \"slug\": \"الشتر\",\n \"state_id\": 25\n }, {\n \"id\": 875,\n \"name\": \"الیگودرز\",\n \"slug\": \"الیگودرز\",\n \"state_id\": 25\n }, {\n \"id\": 876,\n \"name\": \"بروجرد\",\n \"slug\": \"بروجرد\",\n \"state_id\": 25\n }, {\n \"id\": 877,\n \"name\": \"پلدختر\",\n \"slug\": \"پلدختر\",\n \"state_id\": 25\n }, {\n \"id\": 878,\n \"name\": \"چالانچولان\",\n \"slug\": \"چالانچولان\",\n \"state_id\": 25\n }, {\n \"id\": 879,\n \"name\": \"چغلوندی\",\n \"slug\": \"چغلوندی\",\n \"state_id\": 25\n }, {\n \"id\": 880,\n \"name\": \"چقابل\",\n \"slug\": \"چقابل\",\n \"state_id\": 25\n }, {\n \"id\": 881,\n \"name\": \"خرم آباد\",\n \"slug\": \"لرستان-خرم-آباد\",\n \"state_id\": 25\n }, {\n \"id\": 882,\n \"name\": \"درب گنبد\",\n \"slug\": \"درب-گنبد\",\n \"state_id\": 25\n }, {\n \"id\": 883,\n \"name\": \"دورود\",\n \"slug\": \"دورود\",\n \"state_id\": 25\n }, {\n \"id\": 884,\n \"name\": \"زاغه\",\n \"slug\": \"زاغه\",\n \"state_id\": 25\n }, {\n \"id\": 885,\n \"name\": \"سپیددشت\",\n \"slug\": \"سپیددشت\",\n \"state_id\": 25\n }, {\n \"id\": 886,\n \"name\": \"سراب دوره\",\n \"slug\": \"سراب-دوره\",\n \"state_id\": 25\n }, {\n \"id\": 887,\n \"name\": \"فیروزآباد\",\n \"slug\": \"لرستان-فیروزآباد\",\n \"state_id\": 25\n }, {\n \"id\": 888,\n \"name\": \"کونانی\",\n \"slug\": \"کونانی\",\n \"state_id\": 25\n }, {\n \"id\": 889,\n \"name\": \"کوهدشت\",\n \"slug\": \"کوهدشت\",\n \"state_id\": 25\n }, {\n \"id\": 890,\n \"name\": \"گراب\",\n \"slug\": \"گراب\",\n \"state_id\": 25\n }, {\n \"id\": 891,\n \"name\": \"معمولان\",\n \"slug\": \"معمولان\",\n \"state_id\": 25\n }, {\n \"id\": 892,\n \"name\": \"مومن آباد\",\n \"slug\": \"مومن-آباد\",\n \"state_id\": 25\n }, {\n \"id\": 893,\n \"name\": \"نورآباد\",\n \"slug\": \"لرستان-نورآباد\",\n \"state_id\": 25\n }, {\n \"id\": 894,\n \"name\": \"ویسیان\",\n \"slug\": \"ویسیان\",\n \"state_id\": 25\n }, {\n \"id\": 895,\n \"name\": \"احمدسرگوراب\",\n \"slug\": \"احمدسرگوراب\",\n \"state_id\": 26\n }, {\n \"id\": 896,\n \"name\": \"اسالم\",\n \"slug\": \"اسالم\",\n \"state_id\": 26\n }, {\n \"id\": 897,\n \"name\": \"اطاقور\",\n \"slug\": \"اطاقور\",\n \"state_id\": 26\n }, {\n \"id\": 898,\n \"name\": \"املش\",\n \"slug\": \"املش\",\n \"state_id\": 26\n }, {\n \"id\": 899,\n \"name\": \"آستارا\",\n \"slug\": \"آستارا\",\n \"state_id\": 26\n }, {\n \"id\": 900,\n \"name\": \"آستانه اشرفیه\",\n \"slug\": \"آستانه-اشرفیه\",\n \"state_id\": 26\n }, {\n \"id\": 901,\n \"name\": \"بازار جمعه\",\n \"slug\": \"بازار-جمعه\",\n \"state_id\": 26\n }, {\n \"id\": 902,\n \"name\": \"بره سر\",\n \"slug\": \"بره-سر\",\n \"state_id\": 26\n }, {\n \"id\": 903,\n \"name\": \"بندرانزلی\",\n \"slug\": \"بندرانزلی\",\n \"state_id\": 26\n }, {\n \"id\": 906,\n \"name\": \"پره سر\",\n \"slug\": \"پره-سر\",\n \"state_id\": 26\n }, {\n \"id\": 907,\n \"name\": \"تالش\",\n \"slug\": \"تالش\",\n \"state_id\": 26\n }, {\n \"id\": 908,\n \"name\": \"توتکابن\",\n \"slug\": \"توتکابن\",\n \"state_id\": 26\n }, {\n \"id\": 909,\n \"name\": \"جیرنده\",\n \"slug\": \"جیرنده\",\n \"state_id\": 26\n }, {\n \"id\": 910,\n \"name\": \"چابکسر\",\n \"slug\": \"چابکسر\",\n \"state_id\": 26\n }, {\n \"id\": 911,\n \"name\": \"چاف و چمخاله\",\n \"slug\": \"چاف-و-چمخاله\",\n \"state_id\": 26\n }, {\n \"id\": 912,\n \"name\": \"چوبر\",\n \"slug\": \"چوبر\",\n \"state_id\": 26\n }, {\n \"id\": 913,\n \"name\": \"حویق\",\n \"slug\": \"حویق\",\n \"state_id\": 26\n }, {\n \"id\": 914,\n \"name\": \"خشکبیجار\",\n \"slug\": \"خشکبیجار\",\n \"state_id\": 26\n }, {\n \"id\": 915,\n \"name\": \"خمام\",\n \"slug\": \"خمام\",\n \"state_id\": 26\n }, {\n \"id\": 916,\n \"name\": \"دیلمان\",\n \"slug\": \"دیلمان\",\n \"state_id\": 26\n }, {\n \"id\": 917,\n \"name\": \"رانکوه\",\n \"slug\": \"رانکوه\",\n \"state_id\": 26\n }, {\n \"id\": 918,\n \"name\": \"رحیم آباد\",\n \"slug\": \"رحیم-آباد\",\n \"state_id\": 26\n }, {\n \"id\": 919,\n \"name\": \"رستم آباد\",\n \"slug\": \"رستم-آباد\",\n \"state_id\": 26\n }, {\n \"id\": 920,\n \"name\": \"رشت\",\n \"slug\": \"رشت\",\n \"state_id\": 26\n }, {\n \"id\": 921,\n \"name\": \"رضوانشهر\",\n \"slug\": \"گیلان-رضوانشهر\",\n \"state_id\": 26\n }, {\n \"id\": 922,\n \"name\": \"رودبار\",\n \"slug\": \"گیلان-رودبار\",\n \"state_id\": 26\n }, {\n \"id\": 923,\n \"name\": \"رودبنه\",\n \"slug\": \"رودبنه\",\n \"state_id\": 26\n }, {\n \"id\": 924,\n \"name\": \"رودسر\",\n \"slug\": \"رودسر\",\n \"state_id\": 26\n }, {\n \"id\": 925,\n \"name\": \"سنگر\",\n \"slug\": \"سنگر\",\n \"state_id\": 26\n }, {\n \"id\": 926,\n \"name\": \"سیاهکل\",\n \"slug\": \"سیاهکل\",\n \"state_id\": 26\n }, {\n \"id\": 927,\n \"name\": \"شفت\",\n \"slug\": \"شفت\",\n \"state_id\": 26\n }, {\n \"id\": 928,\n \"name\": \"شلمان\",\n \"slug\": \"شلمان\",\n \"state_id\": 26\n }, {\n \"id\": 929,\n \"name\": \"صومعه سرا\",\n \"slug\": \"صومعه-سرا\",\n \"state_id\": 26\n }, {\n \"id\": 930,\n \"name\": \"فومن\",\n \"slug\": \"فومن\",\n \"state_id\": 26\n }, {\n \"id\": 931,\n \"name\": \"کلاچای\",\n \"slug\": \"کلاچای\",\n \"state_id\": 26\n }, {\n \"id\": 932,\n \"name\": \"کوچصفهان\",\n \"slug\": \"کوچصفهان\",\n \"state_id\": 26\n }, {\n \"id\": 933,\n \"name\": \"کومله\",\n \"slug\": \"کومله\",\n \"state_id\": 26\n }, {\n \"id\": 934,\n \"name\": \"کیاشهر\",\n \"slug\": \"کیاشهر\",\n \"state_id\": 26\n }, {\n \"id\": 935,\n \"name\": \"گوراب زرمیخ\",\n \"slug\": \"گوراب-زرمیخ\",\n \"state_id\": 26\n }, {\n \"id\": 936,\n \"name\": \"لاهیجان\",\n \"slug\": \"لاهیجان\",\n \"state_id\": 26\n }, {\n \"id\": 937,\n \"name\": \"لشت نشا\",\n \"slug\": \"لشت-نشا\",\n \"state_id\": 26\n }, {\n \"id\": 938,\n \"name\": \"لنگرود\",\n \"slug\": \"لنگرود\",\n \"state_id\": 26\n }, {\n \"id\": 939,\n \"name\": \"لوشان\",\n \"slug\": \"لوشان\",\n \"state_id\": 26\n }, {\n \"id\": 940,\n \"name\": \"لولمان\",\n \"slug\": \"لولمان\",\n \"state_id\": 26\n }, {\n \"id\": 941,\n \"name\": \"لوندویل\",\n \"slug\": \"لوندویل\",\n \"state_id\": 26\n }, {\n \"id\": 942,\n \"name\": \"لیسار\",\n \"slug\": \"لیسار\",\n \"state_id\": 26\n }, {\n \"id\": 943,\n \"name\": \"ماسال\",\n \"slug\": \"ماسال\",\n \"state_id\": 26\n }, {\n \"id\": 944,\n \"name\": \"ماسوله\",\n \"slug\": \"ماسوله\",\n \"state_id\": 26\n }, {\n \"id\": 945,\n \"name\": \"مرجقل\",\n \"slug\": \"مرجقل\",\n \"state_id\": 26\n }, {\n \"id\": 946,\n \"name\": \"منجیل\",\n \"slug\": \"منجیل\",\n \"state_id\": 26\n }, {\n \"id\": 947,\n \"name\": \"واجارگاه\",\n \"slug\": \"واجارگاه\",\n \"state_id\": 26\n }, {\n \"id\": 948,\n \"name\": \"امیرکلا\",\n \"slug\": \"امیرکلا\",\n \"state_id\": 27\n }, {\n \"id\": 949,\n \"name\": \"ایزدشهر\",\n \"slug\": \"ایزدشهر\",\n \"state_id\": 27\n }, {\n \"id\": 950,\n \"name\": \"آلاشت\",\n \"slug\": \"آلاشت\",\n \"state_id\": 27\n }, {\n \"id\": 951,\n \"name\": \"آمل\",\n \"slug\": \"آمل\",\n \"state_id\": 27\n }, {\n \"id\": 952,\n \"name\": \"بابل\",\n \"slug\": \"بابل\",\n \"state_id\": 27\n }, {\n \"id\": 953,\n \"name\": \"بابلسر\",\n \"slug\": \"بابلسر\",\n \"state_id\": 27\n }, {\n \"id\": 954,\n \"name\": \"بالاده\",\n \"slug\": \"مازندران-بالاده\",\n \"state_id\": 27\n }, {\n \"id\": 955,\n \"name\": \"بهشهر\",\n \"slug\": \"بهشهر\",\n \"state_id\": 27\n }, {\n \"id\": 956,\n \"name\": \"بهنمیر\",\n \"slug\": \"بهنمیر\",\n \"state_id\": 27\n }, {\n \"id\": 957,\n \"name\": \"پل سفید\",\n \"slug\": \"پل-سفید\",\n \"state_id\": 27\n }, {\n \"id\": 958,\n \"name\": \"تنکابن\",\n \"slug\": \"تنکابن\",\n \"state_id\": 27\n }, {\n \"id\": 959,\n \"name\": \"جویبار\",\n \"slug\": \"جویبار\",\n \"state_id\": 27\n }, {\n \"id\": 960,\n \"name\": \"چالوس\",\n \"slug\": \"چالوس\",\n \"state_id\": 27\n }, {\n \"id\": 961,\n \"name\": \"چمستان\",\n \"slug\": \"چمستان\",\n \"state_id\": 27\n }, {\n \"id\": 962,\n \"name\": \"خرم آباد\",\n \"slug\": \"مازندران-خرم-آباد\",\n \"state_id\": 27\n }, {\n \"id\": 963,\n \"name\": \"خلیل شهر\",\n \"slug\": \"خلیل-شهر\",\n \"state_id\": 27\n }, {\n \"id\": 964,\n \"name\": \"خوش رودپی\",\n \"slug\": \"خوش-رودپی\",\n \"state_id\": 27\n }, {\n \"id\": 965,\n \"name\": \"دابودشت\",\n \"slug\": \"دابودشت\",\n \"state_id\": 27\n }, {\n \"id\": 966,\n \"name\": \"رامسر\",\n \"slug\": \"رامسر\",\n \"state_id\": 27\n }, {\n \"id\": 967,\n \"name\": \"رستمکلا\",\n \"slug\": \"رستمکلا\",\n \"state_id\": 27\n }, {\n \"id\": 968,\n \"name\": \"رویان\",\n \"slug\": \"رویان\",\n \"state_id\": 27\n }, {\n \"id\": 969,\n \"name\": \"رینه\",\n \"slug\": \"رینه\",\n \"state_id\": 27\n }, {\n \"id\": 970,\n \"name\": \"زرگرمحله\",\n \"slug\": \"زرگرمحله\",\n \"state_id\": 27\n }, {\n \"id\": 971,\n \"name\": \"زیرآب\",\n \"slug\": \"زیرآب\",\n \"state_id\": 27\n }, {\n \"id\": 972,\n \"name\": \"ساری\",\n \"slug\": \"ساری\",\n \"state_id\": 27\n }, {\n \"id\": 973,\n \"name\": \"سرخرود\",\n \"slug\": \"سرخرود\",\n \"state_id\": 27\n }, {\n \"id\": 974,\n \"name\": \"سلمان شهر\",\n \"slug\": \"سلمان-شهر\",\n \"state_id\": 27\n }, {\n \"id\": 975,\n \"name\": \"سورک\",\n \"slug\": \"سورک\",\n \"state_id\": 27\n }, {\n \"id\": 976,\n \"name\": \"شیرگاه\",\n \"slug\": \"شیرگاه\",\n \"state_id\": 27\n }, {\n \"id\": 977,\n \"name\": \"شیرود\",\n \"slug\": \"شیرود\",\n \"state_id\": 27\n }, {\n \"id\": 978,\n \"name\": \"عباس آباد\",\n \"slug\": \"عباس-آباد\",\n \"state_id\": 27\n }, {\n \"id\": 979,\n \"name\": \"فریدونکنار\",\n \"slug\": \"فریدونکنار\",\n \"state_id\": 27\n }, {\n \"id\": 980,\n \"name\": \"فریم\",\n \"slug\": \"فریم\",\n \"state_id\": 27\n }, {\n \"id\": 981,\n \"name\": \"قائم شهر\",\n \"slug\": \"قائم-شهر\",\n \"state_id\": 27\n }, {\n \"id\": 982,\n \"name\": \"کتالم\",\n \"slug\": \"کتالم\",\n \"state_id\": 27\n }, {\n \"id\": 983,\n \"name\": \"کلارآباد\",\n \"slug\": \"کلارآباد\",\n \"state_id\": 27\n }, {\n \"id\": 984,\n \"name\": \"کلاردشت\",\n \"slug\": \"کلاردشت\",\n \"state_id\": 27\n }, {\n \"id\": 985,\n \"name\": \"کله بست\",\n \"slug\": \"کله-بست\",\n \"state_id\": 27\n }, {\n \"id\": 986,\n \"name\": \"کوهی خیل\",\n \"slug\": \"کوهی-خیل\",\n \"state_id\": 27\n }, {\n \"id\": 987,\n \"name\": \"کیاسر\",\n \"slug\": \"کیاسر\",\n \"state_id\": 27\n }, {\n \"id\": 988,\n \"name\": \"کیاکلا\",\n \"slug\": \"کیاکلا\",\n \"state_id\": 27\n }, {\n \"id\": 989,\n \"name\": \"گتاب\",\n \"slug\": \"گتاب\",\n \"state_id\": 27\n }, {\n \"id\": 990,\n \"name\": \"گزنک\",\n \"slug\": \"گزنک\",\n \"state_id\": 27\n }, {\n \"id\": 991,\n \"name\": \"گلوگاه\",\n \"slug\": \"گلوگاه\",\n \"state_id\": 27\n }, {\n \"id\": 992,\n \"name\": \"محمودآباد\",\n \"slug\": \"مازندران-محمودآباد\",\n \"state_id\": 27\n }, {\n \"id\": 993,\n \"name\": \"مرزن آباد\",\n \"slug\": \"مرزن-آباد\",\n \"state_id\": 27\n }, {\n \"id\": 994,\n \"name\": \"مرزیکلا\",\n \"slug\": \"مرزیکلا\",\n \"state_id\": 27\n }, {\n \"id\": 995,\n \"name\": \"نشتارود\",\n \"slug\": \"نشتارود\",\n \"state_id\": 27\n }, {\n \"id\": 996,\n \"name\": \"نکا\",\n \"slug\": \"نکا\",\n \"state_id\": 27\n }, {\n \"id\": 997,\n \"name\": \"نور\",\n \"slug\": \"نور\",\n \"state_id\": 27\n }, {\n \"id\": 998,\n \"name\": \"نوشهر\",\n \"slug\": \"نوشهر\",\n \"state_id\": 27\n }, {\n \"id\": 1119,\n \"name\": \"سادات شهر\",\n \"slug\": \"سادات-شهر\",\n \"state_id\": 27\n }, {\n \"id\": 999,\n \"name\": \"اراک\",\n \"slug\": \"اراک\",\n \"state_id\": 28\n }, {\n \"id\": 1000,\n \"name\": \"آستانه\",\n \"slug\": \"آستانه\",\n \"state_id\": 28\n }, {\n \"id\": 1001,\n \"name\": \"آشتیان\",\n \"slug\": \"آشتیان\",\n \"state_id\": 28\n }, {\n \"id\": 1002,\n \"name\": \"پرندک\",\n \"slug\": \"پرندک\",\n \"state_id\": 28\n }, {\n \"id\": 1003,\n \"name\": \"تفرش\",\n \"slug\": \"تفرش\",\n \"state_id\": 28\n }, {\n \"id\": 1004,\n \"name\": \"توره\",\n \"slug\": \"توره\",\n \"state_id\": 28\n }, {\n \"id\": 1005,\n \"name\": \"جاورسیان\",\n \"slug\": \"جاورسیان\",\n \"state_id\": 28\n }, {\n \"id\": 1006,\n \"name\": \"خشکرود\",\n \"slug\": \"خشکرود\",\n \"state_id\": 28\n }, {\n \"id\": 1007,\n \"name\": \"خمین\",\n \"slug\": \"خمین\",\n \"state_id\": 28\n }, {\n \"id\": 1008,\n \"name\": \"خنداب\",\n \"slug\": \"خنداب\",\n \"state_id\": 28\n }, {\n \"id\": 1009,\n \"name\": \"داودآباد\",\n \"slug\": \"داودآباد\",\n \"state_id\": 28\n }, {\n \"id\": 1010,\n \"name\": \"دلیجان\",\n \"slug\": \"دلیجان\",\n \"state_id\": 28\n }, {\n \"id\": 1011,\n \"name\": \"رازقان\",\n \"slug\": \"رازقان\",\n \"state_id\": 28\n }, {\n \"id\": 1012,\n \"name\": \"زاویه\",\n \"slug\": \"زاویه\",\n \"state_id\": 28\n }, {\n \"id\": 1013,\n \"name\": \"ساروق\",\n \"slug\": \"ساروق\",\n \"state_id\": 28\n }, {\n \"id\": 1014,\n \"name\": \"ساوه\",\n \"slug\": \"ساوه\",\n \"state_id\": 28\n }, {\n \"id\": 1015,\n \"name\": \"سنجان\",\n \"slug\": \"سنجان\",\n \"state_id\": 28\n }, {\n \"id\": 1016,\n \"name\": \"شازند\",\n \"slug\": \"شازند\",\n \"state_id\": 28\n }, {\n \"id\": 1017,\n \"name\": \"غرق آباد\",\n \"slug\": \"غرق-آباد\",\n \"state_id\": 28\n }, {\n \"id\": 1018,\n \"name\": \"فرمهین\",\n \"slug\": \"فرمهین\",\n \"state_id\": 28\n }, {\n \"id\": 1019,\n \"name\": \"قورچی باشی\",\n \"slug\": \"قورچی-باشی\",\n \"state_id\": 28\n }, {\n \"id\": 1020,\n \"name\": \"کرهرود\",\n \"slug\": \"کرهرود\",\n \"state_id\": 28\n }, {\n \"id\": 1021,\n \"name\": \"کمیجان\",\n \"slug\": \"کمیجان\",\n \"state_id\": 28\n }, {\n \"id\": 1022,\n \"name\": \"مامونیه\",\n \"slug\": \"مامونیه\",\n \"state_id\": 28\n }, {\n \"id\": 1023,\n \"name\": \"محلات\",\n \"slug\": \"محلات\",\n \"state_id\": 28\n }, {\n \"id\": 1024,\n \"name\": \"مهاجران\",\n \"slug\": \"مهاجران\",\n \"state_id\": 28\n }, {\n \"id\": 1025,\n \"name\": \"میلاجرد\",\n \"slug\": \"میلاجرد\",\n \"state_id\": 28\n }, {\n \"id\": 1026,\n \"name\": \"نراق\",\n \"slug\": \"نراق\",\n \"state_id\": 28\n }, {\n \"id\": 1027,\n \"name\": \"نوبران\",\n \"slug\": \"نوبران\",\n \"state_id\": 28\n }, {\n \"id\": 1028,\n \"name\": \"نیمور\",\n \"slug\": \"نیمور\",\n \"state_id\": 28\n }, {\n \"id\": 1029,\n \"name\": \"هندودر\",\n \"slug\": \"هندودر\",\n \"state_id\": 28\n }, {\n \"id\": 1030,\n \"name\": \"ابوموسی\",\n \"slug\": \"ابوموسی\",\n \"state_id\": 29\n }, {\n \"id\": 1031,\n \"name\": \"بستک\",\n \"slug\": \"بستک\",\n \"state_id\": 29\n }, {\n \"id\": 1032,\n \"name\": \"بندرجاسک\",\n \"slug\": \"بندرجاسک\",\n \"state_id\": 29\n }, {\n \"id\": 1033,\n \"name\": \"بندرچارک\",\n \"slug\": \"بندرچارک\",\n \"state_id\": 29\n }, {\n \"id\": 1034,\n \"name\": \"بندرخمیر\",\n \"slug\": \"بندرخمیر\",\n \"state_id\": 29\n }, {\n \"id\": 1035,\n \"name\": \"بندرعباس\",\n \"slug\": \"بندرعباس\",\n \"state_id\": 29\n }, {\n \"id\": 1036,\n \"name\": \"بندرلنگه\",\n \"slug\": \"بندرلنگه\",\n \"state_id\": 29\n }, {\n \"id\": 1037,\n \"name\": \"بیکا\",\n \"slug\": \"بیکا\",\n \"state_id\": 29\n }, {\n \"id\": 1038,\n \"name\": \"پارسیان\",\n \"slug\": \"پارسیان\",\n \"state_id\": 29\n }, {\n \"id\": 1039,\n \"name\": \"تخت\",\n \"slug\": \"تخت\",\n \"state_id\": 29\n }, {\n \"id\": 1040,\n \"name\": \"جناح\",\n \"slug\": \"جناح\",\n \"state_id\": 29\n }, {\n \"id\": 1041,\n \"name\": \"حاجی آباد\",\n \"slug\": \"هرمزگان-حاجی-آباد\",\n \"state_id\": 29\n }, {\n \"id\": 1042,\n \"name\": \"درگهان\",\n \"slug\": \"درگهان\",\n \"state_id\": 29\n }, {\n \"id\": 1043,\n \"name\": \"دهبارز\",\n \"slug\": \"دهبارز\",\n \"state_id\": 29\n }, {\n \"id\": 1044,\n \"name\": \"رویدر\",\n \"slug\": \"رویدر\",\n \"state_id\": 29\n }, {\n \"id\": 1045,\n \"name\": \"زیارتعلی\",\n \"slug\": \"زیارتعلی\",\n \"state_id\": 29\n }, {\n \"id\": 1046,\n \"name\": \"سردشت\",\n \"slug\": \"هرمزگان-سردشت\",\n \"state_id\": 29\n }, {\n \"id\": 1047,\n \"name\": \"سندرک\",\n \"slug\": \"سندرک\",\n \"state_id\": 29\n }, {\n \"id\": 1048,\n \"name\": \"سوزا\",\n \"slug\": \"سوزا\",\n \"state_id\": 29\n }, {\n \"id\": 1049,\n \"name\": \"سیریک\",\n \"slug\": \"سیریک\",\n \"state_id\": 29\n }, {\n \"id\": 1050,\n \"name\": \"فارغان\",\n \"slug\": \"فارغان\",\n \"state_id\": 29\n }, {\n \"id\": 1051,\n \"name\": \"فین\",\n \"slug\": \"فین\",\n \"state_id\": 29\n }, {\n \"id\": 1052,\n \"name\": \"قشم\",\n \"slug\": \"قشم\",\n \"state_id\": 29\n }, {\n \"id\": 1053,\n \"name\": \"قلعه قاضی\",\n \"slug\": \"قلعه-قاضی\",\n \"state_id\": 29\n }, {\n \"id\": 1054,\n \"name\": \"کنگ\",\n \"slug\": \"کنگ\",\n \"state_id\": 29\n }, {\n \"id\": 1055,\n \"name\": \"کوشکنار\",\n \"slug\": \"کوشکنار\",\n \"state_id\": 29\n }, {\n \"id\": 1056,\n \"name\": \"کیش\",\n \"slug\": \"کیش\",\n \"state_id\": 29\n }, {\n \"id\": 1057,\n \"name\": \"گوهران\",\n \"slug\": \"گوهران\",\n \"state_id\": 29\n }, {\n \"id\": 1058,\n \"name\": \"میناب\",\n \"slug\": \"میناب\",\n \"state_id\": 29\n }, {\n \"id\": 1059,\n \"name\": \"هرمز\",\n \"slug\": \"هرمز\",\n \"state_id\": 29\n }, {\n \"id\": 1060,\n \"name\": \"هشتبندی\",\n \"slug\": \"هشتبندی\",\n \"state_id\": 29\n }, {\n \"id\": 1061,\n \"name\": \"ازندریان\",\n \"slug\": \"ازندریان\",\n \"state_id\": 30\n }, {\n \"id\": 1062,\n \"name\": \"اسدآباد\",\n \"slug\": \"اسدآباد\",\n \"state_id\": 30\n }, {\n \"id\": 1063,\n \"name\": \"برزول\",\n \"slug\": \"برزول\",\n \"state_id\": 30\n }, {\n \"id\": 1064,\n \"name\": \"بهار\",\n \"slug\": \"بهار\",\n \"state_id\": 30\n }, {\n \"id\": 1065,\n \"name\": \"تویسرکان\",\n \"slug\": \"تویسرکان\",\n \"state_id\": 30\n }, {\n \"id\": 1066,\n \"name\": \"جورقان\",\n \"slug\": \"جورقان\",\n \"state_id\": 30\n }, {\n \"id\": 1067,\n \"name\": \"جوکار\",\n \"slug\": \"جوکار\",\n \"state_id\": 30\n }, {\n \"id\": 1068,\n \"name\": \"دمق\",\n \"slug\": \"دمق\",\n \"state_id\": 30\n }, {\n \"id\": 1069,\n \"name\": \"رزن\",\n \"slug\": \"رزن\",\n \"state_id\": 30\n }, {\n \"id\": 1070,\n \"name\": \"زنگنه\",\n \"slug\": \"زنگنه\",\n \"state_id\": 30\n }, {\n \"id\": 1071,\n \"name\": \"سامن\",\n \"slug\": \"سامن\",\n \"state_id\": 30\n }, {\n \"id\": 1072,\n \"name\": \"سرکان\",\n \"slug\": \"سرکان\",\n \"state_id\": 30\n }, {\n \"id\": 1073,\n \"name\": \"شیرین سو\",\n \"slug\": \"شیرین-سو\",\n \"state_id\": 30\n }, {\n \"id\": 1074,\n \"name\": \"صالح آباد\",\n \"slug\": \"همدان-صالح-آباد\",\n \"state_id\": 30\n }, {\n \"id\": 1075,\n \"name\": \"فامنین\",\n \"slug\": \"فامنین\",\n \"state_id\": 30\n }, {\n \"id\": 1076,\n \"name\": \"فرسفج\",\n \"slug\": \"فرسفج\",\n \"state_id\": 30\n }, {\n \"id\": 1077,\n \"name\": \"فیروزان\",\n \"slug\": \"فیروزان\",\n \"state_id\": 30\n }, {\n \"id\": 1078,\n \"name\": \"قروه درجزین\",\n \"slug\": \"قروه-درجزین\",\n \"state_id\": 30\n }, {\n \"id\": 1079,\n \"name\": \"قهاوند\",\n \"slug\": \"قهاوند\",\n \"state_id\": 30\n }, {\n \"id\": 1080,\n \"name\": \"کبودر آهنگ\",\n \"slug\": \"کبودر-آهنگ\",\n \"state_id\": 30\n }, {\n \"id\": 1081,\n \"name\": \"گل تپه\",\n \"slug\": \"گل-تپه\",\n \"state_id\": 30\n }, {\n \"id\": 1082,\n \"name\": \"گیان\",\n \"slug\": \"گیان\",\n \"state_id\": 30\n }, {\n \"id\": 1083,\n \"name\": \"لالجین\",\n \"slug\": \"لالجین\",\n \"state_id\": 30\n }, {\n \"id\": 1084,\n \"name\": \"مریانج\",\n \"slug\": \"مریانج\",\n \"state_id\": 30\n }, {\n \"id\": 1085,\n \"name\": \"ملایر\",\n \"slug\": \"ملایر\",\n \"state_id\": 30\n }, {\n \"id\": 1086,\n \"name\": \"نهاوند\",\n \"slug\": \"نهاوند\",\n \"state_id\": 30\n }, {\n \"id\": 1087,\n \"name\": \"همدان\",\n \"slug\": \"شهر-همدان\",\n \"state_id\": 30\n }, {\n \"id\": 1088,\n \"name\": \"ابرکوه\",\n \"slug\": \"ابرکوه\",\n \"state_id\": 31\n }, {\n \"id\": 1089,\n \"name\": \"احمدآباد\",\n \"slug\": \"احمدآباد\",\n \"state_id\": 31\n }, {\n \"id\": 1090,\n \"name\": \"اردکان\",\n \"slug\": \"یزد-اردکان\",\n \"state_id\": 31\n }, {\n \"id\": 1091,\n \"name\": \"اشکذر\",\n \"slug\": \"اشکذر\",\n \"state_id\": 31\n }, {\n \"id\": 1092,\n \"name\": \"بافق\",\n \"slug\": \"بافق\",\n \"state_id\": 31\n }, {\n \"id\": 1093,\n \"name\": \"بفروئیه\",\n \"slug\": \"بفروئیه\",\n \"state_id\": 31\n }, {\n \"id\": 1094,\n \"name\": \"بهاباد\",\n \"slug\": \"بهاباد\",\n \"state_id\": 31\n }, {\n \"id\": 1095,\n \"name\": \"تفت\",\n \"slug\": \"تفت\",\n \"state_id\": 31\n }, {\n \"id\": 1096,\n \"name\": \"حمیدیا\",\n \"slug\": \"حمیدیا\",\n \"state_id\": 31\n }, {\n \"id\": 1097,\n \"name\": \"خضرآباد\",\n \"slug\": \"خضرآباد\",\n \"state_id\": 31\n }, {\n \"id\": 1098,\n \"name\": \"دیهوک\",\n \"slug\": \"دیهوک\",\n \"state_id\": 31\n }, {\n \"id\": 1099,\n \"name\": \"زارچ\",\n \"slug\": \"زارچ\",\n \"state_id\": 31\n }, {\n \"id\": 1100,\n \"name\": \"شاهدیه\",\n \"slug\": \"شاهدیه\",\n \"state_id\": 31\n }, {\n \"id\": 1101,\n \"name\": \"طبس\",\n \"slug\": \"یزد-طبس\",\n \"state_id\": 31\n }, {\n \"id\": 1103,\n \"name\": \"عقدا\",\n \"slug\": \"عقدا\",\n \"state_id\": 31\n }, {\n \"id\": 1104,\n \"name\": \"مروست\",\n \"slug\": \"مروست\",\n \"state_id\": 31\n }, {\n \"id\": 1105,\n \"name\": \"مهردشت\",\n \"slug\": \"مهردشت\",\n \"state_id\": 31\n }, {\n \"id\": 1106,\n \"name\": \"مهریز\",\n \"slug\": \"مهریز\",\n \"state_id\": 31\n }, {\n \"id\": 1107,\n \"name\": \"میبد\",\n \"slug\": \"میبد\",\n \"state_id\": 31\n }, {\n \"id\": 1108,\n \"name\": \"ندوشن\",\n \"slug\": \"ندوشن\",\n \"state_id\": 31\n }, {\n \"id\": 1109,\n \"name\": \"نیر\",\n \"slug\": \"یزد-نیر\",\n \"state_id\": 31\n }, {\n \"id\": 1110,\n \"name\": \"هرات\",\n \"slug\": \"هرات\",\n \"state_id\": 31\n }, {\n \"id\": 1111,\n \"name\": \"یزد\",\n \"slug\": \"شهر-یزد\",\n \"state_id\": 31\n }];\n return data;\n}\n\nmodule.exports = data;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJkYXRhIiwic3RhdGVzIiwiY2l0aWVzIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvcGx1Z2lucy9kYXRhLmpzPzcxOTIiXSwic291cmNlc0NvbnRlbnQiOlsiXG5cbmZ1bmN0aW9uICBkYXRhKCl7XG4gICAgbGV0IGRhdGEgPSB7fTtcblxuICAgIGRhdGEuc3RhdGVzID0gW1xuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDEsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYotiw2LHYqNin24zYrNin2YYg2LTYsdmC24xcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItii2LDYsdio2KfbjNis2KfZhi3YtNix2YLbjFwiXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMixcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItii2LDYsdio2KfbjNis2KfZhiDYutix2KjbjFwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2KLYsNix2KjYp9uM2KzYp9mGLdi62LHYqNuMXCJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAzLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KfYsdiv2KjbjNmEXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYp9ix2K/YqNuM2YRcIlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDQsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYp9i12YHZh9in2YZcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItin2LXZgdmH2KfZhlwiXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItin2YTYqNix2LJcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItin2YTYqNix2LJcIlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDYsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYp9uM2YTYp9mFXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYp9uM2YTYp9mFXCJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA3LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KjZiNi02YfYsVwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2KjZiNi02YfYsVwiXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogOCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItiq2YfYsdin2YZcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItiq2YfYsdin2YZcIlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDksXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLahtmH2KfYsdmF2K3Yp9mEINmIINio2K7YqtuM2KfYsduMXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLahtmH2KfYsdmF2K3Yp9mELdmILdio2K7YqtuM2KfYsduMXCJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAxMCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItiu2LHYp9iz2KfZhiDYrNmG2YjYqNuMXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYrtix2KfYs9in2YYt2KzZhtmI2KjbjFwiXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMTEsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYrtix2KfYs9in2YYg2LHYttmI24xcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItiu2LHYp9iz2KfZhi3Ysdi22YjbjFwiXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMTIsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYrtix2KfYs9in2YYg2LTZhdin2YTbjFwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2K7Ysdin2LPYp9mGLdi02YXYp9mE24xcIlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDEzLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2K7ZiNiy2LPYqtin2YZcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItiu2YjYstiz2KrYp9mGXCJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAxNCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItiy2YbYrNin2YZcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItiy2YbYrNin2YZcIlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDE1LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2LPZhdmG2KfZhlwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2LPZhdmG2KfZhlwiXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMTYsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYs9uM2LPYqtin2YYg2Ygg2KjZhNmI2obYs9iq2KfZhlwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2LPbjNiz2KrYp9mGLdmILdio2YTZiNqG2LPYqtin2YZcIlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDE3LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2YHYp9ix2LNcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItmB2KfYsdizXCJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAxOCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItmC2LLZiNuM2YZcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItmC2LLZiNuM2YZcIlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDE5LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2YLZhVwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2YLZhVwiXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMjAsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLaqdix2K/Ys9iq2KfZhlwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2qnYsdiv2LPYqtin2YZcIlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDIxLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2qnYsdmF2KfZhlwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2qnYsdmF2KfZhlwiXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMjIsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLaqdix2YXYp9mG2LTYp9mHXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLaqdix2YXYp9mG2LTYp9mHXCJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAyMyxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItqp2Yfar9uM2YTZiNuM2Ycg2Ygg2KjZiNuM2LHYp9it2YXYr1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2qnZh9qv24zZhNmI24zZhy3ZiC3YqNmI24zYsdin2K3ZhdivXCJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAyNCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItqv2YTYs9iq2KfZhlwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2q/ZhNiz2KrYp9mGXCJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAyNSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItmE2LHYs9iq2KfZhlwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2YTYsdiz2KrYp9mGXCJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAyNixcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItqv24zZhNin2YZcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItqv24zZhNin2YZcIlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDI3LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2YXYp9iy2YbYr9ix2KfZhlwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2YXYp9iy2YbYr9ix2KfZhlwiXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMjgsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZhdix2qnYstuMXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZhdix2qnYstuMXCJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAyOSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItmH2LHZhdiy2q/Yp9mGXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZh9ix2YXYstqv2KfZhlwiXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMzAsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZh9mF2K/Yp9mGXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZh9mF2K/Yp9mGXCJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAzMSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItuM2LLYr1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi24zYstivXCJcbiAgICAgICAgfVxuICAgIF07XG4gICAgZGF0YS5jaXRpZXMgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItin2LPaqdmIXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYp9iz2qnZiFwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMixcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItin2YfYsVwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2KfZh9ixXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDFcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAzLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KfbjNmE2K7ahtuMXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYp9uM2YTYrtqG24xcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDQsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYotio2LQg2KfYrdmF2K9cIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItii2KjYtC3Yp9it2YXYr1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItii2LDYsdi02YfYsVwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2KLYsNix2LTZh9ixXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDFcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA2LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KLZgtqp2YbYr1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2KLZgtqp2YbYr1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNyxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItio2KfYs9mF2YbYrFwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2KjYp9iz2YXZhtisXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDFcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA4LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KjYrti02KfbjNi0XCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYqNiu2LTYp9uM2LRcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDksXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYqNiz2KrYp9mGINii2KjYp9ivXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYqNiz2KrYp9mGLdii2KjYp9ivXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDFcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAxMCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItio2YbYp9ioXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYqNmG2KfYqFwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMTEsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYqNmG2KfYqCDYrNiv24zYr1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2KjZhtin2Kgt2KzYr9uM2K9cIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDEyLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KrYqNix24zYslwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2KrYqNix24zYslwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMTMsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYqtix2qlcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItiq2LHaqVwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMTQsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYqtix2qnZhdin2Ybahtin24xcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItiq2LHaqdmF2KfZhtqG2KfbjFwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMTUsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYqtiz2YjYrFwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2KrYs9mI2KxcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDE2LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KrbjNqp2YXZhyDYr9in2LRcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItiq24zaqdmF2Yct2K/Yp9i0XCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDFcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAxNyxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItis2YTZgdinXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYrNmE2YHYp1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMTgsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYrtin2LHZiNin2YbYp1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2K7Yp9ix2YjYp9mG2KdcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDE5LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2K7Yp9mF2YbZh1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2K7Yp9mF2YbZh1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMjAsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYrtix2KfYrNmIXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYrtix2KfYrNmIXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDFcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAyMSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItiu2LPYsdmI2LTZh9ixXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYrtiz2LHZiNi02YfYsVwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMjIsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYrti22LHZhNmIXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYrti22LHZhNmIXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDFcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAyMyxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItiu2YXYp9ix2YTZiFwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2K7Zhdin2LHZhNmIXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDFcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAyNCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItiu2YjYp9is2YdcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItiu2YjYp9is2YdcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDI1LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2K/ZiNiy2K/ZiNiy2KfZhlwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2K/ZiNiy2K/ZiNiy2KfZhlwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMjYsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYstix2YbZglwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2LLYsdmG2YJcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDI3LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2LLZhtmI2LJcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItiy2YbZiNiyXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDFcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAyOCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItiz2LHYp9ioXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYs9ix2KfYqFwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMjksXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYs9ix2K/YsdmI2K9cIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItiz2LHYr9ix2YjYr1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMzAsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYs9mH2YbYr1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2LPZh9mG2K9cIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDMxLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2LPbjNizXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYs9uM2LNcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDMyLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2LPbjNmHINix2YjYr1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2LPbjNmHLdix2YjYr1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMzMsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYtNio2LPYqtixXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYtNio2LPYqtixXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDFcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAzNCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcIti02LHYqNuM2KfZhlwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2LTYsdio24zYp9mGXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDFcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAzNSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcIti02LHZgdiu2KfZhtmHXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYtNix2YHYrtin2YbZh1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMzYsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYtNmG2K/Yotio2KfYr1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2LTZhtiv2KLYqNin2K9cIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDM3LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2LXZiNmB24zYp9mGXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYtdmI2YHbjNin2YZcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDM4LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2LnYrNioINi024zYsVwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2LnYrNioLdi024zYsVwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMzksXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZgtix2Ycg2KLYutin2KxcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItmC2LHZhy3Yoti62KfYrFwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNDAsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLaqdi02qnYs9ix2KfbjFwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2qnYtNqp2LPYsdin24xcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDQxLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2qnZhNmI2KfZhtmCXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLaqdmE2YjYp9mG2YJcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDQyLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2qnZhNuM2KjYsVwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2qnZhNuM2KjYsVwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNDMsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLaqdmI2LLZhyDaqdmG2KfZhlwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2qnZiNiy2Yct2qnZhtin2YZcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDQ0LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2q/ZiNqv2KfZhlwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2q/ZiNqv2KfZhlwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNDUsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZhNuM2YTYp9mGXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZhNuM2YTYp9mGXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDFcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA0NixcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItmF2LHYp9i62YdcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItmF2LHYp9i62YdcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDQ3LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2YXYsdmG2K9cIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItmF2LHZhtivXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDFcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA0OCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItmF2YTaqdin2YZcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItmF2YTaqdin2YZcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDQ5LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2YXZhNqpINqp24zYp9mGXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZhdmE2qkt2qnbjNin2YZcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDUwLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2YXZhdmC2KfZhlwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2YXZhdmC2KfZhlwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNTEsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZhdmH2LHYqNin2YZcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItmF2YfYsdio2KfZhlwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNTIsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZhduM2KfZhtmHXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZhduM2KfZhtmHXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDFcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA1MyxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItmG2LjYsdqp2YfYsduM2LLbjFwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2YbYuNix2qnZh9ix24zYstuMXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDFcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA1NCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItmH2KfYr9uMINi02YfYsVwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2YfYp9iv24wt2LTZh9ixXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDFcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA1NSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItmH2LHar9mE2KfZhlwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2YfYsdqv2YTYp9mGXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDFcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA1NixcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItmH2LHbjNizXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZh9ix24zYs1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNTcsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZh9i02KrYsdmI2K9cIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItmH2LTYqtix2YjYr1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNTgsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZh9mI2LHYp9mG2K9cIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItmH2YjYsdin2YbYr1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNTksXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZiNin24zZgtin2YZcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItmI2KfbjNmC2KfZhlwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNjAsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZiNix2LLZgtin2YZcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItmI2LHYstmC2KfZhlwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNjEsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLbjNin2YXahtuMXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLbjNin2YXahtuMXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDFcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA2MixcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItin2LHZiNmF24zZh1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2KfYsdmI2YXbjNmHXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA2MyxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItin2LTZhtmI24zZh1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2KfYtNmG2YjbjNmHXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA2NCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItin24zZiNin2YjYutmE24xcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItin24zZiNin2YjYutmE24xcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDY1LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KLZiNin2KzbjNmCXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYotmI2KfYrNuM2YJcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDY2LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KjYp9ix2YjZglwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2KjYp9ix2YjZglwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNjcsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYqNin2LLYsdqv2KfZhlwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2KjYp9iy2LHar9in2YZcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDY4LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KjZiNqp2KfZhlwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2KjZiNqp2KfZhlwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNjksXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZvtmE2K/YtNiqXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZvtmE2K/YtNiqXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA3MCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItm+24zYsdin2YbYtNmH2LFcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItm+24zYsdin2YbYtNmH2LFcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDcxLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KrYp9iy2Ycg2LTZh9ixXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYqtin2LLZhy3YtNmH2LFcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDcyLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2Kraqdin2KhcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItiq2qnYp9ioXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA3MyxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItqG2YfYp9ix2KjYsdisXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLahtmH2KfYsdio2LHYrFwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNzQsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYrtmI24xcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItiu2YjbjFwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNzUsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYr9uM2LLYrCDYr9uM2LJcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItiv24zYstisLdiv24zYslwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNzYsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYsdio2LdcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItix2KjYt1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNzcsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYs9ix2K/YtNiqXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYotiw2LHYqNin24zYrNin2YYt2LrYsdio24wt2LPYsdiv2LTYqlwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNzgsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYs9ix2YhcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItiz2LHZiFwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNzksXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYs9mE2YXYp9izXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYs9mE2YXYp9izXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA4MCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItiz24zZhNmI2KfZhtmHXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYs9uM2YTZiNin2YbZh1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogODEsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYs9uM2YXbjNmG2YdcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItiz24zZhduM2YbZh1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogODIsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYs9uM2Ycg2obYtNmF2YdcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItiz24zZhy3ahti02YXZh1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogODMsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYtNin2YfbjNmGINiv2phcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcIti02KfZh9uM2YYt2K/amFwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogODQsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYtNmI2LdcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcIti02YjYt1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogODUsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZgduM2LHZiNix2YJcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItmB24zYsdmI2LHZglwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogODYsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZgtix2Ycg2LbbjNin2KHYp9mE2K/bjNmGXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZgtix2Yct2LbbjNin2KHYp9mE2K/bjNmGXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA4NyxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItmC2LfZiNixXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZgti32YjYsVwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogODgsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZgtmI2LTahtuMXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZgtmI2LTahtuMXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA4OSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItqp2LTYp9mI2LHYslwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2qnYtNin2YjYsdiyXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA5MCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItqv2LHYr9qp2LTYp9mG2YdcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItqv2LHYr9qp2LTYp9mG2YdcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDkxLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2YXYp9qp2YhcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItmF2KfaqdmIXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA5MixcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItmF2K3Zhdiv24zYp9ixXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZhdit2YXYr9uM2KfYsVwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogOTMsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZhdit2YXZiNiv2KLYqNin2K9cIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItii2LDYsdio2KfbjNis2KfZhi3Yutix2KjbjC3Zhdit2YXZiNiv2KLYqNin2K9cIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDk0LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2YXZh9in2KjYp9ivXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYotiw2LHYqNin24zYrNin2YYt2LrYsdio24wt2YXZh9in2KjYp9ivXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA5NSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItmF24zYp9mG2K/ZiNii2KhcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItmF24zYp9mG2K/ZiNii2KhcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDk2LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2YXbjNix2KLYqNin2K9cIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItmF24zYsdii2KjYp9ivXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA5NyxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItmG2KfZhNmI2LNcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItmG2KfZhNmI2LNcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDk4LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2YbZgtiv2YdcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItmG2YLYr9mHXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA5OSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItmG2YjYtNuM2YZcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItmG2YjYtNuM2YZcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDEwMCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItin2LHYr9io24zZhFwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2LTZh9ixLdin2LHYr9io24zZhFwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAzXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMTAxLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KfYtdmE2KfZhtiv2YjYslwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2KfYtdmE2KfZhtiv2YjYslwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAzXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMTAyLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KLYqNuMINio24zar9mE2YhcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItii2KjbjC3YqNuM2q/ZhNmIXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDNcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAxMDMsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYqNuM2YTZhyDYs9mI2KfYsVwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2KjbjNmE2Yct2LPZiNin2LFcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogM1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDEwNCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItm+2KfYsdizINii2KjYp9ivXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZvtin2LHYsy3Yotio2KfYr1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAzXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMTA1LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KrYp9iy2Ycg2qnZhtivXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYqtin2LLZhy3aqdmG2K9cIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogM1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDEwNixcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItiq2KfYstmHINqp2YbYr9in2Ybar9mI2KpcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItiq2KfYstmHLdqp2YbYr9in2Ybar9mI2KpcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogM1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDEwNyxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItis2LnZgdix2KLYqNin2K9cIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItis2LnZgdix2KLYqNin2K9cIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogM1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDEwOCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItiu2YTYrtin2YRcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItiu2YTYrtin2YRcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogM1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDEwOSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItix2LbbjFwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2LHYttuMXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDNcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAxMTAsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYs9ix2LnbjNmGXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYs9ix2LnbjNmGXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDNcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAxMTEsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYudmG2KjYsdin2YZcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcIti52YbYqNix2KfZhlwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAzXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMTEyLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2YHYrtix2KLYqNin2K9cIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItmB2K7Ysdii2KjYp9ivXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDNcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAxMTMsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLaqdmE2YjYsVwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2qnZhNmI2LFcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogM1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDExNCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItqp2YjYsdin24zbjNmFXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLaqdmI2LHYp9uM24zZhVwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAzXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMTE1LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2q/YsdmF24xcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItqv2LHZhduMXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDNcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAxMTYsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLar9uM2YjbjFwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2q/bjNmI24xcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogM1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDExNyxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItmE2KfZh9ix2YjYr1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2YTYp9mH2LHZiNivXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDNcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAxMTgsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZhdi02q/bjNmGINi02YfYsVwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2YXYtNqv24zZhi3YtNmH2LFcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogM1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDExOSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItmG2YXbjNmGXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZhtmF24zZhlwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAzXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMTIwLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2YbbjNixXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYp9ix2K/YqNuM2YQt2YbbjNixXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDNcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAxMjEsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZh9i02KrYrNuM2YZcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItmH2LTYqtis24zZhlwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAzXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMTIyLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2YfbjNixXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZh9uM2LFcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogM1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDEyMyxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItin2KjYsduM2LTZhVwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2KfYqNix24zYtNmFXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAxMjQsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYp9io2YjYstuM2K/Yotio2KfYr1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2KfYqNmI2LLbjNiv2KLYqNin2K9cIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogNFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDEyNSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItin2LHYr9iz2KrYp9mGXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYp9ix2K/Ys9iq2KfZhlwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiA0XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMTI2LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KfamNuM2YdcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItin2pjbjNmHXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAxMjcsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYp9i12YHZh9in2YZcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcIti02YfYsS3Yp9i12YHZh9in2YZcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogNFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDEyOCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItin2YHZiNizXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYp9mB2YjYs1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiA0XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMTI5LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KfZhtin2LHaqVwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2KfZhtin2LHaqVwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiA0XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMTMwLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KfbjNmF2KfZhti02YfYsVwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2KfbjNmF2KfZhti02YfYsVwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiA0XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMTMxLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KLYsdin2YYg2YjYqNuM2K/ar9mEXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYotix2KfZhi3ZiNio24zYr9qv2YRcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogNFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDEzMixcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItio2KfYr9ix2YjYr1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2KjYp9iv2LHZiNivXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAxMzMsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYqNin2Log2KjZh9in2K/Ysdin2YZcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItio2KfYui3YqNmH2KfYr9ix2KfZhlwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiA0XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMTM0LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KjYp9mB2LHYp9mGXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYqNin2YHYsdin2YZcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogNFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDEzNSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItio2LHYstqpXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYqNix2LLaqVwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiA0XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMTM2LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KjYsdmBINin2YbYqNin2LFcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItio2LHZgS3Yp9mG2KjYp9ixXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAxMzcsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYqNmH2KfYsdin2YYg2LTZh9ixXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYqNmH2KfYsdin2YYt2LTZh9ixXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAxMzgsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYqNmH2KfYsdiz2KrYp9mGXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYqNmH2KfYsdiz2KrYp9mGXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAxMzksXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYqNmI2KbbjNmGINmIINmF24zYp9mG2K/YtNiqXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYqNmI2KbbjNmGLdmF24zYp9mG2K/YtNiqXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAxNDAsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZvtuM2LHYqNqp2LHYp9mGXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZvtuM2LHYqNqp2LHYp9mGXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAxNDEsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYqtmI2K/YtNqpXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYqtmI2K/YtNqpXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAxNDIsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYqtuM2LHYp9mGXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYqtuM2LHYp9mGXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAxNDMsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYrNmG2K/ZglwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2KzZhtiv2YJcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogNFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDE0NCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItis2YjYstiv2KfZhlwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2KzZiNiy2K/Yp9mGXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAxNDUsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYrNmI2LTZgtin2YYg2Ygg2qnYp9mF2YhcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItis2YjYtNmC2KfZhi3aqdin2YXZiFwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiA0XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMTQ2LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2obYp9iv2q/Yp9mGXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLahtin2K/ar9in2YZcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogNFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDE0NyxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItqG2LHZhdmH24zZhlwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2obYsdmF2YfbjNmGXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAxNDgsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLahtmF2q/Ysdiv2KfZhlwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2obZhdqv2LHYr9in2YZcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogNFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDE0OSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItit2KjbjNioINii2KjYp9ivXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYrdio24zYqC3Yotio2KfYr1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiA0XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMTUwLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2K3Ys9mGINii2KjYp9ivXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYp9i12YHZh9in2YYt2K3Ys9mGLdii2KjYp9ivXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAxNTEsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYrdmG2KdcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItit2YbYp1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiA0XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMTUyLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2K7Yp9mE2K/Yotio2KfYr1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2K7Yp9mE2K/Yotio2KfYr1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiA0XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMTUzLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2K7ZhduM2YbbjCDYtNmH2LFcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItiu2YXbjNmG24wt2LTZh9ixXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAxNTQsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYrtmI2KfZhtiz2KfYsVwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2K7ZiNin2YbYs9in2LFcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogNFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDE1NSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItiu2YjYsVwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2KfYtdmB2YfYp9mGLdiu2YjYsVwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiA0XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMTU3LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2K7ZiNix2LLZiNmCXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYrtmI2LHYstmI2YJcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogNFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDE1OCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItiv2KfYsdin2YZcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItiv2KfYsdin2YZcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogNFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDE1OSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItiv2KfZhdmG2YdcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItiv2KfZhdmG2YdcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogNFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDE2MCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItiv2LHahtmHXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYr9ix2obZh1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiA0XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMTYxLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2K/Ys9iq2q/YsdivXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYr9iz2Krar9ix2K9cIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogNFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDE2MixcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItiv2YfYp9mC2KfZhlwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2K/Zh9in2YLYp9mGXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAxNjMsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYr9mH2YJcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItiv2YfZglwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiA0XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMTY0LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2K/ZiNmE2Kog2KLYqNin2K9cIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItin2LXZgdmH2KfZhi3Yr9mI2YTYqi3Yotio2KfYr1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiA0XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMTY1LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2K/bjNiy24zahtmHXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYr9uM2LLbjNqG2YdcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogNFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDE2NixcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItix2LLZiNmHXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYsdiy2YjZh1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiA0XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMTY3LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2LHYttmI2KfZhti02YfYsVwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2KfYtdmB2YfYp9mGLdix2LbZiNin2YbYtNmH2LFcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogNFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDE2OCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItiy2KfbjNmG2K/ZhyDYsdmI2K9cIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItiy2KfbjNmG2K/Zhy3YsdmI2K9cIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogNFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDE2OSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItiy2LHbjNmGINi02YfYsVwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2LLYsduM2YYt2LTZh9ixXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAxNzAsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYstmI2KfYsdmHXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYstmI2KfYsdmHXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAxNzEsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYstuM2KjYp9i02YfYsVwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2LLbjNio2KfYtNmH2LFcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogNFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDE3MixcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItiz2K/ZhyDZhNmG2KzYp9mGXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYs9iv2Yct2YTZhtis2KfZhlwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiA0XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMTczLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2LPZgduM2K/YtNmH2LFcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItiz2YHbjNiv2LTZh9ixXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAxNzQsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYs9qv2LLbjFwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2LPar9iy24xcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogNFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDE3NSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItiz2YXbjNix2YVcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItiz2YXbjNix2YVcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogNFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDE3NixcbiAgICAgICAgICAgIFwibmFtZVwiOiBcIti02KfZh9uM2YYg2LTZh9ixXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYtNin2YfbjNmGLdi02YfYsVwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiA0XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMTc3LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2LTZh9ix2LbYp1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2LTZh9ix2LbYp1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiA0XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMTc4LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2LfYp9mE2K7ZiNmG2obZh1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2LfYp9mE2K7ZiNmG2obZh1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiA0XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMTc5LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2LnYs9qv2LHYp9mGXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYudiz2q/Ysdin2YZcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogNFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDE4MCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcIti52YTZiNuM2KzZh1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2LnZhNmI24zYrNmHXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAxODEsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZgdix2K7bjFwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2YHYsdiu24xcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogNFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDE4MixcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItmB2LHbjNiv2YjZhti02YfYsVwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2YHYsduM2K/ZiNmG2LTZh9ixXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAxODMsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZgdmE2KfZiNix2KzYp9mGXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZgdmE2KfZiNix2KzYp9mGXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAxODQsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZgdmI2YTYp9iv2LTZh9ixXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZgdmI2YTYp9iv2LTZh9ixXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAxODUsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZgtmF2LXYsVwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2YLZhdi12LFcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogNFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDE4NixcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItmC2YfYrNin2YjYsdiz2KrYp9mGXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZgtmH2KzYp9mI2LHYs9iq2KfZhlwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiA0XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMTg3LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2YLZh9iv2LHbjNis2KfZhlwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2YLZh9iv2LHbjNis2KfZhlwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiA0XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMTg4LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2qnYp9i02KfZhlwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2qnYp9i02KfZhlwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiA0XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMTg5LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2qnYsdqp2YjZhtivXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLaqdix2qnZiNmG2K9cIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogNFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDE5MCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItqp2YTbjNi02KfYryDZiCDYs9mI2K/Ysdis2KfZhlwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2qnZhNuM2LTYp9ivLdiz2YjYr9ix2KzYp9mGXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAxOTEsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLaqdmF2LTahtmHXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLaqdmF2LTahtmHXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAxOTIsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLaqdmF2YdcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItqp2YXZh1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiA0XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMTkzLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2qnZh9ix24zYstiz2Ybar1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2qnZh9ix24zYstiz2Ybar1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiA0XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMTk0LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2qnZiNi02qlcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItqp2YjYtNqpXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAxOTUsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLaqdmI2YfZvtin24zZh1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2qnZiNmH2b7Yp9uM2YdcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogNFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDE5NixcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItqv2LHar9in2KhcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItqv2LHar9in2KhcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogNFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDE5NyxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItqv2LLYqNix2K7ZiNin2LFcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItqv2LLYqNix2K7ZiNin2LFcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogNFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDE5OCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItqv2YTZvtin24zar9in2YZcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItqv2YTZvtin24zar9in2YZcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogNFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDE5OSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItqv2YTYr9i02KpcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItqv2YTYr9i02KpcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogNFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDIwMCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItqv2YTYtNmH2LFcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItqv2YTYtNmH2LFcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogNFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDIwMSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItqv2Yjar9ivXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLar9mI2q/Yr1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiA0XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMjAyLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2YTYp9uMINio24zYr1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2YTYp9uMLdio24zYr1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiA0XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMjAzLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2YXYqNin2LHaqdmHXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZhdio2KfYsdqp2YdcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogNFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDIwNCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItmF2KzZhNiz24xcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItmF2KzZhNiz24xcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogNFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDIwNSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItmF2K3Zhdiv2KLYqNin2K9cIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItin2LXZgdmH2KfZhi3Zhdit2YXYr9ii2KjYp9ivXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAyMDYsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZhdi02qnYp9iqXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZhdi02qnYp9iqXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAyMDcsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZhdmG2LjYsduM2YdcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItmF2YbYuNix24zZh1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiA0XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMjA4LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2YXZh9in2KjYp9ivXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYp9i12YHZh9in2YYt2YXZh9in2KjYp9ivXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAyMDksXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZhduM2YXZh1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2KfYtdmB2YfYp9mGLdmF24zZhdmHXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAyMTAsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZhtin2KbbjNmGXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZhtin2KbbjNmGXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAyMTEsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZhtis2YEg2KLYqNin2K9cIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItmG2KzZgS3Yotio2KfYr1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiA0XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMjEyLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2YbYtdix2KLYqNin2K9cIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItin2LXZgdmH2KfZhi3Zhti12LHYotio2KfYr1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiA0XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMjEzLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2YbYt9mG2LJcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItmG2LfZhtiyXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAyMTQsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZhtmI2LQg2KLYqNin2K9cIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItmG2YjYtC3Yotio2KfYr1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiA0XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMjE1LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2YbbjNin2LPYsVwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2YbbjNin2LPYsVwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiA0XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMjE2LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2YbbjNqpINii2KjYp9ivXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZhtuM2qkt2KLYqNin2K9cIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogNFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDIxNyxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItmH2LHZhtivXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZh9ix2YbYr1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiA0XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMjE4LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2YjYsdiy2YbZh1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2YjYsdiy2YbZh1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiA0XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMjE5LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2YjYsdmG2KfZhdiu2YjYp9iz2KpcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItmI2LHZhtin2YXYrtmI2KfYs9iqXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAyMjAsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZiNiy2YjYp9mGXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZiNiy2YjYp9mGXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAyMjEsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZiNmG2qlcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItmI2YbaqVwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiA0XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMjIyLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KfYs9in2LHYp1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2KfYs9in2LHYp1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiA1XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMjIzLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KfYtNiq2YfYp9ix2K9cIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItin2LTYqtmH2KfYsdivXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAyMjQsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYqtmG2qnZhdin2YZcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItiq2YbaqdmF2KfZhlwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiA1XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMjI1LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2obZh9in2LHYqNin2LpcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItqG2YfYp9ix2KjYp9i6XCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAyMjYsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYs9uM2YEg2KLYqNin2K9cIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItiz24zZgS3Yotio2KfYr1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiA1XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMjI3LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2LTZh9ixINis2K/bjNivINmH2LTYqtqv2LHYr1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2LTZh9ixLdis2K/bjNivLdmH2LTYqtqv2LHYr1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiA1XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMjI4LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2LfYp9mE2YLYp9mGXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYt9in2YTZgtin2YZcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogNVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDIyOSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItqp2LHYrFwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2qnYsdisXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAyMzAsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLaqdmF2KfZhCDYtNmH2LFcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItqp2YXYp9mELdi02YfYsVwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiA1XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMjMxLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2qnZiNmH2LPYp9ixXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLaqdmI2YfYs9in2LFcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogNVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDIzMixcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItqv2LHZhdiv2LHZh1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2q/YsdmF2K/YsdmHXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAyMzMsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZhdin2YfYr9i02KpcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItmF2KfZh9iv2LTYqlwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiA1XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMjM0LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2YXYrdmF2K/YtNmH2LFcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItin2YTYqNix2LIt2YXYrdmF2K/YtNmH2LFcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogNVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDIzNSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItmF2LTaqduM2YYg2K/YtNiqXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZhdi02qnbjNmGLdiv2LTYqlwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiA1XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMjM2LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2YbYuNix2KLYqNin2K9cIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItmG2LjYsdii2KjYp9ivXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAyMzcsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZh9i02Krar9ix2K9cIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItmH2LTYqtqv2LHYr1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiA1XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMTExNyxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItmB2LHYr9uM2LNcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItmB2LHYr9uM2LNcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogNVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDExMTgsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZhdin2LHZhNuM2qlcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItmF2KfYsdmE24zaqVwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiA1XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMjM4LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KfYsdqp2YjYp9iyXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYp9ix2qnZiNin2LJcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogNlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDIzOSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItin24zZhNin2YVcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcIti02YfYsS3Yp9uM2YTYp9mFXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDZcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAyNDAsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYp9uM2YjYp9mGXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYp9uM2YjYp9mGXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDZcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAyNDEsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYotio2K/Yp9mG2KfZhlwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2KLYqNiv2KfZhtin2YZcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogNlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDI0MixcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItii2LPZhdin2YYg2KLYqNin2K9cIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItii2LPZhdin2YYt2KLYqNin2K9cIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogNlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDI0MyxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItio2K/YsdmHXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYqNiv2LHZh1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiA2XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMjQ0LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2b7Zh9mE2YdcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItm+2YfZhNmHXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDZcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAyNDUsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYqtmI2K3bjNivXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYqtmI2K3bjNivXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDZcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAyNDYsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLahtmI2KfYsVwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2obZiNin2LFcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogNlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDI0NyxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItiv2LHZhyDYtNmH2LFcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItiv2LHZhy3YtNmH2LFcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogNlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDI0OCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItiv2YTar9i02KdcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItiv2YTar9i02KdcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogNlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDI0OSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItiv2YfZhNix2KfZhlwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2K/Zh9mE2LHYp9mGXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDZcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAyNTAsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYstix2YbZh1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2LLYsdmG2YdcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogNlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDI1MSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItiz2LHYp9ioINio2KfYulwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2LPYsdin2Kgt2KjYp9i6XCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDZcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAyNTIsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYs9ix2KfYqNmE2YdcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItiz2LHYp9io2YTZh1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiA2XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMjUzLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2LXYp9mE2K0g2KLYqNin2K9cIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItin24zZhNin2YUt2LXYp9mE2K0t2KLYqNin2K9cIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogNlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDI1NCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItmE2YjZhdin2LFcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItmE2YjZhdin2LFcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogNlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDI1NSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItmF2YfYsdin2YZcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItmF2YfYsdin2YZcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogNlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDI1NixcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItmF2YjYsdmF2YjYsduMXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZhdmI2LHZhdmI2LHbjFwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiA2XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMjU3LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2YXZiNiz24zYp9mGXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZhdmI2LPbjNin2YZcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogNlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDI1OCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItmF24zZhdmHXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYp9uM2YTYp9mFLdmF24zZhdmHXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDZcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAyNTksXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYp9mF2KfZhSDYrdiz2YZcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItin2YXYp9mFLdit2LPZhlwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiA3XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMjYwLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KfZhtin2LHYs9iq2KfZhlwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2KfZhtin2LHYs9iq2KfZhlwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiA3XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMjYxLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KfZh9ix2YVcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItin2YfYsdmFXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAyNjIsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYotioINm+2K7YtFwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2KLYqC3Zvtiu2LRcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogN1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDI2MyxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItii2KjYr9in2YZcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItii2KjYr9in2YZcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogN1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDI2NCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItio2LHYp9iy2KzYp9mGXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYqNix2KfYstis2KfZhlwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiA3XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMjY1LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KjYsdiv2K7ZiNmGXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYqNix2K/YrtmI2YZcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogN1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDI2NixcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItio2YbYr9ix2K/bjNixXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYqNmG2K/Ysdiv24zYsVwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiA3XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMjY3LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KjZhtiv2LHYr9uM2YTZhVwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2KjZhtiv2LHYr9uM2YTZhVwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiA3XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMjY4LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KjZhtiv2LHYsduM2q9cIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItio2YbYr9ix2LHbjNqvXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAyNjksXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYqNmG2K/Ysdqp2Ybar9in2YZcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItio2YbYr9ix2qnZhtqv2KfZhlwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiA3XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMjcwLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KjZhtiv2LHar9mG2KfZiNmHXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYqNmG2K/Ysdqv2YbYp9mI2YdcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogN1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDI3MSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItio2YbaqVwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2KjZhtqpXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAyNzIsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYqNmI2LTZh9ixXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYtNmH2LEt2KjZiNi02YfYsVwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiA3XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMjczLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KrZhtqvINin2LHZhVwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2KrZhtqvLdin2LHZhVwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiA3XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMjc0LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KzZhVwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2KzZhVwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiA3XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMjc1LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2obYutin2K/aqVwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2obYutin2K/aqVwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiA3XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMjc2LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2K7Yp9ix2qlcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItiu2KfYsdqpXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAyNzcsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYrtmI2LHZhdmI2KxcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItiu2YjYsdmF2YjYrFwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiA3XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMjc4LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2K/Yp9mE2qnbjFwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2K/Yp9mE2qnbjFwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiA3XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMjc5LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2K/ZhNmI2KfYsVwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2K/ZhNmI2KfYsVwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiA3XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMjgwLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2LHbjNiyXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYsduM2LJcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogN1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDI4MSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItiz2LnYr9ii2KjYp9ivXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYs9i52K/Yotio2KfYr1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiA3XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMjgyLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2LPbjNix2KfZgVwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2LPbjNix2KfZgVwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiA3XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMjgzLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2LTYqNin2Ybaqdin2LHZh1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2LTYqNin2Ybaqdin2LHZh1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiA3XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMjg0LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2LTZhtio2YdcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcIti02YbYqNmHXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAyODUsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYudiz2YTZiNuM2YdcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcIti52LPZhNmI24zZh1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiA3XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMjg2LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2qnYp9qp24xcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItqp2KfaqduMXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAyODcsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLaqdmE2YXZh1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2qnZhNmF2YdcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogN1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDI4OCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItmG2K7ZhCDYqtmC24xcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItmG2K7ZhC3YqtmC24xcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogN1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDI4OSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItmI2K3Yr9iq24zZh1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2YjYrdiv2KrbjNmHXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAyOTAsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYp9ix2KzZhdmG2K9cIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItin2LHYrNmF2YbYr1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiA4XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMjkxLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KfYs9mE2KfZhdi02YfYsVwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2KfYs9mE2KfZhdi02YfYsVwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiA4XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMjkyLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KfZhtiv24zYtNmHXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYp9mG2K/bjNi02YdcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogOFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDI5MyxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItii2KjYs9ix2K9cIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItii2KjYs9ix2K9cIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogOFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDI5NCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItii2KjYudmE24xcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItii2KjYudmE24xcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogOFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDI5NSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItio2KfYutiz2KrYp9mGXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYqNin2LrYs9iq2KfZhlwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiA4XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMjk2LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KjYp9mC2LHYtNmH2LFcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItio2KfZgtix2LTZh9ixXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDhcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAyOTcsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYqNmI2YXZh9mGXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYqNmI2YXZh9mGXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDhcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAyOTgsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZvtin2qnYr9i02KpcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItm+2Kfaqdiv2LTYqlwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiA4XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMjk5LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2b7Ysdiv24zYs1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2b7Ysdiv24zYs1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiA4XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMzAwLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2b7bjNi02YjYp1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2b7bjNi02YjYp1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiA4XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMzAxLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KrZh9ix2KfZhlwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2LTZh9ixLdiq2YfYsdin2YZcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogOFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDMwMixcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItis2YjYp9iv2KLYqNin2K9cIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItis2YjYp9iv2KLYqNin2K9cIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogOFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDMwMyxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItqG2YfYp9ix2K/Yp9mG2q/Zh1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2obZh9in2LHYr9in2Ybar9mHXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDhcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAzMDQsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYrdiz2YYg2KLYqNin2K9cIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItiq2YfYsdin2YYt2K3Ys9mGLdii2KjYp9ivXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDhcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAzMDUsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYr9mF2KfZiNmG2K9cIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItiv2YXYp9mI2YbYr1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiA4XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMzA2LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2K/bjNiy24zZhlwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2K/bjNiy24zZhlwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiA4XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMzA3LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2LHbjFwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2LHbjFwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiA4XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMzA4LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2LHYqNin2Lcg2qnYsduM2YVcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItix2KjYp9i3Ldqp2LHbjNmFXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDhcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAzMDksXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYsdmI2K/Zh9mGXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYsdmI2K/Zh9mGXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDhcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAzMTAsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYtNin2YfYr9i02YfYsVwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2LTYp9mH2K/YtNmH2LFcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogOFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDMxMSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcIti02LHbjNmBINii2KjYp9ivXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYtNix24zZgS3Yotio2KfYr1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiA4XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMzEyLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2LTZhdi02qlcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcIti02YXYtNqpXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDhcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAzMTMsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYtNmH2LHbjNin2LFcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcIti02YfYsduM2KfYsVwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiA4XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMzE0LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2LXYp9mE2K0g2KLYqNin2K9cIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItiq2YfYsdin2YYt2LXYp9mE2K0t2KLYqNin2K9cIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogOFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDMxNSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcIti12KjYp9i02YfYsVwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2LXYqNin2LTZh9ixXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDhcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAzMTYsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYtdmB2KfYr9i02KpcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcIti12YHYp9iv2LTYqlwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiA4XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMzE3LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2YHYsdiv2YjYs9uM2YdcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItmB2LHYr9mI2LPbjNmHXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDhcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAzMTgsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZgdi02YVcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItmB2LTZhVwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiA4XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMzE5LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2YHbjNix2YjYstqp2YjZh1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2YHbjNix2YjYstqp2YjZh1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiA4XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMzIwLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2YLYr9izXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZgtiv2LNcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogOFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDMyMSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItmC2LHahtqpXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZgtix2obaqVwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiA4XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMzIyLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2qnZh9ix24zYstqpXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLaqdmH2LHbjNiy2qlcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogOFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDMyMyxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItqp24zZhNin2YZcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItqp24zZhNin2YZcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogOFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDMyNCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItqv2YTYs9iq2KfZhlwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2LTZh9ixLdqv2YTYs9iq2KfZhlwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiA4XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMzI1LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2YTZiNin2LPYp9mGXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZhNmI2KfYs9in2YZcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogOFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDMyNixcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItmF2YTYp9ix2K9cIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItmF2YTYp9ix2K9cIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogOFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDMyNyxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItmF24zar9mI2YZcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItmF24zar9mI2YZcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogOFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDMyOCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItmG2LPbjNmFINi02YfYsVwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2YbYs9uM2YUt2LTZh9ixXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDhcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAzMjksXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZhti124zYsdii2KjYp9ivXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZhti124zYsdii2KjYp9ivXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDhcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAzMzAsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZiNit24zYr9uM2YdcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItmI2K3bjNiv24zZh1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiA4XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMzMxLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2YjYsdin2YXbjNmGXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZiNix2KfZhduM2YZcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogOFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDExMTYsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZvtix2YbYr1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2b7YsdmG2K9cIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogOFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDMzMixcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItin2LHYr9mEXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYp9ix2K/ZhFwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiA5XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMzMzLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KLZhNmI2YbbjFwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2KLZhNmI2YbbjFwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiA5XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMzM0LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KjYp9io2KfYrduM2K/YsVwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2KjYp9io2KfYrduM2K/YsVwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiA5XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMzM1LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KjYsdmI2KzZhlwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2KjYsdmI2KzZhlwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiA5XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMzM2LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KjZhNiv2KfYrNuMXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYqNmE2K/Yp9is24xcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogOVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDMzNyxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItio2YZcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItio2YZcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogOVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDMzOCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItis2YjZhtmC2KfZhlwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2KzZiNmG2YLYp9mGXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDlcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAzMzksXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLahtmE2q/YsdivXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLahtmE2q/YsdivXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDlcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAzNDAsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYs9in2YXYp9mGXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYs9in2YXYp9mGXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDlcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAzNDEsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYs9mB24zYr9iv2LTYqlwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2LPZgduM2K/Yr9i02KpcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogOVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDM0MixcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItiz2YjYr9is2KfZhlwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2LPZiNiv2KzYp9mGXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDlcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAzNDMsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYs9mI2LHYtNis2KfZhlwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2LPZiNix2LTYrNin2YZcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogOVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDM0NCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcIti02YTZhdiy2KfYsVwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2LTZhNmF2LLYp9ixXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDlcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAzNDUsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYtNmH2LHaqdix2K9cIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcIti02YfYsdqp2LHYr1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiA5XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMzQ2LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2LfYp9mC2KfZhtqpXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYt9in2YLYp9mG2qlcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogOVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDM0NyxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItmB2KfYsdiz2KfZhlwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2YHYp9ix2LPYp9mGXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDlcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAzNDgsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZgdix2KfYr9io2YbZh1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2YHYsdin2K/YqNmG2YdcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogOVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDM0OSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItmB2LHYriDYtNmH2LFcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItmB2LHYri3YtNmH2LFcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogOVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDM1MCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItqp24zYp9mGXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLaqduM2KfZhlwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiA5XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMzUxLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2q/Zhtiv2YXYp9mGXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLar9mG2K/Zhdin2YZcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogOVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDM1MixcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItqv2YfYsdmIXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLar9mH2LHZiFwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiA5XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMzUzLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2YTYsdiv2q/Yp9mGXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZhNix2K/ar9in2YZcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogOVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDM1NCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItmF2KfZhCDYrtmE24zZgdmHXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZhdin2YQt2K7ZhNuM2YHZh1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiA5XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMzU1LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2YbYp9i62KfZhlwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2YbYp9i62KfZhlwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiA5XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMzU2LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2YbYp9mB2oZcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItmG2KfZgdqGXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDlcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAzNTcsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZhtmC2YbZh1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2YbZgtmG2YdcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogOVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDM1OCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItmH2YHYtNis2KfZhlwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2YfZgdi02KzYp9mGXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDlcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAzNTksXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYp9ix2LPaqVwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2KfYsdiz2qlcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTBcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAzNjAsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYp9iz2K/bjNmHXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYp9iz2K/bjNmHXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDEwXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMzYxLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KfYs9mB2K/ZhlwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2KfYs9mB2K/ZhlwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxMFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDM2MixcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItin2LPZhNin2YXbjNmHXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYp9iz2YTYp9mF24zZh1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxMFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDM2MyxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItii2LHbjNmGINi02YfYsVwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2KLYsduM2YYt2LTZh9ixXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDEwXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMzY0LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KLbjNiz2qlcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItii24zYs9qpXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDEwXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMzY1LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KjYtNix2YjbjNmHXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYqNi02LHZiNuM2YdcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTBcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAzNjYsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYqNuM2LHYrNmG2K9cIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItio24zYsdis2YbYr1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxMFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDM2NyxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItit2KfYrNuMINii2KjYp9ivXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYrtix2KfYs9in2YYt2KzZhtmI2KjbjC3Yrdin2KzbjC3Yotio2KfYr1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxMFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDM2OCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItiu2LbYsduMINiv2LTYqiDYqNuM2KfYtlwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2K7Yttix24wt2K/YtNiqLdio24zYp9i2XCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDEwXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMzY5LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2K7ZiNiz2YFcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItiu2YjYs9mBXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDEwXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMzcwLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2LLZh9in2YZcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItiy2YfYp9mGXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDEwXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMzcxLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2LPYsdin24zYp9mGXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYs9ix2KfbjNin2YZcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTBcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAzNzIsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYs9ix2KjbjNi02YdcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItiz2LHYqNuM2LTZh1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxMFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDM3MyxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItiz2Ycg2YLZhNi52YdcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItiz2Yct2YLZhNi52YdcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTBcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAzNzQsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYtNmI2LPZgVwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2LTZiNiz2YFcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTBcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAzNzUsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYt9io2LMgXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYrtix2KfYs9in2YYt2KzZhtmI2KjbjC3Yt9io2LMtXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDEwXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMzc2LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2YHYsdiv2YjYs1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2YHYsdiv2YjYs1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxMFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDM3NyxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItmC2KfbjNmGXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZgtin24zZhlwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxMFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDM3OCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItmC2YfYs9iq2KfZhlwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2YLZh9iz2KrYp9mGXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDEwXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMzc5LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2YXYrdmF2K/YtNmH2LFcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItiu2LHYp9iz2KfZhi3YrNmG2YjYqNuMLdmF2K3Zhdiv2LTZh9ixXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDEwXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMzgwLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2YXZiNivXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZhdmI2K9cIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTBcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAzODEsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZhtmH2KjZhtiv2KfZhlwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2YbZh9io2YbYr9in2YZcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTBcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAzODIsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZhtuM2YXYqNmE2YjaqVwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2YbbjNmF2KjZhNmI2qlcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTBcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAzODMsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYp9it2YXYr9ii2KjYp9ivINi12YjZhNiqXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYp9it2YXYr9ii2KjYp9ivLdi12YjZhNiqXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDExXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMzg0LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KfZhtin2KjYr1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2KfZhtin2KjYr1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxMVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDM4NSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItio2KfYrNqv24zYsdin2YZcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItio2KfYrNqv24zYsdin2YZcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTFcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAzODYsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYqNin2K7YsdiyXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYqNin2K7YsdiyXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDExXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMzg3LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KjYp9ixXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYqNin2LFcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTFcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAzODgsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYqNin24zar1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2KjYp9uM2q9cIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTFcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAzODksXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYqNis2LPYqtin2YZcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItio2KzYs9iq2KfZhlwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxMVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDM5MCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItio2LHYr9iz2qnZhlwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2KjYsdiv2LPaqdmGXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDExXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMzkxLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KjbjNiv2K7YqlwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2KjbjNiv2K7YqlwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxMVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDM5MixcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItiq2KfbjNio2KfYr1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2KrYp9uM2KjYp9ivXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDExXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMzkzLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KrYsdio2Kog2KzYp9mFXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYqtix2KjYqi3YrNin2YVcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTFcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAzOTQsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYqtix2KjYqiDYrduM2K/YsduM2YdcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItiq2LHYqNiqLdit24zYr9ix24zZh1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxMVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDM5NSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItis2LrYqtin24xcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItis2LrYqtin24xcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTFcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAzOTYsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYrNmG2q/ZhFwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2KzZhtqv2YRcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTFcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAzOTcsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLahtin2b7YtNmE2YhcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItqG2KfZvti02YTZiFwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxMVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDM5OCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItqG2qnZhtmHXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLahtqp2YbZh1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxMVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDM5OSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItqG2YbYp9ix2KfZhlwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2obZhtin2LHYp9mGXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDExXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNDAwLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2K7YsdmIXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYrtix2YhcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTFcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA0MDEsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYrtmE24zZhCDYotio2KfYr1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2K7ZhNuM2YQt2KLYqNin2K9cIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTFcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA0MDIsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYrtmI2KfZgVwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2K7ZiNin2YFcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTFcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA0MDMsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYr9in2YjYsdiy2YZcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItiv2KfZiNix2LLZhlwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxMVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDQwNCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItiv2LHar9iyXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYr9ix2q/YslwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxMVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDQwNSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItiv2LEg2LHZiNivXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYr9ixLdix2YjYr1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxMVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDQwNixcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItiv2YjZhNiqINii2KjYp9ivXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYrtix2KfYs9in2YYt2LHYttmI24wt2K/ZiNmE2Kot2KLYqNin2K9cIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTFcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA0MDcsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYsdio2KfYtyDYs9mG2q9cIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItix2KjYp9i3Ldiz2Ybar1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxMVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDQwOCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItix2LTYqtiu2YjYp9ixXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYsdi02KrYrtmI2KfYsVwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxMVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDQwOSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItix2LbZiNuM2YdcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItix2LbZiNuM2YdcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTFcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA0MTAsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYsdmI2K/Yp9ioXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYsdmI2K/Yp9ioXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDExXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNDExLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2LHbjNmI2LRcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItix24zZiNi0XCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDExXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNDEyLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2LPYqNiy2YjYp9ixXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYs9io2LLZiNin2LFcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTFcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA0MTMsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYs9ix2K7Ys1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2LPYsdiu2LNcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTFcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA0MTQsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYs9mB24zYr9iz2Ybar1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2LPZgduM2K/Ys9mG2q9cIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTFcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA0MTUsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYs9mE2KfZhduMXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYs9mE2KfZhduMXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDExXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNDE2LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2LPZhNi32KfZhiDYotio2KfYr1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2LPZhNi32KfZhi3Yotio2KfYr1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxMVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDQxNyxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItiz2Ybar9in2YZcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItiz2Ybar9in2YZcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTFcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA0MTgsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYtNin2K/ZhdmH2LFcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcIti02KfYr9mF2YfYsVwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxMVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDQxOSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcIti02KfZhtiv24zYslwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2LTYp9mG2K/bjNiyXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDExXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNDIwLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2LTYtNiq2YXYr1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2LTYtNiq2YXYr1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxMVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDQyMSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcIti02YfYsdii2KjYp9ivXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYtNmH2LHYotio2KfYr1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxMVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDQyMixcbiAgICAgICAgICAgIFwibmFtZVwiOiBcIti02YfYsdiy2YhcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcIti02YfYsdiy2YhcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTFcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA0MjMsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYtdin2YTYrSDYotio2KfYr1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2K7Ysdin2LPYp9mGLdix2LbZiNuMLdi12KfZhNitLdii2KjYp9ivXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDExXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNDI0LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2LfYsdmC2KjZh1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2LfYsdmC2KjZh1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxMVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDQyNSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcIti52LTZgiDYotio2KfYr1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2K7Ysdin2LPYp9mGLdix2LbZiNuMLdi52LTZgi3Yotio2KfYr1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxMVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDQyNixcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItmB2LHZh9in2K/ar9ix2K9cIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItmB2LHZh9in2K/ar9ix2K9cIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTFcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA0MjcsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZgdix24zZhdin2YZcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItmB2LHbjNmF2KfZhlwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxMVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDQyOCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItmB24zYsdmI2LLZh1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2YHbjNix2YjYstmHXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDExXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNDI5LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2YHbjNi2INii2KjYp9ivXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZgduM2LYt2KLYqNin2K9cIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTFcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA0MzAsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZgtin2LPZhSDYotio2KfYr1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2YLYp9iz2YUt2KLYqNin2K9cIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTFcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA0MzEsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZgtiv2YXar9in2YdcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItmC2K/Zhdqv2KfZh1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxMVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDQzMixcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItmC2YTZhtiv2LHYotio2KfYr1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2YLZhNmG2K/Ysdii2KjYp9ivXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDExXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNDMzLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2YLZiNqG2KfZhlwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2YLZiNqG2KfZhlwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxMVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDQzNCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItqp2KfYrtqpXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLaqdin2K7aqVwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxMVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDQzNSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItqp2KfYsduM2LJcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItqp2KfYsduM2LJcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTFcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA0MzYsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLaqdin2LTZhdixXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLaqdin2LTZhdixXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDExXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNDM3LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2qnYr9qp2YZcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItqp2K/aqdmGXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDExXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNDM4LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2qnZhNin2KpcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItqp2YTYp9iqXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDExXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNDM5LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2qnZhtiv2LFcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItqp2YbYr9ixXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDExXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNDQwLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2q/ZhNmF2qnYp9mGXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLar9mE2YXaqdin2YZcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTFcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA0NDEsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLar9mG2KfYqNin2K9cIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItqv2YbYp9io2KfYr1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxMVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDQ0MixcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItmE2LfZgSDYotio2KfYr1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2YTYt9mBLdii2KjYp9ivXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDExXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNDQzLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2YXYstiv2KLZiNmG2K9cIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItmF2LLYr9ii2YjZhtivXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDExXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNDQ0LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2YXYtNmH2K9cIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItmF2LTZh9ivXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDExXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNDQ1LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2YXZhNqpINii2KjYp9ivXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZhdmE2qkt2KLYqNin2K9cIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTFcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA0NDYsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZhti02KrbjNmB2KfZhlwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2YbYtNiq24zZgdin2YZcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTFcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA0NDcsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZhti12LHYotio2KfYr1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2K7Ysdin2LPYp9mGLdix2LbZiNuMLdmG2LXYsdii2KjYp9ivXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDExXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNDQ4LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2YbZgtin2KhcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItmG2YLYp9ioXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDExXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNDQ5LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2YbZiNiu2YbYr9in2YZcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItmG2YjYrtmG2K/Yp9mGXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDExXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNDUwLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2YbbjNi02KfYqNmI2LFcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItmG24zYtNin2KjZiNixXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDExXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNDUxLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2YbbjNmEINi02YfYsVwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2YbbjNmELdi02YfYsVwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxMVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDQ1MixcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItmH2YXYqiDYotio2KfYr1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2YfZhdiqLdii2KjYp9ivXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDExXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNDUzLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi24zZiNmG2LPbjFwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi24zZiNmG2LPbjFwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxMVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDQ1NCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItin2LPZgdix2KfbjNmGXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYp9iz2YHYsdin24zZhlwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxMlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDQ1NSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItin24zZiNixXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYp9uM2YjYsVwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxMlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDQ1NixcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItii2LTYrtin2YbZh1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2KLYtNiu2KfZhtmHXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDEyXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNDU3LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KjYrNmG2YjYsdivXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYqNis2YbZiNix2K9cIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA0NTgsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZvtuM2LQg2YLZhNi52YdcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItm+24zYtC3ZgtmE2LnZh1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxMlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDQ1OSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItiq24zYqtqp2KfZhtmE2YhcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItiq24zYqtqp2KfZhtmE2YhcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA0NjAsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYrNin2KzYsdmFXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYrNin2KzYsdmFXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDEyXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNDYxLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2K3Ytdin2LHar9ix2YXYrtin2YZcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItit2LXYp9ix2q/YsdmF2K7Yp9mGXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDEyXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNDYyLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2K/YsdmCXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYr9ix2YJcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA0NjMsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYsdin2LJcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItix2KfYslwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxMlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDQ2NCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItiz2YbYrtmI2KfYs9iqXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYs9mG2K7ZiNin2LPYqlwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxMlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDQ2NSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcIti02YjZgtin2YZcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcIti02YjZgtin2YZcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA0NjYsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYtNuM2LHZiNin2YZcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcIti024zYsdmI2KfZhlwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxMlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDQ2NyxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcIti12YHbjCDYotio2KfYr1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2K7Ysdin2LPYp9mGLdi02YXYp9mE24wt2LXZgduMLdii2KjYp9ivXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDEyXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNDY4LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2YHYp9ix2YjYrFwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2YHYp9ix2YjYrFwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxMlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDQ2OSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItmC2KfYttuMXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZgtin2LbbjFwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxMlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDQ3MCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItqv2LHZhdmHXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLar9ix2YXZh1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxMlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDQ3MSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItmE2YjYrNmE24xcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItmE2YjYrNmE24xcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA0NzIsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYp9ix2YjZhtiv2qnZhtin2LFcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItin2LHZiNmG2K/aqdmG2KfYsVwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxM1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDQ3MyxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItin2YTZiNin2YZcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItin2YTZiNin2YZcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTNcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA0NzQsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYp9mF24zYr9uM2YdcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItin2YXbjNiv24zZh1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxM1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDQ3NSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItin2YbYr9uM2YXYtNqpXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYp9mG2K/bjNmF2LTaqVwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxM1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDQ3NixcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItin2YfZiNin2LJcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItin2YfZiNin2LJcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTNcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA0NzcsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYp9uM2LDZh1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2KfbjNiw2YdcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTNcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA0NzgsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYotio2KfYr9in2YZcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItii2KjYp9iv2KfZhlwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxM1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDQ3OSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItii2LrYp9is2KfYsduMXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYoti62KfYrNin2LHbjFwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxM1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDQ4MCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItio2KfYuiDZhdmE2qlcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItio2KfYui3ZhdmE2qlcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTNcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA0ODEsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYqNiz2KrYp9mGXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYqNiz2KrYp9mGXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDEzXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNDgyLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KjZhtiv2LHYp9mF2KfZhSDYrtmF24zZhtuMXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYqNmG2K/Ysdin2YXYp9mFLdiu2YXbjNmG24xcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTNcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA0ODMsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYqNmG2K/YsdmF2KfZh9i02YfYsVwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2KjZhtiv2LHZhdin2YfYtNmH2LFcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTNcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA0ODQsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYqNmH2KjZh9in2YZcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItio2YfYqNmH2KfZhlwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxM1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDQ4NSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItiq2LHaqdin2YTaqduMXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYqtix2qnYp9mE2qnbjFwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxM1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDQ4NixcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItis2KfbjNiy2KfZhlwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2KzYp9uM2LLYp9mGXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDEzXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNDg3LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2obZhdix2KfZhlwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2obZhdix2KfZhlwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxM1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDQ4OCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItqG2YjbjNio2K/Zh1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2obZiNuM2KjYr9mHXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDEzXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNDg5LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2K3YsVwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2K3YsVwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxM1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDQ5MCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItit2LPbjNmG24zZh1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2K3Ys9uM2YbbjNmHXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDEzXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNDkxLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2K3Zhdiy2YdcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItit2YXYstmHXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDEzXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNDkyLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2K3ZhduM2K/bjNmHXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYrdmF24zYr9uM2YdcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTNcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA0OTMsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYrtix2YXYtNmH2LFcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItiu2LHZhdi02YfYsVwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxM1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDQ5NCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItiv2KfYsdiu2YjbjNmGXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYr9in2LHYrtmI24zZhlwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxM1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDQ5NSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItiv2LLYotioXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYr9iy2KLYqFwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxM1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDQ5NixcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItiv2LLZgdmI2YRcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItiv2LLZgdmI2YRcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTNcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA0OTcsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYr9mH2K/YslwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2K/Zh9iv2LJcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTNcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA0OTgsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYsdin2YXYtNuM2LFcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItix2KfZhdi024zYsVwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxM1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDQ5OSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItix2KfZhdmH2LHZhdiyXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYsdin2YXZh9ix2YXYslwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxM1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDUwMCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItix2YHbjNi5XCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYsdmB24zYuVwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxM1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDUwMSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItiy2YfYsdmHXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYstmH2LHZh1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxM1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDUwMixcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItiz2KfZhNmG2K9cIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItiz2KfZhNmG2K9cIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTNcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA1MDMsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYs9ix2K/YtNiqXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYrtmI2LLYs9iq2KfZhi3Ys9ix2K/YtNiqXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDEzXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNTA0LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2LPZiNiz2Ybar9ix2K9cIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItiz2YjYs9mG2q/YsdivXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDEzXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNTA1LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2LTYp9iv2q/Yp9mGXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYtNin2K/ar9in2YZcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTNcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA1MDYsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYtNin2YjZiNixXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYtNin2YjZiNixXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDEzXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNTA3LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2LTYsdin2YHYqlwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2LTYsdin2YHYqlwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxM1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDUwOCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcIti02YjYtFwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2LTZiNi0XCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDEzXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNTA5LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2LTZiNi02KrYsVwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2LTZiNi02KrYsVwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxM1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDUxMCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcIti024zYqNin2YZcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcIti024zYqNin2YZcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTNcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA1MTEsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYtdin2YTYrSDYtNmH2LFcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcIti12KfZhNitLdi02YfYsVwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxM1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDUxMixcbiAgICAgICAgICAgIFwibmFtZVwiOiBcIti12YHbjCDYotio2KfYr1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2K7ZiNiy2LPYqtin2YYt2LXZgduMLdii2KjYp9ivXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDEzXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNTEzLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2LXbjNiv2YjZhlwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2LXbjNiv2YjZhlwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxM1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDUxNCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItmC2YTYudmHINiq2YRcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItmC2YTYudmHLdiq2YRcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTNcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA1MTUsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZgtmE2LnZhyDYrtmI2KfYrNmHXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZgtmE2LnZhy3YrtmI2KfYrNmHXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDEzXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNTE2LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2q/YqtmI2YbYr1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2q/YqtmI2YbYr1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxM1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDUxNyxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItmE2KfZhNuMXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZhNin2YTbjFwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxM1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDUxOCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItmF2LPYrNiv2LPZhNuM2YXYp9mGXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZhdiz2KzYr9iz2YTbjNmF2KfZhlwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxM1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDUyMCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItmF2YTYp9ir2KfZhtuMXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZhdmE2KfYq9in2YbbjFwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxM1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDUyMSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItmF24zYp9mG2LHZiNivXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZhduM2KfZhtix2YjYr1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxM1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDUyMixcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItmF24zZhtmI2LTZh9ixXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZhduM2YbZiNi02YfYsVwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxM1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDUyMyxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItmH2YHYqtqv2YRcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItmH2YHYqtqv2YRcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTNcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA1MjQsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZh9mG2K/bjNis2KfZhlwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2YfZhtiv24zYrNin2YZcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTNcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA1MjUsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZh9mI24zYstmHXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZh9mI24zYstmHXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDEzXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNTI2LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2YjbjNizXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZiNuM2LNcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTNcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA1MjcsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYp9io2YfYsVwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2KfYqNmH2LFcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA1MjgsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYp9ix2YXYutin2YYg2K7Yp9mG2YdcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItin2LHZhdi62KfZhi3Yrtin2YbZh1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxNFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDUyOSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItii2Kgg2KjYsVwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2KLYqC3YqNixXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDE0XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNTMwLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2obZiNix2LLZglwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2obZiNix2LLZglwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxNFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDUzMSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItit2YTYqFwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2K3ZhNioXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDE0XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNTMyLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2K7YsdmF2K/YsdmHXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYrtix2YXYr9ix2YdcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA1MzMsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYr9mG2K/bjFwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2K/Zhtiv24xcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA1MzQsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYstix24zZhiDYotio2KfYr1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2LLYsduM2YYt2KLYqNin2K9cIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA1MzUsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYstix24zZhiDYsdmI2K9cIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItiy2LHbjNmGLdix2YjYr1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxNFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDUzNixcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItiy2YbYrNin2YZcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcIti02YfYsS3YstmG2KzYp9mGXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDE0XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNTM3LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2LPYrNin2LNcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItiz2KzYp9izXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDE0XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNTM4LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2LPZhNi32KfZhtuM2YdcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItiz2YTYt9in2YbbjNmHXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDE0XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNTM5LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2LPZh9ix2YjYsdivXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYs9mH2LHZiNix2K9cIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA1NDAsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYtdin2KbbjNmGINmC2YTYudmHXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYtdin2KbbjNmGLdmC2YTYudmHXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDE0XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNTQxLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2YLbjNiv2KfYsVwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2YLbjNiv2KfYsVwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxNFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDU0MixcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItqv2LHZhdin2KhcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItqv2LHZhdin2KhcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA1NDMsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZhdin2Ycg2YbYtNin2YZcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItmF2KfZhy3Zhti02KfZhlwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxNFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDU0NCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItmH24zYr9isXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZh9uM2K/YrFwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxNFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDU0NSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItin2YXbjNix24zZh1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2KfZhduM2LHbjNmHXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDE1XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNTQ2LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KfbjNmI2KfZhtqp24xcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItin24zZiNin2YbaqduMXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDE1XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNTQ3LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KLYsdin2K/Yp9mGXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYotix2KfYr9in2YZcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA1NDgsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYqNiz2LfYp9mFXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYqNiz2LfYp9mFXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDE1XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNTQ5LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KjbjNin2LHYrNmF2YbYr1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2KjbjNin2LHYrNmF2YbYr1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxNVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDU1MCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItiv2KfZhdi62KfZhlwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2K/Yp9mF2LrYp9mGXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDE1XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNTUxLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2K/Ysdis2LLbjNmGXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYr9ix2KzYstuM2YZcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA1NTIsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYr9uM2KjYp9isXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYr9uM2KjYp9isXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDE1XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNTUzLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2LPYsdiu2YdcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItiz2LHYrtmHXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDE1XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNTU0LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2LPZhdmG2KfZhlwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2LTZh9ixLdiz2YXZhtin2YZcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA1NTUsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYtNin2YfYsdmI2K9cIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcIti02KfZh9ix2YjYr1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxNVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDU1NixcbiAgICAgICAgICAgIFwibmFtZVwiOiBcIti02YfZhduM2LHYstin2K9cIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcIti02YfZhduM2LHYstin2K9cIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA1NTcsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLaqdmE2KfYqtmHINiu24zYrFwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2qnZhNin2KrZhy3YrtuM2KxcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA1NTgsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLar9ix2YXYs9in2LFcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItqv2LHZhdiz2KfYsVwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxNVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDU1OSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItmF2KzZhlwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2YXYrNmGXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDE1XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNTYwLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2YXZh9iv24wg2LTZh9ixXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZhdmH2K/bjC3YtNmH2LFcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA1NjEsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZhduM2KfZhduMXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZhduM2KfZhduMXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDE1XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNTYyLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KfYr9uM2YXbjFwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2KfYr9uM2YXbjFwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxNlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDU2MyxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItin2LPZvtqp2YdcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItin2LPZvtqp2YdcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTZcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA1NjQsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYp9uM2LHYp9mG2LTZh9ixXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYp9uM2LHYp9mG2LTZh9ixXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDE2XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNTY1LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KjYstmF2KfZhlwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2KjYstmF2KfZhlwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxNlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDU2NixcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItio2YXZvtmI2LFcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItio2YXZvtmI2LFcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTZcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA1NjcsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYqNmG2KpcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItio2YbYqlwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxNlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDU2OCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItio2YbYrNin2LFcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItio2YbYrNin2LFcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTZcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA1NjksXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZvtuM2LTbjNmGXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZvtuM2LTbjNmGXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDE2XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNTcwLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KzYp9mE2YJcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItis2KfZhNmCXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDE2XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNTcxLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2obYp9io2YfYp9ixXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLahtin2KjZh9in2LFcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTZcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA1NzIsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYrtin2LRcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItiu2KfYtFwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxNlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDU3MyxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItiv2YjYs9iqINmF2K3ZhdivXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYr9mI2LPYqi3Zhdit2YXYr1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxNlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDU3NCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItix2KfYs9qpXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYsdin2LPaqVwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxNlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDU3NSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItiy2KfYqNmEXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYstin2KjZhFwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxNlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDU3NixcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItiy2KfYqNmE24xcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItiy2KfYqNmE24xcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTZcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA1NzcsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYstin2YfYr9in2YZcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItiy2KfZh9iv2KfZhlwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxNlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDU3OCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItiy2YfaqVwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2LLZh9qpXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDE2XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNTc5LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2LPYsdin2YjYp9mGXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYs9ix2KfZiNin2YZcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTZcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA1ODAsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYs9ix2KjYp9iyXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYs9ix2KjYp9iyXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDE2XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNTgxLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2LPZiNix2KfZhlwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2LPZiNix2KfZhlwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxNlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDU4MixcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItiz24zYsdqp2KfZhlwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2LPbjNix2qnYp9mGXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDE2XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNTgzLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2LnZhNuMINin2qnYqNixXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYudmE24wt2Kfaqdio2LFcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTZcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA1ODQsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZgdmG2YjYrFwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2YHZhtmI2KxcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTZcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA1ODUsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZgti12LHZgtmG2K9cIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItmC2LXYsdmC2YbYr1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxNlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDU4NixcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItqp2YbYp9ix2qlcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItqp2YbYp9ix2qlcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTZcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA1ODcsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLar9i02KpcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItqv2LTYqlwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxNlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDU4OCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItqv2YTZhdmI2LHYqtuMXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLar9mE2YXZiNix2KrbjFwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxNlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDU4OSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItmF2K3Zhdiv2KfZhlwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2YXYrdmF2K/Yp9mGXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDE2XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNTkwLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2YXYrdmF2K/Yotio2KfYr1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2LPbjNiz2KrYp9mGLdmILdio2YTZiNqG2LPYqtin2YYt2YXYrdmF2K/Yotio2KfYr1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxNlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDU5MSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItmF2K3Zhdiv24xcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItmF2K3Zhdiv24xcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTZcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA1OTIsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZhduM2LHYrNin2YjZh1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2YXbjNix2KzYp9mI2YdcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTZcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA1OTMsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZhti12LHYqiDYotio2KfYr1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2YbYtdix2Kot2KLYqNin2K9cIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTZcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA1OTQsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZhtqv2YjYsVwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2Ybar9mI2LFcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTZcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA1OTUsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZhtmI2qkg2KLYqNin2K9cIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItmG2YjaqS3Yotio2KfYr1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxNlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDU5NixcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItmG24zaqSDYtNmH2LFcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItmG24zaqS3YtNmH2LFcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTZcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA1OTcsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZh9uM2K/ZiNqGXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZh9uM2K/ZiNqGXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDE2XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNTk4LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KfYsdiv2qnYp9mGXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZgdin2LHYsy3Yp9ix2K/aqdin2YZcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA1OTksXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYp9ix2LPZhtis2KfZhlwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2KfYsdiz2YbYrNin2YZcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA2MDAsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYp9iz2KrZh9io2KfZhlwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2KfYs9iq2YfYqNin2YZcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA2MDEsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYp9i02qnZhtin2YZcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItin2LTaqdmG2KfZhlwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxN1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDYwMixcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItin2YHYstixXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYp9mB2LLYsVwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxN1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDYwMyxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItin2YLZhNuM2K9cIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItin2YLZhNuM2K9cIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA2MDQsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYp9mF2KfZhSDYtNmH2LFcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItin2YXYp9mFLdi02YfYsVwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxN1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDYwNSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItin2YfZhFwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2KfZh9mEXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDE3XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNjA2LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KfZiNiyXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYp9mI2LJcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA2MDcsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYp9uM2KxcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItin24zYrFwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxN1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDYwOCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItin24zYstiv2K7ZiNin2LPYqlwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2KfbjNiy2K/YrtmI2KfYs9iqXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDE3XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNjA5LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KLYqNin2K/Zh1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2KLYqNin2K/Zh1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxN1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDYxMCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItii2KjYp9iv2Ycg2LfYtNqpXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYotio2KfYr9mHLdi32LTaqVwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxN1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDYxMSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItio2KfYqCDYp9mG2KfYsVwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2KjYp9ioLdin2YbYp9ixXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDE3XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNjEyLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KjYp9mE2KfYr9mHXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZgdin2LHYsy3YqNin2YTYp9iv2YdcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA2MTMsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYqNmG2KfYsdmI24zZh1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2KjZhtin2LHZiNuM2YdcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA2MTQsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYqNmH2YXZhlwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2KjZh9mF2YZcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA2MTUsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYqNmI2KfZhtin2KpcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItio2YjYp9mG2KfYqlwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxN1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDYxNixcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItio24zYsdmFXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYqNuM2LHZhVwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxN1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDYxNyxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItio24zYttinXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYqNuM2LbYp1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxN1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDYxOCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItis2YbYqiDYtNmH2LFcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItis2YbYqi3YtNmH2LFcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA2MTksXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYrNmH2LHZhVwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2KzZh9ix2YVcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA2MjAsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYrNmI24zZhVwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2KzZiNuM2YVcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA2MjEsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYstix24zZhiDYr9i02KpcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItiy2LHbjNmGLdiv2LTYqlwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxN1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDYyMixcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItit2LPZhiDYotio2KfYr1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2YHYp9ix2LMt2K3Ys9mGLdii2KjYp9ivXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDE3XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNjIzLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2K7Yp9mGINiy2YbbjNin2YZcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItiu2KfZhi3YstmG24zYp9mGXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDE3XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNjI0LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2K7Yp9mI2LHYp9mGXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYrtin2YjYsdin2YZcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA2MjUsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYrtix2KfZhdmHXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYrtix2KfZhdmHXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDE3XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNjI2LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2K7YtNiqXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYrti02KpcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA2MjcsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYrtmG2KxcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItiu2YbYrFwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxN1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDYyOCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItiu2YjYsVwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2YHYp9ix2LMt2K7ZiNixXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDE3XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNjI5LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2K/Yp9ix2KfYqFwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2K/Yp9ix2KfYqFwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxN1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDYzMCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItiv2KfYsduM2KfZhlwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2K/Yp9ix24zYp9mGXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDE3XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNjMxLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2K/YqNuM2LHYp9mGXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYr9io24zYsdin2YZcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA2MzIsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYr9qY2qnYsdivXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYr9qY2qnYsdivXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDE3XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNjMzLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2K/Zh9ix2YVcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItiv2YfYsdmFXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDE3XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNjM0LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2K/ZiNio2LHYrNuMXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYr9mI2KjYsdis24xcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA2MzUsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYsdin2YXYrNix2K9cIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItix2KfZhdis2LHYr1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxN1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDYzNixcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItix2YjZhtuM2LJcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItix2YjZhtuM2LJcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA2MzcsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYstin2YfYr9i02YfYsVwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2LLYp9mH2K/YtNmH2LFcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA2MzgsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYstix2YLYp9mGXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYstix2YLYp9mGXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDE3XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNjM5LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2LPYr9mHXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYs9iv2YdcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA2NDAsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYs9ix2YjYs9iq2KfZhlwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2LPYsdmI2LPYqtin2YZcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA2NDEsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYs9i52KfYr9iqINi02YfYsVwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2LPYudin2K/Yqi3YtNmH2LFcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA2NDIsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYs9mI2LHZhdmCXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYs9mI2LHZhdmCXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDE3XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNjQzLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2LPbjNiv2KfZhlwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2LPbjNiv2KfZhlwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxN1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDY0NCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcIti02LTYr9mHXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYtNi02K/Zh1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxN1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDY0NSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcIti02YfYsdm+24zYsVwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2LTZh9ix2b7bjNixXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDE3XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNjQ2LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2LTZh9ix2LXYr9ix2KdcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcIti02YfYsdi12K/YsdinXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDE3XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNjQ3LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2LTbjNix2KfYslwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2LTbjNix2KfYslwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxN1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDY0OCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcIti12LrYp9ivXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYtdi62KfYr1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxN1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDY0OSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcIti12YHYp9i02YfYsVwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2LXZgdin2LTZh9ixXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDE3XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNjUwLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2LnZhNin2YXYsdmI2K/YtNiqXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYudmE2KfZhdix2YjYr9i02KpcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA2NTEsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZgdiv2KfZhduMXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZgdiv2KfZhduMXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDE3XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNjUyLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2YHYsdin2LTYqNmG2K9cIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItmB2LHYp9i02KjZhtivXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDE3XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNjUzLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2YHYs9inXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZgdiz2KdcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA2NTQsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZgduM2LHZiNiy2KLYqNin2K9cIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItmB2KfYsdizLdmB24zYsdmI2LLYotio2KfYr1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxN1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDY1NSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItmC2KfYptmF24zZh1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2YLYp9im2YXbjNmHXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDE3XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNjU2LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2YLYp9iv2LHYotio2KfYr1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2YLYp9iv2LHYotio2KfYr1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxN1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDY1NyxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItmC2LfYqCDYotio2KfYr1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2YLYt9ioLdii2KjYp9ivXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDE3XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNjU4LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2YLYt9ix2YjbjNmHXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZgti32LHZiNuM2YdcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA2NTksXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZgtuM2LFcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItmC24zYsVwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxN1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDY2MCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItqp2KfYsdiy24zZhiAo2YHYqtitINii2KjYp9ivKVwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2qnYp9ix2LLbjNmGLdmB2KrYrS3Yotio2KfYr1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxN1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDY2MSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItqp2KfYstix2YjZhlwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2qnYp9iy2LHZiNmGXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDE3XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNjYyLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2qnYp9mF2YHbjNix2YjYslwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2qnYp9mF2YHbjNix2YjYslwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxN1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDY2MyxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItqp2LHZhyDYp9uMXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLaqdix2Yct2KfbjFwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxN1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDY2NCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItqp2YbYp9ix2KrYrtiq2YdcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItqp2YbYp9ix2KrYrtiq2YdcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA2NjUsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLaqdmI2KfYsVwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2qnZiNin2LFcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA2NjYsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLar9ix2KfYtFwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2q/Ysdin2LRcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA2NjcsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLar9mE2Ycg2K/Yp9ixXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLar9mE2Yct2K/Yp9ixXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDE3XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNjY4LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2YTYp9ixXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZhNin2LFcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA2NjksXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZhNin2YXYsdivXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZhNin2YXYsdivXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDE3XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNjcwLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2YTZvtmI24zbjFwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2YTZvtmI24zbjFwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxN1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDY3MSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItmE2LfbjNmB24xcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItmE2LfbjNmB24xcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA2NzIsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZhdio2KfYsdqpINii2KjYp9iv2K/bjNiyXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZhdio2KfYsdqpLdii2KjYp9iv2K/bjNiyXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDE3XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNjczLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2YXYsdmI2K/YtNiqXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZhdix2YjYr9i02KpcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA2NzQsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZhdi02qnYp9mGXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZhdi02qnYp9mGXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDE3XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNjc1LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2YXYtduM2LHbjFwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2YXYtduM2LHbjFwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxN1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDY3NixcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItmF2YfYsVwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2YXZh9ixXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDE3XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNjc3LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2YXbjNmF2YbYr1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2YXbjNmF2YbYr1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxN1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDY3OCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItmG2YjYqNmG2K/ar9in2YZcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItmG2YjYqNmG2K/ar9in2YZcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA2NzksXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZhtmI2KzbjNmGXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZhtmI2KzbjNmGXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDE3XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNjgwLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2YbZiNiv2KfZhlwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2YbZiNiv2KfZhlwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxN1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDY4MSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItmG2YjYsdii2KjYp9ivXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZgdin2LHYsy3ZhtmI2LHYotio2KfYr1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxN1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDY4MixcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItmG24wg2LHbjNiyXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZhtuMLdix24zYslwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxN1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDY4MyxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItmI2LHYp9mI24xcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItmI2LHYp9mI24xcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA2ODQsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYp9ix2K/Yp9mCXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYp9ix2K/Yp9mCXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDE4XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNjg1LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KfYs9mB2LHZiNix24zZhlwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2KfYs9mB2LHZiNix24zZhlwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxOFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDY4NixcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItin2YLYqNin2YTbjNmHXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYp9mC2KjYp9mE24zZh1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxOFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDY4NyxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItin2YTZiNmG2K9cIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItin2YTZiNmG2K9cIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMThcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA2ODgsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYotio2q/YsdmFXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYotio2q/YsdmFXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDE4XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNjg5LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KLYqNuM2qlcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItii2KjbjNqpXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDE4XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNjkwLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KLZiNisXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYotmI2KxcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMThcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA2OTEsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYqNmI2KbbjNmGINiy2YfYsdinXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYqNmI2KbbjNmGLdiy2YfYsdinXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDE4XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNjkyLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KjbjNiv2LPYqtin2YZcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItio24zYr9iz2KrYp9mGXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDE4XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNjkzLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KrYp9qp2LPYqtin2YZcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItiq2Kfaqdiz2KrYp9mGXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDE4XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNjk0LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2K7Yp9qp2LnZhNuMXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYrtin2qnYudmE24xcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMThcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA2OTUsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYrtix2YXYr9i02KpcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItiu2LHZhdiv2LTYqlwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxOFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDY5NixcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItiv2KfZhtiz2YHZh9in2YZcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItiv2KfZhtiz2YHZh9in2YZcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMThcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA2OTcsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYsdin2LLZhduM2KfZhlwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2LHYp9iy2YXbjNin2YZcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMThcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA2OTgsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYs9qv2LLYotio2KfYr1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2LPar9iy2KLYqNin2K9cIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMThcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA2OTksXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYs9uM2LHYr9in2YZcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItiz24zYsdiv2KfZhlwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxOFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDcwMCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcIti02KfZhFwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2LTYp9mEXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDE4XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNzAxLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2LTYsduM2YHbjNmHXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYtNix24zZgduM2YdcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMThcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA3MDIsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYttuM2KfYotio2KfYr1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2LbbjNin2KLYqNin2K9cIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMThcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA3MDMsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZgtiy2YjbjNmGXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYtNmH2LEt2YLYstmI24zZhlwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxOFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDcwNCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItqp2YjZh9uM2YZcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItqp2YjZh9uM2YZcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMThcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA3MDUsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZhdit2YXYr9uM2YdcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItmF2K3Zhdiv24zZh1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxOFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDcwNixcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItmF2K3ZhdmI2K/Yotio2KfYryDZhtmF2YjZhtmHXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZhdit2YXZiNiv2KLYqNin2K8t2YbZhdmI2YbZh1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxOFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDcwNyxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItmF2LnZhNmFINqp2YTYp9uM2YdcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItmF2LnZhNmFLdqp2YTYp9uM2YdcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMThcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA3MDgsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZhtix2KzZh1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2YbYsdis2YdcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMThcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA3MDksXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYrNi52YHYsduM2YdcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItis2LnZgdix24zZh1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAxOVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDcxMCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItiv2LPYqtis2LHYr1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2K/Ys9iq2KzYsdivXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDE5XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNzExLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2LPZhNmB2obar9in2YZcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItiz2YTZgdqG2q/Yp9mGXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDE5XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNzEyLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2YLZhVwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2LTZh9ixLdmC2YVcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTlcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA3MTMsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZgtmG2YjYp9iqXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZgtmG2YjYp9iqXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDE5XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNzE0LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2qnZh9qpXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLaqdmH2qlcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMTlcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA3MTUsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYotix2YXYsdiv2YdcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItii2LHZhdix2K/Zh1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyMFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDcxNixcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItio2KfYqNin2LHYtNin2YbbjFwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2KjYp9io2KfYsdi02KfZhtuMXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDIwXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNzE3LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KjYp9mG2YdcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItio2KfZhtmHXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDIwXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNzE4LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KjZhNio2KfZhiDYotio2KfYr1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2KjZhNio2KfZhi3Yotio2KfYr1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyMFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDcxOSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItio2YjYptuM2YYg2LPZgdmE24xcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItio2YjYptuM2YYt2LPZgdmE24xcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjBcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA3MjAsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYqNuM2KzYp9ixXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYqNuM2KzYp9ixXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDIwXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNzIxLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2obZhtin2LHZh1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2obZhtin2LHZh1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyMFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDcyMixcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItiv2LLYrFwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2K/YstisXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDIwXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNzIzLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2K/ZhNio2LHYp9mGXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYr9mE2KjYsdin2YZcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjBcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA3MjQsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYr9mH2q/ZhNin2YZcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItiv2Yfar9mE2KfZhlwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyMFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDcyNSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItiv24zZiNin2YbYr9ix2YdcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItiv24zZiNin2YbYr9ix2YdcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjBcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA3MjYsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYstix24zZhtmHXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYstix24zZhtmHXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDIwXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNzI3LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2LPYsdmI2KLYqNin2K9cIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItiz2LHZiNii2KjYp9ivXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDIwXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNzI4LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2LPYsduM2LQg2KLYqNin2K9cIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItiz2LHbjNi0Ldii2KjYp9ivXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDIwXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNzI5LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2LPZgtiyXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYs9mC2LJcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjBcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA3MzAsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYs9mG2YbYr9isXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYs9mG2YbYr9isXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDIwXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNzMxLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2LTZiNuM2LTZh1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2LTZiNuM2LTZh1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyMFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDczMixcbiAgICAgICAgICAgIFwibmFtZVwiOiBcIti12KfYrdioXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYtdin2K3YqFwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyMFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDczMyxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItmC2LHZiNmHXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZgtix2YjZh1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyMFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDczNCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItqp2KfZhduM2KfYsdin2YZcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItqp2KfZhduM2KfYsdin2YZcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjBcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA3MzUsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLaqdin2YbbjCDYr9uM2YbYp9ixXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLaqdin2YbbjC3Yr9uM2YbYp9ixXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDIwXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNzM2LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2qnYp9mG24wg2LPZiNixXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLaqdin2YbbjC3Ys9mI2LFcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjBcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA3MzcsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZhdix24zZiNin2YZcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItmF2LHbjNmI2KfZhlwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyMFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDczOCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItmF2Yjahti0XCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZhdmI2obYtFwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyMFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDczOSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItuM2KfYs9mI2qnZhtivXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLbjNin2LPZiNqp2YbYr1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyMFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDc0MCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItin2K7YqtuM2KfYsdii2KjYp9ivXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYp9iu2KrbjNin2LHYotio2KfYr1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyMVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDc0MSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItin2LHYstmI2KbbjNmHXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYp9ix2LLZiNim24zZh1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyMVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDc0MixcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItin2YXbjNmGINi02YfYsVwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2KfZhduM2YYt2LTZh9ixXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDIxXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNzQzLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KfZhtin2LFcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItin2YbYp9ixXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDIxXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNzQ0LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KfZhtiv2YjZh9is2LHYr1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2KfZhtiv2YjZh9is2LHYr1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyMVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDc0NSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItio2KfYutuM2YZcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItio2KfYutuM2YZcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjFcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA3NDYsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYqNin2YHYqlwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2KjYp9mB2KpcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjFcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA3NDcsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYqNix2K/Ys9uM2LFcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItio2LHYr9iz24zYsVwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyMVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDc0OCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItio2LHZiNin2KpcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItio2LHZiNin2KpcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjFcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA3NDksXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYqNiy2YbYrNin2YZcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItio2LLZhtis2KfZhlwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyMVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDc1MCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItio2YVcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItio2YVcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjFcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA3NTEsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYqNmH2LHZhdin2YZcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItio2YfYsdmF2KfZhlwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyMVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDc1MixcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItm+2KfYsduM2LJcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItm+2KfYsduM2LJcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjFcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA3NTMsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYrNio2KfZhNio2KfYsdiyXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYrNio2KfZhNio2KfYsdiyXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDIxXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNzU0LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KzZiNm+2KfYsVwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2KzZiNm+2KfYsVwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyMVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDc1NSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItis2YjYstmFXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYrNmI2LLZhVwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyMVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDc1NixcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItis24zYsdmB2KpcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItis24zYsdmB2KpcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjFcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA3NTcsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLahtiq2LHZiNivXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLahtiq2LHZiNivXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDIxXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNzU4LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2K7Yp9iq2YjZhiDYotio2KfYr1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2K7Yp9iq2YjZhi3Yotio2KfYr1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyMVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDc1OSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItiu2KfZhtmI2qlcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItiu2KfZhtmI2qlcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjFcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA3NjAsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYrtmI2LHYs9mG2K9cIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItiu2YjYsdiz2YbYr1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyMVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDc2MSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItiv2LHYqCDYqNmH2LTYqlwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2K/YsdioLdio2YfYtNiqXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDIxXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNzYyLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2K/Zh9isXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYr9mH2KxcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjFcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA3NjMsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYsdin2KjYsVwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2LHYp9io2LFcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjFcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA3NjQsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYsdin2YjYsVwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2LHYp9mI2LFcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjFcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA3NjUsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYsdin24zZhlwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2LHYp9uM2YZcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjFcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA3NjYsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYsdmB2LPZhtis2KfZhlwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2LHZgdiz2YbYrNin2YZcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjFcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA3NjcsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYsdmI2K/YqNin2LFcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItqp2LHZhdin2YYt2LHZiNiv2KjYp9ixXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDIxXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNzY4LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2LHbjNit2KfZhiDYtNmH2LFcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItix24zYrdin2YYt2LTZh9ixXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDIxXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNzY5LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2LLYsdmG2K9cIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItiy2LHZhtivXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDIxXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNzcwLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2LLZhtqv24wg2KLYqNin2K9cIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItiy2Ybar9uMLdii2KjYp9ivXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDIxXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNzcxLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2LLbjNiv2KLYqNin2K9cIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItiy24zYr9ii2KjYp9ivXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDIxXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNzcyLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2LPbjNix2KzYp9mGXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYs9uM2LHYrNin2YZcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjFcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA3NzMsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYtNmH2K/Yp9ivXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYtNmH2K/Yp9ivXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDIxXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNzc0LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2LTZh9ix2KjYp9io2qlcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcIti02YfYsdio2KfYqNqpXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDIxXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNzc1LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2LXZgdin2KbbjNmHXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYtdmB2KfYptuM2YdcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjFcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA3NzYsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYudmG2KjYsdii2KjYp9ivXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYudmG2KjYsdii2KjYp9ivXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDIxXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNzc3LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2YHYp9ix24zYp9ioXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZgdin2LHbjNin2KhcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjFcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA3NzgsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZgdmH2LHYrFwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2YHZh9ix2KxcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjFcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA3NzksXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZgtmE2LnZhyDar9mG2KxcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItmC2YTYudmHLdqv2YbYrFwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyMVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDc4MCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItqp2KfYuNmFINii2KjYp9ivXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLaqdin2LjZhS3Yotio2KfYr1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyMVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDc4MSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItqp2LHZhdin2YZcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcIti02YfYsS3aqdix2YXYp9mGXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDIxXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNzgyLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2qnYtNqp2YjYptuM2YdcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItqp2LTaqdmI2KbbjNmHXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDIxXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNzgzLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2qnZh9mG2YjYrFwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2qnZh9mG2YjYrFwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyMVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDc4NCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItqp2YjZh9io2YbYp9mGXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLaqdmI2YfYqNmG2KfZhlwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyMVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDc4NSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItqp24zYp9mG2LTZh9ixXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLaqduM2KfZhti02YfYsVwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyMVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDc4NixcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItqv2YTYqNin2YFcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItqv2YTYqNin2YFcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjFcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA3ODcsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLar9mE2LLYp9ixXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLar9mE2LLYp9ixXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDIxXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNzg4LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2YTYp9mE2Ycg2LLYp9ixXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZhNin2YTZhy3Ystin2LFcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjFcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA3ODksXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZhdin2YfYp9mGXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZhdin2YfYp9mGXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDIxXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNzkwLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2YXYrdmF2K/Yotio2KfYr1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2qnYsdmF2KfZhi3Zhdit2YXYr9ii2KjYp9ivXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDIxXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNzkxLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2YXYrduMINii2KjYp9ivXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZhdit24wt2KLYqNin2K9cIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjFcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA3OTIsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZhdix2K/Zh9qpXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZhdix2K/Zh9qpXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDIxXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNzkzLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2YXYsyDYs9ix2obYtNmF2YdcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItmF2LMt2LPYsdqG2LTZhdmHXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDIxXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNzk0LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2YXZhtmI2KzYp9mGXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZhdmG2YjYrNin2YZcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjFcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA3OTUsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZhtis2YEg2LTZh9ixXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZhtis2YEt2LTZh9ixXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDIxXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNzk2LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2YbYsdmF2KfYtNuM2LFcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItmG2LHZhdin2LTbjNixXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDIxXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogNzk3LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2YbYuNin2YUg2LTZh9ixXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZhti42KfZhS3YtNmH2LFcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjFcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA3OTgsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZhtqv2KfYsVwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2Ybar9in2LFcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjFcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA3OTksXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZhtmI2K/amFwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2YbZiNiv2phcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjFcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA4MDAsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZh9is2K/aqVwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2YfYrNiv2qlcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjFcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA4MDEsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLbjNiy2K/Yp9mGINi02YfYsVwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi24zYstiv2KfZhi3YtNmH2LFcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjFcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA4MDIsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYp9iy2q/ZhNmHXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYp9iy2q/ZhNmHXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDIyXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogODAzLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KfYs9mE2KfZhSDYotio2KfYryDYutix2KhcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItin2LPZhNin2YUt2KLYqNin2K8t2LrYsdioXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDIyXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogODA0LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KjYp9uM2Ybar9in2YZcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItio2KfbjNmG2q/Yp9mGXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDIyXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogODA1LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KjbjNiz2KrZiNmGXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYqNuM2LPYqtmI2YZcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA4MDYsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZvtin2YjZh1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2b7Yp9mI2YdcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA4MDcsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYqtin2LLZhyDYotio2KfYr1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2KrYp9iy2Yct2KLYqNin2K9cIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA4MDgsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYrNmI2KfZhiDYsdmI2K9cIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItis2YjYp9mGLdix2YjYr1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyMlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDgwOSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItit2YXbjNmEXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYrdmF24zZhFwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyMlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDgxMCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItmF2KfZh9uM2K/YtNiqXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZhdin2YfbjNiv2LTYqlwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyMlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDgxMSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItix2YjYp9mG2LPYsVwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2LHZiNin2YbYs9ixXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDIyXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogODEyLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2LPYsdm+2YQg2LDZh9in2KhcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItiz2LHZvtmELdiw2YfYp9ioXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDIyXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogODEzLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2LPYsdmF2LPYqlwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2LPYsdmF2LPYqlwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyMlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDgxNCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItiz2LfYsVwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2LPYt9ixXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDIyXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogODE1LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2LPZhtmC2LFcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItiz2YbZgtixXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDIyXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogODE2LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2LPZiNmF2KfYsVwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2LPZiNmF2KfYsVwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyMlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDgxNyxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcIti02KfZh9mIXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYtNin2YfZiFwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyMlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDgxOCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcIti12K3ZhtmHXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYtdit2YbZh1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyMlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDgxOSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItmC2LXYsdi024zYsduM2YZcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItmC2LXYsdi024zYsduM2YZcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA4MjAsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLaqdix2YXYp9mG2LTYp9mHXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYtNmH2LEt2qnYsdmF2KfZhti02KfZh1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyMlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDgyMSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItqp2LHZhtiv2LrYsdioXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLaqdix2YbYr9i62LHYqFwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyMlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDgyMixcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItqp2Ybar9in2YjYsVwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2qnZhtqv2KfZiNixXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDIyXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogODIzLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2qnZiNiy2LHYp9mGXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLaqdmI2LLYsdin2YZcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA4MjQsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLar9mH2YjYp9ix2YdcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItqv2YfZiNin2LHZh1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyMlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDgyNSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItqv24zZhNin2YbYutix2KhcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItqv24zZhNin2YbYutix2KhcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA4MjYsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZhduM2KfZhiDYsdin2YfYp9mGXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZhduM2KfZhi3Ysdin2YfYp9mGXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDIyXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogODI3LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2YbZiNiv2LTZh1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2YbZiNiv2LTZh1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyMlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDgyOCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItmG2YjYs9mI2K9cIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItmG2YjYs9mI2K9cIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA4MjksXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZh9ix2LPbjNmGXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZh9ix2LPbjNmGXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDIyXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogODMwLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2YfZhNi024xcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItmH2YTYtNuMXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDIyXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogODMxLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KjYp9i02KpcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItio2KfYtNiqXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDIzXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogODMyLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2b7Yp9iq2KfZiNmHXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZvtin2KrYp9mI2YdcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjNcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA4MzMsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLahtix2KfZhVwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2obYsdin2YVcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjNcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA4MzQsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLahtuM2KrYp9ioXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLahtuM2KrYp9ioXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDIzXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogODM1LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2K/Zh9iv2LTYqlwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2K/Zh9iv2LTYqlwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyM1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDgzNixcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItiv2Yjar9mG2KjYr9in2YZcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItiv2Yjar9mG2KjYr9in2YZcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjNcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA4MzcsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYr9uM2LTZhdmI2qlcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItiv24zYtNmF2YjaqVwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyM1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDgzOCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItiz2YjZglwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2LPZiNmCXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDIzXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogODM5LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2LPbjCDYs9iu2KpcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItiz24wt2LPYrtiqXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDIzXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogODQwLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2YLZhNi52Ycg2LHYptuM2LPbjFwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2YLZhNi52Yct2LHYptuM2LPbjFwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyM1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDg0MSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItqv2LHYp9ioINiz2YHZhNuMXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLar9ix2KfYqC3Ys9mB2YTbjFwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyM1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDg0MixcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItmE2YbYr9mHXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZhNmG2K/Zh1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyM1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDg0MyxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItmE24zaqdqpXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZhNuM2qnaqVwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyM1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDg0NCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItmF2KfYr9mI2KfZhlwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2YXYp9iv2YjYp9mGXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDIzXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogODQ1LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2YXYp9ix2q/ZiNmGXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZhdin2LHar9mI2YZcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjNcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA4NDYsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLbjNin2LPZiNisXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLbjNin2LPZiNisXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDIzXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogODQ3LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KfZhtio2KfYsdii2YTZiNmFXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYp9mG2KjYp9ix2KLZhNmI2YVcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA4NDgsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYp9uM2YbahtmHINio2LHZiNmGXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYp9uM2YbahtmHLdio2LHZiNmGXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDI0XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogODQ5LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KLYstin2K/YtNmH2LFcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItii2LLYp9iv2LTZh9ixXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDI0XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogODUwLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KLZgiDZgtmE2KdcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItii2YIt2YLZhNinXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDI0XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogODUxLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KjZhtiv2LHYqtix2qnZhdmGXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYqNmG2K/Ysdiq2LHaqdmF2YZcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA4NTIsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYqNmG2K/Ysdqv2LJcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItio2YbYr9ix2q/YslwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyNFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDg1MyxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItis2YTbjNmGXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYrNmE24zZhlwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyNFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDg1NCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItiu2KfZhiDYqNio24zZhlwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2K7Yp9mGLdio2KjbjNmGXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDI0XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogODU1LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2K/ZhNmG2K9cIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItiv2YTZhtivXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDI0XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogODU2LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2LHYp9mF24zYp9mGXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYsdin2YXbjNin2YZcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA4NTcsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYs9ix2K7Zhtqp2YTYp9iq2YdcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItiz2LHYrtmG2qnZhNin2KrZh1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyNFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDg1OCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItiz24zZhduM2YYg2LTZh9ixXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYs9uM2YXbjNmGLdi02YfYsVwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyNFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDg1OSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcIti52YTbjCDYotio2KfYryDaqdiq2YjZhFwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2LnZhNuMLdii2KjYp9ivLdqp2KrZiNmEXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDI0XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogODYwLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2YHYp9i22YQg2KLYqNin2K9cIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItmB2KfYttmELdii2KjYp9ivXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDI0XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogODYxLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2qnYsdiv2qnZiNuMXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLaqdix2K/aqdmI24xcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA4NjIsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLaqdmE2KfZhNmHXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLaqdmE2KfZhNmHXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDI0XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogODYzLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2q/Yp9mE24zaqdi0XCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLar9in2YTbjNqp2LRcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA4NjQsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLar9ix2q/Yp9mGXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLar9ix2q/Yp9mGXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDI0XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogODY1LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2q/ZhduM2LQg2KrZvtmHXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLar9mF24zYtC3Yqtm+2YdcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA4NjYsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLar9mG2KjYr9qp2KfZiNmI2LNcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItqv2YbYqNiv2qnYp9mI2YjYs1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyNFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDg2NyxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItmF2LHYp9mI2YdcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItmF2LHYp9mI2YdcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA4NjgsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZhduM2YbZiNiv2LTYqlwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2YXbjNmG2YjYr9i02KpcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA4NjksXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZhtqv24zZhiDYtNmH2LFcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItmG2q/bjNmGLdi02YfYsVwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyNFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDg3MCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItmG2YjYr9mHINiu2KfZhtiv2YjYslwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2YbZiNiv2Yct2K7Yp9mG2K/ZiNiyXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDI0XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogODcxLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2YbZiNqp2YbYr9mHXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZhtmI2qnZhtiv2YdcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA4NzIsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYp9iy2YbYp1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2KfYstmG2KdcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA4NzMsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYp9i02KrYsduM2YbYp9mGXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYp9i02KrYsduM2YbYp9mGXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDI1XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogODc0LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KfZhNi02KrYsVwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2KfZhNi02KrYsVwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyNVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDg3NSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItin2YTbjNqv2YjYr9ix2LJcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItin2YTbjNqv2YjYr9ix2LJcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA4NzYsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYqNix2YjYrNix2K9cIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItio2LHZiNis2LHYr1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyNVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDg3NyxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItm+2YTYr9iu2KrYsVwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2b7ZhNiv2K7YqtixXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDI1XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogODc4LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2obYp9mE2KfZhtqG2YjZhNin2YZcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItqG2KfZhNin2YbahtmI2YTYp9mGXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDI1XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogODc5LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2obYutmE2YjZhtiv24xcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItqG2LrZhNmI2YbYr9uMXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDI1XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogODgwLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2obZgtin2KjZhFwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2obZgtin2KjZhFwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyNVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDg4MSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItiu2LHZhSDYotio2KfYr1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2YTYsdiz2KrYp9mGLdiu2LHZhS3Yotio2KfYr1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyNVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDg4MixcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItiv2LHYqCDar9mG2KjYr1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2K/YsdioLdqv2YbYqNivXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDI1XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogODgzLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2K/ZiNix2YjYr1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2K/ZiNix2YjYr1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyNVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDg4NCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItiy2KfYutmHXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYstin2LrZh1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyNVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDg4NSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItiz2b7bjNiv2K/YtNiqXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYs9m+24zYr9iv2LTYqlwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyNVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDg4NixcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItiz2LHYp9ioINiv2YjYsdmHXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYs9ix2KfYqC3Yr9mI2LHZh1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyNVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDg4NyxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItmB24zYsdmI2LLYotio2KfYr1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2YTYsdiz2KrYp9mGLdmB24zYsdmI2LLYotio2KfYr1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyNVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDg4OCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItqp2YjZhtin2YbbjFwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2qnZiNmG2KfZhtuMXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDI1XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogODg5LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2qnZiNmH2K/YtNiqXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLaqdmI2YfYr9i02KpcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA4OTAsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLar9ix2KfYqFwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2q/Ysdin2KhcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA4OTEsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZhdi52YXZiNmE2KfZhlwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2YXYudmF2YjZhNin2YZcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA4OTIsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZhdmI2YXZhiDYotio2KfYr1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2YXZiNmF2YYt2KLYqNin2K9cIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA4OTMsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZhtmI2LHYotio2KfYr1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2YTYsdiz2KrYp9mGLdmG2YjYsdii2KjYp9ivXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDI1XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogODk0LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2YjbjNiz24zYp9mGXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZiNuM2LPbjNin2YZcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA4OTUsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYp9it2YXYr9iz2LHar9mI2LHYp9ioXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYp9it2YXYr9iz2LHar9mI2LHYp9ioXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDI2XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogODk2LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KfYs9in2YTZhVwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2KfYs9in2YTZhVwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyNlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDg5NyxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItin2LfYp9mC2YjYsVwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2KfYt9in2YLZiNixXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDI2XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogODk4LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KfZhdmE2LRcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItin2YXZhNi0XCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDI2XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogODk5LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KLYs9iq2KfYsdinXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYotiz2KrYp9ix2KdcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjZcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA5MDAsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYotiz2KrYp9mG2Ycg2KfYtNix2YHbjNmHXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYotiz2KrYp9mG2Yct2KfYtNix2YHbjNmHXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDI2XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogOTAxLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KjYp9iy2KfYsSDYrNmF2LnZh1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2KjYp9iy2KfYsS3YrNmF2LnZh1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyNlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDkwMixcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItio2LHZhyDYs9ixXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYqNix2Yct2LPYsVwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyNlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDkwMyxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItio2YbYr9ix2KfZhtiy2YTbjFwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2KjZhtiv2LHYp9mG2LLZhNuMXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDI2XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogOTA2LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2b7YsdmHINiz2LFcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItm+2LHZhy3Ys9ixXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDI2XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogOTA3LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KrYp9mE2LRcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItiq2KfZhNi0XCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDI2XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogOTA4LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KrZiNiq2qnYp9io2YZcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItiq2YjYqtqp2KfYqNmGXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDI2XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogOTA5LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KzbjNix2YbYr9mHXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYrNuM2LHZhtiv2YdcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjZcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA5MTAsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLahtin2Kjaqdiz2LFcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItqG2KfYqNqp2LPYsVwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyNlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDkxMSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItqG2KfZgSDZiCDahtmF2K7Yp9mE2YdcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItqG2KfZgS3ZiC3ahtmF2K7Yp9mE2YdcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjZcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA5MTIsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLahtmI2KjYsVwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2obZiNio2LFcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjZcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA5MTMsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYrdmI24zZglwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2K3ZiNuM2YJcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjZcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA5MTQsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYrti02qnYqNuM2KzYp9ixXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYrti02qnYqNuM2KzYp9ixXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDI2XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogOTE1LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2K7Zhdin2YVcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItiu2YXYp9mFXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDI2XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogOTE2LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2K/bjNmE2YXYp9mGXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYr9uM2YTZhdin2YZcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjZcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA5MTcsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYsdin2YbaqdmI2YdcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItix2KfZhtqp2YjZh1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyNlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDkxOCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItix2K3bjNmFINii2KjYp9ivXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYsdit24zZhS3Yotio2KfYr1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyNlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDkxOSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItix2LPYqtmFINii2KjYp9ivXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYsdiz2KrZhS3Yotio2KfYr1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyNlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDkyMCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItix2LTYqlwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2LHYtNiqXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDI2XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogOTIxLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2LHYttmI2KfZhti02YfYsVwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2q/bjNmE2KfZhi3Ysdi22YjYp9mG2LTZh9ixXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDI2XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogOTIyLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2LHZiNiv2KjYp9ixXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLar9uM2YTYp9mGLdix2YjYr9io2KfYsVwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyNlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDkyMyxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItix2YjYr9io2YbZh1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2LHZiNiv2KjZhtmHXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDI2XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogOTI0LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2LHZiNiv2LPYsVwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2LHZiNiv2LPYsVwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyNlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDkyNSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItiz2Ybar9ixXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYs9mG2q/YsVwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyNlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDkyNixcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItiz24zYp9mH2qnZhFwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2LPbjNin2YfaqdmEXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDI2XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogOTI3LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2LTZgdiqXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYtNmB2KpcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjZcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA5MjgsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYtNmE2YXYp9mGXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYtNmE2YXYp9mGXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDI2XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogOTI5LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2LXZiNmF2LnZhyDYs9ix2KdcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcIti12YjZhdi52Yct2LPYsdinXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDI2XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogOTMwLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2YHZiNmF2YZcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItmB2YjZhdmGXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDI2XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogOTMxLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2qnZhNin2obYp9uMXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLaqdmE2Kfahtin24xcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjZcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA5MzIsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLaqdmI2obYtdmB2YfYp9mGXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLaqdmI2obYtdmB2YfYp9mGXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDI2XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogOTMzLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2qnZiNmF2YTZh1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2qnZiNmF2YTZh1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyNlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDkzNCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItqp24zYp9i02YfYsVwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2qnbjNin2LTZh9ixXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDI2XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogOTM1LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2q/ZiNix2KfYqCDYstix2YXbjNiuXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLar9mI2LHYp9ioLdiy2LHZhduM2K5cIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjZcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA5MzYsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZhNin2YfbjNis2KfZhlwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2YTYp9mH24zYrNin2YZcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjZcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA5MzcsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZhNi02Kog2YbYtNinXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZhNi02Kot2YbYtNinXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDI2XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogOTM4LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2YTZhtqv2LHZiNivXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZhNmG2q/YsdmI2K9cIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjZcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA5MzksXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZhNmI2LTYp9mGXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZhNmI2LTYp9mGXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDI2XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogOTQwLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2YTZiNmE2YXYp9mGXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZhNmI2YTZhdin2YZcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjZcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA5NDEsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZhNmI2YbYr9mI24zZhFwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2YTZiNmG2K/ZiNuM2YRcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjZcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA5NDIsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZhNuM2LPYp9ixXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZhNuM2LPYp9ixXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDI2XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogOTQzLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2YXYp9iz2KfZhFwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2YXYp9iz2KfZhFwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyNlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDk0NCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItmF2KfYs9mI2YTZh1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2YXYp9iz2YjZhNmHXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDI2XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogOTQ1LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2YXYsdis2YLZhFwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2YXYsdis2YLZhFwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyNlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDk0NixcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItmF2YbYrNuM2YRcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItmF2YbYrNuM2YRcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjZcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA5NDcsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZiNin2KzYp9ix2q/Yp9mHXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZiNin2KzYp9ix2q/Yp9mHXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDI2XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogOTQ4LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KfZhduM2LHaqdmE2KdcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItin2YXbjNix2qnZhNinXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDI3XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogOTQ5LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KfbjNiy2K/YtNmH2LFcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItin24zYstiv2LTZh9ixXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDI3XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogOTUwLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KLZhNin2LTYqlwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2KLZhNin2LTYqlwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyN1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDk1MSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItii2YXZhFwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2KLZhdmEXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDI3XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogOTUyLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KjYp9io2YRcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItio2KfYqNmEXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDI3XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogOTUzLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KjYp9io2YTYs9ixXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYqNin2KjZhNiz2LFcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA5NTQsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYqNin2YTYp9iv2YdcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItmF2KfYstmG2K/Ysdin2YYt2KjYp9mE2KfYr9mHXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDI3XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogOTU1LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KjZh9i02YfYsVwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2KjZh9i02YfYsVwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyN1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDk1NixcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItio2YfZhtmF24zYsVwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2KjZh9mG2YXbjNixXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDI3XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogOTU3LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2b7ZhCDYs9mB24zYr1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2b7ZhC3Ys9mB24zYr1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyN1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDk1OCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItiq2Ybaqdin2KjZhlwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2KrZhtqp2KfYqNmGXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDI3XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogOTU5LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KzZiNuM2KjYp9ixXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYrNmI24zYqNin2LFcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA5NjAsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLahtin2YTZiNizXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLahtin2YTZiNizXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDI3XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogOTYxLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2obZhdiz2KrYp9mGXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLahtmF2LPYqtin2YZcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA5NjIsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYrtix2YUg2KLYqNin2K9cIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItmF2KfYstmG2K/Ysdin2YYt2K7YsdmFLdii2KjYp9ivXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDI3XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogOTYzLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2K7ZhNuM2YQg2LTZh9ixXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYrtmE24zZhC3YtNmH2LFcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA5NjQsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYrtmI2LQg2LHZiNiv2b7bjFwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2K7ZiNi0Ldix2YjYr9m+24xcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA5NjUsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYr9in2KjZiNiv2LTYqlwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2K/Yp9io2YjYr9i02KpcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA5NjYsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYsdin2YXYs9ixXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYsdin2YXYs9ixXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDI3XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogOTY3LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2LHYs9iq2YXaqdmE2KdcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItix2LPYqtmF2qnZhNinXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDI3XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogOTY4LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2LHZiNuM2KfZhlwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2LHZiNuM2KfZhlwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyN1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDk2OSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItix24zZhtmHXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYsduM2YbZh1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyN1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDk3MCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItiy2LHar9ix2YXYrdmE2YdcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItiy2LHar9ix2YXYrdmE2YdcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA5NzEsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYstuM2LHYotioXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYstuM2LHYotioXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDI3XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogOTcyLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2LPYp9ix24xcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItiz2KfYsduMXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDI3XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogOTczLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2LPYsdiu2LHZiNivXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYs9ix2K7YsdmI2K9cIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA5NzQsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYs9mE2YXYp9mGINi02YfYsVwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2LPZhNmF2KfZhi3YtNmH2LFcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA5NzUsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYs9mI2LHaqVwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2LPZiNix2qlcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA5NzYsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYtNuM2LHar9in2YdcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcIti024zYsdqv2KfZh1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyN1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDk3NyxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcIti024zYsdmI2K9cIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcIti024zYsdmI2K9cIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA5NzgsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYudio2KfYsyDYotio2KfYr1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2LnYqNin2LMt2KLYqNin2K9cIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA5NzksXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZgdix24zYr9mI2YbaqdmG2KfYsVwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2YHYsduM2K/ZiNmG2qnZhtin2LFcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA5ODAsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZgdix24zZhVwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2YHYsduM2YVcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA5ODEsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZgtin2KbZhSDYtNmH2LFcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItmC2KfYptmFLdi02YfYsVwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyN1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDk4MixcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItqp2KrYp9mE2YVcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItqp2KrYp9mE2YVcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA5ODMsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLaqdmE2KfYsdii2KjYp9ivXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLaqdmE2KfYsdii2KjYp9ivXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDI3XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogOTg0LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2qnZhNin2LHYr9i02KpcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItqp2YTYp9ix2K/YtNiqXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDI3XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogOTg1LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2qnZhNmHINio2LPYqlwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2qnZhNmHLdio2LPYqlwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyN1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDk4NixcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItqp2YjZh9uMINiu24zZhFwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2qnZiNmH24wt2K7bjNmEXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDI3XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogOTg3LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2qnbjNin2LPYsVwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2qnbjNin2LPYsVwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyN1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDk4OCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItqp24zYp9qp2YTYp1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2qnbjNin2qnZhNinXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDI3XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogOTg5LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2q/Yqtin2KhcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItqv2KrYp9ioXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDI3XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogOTkwLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2q/YstmG2qlcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItqv2LLZhtqpXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDI3XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogOTkxLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2q/ZhNmI2q/Yp9mHXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLar9mE2Yjar9in2YdcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA5OTIsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZhdit2YXZiNiv2KLYqNin2K9cIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItmF2KfYstmG2K/Ysdin2YYt2YXYrdmF2YjYr9ii2KjYp9ivXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDI3XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogOTkzLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2YXYsdiy2YYg2KLYqNin2K9cIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItmF2LHYstmGLdii2KjYp9ivXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDI3XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogOTk0LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2YXYsdiy24zaqdmE2KdcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItmF2LHYstuM2qnZhNinXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDI3XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogOTk1LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2YbYtNiq2KfYsdmI2K9cIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItmG2LTYqtin2LHZiNivXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDI3XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogOTk2LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2YbaqdinXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZhtqp2KdcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiA5OTcsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZhtmI2LFcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItmG2YjYsVwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyN1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDk5OCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItmG2YjYtNmH2LFcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItmG2YjYtNmH2LFcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAxMTE5LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2LPYp9iv2KfYqiDYtNmH2LFcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItiz2KfYr9in2Kot2LTZh9ixXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDI3XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogOTk5LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KfYsdin2qlcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItin2LHYp9qpXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDI4XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMTAwMCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItii2LPYqtin2YbZh1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2KLYs9iq2KfZhtmHXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDI4XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMTAwMSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItii2LTYqtuM2KfZhlwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2KLYtNiq24zYp9mGXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDI4XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMTAwMixcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItm+2LHZhtiv2qlcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItm+2LHZhtiv2qlcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjhcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAxMDAzLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KrZgdix2LRcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItiq2YHYsdi0XCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDI4XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMTAwNCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItiq2YjYsdmHXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYqtmI2LHZh1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyOFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDEwMDUsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYrNin2YjYsdiz24zYp9mGXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYrNin2YjYsdiz24zYp9mGXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDI4XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMTAwNixcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItiu2LTaqdix2YjYr1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2K7YtNqp2LHZiNivXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDI4XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMTAwNyxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItiu2YXbjNmGXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYrtmF24zZhlwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyOFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDEwMDgsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYrtmG2K/Yp9ioXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYrtmG2K/Yp9ioXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDI4XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMTAwOSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItiv2KfZiNiv2KLYqNin2K9cIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItiv2KfZiNiv2KLYqNin2K9cIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjhcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAxMDEwLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2K/ZhNuM2KzYp9mGXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYr9mE24zYrNin2YZcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjhcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAxMDExLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2LHYp9iy2YLYp9mGXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYsdin2LLZgtin2YZcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjhcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAxMDEyLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2LLYp9mI24zZh1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2LLYp9mI24zZh1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyOFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDEwMTMsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYs9in2LHZiNmCXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYs9in2LHZiNmCXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDI4XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMTAxNCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItiz2KfZiNmHXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYs9in2YjZh1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyOFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDEwMTUsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYs9mG2KzYp9mGXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYs9mG2KzYp9mGXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDI4XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMTAxNixcbiAgICAgICAgICAgIFwibmFtZVwiOiBcIti02KfYstmG2K9cIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcIti02KfYstmG2K9cIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjhcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAxMDE3LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2LrYsdmCINii2KjYp9ivXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYutix2YIt2KLYqNin2K9cIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjhcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAxMDE4LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2YHYsdmF2YfbjNmGXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZgdix2YXZh9uM2YZcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjhcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAxMDE5LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2YLZiNix2obbjCDYqNin2LTbjFwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2YLZiNix2obbjC3YqNin2LTbjFwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyOFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDEwMjAsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLaqdix2YfYsdmI2K9cIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItqp2LHZh9ix2YjYr1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyOFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDEwMjEsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLaqdmF24zYrNin2YZcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItqp2YXbjNis2KfZhlwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyOFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDEwMjIsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZhdin2YXZiNmG24zZh1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2YXYp9mF2YjZhtuM2YdcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjhcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAxMDIzLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2YXYrdmE2KfYqlwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2YXYrdmE2KfYqlwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyOFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDEwMjQsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZhdmH2KfYrNix2KfZhlwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2YXZh9in2KzYsdin2YZcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjhcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAxMDI1LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2YXbjNmE2KfYrNix2K9cIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItmF24zZhNin2KzYsdivXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDI4XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMTAyNixcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItmG2LHYp9mCXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZhtix2KfZglwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyOFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDEwMjcsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZhtmI2KjYsdin2YZcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItmG2YjYqNix2KfZhlwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyOFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDEwMjgsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZhtuM2YXZiNixXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZhtuM2YXZiNixXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDI4XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMTAyOSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItmH2YbYr9mI2K/YsVwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2YfZhtiv2YjYr9ixXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDI4XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMTAzMCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItin2KjZiNmF2YjYs9uMXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYp9io2YjZhdmI2LPbjFwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyOVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDEwMzEsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYqNiz2KraqVwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2KjYs9iq2qlcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjlcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAxMDMyLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KjZhtiv2LHYrNin2LPaqVwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2KjZhtiv2LHYrNin2LPaqVwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyOVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDEwMzMsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYqNmG2K/YsdqG2KfYsdqpXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYqNmG2K/YsdqG2KfYsdqpXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDI5XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMTAzNCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItio2YbYr9ix2K7ZhduM2LFcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItio2YbYr9ix2K7ZhduM2LFcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjlcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAxMDM1LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KjZhtiv2LHYudio2KfYs1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2KjZhtiv2LHYudio2KfYs1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyOVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDEwMzYsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYqNmG2K/YsdmE2Ybar9mHXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYqNmG2K/YsdmE2Ybar9mHXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDI5XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMTAzNyxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItio24zaqdinXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYqNuM2qnYp1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyOVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDEwMzgsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZvtin2LHYs9uM2KfZhlwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2b7Yp9ix2LPbjNin2YZcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjlcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAxMDM5LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KrYrtiqXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYqtiu2KpcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjlcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAxMDQwLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KzZhtin2K1cIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItis2YbYp9itXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDI5XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMTA0MSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItit2KfYrNuMINii2KjYp9ivXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZh9ix2YXYstqv2KfZhi3Yrdin2KzbjC3Yotio2KfYr1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyOVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDEwNDIsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYr9ix2q/Zh9in2YZcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItiv2LHar9mH2KfZhlwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyOVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDEwNDMsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYr9mH2KjYp9ix2LJcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItiv2YfYqNin2LHYslwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyOVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDEwNDQsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYsdmI24zYr9ixXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYsdmI24zYr9ixXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDI5XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMTA0NSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItiy24zYp9ix2KrYudmE24xcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItiy24zYp9ix2KrYudmE24xcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjlcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAxMDQ2LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2LPYsdiv2LTYqlwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2YfYsdmF2LLar9in2YYt2LPYsdiv2LTYqlwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyOVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDEwNDcsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYs9mG2K/YsdqpXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYs9mG2K/YsdqpXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDI5XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMTA0OCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItiz2YjYstinXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYs9mI2LLYp1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyOVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDEwNDksXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYs9uM2LHbjNqpXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYs9uM2LHbjNqpXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDI5XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMTA1MCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItmB2KfYsdi62KfZhlwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2YHYp9ix2LrYp9mGXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDI5XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMTA1MSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItmB24zZhlwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2YHbjNmGXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDI5XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMTA1MixcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItmC2LTZhVwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2YLYtNmFXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDI5XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMTA1MyxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItmC2YTYudmHINmC2KfYttuMXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZgtmE2LnZhy3Zgtin2LbbjFwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyOVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDEwNTQsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLaqdmG2q9cIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItqp2Ybar1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyOVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDEwNTUsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLaqdmI2LTaqdmG2KfYsVwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2qnZiNi02qnZhtin2LFcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjlcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAxMDU2LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2qnbjNi0XCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLaqduM2LRcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjlcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAxMDU3LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2q/ZiNmH2LHYp9mGXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLar9mI2YfYsdin2YZcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjlcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAxMDU4LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2YXbjNmG2KfYqFwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2YXbjNmG2KfYqFwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAyOVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDEwNTksXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZh9ix2YXYslwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2YfYsdmF2LJcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMjlcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAxMDYwLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2YfYtNiq2KjZhtiv24xcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItmH2LTYqtio2YbYr9uMXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDI5XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMTA2MSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItin2LLZhtiv2LHbjNin2YZcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItin2LLZhtiv2LHbjNin2YZcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMzBcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAxMDYyLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KfYs9iv2KLYqNin2K9cIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItin2LPYr9ii2KjYp9ivXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDMwXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMTA2MyxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItio2LHYstmI2YRcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItio2LHYstmI2YRcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMzBcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAxMDY0LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KjZh9in2LFcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItio2YfYp9ixXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDMwXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMTA2NSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItiq2YjbjNiz2LHaqdin2YZcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItiq2YjbjNiz2LHaqdin2YZcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMzBcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAxMDY2LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KzZiNix2YLYp9mGXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYrNmI2LHZgtin2YZcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMzBcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAxMDY3LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KzZiNqp2KfYsVwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2KzZiNqp2KfYsVwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAzMFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDEwNjgsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYr9mF2YJcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItiv2YXZglwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAzMFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDEwNjksXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYsdiy2YZcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItix2LLZhlwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAzMFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDEwNzAsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYstmG2q/ZhtmHXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYstmG2q/ZhtmHXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDMwXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMTA3MSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItiz2KfZhdmGXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYs9in2YXZhlwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAzMFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDEwNzIsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYs9ix2qnYp9mGXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYs9ix2qnYp9mGXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDMwXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMTA3MyxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcIti024zYsduM2YYg2LPZiFwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2LTbjNix24zZhi3Ys9mIXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDMwXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMTA3NCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcIti12KfZhNitINii2KjYp9ivXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZh9mF2K/Yp9mGLdi12KfZhNitLdii2KjYp9ivXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDMwXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMTA3NSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItmB2KfZhdmG24zZhlwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2YHYp9mF2YbbjNmGXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDMwXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMTA3NixcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItmB2LHYs9mB2KxcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItmB2LHYs9mB2KxcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMzBcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAxMDc3LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2YHbjNix2YjYstin2YZcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItmB24zYsdmI2LLYp9mGXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDMwXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMTA3OCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItmC2LHZiNmHINiv2LHYrNiy24zZhlwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2YLYsdmI2Yct2K/Ysdis2LLbjNmGXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDMwXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMTA3OSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItmC2YfYp9mI2YbYr1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2YLZh9in2YjZhtivXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDMwXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMTA4MCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItqp2KjZiNiv2LEg2KLZh9mG2q9cIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItqp2KjZiNiv2LEt2KLZh9mG2q9cIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMzBcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAxMDgxLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2q/ZhCDYqtm+2YdcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItqv2YQt2KrZvtmHXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDMwXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMTA4MixcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItqv24zYp9mGXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLar9uM2KfZhlwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAzMFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDEwODMsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZhNin2YTYrNuM2YZcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItmE2KfZhNis24zZhlwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAzMFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDEwODQsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZhdix24zYp9mG2KxcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItmF2LHbjNin2YbYrFwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAzMFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDEwODUsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZhdmE2KfbjNixXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZhdmE2KfbjNixXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDMwXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMTA4NixcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItmG2YfYp9mI2YbYr1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2YbZh9in2YjZhtivXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDMwXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMTA4NyxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItmH2YXYr9in2YZcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcIti02YfYsS3Zh9mF2K/Yp9mGXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDMwXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMTA4OCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItin2KjYsdqp2YjZh1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2KfYqNix2qnZiNmHXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDMxXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMTA4OSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItin2K3Zhdiv2KLYqNin2K9cIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItin2K3Zhdiv2KLYqNin2K9cIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMzFcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAxMDkwLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KfYsdiv2qnYp9mGXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLbjNiy2K8t2KfYsdiv2qnYp9mGXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDMxXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMTA5MSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItin2LTaqdiw2LFcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItin2LTaqdiw2LFcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMzFcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAxMDkyLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2KjYp9mB2YJcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItio2KfZgdmCXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDMxXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMTA5MyxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItio2YHYsdmI2KbbjNmHXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYqNmB2LHZiNim24zZh1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAzMVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDEwOTQsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYqNmH2KfYqNin2K9cIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItio2YfYp9io2KfYr1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAzMVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDEwOTUsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYqtmB2KpcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItiq2YHYqlwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAzMVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDEwOTYsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYrdmF24zYr9uM2KdcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItit2YXbjNiv24zYp1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAzMVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDEwOTcsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYrti22LHYotio2KfYr1wiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2K7Yttix2KLYqNin2K9cIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMzFcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAxMDk4LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2K/bjNmH2YjaqVwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2K/bjNmH2YjaqVwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAzMVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDEwOTksXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLYstin2LHahlwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2LLYp9ix2oZcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMzFcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAxMTAwLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2LTYp9mH2K/bjNmHXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYtNin2YfYr9uM2YdcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMzFcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAxMTAxLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2LfYqNizXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLbjNiy2K8t2LfYqNizXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDMxXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMTEwMyxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcIti52YLYr9inXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLYudmC2K/Yp1wiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAzMVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDExMDQsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLZhdix2YjYs9iqXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZhdix2YjYs9iqXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDMxXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMTEwNSxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItmF2YfYsdiv2LTYqlwiLFxuICAgICAgICAgICAgXCJzbHVnXCI6IFwi2YXZh9ix2K/YtNiqXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDMxXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMTEwNixcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItmF2YfYsduM2LJcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItmF2YfYsduM2LJcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMzFcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAxMTA3LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2YXbjNio2K9cIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItmF24zYqNivXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDMxXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMTEwOCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItmG2K/ZiNi02YZcIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcItmG2K/ZiNi02YZcIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMzFcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAxMTA5LFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwi2YbbjNixXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLbjNiy2K8t2YbbjNixXCIsXG4gICAgICAgICAgICBcInN0YXRlX2lkXCI6IDMxXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMTExMCxcbiAgICAgICAgICAgIFwibmFtZVwiOiBcItmH2LHYp9iqXCIsXG4gICAgICAgICAgICBcInNsdWdcIjogXCLZh9ix2KfYqlwiLFxuICAgICAgICAgICAgXCJzdGF0ZV9pZFwiOiAzMVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDExMTEsXG4gICAgICAgICAgICBcIm5hbWVcIjogXCLbjNiy2K9cIixcbiAgICAgICAgICAgIFwic2x1Z1wiOiBcIti02YfYsS3bjNiy2K9cIixcbiAgICAgICAgICAgIFwic3RhdGVfaWRcIjogMzFcbiAgICAgICAgfVxuICAgIF07XG4gICAgcmV0dXJuIGRhdGE7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZGF0YTtcbiJdLCJtYXBwaW5ncyI6IkFBRUEsU0FBVUEsSUFBVixHQUFnQjtFQUNaLElBQUlBLElBQUksR0FBRyxFQUFYO0VBRUFBLElBQUksQ0FBQ0MsTUFBTCxHQUFjLENBQ1Y7SUFDSSxNQUFNLENBRFY7SUFFSSxRQUFRLGdCQUZaO0lBR0ksUUFBUTtFQUhaLENBRFUsRUFNVjtJQUNJLE1BQU0sQ0FEVjtJQUVJLFFBQVEsZ0JBRlo7SUFHSSxRQUFRO0VBSFosQ0FOVSxFQVdWO0lBQ0ksTUFBTSxDQURWO0lBRUksUUFBUSxRQUZaO0lBR0ksUUFBUTtFQUhaLENBWFUsRUFnQlY7SUFDSSxNQUFNLENBRFY7SUFFSSxRQUFRLFFBRlo7SUFHSSxRQUFRO0VBSFosQ0FoQlUsRUFxQlY7SUFDSSxNQUFNLENBRFY7SUFFSSxRQUFRLE9BRlo7SUFHSSxRQUFRO0VBSFosQ0FyQlUsRUEwQlY7SUFDSSxNQUFNLENBRFY7SUFFSSxRQUFRLE9BRlo7SUFHSSxRQUFRO0VBSFosQ0ExQlUsRUErQlY7SUFDSSxNQUFNLENBRFY7SUFFSSxRQUFRLE9BRlo7SUFHSSxRQUFRO0VBSFosQ0EvQlUsRUFvQ1Y7SUFDSSxNQUFNLENBRFY7SUFFSSxRQUFRLE9BRlo7SUFHSSxRQUFRO0VBSFosQ0FwQ1UsRUF5Q1Y7SUFDSSxNQUFNLENBRFY7SUFFSSxRQUFRLG9CQUZaO0lBR0ksUUFBUTtFQUhaLENBekNVLEVBOENWO0lBQ0ksTUFBTSxFQURWO0lBRUksUUFBUSxjQUZaO0lBR0ksUUFBUTtFQUhaLENBOUNVLEVBbURWO0lBQ0ksTUFBTSxFQURWO0lBRUksUUFBUSxhQUZaO0lBR0ksUUFBUTtFQUhaLENBbkRVLEVBd0RWO0lBQ0ksTUFBTSxFQURWO0lBRUksUUFBUSxjQUZaO0lBR0ksUUFBUTtFQUhaLENBeERVLEVBNkRWO0lBQ0ksTUFBTSxF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O0lBR0ksUUFBUSxRQUhaO0lBSUksWUFBWTtFQUpoQixDQW5pRVUsRUF5aUVWO0lBQ0ksTUFBTSxHQURWO0lBRUksUUFBUSxRQUZaO0lBR0ksUUFBUSxRQUhaO0lBSUksWUFBWTtFQUpoQixDQXppRVUsRUEraUVWO0lBQ0ksTUFBTSxHQURWO0lBRUksUUFBUSxTQUZaO0lBR0ksUUFBUSxTQUhaO0lBSUksWUFBWTtFQUpoQixDQS9pRVUsRUFxakVWO0lBQ0ksTUFBTSxHQURWO0lBRUksUUFBUSxTQUZaO0lBR0ksUUFBUSxTQUhaO0lBSUksWUFBWTtFQUpoQixDQXJqRVUsRUEyakVWO0lBQ0ksTUFBTSxHQURWO0lBRUksUUFBUSxNQUZaO0lBR0ksUUFBUSxNQUhaO0lBSUksWUFBWTtFQUpoQixDQTNqRVUsRUFpa0VWO0lBQ0ksTUFBTSxHQURWO0lBRUksUUFBUSxRQUZaO0lBR0ksUUFBUSxRQUhaO0lBSUksWUFBWTtFQUpoQixDQWprRVUsRUF1a0VWO0lBQ0ksTUFBTSxHQURWO0lBRUksUUFBUSxNQUZaO0lBR0ksUUFBUSxNQUhaO0lBSUksWUFBWTtFQUpoQixDQXZrRVUsRUE2a0VWO0lBQ0ksTUFBTSxHQURWO0lBRUksUUFBUSxRQUZaO0lBR0ksUUFBUSxRQUhaO0lBSUksWUFBWTtFQUpoQixDQTdrRVUsRUFtbEVWO0lBQ0ksTUFBTSxHQURWO0lBRUksUUFBUSxXQUZaO0lBR0ksUUFBUSxXQUhaO0lBSUksWUFBWTtFQUpoQixDQW5sRVUsRUF5bEVWO0lBQ0ksTUFBTSxHQURWO0lBRUksUUFBUSxPQUZaO0lBR0ksUUFBUSxPQUhaO0lBSUksWUFBWTtFQUpoQixDQXpsRVUsRUErbEVWO0lBQ0ksTUFBTSxHQURWO0lBRUksUUFBUSxNQUZaO0lBR0ksUUFBUSxNQUhaO0lBSUksWUFBWTtFQUpoQixDQS9sRVUsRUFxbUVWO0lBQ0ksTUFBTSxHQURWO0lBRUksUUFBUSxNQUZaO0lBR0ksUUFBUSxNQUhaO0lBSUksWUFBWTtFQUpoQixDQXJtRVUsRUEybUVWO0lBQ0ksTUFBTSxHQURWO0lBRUksUUFBUSxRQUZa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USxXQUZaO0lBR0ksUUFBUSxXQUhaO0lBSUksWUFBWTtFQUpoQixDQTNoRlUsRUFpaUZWO0lBQ0ksTUFBTSxHQURWO0lBRUksUUFBUSxRQUZaO0lBR0ksUUFBUSxRQUhaO0lBSUksWUFBWTtFQUpoQixDQWppRlUsRUF1aUZWO0lBQ0ksTUFBTSxHQURWO0lBRUksUUFBUSxXQUZaO0lBR0ksUUFBUSxXQUhaO0lBSUksWUFBWTtFQUpoQixDQXZpRlUsRUE2aUZWO0lBQ0ksTUFBTSxHQURWO0lBRUksUUFBUSxPQUZaO0lBR0ksUUFBUSxPQUhaO0lBSUksWUFBWTtFQUpoQixDQTdpRlUsRUFtakZWO0lBQ0ksTUFBTSxHQURWO0lBRUksUUFBUSxNQUZaO0lBR0ksUUFBUSxNQUhaO0lBSUksWUFBWTtFQUpoQixDQW5qRlUsRUF5akZWO0lBQ0ksTUFBTSxHQURWO0lBRUksUUFBUSxPQUZaO0lBR0ksUUFBUSxPQUhaO0lBSUksWUFBWTtFQUpoQixDQXpqRlUsRUErakZWO0lBQ0ksTUFBTSxHQURWO0lBRUksUUFBUSxPQUZaO0lBR0ksUUFBUSxPQUhaO0lBSUksWUFBWTtFQUpoQixDQS9qRlUsRUFxa0ZWO0lBQ0ksTUFBTSxHQURWO0lBRUksUUFBUSxNQUZaO0lBR0ksUUFBUSxNQUhaO0lBSUksWUFBWTtFQUpoQixDQXJrRlUsRUEya0ZWO0lBQ0ksTUFBTSxHQURWO0lBRUksUUFBUSxNQUZaO0lBR0ksUUFBUSxNQUhaO0lBSUksWUFBWTtFQUpoQixDQTNrRlUsRUFpbEZWO0lBQ0ksTUFBTSxHQURWO0lBRUksUUFBUSxNQUZaO0lBR0ksUUFBUSxNQUhaO0lBSUksWUFBWTtFQUpoQixDQWpsRlUsRUF1bEZWO0lBQ0ksTUFBTSxHQURWO0lBRUksUUFBUSxRQUZaO0lBR0ksUUFBUSxRQUhaO0lBSUksWUFBWTtFQUpoQixDQXZsRlUsRUE2bEZWO0lBQ0ksTUFBTSxHQURWO0lBRUksUUFBUSxRQUZaO0lBR0ksUUFBUSxRQUhaO0lBSUksWUFBWTtFQUpoQixDQTdsRlUsRUFtbUZWO0lBQ0ksTUFBTSxHQURWO0lBRUksUUFB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RUksUUFBUSxRQUZaO0lBR0ksUUFBUSxRQUhaO0lBSUksWUFBWTtFQUpoQixDQW51SFUsRUF5dUhWO0lBQ0ksTUFBTSxHQURWO0lBRUksUUFBUSxPQUZaO0lBR0ksUUFBUSxPQUhaO0lBSUksWUFBWTtFQUpoQixDQXp1SFUsRUErdUhWO0lBQ0ksTUFBTSxHQURWO0lBRUksUUFBUSxTQUZaO0lBR0ksUUFBUSxTQUhaO0lBSUksWUFBWTtFQUpoQixDQS91SFUsRUFxdkhWO0lBQ0ksTUFBTSxHQURWO0lBRUksUUFBUSxPQUZaO0lBR0ksUUFBUSxPQUhaO0lBSUksWUFBWTtFQUpoQixDQXJ2SFUsRUEydkhWO0lBQ0ksTUFBTSxHQURWO0lBRUksUUFBUSxLQUZaO0lBR0ksUUFBUSxLQUhaO0lBSUksWUFBWTtFQUpoQixDQTN2SFUsRUFpd0hWO0lBQ0ksTUFBTSxHQURWO0lBRUksUUFBUSxTQUZaO0lBR0ksUUFBUSxTQUhaO0lBSUksWUFBWTtFQUpoQixDQWp3SFUsRUF1d0hWO0lBQ0ksTUFBTSxHQURWO0lBRUksUUFBUSxXQUZaO0lBR0ksUUFBUSxXQUhaO0lBSUksWUFBWTtFQUpoQixDQXZ3SFUsRUE2d0hWO0lBQ0ksTUFBTSxHQURWO0lBRUksUUFBUSxPQUZaO0lBR0ksUUFBUSxPQUhaO0lBSUksWUFBWTtFQUpoQixDQTd3SFUsRUFteEhWO0lBQ0ksTUFBTSxHQURWO0lBRUksUUFBUSxPQUZaO0lBR0ksUUFBUSxPQUhaO0lBSUksWUFBWTtFQUpoQixDQW54SFUsRUF5eEhWO0lBQ0ksTUFBTSxHQURWO0lBRUksUUFBUSxNQUZaO0lBR0ksUUFBUSxNQUhaO0lBSUksWUFBWTtFQUpoQixDQXp4SFUsRUEreEhWO0lBQ0ksTUFBTSxHQURWO0lBRUksUUFBUSxRQUZaO0lBR0ksUUFBUSxRQUhaO0lBSUksWUFBWTtFQUpoQixDQS94SFUsRUFxeUhWO0lBQ0ksTUFBTSxHQURWO0lBRUksUUFBUSxTQUZaO0lBR0ksUUFBUSxTQUhaO0lBSUksWUFBWTtFQUpoQixDQXJ5SFUsRUEyeUhWO0lBQ0ksTUFBTSxHQURWO0lB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O0lBRUksUUFBUSxPQUZaO0lBR0ksUUFBUSxPQUhaO0lBSUksWUFBWTtFQUpoQixDQW5nSVUsRUF5Z0lWO0lBQ0ksTUFBTSxHQURWO0lBRUksUUFBUSxPQUZaO0lBR0ksUUFBUSxPQUhaO0lBSUksWUFBWTtFQUpoQixDQXpnSVUsRUErZ0lWO0lBQ0ksTUFBTSxHQURWO0lBRUksUUFBUSxVQUZaO0lBR0ksUUFBUSxVQUhaO0lBSUksWUFBWTtFQUpoQixDQS9nSVUsRUFxaElWO0lBQ0ksTUFBTSxHQURWO0lBRUksUUFBUSxTQUZaO0lBR0ksUUFBUSxTQUhaO0lBSUksWUFBWTtFQUpoQixDQXJoSVUsRUEyaElWO0lBQ0ksTUFBTSxHQURWO0lBRUksUUFBUSxPQUZaO0lBR0ksUUFBUSxPQUhaO0lBSUksWUFBWTtFQUpoQixDQTNoSVUsRUFpaUlWO0lBQ0ksTUFBTSxHQURWO0lBRUksUUFBUSxPQUZaO0lBR0ksUUFBUSxPQUhaO0lBSUksWUFBWTtFQUpoQixDQWppSVUsRUF1aUlWO0lBQ0ksTUFBTSxHQURWO0lBRUksUUFBUSxNQUZaO0lBR0ksUUFBUSxNQUhaO0lBSUksWUFBWTtFQUpoQixDQXZpSVUsRUE2aUlWO0lBQ0ksTUFBTSxHQURWO0lBRUksUUFBUSxLQUZaO0lBR0ksUUFBUSxLQUhaO0lBSUksWUFBWTtFQUpoQixDQTdpSVUsRUFtaklWO0lBQ0ksTUFBTSxHQURWO0lBRUksUUFBUSxZQUZaO0lBR0ksUUFBUSxZQUhaO0lBSUksWUFBWTtFQUpoQixDQW5qSVUsRUF5aklWO0lBQ0ksTUFBTSxHQURWO0lBRUksUUFBUSxTQUZaO0lBR0ksUUFBUSxTQUhaO0lBSUksWUFBWTtFQUpoQixDQXpqSVUsRUEraklWO0lBQ0ksTUFBTSxHQURWO0lBRUksUUFBUSxTQUZaO0lBR0ksUUFBUSxTQUhaO0lBSUksWUFBWTtFQUpoQixDQS9qSVUsRUFxa0lWO0lBQ0ksTUFBTSxHQURWO0lBRUksUUFBUSxRQUZaO0lBR0ksUUFBUSxRQUhaO0lBSUksWUFBWTtFQUpoQixDQXJrSVUsRUEya0lWO0lBQ0ksTUFBTSxHQURW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SUFDSSxNQUFNLElBRFY7SUFFSSxRQUFRLFFBRlo7SUFHSSxRQUFRLFFBSFo7SUFJSSxZQUFZO0VBSmhCLENBMzlNVSxFQWkrTVY7SUFDSSxNQUFNLElBRFY7SUFFSSxRQUFRLE9BRlo7SUFHSSxRQUFRLE9BSFo7SUFJSSxZQUFZO0VBSmhCLENBaitNVSxFQXUrTVY7SUFDSSxNQUFNLElBRFY7SUFFSSxRQUFRLE1BRlo7SUFHSSxRQUFRLE1BSFo7SUFJSSxZQUFZO0VBSmhCLENBditNVSxFQTYrTVY7SUFDSSxNQUFNLElBRFY7SUFFSSxRQUFRLE9BRlo7SUFHSSxRQUFRLE9BSFo7SUFJSSxZQUFZO0VBSmhCLENBNytNVSxFQW0vTVY7SUFDSSxNQUFNLElBRFY7SUFFSSxRQUFRLEtBRlo7SUFHSSxRQUFRLFNBSFo7SUFJSSxZQUFZO0VBSmhCLENBbi9NVSxFQXkvTVY7SUFDSSxNQUFNLElBRFY7SUFFSSxRQUFRLE1BRlo7SUFHSSxRQUFRLE1BSFo7SUFJSSxZQUFZO0VBSmhCLENBei9NVSxFQSsvTVY7SUFDSSxNQUFNLElBRFY7SUFFSSxRQUFRLEtBRlo7SUFHSSxRQUFRLFNBSFo7SUFJSSxZQUFZO0VBSmhCLENBLy9NVSxDQUFkO0VBc2dOQSxPQUFPRixJQUFQO0FBQ0g7O0FBRURHLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQkosSUFBakIiLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvcGx1Z2lucy9kYXRhLmpzLmpzIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./resources/js/plugins/data.js\n");
/***/ }),
/***/ "./resources/js/product.js":
/*!*********************************!*\
!*** ./resources/js/product.js ***!
\*********************************/
/***/ (() => {
eval("function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it[\"return\"] != null) it[\"return\"](); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nvar isW8 = false; // var descBody = $(\"#description\").val();\n\n$(function () {\n if ($(\"[name='desc']#description\").length) {\n CKEDITOR.replace('description', {\n filebrowserUploadUrl: xupload,\n filebrowserUploadMethod: 'form',\n contentsLangDirection: 'rtl'\n });\n CKEDITOR.instances.description.on('change', function () {\n $(\"#description\").val(CKEDITOR.instances.description.getData());\n });\n }\n\n window.fakerProduct = function () {\n $(\"#name\").val(\"Product name sample 1\");\n $(\"#price\").val(\"100000\");\n $(\"#excerpt\").val(\"گروه سوم، شامل افرادی می‌شود که قوانین اولیه قدرت و استراتژی را درک می‌کنند. پایان در هر زمینه‌ای مانند یک پروژه، یک مبارزه‌ی انتخاباتی یا یک گفت و گو، اهمیت فوق العاده ای برای مردم دارد. این اتفاق در ذهن ثبت می‌شود. یک جنگ می‌تواند با هیاهوی بسیار شروع شود و پیروزی‌های بسیاری را به ارمغان بیاورد؛ اما اینکه چگونه به پایان می‌رسد، در یادها می‌ماند و کسی به شروع پرهیاهو اهمیتی نمی‌دهد و تنها شاید این هیاهو برای لحظه‌ای ذهنشان را درگیر کند.\");\n $(\"#description\").val(\"گروه سوم، شامل افرادی می‌شود که قوانین اولیه قدرت و استراتژی را درک می‌کنند. پایان در هر زمینه‌ای مانند یک پروژه، یک مبارزه‌ی انتخاباتی یا یک گفت و گو، اهمیت فوق العاده ای برای مردم دارد. این اتفاق در ذهن ثبت می‌شود. یک جنگ می‌تواند با هیاهوی بسیار شروع شود و پیروزی‌های بسیاری را به ارمغان بیاورد؛ اما اینکه چگونه به پایان می‌رسد، در یادها می‌ماند و کسی به شروع پرهیاهو اهمیتی نمی‌دهد و تنها شاید این هیاهو برای لحظه‌ای ذهنشان را درگیر کند.\");\n $(\"#weight\").val(\"10.5\");\n $(\"#color\").val(\"رزد گلد\");\n $(\"#width\").val(\"34\");\n }; // fakerProduct();\n\n\n $('#discounts .btn-danger').click(function () {\n try {\n var id = $(this).data('id');\n var x = JSON.parse($(\"#discount-rem\").val());\n x.push(id);\n $(\"#discount-rem\").val(JSON.stringify(x));\n $(this).closest('tr').slideUp(300);\n } catch (_unused) {}\n });\n $(\"#saveProduct\").bind('submit', function (e) {\n e.preventDefault();\n\n if (isW8) {\n return false;\n }\n\n var formData = new FormData(document.querySelector('#saveProduct'));\n var j = 1;\n\n var _iterator = _createForOfIteratorHelper(uploadFormData),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var f = _step.value;\n\n if (uploadFormData.length == j) {\n break;\n }\n\n j++;\n\n try {\n if (f.size == undefined) {\n continue;\n }\n } catch (e) {\n continue; // console.log(e.message);\n }\n\n formData.append('image[]', f);\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n\n $(\"[type='submit']\").attr('disabled'); //.addClass('w8');\n\n $(\"[type='submit']\").addClass('w8');\n isW8 = true;\n var url = $(this).attr('action'); // formData.set('desc',$(\"#description\").val());\n // console.log('form Product data', formData);\n\n axios({\n method: 'post',\n url: url,\n data: formData,\n headers: {\n 'Content-Type': 'multipart/form-data'\n }\n }).then(function (res) {\n $(\"[type='submit']\").removeAttr('disabled').removeClass('w8');\n isW8 = false;\n\n if (res.data.OK) {\n if (res.data.url != undefined) {\n window.location.href = res.data.url;\n } else {\n alertify.success(res.data.msg);\n\n if ($(\"#price-amount\").val().trim() !== '') {\n window.location.reload();\n }\n }\n }\n })[\"catch\"](function (error) {\n // console.log(error.response.data.errors);\n $(\".is-invalid\").removeClass('is-invalid');\n $(\"[type='submit']\").removeAttr('disabled').removeClass('w8');\n isW8 = false;\n\n for (var i in error.response.data.errors) {\n $(\"#\" + i).addClass('is-invalid');\n\n var _iterator2 = _createForOfIteratorHelper(error.response.data.errors[i]),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var err = _step2.value;\n alertify.error(err);\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n }\n });\n });\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpc1c4IiwiJCIsImxlbmd0aCIsIkNLRURJVE9SIiwicmVwbGFjZSIsImZpbGVicm93c2VyVXBsb2FkVXJsIiwieHVwbG9hZCIsImZpbGVicm93c2VyVXBsb2FkTWV0aG9kIiwiY29udGVudHNMYW5nRGlyZWN0aW9uIiwiaW5zdGFuY2VzIiwiZGVzY3JpcHRpb24iLCJvbiIsInZhbCIsImdldERhdGEiLCJ3aW5kb3ciLCJmYWtlclByb2R1Y3QiLCJjbGljayIsImlkIiwiZGF0YSIsIngiLCJKU09OIiwicGFyc2UiLCJwdXNoIiwic3RyaW5naWZ5IiwiY2xvc2VzdCIsInNsaWRlVXAiLCJiaW5kIiwiZSIsInByZXZlbnREZWZhdWx0IiwiZm9ybURhdGEiLCJGb3JtRGF0YSIsImRvY3VtZW50IiwicXVlcnlTZWxlY3RvciIsImoiLCJ1cGxvYWRGb3JtRGF0YSIsImYiLCJzaXplIiwidW5kZWZpbmVkIiwiYXBwZW5kIiwiYXR0ciIsImFkZENsYXNzIiwidXJsIiwiYXhpb3MiLCJtZXRob2QiLCJoZWFkZXJzIiwidGhlbiIsInJlcyIsInJlbW92ZUF0dHIiLCJyZW1vdmVDbGFzcyIsIk9LIiwibG9jYXRpb24iLCJocmVmIiwiYWxlcnRpZnkiLCJzdWNjZXNzIiwibXNnIiwidHJpbSIsInJlbG9hZCIsImVycm9yIiwiaSIsInJlc3BvbnNlIiwiZXJyb3JzIiwiZXJyIl0sInNvdXJjZXMiOlsid2VicGFjazovLy8uL3Jlc291cmNlcy9qcy9wcm9kdWN0LmpzP2ZjNjIiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIGlzVzggPSBmYWxzZTtcbi8vIHZhciBkZXNjQm9keSA9ICQoXCIjZGVzY3JpcHRpb25cIikudmFsKCk7XG5cbiQoZnVuY3Rpb24gKCkge1xuICAgIGlmICgkKFwiW25hbWU9J2Rlc2MnXSNkZXNjcmlwdGlvblwiKS5sZW5ndGgpIHtcbiAgICAgICAgQ0tFRElUT1IucmVwbGFjZSgnZGVzY3JpcHRpb24nLCB7XG4gICAgICAgICAgICBmaWxlYnJvd3NlclVwbG9hZFVybDogeHVwbG9hZCxcbiAgICAgICAgICAgIGZpbGVicm93c2VyVXBsb2FkTWV0aG9kOiAnZm9ybScsXG4gICAgICAgICAgICBjb250ZW50c0xhbmdEaXJlY3Rpb246ICdydGwnXG4gICAgICAgIH0pO1xuICAgICAgICBDS0VESVRPUi5pbnN0YW5jZXMuZGVzY3JpcHRpb24ub24oJ2NoYW5nZScsZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgJChcIiNkZXNjcmlwdGlvblwiKS52YWwoQ0tFRElUT1IuaW5zdGFuY2VzLmRlc2NyaXB0aW9uLmdldERhdGEoKSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHdpbmRvdy5mYWtlclByb2R1Y3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICQoXCIjbmFtZVwiKS52YWwoXCJQcm9kdWN0IG5hbWUgc2FtcGxlIDFcIik7XG4gICAgICAgICQoXCIjcHJpY2VcIikudmFsKFwiMTAwMDAwXCIpO1xuICAgICAgICAkKFwiI2V4Y2VycHRcIikudmFsKFwi2q/YsdmI2Ycg2LPZiNmF2Iwg2LTYp9mF2YQg2KfZgdix2KfYr9uMINmF24zigIzYtNmI2K8g2qnZhyDZgtmI2KfZhtuM2YYg2KfZiNmE24zZhyDZgtiv2LHYqiDZiCDYp9iz2KrYsdin2KramNuMINix2Kcg2K/YsdqpINmF24zigIzaqdmG2YbYry4g2b7Yp9uM2KfZhiDYr9ixINmH2LEg2LLZhduM2YbZh+KAjNin24wg2YXYp9mG2YbYryDbjNqpINm+2LHZiNqY2YfYjCDbjNqpINmF2KjYp9ix2LLZh+KAjNuMINin2YbYqtiu2KfYqNin2KrbjCDbjNinINuM2qkg2q/ZgdiqINmIINqv2YjYjCDYp9mH2YXbjNiqINmB2YjZgiDYp9mE2LnYp9iv2Ycg2KfbjCDYqNix2KfbjCDZhdix2K/ZhSDYr9in2LHYry4g2KfbjNmGINin2KrZgdin2YIg2K/YsSDYsNmH2YYg2KvYqNiqINmF24zigIzYtNmI2K8uINuM2qkg2KzZhtqvINmF24zigIzYqtmI2KfZhtivINio2Kcg2YfbjNin2YfZiNuMINio2LPbjNin2LEg2LTYsdmI2Lkg2LTZiNivINmIINm+24zYsdmI2LLbjOKAjNmH2KfbjCDYqNiz24zYp9ix24wg2LHYpyDYqNmHINin2LHZhdi62KfZhiDYqNuM2KfZiNix2K/YmyDYp9mF2Kcg2KfbjNmG2qnZhyDahtqv2YjZhtmHINio2Ycg2b7Yp9uM2KfZhiDZhduM4oCM2LHYs9iv2Iwg2K/YsSDbjNin2K/Zh9inINmF24zigIzZhdin2YbYryDZiCDaqdiz24wg2KjZhyDYtNix2YjYuSDZvtix2YfbjNin2YfZiCDYp9mH2YXbjNiq24wg2YbZhduM4oCM2K/Zh9ivINmIINiq2YbZh9inINi02KfbjNivINin24zZhiDZh9uM2KfZh9mIINio2LHYp9uMINmE2K3YuNmH4oCM2KfbjCDYsNmH2YbYtNin2YYg2LHYpyDYr9ix2q/bjNixINqp2YbYry5cIik7XG4gICAgICAgICQoXCIjZGVzY3JpcHRpb25cIikudmFsKFwi2q/YsdmI2Ycg2LPZiNmF2Iwg2LTYp9mF2YQg2KfZgdix2KfYr9uMINmF24zigIzYtNmI2K8g2qnZhyDZgtmI2KfZhtuM2YYg2KfZiNmE24zZhyDZgtiv2LHYqiDZiCDYp9iz2KrYsdin2KramNuMINix2Kcg2K/YsdqpINmF24zigIzaqdmG2YbYry4g2b7Yp9uM2KfZhiDYr9ixINmH2LEg2LLZhduM2YbZh+KAjNin24wg2YXYp9mG2YbYryDbjNqpINm+2LHZiNqY2YfYjCDbjNqpINmF2KjYp9ix2LLZh+KAjNuMINin2YbYqtiu2KfYqNin2KrbjCDbjNinINuM2qkg2q/ZgdiqINmIINqv2YjYjCDYp9mH2YXbjNiqINmB2YjZgiDYp9mE2LnYp9iv2Ycg2KfbjCDYqNix2KfbjCDZhdix2K/ZhSDYr9in2LHYry4g2KfbjNmGINin2KrZgdin2YIg2K/YsSDYsNmH2YYg2KvYqNiqINmF24zigIzYtNmI2K8uINuM2qkg2KzZhtqvINmF24zigIzYqtmI2KfZhtivINio2Kcg2YfbjNin2YfZiNuMINio2LPbjNin2LEg2LTYsdmI2Lkg2LTZiNivINmIINm+24zYsdmI2LLbjOKAjNmH2KfbjCDYqNiz24zYp9ix24wg2LHYpyDYqNmHINin2LHZhdi62KfZhiDYqNuM2KfZiNix2K/YmyDYp9mF2Kcg2KfbjNmG2qnZhyDahtqv2YjZhtmHINio2Ycg2b7Yp9uM2KfZhiDZhduM4oCM2LHYs9iv2Iwg2K/YsSDbjNin2K/Zh9inINmF24zigIzZhdin2YbYryDZiCDaqdiz24wg2KjZhyDYtNix2YjYuSDZvtix2YfbjNin2YfZiCDYp9mH2YXbjNiq24wg2YbZhduM4oCM2K/Zh9ivINmIINiq2YbZh9inINi02KfbjNivINin24zZhiDZh9uM2KfZh9mIINio2LHYp9uMINmE2K3YuNmH4oCM2KfbjCDYsNmH2YbYtNin2YYg2LHYpyDYr9ix2q/bjNixINqp2YbYry5cIik7XG4gICAgICAgICQoXCIjd2VpZ2h0XCIpLnZhbChcIjEwLjVcIik7XG4gICAgICAgICQoXCIjY29sb3JcIikudmFsKFwi2LHYstivINqv2YTYr1wiKTtcbiAgICAgICAgJChcIiN3aWR0aFwiKS52YWwoXCIzNFwiKTtcbiAgICB9O1xuICAgIC8vIGZha2VyUHJvZHVjdCgpO1xuICAgICQoJyNkaXNjb3VudHMgLmJ0bi1kYW5nZXInKS5jbGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRyeSB7XG5cbiAgICAgICAgICAgIGxldCBpZCA9ICQodGhpcykuZGF0YSgnaWQnKTtcbiAgICAgICAgICAgIGxldCB4ID0gSlNPTi5wYXJzZSgkKFwiI2Rpc2NvdW50LXJlbVwiKS52YWwoKSk7XG4gICAgICAgICAgICB4LnB1c2goaWQpO1xuICAgICAgICAgICAgJChcIiNkaXNjb3VudC1yZW1cIikudmFsKEpTT04uc3RyaW5naWZ5KHgpKTtcbiAgICAgICAgICAgICQodGhpcykuY2xvc2VzdCgndHInKS5zbGlkZVVwKDMwMCk7XG5cbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgICQoXCIjc2F2ZVByb2R1Y3RcIikuYmluZCgnc3VibWl0JywgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgIGlmIChpc1c4KSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI3NhdmVQcm9kdWN0JykpO1xuICAgICAgICB2YXIgaiA9IDE7XG4gICAgICAgIGZvciAoY29uc3QgZiBvZiB1cGxvYWRGb3JtRGF0YSkge1xuICAgICAgICAgICAgaWYgKHVwbG9hZEZvcm1EYXRhLmxlbmd0aCA9PSBqKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBqKys7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmIChmLnNpemUgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhlLm1lc3NhZ2UpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ2ltYWdlW10nLCBmKTtcbiAgICAgICAgfVxuXG4gICAgICAgICQoXCJbdHlwZT0nc3VibWl0J11cIikuYXR0cignZGlzYWJsZWQnKTsvLy5hZGRDbGFzcygndzgnKTtcbiAgICAgICAgJChcIlt0eXBlPSdzdWJtaXQnXVwiKS5hZGRDbGFzcygndzgnKTtcbiAgICAgICAgaXNXOCA9IHRydWU7XG5cblxuICAgICAgICBsZXQgdXJsID0gJCh0aGlzKS5hdHRyKCdhY3Rpb24nKTtcblxuICAgICAgICAvLyBmb3JtRGF0YS5zZXQoJ2Rlc2MnLCQoXCIjZGVzY3JpcHRpb25cIikudmFsKCkpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZygnZm9ybSBQcm9kdWN0IGRhdGEnLCBmb3JtRGF0YSk7XG4gICAgICAgIGF4aW9zKHtcbiAgICAgICAgICAgIG1ldGhvZDogJ3Bvc3QnLFxuICAgICAgICAgICAgdXJsOiB1cmwsXG4gICAgICAgICAgICBkYXRhOiBmb3JtRGF0YSxcbiAgICAgICAgICAgIGhlYWRlcnM6IHsnQ29udGVudC1UeXBlJzogJ211bHRpcGFydC9mb3JtLWRhdGEnfVxuICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXMpIHtcblxuICAgICAgICAgICAgJChcIlt0eXBlPSdzdWJtaXQnXVwiKS5yZW1vdmVBdHRyKCdkaXNhYmxlZCcpLnJlbW92ZUNsYXNzKCd3OCcpO1xuICAgICAgICAgICAgaXNXOCA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKHJlcy5kYXRhLk9LKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlcy5kYXRhLnVybCAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSByZXMuZGF0YS51cmw7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYWxlcnRpZnkuc3VjY2VzcyhyZXMuZGF0YS5tc2cpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoJChcIiNwcmljZS1hbW91bnRcIikudmFsKCkudHJpbSgpICE9PSAnJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KS5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhlcnJvci5yZXNwb25zZS5kYXRhLmVycm9ycyk7XG4gICAgICAgICAgICAkKFwiLmlzLWludmFsaWRcIikucmVtb3ZlQ2xhc3MoJ2lzLWludmFsaWQnKTtcbiAgICAgICAgICAgICQoXCJbdHlwZT0nc3VibWl0J11cIikucmVtb3ZlQXR0cignZGlzYWJsZWQnKS5yZW1vdmVDbGFzcygndzgnKTtcbiAgICAgICAgICAgIGlzVzggPSBmYWxzZTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgaW4gZXJyb3IucmVzcG9uc2UuZGF0YS5lcnJvcnMpIHtcbiAgICAgICAgICAgICAgICAkKFwiI1wiICsgaSkuYWRkQ2xhc3MoJ2lzLWludmFsaWQnKTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGVyciBvZiBlcnJvci5yZXNwb25zZS5kYXRhLmVycm9yc1tpXSkge1xuICAgICAgICAgICAgICAgICAgICBhbGVydGlmeS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxufSk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQUlBLElBQUksR0FBRyxLQUFYLEMsQ0FDQTs7QUFFQUMsQ0FBQyxDQUFDLFlBQVk7RUFDVixJQUFJQSxDQUFDLENBQUMsMkJBQUQsQ0FBRCxDQUErQkMsTUFBbkMsRUFBMkM7SUFDdkNDLFFBQVEsQ0FBQ0MsT0FBVCxDQUFpQixhQUFqQixFQUFnQztNQUM1QkMsb0JBQW9CLEVBQUVDLE9BRE07TUFFNUJDLHVCQUF1QixFQUFFLE1BRkc7TUFHNUJDLHFCQUFxQixFQUFFO0lBSEssQ0FBaEM7SUFLQUwsUUFBUSxDQUFDTSxTQUFULENBQW1CQyxXQUFuQixDQUErQkMsRUFBL0IsQ0FBa0MsUUFBbEMsRUFBMkMsWUFBWTtNQUNuRFYsQ0FBQyxDQUFDLGNBQUQsQ0FBRCxDQUFrQlcsR0FBbEIsQ0FBc0JULFFBQVEsQ0FBQ00sU0FBVCxDQUFtQkMsV0FBbkIsQ0FBK0JHLE9BQS9CLEVBQXRCO0lBQ0gsQ0FGRDtFQUdIOztFQUVEQyxNQUFNLENBQUNDLFlBQVAsR0FBc0IsWUFBWTtJQUM5QmQsQ0FBQyxDQUFDLE9BQUQsQ0FBRCxDQUFXVyxHQUFYLENBQWUsdUJBQWY7SUFDQVgsQ0FBQyxDQUFDLFFBQUQsQ0FBRCxDQUFZVyxHQUFaLENBQWdCLFFBQWhCO0lBQ0FYLENB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\n//# sourceURL=webpack-internal:///./resources/js/product.js\n");
/***/ }),
/***/ "./resources/js/propz.js":
/*!*******************************!*\
!*** ./resources/js/propz.js ***!
\*******************************/
/***/ (() => {
eval("function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it[\"return\"] != null) it[\"return\"](); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\njQuery(function ($) {\n jQuery(document).on('change', '#categoryId', function () {\n var url = $(this).data('url') + $(this).val(); // let val = ;\n\n $.get(url, function (e) {\n console.log(app.jdata);\n app.jdata = e[1];\n console.log(app.jdata);\n });\n });\n jQuery(\"#xtype\").bind('change', function () {\n var t = $(this).val();\n var op = [];\n\n try {\n op = JSON.parse($(\"#options\").val());\n } catch (_unused) {\n console.log('no');\n }\n\n var txt = '';\n\n if (t == 'select' || t == 'multi' || t == 'singlemulti' || t == 'color') {\n var _iterator = _createForOfIteratorHelper(op),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var o = _step.value;\n var ttyupe = 'text';\n\n if (t == 'color') {\n ttyupe = 'color';\n }\n\n txt += \"<div>\\n <div class=\\\"row\\\">\\n <div class=\\\"col-md-5 mt2 mb-1\\\">\\n <input type=\\\"text\\\" class=\\\"form-control\\\" name=\\\"options[title][]\\\" placeholder=\\\"title\\\" value=\\\"\".concat(o.title, \"\\\">\\n </div>\\n <div class=\\\"col-md-6 mt2 mb-1\\\">\\n <input type=\\\"\").concat(ttyupe, \"\\\" class=\\\"form-control\\\" name=\\\"options[value][]\\\" placeholder=\\\"value\\\" value=\\\"\").concat(o.value, \"\\\">\\n </div>\\n <div class=\\\"col-md-1\\\">\\n <div class=\\\"btn btn-danger rem-op\\\">\\n <i class=\\\"fa fa-times\\\"></i>\\n </div>\\n </div>\\n </div>\\n </div>\");\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n\n $(\"#xoptions .content\").html(txt).parent().show();\n $(\".rem-op\").click(function () {\n $(this).closest('.row').remove();\n });\n } else {\n $(\"#xoptions\").hide();\n }\n });\n $(\"#add-options\").bind('click', function () {\n var t = $(\"#xtype\").val();\n var ttyupe = 'text';\n\n if (t == 'color') {\n ttyupe = 'color';\n }\n\n txt = \"<div>\\n <div class=\\\"row\\\">\\n <div class=\\\"col-md-5 mt2 mb-1\\\">\\n <input type=\\\"text\\\" class=\\\"form-control\\\" name=\\\"options[title][]\\\" placeholder=\\\"title\\\" >\\n </div>\\n <div class=\\\"col-md-6 mt2 mb-1\\\">\\n <input type=\\\"\".concat(ttyupe, \"\\\" class=\\\"form-control\\\" name=\\\"options[value][]\\\" placeholder=\\\"value\\\" >\\n </div>\\n <div class=\\\"col-md-1\\\">\\n <div class=\\\"btn btn-danger rem-op\\\">\\n <i class=\\\"fa fa-times\\\"></i>\\n </div>\\n </div>\\n </div>\\n </div>\");\n $(\"#xoptions .content\").append(txt);\n $(\".rem-op\").click(function () {\n $(this).closest('.row').remove();\n });\n });\n jQuery(\"#xtype\").change();\n setTimeout(function () {\n jQuery(\"#xtype\").change();\n }, 1000);\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJqUXVlcnkiLCIkIiwiZG9jdW1lbnQiLCJvbiIsInVybCIsImRhdGEiLCJ2YWwiLCJnZXQiLCJlIiwiY29uc29sZSIsImxvZyIsImFwcCIsImpkYXRhIiwiYmluZCIsInQiLCJvcCIsIkpTT04iLCJwYXJzZSIsInR4dCIsIm8iLCJ0dHl1cGUiLCJ0aXRsZSIsInZhbHVlIiwiaHRtbCIsInBhcmVudCIsInNob3ciLCJjbGljayIsImNsb3Nlc3QiLCJyZW1vdmUiLCJoaWRlIiwiYXBwZW5kIiwiY2hhbmdlIiwic2V0VGltZW91dCJdLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvcHJvcHouanM/OTEwYiJdLCJzb3VyY2VzQ29udGVudCI6WyJqUXVlcnkoZnVuY3Rpb24gKCQpIHtcblxuICAgIGpRdWVyeShkb2N1bWVudCkub24oJ2NoYW5nZScsICcjY2F0ZWdvcnlJZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbGV0IHVybCA9ICQodGhpcykuZGF0YSgndXJsJykrJCh0aGlzKS52YWwoKTtcbiAgICAgICAgLy8gbGV0IHZhbCA9IDtcbiAgICAgICAgJC5nZXQodXJsLGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhhcHAuamRhdGEgKTtcbiAgICAgICAgICAgIGFwcC5qZGF0YSA9IGVbMV07XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhhcHAuamRhdGEgKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBqUXVlcnkoXCIjeHR5cGVcIikuYmluZCgnY2hhbmdlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBsZXQgdCA9ICQodGhpcykudmFsKCk7XG4gICAgICAgIGxldCBvcCA9IFtdO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgb3AgPSBKU09OLnBhcnNlKCQoXCIjb3B0aW9uc1wiKS52YWwoKSk7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ25vJyk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHR4dCA9ICcnO1xuICAgICAgICBpZiAodCA9PSAnc2VsZWN0JyB8fCB0ID09ICdtdWx0aScgfHwgdCA9PSAnc2luZ2xlbXVsdGknIHx8IHQgPT0gJ2NvbG9yJykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBvIG9mIG9wKSB7XG4gICAgICAgICAgICAgICAgbGV0IHR0eXVwZSA9ICd0ZXh0JztcbiAgICAgICAgICAgICAgICBpZiAodCA9PSAnY29sb3InKSB7XG4gICAgICAgICAgICAgICAgICAgIHR0eXVwZSA9ICdjb2xvcic7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHR4dCArPSBgPGRpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNSBtdDIgbWItMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBuYW1lPVwib3B0aW9uc1t0aXRsZV1bXVwiIHBsYWNlaG9sZGVyPVwidGl0bGVcIiB2YWx1ZT1cIiR7by50aXRsZX1cIj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBtdDIgbWItMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCIke3R0eXVwZX1cIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIG5hbWU9XCJvcHRpb25zW3ZhbHVlXVtdXCIgcGxhY2Vob2xkZXI9XCJ2YWx1ZVwiIHZhbHVlPVwiJHtvLnZhbHVlfVwiPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuIGJ0bi1kYW5nZXIgcmVtLW9wXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS10aW1lc1wiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PmA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAkKFwiI3hvcHRpb25zIC5jb250ZW50XCIpLmh0bWwodHh0KS5wYXJlbnQoKS5zaG93KCk7XG5cbiAgICAgICAgICAgICQoXCIucmVtLW9wXCIpLmNsaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAkKHRoaXMpLmNsb3Nlc3QoJy5yb3cnKS5yZW1vdmUoKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAkKFwiI3hvcHRpb25zXCIpLmhpZGUoKTtcbiAgICAgICAgfVxuXG4gICAgfSk7XG5cbiAgICAkKFwiI2FkZC1vcHRpb25zXCIpLmJpbmQoJ2NsaWNrJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBsZXQgdCA9ICQoXCIjeHR5cGVcIikudmFsKCk7XG4gICAgICAgIGxldCB0dHl1cGUgPSAndGV4dCc7XG4gICAgICAgIGlmICh0ID09ICdjb2xvcicpIHtcbiAgICAgICAgICAgIHR0eXVwZSA9ICdjb2xvcic7XG4gICAgICAgIH1cbiAgICAgICAgdHh0ID0gYDxkaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTUgbXQyIG1iLTFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgbmFtZT1cIm9wdGlvbnNbdGl0bGVdW11cIiBwbGFjZWhvbGRlcj1cInRpdGxlXCIgPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IG10MiBtYi0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIiR7dHR5dXBlfVwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgbmFtZT1cIm9wdGlvbnNbdmFsdWVdW11cIiBwbGFjZWhvbGRlcj1cInZhbHVlXCIgPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuIGJ0bi1kYW5nZXIgcmVtLW9wXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS10aW1lc1wiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PmA7XG5cbiAgICAgICAgJChcIiN4b3B0aW9ucyAuY29udGVudFwiKS5hcHBlbmQodHh0KTtcbiAgICAgICAgJChcIi5yZW0tb3BcIikuY2xpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgJCh0aGlzKS5jbG9zZXN0KCcucm93JykucmVtb3ZlKCk7XG4gICAgICAgIH0pXG4gICAgfSk7XG5cbiAgICBqUXVlcnkoXCIjeHR5cGVcIikuY2hhbmdlKCk7XG5cbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgalF1ZXJ5KFwiI3h0eXBlXCIpLmNoYW5nZSgpO1xuICAgIH0sMTAwMClcblxuXG5cbn0pO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQUEsTUFBTSxDQUFDLFVBQVVDLENBQVYsRUFBYTtFQUVoQkQsTUFBTSxDQUFDRSxRQUFELENBQU4sQ0FBaUJDLEVBQWpCLENBQW9CLFFBQXBCLEVBQThCLGFBQTlCLEVBQTZD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\n//# sourceURL=webpack-internal:///./resources/js/propz.js\n");
/***/ }),
/***/ "./resources/js/wizard.js":
/*!********************************!*\
!*** ./resources/js/wizard.js ***!
\********************************/
/***/ (() => {
eval("jQuery(function () {\n if ($('.wizard-form').length == 0 || isInit) {\n return false;\n }\n\n $($('.wizard .step')[0]).addClass('active');\n $($('.wizard .wizard-form')[0]).slideDown(1000).addClass('active');\n var forms = $('.wizard .wizard-form');\n var txt = '';\n var nextStr = window.translate.next;\n var prevStr = window.translate.prev;\n var nextBtnClass = 'wizard-next btn btn-primary';\n\n for (var i in forms) {\n if (isNaN(parseInt(i))) {\n break;\n }\n\n var j = parseInt(i) + 1;\n $($('.wizard .wizard-form')[i]).data('formStep', j).addClass('form-step' + j);\n $($('.wizard .step')[i]).data('formStep', j).addClass('form-step' + j);\n\n if (j == forms.length) {\n nextStr = \"<span>\" + window.translate.finishAndSave + \"</span><i class=\\\"fas fa-spinner fa-spin\\\"></i>\";\n nextBtnClass = 'wizard-finish btn btn-success';\n tag = 'button';\n } else {\n tag = 'div';\n }\n\n txt = \"<div class=\\\"ml-2 mt-4\\\">\\n <div class=\\\"wizard-prev btn btn-secondary\\\" data-step=\\\"\".concat(j, \"\\\">\").concat(prevStr, \"</div>\\n <\").concat(tag, \" class=\\\"\").concat(nextBtnClass, \"\\\" data-step=\\\"\").concat(j, \"\\\" \").concat(tag === 'button' ? 'type=\"submit\"' : '', \">\").concat(nextStr, \"</\").concat(tag, \">\\n </div>\");\n $($('.wizard .wizard-form')[i]).append(txt);\n }\n\n $(document).on('click', '.wizard .step', function () {\n var step = $(this).data('formStep');\n $('.wizard .wizard-form.active').slideUp(300).removeClass('active');\n var percent = 100 * step / $('.wizard .step').length;\n\n if (percent != 100) {\n percent -= 10 + (6 - $('.wizard .step').length) + ($('.wizard .step').length - step) + ($('.wizard .step').length < 4 ? 1 : -1);\n }\n\n $(this).closest('.wizard').find('.prog').css('width', percent + '%');\n setTimeout(function () {\n $(\".wizard .wizard-form.form-step\".concat(step)).slideDown(300, function () {\n $(window).resize();\n }).addClass('active');\n $(\".wizard .step\").removeClass('active');\n\n for (var _i = 1; _i <= step; _i++) {\n $(\".wizard .step.form-step\".concat(_i)).addClass('active');\n }\n\n $(window).resize();\n }, 200);\n });\n $(document).on('click', '.wizard-prev,.wizard-next', function () {\n var step = parseInt($(this).data('step'));\n\n if ($(this).hasClass('wizard-prev')) {\n step--;\n } else {\n step++;\n }\n\n $(\".form-step\" + step).click();\n });\n isInit = true;\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJqUXVlcnkiLCIkIiwibGVuZ3RoIiwiaXNJbml0IiwiYWRkQ2xhc3MiLCJzbGlkZURvd24iLCJmb3JtcyIsInR4dCIsIm5leHRTdHIiLCJ3aW5kb3ciLCJ0cmFuc2xhdGUiLCJuZXh0IiwicHJldlN0ciIsInByZXYiLCJuZXh0QnRuQ2xhc3MiLCJpIiwiaXNOYU4iLCJwYXJzZUludCIsImoiLCJkYXRhIiwiZmluaXNoQW5kU2F2ZSIsInRhZyIsImFwcGVuZCIsImRvY3VtZW50Iiwib24iLCJzdGVwIiwic2xpZGVVcCIsInJlbW92ZUNsYXNzIiwicGVyY2VudCIsImNsb3Nlc3QiLCJmaW5kIiwiY3NzIiwic2V0VGltZW91dCIsInJlc2l6ZSIsImhhc0NsYXNzIiwiY2xpY2siXSwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL3dpemFyZC5qcz8yMWFmIl0sInNvdXJjZXNDb250ZW50IjpbImpRdWVyeShmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCQoJy53aXphcmQtZm9ybScpLmxlbmd0aCA9PSAwIHx8IGlzSW5pdCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgICQoJCgnLndpemFyZCAuc3RlcCcpWzBdKS5hZGRDbGFzcygnYWN0aXZlJyk7XG4gICAgJCgkKCcud2l6YXJkIC53aXphcmQtZm9ybScpWzBdKS5zbGlkZURvd24oMTAwMCkuYWRkQ2xhc3MoJ2FjdGl2ZScpO1xuICAgIHZhciBmb3JtcyA9ICQoJy53aXphcmQgLndpemFyZC1mb3JtJyk7XG4gICAgdmFyIHR4dCA9ICcnO1xuICAgIHZhciBuZXh0U3RyID0gd2luZG93LnRyYW5zbGF0ZS5uZXh0O1xuICAgIHZhciBwcmV2U3RyID0gd2luZG93LnRyYW5zbGF0ZS5wcmV2O1xuICAgIHZhciBuZXh0QnRuQ2xhc3MgPSAnd2l6YXJkLW5leHQgYnRuIGJ0bi1wcmltYXJ5JztcbiAgICBmb3IgKGNvbnN0IGkgaW4gZm9ybXMpIHtcbiAgICAgICAgaWYgKGlzTmFOKHBhcnNlSW50KGkpKSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGogPSAocGFyc2VJbnQoaSkgKyAxKTtcbiAgICAgICAgJCgkKCcud2l6YXJkIC53aXphcmQtZm9ybScpW2ldKS5kYXRhKCdmb3JtU3RlcCcsIGopLmFkZENsYXNzKCdmb3JtLXN0ZXAnICsgaik7XG4gICAgICAgICQoJCgnLndpemFyZCAuc3RlcCcpW2ldKS5kYXRhKCdmb3JtU3RlcCcsIGopLmFkZENsYXNzKCdmb3JtLXN0ZXAnICsgKGopKTtcblxuICAgICAgICBpZiAoaiA9PSBmb3Jtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIG5leHRTdHIgPSBgPHNwYW4+YCArIHdpbmRvdy50cmFuc2xhdGUuZmluaXNoQW5kU2F2ZSArIGA8L3NwYW4+PGkgY2xhc3M9XCJmYXMgZmEtc3Bpbm5lciBmYS1zcGluXCI+PC9pPmA7XG4gICAgICAgICAgICBuZXh0QnRuQ2xhc3MgPSAnd2l6YXJkLWZpbmlzaCBidG4gYnRuLXN1Y2Nlc3MnO1xuICAgICAgICAgICAgdGFnID0gJ2J1dHRvbic7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0YWcgPSAnZGl2J1xuICAgICAgICB9XG5cbiAgICAgICAgdHh0ID0gYDxkaXYgY2xhc3M9XCJtbC0yIG10LTRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3aXphcmQtcHJldiBidG4gYnRuLXNlY29uZGFyeVwiIGRhdGEtc3RlcD1cIiR7an1cIj4ke3ByZXZTdHJ9PC9kaXY+XG4gICAgICAgICAgICA8JHt0YWd9IGNsYXNzPVwiJHtuZXh0QnRuQ2xhc3N9XCIgZGF0YS1zdGVwPVwiJHtqfVwiICR7dGFnID09PSAnYnV0dG9uJyA/ICd0eXBlPVwic3VibWl0XCInIDogJyd9PiR7bmV4dFN0cn08LyR7dGFnfT5cbiAgICAgICAgPC9kaXY+YDtcblxuICAgICAgICAkKCQoJy53aXphcmQgLndpemFyZC1mb3JtJylbaV0pLmFwcGVuZCh0eHQpO1xuICAgIH1cblxuICAgICQoZG9jdW1lbnQpLm9uKCdjbGljaycsICcud2l6YXJkIC5zdGVwJywgZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgc3RlcCA9ICQodGhpcykuZGF0YSgnZm9ybVN0ZXAnKTtcbiAgICAgICAgJCgnLndpemFyZCAud2l6YXJkLWZvcm0uYWN0aXZlJykuc2xpZGVVcCgzMDApLnJlbW92ZUNsYXNzKCdhY3RpdmUnKTtcbiAgICAgICAgdmFyIHBlcmNlbnQgPSAoMTAwICogc3RlcCAvICQoJy53aXphcmQgLnN0ZXAnKS5sZW5ndGgpO1xuICAgICAgICBpZiAocGVyY2VudCAhPSAxMDApIHtcbiAgICAgICAgICAgIHBlcmNlbnQgLT0gMTAgKyAoNiAtICQoJy53aXphcmQgLnN0ZXAnKS5sZW5ndGgpICsgKCQoJy53aXphcmQgLnN0ZXAnKS5sZW5ndGggLSBzdGVwKSArICgkKCcud2l6YXJkIC5zdGVwJykubGVuZ3RoIDwgNCA/IDEgOiAtMSk7XG4gICAgICAgIH1cbiAgICAgICAgJCh0aGlzKS5jbG9zZXN0KCcud2l6YXJkJykuZmluZCgnLnByb2cnKS5jc3MoJ3dpZHRoJywgcGVyY2VudCArICclJyk7XG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgJChgLndpemFyZCAud2l6YXJkLWZvcm0uZm9ybS1zdGVwJHtzdGVwfWApLnNsaWRlRG93bigzMDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAkKHdpbmRvdykucmVzaXplKCk7XG4gICAgICAgICAgICB9KS5hZGRDbGFzcygnYWN0aXZlJyk7XG5cbiAgICAgICAgICAgICQoYC53aXphcmQgLnN0ZXBgKS5yZW1vdmVDbGFzcygnYWN0aXZlJyk7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8PSBzdGVwOyBpKyspIHtcbiAgICAgICAgICAgICAgICAkKGAud2l6YXJkIC5zdGVwLmZvcm0tc3RlcCR7aX1gKS5hZGRDbGFzcygnYWN0aXZlJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAkKHdpbmRvdykucmVzaXplKCk7XG4gICAgICAgIH0sIDIwMCk7XG4gICAgfSk7XG5cbiAgICAkKGRvY3VtZW50KS5vbignY2xpY2snLCAnLndpemFyZC1wcmV2LC53aXphcmQtbmV4dCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHN0ZXAgPSBwYXJzZUludCgkKHRoaXMpLmRhdGEoJ3N0ZXAnKSk7XG4gICAgICAgIGlmICgkKHRoaXMpLmhhc0NsYXNzKCd3aXphcmQtcHJldicpKSB7XG4gICAgICAgICAgICBzdGVwLS07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdGVwKys7XG4gICAgICAgIH1cbiAgICAgICAgJChcIi5mb3JtLXN0ZXBcIiArIHN0ZXApLmNsaWNrKCk7XG5cbiAgICB9KTtcblxuICAgIGlzSW5pdCA9IHRydWU7XG5cbn0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQUEsTUFBTSxDQUFDLFlBQVk7RUFDZixJQUFJQyxDQUFDLENBQUMsY0FBRCxDQUFELENBQWtCQyxNQUFsQixJQUE0QixDQUE1QixJQUFpQ0MsTUFBckMsRUFBNkM7SUFDekMsT0FBTyxLQUFQO0VBQ0g7O0VBQ0RGLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDLGVBQUQsQ0FBRCxDQUFtQixDQUFuQixDQUFELENBQUQsQ0FBeUJHLFFBQXpCLENBQWtDLFFBQWxDO0VBQ0FILENBQUMsQ0FBQ0EsQ0FBQyxDQUFDLHNCQUFELENBQUQsQ0FBMEIsQ0FBMUIsQ0FBRCxDQUFELENBQWdDSSxTQUFoQyxDQUEwQyxJQUExQyxFQUFnREQsUUFBaEQsQ0FBeUQsUUFBekQ7RUFDQSxJQUFJRSxLQUFLLEdBQUdMLENBQUMsQ0FBQyxzQkFBRCxDQUFiO0VBQ0EsSUFBSU0sR0FBRyxHQUFHLEVBQVY7RUFDQSxJQUFJQyxPQUFPLEdBQUdDLE1BQU0sQ0FBQ0MsU0FBUCxDQUFpQkMsSUFBL0I7RUFDQSxJQUFJQyxPQUFPLEdBQUdILE1BQU0sQ0FBQ0MsU0FBUCxDQUFpQkcsSUFBL0I7RUFDQSxJQUFJQyxZQUFZLEdB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LEVBQUMsRUFBNUIsRUFBZ0M7UUFDNUJkLENBQUMsa0NBQTJCYyxFQUEzQixFQUFELENBQWlDWCxRQUFqQyxDQUEwQyxRQUExQztNQUNIOztNQUNESCxDQUFDLENBQUNRLE1BQUQsQ0FBRCxDQUFVd0IsTUFBVjtJQUNILENBVlMsRUFVUCxHQVZPLENBQVY7RUFXSCxDQW5CRDtFQXFCQWhDLENBQUMsQ0FBQ3NCLFFBQUQsQ0FBRCxDQUFZQyxFQUFaLENBQWUsT0FBZixFQUF3QiwyQkFBeEIsRUFBcUQsWUFBWTtJQUM3RCxJQUFJQyxJQUFJLEdBQUdSLFFBQVEsQ0FBQ2hCLENBQUMsQ0FBQyxJQUFELENBQUQsQ0FBUWtCLElBQVIsQ0FBYSxNQUFiLENBQUQsQ0FBbkI7O0lBQ0EsSUFBSWxCLENBQUMsQ0FBQyxJQUFELENBQUQsQ0FBUWlDLFFBQVIsQ0FBaUIsYUFBakIsQ0FBSixFQUFxQztNQUNqQ1QsSUFBSTtJQUNQLENBRkQsTUFFTztNQUNIQSxJQUFJO0lBQ1A7O0lBQ0R4QixDQUFDLENBQUMsZUFBZXdCLElBQWhCLENBQUQsQ0FBdUJVLEtBQXZCO0VBRUgsQ0FURDtFQVdBaEMsTUFBTSxHQUFHLElBQVQ7QUFFSCxDQXJFSyxDQUFOIiwiZmlsZSI6Ii4vcmVzb3VyY2VzL2pzL3dpemFyZC5qcy5qcyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./resources/js/wizard.js\n");
/***/ }),
/***/ "./node_modules/css-loader/dist/cjs.js??clonedRuleSet-10[0].rules[0].use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-10[0].rules[0].use[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/MetaElement.vue?vue&type=style&index=0&id=5a696ec8&scoped=true&lang=css&":
/*!****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-10[0].rules[0].use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-10[0].rules[0].use[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/MetaElement.vue?vue&type=style&index=0&id=5a696ec8&scoped=true&lang=css& ***!
\****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
/***/ ((module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js */ \"./node_modules/css-loader/dist/runtime/cssWithMappingToString.js\");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/api.js */ \"./node_modules/css-loader/dist/runtime/api.js\");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"\\n.switch[data-v-5a696ec8] {\\n margin-top: 10px;\\n position: relative;\\n display: inline-block;\\n width: 35px;\\n height: 20px;\\n}\\n.switch input[data-v-5a696ec8] {\\n display: none;\\n}\\n.slider[data-v-5a696ec8] {\\n position: absolute;\\n cursor: pointer;\\n top: 0;\\n left: 0;\\n right: 0;\\n bottom: 0;\\n background-color: #ccc;\\n transition: 0.4s;\\n}\\n.slider[data-v-5a696ec8]:before {\\n position: absolute;\\n content: \\\"\\\";\\n height: 16px;\\n width: 16px;\\n left: 2px;\\n bottom: 2px;\\n background-color: white;\\n transition: 0.4s;\\n}\\ninput:checked + .slider[data-v-5a696ec8] {\\n background-color: #1d68a7;\\n}\\ninput:focus + .slider[data-v-5a696ec8] {\\n box-shadow: 0 0 1px #1d68a7;\\n}\\ninput:checked + .slider[data-v-5a696ec8]:before {\\n transform: translateX(16px);\\n}\\n.slider.round[data-v-5a696ec8] {\\n border-radius: 34px;\\n}\\n.slider.round[data-v-5a696ec8]:before {\\n border-radius: 50%;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./resources/js/components/MetaElement.vue\"],\"names\":[],\"mappings\":\";AAyJA;IACA,gBAAA;IACA,kBAAA;IACA,qBAAA;IACA,WAAA;IACA,YAAA;AACA;AAEA;IACA,aAAA;AACA;AAEA;IACA,kBAAA;IACA,eAAA;IACA,MAAA;IACA,OAAA;IACA,QAAA;IACA,SAAA;IACA,sBAAA;IAEA,gBAAA;AACA;AAEA;IACA,kBAAA;IACA,WAAA;IACA,YAAA;IACA,WAAA;IACA,SAAA;IACA,WAAA;IACA,uBAAA;IAEA,gBAAA;AACA;AAEA;IACA,yBAAA;AACA;AAEA;IACA,2BAAA;AACA;AAEA;IAGA,2BAAA;AACA;AAEA;IACA,mBAAA;AACA;AAEA;IACA,kBAAA;AACA\",\"sourcesContent\":[\"<template>\\n <div class=\\\"row\\\">\\n <div v-for=\\\"d in elms\\\" :class=\\\"d.width+' mb-3'\\\">\\n <div v-if=\\\"d.type === 'text'\\\">\\n <label :for=\\\"d.name\\\">\\n {{ d.label }}\\n </label>\\n <input v-model=\\\"defaults[d.name]\\\" type=\\\"text\\\" :id=\\\"d.name\\\" :name=\\\"'meta['+d.name+']'\\\"\\n class=\\\"form-control\\\">\\n </div>\\n <div v-else-if=\\\"d.type === 'number'\\\">\\n <label :for=\\\"d.name\\\">\\n {{ d.label }}\\n <!-- \\\"{{defaults[d.name]}}\\\"-->\\n </label>\\n <input type=\\\"number\\\" v-model=\\\"defaults[d.name]\\\" :placeholder=\\\"d.label\\\" :id=\\\"d.name\\\"\\n :name=\\\"'meta['+d.name+']'\\\" class=\\\"form-control\\\">\\n </div>\\n <div v-else-if=\\\"d.type === 'color'\\\" :id=\\\"d.name\\\" :name=\\\"'meta['+d.name+']'\\\">\\n <label :for=\\\"d.name\\\">\\n {{ d.label }}\\n </label>\\n <select v-model=\\\"defaults[d.name]\\\" :name=\\\"'meta['+d.name+']'\\\" :id=\\\"d.name\\\" class=\\\"form-control\\\">\\n <option value=\\\"\\\"> {{ d.label }}</option>\\n <option :style=\\\"'background-color:' + o.value \\\" :value=\\\"o.value\\\" v-for=\\\"o in d.options\\\">\\n {{ o.title }}\\n </option>\\n </select>\\n </div>\\n <div v-else-if=\\\"d.type === 'checkbox'\\\">\\n <label :for=\\\"d.name\\\">\\n {{ d.label }}\\n </label>\\n <br>\\n <div class=\\\"panel panel-default \\\">\\n <div class=\\\"panel-body\\\">\\n <!--Only code you need is this label-->\\n <label class=\\\"switch\\\">\\n <input :name=\\\"'meta['+d.name+']'\\\" v-model=\\\"defaults[d.name]\\\" type=\\\"checkbox\\\" >\\n <div class=\\\"slider round\\\"></div>\\n </label>\\n <p>\\n\\n </p>\\n </div>\\n </div>\\n\\n </div>\\n <div v-else-if=\\\"d.type === 'select'\\\">\\n <label :for=\\\"d.name\\\">\\n {{ d.label }}\\n </label>\\n <select v-model=\\\"defaults[d.name]\\\" :name=\\\"'meta['+d.name+']'\\\" :id=\\\"d.name\\\" class=\\\"form-control\\\">\\n <option value=\\\"\\\"> {{ d.label }}</option>\\n <option :value=\\\"o.value\\\" v-for=\\\"o in d.options\\\"> {{ o.title }}</option>\\n </select>\\n </div>\\n <div v-else-if=\\\"d.type === 'multi'\\\">\\n <label :for=\\\"d.name\\\">\\n {{ d.label }}\\n </label>\\n <multiselect @select=\\\"upd()\\\" :multiple=\\\"true\\\" :taggable=\\\"true\\\" label=\\\"title\\\" v-model=\\\"defaults[d.name]\\\"\\n :placeholder=\\\"d.label\\\" :options=\\\"d.options\\\"></multiselect>\\n <input :id=\\\"d.label\\\" type=\\\"hidden\\\" :name=\\\"'meta['+d.name+']'\\\" :value=\\\"makeVal(defaults[d.name])\\\">\\n </div>\\n <div v-else-if=\\\"d.type === 'singlemulti'\\\">\\n <label :for=\\\"d.name\\\">\\n {{ d.label }}\\n </label>\\n <div v-if=\\\"searchable\\\">\\n <multiselect @select=\\\"upd()\\\" v-model=\\\"defaults[d.name]\\\" :multiple=\\\"true\\\" :taggable=\\\"true\\\" label=\\\"title\\\"\\n :placeholder=\\\"d.label\\\" :options=\\\"d.options\\\"></multiselect>\\n <input type=\\\"hidden\\\" :name=\\\"'meta['+d.name+']'\\\" :value=\\\"defaults[d.name]\\\">\\n </div>\\n <select v-else v-model=\\\"defaults[d.name]\\\" :name=\\\"'meta['+d.name+']'\\\" :id=\\\"d.name\\\" class=\\\"form-control\\\">\\n <option value=\\\"\\\"> {{ d.label }}</option>\\n <option :value=\\\"o.value\\\" v-for=\\\"o in d.options\\\"> {{ o.title }}</option>\\n </select>\\n </div>\\n </div>\\n </div>\\n</template>\\n\\n<script>\\nimport multiselect from 'vue-multiselect';\\n\\nexport default {\\n name: \\\"MetaElement\\\",\\n components: {multiselect},\\n data: function () {\\n return {\\n b: true,\\n content: this.value,\\n value: '',\\n t: window.translate,\\n classes: 'form-control',\\n elms: [],\\n defaults: {},\\n }\\n },\\n props: ['jdata', 'searchable', 'defz'],\\n mounted() {\\n this.updateJdata(this.jdata, this.defz);\\n },\\n methods: {\\n upd:function () {\\n this.$forceUpdate();\\n },\\n makeVal:function (ob) {\\n return JSON.stringify(ob);\\n },\\n updateJdata: function (e, def = []) {\\n try {\\n\\n // make defaults\\n for (const d of def) {\\n this.defaults[d.key] = d.value;\\n }\\n\\n if (typeof e == 'string') {\\n this.elms = JSON.parse(e);\\n } else {\\n this.elms = e;\\n }\\n\\n\\n for (const e of this.elms) {\\n try {\\n e.options = JSON.parse(e.options);\\n // fix for multi select object\\n if (e.type === 'multi' || (e.type ==='' && this.searchable)){\\n this.defaults[e.name] = JSON.parse(this.defaults[e.name]);\\n }\\n // console.log(JSON.parse(e.options));\\n } catch {\\n }\\n }\\n\\n\\n } catch (e) {\\n this.elms = [];\\n console.log('no meta ele', e.message);\\n }\\n\\n },\\n handleInput(e) {\\n this.$emit('input', this.content);\\n },\\n }\\n}\\n</script>\\n\\n<style scoped>\\n.switch {\\n margin-top: 10px;\\n position: relative;\\n display: inline-block;\\n width: 35px;\\n height: 20px;\\n}\\n\\n.switch input {\\n display: none;\\n}\\n\\n.slider {\\n position: absolute;\\n cursor: pointer;\\n top: 0;\\n left: 0;\\n right: 0;\\n bottom: 0;\\n background-color: #ccc;\\n -webkit-transition: 0.4s;\\n transition: 0.4s;\\n}\\n\\n.slider:before {\\n position: absolute;\\n content: \\\"\\\";\\n height: 16px;\\n width: 16px;\\n left: 2px;\\n bottom: 2px;\\n background-color: white;\\n -webkit-transition: 0.4s;\\n transition: 0.4s;\\n}\\n\\ninput:checked + .slider {\\n background-color: #1d68a7;\\n}\\n\\ninput:focus + .slider {\\n box-shadow: 0 0 1px #1d68a7;\\n}\\n\\ninput:checked + .slider:before {\\n -webkit-transform: translateX(16px);\\n -ms-transform: translateX(16px);\\n transform: translateX(16px);\\n}\\n\\n.slider.round {\\n border-radius: 34px;\\n}\\n\\n.slider.round:before {\\n border-radius: 50%;\\n}\\n</style>\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcz8/Y2xvbmVkUnVsZVNldC0xMFswXS5ydWxlc1swXS51c2VbMV0hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy9zdHlsZVBvc3RMb2FkZXIuanMhLi9ub2RlX21vZHVsZXMvcG9zdGNzcy1sb2FkZXIvZGlzdC9janMuanM/P2Nsb25lZFJ1bGVTZXQtMTBbMF0ucnVsZXNbMF0udXNlWzJdIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9NZXRhRWxlbWVudC52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZpZD01YTY5NmVjOCZzY29wZWQ9dHJ1ZSZsYW5nPWNzcyYuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQTtBQUM0SDtBQUM3QjtBQUMvRiw4QkFBOEIsbUZBQTJCLENBQUMsd0dBQXFDO0FBQy9GO0FBQ0Esc0VBQXNFLHVCQUF1Qix5QkFBeUIsNEJBQTRCLGtCQUFrQixtQkFBbUIsR0FBRyxrQ0FBa0Msb0JBQW9CLEdBQUcsNEJBQTRCLHlCQUF5QixzQkFBc0IsYUFBYSxjQUFjLGVBQWUsZ0JBQWdCLDZCQUE2Qix1QkFBdUIsR0FBRyxtQ0FBbUMseUJBQXlCLG9CQUFvQixtQkFBbUIsa0JBQWtCLGdCQUFnQixrQkFBa0IsOEJBQThCLHVCQUF1QixHQUFHLDRDQUE0QyxnQ0FBZ0MsR0FBRywwQ0FBMEMsa0NBQWtDLEdBQUcsbURBQW1ELGtDQUFrQyxHQUFHLGtDQUFrQywwQkFBMEIsR0FBRyx5Q0FBeUMseUJBQXlCLEdBQUcsU0FBUyxzR0FBc0csTUFBTSxXQUFXLFdBQVcsV0FBVyxVQUFVLFVBQVUsS0FBSyxLQUFLLFVBQVUsS0FBSyxLQUFLLFdBQVcsVUFBVSxVQUFVLFVBQVUsVUFBVSxVQUFVLFdBQVcsV0FBVyxLQUFLLEtBQUssV0FBVyxVQUFVLFVBQVUsVUFBVSxVQUFVLFVBQVUsV0FBVyxXQUFXLEtBQUssS0FBSyxXQUFXLEtBQUssS0FBSyxXQUFXLEtBQUssS0FBSyxXQUFXLEtBQUssS0FBSyxXQUFXLEtBQUssS0FBSyxXQUFXLDBPQUEwTyxVQUFVLG9VQUFvVSxVQUFVLGtEQUFrRCxrQkFBa0IsK1lBQStZLFVBQVUsaU1BQWlNLFVBQVUsMEpBQTBKLFVBQVUsdU1BQXVNLFVBQVUsNHRCQUE0dEIsVUFBVSxpTUFBaU0sVUFBVSx1RkFBdUYsVUFBVSw4S0FBOEssVUFBVSxxZ0JBQXFnQixVQUFVLHlsQkFBeWxCLFVBQVUsdUZBQXVGLFVBQVUseUpBQXlKLG9CQUFvQiwrQ0FBK0MsWUFBWSwwQkFBMEIsa0JBQWtCLHlNQUF5TSxZQUFZLE9BQU8sK0RBQStELGtEQUFrRCxPQUFPLGlCQUFpQiwyQkFBMkIsa0NBQWtDLFdBQVcsa0NBQWtDLHdDQUF3QyxXQUFXLGdEQUFnRCxtQkFBbUIsNEVBQTRFLHFEQUFxRCxtQkFBbUIsK0NBQStDLGdEQUFnRCxvQkFBb0IsTUFBTSxvQ0FBb0MsbUJBQW1CLGtEQUFrRCwyQkFBMkIsNERBQTRELCtJQUErSSx3RkFBd0YsMkJBQTJCLGdFQUFnRSx3QkFBd0IsT0FBTyx1QkFBdUIsbUJBQW1CLG9CQUFvQixXQUFXLGlDQUFpQyx3REFBd0QsZUFBZSxhQUFhLDJCQUEyQixnREFBZ0QsV0FBVyxRQUFRLEdBQUcsd0NBQXdDLHVCQUF1Qix5QkFBeUIsNEJBQTRCLGtCQUFrQixtQkFBbUIsR0FBRyxtQkFBbUIsb0JBQW9CLEdBQUcsYUFBYSx5QkFBeUIsc0JBQXNCLGFBQWEsY0FBYyxlQUFlLGdCQUFnQiw2QkFBNkIsK0JBQStCLHVCQUF1QixHQUFHLG9CQUFvQix5QkFBeUIsb0JBQW9CLG1CQUFtQixrQkFBa0IsZ0JBQWdCLGtCQUFrQiw4QkFBOEIsK0JBQStCLHVCQUF1QixHQUFHLDZCQUE2QixnQ0FBZ0MsR0FBRywyQkFBMkIsa0NBQWtDLEdBQUcsb0NBQW9DLDBDQUEwQyxzQ0FBc0Msa0NBQWtDLEdBQUcsbUJBQW1CLDBCQUEwQixHQUFHLDBCQUEwQix5QkFBeUIsR0FBRywrQkFBK0I7QUFDMTRRO0FBQ0EsaUVBQWUsdUJBQXVCLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9NZXRhRWxlbWVudC52dWU/YzZlZCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBJbXBvcnRzXG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2Nzc1dpdGhNYXBwaW5nVG9TdHJpbmcuanNcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18gZnJvbSBcIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIjtcbnZhciBfX19DU1NfTE9BREVSX0VYUE9SVF9fXyA9IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fKTtcbi8vIE1vZHVsZVxuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18ucHVzaChbbW9kdWxlLmlkLCBcIlxcbi5zd2l0Y2hbZGF0YS12LTVhNjk2ZWM4XSB7XFxuICAgIG1hcmdpbi10b3A6IDEwcHg7XFxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgICB3aWR0aDogMzVweDtcXG4gICAgaGVpZ2h0OiAyMHB4O1xcbn1cXG4uc3dpdGNoIGlucHV0W2RhdGEtdi01YTY5NmVjOF0ge1xcbiAgICBkaXNwbGF5OiBub25lO1xcbn1cXG4uc2xpZGVyW2RhdGEtdi01YTY5NmVjOF0ge1xcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICAgIGN1cnNvcjogcG9pbnRlcjtcXG4gICAgdG9wOiAwO1xcbiAgICBsZWZ0OiAwO1xcbiAgICByaWdodDogMDtcXG4gICAgYm90dG9tOiAwO1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjY2NjO1xcbiAgICB0cmFuc2l0aW9uOiAwLjRzO1xcbn1cXG4uc2xpZGVyW2RhdGEtdi01YTY5NmVjOF06YmVmb3JlIHtcXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgICBjb250ZW50OiBcXFwiXFxcIjtcXG4gICAgaGVpZ2h0OiAxNnB4O1xcbiAgICB3aWR0aDogMTZweDtcXG4gICAgbGVmdDogMnB4O1xcbiAgICBib3R0b206IDJweDtcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XFxuICAgIHRyYW5zaXRpb246IDAuNHM7XFxufVxcbmlucHV0OmNoZWNrZWQgKyAuc2xpZGVyW2RhdGEtdi01YTY5NmVjOF0ge1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMWQ2OGE3O1xcbn1cXG5pbnB1dDpmb2N1cyArIC5zbGlkZXJbZGF0YS12LTVhNjk2ZWM4XSB7XFxuICAgIGJveC1zaGFkb3c6IDAgMCAxcHggIzFkNjhhNztcXG59XFxuaW5wdXQ6Y2hlY2tlZCArIC5zbGlkZXJbZGF0YS12LTVhNjk2ZWM4XTpiZWZvcmUge1xcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMTZweCk7XFxufVxcbi5zbGlkZXIucm91bmRbZGF0YS12LTVhNjk2ZWM4XSB7XFxuICAgIGJvcmRlci1yYWRpdXM6IDM0cHg7XFxufVxcbi5zbGlkZXIucm91bmRbZGF0YS12LTVhNjk2ZWM4XTpiZWZvcmUge1xcbiAgICBib3JkZXItcmFkaXVzOiA1MCU7XFxufVxcblwiLCBcIlwiLHtcInZlcnNpb25cIjozLFwic291cmNlc1wiOltcIndlYnBhY2s6Ly8uL3Jlc291cmNlcy9qcy9jb21wb25lbnRzL01ldGFFbGVtZW50LnZ1ZVwiXSxcIm5hbWVzXCI6W10sXCJtYXBwaW5nc1wiOlwiO0FBeUpBO0lBQ0EsZ0JBQUE7SUFDQSxrQkFBQTtJQUNBLHFCQUFBO0lBQ0EsV0FBQTtJQUNBLFlBQUE7QUFDQTtBQUVBO0lBQ0EsYUFBQTtBQUNBO0FBRUE7SUFDQSxrQkFBQTtJQUNBLGVBQUE7SUFDQSxNQUFBO0lBQ0EsT0FBQTtJQUNBLFFBQUE7SUFDQSxTQUFBO0lBQ0Esc0JBQUE7SUFFQSxnQkFBQTtBQUNBO0FBRUE7SUFDQSxrQkFBQTtJQUNBLFdBQUE7SUFDQSxZQUFBO0lBQ0EsV0FBQTtJQUNBLFNBQUE7SUFDQSxXQUFBO0lBQ0EsdUJBQUE7SUFFQSxnQkFBQTtBQUNBO0FBRUE7SUFDQSx5QkFBQTtBQUNBO0FBRUE7SUFDQSwyQkFBQTtBQUNBO0FBRUE7SUFHQSwyQkFBQTtBQUNBO0FBRUE7SUFDQSxtQkFBQTtBQUNBO0FBRUE7SUFDQSxrQkFBQTtBQUNBXCIsXCJzb3VyY2VzQ29udGVudFwiOltcIjx0ZW1wbGF0ZT5cXG4gICAgPGRpdiBjbGFzcz1cXFwicm93XFxcIj5cXG4gICAgICAgIDxkaXYgdi1mb3I9XFxcImQgaW4gZWxtc1xcXCIgOmNsYXNzPVxcXCJkLndpZHRoKycgbWItMydcXFwiPlxcbiAgICAgICAgICAgIDxkaXYgdi1pZj1cXFwiZC50eXBlID09PSAndGV4dCdcXFwiPlxcbiAgICAgICAgICAgICAgICA8bGFiZWwgOmZvcj1cXFwiZC5uYW1lXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgIHt7IGQubGFiZWwgfX1cXG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cXG4gICAgICAgICAgICAgICAgPGlucHV0IHYtbW9kZWw9XFxcImRlZmF1bHRzW2QubmFtZV1cXFwiIHR5cGU9XFxcInRleHRcXFwiIDppZD1cXFwiZC5uYW1lXFxcIiA6bmFtZT1cXFwiJ21ldGFbJytkLm5hbWUrJ10nXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XFxcImZvcm0tY29udHJvbFxcXCI+XFxuICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgPGRpdiB2LWVsc2UtaWY9XFxcImQudHlwZSA9PT0gJ251bWJlcidcXFwiPlxcbiAgICAgICAgICAgICAgICA8bGFiZWwgOmZvcj1cXFwiZC5uYW1lXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgIHt7IGQubGFiZWwgfX1cXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gICAgICAgICAgICAgICAgICAgIFxcXCJ7e2RlZmF1bHRzW2QubmFtZV19fVxcXCItLT5cXG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cXG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XFxcIm51bWJlclxcXCIgdi1tb2RlbD1cXFwiZGVmYXVsdHNbZC5uYW1lXVxcXCIgOnBsYWNlaG9sZGVyPVxcXCJkLmxhYmVsXFxcIiA6aWQ9XFxcImQubmFtZVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgIDpuYW1lPVxcXCInbWV0YVsnK2QubmFtZSsnXSdcXFwiIGNsYXNzPVxcXCJmb3JtLWNvbnRyb2xcXFwiPlxcbiAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgIDxkaXYgdi1lbHNlLWlmPVxcXCJkLnR5cGUgPT09ICdjb2xvcidcXFwiIDppZD1cXFwiZC5uYW1lXFxcIiA6bmFtZT1cXFwiJ21ldGFbJytkLm5hbWUrJ10nXFxcIj5cXG4gICAgICAgICAgICAgICAgPGxhYmVsIDpmb3I9XFxcImQubmFtZVxcXCI+XFxuICAgICAgICAgICAgICAgICAgICB7eyBkLmxhYmVsIH19XFxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XFxuICAgICAgICAgICAgICAgIDxzZWxlY3Qgdi1tb2RlbD1cXFwiZGVmYXVsdHNbZC5uYW1lXVxcXCIgOm5hbWU9XFxcIidtZXRhWycrZC5uYW1lKyddJ1xcXCIgOmlkPVxcXCJkLm5hbWVcXFwiIGNsYXNzPVxcXCJmb3JtLWNvbnRyb2xcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cXFwiXFxcIj4ge3sgZC5sYWJlbCB9fTwvb3B0aW9uPlxcbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiA6c3R5bGU9XFxcIidiYWNrZ3JvdW5kLWNvbG9yOicgKyBvLnZhbHVlIFxcXCIgOnZhbHVlPVxcXCJvLnZhbHVlXFxcIiB2LWZvcj1cXFwibyBpbiBkLm9wdGlvbnNcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IG8udGl0bGUgfX1cXG4gICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxcbiAgICAgICAgICAgICAgICA8L3NlbGVjdD5cXG4gICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICA8ZGl2IHYtZWxzZS1pZj1cXFwiZC50eXBlID09PSAnY2hlY2tib3gnXFxcIj5cXG4gICAgICAgICAgICAgICAgPGxhYmVsIDpmb3I9XFxcImQubmFtZVxcXCI+XFxuICAgICAgICAgICAgICAgICAgICB7eyBkLmxhYmVsIH19XFxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XFxuICAgICAgICAgICAgICAgIDxicj5cXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwicGFuZWwgcGFuZWwtZGVmYXVsdCBcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwicGFuZWwtYm9keVxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLU9ubHkgY29kZSB5b3UgbmVlZCBpcyB0aGlzIGxhYmVsLS0+XFxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVxcXCJzd2l0Y2hcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgOm5hbWU9XFxcIidtZXRhWycrZC5uYW1lKyddJ1xcXCIgIHYtbW9kZWw9XFxcImRlZmF1bHRzW2QubmFtZV1cXFwiIHR5cGU9XFxcImNoZWNrYm94XFxcIiA+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcInNsaWRlciByb3VuZFxcXCI+PC9kaXY+XFxuICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8cD5cXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3A+XFxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICAgICAgPC9kaXY+XFxuXFxuICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgPGRpdiB2LWVsc2UtaWY9XFxcImQudHlwZSA9PT0gJ3NlbGVjdCdcXFwiPlxcbiAgICAgICAgICAgICAgICA8bGFiZWwgOmZvcj1cXFwiZC5uYW1lXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgIHt7IGQubGFiZWwgfX1cXG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cXG4gICAgICAgICAgICAgICAgPHNlbGVjdCB2LW1vZGVsPVxcXCJkZWZhdWx0c1tkLm5hbWVdXFxcIiA6bmFtZT1cXFwiJ21ldGFbJytkLm5hbWUrJ10nXFxcIiA6aWQ9XFxcImQubmFtZVxcXCIgY2xhc3M9XFxcImZvcm0tY29udHJvbFxcXCI+XFxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVxcXCJcXFwiPiB7eyBkLmxhYmVsIH19PC9vcHRpb24+XFxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIDp2YWx1ZT1cXFwiby52YWx1ZVxcXCIgdi1mb3I9XFxcIm8gaW4gZC5vcHRpb25zXFxcIj4ge3sgby50aXRsZSB9fTwvb3B0aW9uPlxcbiAgICAgICAgICAgICAgICA8L3NlbGVjdD5cXG4gICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICA8ZGl2IHYtZWxzZS1pZj1cXFwiZC50eXBlID09PSAnbXVsdGknXFxcIj5cXG4gICAgICAgICAgICAgICAgPGxhYmVsIDpmb3I9XFxcImQubmFtZVxcXCI+XFxuICAgICAgICAgICAgICAgICAgICB7eyBkLmxhYmVsIH19XFxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XFxuICAgICAgICAgICAgICAgIDxtdWx0aXNlbGVjdCBAc2VsZWN0PVxcXCJ1cGQoKVxcXCIgOm11bHRpcGxlPVxcXCJ0cnVlXFxcIiA6dGFnZ2FibGU9XFxcInRydWVcXFwiIGxhYmVsPVxcXCJ0aXRsZVxcXCIgdi1tb2RlbD1cXFwiZGVmYXVsdHNbZC5uYW1lXVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpwbGFjZWhvbGRlcj1cXFwiZC5sYWJlbFxcXCIgOm9wdGlvbnM9XFxcImQub3B0aW9uc1xcXCI+PC9tdWx0aXNlbGVjdD5cXG4gICAgICAgICAgICAgICAgPGlucHV0IDppZD1cXFwiZC5sYWJlbFxcXCIgdHlwZT1cXFwiaGlkZGVuXFxcIiA6bmFtZT1cXFwiJ21ldGFbJytkLm5hbWUrJ10nXFxcIiA6dmFsdWU9XFxcIm1ha2VWYWwoZGVmYXVsdHNbZC5uYW1lXSlcXFwiPlxcbiAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgIDxkaXYgdi1lbHNlLWlmPVxcXCJkLnR5cGUgPT09ICdzaW5nbGVtdWx0aSdcXFwiPlxcbiAgICAgICAgICAgICAgICA8bGFiZWwgOmZvcj1cXFwiZC5uYW1lXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgIHt7IGQubGFiZWwgfX1cXG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cXG4gICAgICAgICAgICAgICAgPGRpdiB2LWlmPVxcXCJzZWFyY2hhYmxlXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgIDxtdWx0aXNlbGVjdCBAc2VsZWN0PVxcXCJ1cGQoKVxcXCIgdi1tb2RlbD1cXFwiZGVmYXVsdHNbZC5uYW1lXVxcXCIgOm11bHRpcGxlPVxcXCJ0cnVlXFxcIiA6dGFnZ2FibGU9XFxcInRydWVcXFwiIGxhYmVsPVxcXCJ0aXRsZVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6cGxhY2Vob2xkZXI9XFxcImQubGFiZWxcXFwiIDpvcHRpb25zPVxcXCJkLm9wdGlvbnNcXFwiPjwvbXVsdGlzZWxlY3Q+XFxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cXFwiaGlkZGVuXFxcIiA6bmFtZT1cXFwiJ21ldGFbJytkLm5hbWUrJ10nXFxcIiA6dmFsdWU9XFxcImRlZmF1bHRzW2QubmFtZV1cXFwiPlxcbiAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICAgICAgPHNlbGVjdCB2LWVsc2Ugdi1tb2RlbD1cXFwiZGVmYXVsdHNbZC5uYW1lXVxcXCIgOm5hbWU9XFxcIidtZXRhWycrZC5uYW1lKyddJ1xcXCIgOmlkPVxcXCJkLm5hbWVcXFwiIGNsYXNzPVxcXCJmb3JtLWNvbnRyb2xcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cXFwiXFxcIj4ge3sgZC5sYWJlbCB9fTwvb3B0aW9uPlxcbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiA6dmFsdWU9XFxcIm8udmFsdWVcXFwiIHYtZm9yPVxcXCJvIGluIGQub3B0aW9uc1xcXCI+IHt7IG8udGl0bGUgfX08L29wdGlvbj5cXG4gICAgICAgICAgICAgICAgPC9zZWxlY3Q+XFxuICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICA8L2Rpdj5cXG4gICAgPC9kaXY+XFxuPC90ZW1wbGF0ZT5cXG5cXG48c2NyaXB0PlxcbmltcG9ydCBtdWx0aXNlbGVjdCBmcm9tICd2dWUtbXVsdGlzZWxlY3QnO1xcblxcbmV4cG9ydCBkZWZhdWx0IHtcXG4gICAgbmFtZTogXFxcIk1ldGFFbGVtZW50XFxcIixcXG4gICAgY29tcG9uZW50czoge211bHRpc2VsZWN0fSxcXG4gICAgZGF0YTogZnVuY3Rpb24gKCkge1xcbiAgICAgICAgcmV0dXJuIHtcXG4gICAgICAgICAgICBiOiB0cnVlLFxcbiAgICAgICAgICAgIGNvbnRlbnQ6IHRoaXMudmFsdWUsXFxuICAgICAgICAgICAgdmFsdWU6ICcnLFxcbiAgICAgICAgICAgIHQ6IHdpbmRvdy50cmFuc2xhdGUsXFxuICAgICAgICAgICAgY2xhc3NlczogJ2Zvcm0tY29udHJvbCcsXFxuICAgICAgICAgICAgZWxtczogW10sXFxuICAgICAgICAgICAgZGVmYXVsdHM6IHt9LFxcbiAgICAgICAgfVxcbiAgICB9LFxcbiAgICBwcm9wczogWydqZGF0YScsICdzZWFyY2hhYmxlJywgJ2RlZnonXSxcXG4gICAgbW91bnRlZCgpIHtcXG4gICAgICAgIHRoaXMudXBkYXRlSmRhdGEodGhpcy5qZGF0YSwgdGhpcy5kZWZ6KTtcXG4gICAgfSxcXG4gICAgbWV0aG9kczoge1xcbiAgICAgICAgdXBkOmZ1bmN0aW9uICgpIHtcXG4gICAgICAgICAgICB0aGlzLiRmb3JjZVVwZGF0ZSgpO1xcbiAgICAgICAgfSxcXG4gICAgICAgIG1ha2VWYWw6ZnVuY3Rpb24gKG9iKSB7XFxuICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KG9iKTtcXG4gICAgICAgIH0sXFxuICAgICAgICB1cGRhdGVKZGF0YTogZnVuY3Rpb24gKGUsIGRlZiA9IFtdKSB7XFxuICAgICAgICAgICAgdHJ5IHtcXG5cXG4gICAgICAgICAgICAgICAgLy8gbWFrZSBkZWZhdWx0c1xcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGQgb2YgZGVmKSB7XFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRlZmF1bHRzW2Qua2V5XSA9IGQudmFsdWU7XFxuICAgICAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBlID09ICdzdHJpbmcnKSB7XFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVsbXMgPSBKU09OLnBhcnNlKGUpO1xcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbG1zID0gZTtcXG4gICAgICAgICAgICAgICAgfVxcblxcblxcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGUgb2YgdGhpcy5lbG1zKSB7XFxuICAgICAgICAgICAgICAgICAgICB0cnkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGUub3B0aW9ucyA9IEpTT04ucGFyc2UoZS5vcHRpb25zKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBmaXggZm9yIG11bHRpIHNlbGVjdCBvYmplY3RcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS50eXBlID09PSAnbXVsdGknIHx8IChlLnR5cGUgPT09JycgJiYgdGhpcy5zZWFyY2hhYmxlKSl7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVmYXVsdHNbZS5uYW1lXSA9IEpTT04ucGFyc2UodGhpcy5kZWZhdWx0c1tlLm5hbWVdKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coSlNPTi5wYXJzZShlLm9wdGlvbnMpKTtcXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2gge1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9XFxuXFxuXFxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgICAgICAgICB0aGlzLmVsbXMgPSBbXTtcXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ25vIG1ldGEgZWxlJywgZS5tZXNzYWdlKTtcXG4gICAgICAgICAgICB9XFxuXFxuICAgICAgICB9LFxcbiAgICAgICAgaGFuZGxlSW5wdXQoZSkge1xcbiAgICAgICAgICAgIHRoaXMuJGVtaXQoJ2lucHV0JywgdGhpcy5jb250ZW50KTtcXG4gICAgICAgIH0sXFxuICAgIH1cXG59XFxuPC9zY3JpcHQ+XFxuXFxuPHN0eWxlIHNjb3BlZD5cXG4uc3dpdGNoIHtcXG4gICAgbWFyZ2luLXRvcDogMTBweDtcXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICAgIHdpZHRoOiAzNXB4O1xcbiAgICBoZWlnaHQ6IDIwcHg7XFxufVxcblxcbi5zd2l0Y2ggaW5wdXQge1xcbiAgICBkaXNwbGF5OiBub25lO1xcbn1cXG5cXG4uc2xpZGVyIHtcXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgICBjdXJzb3I6IHBvaW50ZXI7XFxuICAgIHRvcDogMDtcXG4gICAgbGVmdDogMDtcXG4gICAgcmlnaHQ6IDA7XFxuICAgIGJvdHRvbTogMDtcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2NjYztcXG4gICAgLXdlYmtpdC10cmFuc2l0aW9uOiAwLjRzO1xcbiAgICB0cmFuc2l0aW9uOiAwLjRzO1xcbn1cXG5cXG4uc2xpZGVyOmJlZm9yZSB7XFxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gICAgY29udGVudDogXFxcIlxcXCI7XFxuICAgIGhlaWdodDogMTZweDtcXG4gICAgd2lkdGg6IDE2cHg7XFxuICAgIGxlZnQ6IDJweDtcXG4gICAgYm90dG9tOiAycHg7XFxuICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xcbiAgICAtd2Via2l0LXRyYW5zaXRpb246IDAuNHM7XFxuICAgIHRyYW5zaXRpb246IDAuNHM7XFxufVxcblxcbmlucHV0OmNoZWNrZWQgKyAuc2xpZGVyIHtcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzFkNjhhNztcXG59XFxuXFxuaW5wdXQ6Zm9jdXMgKyAuc2xpZGVyIHtcXG4gICAgYm94LXNoYWRvdzogMCAwIDFweCAjMWQ2OGE3O1xcbn1cXG5cXG5pbnB1dDpjaGVja2VkICsgLnNsaWRlcjpiZWZvcmUge1xcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWCgxNnB4KTtcXG4gICAgLW1zLXRyYW5zZm9ybTogdHJhbnNsYXRlWCgxNnB4KTtcXG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDE2cHgpO1xcbn1cXG5cXG4uc2xpZGVyLnJvdW5kIHtcXG4gICAgYm9yZGVyLXJhZGl1czogMzRweDtcXG59XFxuXFxuLnNsaWRlci5yb3VuZDpiZWZvcmUge1xcbiAgICBib3JkZXItcmFkaXVzOiA1MCU7XFxufVxcbjwvc3R5bGU+XFxuXCJdLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG4vLyBFeHBvcnRzXG5leHBvcnQgZGVmYXVsdCBfX19DU1NfTE9BREVSX0VYUE9SVF9fXztcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/css-loader/dist/cjs.js??clonedRuleSet-10[0].rules[0].use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-10[0].rules[0].use[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/MetaElement.vue?vue&type=style&index=0&id=5a696ec8&scoped=true&lang=css&\n");
/***/ }),
/***/ "./node_modules/css-loader/dist/cjs.js??clonedRuleSet-10[0].rules[0].use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-10[0].rules[0].use[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/MetaPrice.vue?vue&type=style&index=0&id=7664e32e&scoped=true&lang=css&":
/*!**************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-10[0].rules[0].use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-10[0].rules[0].use[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/MetaPrice.vue?vue&type=style&index=0&id=7664e32e&scoped=true&lang=css& ***!
\**************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
/***/ ((module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js */ \"./node_modules/css-loader/dist/runtime/cssWithMappingToString.js\");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/api.js */ \"./node_modules/css-loader/dist/runtime/api.js\");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"\\n#overlay[data-v-7664e32e] {\\n position: fixed;\\n left: 0;\\n right: 0;\\n bottom: 0;\\n top: 0;\\n background: #FFFFFF99;\\n z-index: 999;\\n overflow-y: scroll;\\n}\\n#overlay img[data-v-7664e32e] {\\n max-width: 100%;\\n opacity: .75;\\n}\\n#overlay img.selected[data-v-7664e32e] {\\n opacity: 1;\\n border: 3px double black;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./resources/js/components/MetaPrice.vue\"],\"names\":[],\"mappings\":\";AA8MA;IACA,eAAA;IACA,OAAA;IACA,QAAA;IACA,SAAA;IACA,MAAA;IACA,qBAAA;IACA,YAAA;IACA,kBAAA;AACA;AAGA;IACA,eAAA;IACA,YAAA;AACA;AAEA;IACA,UAAA;IACA,wBAAA;AACA\",\"sourcesContent\":[\"<template>\\n <div>\\n <h3>\\n {{ t.specialQuantity }}\\n </h3>\\n <div class=\\\"btn btn-success mb-3\\\" @click=\\\"adding()\\\">\\n <i class=\\\"fa fa-plus\\\"></i>\\n </div>\\n <div class=\\\"border p-2\\\" v-for=\\\"(q,k) in quantities\\\">\\n <div class=\\\"row\\\">\\n <div v-for=\\\"(meta,i) in elms\\\" v-if=\\\"meta.priceable\\\" class=\\\"col-md\\\">\\n <label :for=\\\"meta.name+k\\\">\\n {{ meta.label }}\\n </label>\\n <div v-if=\\\"meta.type == 'select' || meta.type == 'multi' || meta.type == 'singlemulti'\\\">\\n <select @change=\\\"updateForce\\\" v-model=\\\"quantities[k][meta.name]\\\" :id=\\\"meta.name+k\\\"\\n :class=\\\"'form-control '+(q[meta.name] === ''?'is-invalid':'')\\\">\\n <option value=\\\"\\\">{{ t.choose }}</option>\\n <option :value=\\\"op.value\\\" v-for=\\\"(op,j) in meta.options\\\"> {{ op.title }}</option>\\n </select>\\n </div>\\n <div v-else-if=\\\"meta.type == 'color'\\\">\\n <select @change=\\\"updateForce\\\" v-model=\\\"q[meta.name]\\\" :id=\\\"meta.name+k\\\"\\n :class=\\\"'form-control '+(quantities[k][meta.name] === ''?'is-invalid':'')\\\">\\n <option value=\\\"\\\">{{ t.choose }}</option>\\n <option :style=\\\"'background-color:' + o.value \\\" :value=\\\"o.value\\\" v-for=\\\"o in meta.options\\\">\\n {{ o.title }}\\n </option>\\n </select>\\n </div>\\n <div v-else-if=\\\"meta.type == 'number' || meta.type == 'text'\\\">\\n <input @blur=\\\"updateForce\\\" type=\\\"text\\\" v-model=\\\"quantities[k][meta.name]\\\" :id=\\\"meta.name+k\\\"\\n :class=\\\"'form-control '+(q[meta.name] === ''?'is-invalid':'')\\\">\\n </div>\\n <div v-else>\\n <select @change=\\\"updateForce\\\" v-model=\\\"quantities[k][meta.name]\\\" :id=\\\"meta.name+k\\\"\\n :class=\\\"'form-control '+(q[meta.name] === ''?'is-invalid':'')\\\">\\n <option value=\\\"\\\">{{ t.choose }}</option>\\n <option value=\\\"0\\\"> {{ t.false }}</option>\\n <option value=\\\"1\\\"> {{ t.true }}</option>\\n </select>\\n </div>\\n </div>\\n <div class=\\\"col-md\\\">\\n <label :for=\\\"'price'+k\\\">\\n {{ t.price }}\\n </label>\\n <currency @keyup=\\\"updateForce\\\" v-model=\\\"quantities[k].price\\\" :placeholder=\\\"t.price\\\" :id=\\\"'price'+k\\\"\\n classes=\\\"form-control\\\"/>\\n <!-- <input type=\\\"text\\\" v-model=\\\"q.price\\\" :placeholder=\\\"t.price\\\" :id=\\\"'price'+k\\\" class=\\\"currencyx form-control\\\">-->\\n </div>\\n\\n <div class=\\\"col-md\\\">\\n <label :for=\\\"'q'+k\\\">\\n {{ t.count }}\\n </label>\\n <input @keyup=\\\"updateForce\\\" :data-id=\\\"k\\\" data-key=\\\"count\\\" type=\\\"text\\\" :placeholder=\\\"t.remove\\\"\\n v-model=\\\"quantities[k].count\\\" :id=\\\"'q'+k\\\" class=\\\"form-control\\\">\\n </div>\\n <div class=\\\"col-md\\\">\\n <br>\\n <div class=\\\"btn btn-dark mt-2\\\" @click=\\\"showModal(k)\\\">\\n <i class=\\\"fa fa-image\\\"></i>\\n </div>\\n </div>\\n <div class=\\\"col-md\\\">\\n <br>\\n <div class=\\\"btn btn-danger mt-2\\\" @click=\\\"rem(k)\\\">\\n {{ t.remove }}\\n <i class=\\\"fa fa-trash\\\"></i>\\n </div>\\n </div>\\n </div>\\n </div>\\n <input type=\\\"hidden\\\" name=\\\"quantity\\\" :value=\\\"JSON.stringify(quantities)\\\">\\n\\n <div id=\\\"overlay\\\" v-if=\\\"modal\\\">\\n <div class=\\\"container\\\">\\n <img src=\\\"\\\" alt=\\\"\\\" class=\\\"selected\\\" style=\\\"display: none\\\" />\\n <div class=\\\"row\\\">\\n <div class=\\\"col-md-2 col-sm-6 mt-3\\\" v-for=\\\"(img,key,i) in images\\\" :key=\\\"key\\\" @click=\\\"changeImg(i)\\\">\\n <img :src=\\\"img.original_url\\\" :class=\\\"quantities[onSelectImage].image === i?'selected':'' \\\" alt=\\\"\\\">\\n </div>\\n </div>\\n <hr>\\n <div class=\\\"btn btn-danger\\\" @click=\\\"hideModal\\\">\\n <div class=\\\"fa fa-times\\\"></div>\\n </div>\\n <div class=\\\"btn btn-primary\\\" @click=\\\"hideModal\\\">\\n <div class=\\\"fa fa-check\\\"></div>\\n </div>\\n </div>\\n </div>\\n </div>\\n</template>\\n\\n<script>\\n\\n\\nexport default {\\n name: \\\"MetaPrice\\\",\\n data: function () {\\n return {\\n quantities: [],\\n elms: [],\\n t: window.translate,\\n q: {},\\n last: [],\\n onSelectImage: 0,\\n modal: false,\\n }\\n },\\n props: ['jdata', 'defz', 'images','counts'],\\n mounted() {\\n this.updateJdata(this.jdata, this.defz);\\n },\\n watch: {\\n quantities: {\\n handler: function (val, oldVal) {\\n // Return the object that changed\\n // console.log('changed qn');\\n },\\n deep: true\\n }\\n },\\n methods: {\\n changeImg:function ($k) {\\n this.quantities[this.onSelectImage].image = $k;\\n },\\n showModal: function (i) {\\n // this.showModal(i);\\n this.onSelectImage = i;\\n this.modal = true;\\n },\\n hideModal:function (){\\n\\n this.modal = false;\\n },\\n updateJdata: function (e, def = []) {\\n try {\\n\\n // make defaults\\n if (this.quantities.length == 0) {\\n for (const d in def) {\\n this.quantities[d] = JSON.parse(def[d]);\\n this.quantities[d].count = this.counts[d];\\n }\\n }\\n\\n if (typeof e == 'string') {\\n this.elms = JSON.parse(e);\\n } else {\\n this.elms = e;\\n }\\n\\n\\n for (const e of this.elms) {\\n try {\\n e.options = JSON.parse(e.options);\\n } catch {\\n }\\n }\\n\\n\\n } catch (e) {\\n this.elms = [];\\n console.log('no meta ele', e.message);\\n }\\n\\n this.$forceUpdate();\\n\\n },\\n updateForce: function (e) {\\n // this.quantities[e.target.getAttribute('data-id')][e.target.getAttribute('data-key')] = e.target.value;\\n this.quantities.push({});\\n this.quantities.pop();\\n },\\n adding: function () {\\n let temp = {\\n count: 0,\\n price: 0,\\n image:0,\\n };\\n for (const meta of this.elms) {\\n temp[meta.name] = '';\\n }\\n this.quantities.push(temp);\\n },\\n parsing: function (e) {\\n try {\\n return JSON.parse(e);\\n } catch (e) {\\n console.log(e.message);\\n return [];\\n }\\n },\\n rem(i) {\\n // console.log(this.quantities[i]);\\n this.quantities.splice(i, 1);\\n },\\n\\n }\\n}\\n</script>\\n\\n<style scoped>\\n#overlay {\\n position: fixed;\\n left: 0;\\n right: 0;\\n bottom: 0;\\n top: 0;\\n background: #FFFFFF99;\\n z-index: 999;\\n overflow-y: scroll;\\n}\\n\\n\\n#overlay img {\\n max-width: 100%;\\n opacity: .75;\\n}\\n\\n#overlay img.selected {\\n opacity: 1;\\n border: 3px double black;\\n}\\n</style>\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcz8/Y2xvbmVkUnVsZVNldC0xMFswXS5ydWxlc1swXS51c2VbMV0hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy9zdHlsZVBvc3RMb2FkZXIuanMhLi9ub2RlX21vZHVsZXMvcG9zdGNzcy1sb2FkZXIvZGlzdC9janMuanM/P2Nsb25lZFJ1bGVTZXQtMTBbMF0ucnVsZXNbMF0udXNlWzJdIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9NZXRhUHJpY2UudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9NzY2NGUzMmUmc2NvcGVkPXRydWUmbGFuZz1jc3MmLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUE7QUFDNEg7QUFDN0I7QUFDL0YsOEJBQThCLG1GQUEyQixDQUFDLHdHQUFxQztBQUMvRjtBQUNBLHVFQUF1RSxzQkFBc0IsY0FBYyxlQUFlLGdCQUFnQixhQUFhLDRCQUE0QixtQkFBbUIseUJBQXlCLEdBQUcsaUNBQWlDLHNCQUFzQixtQkFBbUIsR0FBRywwQ0FBMEMsaUJBQWlCLCtCQUErQixHQUFHLFNBQVMsb0dBQW9HLE1BQU0sVUFBVSxVQUFVLFVBQVUsVUFBVSxVQUFVLFdBQVcsVUFBVSxXQUFXLEtBQUssS0FBSyxVQUFVLFVBQVUsS0FBSyxLQUFLLFVBQVUsV0FBVyw2RUFBNkUsb0JBQW9CLHdaQUF3WixhQUFhLHVaQUF1WixXQUFXLHdHQUF3RyxXQUFXLCtZQUErWSxXQUFXLDZLQUE2SyxVQUFVLGt1QkFBa3VCLFdBQVcsK0RBQStELFVBQVUsK0RBQStELFNBQVMscU5BQXFOLFVBQVUsMGdCQUEwZ0IsVUFBVSwyckJBQTJyQixXQUFXLDhvQ0FBOG9DLG1EQUFtRCxrQkFBa0IseUdBQXlHLDZGQUE2RixPQUFPLG9FQUFvRSxrREFBa0QsT0FBTyxlQUFlLHVCQUF1QiwrQ0FBK0Msa0dBQWtHLGVBQWUsb0NBQW9DLE9BQU8saUJBQWlCLG1DQUFtQyw2REFBNkQsV0FBVyxvQ0FBb0MsbUNBQW1DLHFDQUFxQyxnQ0FBZ0MsV0FBVyxpQ0FBaUMsbUNBQW1DLFdBQVcsZ0RBQWdELG1CQUFtQix3RkFBd0YsNENBQTRDLGtFQUFrRSxvRUFBb0UsdUJBQXVCLG1CQUFtQiwrQ0FBK0MsZ0RBQWdELG9CQUFvQixNQUFNLG9DQUFvQyxtQkFBbUIsa0RBQWtELDJCQUEyQiw0REFBNEQsd0JBQXdCLE9BQU8sdUJBQXVCLG1CQUFtQixvQkFBb0IsV0FBVyxpQ0FBaUMsd0RBQXdELGVBQWUsb0NBQW9DLGFBQWEsc0NBQXNDLHVIQUF1SCxxQ0FBcUMsRUFBRSxvQ0FBb0MsV0FBVyxnQ0FBZ0MsMEJBQTBCLGdHQUFnRyw2Q0FBNkMsdUNBQXVDLGVBQWUseUNBQXlDLFdBQVcsa0NBQWtDLG1CQUFtQix1Q0FBdUMsZ0JBQWdCLFdBQVcseUNBQXlDLDRCQUE0QixlQUFlLFdBQVcsbUJBQW1CLGlEQUFpRCwyQ0FBMkMsV0FBVyxVQUFVLEdBQUcseUNBQXlDLHNCQUFzQixjQUFjLGVBQWUsZ0JBQWdCLGFBQWEsNEJBQTRCLG1CQUFtQix5QkFBeUIsR0FBRyxvQkFBb0Isc0JBQXNCLG1CQUFtQixHQUFHLDJCQUEyQixpQkFBaUIsK0JBQStCLEdBQUcsK0JBQStCO0FBQ3AwUjtBQUNBLGlFQUFlLHVCQUF1QixFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvTWV0YVByaWNlLnZ1ZT82OGYxIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEltcG9ydHNcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fIGZyb20gXCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvY3NzV2l0aE1hcHBpbmdUb1N0cmluZy5qc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qc1wiO1xudmFyIF9fX0NTU19MT0FERVJfRVhQT1JUX19fID0gX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18pO1xuLy8gTW9kdWxlXG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5wdXNoKFttb2R1bGUuaWQsIFwiXFxuI292ZXJsYXlbZGF0YS12LTc2NjRlMzJlXSB7XFxuICAgIHBvc2l0aW9uOiBmaXhlZDtcXG4gICAgbGVmdDogMDtcXG4gICAgcmlnaHQ6IDA7XFxuICAgIGJvdHRvbTogMDtcXG4gICAgdG9wOiAwO1xcbiAgICBiYWNrZ3JvdW5kOiAjRkZGRkZGOTk7XFxuICAgIHotaW5kZXg6IDk5OTtcXG4gICAgb3ZlcmZsb3cteTogc2Nyb2xsO1xcbn1cXG4jb3ZlcmxheSBpbWdbZGF0YS12LTc2NjRlMzJlXSB7XFxuICAgIG1heC13aWR0aDogMTAwJTtcXG4gICAgb3BhY2l0eTogLjc1O1xcbn1cXG4jb3ZlcmxheSBpbWcuc2VsZWN0ZWRbZGF0YS12LTc2NjRlMzJlXSB7XFxuICAgIG9wYWNpdHk6IDE7XFxuICAgIGJvcmRlcjogM3B4IGRvdWJsZSBibGFjaztcXG59XFxuXCIsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wid2VicGFjazovLy4vcmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvTWV0YVByaWNlLnZ1ZVwiXSxcIm5hbWVzXCI6W10sXCJtYXBwaW5nc1wiOlwiO0FBOE1BO0lBQ0EsZUFBQTtJQUNBLE9BQUE7SUFDQSxRQUFBO0lBQ0EsU0FBQTtJQUNBLE1BQUE7SUFDQSxxQkFBQTtJQUNBLFlBQUE7SUFDQSxrQkFBQTtBQUNBO0FBR0E7SUFDQSxlQUFBO0lBQ0EsWUFBQTtBQUNBO0FBRUE7SUFDQSxVQUFBO0lBQ0Esd0JBQUE7QUFDQVwiLFwic291cmNlc0NvbnRlbnRcIjpbXCI8dGVtcGxhdGU+XFxuICAgIDxkaXY+XFxuICAgICAgICA8aDM+XFxuICAgICAgICAgICAge3sgdC5zcGVjaWFsUXVhbnRpdHkgfX1cXG4gICAgICAgIDwvaDM+XFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJidG4gYnRuLXN1Y2Nlc3MgbWItM1xcXCIgQGNsaWNrPVxcXCJhZGRpbmcoKVxcXCI+XFxuICAgICAgICAgICAgPGkgY2xhc3M9XFxcImZhIGZhLXBsdXNcXFwiPjwvaT5cXG4gICAgICAgIDwvZGl2PlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiYm9yZGVyIHAtMlxcXCIgdi1mb3I9XFxcIihxLGspIGluIHF1YW50aXRpZXNcXFwiPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcInJvd1xcXCI+XFxuICAgICAgICAgICAgICAgIDxkaXYgdi1mb3I9XFxcIihtZXRhLGkpIGluIGVsbXNcXFwiIHYtaWY9XFxcIm1ldGEucHJpY2VhYmxlXFxcIiBjbGFzcz1cXFwiY29sLW1kXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCA6Zm9yPVxcXCJtZXRhLm5hbWUra1xcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAge3sgbWV0YS5sYWJlbCB9fVxcbiAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgdi1pZj1cXFwibWV0YS50eXBlID09ICdzZWxlY3QnIHx8IG1ldGEudHlwZSA9PSAnbXVsdGknIHx8IG1ldGEudHlwZSA9PSAnc2luZ2xlbXVsdGknXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IEBjaGFuZ2U9XFxcInVwZGF0ZUZvcmNlXFxcIiB2LW1vZGVsPVxcXCJxdWFudGl0aWVzW2tdW21ldGEubmFtZV1cXFwiIDppZD1cXFwibWV0YS5uYW1lK2tcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Y2xhc3M9XFxcIidmb3JtLWNvbnRyb2wgJysocVttZXRhLm5hbWVdID09PSAnJz8naXMtaW52YWxpZCc6JycpXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cXFwiXFxcIj57eyB0LmNob29zZSB9fTwvb3B0aW9uPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIDp2YWx1ZT1cXFwib3AudmFsdWVcXFwiIHYtZm9yPVxcXCIob3AsaikgaW4gbWV0YS5vcHRpb25zXFxcIj4ge3sgb3AudGl0bGUgfX08L29wdGlvbj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWVsc2UtaWY9XFxcIm1ldGEudHlwZSA9PSAnY29sb3InXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IEBjaGFuZ2U9XFxcInVwZGF0ZUZvcmNlXFxcIiB2LW1vZGVsPVxcXCJxW21ldGEubmFtZV1cXFwiIDppZD1cXFwibWV0YS5uYW1lK2tcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Y2xhc3M9XFxcIidmb3JtLWNvbnRyb2wgJysocXVhbnRpdGllc1trXVttZXRhLm5hbWVdID09PSAnJz8naXMtaW52YWxpZCc6JycpXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cXFwiXFxcIj57eyB0LmNob29zZSB9fTwvb3B0aW9uPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIDpzdHlsZT1cXFwiJ2JhY2tncm91bmQtY29sb3I6JyArIG8udmFsdWUgXFxcIiA6dmFsdWU9XFxcIm8udmFsdWVcXFwiIHYtZm9yPVxcXCJvIGluIG1ldGEub3B0aW9uc1xcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBvLnRpdGxlIH19XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtZWxzZS1pZj1cXFwibWV0YS50eXBlID09ICdudW1iZXInIHx8IG1ldGEudHlwZSA9PSAndGV4dCdcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBAYmx1cj1cXFwidXBkYXRlRm9yY2VcXFwiIHR5cGU9XFxcInRleHRcXFwiIHYtbW9kZWw9XFxcInF1YW50aXRpZXNba11bbWV0YS5uYW1lXVxcXCIgOmlkPVxcXCJtZXRhLm5hbWUra1xcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOmNsYXNzPVxcXCInZm9ybS1jb250cm9sICcrKHFbbWV0YS5uYW1lXSA9PT0gJyc/J2lzLWludmFsaWQnOicnKVxcXCI+XFxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgdi1lbHNlPlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgQGNoYW5nZT1cXFwidXBkYXRlRm9yY2VcXFwiIHYtbW9kZWw9XFxcInF1YW50aXRpZXNba11bbWV0YS5uYW1lXVxcXCIgOmlkPVxcXCJtZXRhLm5hbWUra1xcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpjbGFzcz1cXFwiJ2Zvcm0tY29udHJvbCAnKyhxW21ldGEubmFtZV0gPT09ICcnPydpcy1pbnZhbGlkJzonJylcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVxcXCJcXFwiPnt7IHQuY2hvb3NlIH19PC9vcHRpb24+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XFxcIjBcXFwiPiB7eyB0LmZhbHNlIH19PC9vcHRpb24+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XFxcIjFcXFwiPiB7eyB0LnRydWUgfX08L29wdGlvbj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLW1kXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCA6Zm9yPVxcXCIncHJpY2UnK2tcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IHQucHJpY2UgfX1cXG4gICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XFxuICAgICAgICAgICAgICAgICAgICA8Y3VycmVuY3kgQGtleXVwPVxcXCJ1cGRhdGVGb3JjZVxcXCIgdi1tb2RlbD1cXFwicXVhbnRpdGllc1trXS5wcmljZVxcXCIgOnBsYWNlaG9sZGVyPVxcXCJ0LnByaWNlXFxcIiA6aWQ9XFxcIidwcmljZScra1xcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc2VzPVxcXCJmb3JtLWNvbnRyb2xcXFwiLz5cXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVxcXCJ0ZXh0XFxcIiB2LW1vZGVsPVxcXCJxLnByaWNlXFxcIiA6cGxhY2Vob2xkZXI9XFxcInQucHJpY2VcXFwiIDppZD1cXFwiJ3ByaWNlJytrXFxcIiBjbGFzcz1cXFwiY3VycmVuY3l4IGZvcm0tY29udHJvbFxcXCI+LS0+XFxuICAgICAgICAgICAgICAgIDwvZGl2PlxcblxcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wtbWRcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIDpmb3I9XFxcIidxJytrXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyB0LmNvdW50IH19XFxuICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IEBrZXl1cD1cXFwidXBkYXRlRm9yY2VcXFwiIDpkYXRhLWlkPVxcXCJrXFxcIiBkYXRhLWtleT1cXFwiY291bnRcXFwiIHR5cGU9XFxcInRleHRcXFwiIDpwbGFjZWhvbGRlcj1cXFwidC5yZW1vdmVcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgdi1tb2RlbD1cXFwicXVhbnRpdGllc1trXS5jb3VudFxcXCIgOmlkPVxcXCIncScra1xcXCIgY2xhc3M9XFxcImZvcm0tY29udHJvbFxcXCI+XFxuICAgICAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wtbWRcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgPGJyPlxcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwiYnRuIGJ0bi1kYXJrIG10LTJcXFwiIEBjbGljaz1cXFwic2hvd01vZGFsKGspXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cXFwiZmEgZmEtaW1hZ2VcXFwiPjwvaT5cXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLW1kXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgIDxicj5cXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImJ0biBidG4tZGFuZ2VyIG10LTJcXFwiIEBjbGljaz1cXFwicmVtKGspXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyB0LnJlbW92ZSB9fVxcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVxcXCJmYSBmYS10cmFzaFxcXCI+PC9pPlxcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgPC9kaXY+XFxuICAgICAgICA8aW5wdXQgdHlwZT1cXFwiaGlkZGVuXFxcIiBuYW1lPVxcXCJxdWFudGl0eVxcXCIgOnZhbHVlPVxcXCJKU09OLnN0cmluZ2lmeShxdWFudGl0aWVzKVxcXCI+XFxuXFxuICAgICAgICA8ZGl2IGlkPVxcXCJvdmVybGF5XFxcIiB2LWlmPVxcXCJtb2RhbFxcXCI+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29udGFpbmVyXFxcIj5cXG4gICAgICAgICAgICAgICAgPGltZyBzcmM9XFxcIlxcXCIgYWx0PVxcXCJcXFwiIGNsYXNzPVxcXCJzZWxlY3RlZFxcXCIgc3R5bGU9XFxcImRpc3BsYXk6IG5vbmVcXFwiIC8+XFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcInJvd1xcXCI+XFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wtbWQtMiBjb2wtc20tNiBtdC0zXFxcIiB2LWZvcj1cXFwiKGltZyxrZXksaSkgaW4gaW1hZ2VzXFxcIiA6a2V5PVxcXCJrZXlcXFwiIEBjbGljaz1cXFwiY2hhbmdlSW1nKGkpXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW1nIDpzcmM9XFxcImltZy5vcmlnaW5hbF91cmxcXFwiIDpjbGFzcz1cXFwicXVhbnRpdGllc1tvblNlbGVjdEltYWdlXS5pbWFnZSA9PT0gaT8nc2VsZWN0ZWQnOicnIFxcXCIgYWx0PVxcXCJcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgICAgICA8aHI+XFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImJ0biBidG4tZGFuZ2VyXFxcIiBAY2xpY2s9XFxcImhpZGVNb2RhbFxcXCI+XFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJmYSBmYS10aW1lc1xcXCI+PC9kaXY+XFxuICAgICAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJidG4gYnRuLXByaW1hcnlcXFwiIEBjbGljaz1cXFwiaGlkZU1vZGFsXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImZhIGZhLWNoZWNrXFxcIj48L2Rpdj5cXG4gICAgICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICA8L2Rpdj5cXG4gICAgPC9kaXY+XFxuPC90ZW1wbGF0ZT5cXG5cXG48c2NyaXB0PlxcblxcblxcbmV4cG9ydCBkZWZhdWx0IHtcXG4gICAgbmFtZTogXFxcIk1ldGFQcmljZVxcXCIsXFxuICAgIGRhdGE6IGZ1bmN0aW9uICgpIHtcXG4gICAgICAgIHJldHVybiB7XFxuICAgICAgICAgICAgcXVhbnRpdGllczogW10sXFxuICAgICAgICAgICAgZWxtczogW10sXFxuICAgICAgICAgICAgdDogd2luZG93LnRyYW5zbGF0ZSxcXG4gICAgICAgICAgICBxOiB7fSxcXG4gICAgICAgICAgICBsYXN0OiBbXSxcXG4gICAgICAgICAgICBvblNlbGVjdEltYWdlOiAwLFxcbiAgICAgICAgICAgIG1vZGFsOiBmYWxzZSxcXG4gICAgICAgIH1cXG4gICAgfSxcXG4gICAgcHJvcHM6IFsnamRhdGEnLCAnZGVmeicsICdpbWFnZXMnLCdjb3VudHMnXSxcXG4gICAgbW91bnRlZCgpIHtcXG4gICAgICAgIHRoaXMudXBkYXRlSmRhdGEodGhpcy5qZGF0YSwgdGhpcy5kZWZ6KTtcXG4gICAgfSxcXG4gICAgd2F0Y2g6IHtcXG4gICAgICAgIHF1YW50aXRpZXM6IHtcXG4gICAgICAgICAgICBoYW5kbGVyOiBmdW5jdGlvbiAodmFsLCBvbGRWYWwpIHtcXG4gICAgICAgICAgICAgICAgLy8gUmV0dXJuIHRoZSBvYmplY3QgdGhhdCBjaGFuZ2VkXFxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdjaGFuZ2VkIHFuJyk7XFxuICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICBkZWVwOiB0cnVlXFxuICAgICAgICB9XFxuICAgIH0sXFxuICAgIG1ldGhvZHM6IHtcXG4gICAgICAgIGNoYW5nZUltZzpmdW5jdGlvbiAoJGspIHtcXG4gICAgICAgICAgICB0aGlzLnF1YW50aXRpZXNbdGhpcy5vblNlbGVjdEltYWdlXS5pbWFnZSA9ICRrO1xcbiAgICAgICAgfSxcXG4gICAgICAgIHNob3dNb2RhbDogZnVuY3Rpb24gKGkpIHtcXG4gICAgICAgICAgICAvLyB0aGlzLnNob3dNb2RhbChpKTtcXG4gICAgICAgICAgICB0aGlzLm9uU2VsZWN0SW1hZ2UgPSBpO1xcbiAgICAgICAgICAgIHRoaXMubW9kYWwgPSB0cnVlO1xcbiAgICAgICAgfSxcXG4gICAgICAgIGhpZGVNb2RhbDpmdW5jdGlvbiAoKXtcXG5cXG4gICAgICAgICAgICB0aGlzLm1vZGFsID0gZmFsc2U7XFxuICAgICAgICB9LFxcbiAgICAgICAgdXBkYXRlSmRhdGE6IGZ1bmN0aW9uIChlLCBkZWYgPSBbXSkge1xcbiAgICAgICAgICAgIHRyeSB7XFxuXFxuICAgICAgICAgICAgICAgIC8vIG1ha2UgZGVmYXVsdHNcXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucXVhbnRpdGllcy5sZW5ndGggPT0gMCkge1xcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBkIGluIGRlZikge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucXVhbnRpdGllc1tkXSA9IEpTT04ucGFyc2UoZGVmW2RdKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnF1YW50aXRpZXNbZF0uY291bnQgPSB0aGlzLmNvdW50c1tkXTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGUgPT0gJ3N0cmluZycpIHtcXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZWxtcyA9IEpTT04ucGFyc2UoZSk7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVsbXMgPSBlO1xcbiAgICAgICAgICAgICAgICB9XFxuXFxuXFxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZSBvZiB0aGlzLmVsbXMpIHtcXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZS5vcHRpb25zID0gSlNPTi5wYXJzZShlLm9wdGlvbnMpO1xcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCB7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH1cXG5cXG5cXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICAgICAgICAgIHRoaXMuZWxtcyA9IFtdO1xcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnbm8gbWV0YSBlbGUnLCBlLm1lc3NhZ2UpO1xcbiAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICB0aGlzLiRmb3JjZVVwZGF0ZSgpO1xcblxcbiAgICAgICAgfSxcXG4gICAgICAgIHVwZGF0ZUZvcmNlOiBmdW5jdGlvbiAoZSkge1xcbiAgICAgICAgICAgIC8vIHRoaXMucXVhbnRpdGllc1tlLnRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEtaWQnKV1bZS50YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLWtleScpXSA9IGUudGFyZ2V0LnZhbHVlO1xcbiAgICAgICAgICAgIHRoaXMucXVhbnRpdGllcy5wdXNoKHt9KTtcXG4gICAgICAgICAgICB0aGlzLnF1YW50aXRpZXMucG9wKCk7XFxuICAgICAgICB9LFxcbiAgICAgICAgYWRkaW5nOiBmdW5jdGlvbiAoKSB7XFxuICAgICAgICAgICAgbGV0IHRlbXAgPSB7XFxuICAgICAgICAgICAgICAgIGNvdW50OiAwLFxcbiAgICAgICAgICAgICAgICBwcmljZTogMCxcXG4gICAgICAgICAgICAgICAgaW1hZ2U6MCxcXG4gICAgICAgICAgICB9O1xcbiAgICAgICAgICAgIGZvciAoY29uc3QgbWV0YSBvZiB0aGlzLmVsbXMpIHtcXG4gICAgICAgICAgICAgICAgdGVtcFttZXRhLm5hbWVdID0gJyc7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHRoaXMucXVhbnRpdGllcy5wdXNoKHRlbXApO1xcbiAgICAgICAgfSxcXG4gICAgICAgIHBhcnNpbmc6IGZ1bmN0aW9uIChlKSB7XFxuICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoZSk7XFxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlLm1lc3NhZ2UpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gW107XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSxcXG4gICAgICAgIHJlbShpKSB7XFxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2codGhpcy5xdWFudGl0aWVzW2ldKTtcXG4gICAgICAgICAgICB0aGlzLnF1YW50aXRpZXMuc3BsaWNlKGksIDEpO1xcbiAgICAgICAgfSxcXG5cXG4gICAgfVxcbn1cXG48L3NjcmlwdD5cXG5cXG48c3R5bGUgc2NvcGVkPlxcbiNvdmVybGF5IHtcXG4gICAgcG9zaXRpb246IGZpeGVkO1xcbiAgICBsZWZ0OiAwO1xcbiAgICByaWdodDogMDtcXG4gICAgYm90dG9tOiAwO1xcbiAgICB0b3A6IDA7XFxuICAgIGJhY2tncm91bmQ6ICNGRkZGRkY5OTtcXG4gICAgei1pbmRleDogOTk5O1xcbiAgICBvdmVyZmxvdy15OiBzY3JvbGw7XFxufVxcblxcblxcbiNvdmVybGF5IGltZyB7XFxuICAgIG1heC13aWR0aDogMTAwJTtcXG4gICAgb3BhY2l0eTogLjc1O1xcbn1cXG5cXG4jb3ZlcmxheSBpbWcuc2VsZWN0ZWQge1xcbiAgICBvcGFjaXR5OiAxO1xcbiAgICBib3JkZXI6IDNweCBkb3VibGUgYmxhY2s7XFxufVxcbjwvc3R5bGU+XFxuXCJdLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG4vLyBFeHBvcnRzXG5leHBvcnQgZGVmYXVsdCBfX19DU1NfTE9BREVSX0VYUE9SVF9fXztcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/css-loader/dist/cjs.js??clonedRuleSet-10[0].rules[0].use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-10[0].rules[0].use[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/MetaPrice.vue?vue&type=style&index=0&id=7664e32e&scoped=true&lang=css&\n");
/***/ }),
/***/ "./node_modules/css-loader/dist/runtime/api.js":
/*!*****************************************************!*\
!*** ./node_modules/css-loader/dist/runtime/api.js ***!
\*****************************************************/
/***/ ((module) => {
"use strict";
eval("\n\n/*\n MIT License http://www.opensource.org/licenses/mit-license.php\n Author Tobias Koppers @sokra\n*/\n// css base code, injected by the css-loader\n// eslint-disable-next-line func-names\nmodule.exports = function (cssWithMappingToString) {\n var list = []; // return the list of modules as css string\n\n list.toString = function toString() {\n return this.map(function (item) {\n var content = cssWithMappingToString(item);\n\n if (item[2]) {\n return \"@media \".concat(item[2], \" {\").concat(content, \"}\");\n }\n\n return content;\n }).join(\"\");\n }; // import a list of modules into the list\n // eslint-disable-next-line func-names\n\n\n list.i = function (modules, mediaQuery, dedupe) {\n if (typeof modules === \"string\") {\n // eslint-disable-next-line no-param-reassign\n modules = [[null, modules, \"\"]];\n }\n\n var alreadyImportedModules = {};\n\n if (dedupe) {\n for (var i = 0; i < this.length; i++) {\n // eslint-disable-next-line prefer-destructuring\n var id = this[i][0];\n\n if (id != null) {\n alreadyImportedModules[id] = true;\n }\n }\n }\n\n for (var _i = 0; _i < modules.length; _i++) {\n var item = [].concat(modules[_i]);\n\n if (dedupe && alreadyImportedModules[item[0]]) {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n if (mediaQuery) {\n if (!item[2]) {\n item[2] = mediaQuery;\n } else {\n item[2] = \"\".concat(mediaQuery, \" and \").concat(item[2]);\n }\n }\n\n list.push(item);\n }\n };\n\n return list;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCOztBQUVqQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw0Q0FBNEMscUJBQXFCO0FBQ2pFOztBQUVBO0FBQ0EsS0FBSztBQUNMLEtBQUs7QUFDTDs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLHNCQUFzQixpQkFBaUI7QUFDdkM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHFCQUFxQixxQkFBcUI7QUFDMUM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanM/YWU5ZSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuLypcbiAgTUlUIExpY2Vuc2UgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHBcbiAgQXV0aG9yIFRvYmlhcyBLb3BwZXJzIEBzb2tyYVxuKi9cbi8vIGNzcyBiYXNlIGNvZGUsIGluamVjdGVkIGJ5IHRoZSBjc3MtbG9hZGVyXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoY3NzV2l0aE1hcHBpbmdUb1N0cmluZykge1xuICB2YXIgbGlzdCA9IFtdOyAvLyByZXR1cm4gdGhlIGxpc3Qgb2YgbW9kdWxlcyBhcyBjc3Mgc3RyaW5nXG5cbiAgbGlzdC50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiB0aGlzLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgdmFyIGNvbnRlbnQgPSBjc3NXaXRoTWFwcGluZ1RvU3RyaW5nKGl0ZW0pO1xuXG4gICAgICBpZiAoaXRlbVsyXSkge1xuICAgICAgICByZXR1cm4gXCJAbWVkaWEgXCIuY29uY2F0KGl0ZW1bMl0sIFwiIHtcIikuY29uY2F0KGNvbnRlbnQsIFwifVwiKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgfSkuam9pbihcIlwiKTtcbiAgfTsgLy8gaW1wb3J0IGEgbGlzdCBvZiBtb2R1bGVzIGludG8gdGhlIGxpc3RcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcblxuXG4gIGxpc3QuaSA9IGZ1bmN0aW9uIChtb2R1bGVzLCBtZWRpYVF1ZXJ5LCBkZWR1cGUpIHtcbiAgICBpZiAodHlwZW9mIG1vZHVsZXMgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgbW9kdWxlcyA9IFtbbnVsbCwgbW9kdWxlcywgXCJcIl1dO1xuICAgIH1cblxuICAgIHZhciBhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzID0ge307XG5cbiAgICBpZiAoZGVkdXBlKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1kZXN0cnVjdHVyaW5nXG4gICAgICAgIHZhciBpZCA9IHRoaXNbaV1bMF07XG5cbiAgICAgICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgICAgICBhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzW2lkXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgbW9kdWxlcy5sZW5ndGg7IF9pKyspIHtcbiAgICAgIHZhciBpdGVtID0gW10uY29uY2F0KG1vZHVsZXNbX2ldKTtcblxuICAgICAgaWYgKGRlZHVwZSAmJiBhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzW2l0ZW1bMF1dKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb250aW51ZVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKG1lZGlhUXVlcnkpIHtcbiAgICAgICAgaWYgKCFpdGVtWzJdKSB7XG4gICAgICAgICAgaXRlbVsyXSA9IG1lZGlhUXVlcnk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaXRlbVsyXSA9IFwiXCIuY29uY2F0KG1lZGlhUXVlcnksIFwiIGFuZCBcIikuY29uY2F0KGl0ZW1bMl0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGxpc3QucHVzaChpdGVtKTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIGxpc3Q7XG59OyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/css-loader/dist/runtime/api.js\n");
/***/ }),
/***/ "./node_modules/css-loader/dist/runtime/cssWithMappingToString.js":
/*!************************************************************************!*\
!*** ./node_modules/css-loader/dist/runtime/cssWithMappingToString.js ***!
\************************************************************************/
/***/ ((module) => {
"use strict";
eval("\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr && (typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]); if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nmodule.exports = function cssWithMappingToString(item) {\n var _item = _slicedToArray(item, 4),\n content = _item[1],\n cssMapping = _item[3];\n\n if (!cssMapping) {\n return content;\n }\n\n if (typeof btoa === \"function\") {\n // eslint-disable-next-line no-undef\n var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(cssMapping))));\n var data = \"sourceMappingURL=data:application/json;charset=utf-8;base64,\".concat(base64);\n var sourceMapping = \"/*# \".concat(data, \" */\");\n var sourceURLs = cssMapping.sources.map(function (source) {\n return \"/*# sourceURL=\".concat(cssMapping.sourceRoot || \"\").concat(source, \" */\");\n });\n return [content].concat(sourceURLs).concat([sourceMapping]).join(\"\\n\");\n }\n\n return [content].join(\"\\n\");\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvY3NzV2l0aE1hcHBpbmdUb1N0cmluZy5qcy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixrQ0FBa0M7O0FBRWxDLDhCQUE4Qjs7QUFFOUIsa0RBQWtELGdCQUFnQixnRUFBZ0Usd0RBQXdELDZEQUE2RCxzREFBc0Q7O0FBRTdTLHVDQUF1Qyx1REFBdUQsdUNBQXVDLFNBQVMsT0FBTyxvQkFBb0I7O0FBRXpLLHlDQUF5Qyw4RkFBOEYsd0JBQXdCLGVBQWUsZUFBZSxnQkFBZ0IsWUFBWSxNQUFNLHdCQUF3QiwrQkFBK0IsYUFBYSxxQkFBcUIsdUNBQXVDLGNBQWMsV0FBVyxZQUFZLFVBQVUsTUFBTSxtREFBbUQsVUFBVSxzQkFBc0I7O0FBRXZlLGdDQUFnQzs7QUFFaEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHVEQUF1RCxjQUFjO0FBQ3JFO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvY3NzV2l0aE1hcHBpbmdUb1N0cmluZy5qcz9mNjVlIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5mdW5jdGlvbiBfc2xpY2VkVG9BcnJheShhcnIsIGkpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIsIGkpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuXG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHsgaWYgKCFvKSByZXR1cm47IGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTsgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTsgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7IGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikgeyBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH1cblxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgeyB2YXIgX2kgPSBhcnIgJiYgKHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgYXJyW1N5bWJvbC5pdGVyYXRvcl0gfHwgYXJyW1wiQEBpdGVyYXRvclwiXSk7IGlmIChfaSA9PSBudWxsKSByZXR1cm47IHZhciBfYXJyID0gW107IHZhciBfbiA9IHRydWU7IHZhciBfZCA9IGZhbHNlOyB2YXIgX3MsIF9lOyB0cnkgeyBmb3IgKF9pID0gX2kuY2FsbChhcnIpOyAhKF9uID0gKF9zID0gX2kubmV4dCgpKS5kb25lKTsgX24gPSB0cnVlKSB7IF9hcnIucHVzaChfcy52YWx1ZSk7IGlmIChpICYmIF9hcnIubGVuZ3RoID09PSBpKSBicmVhazsgfSB9IGNhdGNoIChlcnIpIHsgX2QgPSB0cnVlOyBfZSA9IGVycjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFfbiAmJiBfaVtcInJldHVyblwiXSAhPSBudWxsKSBfaVtcInJldHVyblwiXSgpOyB9IGZpbmFsbHkgeyBpZiAoX2QpIHRocm93IF9lOyB9IH0gcmV0dXJuIF9hcnI7IH1cblxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyOyB9XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY3NzV2l0aE1hcHBpbmdUb1N0cmluZyhpdGVtKSB7XG4gIHZhciBfaXRlbSA9IF9zbGljZWRUb0FycmF5KGl0ZW0sIDQpLFxuICAgICAgY29udGVudCA9IF9pdGVtWzFdLFxuICAgICAgY3NzTWFwcGluZyA9IF9pdGVtWzNdO1xuXG4gIGlmICghY3NzTWFwcGluZykge1xuICAgIHJldHVybiBjb250ZW50O1xuICB9XG5cbiAgaWYgKHR5cGVvZiBidG9hID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgICB2YXIgYmFzZTY0ID0gYnRvYSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoY3NzTWFwcGluZykpKSk7XG4gICAgdmFyIGRhdGEgPSBcInNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LFwiLmNvbmNhdChiYXNlNjQpO1xuICAgIHZhciBzb3VyY2VNYXBwaW5nID0gXCIvKiMgXCIuY29uY2F0KGRhdGEsIFwiICovXCIpO1xuICAgIHZhciBzb3VyY2VVUkxzID0gY3NzTWFwcGluZy5zb3VyY2VzLm1hcChmdW5jdGlvbiAoc291cmNlKSB7XG4gICAgICByZXR1cm4gXCIvKiMgc291cmNlVVJMPVwiLmNvbmNhdChjc3NNYXBwaW5nLnNvdXJjZVJvb3QgfHwgXCJcIikuY29uY2F0KHNvdXJjZSwgXCIgKi9cIik7XG4gICAgfSk7XG4gICAgcmV0dXJuIFtjb250ZW50XS5jb25jYXQoc291cmNlVVJMcykuY29uY2F0KFtzb3VyY2VNYXBwaW5nXSkuam9pbihcIlxcblwiKTtcbiAgfVxuXG4gIHJldHVybiBbY29udGVudF0uam9pbihcIlxcblwiKTtcbn07Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/css-loader/dist/runtime/cssWithMappingToString.js\n");
/***/ }),
/***/ "./node_modules/jquery-sortable/source/js/jquery-sortable.js":
/*!*******************************************************************!*\
!*** ./node_modules/jquery-sortable/source/js/jquery-sortable.js ***!
\*******************************************************************/
/***/ (() => {
eval("/* ===================================================\r\n * jquery-sortable.js v0.9.13\r\n * http://johnny.github.com/jquery-sortable/\r\n * ===================================================\r\n * Copyright (c) 2012 Jonas von Andrian\r\n * All rights reserved.\r\n *\r\n * Redistribution and use in source and binary forms, with or without\r\n * modification, are permitted provided that the following conditions are met:\r\n * * Redistributions of source code must retain the above copyright\r\n * notice, this list of conditions and the following disclaimer.\r\n * * Redistributions in binary form must reproduce the above copyright\r\n * notice, this list of conditions and the following disclaimer in the\r\n * documentation and/or other materials provided with the distribution.\r\n * * The name of the author may not be used to endorse or promote products\r\n * derived from this software without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\r\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n * DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\r\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\r\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\r\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\r\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\r\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n * ========================================================== */\r\n\r\n!function ( $, window, pluginName, undefined){\r\n var containerDefaults = {\r\n // If true, items can be dragged from this container\r\n drag: true,\r\n // If true, items can be droped onto this container\r\n drop: true,\r\n // Exclude items from being draggable, if the\r\n // selector matches the item\r\n exclude: \"\",\r\n // If true, search for nested containers within an item.If you nest containers,\r\n // either the original selector with which you call the plugin must only match the top containers,\r\n // or you need to specify a group (see the bootstrap nav example)\r\n nested: true,\r\n // If true, the items are assumed to be arranged vertically\r\n vertical: true\r\n }, // end container defaults\r\n groupDefaults = {\r\n // This is executed after the placeholder has been moved.\r\n // $closestItemOrContainer contains the closest item, the placeholder\r\n // has been put at or the closest empty Container, the placeholder has\r\n // been appended to.\r\n afterMove: function ($placeholder, container, $closestItemOrContainer) {\r\n },\r\n // The exact css path between the container and its items, e.g. \"> tbody\"\r\n containerPath: \"\",\r\n // The css selector of the containers\r\n containerSelector: \"ol, ul\",\r\n // Distance the mouse has to travel to start dragging\r\n distance: 0,\r\n // Time in milliseconds after mousedown until dragging should start.\r\n // This option can be used to prevent unwanted drags when clicking on an element.\r\n delay: 0,\r\n // The css selector of the drag handle\r\n handle: \"\",\r\n // The exact css path between the item and its subcontainers.\r\n // It should only match the immediate items of a container.\r\n // No item of a subcontainer should be matched. E.g. for ol>div>li the itemPath is \"> div\"\r\n itemPath: \"\",\r\n // The css selector of the items\r\n itemSelector: \"li\",\r\n // The class given to \"body\" while an item is being dragged\r\n bodyClass: \"dragging\",\r\n // The class giving to an item while being dragged\r\n draggedClass: \"dragged\",\r\n // Check if the dragged item may be inside the container.\r\n // Use with care, since the search for a valid container entails a depth first search\r\n // and may be quite expensive.\r\n isValidTarget: function ($item, container) {\r\n return true\r\n },\r\n // Executed before onDrop if placeholder is detached.\r\n // This happens if pullPlaceholder is set to false and the drop occurs outside a container.\r\n onCancel: function ($item, container, _super, event) {\r\n },\r\n // Executed at the beginning of a mouse move event.\r\n // The Placeholder has not been moved yet.\r\n onDrag: function ($item, position, _super, event) {\r\n $item.css(position)\r\n },\r\n // Called after the drag has been started,\r\n // that is the mouse button is being held down and\r\n // the mouse is moving.\r\n // The container is the closest initialized container.\r\n // Therefore it might not be the container, that actually contains the item.\r\n onDragStart: function ($item, container, _super, event) {\r\n $item.css({\r\n height: $item.outerHeight(),\r\n width: $item.outerWidth()\r\n })\r\n $item.addClass(container.group.options.draggedClass)\r\n $(\"body\").addClass(container.group.options.bodyClass)\r\n },\r\n // Called when the mouse button is being released\r\n onDrop: function ($item, container, _super, event) {\r\n $item.removeClass(container.group.options.draggedClass).removeAttr(\"style\")\r\n $(\"body\").removeClass(container.group.options.bodyClass)\r\n },\r\n // Called on mousedown. If falsy value is returned, the dragging will not start.\r\n // Ignore if element clicked is input, select or textarea\r\n onMousedown: function ($item, _super, event) {\r\n if (!event.target.nodeName.match(/^(input|select|textarea)$/i)) {\r\n event.preventDefault()\r\n return true\r\n }\r\n },\r\n // The class of the placeholder (must match placeholder option markup)\r\n placeholderClass: \"placeholder\",\r\n // Template for the placeholder. Can be any valid jQuery input\r\n // e.g. a string, a DOM element.\r\n // The placeholder must have the class \"placeholder\"\r\n placeholder: '<li class=\"placeholder\"></li>',\r\n // If true, the position of the placeholder is calculated on every mousemove.\r\n // If false, it is only calculated when the mouse is above a container.\r\n pullPlaceholder: true,\r\n // Specifies serialization of the container group.\r\n // The pair $parent/$children is either container/items or item/subcontainers.\r\n serialize: function ($parent, $children, parentIsContainer) {\r\n var result = $.extend({}, $parent.data())\r\n\r\n if(parentIsContainer)\r\n return [$children]\r\n else if ($children[0]){\r\n result.children = $children\r\n }\r\n\r\n delete result.subContainers\r\n delete result.sortable\r\n\r\n return result\r\n },\r\n // Set tolerance while dragging. Positive values decrease sensitivity,\r\n // negative values increase it.\r\n tolerance: 0\r\n }, // end group defaults\r\n containerGroups = {},\r\n groupCounter = 0,\r\n emptyBox = {\r\n left: 0,\r\n top: 0,\r\n bottom: 0,\r\n right:0\r\n },\r\n eventNames = {\r\n start: \"touchstart.sortable mousedown.sortable\",\r\n drop: \"touchend.sortable touchcancel.sortable mouseup.sortable\",\r\n drag: \"touchmove.sortable mousemove.sortable\",\r\n scroll: \"scroll.sortable\"\r\n },\r\n subContainerKey = \"subContainers\"\r\n\r\n /*\r\n * a is Array [left, right, top, bottom]\r\n * b is array [left, top]\r\n */\r\n function d(a,b) {\r\n var x = Math.max(0, a[0] - b[0], b[0] - a[1]),\r\n y = Math.max(0, a[2] - b[1], b[1] - a[3])\r\n return x+y;\r\n }\r\n\r\n function setDimensions(array, dimensions, tolerance, useOffset) {\r\n var i = array.length,\r\n offsetMethod = useOffset ? \"offset\" : \"position\"\r\n tolerance = tolerance || 0\r\n\r\n while(i--){\r\n var el = array[i].el ? array[i].el : $(array[i]),\r\n // use fitting method\r\n pos = el[offsetMethod]()\r\n pos.left += parseInt(el.css('margin-left'), 10)\r\n pos.top += parseInt(el.css('margin-top'),10)\r\n dimensions[i] = [\r\n pos.left - tolerance,\r\n pos.left + el.outerWidth() + tolerance,\r\n pos.top - tolerance,\r\n pos.top + el.outerHeight() + tolerance\r\n ]\r\n }\r\n }\r\n\r\n function getRelativePosition(pointer, element) {\r\n var offset = element.offset()\r\n return {\r\n left: pointer.left - offset.left,\r\n top: pointer.top - offset.top\r\n }\r\n }\r\n\r\n function sortByDistanceDesc(dimensions, pointer, lastPointer) {\r\n pointer = [pointer.left, pointer.top]\r\n lastPointer = lastPointer && [lastPointer.left, lastPointer.top]\r\n\r\n var dim,\r\n i = dimensions.length,\r\n distances = []\r\n\r\n while(i--){\r\n dim = dimensions[i]\r\n distances[i] = [i,d(dim,pointer), lastPointer && d(dim, lastPointer)]\r\n }\r\n distances = distances.sort(function (a,b) {\r\n return b[1] - a[1] || b[2] - a[2] || b[0] - a[0]\r\n })\r\n\r\n // last entry is the closest\r\n return distances\r\n }\r\n\r\n function ContainerGroup(options) {\r\n this.options = $.extend({}, groupDefaults, options)\r\n this.containers = []\r\n\r\n if(!this.options.rootGroup){\r\n this.scrollProxy = $.proxy(this.scroll, this)\r\n this.dragProxy = $.proxy(this.drag, this)\r\n this.dropProxy = $.proxy(this.drop, this)\r\n this.placeholder = $(this.options.placeholder)\r\n\r\n if(!options.isValidTarget)\r\n this.options.isValidTarget = undefined\r\n }\r\n }\r\n\r\n ContainerGroup.get = function (options) {\r\n if(!containerGroups[options.group]) {\r\n if(options.group === undefined)\r\n options.group = groupCounter ++\r\n\r\n containerGroups[options.group] = new ContainerGroup(options)\r\n }\r\n\r\n return containerGroups[options.group]\r\n }\r\n\r\n ContainerGroup.prototype = {\r\n dragInit: function (e, itemContainer) {\r\n this.$document = $(itemContainer.el[0].ownerDocument)\r\n\r\n // get item to drag\r\n var closestItem = $(e.target).closest(this.options.itemSelector);\r\n // using the length of this item, prevents the plugin from being started if there is no handle being clicked on.\r\n // this may also be helpful in instantiating multidrag.\r\n if (closestItem.length) {\r\n this.item = closestItem;\r\n this.itemContainer = itemContainer;\r\n if (this.item.is(this.options.exclude) || !this.options.onMousedown(this.item, groupDefaults.onMousedown, e)) {\r\n return;\r\n }\r\n this.setPointer(e);\r\n this.toggleListeners('on');\r\n this.setupDelayTimer();\r\n this.dragInitDone = true;\r\n }\r\n },\r\n drag: function (e) {\r\n if(!this.dragging){\r\n if(!this.distanceMet(e) || !this.delayMet)\r\n return\r\n\r\n this.options.onDragStart(this.item, this.itemContainer, groupDefaults.onDragStart, e)\r\n this.item.before(this.placeholder)\r\n this.dragging = true\r\n }\r\n\r\n this.setPointer(e)\r\n // place item under the cursor\r\n this.options.onDrag(this.item,\r\n getRelativePosition(this.pointer, this.item.offsetParent()),\r\n groupDefaults.onDrag,\r\n e)\r\n\r\n var p = this.getPointer(e),\r\n box = this.sameResultBox,\r\n t = this.options.tolerance\r\n\r\n if(!box || box.top - t > p.top || box.bottom + t < p.top || box.left - t > p.left || box.right + t < p.left)\r\n if(!this.searchValidTarget()){\r\n this.placeholder.detach()\r\n this.lastAppendedItem = undefined\r\n }\r\n },\r\n drop: function (e) {\r\n this.toggleListeners('off')\r\n\r\n this.dragInitDone = false\r\n\r\n if(this.dragging){\r\n // processing Drop, check if placeholder is detached\r\n if(this.placeholder.closest(\"html\")[0]){\r\n this.placeholder.before(this.item).detach()\r\n } else {\r\n this.options.onCancel(this.item, this.itemContainer, groupDefaults.onCancel, e)\r\n }\r\n this.options.onDrop(this.item, this.getContainer(this.item), groupDefaults.onDrop, e)\r\n\r\n // cleanup\r\n this.clearDimensions()\r\n this.clearOffsetParent()\r\n this.lastAppendedItem = this.sameResultBox = undefined\r\n this.dragging = false\r\n }\r\n },\r\n searchValidTarget: function (pointer, lastPointer) {\r\n if(!pointer){\r\n pointer = this.relativePointer || this.pointer\r\n lastPointer = this.lastRelativePointer || this.lastPointer\r\n }\r\n\r\n var distances = sortByDistanceDesc(this.getContainerDimensions(),\r\n pointer,\r\n lastPointer),\r\n i = distances.length\r\n\r\n while(i--){\r\n var index = distances[i][0],\r\n distance = distances[i][1]\r\n\r\n if(!distance || this.options.pullPlaceholder){\r\n var container = this.containers[index]\r\n if(!container.disabled){\r\n if(!this.$getOffsetParent()){\r\n var offsetParent = container.getItemOffsetParent()\r\n pointer = getRelativePosition(pointer, offsetParent)\r\n lastPointer = getRelativePosition(lastPointer, offsetParent)\r\n }\r\n if(container.searchValidTarget(pointer, lastPointer))\r\n return true\r\n }\r\n }\r\n }\r\n if(this.sameResultBox)\r\n this.sameResultBox = undefined\r\n },\r\n movePlaceholder: function (container, item, method, sameResultBox) {\r\n var lastAppendedItem = this.lastAppendedItem\r\n if(!sameResultBox && lastAppendedItem && lastAppendedItem[0] === item[0])\r\n return;\r\n\r\n item[method](this.placeholder)\r\n this.lastAppendedItem = item\r\n this.sameResultBox = sameResultBox\r\n this.options.afterMove(this.placeholder, container, item)\r\n },\r\n getContainerDimensions: function () {\r\n if(!this.containerDimensions)\r\n setDimensions(this.containers, this.containerDimensions = [], this.options.tolerance, !this.$getOffsetParent())\r\n return this.containerDimensions\r\n },\r\n getContainer: function (element) {\r\n return element.closest(this.options.containerSelector).data(pluginName)\r\n },\r\n $getOffsetParent: function () {\r\n if(this.offsetParent === undefined){\r\n var i = this.containers.length - 1,\r\n offsetParent = this.containers[i].getItemOffsetParent()\r\n\r\n if(!this.options.rootGroup){\r\n while(i--){\r\n if(offsetParent[0] != this.containers[i].getItemOffsetParent()[0]){\r\n // If every container has the same offset parent,\r\n // use position() which is relative to this parent,\r\n // otherwise use offset()\r\n // compare #setDimensions\r\n offsetParent = false\r\n break;\r\n }\r\n }\r\n }\r\n\r\n this.offsetParent = offsetParent\r\n }\r\n return this.offsetParent\r\n },\r\n setPointer: function (e) {\r\n var pointer = this.getPointer(e)\r\n\r\n if(this.$getOffsetParent()){\r\n var relativePointer = getRelativePosition(pointer, this.$getOffsetParent())\r\n this.lastRelativePointer = this.relativePointer\r\n this.relativePointer = relativePointer\r\n }\r\n\r\n this.lastPointer = this.pointer\r\n this.pointer = pointer\r\n },\r\n distanceMet: function (e) {\r\n var currentPointer = this.getPointer(e)\r\n return (Math.max(\r\n Math.abs(this.pointer.left - currentPointer.left),\r\n Math.abs(this.pointer.top - currentPointer.top)\r\n ) >= this.options.distance)\r\n },\r\n getPointer: function(e) {\r\n var o = e.originalEvent || e.originalEvent.touches && e.originalEvent.touches[0]\r\n return {\r\n left: e.pageX || o.pageX,\r\n top: e.pageY || o.pageY\r\n }\r\n },\r\n setupDelayTimer: function () {\r\n var that = this\r\n this.delayMet = !this.options.delay\r\n\r\n // init delay timer if needed\r\n if (!this.delayMet) {\r\n clearTimeout(this._mouseDelayTimer);\r\n this._mouseDelayTimer = setTimeout(function() {\r\n that.delayMet = true\r\n }, this.options.delay)\r\n }\r\n },\r\n scroll: function (e) {\r\n this.clearDimensions()\r\n this.clearOffsetParent() // TODO is this needed?\r\n },\r\n toggleListeners: function (method) {\r\n var that = this,\r\n events = ['drag','drop','scroll']\r\n\r\n $.each(events,function (i,event) {\r\n that.$document[method](eventNames[event], that[event + 'Proxy'])\r\n })\r\n },\r\n clearOffsetParent: function () {\r\n this.offsetParent = undefined\r\n },\r\n // Recursively clear container and item dimensions\r\n clearDimensions: function () {\r\n this.traverse(function(object){\r\n object._clearDimensions()\r\n })\r\n },\r\n traverse: function(callback) {\r\n callback(this)\r\n var i = this.containers.length\r\n while(i--){\r\n this.containers[i].traverse(callback)\r\n }\r\n },\r\n _clearDimensions: function(){\r\n this.containerDimensions = undefined\r\n },\r\n _destroy: function () {\r\n containerGroups[this.options.group] = undefined\r\n }\r\n }\r\n\r\n function Container(element, options) {\r\n this.el = element\r\n this.options = $.extend( {}, containerDefaults, options)\r\n\r\n this.group = ContainerGroup.get(this.options)\r\n this.rootGroup = this.options.rootGroup || this.group\r\n this.handle = this.rootGroup.options.handle || this.rootGroup.options.itemSelector\r\n\r\n var itemPath = this.rootGroup.options.itemPath\r\n this.target = itemPath ? this.el.find(itemPath) : this.el\r\n\r\n this.target.on(eventNames.start, this.handle, $.proxy(this.dragInit, this))\r\n\r\n if(this.options.drop)\r\n this.group.containers.push(this)\r\n }\r\n\r\n Container.prototype = {\r\n dragInit: function (e) {\r\n var rootGroup = this.rootGroup\r\n\r\n if( !this.disabled &&\r\n !rootGroup.dragInitDone &&\r\n this.options.drag &&\r\n this.isValidDrag(e)) {\r\n rootGroup.dragInit(e, this)\r\n }\r\n },\r\n isValidDrag: function(e) {\r\n return e.which == 1 ||\r\n e.type == \"touchstart\" && e.originalEvent.touches.length == 1\r\n },\r\n searchValidTarget: function (pointer, lastPointer) {\r\n var distances = sortByDistanceDesc(this.getItemDimensions(),\r\n pointer,\r\n lastPointer),\r\n i = distances.length,\r\n rootGroup = this.rootGroup,\r\n validTarget = !rootGroup.options.isValidTarget ||\r\n rootGroup.options.isValidTarget(rootGroup.item, this)\r\n\r\n if(!i && validTarget){\r\n rootGroup.movePlaceholder(this, this.target, \"append\")\r\n return true\r\n } else\r\n while(i--){\r\n var index = distances[i][0],\r\n distance = distances[i][1]\r\n if(!distance && this.hasChildGroup(index)){\r\n var found = this.getContainerGroup(index).searchValidTarget(pointer, lastPointer)\r\n if(found)\r\n return true\r\n }\r\n else if(validTarget){\r\n this.movePlaceholder(index, pointer)\r\n return true\r\n }\r\n }\r\n },\r\n movePlaceholder: function (index, pointer) {\r\n var item = $(this.items[index]),\r\n dim = this.itemDimensions[index],\r\n method = \"after\",\r\n width = item.outerWidth(),\r\n height = item.outerHeight(),\r\n offset = item.offset(),\r\n sameResultBox = {\r\n left: offset.left,\r\n right: offset.left + width,\r\n top: offset.top,\r\n bottom: offset.top + height\r\n }\r\n if(this.options.vertical){\r\n var yCenter = (dim[2] + dim[3]) / 2,\r\n inUpperHalf = pointer.top <= yCenter\r\n if(inUpperHalf){\r\n method = \"before\"\r\n sameResultBox.bottom -= height / 2\r\n } else\r\n sameResultBox.top += height / 2\r\n } else {\r\n var xCenter = (dim[0] + dim[1]) / 2,\r\n inLeftHalf = pointer.left <= xCenter\r\n if(inLeftHalf){\r\n method = \"before\"\r\n sameResultBox.right -= width / 2\r\n } else\r\n sameResultBox.left += width / 2\r\n }\r\n if(this.hasChildGroup(index))\r\n sameResultBox = emptyBox\r\n this.rootGroup.movePlaceholder(this, item, method, sameResultBox)\r\n },\r\n getItemDimensions: function () {\r\n if(!this.itemDimensions){\r\n this.items = this.$getChildren(this.el, \"item\").filter(\r\n \":not(.\" + this.group.options.placeholderClass + \", .\" + this.group.options.draggedClass + \")\"\r\n ).get()\r\n setDimensions(this.items, this.itemDimensions = [], this.options.tolerance)\r\n }\r\n return this.itemDimensions\r\n },\r\n getItemOffsetParent: function () {\r\n var offsetParent,\r\n el = this.el\r\n // Since el might be empty we have to check el itself and\r\n // can not do something like el.children().first().offsetParent()\r\n if(el.css(\"position\") === \"relative\" || el.css(\"position\") === \"absolute\" || el.css(\"position\") === \"fixed\")\r\n offsetParent = el\r\n else\r\n offsetParent = el.offsetParent()\r\n return offsetParent\r\n },\r\n hasChildGroup: function (index) {\r\n return this.options.nested && this.getContainerGroup(index)\r\n },\r\n getContainerGroup: function (index) {\r\n var childGroup = $.data(this.items[index], subContainerKey)\r\n if( childGroup === undefined){\r\n var childContainers = this.$getChildren(this.items[index], \"container\")\r\n childGroup = false\r\n\r\n if(childContainers[0]){\r\n var options = $.extend({}, this.options, {\r\n rootGroup: this.rootGroup,\r\n group: groupCounter ++\r\n })\r\n childGroup = childContainers[pluginName](options).data(pluginName).group\r\n }\r\n $.data(this.items[index], subContainerKey, childGroup)\r\n }\r\n return childGroup\r\n },\r\n $getChildren: function (parent, type) {\r\n var options = this.rootGroup.options,\r\n path = options[type + \"Path\"],\r\n selector = options[type + \"Selector\"]\r\n\r\n parent = $(parent)\r\n if(path)\r\n parent = parent.find(path)\r\n\r\n return parent.children(selector)\r\n },\r\n _serialize: function (parent, isContainer) {\r\n var that = this,\r\n childType = isContainer ? \"item\" : \"container\",\r\n\r\n children = this.$getChildren(parent, childType).not(this.options.exclude).map(function () {\r\n return that._serialize($(this), !isContainer)\r\n }).get()\r\n\r\n return this.rootGroup.options.serialize(parent, children, isContainer)\r\n },\r\n traverse: function(callback) {\r\n $.each(this.items || [], function(item){\r\n var group = $.data(this, subContainerKey)\r\n if(group)\r\n group.traverse(callback)\r\n });\r\n\r\n callback(this)\r\n },\r\n _clearDimensions: function () {\r\n this.itemDimensions = undefined\r\n },\r\n _destroy: function() {\r\n var that = this;\r\n\r\n this.target.off(eventNames.start, this.handle);\r\n this.el.removeData(pluginName)\r\n\r\n if(this.options.drop)\r\n this.group.containers = $.grep(this.group.containers, function(val){\r\n return val != that\r\n })\r\n\r\n $.each(this.items || [], function(){\r\n $.removeData(this, subContainerKey)\r\n })\r\n }\r\n }\r\n\r\n var API = {\r\n enable: function() {\r\n this.traverse(function(object){\r\n object.disabled = false\r\n })\r\n },\r\n disable: function (){\r\n this.traverse(function(object){\r\n object.disabled = true\r\n })\r\n },\r\n serialize: function () {\r\n return this._serialize(this.el, true)\r\n },\r\n refresh: function() {\r\n this.traverse(function(object){\r\n object._clearDimensions()\r\n })\r\n },\r\n destroy: function () {\r\n this.traverse(function(object){\r\n object._destroy();\r\n })\r\n }\r\n }\r\n\r\n $.extend(Container.prototype, API)\r\n\r\n /**\r\n * jQuery API\r\n *\r\n * Parameters are\r\n * either options on init\r\n * or a method name followed by arguments to pass to the method\r\n */\r\n $.fn[pluginName] = function(methodOrOptions) {\r\n var args = Array.prototype.slice.call(arguments, 1)\r\n\r\n return this.map(function(){\r\n var $t = $(this),\r\n object = $t.data(pluginName)\r\n\r\n if(object && API[methodOrOptions])\r\n return API[methodOrOptions].apply(object, args) || this\r\n else if(!object && (methodOrOptions === undefined ||\r\n typeof methodOrOptions === \"object\"))\r\n $t.data(pluginName, new Container($t, methodOrOptions))\r\n\r\n return this\r\n });\r\n };\r\n\r\n}(jQuery, window, 'sortable');\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvanF1ZXJ5LXNvcnRhYmxlL3NvdXJjZS9qcy9qcXVlcnktc29ydGFibGUuanMuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQztBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4QkFBOEI7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsc0JBQXNCO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4QkFBOEI7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUM7QUFDbkM7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2pxdWVyeS1zb3J0YWJsZS9zb3VyY2UvanMvanF1ZXJ5LXNvcnRhYmxlLmpzPzljOTciXSwic291cmNlc0NvbnRlbnQiOlsiLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbiAqICBqcXVlcnktc29ydGFibGUuanMgdjAuOS4xM1xyXG4gKiAgaHR0cDovL2pvaG5ueS5naXRodWIuY29tL2pxdWVyeS1zb3J0YWJsZS9cclxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbiAqICBDb3B5cmlnaHQgKGMpIDIwMTIgSm9uYXMgdm9uIEFuZHJpYW5cclxuICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbiAqXHJcbiAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXRcclxuICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxyXG4gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodFxyXG4gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXHJcbiAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0XHJcbiAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGVcclxuICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cclxuICogICogVGhlIG5hbWUgb2YgdGhlIGF1dGhvciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzXHJcbiAqICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxyXG4gKlxyXG4gKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCIgQU5EXHJcbiAqICBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRFxyXG4gKiAgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRVxyXG4gKiAgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgPENPUFlSSUdIVCBIT0xERVI+IEJFIExJQUJMRSBGT1IgQU5ZXHJcbiAqICBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xyXG4gKiAgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xyXG4gKiAgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EXHJcbiAqICBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxyXG4gKiAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVNcclxuICogIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxyXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXHJcblxyXG4hZnVuY3Rpb24gKCAkLCB3aW5kb3csIHBsdWdpbk5hbWUsIHVuZGVmaW5lZCl7XHJcbiAgdmFyIGNvbnRhaW5lckRlZmF1bHRzID0ge1xyXG4gICAgLy8gSWYgdHJ1ZSwgaXRlbXMgY2FuIGJlIGRyYWdnZWQgZnJvbSB0aGlzIGNvbnRhaW5lclxyXG4gICAgZHJhZzogdHJ1ZSxcclxuICAgIC8vIElmIHRydWUsIGl0ZW1zIGNhbiBiZSBkcm9wZWQgb250byB0aGlzIGNvbnRhaW5lclxyXG4gICAgZHJvcDogdHJ1ZSxcclxuICAgIC8vIEV4Y2x1ZGUgaXRlbXMgZnJvbSBiZWluZyBkcmFnZ2FibGUsIGlmIHRoZVxyXG4gICAgLy8gc2VsZWN0b3IgbWF0Y2hlcyB0aGUgaXRlbVxyXG4gICAgZXhjbHVkZTogXCJcIixcclxuICAgIC8vIElmIHRydWUsIHNlYXJjaCBmb3IgbmVzdGVkIGNvbnRhaW5lcnMgd2l0aGluIGFuIGl0ZW0uSWYgeW91IG5lc3QgY29udGFpbmVycyxcclxuICAgIC8vIGVpdGhlciB0aGUgb3JpZ2luYWwgc2VsZWN0b3Igd2l0aCB3aGljaCB5b3UgY2FsbCB0aGUgcGx1Z2luIG11c3Qgb25seSBtYXRjaCB0aGUgdG9wIGNvbnRhaW5lcnMsXHJcbiAgICAvLyBvciB5b3UgbmVlZCB0byBzcGVjaWZ5IGEgZ3JvdXAgKHNlZSB0aGUgYm9vdHN0cmFwIG5hdiBleGFtcGxlKVxyXG4gICAgbmVzdGVkOiB0cnVlLFxyXG4gICAgLy8gSWYgdHJ1ZSwgdGhlIGl0ZW1zIGFyZSBhc3N1bWVkIHRvIGJlIGFycmFuZ2VkIHZlcnRpY2FsbHlcclxuICAgIHZlcnRpY2FsOiB0cnVlXHJcbiAgfSwgLy8gZW5kIGNvbnRhaW5lciBkZWZhdWx0c1xyXG4gIGdyb3VwRGVmYXVsdHMgPSB7XHJcbiAgICAvLyBUaGlzIGlzIGV4ZWN1dGVkIGFmdGVyIHRoZSBwbGFjZWhvbGRlciBoYXMgYmVlbiBtb3ZlZC5cclxuICAgIC8vICRjbG9zZXN0SXRlbU9yQ29udGFpbmVyIGNvbnRhaW5zIHRoZSBjbG9zZXN0IGl0ZW0sIHRoZSBwbGFjZWhvbGRlclxyXG4gICAgLy8gaGFzIGJlZW4gcHV0IGF0IG9yIHRoZSBjbG9zZXN0IGVtcHR5IENvbnRhaW5lciwgdGhlIHBsYWNlaG9sZGVyIGhhc1xyXG4gICAgLy8gYmVlbiBhcHBlbmRlZCB0by5cclxuICAgIGFmdGVyTW92ZTogZnVuY3Rpb24gKCRwbGFjZWhvbGRlciwgY29udGFpbmVyLCAkY2xvc2VzdEl0ZW1PckNvbnRhaW5lcikge1xyXG4gICAgfSxcclxuICAgIC8vIFRoZSBleGFjdCBjc3MgcGF0aCBiZXR3ZWVuIHRoZSBjb250YWluZXIgYW5kIGl0cyBpdGVtcywgZS5nLiBcIj4gdGJvZHlcIlxyXG4gICAgY29udGFpbmVyUGF0aDogXCJcIixcclxuICAgIC8vIFRoZSBjc3Mgc2VsZWN0b3Igb2YgdGhlIGNvbnRhaW5lcnNcclxuICAgIGNvbnRhaW5lclNlbGVjdG9yOiBcIm9sLCB1bFwiLFxyXG4gICAgLy8gRGlzdGFuY2UgdGhlIG1vdXNlIGhhcyB0byB0cmF2ZWwgdG8gc3RhcnQgZHJhZ2dpbmdcclxuICAgIGRpc3RhbmNlOiAwLFxyXG4gICAgLy8gVGltZSBpbiBtaWxsaXNlY29uZHMgYWZ0ZXIgbW91c2Vkb3duIHVudGlsIGRyYWdnaW5nIHNob3VsZCBzdGFydC5cclxuICAgIC8vIFRoaXMgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIHByZXZlbnQgdW53YW50ZWQgZHJhZ3Mgd2hlbiBjbGlja2luZyBvbiBhbiBlbGVtZW50LlxyXG4gICAgZGVsYXk6IDAsXHJcbiAgICAvLyBUaGUgY3NzIHNlbGVjdG9yIG9mIHRoZSBkcmFnIGhhbmRsZVxyXG4gICAgaGFuZGxlOiBcIlwiLFxyXG4gICAgLy8gVGhlIGV4YWN0IGNzcyBwYXRoIGJldHdlZW4gdGhlIGl0ZW0gYW5kIGl0cyBzdWJjb250YWluZXJzLlxyXG4gICAgLy8gSXQgc2hvdWxkIG9ubHkgbWF0Y2ggdGhlIGltbWVkaWF0ZSBpdGVtcyBvZiBhIGNvbnRhaW5lci5cclxuICAgIC8vIE5vIGl0ZW0gb2YgYSBzdWJjb250YWluZXIgc2hvdWxkIGJlIG1hdGNoZWQuIEUuZy4gZm9yIG9sPmRpdj5saSB0aGUgaXRlbVBhdGggaXMgXCI+IGRpdlwiXHJcbiAgICBpdGVtUGF0aDogXCJcIixcclxuICAgIC8vIFRoZSBjc3Mgc2VsZWN0b3Igb2YgdGhlIGl0ZW1zXHJcbiAgICBpdGVtU2VsZWN0b3I6IFwibGlcIixcclxuICAgIC8vIFRoZSBjbGFzcyBnaXZlbiB0byBcImJvZHlcIiB3aGlsZSBhbiBpdGVtIGlzIGJlaW5nIGRyYWdnZWRcclxuICAgIGJvZHlDbGFzczogXCJkcmFnZ2luZ1wiLFxyXG4gICAgLy8gVGhlIGNsYXNzIGdpdmluZyB0byBhbiBpdGVtIHdoaWxlIGJlaW5nIGRyYWdnZWRcclxuICAgIGRyYWdnZWRDbGFzczogXCJkcmFnZ2VkXCIsXHJcbiAgICAvLyBDaGVjayBpZiB0aGUgZHJhZ2dlZCBpdGVtIG1heSBiZSBpbnNpZGUgdGhlIGNvbnRhaW5lci5cclxuICAgIC8vIFVzZSB3aXRoIGNhcmUsIHNpbmNlIHRoZSBzZWFyY2ggZm9yIGEgdmFsaWQgY29udGFpbmVyIGVudGFpbHMgYSBkZXB0aCBmaXJzdCBzZWFyY2hcclxuICAgIC8vIGFuZCBtYXkgYmUgcXVpdGUgZXhwZW5zaXZlLlxyXG4gICAgaXNWYWxpZFRhcmdldDogZnVuY3Rpb24gKCRpdGVtLCBjb250YWluZXIpIHtcclxuICAgICAgcmV0dXJuIHRydWVcclxuICAgIH0sXHJcbiAgICAvLyBFeGVjdXRlZCBiZWZvcmUgb25Ecm9wIGlmIHBsYWNlaG9sZGVyIGlzIGRldGFjaGVkLlxyXG4gICAgLy8gVGhpcyBoYXBwZW5zIGlmIHB1bGxQbGFjZWhvbGRlciBpcyBzZXQgdG8gZmFsc2UgYW5kIHRoZSBkcm9wIG9jY3VycyBvdXRzaWRlIGEgY29udGFpbmVyLlxyXG4gICAgb25DYW5jZWw6IGZ1bmN0aW9uICgkaXRlbSwgY29udGFpbmVyLCBfc3VwZXIsIGV2ZW50KSB7XHJcbiAgICB9LFxyXG4gICAgLy8gRXhlY3V0ZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBhIG1vdXNlIG1vdmUgZXZlbnQuXHJcbiAgICAvLyBUaGUgUGxhY2Vob2xkZXIgaGFzIG5vdCBiZWVuIG1vdmVkIHlldC5cclxuICAgIG9uRHJhZzogZnVuY3Rpb24gKCRpdGVtLCBwb3NpdGlvbiwgX3N1cGVyLCBldmVudCkge1xyXG4gICAgICAkaXRlbS5jc3MocG9zaXRpb24pXHJcbiAgICB9LFxyXG4gICAgLy8gQ2FsbGVkIGFmdGVyIHRoZSBkcmFnIGhhcyBiZWVuIHN0YXJ0ZWQsXHJcbiAgICAvLyB0aGF0IGlzIHRoZSBtb3VzZSBidXR0b24gaXMgYmVpbmcgaGVsZCBkb3duIGFuZFxyXG4gICAgLy8gdGhlIG1vdXNlIGlzIG1vdmluZy5cclxuICAgIC8vIFRoZSBjb250YWluZXIgaXMgdGhlIGNsb3Nlc3QgaW5pdGlhbGl6ZWQgY29udGFpbmVyLlxyXG4gICAgLy8gVGhlcmVmb3JlIGl0IG1pZ2h0IG5vdCBiZSB0aGUgY29udGFpbmVyLCB0aGF0IGFjdHVhbGx5IGNvbnRhaW5zIHRoZSBpdGVtLlxyXG4gICAgb25EcmFnU3RhcnQ6IGZ1bmN0aW9uICgkaXRlbSwgY29udGFpbmVyLCBfc3VwZXIsIGV2ZW50KSB7XHJcbiAgICAgICRpdGVtLmNzcyh7XHJcbiAgICAgICAgaGVpZ2h0OiAkaXRlbS5vdXRlckhlaWdodCgpLFxyXG4gICAgICAgIHdpZHRoOiAkaXRlbS5vdXRlcldpZHRoKClcclxuICAgICAgfSlcclxuICAgICAgJGl0ZW0uYWRkQ2xhc3MoY29udGFpbmVyLmdyb3VwLm9wdGlvbnMuZHJhZ2dlZENsYXNzKVxyXG4gICAgICAkKFwiYm9keVwiKS5hZGRDbGFzcyhjb250YWluZXIuZ3JvdXAub3B0aW9ucy5ib2R5Q2xhc3MpXHJcbiAgICB9LFxyXG4gICAgLy8gQ2FsbGVkIHdoZW4gdGhlIG1vdXNlIGJ1dHRvbiBpcyBiZWluZyByZWxlYXNlZFxyXG4gICAgb25Ecm9wOiBmdW5jdGlvbiAoJGl0ZW0sIGNvbnRhaW5lciwgX3N1cGVyLCBldmVudCkge1xyXG4gICAgICAkaXRlbS5yZW1vdmVDbGFzcyhjb250YWluZXIuZ3JvdXAub3B0aW9ucy5kcmFnZ2VkQ2xhc3MpLnJlbW92ZUF0dHIoXCJzdHlsZVwiKVxyXG4gICAgICAkKFwiYm9keVwiKS5yZW1vdmVDbGFzcyhjb250YWluZXIuZ3JvdXAub3B0aW9ucy5ib2R5Q2xhc3MpXHJcbiAgICB9LFxyXG4gICAgLy8gQ2FsbGVkIG9uIG1vdXNlZG93bi4gSWYgZmFsc3kgdmFsdWUgaXMgcmV0dXJuZWQsIHRoZSBkcmFnZ2luZyB3aWxsIG5vdCBzdGFydC5cclxuICAgIC8vIElnbm9yZSBpZiBlbGVtZW50IGNsaWNrZWQgaXMgaW5wdXQsIHNlbGVjdCBvciB0ZXh0YXJlYVxyXG4gICAgb25Nb3VzZWRvd246IGZ1bmN0aW9uICgkaXRlbSwgX3N1cGVyLCBldmVudCkge1xyXG4gICAgICBpZiAoIWV2ZW50LnRhcmdldC5ub2RlTmFtZS5tYXRjaCgvXihpbnB1dHxzZWxlY3R8dGV4dGFyZWEpJC9pKSkge1xyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcclxuICAgICAgICByZXR1cm4gdHJ1ZVxyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgLy8gVGhlIGNsYXNzIG9mIHRoZSBwbGFjZWhvbGRlciAobXVzdCBtYXRjaCBwbGFjZWhvbGRlciBvcHRpb24gbWFya3VwKVxyXG4gICAgcGxhY2Vob2xkZXJDbGFzczogXCJwbGFjZWhvbGRlclwiLFxyXG4gICAgLy8gVGVtcGxhdGUgZm9yIHRoZSBwbGFjZWhvbGRlci4gQ2FuIGJlIGFueSB2YWxpZCBqUXVlcnkgaW5wdXRcclxuICAgIC8vIGUuZy4gYSBzdHJpbmcsIGEgRE9NIGVsZW1lbnQuXHJcbiAgICAvLyBUaGUgcGxhY2Vob2xkZXIgbXVzdCBoYXZlIHRoZSBjbGFzcyBcInBsYWNlaG9sZGVyXCJcclxuICAgIHBsYWNlaG9sZGVyOiAnPGxpIGNsYXNzPVwicGxhY2Vob2xkZXJcIj48L2xpPicsXHJcbiAgICAvLyBJZiB0cnVlLCB0aGUgcG9zaXRpb24gb2YgdGhlIHBsYWNlaG9sZGVyIGlzIGNhbGN1bGF0ZWQgb24gZXZlcnkgbW91c2Vtb3ZlLlxyXG4gICAgLy8gSWYgZmFsc2UsIGl0IGlzIG9ubHkgY2FsY3VsYXRlZCB3aGVuIHRoZSBtb3VzZSBpcyBhYm92ZSBhIGNvbnRhaW5lci5cclxuICAgIHB1bGxQbGFjZWhvbGRlcjogdHJ1ZSxcclxuICAgIC8vIFNwZWNpZmllcyBzZXJpYWxpemF0aW9uIG9mIHRoZSBjb250YWluZXIgZ3JvdXAuXHJcbiAgICAvLyBUaGUgcGFpciAkcGFyZW50LyRjaGlsZHJlbiBpcyBlaXRoZXIgY29udGFpbmVyL2l0ZW1zIG9yIGl0ZW0vc3ViY29udGFpbmVycy5cclxuICAgIHNlcmlhbGl6ZTogZnVuY3Rpb24gKCRwYXJlbnQsICRjaGlsZHJlbiwgcGFyZW50SXNDb250YWluZXIpIHtcclxuICAgICAgdmFyIHJlc3VsdCA9ICQuZXh0ZW5kKHt9LCAkcGFyZW50LmRhdGEoKSlcclxuXHJcbiAgICAgIGlmKHBhcmVudElzQ29udGFpbmVyKVxyXG4gICAgICAgIHJldHVybiBbJGNoaWxkcmVuXVxyXG4gICAgICBlbHNlIGlmICgkY2hpbGRyZW5bMF0pe1xyXG4gICAgICAgIHJlc3VsdC5jaGlsZHJlbiA9ICRjaGlsZHJlblxyXG4gICAgICB9XHJcblxyXG4gICAgICBkZWxldGUgcmVzdWx0LnN1YkNvbnRhaW5lcnNcclxuICAgICAgZGVsZXRlIHJlc3VsdC5zb3J0YWJsZVxyXG5cclxuICAgICAgcmV0dXJuIHJlc3VsdFxyXG4gICAgfSxcclxuICAgIC8vIFNldCB0b2xlcmFuY2Ugd2hpbGUgZHJhZ2dpbmcuIFBvc2l0aXZlIHZhbHVlcyBkZWNyZWFzZSBzZW5zaXRpdml0eSxcclxuICAgIC8vIG5lZ2F0aXZlIHZhbHVlcyBpbmNyZWFzZSBpdC5cclxuICAgIHRvbGVyYW5jZTogMFxyXG4gIH0sIC8vIGVuZCBncm91cCBkZWZhdWx0c1xyXG4gIGNvbnRhaW5lckdyb3VwcyA9IHt9LFxyXG4gIGdyb3VwQ291bnRlciA9IDAsXHJcbiAgZW1wdHlCb3ggPSB7XHJcbiAgICBsZWZ0OiAwLFxyXG4gICAgdG9wOiAwLFxyXG4gICAgYm90dG9tOiAwLFxyXG4gICAgcmlnaHQ6MFxyXG4gIH0sXHJcbiAgZXZlbnROYW1lcyA9IHtcclxuICAgIHN0YXJ0OiBcInRvdWNoc3RhcnQuc29ydGFibGUgbW91c2Vkb3duLnNvcnRhYmxlXCIsXHJcbiAgICBkcm9wOiBcInRvdWNoZW5kLnNvcnRhYmxlIHRvdWNoY2FuY2VsLnNvcnRhYmxlIG1vdXNldXAuc29ydGFibGVcIixcclxuICAgIGRyYWc6IFwidG91Y2htb3ZlLnNvcnRhYmxlIG1vdXNlbW92ZS5zb3J0YWJsZVwiLFxyXG4gICAgc2Nyb2xsOiBcInNjcm9sbC5zb3J0YWJsZVwiXHJcbiAgfSxcclxuICBzdWJDb250YWluZXJLZXkgPSBcInN1YkNvbnRhaW5lcnNcIlxyXG5cclxuICAvKlxyXG4gICAqIGEgaXMgQXJyYXkgW2xlZnQsIHJpZ2h0LCB0b3AsIGJvdHRvbV1cclxuICAgKiBiIGlzIGFycmF5IFtsZWZ0LCB0b3BdXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gZChhLGIpIHtcclxuICAgIHZhciB4ID0gTWF0aC5tYXgoMCwgYVswXSAtIGJbMF0sIGJbMF0gLSBhWzFdKSxcclxuICAgIHkgPSBNYXRoLm1heCgwLCBhWzJdIC0gYlsxXSwgYlsxXSAtIGFbM10pXHJcbiAgICByZXR1cm4geCt5O1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gc2V0RGltZW5zaW9ucyhhcnJheSwgZGltZW5zaW9ucywgdG9sZXJhbmNlLCB1c2VPZmZzZXQpIHtcclxuICAgIHZhciBpID0gYXJyYXkubGVuZ3RoLFxyXG4gICAgb2Zmc2V0TWV0aG9kID0gdXNlT2Zmc2V0ID8gXCJvZmZzZXRcIiA6IFwicG9zaXRpb25cIlxyXG4gICAgdG9sZXJhbmNlID0gdG9sZXJhbmNlIHx8IDBcclxuXHJcbiAgICB3aGlsZShpLS0pe1xyXG4gICAgICB2YXIgZWwgPSBhcnJheVtpXS5lbCA/IGFycmF5W2ldLmVsIDogJChhcnJheVtpXSksXHJcbiAgICAgIC8vIHVzZSBmaXR0aW5nIG1ldGhvZFxyXG4gICAgICBwb3MgPSBlbFtvZmZzZXRNZXRob2RdKClcclxuICAgICAgcG9zLmxlZnQgKz0gcGFyc2VJbnQoZWwuY3NzKCdtYXJnaW4tbGVmdCcpLCAxMClcclxuICAgICAgcG9zLnRvcCArPSBwYXJzZUludChlbC5jc3MoJ21hcmdpbi10b3AnKSwxMClcclxuICAgICAgZGltZW5zaW9uc1tpXSA9IFtcclxuICAgICAgICBwb3MubGVmdCAtIHRvbGVyYW5jZSxcclxuICAgICAgICBwb3MubGVmdCArIGVsLm91dGVyV2lkdGgoKSArIHRvbGVyYW5jZSxcclxuICAgICAgICBwb3MudG9wIC0gdG9sZXJhbmNlLFxyXG4gICAgICAgIHBvcy50b3AgKyBlbC5vdXRlckhlaWdodCgpICsgdG9sZXJhbmNlXHJcbiAgICAgIF1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGdldFJlbGF0aXZlUG9zaXRpb24ocG9pbnRlciwgZWxlbWVudCkge1xyXG4gICAgdmFyIG9mZnNldCA9IGVsZW1lbnQub2Zmc2V0KClcclxuICAgIHJldHVybiB7XHJcbiAgICAgIGxlZnQ6IHBvaW50ZXIubGVmdCAtIG9mZnNldC5sZWZ0LFxyXG4gICAgICB0b3A6IHBvaW50ZXIudG9wIC0gb2Zmc2V0LnRvcFxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gc29ydEJ5RGlzdGFuY2VEZXNjKGRpbWVuc2lvbnMsIHBvaW50ZXIsIGxhc3RQb2ludGVyKSB7XHJcbiAgICBwb2ludGVyID0gW3BvaW50ZXIubGVmdCwgcG9pbnRlci50b3BdXHJcbiAgICBsYXN0UG9pbnRlciA9IGxhc3RQb2ludGVyICYmIFtsYXN0UG9pbnRlci5sZWZ0LCBsYXN0UG9pbnRlci50b3BdXHJcblxyXG4gICAgdmFyIGRpbSxcclxuICAgIGkgPSBkaW1lbnNpb25zLmxlbmd0aCxcclxuICAgIGRpc3RhbmNlcyA9IFtdXHJcblxyXG4gICAgd2hpbGUoaS0tKXtcclxuICAgICAgZGltID0gZGltZW5zaW9uc1tpXVxyXG4gICAgICBkaXN0YW5jZXNbaV0gPSBbaSxkKGRpbSxwb2ludGVyKSwgbGFzdFBvaW50ZXIgJiYgZChkaW0sIGxhc3RQb2ludGVyKV1cclxuICAgIH1cclxuICAgIGRpc3RhbmNlcyA9IGRpc3RhbmNlcy5zb3J0KGZ1bmN0aW9uICAoYSxiKSB7XHJcbiAgICAgIHJldHVybiBiWzFdIC0gYVsxXSB8fCBiWzJdIC0gYVsyXSB8fCBiWzBdIC0gYVswXVxyXG4gICAgfSlcclxuXHJcbiAgICAvLyBsYXN0IGVudHJ5IGlzIHRoZSBjbG9zZXN0XHJcbiAgICByZXR1cm4gZGlzdGFuY2VzXHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBDb250YWluZXJHcm91cChvcHRpb25zKSB7XHJcbiAgICB0aGlzLm9wdGlvbnMgPSAkLmV4dGVuZCh7fSwgZ3JvdXBEZWZhdWx0cywgb3B0aW9ucylcclxuICAgIHRoaXMuY29udGFpbmVycyA9IFtdXHJcblxyXG4gICAgaWYoIXRoaXMub3B0aW9ucy5yb290R3JvdXApe1xyXG4gICAgICB0aGlzLnNjcm9sbFByb3h5ID0gJC5wcm94eSh0aGlzLnNjcm9sbCwgdGhpcylcclxuICAgICAgdGhpcy5kcmFnUHJveHkgPSAkLnByb3h5KHRoaXMuZHJhZywgdGhpcylcclxuICAgICAgdGhpcy5kcm9wUHJveHkgPSAkLnByb3h5KHRoaXMuZHJvcCwgdGhpcylcclxuICAgICAgdGhpcy5wbGFjZWhvbGRlciA9ICQodGhpcy5vcHRpb25zLnBsYWNlaG9sZGVyKVxyXG5cclxuICAgICAgaWYoIW9wdGlvbnMuaXNWYWxpZFRhcmdldClcclxuICAgICAgICB0aGlzLm9wdGlvbnMuaXNWYWxpZFRhcmdldCA9IHVuZGVmaW5lZFxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQ29udGFpbmVyR3JvdXAuZ2V0ID0gZnVuY3Rpb24gIChvcHRpb25zKSB7XHJcbiAgICBpZighY29udGFpbmVyR3JvdXBzW29wdGlvbnMuZ3JvdXBdKSB7XHJcbiAgICAgIGlmKG9wdGlvbnMuZ3JvdXAgPT09IHVuZGVmaW5lZClcclxuICAgICAgICBvcHRpb25zLmdyb3VwID0gZ3JvdXBDb3VudGVyICsrXHJcblxyXG4gICAgICBjb250YWluZXJHcm91cHNbb3B0aW9ucy5ncm91cF0gPSBuZXcgQ29udGFpbmVyR3JvdXAob3B0aW9ucylcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY29udGFpbmVyR3JvdXBzW29wdGlvbnMuZ3JvdXBdXHJcbiAgfVxyXG5cclxuICBDb250YWluZXJHcm91cC5wcm90b3R5cGUgPSB7XHJcbiAgICBkcmFnSW5pdDogZnVuY3Rpb24gIChlLCBpdGVtQ29udGFpbmVyKSB7XHJcbiAgICAgIHRoaXMuJGRvY3VtZW50ID0gJChpdGVtQ29udGFpbmVyLmVsWzBdLm93bmVyRG9jdW1lbnQpXHJcblxyXG4gICAgICAvLyBnZXQgaXRlbSB0byBkcmFnXHJcbiAgICAgIHZhciBjbG9zZXN0SXRlbSA9ICQoZS50YXJnZXQpLmNsb3Nlc3QodGhpcy5vcHRpb25zLml0ZW1TZWxlY3Rvcik7XHJcbiAgICAgIC8vIHVzaW5nIHRoZSBsZW5ndGggb2YgdGhpcyBpdGVtLCBwcmV2ZW50cyB0aGUgcGx1Z2luIGZyb20gYmVpbmcgc3RhcnRlZCBpZiB0aGVyZSBpcyBubyBoYW5kbGUgYmVpbmcgY2xpY2tlZCBvbi5cclxuICAgICAgLy8gdGhpcyBtYXkgYWxzbyBiZSBoZWxwZnVsIGluIGluc3RhbnRpYXRpbmcgbXVsdGlkcmFnLlxyXG4gICAgICBpZiAoY2xvc2VzdEl0ZW0ubGVuZ3RoKSB7XHJcbiAgICAgICAgdGhpcy5pdGVtID0gY2xvc2VzdEl0ZW07XHJcbiAgICAgICAgdGhpcy5pdGVtQ29udGFpbmVyID0gaXRlbUNvbnRhaW5lcjtcclxuICAgICAgICBpZiAodGhpcy5pdGVtLmlzKHRoaXMub3B0aW9ucy5leGNsdWRlKSB8fCAhdGhpcy5vcHRpb25zLm9uTW91c2Vkb3duKHRoaXMuaXRlbSwgZ3JvdXBEZWZhdWx0cy5vbk1vdXNlZG93biwgZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNldFBvaW50ZXIoZSk7XHJcbiAgICAgICAgdGhpcy50b2dnbGVMaXN0ZW5lcnMoJ29uJyk7XHJcbiAgICAgICAgdGhpcy5zZXR1cERlbGF5VGltZXIoKTtcclxuICAgICAgICB0aGlzLmRyYWdJbml0RG9uZSA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH0sXHJcbiAgICBkcmFnOiBmdW5jdGlvbiAgKGUpIHtcclxuICAgICAgaWYoIXRoaXMuZHJhZ2dpbmcpe1xyXG4gICAgICAgIGlmKCF0aGlzLmRpc3RhbmNlTWV0KGUpIHx8ICF0aGlzLmRlbGF5TWV0KVxyXG4gICAgICAgICAgcmV0dXJuXHJcblxyXG4gICAgICAgIHRoaXMub3B0aW9ucy5vbkRyYWdTdGFydCh0aGlzLml0ZW0sIHRoaXMuaXRlbUNvbnRhaW5lciwgZ3JvdXBEZWZhdWx0cy5vbkRyYWdTdGFydCwgZSlcclxuICAgICAgICB0aGlzLml0ZW0uYmVmb3JlKHRoaXMucGxhY2Vob2xkZXIpXHJcbiAgICAgICAgdGhpcy5kcmFnZ2luZyA9IHRydWVcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5zZXRQb2ludGVyKGUpXHJcbiAgICAgIC8vIHBsYWNlIGl0ZW0gdW5kZXIgdGhlIGN1cnNvclxyXG4gICAgICB0aGlzLm9wdGlvbnMub25EcmFnKHRoaXMuaXRlbSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRSZWxhdGl2ZVBvc2l0aW9uKHRoaXMucG9pbnRlciwgdGhpcy5pdGVtLm9mZnNldFBhcmVudCgpKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cERlZmF1bHRzLm9uRHJhZyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBlKVxyXG5cclxuICAgICAgdmFyIHAgPSB0aGlzLmdldFBvaW50ZXIoZSksXHJcbiAgICAgIGJveCA9IHRoaXMuc2FtZVJlc3VsdEJveCxcclxuICAgICAgdCA9IHRoaXMub3B0aW9ucy50b2xlcmFuY2VcclxuXHJcbiAgICAgIGlmKCFib3ggfHwgYm94LnRvcCAtIHQgPiBwLnRvcCB8fCBib3guYm90dG9tICsgdCA8IHAudG9wIHx8IGJveC5sZWZ0IC0gdCA+IHAubGVmdCB8fCBib3gucmlnaHQgKyB0IDwgcC5sZWZ0KVxyXG4gICAgICAgIGlmKCF0aGlzLnNlYXJjaFZhbGlkVGFyZ2V0KCkpe1xyXG4gICAgICAgICAgdGhpcy5wbGFjZWhvbGRlci5kZXRhY2goKVxyXG4gICAgICAgICAgdGhpcy5sYXN0QXBwZW5kZWRJdGVtID0gdW5kZWZpbmVkXHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIGRyb3A6IGZ1bmN0aW9uICAoZSkge1xyXG4gICAgICB0aGlzLnRvZ2dsZUxpc3RlbmVycygnb2ZmJylcclxuXHJcbiAgICAgIHRoaXMuZHJhZ0luaXREb25lID0gZmFsc2VcclxuXHJcbiAgICAgIGlmKHRoaXMuZHJhZ2dpbmcpe1xyXG4gICAgICAgIC8vIHByb2Nlc3NpbmcgRHJvcCwgY2hlY2sgaWYgcGxhY2Vob2xkZXIgaXMgZGV0YWNoZWRcclxuICAgICAgICBpZih0aGlzLnBsYWNlaG9sZGVyLmNsb3Nlc3QoXCJodG1sXCIpWzBdKXtcclxuICAgICAgICAgIHRoaXMucGxhY2Vob2xkZXIuYmVmb3JlKHRoaXMuaXRlbSkuZGV0YWNoKClcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5vcHRpb25zLm9uQ2FuY2VsKHRoaXMuaXRlbSwgdGhpcy5pdGVtQ29udGFpbmVyLCBncm91cERlZmF1bHRzLm9uQ2FuY2VsLCBlKVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm9wdGlvbnMub25Ecm9wKHRoaXMuaXRlbSwgdGhpcy5nZXRDb250YWluZXIodGhpcy5pdGVtKSwgZ3JvdXBEZWZhdWx0cy5vbkRyb3AsIGUpXHJcblxyXG4gICAgICAgIC8vIGNsZWFudXBcclxuICAgICAgICB0aGlzLmNsZWFyRGltZW5zaW9ucygpXHJcbiAgICAgICAgdGhpcy5jbGVhck9mZnNldFBhcmVudCgpXHJcbiAgICAgICAgdGhpcy5sYXN0QXBwZW5kZWRJdGVtID0gdGhpcy5zYW1lUmVzdWx0Qm94ID0gdW5kZWZpbmVkXHJcbiAgICAgICAgdGhpcy5kcmFnZ2luZyA9IGZhbHNlXHJcbiAgICAgIH1cclxuICAgIH0sXHJcbiAgICBzZWFyY2hWYWxpZFRhcmdldDogZnVuY3Rpb24gIChwb2ludGVyLCBsYXN0UG9pbnRlcikge1xyXG4gICAgICBpZighcG9pbnRlcil7XHJcbiAgICAgICAgcG9pbnRlciA9IHRoaXMucmVsYXRpdmVQb2ludGVyIHx8IHRoaXMucG9pbnRlclxyXG4gICAgICAgIGxhc3RQb2ludGVyID0gdGhpcy5sYXN0UmVsYXRpdmVQb2ludGVyIHx8IHRoaXMubGFzdFBvaW50ZXJcclxuICAgICAgfVxyXG5cclxuICAgICAgdmFyIGRpc3RhbmNlcyA9IHNvcnRCeURpc3RhbmNlRGVzYyh0aGlzLmdldENvbnRhaW5lckRpbWVuc2lvbnMoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludGVyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RQb2ludGVyKSxcclxuICAgICAgaSA9IGRpc3RhbmNlcy5sZW5ndGhcclxuXHJcbiAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgdmFyIGluZGV4ID0gZGlzdGFuY2VzW2ldWzBdLFxyXG4gICAgICAgIGRpc3RhbmNlID0gZGlzdGFuY2VzW2ldWzFdXHJcblxyXG4gICAgICAgIGlmKCFkaXN0YW5jZSB8fCB0aGlzLm9wdGlvbnMucHVsbFBsYWNlaG9sZGVyKXtcclxuICAgICAgICAgIHZhciBjb250YWluZXIgPSB0aGlzLmNvbnRhaW5lcnNbaW5kZXhdXHJcbiAgICAgICAgICBpZighY29udGFpbmVyLmRpc2FibGVkKXtcclxuICAgICAgICAgICAgaWYoIXRoaXMuJGdldE9mZnNldFBhcmVudCgpKXtcclxuICAgICAgICAgICAgICB2YXIgb2Zmc2V0UGFyZW50ID0gY29udGFpbmVyLmdldEl0ZW1PZmZzZXRQYXJlbnQoKVxyXG4gICAgICAgICAgICAgIHBvaW50ZXIgPSBnZXRSZWxhdGl2ZVBvc2l0aW9uKHBvaW50ZXIsIG9mZnNldFBhcmVudClcclxuICAgICAgICAgICAgICBsYXN0UG9pbnRlciA9IGdldFJlbGF0aXZlUG9zaXRpb24obGFzdFBvaW50ZXIsIG9mZnNldFBhcmVudClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZihjb250YWluZXIuc2VhcmNoVmFsaWRUYXJnZXQocG9pbnRlciwgbGFzdFBvaW50ZXIpKVxyXG4gICAgICAgICAgICAgIHJldHVybiB0cnVlXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmKHRoaXMuc2FtZVJlc3VsdEJveClcclxuICAgICAgICB0aGlzLnNhbWVSZXN1bHRCb3ggPSB1bmRlZmluZWRcclxuICAgIH0sXHJcbiAgICBtb3ZlUGxhY2Vob2xkZXI6IGZ1bmN0aW9uICAoY29udGFpbmVyLCBpdGVtLCBtZXRob2QsIHNhbWVSZXN1bHRCb3gpIHtcclxuICAgICAgdmFyIGxhc3RBcHBlbmRlZEl0ZW0gPSB0aGlzLmxhc3RBcHBlbmRlZEl0ZW1cclxuICAgICAgaWYoIXNhbWVSZXN1bHRCb3ggJiYgbGFzdEFwcGVuZGVkSXRlbSAmJiBsYXN0QXBwZW5kZWRJdGVtWzBdID09PSBpdGVtWzBdKVxyXG4gICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgIGl0ZW1bbWV0aG9kXSh0aGlzLnBsYWNlaG9sZGVyKVxyXG4gICAgICB0aGlzLmxhc3RBcHBlbmRlZEl0ZW0gPSBpdGVtXHJcbiAgICAgIHRoaXMuc2FtZVJlc3VsdEJveCA9IHNhbWVSZXN1bHRCb3hcclxuICAgICAgdGhpcy5vcHRpb25zLmFmdGVyTW92ZSh0aGlzLnBsYWNlaG9sZGVyLCBjb250YWluZXIsIGl0ZW0pXHJcbiAgICB9LFxyXG4gICAgZ2V0Q29udGFpbmVyRGltZW5zaW9uczogZnVuY3Rpb24gICgpIHtcclxuICAgICAgaWYoIXRoaXMuY29udGFpbmVyRGltZW5zaW9ucylcclxuICAgICAgICBzZXREaW1lbnNpb25zKHRoaXMuY29udGFpbmVycywgdGhpcy5jb250YWluZXJEaW1lbnNpb25zID0gW10sIHRoaXMub3B0aW9ucy50b2xlcmFuY2UsICF0aGlzLiRnZXRPZmZzZXRQYXJlbnQoKSlcclxuICAgICAgcmV0dXJuIHRoaXMuY29udGFpbmVyRGltZW5zaW9uc1xyXG4gICAgfSxcclxuICAgIGdldENvbnRhaW5lcjogZnVuY3Rpb24gIChlbGVtZW50KSB7XHJcbiAgICAgIHJldHVybiBlbGVtZW50LmNsb3Nlc3QodGhpcy5vcHRpb25zLmNvbnRhaW5lclNlbGVjdG9yKS5kYXRhKHBsdWdpbk5hbWUpXHJcbiAgICB9LFxyXG4gICAgJGdldE9mZnNldFBhcmVudDogZnVuY3Rpb24gICgpIHtcclxuICAgICAgaWYodGhpcy5vZmZzZXRQYXJlbnQgPT09IHVuZGVmaW5lZCl7XHJcbiAgICAgICAgdmFyIGkgPSB0aGlzLmNvbnRhaW5lcnMubGVuZ3RoIC0gMSxcclxuICAgICAgICBvZmZzZXRQYXJlbnQgPSB0aGlzLmNvbnRhaW5lcnNbaV0uZ2V0SXRlbU9mZnNldFBhcmVudCgpXHJcblxyXG4gICAgICAgIGlmKCF0aGlzLm9wdGlvbnMucm9vdEdyb3VwKXtcclxuICAgICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICAgIGlmKG9mZnNldFBhcmVudFswXSAhPSB0aGlzLmNvbnRhaW5lcnNbaV0uZ2V0SXRlbU9mZnNldFBhcmVudCgpWzBdKXtcclxuICAgICAgICAgICAgICAvLyBJZiBldmVyeSBjb250YWluZXIgaGFzIHRoZSBzYW1lIG9mZnNldCBwYXJlbnQsXHJcbiAgICAgICAgICAgICAgLy8gdXNlIHBvc2l0aW9uKCkgd2hpY2ggaXMgcmVsYXRpdmUgdG8gdGhpcyBwYXJlbnQsXHJcbiAgICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIHVzZSBvZmZzZXQoKVxyXG4gICAgICAgICAgICAgIC8vIGNvbXBhcmUgI3NldERpbWVuc2lvbnNcclxuICAgICAgICAgICAgICBvZmZzZXRQYXJlbnQgPSBmYWxzZVxyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLm9mZnNldFBhcmVudCA9IG9mZnNldFBhcmVudFxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB0aGlzLm9mZnNldFBhcmVudFxyXG4gICAgfSxcclxuICAgIHNldFBvaW50ZXI6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgIHZhciBwb2ludGVyID0gdGhpcy5nZXRQb2ludGVyKGUpXHJcblxyXG4gICAgICBpZih0aGlzLiRnZXRPZmZzZXRQYXJlbnQoKSl7XHJcbiAgICAgICAgdmFyIHJlbGF0aXZlUG9pbnRlciA9IGdldFJlbGF0aXZlUG9zaXRpb24ocG9pbnRlciwgdGhpcy4kZ2V0T2Zmc2V0UGFyZW50KCkpXHJcbiAgICAgICAgdGhpcy5sYXN0UmVsYXRpdmVQb2ludGVyID0gdGhpcy5yZWxhdGl2ZVBvaW50ZXJcclxuICAgICAgICB0aGlzLnJlbGF0aXZlUG9pbnRlciA9IHJlbGF0aXZlUG9pbnRlclxyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmxhc3RQb2ludGVyID0gdGhpcy5wb2ludGVyXHJcbiAgICAgIHRoaXMucG9pbnRlciA9IHBvaW50ZXJcclxuICAgIH0sXHJcbiAgICBkaXN0YW5jZU1ldDogZnVuY3Rpb24gKGUpIHtcclxuICAgICAgdmFyIGN1cnJlbnRQb2ludGVyID0gdGhpcy5nZXRQb2ludGVyKGUpXHJcbiAgICAgIHJldHVybiAoTWF0aC5tYXgoXHJcbiAgICAgICAgTWF0aC5hYnModGhpcy5wb2ludGVyLmxlZnQgLSBjdXJyZW50UG9pbnRlci5sZWZ0KSxcclxuICAgICAgICBNYXRoLmFicyh0aGlzLnBvaW50ZXIudG9wIC0gY3VycmVudFBvaW50ZXIudG9wKVxyXG4gICAgICApID49IHRoaXMub3B0aW9ucy5kaXN0YW5jZSlcclxuICAgIH0sXHJcbiAgICBnZXRQb2ludGVyOiBmdW5jdGlvbihlKSB7XHJcbiAgICAgIHZhciBvID0gZS5vcmlnaW5hbEV2ZW50IHx8IGUub3JpZ2luYWxFdmVudC50b3VjaGVzICYmIGUub3JpZ2luYWxFdmVudC50b3VjaGVzWzBdXHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgbGVmdDogZS5wYWdlWCB8fCBvLnBhZ2VYLFxyXG4gICAgICAgIHRvcDogZS5wYWdlWSB8fCBvLnBhZ2VZXHJcbiAgICAgIH1cclxuICAgIH0sXHJcbiAgICBzZXR1cERlbGF5VGltZXI6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgdmFyIHRoYXQgPSB0aGlzXHJcbiAgICAgIHRoaXMuZGVsYXlNZXQgPSAhdGhpcy5vcHRpb25zLmRlbGF5XHJcblxyXG4gICAgICAvLyBpbml0IGRlbGF5IHRpbWVyIGlmIG5lZWRlZFxyXG4gICAgICBpZiAoIXRoaXMuZGVsYXlNZXQpIHtcclxuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fbW91c2VEZWxheVRpbWVyKTtcclxuICAgICAgICB0aGlzLl9tb3VzZURlbGF5VGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgdGhhdC5kZWxheU1ldCA9IHRydWVcclxuICAgICAgICB9LCB0aGlzLm9wdGlvbnMuZGVsYXkpXHJcbiAgICAgIH1cclxuICAgIH0sXHJcbiAgICBzY3JvbGw6IGZ1bmN0aW9uICAoZSkge1xyXG4gICAgICB0aGlzLmNsZWFyRGltZW5zaW9ucygpXHJcbiAgICAgIHRoaXMuY2xlYXJPZmZzZXRQYXJlbnQoKSAvLyBUT0RPIGlzIHRoaXMgbmVlZGVkP1xyXG4gICAgfSxcclxuICAgIHRvZ2dsZUxpc3RlbmVyczogZnVuY3Rpb24gKG1ldGhvZCkge1xyXG4gICAgICB2YXIgdGhhdCA9IHRoaXMsXHJcbiAgICAgIGV2ZW50cyA9IFsnZHJhZycsJ2Ryb3AnLCdzY3JvbGwnXVxyXG5cclxuICAgICAgJC5lYWNoKGV2ZW50cyxmdW5jdGlvbiAgKGksZXZlbnQpIHtcclxuICAgICAgICB0aGF0LiRkb2N1bWVudFttZXRob2RdKGV2ZW50TmFtZXNbZXZlbnRdLCB0aGF0W2V2ZW50ICsgJ1Byb3h5J10pXHJcbiAgICAgIH0pXHJcbiAgICB9LFxyXG4gICAgY2xlYXJPZmZzZXRQYXJlbnQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgdGhpcy5vZmZzZXRQYXJlbnQgPSB1bmRlZmluZWRcclxuICAgIH0sXHJcbiAgICAvLyBSZWN1cnNpdmVseSBjbGVhciBjb250YWluZXIgYW5kIGl0ZW0gZGltZW5zaW9uc1xyXG4gICAgY2xlYXJEaW1lbnNpb25zOiBmdW5jdGlvbiAgKCkge1xyXG4gICAgICB0aGlzLnRyYXZlcnNlKGZ1bmN0aW9uKG9iamVjdCl7XHJcbiAgICAgICAgb2JqZWN0Ll9jbGVhckRpbWVuc2lvbnMoKVxyXG4gICAgICB9KVxyXG4gICAgfSxcclxuICAgIHRyYXZlcnNlOiBmdW5jdGlvbihjYWxsYmFjaykge1xyXG4gICAgICBjYWxsYmFjayh0aGlzKVxyXG4gICAgICB2YXIgaSA9IHRoaXMuY29udGFpbmVycy5sZW5ndGhcclxuICAgICAgd2hpbGUoaS0tKXtcclxuICAgICAgICB0aGlzLmNvbnRhaW5lcnNbaV0udHJhdmVyc2UoY2FsbGJhY2spXHJcbiAgICAgIH1cclxuICAgIH0sXHJcbiAgICBfY2xlYXJEaW1lbnNpb25zOiBmdW5jdGlvbigpe1xyXG4gICAgICB0aGlzLmNvbnRhaW5lckRpbWVuc2lvbnMgPSB1bmRlZmluZWRcclxuICAgIH0sXHJcbiAgICBfZGVzdHJveTogZnVuY3Rpb24gKCkge1xyXG4gICAgICBjb250YWluZXJHcm91cHNbdGhpcy5vcHRpb25zLmdyb3VwXSA9IHVuZGVmaW5lZFxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gQ29udGFpbmVyKGVsZW1lbnQsIG9wdGlvbnMpIHtcclxuICAgIHRoaXMuZWwgPSBlbGVtZW50XHJcbiAgICB0aGlzLm9wdGlvbnMgPSAkLmV4dGVuZCgge30sIGNvbnRhaW5lckRlZmF1bHRzLCBvcHRpb25zKVxyXG5cclxuICAgIHRoaXMuZ3JvdXAgPSBDb250YWluZXJHcm91cC5nZXQodGhpcy5vcHRpb25zKVxyXG4gICAgdGhpcy5yb290R3JvdXAgPSB0aGlzLm9wdGlvbnMucm9vdEdyb3VwIHx8IHRoaXMuZ3JvdXBcclxuICAgIHRoaXMuaGFuZGxlID0gdGhpcy5yb290R3JvdXAub3B0aW9ucy5oYW5kbGUgfHwgdGhpcy5yb290R3JvdXAub3B0aW9ucy5pdGVtU2VsZWN0b3JcclxuXHJcbiAgICB2YXIgaXRlbVBhdGggPSB0aGlzLnJvb3RHcm91cC5vcHRpb25zLml0ZW1QYXRoXHJcbiAgICB0aGlzLnRhcmdldCA9IGl0ZW1QYXRoID8gdGhpcy5lbC5maW5kKGl0ZW1QYXRoKSA6IHRoaXMuZWxcclxuXHJcbiAgICB0aGlzLnRhcmdldC5vbihldmVudE5hbWVzLnN0YXJ0LCB0aGlzLmhhbmRsZSwgJC5wcm94eSh0aGlzLmRyYWdJbml0LCB0aGlzKSlcclxuXHJcbiAgICBpZih0aGlzLm9wdGlvbnMuZHJvcClcclxuICAgICAgdGhpcy5ncm91cC5jb250YWluZXJzLnB1c2godGhpcylcclxuICB9XHJcblxyXG4gIENvbnRhaW5lci5wcm90b3R5cGUgPSB7XHJcbiAgICBkcmFnSW5pdDogZnVuY3Rpb24gIChlKSB7XHJcbiAgICAgIHZhciByb290R3JvdXAgPSB0aGlzLnJvb3RHcm91cFxyXG5cclxuICAgICAgaWYoICF0aGlzLmRpc2FibGVkICYmXHJcbiAgICAgICAgICAhcm9vdEdyb3VwLmRyYWdJbml0RG9uZSAmJlxyXG4gICAgICAgICAgdGhpcy5vcHRpb25zLmRyYWcgJiZcclxuICAgICAgICAgIHRoaXMuaXNWYWxpZERyYWcoZSkpIHtcclxuICAgICAgICByb290R3JvdXAuZHJhZ0luaXQoZSwgdGhpcylcclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIGlzVmFsaWREcmFnOiBmdW5jdGlvbihlKSB7XHJcbiAgICAgIHJldHVybiBlLndoaWNoID09IDEgfHxcclxuICAgICAgICBlLnR5cGUgPT0gXCJ0b3VjaHN0YXJ0XCIgJiYgZS5vcmlnaW5hbEV2ZW50LnRvdWNoZXMubGVuZ3RoID09IDFcclxuICAgIH0sXHJcbiAgICBzZWFyY2hWYWxpZFRhcmdldDogZnVuY3Rpb24gIChwb2ludGVyLCBsYXN0UG9pbnRlcikge1xyXG4gICAgICB2YXIgZGlzdGFuY2VzID0gc29ydEJ5RGlzdGFuY2VEZXNjKHRoaXMuZ2V0SXRlbURpbWVuc2lvbnMoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludGVyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RQb2ludGVyKSxcclxuICAgICAgaSA9IGRpc3RhbmNlcy5sZW5ndGgsXHJcbiAgICAgIHJvb3RHcm91cCA9IHRoaXMucm9vdEdyb3VwLFxyXG4gICAgICB2YWxpZFRhcmdldCA9ICFyb290R3JvdXAub3B0aW9ucy5pc1ZhbGlkVGFyZ2V0IHx8XHJcbiAgICAgICAgcm9vdEdyb3VwLm9wdGlvbnMuaXNWYWxpZFRhcmdldChyb290R3JvdXAuaXRlbSwgdGhpcylcclxuXHJcbiAgICAgIGlmKCFpICYmIHZhbGlkVGFyZ2V0KXtcclxuICAgICAgICByb290R3JvdXAubW92ZVBsYWNlaG9sZGVyKHRoaXMsIHRoaXMudGFyZ2V0LCBcImFwcGVuZFwiKVxyXG4gICAgICAgIHJldHVybiB0cnVlXHJcbiAgICAgIH0gZWxzZVxyXG4gICAgICAgIHdoaWxlKGktLSl7XHJcbiAgICAgICAgICB2YXIgaW5kZXggPSBkaXN0YW5jZXNbaV1bMF0sXHJcbiAgICAgICAgICBkaXN0YW5jZSA9IGRpc3RhbmNlc1tpXVsxXVxyXG4gICAgICAgICAgaWYoIWRpc3RhbmNlICYmIHRoaXMuaGFzQ2hpbGRHcm91cChpbmRleCkpe1xyXG4gICAgICAgICAgICB2YXIgZm91bmQgPSB0aGlzLmdldENvbnRhaW5lckdyb3VwKGluZGV4KS5zZWFyY2hWYWxpZFRhcmdldChwb2ludGVyLCBsYXN0UG9pbnRlcilcclxuICAgICAgICAgICAgaWYoZm91bmQpXHJcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWVcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2UgaWYodmFsaWRUYXJnZXQpe1xyXG4gICAgICAgICAgICB0aGlzLm1vdmVQbGFjZWhvbGRlcihpbmRleCwgcG9pbnRlcilcclxuICAgICAgICAgICAgcmV0dXJuIHRydWVcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgbW92ZVBsYWNlaG9sZGVyOiBmdW5jdGlvbiAgKGluZGV4LCBwb2ludGVyKSB7XHJcbiAgICAgIHZhciBpdGVtID0gJCh0aGlzLml0ZW1zW2luZGV4XSksXHJcbiAgICAgIGRpbSA9IHRoaXMuaXRlbURpbWVuc2lvbnNbaW5kZXhdLFxyXG4gICAgICBtZXRob2QgPSBcImFmdGVyXCIsXHJcbiAgICAgIHdpZHRoID0gaXRlbS5vdXRlcldpZHRoKCksXHJcbiAgICAgIGhlaWdodCA9IGl0ZW0ub3V0ZXJIZWlnaHQoKSxcclxuICAgICAgb2Zmc2V0ID0gaXRlbS5vZmZzZXQoKSxcclxuICAgICAgc2FtZVJlc3VsdEJveCA9IHtcclxuICAgICAgICBsZWZ0OiBvZmZzZXQubGVmdCxcclxuICAgICAgICByaWdodDogb2Zmc2V0LmxlZnQgKyB3aWR0aCxcclxuICAgICAgICB0b3A6IG9mZnNldC50b3AsXHJcbiAgICAgICAgYm90dG9tOiBvZmZzZXQudG9wICsgaGVpZ2h0XHJcbiAgICAgIH1cclxuICAgICAgaWYodGhpcy5vcHRpb25zLnZlcnRpY2FsKXtcclxuICAgICAgICB2YXIgeUNlbnRlciA9IChkaW1bMl0gKyBkaW1bM10pIC8gMixcclxuICAgICAgICBpblVwcGVySGFsZiA9IHBvaW50ZXIudG9wIDw9IHlDZW50ZXJcclxuICAgICAgICBpZihpblVwcGVySGFsZil7XHJcbiAgICAgICAgICBtZXRob2QgPSBcImJlZm9yZVwiXHJcbiAgICAgICAgICBzYW1lUmVzdWx0Qm94LmJvdHRvbSAtPSBoZWlnaHQgLyAyXHJcbiAgICAgICAgfSBlbHNlXHJcbiAgICAgICAgICBzYW1lUmVzdWx0Qm94LnRvcCArPSBoZWlnaHQgLyAyXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdmFyIHhDZW50ZXIgPSAoZGltWzBdICsgZGltWzFdKSAvIDIsXHJcbiAgICAgICAgaW5MZWZ0SGFsZiA9IHBvaW50ZXIubGVmdCA8PSB4Q2VudGVyXHJcbiAgICAgICAgaWYoaW5MZWZ0SGFsZil7XHJcbiAgICAgICAgICBtZXRob2QgPSBcImJlZm9yZVwiXHJcbiAgICAgICAgICBzYW1lUmVzdWx0Qm94LnJpZ2h0IC09IHdpZHRoIC8gMlxyXG4gICAgICAgIH0gZWxzZVxyXG4gICAgICAgICAgc2FtZVJlc3VsdEJveC5sZWZ0ICs9IHdpZHRoIC8gMlxyXG4gICAgICB9XHJcbiAgICAgIGlmKHRoaXMuaGFzQ2hpbGRHcm91cChpbmRleCkpXHJcbiAgICAgICAgc2FtZVJlc3VsdEJveCA9IGVtcHR5Qm94XHJcbiAgICAgIHRoaXMucm9vdEdyb3VwLm1vdmVQbGFjZWhvbGRlcih0aGlzLCBpdGVtLCBtZXRob2QsIHNhbWVSZXN1bHRCb3gpXHJcbiAgICB9LFxyXG4gICAgZ2V0SXRlbURpbWVuc2lvbnM6IGZ1bmN0aW9uICAoKSB7XHJcbiAgICAgIGlmKCF0aGlzLml0ZW1EaW1lbnNpb25zKXtcclxuICAgICAgICB0aGlzLml0ZW1zID0gdGhpcy4kZ2V0Q2hpbGRyZW4odGhpcy5lbCwgXCJpdGVtXCIpLmZpbHRlcihcclxuICAgICAgICAgIFwiOm5vdCguXCIgKyB0aGlzLmdyb3VwLm9wdGlvbnMucGxhY2Vob2xkZXJDbGFzcyArIFwiLCAuXCIgKyB0aGlzLmdyb3VwLm9wdGlvbnMuZHJhZ2dlZENsYXNzICsgXCIpXCJcclxuICAgICAgICApLmdldCgpXHJcbiAgICAgICAgc2V0RGltZW5zaW9ucyh0aGlzLml0ZW1zLCB0aGlzLml0ZW1EaW1lbnNpb25zID0gW10sIHRoaXMub3B0aW9ucy50b2xlcmFuY2UpXHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHRoaXMuaXRlbURpbWVuc2lvbnNcclxuICAgIH0sXHJcbiAgICBnZXRJdGVtT2Zmc2V0UGFyZW50OiBmdW5jdGlvbiAgKCkge1xyXG4gICAgICB2YXIgb2Zmc2V0UGFyZW50LFxyXG4gICAgICBlbCA9IHRoaXMuZWxcclxuICAgICAgLy8gU2luY2UgZWwgbWlnaHQgYmUgZW1wdHkgd2UgaGF2ZSB0byBjaGVjayBlbCBpdHNlbGYgYW5kXHJcbiAgICAgIC8vIGNhbiBub3QgZG8gc29tZXRoaW5nIGxpa2UgZWwuY2hpbGRyZW4oKS5maXJzdCgpLm9mZnNldFBhcmVudCgpXHJcbiAgICAgIGlmKGVsLmNzcyhcInBvc2l0aW9uXCIpID09PSBcInJlbGF0aXZlXCIgfHwgZWwuY3NzKFwicG9zaXRpb25cIikgPT09IFwiYWJzb2x1dGVcIiAgfHwgZWwuY3NzKFwicG9zaXRpb25cIikgPT09IFwiZml4ZWRcIilcclxuICAgICAgICBvZmZzZXRQYXJlbnQgPSBlbFxyXG4gICAgICBlbHNlXHJcbiAgICAgICAgb2Zmc2V0UGFyZW50ID0gZWwub2Zmc2V0UGFyZW50KClcclxuICAgICAgcmV0dXJuIG9mZnNldFBhcmVudFxyXG4gICAgfSxcclxuICAgIGhhc0NoaWxkR3JvdXA6IGZ1bmN0aW9uIChpbmRleCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25zLm5lc3RlZCAmJiB0aGlzLmdldENvbnRhaW5lckdyb3VwKGluZGV4KVxyXG4gICAgfSxcclxuICAgIGdldENvbnRhaW5lckdyb3VwOiBmdW5jdGlvbiAgKGluZGV4KSB7XHJcbiAgICAgIHZhciBjaGlsZEdyb3VwID0gJC5kYXRhKHRoaXMuaXRlbXNbaW5kZXhdLCBzdWJDb250YWluZXJLZXkpXHJcbiAgICAgIGlmKCBjaGlsZEdyb3VwID09PSB1bmRlZmluZWQpe1xyXG4gICAgICAgIHZhciBjaGlsZENvbnRhaW5lcnMgPSB0aGlzLiRnZXRDaGlsZHJlbih0aGlzLml0ZW1zW2luZGV4XSwgXCJjb250YWluZXJcIilcclxuICAgICAgICBjaGlsZEdyb3VwID0gZmFsc2VcclxuXHJcbiAgICAgICAgaWYoY2hpbGRDb250YWluZXJzWzBdKXtcclxuICAgICAgICAgIHZhciBvcHRpb25zID0gJC5leHRlbmQoe30sIHRoaXMub3B0aW9ucywge1xyXG4gICAgICAgICAgICByb290R3JvdXA6IHRoaXMucm9vdEdyb3VwLFxyXG4gICAgICAgICAgICBncm91cDogZ3JvdXBDb3VudGVyICsrXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgY2hpbGRHcm91cCA9IGNoaWxkQ29udGFpbmVyc1twbHVnaW5OYW1lXShvcHRpb25zKS5kYXRhKHBsdWdpbk5hbWUpLmdyb3VwXHJcbiAgICAgICAgfVxyXG4gICAgICAgICQuZGF0YSh0aGlzLml0ZW1zW2luZGV4XSwgc3ViQ29udGFpbmVyS2V5LCBjaGlsZEdyb3VwKVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBjaGlsZEdyb3VwXHJcbiAgICB9LFxyXG4gICAgJGdldENoaWxkcmVuOiBmdW5jdGlvbiAocGFyZW50LCB0eXBlKSB7XHJcbiAgICAgIHZhciBvcHRpb25zID0gdGhpcy5yb290R3JvdXAub3B0aW9ucyxcclxuICAgICAgcGF0aCA9IG9wdGlvbnNbdHlwZSArIFwiUGF0aFwiXSxcclxuICAgICAgc2VsZWN0b3IgPSBvcHRpb25zW3R5cGUgKyBcIlNlbGVjdG9yXCJdXHJcblxyXG4gICAgICBwYXJlbnQgPSAkKHBhcmVudClcclxuICAgICAgaWYocGF0aClcclxuICAgICAgICBwYXJlbnQgPSBwYXJlbnQuZmluZChwYXRoKVxyXG5cclxuICAgICAgcmV0dXJuIHBhcmVudC5jaGlsZHJlbihzZWxlY3RvcilcclxuICAgIH0sXHJcbiAgICBfc2VyaWFsaXplOiBmdW5jdGlvbiAocGFyZW50LCBpc0NvbnRhaW5lcikge1xyXG4gICAgICB2YXIgdGhhdCA9IHRoaXMsXHJcbiAgICAgIGNoaWxkVHlwZSA9IGlzQ29udGFpbmVyID8gXCJpdGVtXCIgOiBcImNvbnRhaW5lclwiLFxyXG5cclxuICAgICAgY2hpbGRyZW4gPSB0aGlzLiRnZXRDaGlsZHJlbihwYXJlbnQsIGNoaWxkVHlwZSkubm90KHRoaXMub3B0aW9ucy5leGNsdWRlKS5tYXAoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGF0Ll9zZXJpYWxpemUoJCh0aGlzKSwgIWlzQ29udGFpbmVyKVxyXG4gICAgICB9KS5nZXQoKVxyXG5cclxuICAgICAgcmV0dXJuIHRoaXMucm9vdEdyb3VwLm9wdGlvbnMuc2VyaWFsaXplKHBhcmVudCwgY2hpbGRyZW4sIGlzQ29udGFpbmVyKVxyXG4gICAgfSxcclxuICAgIHRyYXZlcnNlOiBmdW5jdGlvbihjYWxsYmFjaykge1xyXG4gICAgICAkLmVhY2godGhpcy5pdGVtcyB8fCBbXSwgZnVuY3Rpb24oaXRlbSl7XHJcbiAgICAgICAgdmFyIGdyb3VwID0gJC5kYXRhKHRoaXMsIHN1YkNvbnRhaW5lcktleSlcclxuICAgICAgICBpZihncm91cClcclxuICAgICAgICAgIGdyb3VwLnRyYXZlcnNlKGNhbGxiYWNrKVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGNhbGxiYWNrKHRoaXMpXHJcbiAgICB9LFxyXG4gICAgX2NsZWFyRGltZW5zaW9uczogZnVuY3Rpb24gICgpIHtcclxuICAgICAgdGhpcy5pdGVtRGltZW5zaW9ucyA9IHVuZGVmaW5lZFxyXG4gICAgfSxcclxuICAgIF9kZXN0cm95OiBmdW5jdGlvbigpIHtcclxuICAgICAgdmFyIHRoYXQgPSB0aGlzO1xyXG5cclxuICAgICAgdGhpcy50YXJnZXQub2ZmKGV2ZW50TmFtZXMuc3RhcnQsIHRoaXMuaGFuZGxlKTtcclxuICAgICAgdGhpcy5lbC5yZW1vdmVEYXRhKHBsdWdpbk5hbWUpXHJcblxyXG4gICAgICBpZih0aGlzLm9wdGlvbnMuZHJvcClcclxuICAgICAgICB0aGlzLmdyb3VwLmNvbnRhaW5lcnMgPSAkLmdyZXAodGhpcy5ncm91cC5jb250YWluZXJzLCBmdW5jdGlvbih2YWwpe1xyXG4gICAgICAgICAgcmV0dXJuIHZhbCAhPSB0aGF0XHJcbiAgICAgICAgfSlcclxuXHJcbiAgICAgICQuZWFjaCh0aGlzLml0ZW1zIHx8IFtdLCBmdW5jdGlvbigpe1xyXG4gICAgICAgICQucmVtb3ZlRGF0YSh0aGlzLCBzdWJDb250YWluZXJLZXkpXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB2YXIgQVBJID0ge1xyXG4gICAgZW5hYmxlOiBmdW5jdGlvbigpIHtcclxuICAgICAgdGhpcy50cmF2ZXJzZShmdW5jdGlvbihvYmplY3Qpe1xyXG4gICAgICAgIG9iamVjdC5kaXNhYmxlZCA9IGZhbHNlXHJcbiAgICAgIH0pXHJcbiAgICB9LFxyXG4gICAgZGlzYWJsZTogZnVuY3Rpb24gKCl7XHJcbiAgICAgIHRoaXMudHJhdmVyc2UoZnVuY3Rpb24ob2JqZWN0KXtcclxuICAgICAgICBvYmplY3QuZGlzYWJsZWQgPSB0cnVlXHJcbiAgICAgIH0pXHJcbiAgICB9LFxyXG4gICAgc2VyaWFsaXplOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9zZXJpYWxpemUodGhpcy5lbCwgdHJ1ZSlcclxuICAgIH0sXHJcbiAgICByZWZyZXNoOiBmdW5jdGlvbigpIHtcclxuICAgICAgdGhpcy50cmF2ZXJzZShmdW5jdGlvbihvYmplY3Qpe1xyXG4gICAgICAgIG9iamVjdC5fY2xlYXJEaW1lbnNpb25zKClcclxuICAgICAgfSlcclxuICAgIH0sXHJcbiAgICBkZXN0cm95OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHRoaXMudHJhdmVyc2UoZnVuY3Rpb24ob2JqZWN0KXtcclxuICAgICAgICBvYmplY3QuX2Rlc3Ryb3koKTtcclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gICQuZXh0ZW5kKENvbnRhaW5lci5wcm90b3R5cGUsIEFQSSlcclxuXHJcbiAgLyoqXHJcbiAgICogalF1ZXJ5IEFQSVxyXG4gICAqXHJcbiAgICogUGFyYW1ldGVycyBhcmVcclxuICAgKiAgIGVpdGhlciBvcHRpb25zIG9uIGluaXRcclxuICAgKiAgIG9yIGEgbWV0aG9kIG5hbWUgZm9sbG93ZWQgYnkgYXJndW1lbnRzIHRvIHBhc3MgdG8gdGhlIG1ldGhvZFxyXG4gICAqL1xyXG4gICQuZm5bcGx1Z2luTmFtZV0gPSBmdW5jdGlvbihtZXRob2RPck9wdGlvbnMpIHtcclxuICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKVxyXG5cclxuICAgIHJldHVybiB0aGlzLm1hcChmdW5jdGlvbigpe1xyXG4gICAgICB2YXIgJHQgPSAkKHRoaXMpLFxyXG4gICAgICBvYmplY3QgPSAkdC5kYXRhKHBsdWdpbk5hbWUpXHJcblxyXG4gICAgICBpZihvYmplY3QgJiYgQVBJW21ldGhvZE9yT3B0aW9uc10pXHJcbiAgICAgICAgcmV0dXJuIEFQSVttZXRob2RPck9wdGlvbnNdLmFwcGx5KG9iamVjdCwgYXJncykgfHwgdGhpc1xyXG4gICAgICBlbHNlIGlmKCFvYmplY3QgJiYgKG1ldGhvZE9yT3B0aW9ucyA9PT0gdW5kZWZpbmVkIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIG1ldGhvZE9yT3B0aW9ucyA9PT0gXCJvYmplY3RcIikpXHJcbiAgICAgICAgJHQuZGF0YShwbHVnaW5OYW1lLCBuZXcgQ29udGFpbmVyKCR0LCBtZXRob2RPck9wdGlvbnMpKVxyXG5cclxuICAgICAgcmV0dXJuIHRoaXNcclxuICAgIH0pO1xyXG4gIH07XHJcblxyXG59KGpRdWVyeSwgd2luZG93LCAnc29ydGFibGUnKTtcclxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/jquery-sortable/source/js/jquery-sortable.js\n");
/***/ }),
/***/ "./node_modules/jquery/dist/jquery.js":
/*!********************************************!*\
!*** ./node_modules/jquery/dist/jquery.js ***!
\********************************************/
/***/ (function(module, exports) {
eval("var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!\n * jQuery JavaScript Library v2.2.4\n * http://jquery.com/\n *\n * Includes Sizzle.js\n * http://sizzlejs.com/\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2016-05-20T17:23Z\n */\n\n(function( global, factory ) {\n\n\tif ( true && typeof module.exports === \"object\" ) {\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket #14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory( global, true ) :\n\t\t\tfunction( w ) {\n\t\t\t\tif ( !w.document ) {\n\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\n\t\t\t\t}\n\t\t\t\treturn factory( w );\n\t\t\t};\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n}(typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n// Support: Firefox 18+\n// Can't be in strict mode, several libs including ASP.NET trace\n// the stack via arguments.caller.callee and Firefox dies if\n// you try to trace through \"use strict\" call chains. (#13335)\n//\"use strict\";\nvar arr = [];\n\nvar document = window.document;\n\nvar slice = arr.slice;\n\nvar concat = arr.concat;\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar support = {};\n\n\n\nvar\n\tversion = \"2.2.4\",\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t},\n\n\t// Support: Android<4.1\n\t// Make sure we trim BOM and NBSP\n\trtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g,\n\n\t// Matches dashed string for camelizing\n\trmsPrefix = /^-ms-/,\n\trdashAlpha = /-([\\da-z])/gi,\n\n\t// Used by jQuery.camelCase as callback to replace()\n\tfcamelCase = function( all, letter ) {\n\t\treturn letter.toUpperCase();\n\t};\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// Start with an empty selector\n\tselector: \"\",\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\t\treturn num != null ?\n\n\t\t\t// Return just the one element from the set\n\t\t\t( num < 0 ? this[ num + this.length ] : this[ num ] ) :\n\n\t\t\t// Return all the elements in a clean array\n\t\t\tslice.call( this );\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\t\tret.context = this.context;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: push,\n\tsort: arr.sort,\n\tsplice: arr.splice\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !jQuery.isFunction( target ) ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tsrc = target[ name ];\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = jQuery.isArray( copy ) ) ) ) {\n\n\t\t\t\t\tif ( copyIsArray ) {\n\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\tclone = src && jQuery.isArray( src ) ? src : [];\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src && jQuery.isPlainObject( src ) ? src : {};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisFunction: function( obj ) {\n\t\treturn jQuery.type( obj ) === \"function\";\n\t},\n\n\tisArray: Array.isArray,\n\n\tisWindow: function( obj ) {\n\t\treturn obj != null && obj === obj.window;\n\t},\n\n\tisNumeric: function( obj ) {\n\n\t\t// parseFloat NaNs numeric-cast false positives (null|true|false|\"\")\n\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t// subtraction forces infinities to NaN\n\t\t// adding 1 corrects loss of precision from parseFloat (#15100)\n\t\tvar realStringObj = obj && obj.toString();\n\t\treturn !jQuery.isArray( obj ) && ( realStringObj - parseFloat( realStringObj ) + 1 ) >= 0;\n\t},\n\n\tisPlainObject: function( obj ) {\n\t\tvar key;\n\n\t\t// Not plain objects:\n\t\t// - Any object or value whose internal [[Class]] property is not \"[object Object]\"\n\t\t// - DOM nodes\n\t\t// - window\n\t\tif ( jQuery.type( obj ) !== \"object\" || obj.nodeType || jQuery.isWindow( obj ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Not own constructor property must be Object\n\t\tif ( obj.constructor &&\n\t\t\t\t!hasOwn.call( obj, \"constructor\" ) &&\n\t\t\t\t!hasOwn.call( obj.constructor.prototype || {}, \"isPrototypeOf\" ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Own properties are enumerated firstly, so to speed up,\n\t\t// if last one is own, then all properties are own\n\t\tfor ( key in obj ) {}\n\n\t\treturn key === undefined || hasOwn.call( obj, key );\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\ttype: function( obj ) {\n\t\tif ( obj == null ) {\n\t\t\treturn obj + \"\";\n\t\t}\n\n\t\t// Support: Android<4.0, iOS<6 (functionish RegExp)\n\t\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\t\ttypeof obj;\n\t},\n\n\t// Evaluates a script in a global context\n\tglobalEval: function( code ) {\n\t\tvar script,\n\t\t\tindirect = eval;\n\n\t\tcode = jQuery.trim( code );\n\n\t\tif ( code ) {\n\n\t\t\t// If the code includes a valid, prologue position\n\t\t\t// strict mode pragma, execute code by injecting a\n\t\t\t// script tag into the document.\n\t\t\tif ( code.indexOf( \"use strict\" ) === 1 ) {\n\t\t\t\tscript = document.createElement( \"script\" );\n\t\t\t\tscript.text = code;\n\t\t\t\tdocument.head.appendChild( script ).parentNode.removeChild( script );\n\t\t\t} else {\n\n\t\t\t\t// Otherwise, avoid the DOM node creation, insertion\n\t\t\t\t// and removal by using an indirect global eval\n\n\t\t\t\tindirect( code );\n\t\t\t}\n\t\t}\n\t},\n\n\t// Convert dashed to camelCase; used by the css and data modules\n\t// Support: IE9-11+\n\t// Microsoft forgot to hump their vendor prefix (#9572)\n\tcamelCase: function( string ) {\n\t\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n\t},\n\n\tnodeName: function( elem, name ) {\n\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\t// Support: Android<4.1\n\ttrim: function( text ) {\n\t\treturn text == null ?\n\t\t\t\"\" :\n\t\t\t( text + \"\" ).replace( rtrim, \"\" );\n\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn concat.apply( [], ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// Bind a function to a context, optionally partially applying any\n\t// arguments.\n\tproxy: function( fn, context ) {\n\t\tvar tmp, args, proxy;\n\n\t\tif ( typeof context === \"string\" ) {\n\t\t\ttmp = fn[ context ];\n\t\t\tcontext = fn;\n\t\t\tfn = tmp;\n\t\t}\n\n\t\t// Quick check to determine if target is callable, in the spec\n\t\t// this throws a TypeError, but we will just return undefined.\n\t\tif ( !jQuery.isFunction( fn ) ) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// Simulated bind\n\t\targs = slice.call( arguments, 2 );\n\t\tproxy = function() {\n\t\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\n\t\t};\n\n\t\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\t\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\t\treturn proxy;\n\t},\n\n\tnow: Date.now,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\n// JSHint would error on this code due to the Symbol not being defined in ES5.\n// Defining this global in .jshintrc would create a danger of using the global\n// unguarded in another place, it seems safer to just disable JSHint for these\n// three lines.\n/* jshint ignore: start */\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n/* jshint ignore: end */\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\nfunction( i, name ) {\n\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n} );\n\nfunction isArrayLike( obj ) {\n\n\t// Support: iOS 8.2 (not reproducible in simulator)\n\t// `in` check used to prevent JIT error (gh-2145)\n\t// hasOwn isn't used here due to false negatives\n\t// regarding Nodelist length in IE\n\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\ttype = jQuery.type( obj );\n\n\tif ( type === \"function\" || jQuery.isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\nvar Sizzle =\n/*!\n * Sizzle CSS Selector Engine v2.2.1\n * http://sizzlejs.com/\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2015-10-17\n */\n(function( window ) {\n\nvar i,\n\tsupport,\n\tExpr,\n\tgetText,\n\tisXML,\n\ttokenize,\n\tcompile,\n\tselect,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\n\t// Local document vars\n\tsetDocument,\n\tdocument,\n\tdocElem,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\trbuggyMatches,\n\tmatches,\n\tcontains,\n\n\t// Instance-specific data\n\texpando = \"sizzle\" + 1 * new Date(),\n\tpreferredDoc = window.document,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn 0;\n\t},\n\n\t// General-purpose constants\n\tMAX_NEGATIVE = 1 << 31,\n\n\t// Instance methods\n\thasOwn = ({}).hasOwnProperty,\n\tarr = [],\n\tpop = arr.pop,\n\tpush_native = arr.push,\n\tpush = arr.push,\n\tslice = arr.slice,\n\t// Use a stripped-down indexOf as it's faster than native\n\t// http://jsperf.com/thor-indexof-vs-for/5\n\tindexOf = function( list, elem ) {\n\t\tvar i = 0,\n\t\t\tlen = list.length;\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( list[i] === elem ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// http://www.w3.org/TR/css3-selectors/#whitespace\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n\n\t// http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier\n\tidentifier = \"(?:\\\\\\\\.|[\\\\w-]|[^\\\\x00-\\\\xa0])+\",\n\n\t// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\t\t// Operator (capture 2)\n\t\t\"*([*^$|!~]?=)\" + whitespace +\n\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" + whitespace +\n\t\t\"*\\\\]\",\n\n\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\t\t// 3. anything else (capture 2)\n\t\t\".*\" +\n\t\t\")\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace + \"*\" ),\n\n\trattributeQuotes = new RegExp( \"=\" + whitespace + \"*([^\\\\]'\\\"]*?)\" + whitespace + \"*\\\\]\", \"g\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\t\"ID\": new RegExp( \"^#(\" + identifier + \")\" ),\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\t\t\"TAG\": new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" + whitespace +\n\t\t\t\"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" + whitespace +\n\t\t\t\"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t\"bool\": new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\t\"needsContext\": new RegExp( \"^\" + whitespace + \"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" +\n\t\t\twhitespace + \"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\trnative = /^[^{]+\\{\\s*\\[native \\w/,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\trescape = /'|\\\\/g,\n\n\t// CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\([\\\\da-f]{1,6}\" + whitespace + \"?|(\" + whitespace + \")|.)\", \"ig\" ),\n\tfunescape = function( _, escaped, escapedWhitespace ) {\n\t\tvar high = \"0x\" + escaped - 0x10000;\n\t\t// NaN means non-codepoint\n\t\t// Support: Firefox<24\n\t\t// Workaround erroneous numeric interpretation of +\"0x\"\n\t\treturn high !== high || escapedWhitespace ?\n\t\t\tescaped :\n\t\t\thigh < 0 ?\n\t\t\t\t// BMP codepoint\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t\t// Supplemental Plane codepoint (surrogate pair)\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// Used for iframes\n\t// See setDocument()\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t};\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t(arr = slice.call( preferredDoc.childNodes )),\n\t\tpreferredDoc.childNodes\n\t);\n\t// Support: Android<4.0\n\t// Detect silently failing push.apply\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = { apply: arr.length ?\n\n\t\t// Leverage slice if possible\n\t\tfunction( target, els ) {\n\t\t\tpush_native.apply( target, slice.call(els) );\n\t\t} :\n\n\t\t// Support: IE<9\n\t\t// Otherwise append directly\n\t\tfunction( target, els ) {\n\t\t\tvar j = target.length,\n\t\t\t\ti = 0;\n\t\t\t// Can't trust NodeList.length\n\t\t\twhile ( (target[j++] = els[i++]) ) {}\n\t\t\ttarget.length = j - 1;\n\t\t}\n\t};\n}\n\nfunction Sizzle( selector, context, results, seed ) {\n\tvar m, i, elem, nid, nidselect, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\n\t\tif ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {\n\t\t\tsetDocument( context );\n\t\t}\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( (m = match[1]) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( (elem = context.getElementById( m )) ) {\n\n\t\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\tif ( newContext && (elem = newContext.getElementById( m )) &&\n\t\t\t\t\t\t\tcontains( context, elem ) &&\n\t\t\t\t\t\t\telem.id === m ) {\n\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[2] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( (m = match[3]) && support.getElementsByClassName &&\n\t\t\t\t\tcontext.getElementsByClassName ) {\n\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( support.qsa &&\n\t\t\t\t!compilerCache[ selector + \" \" ] &&\n\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test( selector )) ) {\n\n\t\t\t\tif ( nodeType !== 1 ) {\n\t\t\t\t\tnewContext = context;\n\t\t\t\t\tnewSelector = selector;\n\n\t\t\t\t// qSA looks outside Element context, which is not what we want\n\t\t\t\t// Thanks to Andrew Dupont for this workaround technique\n\t\t\t\t// Support: IE <=8\n\t\t\t\t// Exclude object elements\n\t\t\t\t} else if ( context.nodeName.toLowerCase() !== \"object\" ) {\n\n\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\tif ( (nid = context.getAttribute( \"id\" )) ) {\n\t\t\t\t\t\tnid = nid.replace( rescape, \"\\\\$&\" );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontext.setAttribute( \"id\", (nid = expando) );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\tnidselect = ridentifier.test( nid ) ? \"#\" + nid : \"[id='\" + nid + \"']\";\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[i] = nidselect + \" \" + toSelector( groups[i] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\t\t\t\t}\n\n\t\t\t\tif ( newSelector ) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tif ( nid === expando ) {\n\t\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrim, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\t\t// Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn (cache[ key + \" \" ] = value);\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by Sizzle\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created div and expects a boolean result\n */\nfunction assert( fn ) {\n\tvar div = document.createElement(\"div\");\n\n\ttry {\n\t\treturn !!fn( div );\n\t} catch (e) {\n\t\treturn false;\n\t} finally {\n\t\t// Remove from its parent by default\n\t\tif ( div.parentNode ) {\n\t\t\tdiv.parentNode.removeChild( div );\n\t\t}\n\t\t// release memory in IE\n\t\tdiv = null;\n\t}\n}\n\n/**\n * Adds the same handler for all of the specified attrs\n * @param {String} attrs Pipe-separated list of attributes\n * @param {Function} handler The method that will be applied\n */\nfunction addHandle( attrs, handler ) {\n\tvar arr = attrs.split(\"|\"),\n\t\ti = arr.length;\n\n\twhile ( i-- ) {\n\t\tExpr.attrHandle[ arr[i] ] = handler;\n\t}\n}\n\n/**\n * Checks document order of two siblings\n * @param {Element} a\n * @param {Element} b\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n */\nfunction siblingCheck( a, b ) {\n\tvar cur = b && a,\n\t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\n\t\t\t( ~b.sourceIndex || MAX_NEGATIVE ) -\n\t\t\t( ~a.sourceIndex || MAX_NEGATIVE );\n\n\t// Use IE sourceIndex if available on both nodes\n\tif ( diff ) {\n\t\treturn diff;\n\t}\n\n\t// Check if b follows a\n\tif ( cur ) {\n\t\twhile ( (cur = cur.nextSibling) ) {\n\t\t\tif ( cur === b ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn a ? 1 : -1;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn name === \"input\" && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn (name === \"input\" || name === \"button\") && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction(function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction(function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ (j = matchIndexes[i]) ] ) {\n\t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n}\n\n/**\n * Checks a node for validity as a Sizzle context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Expose support vars for convenience\nsupport = Sizzle.support = {};\n\n/**\n * Detects XML nodes\n * @param {Element|Object} elem An element or a document\n * @returns {Boolean} True iff elem is a non-HTML XML node\n */\nisXML = Sizzle.isXML = function( elem ) {\n\t// documentElement is verified for cases where it doesn't yet exist\n\t// (such as loading iframes in IE - #4833)\n\tvar documentElement = elem && (elem.ownerDocument || elem).documentElement;\n\treturn documentElement ? documentElement.nodeName !== \"HTML\" : false;\n};\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [doc] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nsetDocument = Sizzle.setDocument = function( node ) {\n\tvar hasCompare, parent,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t// Return early if doc is invalid or already selected\n\tif ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocElem = document.documentElement;\n\tdocumentIsHTML = !isXML( document );\n\n\t// Support: IE 9-11, Edge\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (jQuery #13936)\n\tif ( (parent = document.defaultView) && parent.top !== parent ) {\n\t\t// Support: IE 11\n\t\tif ( parent.addEventListener ) {\n\t\t\tparent.addEventListener( \"unload\", unloadHandler, false );\n\n\t\t// Support: IE 9 - 10 only\n\t\t} else if ( parent.attachEvent ) {\n\t\t\tparent.attachEvent( \"onunload\", unloadHandler );\n\t\t}\n\t}\n\n\t/* Attributes\n\t---------------------------------------------------------------------- */\n\n\t// Support: IE<8\n\t// Verify that getAttribute really returns attributes and not properties\n\t// (excepting IE8 booleans)\n\tsupport.attributes = assert(function( div ) {\n\t\tdiv.className = \"i\";\n\t\treturn !div.getAttribute(\"className\");\n\t});\n\n\t/* getElement(s)By*\n\t---------------------------------------------------------------------- */\n\n\t// Check if getElementsByTagName(\"*\") returns only elements\n\tsupport.getElementsByTagName = assert(function( div ) {\n\t\tdiv.appendChild( document.createComment(\"\") );\n\t\treturn !div.getElementsByTagName(\"*\").length;\n\t});\n\n\t// Support: IE<9\n\tsupport.getElementsByClassName = rnative.test( document.getElementsByClassName );\n\n\t// Support: IE<10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert(function( div ) {\n\t\tdocElem.appendChild( div ).id = expando;\n\t\treturn !document.getElementsByName || !document.getElementsByName( expando ).length;\n\t});\n\n\t// ID find and filter\n\tif ( support.getById ) {\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar m = context.getElementById( id );\n\t\t\t\treturn m ? [ m ] : [];\n\t\t\t}\n\t\t};\n\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute(\"id\") === attrId;\n\t\t\t};\n\t\t};\n\t} else {\n\t\t// Support: IE6/7\n\t\t// getElementById is not reliable as a find shortcut\n\t\tdelete Expr.find[\"ID\"];\n\n\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\telem.getAttributeNode(\"id\");\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find[\"TAG\"] = support.getElementsByTagName ?\n\t\tfunction( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else if ( support.qsa ) {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t} :\n\n\t\tfunction( tag, context ) {\n\t\t\tvar elem,\n\t\t\t\ttmp = [],\n\t\t\t\ti = 0,\n\t\t\t\t// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too\n\t\t\t\tresults = context.getElementsByTagName( tag );\n\n\t\t\t// Filter out possible comments\n\t\t\tif ( tag === \"*\" ) {\n\t\t\t\twhile ( (elem = results[i++]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\ttmp.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn tmp;\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\n\t// Class\n\tExpr.find[\"CLASS\"] = support.getElementsByClassName && function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\trbuggyMatches = [];\n\n\t// qSa(:focus) reports false when true (Chrome 21)\n\t// We allow this because of a bug in IE8/9 that throws an error\n\t// whenever `document.activeElement` is accessed on an iframe\n\t// So, we allow :focus to pass through QSA all the time to avoid the IE error\n\t// See http://bugs.jquery.com/ticket/13378\n\trbuggyQSA = [];\n\n\tif ( (support.qsa = rnative.test( document.querySelectorAll )) ) {\n\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert(function( div ) {\n\t\t\t// Select is set to empty string on purpose\n\t\t\t// This is to test IE's treatment of not explicitly\n\t\t\t// setting a boolean content attribute,\n\t\t\t// since its presence should be enough\n\t\t\t// http://bugs.jquery.com/ticket/12359\n\t\t\tdocElem.appendChild( div ).innerHTML = \"<a id='\" + expando + \"'></a>\" +\n\t\t\t\t\"<select id='\" + expando + \"-\\r\\\\' msallowcapture=''>\" +\n\t\t\t\t\"<option selected=''></option></select>\";\n\n\t\t\t// Support: IE8, Opera 11-12.16\n\t\t\t// Nothing should be selected when empty strings follow ^= or $= or *=\n\t\t\t// The test attribute must be unknown in Opera but \"safe\" for WinRT\n\t\t\t// http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\t\t\tif ( div.querySelectorAll(\"[msallowcapture^='']\").length ) {\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Support: IE8\n\t\t\t// Boolean attributes and \"value\" are not treated correctly\n\t\t\tif ( !div.querySelectorAll(\"[selected]\").length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t\t}\n\n\t\t\t// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+\n\t\t\tif ( !div.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\n\t\t\t\trbuggyQSA.push(\"~=\");\n\t\t\t}\n\n\t\t\t// Webkit/Opera - :checked should return selected option elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !div.querySelectorAll(\":checked\").length ) {\n\t\t\t\trbuggyQSA.push(\":checked\");\n\t\t\t}\n\n\t\t\t// Support: Safari 8+, iOS 8+\n\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t// In-page `selector#id sibing-combinator selector` fails\n\t\t\tif ( !div.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\n\t\t\t\trbuggyQSA.push(\".#.+[+~]\");\n\t\t\t}\n\t\t});\n\n\t\tassert(function( div ) {\n\t\t\t// Support: Windows 8 Native Apps\n\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\tvar input = document.createElement(\"input\");\n\t\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\t\tdiv.appendChild( input ).setAttribute( \"name\", \"D\" );\n\n\t\t\t// Support: IE8\n\t\t\t// Enforce case-sensitivity of name attribute\n\t\t\tif ( div.querySelectorAll(\"[name=d]\").length ) {\n\t\t\t\trbuggyQSA.push( \"name\" + whitespace + \"*[*^$|!~]?=\" );\n\t\t\t}\n\n\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !div.querySelectorAll(\":enabled\").length ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\n\t\t\tdiv.querySelectorAll(\"*,:x\");\n\t\t\trbuggyQSA.push(\",.*:\");\n\t\t});\n\t}\n\n\tif ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||\n\t\tdocElem.webkitMatchesSelector ||\n\t\tdocElem.mozMatchesSelector ||\n\t\tdocElem.oMatchesSelector ||\n\t\tdocElem.msMatchesSelector) )) ) {\n\n\t\tassert(function( div ) {\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node (IE 9)\n\t\t\tsupport.disconnectedMatch = matches.call( div, \"div\" );\n\n\t\t\t// This should fail with an exception\n\t\t\t// Gecko does not error, returns false instead\n\t\t\tmatches.call( div, \"[s!='']:x\" );\n\t\t\trbuggyMatches.push( \"!=\", pseudos );\n\t\t});\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join(\"|\") );\n\trbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join(\"|\") );\n\n\t/* Contains\n\t---------------------------------------------------------------------- */\n\thasCompare = rnative.test( docElem.compareDocumentPosition );\n\n\t// Element contains another\n\t// Purposefully self-exclusive\n\t// As in, an element does not contain itself\n\tcontains = hasCompare || rnative.test( docElem.contains ) ?\n\t\tfunction( a, b ) {\n\t\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\n\t\t\t\tbup = b && b.parentNode;\n\t\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\t\t\t\tadown.contains ?\n\t\t\t\t\tadown.contains( bup ) :\n\t\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t\t));\n\t\t} :\n\t\tfunction( a, b ) {\n\t\t\tif ( b ) {\n\t\t\t\twhile ( (b = b.parentNode) ) {\n\t\t\t\t\tif ( b === a ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = hasCompare ?\n\tfunction( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\tif ( compare ) {\n\t\t\treturn compare;\n\t\t}\n\n\t\t// Calculate position if both inputs belong to the same document\n\t\tcompare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?\n\t\t\ta.compareDocumentPosition( b ) :\n\n\t\t\t// Otherwise we know they are disconnected\n\t\t\t1;\n\n\t\t// Disconnected nodes\n\t\tif ( compare & 1 ||\n\t\t\t(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {\n\n\t\t\t// Choose the first element that is related to our preferred document\n\t\t\tif ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\tif ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\t// Maintain original order\n\t\t\treturn sortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t} :\n\tfunction( a, b ) {\n\t\t// Exit early if the nodes are identical\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\taup = a.parentNode,\n\t\t\tbup = b.parentNode,\n\t\t\tap = [ a ],\n\t\t\tbp = [ b ];\n\n\t\t// Parentless nodes are either documents or disconnected\n\t\tif ( !aup || !bup ) {\n\t\t\treturn a === document ? -1 :\n\t\t\t\tb === document ? 1 :\n\t\t\t\taup ? -1 :\n\t\t\t\tbup ? 1 :\n\t\t\t\tsortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\n\t\t// If the nodes are siblings, we can do a quick check\n\t\t} else if ( aup === bup ) {\n\t\t\treturn siblingCheck( a, b );\n\t\t}\n\n\t\t// Otherwise we need full lists of their ancestors for comparison\n\t\tcur = a;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tap.unshift( cur );\n\t\t}\n\t\tcur = b;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tbp.unshift( cur );\n\t\t}\n\n\t\t// Walk down the tree looking for a discrepancy\n\t\twhile ( ap[i] === bp[i] ) {\n\t\t\ti++;\n\t\t}\n\n\t\treturn i ?\n\t\t\t// Do a sibling check if the nodes have a common ancestor\n\t\t\tsiblingCheck( ap[i], bp[i] ) :\n\n\t\t\t// Otherwise nodes in our document sort first\n\t\t\tap[i] === preferredDoc ? -1 :\n\t\t\tbp[i] === preferredDoc ? 1 :\n\t\t\t0;\n\t};\n\n\treturn document;\n};\n\nSizzle.matches = function( expr, elements ) {\n\treturn Sizzle( expr, null, null, elements );\n};\n\nSizzle.matchesSelector = function( elem, expr ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\t// Make sure that attribute selectors are quoted\n\texpr = expr.replace( rattributeQuotes, \"='$1']\" );\n\n\tif ( support.matchesSelector && documentIsHTML &&\n\t\t!compilerCache[ expr + \" \" ] &&\n\t\t( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&\n\t\t( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch (e) {}\n\t}\n\n\treturn Sizzle( expr, document, null, [ elem ] ).length > 0;\n};\n\nSizzle.contains = function( context, elem ) {\n\t// Set document vars if needed\n\tif ( ( context.ownerDocument || context ) !== document ) {\n\t\tsetDocument( context );\n\t}\n\treturn contains( context, elem );\n};\n\nSizzle.attr = function( elem, name ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\t\t// Don't get fooled by Object.prototype properties (jQuery #13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\treturn val !== undefined ?\n\t\tval :\n\t\tsupport.attributes || !documentIsHTML ?\n\t\t\telem.getAttribute( name ) :\n\t\t\t(val = elem.getAttributeNode(name)) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\tnull;\n};\n\nSizzle.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\nSizzle.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\thasDuplicate = !support.detectDuplicates;\n\tsortInput = !support.sortStable && results.slice( 0 );\n\tresults.sort( sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( (elem = results[i++]) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tresults.splice( duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\t// Clear input after sorting to release objects\n\t// See https://github.com/jquery/sizzle/pull/225\n\tsortInput = null;\n\n\treturn results;\n};\n\n/**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\ngetText = Sizzle.getText = function( elem ) {\n\tvar node,\n\t\tret = \"\",\n\t\ti = 0,\n\t\tnodeType = elem.nodeType;\n\n\tif ( !nodeType ) {\n\t\t// If no nodeType, this is expected to be an array\n\t\twhile ( (node = elem[i++]) ) {\n\t\t\t// Do not traverse comment nodes\n\t\t\tret += getText( node );\n\t\t}\n\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\t\t// Use textContent for elements\n\t\t// innerText usage removed for consistency of new lines (jQuery #11153)\n\t\tif ( typeof elem.textContent === \"string\" ) {\n\t\t\treturn elem.textContent;\n\t\t} else {\n\t\t\t// Traverse its children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tret += getText( elem );\n\t\t\t}\n\t\t}\n\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\treturn elem.nodeValue;\n\t}\n\t// Do not include comment or processing instruction nodes\n\n\treturn ret;\n};\n\nExpr = Sizzle.selectors = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\t\"ATTR\": function( match ) {\n\t\t\tmatch[1] = match[1].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[3] = ( match[3] || match[4] || match[5] || \"\" ).replace( runescape, funescape );\n\n\t\t\tif ( match[2] === \"~=\" ) {\n\t\t\t\tmatch[3] = \" \" + match[3] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\t\"CHILD\": function( match ) {\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[1] = match[1].toLowerCase();\n\n\t\t\tif ( match[1].slice( 0, 3 ) === \"nth\" ) {\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[3] ) {\n\t\t\t\t\tSizzle.error( match[0] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === \"even\" || match[3] === \"odd\" ) );\n\t\t\t\tmatch[5] = +( ( match[7] + match[8] ) || match[3] === \"odd\" );\n\n\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[3] ) {\n\t\t\t\tSizzle.error( match[0] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\t\"PSEUDO\": function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[6] && match[2];\n\n\t\t\tif ( matchExpr[\"CHILD\"].test( match[0] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[3] ) {\n\t\t\t\tmatch[2] = match[4] || match[5] || \"\";\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t(excess = tokenize( unquoted, true )) &&\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t(excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[0] = match[0].slice( 0, excess );\n\t\t\t\tmatch[2] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\t\"TAG\": function( nodeNameSelector ) {\n\t\t\tvar nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() { return true; } :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n\t\t\t\t};\n\t\t},\n\n\t\t\"CLASS\": function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t(pattern = new RegExp( \"(^|\" + whitespace + \")\" + className + \"(\" + whitespace + \"|$)\" )) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test( typeof elem.className === \"string\" && elem.className || typeof elem.getAttribute !== \"undefined\" && elem.getAttribute(\"class\") || \"\" );\n\t\t\t\t});\n\t\t},\n\n\t\t\"ATTR\": function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = Sizzle.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\treturn operator === \"=\" ? result === check :\n\t\t\t\t\toperator === \"!=\" ? result !== check :\n\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\n\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"$=\" ? check && result.slice( -check.length ) === check :\n\t\t\t\t\toperator === \"~=\" ? ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" ).indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"|=\" ? result === check || result.slice( 0, check.length + 1 ) === check + \"-\" :\n\t\t\t\t\tfalse;\n\t\t\t};\n\t\t},\n\n\t\t\"CHILD\": function( type, what, argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tvar cache, uniqueCache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( (node = node[ dir ]) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\n\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\tnode = parent;\n\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\t\"PSEUDO\": function( pseudo, argument ) {\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// http://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tSizzle.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as Sizzle does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction(function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf( seed, matched[i] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[i] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\t\t// Potentially complex pseudos\n\t\t\"not\": markFunction(function( selector ) {\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrim, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction(function( seed, matches, context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = unmatched[i]) ) {\n\t\t\t\t\t\t\tseed[i] = !(matches[i] = elem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}) :\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tinput[0] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\t\t\t\t\t// Don't keep the element (issue #299)\n\t\t\t\t\tinput[0] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t}),\n\n\t\t\"has\": markFunction(function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\n\t\t\t};\n\t\t}),\n\n\t\t\"contains\": markFunction(function( text ) {\n\t\t\ttext = text.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t}),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// http://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\"lang\": markFunction( function( lang ) {\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test(lang || \"\") ) {\n\t\t\t\tSizzle.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( (elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\")) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( (elem = elem.parentNode) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}),\n\n\t\t// Miscellaneous\n\t\t\"target\": function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\t\"root\": function( elem ) {\n\t\t\treturn elem === docElem;\n\t\t},\n\n\t\t\"focus\": function( elem ) {\n\t\t\treturn elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);\n\t\t},\n\n\t\t// Boolean properties\n\t\t\"enabled\": function( elem ) {\n\t\t\treturn elem.disabled === false;\n\t\t},\n\n\t\t\"disabled\": function( elem ) {\n\t\t\treturn elem.disabled === true;\n\t\t},\n\n\t\t\"checked\": function( elem ) {\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\n\t\t\treturn (nodeName === \"input\" && !!elem.checked) || (nodeName === \"option\" && !!elem.selected);\n\t\t},\n\n\t\t\"selected\": function( elem ) {\n\t\t\t// Accessing this property makes selected-by-default\n\t\t\t// options in Safari work properly\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\t\"empty\": function( elem ) {\n\t\t\t// http://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t// but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t\"parent\": function( elem ) {\n\t\t\treturn !Expr.pseudos[\"empty\"]( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\t\"header\": function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\t\"input\": function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\t\"button\": function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\n\t\t},\n\n\t\t\"text\": function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\telem.type === \"text\" &&\n\n\t\t\t\t// Support: IE<8\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear with elem.type === \"text\"\n\t\t\t\t( (attr = elem.getAttribute(\"type\")) == null || attr.toLowerCase() === \"text\" );\n\t\t},\n\n\t\t// Position-in-collection\n\t\t\"first\": createPositionalPseudo(function() {\n\t\t\treturn [ 0 ];\n\t\t}),\n\n\t\t\"last\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t}),\n\n\t\t\"eq\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t}),\n\n\t\t\"even\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"odd\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"lt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"gt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t})\n\t}\n};\n\nExpr.pseudos[\"nth\"] = Expr.pseudos[\"eq\"];\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\ntokenize = Sizzle.tokenize = function( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || (match = rcomma.exec( soFar )) ) {\n\t\t\tif ( match ) {\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[0].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( (tokens = []) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( (match = rcombinators.exec( soFar )) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push({\n\t\t\t\tvalue: matched,\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[0].replace( rtrim, \" \" )\n\t\t\t});\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||\n\t\t\t\t(match = preFilters[ type ]( match ))) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push({\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t});\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\treturn parseOnly ?\n\t\tsoFar.length :\n\t\tsoFar ?\n\t\t\tSizzle.error( selector ) :\n\t\t\t// Cache the tokens\n\t\t\ttokenCache( selector, groups ).slice( 0 );\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[i].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tcheckNonElements = base && dir === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, uniqueCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || (elem[ expando ] = {});\n\n\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\tuniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});\n\n\t\t\t\t\t\tif ( (oldCache = uniqueCache[ dir ]) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn (newCache[ 2 ] = oldCache[ 2 ]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\tuniqueCache[ dir ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[i]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[0];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tSizzle( selector, contexts[i], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (elem = unmatched[i]) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction(function( seed, results, context, xml ) {\n\t\tvar temp, i, elem,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed || multipleContexts( selector || \"*\", context.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems,\n\n\t\t\tmatcherOut = matcher ?\n\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t[] :\n\n\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\tresults :\n\t\t\t\tmatcherIn;\n\n\t\t// Find primary matches\n\t\tif ( matcher ) {\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( (elem = temp[i]) ) {\n\t\t\t\t\tmatcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = matcherOut[i]) ) {\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( (matcherIn[i] = elem) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, (matcherOut = []), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( (elem = matcherOut[i]) &&\n\t\t\t\t\t\t(temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {\n\n\t\t\t\t\t\tseed[temp] = !(results[temp] = elem);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[0].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[\" \"],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\t\t\tvar ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (\n\t\t\t\t(checkContext = context).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\t\t\t// Avoid hanging onto element (issue #299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (matcher = Expr.relative[ tokens[i].type ]) ) {\n\t\t\tmatchers = [ addCombinator(elementMatcher( matchers ), matcher) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[j].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" })\n\t\t\t\t\t).replace( rtrim, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( (tokens = tokens.slice( j )) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && Expr.find[\"TAG\"]( \"*\", outermost ),\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),\n\t\t\t\tlen = elems.length;\n\n\t\t\tif ( outermost ) {\n\t\t\t\toutermostContext = context === document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Support: IE<9, Safari\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching elements by id\n\t\t\tfor ( ; i !== len && (elem = elems[i]) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\tif ( !context && elem.ownerDocument !== document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( (matcher = elementMatchers[j++]) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml) ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( (elem = !matcher && elem) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( (matcher = setMatchers[j++]) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !(unmatched[i] || setMatched[i]) ) {\n\t\t\t\t\t\t\t\tsetMatched[i] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tSizzle.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\ncompile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[i] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n};\n\n/**\n * A low-level selection function that works with Sizzle's compiled\n * selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n * selector function built with Sizzle.compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nselect = Sizzle.select = function( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( (selector = compiled.selector || selector) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[0] = match[0].slice( 0 );\n\t\tif ( tokens.length > 2 && (token = tokens[0]).type === \"ID\" &&\n\t\t\t\tsupport.getById && context.nodeType === 9 && documentIsHTML &&\n\t\t\t\tExpr.relative[ tokens[1].type ] ) {\n\n\t\t\tcontext = ( Expr.find[\"ID\"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr[\"needsContext\"].test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[i];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( Expr.relative[ (type = token.type) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( (find = Expr.find[ type ]) ) {\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( (seed = find(\n\t\t\t\t\ttoken.matches[0].replace( runescape, funescape ),\n\t\t\t\t\trsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context\n\t\t\t\t)) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n};\n\n// One-time assignments\n\n// Sort stability\nsupport.sortStable = expando.split(\"\").sort( sortOrder ).join(\"\") === expando;\n\n// Support: Chrome 14-35+\n// Always assume duplicates if they aren't passed to the comparison function\nsupport.detectDuplicates = !!hasDuplicate;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert(function( div1 ) {\n\t// Should return 1, but returns 4 (following)\n\treturn div1.compareDocumentPosition( document.createElement(\"div\") ) & 1;\n});\n\n// Support: IE<8\n// Prevent attribute/property \"interpolation\"\n// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !assert(function( div ) {\n\tdiv.innerHTML = \"<a href='#'></a>\";\n\treturn div.firstChild.getAttribute(\"href\") === \"#\" ;\n}) ) {\n\taddHandle( \"type|href|height|width\", function( elem, name, isXML ) {\n\t\tif ( !isXML ) {\n\t\t\treturn elem.getAttribute( name, name.toLowerCase() === \"type\" ? 1 : 2 );\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use defaultValue in place of getAttribute(\"value\")\nif ( !support.attributes || !assert(function( div ) {\n\tdiv.innerHTML = \"<input/>\";\n\tdiv.firstChild.setAttribute( \"value\", \"\" );\n\treturn div.firstChild.getAttribute( \"value\" ) === \"\";\n}) ) {\n\taddHandle( \"value\", function( elem, name, isXML ) {\n\t\tif ( !isXML && elem.nodeName.toLowerCase() === \"input\" ) {\n\t\t\treturn elem.defaultValue;\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use getAttributeNode to fetch booleans when getAttribute lies\nif ( !assert(function( div ) {\n\treturn div.getAttribute(\"disabled\") == null;\n}) ) {\n\taddHandle( booleans, function( elem, name, isXML ) {\n\t\tvar val;\n\t\tif ( !isXML ) {\n\t\t\treturn elem[ name ] === true ? name.toLowerCase() :\n\t\t\t\t\t(val = elem.getAttributeNode( name )) && val.specified ?\n\t\t\t\t\tval.value :\n\t\t\t\tnull;\n\t\t}\n\t});\n}\n\nreturn Sizzle;\n\n})( window );\n\n\n\njQuery.find = Sizzle;\njQuery.expr = Sizzle.selectors;\njQuery.expr[ \":\" ] = jQuery.expr.pseudos;\njQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\n\n\n\nvar dir = function( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n};\n\n\nvar siblings = function( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n};\n\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\nvar rsingleTag = ( /^<([\\w-]+)\\s*\\/?>(?:<\\/\\1>|)$/ );\n\n\n\nvar risSimple = /^.[^:#\\[\\.,]*$/;\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( jQuery.isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\t/* jshint -W018 */\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\n\t}\n\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\n\t}\n\n\tif ( typeof qualifier === \"string\" ) {\n\t\tif ( risSimple.test( qualifier ) ) {\n\t\t\treturn jQuery.filter( qualifier, elements, not );\n\t\t}\n\n\t\tqualifier = jQuery.filter( qualifier, elements );\n\t}\n\n\treturn jQuery.grep( elements, function( elem ) {\n\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t} );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\treturn elems.length === 1 && elem.nodeType === 1 ?\n\t\tjQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :\n\t\tjQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\t\treturn elem.nodeType === 1;\n\t\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i,\n\t\t\tlen = this.length,\n\t\t\tret = [],\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\t// Needed because $( selector, context ) becomes $( context ).find( selector )\n\t\tret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );\n\t\tret.selector = this.selector ? this.selector + \" \" + selector : selector;\n\t\treturn ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n\n// Initialize a jQuery object\n\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)\n\t// Strict HTML recognition (#11290: must start with <)\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]*))$/,\n\n\tinit = jQuery.fn.init = function( selector, context, root ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Method init() accepts an alternate rootjQuery\n\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\troot = root || rootjQuery;\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector[ 0 ] === \"<\" &&\n\t\t\t\tselector[ selector.length - 1 ] === \">\" &&\n\t\t\t\tselector.length >= 3 ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( jQuery.isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[ 2 ] );\n\n\t\t\t\t\t// Support: Blackberry 4.6\n\t\t\t\t\t// gEBID returns nodes no longer in the document (#6963)\n\t\t\t\t\tif ( elem && elem.parentNode ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.context = document;\n\t\t\t\t\tthis.selector = selector;\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || root ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis.context = this[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( jQuery.isFunction( selector ) ) {\n\t\t\treturn root.ready !== undefined ?\n\t\t\t\troot.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\t\t}\n\n\t\tif ( selector.selector !== undefined ) {\n\t\t\tthis.selector = selector.selector;\n\t\t\tthis.context = selector.context;\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document );\n\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\tpos = rneedsContext.test( selectors ) || typeof selectors !== \"string\" ?\n\t\t\t\tjQuery( selectors, context || this.context ) :\n\t\t\t\t0;\n\n\t\tfor ( ; i < l; i++ ) {\n\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t// Always skip document fragments\n\t\t\t\tif ( cur.nodeType < 11 && ( pos ?\n\t\t\t\t\tpos.index( cur ) > -1 :\n\n\t\t\t\t\t// Don't pass non-elements to Sizzle\n\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\treturn elem.contentDocument || jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\nvar rnotwhite = ( /\\S+/g );\n\n\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnotwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( jQuery.isFunction( arg ) ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && jQuery.type( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, listener list, final state\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ), \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ), \"rejected\" ],\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ) ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tthen: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\t\t\t\t\tvar fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];\n\n\t\t\t\t\t\t\t// deferred[ done | fail | progress ] for forwarding actions to newDefer\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && jQuery.isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis === promise ? newDefer.promise() : this,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Keep pipe for back-compat\n\t\tpromise.pipe = promise.then;\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 3 ];\n\n\t\t\t// promise[ done | fail | progress ] = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add( function() {\n\n\t\t\t\t\t// state = [ resolved | rejected ]\n\t\t\t\t\tstate = stateString;\n\n\t\t\t\t// [ reject_list | resolve_list ].disable; progress_list.lock\n\t\t\t\t}, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );\n\t\t\t}\n\n\t\t\t// deferred[ resolve | reject | notify ]\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? promise : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( subordinate /* , ..., subordinateN */ ) {\n\t\tvar i = 0,\n\t\t\tresolveValues = slice.call( arguments ),\n\t\t\tlength = resolveValues.length,\n\n\t\t\t// the count of uncompleted subordinates\n\t\t\tremaining = length !== 1 ||\n\t\t\t\t( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,\n\n\t\t\t// the master Deferred.\n\t\t\t// If resolveValues consist of only a single Deferred, just use that.\n\t\t\tdeferred = remaining === 1 ? subordinate : jQuery.Deferred(),\n\n\t\t\t// Update function for both resolve and progress values\n\t\t\tupdateFunc = function( i, contexts, values ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tcontexts[ i ] = this;\n\t\t\t\t\tvalues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( values === progressValues ) {\n\t\t\t\t\t\tdeferred.notifyWith( contexts, values );\n\t\t\t\t\t} else if ( !( --remaining ) ) {\n\t\t\t\t\t\tdeferred.resolveWith( contexts, values );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t},\n\n\t\t\tprogressValues, progressContexts, resolveContexts;\n\n\t\t// Add listeners to Deferred subordinates; treat others as resolved\n\t\tif ( length > 1 ) {\n\t\t\tprogressValues = new Array( length );\n\t\t\tprogressContexts = new Array( length );\n\t\t\tresolveContexts = new Array( length );\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {\n\t\t\t\t\tresolveValues[ i ].promise()\n\t\t\t\t\t\t.progress( updateFunc( i, progressContexts, progressValues ) )\n\t\t\t\t\t\t.done( updateFunc( i, resolveContexts, resolveValues ) )\n\t\t\t\t\t\t.fail( deferred.reject );\n\t\t\t\t} else {\n\t\t\t\t\t--remaining;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// If we're not waiting on anything, resolve the master\n\t\tif ( !remaining ) {\n\t\t\tdeferred.resolveWith( resolveContexts, resolveValues );\n\t\t}\n\n\t\treturn deferred.promise();\n\t}\n} );\n\n\n// The deferred used on DOM ready\nvar readyList;\n\njQuery.fn.ready = function( fn ) {\n\n\t// Add the callback\n\tjQuery.ready.promise().done( fn );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See #6781\n\treadyWait: 1,\n\n\t// Hold (or release) the ready event\n\tholdReady: function( hold ) {\n\t\tif ( hold ) {\n\t\t\tjQuery.readyWait++;\n\t\t} else {\n\t\t\tjQuery.ready( true );\n\t\t}\n\t},\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\n\t\t// Trigger any bound ready events\n\t\tif ( jQuery.fn.triggerHandler ) {\n\t\t\tjQuery( document ).triggerHandler( \"ready\" );\n\t\t\tjQuery( document ).off( \"ready\" );\n\t\t}\n\t}\n} );\n\n/**\n * The ready event handler and self cleanup method\n */\nfunction completed() {\n\tdocument.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\njQuery.ready.promise = function( obj ) {\n\tif ( !readyList ) {\n\n\t\treadyList = jQuery.Deferred();\n\n\t\t// Catch cases where $(document).ready() is called\n\t\t// after the browser event has already occurred.\n\t\t// Support: IE9-10 only\n\t\t// Older IE sometimes signals \"interactive\" too soon\n\t\tif ( document.readyState === \"complete\" ||\n\t\t\t( document.readyState !== \"loading\" && !document.documentElement.doScroll ) ) {\n\n\t\t\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\t\t\twindow.setTimeout( jQuery.ready );\n\n\t\t} else {\n\n\t\t\t// Use the handy event callback\n\t\t\tdocument.addEventListener( \"DOMContentLoaded\", completed );\n\n\t\t\t// A fallback to window.onload, that will always work\n\t\t\twindow.addEventListener( \"load\", completed );\n\t\t}\n\t}\n\treturn readyList.promise( obj );\n};\n\n// Kick off the DOM ready check even if the user does not\njQuery.ready.promise();\n\n\n\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nvar access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( jQuery.type( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( !jQuery.isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\tvalue :\n\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn chainable ?\n\t\telems :\n\n\t\t// Gets\n\t\tbulk ?\n\t\t\tfn.call( elems ) :\n\t\t\tlen ? fn( elems[ 0 ], key ) : emptyGet;\n};\nvar acceptData = function( owner ) {\n\n\t// Accepts only:\n\t// - Node\n\t// - Node.ELEMENT_NODE\n\t// - Node.DOCUMENT_NODE\n\t// - Object\n\t// - Any\n\t/* jshint -W018 */\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n};\n\n\n\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tregister: function( owner, initial ) {\n\t\tvar value = initial || {};\n\n\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t// use plain assignment\n\t\tif ( owner.nodeType ) {\n\t\t\towner[ this.expando ] = value;\n\n\t\t// Otherwise secure it in a non-enumerable, non-writable property\n\t\t// configurability must be true to allow the property to be\n\t\t// deleted with the delete operator\n\t\t} else {\n\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\tvalue: value,\n\t\t\t\twritable: true,\n\t\t\t\tconfigurable: true\n\t\t\t} );\n\t\t}\n\t\treturn owner[ this.expando ];\n\t},\n\tcache: function( owner ) {\n\n\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t// but we should not, see #8335.\n\t\t// Always return an empty object.\n\t\tif ( !acceptData( owner ) ) {\n\t\t\treturn {};\n\t\t}\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = {};\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see #8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ data ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ prop ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn cache;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\t\t\towner[ this.expando ] && owner[ this.expando ][ key ];\n\t},\n\taccess: function( owner, key, value ) {\n\t\tvar stored;\n\n\t\t// In cases where either:\n\t\t//\n\t\t// 1. No key was specified\n\t\t// 2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t// 1. The entire cache object\n\t\t// 2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\tstored = this.get( owner, key );\n\n\t\t\treturn stored !== undefined ?\n\t\t\t\tstored : this.get( owner, jQuery.camelCase( key ) );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t// 1. An object of properties\n\t\t// 2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i, name, camel,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key === undefined ) {\n\t\t\tthis.register( owner );\n\n\t\t} else {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( jQuery.isArray( key ) ) {\n\n\t\t\t\t// If \"name\" is an array of keys...\n\t\t\t\t// When data is initially created, via (\"key\", \"val\") signature,\n\t\t\t\t// keys will be converted to camelCase.\n\t\t\t\t// Since there is no way to tell _how_ a key was added, remove\n\t\t\t\t// both plain key and camelCase key. #12786\n\t\t\t\t// This will only penalize the array argument path.\n\t\t\t\tname = key.concat( key.map( jQuery.camelCase ) );\n\t\t\t} else {\n\t\t\t\tcamel = jQuery.camelCase( key );\n\n\t\t\t\t// Try the string as a key before any manipulation\n\t\t\t\tif ( key in cache ) {\n\t\t\t\t\tname = [ key, camel ];\n\t\t\t\t} else {\n\n\t\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\t\tname = camel;\n\t\t\t\t\tname = name in cache ?\n\t\t\t\t\t\t[ name ] : ( name.match( rnotwhite ) || [] );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\ti = name.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ name[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <= 35-45+\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://code.google.com/p/chromium/issues/detail?id=378607\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = data === \"true\" ? true :\n\t\t\t\t\tdata === \"false\" ? false :\n\t\t\t\t\tdata === \"null\" ? null :\n\n\t\t\t\t\t// Only convert to a number if it doesn't change the string\n\t\t\t\t\t+data + \"\" === data ? +data :\n\t\t\t\t\trbrace.test( data ) ? jQuery.parseJSON( data ) :\n\t\t\t\t\tdata;\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE11+\n\t\t\t\t\t\t// The attrs elements can be null (#14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = jQuery.camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data, camelKey;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// with the key as-is\n\t\t\t\tdata = dataUser.get( elem, key ) ||\n\n\t\t\t\t\t// Try to find dashed key if it exists (gh-2779)\n\t\t\t\t\t// This is for 2.2.x only\n\t\t\t\t\tdataUser.get( elem, key.replace( rmultiDash, \"-$&\" ).toLowerCase() );\n\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\tcamelKey = jQuery.camelCase( key );\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// with the key camelized\n\t\t\t\tdata = dataUser.get( elem, camelKey );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, camelKey, undefined );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tcamelKey = jQuery.camelCase( key );\n\t\t\tthis.each( function() {\n\n\t\t\t\t// First, attempt to store a copy or reference of any\n\t\t\t\t// data that might've been store with a camelCased key.\n\t\t\t\tvar data = dataUser.get( this, camelKey );\n\n\t\t\t\t// For HTML5 data-* attribute interop, we have to\n\t\t\t\t// store property names with dashes in a camelCase form.\n\t\t\t\t// This might not apply to all properties...*\n\t\t\t\tdataUser.set( this, camelKey, value );\n\n\t\t\t\t// *... In the case of properties that might _actually_\n\t\t\t\t// have dashes, we need to also store a copy of that\n\t\t\t\t// unchanged property.\n\t\t\t\tif ( key.indexOf( \"-\" ) > -1 && data !== undefined ) {\n\t\t\t\t\tdataUser.set( this, key, value );\n\t\t\t\t}\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || jQuery.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.access( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.access( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\nvar pnum = ( /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/ ).source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\nvar isHidden = function( elem, el ) {\n\n\t\t// isHidden might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\t\treturn jQuery.css( elem, \"display\" ) === \"none\" ||\n\t\t\t!jQuery.contains( elem.ownerDocument, elem );\n\t};\n\n\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted,\n\t\tscale = 1,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() { return tween.cur(); } :\n\t\t\tfunction() { return jQuery.css( elem, prop, \"\" ); },\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = ( jQuery.cssNumber[ prop ] || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\tdo {\n\n\t\t\t// If previous iteration zeroed out, double until we get *something*.\n\t\t\t// Use string for doubling so we don't accidentally see scale as unchanged below\n\t\t\tscale = scale || \".5\";\n\n\t\t\t// Adjust and apply\n\t\t\tinitialInUnit = initialInUnit / scale;\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Update scale, tolerating zero or NaN from tween.cur()\n\t\t// Break the loop if scale is unchanged or perfect, or if we've just had enough.\n\t\t} while (\n\t\t\tscale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations\n\t\t);\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\nvar rcheckableType = ( /^(?:checkbox|radio)$/i );\n\nvar rtagName = ( /<([\\w:-]+)/ );\n\nvar rscriptType = ( /^$|\\/(?:java|ecma)script/i );\n\n\n\n// We have to close these tags to support XHTML (#13200)\nvar wrapMap = {\n\n\t// Support: IE9\n\toption: [ 1, \"<select multiple='multiple'>\", \"</select>\" ],\n\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do. So we cannot shorten\n\t// this by omitting <tbody> or other required elements.\n\tthead: [ 1, \"<table>\", \"</table>\" ],\n\tcol: [ 2, \"<table><colgroup>\", \"</colgroup></table>\" ],\n\ttr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\n\ttd: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\n\n\t_default: [ 0, \"\", \"\" ]\n};\n\n// Support: IE9\nwrapMap.optgroup = wrapMap.option;\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE9-11+\n\t// Use typeof to avoid zero-argument method invocation on host objects (#15151)\n\tvar ret = typeof context.getElementsByTagName !== \"undefined\" ?\n\t\t\tcontext.getElementsByTagName( tag || \"*\" ) :\n\t\t\ttypeof context.querySelectorAll !== \"undefined\" ?\n\t\t\t\tcontext.querySelectorAll( tag || \"*\" ) :\n\t\t\t[];\n\n\treturn tag === undefined || tag && jQuery.nodeName( context, tag ) ?\n\t\tjQuery.merge( [ context ], ret ) :\n\t\tret;\n}\n\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, contains, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( jQuery.type( elem ) === \"object\" ) {\n\n\t\t\t\t// Support: Android<4.1, PhantomJS<2\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\t\t\t\ttmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];\n\n\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\tj = wrap[ 0 ];\n\t\t\t\twhile ( j-- ) {\n\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t}\n\n\t\t\t\t// Support: Android<4.1, PhantomJS<2\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (#12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tcontains = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( contains ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n\n( function() {\n\tvar fragment = document.createDocumentFragment(),\n\t\tdiv = fragment.appendChild( document.createElement( \"div\" ) ),\n\t\tinput = document.createElement( \"input\" );\n\n\t// Support: Android 4.0-4.3, Safari<=5.1\n\t// Check state lost if the name is set (#11217)\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` must use .setAttribute for WWA (#14901)\n\tinput.setAttribute( \"type\", \"radio\" );\n\tinput.setAttribute( \"checked\", \"checked\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tdiv.appendChild( input );\n\n\t// Support: Safari<=5.1, Android<4.2\n\t// Older WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE<=11+\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n} )();\n\n\nvar\n\trkeyEvent = /^key/,\n\trmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,\n\trtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\n// Support: IE9\n// See #13393 for more info\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Don't attach events to noData or text/comment nodes (but allow plain objects)\n\t\tif ( !elemData ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = {};\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnotwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnotwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( event ) {\n\n\t\t// Make a writable jQuery.Event from the native event object\n\t\tevent = jQuery.event.fix( event );\n\n\t\tvar i, j, ret, matched, handleObj,\n\t\t\thandlerQueue = [],\n\t\t\targs = slice.call( arguments ),\n\t\t\thandlers = ( dataPriv.get( this, \"events\" ) || {} )[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// Triggered event must either 1) have no namespace, or 2) have namespace(s)\n\t\t\t\t// a subset or equal to those in the bound event (both can have no namespace).\n\t\t\t\tif ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, matches, sel, handleObj,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Support (at least): Chrome, IE9\n\t\t// Find delegate handlers\n\t\t// Black-hole SVG <use> instance trees (#13180)\n\t\t//\n\t\t// Support: Firefox<=42+\n\t\t// Avoid non-left-click in FF but don't block IE radio events (#3861, gh-2343)\n\t\tif ( delegateCount && cur.nodeType &&\n\t\t\t( event.type !== \"click\" || isNaN( event.button ) || event.button < 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (#13208)\n\t\t\t\t// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\n\t\t\t\tif ( cur.nodeType === 1 && ( cur.disabled !== true || event.type !== \"click\" ) ) {\n\t\t\t\t\tmatches = [];\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (#13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matches[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatches[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matches[ sel ] ) {\n\t\t\t\t\t\t\tmatches.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matches.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matches } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: this, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\t// Includes some event props shared by KeyEvent and MouseEvent\n\tprops: ( \"altKey bubbles cancelable ctrlKey currentTarget detail eventPhase \" +\n\t\t\"metaKey relatedTarget shiftKey target timeStamp view which\" ).split( \" \" ),\n\n\tfixHooks: {},\n\n\tkeyHooks: {\n\t\tprops: \"char charCode key keyCode\".split( \" \" ),\n\t\tfilter: function( event, original ) {\n\n\t\t\t// Add which for key events\n\t\t\tif ( event.which == null ) {\n\t\t\t\tevent.which = original.charCode != null ? original.charCode : original.keyCode;\n\t\t\t}\n\n\t\t\treturn event;\n\t\t}\n\t},\n\n\tmouseHooks: {\n\t\tprops: ( \"button buttons clientX clientY offsetX offsetY pageX pageY \" +\n\t\t\t\"screenX screenY toElement\" ).split( \" \" ),\n\t\tfilter: function( event, original ) {\n\t\t\tvar eventDoc, doc, body,\n\t\t\t\tbutton = original.button;\n\n\t\t\t// Calculate pageX/Y if missing and clientX/Y available\n\t\t\tif ( event.pageX == null && original.clientX != null ) {\n\t\t\t\teventDoc = event.target.ownerDocument || document;\n\t\t\t\tdoc = eventDoc.documentElement;\n\t\t\t\tbody = eventDoc.body;\n\n\t\t\t\tevent.pageX = original.clientX +\n\t\t\t\t\t( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) -\n\t\t\t\t\t( doc && doc.clientLeft || body && body.clientLeft || 0 );\n\t\t\t\tevent.pageY = original.clientY +\n\t\t\t\t\t( doc && doc.scrollTop || body && body.scrollTop || 0 ) -\n\t\t\t\t\t( doc && doc.clientTop || body && body.clientTop || 0 );\n\t\t\t}\n\n\t\t\t// Add which for click: 1 === left; 2 === middle; 3 === right\n\t\t\t// Note: button is not normalized, so don't use it\n\t\t\tif ( !event.which && button !== undefined ) {\n\t\t\t\tevent.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );\n\t\t\t}\n\n\t\t\treturn event;\n\t\t}\n\t},\n\n\tfix: function( event ) {\n\t\tif ( event[ jQuery.expando ] ) {\n\t\t\treturn event;\n\t\t}\n\n\t\t// Create a writable copy of the event object and normalize some properties\n\t\tvar i, prop, copy,\n\t\t\ttype = event.type,\n\t\t\toriginalEvent = event,\n\t\t\tfixHook = this.fixHooks[ type ];\n\n\t\tif ( !fixHook ) {\n\t\t\tthis.fixHooks[ type ] = fixHook =\n\t\t\t\trmouseEvent.test( type ) ? this.mouseHooks :\n\t\t\t\trkeyEvent.test( type ) ? this.keyHooks :\n\t\t\t\t{};\n\t\t}\n\t\tcopy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;\n\n\t\tevent = new jQuery.Event( originalEvent );\n\n\t\ti = copy.length;\n\t\twhile ( i-- ) {\n\t\t\tprop = copy[ i ];\n\t\t\tevent[ prop ] = originalEvent[ prop ];\n\t\t}\n\n\t\t// Support: Cordova 2.5 (WebKit) (#13255)\n\t\t// All events should have a target; Cordova deviceready doesn't\n\t\tif ( !event.target ) {\n\t\t\tevent.target = document;\n\t\t}\n\n\t\t// Support: Safari 6.0+, Chrome<28\n\t\t// Target should not be a text node (#504, #13143)\n\t\tif ( event.target.nodeType === 3 ) {\n\t\t\tevent.target = event.target.parentNode;\n\t\t}\n\n\t\treturn fixHook.filter ? fixHook.filter( event, originalEvent ) : event;\n\t},\n\n\tspecial: {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tfocus: {\n\n\t\t\t// Fire native event if possible so blur/focus sequence is correct\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this !== safeActiveElement() && this.focus ) {\n\t\t\t\t\tthis.focus();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusin\"\n\t\t},\n\t\tblur: {\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this === safeActiveElement() && this.blur ) {\n\t\t\t\t\tthis.blur();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusout\"\n\t\t},\n\t\tclick: {\n\n\t\t\t// For checkbox, fire native event so checked state will be right\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this.type === \"checkbox\" && this.click && jQuery.nodeName( this, \"input\" ) ) {\n\t\t\t\t\tthis.click();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, don't fire native .click() on links\n\t\t\t_default: function( event ) {\n\t\t\t\treturn jQuery.nodeName( event.target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Support: Firefox 20+\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android<4.0\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || jQuery.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\n//\n// Support: Safari 7 only\n// Safari sends mouseenter too often; see:\n// https://code.google.com/p/chromium/issues/detail?id=470258\n// for the description of the bug (it existed in older Chrome versions as well).\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event ) dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\n\nvar\n\trxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:-]+)[^>]*)\\/>/gi,\n\n\t// Support: IE 10-11, Edge 10240+\n\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\trnoInnerhtml = /<script|<style|<link/i,\n\n\t// checked=\"checked\" or checked\n\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\trscriptTypeMasked = /^true\\/(.*)/,\n\trcleanScript = /^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g;\n\n// Manipulating tables requires a tbody\nfunction manipulationTarget( elem, content ) {\n\treturn jQuery.nodeName( elem, \"table\" ) &&\n\t\tjQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ?\n\n\t\telem.getElementsByTagName( \"tbody\" )[ 0 ] ||\n\t\t\telem.appendChild( elem.ownerDocument.createElement( \"tbody\" ) ) :\n\t\telem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tvar match = rscriptTypeMasked.exec( elem.type );\n\n\tif ( match ) {\n\t\telem.type = match[ 1 ];\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tvar i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;\n\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// 1. Copy private data: events, handlers, etc.\n\tif ( dataPriv.hasData( src ) ) {\n\t\tpdataOld = dataPriv.access( src );\n\t\tpdataCur = dataPriv.set( dest, pdataOld );\n\t\tevents = pdataOld.events;\n\n\t\tif ( events ) {\n\t\t\tdelete pdataCur.handle;\n\t\t\tpdataCur.events = {};\n\n\t\t\tfor ( type in events ) {\n\t\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// 2. Copy user data\n\tif ( dataUser.hasData( src ) ) {\n\t\tudataOld = dataUser.access( src );\n\t\tudataCur = jQuery.extend( {}, udataOld );\n\n\t\tdataUser.set( dest, udataCur );\n\t}\n}\n\n// Fix IE bugs, see support tests\nfunction fixInput( src, dest ) {\n\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\tif ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\n\t\tdest.checked = src.checked;\n\n\t// Fails to return the selected option to the default selected state when cloning options\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = concat.apply( [], args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tisFunction = jQuery.isFunction( value );\n\n\t// We can't cloneNode fragments that contain checked, in WebKit\n\tif ( isFunction ||\n\t\t\t( l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\tif ( isFunction ) {\n\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\t}\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (#8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\n\t\t\t\t\t\t// Support: Android<4.1, PhantomJS<2\n\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Reenable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.access( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tjQuery.globalEval( node.textContent.replace( rcleanScript, \"\" ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nfunction remove( elem, selector, keepData ) {\n\tvar node,\n\t\tnodes = selector ? jQuery.filter( selector, elem ) : elem,\n\t\ti = 0;\n\n\tfor ( ; ( node = nodes[ i ] ) != null; i++ ) {\n\t\tif ( !keepData && node.nodeType === 1 ) {\n\t\t\tjQuery.cleanData( getAll( node ) );\n\t\t}\n\n\t\tif ( node.parentNode ) {\n\t\t\tif ( keepData && jQuery.contains( node.ownerDocument, node ) ) {\n\t\t\t\tsetGlobalEval( getAll( node, \"script\" ) );\n\t\t\t}\n\t\t\tnode.parentNode.removeChild( node );\n\t\t}\n\t}\n\n\treturn elem;\n}\n\njQuery.extend( {\n\thtmlPrefilter: function( html ) {\n\t\treturn html.replace( rxhtmlTag, \"<$1></$2>\" );\n\t},\n\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar i, l, srcElements, destElements,\n\t\t\tclone = elem.cloneNode( true ),\n\t\t\tinPage = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t// Fix IE cloning issues\n\t\tif ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&\n\t\t\t\t!jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\tfixInput( srcElements[ i ], destElements[ i ] );\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[ i ], destElements[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <= 35-45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <= 35-45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\n\t// Keep domManip exposed until 3.0 (gh-2225)\n\tdomManip: domManip,\n\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\n\t\t\t// Support: QtWebKit\n\t\t\t// .get() because push.apply(_, arraylike) throws\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\n\n\nvar iframe,\n\telemdisplay = {\n\n\t\t// Support: Firefox\n\t\t// We have to pre-define these values for FF (#10227)\n\t\tHTML: \"block\",\n\t\tBODY: \"block\"\n\t};\n\n/**\n * Retrieve the actual display of a element\n * @param {String} name nodeName of the element\n * @param {Object} doc Document object\n */\n\n// Called only from within defaultDisplay\nfunction actualDisplay( name, doc ) {\n\tvar elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),\n\n\t\tdisplay = jQuery.css( elem[ 0 ], \"display\" );\n\n\t// We don't have any data stored on the element,\n\t// so use \"detach\" method as fast way to get rid of the element\n\telem.detach();\n\n\treturn display;\n}\n\n/**\n * Try to determine the default display value of an element\n * @param {String} nodeName\n */\nfunction defaultDisplay( nodeName ) {\n\tvar doc = document,\n\t\tdisplay = elemdisplay[ nodeName ];\n\n\tif ( !display ) {\n\t\tdisplay = actualDisplay( nodeName, doc );\n\n\t\t// If the simple way fails, read from inside an iframe\n\t\tif ( display === \"none\" || !display ) {\n\n\t\t\t// Use the already-created iframe if possible\n\t\t\tiframe = ( iframe || jQuery( \"<iframe frameborder='0' width='0' height='0'/>\" ) )\n\t\t\t\t.appendTo( doc.documentElement );\n\n\t\t\t// Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse\n\t\t\tdoc = iframe[ 0 ].contentDocument;\n\n\t\t\t// Support: IE\n\t\t\tdoc.write();\n\t\t\tdoc.close();\n\n\t\t\tdisplay = actualDisplay( nodeName, doc );\n\t\t\tiframe.detach();\n\t\t}\n\n\t\t// Store the correct default display\n\t\telemdisplay[ nodeName ] = display;\n\t}\n\n\treturn display;\n}\nvar rmargin = ( /^margin/ );\n\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar getStyles = function( elem ) {\n\n\t\t// Support: IE<=11+, Firefox<=30+ (#15098, #14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif ( !view || !view.opener ) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle( elem );\n\t};\n\nvar swap = function( elem, options, callback, args ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.apply( elem, args || [] );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n};\n\n\nvar documentElement = document.documentElement;\n\n\n\n( function() {\n\tvar pixelPositionVal, boxSizingReliableVal, pixelMarginRightVal, reliableMarginLeftVal,\n\t\tcontainer = document.createElement( \"div\" ),\n\t\tdiv = document.createElement( \"div\" );\n\n\t// Finish early in limited (non-browser) environments\n\tif ( !div.style ) {\n\t\treturn;\n\t}\n\n\t// Support: IE9-11+\n\t// Style of cloned element affects source element cloned (#8908)\n\tdiv.style.backgroundClip = \"content-box\";\n\tdiv.cloneNode( true ).style.backgroundClip = \"\";\n\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\tcontainer.style.cssText = \"border:0;width:8px;height:0;top:0;left:-9999px;\" +\n\t\t\"padding:0;margin-top:1px;position:absolute\";\n\tcontainer.appendChild( div );\n\n\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t// so they're executed at the same time to save the second computation.\n\tfunction computeStyleTests() {\n\t\tdiv.style.cssText =\n\n\t\t\t// Support: Firefox<29, Android 2.3\n\t\t\t// Vendor-prefix box-sizing\n\t\t\t\"-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;\" +\n\t\t\t\"position:relative;display:block;\" +\n\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\"top:1%;width:50%\";\n\t\tdiv.innerHTML = \"\";\n\t\tdocumentElement.appendChild( container );\n\n\t\tvar divStyle = window.getComputedStyle( div );\n\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\t\treliableMarginLeftVal = divStyle.marginLeft === \"2px\";\n\t\tboxSizingReliableVal = divStyle.width === \"4px\";\n\n\t\t// Support: Android 4.0 - 4.3 only\n\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\tdiv.style.marginRight = \"50%\";\n\t\tpixelMarginRightVal = divStyle.marginRight === \"4px\";\n\n\t\tdocumentElement.removeChild( container );\n\t}\n\n\tjQuery.extend( support, {\n\t\tpixelPosition: function() {\n\n\t\t\t// This test is executed only once but we still do memoizing\n\t\t\t// since we can use the boxSizingReliable pre-computing.\n\t\t\t// No need to check if the test was already performed, though.\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelPositionVal;\n\t\t},\n\t\tboxSizingReliable: function() {\n\t\t\tif ( boxSizingReliableVal == null ) {\n\t\t\t\tcomputeStyleTests();\n\t\t\t}\n\t\t\treturn boxSizingReliableVal;\n\t\t},\n\t\tpixelMarginRight: function() {\n\n\t\t\t// Support: Android 4.0-4.3\n\t\t\t// We're checking for boxSizingReliableVal here instead of pixelMarginRightVal\n\t\t\t// since that compresses better and they're computed together anyway.\n\t\t\tif ( boxSizingReliableVal == null ) {\n\t\t\t\tcomputeStyleTests();\n\t\t\t}\n\t\t\treturn pixelMarginRightVal;\n\t\t},\n\t\treliableMarginLeft: function() {\n\n\t\t\t// Support: IE <=8 only, Android 4.0 - 4.3 only, Firefox <=3 - 37\n\t\t\tif ( boxSizingReliableVal == null ) {\n\t\t\t\tcomputeStyleTests();\n\t\t\t}\n\t\t\treturn reliableMarginLeftVal;\n\t\t},\n\t\treliableMarginRight: function() {\n\n\t\t\t// Support: Android 2.3\n\t\t\t// Check if div with explicit width and no margin-right incorrectly\n\t\t\t// gets computed margin-right based on width of container. (#3333)\n\t\t\t// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right\n\t\t\t// This support function is only executed once so no memoizing is needed.\n\t\t\tvar ret,\n\t\t\t\tmarginDiv = div.appendChild( document.createElement( \"div\" ) );\n\n\t\t\t// Reset CSS: box-sizing; display; margin; border; padding\n\t\t\tmarginDiv.style.cssText = div.style.cssText =\n\n\t\t\t\t// Support: Android 2.3\n\t\t\t\t// Vendor-prefix box-sizing\n\t\t\t\t\"-webkit-box-sizing:content-box;box-sizing:content-box;\" +\n\t\t\t\t\"display:block;margin:0;border:0;padding:0\";\n\t\t\tmarginDiv.style.marginRight = marginDiv.style.width = \"0\";\n\t\t\tdiv.style.width = \"1px\";\n\t\t\tdocumentElement.appendChild( container );\n\n\t\t\tret = !parseFloat( window.getComputedStyle( marginDiv ).marginRight );\n\n\t\t\tdocumentElement.removeChild( container );\n\t\t\tdiv.removeChild( marginDiv );\n\n\t\t\treturn ret;\n\t\t}\n\t} );\n} )();\n\n\nfunction curCSS( elem, name, computed ) {\n\tvar width, minWidth, maxWidth, ret,\n\t\tstyle = elem.style;\n\n\tcomputed = computed || getStyles( elem );\n\tret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined;\n\n\t// Support: Opera 12.1x only\n\t// Fall back to style even without computed\n\t// computed is undefined for elems on document fragments\n\tif ( ( ret === \"\" || ret === undefined ) && !jQuery.contains( elem.ownerDocument, elem ) ) {\n\t\tret = jQuery.style( elem, name );\n\t}\n\n\t// Support: IE9\n\t// getPropertyValue is only needed for .css('filter') (#12537)\n\tif ( computed ) {\n\n\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t// Android Browser returns percentage for some values,\n\t\t// but width seems to be reliably pixels.\n\t\t// This is against the CSSOM draft spec:\n\t\t// http://dev.w3.org/csswg/cssom/#resolved-values\n\t\tif ( !support.pixelMarginRight() && rnumnonpx.test( ret ) && rmargin.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\twidth = style.width;\n\t\t\tminWidth = style.minWidth;\n\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\tret = computed.width;\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.width = width;\n\t\t\tstyle.minWidth = minWidth;\n\t\t\tstyle.maxWidth = maxWidth;\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE9-11+\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\n\nfunction addGetHookIf( conditionFn, hookFn ) {\n\n\t// Define the hook, we'll check on the first run if it's really needed.\n\treturn {\n\t\tget: function() {\n\t\t\tif ( conditionFn() ) {\n\n\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t// to missing dependency), remove it.\n\t\t\t\tdelete this.get;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\treturn ( this.get = hookFn ).apply( this, arguments );\n\t\t}\n\t};\n}\n\n\nvar\n\n\t// Swappable if display is none or starts with table\n\t// except \"table\", \"table-cell\", or \"table-caption\"\n\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t},\n\n\tcssPrefixes = [ \"Webkit\", \"O\", \"Moz\", \"ms\" ],\n\temptyStyle = document.createElement( \"div\" ).style;\n\n// Return a css property mapped to a potentially vendor prefixed property\nfunction vendorPropName( name ) {\n\n\t// Shortcut for names that are not vendor prefixed\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\nfunction setPositiveNumber( elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {\n\tvar i = extra === ( isBorderBox ? \"border\" : \"content\" ) ?\n\n\t\t// If we already have the right measurement, avoid augmentation\n\t\t4 :\n\n\t\t// Otherwise initialize for horizontal or vertical properties\n\t\tname === \"width\" ? 1 : 0,\n\n\t\tval = 0;\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin, so add it if we want it\n\t\tif ( extra === \"margin\" ) {\n\t\t\tval += jQuery.css( elem, extra + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\tif ( isBorderBox ) {\n\n\t\t\t// border-box includes padding, so remove it if we want content\n\t\t\tif ( extra === \"content\" ) {\n\t\t\t\tval -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// At this point, extra isn't border nor margin, so remove border\n\t\t\tif ( extra !== \"margin\" ) {\n\t\t\t\tval -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t} else {\n\n\t\t\t// At this point, extra isn't content, so add padding\n\t\t\tval += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// At this point, extra isn't content nor padding, so add border\n\t\t\tif ( extra !== \"padding\" ) {\n\t\t\t\tval += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\treturn val;\n}\n\nfunction getWidthOrHeight( elem, name, extra ) {\n\n\t// Start with offset property, which is equivalent to the border-box value\n\tvar valueIsBorderBox = true,\n\t\tval = name === \"width\" ? elem.offsetWidth : elem.offsetHeight,\n\t\tstyles = getStyles( elem ),\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t// Some non-html elements return undefined for offsetWidth, so check for null/undefined\n\t// svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285\n\t// MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668\n\tif ( val <= 0 || val == null ) {\n\n\t\t// Fall back to computed then uncomputed css if necessary\n\t\tval = curCSS( elem, name, styles );\n\t\tif ( val < 0 || val == null ) {\n\t\t\tval = elem.style[ name ];\n\t\t}\n\n\t\t// Computed unit is not pixels. Stop here and return.\n\t\tif ( rnumnonpx.test( val ) ) {\n\t\t\treturn val;\n\t\t}\n\n\t\t// Check for style in case a browser which returns unreliable values\n\t\t// for getComputedStyle silently falls back to the reliable elem.style\n\t\tvalueIsBorderBox = isBorderBox &&\n\t\t\t( support.boxSizingReliable() || val === elem.style[ name ] );\n\n\t\t// Normalize \"\", auto, and prepare for extra\n\t\tval = parseFloat( val ) || 0;\n\t}\n\n\t// Use the active box-sizing model to add/subtract irrelevant styles\n\treturn ( val +\n\t\taugmentWidthOrHeight(\n\t\t\telem,\n\t\t\tname,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles\n\t\t)\n\t) + \"px\";\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem, hidden,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tvalues[ index ] = dataPriv.get( elem, \"olddisplay\" );\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Reset the inline display of this element to learn if it is\n\t\t\t// being hidden by cascaded rules or not\n\t\t\tif ( !values[ index ] && display === \"none\" ) {\n\t\t\t\telem.style.display = \"\";\n\t\t\t}\n\n\t\t\t// Set elements which have been overridden with display: none\n\t\t\t// in a stylesheet to whatever the default browser style is\n\t\t\t// for such an element\n\t\t\tif ( elem.style.display === \"\" && isHidden( elem ) ) {\n\t\t\t\tvalues[ index ] = dataPriv.access(\n\t\t\t\t\telem,\n\t\t\t\t\t\"olddisplay\",\n\t\t\t\t\tdefaultDisplay( elem.nodeName )\n\t\t\t\t);\n\t\t\t}\n\t\t} else {\n\t\t\thidden = isHidden( elem );\n\n\t\t\tif ( display !== \"none\" || !hidden ) {\n\t\t\t\tdataPriv.set(\n\t\t\t\t\telem,\n\t\t\t\t\t\"olddisplay\",\n\t\t\t\t\thidden ? display : jQuery.css( elem, \"display\" )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of most of the elements in a second loop\n\t// to avoid the constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\t\tif ( !show || elem.style.display === \"none\" || elem.style.display === \"\" ) {\n\t\t\telem.style.display = show ? values[ index ] || \"\" : \"none\";\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Don't automatically add \"px\" to these possibly-unitless properties\n\tcssNumber: {\n\t\t\"animationIterationCount\": true,\n\t\t\"columnCount\": true,\n\t\t\"fillOpacity\": true,\n\t\t\"flexGrow\": true,\n\t\t\"flexShrink\": true,\n\t\t\"fontWeight\": true,\n\t\t\"lineHeight\": true,\n\t\t\"opacity\": true,\n\t\t\"order\": true,\n\t\t\"orphans\": true,\n\t\t\"widows\": true,\n\t\t\"zIndex\": true,\n\t\t\"zoom\": true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {\n\t\t\"float\": \"cssFloat\"\n\t},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = jQuery.camelCase( name ),\n\t\t\tstyle = elem.style;\n\n\t\tname = jQuery.cssProps[ origName ] ||\n\t\t\t( jQuery.cssProps[ origName ] = vendorPropName( origName ) || origName );\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (#7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug #9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (#7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\tif ( type === \"number\" ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? \"\" : \"px\" );\n\t\t\t}\n\n\t\t\t// Support: IE9-11+\n\t\t\t// background-* props affect original clone's values\n\t\t\tif ( !support.clearCloneStyle && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tstyle[ name ] = value;\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = jQuery.camelCase( name );\n\n\t\t// Make sure that we're working with the right name\n\t\tname = jQuery.cssProps[ origName ] ||\n\t\t\t( jQuery.cssProps[ origName ] = vendorPropName( origName ) || origName );\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( i, name ) {\n\tjQuery.cssHooks[ name ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\treturn rdisplayswap.test( jQuery.css( elem, \"display\" ) ) &&\n\t\t\t\t\telem.offsetWidth === 0 ?\n\t\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\t\treturn getWidthOrHeight( elem, name, extra );\n\t\t\t\t\t\t} ) :\n\t\t\t\t\t\tgetWidthOrHeight( elem, name, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = extra && getStyles( elem ),\n\t\t\t\tsubtract = extra && augmentWidthOrHeight(\n\t\t\t\t\telem,\n\t\t\t\t\tname,\n\t\t\t\t\textra,\n\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\t\tstyles\n\t\t\t\t);\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ name ] = value;\n\t\t\t\tvalue = jQuery.css( elem, name );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\njQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn ( parseFloat( curCSS( elem, \"marginLeft\" ) ) ||\n\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap( elem, { marginLeft: 0 }, function() {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t} )\n\t\t\t\t) + \"px\";\n\t\t}\n\t}\n);\n\n// Support: Android 2.3\njQuery.cssHooks.marginRight = addGetHookIf( support.reliableMarginRight,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn swap( elem, { \"display\": \"inline-block\" },\n\t\t\t\tcurCSS, [ elem, \"marginRight\" ] );\n\t\t}\n\t}\n);\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( !rmargin.test( prefix ) ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( jQuery.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t},\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHidden( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\n\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 &&\n\t\t\t\t( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null ||\n\t\t\t\t\tjQuery.cssHooks[ tween.prop ] ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Support: IE9\n// Panic based approach to setting things on disconnected nodes\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\tset: function( tween ) {\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back Compat <1.8 extension point\njQuery.fx.step = {};\n\n\n\n\nvar\n\tfxNow, timerId,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = jQuery.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4 ; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\t/* jshint validthis: true */\n\tvar prop, value, toggle, tween, hooks, oldfire, display, checkDisplay,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHidden( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Handle queue: false promises\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Height/width overflow pass\n\tif ( elem.nodeType === 1 && ( \"height\" in props || \"width\" in props ) ) {\n\n\t\t// Make sure that nothing sneaks out\n\t\t// Record all 3 overflow attributes because IE9-10 do not\n\t\t// change the overflow attribute when overflowX and\n\t\t// overflowY are set to the same value\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Set display property to inline-block for height/width\n\t\t// animations on inline elements that are having width/height animated\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\n\t\t// Test default display if display is currently \"none\"\n\t\tcheckDisplay = display === \"none\" ?\n\t\t\tdataPriv.get( elem, \"olddisplay\" ) || defaultDisplay( elem.nodeName ) : display;\n\n\t\tif ( checkDisplay === \"inline\" && jQuery.css( elem, \"float\" ) === \"none\" ) {\n\t\t\tstyle.display = \"inline-block\";\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// show/hide pass\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.exec( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// If there is dataShow left over from a stopped hide or show\n\t\t\t\t// and we are going to proceed with show, we should pretend to be hidden\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\n\t\t// Any non-fx value stops us from restoring the original display value\n\t\t} else {\n\t\t\tdisplay = undefined;\n\t\t}\n\t}\n\n\tif ( !jQuery.isEmptyObject( orig ) ) {\n\t\tif ( dataShow ) {\n\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\thidden = dataShow.hidden;\n\t\t\t}\n\t\t} else {\n\t\t\tdataShow = dataPriv.access( elem, \"fxshow\", {} );\n\t\t}\n\n\t\t// Store state if its toggle - enables .stop().toggle() to \"reverse\"\n\t\tif ( toggle ) {\n\t\t\tdataShow.hidden = !hidden;\n\t\t}\n\t\tif ( hidden ) {\n\t\t\tjQuery( elem ).show();\n\t\t} else {\n\t\t\tanim.done( function() {\n\t\t\t\tjQuery( elem ).hide();\n\t\t\t} );\n\t\t}\n\t\tanim.done( function() {\n\t\t\tvar prop;\n\n\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\tfor ( prop in orig ) {\n\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t}\n\t\t} );\n\t\tfor ( prop in orig ) {\n\t\t\ttween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\n\t\t\tif ( !( prop in dataShow ) ) {\n\t\t\t\tdataShow[ prop ] = tween.start;\n\t\t\t\tif ( hidden ) {\n\t\t\t\t\ttween.end = tween.start;\n\t\t\t\t\ttween.start = prop === \"width\" || prop === \"height\" ? 1 : 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t// If this is a noop like .hide().hide(), restore an overwritten display value\n\t} else if ( ( display === \"none\" ? defaultDisplay( elem.nodeName ) : display ) === \"inline\" ) {\n\t\tstyle.display = display;\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = jQuery.camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( jQuery.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\t// Support: Android 2.3\n\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)\n\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\tpercent = 1 - temp,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length ; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t} else {\n\t\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length ; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length ; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( jQuery.isFunction( result.stop ) ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tjQuery.proxy( result.stop, result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( jQuery.isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\t// attach callbacks from options\n\treturn animation.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( jQuery.isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnotwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length ; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || !fn && easing ||\n\t\t\tjQuery.isFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !jQuery.isFunction( easing ) && easing\n\t};\n\n\topt.duration = jQuery.fx.off ? 0 : typeof opt.duration === \"number\" ?\n\t\topt.duration : opt.duration in jQuery.fx.speeds ?\n\t\t\tjQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( jQuery.isFunction( opt.old ) ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHidden ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\t\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue && type !== false ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = jQuery.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Checks the timer has not already been removed\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tif ( timer() ) {\n\t\tjQuery.fx.start();\n\t} else {\n\t\tjQuery.timers.pop();\n\t}\n};\n\njQuery.fx.interval = 13;\njQuery.fx.start = function() {\n\tif ( !timerId ) {\n\t\ttimerId = window.setInterval( jQuery.fx.tick, jQuery.fx.interval );\n\t}\n};\n\njQuery.fx.stop = function() {\n\twindow.clearInterval( timerId );\n\n\ttimerId = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n\n// Based off of the plugin by Clint Helfers, with permission.\n// http://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\n\n( function() {\n\tvar input = document.createElement( \"input\" ),\n\t\tselect = document.createElement( \"select\" ),\n\t\topt = select.appendChild( document.createElement( \"option\" ) );\n\n\tinput.type = \"checkbox\";\n\n\t// Support: iOS<=5.1, Android<=4.2+\n\t// Default value for a checkbox should be \"on\"\n\tsupport.checkOn = input.value !== \"\";\n\n\t// Support: IE<=11+\n\t// Must access selectedIndex to make default options select\n\tsupport.optSelected = opt.selected;\n\n\t// Support: Android<=2.3\n\t// Options inside disabled selects are incorrectly marked as disabled\n\tselect.disabled = true;\n\tsupport.optDisabled = !opt.disabled;\n\n\t// Support: IE<=11+\n\t// An input loses its value after becoming a radio\n\tinput = document.createElement( \"input\" );\n\tinput.value = \"t\";\n\tinput.type = \"radio\";\n\tsupport.radioValue = input.value === \"t\";\n} )();\n\n\nvar boolHook,\n\tattrHandle = jQuery.expr.attrHandle;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// All attributes are lowercase\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\tname = name.toLowerCase();\n\t\t\thooks = jQuery.attrHooks[ name ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = jQuery.find.attr( elem, name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !support.radioValue && value === \"radio\" &&\n\t\t\t\t\tjQuery.nodeName( elem, \"input\" ) ) {\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name, propName,\n\t\t\ti = 0,\n\t\t\tattrNames = value && value.match( rnotwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\tpropName = jQuery.propFix[ name ] || name;\n\n\t\t\t\t// Boolean attributes get special treatment (#10870)\n\t\t\t\tif ( jQuery.expr.match.bool.test( name ) ) {\n\n\t\t\t\t\t// Set corresponding property to false\n\t\t\t\t\telem[ propName ] = false;\n\t\t\t\t}\n\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Hooks for boolean attributes\nboolHook = {\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else {\n\t\t\telem.setAttribute( name, name );\n\t\t}\n\t\treturn name;\n\t}\n};\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( i, name ) {\n\tvar getter = attrHandle[ name ] || jQuery.find.attr;\n\n\tattrHandle[ name ] = function( elem, name, isXML ) {\n\t\tvar ret, handle;\n\t\tif ( !isXML ) {\n\n\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\thandle = attrHandle[ name ];\n\t\t\tattrHandle[ name ] = ret;\n\t\t\tret = getter( elem, name, isXML ) != null ?\n\t\t\t\tname.toLowerCase() :\n\t\t\t\tnull;\n\t\t\tattrHandle[ name ] = handle;\n\t\t}\n\t\treturn ret;\n\t};\n} );\n\n\n\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/\n\t\t\t\t// Use proper attribute retrieval(#12072)\n\t\t\t\tvar tabindex = jQuery.find.attr( elem, \"tabindex\" );\n\n\t\t\t\treturn tabindex ?\n\t\t\t\t\tparseInt( tabindex, 10 ) :\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\t\t\t\t\t\trclickable.test( elem.nodeName ) && elem.href ?\n\t\t\t\t\t\t\t0 :\n\t\t\t\t\t\t\t-1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Support: IE <=11 only\n// Accessing the selectedIndex property\n// forces the browser to respect setting selected\n// on the option\n// The getter ensures a default option is selected\n// when in an optgroup\nif ( !support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n\n\n\nvar rclass = /[\\t\\r\\n\\f]/g;\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( typeof value === \"string\" && value ) {\n\t\t\tclasses = value.match( rnotwhite ) || [];\n\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\t\t\t\tcur = elem.nodeType === 1 &&\n\t\t\t\t\t( \" \" + curValue + \" \" ).replace( rclass, \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + clazz + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += clazz + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = jQuery.trim( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tif ( typeof value === \"string\" && value ) {\n\t\t\tclasses = value.match( rnotwhite ) || [];\n\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = elem.nodeType === 1 &&\n\t\t\t\t\t( \" \" + curValue + \" \" ).replace( rclass, \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + clazz + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + clazz + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = jQuery.trim( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar type = typeof value;\n\n\t\tif ( typeof stateVal === \"boolean\" && type === \"string\" ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar className, i, self, classNames;\n\n\t\t\tif ( type === \"string\" ) {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\ti = 0;\n\t\t\t\tself = jQuery( this );\n\t\t\t\tclassNames = value.match( rnotwhite ) || [];\n\n\t\t\t\twhile ( ( className = classNames[ i++ ] ) ) {\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Toggle whole class name\n\t\t\t} else if ( value === undefined || type === \"boolean\" ) {\n\t\t\t\tclassName = getClass( this );\n\t\t\t\tif ( className ) {\n\n\t\t\t\t\t// Store className if set\n\t\t\t\t\tdataPriv.set( this, \"__className__\", className );\n\t\t\t\t}\n\n\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\tif ( this.setAttribute ) {\n\t\t\t\t\tthis.setAttribute( \"class\",\n\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\tdataPriv.get( this, \"__className__\" ) || \"\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + getClass( elem ) + \" \" ).replace( rclass, \" \" )\n\t\t\t\t\t.indexOf( className ) > -1\n\t\t\t) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\n\n\n\nvar rreturn = /\\r/g,\n\trspaces = /[\\x20\\t\\r\\n\\f]+/g;\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, isFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\treturn typeof ret === \"string\" ?\n\n\t\t\t\t\t// Handle most common string cases\n\t\t\t\t\tret.replace( rreturn, \"\" ) :\n\n\t\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\t\tret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tisFunction = jQuery.isFunction( value );\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( isFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( jQuery.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\tvar val = jQuery.find.attr( elem, \"value\" );\n\t\t\t\treturn val != null ?\n\t\t\t\t\tval :\n\n\t\t\t\t\t// Support: IE10-11+\n\t\t\t\t\t// option.text throws exceptions (#14686, #14858)\n\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\tjQuery.trim( jQuery.text( elem ) ).replace( rspaces, \" \" );\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\" || index < 0,\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length,\n\t\t\t\t\ti = index < 0 ?\n\t\t\t\t\t\tmax :\n\t\t\t\t\t\tone ? index : 0;\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// IE8-9 doesn't update selected after form reset (#2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t( support.optDisabled ?\n\t\t\t\t\t\t\t\t!option.disabled : option.getAttribute( \"disabled\" ) === null ) &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!jQuery.nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\t\t\t\t\tif ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1\n\t\t\t\t\t) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( jQuery.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n\tif ( !support.checkOn ) {\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\treturn elem.getAttribute( \"value\" ) === null ? \"on\" : elem.value;\n\t\t};\n\t}\n} );\n\n\n\n\n// Return jQuery for attributes-only inclusion\n\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/;\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = tmp = elem = elem || document;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (#9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( dataPriv.get( cur, \"events\" ) || {} )[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (#6170)\n\t\t\t\tif ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\t\t\t\t\telem[ type ]();\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\t// Used only for `focus(in | out)` events\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\n\njQuery.each( ( \"blur focus focusin focusout load resize scroll unload click dblclick \" +\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\"change select submit keydown keypress keyup error contextmenu\" ).split( \" \" ),\n\tfunction( i, name ) {\n\n\t// Handle event binding\n\tjQuery.fn[ name ] = function( data, fn ) {\n\t\treturn arguments.length > 0 ?\n\t\t\tthis.on( name, null, data, fn ) :\n\t\t\tthis.trigger( name );\n\t};\n} );\n\njQuery.fn.extend( {\n\thover: function( fnOver, fnOut ) {\n\t\treturn this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );\n\t}\n} );\n\n\n\n\nsupport.focusin = \"onfocusin\" in window;\n\n\n// Support: Firefox\n// Firefox doesn't have focus(in | out) events\n// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n//\n// Support: Chrome, Safari\n// focus(in | out) events fire after focus & blur events,\n// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n// Related ticket - https://code.google.com/p/chromium/issues/detail?id=449857\nif ( !support.focusin ) {\n\tjQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\n\n\t\t// Attach a single capturing handler on the document while someone wants focusin/focusout\n\t\tvar handler = function( event ) {\n\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );\n\t\t};\n\n\t\tjQuery.event.special[ fix ] = {\n\t\t\tsetup: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix );\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.addEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t\tdataPriv.access( doc, fix, ( attaches || 0 ) + 1 );\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix ) - 1;\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.removeEventListener( orig, handler, true );\n\t\t\t\t\tdataPriv.remove( doc, fix );\n\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.access( doc, fix, attaches );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t} );\n}\nvar location = window.location;\n\nvar nonce = jQuery.now();\n\nvar rquery = ( /\\?/ );\n\n\n\n// Support: Android 2.3\n// Workaround failure to string-cast null input\njQuery.parseJSON = function( data ) {\n\treturn JSON.parse( data + \"\" );\n};\n\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE9\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {\n\t\txml = undefined;\n\t}\n\n\tif ( !xml || xml.getElementsByTagName( \"parsererror\" ).length ) {\n\t\tjQuery.error( \"Invalid XML: \" + data );\n\t}\n\treturn xml;\n};\n\n\nvar\n\trhash = /#.*$/,\n\trts = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// #7653, #8125, #8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t * - BEFORE asking for a transport\n\t * - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document.createElement( \"a\" );\n\toriginAnchor.href = location.href;\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnotwhite ) || [];\n\n\t\tif ( jQuery.isFunction( func ) ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes #9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": jQuery.parseJSON,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// The jqXHR state\n\t\t\tstate = 0,\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( state === 2 ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match;\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn state === 2 ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tvar lname = name.toLowerCase();\n\t\t\t\t\tif ( !state ) {\n\t\t\t\t\t\tname = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( !state ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( state < 2 ) {\n\t\t\t\t\t\t\tfor ( code in map ) {\n\n\t\t\t\t\t\t\t\t// Lazy-add the new callback in a way that preserves old ones\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR ).complete = completeDeferred.add;\n\t\tjqXHR.success = jqXHR.done;\n\t\tjqXHR.error = jqXHR.fail;\n\n\t\t// Remove hash character (#7531: and string promotion)\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (#10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + \"\" ).replace( rhash, \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t// Alias method option to type as per ticket #12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = jQuery.trim( s.dataType || \"*\" ).toLowerCase().match( rnotwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document.createElement( \"a\" );\n\n\t\t\t// Support: IE8-11+\n\t\t\t// IE throws exception if url is malformed, e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE8-11+\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( state === 2 ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\tcacheURL = s.url;\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// If data is available, append data to url\n\t\t\tif ( s.data ) {\n\t\t\t\tcacheURL = ( s.url += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data );\n\n\t\t\t\t// #9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add anti-cache in url if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\ts.url = rts.test( cacheURL ) ?\n\n\t\t\t\t\t// If there is already a '_' parameter, set its value\n\t\t\t\t\tcacheURL.replace( rts, \"$1_=\" + nonce++ ) :\n\n\t\t\t\t\t// Otherwise add one to the end\n\t\t\t\t\tcacheURL + ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + nonce++;\n\t\t\t}\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tfor ( i in { success: 1, error: 1, complete: 1 } ) {\n\t\t\tjqXHR[ i ]( s[ i ] );\n\t\t}\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( state === 2 ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tstate = 1;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Propagate exception as error if not done\n\t\t\t\tif ( state < 2 ) {\n\t\t\t\t\tdone( -1, e );\n\n\t\t\t\t// Simply rethrow otherwise\n\t\t\t\t} else {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Called once\n\t\t\tif ( state === 2 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// State is \"done\" now\n\t\t\tstate = 2;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted\n\t\tif ( jQuery.isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\n\njQuery._evalUrl = function( url ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (#11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tasync: false,\n\t\tglobal: false,\n\t\t\"throws\": true\n\t} );\n};\n\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( jQuery.isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapAll( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( this[ 0 ] ) {\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( jQuery.isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar isFunction = jQuery.isFunction( html );\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( isFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function() {\n\t\treturn this.parent().each( function() {\n\t\t\tif ( !jQuery.nodeName( this, \"body\" ) ) {\n\t\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t\t}\n\t\t} ).end();\n\t}\n} );\n\n\njQuery.expr.filters.hidden = function( elem ) {\n\treturn !jQuery.expr.filters.visible( elem );\n};\njQuery.expr.filters.visible = function( elem ) {\n\n\t// Support: Opera <= 12.12\n\t// Opera reports offsetWidths and offsetHeights less than zero on some elements\n\t// Use OR instead of AND as the element is not visible if either is true\n\t// See tickets #10406 and #13132\n\treturn elem.offsetWidth > 0 || elem.offsetHeight > 0 || elem.getClientRects().length > 0;\n};\n\n\n\n\nvar r20 = /%20/g,\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( jQuery.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && jQuery.type( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, value ) {\n\n\t\t\t// If value is a function, invoke it and return its value\n\t\t\tvalue = jQuery.isFunction( value ) ? value() : ( value == null ? \"\" : value );\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" + encodeURIComponent( value );\n\t\t};\n\n\t// Set traditional to true for jQuery <= 1.3.2 behavior.\n\tif ( traditional === undefined ) {\n\t\ttraditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" ).replace( r20, \"+\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} )\n\t\t.filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} )\n\t\t.map( function( i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\treturn val == null ?\n\t\t\t\tnull :\n\t\t\t\tjQuery.isArray( val ) ?\n\t\t\t\t\tjQuery.map( val, function( val ) {\n\t\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t\t} ) :\n\t\t\t\t\t{ name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\n\njQuery.ajaxSettings.xhr = function() {\n\ttry {\n\t\treturn new window.XMLHttpRequest();\n\t} catch ( e ) {}\n};\n\nvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE9\n\t\t// #1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\txhrSupported = jQuery.ajaxSettings.xhr();\n\nsupport.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\nsupport.ajax = xhrSupported = !!xhrSupported;\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback, errorCallback;\n\n\t// Cross domain only allowed if supported through XMLHttpRequest\n\tif ( support.cors || xhrSupported && !options.crossDomain ) {\n\t\treturn {\n\t\t\tsend: function( headers, complete ) {\n\t\t\t\tvar i,\n\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\txhr.open(\n\t\t\t\t\toptions.type,\n\t\t\t\t\toptions.url,\n\t\t\t\t\toptions.async,\n\t\t\t\t\toptions.username,\n\t\t\t\t\toptions.password\n\t\t\t\t);\n\n\t\t\t\t// Apply custom fields if provided\n\t\t\t\tif ( options.xhrFields ) {\n\t\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Override mime type if needed\n\t\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t\t}\n\n\t\t\t\t// X-Requested-With header\n\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t\t}\n\n\t\t\t\t// Set headers\n\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t}\n\n\t\t\t\t// Callback\n\t\t\t\tcallback = function( type ) {\n\t\t\t\t\treturn function() {\n\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\n\t\t\t\t\t\t\t\t// Support: IE9\n\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\tif ( typeof xhr.status !== \"number\" ) {\n\t\t\t\t\t\t\t\t\tcomplete( 0, \"error\" );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see #8605, #14207\n\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t// Support: IE9 only\n\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) !== \"text\" ||\n\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== \"string\" ?\n\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Listen to events\n\t\t\t\txhr.onload = callback();\n\t\t\t\terrorCallback = xhr.onerror = callback( \"error\" );\n\n\t\t\t\t// Support: IE9\n\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t// to handle uncaught aborts\n\t\t\t\tif ( xhr.onabort !== undefined ) {\n\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t} else {\n\t\t\t\t\txhr.onreadystatechange = function() {\n\n\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\tif ( xhr.readyState === 4 ) {\n\n\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\twindow.setTimeout( function() {\n\t\t\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\t\t\terrorCallback();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// Create the abort callback\n\t\t\t\tcallback = callback( \"abort\" );\n\n\t\t\t\ttry {\n\n\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// #14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\n// Install script dataType\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /\\b(?:java|ecma)script\\b/\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\n\t// This transport only deals with cross domain requests\n\tif ( s.crossDomain ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"<script>\" ).prop( {\n\t\t\t\t\tcharset: s.scriptCharset,\n\t\t\t\t\tsrc: s.url\n\t\t\t\t} ).on(\n\t\t\t\t\t\"load error\",\n\t\t\t\t\tcallback = function( evt ) {\n\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\tif ( evt ) {\n\t\t\t\t\t\t\tcomplete( evt.type === \"error\" ? 404 : 200, evt.type );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\tdocument.head.appendChild( script[ 0 ] );\n\t\t\t},\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\nvar oldCallbacks = [],\n\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n// Default jsonp settings\njQuery.ajaxSetup( {\n\tjsonp: \"callback\",\n\tjsonpCallback: function() {\n\t\tvar callback = oldCallbacks.pop() || ( jQuery.expando + \"_\" + ( nonce++ ) );\n\t\tthis[ callback ] = true;\n\t\treturn callback;\n\t}\n} );\n\n// Detect, normalize options and install callbacks for jsonp requests\njQuery.ajaxPrefilter( \"json jsonp\", function( s, originalSettings, jqXHR ) {\n\n\tvar callbackName, overwritten, responseContainer,\n\t\tjsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?\n\t\t\t\"url\" :\n\t\t\ttypeof s.data === \"string\" &&\n\t\t\t\t( s.contentType || \"\" )\n\t\t\t\t\t.indexOf( \"application/x-www-form-urlencoded\" ) === 0 &&\n\t\t\t\trjsonp.test( s.data ) && \"data\"\n\t\t);\n\n\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\tif ( jsonProp || s.dataTypes[ 0 ] === \"jsonp\" ) {\n\n\t\t// Get callback name, remembering preexisting value associated with it\n\t\tcallbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?\n\t\t\ts.jsonpCallback() :\n\t\t\ts.jsonpCallback;\n\n\t\t// Insert callback into url or form data\n\t\tif ( jsonProp ) {\n\t\t\ts[ jsonProp ] = s[ jsonProp ].replace( rjsonp, \"$1\" + callbackName );\n\t\t} else if ( s.jsonp !== false ) {\n\t\t\ts.url += ( rquery.test( s.url ) ? \"&\" : \"?\" ) + s.jsonp + \"=\" + callbackName;\n\t\t}\n\n\t\t// Use data converter to retrieve json after script execution\n\t\ts.converters[ \"script json\" ] = function() {\n\t\t\tif ( !responseContainer ) {\n\t\t\t\tjQuery.error( callbackName + \" was not called\" );\n\t\t\t}\n\t\t\treturn responseContainer[ 0 ];\n\t\t};\n\n\t\t// Force json dataType\n\t\ts.dataTypes[ 0 ] = \"json\";\n\n\t\t// Install callback\n\t\toverwritten = window[ callbackName ];\n\t\twindow[ callbackName ] = function() {\n\t\t\tresponseContainer = arguments;\n\t\t};\n\n\t\t// Clean-up function (fires after converters)\n\t\tjqXHR.always( function() {\n\n\t\t\t// If previous value didn't exist - remove it\n\t\t\tif ( overwritten === undefined ) {\n\t\t\t\tjQuery( window ).removeProp( callbackName );\n\n\t\t\t// Otherwise restore preexisting value\n\t\t\t} else {\n\t\t\t\twindow[ callbackName ] = overwritten;\n\t\t\t}\n\n\t\t\t// Save back as free\n\t\t\tif ( s[ callbackName ] ) {\n\n\t\t\t\t// Make sure that re-using the options doesn't screw things around\n\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t// Save the callback name for future use\n\t\t\t\toldCallbacks.push( callbackName );\n\t\t\t}\n\n\t\t\t// Call if it was a function and we have a response\n\t\t\tif ( responseContainer && jQuery.isFunction( overwritten ) ) {\n\t\t\t\toverwritten( responseContainer[ 0 ] );\n\t\t\t}\n\n\t\t\tresponseContainer = overwritten = undefined;\n\t\t} );\n\n\t\t// Delegate to script\n\t\treturn \"script\";\n\t}\n} );\n\n\n\n\n// Argument \"data\" should be string of html\n// context (optional): If specified, the fragment will be created in this context,\n// defaults to document\n// keepScripts (optional): If true, will include scripts passed in the html string\njQuery.parseHTML = function( data, context, keepScripts ) {\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\tif ( typeof context === \"boolean\" ) {\n\t\tkeepScripts = context;\n\t\tcontext = false;\n\t}\n\tcontext = context || document;\n\n\tvar parsed = rsingleTag.exec( data ),\n\t\tscripts = !keepScripts && [];\n\n\t// Single tag\n\tif ( parsed ) {\n\t\treturn [ context.createElement( parsed[ 1 ] ) ];\n\t}\n\n\tparsed = buildFragment( [ data ], context, scripts );\n\n\tif ( scripts && scripts.length ) {\n\t\tjQuery( scripts ).remove();\n\t}\n\n\treturn jQuery.merge( [], parsed.childNodes );\n};\n\n\n// Keep a copy of the old load method\nvar _load = jQuery.fn.load;\n\n/**\n * Load a url into a page\n */\njQuery.fn.load = function( url, params, callback ) {\n\tif ( typeof url !== \"string\" && _load ) {\n\t\treturn _load.apply( this, arguments );\n\t}\n\n\tvar selector, type, response,\n\t\tself = this,\n\t\toff = url.indexOf( \" \" );\n\n\tif ( off > -1 ) {\n\t\tselector = jQuery.trim( url.slice( off ) );\n\t\turl = url.slice( 0, off );\n\t}\n\n\t// If it's a function\n\tif ( jQuery.isFunction( params ) ) {\n\n\t\t// We assume that it's the callback\n\t\tcallback = params;\n\t\tparams = undefined;\n\n\t// Otherwise, build a param string\n\t} else if ( params && typeof params === \"object\" ) {\n\t\ttype = \"POST\";\n\t}\n\n\t// If we have elements to modify, make the request\n\tif ( self.length > 0 ) {\n\t\tjQuery.ajax( {\n\t\t\turl: url,\n\n\t\t\t// If \"type\" variable is undefined, then \"GET\" method will be used.\n\t\t\t// Make value of this field explicit since\n\t\t\t// user can override it through ajaxSetup method\n\t\t\ttype: type || \"GET\",\n\t\t\tdataType: \"html\",\n\t\t\tdata: params\n\t\t} ).done( function( responseText ) {\n\n\t\t\t// Save response for use in complete callback\n\t\t\tresponse = arguments;\n\n\t\t\tself.html( selector ?\n\n\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\tjQuery( \"<div>\" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :\n\n\t\t\t\t// Otherwise use the full result\n\t\t\t\tresponseText );\n\n\t\t// If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n\t\t// but they are ignored because response was set above.\n\t\t// If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n\t\t} ).always( callback && function( jqXHR, status ) {\n\t\t\tself.each( function() {\n\t\t\t\tcallback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );\n\t\t\t} );\n\t\t} );\n\t}\n\n\treturn this;\n};\n\n\n\n\n// Attach a bunch of functions for handling common AJAX events\njQuery.each( [\n\t\"ajaxStart\",\n\t\"ajaxStop\",\n\t\"ajaxComplete\",\n\t\"ajaxError\",\n\t\"ajaxSuccess\",\n\t\"ajaxSend\"\n], function( i, type ) {\n\tjQuery.fn[ type ] = function( fn ) {\n\t\treturn this.on( type, fn );\n\t};\n} );\n\n\n\n\njQuery.expr.filters.animated = function( elem ) {\n\treturn jQuery.grep( jQuery.timers, function( fn ) {\n\t\treturn elem === fn.elem;\n\t} ).length;\n};\n\n\n\n\n/**\n * Gets a window from an element\n */\nfunction getWindow( elem ) {\n\treturn jQuery.isWindow( elem ) ? elem : elem.nodeType === 9 && elem.defaultView;\n}\n\njQuery.offset = {\n\tsetOffset: function( elem, options, i ) {\n\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\tposition = jQuery.css( elem, \"position\" ),\n\t\t\tcurElem = jQuery( elem ),\n\t\t\tprops = {};\n\n\t\t// Set position first, in-case top/left are set even on static elem\n\t\tif ( position === \"static\" ) {\n\t\t\telem.style.position = \"relative\";\n\t\t}\n\n\t\tcurOffset = curElem.offset();\n\t\tcurCSSTop = jQuery.css( elem, \"top\" );\n\t\tcurCSSLeft = jQuery.css( elem, \"left\" );\n\t\tcalculatePosition = ( position === \"absolute\" || position === \"fixed\" ) &&\n\t\t\t( curCSSTop + curCSSLeft ).indexOf( \"auto\" ) > -1;\n\n\t\t// Need to be able to calculate position if either\n\t\t// top or left is auto and position is either absolute or fixed\n\t\tif ( calculatePosition ) {\n\t\t\tcurPosition = curElem.position();\n\t\t\tcurTop = curPosition.top;\n\t\t\tcurLeft = curPosition.left;\n\n\t\t} else {\n\t\t\tcurTop = parseFloat( curCSSTop ) || 0;\n\t\t\tcurLeft = parseFloat( curCSSLeft ) || 0;\n\t\t}\n\n\t\tif ( jQuery.isFunction( options ) ) {\n\n\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\toptions = options.call( elem, i, jQuery.extend( {}, curOffset ) );\n\t\t}\n\n\t\tif ( options.top != null ) {\n\t\t\tprops.top = ( options.top - curOffset.top ) + curTop;\n\t\t}\n\t\tif ( options.left != null ) {\n\t\t\tprops.left = ( options.left - curOffset.left ) + curLeft;\n\t\t}\n\n\t\tif ( \"using\" in options ) {\n\t\t\toptions.using.call( elem, props );\n\n\t\t} else {\n\t\t\tcurElem.css( props );\n\t\t}\n\t}\n};\n\njQuery.fn.extend( {\n\toffset: function( options ) {\n\t\tif ( arguments.length ) {\n\t\t\treturn options === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each( function( i ) {\n\t\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t\t} );\n\t\t}\n\n\t\tvar docElem, win,\n\t\t\telem = this[ 0 ],\n\t\t\tbox = { top: 0, left: 0 },\n\t\t\tdoc = elem && elem.ownerDocument;\n\n\t\tif ( !doc ) {\n\t\t\treturn;\n\t\t}\n\n\t\tdocElem = doc.documentElement;\n\n\t\t// Make sure it's not a disconnected DOM node\n\t\tif ( !jQuery.contains( docElem, elem ) ) {\n\t\t\treturn box;\n\t\t}\n\n\t\tbox = elem.getBoundingClientRect();\n\t\twin = getWindow( doc );\n\t\treturn {\n\t\t\ttop: box.top + win.pageYOffset - docElem.clientTop,\n\t\t\tleft: box.left + win.pageXOffset - docElem.clientLeft\n\t\t};\n\t},\n\n\tposition: function() {\n\t\tif ( !this[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar offsetParent, offset,\n\t\t\telem = this[ 0 ],\n\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t// Fixed elements are offset from window (parentOffset = {top:0, left: 0},\n\t\t// because it is its only offset parent\n\t\tif ( jQuery.css( elem, \"position\" ) === \"fixed\" ) {\n\n\t\t\t// Assume getBoundingClientRect is there when computed position is fixed\n\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t} else {\n\n\t\t\t// Get *real* offsetParent\n\t\t\toffsetParent = this.offsetParent();\n\n\t\t\t// Get correct offsets\n\t\t\toffset = this.offset();\n\t\t\tif ( !jQuery.nodeName( offsetParent[ 0 ], \"html\" ) ) {\n\t\t\t\tparentOffset = offsetParent.offset();\n\t\t\t}\n\n\t\t\t// Add offsetParent borders\n\t\t\tparentOffset.top += jQuery.css( offsetParent[ 0 ], \"borderTopWidth\", true );\n\t\t\tparentOffset.left += jQuery.css( offsetParent[ 0 ], \"borderLeftWidth\", true );\n\t\t}\n\n\t\t// Subtract parent offsets and element margins\n\t\treturn {\n\t\t\ttop: offset.top - parentOffset.top - jQuery.css( elem, \"marginTop\", true ),\n\t\t\tleft: offset.left - parentOffset.left - jQuery.css( elem, \"marginLeft\", true )\n\t\t};\n\t},\n\n\t// This method will return documentElement in the following cases:\n\t// 1) For the element inside the iframe without offsetParent, this method will return\n\t// documentElement of the parent window\n\t// 2) For the hidden or detached element\n\t// 3) For body or html element, i.e. in case of the html node - it will return itself\n\t//\n\t// but those exceptions were never presented as a real life use-cases\n\t// and might be considered as more preferable results.\n\t//\n\t// This logic, however, is not guaranteed and can change at any point in the future\n\toffsetParent: function() {\n\t\treturn this.map( function() {\n\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\twhile ( offsetParent && jQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t}\n\n\t\t\treturn offsetParent || documentElement;\n\t\t} );\n\t}\n} );\n\n// Create scrollLeft and scrollTop methods\njQuery.each( { scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function( method, prop ) {\n\tvar top = \"pageYOffset\" === prop;\n\n\tjQuery.fn[ method ] = function( val ) {\n\t\treturn access( this, function( elem, method, val ) {\n\t\t\tvar win = getWindow( elem );\n\n\t\t\tif ( val === undefined ) {\n\t\t\t\treturn win ? win[ prop ] : elem[ method ];\n\t\t\t}\n\n\t\t\tif ( win ) {\n\t\t\t\twin.scrollTo(\n\t\t\t\t\t!top ? val : win.pageXOffset,\n\t\t\t\t\ttop ? val : win.pageYOffset\n\t\t\t\t);\n\n\t\t\t} else {\n\t\t\t\telem[ method ] = val;\n\t\t\t}\n\t\t}, method, val, arguments.length );\n\t};\n} );\n\n// Support: Safari<7-8+, Chrome<37-44+\n// Add the top/left cssHooks using jQuery.fn.position\n// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n// Blink bug: https://code.google.com/p/chromium/issues/detail?id=229280\n// getComputedStyle returns percent when specified for top/left/bottom/right;\n// rather than make the css module depend on the offset module, just check for it here\njQuery.each( [ \"top\", \"left\" ], function( i, prop ) {\n\tjQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,\n\t\tfunction( elem, computed ) {\n\t\t\tif ( computed ) {\n\t\t\t\tcomputed = curCSS( elem, prop );\n\n\t\t\t\t// If curCSS returns percentage, fallback to offset\n\t\t\t\treturn rnumnonpx.test( computed ) ?\n\t\t\t\t\tjQuery( elem ).position()[ prop ] + \"px\" :\n\t\t\t\t\tcomputed;\n\t\t\t}\n\t\t}\n\t);\n} );\n\n\n// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\njQuery.each( { Height: \"height\", Width: \"width\" }, function( name, type ) {\n\tjQuery.each( { padding: \"inner\" + name, content: type, \"\": \"outer\" + name },\n\t\tfunction( defaultExtra, funcName ) {\n\n\t\t// Margin is only for outerHeight, outerWidth\n\t\tjQuery.fn[ funcName ] = function( margin, value ) {\n\t\t\tvar chainable = arguments.length && ( defaultExtra || typeof margin !== \"boolean\" ),\n\t\t\t\textra = defaultExtra || ( margin === true || value === true ? \"margin\" : \"border\" );\n\n\t\t\treturn access( this, function( elem, type, value ) {\n\t\t\t\tvar doc;\n\n\t\t\t\tif ( jQuery.isWindow( elem ) ) {\n\n\t\t\t\t\t// As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there\n\t\t\t\t\t// isn't a whole lot we can do. See pull request at this URL for discussion:\n\t\t\t\t\t// https://github.com/jquery/jquery/pull/764\n\t\t\t\t\treturn elem.document.documentElement[ \"client\" + name ];\n\t\t\t\t}\n\n\t\t\t\t// Get document width or height\n\t\t\t\tif ( elem.nodeType === 9 ) {\n\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t// whichever is greatest\n\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\telem.body[ \"scroll\" + name ], doc[ \"scroll\" + name ],\n\t\t\t\t\t\telem.body[ \"offset\" + name ], doc[ \"offset\" + name ],\n\t\t\t\t\t\tdoc[ \"client\" + name ]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn value === undefined ?\n\n\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\tjQuery.css( elem, type, extra ) :\n\n\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\tjQuery.style( elem, type, value, extra );\n\t\t\t}, type, chainable ? margin : undefined, chainable, null );\n\t\t};\n\t} );\n} );\n\n\njQuery.fn.extend( {\n\n\tbind: function( types, data, fn ) {\n\t\treturn this.on( types, null, data, fn );\n\t},\n\tunbind: function( types, fn ) {\n\t\treturn this.off( types, null, fn );\n\t},\n\n\tdelegate: function( selector, types, data, fn ) {\n\t\treturn this.on( types, selector, data, fn );\n\t},\n\tundelegate: function( selector, types, fn ) {\n\n\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\treturn arguments.length === 1 ?\n\t\t\tthis.off( selector, \"**\" ) :\n\t\t\tthis.off( types, selector || \"**\", fn );\n\t},\n\tsize: function() {\n\t\treturn this.length;\n\t}\n} );\n\njQuery.fn.andSelf = jQuery.fn.addBack;\n\n\n\n\n// Register as a named AMD module, since jQuery can be concatenated with other\n// files that may use define, but not via a proper concatenation script that\n// understands anonymous AMD modules. A named AMD is safest and most robust\n// way to register. Lowercase jquery is used because AMD module names are\n// derived from file names, and jQuery is normally delivered in a lowercase\n// file name. Do this after creating the global so that if an AMD module wants\n// to call noConflict to hide this version of jQuery, it will work.\n\n// Note that for maximum portability, libraries that are not jQuery should\n// declare themselves as anonymous modules, and avoid setting a global if an\n// AMD loader is present. jQuery is a special case. For more information, see\n// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\nif ( true ) {\n\t!(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = (function() {\n\t\treturn jQuery;\n\t}).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n}\n\n\n\nvar\n\n\t// Map over jQuery in case of overwrite\n\t_jQuery = window.jQuery,\n\n\t// Map over the $ in case of overwrite\n\t_$ = window.$;\n\njQuery.noConflict = function( deep ) {\n\tif ( window.$ === jQuery ) {\n\t\twindow.$ = _$;\n\t}\n\n\tif ( deep && window.jQuery === jQuery ) {\n\t\twindow.jQuery = _jQuery;\n\t}\n\n\treturn jQuery;\n};\n\n// Expose jQuery and $ identifiers, even in AMD\n// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)\n// and CommonJS for browser emulators (#13566)\nif ( !noGlobal ) {\n\twindow.jQuery = window.$ = jQuery;\n}\n\nreturn jQuery;\n}));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvanF1ZXJ5L2Rpc3QvanF1ZXJ5LmpzLmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLE1BQU0sS0FBMEI7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7OztBQUlBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osRUFBRTs7QUFFRjtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSwrQkFBK0I7QUFDL0I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFNBQVMsWUFBWTs7QUFFckI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFFOztBQUVGLG9CQUFvQjs7QUFFcEI7QUFDQTtBQUNBLEVBQUU7O0FBRUY7O0FBRUE7QUFDQTtBQUNBLEVBQUU7O0FBRUY7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGlEQUFpRDtBQUNqRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRixpQ0FBaUM7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFdBQVcsWUFBWTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxVQUFVLFNBQVM7QUFDbkI7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxVQUFVLFlBQVk7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFlBQVk7QUFDdkI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEVBQUU7O0FBRUY7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBOztBQUVBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSxTQUFTO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsMkJBQTJCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7O0FBRUEsZ0JBQWdCLElBQUk7O0FBRXBCO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLHdDQUF3QyxJQUFJO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGLFVBQVU7O0FBRVY7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7O0FBRUE7QUFDQSxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0EsTUFBTTtBQUNOOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07O0FBRU47QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxhQUFhLDBCQUEwQjtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXLFVBQVU7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsV0FBVyxVQUFVO0FBQ3JCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixXQUFXLFVBQVU7QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFdBQVcsU0FBUztBQUNwQixXQUFXLFNBQVM7QUFDcEIsYUFBYSxRQUFRO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXLFVBQVU7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsRUFBRTtBQUNGOztBQUVBO0FBQ0E7QUFDQSxXQUFXLGlCQUFpQjtBQUM1QixhQUFhLHdCQUF3QjtBQUNyQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQixhQUFhLFNBQVM7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXLFdBQVc7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXLGVBQWU7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBLGlDQUFpQyxNQUFNO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBLGVBQWU7O0FBRWYsU0FBUzs7QUFFVDtBQUNBLFNBQVMsZ0NBQWdDO0FBQ3pDLFNBQVMsbUJBQW1CO0FBQzVCLFNBQVMscUNBQXFDO0FBQzlDLFNBQVM7QUFDVCxFQUFFOztBQUVGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsZUFBZTtBQUNoQztBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTs7QUFFTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsNERBQTREOztBQUU1RDtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUM7O0FBRXpDO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZEQUE2RDs7QUFFN0Q7QUFDQTtBQUNBO0FBQ0EsMENBQTBDOztBQUUxQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGdFQUFnRTs7QUFFaEU7QUFDQTtBQUNBO0FBQ0EsNkNBQTZDOztBQUU3QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQSxrRUFBa0UsVUFBVTtBQUM1RSx1Q0FBdUMsMkJBQTJCO0FBQ2xFO0FBQ0EsaUNBQWlDLE1BQU07QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0EsV0FBVyxZQUFZO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLFdBQVcsWUFBWTtBQUN2QjtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxXQUFXLFVBQVU7QUFDckI7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0EsV0FBVyxjQUFjO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBOztBQUVBO0FBQ0EsYUFBYSx1RUFBdUU7QUFDcEY7QUFDQTtBQUNBLGFBQWEsNEJBQTRCO0FBQ3pDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsU0FBUztBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLDJEQUEyRDs7QUFFM0Q7QUFDQTtBQUNBLG9GQUFvRjs7QUFFcEY7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7O0FBRUEsb0NBQW9DO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsU0FBUztBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsU0FBUyxTQUFTO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKLFNBQVMsU0FBUztBQUNsQjtBQUNBO0FBQ0EsSUFBSTtBQUNKOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxTQUFTO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0MsZ0RBQWdEO0FBQ3hGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esa0RBQWtEO0FBQ2xELFdBQVcsd0NBQXdDO0FBQ25EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsaUJBQWlCO0FBQzVCO0FBQ0EsV0FBVyxTQUFTO0FBQ3BCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjs7QUFFQTs7QUFFQSxDQUFDOzs7O0FBSUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUFJQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUEsU0FBUyxHQUFHO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7O0FBR0E7O0FBRUE7Ozs7QUFJQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsaUJBQWlCLFNBQVM7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUEsZUFBZSxTQUFTO0FBQ3hCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7O0FBR0Y7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxNQUFNO0FBQ047O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsVUFBVSxPQUFPO0FBQ2pCLDBCQUEwQix3QkFBd0I7O0FBRWxEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQSwyQ0FBMkM7QUFDM0MsRUFBRTtBQUNGO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQjs7QUFFbkI7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxjQUFjO0FBQ3pCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1IsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOzs7QUFHQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsUUFBUTtBQUNSO0FBQ0EsT0FBTztBQUNQLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsK0NBQStDO0FBQy9DLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7O0FBRUEsNkNBQTZDO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxZQUFZO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEVBQUU7OztBQUdGO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLElBQUk7O0FBRUo7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7Ozs7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxXQUFXLFNBQVM7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FBS0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsd0JBQXdCLGFBQWE7QUFDckMsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxJQUFJOztBQUVKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTs7QUFFTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG9CQUFvQixTQUFTO0FBQzdCOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSCxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBLEVBQUU7OztBQUdGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsSUFBSTtBQUNKO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixFQUFFO0FBQ0Y7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjs7QUFFQTs7O0FBR0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixzQkFBc0I7QUFDdEMsZ0JBQWdCLHNDQUFzQztBQUN0RDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7Ozs7QUFJQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxTQUFTLE9BQU87QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBLHNCQUFzQjs7QUFFdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFNBQVMsT0FBTztBQUNoQjs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxXQUFXOztBQUVYOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxFQUFFOztBQUVGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLDRDQUE0QztBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHFEQUFxRDtBQUNyRDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSwwQkFBMEI7QUFDMUI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxnRUFBZ0U7QUFDaEU7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsV0FBVyxjQUFjOztBQUV6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixtQkFBbUI7QUFDckM7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQiwrQkFBK0I7QUFDMUQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHdCQUF3Qix3REFBd0Q7QUFDaEY7O0FBRUE7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTs7QUFFQSxhQUFhOztBQUViO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx1Q0FBdUMsY0FBYztBQUNyRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxzQ0FBc0M7QUFDdEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFOztBQUVGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx1Q0FBdUM7QUFDdkM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQ0FBc0M7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDRDQUE0QyxPQUFPO0FBQ25EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsOEJBQThCOztBQUU5QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFD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QUFDQSxHQUFHO0FBQ0gsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG1CQUFtQjtBQUNuQjtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsYUFBYSw4REFBOEQ7QUFDM0U7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBLFNBQVMsT0FBTzs7QUFFaEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsU0FBUyxnQkFBZ0I7QUFDekI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxrQkFBa0IsZ0JBQWdCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLElBQUk7O0FBRUo7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7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QTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKLGtEQUFrRDtBQUNsRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsV0FBVyxpQkFBaUI7QUFDNUI7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsMkJBQTJCO0FBQzNCO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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Q0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOzs7OztBQUtGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7Ozs7QUFLRjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixFQUFFOztBQUVGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEVBQUU7Ozs7O0FBS0Y7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUEsa0NBQWtDO0FBQ2xDO0FBQ0E7O0FBRUEsS0FBSztBQUNMOztBQUVBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsTUFBTTtBQUNOOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxZQUFZLFNBQVM7QUFDckI7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7Ozs7QUFLRjs7O0FBR0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsdUNBQXVDO0FBQ3ZDO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSwwQkFBMEI7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwrQ0FBK0M7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw0Q0FBNEM7QUFDNUM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtEQUFrRDtBQUNsRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsRUFBRTs7QUFFRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7OztBQUdGO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOzs7OztBQUtGOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0Isb0NBQW9DOztBQUVwRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBOztBQUVBOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjs7QUFFaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjs7QUFFaEIsaURBQWlEO0FBQ2pEOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsbUJBQW1CO0FBQ25COztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHlEQUF5RDtBQUN6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7O0FBRWpCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsVUFBVTtBQUNWOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxpQkFBaUI7QUFDakIsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1EQUFtRDtBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsMkJBQTJCOztBQUUzQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0Esa0NBQWtDOztBQUVsQztBQUNBLHNCQUFzQjtBQUN0QiwyQkFBMkI7O0FBRTNCO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsUUFBUTs7QUFFUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdURBQXVEO0FBQ3ZEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsZUFBZSxvQ0FBb0M7QUFDbkQ7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxNQUFNO0FBQ047O0FBRUE7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEVBQUU7OztBQUdGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsSUFBSTtBQUNKLEVBQUU7O0FBRUY7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBLEVBQUU7OztBQUdGO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSixHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSixHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZixPQUFPO0FBQ1AsT0FBTztBQUNQLElBQUk7QUFDSjtBQUNBLEVBQUU7OztBQUdGO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWOztBQUVBLG9EQUFvRDtBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksdUJBQXVCO0FBQ25DLFlBQVksd0JBQXdCO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLE1BQU07O0FBRU47QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOzs7OztBQUtGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7Ozs7O0FBS0Y7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQSxFQUFFOzs7OztBQUtGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7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QyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9qcXVlcnkvZGlzdC9qcXVlcnkuanM/ODI2MiJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIGpRdWVyeSBKYXZhU2NyaXB0IExpYnJhcnkgdjIuMi40XG4gKiBodHRwOi8vanF1ZXJ5LmNvbS9cbiAqXG4gKiBJbmNsdWRlcyBTaXp6bGUuanNcbiAqIGh0dHA6Ly9zaXp6bGVqcy5jb20vXG4gKlxuICogQ29weXJpZ2h0IGpRdWVyeSBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnNcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZVxuICogaHR0cDovL2pxdWVyeS5vcmcvbGljZW5zZVxuICpcbiAqIERhdGU6IDIwMTYtMDUtMjBUMTc6MjNaXG4gKi9cblxuKGZ1bmN0aW9uKCBnbG9iYWwsIGZhY3RvcnkgKSB7XG5cblx0aWYgKCB0eXBlb2YgbW9kdWxlID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUuZXhwb3J0cyA9PT0gXCJvYmplY3RcIiApIHtcblx0XHQvLyBGb3IgQ29tbW9uSlMgYW5kIENvbW1vbkpTLWxpa2UgZW52aXJvbm1lbnRzIHdoZXJlIGEgcHJvcGVyIGB3aW5kb3dgXG5cdFx0Ly8gaXMgcHJlc2VudCwgZXhlY3V0ZSB0aGUgZmFjdG9yeSBhbmQgZ2V0IGpRdWVyeS5cblx0XHQvLyBGb3IgZW52aXJvbm1lbnRzIHRoYXQgZG8gbm90IGhhdmUgYSBgd2luZG93YCB3aXRoIGEgYGRvY3VtZW50YFxuXHRcdC8vIChzdWNoIGFzIE5vZGUuanMpLCBleHBvc2UgYSBmYWN0b3J5IGFzIG1vZHVsZS5leHBvcnRzLlxuXHRcdC8vIFRoaXMgYWNjZW50dWF0ZXMgdGhlIG5lZWQgZm9yIHRoZSBjcmVhdGlvbiBvZiBhIHJlYWwgYHdpbmRvd2AuXG5cdFx0Ly8gZS5nLiB2YXIgalF1ZXJ5ID0gcmVxdWlyZShcImpxdWVyeVwiKSh3aW5kb3cpO1xuXHRcdC8vIFNlZSB0aWNrZXQgIzE0NTQ5IGZvciBtb3JlIGluZm8uXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBnbG9iYWwuZG9jdW1lbnQgP1xuXHRcdFx0ZmFjdG9yeSggZ2xvYmFsLCB0cnVlICkgOlxuXHRcdFx0ZnVuY3Rpb24oIHcgKSB7XG5cdFx0XHRcdGlmICggIXcuZG9jdW1lbnQgKSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCBcImpRdWVyeSByZXF1aXJlcyBhIHdpbmRvdyB3aXRoIGEgZG9jdW1lbnRcIiApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBmYWN0b3J5KCB3ICk7XG5cdFx0XHR9O1xuXHR9IGVsc2Uge1xuXHRcdGZhY3RvcnkoIGdsb2JhbCApO1xuXHR9XG5cbi8vIFBhc3MgdGhpcyBpZiB3aW5kb3cgaXMgbm90IGRlZmluZWQgeWV0XG59KHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgPyB3aW5kb3cgOiB0aGlzLCBmdW5jdGlvbiggd2luZG93LCBub0dsb2JhbCApIHtcblxuLy8gU3VwcG9ydDogRmlyZWZveCAxOCtcbi8vIENhbid0IGJlIGluIHN0cmljdCBtb2RlLCBzZXZlcmFsIGxpYnMgaW5jbHVkaW5nIEFTUC5ORVQgdHJhY2Vcbi8vIHRoZSBzdGFjayB2aWEgYXJndW1lbnRzLmNhbGxlci5jYWxsZWUgYW5kIEZpcmVmb3ggZGllcyBpZlxuLy8geW91IHRyeSB0byB0cmFjZSB0aHJvdWdoIFwidXNlIHN0cmljdFwiIGNhbGwgY2hhaW5zLiAoIzEzMzM1KVxuLy9cInVzZSBzdHJpY3RcIjtcbnZhciBhcnIgPSBbXTtcblxudmFyIGRvY3VtZW50ID0gd2luZG93LmRvY3VtZW50O1xuXG52YXIgc2xpY2UgPSBhcnIuc2xpY2U7XG5cbnZhciBjb25jYXQgPSBhcnIuY29uY2F0O1xuXG52YXIgcHVzaCA9IGFyci5wdXNoO1xuXG52YXIgaW5kZXhPZiA9IGFyci5pbmRleE9mO1xuXG52YXIgY2xhc3MydHlwZSA9IHt9O1xuXG52YXIgdG9TdHJpbmcgPSBjbGFzczJ0eXBlLnRvU3RyaW5nO1xuXG52YXIgaGFzT3duID0gY2xhc3MydHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxudmFyIHN1cHBvcnQgPSB7fTtcblxuXG5cbnZhclxuXHR2ZXJzaW9uID0gXCIyLjIuNFwiLFxuXG5cdC8vIERlZmluZSBhIGxvY2FsIGNvcHkgb2YgalF1ZXJ5XG5cdGpRdWVyeSA9IGZ1bmN0aW9uKCBzZWxlY3RvciwgY29udGV4dCApIHtcblxuXHRcdC8vIFRoZSBqUXVlcnkgb2JqZWN0IGlzIGFjdHVhbGx5IGp1c3QgdGhlIGluaXQgY29uc3RydWN0b3IgJ2VuaGFuY2VkJ1xuXHRcdC8vIE5lZWQgaW5pdCBpZiBqUXVlcnkgaXMgY2FsbGVkIChqdXN0IGFsbG93IGVycm9yIHRvIGJlIHRocm93biBpZiBub3QgaW5jbHVkZWQpXG5cdFx0cmV0dXJuIG5ldyBqUXVlcnkuZm4uaW5pdCggc2VsZWN0b3IsIGNvbnRleHQgKTtcblx0fSxcblxuXHQvLyBTdXBwb3J0OiBBbmRyb2lkPDQuMVxuXHQvLyBNYWtlIHN1cmUgd2UgdHJpbSBCT00gYW5kIE5CU1Bcblx0cnRyaW0gPSAvXltcXHNcXHVGRUZGXFx4QTBdK3xbXFxzXFx1RkVGRlxceEEwXSskL2csXG5cblx0Ly8gTWF0Y2hlcyBkYXNoZWQgc3RyaW5nIGZvciBjYW1lbGl6aW5nXG5cdHJtc1ByZWZpeCA9IC9eLW1zLS8sXG5cdHJkYXNoQWxwaGEgPSAvLShbXFxkYS16XSkvZ2ksXG5cblx0Ly8gVXNlZCBieSBqUXVlcnkuY2FtZWxDYXNlIGFzIGNhbGxiYWNrIHRvIHJlcGxhY2UoKVxuXHRmY2FtZWxDYXNlID0gZnVuY3Rpb24oIGFsbCwgbGV0dGVyICkge1xuXHRcdHJldHVybiBsZXR0ZXIudG9VcHBlckNhc2UoKTtcblx0fTtcblxualF1ZXJ5LmZuID0galF1ZXJ5LnByb3RvdHlwZSA9IHtcblxuXHQvLyBUaGUgY3VycmVudCB2ZXJzaW9uIG9mIGpRdWVyeSBiZWluZyB1c2VkXG5cdGpxdWVyeTogdmVyc2lvbixcblxuXHRjb25zdHJ1Y3RvcjogalF1ZXJ5LFxuXG5cdC8vIFN0YXJ0IHdpdGggYW4gZW1wdHkgc2VsZWN0b3Jcblx0c2VsZWN0b3I6IFwiXCIsXG5cblx0Ly8gVGhlIGRlZmF1bHQgbGVuZ3RoIG9mIGEgalF1ZXJ5IG9iamVjdCBpcyAwXG5cdGxlbmd0aDogMCxcblxuXHR0b0FycmF5OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gc2xpY2UuY2FsbCggdGhpcyApO1xuXHR9LFxuXG5cdC8vIEdldCB0aGUgTnRoIGVsZW1lbnQgaW4gdGhlIG1hdGNoZWQgZWxlbWVudCBzZXQgT1Jcblx0Ly8gR2V0IHRoZSB3aG9sZSBtYXRjaGVkIGVsZW1lbnQgc2V0IGFzIGEgY2xlYW4gYXJyYXlcblx0Z2V0OiBmdW5jdGlvbiggbnVtICkge1xuXHRcdHJldHVybiBudW0gIT0gbnVsbCA/XG5cblx0XHRcdC8vIFJldHVybiBqdXN0IHRoZSBvbmUgZWxlbWVudCBmcm9tIHRoZSBzZXRcblx0XHRcdCggbnVtIDwgMCA/IHRoaXNbIG51bSArIHRoaXMubGVuZ3RoIF0gOiB0aGlzWyBudW0gXSApIDpcblxuXHRcdFx0Ly8gUmV0dXJuIGFsbCB0aGUgZWxlbWVudHMgaW4gYSBjbGVhbiBhcnJheVxuXHRcdFx0c2xpY2UuY2FsbCggdGhpcyApO1xuXHR9LFxuXG5cdC8vIFRha2UgYW4gYXJyYXkgb2YgZWxlbWVudHMgYW5kIHB1c2ggaXQgb250byB0aGUgc3RhY2tcblx0Ly8gKHJldHVybmluZyB0aGUgbmV3IG1hdGNoZWQgZWxlbWVudCBzZXQpXG5cdHB1c2hTdGFjazogZnVuY3Rpb24oIGVsZW1zICkge1xuXG5cdFx0Ly8gQnVpbGQgYSBuZXcgalF1ZXJ5IG1hdGNoZWQgZWxlbWVudCBzZXRcblx0XHR2YXIgcmV0ID0galF1ZXJ5Lm1lcmdlKCB0aGlzLmNvbnN0cnVjdG9yKCksIGVsZW1zICk7XG5cblx0XHQvLyBBZGQgdGhlIG9sZCBvYmplY3Qgb250byB0aGUgc3RhY2sgKGFzIGEgcmVmZXJlbmNlKVxuXHRcdHJldC5wcmV2T2JqZWN0ID0gdGhpcztcblx0XHRyZXQuY29udGV4dCA9IHRoaXMuY29udGV4dDtcblxuXHRcdC8vIFJldHVybiB0aGUgbmV3bHktZm9ybWVkIGVsZW1lbnQgc2V0XG5cdFx0cmV0dXJuIHJldDtcblx0fSxcblxuXHQvLyBFeGVjdXRlIGEgY2FsbGJhY2sgZm9yIGV2ZXJ5IGVsZW1lbnQgaW4gdGhlIG1hdGNoZWQgc2V0LlxuXHRlYWNoOiBmdW5jdGlvbiggY2FsbGJhY2sgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5lYWNoKCB0aGlzLCBjYWxsYmFjayApO1xuXHR9LFxuXG5cdG1hcDogZnVuY3Rpb24oIGNhbGxiYWNrICkge1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggalF1ZXJ5Lm1hcCggdGhpcywgZnVuY3Rpb24oIGVsZW0sIGkgKSB7XG5cdFx0XHRyZXR1cm4gY2FsbGJhY2suY2FsbCggZWxlbSwgaSwgZWxlbSApO1xuXHRcdH0gKSApO1xuXHR9LFxuXG5cdHNsaWNlOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIHNsaWNlLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKSApO1xuXHR9LFxuXG5cdGZpcnN0OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5lcSggMCApO1xuXHR9LFxuXG5cdGxhc3Q6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLmVxKCAtMSApO1xuXHR9LFxuXG5cdGVxOiBmdW5jdGlvbiggaSApIHtcblx0XHR2YXIgbGVuID0gdGhpcy5sZW5ndGgsXG5cdFx0XHRqID0gK2kgKyAoIGkgPCAwID8gbGVuIDogMCApO1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggaiA+PSAwICYmIGogPCBsZW4gPyBbIHRoaXNbIGogXSBdIDogW10gKTtcblx0fSxcblxuXHRlbmQ6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLnByZXZPYmplY3QgfHwgdGhpcy5jb25zdHJ1Y3RvcigpO1xuXHR9LFxuXG5cdC8vIEZvciBpbnRlcm5hbCB1c2Ugb25seS5cblx0Ly8gQmVoYXZlcyBsaWtlIGFuIEFycmF5J3MgbWV0aG9kLCBub3QgbGlrZSBhIGpRdWVyeSBtZXRob2QuXG5cdHB1c2g6IHB1c2gsXG5cdHNvcnQ6IGFyci5zb3J0LFxuXHRzcGxpY2U6IGFyci5zcGxpY2Vcbn07XG5cbmpRdWVyeS5leHRlbmQgPSBqUXVlcnkuZm4uZXh0ZW5kID0gZnVuY3Rpb24oKSB7XG5cdHZhciBvcHRpb25zLCBuYW1lLCBzcmMsIGNvcHksIGNvcHlJc0FycmF5LCBjbG9uZSxcblx0XHR0YXJnZXQgPSBhcmd1bWVudHNbIDAgXSB8fCB7fSxcblx0XHRpID0gMSxcblx0XHRsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoLFxuXHRcdGRlZXAgPSBmYWxzZTtcblxuXHQvLyBIYW5kbGUgYSBkZWVwIGNvcHkgc2l0dWF0aW9uXG5cdGlmICggdHlwZW9mIHRhcmdldCA9PT0gXCJib29sZWFuXCIgKSB7XG5cdFx0ZGVlcCA9IHRhcmdldDtcblxuXHRcdC8vIFNraXAgdGhlIGJvb2xlYW4gYW5kIHRoZSB0YXJnZXRcblx0XHR0YXJnZXQgPSBhcmd1bWVudHNbIGkgXSB8fCB7fTtcblx0XHRpKys7XG5cdH1cblxuXHQvLyBIYW5kbGUgY2FzZSB3aGVuIHRhcmdldCBpcyBhIHN0cmluZyBvciBzb21ldGhpbmcgKHBvc3NpYmxlIGluIGRlZXAgY29weSlcblx0aWYgKCB0eXBlb2YgdGFyZ2V0ICE9PSBcIm9iamVjdFwiICYmICFqUXVlcnkuaXNGdW5jdGlvbiggdGFyZ2V0ICkgKSB7XG5cdFx0dGFyZ2V0ID0ge307XG5cdH1cblxuXHQvLyBFeHRlbmQgalF1ZXJ5IGl0c2VsZiBpZiBvbmx5IG9uZSBhcmd1bWVudCBpcyBwYXNzZWRcblx0aWYgKCBpID09PSBsZW5ndGggKSB7XG5cdFx0dGFyZ2V0ID0gdGhpcztcblx0XHRpLS07XG5cdH1cblxuXHRmb3IgKCA7IGkgPCBsZW5ndGg7IGkrKyApIHtcblxuXHRcdC8vIE9ubHkgZGVhbCB3aXRoIG5vbi1udWxsL3VuZGVmaW5lZCB2YWx1ZXNcblx0XHRpZiAoICggb3B0aW9ucyA9IGFyZ3VtZW50c1sgaSBdICkgIT0gbnVsbCApIHtcblxuXHRcdFx0Ly8gRXh0ZW5kIHRoZSBiYXNlIG9iamVjdFxuXHRcdFx0Zm9yICggbmFtZSBpbiBvcHRpb25zICkge1xuXHRcdFx0XHRzcmMgPSB0YXJnZXRbIG5hbWUgXTtcblx0XHRcdFx0Y29weSA9IG9wdGlvbnNbIG5hbWUgXTtcblxuXHRcdFx0XHQvLyBQcmV2ZW50IG5ldmVyLWVuZGluZyBsb29wXG5cdFx0XHRcdGlmICggdGFyZ2V0ID09PSBjb3B5ICkge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gUmVjdXJzZSBpZiB3ZSdyZSBtZXJnaW5nIHBsYWluIG9iamVjdHMgb3IgYXJyYXlzXG5cdFx0XHRcdGlmICggZGVlcCAmJiBjb3B5ICYmICggalF1ZXJ5LmlzUGxhaW5PYmplY3QoIGNvcHkgKSB8fFxuXHRcdFx0XHRcdCggY29weUlzQXJyYXkgPSBqUXVlcnkuaXNBcnJheSggY29weSApICkgKSApIHtcblxuXHRcdFx0XHRcdGlmICggY29weUlzQXJyYXkgKSB7XG5cdFx0XHRcdFx0XHRjb3B5SXNBcnJheSA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0Y2xvbmUgPSBzcmMgJiYgalF1ZXJ5LmlzQXJyYXkoIHNyYyApID8gc3JjIDogW107XG5cblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Y2xvbmUgPSBzcmMgJiYgalF1ZXJ5LmlzUGxhaW5PYmplY3QoIHNyYyApID8gc3JjIDoge307XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gTmV2ZXIgbW92ZSBvcmlnaW5hbCBvYmplY3RzLCBjbG9uZSB0aGVtXG5cdFx0XHRcdFx0dGFyZ2V0WyBuYW1lIF0gPSBqUXVlcnkuZXh0ZW5kKCBkZWVwLCBjbG9uZSwgY29weSApO1xuXG5cdFx0XHRcdC8vIERvbid0IGJyaW5nIGluIHVuZGVmaW5lZCB2YWx1ZXNcblx0XHRcdFx0fSBlbHNlIGlmICggY29weSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdHRhcmdldFsgbmFtZSBdID0gY29weTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIFJldHVybiB0aGUgbW9kaWZpZWQgb2JqZWN0XG5cdHJldHVybiB0YXJnZXQ7XG59O1xuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cblx0Ly8gVW5pcXVlIGZvciBlYWNoIGNvcHkgb2YgalF1ZXJ5IG9uIHRoZSBwYWdlXG5cdGV4cGFuZG86IFwialF1ZXJ5XCIgKyAoIHZlcnNpb24gKyBNYXRoLnJhbmRvbSgpICkucmVwbGFjZSggL1xcRC9nLCBcIlwiICksXG5cblx0Ly8gQXNzdW1lIGpRdWVyeSBpcyByZWFkeSB3aXRob3V0IHRoZSByZWFkeSBtb2R1bGVcblx0aXNSZWFkeTogdHJ1ZSxcblxuXHRlcnJvcjogZnVuY3Rpb24oIG1zZyApIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoIG1zZyApO1xuXHR9LFxuXG5cdG5vb3A6IGZ1bmN0aW9uKCkge30sXG5cblx0aXNGdW5jdGlvbjogZnVuY3Rpb24oIG9iaiApIHtcblx0XHRyZXR1cm4galF1ZXJ5LnR5cGUoIG9iaiApID09PSBcImZ1bmN0aW9uXCI7XG5cdH0sXG5cblx0aXNBcnJheTogQXJyYXkuaXNBcnJheSxcblxuXHRpc1dpbmRvdzogZnVuY3Rpb24oIG9iaiApIHtcblx0XHRyZXR1cm4gb2JqICE9IG51bGwgJiYgb2JqID09PSBvYmoud2luZG93O1xuXHR9LFxuXG5cdGlzTnVtZXJpYzogZnVuY3Rpb24oIG9iaiApIHtcblxuXHRcdC8vIHBhcnNlRmxvYXQgTmFOcyBudW1lcmljLWNhc3QgZmFsc2UgcG9zaXRpdmVzIChudWxsfHRydWV8ZmFsc2V8XCJcIilcblx0XHQvLyAuLi5idXQgbWlzaW50ZXJwcmV0cyBsZWFkaW5nLW51bWJlciBzdHJpbmdzLCBwYXJ0aWN1bGFybHkgaGV4IGxpdGVyYWxzIChcIjB4Li4uXCIpXG5cdFx0Ly8gc3VidHJhY3Rpb24gZm9yY2VzIGluZmluaXRpZXMgdG8gTmFOXG5cdFx0Ly8gYWRkaW5nIDEgY29ycmVjdHMgbG9zcyBvZiBwcmVjaXNpb24gZnJvbSBwYXJzZUZsb2F0ICgjMTUxMDApXG5cdFx0dmFyIHJlYWxTdHJpbmdPYmogPSBvYmogJiYgb2JqLnRvU3RyaW5nKCk7XG5cdFx0cmV0dXJuICFqUXVlcnkuaXNBcnJheSggb2JqICkgJiYgKCByZWFsU3RyaW5nT2JqIC0gcGFyc2VGbG9hdCggcmVhbFN0cmluZ09iaiApICsgMSApID49IDA7XG5cdH0sXG5cblx0aXNQbGFpbk9iamVjdDogZnVuY3Rpb24oIG9iaiApIHtcblx0XHR2YXIga2V5O1xuXG5cdFx0Ly8gTm90IHBsYWluIG9iamVjdHM6XG5cdFx0Ly8gLSBBbnkgb2JqZWN0IG9yIHZhbHVlIHdob3NlIGludGVybmFsIFtbQ2xhc3NdXSBwcm9wZXJ0eSBpcyBub3QgXCJbb2JqZWN0IE9iamVjdF1cIlxuXHRcdC8vIC0gRE9NIG5vZGVzXG5cdFx0Ly8gLSB3aW5kb3dcblx0XHRpZiAoIGpRdWVyeS50eXBlKCBvYmogKSAhPT0gXCJvYmplY3RcIiB8fCBvYmoubm9kZVR5cGUgfHwgalF1ZXJ5LmlzV2luZG93KCBvYmogKSApIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBOb3Qgb3duIGNvbnN0cnVjdG9yIHByb3BlcnR5IG11c3QgYmUgT2JqZWN0XG5cdFx0aWYgKCBvYmouY29uc3RydWN0b3IgJiZcblx0XHRcdFx0IWhhc093bi5jYWxsKCBvYmosIFwiY29uc3RydWN0b3JcIiApICYmXG5cdFx0XHRcdCFoYXNPd24uY2FsbCggb2JqLmNvbnN0cnVjdG9yLnByb3RvdHlwZSB8fCB7fSwgXCJpc1Byb3RvdHlwZU9mXCIgKSApIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBPd24gcHJvcGVydGllcyBhcmUgZW51bWVyYXRlZCBmaXJzdGx5LCBzbyB0byBzcGVlZCB1cCxcblx0XHQvLyBpZiBsYXN0IG9uZSBpcyBvd24sIHRoZW4gYWxsIHByb3BlcnRpZXMgYXJlIG93blxuXHRcdGZvciAoIGtleSBpbiBvYmogKSB7fVxuXG5cdFx0cmV0dXJuIGtleSA9PT0gdW5kZWZpbmVkIHx8IGhhc093bi5jYWxsKCBvYmosIGtleSApO1xuXHR9LFxuXG5cdGlzRW1wdHlPYmplY3Q6IGZ1bmN0aW9uKCBvYmogKSB7XG5cdFx0dmFyIG5hbWU7XG5cdFx0Zm9yICggbmFtZSBpbiBvYmogKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9LFxuXG5cdHR5cGU6IGZ1bmN0aW9uKCBvYmogKSB7XG5cdFx0aWYgKCBvYmogPT0gbnVsbCApIHtcblx0XHRcdHJldHVybiBvYmogKyBcIlwiO1xuXHRcdH1cblxuXHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQ8NC4wLCBpT1M8NiAoZnVuY3Rpb25pc2ggUmVnRXhwKVxuXHRcdHJldHVybiB0eXBlb2Ygb2JqID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBvYmogPT09IFwiZnVuY3Rpb25cIiA/XG5cdFx0XHRjbGFzczJ0eXBlWyB0b1N0cmluZy5jYWxsKCBvYmogKSBdIHx8IFwib2JqZWN0XCIgOlxuXHRcdFx0dHlwZW9mIG9iajtcblx0fSxcblxuXHQvLyBFdmFsdWF0ZXMgYSBzY3JpcHQgaW4gYSBnbG9iYWwgY29udGV4dFxuXHRnbG9iYWxFdmFsOiBmdW5jdGlvbiggY29kZSApIHtcblx0XHR2YXIgc2NyaXB0LFxuXHRcdFx0aW5kaXJlY3QgPSBldmFsO1xuXG5cdFx0Y29kZSA9IGpRdWVyeS50cmltKCBjb2RlICk7XG5cblx0XHRpZiAoIGNvZGUgKSB7XG5cblx0XHRcdC8vIElmIHRoZSBjb2RlIGluY2x1ZGVzIGEgdmFsaWQsIHByb2xvZ3VlIHBvc2l0aW9uXG5cdFx0XHQvLyBzdHJpY3QgbW9kZSBwcmFnbWEsIGV4ZWN1dGUgY29kZSBieSBpbmplY3RpbmcgYVxuXHRcdFx0Ly8gc2NyaXB0IHRhZyBpbnRvIHRoZSBkb2N1bWVudC5cblx0XHRcdGlmICggY29kZS5pbmRleE9mKCBcInVzZSBzdHJpY3RcIiApID09PSAxICkge1xuXHRcdFx0XHRzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcInNjcmlwdFwiICk7XG5cdFx0XHRcdHNjcmlwdC50ZXh0ID0gY29kZTtcblx0XHRcdFx0ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCggc2NyaXB0ICkucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggc2NyaXB0ICk7XG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdC8vIE90aGVyd2lzZSwgYXZvaWQgdGhlIERPTSBub2RlIGNyZWF0aW9uLCBpbnNlcnRpb25cblx0XHRcdFx0Ly8gYW5kIHJlbW92YWwgYnkgdXNpbmcgYW4gaW5kaXJlY3QgZ2xvYmFsIGV2YWxcblxuXHRcdFx0XHRpbmRpcmVjdCggY29kZSApO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblxuXHQvLyBDb252ZXJ0IGRhc2hlZCB0byBjYW1lbENhc2U7IHVzZWQgYnkgdGhlIGNzcyBhbmQgZGF0YSBtb2R1bGVzXG5cdC8vIFN1cHBvcnQ6IElFOS0xMStcblx0Ly8gTWljcm9zb2Z0IGZvcmdvdCB0byBodW1wIHRoZWlyIHZlbmRvciBwcmVmaXggKCM5NTcyKVxuXHRjYW1lbENhc2U6IGZ1bmN0aW9uKCBzdHJpbmcgKSB7XG5cdFx0cmV0dXJuIHN0cmluZy5yZXBsYWNlKCBybXNQcmVmaXgsIFwibXMtXCIgKS5yZXBsYWNlKCByZGFzaEFscGhhLCBmY2FtZWxDYXNlICk7XG5cdH0sXG5cblx0bm9kZU5hbWU6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkge1xuXHRcdHJldHVybiBlbGVtLm5vZGVOYW1lICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuXHR9LFxuXG5cdGVhY2g6IGZ1bmN0aW9uKCBvYmosIGNhbGxiYWNrICkge1xuXHRcdHZhciBsZW5ndGgsIGkgPSAwO1xuXG5cdFx0aWYgKCBpc0FycmF5TGlrZSggb2JqICkgKSB7XG5cdFx0XHRsZW5ndGggPSBvYmoubGVuZ3RoO1xuXHRcdFx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7XG5cdFx0XHRcdGlmICggY2FsbGJhY2suY2FsbCggb2JqWyBpIF0sIGksIG9ialsgaSBdICkgPT09IGZhbHNlICkge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGZvciAoIGkgaW4gb2JqICkge1xuXHRcdFx0XHRpZiAoIGNhbGxiYWNrLmNhbGwoIG9ialsgaSBdLCBpLCBvYmpbIGkgXSApID09PSBmYWxzZSApIHtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBvYmo7XG5cdH0sXG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZDw0LjFcblx0dHJpbTogZnVuY3Rpb24oIHRleHQgKSB7XG5cdFx0cmV0dXJuIHRleHQgPT0gbnVsbCA/XG5cdFx0XHRcIlwiIDpcblx0XHRcdCggdGV4dCArIFwiXCIgKS5yZXBsYWNlKCBydHJpbSwgXCJcIiApO1xuXHR9LFxuXG5cdC8vIHJlc3VsdHMgaXMgZm9yIGludGVybmFsIHVzYWdlIG9ubHlcblx0bWFrZUFycmF5OiBmdW5jdGlvbiggYXJyLCByZXN1bHRzICkge1xuXHRcdHZhciByZXQgPSByZXN1bHRzIHx8IFtdO1xuXG5cdFx0aWYgKCBhcnIgIT0gbnVsbCApIHtcblx0XHRcdGlmICggaXNBcnJheUxpa2UoIE9iamVjdCggYXJyICkgKSApIHtcblx0XHRcdFx0alF1ZXJ5Lm1lcmdlKCByZXQsXG5cdFx0XHRcdFx0dHlwZW9mIGFyciA9PT0gXCJzdHJpbmdcIiA/XG5cdFx0XHRcdFx0WyBhcnIgXSA6IGFyclxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cHVzaC5jYWxsKCByZXQsIGFyciApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiByZXQ7XG5cdH0sXG5cblx0aW5BcnJheTogZnVuY3Rpb24oIGVsZW0sIGFyciwgaSApIHtcblx0XHRyZXR1cm4gYXJyID09IG51bGwgPyAtMSA6IGluZGV4T2YuY2FsbCggYXJyLCBlbGVtLCBpICk7XG5cdH0sXG5cblx0bWVyZ2U6IGZ1bmN0aW9uKCBmaXJzdCwgc2Vjb25kICkge1xuXHRcdHZhciBsZW4gPSArc2Vjb25kLmxlbmd0aCxcblx0XHRcdGogPSAwLFxuXHRcdFx0aSA9IGZpcnN0Lmxlbmd0aDtcblxuXHRcdGZvciAoIDsgaiA8IGxlbjsgaisrICkge1xuXHRcdFx0Zmlyc3RbIGkrKyBdID0gc2Vjb25kWyBqIF07XG5cdFx0fVxuXG5cdFx0Zmlyc3QubGVuZ3RoID0gaTtcblxuXHRcdHJldHVybiBmaXJzdDtcblx0fSxcblxuXHRncmVwOiBmdW5jdGlvbiggZWxlbXMsIGNhbGxiYWNrLCBpbnZlcnQgKSB7XG5cdFx0dmFyIGNhbGxiYWNrSW52ZXJzZSxcblx0XHRcdG1hdGNoZXMgPSBbXSxcblx0XHRcdGkgPSAwLFxuXHRcdFx0bGVuZ3RoID0gZWxlbXMubGVuZ3RoLFxuXHRcdFx0Y2FsbGJhY2tFeHBlY3QgPSAhaW52ZXJ0O1xuXG5cdFx0Ly8gR28gdGhyb3VnaCB0aGUgYXJyYXksIG9ubHkgc2F2aW5nIHRoZSBpdGVtc1xuXHRcdC8vIHRoYXQgcGFzcyB0aGUgdmFsaWRhdG9yIGZ1bmN0aW9uXG5cdFx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7XG5cdFx0XHRjYWxsYmFja0ludmVyc2UgPSAhY2FsbGJhY2soIGVsZW1zWyBpIF0sIGkgKTtcblx0XHRcdGlmICggY2FsbGJhY2tJbnZlcnNlICE9PSBjYWxsYmFja0V4cGVjdCApIHtcblx0XHRcdFx0bWF0Y2hlcy5wdXNoKCBlbGVtc1sgaSBdICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG1hdGNoZXM7XG5cdH0sXG5cblx0Ly8gYXJnIGlzIGZvciBpbnRlcm5hbCB1c2FnZSBvbmx5XG5cdG1hcDogZnVuY3Rpb24oIGVsZW1zLCBjYWxsYmFjaywgYXJnICkge1xuXHRcdHZhciBsZW5ndGgsIHZhbHVlLFxuXHRcdFx0aSA9IDAsXG5cdFx0XHRyZXQgPSBbXTtcblxuXHRcdC8vIEdvIHRocm91Z2ggdGhlIGFycmF5LCB0cmFuc2xhdGluZyBlYWNoIG9mIHRoZSBpdGVtcyB0byB0aGVpciBuZXcgdmFsdWVzXG5cdFx0aWYgKCBpc0FycmF5TGlrZSggZWxlbXMgKSApIHtcblx0XHRcdGxlbmd0aCA9IGVsZW1zLmxlbmd0aDtcblx0XHRcdGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkge1xuXHRcdFx0XHR2YWx1ZSA9IGNhbGxiYWNrKCBlbGVtc1sgaSBdLCBpLCBhcmcgKTtcblxuXHRcdFx0XHRpZiAoIHZhbHVlICE9IG51bGwgKSB7XG5cdFx0XHRcdFx0cmV0LnB1c2goIHZhbHVlICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdC8vIEdvIHRocm91Z2ggZXZlcnkga2V5IG9uIHRoZSBvYmplY3QsXG5cdFx0fSBlbHNlIHtcblx0XHRcdGZvciAoIGkgaW4gZWxlbXMgKSB7XG5cdFx0XHRcdHZhbHVlID0gY2FsbGJhY2soIGVsZW1zWyBpIF0sIGksIGFyZyApO1xuXG5cdFx0XHRcdGlmICggdmFsdWUgIT0gbnVsbCApIHtcblx0XHRcdFx0XHRyZXQucHVzaCggdmFsdWUgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIEZsYXR0ZW4gYW55IG5lc3RlZCBhcnJheXNcblx0XHRyZXR1cm4gY29uY2F0LmFwcGx5KCBbXSwgcmV0ICk7XG5cdH0sXG5cblx0Ly8gQSBnbG9iYWwgR1VJRCBjb3VudGVyIGZvciBvYmplY3RzXG5cdGd1aWQ6IDEsXG5cblx0Ly8gQmluZCBhIGZ1bmN0aW9uIHRvIGEgY29udGV4dCwgb3B0aW9uYWxseSBwYXJ0aWFsbHkgYXBwbHlpbmcgYW55XG5cdC8vIGFyZ3VtZW50cy5cblx0cHJveHk6IGZ1bmN0aW9uKCBmbiwgY29udGV4dCApIHtcblx0XHR2YXIgdG1wLCBhcmdzLCBwcm94eTtcblxuXHRcdGlmICggdHlwZW9mIGNvbnRleHQgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHR0bXAgPSBmblsgY29udGV4dCBdO1xuXHRcdFx0Y29udGV4dCA9IGZuO1xuXHRcdFx0Zm4gPSB0bXA7XG5cdFx0fVxuXG5cdFx0Ly8gUXVpY2sgY2hlY2sgdG8gZGV0ZXJtaW5lIGlmIHRhcmdldCBpcyBjYWxsYWJsZSwgaW4gdGhlIHNwZWNcblx0XHQvLyB0aGlzIHRocm93cyBhIFR5cGVFcnJvciwgYnV0IHdlIHdpbGwganVzdCByZXR1cm4gdW5kZWZpbmVkLlxuXHRcdGlmICggIWpRdWVyeS5pc0Z1bmN0aW9uKCBmbiApICkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHQvLyBTaW11bGF0ZWQgYmluZFxuXHRcdGFyZ3MgPSBzbGljZS5jYWxsKCBhcmd1bWVudHMsIDIgKTtcblx0XHRwcm94eSA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIGZuLmFwcGx5KCBjb250ZXh0IHx8IHRoaXMsIGFyZ3MuY29uY2F0KCBzbGljZS5jYWxsKCBhcmd1bWVudHMgKSApICk7XG5cdFx0fTtcblxuXHRcdC8vIFNldCB0aGUgZ3VpZCBvZiB1bmlxdWUgaGFuZGxlciB0byB0aGUgc2FtZSBvZiBvcmlnaW5hbCBoYW5kbGVyLCBzbyBpdCBjYW4gYmUgcmVtb3ZlZFxuXHRcdHByb3h5Lmd1aWQgPSBmbi5ndWlkID0gZm4uZ3VpZCB8fCBqUXVlcnkuZ3VpZCsrO1xuXG5cdFx0cmV0dXJuIHByb3h5O1xuXHR9LFxuXG5cdG5vdzogRGF0ZS5ub3csXG5cblx0Ly8galF1ZXJ5LnN1cHBvcnQgaXMgbm90IHVzZWQgaW4gQ29yZSBidXQgb3RoZXIgcHJvamVjdHMgYXR0YWNoIHRoZWlyXG5cdC8vIHByb3BlcnRpZXMgdG8gaXQgc28gaXQgbmVlZHMgdG8gZXhpc3QuXG5cdHN1cHBvcnQ6IHN1cHBvcnRcbn0gKTtcblxuLy8gSlNIaW50IHdvdWxkIGVycm9yIG9uIHRoaXMgY29kZSBkdWUgdG8gdGhlIFN5bWJvbCBub3QgYmVpbmcgZGVmaW5lZCBpbiBFUzUuXG4vLyBEZWZpbmluZyB0aGlzIGdsb2JhbCBpbiAuanNoaW50cmMgd291bGQgY3JlYXRlIGEgZGFuZ2VyIG9mIHVzaW5nIHRoZSBnbG9iYWxcbi8vIHVuZ3VhcmRlZCBpbiBhbm90aGVyIHBsYWNlLCBpdCBzZWVtcyBzYWZlciB0byBqdXN0IGRpc2FibGUgSlNIaW50IGZvciB0aGVzZVxuLy8gdGhyZWUgbGluZXMuXG4vKiBqc2hpbnQgaWdub3JlOiBzdGFydCAqL1xuaWYgKCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgKSB7XG5cdGpRdWVyeS5mblsgU3ltYm9sLml0ZXJhdG9yIF0gPSBhcnJbIFN5bWJvbC5pdGVyYXRvciBdO1xufVxuLyoganNoaW50IGlnbm9yZTogZW5kICovXG5cbi8vIFBvcHVsYXRlIHRoZSBjbGFzczJ0eXBlIG1hcFxualF1ZXJ5LmVhY2goIFwiQm9vbGVhbiBOdW1iZXIgU3RyaW5nIEZ1bmN0aW9uIEFycmF5IERhdGUgUmVnRXhwIE9iamVjdCBFcnJvciBTeW1ib2xcIi5zcGxpdCggXCIgXCIgKSxcbmZ1bmN0aW9uKCBpLCBuYW1lICkge1xuXHRjbGFzczJ0eXBlWyBcIltvYmplY3QgXCIgKyBuYW1lICsgXCJdXCIgXSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcbn0gKTtcblxuZnVuY3Rpb24gaXNBcnJheUxpa2UoIG9iaiApIHtcblxuXHQvLyBTdXBwb3J0OiBpT1MgOC4yIChub3QgcmVwcm9kdWNpYmxlIGluIHNpbXVsYXRvcilcblx0Ly8gYGluYCBjaGVjayB1c2VkIHRvIHByZXZlbnQgSklUIGVycm9yIChnaC0yMTQ1KVxuXHQvLyBoYXNPd24gaXNuJ3QgdXNlZCBoZXJlIGR1ZSB0byBmYWxzZSBuZWdhdGl2ZXNcblx0Ly8gcmVnYXJkaW5nIE5vZGVsaXN0IGxlbmd0aCBpbiBJRVxuXHR2YXIgbGVuZ3RoID0gISFvYmogJiYgXCJsZW5ndGhcIiBpbiBvYmogJiYgb2JqLmxlbmd0aCxcblx0XHR0eXBlID0galF1ZXJ5LnR5cGUoIG9iaiApO1xuXG5cdGlmICggdHlwZSA9PT0gXCJmdW5jdGlvblwiIHx8IGpRdWVyeS5pc1dpbmRvdyggb2JqICkgKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0cmV0dXJuIHR5cGUgPT09IFwiYXJyYXlcIiB8fCBsZW5ndGggPT09IDAgfHxcblx0XHR0eXBlb2YgbGVuZ3RoID09PSBcIm51bWJlclwiICYmIGxlbmd0aCA+IDAgJiYgKCBsZW5ndGggLSAxICkgaW4gb2JqO1xufVxudmFyIFNpenpsZSA9XG4vKiFcbiAqIFNpenpsZSBDU1MgU2VsZWN0b3IgRW5naW5lIHYyLjIuMVxuICogaHR0cDovL3NpenpsZWpzLmNvbS9cbiAqXG4gKiBDb3B5cmlnaHQgalF1ZXJ5IEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9yc1xuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlXG4gKiBodHRwOi8vanF1ZXJ5Lm9yZy9saWNlbnNlXG4gKlxuICogRGF0ZTogMjAxNS0xMC0xN1xuICovXG4oZnVuY3Rpb24oIHdpbmRvdyApIHtcblxudmFyIGksXG5cdHN1cHBvcnQsXG5cdEV4cHIsXG5cdGdldFRleHQsXG5cdGlzWE1MLFxuXHR0b2tlbml6ZSxcblx0Y29tcGlsZSxcblx0c2VsZWN0LFxuXHRvdXRlcm1vc3RDb250ZXh0LFxuXHRzb3J0SW5wdXQsXG5cdGhhc0R1cGxpY2F0ZSxcblxuXHQvLyBMb2NhbCBkb2N1bWVudCB2YXJzXG5cdHNldERvY3VtZW50LFxuXHRkb2N1bWVudCxcblx0ZG9jRWxlbSxcblx0ZG9jdW1lbnRJc0hUTUwsXG5cdHJidWdneVFTQSxcblx0cmJ1Z2d5TWF0Y2hlcyxcblx0bWF0Y2hlcyxcblx0Y29udGFpbnMsXG5cblx0Ly8gSW5zdGFuY2Utc3BlY2lmaWMgZGF0YVxuXHRleHBhbmRvID0gXCJzaXp6bGVcIiArIDEgKiBuZXcgRGF0ZSgpLFxuXHRwcmVmZXJyZWREb2MgPSB3aW5kb3cuZG9jdW1lbnQsXG5cdGRpcnJ1bnMgPSAwLFxuXHRkb25lID0gMCxcblx0Y2xhc3NDYWNoZSA9IGNyZWF0ZUNhY2hlKCksXG5cdHRva2VuQ2FjaGUgPSBjcmVhdGVDYWNoZSgpLFxuXHRjb21waWxlckNhY2hlID0gY3JlYXRlQ2FjaGUoKSxcblx0c29ydE9yZGVyID0gZnVuY3Rpb24oIGEsIGIgKSB7XG5cdFx0aWYgKCBhID09PSBiICkge1xuXHRcdFx0aGFzRHVwbGljYXRlID0gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIDA7XG5cdH0sXG5cblx0Ly8gR2VuZXJhbC1wdXJwb3NlIGNvbnN0YW50c1xuXHRNQVhfTkVHQVRJVkUgPSAxIDw8IDMxLFxuXG5cdC8vIEluc3RhbmNlIG1ldGhvZHNcblx0aGFzT3duID0gKHt9KS5oYXNPd25Qcm9wZXJ0eSxcblx0YXJyID0gW10sXG5cdHBvcCA9IGFyci5wb3AsXG5cdHB1c2hfbmF0aXZlID0gYXJyLnB1c2gsXG5cdHB1c2ggPSBhcnIucHVzaCxcblx0c2xpY2UgPSBhcnIuc2xpY2UsXG5cdC8vIFVzZSBhIHN0cmlwcGVkLWRvd24gaW5kZXhPZiBhcyBpdCdzIGZhc3RlciB0aGFuIG5hdGl2ZVxuXHQvLyBodHRwOi8vanNwZXJmLmNvbS90aG9yLWluZGV4b2YtdnMtZm9yLzVcblx0aW5kZXhPZiA9IGZ1bmN0aW9uKCBsaXN0LCBlbGVtICkge1xuXHRcdHZhciBpID0gMCxcblx0XHRcdGxlbiA9IGxpc3QubGVuZ3RoO1xuXHRcdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdFx0aWYgKCBsaXN0W2ldID09PSBlbGVtICkge1xuXHRcdFx0XHRyZXR1cm4gaTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIC0xO1xuXHR9LFxuXG5cdGJvb2xlYW5zID0gXCJjaGVja2VkfHNlbGVjdGVkfGFzeW5jfGF1dG9mb2N1c3xhdXRvcGxheXxjb250cm9sc3xkZWZlcnxkaXNhYmxlZHxoaWRkZW58aXNtYXB8bG9vcHxtdWx0aXBsZXxvcGVufHJlYWRvbmx5fHJlcXVpcmVkfHNjb3BlZFwiLFxuXG5cdC8vIFJlZ3VsYXIgZXhwcmVzc2lvbnNcblxuXHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9jc3MzLXNlbGVjdG9ycy8jd2hpdGVzcGFjZVxuXHR3aGl0ZXNwYWNlID0gXCJbXFxcXHgyMFxcXFx0XFxcXHJcXFxcblxcXFxmXVwiLFxuXG5cdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL0NTUzIxL3N5bmRhdGEuaHRtbCN2YWx1ZS1kZWYtaWRlbnRpZmllclxuXHRpZGVudGlmaWVyID0gXCIoPzpcXFxcXFxcXC58W1xcXFx3LV18W15cXFxceDAwLVxcXFx4YTBdKStcIixcblxuXHQvLyBBdHRyaWJ1dGUgc2VsZWN0b3JzOiBodHRwOi8vd3d3LnczLm9yZy9UUi9zZWxlY3RvcnMvI2F0dHJpYnV0ZS1zZWxlY3RvcnNcblx0YXR0cmlidXRlcyA9IFwiXFxcXFtcIiArIHdoaXRlc3BhY2UgKyBcIiooXCIgKyBpZGVudGlmaWVyICsgXCIpKD86XCIgKyB3aGl0ZXNwYWNlICtcblx0XHQvLyBPcGVyYXRvciAoY2FwdHVyZSAyKVxuXHRcdFwiKihbKl4kfCF+XT89KVwiICsgd2hpdGVzcGFjZSArXG5cdFx0Ly8gXCJBdHRyaWJ1dGUgdmFsdWVzIG11c3QgYmUgQ1NTIGlkZW50aWZpZXJzIFtjYXB0dXJlIDVdIG9yIHN0cmluZ3MgW2NhcHR1cmUgMyBvciBjYXB0dXJlIDRdXCJcblx0XHRcIiooPzonKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcJ10pKiknfFxcXCIoKD86XFxcXFxcXFwufFteXFxcXFxcXFxcXFwiXSkqKVxcXCJ8KFwiICsgaWRlbnRpZmllciArIFwiKSl8KVwiICsgd2hpdGVzcGFjZSArXG5cdFx0XCIqXFxcXF1cIixcblxuXHRwc2V1ZG9zID0gXCI6KFwiICsgaWRlbnRpZmllciArIFwiKSg/OlxcXFwoKFwiICtcblx0XHQvLyBUbyByZWR1Y2UgdGhlIG51bWJlciBvZiBzZWxlY3RvcnMgbmVlZGluZyB0b2tlbml6ZSBpbiB0aGUgcHJlRmlsdGVyLCBwcmVmZXIgYXJndW1lbnRzOlxuXHRcdC8vIDEuIHF1b3RlZCAoY2FwdHVyZSAzOyBjYXB0dXJlIDQgb3IgY2FwdHVyZSA1KVxuXHRcdFwiKCcoKD86XFxcXFxcXFwufFteXFxcXFxcXFwnXSkqKSd8XFxcIigoPzpcXFxcXFxcXC58W15cXFxcXFxcXFxcXCJdKSopXFxcIil8XCIgK1xuXHRcdC8vIDIuIHNpbXBsZSAoY2FwdHVyZSA2KVxuXHRcdFwiKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcKClbXFxcXF1dfFwiICsgYXR0cmlidXRlcyArIFwiKSopfFwiICtcblx0XHQvLyAzLiBhbnl0aGluZyBlbHNlIChjYXB0dXJlIDIpXG5cdFx0XCIuKlwiICtcblx0XHRcIilcXFxcKXwpXCIsXG5cblx0Ly8gTGVhZGluZyBhbmQgbm9uLWVzY2FwZWQgdHJhaWxpbmcgd2hpdGVzcGFjZSwgY2FwdHVyaW5nIHNvbWUgbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVycyBwcmVjZWRpbmcgdGhlIGxhdHRlclxuXHRyd2hpdGVzcGFjZSA9IG5ldyBSZWdFeHAoIHdoaXRlc3BhY2UgKyBcIitcIiwgXCJnXCIgKSxcblx0cnRyaW0gPSBuZXcgUmVnRXhwKCBcIl5cIiArIHdoaXRlc3BhY2UgKyBcIit8KCg/Ol58W15cXFxcXFxcXF0pKD86XFxcXFxcXFwuKSopXCIgKyB3aGl0ZXNwYWNlICsgXCIrJFwiLCBcImdcIiApLFxuXG5cdHJjb21tYSA9IG5ldyBSZWdFeHAoIFwiXlwiICsgd2hpdGVzcGFjZSArIFwiKixcIiArIHdoaXRlc3BhY2UgKyBcIipcIiApLFxuXHRyY29tYmluYXRvcnMgPSBuZXcgUmVnRXhwKCBcIl5cIiArIHdoaXRlc3BhY2UgKyBcIiooWz4rfl18XCIgKyB3aGl0ZXNwYWNlICsgXCIpXCIgKyB3aGl0ZXNwYWNlICsgXCIqXCIgKSxcblxuXHRyYXR0cmlidXRlUXVvdGVzID0gbmV3IFJlZ0V4cCggXCI9XCIgKyB3aGl0ZXNwYWNlICsgXCIqKFteXFxcXF0nXFxcIl0qPylcIiArIHdoaXRlc3BhY2UgKyBcIipcXFxcXVwiLCBcImdcIiApLFxuXG5cdHJwc2V1ZG8gPSBuZXcgUmVnRXhwKCBwc2V1ZG9zICksXG5cdHJpZGVudGlmaWVyID0gbmV3IFJlZ0V4cCggXCJeXCIgKyBpZGVudGlmaWVyICsgXCIkXCIgKSxcblxuXHRtYXRjaEV4cHIgPSB7XG5cdFx0XCJJRFwiOiBuZXcgUmVnRXhwKCBcIl4jKFwiICsgaWRlbnRpZmllciArIFwiKVwiICksXG5cdFx0XCJDTEFTU1wiOiBuZXcgUmVnRXhwKCBcIl5cXFxcLihcIiArIGlkZW50aWZpZXIgKyBcIilcIiApLFxuXHRcdFwiVEFHXCI6IG5ldyBSZWdFeHAoIFwiXihcIiArIGlkZW50aWZpZXIgKyBcInxbKl0pXCIgKSxcblx0XHRcIkFUVFJcIjogbmV3IFJlZ0V4cCggXCJeXCIgKyBhdHRyaWJ1dGVzICksXG5cdFx0XCJQU0VVRE9cIjogbmV3IFJlZ0V4cCggXCJeXCIgKyBwc2V1ZG9zICksXG5cdFx0XCJDSElMRFwiOiBuZXcgUmVnRXhwKCBcIl46KG9ubHl8Zmlyc3R8bGFzdHxudGh8bnRoLWxhc3QpLShjaGlsZHxvZi10eXBlKSg/OlxcXFwoXCIgKyB3aGl0ZXNwYWNlICtcblx0XHRcdFwiKihldmVufG9kZHwoKFsrLV18KShcXFxcZCopbnwpXCIgKyB3aGl0ZXNwYWNlICsgXCIqKD86KFsrLV18KVwiICsgd2hpdGVzcGFjZSArXG5cdFx0XHRcIiooXFxcXGQrKXwpKVwiICsgd2hpdGVzcGFjZSArIFwiKlxcXFwpfClcIiwgXCJpXCIgKSxcblx0XHRcImJvb2xcIjogbmV3IFJlZ0V4cCggXCJeKD86XCIgKyBib29sZWFucyArIFwiKSRcIiwgXCJpXCIgKSxcblx0XHQvLyBGb3IgdXNlIGluIGxpYnJhcmllcyBpbXBsZW1lbnRpbmcgLmlzKClcblx0XHQvLyBXZSB1c2UgdGhpcyBmb3IgUE9TIG1hdGNoaW5nIGluIGBzZWxlY3RgXG5cdFx0XCJuZWVkc0NvbnRleHRcIjogbmV3IFJlZ0V4cCggXCJeXCIgKyB3aGl0ZXNwYWNlICsgXCIqWz4rfl18OihldmVufG9kZHxlcXxndHxsdHxudGh8Zmlyc3R8bGFzdCkoPzpcXFxcKFwiICtcblx0XHRcdHdoaXRlc3BhY2UgKyBcIiooKD86LVxcXFxkKT9cXFxcZCopXCIgKyB3aGl0ZXNwYWNlICsgXCIqXFxcXCl8KSg/PVteLV18JClcIiwgXCJpXCIgKVxuXHR9LFxuXG5cdHJpbnB1dHMgPSAvXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24pJC9pLFxuXHRyaGVhZGVyID0gL15oXFxkJC9pLFxuXG5cdHJuYXRpdmUgPSAvXltee10rXFx7XFxzKlxcW25hdGl2ZSBcXHcvLFxuXG5cdC8vIEVhc2lseS1wYXJzZWFibGUvcmV0cmlldmFibGUgSUQgb3IgVEFHIG9yIENMQVNTIHNlbGVjdG9yc1xuXHRycXVpY2tFeHByID0gL14oPzojKFtcXHctXSspfChcXHcrKXxcXC4oW1xcdy1dKykpJC8sXG5cblx0cnNpYmxpbmcgPSAvWyt+XS8sXG5cdHJlc2NhcGUgPSAvJ3xcXFxcL2csXG5cblx0Ly8gQ1NTIGVzY2FwZXMgaHR0cDovL3d3dy53My5vcmcvVFIvQ1NTMjEvc3luZGF0YS5odG1sI2VzY2FwZWQtY2hhcmFjdGVyc1xuXHRydW5lc2NhcGUgPSBuZXcgUmVnRXhwKCBcIlxcXFxcXFxcKFtcXFxcZGEtZl17MSw2fVwiICsgd2hpdGVzcGFjZSArIFwiP3woXCIgKyB3aGl0ZXNwYWNlICsgXCIpfC4pXCIsIFwiaWdcIiApLFxuXHRmdW5lc2NhcGUgPSBmdW5jdGlvbiggXywgZXNjYXBlZCwgZXNjYXBlZFdoaXRlc3BhY2UgKSB7XG5cdFx0dmFyIGhpZ2ggPSBcIjB4XCIgKyBlc2NhcGVkIC0gMHgxMDAwMDtcblx0XHQvLyBOYU4gbWVhbnMgbm9uLWNvZGVwb2ludFxuXHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3g8MjRcblx0XHQvLyBXb3JrYXJvdW5kIGVycm9uZW91cyBudW1lcmljIGludGVycHJldGF0aW9uIG9mICtcIjB4XCJcblx0XHRyZXR1cm4gaGlnaCAhPT0gaGlnaCB8fCBlc2NhcGVkV2hpdGVzcGFjZSA/XG5cdFx0XHRlc2NhcGVkIDpcblx0XHRcdGhpZ2ggPCAwID9cblx0XHRcdFx0Ly8gQk1QIGNvZGVwb2ludFxuXHRcdFx0XHRTdHJpbmcuZnJvbUNoYXJDb2RlKCBoaWdoICsgMHgxMDAwMCApIDpcblx0XHRcdFx0Ly8gU3VwcGxlbWVudGFsIFBsYW5lIGNvZGVwb2ludCAoc3Vycm9nYXRlIHBhaXIpXG5cdFx0XHRcdFN0cmluZy5mcm9tQ2hhckNvZGUoIGhpZ2ggPj4gMTAgfCAweEQ4MDAsIGhpZ2ggJiAweDNGRiB8IDB4REMwMCApO1xuXHR9LFxuXG5cdC8vIFVzZWQgZm9yIGlmcmFtZXNcblx0Ly8gU2VlIHNldERvY3VtZW50KClcblx0Ly8gUmVtb3ZpbmcgdGhlIGZ1bmN0aW9uIHdyYXBwZXIgY2F1c2VzIGEgXCJQZXJtaXNzaW9uIERlbmllZFwiXG5cdC8vIGVycm9yIGluIElFXG5cdHVubG9hZEhhbmRsZXIgPSBmdW5jdGlvbigpIHtcblx0XHRzZXREb2N1bWVudCgpO1xuXHR9O1xuXG4vLyBPcHRpbWl6ZSBmb3IgcHVzaC5hcHBseSggXywgTm9kZUxpc3QgKVxudHJ5IHtcblx0cHVzaC5hcHBseShcblx0XHQoYXJyID0gc2xpY2UuY2FsbCggcHJlZmVycmVkRG9jLmNoaWxkTm9kZXMgKSksXG5cdFx0cHJlZmVycmVkRG9jLmNoaWxkTm9kZXNcblx0KTtcblx0Ly8gU3VwcG9ydDogQW5kcm9pZDw0LjBcblx0Ly8gRGV0ZWN0IHNpbGVudGx5IGZhaWxpbmcgcHVzaC5hcHBseVxuXHRhcnJbIHByZWZlcnJlZERvYy5jaGlsZE5vZGVzLmxlbmd0aCBdLm5vZGVUeXBlO1xufSBjYXRjaCAoIGUgKSB7XG5cdHB1c2ggPSB7IGFwcGx5OiBhcnIubGVuZ3RoID9cblxuXHRcdC8vIExldmVyYWdlIHNsaWNlIGlmIHBvc3NpYmxlXG5cdFx0ZnVuY3Rpb24oIHRhcmdldCwgZWxzICkge1xuXHRcdFx0cHVzaF9uYXRpdmUuYXBwbHkoIHRhcmdldCwgc2xpY2UuY2FsbChlbHMpICk7XG5cdFx0fSA6XG5cblx0XHQvLyBTdXBwb3J0OiBJRTw5XG5cdFx0Ly8gT3RoZXJ3aXNlIGFwcGVuZCBkaXJlY3RseVxuXHRcdGZ1bmN0aW9uKCB0YXJnZXQsIGVscyApIHtcblx0XHRcdHZhciBqID0gdGFyZ2V0Lmxlbmd0aCxcblx0XHRcdFx0aSA9IDA7XG5cdFx0XHQvLyBDYW4ndCB0cnVzdCBOb2RlTGlzdC5sZW5ndGhcblx0XHRcdHdoaWxlICggKHRhcmdldFtqKytdID0gZWxzW2krK10pICkge31cblx0XHRcdHRhcmdldC5sZW5ndGggPSBqIC0gMTtcblx0XHR9XG5cdH07XG59XG5cbmZ1bmN0aW9uIFNpenpsZSggc2VsZWN0b3IsIGNvbnRleHQsIHJlc3VsdHMsIHNlZWQgKSB7XG5cdHZhciBtLCBpLCBlbGVtLCBuaWQsIG5pZHNlbGVjdCwgbWF0Y2gsIGdyb3VwcywgbmV3U2VsZWN0b3IsXG5cdFx0bmV3Q29udGV4dCA9IGNvbnRleHQgJiYgY29udGV4dC5vd25lckRvY3VtZW50LFxuXG5cdFx0Ly8gbm9kZVR5cGUgZGVmYXVsdHMgdG8gOSwgc2luY2UgY29udGV4dCBkZWZhdWx0cyB0byBkb2N1bWVudFxuXHRcdG5vZGVUeXBlID0gY29udGV4dCA/IGNvbnRleHQubm9kZVR5cGUgOiA5O1xuXG5cdHJlc3VsdHMgPSByZXN1bHRzIHx8IFtdO1xuXG5cdC8vIFJldHVybiBlYXJseSBmcm9tIGNhbGxzIHdpdGggaW52YWxpZCBzZWxlY3RvciBvciBjb250ZXh0XG5cdGlmICggdHlwZW9mIHNlbGVjdG9yICE9PSBcInN0cmluZ1wiIHx8ICFzZWxlY3RvciB8fFxuXHRcdG5vZGVUeXBlICE9PSAxICYmIG5vZGVUeXBlICE9PSA5ICYmIG5vZGVUeXBlICE9PSAxMSApIHtcblxuXHRcdHJldHVybiByZXN1bHRzO1xuXHR9XG5cblx0Ly8gVHJ5IHRvIHNob3J0Y3V0IGZpbmQgb3BlcmF0aW9ucyAoYXMgb3Bwb3NlZCB0byBmaWx0ZXJzKSBpbiBIVE1MIGRvY3VtZW50c1xuXHRpZiAoICFzZWVkICkge1xuXG5cdFx0aWYgKCAoIGNvbnRleHQgPyBjb250ZXh0Lm93bmVyRG9jdW1lbnQgfHwgY29udGV4dCA6IHByZWZlcnJlZERvYyApICE9PSBkb2N1bWVudCApIHtcblx0XHRcdHNldERvY3VtZW50KCBjb250ZXh0ICk7XG5cdFx0fVxuXHRcdGNvbnRleHQgPSBjb250ZXh0IHx8IGRvY3VtZW50O1xuXG5cdFx0aWYgKCBkb2N1bWVudElzSFRNTCApIHtcblxuXHRcdFx0Ly8gSWYgdGhlIHNlbGVjdG9yIGlzIHN1ZmZpY2llbnRseSBzaW1wbGUsIHRyeSB1c2luZyBhIFwiZ2V0KkJ5KlwiIERPTSBtZXRob2Rcblx0XHRcdC8vIChleGNlcHRpbmcgRG9jdW1lbnRGcmFnbWVudCBjb250ZXh0LCB3aGVyZSB0aGUgbWV0aG9kcyBkb24ndCBleGlzdClcblx0XHRcdGlmICggbm9kZVR5cGUgIT09IDExICYmIChtYXRjaCA9IHJxdWlja0V4cHIuZXhlYyggc2VsZWN0b3IgKSkgKSB7XG5cblx0XHRcdFx0Ly8gSUQgc2VsZWN0b3Jcblx0XHRcdFx0aWYgKCAobSA9IG1hdGNoWzFdKSApIHtcblxuXHRcdFx0XHRcdC8vIERvY3VtZW50IGNvbnRleHRcblx0XHRcdFx0XHRpZiAoIG5vZGVUeXBlID09PSA5ICkge1xuXHRcdFx0XHRcdFx0aWYgKCAoZWxlbSA9IGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQoIG0gKSkgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUsIE9wZXJhLCBXZWJraXRcblx0XHRcdFx0XHRcdFx0Ly8gVE9ETzogaWRlbnRpZnkgdmVyc2lvbnNcblx0XHRcdFx0XHRcdFx0Ly8gZ2V0RWxlbWVudEJ5SWQgY2FuIG1hdGNoIGVsZW1lbnRzIGJ5IG5hbWUgaW5zdGVhZCBvZiBJRFxuXHRcdFx0XHRcdFx0XHRpZiAoIGVsZW0uaWQgPT09IG0gKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmVzdWx0cy5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gRWxlbWVudCBjb250ZXh0XG5cdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUsIE9wZXJhLCBXZWJraXRcblx0XHRcdFx0XHRcdC8vIFRPRE86IGlkZW50aWZ5IHZlcnNpb25zXG5cdFx0XHRcdFx0XHQvLyBnZXRFbGVtZW50QnlJZCBjYW4gbWF0Y2ggZWxlbWVudHMgYnkgbmFtZSBpbnN0ZWFkIG9mIElEXG5cdFx0XHRcdFx0XHRpZiAoIG5ld0NvbnRleHQgJiYgKGVsZW0gPSBuZXdDb250ZXh0LmdldEVsZW1lbnRCeUlkKCBtICkpICYmXG5cdFx0XHRcdFx0XHRcdGNvbnRhaW5zKCBjb250ZXh0LCBlbGVtICkgJiZcblx0XHRcdFx0XHRcdFx0ZWxlbS5pZCA9PT0gbSApIHtcblxuXHRcdFx0XHRcdFx0XHRyZXN1bHRzLnB1c2goIGVsZW0gKTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFR5cGUgc2VsZWN0b3Jcblx0XHRcdFx0fSBlbHNlIGlmICggbWF0Y2hbMl0gKSB7XG5cdFx0XHRcdFx0cHVzaC5hcHBseSggcmVzdWx0cywgY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSggc2VsZWN0b3IgKSApO1xuXHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXG5cdFx0XHRcdC8vIENsYXNzIHNlbGVjdG9yXG5cdFx0XHRcdH0gZWxzZSBpZiAoIChtID0gbWF0Y2hbM10pICYmIHN1cHBvcnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSAmJlxuXHRcdFx0XHRcdGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSApIHtcblxuXHRcdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsIGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSggbSApICk7XG5cdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gVGFrZSBhZHZhbnRhZ2Ugb2YgcXVlcnlTZWxlY3RvckFsbFxuXHRcdFx0aWYgKCBzdXBwb3J0LnFzYSAmJlxuXHRcdFx0XHQhY29tcGlsZXJDYWNoZVsgc2VsZWN0b3IgKyBcIiBcIiBdICYmXG5cdFx0XHRcdCghcmJ1Z2d5UVNBIHx8ICFyYnVnZ3lRU0EudGVzdCggc2VsZWN0b3IgKSkgKSB7XG5cblx0XHRcdFx0aWYgKCBub2RlVHlwZSAhPT0gMSApIHtcblx0XHRcdFx0XHRuZXdDb250ZXh0ID0gY29udGV4dDtcblx0XHRcdFx0XHRuZXdTZWxlY3RvciA9IHNlbGVjdG9yO1xuXG5cdFx0XHRcdC8vIHFTQSBsb29rcyBvdXRzaWRlIEVsZW1lbnQgY29udGV4dCwgd2hpY2ggaXMgbm90IHdoYXQgd2Ugd2FudFxuXHRcdFx0XHQvLyBUaGFua3MgdG8gQW5kcmV3IER1cG9udCBmb3IgdGhpcyB3b3JrYXJvdW5kIHRlY2huaXF1ZVxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PThcblx0XHRcdFx0Ly8gRXhjbHVkZSBvYmplY3QgZWxlbWVudHNcblx0XHRcdFx0fSBlbHNlIGlmICggY29udGV4dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpICE9PSBcIm9iamVjdFwiICkge1xuXG5cdFx0XHRcdFx0Ly8gQ2FwdHVyZSB0aGUgY29udGV4dCBJRCwgc2V0dGluZyBpdCBmaXJzdCBpZiBuZWNlc3Nhcnlcblx0XHRcdFx0XHRpZiAoIChuaWQgPSBjb250ZXh0LmdldEF0dHJpYnV0ZSggXCJpZFwiICkpICkge1xuXHRcdFx0XHRcdFx0bmlkID0gbmlkLnJlcGxhY2UoIHJlc2NhcGUsIFwiXFxcXCQmXCIgKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Y29udGV4dC5zZXRBdHRyaWJ1dGUoIFwiaWRcIiwgKG5pZCA9IGV4cGFuZG8pICk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gUHJlZml4IGV2ZXJ5IHNlbGVjdG9yIGluIHRoZSBsaXN0XG5cdFx0XHRcdFx0Z3JvdXBzID0gdG9rZW5pemUoIHNlbGVjdG9yICk7XG5cdFx0XHRcdFx0aSA9IGdyb3Vwcy5sZW5ndGg7XG5cdFx0XHRcdFx0bmlkc2VsZWN0ID0gcmlkZW50aWZpZXIudGVzdCggbmlkICkgPyBcIiNcIiArIG5pZCA6IFwiW2lkPSdcIiArIG5pZCArIFwiJ11cIjtcblx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRcdGdyb3Vwc1tpXSA9IG5pZHNlbGVjdCArIFwiIFwiICsgdG9TZWxlY3RvciggZ3JvdXBzW2ldICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdG5ld1NlbGVjdG9yID0gZ3JvdXBzLmpvaW4oIFwiLFwiICk7XG5cblx0XHRcdFx0XHQvLyBFeHBhbmQgY29udGV4dCBmb3Igc2libGluZyBzZWxlY3RvcnNcblx0XHRcdFx0XHRuZXdDb250ZXh0ID0gcnNpYmxpbmcudGVzdCggc2VsZWN0b3IgKSAmJiB0ZXN0Q29udGV4dCggY29udGV4dC5wYXJlbnROb2RlICkgfHxcblx0XHRcdFx0XHRcdGNvbnRleHQ7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoIG5ld1NlbGVjdG9yICkge1xuXHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRwdXNoLmFwcGx5KCByZXN1bHRzLFxuXHRcdFx0XHRcdFx0XHRuZXdDb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwoIG5ld1NlbGVjdG9yIClcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblx0XHRcdFx0XHR9IGNhdGNoICggcXNhRXJyb3IgKSB7XG5cdFx0XHRcdFx0fSBmaW5hbGx5IHtcblx0XHRcdFx0XHRcdGlmICggbmlkID09PSBleHBhbmRvICkge1xuXHRcdFx0XHRcdFx0XHRjb250ZXh0LnJlbW92ZUF0dHJpYnV0ZSggXCJpZFwiICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gQWxsIG90aGVyc1xuXHRyZXR1cm4gc2VsZWN0KCBzZWxlY3Rvci5yZXBsYWNlKCBydHJpbSwgXCIkMVwiICksIGNvbnRleHQsIHJlc3VsdHMsIHNlZWQgKTtcbn1cblxuLyoqXG4gKiBDcmVhdGUga2V5LXZhbHVlIGNhY2hlcyBvZiBsaW1pdGVkIHNpemVcbiAqIEByZXR1cm5zIHtmdW5jdGlvbihzdHJpbmcsIG9iamVjdCl9IFJldHVybnMgdGhlIE9iamVjdCBkYXRhIGFmdGVyIHN0b3JpbmcgaXQgb24gaXRzZWxmIHdpdGhcbiAqXHRwcm9wZXJ0eSBuYW1lIHRoZSAoc3BhY2Utc3VmZml4ZWQpIHN0cmluZyBhbmQgKGlmIHRoZSBjYWNoZSBpcyBsYXJnZXIgdGhhbiBFeHByLmNhY2hlTGVuZ3RoKVxuICpcdGRlbGV0aW5nIHRoZSBvbGRlc3QgZW50cnlcbiAqL1xuZnVuY3Rpb24gY3JlYXRlQ2FjaGUoKSB7XG5cdHZhciBrZXlzID0gW107XG5cblx0ZnVuY3Rpb24gY2FjaGUoIGtleSwgdmFsdWUgKSB7XG5cdFx0Ly8gVXNlIChrZXkgKyBcIiBcIikgdG8gYXZvaWQgY29sbGlzaW9uIHdpdGggbmF0aXZlIHByb3RvdHlwZSBwcm9wZXJ0aWVzIChzZWUgSXNzdWUgIzE1Nylcblx0XHRpZiAoIGtleXMucHVzaCgga2V5ICsgXCIgXCIgKSA+IEV4cHIuY2FjaGVMZW5ndGggKSB7XG5cdFx0XHQvLyBPbmx5IGtlZXAgdGhlIG1vc3QgcmVjZW50IGVudHJpZXNcblx0XHRcdGRlbGV0ZSBjYWNoZVsga2V5cy5zaGlmdCgpIF07XG5cdFx0fVxuXHRcdHJldHVybiAoY2FjaGVbIGtleSArIFwiIFwiIF0gPSB2YWx1ZSk7XG5cdH1cblx0cmV0dXJuIGNhY2hlO1xufVxuXG4vKipcbiAqIE1hcmsgYSBmdW5jdGlvbiBmb3Igc3BlY2lhbCB1c2UgYnkgU2l6emxlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgZnVuY3Rpb24gdG8gbWFya1xuICovXG5mdW5jdGlvbiBtYXJrRnVuY3Rpb24oIGZuICkge1xuXHRmblsgZXhwYW5kbyBdID0gdHJ1ZTtcblx0cmV0dXJuIGZuO1xufVxuXG4vKipcbiAqIFN1cHBvcnQgdGVzdGluZyB1c2luZyBhbiBlbGVtZW50XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBQYXNzZWQgdGhlIGNyZWF0ZWQgZGl2IGFuZCBleHBlY3RzIGEgYm9vbGVhbiByZXN1bHRcbiAqL1xuZnVuY3Rpb24gYXNzZXJ0KCBmbiApIHtcblx0dmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cblx0dHJ5IHtcblx0XHRyZXR1cm4gISFmbiggZGl2ICk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0gZmluYWxseSB7XG5cdFx0Ly8gUmVtb3ZlIGZyb20gaXRzIHBhcmVudCBieSBkZWZhdWx0XG5cdFx0aWYgKCBkaXYucGFyZW50Tm9kZSApIHtcblx0XHRcdGRpdi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCBkaXYgKTtcblx0XHR9XG5cdFx0Ly8gcmVsZWFzZSBtZW1vcnkgaW4gSUVcblx0XHRkaXYgPSBudWxsO1xuXHR9XG59XG5cbi8qKlxuICogQWRkcyB0aGUgc2FtZSBoYW5kbGVyIGZvciBhbGwgb2YgdGhlIHNwZWNpZmllZCBhdHRyc1xuICogQHBhcmFtIHtTdHJpbmd9IGF0dHJzIFBpcGUtc2VwYXJhdGVkIGxpc3Qgb2YgYXR0cmlidXRlc1xuICogQHBhcmFtIHtGdW5jdGlvbn0gaGFuZGxlciBUaGUgbWV0aG9kIHRoYXQgd2lsbCBiZSBhcHBsaWVkXG4gKi9cbmZ1bmN0aW9uIGFkZEhhbmRsZSggYXR0cnMsIGhhbmRsZXIgKSB7XG5cdHZhciBhcnIgPSBhdHRycy5zcGxpdChcInxcIiksXG5cdFx0aSA9IGFyci5sZW5ndGg7XG5cblx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0RXhwci5hdHRySGFuZGxlWyBhcnJbaV0gXSA9IGhhbmRsZXI7XG5cdH1cbn1cblxuLyoqXG4gKiBDaGVja3MgZG9jdW1lbnQgb3JkZXIgb2YgdHdvIHNpYmxpbmdzXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGFcbiAqIEBwYXJhbSB7RWxlbWVudH0gYlxuICogQHJldHVybnMge051bWJlcn0gUmV0dXJucyBsZXNzIHRoYW4gMCBpZiBhIHByZWNlZGVzIGIsIGdyZWF0ZXIgdGhhbiAwIGlmIGEgZm9sbG93cyBiXG4gKi9cbmZ1bmN0aW9uIHNpYmxpbmdDaGVjayggYSwgYiApIHtcblx0dmFyIGN1ciA9IGIgJiYgYSxcblx0XHRkaWZmID0gY3VyICYmIGEubm9kZVR5cGUgPT09IDEgJiYgYi5ub2RlVHlwZSA9PT0gMSAmJlxuXHRcdFx0KCB+Yi5zb3VyY2VJbmRleCB8fCBNQVhfTkVHQVRJVkUgKSAtXG5cdFx0XHQoIH5hLnNvdXJjZUluZGV4IHx8IE1BWF9ORUdBVElWRSApO1xuXG5cdC8vIFVzZSBJRSBzb3VyY2VJbmRleCBpZiBhdmFpbGFibGUgb24gYm90aCBub2Rlc1xuXHRpZiAoIGRpZmYgKSB7XG5cdFx0cmV0dXJuIGRpZmY7XG5cdH1cblxuXHQvLyBDaGVjayBpZiBiIGZvbGxvd3MgYVxuXHRpZiAoIGN1ciApIHtcblx0XHR3aGlsZSAoIChjdXIgPSBjdXIubmV4dFNpYmxpbmcpICkge1xuXHRcdFx0aWYgKCBjdXIgPT09IGIgKSB7XG5cdFx0XHRcdHJldHVybiAtMTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gYSA/IDEgOiAtMTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgZnVuY3Rpb24gdG8gdXNlIGluIHBzZXVkb3MgZm9yIGlucHV0IHR5cGVzXG4gKiBAcGFyYW0ge1N0cmluZ30gdHlwZVxuICovXG5mdW5jdGlvbiBjcmVhdGVJbnB1dFBzZXVkbyggdHlwZSApIHtcblx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHZhciBuYW1lID0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXHRcdHJldHVybiBuYW1lID09PSBcImlucHV0XCIgJiYgZWxlbS50eXBlID09PSB0eXBlO1xuXHR9O1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBmdW5jdGlvbiB0byB1c2UgaW4gcHNldWRvcyBmb3IgYnV0dG9uc1xuICogQHBhcmFtIHtTdHJpbmd9IHR5cGVcbiAqL1xuZnVuY3Rpb24gY3JlYXRlQnV0dG9uUHNldWRvKCB0eXBlICkge1xuXHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0dmFyIG5hbWUgPSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG5cdFx0cmV0dXJuIChuYW1lID09PSBcImlucHV0XCIgfHwgbmFtZSA9PT0gXCJidXR0b25cIikgJiYgZWxlbS50eXBlID09PSB0eXBlO1xuXHR9O1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBmdW5jdGlvbiB0byB1c2UgaW4gcHNldWRvcyBmb3IgcG9zaXRpb25hbHNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oIGZuICkge1xuXHRyZXR1cm4gbWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCBhcmd1bWVudCApIHtcblx0XHRhcmd1bWVudCA9ICthcmd1bWVudDtcblx0XHRyZXR1cm4gbWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCBzZWVkLCBtYXRjaGVzICkge1xuXHRcdFx0dmFyIGosXG5cdFx0XHRcdG1hdGNoSW5kZXhlcyA9IGZuKCBbXSwgc2VlZC5sZW5ndGgsIGFyZ3VtZW50ICksXG5cdFx0XHRcdGkgPSBtYXRjaEluZGV4ZXMubGVuZ3RoO1xuXG5cdFx0XHQvLyBNYXRjaCBlbGVtZW50cyBmb3VuZCBhdCB0aGUgc3BlY2lmaWVkIGluZGV4ZXNcblx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRpZiAoIHNlZWRbIChqID0gbWF0Y2hJbmRleGVzW2ldKSBdICkge1xuXHRcdFx0XHRcdHNlZWRbal0gPSAhKG1hdGNoZXNbal0gPSBzZWVkW2pdKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9KTtcbn1cblxuLyoqXG4gKiBDaGVja3MgYSBub2RlIGZvciB2YWxpZGl0eSBhcyBhIFNpenpsZSBjb250ZXh0XG4gKiBAcGFyYW0ge0VsZW1lbnR8T2JqZWN0PX0gY29udGV4dFxuICogQHJldHVybnMge0VsZW1lbnR8T2JqZWN0fEJvb2xlYW59IFRoZSBpbnB1dCBub2RlIGlmIGFjY2VwdGFibGUsIG90aGVyd2lzZSBhIGZhbHN5IHZhbHVlXG4gKi9cbmZ1bmN0aW9uIHRlc3RDb250ZXh0KCBjb250ZXh0ICkge1xuXHRyZXR1cm4gY29udGV4dCAmJiB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBjb250ZXh0O1xufVxuXG4vLyBFeHBvc2Ugc3VwcG9ydCB2YXJzIGZvciBjb252ZW5pZW5jZVxuc3VwcG9ydCA9IFNpenpsZS5zdXBwb3J0ID0ge307XG5cbi8qKlxuICogRGV0ZWN0cyBYTUwgbm9kZXNcbiAqIEBwYXJhbSB7RWxlbWVudHxPYmplY3R9IGVsZW0gQW4gZWxlbWVudCBvciBhIGRvY3VtZW50XG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gVHJ1ZSBpZmYgZWxlbSBpcyBhIG5vbi1IVE1MIFhNTCBub2RlXG4gKi9cbmlzWE1MID0gU2l6emxlLmlzWE1MID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdC8vIGRvY3VtZW50RWxlbWVudCBpcyB2ZXJpZmllZCBmb3IgY2FzZXMgd2hlcmUgaXQgZG9lc24ndCB5ZXQgZXhpc3Rcblx0Ly8gKHN1Y2ggYXMgbG9hZGluZyBpZnJhbWVzIGluIElFIC0gIzQ4MzMpXG5cdHZhciBkb2N1bWVudEVsZW1lbnQgPSBlbGVtICYmIChlbGVtLm93bmVyRG9jdW1lbnQgfHwgZWxlbSkuZG9jdW1lbnRFbGVtZW50O1xuXHRyZXR1cm4gZG9jdW1lbnRFbGVtZW50ID8gZG9jdW1lbnRFbGVtZW50Lm5vZGVOYW1lICE9PSBcIkhUTUxcIiA6IGZhbHNlO1xufTtcblxuLyoqXG4gKiBTZXRzIGRvY3VtZW50LXJlbGF0ZWQgdmFyaWFibGVzIG9uY2UgYmFzZWQgb24gdGhlIGN1cnJlbnQgZG9jdW1lbnRcbiAqIEBwYXJhbSB7RWxlbWVudHxPYmplY3R9IFtkb2NdIEFuIGVsZW1lbnQgb3IgZG9jdW1lbnQgb2JqZWN0IHRvIHVzZSB0byBzZXQgdGhlIGRvY3VtZW50XG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjdXJyZW50IGRvY3VtZW50XG4gKi9cbnNldERvY3VtZW50ID0gU2l6emxlLnNldERvY3VtZW50ID0gZnVuY3Rpb24oIG5vZGUgKSB7XG5cdHZhciBoYXNDb21wYXJlLCBwYXJlbnQsXG5cdFx0ZG9jID0gbm9kZSA/IG5vZGUub3duZXJEb2N1bWVudCB8fCBub2RlIDogcHJlZmVycmVkRG9jO1xuXG5cdC8vIFJldHVybiBlYXJseSBpZiBkb2MgaXMgaW52YWxpZCBvciBhbHJlYWR5IHNlbGVjdGVkXG5cdGlmICggZG9jID09PSBkb2N1bWVudCB8fCBkb2Mubm9kZVR5cGUgIT09IDkgfHwgIWRvYy5kb2N1bWVudEVsZW1lbnQgKSB7XG5cdFx0cmV0dXJuIGRvY3VtZW50O1xuXHR9XG5cblx0Ly8gVXBkYXRlIGdsb2JhbCB2YXJpYWJsZXNcblx0ZG9jdW1lbnQgPSBkb2M7XG5cdGRvY0VsZW0gPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5cdGRvY3VtZW50SXNIVE1MID0gIWlzWE1MKCBkb2N1bWVudCApO1xuXG5cdC8vIFN1cHBvcnQ6IElFIDktMTEsIEVkZ2Vcblx0Ly8gQWNjZXNzaW5nIGlmcmFtZSBkb2N1bWVudHMgYWZ0ZXIgdW5sb2FkIHRocm93cyBcInBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3JzIChqUXVlcnkgIzEzOTM2KVxuXHRpZiAoIChwYXJlbnQgPSBkb2N1bWVudC5kZWZhdWx0VmlldykgJiYgcGFyZW50LnRvcCAhPT0gcGFyZW50ICkge1xuXHRcdC8vIFN1cHBvcnQ6IElFIDExXG5cdFx0aWYgKCBwYXJlbnQuYWRkRXZlbnRMaXN0ZW5lciApIHtcblx0XHRcdHBhcmVudC5hZGRFdmVudExpc3RlbmVyKCBcInVubG9hZFwiLCB1bmxvYWRIYW5kbGVyLCBmYWxzZSApO1xuXG5cdFx0Ly8gU3VwcG9ydDogSUUgOSAtIDEwIG9ubHlcblx0XHR9IGVsc2UgaWYgKCBwYXJlbnQuYXR0YWNoRXZlbnQgKSB7XG5cdFx0XHRwYXJlbnQuYXR0YWNoRXZlbnQoIFwib251bmxvYWRcIiwgdW5sb2FkSGFuZGxlciApO1xuXHRcdH1cblx0fVxuXG5cdC8qIEF0dHJpYnV0ZXNcblx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG5cdC8vIFN1cHBvcnQ6IElFPDhcblx0Ly8gVmVyaWZ5IHRoYXQgZ2V0QXR0cmlidXRlIHJlYWxseSByZXR1cm5zIGF0dHJpYnV0ZXMgYW5kIG5vdCBwcm9wZXJ0aWVzXG5cdC8vIChleGNlcHRpbmcgSUU4IGJvb2xlYW5zKVxuXHRzdXBwb3J0LmF0dHJpYnV0ZXMgPSBhc3NlcnQoZnVuY3Rpb24oIGRpdiApIHtcblx0XHRkaXYuY2xhc3NOYW1lID0gXCJpXCI7XG5cdFx0cmV0dXJuICFkaXYuZ2V0QXR0cmlidXRlKFwiY2xhc3NOYW1lXCIpO1xuXHR9KTtcblxuXHQvKiBnZXRFbGVtZW50KHMpQnkqXG5cdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuXHQvLyBDaGVjayBpZiBnZXRFbGVtZW50c0J5VGFnTmFtZShcIipcIikgcmV0dXJucyBvbmx5IGVsZW1lbnRzXG5cdHN1cHBvcnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgPSBhc3NlcnQoZnVuY3Rpb24oIGRpdiApIHtcblx0XHRkaXYuYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUNvbW1lbnQoXCJcIikgKTtcblx0XHRyZXR1cm4gIWRpdi5nZXRFbGVtZW50c0J5VGFnTmFtZShcIipcIikubGVuZ3RoO1xuXHR9KTtcblxuXHQvLyBTdXBwb3J0OiBJRTw5XG5cdHN1cHBvcnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSA9IHJuYXRpdmUudGVzdCggZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSApO1xuXG5cdC8vIFN1cHBvcnQ6IElFPDEwXG5cdC8vIENoZWNrIGlmIGdldEVsZW1lbnRCeUlkIHJldHVybnMgZWxlbWVudHMgYnkgbmFtZVxuXHQvLyBUaGUgYnJva2VuIGdldEVsZW1lbnRCeUlkIG1ldGhvZHMgZG9uJ3QgcGljayB1cCBwcm9ncmFtYXRpY2FsbHktc2V0IG5hbWVzLFxuXHQvLyBzbyB1c2UgYSByb3VuZGFib3V0IGdldEVsZW1lbnRzQnlOYW1lIHRlc3Rcblx0c3VwcG9ydC5nZXRCeUlkID0gYXNzZXJ0KGZ1bmN0aW9uKCBkaXYgKSB7XG5cdFx0ZG9jRWxlbS5hcHBlbmRDaGlsZCggZGl2ICkuaWQgPSBleHBhbmRvO1xuXHRcdHJldHVybiAhZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUgfHwgIWRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKCBleHBhbmRvICkubGVuZ3RoO1xuXHR9KTtcblxuXHQvLyBJRCBmaW5kIGFuZCBmaWx0ZXJcblx0aWYgKCBzdXBwb3J0LmdldEJ5SWQgKSB7XG5cdFx0RXhwci5maW5kW1wiSURcIl0gPSBmdW5jdGlvbiggaWQsIGNvbnRleHQgKSB7XG5cdFx0XHRpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRCeUlkICE9PSBcInVuZGVmaW5lZFwiICYmIGRvY3VtZW50SXNIVE1MICkge1xuXHRcdFx0XHR2YXIgbSA9IGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQoIGlkICk7XG5cdFx0XHRcdHJldHVybiBtID8gWyBtIF0gOiBbXTtcblx0XHRcdH1cblx0XHR9O1xuXHRcdEV4cHIuZmlsdGVyW1wiSURcIl0gPSBmdW5jdGlvbiggaWQgKSB7XG5cdFx0XHR2YXIgYXR0cklkID0gaWQucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKTtcblx0XHRcdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0cmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlKFwiaWRcIikgPT09IGF0dHJJZDtcblx0XHRcdH07XG5cdFx0fTtcblx0fSBlbHNlIHtcblx0XHQvLyBTdXBwb3J0OiBJRTYvN1xuXHRcdC8vIGdldEVsZW1lbnRCeUlkIGlzIG5vdCByZWxpYWJsZSBhcyBhIGZpbmQgc2hvcnRjdXRcblx0XHRkZWxldGUgRXhwci5maW5kW1wiSURcIl07XG5cblx0XHRFeHByLmZpbHRlcltcIklEXCJdID0gIGZ1bmN0aW9uKCBpZCApIHtcblx0XHRcdHZhciBhdHRySWQgPSBpZC5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApO1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHR2YXIgbm9kZSA9IHR5cGVvZiBlbGVtLmdldEF0dHJpYnV0ZU5vZGUgIT09IFwidW5kZWZpbmVkXCIgJiZcblx0XHRcdFx0XHRlbGVtLmdldEF0dHJpYnV0ZU5vZGUoXCJpZFwiKTtcblx0XHRcdFx0cmV0dXJuIG5vZGUgJiYgbm9kZS52YWx1ZSA9PT0gYXR0cklkO1xuXHRcdFx0fTtcblx0XHR9O1xuXHR9XG5cblx0Ly8gVGFnXG5cdEV4cHIuZmluZFtcIlRBR1wiXSA9IHN1cHBvcnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgP1xuXHRcdGZ1bmN0aW9uKCB0YWcsIGNvbnRleHQgKSB7XG5cdFx0XHRpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lICE9PSBcInVuZGVmaW5lZFwiICkge1xuXHRcdFx0XHRyZXR1cm4gY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSggdGFnICk7XG5cblx0XHRcdC8vIERvY3VtZW50RnJhZ21lbnQgbm9kZXMgZG9uJ3QgaGF2ZSBnRUJUTlxuXHRcdFx0fSBlbHNlIGlmICggc3VwcG9ydC5xc2EgKSB7XG5cdFx0XHRcdHJldHVybiBjb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwoIHRhZyApO1xuXHRcdFx0fVxuXHRcdH0gOlxuXG5cdFx0ZnVuY3Rpb24oIHRhZywgY29udGV4dCApIHtcblx0XHRcdHZhciBlbGVtLFxuXHRcdFx0XHR0bXAgPSBbXSxcblx0XHRcdFx0aSA9IDAsXG5cdFx0XHRcdC8vIEJ5IGhhcHB5IGNvaW5jaWRlbmNlLCBhIChicm9rZW4pIGdFQlROIGFwcGVhcnMgb24gRG9jdW1lbnRGcmFnbWVudCBub2RlcyB0b29cblx0XHRcdFx0cmVzdWx0cyA9IGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIHRhZyApO1xuXG5cdFx0XHQvLyBGaWx0ZXIgb3V0IHBvc3NpYmxlIGNvbW1lbnRzXG5cdFx0XHRpZiAoIHRhZyA9PT0gXCIqXCIgKSB7XG5cdFx0XHRcdHdoaWxlICggKGVsZW0gPSByZXN1bHRzW2krK10pICkge1xuXHRcdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRcdFx0XHRcdHRtcC5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHRtcDtcblx0XHRcdH1cblx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdH07XG5cblx0Ly8gQ2xhc3Ncblx0RXhwci5maW5kW1wiQ0xBU1NcIl0gPSBzdXBwb3J0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgJiYgZnVuY3Rpb24oIGNsYXNzTmFtZSwgY29udGV4dCApIHtcblx0XHRpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgIT09IFwidW5kZWZpbmVkXCIgJiYgZG9jdW1lbnRJc0hUTUwgKSB7XG5cdFx0XHRyZXR1cm4gY29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCBjbGFzc05hbWUgKTtcblx0XHR9XG5cdH07XG5cblx0LyogUVNBL21hdGNoZXNTZWxlY3RvclxuXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cblx0Ly8gUVNBIGFuZCBtYXRjaGVzU2VsZWN0b3Igc3VwcG9ydFxuXG5cdC8vIG1hdGNoZXNTZWxlY3Rvcig6YWN0aXZlKSByZXBvcnRzIGZhbHNlIHdoZW4gdHJ1ZSAoSUU5L09wZXJhIDExLjUpXG5cdHJidWdneU1hdGNoZXMgPSBbXTtcblxuXHQvLyBxU2EoOmZvY3VzKSByZXBvcnRzIGZhbHNlIHdoZW4gdHJ1ZSAoQ2hyb21lIDIxKVxuXHQvLyBXZSBhbGxvdyB0aGlzIGJlY2F1c2Ugb2YgYSBidWcgaW4gSUU4LzkgdGhhdCB0aHJvd3MgYW4gZXJyb3Jcblx0Ly8gd2hlbmV2ZXIgYGRvY3VtZW50LmFjdGl2ZUVsZW1lbnRgIGlzIGFjY2Vzc2VkIG9uIGFuIGlmcmFtZVxuXHQvLyBTbywgd2UgYWxsb3cgOmZvY3VzIHRvIHBhc3MgdGhyb3VnaCBRU0EgYWxsIHRoZSB0aW1lIHRvIGF2b2lkIHRoZSBJRSBlcnJvclxuXHQvLyBTZWUgaHR0cDovL2J1Z3MuanF1ZXJ5LmNvbS90aWNrZXQvMTMzNzhcblx0cmJ1Z2d5UVNBID0gW107XG5cblx0aWYgKCAoc3VwcG9ydC5xc2EgPSBybmF0aXZlLnRlc3QoIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwgKSkgKSB7XG5cdFx0Ly8gQnVpbGQgUVNBIHJlZ2V4XG5cdFx0Ly8gUmVnZXggc3RyYXRlZ3kgYWRvcHRlZCBmcm9tIERpZWdvIFBlcmluaVxuXHRcdGFzc2VydChmdW5jdGlvbiggZGl2ICkge1xuXHRcdFx0Ly8gU2VsZWN0IGlzIHNldCB0byBlbXB0eSBzdHJpbmcgb24gcHVycG9zZVxuXHRcdFx0Ly8gVGhpcyBpcyB0byB0ZXN0IElFJ3MgdHJlYXRtZW50IG9mIG5vdCBleHBsaWNpdGx5XG5cdFx0XHQvLyBzZXR0aW5nIGEgYm9vbGVhbiBjb250ZW50IGF0dHJpYnV0ZSxcblx0XHRcdC8vIHNpbmNlIGl0cyBwcmVzZW5jZSBzaG91bGQgYmUgZW5vdWdoXG5cdFx0XHQvLyBodHRwOi8vYnVncy5qcXVlcnkuY29tL3RpY2tldC8xMjM1OVxuXHRcdFx0ZG9jRWxlbS5hcHBlbmRDaGlsZCggZGl2ICkuaW5uZXJIVE1MID0gXCI8YSBpZD0nXCIgKyBleHBhbmRvICsgXCInPjwvYT5cIiArXG5cdFx0XHRcdFwiPHNlbGVjdCBpZD0nXCIgKyBleHBhbmRvICsgXCItXFxyXFxcXCcgbXNhbGxvd2NhcHR1cmU9Jyc+XCIgK1xuXHRcdFx0XHRcIjxvcHRpb24gc2VsZWN0ZWQ9Jyc+PC9vcHRpb24+PC9zZWxlY3Q+XCI7XG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFOCwgT3BlcmEgMTEtMTIuMTZcblx0XHRcdC8vIE5vdGhpbmcgc2hvdWxkIGJlIHNlbGVjdGVkIHdoZW4gZW1wdHkgc3RyaW5ncyBmb2xsb3cgXj0gb3IgJD0gb3IgKj1cblx0XHRcdC8vIFRoZSB0ZXN0IGF0dHJpYnV0ZSBtdXN0IGJlIHVua25vd24gaW4gT3BlcmEgYnV0IFwic2FmZVwiIGZvciBXaW5SVFxuXHRcdFx0Ly8gaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L2llL2hoNDY1Mzg4LmFzcHgjYXR0cmlidXRlX3NlY3Rpb25cblx0XHRcdGlmICggZGl2LnF1ZXJ5U2VsZWN0b3JBbGwoXCJbbXNhbGxvd2NhcHR1cmVePScnXVwiKS5sZW5ndGggKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKCBcIlsqXiRdPVwiICsgd2hpdGVzcGFjZSArIFwiKig/OicnfFxcXCJcXFwiKVwiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFOFxuXHRcdFx0Ly8gQm9vbGVhbiBhdHRyaWJ1dGVzIGFuZCBcInZhbHVlXCIgYXJlIG5vdCB0cmVhdGVkIGNvcnJlY3RseVxuXHRcdFx0aWYgKCAhZGl2LnF1ZXJ5U2VsZWN0b3JBbGwoXCJbc2VsZWN0ZWRdXCIpLmxlbmd0aCApIHtcblx0XHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwiXFxcXFtcIiArIHdoaXRlc3BhY2UgKyBcIiooPzp2YWx1ZXxcIiArIGJvb2xlYW5zICsgXCIpXCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3VwcG9ydDogQ2hyb21lPDI5LCBBbmRyb2lkPDQuNCwgU2FmYXJpPDcuMCssIGlPUzw3LjArLCBQaGFudG9tSlM8MS45LjgrXG5cdFx0XHRpZiAoICFkaXYucXVlcnlTZWxlY3RvckFsbCggXCJbaWR+PVwiICsgZXhwYW5kbyArIFwiLV1cIiApLmxlbmd0aCApIHtcblx0XHRcdFx0cmJ1Z2d5UVNBLnB1c2goXCJ+PVwiKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gV2Via2l0L09wZXJhIC0gOmNoZWNrZWQgc2hvdWxkIHJldHVybiBzZWxlY3RlZCBvcHRpb24gZWxlbWVudHNcblx0XHRcdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTEvUkVDLWNzczMtc2VsZWN0b3JzLTIwMTEwOTI5LyNjaGVja2VkXG5cdFx0XHQvLyBJRTggdGhyb3dzIGVycm9yIGhlcmUgYW5kIHdpbGwgbm90IHNlZSBsYXRlciB0ZXN0c1xuXHRcdFx0aWYgKCAhZGl2LnF1ZXJ5U2VsZWN0b3JBbGwoXCI6Y2hlY2tlZFwiKS5sZW5ndGggKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKFwiOmNoZWNrZWRcIik7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN1cHBvcnQ6IFNhZmFyaSA4KywgaU9TIDgrXG5cdFx0XHQvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM2ODUxXG5cdFx0XHQvLyBJbi1wYWdlIGBzZWxlY3RvciNpZCBzaWJpbmctY29tYmluYXRvciBzZWxlY3RvcmAgZmFpbHNcblx0XHRcdGlmICggIWRpdi5xdWVyeVNlbGVjdG9yQWxsKCBcImEjXCIgKyBleHBhbmRvICsgXCIrKlwiICkubGVuZ3RoICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaChcIi4jLitbK35dXCIpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0YXNzZXJ0KGZ1bmN0aW9uKCBkaXYgKSB7XG5cdFx0XHQvLyBTdXBwb3J0OiBXaW5kb3dzIDggTmF0aXZlIEFwcHNcblx0XHRcdC8vIFRoZSB0eXBlIGFuZCBuYW1lIGF0dHJpYnV0ZXMgYXJlIHJlc3RyaWN0ZWQgZHVyaW5nIC5pbm5lckhUTUwgYXNzaWdubWVudFxuXHRcdFx0dmFyIGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xuXHRcdFx0aW5wdXQuc2V0QXR0cmlidXRlKCBcInR5cGVcIiwgXCJoaWRkZW5cIiApO1xuXHRcdFx0ZGl2LmFwcGVuZENoaWxkKCBpbnB1dCApLnNldEF0dHJpYnV0ZSggXCJuYW1lXCIsIFwiRFwiICk7XG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFOFxuXHRcdFx0Ly8gRW5mb3JjZSBjYXNlLXNlbnNpdGl2aXR5IG9mIG5hbWUgYXR0cmlidXRlXG5cdFx0XHRpZiAoIGRpdi5xdWVyeVNlbGVjdG9yQWxsKFwiW25hbWU9ZF1cIikubGVuZ3RoICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaCggXCJuYW1lXCIgKyB3aGl0ZXNwYWNlICsgXCIqWypeJHwhfl0/PVwiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEZGIDMuNSAtIDplbmFibGVkLzpkaXNhYmxlZCBhbmQgaGlkZGVuIGVsZW1lbnRzIChoaWRkZW4gZWxlbWVudHMgYXJlIHN0aWxsIGVuYWJsZWQpXG5cdFx0XHQvLyBJRTggdGhyb3dzIGVycm9yIGhlcmUgYW5kIHdpbGwgbm90IHNlZSBsYXRlciB0ZXN0c1xuXHRcdFx0aWYgKCAhZGl2LnF1ZXJ5U2VsZWN0b3JBbGwoXCI6ZW5hYmxlZFwiKS5sZW5ndGggKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKCBcIjplbmFibGVkXCIsIFwiOmRpc2FibGVkXCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gT3BlcmEgMTAtMTEgZG9lcyBub3QgdGhyb3cgb24gcG9zdC1jb21tYSBpbnZhbGlkIHBzZXVkb3Ncblx0XHRcdGRpdi5xdWVyeVNlbGVjdG9yQWxsKFwiKiw6eFwiKTtcblx0XHRcdHJidWdneVFTQS5wdXNoKFwiLC4qOlwiKTtcblx0XHR9KTtcblx0fVxuXG5cdGlmICggKHN1cHBvcnQubWF0Y2hlc1NlbGVjdG9yID0gcm5hdGl2ZS50ZXN0KCAobWF0Y2hlcyA9IGRvY0VsZW0ubWF0Y2hlcyB8fFxuXHRcdGRvY0VsZW0ud2Via2l0TWF0Y2hlc1NlbGVjdG9yIHx8XG5cdFx0ZG9jRWxlbS5tb3pNYXRjaGVzU2VsZWN0b3IgfHxcblx0XHRkb2NFbGVtLm9NYXRjaGVzU2VsZWN0b3IgfHxcblx0XHRkb2NFbGVtLm1zTWF0Y2hlc1NlbGVjdG9yKSApKSApIHtcblxuXHRcdGFzc2VydChmdW5jdGlvbiggZGl2ICkge1xuXHRcdFx0Ly8gQ2hlY2sgdG8gc2VlIGlmIGl0J3MgcG9zc2libGUgdG8gZG8gbWF0Y2hlc1NlbGVjdG9yXG5cdFx0XHQvLyBvbiBhIGRpc2Nvbm5lY3RlZCBub2RlIChJRSA5KVxuXHRcdFx0c3VwcG9ydC5kaXNjb25uZWN0ZWRNYXRjaCA9IG1hdGNoZXMuY2FsbCggZGl2LCBcImRpdlwiICk7XG5cblx0XHRcdC8vIFRoaXMgc2hvdWxkIGZhaWwgd2l0aCBhbiBleGNlcHRpb25cblx0XHRcdC8vIEdlY2tvIGRvZXMgbm90IGVycm9yLCByZXR1cm5zIGZhbHNlIGluc3RlYWRcblx0XHRcdG1hdGNoZXMuY2FsbCggZGl2LCBcIltzIT0nJ106eFwiICk7XG5cdFx0XHRyYnVnZ3lNYXRjaGVzLnB1c2goIFwiIT1cIiwgcHNldWRvcyApO1xuXHRcdH0pO1xuXHR9XG5cblx0cmJ1Z2d5UVNBID0gcmJ1Z2d5UVNBLmxlbmd0aCAmJiBuZXcgUmVnRXhwKCByYnVnZ3lRU0Euam9pbihcInxcIikgKTtcblx0cmJ1Z2d5TWF0Y2hlcyA9IHJidWdneU1hdGNoZXMubGVuZ3RoICYmIG5ldyBSZWdFeHAoIHJidWdneU1hdGNoZXMuam9pbihcInxcIikgKTtcblxuXHQvKiBDb250YWluc1xuXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cdGhhc0NvbXBhcmUgPSBybmF0aXZlLnRlc3QoIGRvY0VsZW0uY29tcGFyZURvY3VtZW50UG9zaXRpb24gKTtcblxuXHQvLyBFbGVtZW50IGNvbnRhaW5zIGFub3RoZXJcblx0Ly8gUHVycG9zZWZ1bGx5IHNlbGYtZXhjbHVzaXZlXG5cdC8vIEFzIGluLCBhbiBlbGVtZW50IGRvZXMgbm90IGNvbnRhaW4gaXRzZWxmXG5cdGNvbnRhaW5zID0gaGFzQ29tcGFyZSB8fCBybmF0aXZlLnRlc3QoIGRvY0VsZW0uY29udGFpbnMgKSA/XG5cdFx0ZnVuY3Rpb24oIGEsIGIgKSB7XG5cdFx0XHR2YXIgYWRvd24gPSBhLm5vZGVUeXBlID09PSA5ID8gYS5kb2N1bWVudEVsZW1lbnQgOiBhLFxuXHRcdFx0XHRidXAgPSBiICYmIGIucGFyZW50Tm9kZTtcblx0XHRcdHJldHVybiBhID09PSBidXAgfHwgISEoIGJ1cCAmJiBidXAubm9kZVR5cGUgPT09IDEgJiYgKFxuXHRcdFx0XHRhZG93bi5jb250YWlucyA/XG5cdFx0XHRcdFx0YWRvd24uY29udGFpbnMoIGJ1cCApIDpcblx0XHRcdFx0XHRhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uICYmIGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oIGJ1cCApICYgMTZcblx0XHRcdCkpO1xuXHRcdH0gOlxuXHRcdGZ1bmN0aW9uKCBhLCBiICkge1xuXHRcdFx0aWYgKCBiICkge1xuXHRcdFx0XHR3aGlsZSAoIChiID0gYi5wYXJlbnROb2RlKSApIHtcblx0XHRcdFx0XHRpZiAoIGIgPT09IGEgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9O1xuXG5cdC8qIFNvcnRpbmdcblx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG5cdC8vIERvY3VtZW50IG9yZGVyIHNvcnRpbmdcblx0c29ydE9yZGVyID0gaGFzQ29tcGFyZSA/XG5cdGZ1bmN0aW9uKCBhLCBiICkge1xuXG5cdFx0Ly8gRmxhZyBmb3IgZHVwbGljYXRlIHJlbW92YWxcblx0XHRpZiAoIGEgPT09IGIgKSB7XG5cdFx0XHRoYXNEdXBsaWNhdGUgPSB0cnVlO1xuXHRcdFx0cmV0dXJuIDA7XG5cdFx0fVxuXG5cdFx0Ly8gU29ydCBvbiBtZXRob2QgZXhpc3RlbmNlIGlmIG9ubHkgb25lIGlucHV0IGhhcyBjb21wYXJlRG9jdW1lbnRQb3NpdGlvblxuXHRcdHZhciBjb21wYXJlID0gIWEuY29tcGFyZURvY3VtZW50UG9zaXRpb24gLSAhYi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbjtcblx0XHRpZiAoIGNvbXBhcmUgKSB7XG5cdFx0XHRyZXR1cm4gY29tcGFyZTtcblx0XHR9XG5cblx0XHQvLyBDYWxjdWxhdGUgcG9zaXRpb24gaWYgYm90aCBpbnB1dHMgYmVsb25nIHRvIHRoZSBzYW1lIGRvY3VtZW50XG5cdFx0Y29tcGFyZSA9ICggYS5vd25lckRvY3VtZW50IHx8IGEgKSA9PT0gKCBiLm93bmVyRG9jdW1lbnQgfHwgYiApID9cblx0XHRcdGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oIGIgKSA6XG5cblx0XHRcdC8vIE90aGVyd2lzZSB3ZSBrbm93IHRoZXkgYXJlIGRpc2Nvbm5lY3RlZFxuXHRcdFx0MTtcblxuXHRcdC8vIERpc2Nvbm5lY3RlZCBub2Rlc1xuXHRcdGlmICggY29tcGFyZSAmIDEgfHxcblx0XHRcdCghc3VwcG9ydC5zb3J0RGV0YWNoZWQgJiYgYi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiggYSApID09PSBjb21wYXJlKSApIHtcblxuXHRcdFx0Ly8gQ2hvb3NlIHRoZSBmaXJzdCBlbGVtZW50IHRoYXQgaXMgcmVsYXRlZCB0byBvdXIgcHJlZmVycmVkIGRvY3VtZW50XG5cdFx0XHRpZiAoIGEgPT09IGRvY3VtZW50IHx8IGEub3duZXJEb2N1bWVudCA9PT0gcHJlZmVycmVkRG9jICYmIGNvbnRhaW5zKHByZWZlcnJlZERvYywgYSkgKSB7XG5cdFx0XHRcdHJldHVybiAtMTtcblx0XHRcdH1cblx0XHRcdGlmICggYiA9PT0gZG9jdW1lbnQgfHwgYi5vd25lckRvY3VtZW50ID09PSBwcmVmZXJyZWREb2MgJiYgY29udGFpbnMocHJlZmVycmVkRG9jLCBiKSApIHtcblx0XHRcdFx0cmV0dXJuIDE7XG5cdFx0XHR9XG5cblx0XHRcdC8vIE1haW50YWluIG9yaWdpbmFsIG9yZGVyXG5cdFx0XHRyZXR1cm4gc29ydElucHV0ID9cblx0XHRcdFx0KCBpbmRleE9mKCBzb3J0SW5wdXQsIGEgKSAtIGluZGV4T2YoIHNvcnRJbnB1dCwgYiApICkgOlxuXHRcdFx0XHQwO1xuXHRcdH1cblxuXHRcdHJldHVybiBjb21wYXJlICYgNCA/IC0xIDogMTtcblx0fSA6XG5cdGZ1bmN0aW9uKCBhLCBiICkge1xuXHRcdC8vIEV4aXQgZWFybHkgaWYgdGhlIG5vZGVzIGFyZSBpZGVudGljYWxcblx0XHRpZiAoIGEgPT09IGIgKSB7XG5cdFx0XHRoYXNEdXBsaWNhdGUgPSB0cnVlO1xuXHRcdFx0cmV0dXJuIDA7XG5cdFx0fVxuXG5cdFx0dmFyIGN1cixcblx0XHRcdGkgPSAwLFxuXHRcdFx0YXVwID0gYS5wYXJlbnROb2RlLFxuXHRcdFx0YnVwID0gYi5wYXJlbnROb2RlLFxuXHRcdFx0YXAgPSBbIGEgXSxcblx0XHRcdGJwID0gWyBiIF07XG5cblx0XHQvLyBQYXJlbnRsZXNzIG5vZGVzIGFyZSBlaXRoZXIgZG9jdW1lbnRzIG9yIGRpc2Nvbm5lY3RlZFxuXHRcdGlmICggIWF1cCB8fCAhYnVwICkge1xuXHRcdFx0cmV0dXJuIGEgPT09IGRvY3VtZW50ID8gLTEgOlxuXHRcdFx0XHRiID09PSBkb2N1bWVudCA/IDEgOlxuXHRcdFx0XHRhdXAgPyAtMSA6XG5cdFx0XHRcdGJ1cCA/IDEgOlxuXHRcdFx0XHRzb3J0SW5wdXQgP1xuXHRcdFx0XHQoIGluZGV4T2YoIHNvcnRJbnB1dCwgYSApIC0gaW5kZXhPZiggc29ydElucHV0LCBiICkgKSA6XG5cdFx0XHRcdDA7XG5cblx0XHQvLyBJZiB0aGUgbm9kZXMgYXJlIHNpYmxpbmdzLCB3ZSBjYW4gZG8gYSBxdWljayBjaGVja1xuXHRcdH0gZWxzZSBpZiAoIGF1cCA9PT0gYnVwICkge1xuXHRcdFx0cmV0dXJuIHNpYmxpbmdDaGVjayggYSwgYiApO1xuXHRcdH1cblxuXHRcdC8vIE90aGVyd2lzZSB3ZSBuZWVkIGZ1bGwgbGlzdHMgb2YgdGhlaXIgYW5jZXN0b3JzIGZvciBjb21wYXJpc29uXG5cdFx0Y3VyID0gYTtcblx0XHR3aGlsZSAoIChjdXIgPSBjdXIucGFyZW50Tm9kZSkgKSB7XG5cdFx0XHRhcC51bnNoaWZ0KCBjdXIgKTtcblx0XHR9XG5cdFx0Y3VyID0gYjtcblx0XHR3aGlsZSAoIChjdXIgPSBjdXIucGFyZW50Tm9kZSkgKSB7XG5cdFx0XHRicC51bnNoaWZ0KCBjdXIgKTtcblx0XHR9XG5cblx0XHQvLyBXYWxrIGRvd24gdGhlIHRyZWUgbG9va2luZyBmb3IgYSBkaXNjcmVwYW5jeVxuXHRcdHdoaWxlICggYXBbaV0gPT09IGJwW2ldICkge1xuXHRcdFx0aSsrO1xuXHRcdH1cblxuXHRcdHJldHVybiBpID9cblx0XHRcdC8vIERvIGEgc2libGluZyBjaGVjayBpZiB0aGUgbm9kZXMgaGF2ZSBhIGNvbW1vbiBhbmNlc3RvclxuXHRcdFx0c2libGluZ0NoZWNrKCBhcFtpXSwgYnBbaV0gKSA6XG5cblx0XHRcdC8vIE90aGVyd2lzZSBub2RlcyBpbiBvdXIgZG9jdW1lbnQgc29ydCBmaXJzdFxuXHRcdFx0YXBbaV0gPT09IHByZWZlcnJlZERvYyA/IC0xIDpcblx0XHRcdGJwW2ldID09PSBwcmVmZXJyZWREb2MgPyAxIDpcblx0XHRcdDA7XG5cdH07XG5cblx0cmV0dXJuIGRvY3VtZW50O1xufTtcblxuU2l6emxlLm1hdGNoZXMgPSBmdW5jdGlvbiggZXhwciwgZWxlbWVudHMgKSB7XG5cdHJldHVybiBTaXp6bGUoIGV4cHIsIG51bGwsIG51bGwsIGVsZW1lbnRzICk7XG59O1xuXG5TaXp6bGUubWF0Y2hlc1NlbGVjdG9yID0gZnVuY3Rpb24oIGVsZW0sIGV4cHIgKSB7XG5cdC8vIFNldCBkb2N1bWVudCB2YXJzIGlmIG5lZWRlZFxuXHRpZiAoICggZWxlbS5vd25lckRvY3VtZW50IHx8IGVsZW0gKSAhPT0gZG9jdW1lbnQgKSB7XG5cdFx0c2V0RG9jdW1lbnQoIGVsZW0gKTtcblx0fVxuXG5cdC8vIE1ha2Ugc3VyZSB0aGF0IGF0dHJpYnV0ZSBzZWxlY3RvcnMgYXJlIHF1b3RlZFxuXHRleHByID0gZXhwci5yZXBsYWNlKCByYXR0cmlidXRlUXVvdGVzLCBcIj0nJDEnXVwiICk7XG5cblx0aWYgKCBzdXBwb3J0Lm1hdGNoZXNTZWxlY3RvciAmJiBkb2N1bWVudElzSFRNTCAmJlxuXHRcdCFjb21waWxlckNhY2hlWyBleHByICsgXCIgXCIgXSAmJlxuXHRcdCggIXJidWdneU1hdGNoZXMgfHwgIXJidWdneU1hdGNoZXMudGVzdCggZXhwciApICkgJiZcblx0XHQoICFyYnVnZ3lRU0EgICAgIHx8ICFyYnVnZ3lRU0EudGVzdCggZXhwciApICkgKSB7XG5cblx0XHR0cnkge1xuXHRcdFx0dmFyIHJldCA9IG1hdGNoZXMuY2FsbCggZWxlbSwgZXhwciApO1xuXG5cdFx0XHQvLyBJRSA5J3MgbWF0Y2hlc1NlbGVjdG9yIHJldHVybnMgZmFsc2Ugb24gZGlzY29ubmVjdGVkIG5vZGVzXG5cdFx0XHRpZiAoIHJldCB8fCBzdXBwb3J0LmRpc2Nvbm5lY3RlZE1hdGNoIHx8XG5cdFx0XHRcdFx0Ly8gQXMgd2VsbCwgZGlzY29ubmVjdGVkIG5vZGVzIGFyZSBzYWlkIHRvIGJlIGluIGEgZG9jdW1lbnRcblx0XHRcdFx0XHQvLyBmcmFnbWVudCBpbiBJRSA5XG5cdFx0XHRcdFx0ZWxlbS5kb2N1bWVudCAmJiBlbGVtLmRvY3VtZW50Lm5vZGVUeXBlICE9PSAxMSApIHtcblx0XHRcdFx0cmV0dXJuIHJldDtcblx0XHRcdH1cblx0XHR9IGNhdGNoIChlKSB7fVxuXHR9XG5cblx0cmV0dXJuIFNpenpsZSggZXhwciwgZG9jdW1lbnQsIG51bGwsIFsgZWxlbSBdICkubGVuZ3RoID4gMDtcbn07XG5cblNpenpsZS5jb250YWlucyA9IGZ1bmN0aW9uKCBjb250ZXh0LCBlbGVtICkge1xuXHQvLyBTZXQgZG9jdW1lbnQgdmFycyBpZiBuZWVkZWRcblx0aWYgKCAoIGNvbnRleHQub3duZXJEb2N1bWVudCB8fCBjb250ZXh0ICkgIT09IGRvY3VtZW50ICkge1xuXHRcdHNldERvY3VtZW50KCBjb250ZXh0ICk7XG5cdH1cblx0cmV0dXJuIGNvbnRhaW5zKCBjb250ZXh0LCBlbGVtICk7XG59O1xuXG5TaXp6bGUuYXR0ciA9IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkge1xuXHQvLyBTZXQgZG9jdW1lbnQgdmFycyBpZiBuZWVkZWRcblx0aWYgKCAoIGVsZW0ub3duZXJEb2N1bWVudCB8fCBlbGVtICkgIT09IGRvY3VtZW50ICkge1xuXHRcdHNldERvY3VtZW50KCBlbGVtICk7XG5cdH1cblxuXHR2YXIgZm4gPSBFeHByLmF0dHJIYW5kbGVbIG5hbWUudG9Mb3dlckNhc2UoKSBdLFxuXHRcdC8vIERvbid0IGdldCBmb29sZWQgYnkgT2JqZWN0LnByb3RvdHlwZSBwcm9wZXJ0aWVzIChqUXVlcnkgIzEzODA3KVxuXHRcdHZhbCA9IGZuICYmIGhhc093bi5jYWxsKCBFeHByLmF0dHJIYW5kbGUsIG5hbWUudG9Mb3dlckNhc2UoKSApID9cblx0XHRcdGZuKCBlbGVtLCBuYW1lLCAhZG9jdW1lbnRJc0hUTUwgKSA6XG5cdFx0XHR1bmRlZmluZWQ7XG5cblx0cmV0dXJuIHZhbCAhPT0gdW5kZWZpbmVkID9cblx0XHR2YWwgOlxuXHRcdHN1cHBvcnQuYXR0cmlidXRlcyB8fCAhZG9jdW1lbnRJc0hUTUwgP1xuXHRcdFx0ZWxlbS5nZXRBdHRyaWJ1dGUoIG5hbWUgKSA6XG5cdFx0XHQodmFsID0gZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKG5hbWUpKSAmJiB2YWwuc3BlY2lmaWVkID9cblx0XHRcdFx0dmFsLnZhbHVlIDpcblx0XHRcdFx0bnVsbDtcbn07XG5cblNpenpsZS5lcnJvciA9IGZ1bmN0aW9uKCBtc2cgKSB7XG5cdHRocm93IG5ldyBFcnJvciggXCJTeW50YXggZXJyb3IsIHVucmVjb2duaXplZCBleHByZXNzaW9uOiBcIiArIG1zZyApO1xufTtcblxuLyoqXG4gKiBEb2N1bWVudCBzb3J0aW5nIGFuZCByZW1vdmluZyBkdXBsaWNhdGVzXG4gKiBAcGFyYW0ge0FycmF5TGlrZX0gcmVzdWx0c1xuICovXG5TaXp6bGUudW5pcXVlU29ydCA9IGZ1bmN0aW9uKCByZXN1bHRzICkge1xuXHR2YXIgZWxlbSxcblx0XHRkdXBsaWNhdGVzID0gW10sXG5cdFx0aiA9IDAsXG5cdFx0aSA9IDA7XG5cblx0Ly8gVW5sZXNzIHdlICprbm93KiB3ZSBjYW4gZGV0ZWN0IGR1cGxpY2F0ZXMsIGFzc3VtZSB0aGVpciBwcmVzZW5jZVxuXHRoYXNEdXBsaWNhdGUgPSAhc3VwcG9ydC5kZXRlY3REdXBsaWNhdGVzO1xuXHRzb3J0SW5wdXQgPSAhc3VwcG9ydC5zb3J0U3RhYmxlICYmIHJlc3VsdHMuc2xpY2UoIDAgKTtcblx0cmVzdWx0cy5zb3J0KCBzb3J0T3JkZXIgKTtcblxuXHRpZiAoIGhhc0R1cGxpY2F0ZSApIHtcblx0XHR3aGlsZSAoIChlbGVtID0gcmVzdWx0c1tpKytdKSApIHtcblx0XHRcdGlmICggZWxlbSA9PT0gcmVzdWx0c1sgaSBdICkge1xuXHRcdFx0XHRqID0gZHVwbGljYXRlcy5wdXNoKCBpICk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHdoaWxlICggai0tICkge1xuXHRcdFx0cmVzdWx0cy5zcGxpY2UoIGR1cGxpY2F0ZXNbIGogXSwgMSApO1xuXHRcdH1cblx0fVxuXG5cdC8vIENsZWFyIGlucHV0IGFmdGVyIHNvcnRpbmcgdG8gcmVsZWFzZSBvYmplY3RzXG5cdC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vanF1ZXJ5L3NpenpsZS9wdWxsLzIyNVxuXHRzb3J0SW5wdXQgPSBudWxsO1xuXG5cdHJldHVybiByZXN1bHRzO1xufTtcblxuLyoqXG4gKiBVdGlsaXR5IGZ1bmN0aW9uIGZvciByZXRyaWV2aW5nIHRoZSB0ZXh0IHZhbHVlIG9mIGFuIGFycmF5IG9mIERPTSBub2Rlc1xuICogQHBhcmFtIHtBcnJheXxFbGVtZW50fSBlbGVtXG4gKi9cbmdldFRleHQgPSBTaXp6bGUuZ2V0VGV4dCA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXHR2YXIgbm9kZSxcblx0XHRyZXQgPSBcIlwiLFxuXHRcdGkgPSAwLFxuXHRcdG5vZGVUeXBlID0gZWxlbS5ub2RlVHlwZTtcblxuXHRpZiAoICFub2RlVHlwZSApIHtcblx0XHQvLyBJZiBubyBub2RlVHlwZSwgdGhpcyBpcyBleHBlY3RlZCB0byBiZSBhbiBhcnJheVxuXHRcdHdoaWxlICggKG5vZGUgPSBlbGVtW2krK10pICkge1xuXHRcdFx0Ly8gRG8gbm90IHRyYXZlcnNlIGNvbW1lbnQgbm9kZXNcblx0XHRcdHJldCArPSBnZXRUZXh0KCBub2RlICk7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKCBub2RlVHlwZSA9PT0gMSB8fCBub2RlVHlwZSA9PT0gOSB8fCBub2RlVHlwZSA9PT0gMTEgKSB7XG5cdFx0Ly8gVXNlIHRleHRDb250ZW50IGZvciBlbGVtZW50c1xuXHRcdC8vIGlubmVyVGV4dCB1c2FnZSByZW1vdmVkIGZvciBjb25zaXN0ZW5jeSBvZiBuZXcgbGluZXMgKGpRdWVyeSAjMTExNTMpXG5cdFx0aWYgKCB0eXBlb2YgZWxlbS50ZXh0Q29udGVudCA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdHJldHVybiBlbGVtLnRleHRDb250ZW50O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBUcmF2ZXJzZSBpdHMgY2hpbGRyZW5cblx0XHRcdGZvciAoIGVsZW0gPSBlbGVtLmZpcnN0Q2hpbGQ7IGVsZW07IGVsZW0gPSBlbGVtLm5leHRTaWJsaW5nICkge1xuXHRcdFx0XHRyZXQgKz0gZ2V0VGV4dCggZWxlbSApO1xuXHRcdFx0fVxuXHRcdH1cblx0fSBlbHNlIGlmICggbm9kZVR5cGUgPT09IDMgfHwgbm9kZVR5cGUgPT09IDQgKSB7XG5cdFx0cmV0dXJuIGVsZW0ubm9kZVZhbHVlO1xuXHR9XG5cdC8vIERvIG5vdCBpbmNsdWRlIGNvbW1lbnQgb3IgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbiBub2Rlc1xuXG5cdHJldHVybiByZXQ7XG59O1xuXG5FeHByID0gU2l6emxlLnNlbGVjdG9ycyA9IHtcblxuXHQvLyBDYW4gYmUgYWRqdXN0ZWQgYnkgdGhlIHVzZXJcblx0Y2FjaGVMZW5ndGg6IDUwLFxuXG5cdGNyZWF0ZVBzZXVkbzogbWFya0Z1bmN0aW9uLFxuXG5cdG1hdGNoOiBtYXRjaEV4cHIsXG5cblx0YXR0ckhhbmRsZToge30sXG5cblx0ZmluZDoge30sXG5cblx0cmVsYXRpdmU6IHtcblx0XHRcIj5cIjogeyBkaXI6IFwicGFyZW50Tm9kZVwiLCBmaXJzdDogdHJ1ZSB9LFxuXHRcdFwiIFwiOiB7IGRpcjogXCJwYXJlbnROb2RlXCIgfSxcblx0XHRcIitcIjogeyBkaXI6IFwicHJldmlvdXNTaWJsaW5nXCIsIGZpcnN0OiB0cnVlIH0sXG5cdFx0XCJ+XCI6IHsgZGlyOiBcInByZXZpb3VzU2libGluZ1wiIH1cblx0fSxcblxuXHRwcmVGaWx0ZXI6IHtcblx0XHRcIkFUVFJcIjogZnVuY3Rpb24oIG1hdGNoICkge1xuXHRcdFx0bWF0Y2hbMV0gPSBtYXRjaFsxXS5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApO1xuXG5cdFx0XHQvLyBNb3ZlIHRoZSBnaXZlbiB2YWx1ZSB0byBtYXRjaFszXSB3aGV0aGVyIHF1b3RlZCBvciB1bnF1b3RlZFxuXHRcdFx0bWF0Y2hbM10gPSAoIG1hdGNoWzNdIHx8IG1hdGNoWzRdIHx8IG1hdGNoWzVdIHx8IFwiXCIgKS5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApO1xuXG5cdFx0XHRpZiAoIG1hdGNoWzJdID09PSBcIn49XCIgKSB7XG5cdFx0XHRcdG1hdGNoWzNdID0gXCIgXCIgKyBtYXRjaFszXSArIFwiIFwiO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gbWF0Y2guc2xpY2UoIDAsIDQgKTtcblx0XHR9LFxuXG5cdFx0XCJDSElMRFwiOiBmdW5jdGlvbiggbWF0Y2ggKSB7XG5cdFx0XHQvKiBtYXRjaGVzIGZyb20gbWF0Y2hFeHByW1wiQ0hJTERcIl1cblx0XHRcdFx0MSB0eXBlIChvbmx5fG50aHwuLi4pXG5cdFx0XHRcdDIgd2hhdCAoY2hpbGR8b2YtdHlwZSlcblx0XHRcdFx0MyBhcmd1bWVudCAoZXZlbnxvZGR8XFxkKnxcXGQqbihbKy1dXFxkKyk/fC4uLilcblx0XHRcdFx0NCB4bi1jb21wb25lbnQgb2YgeG4reSBhcmd1bWVudCAoWystXT9cXGQqbnwpXG5cdFx0XHRcdDUgc2lnbiBvZiB4bi1jb21wb25lbnRcblx0XHRcdFx0NiB4IG9mIHhuLWNvbXBvbmVudFxuXHRcdFx0XHQ3IHNpZ24gb2YgeS1jb21wb25lbnRcblx0XHRcdFx0OCB5IG9mIHktY29tcG9uZW50XG5cdFx0XHQqL1xuXHRcdFx0bWF0Y2hbMV0gPSBtYXRjaFsxXS50b0xvd2VyQ2FzZSgpO1xuXG5cdFx0XHRpZiAoIG1hdGNoWzFdLnNsaWNlKCAwLCAzICkgPT09IFwibnRoXCIgKSB7XG5cdFx0XHRcdC8vIG50aC0qIHJlcXVpcmVzIGFyZ3VtZW50XG5cdFx0XHRcdGlmICggIW1hdGNoWzNdICkge1xuXHRcdFx0XHRcdFNpenpsZS5lcnJvciggbWF0Y2hbMF0gKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIG51bWVyaWMgeCBhbmQgeSBwYXJhbWV0ZXJzIGZvciBFeHByLmZpbHRlci5DSElMRFxuXHRcdFx0XHQvLyByZW1lbWJlciB0aGF0IGZhbHNlL3RydWUgY2FzdCByZXNwZWN0aXZlbHkgdG8gMC8xXG5cdFx0XHRcdG1hdGNoWzRdID0gKyggbWF0Y2hbNF0gPyBtYXRjaFs1XSArIChtYXRjaFs2XSB8fCAxKSA6IDIgKiAoIG1hdGNoWzNdID09PSBcImV2ZW5cIiB8fCBtYXRjaFszXSA9PT0gXCJvZGRcIiApICk7XG5cdFx0XHRcdG1hdGNoWzVdID0gKyggKCBtYXRjaFs3XSArIG1hdGNoWzhdICkgfHwgbWF0Y2hbM10gPT09IFwib2RkXCIgKTtcblxuXHRcdFx0Ly8gb3RoZXIgdHlwZXMgcHJvaGliaXQgYXJndW1lbnRzXG5cdFx0XHR9IGVsc2UgaWYgKCBtYXRjaFszXSApIHtcblx0XHRcdFx0U2l6emxlLmVycm9yKCBtYXRjaFswXSApO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gbWF0Y2g7XG5cdFx0fSxcblxuXHRcdFwiUFNFVURPXCI6IGZ1bmN0aW9uKCBtYXRjaCApIHtcblx0XHRcdHZhciBleGNlc3MsXG5cdFx0XHRcdHVucXVvdGVkID0gIW1hdGNoWzZdICYmIG1hdGNoWzJdO1xuXG5cdFx0XHRpZiAoIG1hdGNoRXhwcltcIkNISUxEXCJdLnRlc3QoIG1hdGNoWzBdICkgKSB7XG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBBY2NlcHQgcXVvdGVkIGFyZ3VtZW50cyBhcy1pc1xuXHRcdFx0aWYgKCBtYXRjaFszXSApIHtcblx0XHRcdFx0bWF0Y2hbMl0gPSBtYXRjaFs0XSB8fCBtYXRjaFs1XSB8fCBcIlwiO1xuXG5cdFx0XHQvLyBTdHJpcCBleGNlc3MgY2hhcmFjdGVycyBmcm9tIHVucXVvdGVkIGFyZ3VtZW50c1xuXHRcdFx0fSBlbHNlIGlmICggdW5xdW90ZWQgJiYgcnBzZXVkby50ZXN0KCB1bnF1b3RlZCApICYmXG5cdFx0XHRcdC8vIEdldCBleGNlc3MgZnJvbSB0b2tlbml6ZSAocmVjdXJzaXZlbHkpXG5cdFx0XHRcdChleGNlc3MgPSB0b2tlbml6ZSggdW5xdW90ZWQsIHRydWUgKSkgJiZcblx0XHRcdFx0Ly8gYWR2YW5jZSB0byB0aGUgbmV4dCBjbG9zaW5nIHBhcmVudGhlc2lzXG5cdFx0XHRcdChleGNlc3MgPSB1bnF1b3RlZC5pbmRleE9mKCBcIilcIiwgdW5xdW90ZWQubGVuZ3RoIC0gZXhjZXNzICkgLSB1bnF1b3RlZC5sZW5ndGgpICkge1xuXG5cdFx0XHRcdC8vIGV4Y2VzcyBpcyBhIG5lZ2F0aXZlIGluZGV4XG5cdFx0XHRcdG1hdGNoWzBdID0gbWF0Y2hbMF0uc2xpY2UoIDAsIGV4Y2VzcyApO1xuXHRcdFx0XHRtYXRjaFsyXSA9IHVucXVvdGVkLnNsaWNlKCAwLCBleGNlc3MgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gUmV0dXJuIG9ubHkgY2FwdHVyZXMgbmVlZGVkIGJ5IHRoZSBwc2V1ZG8gZmlsdGVyIG1ldGhvZCAodHlwZSBhbmQgYXJndW1lbnQpXG5cdFx0XHRyZXR1cm4gbWF0Y2guc2xpY2UoIDAsIDMgKTtcblx0XHR9XG5cdH0sXG5cblx0ZmlsdGVyOiB7XG5cblx0XHRcIlRBR1wiOiBmdW5jdGlvbiggbm9kZU5hbWVTZWxlY3RvciApIHtcblx0XHRcdHZhciBub2RlTmFtZSA9IG5vZGVOYW1lU2VsZWN0b3IucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0cmV0dXJuIG5vZGVOYW1lU2VsZWN0b3IgPT09IFwiKlwiID9cblx0XHRcdFx0ZnVuY3Rpb24oKSB7IHJldHVybiB0cnVlOyB9IDpcblx0XHRcdFx0ZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGVsZW0ubm9kZU5hbWUgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBub2RlTmFtZTtcblx0XHRcdFx0fTtcblx0XHR9LFxuXG5cdFx0XCJDTEFTU1wiOiBmdW5jdGlvbiggY2xhc3NOYW1lICkge1xuXHRcdFx0dmFyIHBhdHRlcm4gPSBjbGFzc0NhY2hlWyBjbGFzc05hbWUgKyBcIiBcIiBdO1xuXG5cdFx0XHRyZXR1cm4gcGF0dGVybiB8fFxuXHRcdFx0XHQocGF0dGVybiA9IG5ldyBSZWdFeHAoIFwiKF58XCIgKyB3aGl0ZXNwYWNlICsgXCIpXCIgKyBjbGFzc05hbWUgKyBcIihcIiArIHdoaXRlc3BhY2UgKyBcInwkKVwiICkpICYmXG5cdFx0XHRcdGNsYXNzQ2FjaGUoIGNsYXNzTmFtZSwgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHBhdHRlcm4udGVzdCggdHlwZW9mIGVsZW0uY2xhc3NOYW1lID09PSBcInN0cmluZ1wiICYmIGVsZW0uY2xhc3NOYW1lIHx8IHR5cGVvZiBlbGVtLmdldEF0dHJpYnV0ZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBlbGVtLmdldEF0dHJpYnV0ZShcImNsYXNzXCIpIHx8IFwiXCIgKTtcblx0XHRcdFx0fSk7XG5cdFx0fSxcblxuXHRcdFwiQVRUUlwiOiBmdW5jdGlvbiggbmFtZSwgb3BlcmF0b3IsIGNoZWNrICkge1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHR2YXIgcmVzdWx0ID0gU2l6emxlLmF0dHIoIGVsZW0sIG5hbWUgKTtcblxuXHRcdFx0XHRpZiAoIHJlc3VsdCA9PSBudWxsICkge1xuXHRcdFx0XHRcdHJldHVybiBvcGVyYXRvciA9PT0gXCIhPVwiO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICggIW9wZXJhdG9yICkge1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmVzdWx0ICs9IFwiXCI7XG5cblx0XHRcdFx0cmV0dXJuIG9wZXJhdG9yID09PSBcIj1cIiA/IHJlc3VsdCA9PT0gY2hlY2sgOlxuXHRcdFx0XHRcdG9wZXJhdG9yID09PSBcIiE9XCIgPyByZXN1bHQgIT09IGNoZWNrIDpcblx0XHRcdFx0XHRvcGVyYXRvciA9PT0gXCJePVwiID8gY2hlY2sgJiYgcmVzdWx0LmluZGV4T2YoIGNoZWNrICkgPT09IDAgOlxuXHRcdFx0XHRcdG9wZXJhdG9yID09PSBcIio9XCIgPyBjaGVjayAmJiByZXN1bHQuaW5kZXhPZiggY2hlY2sgKSA+IC0xIDpcblx0XHRcdFx0XHRvcGVyYXRvciA9PT0gXCIkPVwiID8gY2hlY2sgJiYgcmVzdWx0LnNsaWNlKCAtY2hlY2subGVuZ3RoICkgPT09IGNoZWNrIDpcblx0XHRcdFx0XHRvcGVyYXRvciA9PT0gXCJ+PVwiID8gKCBcIiBcIiArIHJlc3VsdC5yZXBsYWNlKCByd2hpdGVzcGFjZSwgXCIgXCIgKSArIFwiIFwiICkuaW5kZXhPZiggY2hlY2sgKSA+IC0xIDpcblx0XHRcdFx0XHRvcGVyYXRvciA9PT0gXCJ8PVwiID8gcmVzdWx0ID09PSBjaGVjayB8fCByZXN1bHQuc2xpY2UoIDAsIGNoZWNrLmxlbmd0aCArIDEgKSA9PT0gY2hlY2sgKyBcIi1cIiA6XG5cdFx0XHRcdFx0ZmFsc2U7XG5cdFx0XHR9O1xuXHRcdH0sXG5cblx0XHRcIkNISUxEXCI6IGZ1bmN0aW9uKCB0eXBlLCB3aGF0LCBhcmd1bWVudCwgZmlyc3QsIGxhc3QgKSB7XG5cdFx0XHR2YXIgc2ltcGxlID0gdHlwZS5zbGljZSggMCwgMyApICE9PSBcIm50aFwiLFxuXHRcdFx0XHRmb3J3YXJkID0gdHlwZS5zbGljZSggLTQgKSAhPT0gXCJsYXN0XCIsXG5cdFx0XHRcdG9mVHlwZSA9IHdoYXQgPT09IFwib2YtdHlwZVwiO1xuXG5cdFx0XHRyZXR1cm4gZmlyc3QgPT09IDEgJiYgbGFzdCA9PT0gMCA/XG5cblx0XHRcdFx0Ly8gU2hvcnRjdXQgZm9yIDpudGgtKihuKVxuXHRcdFx0XHRmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0XHRyZXR1cm4gISFlbGVtLnBhcmVudE5vZGU7XG5cdFx0XHRcdH0gOlxuXG5cdFx0XHRcdGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7XG5cdFx0XHRcdFx0dmFyIGNhY2hlLCB1bmlxdWVDYWNoZSwgb3V0ZXJDYWNoZSwgbm9kZSwgbm9kZUluZGV4LCBzdGFydCxcblx0XHRcdFx0XHRcdGRpciA9IHNpbXBsZSAhPT0gZm9yd2FyZCA/IFwibmV4dFNpYmxpbmdcIiA6IFwicHJldmlvdXNTaWJsaW5nXCIsXG5cdFx0XHRcdFx0XHRwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGUsXG5cdFx0XHRcdFx0XHRuYW1lID0gb2ZUeXBlICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxcblx0XHRcdFx0XHRcdHVzZUNhY2hlID0gIXhtbCAmJiAhb2ZUeXBlLFxuXHRcdFx0XHRcdFx0ZGlmZiA9IGZhbHNlO1xuXG5cdFx0XHRcdFx0aWYgKCBwYXJlbnQgKSB7XG5cblx0XHRcdFx0XHRcdC8vIDooZmlyc3R8bGFzdHxvbmx5KS0oY2hpbGR8b2YtdHlwZSlcblx0XHRcdFx0XHRcdGlmICggc2ltcGxlICkge1xuXHRcdFx0XHRcdFx0XHR3aGlsZSAoIGRpciApIHtcblx0XHRcdFx0XHRcdFx0XHRub2RlID0gZWxlbTtcblx0XHRcdFx0XHRcdFx0XHR3aGlsZSAoIChub2RlID0gbm9kZVsgZGlyIF0pICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBvZlR5cGUgP1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IG5hbWUgOlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRub2RlLm5vZGVUeXBlID09PSAxICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0Ly8gUmV2ZXJzZSBkaXJlY3Rpb24gZm9yIDpvbmx5LSogKGlmIHdlIGhhdmVuJ3QgeWV0IGRvbmUgc28pXG5cdFx0XHRcdFx0XHRcdFx0c3RhcnQgPSBkaXIgPSB0eXBlID09PSBcIm9ubHlcIiAmJiAhc3RhcnQgJiYgXCJuZXh0U2libGluZ1wiO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRzdGFydCA9IFsgZm9yd2FyZCA/IHBhcmVudC5maXJzdENoaWxkIDogcGFyZW50Lmxhc3RDaGlsZCBdO1xuXG5cdFx0XHRcdFx0XHQvLyBub24teG1sIDpudGgtY2hpbGQoLi4uKSBzdG9yZXMgY2FjaGUgZGF0YSBvbiBgcGFyZW50YFxuXHRcdFx0XHRcdFx0aWYgKCBmb3J3YXJkICYmIHVzZUNhY2hlICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIFNlZWsgYGVsZW1gIGZyb20gYSBwcmV2aW91c2x5LWNhY2hlZCBpbmRleFxuXG5cdFx0XHRcdFx0XHRcdC8vIC4uLmluIGEgZ3ppcC1mcmllbmRseSB3YXlcblx0XHRcdFx0XHRcdFx0bm9kZSA9IHBhcmVudDtcblx0XHRcdFx0XHRcdFx0b3V0ZXJDYWNoZSA9IG5vZGVbIGV4cGFuZG8gXSB8fCAobm9kZVsgZXhwYW5kbyBdID0ge30pO1xuXG5cdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw5IG9ubHlcblx0XHRcdFx0XHRcdFx0Ly8gRGVmZW5kIGFnYWluc3QgY2xvbmVkIGF0dHJvcGVydGllcyAoalF1ZXJ5IGdoLTE3MDkpXG5cdFx0XHRcdFx0XHRcdHVuaXF1ZUNhY2hlID0gb3V0ZXJDYWNoZVsgbm9kZS51bmlxdWVJRCBdIHx8XG5cdFx0XHRcdFx0XHRcdFx0KG91dGVyQ2FjaGVbIG5vZGUudW5pcXVlSUQgXSA9IHt9KTtcblxuXHRcdFx0XHRcdFx0XHRjYWNoZSA9IHVuaXF1ZUNhY2hlWyB0eXBlIF0gfHwgW107XG5cdFx0XHRcdFx0XHRcdG5vZGVJbmRleCA9IGNhY2hlWyAwIF0gPT09IGRpcnJ1bnMgJiYgY2FjaGVbIDEgXTtcblx0XHRcdFx0XHRcdFx0ZGlmZiA9IG5vZGVJbmRleCAmJiBjYWNoZVsgMiBdO1xuXHRcdFx0XHRcdFx0XHRub2RlID0gbm9kZUluZGV4ICYmIHBhcmVudC5jaGlsZE5vZGVzWyBub2RlSW5kZXggXTtcblxuXHRcdFx0XHRcdFx0XHR3aGlsZSAoIChub2RlID0gKytub2RlSW5kZXggJiYgbm9kZSAmJiBub2RlWyBkaXIgXSB8fFxuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gRmFsbGJhY2sgdG8gc2Vla2luZyBgZWxlbWAgZnJvbSB0aGUgc3RhcnRcblx0XHRcdFx0XHRcdFx0XHQoZGlmZiA9IG5vZGVJbmRleCA9IDApIHx8IHN0YXJ0LnBvcCgpKSApIHtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIFdoZW4gZm91bmQsIGNhY2hlIGluZGV4ZXMgb24gYHBhcmVudGAgYW5kIGJyZWFrXG5cdFx0XHRcdFx0XHRcdFx0aWYgKCBub2RlLm5vZGVUeXBlID09PSAxICYmICsrZGlmZiAmJiBub2RlID09PSBlbGVtICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0dW5pcXVlQ2FjaGVbIHR5cGUgXSA9IFsgZGlycnVucywgbm9kZUluZGV4LCBkaWZmIF07XG5cdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0Ly8gVXNlIHByZXZpb3VzbHktY2FjaGVkIGVsZW1lbnQgaW5kZXggaWYgYXZhaWxhYmxlXG5cdFx0XHRcdFx0XHRcdGlmICggdXNlQ2FjaGUgKSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gLi4uaW4gYSBnemlwLWZyaWVuZGx5IHdheVxuXHRcdFx0XHRcdFx0XHRcdG5vZGUgPSBlbGVtO1xuXHRcdFx0XHRcdFx0XHRcdG91dGVyQ2FjaGUgPSBub2RlWyBleHBhbmRvIF0gfHwgKG5vZGVbIGV4cGFuZG8gXSA9IHt9KTtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw5IG9ubHlcblx0XHRcdFx0XHRcdFx0XHQvLyBEZWZlbmQgYWdhaW5zdCBjbG9uZWQgYXR0cm9wZXJ0aWVzIChqUXVlcnkgZ2gtMTcwOSlcblx0XHRcdFx0XHRcdFx0XHR1bmlxdWVDYWNoZSA9IG91dGVyQ2FjaGVbIG5vZGUudW5pcXVlSUQgXSB8fFxuXHRcdFx0XHRcdFx0XHRcdFx0KG91dGVyQ2FjaGVbIG5vZGUudW5pcXVlSUQgXSA9IHt9KTtcblxuXHRcdFx0XHRcdFx0XHRcdGNhY2hlID0gdW5pcXVlQ2FjaGVbIHR5cGUgXSB8fCBbXTtcblx0XHRcdFx0XHRcdFx0XHRub2RlSW5kZXggPSBjYWNoZVsgMCBdID09PSBkaXJydW5zICYmIGNhY2hlWyAxIF07XG5cdFx0XHRcdFx0XHRcdFx0ZGlmZiA9IG5vZGVJbmRleDtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdC8vIHhtbCA6bnRoLWNoaWxkKC4uLilcblx0XHRcdFx0XHRcdFx0Ly8gb3IgOm50aC1sYXN0LWNoaWxkKC4uLikgb3IgOm50aCgtbGFzdCk/LW9mLXR5cGUoLi4uKVxuXHRcdFx0XHRcdFx0XHRpZiAoIGRpZmYgPT09IGZhbHNlICkge1xuXHRcdFx0XHRcdFx0XHRcdC8vIFVzZSB0aGUgc2FtZSBsb29wIGFzIGFib3ZlIHRvIHNlZWsgYGVsZW1gIGZyb20gdGhlIHN0YXJ0XG5cdFx0XHRcdFx0XHRcdFx0d2hpbGUgKCAobm9kZSA9ICsrbm9kZUluZGV4ICYmIG5vZGUgJiYgbm9kZVsgZGlyIF0gfHxcblx0XHRcdFx0XHRcdFx0XHRcdChkaWZmID0gbm9kZUluZGV4ID0gMCkgfHwgc3RhcnQucG9wKCkpICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoICggb2ZUeXBlID9cblx0XHRcdFx0XHRcdFx0XHRcdFx0bm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBuYW1lIDpcblx0XHRcdFx0XHRcdFx0XHRcdFx0bm9kZS5ub2RlVHlwZSA9PT0gMSApICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCsrZGlmZiApIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBDYWNoZSB0aGUgaW5kZXggb2YgZWFjaCBlbmNvdW50ZXJlZCBlbGVtZW50XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmICggdXNlQ2FjaGUgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0b3V0ZXJDYWNoZSA9IG5vZGVbIGV4cGFuZG8gXSB8fCAobm9kZVsgZXhwYW5kbyBdID0ge30pO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPDkgb25seVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIERlZmVuZCBhZ2FpbnN0IGNsb25lZCBhdHRyb3BlcnRpZXMgKGpRdWVyeSBnaC0xNzA5KVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHVuaXF1ZUNhY2hlID0gb3V0ZXJDYWNoZVsgbm9kZS51bmlxdWVJRCBdIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQob3V0ZXJDYWNoZVsgbm9kZS51bmlxdWVJRCBdID0ge30pO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dW5pcXVlQ2FjaGVbIHR5cGUgXSA9IFsgZGlycnVucywgZGlmZiBdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBub2RlID09PSBlbGVtICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdC8vIEluY29ycG9yYXRlIHRoZSBvZmZzZXQsIHRoZW4gY2hlY2sgYWdhaW5zdCBjeWNsZSBzaXplXG5cdFx0XHRcdFx0XHRkaWZmIC09IGxhc3Q7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZGlmZiA9PT0gZmlyc3QgfHwgKCBkaWZmICUgZmlyc3QgPT09IDAgJiYgZGlmZiAvIGZpcnN0ID49IDAgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH07XG5cdFx0fSxcblxuXHRcdFwiUFNFVURPXCI6IGZ1bmN0aW9uKCBwc2V1ZG8sIGFyZ3VtZW50ICkge1xuXHRcdFx0Ly8gcHNldWRvLWNsYXNzIG5hbWVzIGFyZSBjYXNlLWluc2Vuc2l0aXZlXG5cdFx0XHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9zZWxlY3RvcnMvI3BzZXVkby1jbGFzc2VzXG5cdFx0XHQvLyBQcmlvcml0aXplIGJ5IGNhc2Ugc2Vuc2l0aXZpdHkgaW4gY2FzZSBjdXN0b20gcHNldWRvcyBhcmUgYWRkZWQgd2l0aCB1cHBlcmNhc2UgbGV0dGVyc1xuXHRcdFx0Ly8gUmVtZW1iZXIgdGhhdCBzZXRGaWx0ZXJzIGluaGVyaXRzIGZyb20gcHNldWRvc1xuXHRcdFx0dmFyIGFyZ3MsXG5cdFx0XHRcdGZuID0gRXhwci5wc2V1ZG9zWyBwc2V1ZG8gXSB8fCBFeHByLnNldEZpbHRlcnNbIHBzZXVkby50b0xvd2VyQ2FzZSgpIF0gfHxcblx0XHRcdFx0XHRTaXp6bGUuZXJyb3IoIFwidW5zdXBwb3J0ZWQgcHNldWRvOiBcIiArIHBzZXVkbyApO1xuXG5cdFx0XHQvLyBUaGUgdXNlciBtYXkgdXNlIGNyZWF0ZVBzZXVkbyB0byBpbmRpY2F0ZSB0aGF0XG5cdFx0XHQvLyBhcmd1bWVudHMgYXJlIG5lZWRlZCB0byBjcmVhdGUgdGhlIGZpbHRlciBmdW5jdGlvblxuXHRcdFx0Ly8ganVzdCBhcyBTaXp6bGUgZG9lc1xuXHRcdFx0aWYgKCBmblsgZXhwYW5kbyBdICkge1xuXHRcdFx0XHRyZXR1cm4gZm4oIGFyZ3VtZW50ICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEJ1dCBtYWludGFpbiBzdXBwb3J0IGZvciBvbGQgc2lnbmF0dXJlc1xuXHRcdFx0aWYgKCBmbi5sZW5ndGggPiAxICkge1xuXHRcdFx0XHRhcmdzID0gWyBwc2V1ZG8sIHBzZXVkbywgXCJcIiwgYXJndW1lbnQgXTtcblx0XHRcdFx0cmV0dXJuIEV4cHIuc2V0RmlsdGVycy5oYXNPd25Qcm9wZXJ0eSggcHNldWRvLnRvTG93ZXJDYXNlKCkgKSA/XG5cdFx0XHRcdFx0bWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCBzZWVkLCBtYXRjaGVzICkge1xuXHRcdFx0XHRcdFx0dmFyIGlkeCxcblx0XHRcdFx0XHRcdFx0bWF0Y2hlZCA9IGZuKCBzZWVkLCBhcmd1bWVudCApLFxuXHRcdFx0XHRcdFx0XHRpID0gbWF0Y2hlZC5sZW5ndGg7XG5cdFx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRcdFx0aWR4ID0gaW5kZXhPZiggc2VlZCwgbWF0Y2hlZFtpXSApO1xuXHRcdFx0XHRcdFx0XHRzZWVkWyBpZHggXSA9ICEoIG1hdGNoZXNbIGlkeCBdID0gbWF0Y2hlZFtpXSApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pIDpcblx0XHRcdFx0XHRmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0XHRcdHJldHVybiBmbiggZWxlbSwgMCwgYXJncyApO1xuXHRcdFx0XHRcdH07XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBmbjtcblx0XHR9XG5cdH0sXG5cblx0cHNldWRvczoge1xuXHRcdC8vIFBvdGVudGlhbGx5IGNvbXBsZXggcHNldWRvc1xuXHRcdFwibm90XCI6IG1hcmtGdW5jdGlvbihmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0XHQvLyBUcmltIHRoZSBzZWxlY3RvciBwYXNzZWQgdG8gY29tcGlsZVxuXHRcdFx0Ly8gdG8gYXZvaWQgdHJlYXRpbmcgbGVhZGluZyBhbmQgdHJhaWxpbmdcblx0XHRcdC8vIHNwYWNlcyBhcyBjb21iaW5hdG9yc1xuXHRcdFx0dmFyIGlucHV0ID0gW10sXG5cdFx0XHRcdHJlc3VsdHMgPSBbXSxcblx0XHRcdFx0bWF0Y2hlciA9IGNvbXBpbGUoIHNlbGVjdG9yLnJlcGxhY2UoIHJ0cmltLCBcIiQxXCIgKSApO1xuXG5cdFx0XHRyZXR1cm4gbWF0Y2hlclsgZXhwYW5kbyBdID9cblx0XHRcdFx0bWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCBzZWVkLCBtYXRjaGVzLCBjb250ZXh0LCB4bWwgKSB7XG5cdFx0XHRcdFx0dmFyIGVsZW0sXG5cdFx0XHRcdFx0XHR1bm1hdGNoZWQgPSBtYXRjaGVyKCBzZWVkLCBudWxsLCB4bWwsIFtdICksXG5cdFx0XHRcdFx0XHRpID0gc2VlZC5sZW5ndGg7XG5cblx0XHRcdFx0XHQvLyBNYXRjaCBlbGVtZW50cyB1bm1hdGNoZWQgYnkgYG1hdGNoZXJgXG5cdFx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdFx0XHRpZiAoIChlbGVtID0gdW5tYXRjaGVkW2ldKSApIHtcblx0XHRcdFx0XHRcdFx0c2VlZFtpXSA9ICEobWF0Y2hlc1tpXSA9IGVsZW0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSkgOlxuXHRcdFx0XHRmdW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkge1xuXHRcdFx0XHRcdGlucHV0WzBdID0gZWxlbTtcblx0XHRcdFx0XHRtYXRjaGVyKCBpbnB1dCwgbnVsbCwgeG1sLCByZXN1bHRzICk7XG5cdFx0XHRcdFx0Ly8gRG9uJ3Qga2VlcCB0aGUgZWxlbWVudCAoaXNzdWUgIzI5OSlcblx0XHRcdFx0XHRpbnB1dFswXSA9IG51bGw7XG5cdFx0XHRcdFx0cmV0dXJuICFyZXN1bHRzLnBvcCgpO1xuXHRcdFx0XHR9O1xuXHRcdH0pLFxuXG5cdFx0XCJoYXNcIjogbWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRcdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0cmV0dXJuIFNpenpsZSggc2VsZWN0b3IsIGVsZW0gKS5sZW5ndGggPiAwO1xuXHRcdFx0fTtcblx0XHR9KSxcblxuXHRcdFwiY29udGFpbnNcIjogbWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCB0ZXh0ICkge1xuXHRcdFx0dGV4dCA9IHRleHQucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKTtcblx0XHRcdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0cmV0dXJuICggZWxlbS50ZXh0Q29udGVudCB8fCBlbGVtLmlubmVyVGV4dCB8fCBnZXRUZXh0KCBlbGVtICkgKS5pbmRleE9mKCB0ZXh0ICkgPiAtMTtcblx0XHRcdH07XG5cdFx0fSksXG5cblx0XHQvLyBcIldoZXRoZXIgYW4gZWxlbWVudCBpcyByZXByZXNlbnRlZCBieSBhIDpsYW5nKCkgc2VsZWN0b3Jcblx0XHQvLyBpcyBiYXNlZCBzb2xlbHkgb24gdGhlIGVsZW1lbnQncyBsYW5ndWFnZSB2YWx1ZVxuXHRcdC8vIGJlaW5nIGVxdWFsIHRvIHRoZSBpZGVudGlmaWVyIEMsXG5cdFx0Ly8gb3IgYmVnaW5uaW5nIHdpdGggdGhlIGlkZW50aWZpZXIgQyBpbW1lZGlhdGVseSBmb2xsb3dlZCBieSBcIi1cIi5cblx0XHQvLyBUaGUgbWF0Y2hpbmcgb2YgQyBhZ2FpbnN0IHRoZSBlbGVtZW50J3MgbGFuZ3VhZ2UgdmFsdWUgaXMgcGVyZm9ybWVkIGNhc2UtaW5zZW5zaXRpdmVseS5cblx0XHQvLyBUaGUgaWRlbnRpZmllciBDIGRvZXMgbm90IGhhdmUgdG8gYmUgYSB2YWxpZCBsYW5ndWFnZSBuYW1lLlwiXG5cdFx0Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvc2VsZWN0b3JzLyNsYW5nLXBzZXVkb1xuXHRcdFwibGFuZ1wiOiBtYXJrRnVuY3Rpb24oIGZ1bmN0aW9uKCBsYW5nICkge1xuXHRcdFx0Ly8gbGFuZyB2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgaWRlbnRpZmllclxuXHRcdFx0aWYgKCAhcmlkZW50aWZpZXIudGVzdChsYW5nIHx8IFwiXCIpICkge1xuXHRcdFx0XHRTaXp6bGUuZXJyb3IoIFwidW5zdXBwb3J0ZWQgbGFuZzogXCIgKyBsYW5nICk7XG5cdFx0XHR9XG5cdFx0XHRsYW5nID0gbGFuZy5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHZhciBlbGVtTGFuZztcblx0XHRcdFx0ZG8ge1xuXHRcdFx0XHRcdGlmICggKGVsZW1MYW5nID0gZG9jdW1lbnRJc0hUTUwgP1xuXHRcdFx0XHRcdFx0ZWxlbS5sYW5nIDpcblx0XHRcdFx0XHRcdGVsZW0uZ2V0QXR0cmlidXRlKFwieG1sOmxhbmdcIikgfHwgZWxlbS5nZXRBdHRyaWJ1dGUoXCJsYW5nXCIpKSApIHtcblxuXHRcdFx0XHRcdFx0ZWxlbUxhbmcgPSBlbGVtTGFuZy50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0XHRcdFx0cmV0dXJuIGVsZW1MYW5nID09PSBsYW5nIHx8IGVsZW1MYW5nLmluZGV4T2YoIGxhbmcgKyBcIi1cIiApID09PSAwO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSB3aGlsZSAoIChlbGVtID0gZWxlbS5wYXJlbnROb2RlKSAmJiBlbGVtLm5vZGVUeXBlID09PSAxICk7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH07XG5cdFx0fSksXG5cblx0XHQvLyBNaXNjZWxsYW5lb3VzXG5cdFx0XCJ0YXJnZXRcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHR2YXIgaGFzaCA9IHdpbmRvdy5sb2NhdGlvbiAmJiB3aW5kb3cubG9jYXRpb24uaGFzaDtcblx0XHRcdHJldHVybiBoYXNoICYmIGhhc2guc2xpY2UoIDEgKSA9PT0gZWxlbS5pZDtcblx0XHR9LFxuXG5cdFx0XCJyb290XCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGVsZW0gPT09IGRvY0VsZW07XG5cdFx0fSxcblxuXHRcdFwiZm9jdXNcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbSA9PT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAmJiAoIWRvY3VtZW50Lmhhc0ZvY3VzIHx8IGRvY3VtZW50Lmhhc0ZvY3VzKCkpICYmICEhKGVsZW0udHlwZSB8fCBlbGVtLmhyZWYgfHwgfmVsZW0udGFiSW5kZXgpO1xuXHRcdH0sXG5cblx0XHQvLyBCb29sZWFuIHByb3BlcnRpZXNcblx0XHRcImVuYWJsZWRcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbS5kaXNhYmxlZCA9PT0gZmFsc2U7XG5cdFx0fSxcblxuXHRcdFwiZGlzYWJsZWRcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbS5kaXNhYmxlZCA9PT0gdHJ1ZTtcblx0XHR9LFxuXG5cdFx0XCJjaGVja2VkXCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0Ly8gSW4gQ1NTMywgOmNoZWNrZWQgc2hvdWxkIHJldHVybiBib3RoIGNoZWNrZWQgYW5kIHNlbGVjdGVkIGVsZW1lbnRzXG5cdFx0XHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDExL1JFQy1jc3MzLXNlbGVjdG9ycy0yMDExMDkyOS8jY2hlY2tlZFxuXHRcdFx0dmFyIG5vZGVOYW1lID0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0cmV0dXJuIChub2RlTmFtZSA9PT0gXCJpbnB1dFwiICYmICEhZWxlbS5jaGVja2VkKSB8fCAobm9kZU5hbWUgPT09IFwib3B0aW9uXCIgJiYgISFlbGVtLnNlbGVjdGVkKTtcblx0XHR9LFxuXG5cdFx0XCJzZWxlY3RlZFwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdC8vIEFjY2Vzc2luZyB0aGlzIHByb3BlcnR5IG1ha2VzIHNlbGVjdGVkLWJ5LWRlZmF1bHRcblx0XHRcdC8vIG9wdGlvbnMgaW4gU2FmYXJpIHdvcmsgcHJvcGVybHlcblx0XHRcdGlmICggZWxlbS5wYXJlbnROb2RlICkge1xuXHRcdFx0XHRlbGVtLnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGVsZW0uc2VsZWN0ZWQgPT09IHRydWU7XG5cdFx0fSxcblxuXHRcdC8vIENvbnRlbnRzXG5cdFx0XCJlbXB0eVwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL3NlbGVjdG9ycy8jZW1wdHktcHNldWRvXG5cdFx0XHQvLyA6ZW1wdHkgaXMgbmVnYXRlZCBieSBlbGVtZW50ICgxKSBvciBjb250ZW50IG5vZGVzICh0ZXh0OiAzOyBjZGF0YTogNDsgZW50aXR5IHJlZjogNSksXG5cdFx0XHQvLyAgIGJ1dCBub3QgYnkgb3RoZXJzIChjb21tZW50OiA4OyBwcm9jZXNzaW5nIGluc3RydWN0aW9uOiA3OyBldGMuKVxuXHRcdFx0Ly8gbm9kZVR5cGUgPCA2IHdvcmtzIGJlY2F1c2UgYXR0cmlidXRlcyAoMikgZG8gbm90IGFwcGVhciBhcyBjaGlsZHJlblxuXHRcdFx0Zm9yICggZWxlbSA9IGVsZW0uZmlyc3RDaGlsZDsgZWxlbTsgZWxlbSA9IGVsZW0ubmV4dFNpYmxpbmcgKSB7XG5cdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA8IDYgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9LFxuXG5cdFx0XCJwYXJlbnRcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gIUV4cHIucHNldWRvc1tcImVtcHR5XCJdKCBlbGVtICk7XG5cdFx0fSxcblxuXHRcdC8vIEVsZW1lbnQvaW5wdXQgdHlwZXNcblx0XHRcImhlYWRlclwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiByaGVhZGVyLnRlc3QoIGVsZW0ubm9kZU5hbWUgKTtcblx0XHR9LFxuXG5cdFx0XCJpbnB1dFwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiByaW5wdXRzLnRlc3QoIGVsZW0ubm9kZU5hbWUgKTtcblx0XHR9LFxuXG5cdFx0XCJidXR0b25cIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHR2YXIgbmFtZSA9IGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcblx0XHRcdHJldHVybiBuYW1lID09PSBcImlucHV0XCIgJiYgZWxlbS50eXBlID09PSBcImJ1dHRvblwiIHx8IG5hbWUgPT09IFwiYnV0dG9uXCI7XG5cdFx0fSxcblxuXHRcdFwidGV4dFwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHZhciBhdHRyO1xuXHRcdFx0cmV0dXJuIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gXCJpbnB1dFwiICYmXG5cdFx0XHRcdGVsZW0udHlwZSA9PT0gXCJ0ZXh0XCIgJiZcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRTw4XG5cdFx0XHRcdC8vIE5ldyBIVE1MNSBhdHRyaWJ1dGUgdmFsdWVzIChlLmcuLCBcInNlYXJjaFwiKSBhcHBlYXIgd2l0aCBlbGVtLnR5cGUgPT09IFwidGV4dFwiXG5cdFx0XHRcdCggKGF0dHIgPSBlbGVtLmdldEF0dHJpYnV0ZShcInR5cGVcIikpID09IG51bGwgfHwgYXR0ci50b0xvd2VyQ2FzZSgpID09PSBcInRleHRcIiApO1xuXHRcdH0sXG5cblx0XHQvLyBQb3NpdGlvbi1pbi1jb2xsZWN0aW9uXG5cdFx0XCJmaXJzdFwiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIFsgMCBdO1xuXHRcdH0pLFxuXG5cdFx0XCJsYXN0XCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoICkge1xuXHRcdFx0cmV0dXJuIFsgbGVuZ3RoIC0gMSBdO1xuXHRcdH0pLFxuXG5cdFx0XCJlcVwiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCwgYXJndW1lbnQgKSB7XG5cdFx0XHRyZXR1cm4gWyBhcmd1bWVudCA8IDAgPyBhcmd1bWVudCArIGxlbmd0aCA6IGFyZ3VtZW50IF07XG5cdFx0fSksXG5cblx0XHRcImV2ZW5cIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyhmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGggKSB7XG5cdFx0XHR2YXIgaSA9IDA7XG5cdFx0XHRmb3IgKCA7IGkgPCBsZW5ndGg7IGkgKz0gMiApIHtcblx0XHRcdFx0bWF0Y2hJbmRleGVzLnB1c2goIGkgKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBtYXRjaEluZGV4ZXM7XG5cdFx0fSksXG5cblx0XHRcIm9kZFwiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCApIHtcblx0XHRcdHZhciBpID0gMTtcblx0XHRcdGZvciAoIDsgaSA8IGxlbmd0aDsgaSArPSAyICkge1xuXHRcdFx0XHRtYXRjaEluZGV4ZXMucHVzaCggaSApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG1hdGNoSW5kZXhlcztcblx0XHR9KSxcblxuXHRcdFwibHRcIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyhmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGgsIGFyZ3VtZW50ICkge1xuXHRcdFx0dmFyIGkgPSBhcmd1bWVudCA8IDAgPyBhcmd1bWVudCArIGxlbmd0aCA6IGFyZ3VtZW50O1xuXHRcdFx0Zm9yICggOyAtLWkgPj0gMDsgKSB7XG5cdFx0XHRcdG1hdGNoSW5kZXhlcy5wdXNoKCBpICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbWF0Y2hJbmRleGVzO1xuXHRcdH0pLFxuXG5cdFx0XCJndFwiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCwgYXJndW1lbnQgKSB7XG5cdFx0XHR2YXIgaSA9IGFyZ3VtZW50IDwgMCA/IGFyZ3VtZW50ICsgbGVuZ3RoIDogYXJndW1lbnQ7XG5cdFx0XHRmb3IgKCA7ICsraSA8IGxlbmd0aDsgKSB7XG5cdFx0XHRcdG1hdGNoSW5kZXhlcy5wdXNoKCBpICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbWF0Y2hJbmRleGVzO1xuXHRcdH0pXG5cdH1cbn07XG5cbkV4cHIucHNldWRvc1tcIm50aFwiXSA9IEV4cHIucHNldWRvc1tcImVxXCJdO1xuXG4vLyBBZGQgYnV0dG9uL2lucHV0IHR5cGUgcHNldWRvc1xuZm9yICggaSBpbiB7IHJhZGlvOiB0cnVlLCBjaGVja2JveDogdHJ1ZSwgZmlsZTogdHJ1ZSwgcGFzc3dvcmQ6IHRydWUsIGltYWdlOiB0cnVlIH0gKSB7XG5cdEV4cHIucHNldWRvc1sgaSBdID0gY3JlYXRlSW5wdXRQc2V1ZG8oIGkgKTtcbn1cbmZvciAoIGkgaW4geyBzdWJtaXQ6IHRydWUsIHJlc2V0OiB0cnVlIH0gKSB7XG5cdEV4cHIucHNldWRvc1sgaSBdID0gY3JlYXRlQnV0dG9uUHNldWRvKCBpICk7XG59XG5cbi8vIEVhc3kgQVBJIGZvciBjcmVhdGluZyBuZXcgc2V0RmlsdGVyc1xuZnVuY3Rpb24gc2V0RmlsdGVycygpIHt9XG5zZXRGaWx0ZXJzLnByb3RvdHlwZSA9IEV4cHIuZmlsdGVycyA9IEV4cHIucHNldWRvcztcbkV4cHIuc2V0RmlsdGVycyA9IG5ldyBzZXRGaWx0ZXJzKCk7XG5cbnRva2VuaXplID0gU2l6emxlLnRva2VuaXplID0gZnVuY3Rpb24oIHNlbGVjdG9yLCBwYXJzZU9ubHkgKSB7XG5cdHZhciBtYXRjaGVkLCBtYXRjaCwgdG9rZW5zLCB0eXBlLFxuXHRcdHNvRmFyLCBncm91cHMsIHByZUZpbHRlcnMsXG5cdFx0Y2FjaGVkID0gdG9rZW5DYWNoZVsgc2VsZWN0b3IgKyBcIiBcIiBdO1xuXG5cdGlmICggY2FjaGVkICkge1xuXHRcdHJldHVybiBwYXJzZU9ubHkgPyAwIDogY2FjaGVkLnNsaWNlKCAwICk7XG5cdH1cblxuXHRzb0ZhciA9IHNlbGVjdG9yO1xuXHRncm91cHMgPSBbXTtcblx0cHJlRmlsdGVycyA9IEV4cHIucHJlRmlsdGVyO1xuXG5cdHdoaWxlICggc29GYXIgKSB7XG5cblx0XHQvLyBDb21tYSBhbmQgZmlyc3QgcnVuXG5cdFx0aWYgKCAhbWF0Y2hlZCB8fCAobWF0Y2ggPSByY29tbWEuZXhlYyggc29GYXIgKSkgKSB7XG5cdFx0XHRpZiAoIG1hdGNoICkge1xuXHRcdFx0XHQvLyBEb24ndCBjb25zdW1lIHRyYWlsaW5nIGNvbW1hcyBhcyB2YWxpZFxuXHRcdFx0XHRzb0ZhciA9IHNvRmFyLnNsaWNlKCBtYXRjaFswXS5sZW5ndGggKSB8fCBzb0Zhcjtcblx0XHRcdH1cblx0XHRcdGdyb3Vwcy5wdXNoKCAodG9rZW5zID0gW10pICk7XG5cdFx0fVxuXG5cdFx0bWF0Y2hlZCA9IGZhbHNlO1xuXG5cdFx0Ly8gQ29tYmluYXRvcnNcblx0XHRpZiAoIChtYXRjaCA9IHJjb21iaW5hdG9ycy5leGVjKCBzb0ZhciApKSApIHtcblx0XHRcdG1hdGNoZWQgPSBtYXRjaC5zaGlmdCgpO1xuXHRcdFx0dG9rZW5zLnB1c2goe1xuXHRcdFx0XHR2YWx1ZTogbWF0Y2hlZCxcblx0XHRcdFx0Ly8gQ2FzdCBkZXNjZW5kYW50IGNvbWJpbmF0b3JzIHRvIHNwYWNlXG5cdFx0XHRcdHR5cGU6IG1hdGNoWzBdLnJlcGxhY2UoIHJ0cmltLCBcIiBcIiApXG5cdFx0XHR9KTtcblx0XHRcdHNvRmFyID0gc29GYXIuc2xpY2UoIG1hdGNoZWQubGVuZ3RoICk7XG5cdFx0fVxuXG5cdFx0Ly8gRmlsdGVyc1xuXHRcdGZvciAoIHR5cGUgaW4gRXhwci5maWx0ZXIgKSB7XG5cdFx0XHRpZiAoIChtYXRjaCA9IG1hdGNoRXhwclsgdHlwZSBdLmV4ZWMoIHNvRmFyICkpICYmICghcHJlRmlsdGVyc1sgdHlwZSBdIHx8XG5cdFx0XHRcdChtYXRjaCA9IHByZUZpbHRlcnNbIHR5cGUgXSggbWF0Y2ggKSkpICkge1xuXHRcdFx0XHRtYXRjaGVkID0gbWF0Y2guc2hpZnQoKTtcblx0XHRcdFx0dG9rZW5zLnB1c2goe1xuXHRcdFx0XHRcdHZhbHVlOiBtYXRjaGVkLFxuXHRcdFx0XHRcdHR5cGU6IHR5cGUsXG5cdFx0XHRcdFx0bWF0Y2hlczogbWF0Y2hcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHNvRmFyID0gc29GYXIuc2xpY2UoIG1hdGNoZWQubGVuZ3RoICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKCAhbWF0Y2hlZCApIHtcblx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fVxuXG5cdC8vIFJldHVybiB0aGUgbGVuZ3RoIG9mIHRoZSBpbnZhbGlkIGV4Y2Vzc1xuXHQvLyBpZiB3ZSdyZSBqdXN0IHBhcnNpbmdcblx0Ly8gT3RoZXJ3aXNlLCB0aHJvdyBhbiBlcnJvciBvciByZXR1cm4gdG9rZW5zXG5cdHJldHVybiBwYXJzZU9ubHkgP1xuXHRcdHNvRmFyLmxlbmd0aCA6XG5cdFx0c29GYXIgP1xuXHRcdFx0U2l6emxlLmVycm9yKCBzZWxlY3RvciApIDpcblx0XHRcdC8vIENhY2hlIHRoZSB0b2tlbnNcblx0XHRcdHRva2VuQ2FjaGUoIHNlbGVjdG9yLCBncm91cHMgKS5zbGljZSggMCApO1xufTtcblxuZnVuY3Rpb24gdG9TZWxlY3RvciggdG9rZW5zICkge1xuXHR2YXIgaSA9IDAsXG5cdFx0bGVuID0gdG9rZW5zLmxlbmd0aCxcblx0XHRzZWxlY3RvciA9IFwiXCI7XG5cdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdHNlbGVjdG9yICs9IHRva2Vuc1tpXS52YWx1ZTtcblx0fVxuXHRyZXR1cm4gc2VsZWN0b3I7XG59XG5cbmZ1bmN0aW9uIGFkZENvbWJpbmF0b3IoIG1hdGNoZXIsIGNvbWJpbmF0b3IsIGJhc2UgKSB7XG5cdHZhciBkaXIgPSBjb21iaW5hdG9yLmRpcixcblx0XHRjaGVja05vbkVsZW1lbnRzID0gYmFzZSAmJiBkaXIgPT09IFwicGFyZW50Tm9kZVwiLFxuXHRcdGRvbmVOYW1lID0gZG9uZSsrO1xuXG5cdHJldHVybiBjb21iaW5hdG9yLmZpcnN0ID9cblx0XHQvLyBDaGVjayBhZ2FpbnN0IGNsb3Nlc3QgYW5jZXN0b3IvcHJlY2VkaW5nIGVsZW1lbnRcblx0XHRmdW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkge1xuXHRcdFx0d2hpbGUgKCAoZWxlbSA9IGVsZW1bIGRpciBdKSApIHtcblx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxIHx8IGNoZWNrTm9uRWxlbWVudHMgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG1hdGNoZXIoIGVsZW0sIGNvbnRleHQsIHhtbCApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSA6XG5cblx0XHQvLyBDaGVjayBhZ2FpbnN0IGFsbCBhbmNlc3Rvci9wcmVjZWRpbmcgZWxlbWVudHNcblx0XHRmdW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkge1xuXHRcdFx0dmFyIG9sZENhY2hlLCB1bmlxdWVDYWNoZSwgb3V0ZXJDYWNoZSxcblx0XHRcdFx0bmV3Q2FjaGUgPSBbIGRpcnJ1bnMsIGRvbmVOYW1lIF07XG5cblx0XHRcdC8vIFdlIGNhbid0IHNldCBhcmJpdHJhcnkgZGF0YSBvbiBYTUwgbm9kZXMsIHNvIHRoZXkgZG9uJ3QgYmVuZWZpdCBmcm9tIGNvbWJpbmF0b3IgY2FjaGluZ1xuXHRcdFx0aWYgKCB4bWwgKSB7XG5cdFx0XHRcdHdoaWxlICggKGVsZW0gPSBlbGVtWyBkaXIgXSkgKSB7XG5cdFx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxIHx8IGNoZWNrTm9uRWxlbWVudHMgKSB7XG5cdFx0XHRcdFx0XHRpZiAoIG1hdGNoZXIoIGVsZW0sIGNvbnRleHQsIHhtbCApICkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHdoaWxlICggKGVsZW0gPSBlbGVtWyBkaXIgXSkgKSB7XG5cdFx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxIHx8IGNoZWNrTm9uRWxlbWVudHMgKSB7XG5cdFx0XHRcdFx0XHRvdXRlckNhY2hlID0gZWxlbVsgZXhwYW5kbyBdIHx8IChlbGVtWyBleHBhbmRvIF0gPSB7fSk7XG5cblx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw5IG9ubHlcblx0XHRcdFx0XHRcdC8vIERlZmVuZCBhZ2FpbnN0IGNsb25lZCBhdHRyb3BlcnRpZXMgKGpRdWVyeSBnaC0xNzA5KVxuXHRcdFx0XHRcdFx0dW5pcXVlQ2FjaGUgPSBvdXRlckNhY2hlWyBlbGVtLnVuaXF1ZUlEIF0gfHwgKG91dGVyQ2FjaGVbIGVsZW0udW5pcXVlSUQgXSA9IHt9KTtcblxuXHRcdFx0XHRcdFx0aWYgKCAob2xkQ2FjaGUgPSB1bmlxdWVDYWNoZVsgZGlyIF0pICYmXG5cdFx0XHRcdFx0XHRcdG9sZENhY2hlWyAwIF0gPT09IGRpcnJ1bnMgJiYgb2xkQ2FjaGVbIDEgXSA9PT0gZG9uZU5hbWUgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gQXNzaWduIHRvIG5ld0NhY2hlIHNvIHJlc3VsdHMgYmFjay1wcm9wYWdhdGUgdG8gcHJldmlvdXMgZWxlbWVudHNcblx0XHRcdFx0XHRcdFx0cmV0dXJuIChuZXdDYWNoZVsgMiBdID0gb2xkQ2FjaGVbIDIgXSk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHQvLyBSZXVzZSBuZXdjYWNoZSBzbyByZXN1bHRzIGJhY2stcHJvcGFnYXRlIHRvIHByZXZpb3VzIGVsZW1lbnRzXG5cdFx0XHRcdFx0XHRcdHVuaXF1ZUNhY2hlWyBkaXIgXSA9IG5ld0NhY2hlO1xuXG5cdFx0XHRcdFx0XHRcdC8vIEEgbWF0Y2ggbWVhbnMgd2UncmUgZG9uZTsgYSBmYWlsIG1lYW5zIHdlIGhhdmUgdG8ga2VlcCBjaGVja2luZ1xuXHRcdFx0XHRcdFx0XHRpZiAoIChuZXdDYWNoZVsgMiBdID0gbWF0Y2hlciggZWxlbSwgY29udGV4dCwgeG1sICkpICkge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcbn1cblxuZnVuY3Rpb24gZWxlbWVudE1hdGNoZXIoIG1hdGNoZXJzICkge1xuXHRyZXR1cm4gbWF0Y2hlcnMubGVuZ3RoID4gMSA/XG5cdFx0ZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHtcblx0XHRcdHZhciBpID0gbWF0Y2hlcnMubGVuZ3RoO1xuXHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdGlmICggIW1hdGNoZXJzW2ldKCBlbGVtLCBjb250ZXh0LCB4bWwgKSApIHtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0gOlxuXHRcdG1hdGNoZXJzWzBdO1xufVxuXG5mdW5jdGlvbiBtdWx0aXBsZUNvbnRleHRzKCBzZWxlY3RvciwgY29udGV4dHMsIHJlc3VsdHMgKSB7XG5cdHZhciBpID0gMCxcblx0XHRsZW4gPSBjb250ZXh0cy5sZW5ndGg7XG5cdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdFNpenpsZSggc2VsZWN0b3IsIGNvbnRleHRzW2ldLCByZXN1bHRzICk7XG5cdH1cblx0cmV0dXJuIHJlc3VsdHM7XG59XG5cbmZ1bmN0aW9uIGNvbmRlbnNlKCB1bm1hdGNoZWQsIG1hcCwgZmlsdGVyLCBjb250ZXh0LCB4bWwgKSB7XG5cdHZhciBlbGVtLFxuXHRcdG5ld1VubWF0Y2hlZCA9IFtdLFxuXHRcdGkgPSAwLFxuXHRcdGxlbiA9IHVubWF0Y2hlZC5sZW5ndGgsXG5cdFx0bWFwcGVkID0gbWFwICE9IG51bGw7XG5cblx0Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0aWYgKCAoZWxlbSA9IHVubWF0Y2hlZFtpXSkgKSB7XG5cdFx0XHRpZiAoICFmaWx0ZXIgfHwgZmlsdGVyKCBlbGVtLCBjb250ZXh0LCB4bWwgKSApIHtcblx0XHRcdFx0bmV3VW5tYXRjaGVkLnB1c2goIGVsZW0gKTtcblx0XHRcdFx0aWYgKCBtYXBwZWQgKSB7XG5cdFx0XHRcdFx0bWFwLnB1c2goIGkgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBuZXdVbm1hdGNoZWQ7XG59XG5cbmZ1bmN0aW9uIHNldE1hdGNoZXIoIHByZUZpbHRlciwgc2VsZWN0b3IsIG1hdGNoZXIsIHBvc3RGaWx0ZXIsIHBvc3RGaW5kZXIsIHBvc3RTZWxlY3RvciApIHtcblx0aWYgKCBwb3N0RmlsdGVyICYmICFwb3N0RmlsdGVyWyBleHBhbmRvIF0gKSB7XG5cdFx0cG9zdEZpbHRlciA9IHNldE1hdGNoZXIoIHBvc3RGaWx0ZXIgKTtcblx0fVxuXHRpZiAoIHBvc3RGaW5kZXIgJiYgIXBvc3RGaW5kZXJbIGV4cGFuZG8gXSApIHtcblx0XHRwb3N0RmluZGVyID0gc2V0TWF0Y2hlciggcG9zdEZpbmRlciwgcG9zdFNlbGVjdG9yICk7XG5cdH1cblx0cmV0dXJuIG1hcmtGdW5jdGlvbihmdW5jdGlvbiggc2VlZCwgcmVzdWx0cywgY29udGV4dCwgeG1sICkge1xuXHRcdHZhciB0ZW1wLCBpLCBlbGVtLFxuXHRcdFx0cHJlTWFwID0gW10sXG5cdFx0XHRwb3N0TWFwID0gW10sXG5cdFx0XHRwcmVleGlzdGluZyA9IHJlc3VsdHMubGVuZ3RoLFxuXG5cdFx0XHQvLyBHZXQgaW5pdGlhbCBlbGVtZW50cyBmcm9tIHNlZWQgb3IgY29udGV4dFxuXHRcdFx0ZWxlbXMgPSBzZWVkIHx8IG11bHRpcGxlQ29udGV4dHMoIHNlbGVjdG9yIHx8IFwiKlwiLCBjb250ZXh0Lm5vZGVUeXBlID8gWyBjb250ZXh0IF0gOiBjb250ZXh0LCBbXSApLFxuXG5cdFx0XHQvLyBQcmVmaWx0ZXIgdG8gZ2V0IG1hdGNoZXIgaW5wdXQsIHByZXNlcnZpbmcgYSBtYXAgZm9yIHNlZWQtcmVzdWx0cyBzeW5jaHJvbml6YXRpb25cblx0XHRcdG1hdGNoZXJJbiA9IHByZUZpbHRlciAmJiAoIHNlZWQgfHwgIXNlbGVjdG9yICkgP1xuXHRcdFx0XHRjb25kZW5zZSggZWxlbXMsIHByZU1hcCwgcHJlRmlsdGVyLCBjb250ZXh0LCB4bWwgKSA6XG5cdFx0XHRcdGVsZW1zLFxuXG5cdFx0XHRtYXRjaGVyT3V0ID0gbWF0Y2hlciA/XG5cdFx0XHRcdC8vIElmIHdlIGhhdmUgYSBwb3N0RmluZGVyLCBvciBmaWx0ZXJlZCBzZWVkLCBvciBub24tc2VlZCBwb3N0RmlsdGVyIG9yIHByZWV4aXN0aW5nIHJlc3VsdHMsXG5cdFx0XHRcdHBvc3RGaW5kZXIgfHwgKCBzZWVkID8gcHJlRmlsdGVyIDogcHJlZXhpc3RpbmcgfHwgcG9zdEZpbHRlciApID9cblxuXHRcdFx0XHRcdC8vIC4uLmludGVybWVkaWF0ZSBwcm9jZXNzaW5nIGlzIG5lY2Vzc2FyeVxuXHRcdFx0XHRcdFtdIDpcblxuXHRcdFx0XHRcdC8vIC4uLm90aGVyd2lzZSB1c2UgcmVzdWx0cyBkaXJlY3RseVxuXHRcdFx0XHRcdHJlc3VsdHMgOlxuXHRcdFx0XHRtYXRjaGVySW47XG5cblx0XHQvLyBGaW5kIHByaW1hcnkgbWF0Y2hlc1xuXHRcdGlmICggbWF0Y2hlciApIHtcblx0XHRcdG1hdGNoZXIoIG1hdGNoZXJJbiwgbWF0Y2hlck91dCwgY29udGV4dCwgeG1sICk7XG5cdFx0fVxuXG5cdFx0Ly8gQXBwbHkgcG9zdEZpbHRlclxuXHRcdGlmICggcG9zdEZpbHRlciApIHtcblx0XHRcdHRlbXAgPSBjb25kZW5zZSggbWF0Y2hlck91dCwgcG9zdE1hcCApO1xuXHRcdFx0cG9zdEZpbHRlciggdGVtcCwgW10sIGNvbnRleHQsIHhtbCApO1xuXG5cdFx0XHQvLyBVbi1tYXRjaCBmYWlsaW5nIGVsZW1lbnRzIGJ5IG1vdmluZyB0aGVtIGJhY2sgdG8gbWF0Y2hlckluXG5cdFx0XHRpID0gdGVtcC5sZW5ndGg7XG5cdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0aWYgKCAoZWxlbSA9IHRlbXBbaV0pICkge1xuXHRcdFx0XHRcdG1hdGNoZXJPdXRbIHBvc3RNYXBbaV0gXSA9ICEobWF0Y2hlckluWyBwb3N0TWFwW2ldIF0gPSBlbGVtKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmICggc2VlZCApIHtcblx0XHRcdGlmICggcG9zdEZpbmRlciB8fCBwcmVGaWx0ZXIgKSB7XG5cdFx0XHRcdGlmICggcG9zdEZpbmRlciApIHtcblx0XHRcdFx0XHQvLyBHZXQgdGhlIGZpbmFsIG1hdGNoZXJPdXQgYnkgY29uZGVuc2luZyB0aGlzIGludGVybWVkaWF0ZSBpbnRvIHBvc3RGaW5kZXIgY29udGV4dHNcblx0XHRcdFx0XHR0ZW1wID0gW107XG5cdFx0XHRcdFx0aSA9IG1hdGNoZXJPdXQubGVuZ3RoO1xuXHRcdFx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRcdFx0aWYgKCAoZWxlbSA9IG1hdGNoZXJPdXRbaV0pICkge1xuXHRcdFx0XHRcdFx0XHQvLyBSZXN0b3JlIG1hdGNoZXJJbiBzaW5jZSBlbGVtIGlzIG5vdCB5ZXQgYSBmaW5hbCBtYXRjaFxuXHRcdFx0XHRcdFx0XHR0ZW1wLnB1c2goIChtYXRjaGVySW5baV0gPSBlbGVtKSApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRwb3N0RmluZGVyKCBudWxsLCAobWF0Y2hlck91dCA9IFtdKSwgdGVtcCwgeG1sICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBNb3ZlIG1hdGNoZWQgZWxlbWVudHMgZnJvbSBzZWVkIHRvIHJlc3VsdHMgdG8ga2VlcCB0aGVtIHN5bmNocm9uaXplZFxuXHRcdFx0XHRpID0gbWF0Y2hlck91dC5sZW5ndGg7XG5cdFx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRcdGlmICggKGVsZW0gPSBtYXRjaGVyT3V0W2ldKSAmJlxuXHRcdFx0XHRcdFx0KHRlbXAgPSBwb3N0RmluZGVyID8gaW5kZXhPZiggc2VlZCwgZWxlbSApIDogcHJlTWFwW2ldKSA+IC0xICkge1xuXG5cdFx0XHRcdFx0XHRzZWVkW3RlbXBdID0gIShyZXN1bHRzW3RlbXBdID0gZWxlbSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHQvLyBBZGQgZWxlbWVudHMgdG8gcmVzdWx0cywgdGhyb3VnaCBwb3N0RmluZGVyIGlmIGRlZmluZWRcblx0XHR9IGVsc2Uge1xuXHRcdFx0bWF0Y2hlck91dCA9IGNvbmRlbnNlKFxuXHRcdFx0XHRtYXRjaGVyT3V0ID09PSByZXN1bHRzID9cblx0XHRcdFx0XHRtYXRjaGVyT3V0LnNwbGljZSggcHJlZXhpc3RpbmcsIG1hdGNoZXJPdXQubGVuZ3RoICkgOlxuXHRcdFx0XHRcdG1hdGNoZXJPdXRcblx0XHRcdCk7XG5cdFx0XHRpZiAoIHBvc3RGaW5kZXIgKSB7XG5cdFx0XHRcdHBvc3RGaW5kZXIoIG51bGwsIHJlc3VsdHMsIG1hdGNoZXJPdXQsIHhtbCApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cHVzaC5hcHBseSggcmVzdWx0cywgbWF0Y2hlck91dCApO1xuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG59XG5cbmZ1bmN0aW9uIG1hdGNoZXJGcm9tVG9rZW5zKCB0b2tlbnMgKSB7XG5cdHZhciBjaGVja0NvbnRleHQsIG1hdGNoZXIsIGosXG5cdFx0bGVuID0gdG9rZW5zLmxlbmd0aCxcblx0XHRsZWFkaW5nUmVsYXRpdmUgPSBFeHByLnJlbGF0aXZlWyB0b2tlbnNbMF0udHlwZSBdLFxuXHRcdGltcGxpY2l0UmVsYXRpdmUgPSBsZWFkaW5nUmVsYXRpdmUgfHwgRXhwci5yZWxhdGl2ZVtcIiBcIl0sXG5cdFx0aSA9IGxlYWRpbmdSZWxhdGl2ZSA/IDEgOiAwLFxuXG5cdFx0Ly8gVGhlIGZvdW5kYXRpb25hbCBtYXRjaGVyIGVuc3VyZXMgdGhhdCBlbGVtZW50cyBhcmUgcmVhY2hhYmxlIGZyb20gdG9wLWxldmVsIGNvbnRleHQocylcblx0XHRtYXRjaENvbnRleHQgPSBhZGRDb21iaW5hdG9yKCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBlbGVtID09PSBjaGVja0NvbnRleHQ7XG5cdFx0fSwgaW1wbGljaXRSZWxhdGl2ZSwgdHJ1ZSApLFxuXHRcdG1hdGNoQW55Q29udGV4dCA9IGFkZENvbWJpbmF0b3IoIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGluZGV4T2YoIGNoZWNrQ29udGV4dCwgZWxlbSApID4gLTE7XG5cdFx0fSwgaW1wbGljaXRSZWxhdGl2ZSwgdHJ1ZSApLFxuXHRcdG1hdGNoZXJzID0gWyBmdW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkge1xuXHRcdFx0dmFyIHJldCA9ICggIWxlYWRpbmdSZWxhdGl2ZSAmJiAoIHhtbCB8fCBjb250ZXh0ICE9PSBvdXRlcm1vc3RDb250ZXh0ICkgKSB8fCAoXG5cdFx0XHRcdChjaGVja0NvbnRleHQgPSBjb250ZXh0KS5ub2RlVHlwZSA/XG5cdFx0XHRcdFx0bWF0Y2hDb250ZXh0KCBlbGVtLCBjb250ZXh0LCB4bWwgKSA6XG5cdFx0XHRcdFx0bWF0Y2hBbnlDb250ZXh0KCBlbGVtLCBjb250ZXh0LCB4bWwgKSApO1xuXHRcdFx0Ly8gQXZvaWQgaGFuZ2luZyBvbnRvIGVsZW1lbnQgKGlzc3VlICMyOTkpXG5cdFx0XHRjaGVja0NvbnRleHQgPSBudWxsO1xuXHRcdFx0cmV0dXJuIHJldDtcblx0XHR9IF07XG5cblx0Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0aWYgKCAobWF0Y2hlciA9IEV4cHIucmVsYXRpdmVbIHRva2Vuc1tpXS50eXBlIF0pICkge1xuXHRcdFx0bWF0Y2hlcnMgPSBbIGFkZENvbWJpbmF0b3IoZWxlbWVudE1hdGNoZXIoIG1hdGNoZXJzICksIG1hdGNoZXIpIF07XG5cdFx0fSBlbHNlIHtcblx0XHRcdG1hdGNoZXIgPSBFeHByLmZpbHRlclsgdG9rZW5zW2ldLnR5cGUgXS5hcHBseSggbnVsbCwgdG9rZW5zW2ldLm1hdGNoZXMgKTtcblxuXHRcdFx0Ly8gUmV0dXJuIHNwZWNpYWwgdXBvbiBzZWVpbmcgYSBwb3NpdGlvbmFsIG1hdGNoZXJcblx0XHRcdGlmICggbWF0Y2hlclsgZXhwYW5kbyBdICkge1xuXHRcdFx0XHQvLyBGaW5kIHRoZSBuZXh0IHJlbGF0aXZlIG9wZXJhdG9yIChpZiBhbnkpIGZvciBwcm9wZXIgaGFuZGxpbmdcblx0XHRcdFx0aiA9ICsraTtcblx0XHRcdFx0Zm9yICggOyBqIDwgbGVuOyBqKysgKSB7XG5cdFx0XHRcdFx0aWYgKCBFeHByLnJlbGF0aXZlWyB0b2tlbnNbal0udHlwZSBdICkge1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBzZXRNYXRjaGVyKFxuXHRcdFx0XHRcdGkgPiAxICYmIGVsZW1lbnRNYXRjaGVyKCBtYXRjaGVycyApLFxuXHRcdFx0XHRcdGkgPiAxICYmIHRvU2VsZWN0b3IoXG5cdFx0XHRcdFx0XHQvLyBJZiB0aGUgcHJlY2VkaW5nIHRva2VuIHdhcyBhIGRlc2NlbmRhbnQgY29tYmluYXRvciwgaW5zZXJ0IGFuIGltcGxpY2l0IGFueS1lbGVtZW50IGAqYFxuXHRcdFx0XHRcdFx0dG9rZW5zLnNsaWNlKCAwLCBpIC0gMSApLmNvbmNhdCh7IHZhbHVlOiB0b2tlbnNbIGkgLSAyIF0udHlwZSA9PT0gXCIgXCIgPyBcIipcIiA6IFwiXCIgfSlcblx0XHRcdFx0XHQpLnJlcGxhY2UoIHJ0cmltLCBcIiQxXCIgKSxcblx0XHRcdFx0XHRtYXRjaGVyLFxuXHRcdFx0XHRcdGkgPCBqICYmIG1hdGNoZXJGcm9tVG9rZW5zKCB0b2tlbnMuc2xpY2UoIGksIGogKSApLFxuXHRcdFx0XHRcdGogPCBsZW4gJiYgbWF0Y2hlckZyb21Ub2tlbnMoICh0b2tlbnMgPSB0b2tlbnMuc2xpY2UoIGogKSkgKSxcblx0XHRcdFx0XHRqIDwgbGVuICYmIHRvU2VsZWN0b3IoIHRva2VucyApXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0XHRtYXRjaGVycy5wdXNoKCBtYXRjaGVyICk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGVsZW1lbnRNYXRjaGVyKCBtYXRjaGVycyApO1xufVxuXG5mdW5jdGlvbiBtYXRjaGVyRnJvbUdyb3VwTWF0Y2hlcnMoIGVsZW1lbnRNYXRjaGVycywgc2V0TWF0Y2hlcnMgKSB7XG5cdHZhciBieVNldCA9IHNldE1hdGNoZXJzLmxlbmd0aCA+IDAsXG5cdFx0YnlFbGVtZW50ID0gZWxlbWVudE1hdGNoZXJzLmxlbmd0aCA+IDAsXG5cdFx0c3VwZXJNYXRjaGVyID0gZnVuY3Rpb24oIHNlZWQsIGNvbnRleHQsIHhtbCwgcmVzdWx0cywgb3V0ZXJtb3N0ICkge1xuXHRcdFx0dmFyIGVsZW0sIGosIG1hdGNoZXIsXG5cdFx0XHRcdG1hdGNoZWRDb3VudCA9IDAsXG5cdFx0XHRcdGkgPSBcIjBcIixcblx0XHRcdFx0dW5tYXRjaGVkID0gc2VlZCAmJiBbXSxcblx0XHRcdFx0c2V0TWF0Y2hlZCA9IFtdLFxuXHRcdFx0XHRjb250ZXh0QmFja3VwID0gb3V0ZXJtb3N0Q29udGV4dCxcblx0XHRcdFx0Ly8gV2UgbXVzdCBhbHdheXMgaGF2ZSBlaXRoZXIgc2VlZCBlbGVtZW50cyBvciBvdXRlcm1vc3QgY29udGV4dFxuXHRcdFx0XHRlbGVtcyA9IHNlZWQgfHwgYnlFbGVtZW50ICYmIEV4cHIuZmluZFtcIlRBR1wiXSggXCIqXCIsIG91dGVybW9zdCApLFxuXHRcdFx0XHQvLyBVc2UgaW50ZWdlciBkaXJydW5zIGlmZiB0aGlzIGlzIHRoZSBvdXRlcm1vc3QgbWF0Y2hlclxuXHRcdFx0XHRkaXJydW5zVW5pcXVlID0gKGRpcnJ1bnMgKz0gY29udGV4dEJhY2t1cCA9PSBudWxsID8gMSA6IE1hdGgucmFuZG9tKCkgfHwgMC4xKSxcblx0XHRcdFx0bGVuID0gZWxlbXMubGVuZ3RoO1xuXG5cdFx0XHRpZiAoIG91dGVybW9zdCApIHtcblx0XHRcdFx0b3V0ZXJtb3N0Q29udGV4dCA9IGNvbnRleHQgPT09IGRvY3VtZW50IHx8IGNvbnRleHQgfHwgb3V0ZXJtb3N0O1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBBZGQgZWxlbWVudHMgcGFzc2luZyBlbGVtZW50TWF0Y2hlcnMgZGlyZWN0bHkgdG8gcmVzdWx0c1xuXHRcdFx0Ly8gU3VwcG9ydDogSUU8OSwgU2FmYXJpXG5cdFx0XHQvLyBUb2xlcmF0ZSBOb2RlTGlzdCBwcm9wZXJ0aWVzIChJRTogXCJsZW5ndGhcIjsgU2FmYXJpOiA8bnVtYmVyPikgbWF0Y2hpbmcgZWxlbWVudHMgYnkgaWRcblx0XHRcdGZvciAoIDsgaSAhPT0gbGVuICYmIChlbGVtID0gZWxlbXNbaV0pICE9IG51bGw7IGkrKyApIHtcblx0XHRcdFx0aWYgKCBieUVsZW1lbnQgJiYgZWxlbSApIHtcblx0XHRcdFx0XHRqID0gMDtcblx0XHRcdFx0XHRpZiAoICFjb250ZXh0ICYmIGVsZW0ub3duZXJEb2N1bWVudCAhPT0gZG9jdW1lbnQgKSB7XG5cdFx0XHRcdFx0XHRzZXREb2N1bWVudCggZWxlbSApO1xuXHRcdFx0XHRcdFx0eG1sID0gIWRvY3VtZW50SXNIVE1MO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR3aGlsZSAoIChtYXRjaGVyID0gZWxlbWVudE1hdGNoZXJzW2orK10pICkge1xuXHRcdFx0XHRcdFx0aWYgKCBtYXRjaGVyKCBlbGVtLCBjb250ZXh0IHx8IGRvY3VtZW50LCB4bWwpICkge1xuXHRcdFx0XHRcdFx0XHRyZXN1bHRzLnB1c2goIGVsZW0gKTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmICggb3V0ZXJtb3N0ICkge1xuXHRcdFx0XHRcdFx0ZGlycnVucyA9IGRpcnJ1bnNVbmlxdWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gVHJhY2sgdW5tYXRjaGVkIGVsZW1lbnRzIGZvciBzZXQgZmlsdGVyc1xuXHRcdFx0XHRpZiAoIGJ5U2V0ICkge1xuXHRcdFx0XHRcdC8vIFRoZXkgd2lsbCBoYXZlIGdvbmUgdGhyb3VnaCBhbGwgcG9zc2libGUgbWF0Y2hlcnNcblx0XHRcdFx0XHRpZiAoIChlbGVtID0gIW1hdGNoZXIgJiYgZWxlbSkgKSB7XG5cdFx0XHRcdFx0XHRtYXRjaGVkQ291bnQtLTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBMZW5ndGhlbiB0aGUgYXJyYXkgZm9yIGV2ZXJ5IGVsZW1lbnQsIG1hdGNoZWQgb3Igbm90XG5cdFx0XHRcdFx0aWYgKCBzZWVkICkge1xuXHRcdFx0XHRcdFx0dW5tYXRjaGVkLnB1c2goIGVsZW0gKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gYGlgIGlzIG5vdyB0aGUgY291bnQgb2YgZWxlbWVudHMgdmlzaXRlZCBhYm92ZSwgYW5kIGFkZGluZyBpdCB0byBgbWF0Y2hlZENvdW50YFxuXHRcdFx0Ly8gbWFrZXMgdGhlIGxhdHRlciBub25uZWdhdGl2ZS5cblx0XHRcdG1hdGNoZWRDb3VudCArPSBpO1xuXG5cdFx0XHQvLyBBcHBseSBzZXQgZmlsdGVycyB0byB1bm1hdGNoZWQgZWxlbWVudHNcblx0XHRcdC8vIE5PVEU6IFRoaXMgY2FuIGJlIHNraXBwZWQgaWYgdGhlcmUgYXJlIG5vIHVubWF0Y2hlZCBlbGVtZW50cyAoaS5lLiwgYG1hdGNoZWRDb3VudGBcblx0XHRcdC8vIGVxdWFscyBgaWApLCB1bmxlc3Mgd2UgZGlkbid0IHZpc2l0IF9hbnlfIGVsZW1lbnRzIGluIHRoZSBhYm92ZSBsb29wIGJlY2F1c2Ugd2UgaGF2ZVxuXHRcdFx0Ly8gbm8gZWxlbWVudCBtYXRjaGVycyBhbmQgbm8gc2VlZC5cblx0XHRcdC8vIEluY3JlbWVudGluZyBhbiBpbml0aWFsbHktc3RyaW5nIFwiMFwiIGBpYCBhbGxvd3MgYGlgIHRvIHJlbWFpbiBhIHN0cmluZyBvbmx5IGluIHRoYXRcblx0XHRcdC8vIGNhc2UsIHdoaWNoIHdpbGwgcmVzdWx0IGluIGEgXCIwMFwiIGBtYXRjaGVkQ291bnRgIHRoYXQgZGlmZmVycyBmcm9tIGBpYCBidXQgaXMgYWxzb1xuXHRcdFx0Ly8gbnVtZXJpY2FsbHkgemVyby5cblx0XHRcdGlmICggYnlTZXQgJiYgaSAhPT0gbWF0Y2hlZENvdW50ICkge1xuXHRcdFx0XHRqID0gMDtcblx0XHRcdFx0d2hpbGUgKCAobWF0Y2hlciA9IHNldE1hdGNoZXJzW2orK10pICkge1xuXHRcdFx0XHRcdG1hdGNoZXIoIHVubWF0Y2hlZCwgc2V0TWF0Y2hlZCwgY29udGV4dCwgeG1sICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoIHNlZWQgKSB7XG5cdFx0XHRcdFx0Ly8gUmVpbnRlZ3JhdGUgZWxlbWVudCBtYXRjaGVzIHRvIGVsaW1pbmF0ZSB0aGUgbmVlZCBmb3Igc29ydGluZ1xuXHRcdFx0XHRcdGlmICggbWF0Y2hlZENvdW50ID4gMCApIHtcblx0XHRcdFx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRcdFx0XHRpZiAoICEodW5tYXRjaGVkW2ldIHx8IHNldE1hdGNoZWRbaV0pICkge1xuXHRcdFx0XHRcdFx0XHRcdHNldE1hdGNoZWRbaV0gPSBwb3AuY2FsbCggcmVzdWx0cyApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gRGlzY2FyZCBpbmRleCBwbGFjZWhvbGRlciB2YWx1ZXMgdG8gZ2V0IG9ubHkgYWN0dWFsIG1hdGNoZXNcblx0XHRcdFx0XHRzZXRNYXRjaGVkID0gY29uZGVuc2UoIHNldE1hdGNoZWQgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEFkZCBtYXRjaGVzIHRvIHJlc3VsdHNcblx0XHRcdFx0cHVzaC5hcHBseSggcmVzdWx0cywgc2V0TWF0Y2hlZCApO1xuXG5cdFx0XHRcdC8vIFNlZWRsZXNzIHNldCBtYXRjaGVzIHN1Y2NlZWRpbmcgbXVsdGlwbGUgc3VjY2Vzc2Z1bCBtYXRjaGVycyBzdGlwdWxhdGUgc29ydGluZ1xuXHRcdFx0XHRpZiAoIG91dGVybW9zdCAmJiAhc2VlZCAmJiBzZXRNYXRjaGVkLmxlbmd0aCA+IDAgJiZcblx0XHRcdFx0XHQoIG1hdGNoZWRDb3VudCArIHNldE1hdGNoZXJzLmxlbmd0aCApID4gMSApIHtcblxuXHRcdFx0XHRcdFNpenpsZS51bmlxdWVTb3J0KCByZXN1bHRzICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gT3ZlcnJpZGUgbWFuaXB1bGF0aW9uIG9mIGdsb2JhbHMgYnkgbmVzdGVkIG1hdGNoZXJzXG5cdFx0XHRpZiAoIG91dGVybW9zdCApIHtcblx0XHRcdFx0ZGlycnVucyA9IGRpcnJ1bnNVbmlxdWU7XG5cdFx0XHRcdG91dGVybW9zdENvbnRleHQgPSBjb250ZXh0QmFja3VwO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdW5tYXRjaGVkO1xuXHRcdH07XG5cblx0cmV0dXJuIGJ5U2V0ID9cblx0XHRtYXJrRnVuY3Rpb24oIHN1cGVyTWF0Y2hlciApIDpcblx0XHRzdXBlck1hdGNoZXI7XG59XG5cbmNvbXBpbGUgPSBTaXp6bGUuY29tcGlsZSA9IGZ1bmN0aW9uKCBzZWxlY3RvciwgbWF0Y2ggLyogSW50ZXJuYWwgVXNlIE9ubHkgKi8gKSB7XG5cdHZhciBpLFxuXHRcdHNldE1hdGNoZXJzID0gW10sXG5cdFx0ZWxlbWVudE1hdGNoZXJzID0gW10sXG5cdFx0Y2FjaGVkID0gY29tcGlsZXJDYWNoZVsgc2VsZWN0b3IgKyBcIiBcIiBdO1xuXG5cdGlmICggIWNhY2hlZCApIHtcblx0XHQvLyBHZW5lcmF0ZSBhIGZ1bmN0aW9uIG9mIHJlY3Vyc2l2ZSBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgdXNlZCB0byBjaGVjayBlYWNoIGVsZW1lbnRcblx0XHRpZiAoICFtYXRjaCApIHtcblx0XHRcdG1hdGNoID0gdG9rZW5pemUoIHNlbGVjdG9yICk7XG5cdFx0fVxuXHRcdGkgPSBtYXRjaC5sZW5ndGg7XG5cdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRjYWNoZWQgPSBtYXRjaGVyRnJvbVRva2VucyggbWF0Y2hbaV0gKTtcblx0XHRcdGlmICggY2FjaGVkWyBleHBhbmRvIF0gKSB7XG5cdFx0XHRcdHNldE1hdGNoZXJzLnB1c2goIGNhY2hlZCApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZWxlbWVudE1hdGNoZXJzLnB1c2goIGNhY2hlZCApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIENhY2hlIHRoZSBjb21waWxlZCBmdW5jdGlvblxuXHRcdGNhY2hlZCA9IGNvbXBpbGVyQ2FjaGUoIHNlbGVjdG9yLCBtYXRjaGVyRnJvbUdyb3VwTWF0Y2hlcnMoIGVsZW1lbnRNYXRjaGVycywgc2V0TWF0Y2hlcnMgKSApO1xuXG5cdFx0Ly8gU2F2ZSBzZWxlY3RvciBhbmQgdG9rZW5pemF0aW9uXG5cdFx0Y2FjaGVkLnNlbGVjdG9yID0gc2VsZWN0b3I7XG5cdH1cblx0cmV0dXJuIGNhY2hlZDtcbn07XG5cbi8qKlxuICogQSBsb3ctbGV2ZWwgc2VsZWN0aW9uIGZ1bmN0aW9uIHRoYXQgd29ya3Mgd2l0aCBTaXp6bGUncyBjb21waWxlZFxuICogIHNlbGVjdG9yIGZ1bmN0aW9uc1xuICogQHBhcmFtIHtTdHJpbmd8RnVuY3Rpb259IHNlbGVjdG9yIEEgc2VsZWN0b3Igb3IgYSBwcmUtY29tcGlsZWRcbiAqICBzZWxlY3RvciBmdW5jdGlvbiBidWlsdCB3aXRoIFNpenpsZS5jb21waWxlXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGNvbnRleHRcbiAqIEBwYXJhbSB7QXJyYXl9IFtyZXN1bHRzXVxuICogQHBhcmFtIHtBcnJheX0gW3NlZWRdIEEgc2V0IG9mIGVsZW1lbnRzIHRvIG1hdGNoIGFnYWluc3RcbiAqL1xuc2VsZWN0ID0gU2l6emxlLnNlbGVjdCA9IGZ1bmN0aW9uKCBzZWxlY3RvciwgY29udGV4dCwgcmVzdWx0cywgc2VlZCApIHtcblx0dmFyIGksIHRva2VucywgdG9rZW4sIHR5cGUsIGZpbmQsXG5cdFx0Y29tcGlsZWQgPSB0eXBlb2Ygc2VsZWN0b3IgPT09IFwiZnVuY3Rpb25cIiAmJiBzZWxlY3Rvcixcblx0XHRtYXRjaCA9ICFzZWVkICYmIHRva2VuaXplKCAoc2VsZWN0b3IgPSBjb21waWxlZC5zZWxlY3RvciB8fCBzZWxlY3RvcikgKTtcblxuXHRyZXN1bHRzID0gcmVzdWx0cyB8fCBbXTtcblxuXHQvLyBUcnkgdG8gbWluaW1pemUgb3BlcmF0aW9ucyBpZiB0aGVyZSBpcyBvbmx5IG9uZSBzZWxlY3RvciBpbiB0aGUgbGlzdCBhbmQgbm8gc2VlZFxuXHQvLyAodGhlIGxhdHRlciBvZiB3aGljaCBndWFyYW50ZWVzIHVzIGNvbnRleHQpXG5cdGlmICggbWF0Y2gubGVuZ3RoID09PSAxICkge1xuXG5cdFx0Ly8gUmVkdWNlIGNvbnRleHQgaWYgdGhlIGxlYWRpbmcgY29tcG91bmQgc2VsZWN0b3IgaXMgYW4gSURcblx0XHR0b2tlbnMgPSBtYXRjaFswXSA9IG1hdGNoWzBdLnNsaWNlKCAwICk7XG5cdFx0aWYgKCB0b2tlbnMubGVuZ3RoID4gMiAmJiAodG9rZW4gPSB0b2tlbnNbMF0pLnR5cGUgPT09IFwiSURcIiAmJlxuXHRcdFx0XHRzdXBwb3J0LmdldEJ5SWQgJiYgY29udGV4dC5ub2RlVHlwZSA9PT0gOSAmJiBkb2N1bWVudElzSFRNTCAmJlxuXHRcdFx0XHRFeHByLnJlbGF0aXZlWyB0b2tlbnNbMV0udHlwZSBdICkge1xuXG5cdFx0XHRjb250ZXh0ID0gKCBFeHByLmZpbmRbXCJJRFwiXSggdG9rZW4ubWF0Y2hlc1swXS5yZXBsYWNlKHJ1bmVzY2FwZSwgZnVuZXNjYXBlKSwgY29udGV4dCApIHx8IFtdIClbMF07XG5cdFx0XHRpZiAoICFjb250ZXh0ICkge1xuXHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblxuXHRcdFx0Ly8gUHJlY29tcGlsZWQgbWF0Y2hlcnMgd2lsbCBzdGlsbCB2ZXJpZnkgYW5jZXN0cnksIHNvIHN0ZXAgdXAgYSBsZXZlbFxuXHRcdFx0fSBlbHNlIGlmICggY29tcGlsZWQgKSB7XG5cdFx0XHRcdGNvbnRleHQgPSBjb250ZXh0LnBhcmVudE5vZGU7XG5cdFx0XHR9XG5cblx0XHRcdHNlbGVjdG9yID0gc2VsZWN0b3Iuc2xpY2UoIHRva2Vucy5zaGlmdCgpLnZhbHVlLmxlbmd0aCApO1xuXHRcdH1cblxuXHRcdC8vIEZldGNoIGEgc2VlZCBzZXQgZm9yIHJpZ2h0LXRvLWxlZnQgbWF0Y2hpbmdcblx0XHRpID0gbWF0Y2hFeHByW1wibmVlZHNDb250ZXh0XCJdLnRlc3QoIHNlbGVjdG9yICkgPyAwIDogdG9rZW5zLmxlbmd0aDtcblx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdHRva2VuID0gdG9rZW5zW2ldO1xuXG5cdFx0XHQvLyBBYm9ydCBpZiB3ZSBoaXQgYSBjb21iaW5hdG9yXG5cdFx0XHRpZiAoIEV4cHIucmVsYXRpdmVbICh0eXBlID0gdG9rZW4udHlwZSkgXSApIHtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIChmaW5kID0gRXhwci5maW5kWyB0eXBlIF0pICkge1xuXHRcdFx0XHQvLyBTZWFyY2gsIGV4cGFuZGluZyBjb250ZXh0IGZvciBsZWFkaW5nIHNpYmxpbmcgY29tYmluYXRvcnNcblx0XHRcdFx0aWYgKCAoc2VlZCA9IGZpbmQoXG5cdFx0XHRcdFx0dG9rZW4ubWF0Y2hlc1swXS5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApLFxuXHRcdFx0XHRcdHJzaWJsaW5nLnRlc3QoIHRva2Vuc1swXS50eXBlICkgJiYgdGVzdENvbnRleHQoIGNvbnRleHQucGFyZW50Tm9kZSApIHx8IGNvbnRleHRcblx0XHRcdFx0KSkgKSB7XG5cblx0XHRcdFx0XHQvLyBJZiBzZWVkIGlzIGVtcHR5IG9yIG5vIHRva2VucyByZW1haW4sIHdlIGNhbiByZXR1cm4gZWFybHlcblx0XHRcdFx0XHR0b2tlbnMuc3BsaWNlKCBpLCAxICk7XG5cdFx0XHRcdFx0c2VsZWN0b3IgPSBzZWVkLmxlbmd0aCAmJiB0b1NlbGVjdG9yKCB0b2tlbnMgKTtcblx0XHRcdFx0XHRpZiAoICFzZWxlY3RvciApIHtcblx0XHRcdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsIHNlZWQgKTtcblx0XHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gQ29tcGlsZSBhbmQgZXhlY3V0ZSBhIGZpbHRlcmluZyBmdW5jdGlvbiBpZiBvbmUgaXMgbm90IHByb3ZpZGVkXG5cdC8vIFByb3ZpZGUgYG1hdGNoYCB0byBhdm9pZCByZXRva2VuaXphdGlvbiBpZiB3ZSBtb2RpZmllZCB0aGUgc2VsZWN0b3IgYWJvdmVcblx0KCBjb21waWxlZCB8fCBjb21waWxlKCBzZWxlY3RvciwgbWF0Y2ggKSApKFxuXHRcdHNlZWQsXG5cdFx0Y29udGV4dCxcblx0XHQhZG9jdW1lbnRJc0hUTUwsXG5cdFx0cmVzdWx0cyxcblx0XHQhY29udGV4dCB8fCByc2libGluZy50ZXN0KCBzZWxlY3RvciApICYmIHRlc3RDb250ZXh0KCBjb250ZXh0LnBhcmVudE5vZGUgKSB8fCBjb250ZXh0XG5cdCk7XG5cdHJldHVybiByZXN1bHRzO1xufTtcblxuLy8gT25lLXRpbWUgYXNzaWdubWVudHNcblxuLy8gU29ydCBzdGFiaWxpdHlcbnN1cHBvcnQuc29ydFN0YWJsZSA9IGV4cGFuZG8uc3BsaXQoXCJcIikuc29ydCggc29ydE9yZGVyICkuam9pbihcIlwiKSA9PT0gZXhwYW5kbztcblxuLy8gU3VwcG9ydDogQ2hyb21lIDE0LTM1K1xuLy8gQWx3YXlzIGFzc3VtZSBkdXBsaWNhdGVzIGlmIHRoZXkgYXJlbid0IHBhc3NlZCB0byB0aGUgY29tcGFyaXNvbiBmdW5jdGlvblxuc3VwcG9ydC5kZXRlY3REdXBsaWNhdGVzID0gISFoYXNEdXBsaWNhdGU7XG5cbi8vIEluaXRpYWxpemUgYWdhaW5zdCB0aGUgZGVmYXVsdCBkb2N1bWVudFxuc2V0RG9jdW1lbnQoKTtcblxuLy8gU3VwcG9ydDogV2Via2l0PDUzNy4zMiAtIFNhZmFyaSA2LjAuMy9DaHJvbWUgMjUgKGZpeGVkIGluIENocm9tZSAyNylcbi8vIERldGFjaGVkIG5vZGVzIGNvbmZvdW5kaW5nbHkgZm9sbG93ICplYWNoIG90aGVyKlxuc3VwcG9ydC5zb3J0RGV0YWNoZWQgPSBhc3NlcnQoZnVuY3Rpb24oIGRpdjEgKSB7XG5cdC8vIFNob3VsZCByZXR1cm4gMSwgYnV0IHJldHVybnMgNCAoZm9sbG93aW5nKVxuXHRyZXR1cm4gZGl2MS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiggZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSApICYgMTtcbn0pO1xuXG4vLyBTdXBwb3J0OiBJRTw4XG4vLyBQcmV2ZW50IGF0dHJpYnV0ZS9wcm9wZXJ0eSBcImludGVycG9sYXRpb25cIlxuLy8gaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L21zNTM2NDI5JTI4VlMuODUlMjkuYXNweFxuaWYgKCAhYXNzZXJ0KGZ1bmN0aW9uKCBkaXYgKSB7XG5cdGRpdi5pbm5lckhUTUwgPSBcIjxhIGhyZWY9JyMnPjwvYT5cIjtcblx0cmV0dXJuIGRpdi5maXJzdENoaWxkLmdldEF0dHJpYnV0ZShcImhyZWZcIikgPT09IFwiI1wiIDtcbn0pICkge1xuXHRhZGRIYW5kbGUoIFwidHlwZXxocmVmfGhlaWdodHx3aWR0aFwiLCBmdW5jdGlvbiggZWxlbSwgbmFtZSwgaXNYTUwgKSB7XG5cdFx0aWYgKCAhaXNYTUwgKSB7XG5cdFx0XHRyZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUoIG5hbWUsIG5hbWUudG9Mb3dlckNhc2UoKSA9PT0gXCJ0eXBlXCIgPyAxIDogMiApO1xuXHRcdH1cblx0fSk7XG59XG5cbi8vIFN1cHBvcnQ6IElFPDlcbi8vIFVzZSBkZWZhdWx0VmFsdWUgaW4gcGxhY2Ugb2YgZ2V0QXR0cmlidXRlKFwidmFsdWVcIilcbmlmICggIXN1cHBvcnQuYXR0cmlidXRlcyB8fCAhYXNzZXJ0KGZ1bmN0aW9uKCBkaXYgKSB7XG5cdGRpdi5pbm5lckhUTUwgPSBcIjxpbnB1dC8+XCI7XG5cdGRpdi5maXJzdENoaWxkLnNldEF0dHJpYnV0ZSggXCJ2YWx1ZVwiLCBcIlwiICk7XG5cdHJldHVybiBkaXYuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoIFwidmFsdWVcIiApID09PSBcIlwiO1xufSkgKSB7XG5cdGFkZEhhbmRsZSggXCJ2YWx1ZVwiLCBmdW5jdGlvbiggZWxlbSwgbmFtZSwgaXNYTUwgKSB7XG5cdFx0aWYgKCAhaXNYTUwgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBcImlucHV0XCIgKSB7XG5cdFx0XHRyZXR1cm4gZWxlbS5kZWZhdWx0VmFsdWU7XG5cdFx0fVxuXHR9KTtcbn1cblxuLy8gU3VwcG9ydDogSUU8OVxuLy8gVXNlIGdldEF0dHJpYnV0ZU5vZGUgdG8gZmV0Y2ggYm9vbGVhbnMgd2hlbiBnZXRBdHRyaWJ1dGUgbGllc1xuaWYgKCAhYXNzZXJ0KGZ1bmN0aW9uKCBkaXYgKSB7XG5cdHJldHVybiBkaXYuZ2V0QXR0cmlidXRlKFwiZGlzYWJsZWRcIikgPT0gbnVsbDtcbn0pICkge1xuXHRhZGRIYW5kbGUoIGJvb2xlYW5zLCBmdW5jdGlvbiggZWxlbSwgbmFtZSwgaXNYTUwgKSB7XG5cdFx0dmFyIHZhbDtcblx0XHRpZiAoICFpc1hNTCApIHtcblx0XHRcdHJldHVybiBlbGVtWyBuYW1lIF0gPT09IHRydWUgPyBuYW1lLnRvTG93ZXJDYXNlKCkgOlxuXHRcdFx0XHRcdCh2YWwgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoIG5hbWUgKSkgJiYgdmFsLnNwZWNpZmllZCA/XG5cdFx0XHRcdFx0dmFsLnZhbHVlIDpcblx0XHRcdFx0bnVsbDtcblx0XHR9XG5cdH0pO1xufVxuXG5yZXR1cm4gU2l6emxlO1xuXG59KSggd2luZG93ICk7XG5cblxuXG5qUXVlcnkuZmluZCA9IFNpenpsZTtcbmpRdWVyeS5leHByID0gU2l6emxlLnNlbGVjdG9ycztcbmpRdWVyeS5leHByWyBcIjpcIiBdID0galF1ZXJ5LmV4cHIucHNldWRvcztcbmpRdWVyeS51bmlxdWVTb3J0ID0galF1ZXJ5LnVuaXF1ZSA9IFNpenpsZS51bmlxdWVTb3J0O1xualF1ZXJ5LnRleHQgPSBTaXp6bGUuZ2V0VGV4dDtcbmpRdWVyeS5pc1hNTERvYyA9IFNpenpsZS5pc1hNTDtcbmpRdWVyeS5jb250YWlucyA9IFNpenpsZS5jb250YWlucztcblxuXG5cbnZhciBkaXIgPSBmdW5jdGlvbiggZWxlbSwgZGlyLCB1bnRpbCApIHtcblx0dmFyIG1hdGNoZWQgPSBbXSxcblx0XHR0cnVuY2F0ZSA9IHVudGlsICE9PSB1bmRlZmluZWQ7XG5cblx0d2hpbGUgKCAoIGVsZW0gPSBlbGVtWyBkaXIgXSApICYmIGVsZW0ubm9kZVR5cGUgIT09IDkgKSB7XG5cdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXHRcdFx0aWYgKCB0cnVuY2F0ZSAmJiBqUXVlcnkoIGVsZW0gKS5pcyggdW50aWwgKSApIHtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRtYXRjaGVkLnB1c2goIGVsZW0gKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIG1hdGNoZWQ7XG59O1xuXG5cbnZhciBzaWJsaW5ncyA9IGZ1bmN0aW9uKCBuLCBlbGVtICkge1xuXHR2YXIgbWF0Y2hlZCA9IFtdO1xuXG5cdGZvciAoIDsgbjsgbiA9IG4ubmV4dFNpYmxpbmcgKSB7XG5cdFx0aWYgKCBuLm5vZGVUeXBlID09PSAxICYmIG4gIT09IGVsZW0gKSB7XG5cdFx0XHRtYXRjaGVkLnB1c2goIG4gKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gbWF0Y2hlZDtcbn07XG5cblxudmFyIHJuZWVkc0NvbnRleHQgPSBqUXVlcnkuZXhwci5tYXRjaC5uZWVkc0NvbnRleHQ7XG5cbnZhciByc2luZ2xlVGFnID0gKCAvXjwoW1xcdy1dKylcXHMqXFwvPz4oPzo8XFwvXFwxPnwpJC8gKTtcblxuXG5cbnZhciByaXNTaW1wbGUgPSAvXi5bXjojXFxbXFwuLF0qJC87XG5cbi8vIEltcGxlbWVudCB0aGUgaWRlbnRpY2FsIGZ1bmN0aW9uYWxpdHkgZm9yIGZpbHRlciBhbmQgbm90XG5mdW5jdGlvbiB3aW5ub3coIGVsZW1lbnRzLCBxdWFsaWZpZXIsIG5vdCApIHtcblx0aWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggcXVhbGlmaWVyICkgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5ncmVwKCBlbGVtZW50cywgZnVuY3Rpb24oIGVsZW0sIGkgKSB7XG5cdFx0XHQvKiBqc2hpbnQgLVcwMTggKi9cblx0XHRcdHJldHVybiAhIXF1YWxpZmllci5jYWxsKCBlbGVtLCBpLCBlbGVtICkgIT09IG5vdDtcblx0XHR9ICk7XG5cblx0fVxuXG5cdGlmICggcXVhbGlmaWVyLm5vZGVUeXBlICkge1xuXHRcdHJldHVybiBqUXVlcnkuZ3JlcCggZWxlbWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuICggZWxlbSA9PT0gcXVhbGlmaWVyICkgIT09IG5vdDtcblx0XHR9ICk7XG5cblx0fVxuXG5cdGlmICggdHlwZW9mIHF1YWxpZmllciA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRpZiAoIHJpc1NpbXBsZS50ZXN0KCBxdWFsaWZpZXIgKSApIHtcblx0XHRcdHJldHVybiBqUXVlcnkuZmlsdGVyKCBxdWFsaWZpZXIsIGVsZW1lbnRzLCBub3QgKTtcblx0XHR9XG5cblx0XHRxdWFsaWZpZXIgPSBqUXVlcnkuZmlsdGVyKCBxdWFsaWZpZXIsIGVsZW1lbnRzICk7XG5cdH1cblxuXHRyZXR1cm4galF1ZXJ5LmdyZXAoIGVsZW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gKCBpbmRleE9mLmNhbGwoIHF1YWxpZmllciwgZWxlbSApID4gLTEgKSAhPT0gbm90O1xuXHR9ICk7XG59XG5cbmpRdWVyeS5maWx0ZXIgPSBmdW5jdGlvbiggZXhwciwgZWxlbXMsIG5vdCApIHtcblx0dmFyIGVsZW0gPSBlbGVtc1sgMCBdO1xuXG5cdGlmICggbm90ICkge1xuXHRcdGV4cHIgPSBcIjpub3QoXCIgKyBleHByICsgXCIpXCI7XG5cdH1cblxuXHRyZXR1cm4gZWxlbXMubGVuZ3RoID09PSAxICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgP1xuXHRcdGpRdWVyeS5maW5kLm1hdGNoZXNTZWxlY3RvciggZWxlbSwgZXhwciApID8gWyBlbGVtIF0gOiBbXSA6XG5cdFx0alF1ZXJ5LmZpbmQubWF0Y2hlcyggZXhwciwgalF1ZXJ5LmdyZXAoIGVsZW1zLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBlbGVtLm5vZGVUeXBlID09PSAxO1xuXHRcdH0gKSApO1xufTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRmaW5kOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0dmFyIGksXG5cdFx0XHRsZW4gPSB0aGlzLmxlbmd0aCxcblx0XHRcdHJldCA9IFtdLFxuXHRcdFx0c2VsZiA9IHRoaXM7XG5cblx0XHRpZiAoIHR5cGVvZiBzZWxlY3RvciAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggalF1ZXJ5KCBzZWxlY3RvciApLmZpbHRlciggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGZvciAoIGkgPSAwOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0XHRcdFx0aWYgKCBqUXVlcnkuY29udGFpbnMoIHNlbGZbIGkgXSwgdGhpcyApICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9ICkgKTtcblx0XHR9XG5cblx0XHRmb3IgKCBpID0gMDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdFx0alF1ZXJ5LmZpbmQoIHNlbGVjdG9yLCBzZWxmWyBpIF0sIHJldCApO1xuXHRcdH1cblxuXHRcdC8vIE5lZWRlZCBiZWNhdXNlICQoIHNlbGVjdG9yLCBjb250ZXh0ICkgYmVjb21lcyAkKCBjb250ZXh0ICkuZmluZCggc2VsZWN0b3IgKVxuXHRcdHJldCA9IHRoaXMucHVzaFN0YWNrKCBsZW4gPiAxID8galF1ZXJ5LnVuaXF1ZSggcmV0ICkgOiByZXQgKTtcblx0XHRyZXQuc2VsZWN0b3IgPSB0aGlzLnNlbGVjdG9yID8gdGhpcy5zZWxlY3RvciArIFwiIFwiICsgc2VsZWN0b3IgOiBzZWxlY3Rvcjtcblx0XHRyZXR1cm4gcmV0O1xuXHR9LFxuXHRmaWx0ZXI6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIHdpbm5vdyggdGhpcywgc2VsZWN0b3IgfHwgW10sIGZhbHNlICkgKTtcblx0fSxcblx0bm90OiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCB3aW5ub3coIHRoaXMsIHNlbGVjdG9yIHx8IFtdLCB0cnVlICkgKTtcblx0fSxcblx0aXM6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRyZXR1cm4gISF3aW5ub3coXG5cdFx0XHR0aGlzLFxuXG5cdFx0XHQvLyBJZiB0aGlzIGlzIGEgcG9zaXRpb25hbC9yZWxhdGl2ZSBzZWxlY3RvciwgY2hlY2sgbWVtYmVyc2hpcCBpbiB0aGUgcmV0dXJuZWQgc2V0XG5cdFx0XHQvLyBzbyAkKFwicDpmaXJzdFwiKS5pcyhcInA6bGFzdFwiKSB3b24ndCByZXR1cm4gdHJ1ZSBmb3IgYSBkb2Mgd2l0aCB0d28gXCJwXCIuXG5cdFx0XHR0eXBlb2Ygc2VsZWN0b3IgPT09IFwic3RyaW5nXCIgJiYgcm5lZWRzQ29udGV4dC50ZXN0KCBzZWxlY3RvciApID9cblx0XHRcdFx0alF1ZXJ5KCBzZWxlY3RvciApIDpcblx0XHRcdFx0c2VsZWN0b3IgfHwgW10sXG5cdFx0XHRmYWxzZVxuXHRcdCkubGVuZ3RoO1xuXHR9XG59ICk7XG5cblxuLy8gSW5pdGlhbGl6ZSBhIGpRdWVyeSBvYmplY3RcblxuXG4vLyBBIGNlbnRyYWwgcmVmZXJlbmNlIHRvIHRoZSByb290IGpRdWVyeShkb2N1bWVudClcbnZhciByb290alF1ZXJ5LFxuXG5cdC8vIEEgc2ltcGxlIHdheSB0byBjaGVjayBmb3IgSFRNTCBzdHJpbmdzXG5cdC8vIFByaW9yaXRpemUgI2lkIG92ZXIgPHRhZz4gdG8gYXZvaWQgWFNTIHZpYSBsb2NhdGlvbi5oYXNoICgjOTUyMSlcblx0Ly8gU3RyaWN0IEhUTUwgcmVjb2duaXRpb24gKCMxMTI5MDogbXVzdCBzdGFydCB3aXRoIDwpXG5cdHJxdWlja0V4cHIgPSAvXig/OlxccyooPFtcXHdcXFddKz4pW14+XSp8IyhbXFx3LV0qKSkkLyxcblxuXHRpbml0ID0galF1ZXJ5LmZuLmluaXQgPSBmdW5jdGlvbiggc2VsZWN0b3IsIGNvbnRleHQsIHJvb3QgKSB7XG5cdFx0dmFyIG1hdGNoLCBlbGVtO1xuXG5cdFx0Ly8gSEFORExFOiAkKFwiXCIpLCAkKG51bGwpLCAkKHVuZGVmaW5lZCksICQoZmFsc2UpXG5cdFx0aWYgKCAhc2VsZWN0b3IgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cblx0XHQvLyBNZXRob2QgaW5pdCgpIGFjY2VwdHMgYW4gYWx0ZXJuYXRlIHJvb3RqUXVlcnlcblx0XHQvLyBzbyBtaWdyYXRlIGNhbiBzdXBwb3J0IGpRdWVyeS5zdWIgKGdoLTIxMDEpXG5cdFx0cm9vdCA9IHJvb3QgfHwgcm9vdGpRdWVyeTtcblxuXHRcdC8vIEhhbmRsZSBIVE1MIHN0cmluZ3Ncblx0XHRpZiAoIHR5cGVvZiBzZWxlY3RvciA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdGlmICggc2VsZWN0b3JbIDAgXSA9PT0gXCI8XCIgJiZcblx0XHRcdFx0c2VsZWN0b3JbIHNlbGVjdG9yLmxlbmd0aCAtIDEgXSA9PT0gXCI+XCIgJiZcblx0XHRcdFx0c2VsZWN0b3IubGVuZ3RoID49IDMgKSB7XG5cblx0XHRcdFx0Ly8gQXNzdW1lIHRoYXQgc3RyaW5ncyB0aGF0IHN0YXJ0IGFuZCBlbmQgd2l0aCA8PiBhcmUgSFRNTCBhbmQgc2tpcCB0aGUgcmVnZXggY2hlY2tcblx0XHRcdFx0bWF0Y2ggPSBbIG51bGwsIHNlbGVjdG9yLCBudWxsIF07XG5cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG1hdGNoID0gcnF1aWNrRXhwci5leGVjKCBzZWxlY3RvciApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBNYXRjaCBodG1sIG9yIG1ha2Ugc3VyZSBubyBjb250ZXh0IGlzIHNwZWNpZmllZCBmb3IgI2lkXG5cdFx0XHRpZiAoIG1hdGNoICYmICggbWF0Y2hbIDEgXSB8fCAhY29udGV4dCApICkge1xuXG5cdFx0XHRcdC8vIEhBTkRMRTogJChodG1sKSAtPiAkKGFycmF5KVxuXHRcdFx0XHRpZiAoIG1hdGNoWyAxIF0gKSB7XG5cdFx0XHRcdFx0Y29udGV4dCA9IGNvbnRleHQgaW5zdGFuY2VvZiBqUXVlcnkgPyBjb250ZXh0WyAwIF0gOiBjb250ZXh0O1xuXG5cdFx0XHRcdFx0Ly8gT3B0aW9uIHRvIHJ1biBzY3JpcHRzIGlzIHRydWUgZm9yIGJhY2stY29tcGF0XG5cdFx0XHRcdFx0Ly8gSW50ZW50aW9uYWxseSBsZXQgdGhlIGVycm9yIGJlIHRocm93biBpZiBwYXJzZUhUTUwgaXMgbm90IHByZXNlbnRcblx0XHRcdFx0XHRqUXVlcnkubWVyZ2UoIHRoaXMsIGpRdWVyeS5wYXJzZUhUTUwoXG5cdFx0XHRcdFx0XHRtYXRjaFsgMSBdLFxuXHRcdFx0XHRcdFx0Y29udGV4dCAmJiBjb250ZXh0Lm5vZGVUeXBlID8gY29udGV4dC5vd25lckRvY3VtZW50IHx8IGNvbnRleHQgOiBkb2N1bWVudCxcblx0XHRcdFx0XHRcdHRydWVcblx0XHRcdFx0XHQpICk7XG5cblx0XHRcdFx0XHQvLyBIQU5ETEU6ICQoaHRtbCwgcHJvcHMpXG5cdFx0XHRcdFx0aWYgKCByc2luZ2xlVGFnLnRlc3QoIG1hdGNoWyAxIF0gKSAmJiBqUXVlcnkuaXNQbGFpbk9iamVjdCggY29udGV4dCApICkge1xuXHRcdFx0XHRcdFx0Zm9yICggbWF0Y2ggaW4gY29udGV4dCApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBQcm9wZXJ0aWVzIG9mIGNvbnRleHQgYXJlIGNhbGxlZCBhcyBtZXRob2RzIGlmIHBvc3NpYmxlXG5cdFx0XHRcdFx0XHRcdGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIHRoaXNbIG1hdGNoIF0gKSApIHtcblx0XHRcdFx0XHRcdFx0XHR0aGlzWyBtYXRjaCBdKCBjb250ZXh0WyBtYXRjaCBdICk7XG5cblx0XHRcdFx0XHRcdFx0Ly8gLi4uYW5kIG90aGVyd2lzZSBzZXQgYXMgYXR0cmlidXRlc1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMuYXR0ciggbWF0Y2gsIGNvbnRleHRbIG1hdGNoIF0gKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXG5cdFx0XHRcdC8vIEhBTkRMRTogJCgjaWQpXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCBtYXRjaFsgMiBdICk7XG5cblx0XHRcdFx0XHQvLyBTdXBwb3J0OiBCbGFja2JlcnJ5IDQuNlxuXHRcdFx0XHRcdC8vIGdFQklEIHJldHVybnMgbm9kZXMgbm8gbG9uZ2VyIGluIHRoZSBkb2N1bWVudCAoIzY5NjMpXG5cdFx0XHRcdFx0aWYgKCBlbGVtICYmIGVsZW0ucGFyZW50Tm9kZSApIHtcblxuXHRcdFx0XHRcdFx0Ly8gSW5qZWN0IHRoZSBlbGVtZW50IGRpcmVjdGx5IGludG8gdGhlIGpRdWVyeSBvYmplY3Rcblx0XHRcdFx0XHRcdHRoaXMubGVuZ3RoID0gMTtcblx0XHRcdFx0XHRcdHRoaXNbIDAgXSA9IGVsZW07XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0dGhpcy5jb250ZXh0ID0gZG9jdW1lbnQ7XG5cdFx0XHRcdFx0dGhpcy5zZWxlY3RvciA9IHNlbGVjdG9yO1xuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9XG5cblx0XHRcdC8vIEhBTkRMRTogJChleHByLCAkKC4uLikpXG5cdFx0XHR9IGVsc2UgaWYgKCAhY29udGV4dCB8fCBjb250ZXh0LmpxdWVyeSApIHtcblx0XHRcdFx0cmV0dXJuICggY29udGV4dCB8fCByb290ICkuZmluZCggc2VsZWN0b3IgKTtcblxuXHRcdFx0Ly8gSEFORExFOiAkKGV4cHIsIGNvbnRleHQpXG5cdFx0XHQvLyAod2hpY2ggaXMganVzdCBlcXVpdmFsZW50IHRvOiAkKGNvbnRleHQpLmZpbmQoZXhwcilcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmNvbnN0cnVjdG9yKCBjb250ZXh0ICkuZmluZCggc2VsZWN0b3IgKTtcblx0XHRcdH1cblxuXHRcdC8vIEhBTkRMRTogJChET01FbGVtZW50KVxuXHRcdH0gZWxzZSBpZiAoIHNlbGVjdG9yLm5vZGVUeXBlICkge1xuXHRcdFx0dGhpcy5jb250ZXh0ID0gdGhpc1sgMCBdID0gc2VsZWN0b3I7XG5cdFx0XHR0aGlzLmxlbmd0aCA9IDE7XG5cdFx0XHRyZXR1cm4gdGhpcztcblxuXHRcdC8vIEhBTkRMRTogJChmdW5jdGlvbilcblx0XHQvLyBTaG9ydGN1dCBmb3IgZG9jdW1lbnQgcmVhZHlcblx0XHR9IGVsc2UgaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggc2VsZWN0b3IgKSApIHtcblx0XHRcdHJldHVybiByb290LnJlYWR5ICE9PSB1bmRlZmluZWQgP1xuXHRcdFx0XHRyb290LnJlYWR5KCBzZWxlY3RvciApIDpcblxuXHRcdFx0XHQvLyBFeGVjdXRlIGltbWVkaWF0ZWx5IGlmIHJlYWR5IGlzIG5vdCBwcmVzZW50XG5cdFx0XHRcdHNlbGVjdG9yKCBqUXVlcnkgKTtcblx0XHR9XG5cblx0XHRpZiAoIHNlbGVjdG9yLnNlbGVjdG9yICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHR0aGlzLnNlbGVjdG9yID0gc2VsZWN0b3Iuc2VsZWN0b3I7XG5cdFx0XHR0aGlzLmNvbnRleHQgPSBzZWxlY3Rvci5jb250ZXh0O1xuXHRcdH1cblxuXHRcdHJldHVybiBqUXVlcnkubWFrZUFycmF5KCBzZWxlY3RvciwgdGhpcyApO1xuXHR9O1xuXG4vLyBHaXZlIHRoZSBpbml0IGZ1bmN0aW9uIHRoZSBqUXVlcnkgcHJvdG90eXBlIGZvciBsYXRlciBpbnN0YW50aWF0aW9uXG5pbml0LnByb3RvdHlwZSA9IGpRdWVyeS5mbjtcblxuLy8gSW5pdGlhbGl6ZSBjZW50cmFsIHJlZmVyZW5jZVxucm9vdGpRdWVyeSA9IGpRdWVyeSggZG9jdW1lbnQgKTtcblxuXG52YXIgcnBhcmVudHNwcmV2ID0gL14oPzpwYXJlbnRzfHByZXYoPzpVbnRpbHxBbGwpKS8sXG5cblx0Ly8gTWV0aG9kcyBndWFyYW50ZWVkIHRvIHByb2R1Y2UgYSB1bmlxdWUgc2V0IHdoZW4gc3RhcnRpbmcgZnJvbSBhIHVuaXF1ZSBzZXRcblx0Z3VhcmFudGVlZFVuaXF1ZSA9IHtcblx0XHRjaGlsZHJlbjogdHJ1ZSxcblx0XHRjb250ZW50czogdHJ1ZSxcblx0XHRuZXh0OiB0cnVlLFxuXHRcdHByZXY6IHRydWVcblx0fTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRoYXM6IGZ1bmN0aW9uKCB0YXJnZXQgKSB7XG5cdFx0dmFyIHRhcmdldHMgPSBqUXVlcnkoIHRhcmdldCwgdGhpcyApLFxuXHRcdFx0bCA9IHRhcmdldHMubGVuZ3RoO1xuXG5cdFx0cmV0dXJuIHRoaXMuZmlsdGVyKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBpID0gMDtcblx0XHRcdGZvciAoIDsgaSA8IGw7IGkrKyApIHtcblx0XHRcdFx0aWYgKCBqUXVlcnkuY29udGFpbnMoIHRoaXMsIHRhcmdldHNbIGkgXSApICkge1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdGNsb3Nlc3Q6IGZ1bmN0aW9uKCBzZWxlY3RvcnMsIGNvbnRleHQgKSB7XG5cdFx0dmFyIGN1cixcblx0XHRcdGkgPSAwLFxuXHRcdFx0bCA9IHRoaXMubGVuZ3RoLFxuXHRcdFx0bWF0Y2hlZCA9IFtdLFxuXHRcdFx0cG9zID0gcm5lZWRzQ29udGV4dC50ZXN0KCBzZWxlY3RvcnMgKSB8fCB0eXBlb2Ygc2VsZWN0b3JzICE9PSBcInN0cmluZ1wiID9cblx0XHRcdFx0alF1ZXJ5KCBzZWxlY3RvcnMsIGNvbnRleHQgfHwgdGhpcy5jb250ZXh0ICkgOlxuXHRcdFx0XHQwO1xuXG5cdFx0Zm9yICggOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0Zm9yICggY3VyID0gdGhpc1sgaSBdOyBjdXIgJiYgY3VyICE9PSBjb250ZXh0OyBjdXIgPSBjdXIucGFyZW50Tm9kZSApIHtcblxuXHRcdFx0XHQvLyBBbHdheXMgc2tpcCBkb2N1bWVudCBmcmFnbWVudHNcblx0XHRcdFx0aWYgKCBjdXIubm9kZVR5cGUgPCAxMSAmJiAoIHBvcyA/XG5cdFx0XHRcdFx0cG9zLmluZGV4KCBjdXIgKSA+IC0xIDpcblxuXHRcdFx0XHRcdC8vIERvbid0IHBhc3Mgbm9uLWVsZW1lbnRzIHRvIFNpenpsZVxuXHRcdFx0XHRcdGN1ci5ub2RlVHlwZSA9PT0gMSAmJlxuXHRcdFx0XHRcdFx0alF1ZXJ5LmZpbmQubWF0Y2hlc1NlbGVjdG9yKCBjdXIsIHNlbGVjdG9ycyApICkgKSB7XG5cblx0XHRcdFx0XHRtYXRjaGVkLnB1c2goIGN1ciApO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBtYXRjaGVkLmxlbmd0aCA+IDEgPyBqUXVlcnkudW5pcXVlU29ydCggbWF0Y2hlZCApIDogbWF0Y2hlZCApO1xuXHR9LFxuXG5cdC8vIERldGVybWluZSB0aGUgcG9zaXRpb24gb2YgYW4gZWxlbWVudCB3aXRoaW4gdGhlIHNldFxuXHRpbmRleDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHQvLyBObyBhcmd1bWVudCwgcmV0dXJuIGluZGV4IGluIHBhcmVudFxuXHRcdGlmICggIWVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gKCB0aGlzWyAwIF0gJiYgdGhpc1sgMCBdLnBhcmVudE5vZGUgKSA/IHRoaXMuZmlyc3QoKS5wcmV2QWxsKCkubGVuZ3RoIDogLTE7XG5cdFx0fVxuXG5cdFx0Ly8gSW5kZXggaW4gc2VsZWN0b3Jcblx0XHRpZiAoIHR5cGVvZiBlbGVtID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0cmV0dXJuIGluZGV4T2YuY2FsbCggalF1ZXJ5KCBlbGVtICksIHRoaXNbIDAgXSApO1xuXHRcdH1cblxuXHRcdC8vIExvY2F0ZSB0aGUgcG9zaXRpb24gb2YgdGhlIGRlc2lyZWQgZWxlbWVudFxuXHRcdHJldHVybiBpbmRleE9mLmNhbGwoIHRoaXMsXG5cblx0XHRcdC8vIElmIGl0IHJlY2VpdmVzIGEgalF1ZXJ5IG9iamVjdCwgdGhlIGZpcnN0IGVsZW1lbnQgaXMgdXNlZFxuXHRcdFx0ZWxlbS5qcXVlcnkgPyBlbGVtWyAwIF0gOiBlbGVtXG5cdFx0KTtcblx0fSxcblxuXHRhZGQ6IGZ1bmN0aW9uKCBzZWxlY3RvciwgY29udGV4dCApIHtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soXG5cdFx0XHRqUXVlcnkudW5pcXVlU29ydChcblx0XHRcdFx0alF1ZXJ5Lm1lcmdlKCB0aGlzLmdldCgpLCBqUXVlcnkoIHNlbGVjdG9yLCBjb250ZXh0ICkgKVxuXHRcdFx0KVxuXHRcdCk7XG5cdH0sXG5cblx0YWRkQmFjazogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHJldHVybiB0aGlzLmFkZCggc2VsZWN0b3IgPT0gbnVsbCA/XG5cdFx0XHR0aGlzLnByZXZPYmplY3QgOiB0aGlzLnByZXZPYmplY3QuZmlsdGVyKCBzZWxlY3RvciApXG5cdFx0KTtcblx0fVxufSApO1xuXG5mdW5jdGlvbiBzaWJsaW5nKCBjdXIsIGRpciApIHtcblx0d2hpbGUgKCAoIGN1ciA9IGN1clsgZGlyIF0gKSAmJiBjdXIubm9kZVR5cGUgIT09IDEgKSB7fVxuXHRyZXR1cm4gY3VyO1xufVxuXG5qUXVlcnkuZWFjaCgge1xuXHRwYXJlbnQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHZhciBwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGU7XG5cdFx0cmV0dXJuIHBhcmVudCAmJiBwYXJlbnQubm9kZVR5cGUgIT09IDExID8gcGFyZW50IDogbnVsbDtcblx0fSxcblx0cGFyZW50czogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIGRpciggZWxlbSwgXCJwYXJlbnROb2RlXCIgKTtcblx0fSxcblx0cGFyZW50c1VudGlsOiBmdW5jdGlvbiggZWxlbSwgaSwgdW50aWwgKSB7XG5cdFx0cmV0dXJuIGRpciggZWxlbSwgXCJwYXJlbnROb2RlXCIsIHVudGlsICk7XG5cdH0sXG5cdG5leHQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBzaWJsaW5nKCBlbGVtLCBcIm5leHRTaWJsaW5nXCIgKTtcblx0fSxcblx0cHJldjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIHNpYmxpbmcoIGVsZW0sIFwicHJldmlvdXNTaWJsaW5nXCIgKTtcblx0fSxcblx0bmV4dEFsbDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIGRpciggZWxlbSwgXCJuZXh0U2libGluZ1wiICk7XG5cdH0sXG5cdHByZXZBbGw6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBkaXIoIGVsZW0sIFwicHJldmlvdXNTaWJsaW5nXCIgKTtcblx0fSxcblx0bmV4dFVudGlsOiBmdW5jdGlvbiggZWxlbSwgaSwgdW50aWwgKSB7XG5cdFx0cmV0dXJuIGRpciggZWxlbSwgXCJuZXh0U2libGluZ1wiLCB1bnRpbCApO1xuXHR9LFxuXHRwcmV2VW50aWw6IGZ1bmN0aW9uKCBlbGVtLCBpLCB1bnRpbCApIHtcblx0XHRyZXR1cm4gZGlyKCBlbGVtLCBcInByZXZpb3VzU2libGluZ1wiLCB1bnRpbCApO1xuXHR9LFxuXHRzaWJsaW5nczogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIHNpYmxpbmdzKCAoIGVsZW0ucGFyZW50Tm9kZSB8fCB7fSApLmZpcnN0Q2hpbGQsIGVsZW0gKTtcblx0fSxcblx0Y2hpbGRyZW46IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBzaWJsaW5ncyggZWxlbS5maXJzdENoaWxkICk7XG5cdH0sXG5cdGNvbnRlbnRzOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gZWxlbS5jb250ZW50RG9jdW1lbnQgfHwgalF1ZXJ5Lm1lcmdlKCBbXSwgZWxlbS5jaGlsZE5vZGVzICk7XG5cdH1cbn0sIGZ1bmN0aW9uKCBuYW1lLCBmbiApIHtcblx0alF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggdW50aWwsIHNlbGVjdG9yICkge1xuXHRcdHZhciBtYXRjaGVkID0galF1ZXJ5Lm1hcCggdGhpcywgZm4sIHVudGlsICk7XG5cblx0XHRpZiAoIG5hbWUuc2xpY2UoIC01ICkgIT09IFwiVW50aWxcIiApIHtcblx0XHRcdHNlbGVjdG9yID0gdW50aWw7XG5cdFx0fVxuXG5cdFx0aWYgKCBzZWxlY3RvciAmJiB0eXBlb2Ygc2VsZWN0b3IgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRtYXRjaGVkID0galF1ZXJ5LmZpbHRlciggc2VsZWN0b3IsIG1hdGNoZWQgKTtcblx0XHR9XG5cblx0XHRpZiAoIHRoaXMubGVuZ3RoID4gMSApIHtcblxuXHRcdFx0Ly8gUmVtb3ZlIGR1cGxpY2F0ZXNcblx0XHRcdGlmICggIWd1YXJhbnRlZWRVbmlxdWVbIG5hbWUgXSApIHtcblx0XHRcdFx0alF1ZXJ5LnVuaXF1ZVNvcnQoIG1hdGNoZWQgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gUmV2ZXJzZSBvcmRlciBmb3IgcGFyZW50cyogYW5kIHByZXYtZGVyaXZhdGl2ZXNcblx0XHRcdGlmICggcnBhcmVudHNwcmV2LnRlc3QoIG5hbWUgKSApIHtcblx0XHRcdFx0bWF0Y2hlZC5yZXZlcnNlKCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBtYXRjaGVkICk7XG5cdH07XG59ICk7XG52YXIgcm5vdHdoaXRlID0gKCAvXFxTKy9nICk7XG5cblxuXG4vLyBDb252ZXJ0IFN0cmluZy1mb3JtYXR0ZWQgb3B0aW9ucyBpbnRvIE9iamVjdC1mb3JtYXR0ZWQgb25lc1xuZnVuY3Rpb24gY3JlYXRlT3B0aW9ucyggb3B0aW9ucyApIHtcblx0dmFyIG9iamVjdCA9IHt9O1xuXHRqUXVlcnkuZWFjaCggb3B0aW9ucy5tYXRjaCggcm5vdHdoaXRlICkgfHwgW10sIGZ1bmN0aW9uKCBfLCBmbGFnICkge1xuXHRcdG9iamVjdFsgZmxhZyBdID0gdHJ1ZTtcblx0fSApO1xuXHRyZXR1cm4gb2JqZWN0O1xufVxuXG4vKlxuICogQ3JlYXRlIGEgY2FsbGJhY2sgbGlzdCB1c2luZyB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnM6XG4gKlxuICpcdG9wdGlvbnM6IGFuIG9wdGlvbmFsIGxpc3Qgb2Ygc3BhY2Utc2VwYXJhdGVkIG9wdGlvbnMgdGhhdCB3aWxsIGNoYW5nZSBob3dcbiAqXHRcdFx0dGhlIGNhbGxiYWNrIGxpc3QgYmVoYXZlcyBvciBhIG1vcmUgdHJhZGl0aW9uYWwgb3B0aW9uIG9iamVjdFxuICpcbiAqIEJ5IGRlZmF1bHQgYSBjYWxsYmFjayBsaXN0IHdpbGwgYWN0IGxpa2UgYW4gZXZlbnQgY2FsbGJhY2sgbGlzdCBhbmQgY2FuIGJlXG4gKiBcImZpcmVkXCIgbXVsdGlwbGUgdGltZXMuXG4gKlxuICogUG9zc2libGUgb3B0aW9uczpcbiAqXG4gKlx0b25jZTpcdFx0XHR3aWxsIGVuc3VyZSB0aGUgY2FsbGJhY2sgbGlzdCBjYW4gb25seSBiZSBmaXJlZCBvbmNlIChsaWtlIGEgRGVmZXJyZWQpXG4gKlxuICpcdG1lbW9yeTpcdFx0XHR3aWxsIGtlZXAgdHJhY2sgb2YgcHJldmlvdXMgdmFsdWVzIGFuZCB3aWxsIGNhbGwgYW55IGNhbGxiYWNrIGFkZGVkXG4gKlx0XHRcdFx0XHRhZnRlciB0aGUgbGlzdCBoYXMgYmVlbiBmaXJlZCByaWdodCBhd2F5IHdpdGggdGhlIGxhdGVzdCBcIm1lbW9yaXplZFwiXG4gKlx0XHRcdFx0XHR2YWx1ZXMgKGxpa2UgYSBEZWZlcnJlZClcbiAqXG4gKlx0dW5pcXVlOlx0XHRcdHdpbGwgZW5zdXJlIGEgY2FsbGJhY2sgY2FuIG9ubHkgYmUgYWRkZWQgb25jZSAobm8gZHVwbGljYXRlIGluIHRoZSBsaXN0KVxuICpcbiAqXHRzdG9wT25GYWxzZTpcdGludGVycnVwdCBjYWxsaW5ncyB3aGVuIGEgY2FsbGJhY2sgcmV0dXJucyBmYWxzZVxuICpcbiAqL1xualF1ZXJ5LkNhbGxiYWNrcyA9IGZ1bmN0aW9uKCBvcHRpb25zICkge1xuXG5cdC8vIENvbnZlcnQgb3B0aW9ucyBmcm9tIFN0cmluZy1mb3JtYXR0ZWQgdG8gT2JqZWN0LWZvcm1hdHRlZCBpZiBuZWVkZWRcblx0Ly8gKHdlIGNoZWNrIGluIGNhY2hlIGZpcnN0KVxuXHRvcHRpb25zID0gdHlwZW9mIG9wdGlvbnMgPT09IFwic3RyaW5nXCIgP1xuXHRcdGNyZWF0ZU9wdGlvbnMoIG9wdGlvbnMgKSA6XG5cdFx0alF1ZXJ5LmV4dGVuZCgge30sIG9wdGlvbnMgKTtcblxuXHR2YXIgLy8gRmxhZyB0byBrbm93IGlmIGxpc3QgaXMgY3VycmVudGx5IGZpcmluZ1xuXHRcdGZpcmluZyxcblxuXHRcdC8vIExhc3QgZmlyZSB2YWx1ZSBmb3Igbm9uLWZvcmdldHRhYmxlIGxpc3RzXG5cdFx0bWVtb3J5LFxuXG5cdFx0Ly8gRmxhZyB0byBrbm93IGlmIGxpc3Qgd2FzIGFscmVhZHkgZmlyZWRcblx0XHRmaXJlZCxcblxuXHRcdC8vIEZsYWcgdG8gcHJldmVudCBmaXJpbmdcblx0XHRsb2NrZWQsXG5cblx0XHQvLyBBY3R1YWwgY2FsbGJhY2sgbGlzdFxuXHRcdGxpc3QgPSBbXSxcblxuXHRcdC8vIFF1ZXVlIG9mIGV4ZWN1dGlvbiBkYXRhIGZvciByZXBlYXRhYmxlIGxpc3RzXG5cdFx0cXVldWUgPSBbXSxcblxuXHRcdC8vIEluZGV4IG9mIGN1cnJlbnRseSBmaXJpbmcgY2FsbGJhY2sgKG1vZGlmaWVkIGJ5IGFkZC9yZW1vdmUgYXMgbmVlZGVkKVxuXHRcdGZpcmluZ0luZGV4ID0gLTEsXG5cblx0XHQvLyBGaXJlIGNhbGxiYWNrc1xuXHRcdGZpcmUgPSBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gRW5mb3JjZSBzaW5nbGUtZmlyaW5nXG5cdFx0XHRsb2NrZWQgPSBvcHRpb25zLm9uY2U7XG5cblx0XHRcdC8vIEV4ZWN1dGUgY2FsbGJhY2tzIGZvciBhbGwgcGVuZGluZyBleGVjdXRpb25zLFxuXHRcdFx0Ly8gcmVzcGVjdGluZyBmaXJpbmdJbmRleCBvdmVycmlkZXMgYW5kIHJ1bnRpbWUgY2hhbmdlc1xuXHRcdFx0ZmlyZWQgPSBmaXJpbmcgPSB0cnVlO1xuXHRcdFx0Zm9yICggOyBxdWV1ZS5sZW5ndGg7IGZpcmluZ0luZGV4ID0gLTEgKSB7XG5cdFx0XHRcdG1lbW9yeSA9IHF1ZXVlLnNoaWZ0KCk7XG5cdFx0XHRcdHdoaWxlICggKytmaXJpbmdJbmRleCA8IGxpc3QubGVuZ3RoICkge1xuXG5cdFx0XHRcdFx0Ly8gUnVuIGNhbGxiYWNrIGFuZCBjaGVjayBmb3IgZWFybHkgdGVybWluYXRpb25cblx0XHRcdFx0XHRpZiAoIGxpc3RbIGZpcmluZ0luZGV4IF0uYXBwbHkoIG1lbW9yeVsgMCBdLCBtZW1vcnlbIDEgXSApID09PSBmYWxzZSAmJlxuXHRcdFx0XHRcdFx0b3B0aW9ucy5zdG9wT25GYWxzZSApIHtcblxuXHRcdFx0XHRcdFx0Ly8gSnVtcCB0byBlbmQgYW5kIGZvcmdldCB0aGUgZGF0YSBzbyAuYWRkIGRvZXNuJ3QgcmUtZmlyZVxuXHRcdFx0XHRcdFx0ZmlyaW5nSW5kZXggPSBsaXN0Lmxlbmd0aDtcblx0XHRcdFx0XHRcdG1lbW9yeSA9IGZhbHNlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBGb3JnZXQgdGhlIGRhdGEgaWYgd2UncmUgZG9uZSB3aXRoIGl0XG5cdFx0XHRpZiAoICFvcHRpb25zLm1lbW9yeSApIHtcblx0XHRcdFx0bWVtb3J5ID0gZmFsc2U7XG5cdFx0XHR9XG5cblx0XHRcdGZpcmluZyA9IGZhbHNlO1xuXG5cdFx0XHQvLyBDbGVhbiB1cCBpZiB3ZSdyZSBkb25lIGZpcmluZyBmb3IgZ29vZFxuXHRcdFx0aWYgKCBsb2NrZWQgKSB7XG5cblx0XHRcdFx0Ly8gS2VlcCBhbiBlbXB0eSBsaXN0IGlmIHdlIGhhdmUgZGF0YSBmb3IgZnV0dXJlIGFkZCBjYWxsc1xuXHRcdFx0XHRpZiAoIG1lbW9yeSApIHtcblx0XHRcdFx0XHRsaXN0ID0gW107XG5cblx0XHRcdFx0Ly8gT3RoZXJ3aXNlLCB0aGlzIG9iamVjdCBpcyBzcGVudFxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGxpc3QgPSBcIlwiO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdC8vIEFjdHVhbCBDYWxsYmFja3Mgb2JqZWN0XG5cdFx0c2VsZiA9IHtcblxuXHRcdFx0Ly8gQWRkIGEgY2FsbGJhY2sgb3IgYSBjb2xsZWN0aW9uIG9mIGNhbGxiYWNrcyB0byB0aGUgbGlzdFxuXHRcdFx0YWRkOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCBsaXN0ICkge1xuXG5cdFx0XHRcdFx0Ly8gSWYgd2UgaGF2ZSBtZW1vcnkgZnJvbSBhIHBhc3QgcnVuLCB3ZSBzaG91bGQgZmlyZSBhZnRlciBhZGRpbmdcblx0XHRcdFx0XHRpZiAoIG1lbW9yeSAmJiAhZmlyaW5nICkge1xuXHRcdFx0XHRcdFx0ZmlyaW5nSW5kZXggPSBsaXN0Lmxlbmd0aCAtIDE7XG5cdFx0XHRcdFx0XHRxdWV1ZS5wdXNoKCBtZW1vcnkgKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQoIGZ1bmN0aW9uIGFkZCggYXJncyApIHtcblx0XHRcdFx0XHRcdGpRdWVyeS5lYWNoKCBhcmdzLCBmdW5jdGlvbiggXywgYXJnICkge1xuXHRcdFx0XHRcdFx0XHRpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBhcmcgKSApIHtcblx0XHRcdFx0XHRcdFx0XHRpZiAoICFvcHRpb25zLnVuaXF1ZSB8fCAhc2VsZi5oYXMoIGFyZyApICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0bGlzdC5wdXNoKCBhcmcgKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoIGFyZyAmJiBhcmcubGVuZ3RoICYmIGpRdWVyeS50eXBlKCBhcmcgKSAhPT0gXCJzdHJpbmdcIiApIHtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIEluc3BlY3QgcmVjdXJzaXZlbHlcblx0XHRcdFx0XHRcdFx0XHRhZGQoIGFyZyApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdFx0fSApKCBhcmd1bWVudHMgKTtcblxuXHRcdFx0XHRcdGlmICggbWVtb3J5ICYmICFmaXJpbmcgKSB7XG5cdFx0XHRcdFx0XHRmaXJlKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gUmVtb3ZlIGEgY2FsbGJhY2sgZnJvbSB0aGUgbGlzdFxuXHRcdFx0cmVtb3ZlOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0alF1ZXJ5LmVhY2goIGFyZ3VtZW50cywgZnVuY3Rpb24oIF8sIGFyZyApIHtcblx0XHRcdFx0XHR2YXIgaW5kZXg7XG5cdFx0XHRcdFx0d2hpbGUgKCAoIGluZGV4ID0galF1ZXJ5LmluQXJyYXkoIGFyZywgbGlzdCwgaW5kZXggKSApID4gLTEgKSB7XG5cdFx0XHRcdFx0XHRsaXN0LnNwbGljZSggaW5kZXgsIDEgKTtcblxuXHRcdFx0XHRcdFx0Ly8gSGFuZGxlIGZpcmluZyBpbmRleGVzXG5cdFx0XHRcdFx0XHRpZiAoIGluZGV4IDw9IGZpcmluZ0luZGV4ICkge1xuXHRcdFx0XHRcdFx0XHRmaXJpbmdJbmRleC0tO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSApO1xuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cblx0XHRcdC8vIENoZWNrIGlmIGEgZ2l2ZW4gY2FsbGJhY2sgaXMgaW4gdGhlIGxpc3QuXG5cdFx0XHQvLyBJZiBubyBhcmd1bWVudCBpcyBnaXZlbiwgcmV0dXJuIHdoZXRoZXIgb3Igbm90IGxpc3QgaGFzIGNhbGxiYWNrcyBhdHRhY2hlZC5cblx0XHRcdGhhczogZnVuY3Rpb24oIGZuICkge1xuXHRcdFx0XHRyZXR1cm4gZm4gP1xuXHRcdFx0XHRcdGpRdWVyeS5pbkFycmF5KCBmbiwgbGlzdCApID4gLTEgOlxuXHRcdFx0XHRcdGxpc3QubGVuZ3RoID4gMDtcblx0XHRcdH0sXG5cblx0XHRcdC8vIFJlbW92ZSBhbGwgY2FsbGJhY2tzIGZyb20gdGhlIGxpc3Rcblx0XHRcdGVtcHR5OiBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCBsaXN0ICkge1xuXHRcdFx0XHRcdGxpc3QgPSBbXTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cblx0XHRcdC8vIERpc2FibGUgLmZpcmUgYW5kIC5hZGRcblx0XHRcdC8vIEFib3J0IGFueSBjdXJyZW50L3BlbmRpbmcgZXhlY3V0aW9uc1xuXHRcdFx0Ly8gQ2xlYXIgYWxsIGNhbGxiYWNrcyBhbmQgdmFsdWVzXG5cdFx0XHRkaXNhYmxlOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0bG9ja2VkID0gcXVldWUgPSBbXTtcblx0XHRcdFx0bGlzdCA9IG1lbW9yeSA9IFwiXCI7XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblx0XHRcdGRpc2FibGVkOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuICFsaXN0O1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gRGlzYWJsZSAuZmlyZVxuXHRcdFx0Ly8gQWxzbyBkaXNhYmxlIC5hZGQgdW5sZXNzIHdlIGhhdmUgbWVtb3J5IChzaW5jZSBpdCB3b3VsZCBoYXZlIG5vIGVmZmVjdClcblx0XHRcdC8vIEFib3J0IGFueSBwZW5kaW5nIGV4ZWN1dGlvbnNcblx0XHRcdGxvY2s6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRsb2NrZWQgPSBxdWV1ZSA9IFtdO1xuXHRcdFx0XHRpZiAoICFtZW1vcnkgKSB7XG5cdFx0XHRcdFx0bGlzdCA9IG1lbW9yeSA9IFwiXCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXHRcdFx0bG9ja2VkOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuICEhbG9ja2VkO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gQ2FsbCBhbGwgY2FsbGJhY2tzIHdpdGggdGhlIGdpdmVuIGNvbnRleHQgYW5kIGFyZ3VtZW50c1xuXHRcdFx0ZmlyZVdpdGg6IGZ1bmN0aW9uKCBjb250ZXh0LCBhcmdzICkge1xuXHRcdFx0XHRpZiAoICFsb2NrZWQgKSB7XG5cdFx0XHRcdFx0YXJncyA9IGFyZ3MgfHwgW107XG5cdFx0XHRcdFx0YXJncyA9IFsgY29udGV4dCwgYXJncy5zbGljZSA/IGFyZ3Muc2xpY2UoKSA6IGFyZ3MgXTtcblx0XHRcdFx0XHRxdWV1ZS5wdXNoKCBhcmdzICk7XG5cdFx0XHRcdFx0aWYgKCAhZmlyaW5nICkge1xuXHRcdFx0XHRcdFx0ZmlyZSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cblx0XHRcdC8vIENhbGwgYWxsIHRoZSBjYWxsYmFja3Mgd2l0aCB0aGUgZ2l2ZW4gYXJndW1lbnRzXG5cdFx0XHRmaXJlOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0c2VsZi5maXJlV2l0aCggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gVG8ga25vdyBpZiB0aGUgY2FsbGJhY2tzIGhhdmUgYWxyZWFkeSBiZWVuIGNhbGxlZCBhdCBsZWFzdCBvbmNlXG5cdFx0XHRmaXJlZDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiAhIWZpcmVkO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0cmV0dXJuIHNlbGY7XG59O1xuXG5cbmpRdWVyeS5leHRlbmQoIHtcblxuXHREZWZlcnJlZDogZnVuY3Rpb24oIGZ1bmMgKSB7XG5cdFx0dmFyIHR1cGxlcyA9IFtcblxuXHRcdFx0XHQvLyBhY3Rpb24sIGFkZCBsaXN0ZW5lciwgbGlzdGVuZXIgbGlzdCwgZmluYWwgc3RhdGVcblx0XHRcdFx0WyBcInJlc29sdmVcIiwgXCJkb25lXCIsIGpRdWVyeS5DYWxsYmFja3MoIFwib25jZSBtZW1vcnlcIiApLCBcInJlc29sdmVkXCIgXSxcblx0XHRcdFx0WyBcInJlamVjdFwiLCBcImZhaWxcIiwgalF1ZXJ5LkNhbGxiYWNrcyggXCJvbmNlIG1lbW9yeVwiICksIFwicmVqZWN0ZWRcIiBdLFxuXHRcdFx0XHRbIFwibm90aWZ5XCIsIFwicHJvZ3Jlc3NcIiwgalF1ZXJ5LkNhbGxiYWNrcyggXCJtZW1vcnlcIiApIF1cblx0XHRcdF0sXG5cdFx0XHRzdGF0ZSA9IFwicGVuZGluZ1wiLFxuXHRcdFx0cHJvbWlzZSA9IHtcblx0XHRcdFx0c3RhdGU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdHJldHVybiBzdGF0ZTtcblx0XHRcdFx0fSxcblx0XHRcdFx0YWx3YXlzOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRkZWZlcnJlZC5kb25lKCBhcmd1bWVudHMgKS5mYWlsKCBhcmd1bWVudHMgKTtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fSxcblx0XHRcdFx0dGhlbjogZnVuY3Rpb24oIC8qIGZuRG9uZSwgZm5GYWlsLCBmblByb2dyZXNzICovICkge1xuXHRcdFx0XHRcdHZhciBmbnMgPSBhcmd1bWVudHM7XG5cdFx0XHRcdFx0cmV0dXJuIGpRdWVyeS5EZWZlcnJlZCggZnVuY3Rpb24oIG5ld0RlZmVyICkge1xuXHRcdFx0XHRcdFx0alF1ZXJ5LmVhY2goIHR1cGxlcywgZnVuY3Rpb24oIGksIHR1cGxlICkge1xuXHRcdFx0XHRcdFx0XHR2YXIgZm4gPSBqUXVlcnkuaXNGdW5jdGlvbiggZm5zWyBpIF0gKSAmJiBmbnNbIGkgXTtcblxuXHRcdFx0XHRcdFx0XHQvLyBkZWZlcnJlZFsgZG9uZSB8IGZhaWwgfCBwcm9ncmVzcyBdIGZvciBmb3J3YXJkaW5nIGFjdGlvbnMgdG8gbmV3RGVmZXJcblx0XHRcdFx0XHRcdFx0ZGVmZXJyZWRbIHR1cGxlWyAxIF0gXSggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIHJldHVybmVkID0gZm4gJiYgZm4uYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdFx0XHRcdFx0XHRcdGlmICggcmV0dXJuZWQgJiYgalF1ZXJ5LmlzRnVuY3Rpb24oIHJldHVybmVkLnByb21pc2UgKSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybmVkLnByb21pc2UoKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQucHJvZ3Jlc3MoIG5ld0RlZmVyLm5vdGlmeSApXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC5kb25lKCBuZXdEZWZlci5yZXNvbHZlIClcblx0XHRcdFx0XHRcdFx0XHRcdFx0LmZhaWwoIG5ld0RlZmVyLnJlamVjdCApO1xuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRuZXdEZWZlclsgdHVwbGVbIDAgXSArIFwiV2l0aFwiIF0oXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMgPT09IHByb21pc2UgPyBuZXdEZWZlci5wcm9taXNlKCkgOiB0aGlzLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmbiA/IFsgcmV0dXJuZWQgXSA6IGFyZ3VtZW50c1xuXHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHRcdGZucyA9IG51bGw7XG5cdFx0XHRcdFx0fSApLnByb21pc2UoKTtcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBHZXQgYSBwcm9taXNlIGZvciB0aGlzIGRlZmVycmVkXG5cdFx0XHRcdC8vIElmIG9iaiBpcyBwcm92aWRlZCwgdGhlIHByb21pc2UgYXNwZWN0IGlzIGFkZGVkIHRvIHRoZSBvYmplY3Rcblx0XHRcdFx0cHJvbWlzZTogZnVuY3Rpb24oIG9iaiApIHtcblx0XHRcdFx0XHRyZXR1cm4gb2JqICE9IG51bGwgPyBqUXVlcnkuZXh0ZW5kKCBvYmosIHByb21pc2UgKSA6IHByb21pc2U7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRkZWZlcnJlZCA9IHt9O1xuXG5cdFx0Ly8gS2VlcCBwaXBlIGZvciBiYWNrLWNvbXBhdFxuXHRcdHByb21pc2UucGlwZSA9IHByb21pc2UudGhlbjtcblxuXHRcdC8vIEFkZCBsaXN0LXNwZWNpZmljIG1ldGhvZHNcblx0XHRqUXVlcnkuZWFjaCggdHVwbGVzLCBmdW5jdGlvbiggaSwgdHVwbGUgKSB7XG5cdFx0XHR2YXIgbGlzdCA9IHR1cGxlWyAyIF0sXG5cdFx0XHRcdHN0YXRlU3RyaW5nID0gdHVwbGVbIDMgXTtcblxuXHRcdFx0Ly8gcHJvbWlzZVsgZG9uZSB8IGZhaWwgfCBwcm9ncmVzcyBdID0gbGlzdC5hZGRcblx0XHRcdHByb21pc2VbIHR1cGxlWyAxIF0gXSA9IGxpc3QuYWRkO1xuXG5cdFx0XHQvLyBIYW5kbGUgc3RhdGVcblx0XHRcdGlmICggc3RhdGVTdHJpbmcgKSB7XG5cdFx0XHRcdGxpc3QuYWRkKCBmdW5jdGlvbigpIHtcblxuXHRcdFx0XHRcdC8vIHN0YXRlID0gWyByZXNvbHZlZCB8IHJlamVjdGVkIF1cblx0XHRcdFx0XHRzdGF0ZSA9IHN0YXRlU3RyaW5nO1xuXG5cdFx0XHRcdC8vIFsgcmVqZWN0X2xpc3QgfCByZXNvbHZlX2xpc3QgXS5kaXNhYmxlOyBwcm9ncmVzc19saXN0LmxvY2tcblx0XHRcdFx0fSwgdHVwbGVzWyBpIF4gMSBdWyAyIF0uZGlzYWJsZSwgdHVwbGVzWyAyIF1bIDIgXS5sb2NrICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIGRlZmVycmVkWyByZXNvbHZlIHwgcmVqZWN0IHwgbm90aWZ5IF1cblx0XHRcdGRlZmVycmVkWyB0dXBsZVsgMCBdIF0gPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0ZGVmZXJyZWRbIHR1cGxlWyAwIF0gKyBcIldpdGhcIiBdKCB0aGlzID09PSBkZWZlcnJlZCA/IHByb21pc2UgOiB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9O1xuXHRcdFx0ZGVmZXJyZWRbIHR1cGxlWyAwIF0gKyBcIldpdGhcIiBdID0gbGlzdC5maXJlV2l0aDtcblx0XHR9ICk7XG5cblx0XHQvLyBNYWtlIHRoZSBkZWZlcnJlZCBhIHByb21pc2Vcblx0XHRwcm9taXNlLnByb21pc2UoIGRlZmVycmVkICk7XG5cblx0XHQvLyBDYWxsIGdpdmVuIGZ1bmMgaWYgYW55XG5cdFx0aWYgKCBmdW5jICkge1xuXHRcdFx0ZnVuYy5jYWxsKCBkZWZlcnJlZCwgZGVmZXJyZWQgKTtcblx0XHR9XG5cblx0XHQvLyBBbGwgZG9uZSFcblx0XHRyZXR1cm4gZGVmZXJyZWQ7XG5cdH0sXG5cblx0Ly8gRGVmZXJyZWQgaGVscGVyXG5cdHdoZW46IGZ1bmN0aW9uKCBzdWJvcmRpbmF0ZSAvKiAsIC4uLiwgc3Vib3JkaW5hdGVOICovICkge1xuXHRcdHZhciBpID0gMCxcblx0XHRcdHJlc29sdmVWYWx1ZXMgPSBzbGljZS5jYWxsKCBhcmd1bWVudHMgKSxcblx0XHRcdGxlbmd0aCA9IHJlc29sdmVWYWx1ZXMubGVuZ3RoLFxuXG5cdFx0XHQvLyB0aGUgY291bnQgb2YgdW5jb21wbGV0ZWQgc3Vib3JkaW5hdGVzXG5cdFx0XHRyZW1haW5pbmcgPSBsZW5ndGggIT09IDEgfHxcblx0XHRcdFx0KCBzdWJvcmRpbmF0ZSAmJiBqUXVlcnkuaXNGdW5jdGlvbiggc3Vib3JkaW5hdGUucHJvbWlzZSApICkgPyBsZW5ndGggOiAwLFxuXG5cdFx0XHQvLyB0aGUgbWFzdGVyIERlZmVycmVkLlxuXHRcdFx0Ly8gSWYgcmVzb2x2ZVZhbHVlcyBjb25zaXN0IG9mIG9ubHkgYSBzaW5nbGUgRGVmZXJyZWQsIGp1c3QgdXNlIHRoYXQuXG5cdFx0XHRkZWZlcnJlZCA9IHJlbWFpbmluZyA9PT0gMSA/IHN1Ym9yZGluYXRlIDogalF1ZXJ5LkRlZmVycmVkKCksXG5cblx0XHRcdC8vIFVwZGF0ZSBmdW5jdGlvbiBmb3IgYm90aCByZXNvbHZlIGFuZCBwcm9ncmVzcyB2YWx1ZXNcblx0XHRcdHVwZGF0ZUZ1bmMgPSBmdW5jdGlvbiggaSwgY29udGV4dHMsIHZhbHVlcyApIHtcblx0XHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdFx0XHRjb250ZXh0c1sgaSBdID0gdGhpcztcblx0XHRcdFx0XHR2YWx1ZXNbIGkgXSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gc2xpY2UuY2FsbCggYXJndW1lbnRzICkgOiB2YWx1ZTtcblx0XHRcdFx0XHRpZiAoIHZhbHVlcyA9PT0gcHJvZ3Jlc3NWYWx1ZXMgKSB7XG5cdFx0XHRcdFx0XHRkZWZlcnJlZC5ub3RpZnlXaXRoKCBjb250ZXh0cywgdmFsdWVzICk7XG5cdFx0XHRcdFx0fSBlbHNlIGlmICggISggLS1yZW1haW5pbmcgKSApIHtcblx0XHRcdFx0XHRcdGRlZmVycmVkLnJlc29sdmVXaXRoKCBjb250ZXh0cywgdmFsdWVzICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9O1xuXHRcdFx0fSxcblxuXHRcdFx0cHJvZ3Jlc3NWYWx1ZXMsIHByb2dyZXNzQ29udGV4dHMsIHJlc29sdmVDb250ZXh0cztcblxuXHRcdC8vIEFkZCBsaXN0ZW5lcnMgdG8gRGVmZXJyZWQgc3Vib3JkaW5hdGVzOyB0cmVhdCBvdGhlcnMgYXMgcmVzb2x2ZWRcblx0XHRpZiAoIGxlbmd0aCA+IDEgKSB7XG5cdFx0XHRwcm9ncmVzc1ZhbHVlcyA9IG5ldyBBcnJheSggbGVuZ3RoICk7XG5cdFx0XHRwcm9ncmVzc0NvbnRleHRzID0gbmV3IEFycmF5KCBsZW5ndGggKTtcblx0XHRcdHJlc29sdmVDb250ZXh0cyA9IG5ldyBBcnJheSggbGVuZ3RoICk7XG5cdFx0XHRmb3IgKCA7IGkgPCBsZW5ndGg7IGkrKyApIHtcblx0XHRcdFx0aWYgKCByZXNvbHZlVmFsdWVzWyBpIF0gJiYgalF1ZXJ5LmlzRnVuY3Rpb24oIHJlc29sdmVWYWx1ZXNbIGkgXS5wcm9taXNlICkgKSB7XG5cdFx0XHRcdFx0cmVzb2x2ZVZhbHVlc1sgaSBdLnByb21pc2UoKVxuXHRcdFx0XHRcdFx0LnByb2dyZXNzKCB1cGRhdGVGdW5jKCBpLCBwcm9ncmVzc0NvbnRleHRzLCBwcm9ncmVzc1ZhbHVlcyApIClcblx0XHRcdFx0XHRcdC5kb25lKCB1cGRhdGVGdW5jKCBpLCByZXNvbHZlQ29udGV4dHMsIHJlc29sdmVWYWx1ZXMgKSApXG5cdFx0XHRcdFx0XHQuZmFpbCggZGVmZXJyZWQucmVqZWN0ICk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0LS1yZW1haW5pbmc7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBJZiB3ZSdyZSBub3Qgd2FpdGluZyBvbiBhbnl0aGluZywgcmVzb2x2ZSB0aGUgbWFzdGVyXG5cdFx0aWYgKCAhcmVtYWluaW5nICkge1xuXHRcdFx0ZGVmZXJyZWQucmVzb2x2ZVdpdGgoIHJlc29sdmVDb250ZXh0cywgcmVzb2x2ZVZhbHVlcyApO1xuXHRcdH1cblxuXHRcdHJldHVybiBkZWZlcnJlZC5wcm9taXNlKCk7XG5cdH1cbn0gKTtcblxuXG4vLyBUaGUgZGVmZXJyZWQgdXNlZCBvbiBET00gcmVhZHlcbnZhciByZWFkeUxpc3Q7XG5cbmpRdWVyeS5mbi5yZWFkeSA9IGZ1bmN0aW9uKCBmbiApIHtcblxuXHQvLyBBZGQgdGhlIGNhbGxiYWNrXG5cdGpRdWVyeS5yZWFkeS5wcm9taXNlKCkuZG9uZSggZm4gKTtcblxuXHRyZXR1cm4gdGhpcztcbn07XG5cbmpRdWVyeS5leHRlbmQoIHtcblxuXHQvLyBJcyB0aGUgRE9NIHJlYWR5IHRvIGJlIHVzZWQ/IFNldCB0byB0cnVlIG9uY2UgaXQgb2NjdXJzLlxuXHRpc1JlYWR5OiBmYWxzZSxcblxuXHQvLyBBIGNvdW50ZXIgdG8gdHJhY2sgaG93IG1hbnkgaXRlbXMgdG8gd2FpdCBmb3IgYmVmb3JlXG5cdC8vIHRoZSByZWFkeSBldmVudCBmaXJlcy4gU2VlICM2NzgxXG5cdHJlYWR5V2FpdDogMSxcblxuXHQvLyBIb2xkIChvciByZWxlYXNlKSB0aGUgcmVhZHkgZXZlbnRcblx0aG9sZFJlYWR5OiBmdW5jdGlvbiggaG9sZCApIHtcblx0XHRpZiAoIGhvbGQgKSB7XG5cdFx0XHRqUXVlcnkucmVhZHlXYWl0Kys7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGpRdWVyeS5yZWFkeSggdHJ1ZSApO1xuXHRcdH1cblx0fSxcblxuXHQvLyBIYW5kbGUgd2hlbiB0aGUgRE9NIGlzIHJlYWR5XG5cdHJlYWR5OiBmdW5jdGlvbiggd2FpdCApIHtcblxuXHRcdC8vIEFib3J0IGlmIHRoZXJlIGFyZSBwZW5kaW5nIGhvbGRzIG9yIHdlJ3JlIGFscmVhZHkgcmVhZHlcblx0XHRpZiAoIHdhaXQgPT09IHRydWUgPyAtLWpRdWVyeS5yZWFkeVdhaXQgOiBqUXVlcnkuaXNSZWFkeSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBSZW1lbWJlciB0aGF0IHRoZSBET00gaXMgcmVhZHlcblx0XHRqUXVlcnkuaXNSZWFkeSA9IHRydWU7XG5cblx0XHQvLyBJZiBhIG5vcm1hbCBET00gUmVhZHkgZXZlbnQgZmlyZWQsIGRlY3JlbWVudCwgYW5kIHdhaXQgaWYgbmVlZCBiZVxuXHRcdGlmICggd2FpdCAhPT0gdHJ1ZSAmJiAtLWpRdWVyeS5yZWFkeVdhaXQgPiAwICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIElmIHRoZXJlIGFyZSBmdW5jdGlvbnMgYm91bmQsIHRvIGV4ZWN1dGVcblx0XHRyZWFkeUxpc3QucmVzb2x2ZVdpdGgoIGRvY3VtZW50LCBbIGpRdWVyeSBdICk7XG5cblx0XHQvLyBUcmlnZ2VyIGFueSBib3VuZCByZWFkeSBldmVudHNcblx0XHRpZiAoIGpRdWVyeS5mbi50cmlnZ2VySGFuZGxlciApIHtcblx0XHRcdGpRdWVyeSggZG9jdW1lbnQgKS50cmlnZ2VySGFuZGxlciggXCJyZWFkeVwiICk7XG5cdFx0XHRqUXVlcnkoIGRvY3VtZW50ICkub2ZmKCBcInJlYWR5XCIgKTtcblx0XHR9XG5cdH1cbn0gKTtcblxuLyoqXG4gKiBUaGUgcmVhZHkgZXZlbnQgaGFuZGxlciBhbmQgc2VsZiBjbGVhbnVwIG1ldGhvZFxuICovXG5mdW5jdGlvbiBjb21wbGV0ZWQoKSB7XG5cdGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIFwiRE9NQ29udGVudExvYWRlZFwiLCBjb21wbGV0ZWQgKTtcblx0d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIFwibG9hZFwiLCBjb21wbGV0ZWQgKTtcblx0alF1ZXJ5LnJlYWR5KCk7XG59XG5cbmpRdWVyeS5yZWFkeS5wcm9taXNlID0gZnVuY3Rpb24oIG9iaiApIHtcblx0aWYgKCAhcmVhZHlMaXN0ICkge1xuXG5cdFx0cmVhZHlMaXN0ID0galF1ZXJ5LkRlZmVycmVkKCk7XG5cblx0XHQvLyBDYXRjaCBjYXNlcyB3aGVyZSAkKGRvY3VtZW50KS5yZWFkeSgpIGlzIGNhbGxlZFxuXHRcdC8vIGFmdGVyIHRoZSBicm93c2VyIGV2ZW50IGhhcyBhbHJlYWR5IG9jY3VycmVkLlxuXHRcdC8vIFN1cHBvcnQ6IElFOS0xMCBvbmx5XG5cdFx0Ly8gT2xkZXIgSUUgc29tZXRpbWVzIHNpZ25hbHMgXCJpbnRlcmFjdGl2ZVwiIHRvbyBzb29uXG5cdFx0aWYgKCBkb2N1bWVudC5yZWFkeVN0YXRlID09PSBcImNvbXBsZXRlXCIgfHxcblx0XHRcdCggZG9jdW1lbnQucmVhZHlTdGF0ZSAhPT0gXCJsb2FkaW5nXCIgJiYgIWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5kb1Njcm9sbCApICkge1xuXG5cdFx0XHQvLyBIYW5kbGUgaXQgYXN5bmNocm9ub3VzbHkgdG8gYWxsb3cgc2NyaXB0cyB0aGUgb3Bwb3J0dW5pdHkgdG8gZGVsYXkgcmVhZHlcblx0XHRcdHdpbmRvdy5zZXRUaW1lb3V0KCBqUXVlcnkucmVhZHkgKTtcblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vIFVzZSB0aGUgaGFuZHkgZXZlbnQgY2FsbGJhY2tcblx0XHRcdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIFwiRE9NQ29udGVudExvYWRlZFwiLCBjb21wbGV0ZWQgKTtcblxuXHRcdFx0Ly8gQSBmYWxsYmFjayB0byB3aW5kb3cub25sb2FkLCB0aGF0IHdpbGwgYWx3YXlzIHdvcmtcblx0XHRcdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCBcImxvYWRcIiwgY29tcGxldGVkICk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiByZWFkeUxpc3QucHJvbWlzZSggb2JqICk7XG59O1xuXG4vLyBLaWNrIG9mZiB0aGUgRE9NIHJlYWR5IGNoZWNrIGV2ZW4gaWYgdGhlIHVzZXIgZG9lcyBub3RcbmpRdWVyeS5yZWFkeS5wcm9taXNlKCk7XG5cblxuXG5cbi8vIE11bHRpZnVuY3Rpb25hbCBtZXRob2QgdG8gZ2V0IGFuZCBzZXQgdmFsdWVzIG9mIGEgY29sbGVjdGlvblxuLy8gVGhlIHZhbHVlL3MgY2FuIG9wdGlvbmFsbHkgYmUgZXhlY3V0ZWQgaWYgaXQncyBhIGZ1bmN0aW9uXG52YXIgYWNjZXNzID0gZnVuY3Rpb24oIGVsZW1zLCBmbiwga2V5LCB2YWx1ZSwgY2hhaW5hYmxlLCBlbXB0eUdldCwgcmF3ICkge1xuXHR2YXIgaSA9IDAsXG5cdFx0bGVuID0gZWxlbXMubGVuZ3RoLFxuXHRcdGJ1bGsgPSBrZXkgPT0gbnVsbDtcblxuXHQvLyBTZXRzIG1hbnkgdmFsdWVzXG5cdGlmICggalF1ZXJ5LnR5cGUoIGtleSApID09PSBcIm9iamVjdFwiICkge1xuXHRcdGNoYWluYWJsZSA9IHRydWU7XG5cdFx0Zm9yICggaSBpbiBrZXkgKSB7XG5cdFx0XHRhY2Nlc3MoIGVsZW1zLCBmbiwgaSwga2V5WyBpIF0sIHRydWUsIGVtcHR5R2V0LCByYXcgKTtcblx0XHR9XG5cblx0Ly8gU2V0cyBvbmUgdmFsdWVcblx0fSBlbHNlIGlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHtcblx0XHRjaGFpbmFibGUgPSB0cnVlO1xuXG5cdFx0aWYgKCAhalF1ZXJ5LmlzRnVuY3Rpb24oIHZhbHVlICkgKSB7XG5cdFx0XHRyYXcgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGlmICggYnVsayApIHtcblxuXHRcdFx0Ly8gQnVsayBvcGVyYXRpb25zIHJ1biBhZ2FpbnN0IHRoZSBlbnRpcmUgc2V0XG5cdFx0XHRpZiAoIHJhdyApIHtcblx0XHRcdFx0Zm4uY2FsbCggZWxlbXMsIHZhbHVlICk7XG5cdFx0XHRcdGZuID0gbnVsbDtcblxuXHRcdFx0Ly8gLi4uZXhjZXB0IHdoZW4gZXhlY3V0aW5nIGZ1bmN0aW9uIHZhbHVlc1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0YnVsayA9IGZuO1xuXHRcdFx0XHRmbiA9IGZ1bmN0aW9uKCBlbGVtLCBrZXksIHZhbHVlICkge1xuXHRcdFx0XHRcdHJldHVybiBidWxrLmNhbGwoIGpRdWVyeSggZWxlbSApLCB2YWx1ZSApO1xuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmICggZm4gKSB7XG5cdFx0XHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRcdFx0Zm4oXG5cdFx0XHRcdFx0ZWxlbXNbIGkgXSwga2V5LCByYXcgP1xuXHRcdFx0XHRcdHZhbHVlIDpcblx0XHRcdFx0XHR2YWx1ZS5jYWxsKCBlbGVtc1sgaSBdLCBpLCBmbiggZWxlbXNbIGkgXSwga2V5ICkgKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBjaGFpbmFibGUgP1xuXHRcdGVsZW1zIDpcblxuXHRcdC8vIEdldHNcblx0XHRidWxrID9cblx0XHRcdGZuLmNhbGwoIGVsZW1zICkgOlxuXHRcdFx0bGVuID8gZm4oIGVsZW1zWyAwIF0sIGtleSApIDogZW1wdHlHZXQ7XG59O1xudmFyIGFjY2VwdERhdGEgPSBmdW5jdGlvbiggb3duZXIgKSB7XG5cblx0Ly8gQWNjZXB0cyBvbmx5OlxuXHQvLyAgLSBOb2RlXG5cdC8vICAgIC0gTm9kZS5FTEVNRU5UX05PREVcblx0Ly8gICAgLSBOb2RlLkRPQ1VNRU5UX05PREVcblx0Ly8gIC0gT2JqZWN0XG5cdC8vICAgIC0gQW55XG5cdC8qIGpzaGludCAtVzAxOCAqL1xuXHRyZXR1cm4gb3duZXIubm9kZVR5cGUgPT09IDEgfHwgb3duZXIubm9kZVR5cGUgPT09IDkgfHwgISggK293bmVyLm5vZGVUeXBlICk7XG59O1xuXG5cblxuXG5mdW5jdGlvbiBEYXRhKCkge1xuXHR0aGlzLmV4cGFuZG8gPSBqUXVlcnkuZXhwYW5kbyArIERhdGEudWlkKys7XG59XG5cbkRhdGEudWlkID0gMTtcblxuRGF0YS5wcm90b3R5cGUgPSB7XG5cblx0cmVnaXN0ZXI6IGZ1bmN0aW9uKCBvd25lciwgaW5pdGlhbCApIHtcblx0XHR2YXIgdmFsdWUgPSBpbml0aWFsIHx8IHt9O1xuXG5cdFx0Ly8gSWYgaXQgaXMgYSBub2RlIHVubGlrZWx5IHRvIGJlIHN0cmluZ2lmeS1lZCBvciBsb29wZWQgb3ZlclxuXHRcdC8vIHVzZSBwbGFpbiBhc3NpZ25tZW50XG5cdFx0aWYgKCBvd25lci5ub2RlVHlwZSApIHtcblx0XHRcdG93bmVyWyB0aGlzLmV4cGFuZG8gXSA9IHZhbHVlO1xuXG5cdFx0Ly8gT3RoZXJ3aXNlIHNlY3VyZSBpdCBpbiBhIG5vbi1lbnVtZXJhYmxlLCBub24td3JpdGFibGUgcHJvcGVydHlcblx0XHQvLyBjb25maWd1cmFiaWxpdHkgbXVzdCBiZSB0cnVlIHRvIGFsbG93IHRoZSBwcm9wZXJ0eSB0byBiZVxuXHRcdC8vIGRlbGV0ZWQgd2l0aCB0aGUgZGVsZXRlIG9wZXJhdG9yXG5cdFx0fSBlbHNlIHtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSggb3duZXIsIHRoaXMuZXhwYW5kbywge1xuXHRcdFx0XHR2YWx1ZTogdmFsdWUsXG5cdFx0XHRcdHdyaXRhYmxlOiB0cnVlLFxuXHRcdFx0XHRjb25maWd1cmFibGU6IHRydWVcblx0XHRcdH0gKTtcblx0XHR9XG5cdFx0cmV0dXJuIG93bmVyWyB0aGlzLmV4cGFuZG8gXTtcblx0fSxcblx0Y2FjaGU6IGZ1bmN0aW9uKCBvd25lciApIHtcblxuXHRcdC8vIFdlIGNhbiBhY2NlcHQgZGF0YSBmb3Igbm9uLWVsZW1lbnQgbm9kZXMgaW4gbW9kZXJuIGJyb3dzZXJzLFxuXHRcdC8vIGJ1dCB3ZSBzaG91bGQgbm90LCBzZWUgIzgzMzUuXG5cdFx0Ly8gQWx3YXlzIHJldHVybiBhbiBlbXB0eSBvYmplY3QuXG5cdFx0aWYgKCAhYWNjZXB0RGF0YSggb3duZXIgKSApIHtcblx0XHRcdHJldHVybiB7fTtcblx0XHR9XG5cblx0XHQvLyBDaGVjayBpZiB0aGUgb3duZXIgb2JqZWN0IGFscmVhZHkgaGFzIGEgY2FjaGVcblx0XHR2YXIgdmFsdWUgPSBvd25lclsgdGhpcy5leHBhbmRvIF07XG5cblx0XHQvLyBJZiBub3QsIGNyZWF0ZSBvbmVcblx0XHRpZiAoICF2YWx1ZSApIHtcblx0XHRcdHZhbHVlID0ge307XG5cblx0XHRcdC8vIFdlIGNhbiBhY2NlcHQgZGF0YSBmb3Igbm9uLWVsZW1lbnQgbm9kZXMgaW4gbW9kZXJuIGJyb3dzZXJzLFxuXHRcdFx0Ly8gYnV0IHdlIHNob3VsZCBub3QsIHNlZSAjODMzNS5cblx0XHRcdC8vIEFsd2F5cyByZXR1cm4gYW4gZW1wdHkgb2JqZWN0LlxuXHRcdFx0aWYgKCBhY2NlcHREYXRhKCBvd25lciApICkge1xuXG5cdFx0XHRcdC8vIElmIGl0IGlzIGEgbm9kZSB1bmxpa2VseSB0byBiZSBzdHJpbmdpZnktZWQgb3IgbG9vcGVkIG92ZXJcblx0XHRcdFx0Ly8gdXNlIHBsYWluIGFzc2lnbm1lbnRcblx0XHRcdFx0aWYgKCBvd25lci5ub2RlVHlwZSApIHtcblx0XHRcdFx0XHRvd25lclsgdGhpcy5leHBhbmRvIF0gPSB2YWx1ZTtcblxuXHRcdFx0XHQvLyBPdGhlcndpc2Ugc2VjdXJlIGl0IGluIGEgbm9uLWVudW1lcmFibGUgcHJvcGVydHlcblx0XHRcdFx0Ly8gY29uZmlndXJhYmxlIG11c3QgYmUgdHJ1ZSB0byBhbGxvdyB0aGUgcHJvcGVydHkgdG8gYmVcblx0XHRcdFx0Ly8gZGVsZXRlZCB3aGVuIGRhdGEgaXMgcmVtb3ZlZFxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSggb3duZXIsIHRoaXMuZXhwYW5kbywge1xuXHRcdFx0XHRcdFx0dmFsdWU6IHZhbHVlLFxuXHRcdFx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlXG5cdFx0XHRcdFx0fSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9LFxuXHRzZXQ6IGZ1bmN0aW9uKCBvd25lciwgZGF0YSwgdmFsdWUgKSB7XG5cdFx0dmFyIHByb3AsXG5cdFx0XHRjYWNoZSA9IHRoaXMuY2FjaGUoIG93bmVyICk7XG5cblx0XHQvLyBIYW5kbGU6IFsgb3duZXIsIGtleSwgdmFsdWUgXSBhcmdzXG5cdFx0aWYgKCB0eXBlb2YgZGF0YSA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdGNhY2hlWyBkYXRhIF0gPSB2YWx1ZTtcblxuXHRcdC8vIEhhbmRsZTogWyBvd25lciwgeyBwcm9wZXJ0aWVzIH0gXSBhcmdzXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Ly8gQ29weSB0aGUgcHJvcGVydGllcyBvbmUtYnktb25lIHRvIHRoZSBjYWNoZSBvYmplY3Rcblx0XHRcdGZvciAoIHByb3AgaW4gZGF0YSApIHtcblx0XHRcdFx0Y2FjaGVbIHByb3AgXSA9IGRhdGFbIHByb3AgXTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGNhY2hlO1xuXHR9LFxuXHRnZXQ6IGZ1bmN0aW9uKCBvd25lciwga2V5ICkge1xuXHRcdHJldHVybiBrZXkgPT09IHVuZGVmaW5lZCA/XG5cdFx0XHR0aGlzLmNhY2hlKCBvd25lciApIDpcblx0XHRcdG93bmVyWyB0aGlzLmV4cGFuZG8gXSAmJiBvd25lclsgdGhpcy5leHBhbmRvIF1bIGtleSBdO1xuXHR9LFxuXHRhY2Nlc3M6IGZ1bmN0aW9uKCBvd25lciwga2V5LCB2YWx1ZSApIHtcblx0XHR2YXIgc3RvcmVkO1xuXG5cdFx0Ly8gSW4gY2FzZXMgd2hlcmUgZWl0aGVyOlxuXHRcdC8vXG5cdFx0Ly8gICAxLiBObyBrZXkgd2FzIHNwZWNpZmllZFxuXHRcdC8vICAgMi4gQSBzdHJpbmcga2V5IHdhcyBzcGVjaWZpZWQsIGJ1dCBubyB2YWx1ZSBwcm92aWRlZFxuXHRcdC8vXG5cdFx0Ly8gVGFrZSB0aGUgXCJyZWFkXCIgcGF0aCBhbmQgYWxsb3cgdGhlIGdldCBtZXRob2QgdG8gZGV0ZXJtaW5lXG5cdFx0Ly8gd2hpY2ggdmFsdWUgdG8gcmV0dXJuLCByZXNwZWN0aXZlbHkgZWl0aGVyOlxuXHRcdC8vXG5cdFx0Ly8gICAxLiBUaGUgZW50aXJlIGNhY2hlIG9iamVjdFxuXHRcdC8vICAgMi4gVGhlIGRhdGEgc3RvcmVkIGF0IHRoZSBrZXlcblx0XHQvL1xuXHRcdGlmICgga2V5ID09PSB1bmRlZmluZWQgfHxcblx0XHRcdFx0KCAoIGtleSAmJiB0eXBlb2Yga2V5ID09PSBcInN0cmluZ1wiICkgJiYgdmFsdWUgPT09IHVuZGVmaW5lZCApICkge1xuXG5cdFx0XHRzdG9yZWQgPSB0aGlzLmdldCggb3duZXIsIGtleSApO1xuXG5cdFx0XHRyZXR1cm4gc3RvcmVkICE9PSB1bmRlZmluZWQgP1xuXHRcdFx0XHRzdG9yZWQgOiB0aGlzLmdldCggb3duZXIsIGpRdWVyeS5jYW1lbENhc2UoIGtleSApICk7XG5cdFx0fVxuXG5cdFx0Ly8gV2hlbiB0aGUga2V5IGlzIG5vdCBhIHN0cmluZywgb3IgYm90aCBhIGtleSBhbmQgdmFsdWVcblx0XHQvLyBhcmUgc3BlY2lmaWVkLCBzZXQgb3IgZXh0ZW5kIChleGlzdGluZyBvYmplY3RzKSB3aXRoIGVpdGhlcjpcblx0XHQvL1xuXHRcdC8vICAgMS4gQW4gb2JqZWN0IG9mIHByb3BlcnRpZXNcblx0XHQvLyAgIDIuIEEga2V5IGFuZCB2YWx1ZVxuXHRcdC8vXG5cdFx0dGhpcy5zZXQoIG93bmVyLCBrZXksIHZhbHVlICk7XG5cblx0XHQvLyBTaW5jZSB0aGUgXCJzZXRcIiBwYXRoIGNhbiBoYXZlIHR3byBwb3NzaWJsZSBlbnRyeSBwb2ludHNcblx0XHQvLyByZXR1cm4gdGhlIGV4cGVjdGVkIGRhdGEgYmFzZWQgb24gd2hpY2ggcGF0aCB3YXMgdGFrZW5bKl1cblx0XHRyZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDoga2V5O1xuXHR9LFxuXHRyZW1vdmU6IGZ1bmN0aW9uKCBvd25lciwga2V5ICkge1xuXHRcdHZhciBpLCBuYW1lLCBjYW1lbCxcblx0XHRcdGNhY2hlID0gb3duZXJbIHRoaXMuZXhwYW5kbyBdO1xuXG5cdFx0aWYgKCBjYWNoZSA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmICgga2V5ID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHR0aGlzLnJlZ2lzdGVyKCBvd25lciApO1xuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Ly8gU3VwcG9ydCBhcnJheSBvciBzcGFjZSBzZXBhcmF0ZWQgc3RyaW5nIG9mIGtleXNcblx0XHRcdGlmICggalF1ZXJ5LmlzQXJyYXkoIGtleSApICkge1xuXG5cdFx0XHRcdC8vIElmIFwibmFtZVwiIGlzIGFuIGFycmF5IG9mIGtleXMuLi5cblx0XHRcdFx0Ly8gV2hlbiBkYXRhIGlzIGluaXRpYWxseSBjcmVhdGVkLCB2aWEgKFwia2V5XCIsIFwidmFsXCIpIHNpZ25hdHVyZSxcblx0XHRcdFx0Ly8ga2V5cyB3aWxsIGJlIGNvbnZlcnRlZCB0byBjYW1lbENhc2UuXG5cdFx0XHRcdC8vIFNpbmNlIHRoZXJlIGlzIG5vIHdheSB0byB0ZWxsIF9ob3dfIGEga2V5IHdhcyBhZGRlZCwgcmVtb3ZlXG5cdFx0XHRcdC8vIGJvdGggcGxhaW4ga2V5IGFuZCBjYW1lbENhc2Uga2V5LiAjMTI3ODZcblx0XHRcdFx0Ly8gVGhpcyB3aWxsIG9ubHkgcGVuYWxpemUgdGhlIGFycmF5IGFyZ3VtZW50IHBhdGguXG5cdFx0XHRcdG5hbWUgPSBrZXkuY29uY2F0KCBrZXkubWFwKCBqUXVlcnkuY2FtZWxDYXNlICkgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNhbWVsID0galF1ZXJ5LmNhbWVsQ2FzZSgga2V5ICk7XG5cblx0XHRcdFx0Ly8gVHJ5IHRoZSBzdHJpbmcgYXMgYSBrZXkgYmVmb3JlIGFueSBtYW5pcHVsYXRpb25cblx0XHRcdFx0aWYgKCBrZXkgaW4gY2FjaGUgKSB7XG5cdFx0XHRcdFx0bmFtZSA9IFsga2V5LCBjYW1lbCBdO1xuXHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0Ly8gSWYgYSBrZXkgd2l0aCB0aGUgc3BhY2VzIGV4aXN0cywgdXNlIGl0LlxuXHRcdFx0XHRcdC8vIE90aGVyd2lzZSwgY3JlYXRlIGFuIGFycmF5IGJ5IG1hdGNoaW5nIG5vbi13aGl0ZXNwYWNlXG5cdFx0XHRcdFx0bmFtZSA9IGNhbWVsO1xuXHRcdFx0XHRcdG5hbWUgPSBuYW1lIGluIGNhY2hlID9cblx0XHRcdFx0XHRcdFsgbmFtZSBdIDogKCBuYW1lLm1hdGNoKCBybm90d2hpdGUgKSB8fCBbXSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGkgPSBuYW1lLmxlbmd0aDtcblxuXHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdGRlbGV0ZSBjYWNoZVsgbmFtZVsgaSBdIF07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gUmVtb3ZlIHRoZSBleHBhbmRvIGlmIHRoZXJlJ3Mgbm8gbW9yZSBkYXRhXG5cdFx0aWYgKCBrZXkgPT09IHVuZGVmaW5lZCB8fCBqUXVlcnkuaXNFbXB0eU9iamVjdCggY2FjaGUgKSApIHtcblxuXHRcdFx0Ly8gU3VwcG9ydDogQ2hyb21lIDw9IDM1LTQ1K1xuXHRcdFx0Ly8gV2Via2l0ICYgQmxpbmsgcGVyZm9ybWFuY2Ugc3VmZmVycyB3aGVuIGRlbGV0aW5nIHByb3BlcnRpZXNcblx0XHRcdC8vIGZyb20gRE9NIG5vZGVzLCBzbyBzZXQgdG8gdW5kZWZpbmVkIGluc3RlYWRcblx0XHRcdC8vIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0zNzg2MDdcblx0XHRcdGlmICggb3duZXIubm9kZVR5cGUgKSB7XG5cdFx0XHRcdG93bmVyWyB0aGlzLmV4cGFuZG8gXSA9IHVuZGVmaW5lZDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGRlbGV0ZSBvd25lclsgdGhpcy5leHBhbmRvIF07XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHRoYXNEYXRhOiBmdW5jdGlvbiggb3duZXIgKSB7XG5cdFx0dmFyIGNhY2hlID0gb3duZXJbIHRoaXMuZXhwYW5kbyBdO1xuXHRcdHJldHVybiBjYWNoZSAhPT0gdW5kZWZpbmVkICYmICFqUXVlcnkuaXNFbXB0eU9iamVjdCggY2FjaGUgKTtcblx0fVxufTtcbnZhciBkYXRhUHJpdiA9IG5ldyBEYXRhKCk7XG5cbnZhciBkYXRhVXNlciA9IG5ldyBEYXRhKCk7XG5cblxuXG4vL1x0SW1wbGVtZW50YXRpb24gU3VtbWFyeVxuLy9cbi8vXHQxLiBFbmZvcmNlIEFQSSBzdXJmYWNlIGFuZCBzZW1hbnRpYyBjb21wYXRpYmlsaXR5IHdpdGggMS45LnggYnJhbmNoXG4vL1x0Mi4gSW1wcm92ZSB0aGUgbW9kdWxlJ3MgbWFpbnRhaW5hYmlsaXR5IGJ5IHJlZHVjaW5nIHRoZSBzdG9yYWdlXG4vL1x0XHRwYXRocyB0byBhIHNpbmdsZSBtZWNoYW5pc20uXG4vL1x0My4gVXNlIHRoZSBzYW1lIHNpbmdsZSBtZWNoYW5pc20gdG8gc3VwcG9ydCBcInByaXZhdGVcIiBhbmQgXCJ1c2VyXCIgZGF0YS5cbi8vXHQ0LiBfTmV2ZXJfIGV4cG9zZSBcInByaXZhdGVcIiBkYXRhIHRvIHVzZXIgY29kZSAoVE9ETzogRHJvcCBfZGF0YSwgX3JlbW92ZURhdGEpXG4vL1x0NS4gQXZvaWQgZXhwb3NpbmcgaW1wbGVtZW50YXRpb24gZGV0YWlscyBvbiB1c2VyIG9iamVjdHMgKGVnLiBleHBhbmRvIHByb3BlcnRpZXMpXG4vL1x0Ni4gUHJvdmlkZSBhIGNsZWFyIHBhdGggZm9yIGltcGxlbWVudGF0aW9uIHVwZ3JhZGUgdG8gV2Vha01hcCBpbiAyMDE0XG5cbnZhciByYnJhY2UgPSAvXig/Olxce1tcXHdcXFddKlxcfXxcXFtbXFx3XFxXXSpcXF0pJC8sXG5cdHJtdWx0aURhc2ggPSAvW0EtWl0vZztcblxuZnVuY3Rpb24gZGF0YUF0dHIoIGVsZW0sIGtleSwgZGF0YSApIHtcblx0dmFyIG5hbWU7XG5cblx0Ly8gSWYgbm90aGluZyB3YXMgZm91bmQgaW50ZXJuYWxseSwgdHJ5IHRvIGZldGNoIGFueVxuXHQvLyBkYXRhIGZyb20gdGhlIEhUTUw1IGRhdGEtKiBhdHRyaWJ1dGVcblx0aWYgKCBkYXRhID09PSB1bmRlZmluZWQgJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRuYW1lID0gXCJkYXRhLVwiICsga2V5LnJlcGxhY2UoIHJtdWx0aURhc2gsIFwiLSQmXCIgKS50b0xvd2VyQ2FzZSgpO1xuXHRcdGRhdGEgPSBlbGVtLmdldEF0dHJpYnV0ZSggbmFtZSApO1xuXG5cdFx0aWYgKCB0eXBlb2YgZGF0YSA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGRhdGEgPSBkYXRhID09PSBcInRydWVcIiA/IHRydWUgOlxuXHRcdFx0XHRcdGRhdGEgPT09IFwiZmFsc2VcIiA/IGZhbHNlIDpcblx0XHRcdFx0XHRkYXRhID09PSBcIm51bGxcIiA/IG51bGwgOlxuXG5cdFx0XHRcdFx0Ly8gT25seSBjb252ZXJ0IHRvIGEgbnVtYmVyIGlmIGl0IGRvZXNuJ3QgY2hhbmdlIHRoZSBzdHJpbmdcblx0XHRcdFx0XHQrZGF0YSArIFwiXCIgPT09IGRhdGEgPyArZGF0YSA6XG5cdFx0XHRcdFx0cmJyYWNlLnRlc3QoIGRhdGEgKSA/IGpRdWVyeS5wYXJzZUpTT04oIGRhdGEgKSA6XG5cdFx0XHRcdFx0ZGF0YTtcblx0XHRcdH0gY2F0Y2ggKCBlICkge31cblxuXHRcdFx0Ly8gTWFrZSBzdXJlIHdlIHNldCB0aGUgZGF0YSBzbyBpdCBpc24ndCBjaGFuZ2VkIGxhdGVyXG5cdFx0XHRkYXRhVXNlci5zZXQoIGVsZW0sIGtleSwgZGF0YSApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRkYXRhID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZGF0YTtcbn1cblxualF1ZXJ5LmV4dGVuZCgge1xuXHRoYXNEYXRhOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gZGF0YVVzZXIuaGFzRGF0YSggZWxlbSApIHx8IGRhdGFQcml2Lmhhc0RhdGEoIGVsZW0gKTtcblx0fSxcblxuXHRkYXRhOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgZGF0YSApIHtcblx0XHRyZXR1cm4gZGF0YVVzZXIuYWNjZXNzKCBlbGVtLCBuYW1lLCBkYXRhICk7XG5cdH0sXG5cblx0cmVtb3ZlRGF0YTogZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7XG5cdFx0ZGF0YVVzZXIucmVtb3ZlKCBlbGVtLCBuYW1lICk7XG5cdH0sXG5cblx0Ly8gVE9ETzogTm93IHRoYXQgYWxsIGNhbGxzIHRvIF9kYXRhIGFuZCBfcmVtb3ZlRGF0YSBoYXZlIGJlZW4gcmVwbGFjZWRcblx0Ly8gd2l0aCBkaXJlY3QgY2FsbHMgdG8gZGF0YVByaXYgbWV0aG9kcywgdGhlc2UgY2FuIGJlIGRlcHJlY2F0ZWQuXG5cdF9kYXRhOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgZGF0YSApIHtcblx0XHRyZXR1cm4gZGF0YVByaXYuYWNjZXNzKCBlbGVtLCBuYW1lLCBkYXRhICk7XG5cdH0sXG5cblx0X3JlbW92ZURhdGE6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkge1xuXHRcdGRhdGFQcml2LnJlbW92ZSggZWxlbSwgbmFtZSApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0ZGF0YTogZnVuY3Rpb24oIGtleSwgdmFsdWUgKSB7XG5cdFx0dmFyIGksIG5hbWUsIGRhdGEsXG5cdFx0XHRlbGVtID0gdGhpc1sgMCBdLFxuXHRcdFx0YXR0cnMgPSBlbGVtICYmIGVsZW0uYXR0cmlidXRlcztcblxuXHRcdC8vIEdldHMgYWxsIHZhbHVlc1xuXHRcdGlmICgga2V5ID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRpZiAoIHRoaXMubGVuZ3RoICkge1xuXHRcdFx0XHRkYXRhID0gZGF0YVVzZXIuZ2V0KCBlbGVtICk7XG5cblx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICYmICFkYXRhUHJpdi5nZXQoIGVsZW0sIFwiaGFzRGF0YUF0dHJzXCIgKSApIHtcblx0XHRcdFx0XHRpID0gYXR0cnMubGVuZ3RoO1xuXHRcdFx0XHRcdHdoaWxlICggaS0tICkge1xuXG5cdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRTExK1xuXHRcdFx0XHRcdFx0Ly8gVGhlIGF0dHJzIGVsZW1lbnRzIGNhbiBiZSBudWxsICgjMTQ4OTQpXG5cdFx0XHRcdFx0XHRpZiAoIGF0dHJzWyBpIF0gKSB7XG5cdFx0XHRcdFx0XHRcdG5hbWUgPSBhdHRyc1sgaSBdLm5hbWU7XG5cdFx0XHRcdFx0XHRcdGlmICggbmFtZS5pbmRleE9mKCBcImRhdGEtXCIgKSA9PT0gMCApIHtcblx0XHRcdFx0XHRcdFx0XHRuYW1lID0galF1ZXJ5LmNhbWVsQ2FzZSggbmFtZS5zbGljZSggNSApICk7XG5cdFx0XHRcdFx0XHRcdFx0ZGF0YUF0dHIoIGVsZW0sIG5hbWUsIGRhdGFbIG5hbWUgXSApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGRhdGFQcml2LnNldCggZWxlbSwgXCJoYXNEYXRhQXR0cnNcIiwgdHJ1ZSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBkYXRhO1xuXHRcdH1cblxuXHRcdC8vIFNldHMgbXVsdGlwbGUgdmFsdWVzXG5cdFx0aWYgKCB0eXBlb2Yga2V5ID09PSBcIm9iamVjdFwiICkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGRhdGFVc2VyLnNldCggdGhpcywga2V5ICk7XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdFx0dmFyIGRhdGEsIGNhbWVsS2V5O1xuXG5cdFx0XHQvLyBUaGUgY2FsbGluZyBqUXVlcnkgb2JqZWN0IChlbGVtZW50IG1hdGNoZXMpIGlzIG5vdCBlbXB0eVxuXHRcdFx0Ly8gKGFuZCB0aGVyZWZvcmUgaGFzIGFuIGVsZW1lbnQgYXBwZWFycyBhdCB0aGlzWyAwIF0pIGFuZCB0aGVcblx0XHRcdC8vIGB2YWx1ZWAgcGFyYW1ldGVyIHdhcyBub3QgdW5kZWZpbmVkLiBBbiBlbXB0eSBqUXVlcnkgb2JqZWN0XG5cdFx0XHQvLyB3aWxsIHJlc3VsdCBpbiBgdW5kZWZpbmVkYCBmb3IgZWxlbSA9IHRoaXNbIDAgXSB3aGljaCB3aWxsXG5cdFx0XHQvLyB0aHJvdyBhbiBleGNlcHRpb24gaWYgYW4gYXR0ZW1wdCB0byByZWFkIGEgZGF0YSBjYWNoZSBpcyBtYWRlLlxuXHRcdFx0aWYgKCBlbGVtICYmIHZhbHVlID09PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0Ly8gQXR0ZW1wdCB0byBnZXQgZGF0YSBmcm9tIHRoZSBjYWNoZVxuXHRcdFx0XHQvLyB3aXRoIHRoZSBrZXkgYXMtaXNcblx0XHRcdFx0ZGF0YSA9IGRhdGFVc2VyLmdldCggZWxlbSwga2V5ICkgfHxcblxuXHRcdFx0XHRcdC8vIFRyeSB0byBmaW5kIGRhc2hlZCBrZXkgaWYgaXQgZXhpc3RzIChnaC0yNzc5KVxuXHRcdFx0XHRcdC8vIFRoaXMgaXMgZm9yIDIuMi54IG9ubHlcblx0XHRcdFx0XHRkYXRhVXNlci5nZXQoIGVsZW0sIGtleS5yZXBsYWNlKCBybXVsdGlEYXNoLCBcIi0kJlwiICkudG9Mb3dlckNhc2UoKSApO1xuXG5cdFx0XHRcdGlmICggZGF0YSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdHJldHVybiBkYXRhO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y2FtZWxLZXkgPSBqUXVlcnkuY2FtZWxDYXNlKCBrZXkgKTtcblxuXHRcdFx0XHQvLyBBdHRlbXB0IHRvIGdldCBkYXRhIGZyb20gdGhlIGNhY2hlXG5cdFx0XHRcdC8vIHdpdGggdGhlIGtleSBjYW1lbGl6ZWRcblx0XHRcdFx0ZGF0YSA9IGRhdGFVc2VyLmdldCggZWxlbSwgY2FtZWxLZXkgKTtcblx0XHRcdFx0aWYgKCBkYXRhICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGRhdGE7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBBdHRlbXB0IHRvIFwiZGlzY292ZXJcIiB0aGUgZGF0YSBpblxuXHRcdFx0XHQvLyBIVE1MNSBjdXN0b20gZGF0YS0qIGF0dHJzXG5cdFx0XHRcdGRhdGEgPSBkYXRhQXR0ciggZWxlbSwgY2FtZWxLZXksIHVuZGVmaW5lZCApO1xuXHRcdFx0XHRpZiAoIGRhdGEgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHRyZXR1cm4gZGF0YTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFdlIHRyaWVkIHJlYWxseSBoYXJkLCBidXQgdGhlIGRhdGEgZG9lc24ndCBleGlzdC5cblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTZXQgdGhlIGRhdGEuLi5cblx0XHRcdGNhbWVsS2V5ID0galF1ZXJ5LmNhbWVsQ2FzZSgga2V5ICk7XG5cdFx0XHR0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHRcdC8vIEZpcnN0LCBhdHRlbXB0IHRvIHN0b3JlIGEgY29weSBvciByZWZlcmVuY2Ugb2YgYW55XG5cdFx0XHRcdC8vIGRhdGEgdGhhdCBtaWdodCd2ZSBiZWVuIHN0b3JlIHdpdGggYSBjYW1lbENhc2VkIGtleS5cblx0XHRcdFx0dmFyIGRhdGEgPSBkYXRhVXNlci5nZXQoIHRoaXMsIGNhbWVsS2V5ICk7XG5cblx0XHRcdFx0Ly8gRm9yIEhUTUw1IGRhdGEtKiBhdHRyaWJ1dGUgaW50ZXJvcCwgd2UgaGF2ZSB0b1xuXHRcdFx0XHQvLyBzdG9yZSBwcm9wZXJ0eSBuYW1lcyB3aXRoIGRhc2hlcyBpbiBhIGNhbWVsQ2FzZSBmb3JtLlxuXHRcdFx0XHQvLyBUaGlzIG1pZ2h0IG5vdCBhcHBseSB0byBhbGwgcHJvcGVydGllcy4uLipcblx0XHRcdFx0ZGF0YVVzZXIuc2V0KCB0aGlzLCBjYW1lbEtleSwgdmFsdWUgKTtcblxuXHRcdFx0XHQvLyAqLi4uIEluIHRoZSBjYXNlIG9mIHByb3BlcnRpZXMgdGhhdCBtaWdodCBfYWN0dWFsbHlfXG5cdFx0XHRcdC8vIGhhdmUgZGFzaGVzLCB3ZSBuZWVkIHRvIGFsc28gc3RvcmUgYSBjb3B5IG9mIHRoYXRcblx0XHRcdFx0Ly8gdW5jaGFuZ2VkIHByb3BlcnR5LlxuXHRcdFx0XHRpZiAoIGtleS5pbmRleE9mKCBcIi1cIiApID4gLTEgJiYgZGF0YSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdGRhdGFVc2VyLnNldCggdGhpcywga2V5LCB2YWx1ZSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9ICk7XG5cdFx0fSwgbnVsbCwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAxLCBudWxsLCB0cnVlICk7XG5cdH0sXG5cblx0cmVtb3ZlRGF0YTogZnVuY3Rpb24oIGtleSApIHtcblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGRhdGFVc2VyLnJlbW92ZSggdGhpcywga2V5ICk7XG5cdFx0fSApO1xuXHR9XG59ICk7XG5cblxualF1ZXJ5LmV4dGVuZCgge1xuXHRxdWV1ZTogZnVuY3Rpb24oIGVsZW0sIHR5cGUsIGRhdGEgKSB7XG5cdFx0dmFyIHF1ZXVlO1xuXG5cdFx0aWYgKCBlbGVtICkge1xuXHRcdFx0dHlwZSA9ICggdHlwZSB8fCBcImZ4XCIgKSArIFwicXVldWVcIjtcblx0XHRcdHF1ZXVlID0gZGF0YVByaXYuZ2V0KCBlbGVtLCB0eXBlICk7XG5cblx0XHRcdC8vIFNwZWVkIHVwIGRlcXVldWUgYnkgZ2V0dGluZyBvdXQgcXVpY2tseSBpZiB0aGlzIGlzIGp1c3QgYSBsb29rdXBcblx0XHRcdGlmICggZGF0YSApIHtcblx0XHRcdFx0aWYgKCAhcXVldWUgfHwgalF1ZXJ5LmlzQXJyYXkoIGRhdGEgKSApIHtcblx0XHRcdFx0XHRxdWV1ZSA9IGRhdGFQcml2LmFjY2VzcyggZWxlbSwgdHlwZSwgalF1ZXJ5Lm1ha2VBcnJheSggZGF0YSApICk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cXVldWUucHVzaCggZGF0YSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcXVldWUgfHwgW107XG5cdFx0fVxuXHR9LFxuXG5cdGRlcXVldWU6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlICkge1xuXHRcdHR5cGUgPSB0eXBlIHx8IFwiZnhcIjtcblxuXHRcdHZhciBxdWV1ZSA9IGpRdWVyeS5xdWV1ZSggZWxlbSwgdHlwZSApLFxuXHRcdFx0c3RhcnRMZW5ndGggPSBxdWV1ZS5sZW5ndGgsXG5cdFx0XHRmbiA9IHF1ZXVlLnNoaWZ0KCksXG5cdFx0XHRob29rcyA9IGpRdWVyeS5fcXVldWVIb29rcyggZWxlbSwgdHlwZSApLFxuXHRcdFx0bmV4dCA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRqUXVlcnkuZGVxdWV1ZSggZWxlbSwgdHlwZSApO1xuXHRcdFx0fTtcblxuXHRcdC8vIElmIHRoZSBmeCBxdWV1ZSBpcyBkZXF1ZXVlZCwgYWx3YXlzIHJlbW92ZSB0aGUgcHJvZ3Jlc3Mgc2VudGluZWxcblx0XHRpZiAoIGZuID09PSBcImlucHJvZ3Jlc3NcIiApIHtcblx0XHRcdGZuID0gcXVldWUuc2hpZnQoKTtcblx0XHRcdHN0YXJ0TGVuZ3RoLS07XG5cdFx0fVxuXG5cdFx0aWYgKCBmbiApIHtcblxuXHRcdFx0Ly8gQWRkIGEgcHJvZ3Jlc3Mgc2VudGluZWwgdG8gcHJldmVudCB0aGUgZnggcXVldWUgZnJvbSBiZWluZ1xuXHRcdFx0Ly8gYXV0b21hdGljYWxseSBkZXF1ZXVlZFxuXHRcdFx0aWYgKCB0eXBlID09PSBcImZ4XCIgKSB7XG5cdFx0XHRcdHF1ZXVlLnVuc2hpZnQoIFwiaW5wcm9ncmVzc1wiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENsZWFyIHVwIHRoZSBsYXN0IHF1ZXVlIHN0b3AgZnVuY3Rpb25cblx0XHRcdGRlbGV0ZSBob29rcy5zdG9wO1xuXHRcdFx0Zm4uY2FsbCggZWxlbSwgbmV4dCwgaG9va3MgKTtcblx0XHR9XG5cblx0XHRpZiAoICFzdGFydExlbmd0aCAmJiBob29rcyApIHtcblx0XHRcdGhvb2tzLmVtcHR5LmZpcmUoKTtcblx0XHR9XG5cdH0sXG5cblx0Ly8gTm90IHB1YmxpYyAtIGdlbmVyYXRlIGEgcXVldWVIb29rcyBvYmplY3QsIG9yIHJldHVybiB0aGUgY3VycmVudCBvbmVcblx0X3F1ZXVlSG9va3M6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlICkge1xuXHRcdHZhciBrZXkgPSB0eXBlICsgXCJxdWV1ZUhvb2tzXCI7XG5cdFx0cmV0dXJuIGRhdGFQcml2LmdldCggZWxlbSwga2V5ICkgfHwgZGF0YVByaXYuYWNjZXNzKCBlbGVtLCBrZXksIHtcblx0XHRcdGVtcHR5OiBqUXVlcnkuQ2FsbGJhY2tzKCBcIm9uY2UgbWVtb3J5XCIgKS5hZGQoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRkYXRhUHJpdi5yZW1vdmUoIGVsZW0sIFsgdHlwZSArIFwicXVldWVcIiwga2V5IF0gKTtcblx0XHRcdH0gKVxuXHRcdH0gKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdHF1ZXVlOiBmdW5jdGlvbiggdHlwZSwgZGF0YSApIHtcblx0XHR2YXIgc2V0dGVyID0gMjtcblxuXHRcdGlmICggdHlwZW9mIHR5cGUgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRkYXRhID0gdHlwZTtcblx0XHRcdHR5cGUgPSBcImZ4XCI7XG5cdFx0XHRzZXR0ZXItLTtcblx0XHR9XG5cblx0XHRpZiAoIGFyZ3VtZW50cy5sZW5ndGggPCBzZXR0ZXIgKSB7XG5cdFx0XHRyZXR1cm4galF1ZXJ5LnF1ZXVlKCB0aGlzWyAwIF0sIHR5cGUgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZGF0YSA9PT0gdW5kZWZpbmVkID9cblx0XHRcdHRoaXMgOlxuXHRcdFx0dGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0dmFyIHF1ZXVlID0galF1ZXJ5LnF1ZXVlKCB0aGlzLCB0eXBlLCBkYXRhICk7XG5cblx0XHRcdFx0Ly8gRW5zdXJlIGEgaG9va3MgZm9yIHRoaXMgcXVldWVcblx0XHRcdFx0alF1ZXJ5Ll9xdWV1ZUhvb2tzKCB0aGlzLCB0eXBlICk7XG5cblx0XHRcdFx0aWYgKCB0eXBlID09PSBcImZ4XCIgJiYgcXVldWVbIDAgXSAhPT0gXCJpbnByb2dyZXNzXCIgKSB7XG5cdFx0XHRcdFx0alF1ZXJ5LmRlcXVldWUoIHRoaXMsIHR5cGUgKTtcblx0XHRcdFx0fVxuXHRcdFx0fSApO1xuXHR9LFxuXHRkZXF1ZXVlOiBmdW5jdGlvbiggdHlwZSApIHtcblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGpRdWVyeS5kZXF1ZXVlKCB0aGlzLCB0eXBlICk7XG5cdFx0fSApO1xuXHR9LFxuXHRjbGVhclF1ZXVlOiBmdW5jdGlvbiggdHlwZSApIHtcblx0XHRyZXR1cm4gdGhpcy5xdWV1ZSggdHlwZSB8fCBcImZ4XCIsIFtdICk7XG5cdH0sXG5cblx0Ly8gR2V0IGEgcHJvbWlzZSByZXNvbHZlZCB3aGVuIHF1ZXVlcyBvZiBhIGNlcnRhaW4gdHlwZVxuXHQvLyBhcmUgZW1wdGllZCAoZnggaXMgdGhlIHR5cGUgYnkgZGVmYXVsdClcblx0cHJvbWlzZTogZnVuY3Rpb24oIHR5cGUsIG9iaiApIHtcblx0XHR2YXIgdG1wLFxuXHRcdFx0Y291bnQgPSAxLFxuXHRcdFx0ZGVmZXIgPSBqUXVlcnkuRGVmZXJyZWQoKSxcblx0XHRcdGVsZW1lbnRzID0gdGhpcyxcblx0XHRcdGkgPSB0aGlzLmxlbmd0aCxcblx0XHRcdHJlc29sdmUgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCAhKCAtLWNvdW50ICkgKSB7XG5cdFx0XHRcdFx0ZGVmZXIucmVzb2x2ZVdpdGgoIGVsZW1lbnRzLCBbIGVsZW1lbnRzIF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblxuXHRcdGlmICggdHlwZW9mIHR5cGUgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRvYmogPSB0eXBlO1xuXHRcdFx0dHlwZSA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0dHlwZSA9IHR5cGUgfHwgXCJmeFwiO1xuXG5cdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHR0bXAgPSBkYXRhUHJpdi5nZXQoIGVsZW1lbnRzWyBpIF0sIHR5cGUgKyBcInF1ZXVlSG9va3NcIiApO1xuXHRcdFx0aWYgKCB0bXAgJiYgdG1wLmVtcHR5ICkge1xuXHRcdFx0XHRjb3VudCsrO1xuXHRcdFx0XHR0bXAuZW1wdHkuYWRkKCByZXNvbHZlICk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJlc29sdmUoKTtcblx0XHRyZXR1cm4gZGVmZXIucHJvbWlzZSggb2JqICk7XG5cdH1cbn0gKTtcbnZhciBwbnVtID0gKCAvWystXT8oPzpcXGQqXFwufClcXGQrKD86W2VFXVsrLV0/XFxkK3wpLyApLnNvdXJjZTtcblxudmFyIHJjc3NOdW0gPSBuZXcgUmVnRXhwKCBcIl4oPzooWystXSk9fCkoXCIgKyBwbnVtICsgXCIpKFthLXolXSopJFwiLCBcImlcIiApO1xuXG5cbnZhciBjc3NFeHBhbmQgPSBbIFwiVG9wXCIsIFwiUmlnaHRcIiwgXCJCb3R0b21cIiwgXCJMZWZ0XCIgXTtcblxudmFyIGlzSGlkZGVuID0gZnVuY3Rpb24oIGVsZW0sIGVsICkge1xuXG5cdFx0Ly8gaXNIaWRkZW4gbWlnaHQgYmUgY2FsbGVkIGZyb20galF1ZXJ5I2ZpbHRlciBmdW5jdGlvbjtcblx0XHQvLyBpbiB0aGF0IGNhc2UsIGVsZW1lbnQgd2lsbCBiZSBzZWNvbmQgYXJndW1lbnRcblx0XHRlbGVtID0gZWwgfHwgZWxlbTtcblx0XHRyZXR1cm4galF1ZXJ5LmNzcyggZWxlbSwgXCJkaXNwbGF5XCIgKSA9PT0gXCJub25lXCIgfHxcblx0XHRcdCFqUXVlcnkuY29udGFpbnMoIGVsZW0ub3duZXJEb2N1bWVudCwgZWxlbSApO1xuXHR9O1xuXG5cblxuZnVuY3Rpb24gYWRqdXN0Q1NTKCBlbGVtLCBwcm9wLCB2YWx1ZVBhcnRzLCB0d2VlbiApIHtcblx0dmFyIGFkanVzdGVkLFxuXHRcdHNjYWxlID0gMSxcblx0XHRtYXhJdGVyYXRpb25zID0gMjAsXG5cdFx0Y3VycmVudFZhbHVlID0gdHdlZW4gP1xuXHRcdFx0ZnVuY3Rpb24oKSB7IHJldHVybiB0d2Vlbi5jdXIoKTsgfSA6XG5cdFx0XHRmdW5jdGlvbigpIHsgcmV0dXJuIGpRdWVyeS5jc3MoIGVsZW0sIHByb3AsIFwiXCIgKTsgfSxcblx0XHRpbml0aWFsID0gY3VycmVudFZhbHVlKCksXG5cdFx0dW5pdCA9IHZhbHVlUGFydHMgJiYgdmFsdWVQYXJ0c1sgMyBdIHx8ICggalF1ZXJ5LmNzc051bWJlclsgcHJvcCBdID8gXCJcIiA6IFwicHhcIiApLFxuXG5cdFx0Ly8gU3RhcnRpbmcgdmFsdWUgY29tcHV0YXRpb24gaXMgcmVxdWlyZWQgZm9yIHBvdGVudGlhbCB1bml0IG1pc21hdGNoZXNcblx0XHRpbml0aWFsSW5Vbml0ID0gKCBqUXVlcnkuY3NzTnVtYmVyWyBwcm9wIF0gfHwgdW5pdCAhPT0gXCJweFwiICYmICtpbml0aWFsICkgJiZcblx0XHRcdHJjc3NOdW0uZXhlYyggalF1ZXJ5LmNzcyggZWxlbSwgcHJvcCApICk7XG5cblx0aWYgKCBpbml0aWFsSW5Vbml0ICYmIGluaXRpYWxJblVuaXRbIDMgXSAhPT0gdW5pdCApIHtcblxuXHRcdC8vIFRydXN0IHVuaXRzIHJlcG9ydGVkIGJ5IGpRdWVyeS5jc3Ncblx0XHR1bml0ID0gdW5pdCB8fCBpbml0aWFsSW5Vbml0WyAzIF07XG5cblx0XHQvLyBNYWtlIHN1cmUgd2UgdXBkYXRlIHRoZSB0d2VlbiBwcm9wZXJ0aWVzIGxhdGVyIG9uXG5cdFx0dmFsdWVQYXJ0cyA9IHZhbHVlUGFydHMgfHwgW107XG5cblx0XHQvLyBJdGVyYXRpdmVseSBhcHByb3hpbWF0ZSBmcm9tIGEgbm9uemVybyBzdGFydGluZyBwb2ludFxuXHRcdGluaXRpYWxJblVuaXQgPSAraW5pdGlhbCB8fCAxO1xuXG5cdFx0ZG8ge1xuXG5cdFx0XHQvLyBJZiBwcmV2aW91cyBpdGVyYXRpb24gemVyb2VkIG91dCwgZG91YmxlIHVudGlsIHdlIGdldCAqc29tZXRoaW5nKi5cblx0XHRcdC8vIFVzZSBzdHJpbmcgZm9yIGRvdWJsaW5nIHNvIHdlIGRvbid0IGFjY2lkZW50YWxseSBzZWUgc2NhbGUgYXMgdW5jaGFuZ2VkIGJlbG93XG5cdFx0XHRzY2FsZSA9IHNjYWxlIHx8IFwiLjVcIjtcblxuXHRcdFx0Ly8gQWRqdXN0IGFuZCBhcHBseVxuXHRcdFx0aW5pdGlhbEluVW5pdCA9IGluaXRpYWxJblVuaXQgLyBzY2FsZTtcblx0XHRcdGpRdWVyeS5zdHlsZSggZWxlbSwgcHJvcCwgaW5pdGlhbEluVW5pdCArIHVuaXQgKTtcblxuXHRcdC8vIFVwZGF0ZSBzY2FsZSwgdG9sZXJhdGluZyB6ZXJvIG9yIE5hTiBmcm9tIHR3ZWVuLmN1cigpXG5cdFx0Ly8gQnJlYWsgdGhlIGxvb3AgaWYgc2NhbGUgaXMgdW5jaGFuZ2VkIG9yIHBlcmZlY3QsIG9yIGlmIHdlJ3ZlIGp1c3QgaGFkIGVub3VnaC5cblx0XHR9IHdoaWxlIChcblx0XHRcdHNjYWxlICE9PSAoIHNjYWxlID0gY3VycmVudFZhbHVlKCkgLyBpbml0aWFsICkgJiYgc2NhbGUgIT09IDEgJiYgLS1tYXhJdGVyYXRpb25zXG5cdFx0KTtcblx0fVxuXG5cdGlmICggdmFsdWVQYXJ0cyApIHtcblx0XHRpbml0aWFsSW5Vbml0ID0gK2luaXRpYWxJblVuaXQgfHwgK2luaXRpYWwgfHwgMDtcblxuXHRcdC8vIEFwcGx5IHJlbGF0aXZlIG9mZnNldCAoKz0vLT0pIGlmIHNwZWNpZmllZFxuXHRcdGFkanVzdGVkID0gdmFsdWVQYXJ0c1sgMSBdID9cblx0XHRcdGluaXRpYWxJblVuaXQgKyAoIHZhbHVlUGFydHNbIDEgXSArIDEgKSAqIHZhbHVlUGFydHNbIDIgXSA6XG5cdFx0XHQrdmFsdWVQYXJ0c1sgMiBdO1xuXHRcdGlmICggdHdlZW4gKSB7XG5cdFx0XHR0d2Vlbi51bml0ID0gdW5pdDtcblx0XHRcdHR3ZWVuLnN0YXJ0ID0gaW5pdGlhbEluVW5pdDtcblx0XHRcdHR3ZWVuLmVuZCA9IGFkanVzdGVkO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gYWRqdXN0ZWQ7XG59XG52YXIgcmNoZWNrYWJsZVR5cGUgPSAoIC9eKD86Y2hlY2tib3h8cmFkaW8pJC9pICk7XG5cbnZhciBydGFnTmFtZSA9ICggLzwoW1xcdzotXSspLyApO1xuXG52YXIgcnNjcmlwdFR5cGUgPSAoIC9eJHxcXC8oPzpqYXZhfGVjbWEpc2NyaXB0L2kgKTtcblxuXG5cbi8vIFdlIGhhdmUgdG8gY2xvc2UgdGhlc2UgdGFncyB0byBzdXBwb3J0IFhIVE1MICgjMTMyMDApXG52YXIgd3JhcE1hcCA9IHtcblxuXHQvLyBTdXBwb3J0OiBJRTlcblx0b3B0aW9uOiBbIDEsIFwiPHNlbGVjdCBtdWx0aXBsZT0nbXVsdGlwbGUnPlwiLCBcIjwvc2VsZWN0PlwiIF0sXG5cblx0Ly8gWEhUTUwgcGFyc2VycyBkbyBub3QgbWFnaWNhbGx5IGluc2VydCBlbGVtZW50cyBpbiB0aGVcblx0Ly8gc2FtZSB3YXkgdGhhdCB0YWcgc291cCBwYXJzZXJzIGRvLiBTbyB3ZSBjYW5ub3Qgc2hvcnRlblxuXHQvLyB0aGlzIGJ5IG9taXR0aW5nIDx0Ym9keT4gb3Igb3RoZXIgcmVxdWlyZWQgZWxlbWVudHMuXG5cdHRoZWFkOiBbIDEsIFwiPHRhYmxlPlwiLCBcIjwvdGFibGU+XCIgXSxcblx0Y29sOiBbIDIsIFwiPHRhYmxlPjxjb2xncm91cD5cIiwgXCI8L2NvbGdyb3VwPjwvdGFibGU+XCIgXSxcblx0dHI6IFsgMiwgXCI8dGFibGU+PHRib2R5PlwiLCBcIjwvdGJvZHk+PC90YWJsZT5cIiBdLFxuXHR0ZDogWyAzLCBcIjx0YWJsZT48dGJvZHk+PHRyPlwiLCBcIjwvdHI+PC90Ym9keT48L3RhYmxlPlwiIF0sXG5cblx0X2RlZmF1bHQ6IFsgMCwgXCJcIiwgXCJcIiBdXG59O1xuXG4vLyBTdXBwb3J0OiBJRTlcbndyYXBNYXAub3B0Z3JvdXAgPSB3cmFwTWFwLm9wdGlvbjtcblxud3JhcE1hcC50Ym9keSA9IHdyYXBNYXAudGZvb3QgPSB3cmFwTWFwLmNvbGdyb3VwID0gd3JhcE1hcC5jYXB0aW9uID0gd3JhcE1hcC50aGVhZDtcbndyYXBNYXAudGggPSB3cmFwTWFwLnRkO1xuXG5cbmZ1bmN0aW9uIGdldEFsbCggY29udGV4dCwgdGFnICkge1xuXG5cdC8vIFN1cHBvcnQ6IElFOS0xMStcblx0Ly8gVXNlIHR5cGVvZiB0byBhdm9pZCB6ZXJvLWFyZ3VtZW50IG1ldGhvZCBpbnZvY2F0aW9uIG9uIGhvc3Qgb2JqZWN0cyAoIzE1MTUxKVxuXHR2YXIgcmV0ID0gdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgIT09IFwidW5kZWZpbmVkXCIgP1xuXHRcdFx0Y29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSggdGFnIHx8IFwiKlwiICkgOlxuXHRcdFx0dHlwZW9mIGNvbnRleHQucXVlcnlTZWxlY3RvckFsbCAhPT0gXCJ1bmRlZmluZWRcIiA/XG5cdFx0XHRcdGNvbnRleHQucXVlcnlTZWxlY3RvckFsbCggdGFnIHx8IFwiKlwiICkgOlxuXHRcdFx0W107XG5cblx0cmV0dXJuIHRhZyA9PT0gdW5kZWZpbmVkIHx8IHRhZyAmJiBqUXVlcnkubm9kZU5hbWUoIGNvbnRleHQsIHRhZyApID9cblx0XHRqUXVlcnkubWVyZ2UoIFsgY29udGV4dCBdLCByZXQgKSA6XG5cdFx0cmV0O1xufVxuXG5cbi8vIE1hcmsgc2NyaXB0cyBhcyBoYXZpbmcgYWxyZWFkeSBiZWVuIGV2YWx1YXRlZFxuZnVuY3Rpb24gc2V0R2xvYmFsRXZhbCggZWxlbXMsIHJlZkVsZW1lbnRzICkge1xuXHR2YXIgaSA9IDAsXG5cdFx0bCA9IGVsZW1zLmxlbmd0aDtcblxuXHRmb3IgKCA7IGkgPCBsOyBpKysgKSB7XG5cdFx0ZGF0YVByaXYuc2V0KFxuXHRcdFx0ZWxlbXNbIGkgXSxcblx0XHRcdFwiZ2xvYmFsRXZhbFwiLFxuXHRcdFx0IXJlZkVsZW1lbnRzIHx8IGRhdGFQcml2LmdldCggcmVmRWxlbWVudHNbIGkgXSwgXCJnbG9iYWxFdmFsXCIgKVxuXHRcdCk7XG5cdH1cbn1cblxuXG52YXIgcmh0bWwgPSAvPHwmIz9cXHcrOy87XG5cbmZ1bmN0aW9uIGJ1aWxkRnJhZ21lbnQoIGVsZW1zLCBjb250ZXh0LCBzY3JpcHRzLCBzZWxlY3Rpb24sIGlnbm9yZWQgKSB7XG5cdHZhciBlbGVtLCB0bXAsIHRhZywgd3JhcCwgY29udGFpbnMsIGosXG5cdFx0ZnJhZ21lbnQgPSBjb250ZXh0LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxcblx0XHRub2RlcyA9IFtdLFxuXHRcdGkgPSAwLFxuXHRcdGwgPSBlbGVtcy5sZW5ndGg7XG5cblx0Zm9yICggOyBpIDwgbDsgaSsrICkge1xuXHRcdGVsZW0gPSBlbGVtc1sgaSBdO1xuXG5cdFx0aWYgKCBlbGVtIHx8IGVsZW0gPT09IDAgKSB7XG5cblx0XHRcdC8vIEFkZCBub2RlcyBkaXJlY3RseVxuXHRcdFx0aWYgKCBqUXVlcnkudHlwZSggZWxlbSApID09PSBcIm9iamVjdFwiICkge1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQ8NC4xLCBQaGFudG9tSlM8MlxuXHRcdFx0XHQvLyBwdXNoLmFwcGx5KF8sIGFycmF5bGlrZSkgdGhyb3dzIG9uIGFuY2llbnQgV2ViS2l0XG5cdFx0XHRcdGpRdWVyeS5tZXJnZSggbm9kZXMsIGVsZW0ubm9kZVR5cGUgPyBbIGVsZW0gXSA6IGVsZW0gKTtcblxuXHRcdFx0Ly8gQ29udmVydCBub24taHRtbCBpbnRvIGEgdGV4dCBub2RlXG5cdFx0XHR9IGVsc2UgaWYgKCAhcmh0bWwudGVzdCggZWxlbSApICkge1xuXHRcdFx0XHRub2Rlcy5wdXNoKCBjb250ZXh0LmNyZWF0ZVRleHROb2RlKCBlbGVtICkgKTtcblxuXHRcdFx0Ly8gQ29udmVydCBodG1sIGludG8gRE9NIG5vZGVzXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0bXAgPSB0bXAgfHwgZnJhZ21lbnQuYXBwZW5kQ2hpbGQoIGNvbnRleHQuY3JlYXRlRWxlbWVudCggXCJkaXZcIiApICk7XG5cblx0XHRcdFx0Ly8gRGVzZXJpYWxpemUgYSBzdGFuZGFyZCByZXByZXNlbnRhdGlvblxuXHRcdFx0XHR0YWcgPSAoIHJ0YWdOYW1lLmV4ZWMoIGVsZW0gKSB8fCBbIFwiXCIsIFwiXCIgXSApWyAxIF0udG9Mb3dlckNhc2UoKTtcblx0XHRcdFx0d3JhcCA9IHdyYXBNYXBbIHRhZyBdIHx8IHdyYXBNYXAuX2RlZmF1bHQ7XG5cdFx0XHRcdHRtcC5pbm5lckhUTUwgPSB3cmFwWyAxIF0gKyBqUXVlcnkuaHRtbFByZWZpbHRlciggZWxlbSApICsgd3JhcFsgMiBdO1xuXG5cdFx0XHRcdC8vIERlc2NlbmQgdGhyb3VnaCB3cmFwcGVycyB0byB0aGUgcmlnaHQgY29udGVudFxuXHRcdFx0XHRqID0gd3JhcFsgMCBdO1xuXHRcdFx0XHR3aGlsZSAoIGotLSApIHtcblx0XHRcdFx0XHR0bXAgPSB0bXAubGFzdENoaWxkO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogQW5kcm9pZDw0LjEsIFBoYW50b21KUzwyXG5cdFx0XHRcdC8vIHB1c2guYXBwbHkoXywgYXJyYXlsaWtlKSB0aHJvd3Mgb24gYW5jaWVudCBXZWJLaXRcblx0XHRcdFx0alF1ZXJ5Lm1lcmdlKCBub2RlcywgdG1wLmNoaWxkTm9kZXMgKTtcblxuXHRcdFx0XHQvLyBSZW1lbWJlciB0aGUgdG9wLWxldmVsIGNvbnRhaW5lclxuXHRcdFx0XHR0bXAgPSBmcmFnbWVudC5maXJzdENoaWxkO1xuXG5cdFx0XHRcdC8vIEVuc3VyZSB0aGUgY3JlYXRlZCBub2RlcyBhcmUgb3JwaGFuZWQgKCMxMjM5Milcblx0XHRcdFx0dG1wLnRleHRDb250ZW50ID0gXCJcIjtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBSZW1vdmUgd3JhcHBlciBmcm9tIGZyYWdtZW50XG5cdGZyYWdtZW50LnRleHRDb250ZW50ID0gXCJcIjtcblxuXHRpID0gMDtcblx0d2hpbGUgKCAoIGVsZW0gPSBub2Rlc1sgaSsrIF0gKSApIHtcblxuXHRcdC8vIFNraXAgZWxlbWVudHMgYWxyZWFkeSBpbiB0aGUgY29udGV4dCBjb2xsZWN0aW9uICh0cmFjLTQwODcpXG5cdFx0aWYgKCBzZWxlY3Rpb24gJiYgalF1ZXJ5LmluQXJyYXkoIGVsZW0sIHNlbGVjdGlvbiApID4gLTEgKSB7XG5cdFx0XHRpZiAoIGlnbm9yZWQgKSB7XG5cdFx0XHRcdGlnbm9yZWQucHVzaCggZWxlbSApO1xuXHRcdFx0fVxuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0Y29udGFpbnMgPSBqUXVlcnkuY29udGFpbnMoIGVsZW0ub3duZXJEb2N1bWVudCwgZWxlbSApO1xuXG5cdFx0Ly8gQXBwZW5kIHRvIGZyYWdtZW50XG5cdFx0dG1wID0gZ2V0QWxsKCBmcmFnbWVudC5hcHBlbmRDaGlsZCggZWxlbSApLCBcInNjcmlwdFwiICk7XG5cblx0XHQvLyBQcmVzZXJ2ZSBzY3JpcHQgZXZhbHVhdGlvbiBoaXN0b3J5XG5cdFx0aWYgKCBjb250YWlucyApIHtcblx0XHRcdHNldEdsb2JhbEV2YWwoIHRtcCApO1xuXHRcdH1cblxuXHRcdC8vIENhcHR1cmUgZXhlY3V0YWJsZXNcblx0XHRpZiAoIHNjcmlwdHMgKSB7XG5cdFx0XHRqID0gMDtcblx0XHRcdHdoaWxlICggKCBlbGVtID0gdG1wWyBqKysgXSApICkge1xuXHRcdFx0XHRpZiAoIHJzY3JpcHRUeXBlLnRlc3QoIGVsZW0udHlwZSB8fCBcIlwiICkgKSB7XG5cdFx0XHRcdFx0c2NyaXB0cy5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gZnJhZ21lbnQ7XG59XG5cblxuKCBmdW5jdGlvbigpIHtcblx0dmFyIGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLFxuXHRcdGRpdiA9IGZyYWdtZW50LmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImRpdlwiICkgKSxcblx0XHRpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiaW5wdXRcIiApO1xuXG5cdC8vIFN1cHBvcnQ6IEFuZHJvaWQgNC4wLTQuMywgU2FmYXJpPD01LjFcblx0Ly8gQ2hlY2sgc3RhdGUgbG9zdCBpZiB0aGUgbmFtZSBpcyBzZXQgKCMxMTIxNylcblx0Ly8gU3VwcG9ydDogV2luZG93cyBXZWIgQXBwcyAoV1dBKVxuXHQvLyBgbmFtZWAgYW5kIGB0eXBlYCBtdXN0IHVzZSAuc2V0QXR0cmlidXRlIGZvciBXV0EgKCMxNDkwMSlcblx0aW5wdXQuc2V0QXR0cmlidXRlKCBcInR5cGVcIiwgXCJyYWRpb1wiICk7XG5cdGlucHV0LnNldEF0dHJpYnV0ZSggXCJjaGVja2VkXCIsIFwiY2hlY2tlZFwiICk7XG5cdGlucHV0LnNldEF0dHJpYnV0ZSggXCJuYW1lXCIsIFwidFwiICk7XG5cblx0ZGl2LmFwcGVuZENoaWxkKCBpbnB1dCApO1xuXG5cdC8vIFN1cHBvcnQ6IFNhZmFyaTw9NS4xLCBBbmRyb2lkPDQuMlxuXHQvLyBPbGRlciBXZWJLaXQgZG9lc24ndCBjbG9uZSBjaGVja2VkIHN0YXRlIGNvcnJlY3RseSBpbiBmcmFnbWVudHNcblx0c3VwcG9ydC5jaGVja0Nsb25lID0gZGl2LmNsb25lTm9kZSggdHJ1ZSApLmNsb25lTm9kZSggdHJ1ZSApLmxhc3RDaGlsZC5jaGVja2VkO1xuXG5cdC8vIFN1cHBvcnQ6IElFPD0xMStcblx0Ly8gTWFrZSBzdXJlIHRleHRhcmVhIChhbmQgY2hlY2tib3gpIGRlZmF1bHRWYWx1ZSBpcyBwcm9wZXJseSBjbG9uZWRcblx0ZGl2LmlubmVySFRNTCA9IFwiPHRleHRhcmVhPng8L3RleHRhcmVhPlwiO1xuXHRzdXBwb3J0Lm5vQ2xvbmVDaGVja2VkID0gISFkaXYuY2xvbmVOb2RlKCB0cnVlICkubGFzdENoaWxkLmRlZmF1bHRWYWx1ZTtcbn0gKSgpO1xuXG5cbnZhclxuXHRya2V5RXZlbnQgPSAvXmtleS8sXG5cdHJtb3VzZUV2ZW50ID0gL14oPzptb3VzZXxwb2ludGVyfGNvbnRleHRtZW51fGRyYWd8ZHJvcCl8Y2xpY2svLFxuXHRydHlwZW5hbWVzcGFjZSA9IC9eKFteLl0qKSg/OlxcLiguKyl8KS87XG5cbmZ1bmN0aW9uIHJldHVyblRydWUoKSB7XG5cdHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiByZXR1cm5GYWxzZSgpIHtcblx0cmV0dXJuIGZhbHNlO1xufVxuXG4vLyBTdXBwb3J0OiBJRTlcbi8vIFNlZSAjMTMzOTMgZm9yIG1vcmUgaW5mb1xuZnVuY3Rpb24gc2FmZUFjdGl2ZUVsZW1lbnQoKSB7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG5cdH0gY2F0Y2ggKCBlcnIgKSB7IH1cbn1cblxuZnVuY3Rpb24gb24oIGVsZW0sIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4sIG9uZSApIHtcblx0dmFyIG9yaWdGbiwgdHlwZTtcblxuXHQvLyBUeXBlcyBjYW4gYmUgYSBtYXAgb2YgdHlwZXMvaGFuZGxlcnNcblx0aWYgKCB0eXBlb2YgdHlwZXMgPT09IFwib2JqZWN0XCIgKSB7XG5cblx0XHQvLyAoIHR5cGVzLU9iamVjdCwgc2VsZWN0b3IsIGRhdGEgKVxuXHRcdGlmICggdHlwZW9mIHNlbGVjdG9yICE9PSBcInN0cmluZ1wiICkge1xuXG5cdFx0XHQvLyAoIHR5cGVzLU9iamVjdCwgZGF0YSApXG5cdFx0XHRkYXRhID0gZGF0YSB8fCBzZWxlY3Rvcjtcblx0XHRcdHNlbGVjdG9yID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRmb3IgKCB0eXBlIGluIHR5cGVzICkge1xuXHRcdFx0b24oIGVsZW0sIHR5cGUsIHNlbGVjdG9yLCBkYXRhLCB0eXBlc1sgdHlwZSBdLCBvbmUgKTtcblx0XHR9XG5cdFx0cmV0dXJuIGVsZW07XG5cdH1cblxuXHRpZiAoIGRhdGEgPT0gbnVsbCAmJiBmbiA9PSBudWxsICkge1xuXG5cdFx0Ly8gKCB0eXBlcywgZm4gKVxuXHRcdGZuID0gc2VsZWN0b3I7XG5cdFx0ZGF0YSA9IHNlbGVjdG9yID0gdW5kZWZpbmVkO1xuXHR9IGVsc2UgaWYgKCBmbiA9PSBudWxsICkge1xuXHRcdGlmICggdHlwZW9mIHNlbGVjdG9yID09PSBcInN0cmluZ1wiICkge1xuXG5cdFx0XHQvLyAoIHR5cGVzLCBzZWxlY3RvciwgZm4gKVxuXHRcdFx0Zm4gPSBkYXRhO1xuXHRcdFx0ZGF0YSA9IHVuZGVmaW5lZDtcblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyAoIHR5cGVzLCBkYXRhLCBmbiApXG5cdFx0XHRmbiA9IGRhdGE7XG5cdFx0XHRkYXRhID0gc2VsZWN0b3I7XG5cdFx0XHRzZWxlY3RvciA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdH1cblx0aWYgKCBmbiA9PT0gZmFsc2UgKSB7XG5cdFx0Zm4gPSByZXR1cm5GYWxzZTtcblx0fSBlbHNlIGlmICggIWZuICkge1xuXHRcdHJldHVybiBlbGVtO1xuXHR9XG5cblx0aWYgKCBvbmUgPT09IDEgKSB7XG5cdFx0b3JpZ0ZuID0gZm47XG5cdFx0Zm4gPSBmdW5jdGlvbiggZXZlbnQgKSB7XG5cblx0XHRcdC8vIENhbiB1c2UgYW4gZW1wdHkgc2V0LCBzaW5jZSBldmVudCBjb250YWlucyB0aGUgaW5mb1xuXHRcdFx0alF1ZXJ5KCkub2ZmKCBldmVudCApO1xuXHRcdFx0cmV0dXJuIG9yaWdGbi5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0fTtcblxuXHRcdC8vIFVzZSBzYW1lIGd1aWQgc28gY2FsbGVyIGNhbiByZW1vdmUgdXNpbmcgb3JpZ0ZuXG5cdFx0Zm4uZ3VpZCA9IG9yaWdGbi5ndWlkIHx8ICggb3JpZ0ZuLmd1aWQgPSBqUXVlcnkuZ3VpZCsrICk7XG5cdH1cblx0cmV0dXJuIGVsZW0uZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0alF1ZXJ5LmV2ZW50LmFkZCggdGhpcywgdHlwZXMsIGZuLCBkYXRhLCBzZWxlY3RvciApO1xuXHR9ICk7XG59XG5cbi8qXG4gKiBIZWxwZXIgZnVuY3Rpb25zIGZvciBtYW5hZ2luZyBldmVudHMgLS0gbm90IHBhcnQgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuXG4gKiBQcm9wcyB0byBEZWFuIEVkd2FyZHMnIGFkZEV2ZW50IGxpYnJhcnkgZm9yIG1hbnkgb2YgdGhlIGlkZWFzLlxuICovXG5qUXVlcnkuZXZlbnQgPSB7XG5cblx0Z2xvYmFsOiB7fSxcblxuXHRhZGQ6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlcywgaGFuZGxlciwgZGF0YSwgc2VsZWN0b3IgKSB7XG5cblx0XHR2YXIgaGFuZGxlT2JqSW4sIGV2ZW50SGFuZGxlLCB0bXAsXG5cdFx0XHRldmVudHMsIHQsIGhhbmRsZU9iaixcblx0XHRcdHNwZWNpYWwsIGhhbmRsZXJzLCB0eXBlLCBuYW1lc3BhY2VzLCBvcmlnVHlwZSxcblx0XHRcdGVsZW1EYXRhID0gZGF0YVByaXYuZ2V0KCBlbGVtICk7XG5cblx0XHQvLyBEb24ndCBhdHRhY2ggZXZlbnRzIHRvIG5vRGF0YSBvciB0ZXh0L2NvbW1lbnQgbm9kZXMgKGJ1dCBhbGxvdyBwbGFpbiBvYmplY3RzKVxuXHRcdGlmICggIWVsZW1EYXRhICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIENhbGxlciBjYW4gcGFzcyBpbiBhbiBvYmplY3Qgb2YgY3VzdG9tIGRhdGEgaW4gbGlldSBvZiB0aGUgaGFuZGxlclxuXHRcdGlmICggaGFuZGxlci5oYW5kbGVyICkge1xuXHRcdFx0aGFuZGxlT2JqSW4gPSBoYW5kbGVyO1xuXHRcdFx0aGFuZGxlciA9IGhhbmRsZU9iakluLmhhbmRsZXI7XG5cdFx0XHRzZWxlY3RvciA9IGhhbmRsZU9iakluLnNlbGVjdG9yO1xuXHRcdH1cblxuXHRcdC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBoYW5kbGVyIGhhcyBhIHVuaXF1ZSBJRCwgdXNlZCB0byBmaW5kL3JlbW92ZSBpdCBsYXRlclxuXHRcdGlmICggIWhhbmRsZXIuZ3VpZCApIHtcblx0XHRcdGhhbmRsZXIuZ3VpZCA9IGpRdWVyeS5ndWlkKys7XG5cdFx0fVxuXG5cdFx0Ly8gSW5pdCB0aGUgZWxlbWVudCdzIGV2ZW50IHN0cnVjdHVyZSBhbmQgbWFpbiBoYW5kbGVyLCBpZiB0aGlzIGlzIHRoZSBmaXJzdFxuXHRcdGlmICggISggZXZlbnRzID0gZWxlbURhdGEuZXZlbnRzICkgKSB7XG5cdFx0XHRldmVudHMgPSBlbGVtRGF0YS5ldmVudHMgPSB7fTtcblx0XHR9XG5cdFx0aWYgKCAhKCBldmVudEhhbmRsZSA9IGVsZW1EYXRhLmhhbmRsZSApICkge1xuXHRcdFx0ZXZlbnRIYW5kbGUgPSBlbGVtRGF0YS5oYW5kbGUgPSBmdW5jdGlvbiggZSApIHtcblxuXHRcdFx0XHQvLyBEaXNjYXJkIHRoZSBzZWNvbmQgZXZlbnQgb2YgYSBqUXVlcnkuZXZlbnQudHJpZ2dlcigpIGFuZFxuXHRcdFx0XHQvLyB3aGVuIGFuIGV2ZW50IGlzIGNhbGxlZCBhZnRlciBhIHBhZ2UgaGFzIHVubG9hZGVkXG5cdFx0XHRcdHJldHVybiB0eXBlb2YgalF1ZXJ5ICE9PSBcInVuZGVmaW5lZFwiICYmIGpRdWVyeS5ldmVudC50cmlnZ2VyZWQgIT09IGUudHlwZSA/XG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LmRpc3BhdGNoLmFwcGx5KCBlbGVtLCBhcmd1bWVudHMgKSA6IHVuZGVmaW5lZDtcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0Ly8gSGFuZGxlIG11bHRpcGxlIGV2ZW50cyBzZXBhcmF0ZWQgYnkgYSBzcGFjZVxuXHRcdHR5cGVzID0gKCB0eXBlcyB8fCBcIlwiICkubWF0Y2goIHJub3R3aGl0ZSApIHx8IFsgXCJcIiBdO1xuXHRcdHQgPSB0eXBlcy5sZW5ndGg7XG5cdFx0d2hpbGUgKCB0LS0gKSB7XG5cdFx0XHR0bXAgPSBydHlwZW5hbWVzcGFjZS5leGVjKCB0eXBlc1sgdCBdICkgfHwgW107XG5cdFx0XHR0eXBlID0gb3JpZ1R5cGUgPSB0bXBbIDEgXTtcblx0XHRcdG5hbWVzcGFjZXMgPSAoIHRtcFsgMiBdIHx8IFwiXCIgKS5zcGxpdCggXCIuXCIgKS5zb3J0KCk7XG5cblx0XHRcdC8vIFRoZXJlICptdXN0KiBiZSBhIHR5cGUsIG5vIGF0dGFjaGluZyBuYW1lc3BhY2Utb25seSBoYW5kbGVyc1xuXHRcdFx0aWYgKCAhdHlwZSApIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIGV2ZW50IGNoYW5nZXMgaXRzIHR5cGUsIHVzZSB0aGUgc3BlY2lhbCBldmVudCBoYW5kbGVycyBmb3IgdGhlIGNoYW5nZWQgdHlwZVxuXHRcdFx0c3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge307XG5cblx0XHRcdC8vIElmIHNlbGVjdG9yIGRlZmluZWQsIGRldGVybWluZSBzcGVjaWFsIGV2ZW50IGFwaSB0eXBlLCBvdGhlcndpc2UgZ2l2ZW4gdHlwZVxuXHRcdFx0dHlwZSA9ICggc2VsZWN0b3IgPyBzcGVjaWFsLmRlbGVnYXRlVHlwZSA6IHNwZWNpYWwuYmluZFR5cGUgKSB8fCB0eXBlO1xuXG5cdFx0XHQvLyBVcGRhdGUgc3BlY2lhbCBiYXNlZCBvbiBuZXdseSByZXNldCB0eXBlXG5cdFx0XHRzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fTtcblxuXHRcdFx0Ly8gaGFuZGxlT2JqIGlzIHBhc3NlZCB0byBhbGwgZXZlbnQgaGFuZGxlcnNcblx0XHRcdGhhbmRsZU9iaiA9IGpRdWVyeS5leHRlbmQoIHtcblx0XHRcdFx0dHlwZTogdHlwZSxcblx0XHRcdFx0b3JpZ1R5cGU6IG9yaWdUeXBlLFxuXHRcdFx0XHRkYXRhOiBkYXRhLFxuXHRcdFx0XHRoYW5kbGVyOiBoYW5kbGVyLFxuXHRcdFx0XHRndWlkOiBoYW5kbGVyLmd1aWQsXG5cdFx0XHRcdHNlbGVjdG9yOiBzZWxlY3Rvcixcblx0XHRcdFx0bmVlZHNDb250ZXh0OiBzZWxlY3RvciAmJiBqUXVlcnkuZXhwci5tYXRjaC5uZWVkc0NvbnRleHQudGVzdCggc2VsZWN0b3IgKSxcblx0XHRcdFx0bmFtZXNwYWNlOiBuYW1lc3BhY2VzLmpvaW4oIFwiLlwiIClcblx0XHRcdH0sIGhhbmRsZU9iakluICk7XG5cblx0XHRcdC8vIEluaXQgdGhlIGV2ZW50IGhhbmRsZXIgcXVldWUgaWYgd2UncmUgdGhlIGZpcnN0XG5cdFx0XHRpZiAoICEoIGhhbmRsZXJzID0gZXZlbnRzWyB0eXBlIF0gKSApIHtcblx0XHRcdFx0aGFuZGxlcnMgPSBldmVudHNbIHR5cGUgXSA9IFtdO1xuXHRcdFx0XHRoYW5kbGVycy5kZWxlZ2F0ZUNvdW50ID0gMDtcblxuXHRcdFx0XHQvLyBPbmx5IHVzZSBhZGRFdmVudExpc3RlbmVyIGlmIHRoZSBzcGVjaWFsIGV2ZW50cyBoYW5kbGVyIHJldHVybnMgZmFsc2Vcblx0XHRcdFx0aWYgKCAhc3BlY2lhbC5zZXR1cCB8fFxuXHRcdFx0XHRcdHNwZWNpYWwuc2V0dXAuY2FsbCggZWxlbSwgZGF0YSwgbmFtZXNwYWNlcywgZXZlbnRIYW5kbGUgKSA9PT0gZmFsc2UgKSB7XG5cblx0XHRcdFx0XHRpZiAoIGVsZW0uYWRkRXZlbnRMaXN0ZW5lciApIHtcblx0XHRcdFx0XHRcdGVsZW0uYWRkRXZlbnRMaXN0ZW5lciggdHlwZSwgZXZlbnRIYW5kbGUgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKCBzcGVjaWFsLmFkZCApIHtcblx0XHRcdFx0c3BlY2lhbC5hZGQuY2FsbCggZWxlbSwgaGFuZGxlT2JqICk7XG5cblx0XHRcdFx0aWYgKCAhaGFuZGxlT2JqLmhhbmRsZXIuZ3VpZCApIHtcblx0XHRcdFx0XHRoYW5kbGVPYmouaGFuZGxlci5ndWlkID0gaGFuZGxlci5ndWlkO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIEFkZCB0byB0aGUgZWxlbWVudCdzIGhhbmRsZXIgbGlzdCwgZGVsZWdhdGVzIGluIGZyb250XG5cdFx0XHRpZiAoIHNlbGVjdG9yICkge1xuXHRcdFx0XHRoYW5kbGVycy5zcGxpY2UoIGhhbmRsZXJzLmRlbGVnYXRlQ291bnQrKywgMCwgaGFuZGxlT2JqICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRoYW5kbGVycy5wdXNoKCBoYW5kbGVPYmogKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gS2VlcCB0cmFjayBvZiB3aGljaCBldmVudHMgaGF2ZSBldmVyIGJlZW4gdXNlZCwgZm9yIGV2ZW50IG9wdGltaXphdGlvblxuXHRcdFx0alF1ZXJ5LmV2ZW50Lmdsb2JhbFsgdHlwZSBdID0gdHJ1ZTtcblx0XHR9XG5cblx0fSxcblxuXHQvLyBEZXRhY2ggYW4gZXZlbnQgb3Igc2V0IG9mIGV2ZW50cyBmcm9tIGFuIGVsZW1lbnRcblx0cmVtb3ZlOiBmdW5jdGlvbiggZWxlbSwgdHlwZXMsIGhhbmRsZXIsIHNlbGVjdG9yLCBtYXBwZWRUeXBlcyApIHtcblxuXHRcdHZhciBqLCBvcmlnQ291bnQsIHRtcCxcblx0XHRcdGV2ZW50cywgdCwgaGFuZGxlT2JqLFxuXHRcdFx0c3BlY2lhbCwgaGFuZGxlcnMsIHR5cGUsIG5hbWVzcGFjZXMsIG9yaWdUeXBlLFxuXHRcdFx0ZWxlbURhdGEgPSBkYXRhUHJpdi5oYXNEYXRhKCBlbGVtICkgJiYgZGF0YVByaXYuZ2V0KCBlbGVtICk7XG5cblx0XHRpZiAoICFlbGVtRGF0YSB8fCAhKCBldmVudHMgPSBlbGVtRGF0YS5ldmVudHMgKSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBPbmNlIGZvciBlYWNoIHR5cGUubmFtZXNwYWNlIGluIHR5cGVzOyB0eXBlIG1heSBiZSBvbWl0dGVkXG5cdFx0dHlwZXMgPSAoIHR5cGVzIHx8IFwiXCIgKS5tYXRjaCggcm5vdHdoaXRlICkgfHwgWyBcIlwiIF07XG5cdFx0dCA9IHR5cGVzLmxlbmd0aDtcblx0XHR3aGlsZSAoIHQtLSApIHtcblx0XHRcdHRtcCA9IHJ0eXBlbmFtZXNwYWNlLmV4ZWMoIHR5cGVzWyB0IF0gKSB8fCBbXTtcblx0XHRcdHR5cGUgPSBvcmlnVHlwZSA9IHRtcFsgMSBdO1xuXHRcdFx0bmFtZXNwYWNlcyA9ICggdG1wWyAyIF0gfHwgXCJcIiApLnNwbGl0KCBcIi5cIiApLnNvcnQoKTtcblxuXHRcdFx0Ly8gVW5iaW5kIGFsbCBldmVudHMgKG9uIHRoaXMgbmFtZXNwYWNlLCBpZiBwcm92aWRlZCkgZm9yIHRoZSBlbGVtZW50XG5cdFx0XHRpZiAoICF0eXBlICkge1xuXHRcdFx0XHRmb3IgKCB0eXBlIGluIGV2ZW50cyApIHtcblx0XHRcdFx0XHRqUXVlcnkuZXZlbnQucmVtb3ZlKCBlbGVtLCB0eXBlICsgdHlwZXNbIHQgXSwgaGFuZGxlciwgc2VsZWN0b3IsIHRydWUgKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0c3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge307XG5cdFx0XHR0eXBlID0gKCBzZWxlY3RvciA/IHNwZWNpYWwuZGVsZWdhdGVUeXBlIDogc3BlY2lhbC5iaW5kVHlwZSApIHx8IHR5cGU7XG5cdFx0XHRoYW5kbGVycyA9IGV2ZW50c1sgdHlwZSBdIHx8IFtdO1xuXHRcdFx0dG1wID0gdG1wWyAyIF0gJiZcblx0XHRcdFx0bmV3IFJlZ0V4cCggXCIoXnxcXFxcLilcIiArIG5hbWVzcGFjZXMuam9pbiggXCJcXFxcLig/Oi4qXFxcXC58KVwiICkgKyBcIihcXFxcLnwkKVwiICk7XG5cblx0XHRcdC8vIFJlbW92ZSBtYXRjaGluZyBldmVudHNcblx0XHRcdG9yaWdDb3VudCA9IGogPSBoYW5kbGVycy5sZW5ndGg7XG5cdFx0XHR3aGlsZSAoIGotLSApIHtcblx0XHRcdFx0aGFuZGxlT2JqID0gaGFuZGxlcnNbIGogXTtcblxuXHRcdFx0XHRpZiAoICggbWFwcGVkVHlwZXMgfHwgb3JpZ1R5cGUgPT09IGhhbmRsZU9iai5vcmlnVHlwZSApICYmXG5cdFx0XHRcdFx0KCAhaGFuZGxlciB8fCBoYW5kbGVyLmd1aWQgPT09IGhhbmRsZU9iai5ndWlkICkgJiZcblx0XHRcdFx0XHQoICF0bXAgfHwgdG1wLnRlc3QoIGhhbmRsZU9iai5uYW1lc3BhY2UgKSApICYmXG5cdFx0XHRcdFx0KCAhc2VsZWN0b3IgfHwgc2VsZWN0b3IgPT09IGhhbmRsZU9iai5zZWxlY3RvciB8fFxuXHRcdFx0XHRcdFx0c2VsZWN0b3IgPT09IFwiKipcIiAmJiBoYW5kbGVPYmouc2VsZWN0b3IgKSApIHtcblx0XHRcdFx0XHRoYW5kbGVycy5zcGxpY2UoIGosIDEgKTtcblxuXHRcdFx0XHRcdGlmICggaGFuZGxlT2JqLnNlbGVjdG9yICkge1xuXHRcdFx0XHRcdFx0aGFuZGxlcnMuZGVsZWdhdGVDb3VudC0tO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoIHNwZWNpYWwucmVtb3ZlICkge1xuXHRcdFx0XHRcdFx0c3BlY2lhbC5yZW1vdmUuY2FsbCggZWxlbSwgaGFuZGxlT2JqICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIFJlbW92ZSBnZW5lcmljIGV2ZW50IGhhbmRsZXIgaWYgd2UgcmVtb3ZlZCBzb21ldGhpbmcgYW5kIG5vIG1vcmUgaGFuZGxlcnMgZXhpc3Rcblx0XHRcdC8vIChhdm9pZHMgcG90ZW50aWFsIGZvciBlbmRsZXNzIHJlY3Vyc2lvbiBkdXJpbmcgcmVtb3ZhbCBvZiBzcGVjaWFsIGV2ZW50IGhhbmRsZXJzKVxuXHRcdFx0aWYgKCBvcmlnQ291bnQgJiYgIWhhbmRsZXJzLmxlbmd0aCApIHtcblx0XHRcdFx0aWYgKCAhc3BlY2lhbC50ZWFyZG93biB8fFxuXHRcdFx0XHRcdHNwZWNpYWwudGVhcmRvd24uY2FsbCggZWxlbSwgbmFtZXNwYWNlcywgZWxlbURhdGEuaGFuZGxlICkgPT09IGZhbHNlICkge1xuXG5cdFx0XHRcdFx0alF1ZXJ5LnJlbW92ZUV2ZW50KCBlbGVtLCB0eXBlLCBlbGVtRGF0YS5oYW5kbGUgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGRlbGV0ZSBldmVudHNbIHR5cGUgXTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBSZW1vdmUgZGF0YSBhbmQgdGhlIGV4cGFuZG8gaWYgaXQncyBubyBsb25nZXIgdXNlZFxuXHRcdGlmICggalF1ZXJ5LmlzRW1wdHlPYmplY3QoIGV2ZW50cyApICkge1xuXHRcdFx0ZGF0YVByaXYucmVtb3ZlKCBlbGVtLCBcImhhbmRsZSBldmVudHNcIiApO1xuXHRcdH1cblx0fSxcblxuXHRkaXNwYXRjaDogZnVuY3Rpb24oIGV2ZW50ICkge1xuXG5cdFx0Ly8gTWFrZSBhIHdyaXRhYmxlIGpRdWVyeS5FdmVudCBmcm9tIHRoZSBuYXRpdmUgZXZlbnQgb2JqZWN0XG5cdFx0ZXZlbnQgPSBqUXVlcnkuZXZlbnQuZml4KCBldmVudCApO1xuXG5cdFx0dmFyIGksIGosIHJldCwgbWF0Y2hlZCwgaGFuZGxlT2JqLFxuXHRcdFx0aGFuZGxlclF1ZXVlID0gW10sXG5cdFx0XHRhcmdzID0gc2xpY2UuY2FsbCggYXJndW1lbnRzICksXG5cdFx0XHRoYW5kbGVycyA9ICggZGF0YVByaXYuZ2V0KCB0aGlzLCBcImV2ZW50c1wiICkgfHwge30gKVsgZXZlbnQudHlwZSBdIHx8IFtdLFxuXHRcdFx0c3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyBldmVudC50eXBlIF0gfHwge307XG5cblx0XHQvLyBVc2UgdGhlIGZpeC1lZCBqUXVlcnkuRXZlbnQgcmF0aGVyIHRoYW4gdGhlIChyZWFkLW9ubHkpIG5hdGl2ZSBldmVudFxuXHRcdGFyZ3NbIDAgXSA9IGV2ZW50O1xuXHRcdGV2ZW50LmRlbGVnYXRlVGFyZ2V0ID0gdGhpcztcblxuXHRcdC8vIENhbGwgdGhlIHByZURpc3BhdGNoIGhvb2sgZm9yIHRoZSBtYXBwZWQgdHlwZSwgYW5kIGxldCBpdCBiYWlsIGlmIGRlc2lyZWRcblx0XHRpZiAoIHNwZWNpYWwucHJlRGlzcGF0Y2ggJiYgc3BlY2lhbC5wcmVEaXNwYXRjaC5jYWxsKCB0aGlzLCBldmVudCApID09PSBmYWxzZSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBEZXRlcm1pbmUgaGFuZGxlcnNcblx0XHRoYW5kbGVyUXVldWUgPSBqUXVlcnkuZXZlbnQuaGFuZGxlcnMuY2FsbCggdGhpcywgZXZlbnQsIGhhbmRsZXJzICk7XG5cblx0XHQvLyBSdW4gZGVsZWdhdGVzIGZpcnN0OyB0aGV5IG1heSB3YW50IHRvIHN0b3AgcHJvcGFnYXRpb24gYmVuZWF0aCB1c1xuXHRcdGkgPSAwO1xuXHRcdHdoaWxlICggKCBtYXRjaGVkID0gaGFuZGxlclF1ZXVlWyBpKysgXSApICYmICFldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpICkge1xuXHRcdFx0ZXZlbnQuY3VycmVudFRhcmdldCA9IG1hdGNoZWQuZWxlbTtcblxuXHRcdFx0aiA9IDA7XG5cdFx0XHR3aGlsZSAoICggaGFuZGxlT2JqID0gbWF0Y2hlZC5oYW5kbGVyc1sgaisrIF0gKSAmJlxuXHRcdFx0XHQhZXZlbnQuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQoKSApIHtcblxuXHRcdFx0XHQvLyBUcmlnZ2VyZWQgZXZlbnQgbXVzdCBlaXRoZXIgMSkgaGF2ZSBubyBuYW1lc3BhY2UsIG9yIDIpIGhhdmUgbmFtZXNwYWNlKHMpXG5cdFx0XHRcdC8vIGEgc3Vic2V0IG9yIGVxdWFsIHRvIHRob3NlIGluIHRoZSBib3VuZCBldmVudCAoYm90aCBjYW4gaGF2ZSBubyBuYW1lc3BhY2UpLlxuXHRcdFx0XHRpZiAoICFldmVudC5ybmFtZXNwYWNlIHx8IGV2ZW50LnJuYW1lc3BhY2UudGVzdCggaGFuZGxlT2JqLm5hbWVzcGFjZSApICkge1xuXG5cdFx0XHRcdFx0ZXZlbnQuaGFuZGxlT2JqID0gaGFuZGxlT2JqO1xuXHRcdFx0XHRcdGV2ZW50LmRhdGEgPSBoYW5kbGVPYmouZGF0YTtcblxuXHRcdFx0XHRcdHJldCA9ICggKCBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgaGFuZGxlT2JqLm9yaWdUeXBlIF0gfHwge30gKS5oYW5kbGUgfHxcblx0XHRcdFx0XHRcdGhhbmRsZU9iai5oYW5kbGVyICkuYXBwbHkoIG1hdGNoZWQuZWxlbSwgYXJncyApO1xuXG5cdFx0XHRcdFx0aWYgKCByZXQgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHRcdGlmICggKCBldmVudC5yZXN1bHQgPSByZXQgKSA9PT0gZmFsc2UgKSB7XG5cdFx0XHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdFx0XHRcdGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIENhbGwgdGhlIHBvc3REaXNwYXRjaCBob29rIGZvciB0aGUgbWFwcGVkIHR5cGVcblx0XHRpZiAoIHNwZWNpYWwucG9zdERpc3BhdGNoICkge1xuXHRcdFx0c3BlY2lhbC5wb3N0RGlzcGF0Y2guY2FsbCggdGhpcywgZXZlbnQgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZXZlbnQucmVzdWx0O1xuXHR9LFxuXG5cdGhhbmRsZXJzOiBmdW5jdGlvbiggZXZlbnQsIGhhbmRsZXJzICkge1xuXHRcdHZhciBpLCBtYXRjaGVzLCBzZWwsIGhhbmRsZU9iaixcblx0XHRcdGhhbmRsZXJRdWV1ZSA9IFtdLFxuXHRcdFx0ZGVsZWdhdGVDb3VudCA9IGhhbmRsZXJzLmRlbGVnYXRlQ291bnQsXG5cdFx0XHRjdXIgPSBldmVudC50YXJnZXQ7XG5cblx0XHQvLyBTdXBwb3J0IChhdCBsZWFzdCk6IENocm9tZSwgSUU5XG5cdFx0Ly8gRmluZCBkZWxlZ2F0ZSBoYW5kbGVyc1xuXHRcdC8vIEJsYWNrLWhvbGUgU1ZHIDx1c2U+IGluc3RhbmNlIHRyZWVzICgjMTMxODApXG5cdFx0Ly9cblx0XHQvLyBTdXBwb3J0OiBGaXJlZm94PD00Mitcblx0XHQvLyBBdm9pZCBub24tbGVmdC1jbGljayBpbiBGRiBidXQgZG9uJ3QgYmxvY2sgSUUgcmFkaW8gZXZlbnRzICgjMzg2MSwgZ2gtMjM0Mylcblx0XHRpZiAoIGRlbGVnYXRlQ291bnQgJiYgY3VyLm5vZGVUeXBlICYmXG5cdFx0XHQoIGV2ZW50LnR5cGUgIT09IFwiY2xpY2tcIiB8fCBpc05hTiggZXZlbnQuYnV0dG9uICkgfHwgZXZlbnQuYnV0dG9uIDwgMSApICkge1xuXG5cdFx0XHRmb3IgKCA7IGN1ciAhPT0gdGhpczsgY3VyID0gY3VyLnBhcmVudE5vZGUgfHwgdGhpcyApIHtcblxuXHRcdFx0XHQvLyBEb24ndCBjaGVjayBub24tZWxlbWVudHMgKCMxMzIwOClcblx0XHRcdFx0Ly8gRG9uJ3QgcHJvY2VzcyBjbGlja3Mgb24gZGlzYWJsZWQgZWxlbWVudHMgKCM2OTExLCAjODE2NSwgIzExMzgyLCAjMTE3NjQpXG5cdFx0XHRcdGlmICggY3VyLm5vZGVUeXBlID09PSAxICYmICggY3VyLmRpc2FibGVkICE9PSB0cnVlIHx8IGV2ZW50LnR5cGUgIT09IFwiY2xpY2tcIiApICkge1xuXHRcdFx0XHRcdG1hdGNoZXMgPSBbXTtcblx0XHRcdFx0XHRmb3IgKCBpID0gMDsgaSA8IGRlbGVnYXRlQ291bnQ7IGkrKyApIHtcblx0XHRcdFx0XHRcdGhhbmRsZU9iaiA9IGhhbmRsZXJzWyBpIF07XG5cblx0XHRcdFx0XHRcdC8vIERvbid0IGNvbmZsaWN0IHdpdGggT2JqZWN0LnByb3RvdHlwZSBwcm9wZXJ0aWVzICgjMTMyMDMpXG5cdFx0XHRcdFx0XHRzZWwgPSBoYW5kbGVPYmouc2VsZWN0b3IgKyBcIiBcIjtcblxuXHRcdFx0XHRcdFx0aWYgKCBtYXRjaGVzWyBzZWwgXSA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdFx0XHRtYXRjaGVzWyBzZWwgXSA9IGhhbmRsZU9iai5uZWVkc0NvbnRleHQgP1xuXHRcdFx0XHRcdFx0XHRcdGpRdWVyeSggc2VsLCB0aGlzICkuaW5kZXgoIGN1ciApID4gLTEgOlxuXHRcdFx0XHRcdFx0XHRcdGpRdWVyeS5maW5kKCBzZWwsIHRoaXMsIG51bGwsIFsgY3VyIF0gKS5sZW5ndGg7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpZiAoIG1hdGNoZXNbIHNlbCBdICkge1xuXHRcdFx0XHRcdFx0XHRtYXRjaGVzLnB1c2goIGhhbmRsZU9iaiApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoIG1hdGNoZXMubGVuZ3RoICkge1xuXHRcdFx0XHRcdFx0aGFuZGxlclF1ZXVlLnB1c2goIHsgZWxlbTogY3VyLCBoYW5kbGVyczogbWF0Y2hlcyB9ICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQWRkIHRoZSByZW1haW5pbmcgKGRpcmVjdGx5LWJvdW5kKSBoYW5kbGVyc1xuXHRcdGlmICggZGVsZWdhdGVDb3VudCA8IGhhbmRsZXJzLmxlbmd0aCApIHtcblx0XHRcdGhhbmRsZXJRdWV1ZS5wdXNoKCB7IGVsZW06IHRoaXMsIGhhbmRsZXJzOiBoYW5kbGVycy5zbGljZSggZGVsZWdhdGVDb3VudCApIH0gKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gaGFuZGxlclF1ZXVlO1xuXHR9LFxuXG5cdC8vIEluY2x1ZGVzIHNvbWUgZXZlbnQgcHJvcHMgc2hhcmVkIGJ5IEtleUV2ZW50IGFuZCBNb3VzZUV2ZW50XG5cdHByb3BzOiAoIFwiYWx0S2V5IGJ1YmJsZXMgY2FuY2VsYWJsZSBjdHJsS2V5IGN1cnJlbnRUYXJnZXQgZGV0YWlsIGV2ZW50UGhhc2UgXCIgK1xuXHRcdFwibWV0YUtleSByZWxhdGVkVGFyZ2V0IHNoaWZ0S2V5IHRhcmdldCB0aW1lU3RhbXAgdmlldyB3aGljaFwiICkuc3BsaXQoIFwiIFwiICksXG5cblx0Zml4SG9va3M6IHt9LFxuXG5cdGtleUhvb2tzOiB7XG5cdFx0cHJvcHM6IFwiY2hhciBjaGFyQ29kZSBrZXkga2V5Q29kZVwiLnNwbGl0KCBcIiBcIiApLFxuXHRcdGZpbHRlcjogZnVuY3Rpb24oIGV2ZW50LCBvcmlnaW5hbCApIHtcblxuXHRcdFx0Ly8gQWRkIHdoaWNoIGZvciBrZXkgZXZlbnRzXG5cdFx0XHRpZiAoIGV2ZW50LndoaWNoID09IG51bGwgKSB7XG5cdFx0XHRcdGV2ZW50LndoaWNoID0gb3JpZ2luYWwuY2hhckNvZGUgIT0gbnVsbCA/IG9yaWdpbmFsLmNoYXJDb2RlIDogb3JpZ2luYWwua2V5Q29kZTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGV2ZW50O1xuXHRcdH1cblx0fSxcblxuXHRtb3VzZUhvb2tzOiB7XG5cdFx0cHJvcHM6ICggXCJidXR0b24gYnV0dG9ucyBjbGllbnRYIGNsaWVudFkgb2Zmc2V0WCBvZmZzZXRZIHBhZ2VYIHBhZ2VZIFwiICtcblx0XHRcdFwic2NyZWVuWCBzY3JlZW5ZIHRvRWxlbWVudFwiICkuc3BsaXQoIFwiIFwiICksXG5cdFx0ZmlsdGVyOiBmdW5jdGlvbiggZXZlbnQsIG9yaWdpbmFsICkge1xuXHRcdFx0dmFyIGV2ZW50RG9jLCBkb2MsIGJvZHksXG5cdFx0XHRcdGJ1dHRvbiA9IG9yaWdpbmFsLmJ1dHRvbjtcblxuXHRcdFx0Ly8gQ2FsY3VsYXRlIHBhZ2VYL1kgaWYgbWlzc2luZyBhbmQgY2xpZW50WC9ZIGF2YWlsYWJsZVxuXHRcdFx0aWYgKCBldmVudC5wYWdlWCA9PSBudWxsICYmIG9yaWdpbmFsLmNsaWVudFggIT0gbnVsbCApIHtcblx0XHRcdFx0ZXZlbnREb2MgPSBldmVudC50YXJnZXQub3duZXJEb2N1bWVudCB8fCBkb2N1bWVudDtcblx0XHRcdFx0ZG9jID0gZXZlbnREb2MuZG9jdW1lbnRFbGVtZW50O1xuXHRcdFx0XHRib2R5ID0gZXZlbnREb2MuYm9keTtcblxuXHRcdFx0XHRldmVudC5wYWdlWCA9IG9yaWdpbmFsLmNsaWVudFggK1xuXHRcdFx0XHRcdCggZG9jICYmIGRvYy5zY3JvbGxMZWZ0IHx8IGJvZHkgJiYgYm9keS5zY3JvbGxMZWZ0IHx8IDAgKSAtXG5cdFx0XHRcdFx0KCBkb2MgJiYgZG9jLmNsaWVudExlZnQgfHwgYm9keSAmJiBib2R5LmNsaWVudExlZnQgfHwgMCApO1xuXHRcdFx0XHRldmVudC5wYWdlWSA9IG9yaWdpbmFsLmNsaWVudFkgK1xuXHRcdFx0XHRcdCggZG9jICYmIGRvYy5zY3JvbGxUb3AgIHx8IGJvZHkgJiYgYm9keS5zY3JvbGxUb3AgIHx8IDAgKSAtXG5cdFx0XHRcdFx0KCBkb2MgJiYgZG9jLmNsaWVudFRvcCAgfHwgYm9keSAmJiBib2R5LmNsaWVudFRvcCAgfHwgMCApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBBZGQgd2hpY2ggZm9yIGNsaWNrOiAxID09PSBsZWZ0OyAyID09PSBtaWRkbGU7IDMgPT09IHJpZ2h0XG5cdFx0XHQvLyBOb3RlOiBidXR0b24gaXMgbm90IG5vcm1hbGl6ZWQsIHNvIGRvbid0IHVzZSBpdFxuXHRcdFx0aWYgKCAhZXZlbnQud2hpY2ggJiYgYnV0dG9uICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdGV2ZW50LndoaWNoID0gKCBidXR0b24gJiAxID8gMSA6ICggYnV0dG9uICYgMiA/IDMgOiAoIGJ1dHRvbiAmIDQgPyAyIDogMCApICkgKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGV2ZW50O1xuXHRcdH1cblx0fSxcblxuXHRmaXg6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRpZiAoIGV2ZW50WyBqUXVlcnkuZXhwYW5kbyBdICkge1xuXHRcdFx0cmV0dXJuIGV2ZW50O1xuXHRcdH1cblxuXHRcdC8vIENyZWF0ZSBhIHdyaXRhYmxlIGNvcHkgb2YgdGhlIGV2ZW50IG9iamVjdCBhbmQgbm9ybWFsaXplIHNvbWUgcHJvcGVydGllc1xuXHRcdHZhciBpLCBwcm9wLCBjb3B5LFxuXHRcdFx0dHlwZSA9IGV2ZW50LnR5cGUsXG5cdFx0XHRvcmlnaW5hbEV2ZW50ID0gZXZlbnQsXG5cdFx0XHRmaXhIb29rID0gdGhpcy5maXhIb29rc1sgdHlwZSBdO1xuXG5cdFx0aWYgKCAhZml4SG9vayApIHtcblx0XHRcdHRoaXMuZml4SG9va3NbIHR5cGUgXSA9IGZpeEhvb2sgPVxuXHRcdFx0XHRybW91c2VFdmVudC50ZXN0KCB0eXBlICkgPyB0aGlzLm1vdXNlSG9va3MgOlxuXHRcdFx0XHRya2V5RXZlbnQudGVzdCggdHlwZSApID8gdGhpcy5rZXlIb29rcyA6XG5cdFx0XHRcdHt9O1xuXHRcdH1cblx0XHRjb3B5ID0gZml4SG9vay5wcm9wcyA/IHRoaXMucHJvcHMuY29uY2F0KCBmaXhIb29rLnByb3BzICkgOiB0aGlzLnByb3BzO1xuXG5cdFx0ZXZlbnQgPSBuZXcgalF1ZXJ5LkV2ZW50KCBvcmlnaW5hbEV2ZW50ICk7XG5cblx0XHRpID0gY29weS5sZW5ndGg7XG5cdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRwcm9wID0gY29weVsgaSBdO1xuXHRcdFx0ZXZlbnRbIHByb3AgXSA9IG9yaWdpbmFsRXZlbnRbIHByb3AgXTtcblx0XHR9XG5cblx0XHQvLyBTdXBwb3J0OiBDb3Jkb3ZhIDIuNSAoV2ViS2l0KSAoIzEzMjU1KVxuXHRcdC8vIEFsbCBldmVudHMgc2hvdWxkIGhhdmUgYSB0YXJnZXQ7IENvcmRvdmEgZGV2aWNlcmVhZHkgZG9lc24ndFxuXHRcdGlmICggIWV2ZW50LnRhcmdldCApIHtcblx0XHRcdGV2ZW50LnRhcmdldCA9IGRvY3VtZW50O1xuXHRcdH1cblxuXHRcdC8vIFN1cHBvcnQ6IFNhZmFyaSA2LjArLCBDaHJvbWU8Mjhcblx0XHQvLyBUYXJnZXQgc2hvdWxkIG5vdCBiZSBhIHRleHQgbm9kZSAoIzUwNCwgIzEzMTQzKVxuXHRcdGlmICggZXZlbnQudGFyZ2V0Lm5vZGVUeXBlID09PSAzICkge1xuXHRcdFx0ZXZlbnQudGFyZ2V0ID0gZXZlbnQudGFyZ2V0LnBhcmVudE5vZGU7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZpeEhvb2suZmlsdGVyID8gZml4SG9vay5maWx0ZXIoIGV2ZW50LCBvcmlnaW5hbEV2ZW50ICkgOiBldmVudDtcblx0fSxcblxuXHRzcGVjaWFsOiB7XG5cdFx0bG9hZDoge1xuXG5cdFx0XHQvLyBQcmV2ZW50IHRyaWdnZXJlZCBpbWFnZS5sb2FkIGV2ZW50cyBmcm9tIGJ1YmJsaW5nIHRvIHdpbmRvdy5sb2FkXG5cdFx0XHRub0J1YmJsZTogdHJ1ZVxuXHRcdH0sXG5cdFx0Zm9jdXM6IHtcblxuXHRcdFx0Ly8gRmlyZSBuYXRpdmUgZXZlbnQgaWYgcG9zc2libGUgc28gYmx1ci9mb2N1cyBzZXF1ZW5jZSBpcyBjb3JyZWN0XG5cdFx0XHR0cmlnZ2VyOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCB0aGlzICE9PSBzYWZlQWN0aXZlRWxlbWVudCgpICYmIHRoaXMuZm9jdXMgKSB7XG5cdFx0XHRcdFx0dGhpcy5mb2N1cygpO1xuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdGRlbGVnYXRlVHlwZTogXCJmb2N1c2luXCJcblx0XHR9LFxuXHRcdGJsdXI6IHtcblx0XHRcdHRyaWdnZXI6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoIHRoaXMgPT09IHNhZmVBY3RpdmVFbGVtZW50KCkgJiYgdGhpcy5ibHVyICkge1xuXHRcdFx0XHRcdHRoaXMuYmx1cigpO1xuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdGRlbGVnYXRlVHlwZTogXCJmb2N1c291dFwiXG5cdFx0fSxcblx0XHRjbGljazoge1xuXG5cdFx0XHQvLyBGb3IgY2hlY2tib3gsIGZpcmUgbmF0aXZlIGV2ZW50IHNvIGNoZWNrZWQgc3RhdGUgd2lsbCBiZSByaWdodFxuXHRcdFx0dHJpZ2dlcjogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggdGhpcy50eXBlID09PSBcImNoZWNrYm94XCIgJiYgdGhpcy5jbGljayAmJiBqUXVlcnkubm9kZU5hbWUoIHRoaXMsIFwiaW5wdXRcIiApICkge1xuXHRcdFx0XHRcdHRoaXMuY2xpY2soKTtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cblx0XHRcdC8vIEZvciBjcm9zcy1icm93c2VyIGNvbnNpc3RlbmN5LCBkb24ndCBmaXJlIG5hdGl2ZSAuY2xpY2soKSBvbiBsaW5rc1xuXHRcdFx0X2RlZmF1bHQ6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRcdFx0cmV0dXJuIGpRdWVyeS5ub2RlTmFtZSggZXZlbnQudGFyZ2V0LCBcImFcIiApO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRiZWZvcmV1bmxvYWQ6IHtcblx0XHRcdHBvc3REaXNwYXRjaDogZnVuY3Rpb24oIGV2ZW50ICkge1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggMjArXG5cdFx0XHRcdC8vIEZpcmVmb3ggZG9lc24ndCBhbGVydCBpZiB0aGUgcmV0dXJuVmFsdWUgZmllbGQgaXMgbm90IHNldC5cblx0XHRcdFx0aWYgKCBldmVudC5yZXN1bHQgIT09IHVuZGVmaW5lZCAmJiBldmVudC5vcmlnaW5hbEV2ZW50ICkge1xuXHRcdFx0XHRcdGV2ZW50Lm9yaWdpbmFsRXZlbnQucmV0dXJuVmFsdWUgPSBldmVudC5yZXN1bHQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cbn07XG5cbmpRdWVyeS5yZW1vdmVFdmVudCA9IGZ1bmN0aW9uKCBlbGVtLCB0eXBlLCBoYW5kbGUgKSB7XG5cblx0Ly8gVGhpcyBcImlmXCIgaXMgbmVlZGVkIGZvciBwbGFpbiBvYmplY3RzXG5cdGlmICggZWxlbS5yZW1vdmVFdmVudExpc3RlbmVyICkge1xuXHRcdGVsZW0ucmVtb3ZlRXZlbnRMaXN0ZW5lciggdHlwZSwgaGFuZGxlICk7XG5cdH1cbn07XG5cbmpRdWVyeS5FdmVudCA9IGZ1bmN0aW9uKCBzcmMsIHByb3BzICkge1xuXG5cdC8vIEFsbG93IGluc3RhbnRpYXRpb24gd2l0aG91dCB0aGUgJ25ldycga2V5d29yZFxuXHRpZiAoICEoIHRoaXMgaW5zdGFuY2VvZiBqUXVlcnkuRXZlbnQgKSApIHtcblx0XHRyZXR1cm4gbmV3IGpRdWVyeS5FdmVudCggc3JjLCBwcm9wcyApO1xuXHR9XG5cblx0Ly8gRXZlbnQgb2JqZWN0XG5cdGlmICggc3JjICYmIHNyYy50eXBlICkge1xuXHRcdHRoaXMub3JpZ2luYWxFdmVudCA9IHNyYztcblx0XHR0aGlzLnR5cGUgPSBzcmMudHlwZTtcblxuXHRcdC8vIEV2ZW50cyBidWJibGluZyB1cCB0aGUgZG9jdW1lbnQgbWF5IGhhdmUgYmVlbiBtYXJrZWQgYXMgcHJldmVudGVkXG5cdFx0Ly8gYnkgYSBoYW5kbGVyIGxvd2VyIGRvd24gdGhlIHRyZWU7IHJlZmxlY3QgdGhlIGNvcnJlY3QgdmFsdWUuXG5cdFx0dGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQgPSBzcmMuZGVmYXVsdFByZXZlbnRlZCB8fFxuXHRcdFx0XHRzcmMuZGVmYXVsdFByZXZlbnRlZCA9PT0gdW5kZWZpbmVkICYmXG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogQW5kcm9pZDw0LjBcblx0XHRcdFx0c3JjLnJldHVyblZhbHVlID09PSBmYWxzZSA/XG5cdFx0XHRyZXR1cm5UcnVlIDpcblx0XHRcdHJldHVybkZhbHNlO1xuXG5cdC8vIEV2ZW50IHR5cGVcblx0fSBlbHNlIHtcblx0XHR0aGlzLnR5cGUgPSBzcmM7XG5cdH1cblxuXHQvLyBQdXQgZXhwbGljaXRseSBwcm92aWRlZCBwcm9wZXJ0aWVzIG9udG8gdGhlIGV2ZW50IG9iamVjdFxuXHRpZiAoIHByb3BzICkge1xuXHRcdGpRdWVyeS5leHRlbmQoIHRoaXMsIHByb3BzICk7XG5cdH1cblxuXHQvLyBDcmVhdGUgYSB0aW1lc3RhbXAgaWYgaW5jb21pbmcgZXZlbnQgZG9lc24ndCBoYXZlIG9uZVxuXHR0aGlzLnRpbWVTdGFtcCA9IHNyYyAmJiBzcmMudGltZVN0YW1wIHx8IGpRdWVyeS5ub3coKTtcblxuXHQvLyBNYXJrIGl0IGFzIGZpeGVkXG5cdHRoaXNbIGpRdWVyeS5leHBhbmRvIF0gPSB0cnVlO1xufTtcblxuLy8galF1ZXJ5LkV2ZW50IGlzIGJhc2VkIG9uIERPTTMgRXZlbnRzIGFzIHNwZWNpZmllZCBieSB0aGUgRUNNQVNjcmlwdCBMYW5ndWFnZSBCaW5kaW5nXG4vLyBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1dELURPTS1MZXZlbC0zLUV2ZW50cy0yMDAzMDMzMS9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWxcbmpRdWVyeS5FdmVudC5wcm90b3R5cGUgPSB7XG5cdGNvbnN0cnVjdG9yOiBqUXVlcnkuRXZlbnQsXG5cdGlzRGVmYXVsdFByZXZlbnRlZDogcmV0dXJuRmFsc2UsXG5cdGlzUHJvcGFnYXRpb25TdG9wcGVkOiByZXR1cm5GYWxzZSxcblx0aXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ6IHJldHVybkZhbHNlLFxuXHRpc1NpbXVsYXRlZDogZmFsc2UsXG5cblx0cHJldmVudERlZmF1bHQ6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBlID0gdGhpcy5vcmlnaW5hbEV2ZW50O1xuXG5cdFx0dGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQgPSByZXR1cm5UcnVlO1xuXG5cdFx0aWYgKCBlICYmICF0aGlzLmlzU2ltdWxhdGVkICkge1xuXHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdH1cblx0fSxcblx0c3RvcFByb3BhZ2F0aW9uOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgZSA9IHRoaXMub3JpZ2luYWxFdmVudDtcblxuXHRcdHRoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQgPSByZXR1cm5UcnVlO1xuXG5cdFx0aWYgKCBlICYmICF0aGlzLmlzU2ltdWxhdGVkICkge1xuXHRcdFx0ZS5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHR9XG5cdH0sXG5cdHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbjogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGUgPSB0aGlzLm9yaWdpbmFsRXZlbnQ7XG5cblx0XHR0aGlzLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkID0gcmV0dXJuVHJ1ZTtcblxuXHRcdGlmICggZSAmJiAhdGhpcy5pc1NpbXVsYXRlZCApIHtcblx0XHRcdGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG5cdFx0fVxuXG5cdFx0dGhpcy5zdG9wUHJvcGFnYXRpb24oKTtcblx0fVxufTtcblxuLy8gQ3JlYXRlIG1vdXNlZW50ZXIvbGVhdmUgZXZlbnRzIHVzaW5nIG1vdXNlb3Zlci9vdXQgYW5kIGV2ZW50LXRpbWUgY2hlY2tzXG4vLyBzbyB0aGF0IGV2ZW50IGRlbGVnYXRpb24gd29ya3MgaW4galF1ZXJ5LlxuLy8gRG8gdGhlIHNhbWUgZm9yIHBvaW50ZXJlbnRlci9wb2ludGVybGVhdmUgYW5kIHBvaW50ZXJvdmVyL3BvaW50ZXJvdXRcbi8vXG4vLyBTdXBwb3J0OiBTYWZhcmkgNyBvbmx5XG4vLyBTYWZhcmkgc2VuZHMgbW91c2VlbnRlciB0b28gb2Z0ZW47IHNlZTpcbi8vIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD00NzAyNThcbi8vIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIGJ1ZyAoaXQgZXhpc3RlZCBpbiBvbGRlciBDaHJvbWUgdmVyc2lvbnMgYXMgd2VsbCkuXG5qUXVlcnkuZWFjaCgge1xuXHRtb3VzZWVudGVyOiBcIm1vdXNlb3ZlclwiLFxuXHRtb3VzZWxlYXZlOiBcIm1vdXNlb3V0XCIsXG5cdHBvaW50ZXJlbnRlcjogXCJwb2ludGVyb3ZlclwiLFxuXHRwb2ludGVybGVhdmU6IFwicG9pbnRlcm91dFwiXG59LCBmdW5jdGlvbiggb3JpZywgZml4ICkge1xuXHRqUXVlcnkuZXZlbnQuc3BlY2lhbFsgb3JpZyBdID0ge1xuXHRcdGRlbGVnYXRlVHlwZTogZml4LFxuXHRcdGJpbmRUeXBlOiBmaXgsXG5cblx0XHRoYW5kbGU6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRcdHZhciByZXQsXG5cdFx0XHRcdHRhcmdldCA9IHRoaXMsXG5cdFx0XHRcdHJlbGF0ZWQgPSBldmVudC5yZWxhdGVkVGFyZ2V0LFxuXHRcdFx0XHRoYW5kbGVPYmogPSBldmVudC5oYW5kbGVPYmo7XG5cblx0XHRcdC8vIEZvciBtb3VzZWVudGVyL2xlYXZlIGNhbGwgdGhlIGhhbmRsZXIgaWYgcmVsYXRlZCBpcyBvdXRzaWRlIHRoZSB0YXJnZXQuXG5cdFx0XHQvLyBOQjogTm8gcmVsYXRlZFRhcmdldCBpZiB0aGUgbW91c2UgbGVmdC9lbnRlcmVkIHRoZSBicm93c2VyIHdpbmRvd1xuXHRcdFx0aWYgKCAhcmVsYXRlZCB8fCAoIHJlbGF0ZWQgIT09IHRhcmdldCAmJiAhalF1ZXJ5LmNvbnRhaW5zKCB0YXJnZXQsIHJlbGF0ZWQgKSApICkge1xuXHRcdFx0XHRldmVudC50eXBlID0gaGFuZGxlT2JqLm9yaWdUeXBlO1xuXHRcdFx0XHRyZXQgPSBoYW5kbGVPYmouaGFuZGxlci5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0XHRcdGV2ZW50LnR5cGUgPSBmaXg7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmV0O1xuXHRcdH1cblx0fTtcbn0gKTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRvbjogZnVuY3Rpb24oIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4gKSB7XG5cdFx0cmV0dXJuIG9uKCB0aGlzLCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuICk7XG5cdH0sXG5cdG9uZTogZnVuY3Rpb24oIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4gKSB7XG5cdFx0cmV0dXJuIG9uKCB0aGlzLCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuLCAxICk7XG5cdH0sXG5cdG9mZjogZnVuY3Rpb24oIHR5cGVzLCBzZWxlY3RvciwgZm4gKSB7XG5cdFx0dmFyIGhhbmRsZU9iaiwgdHlwZTtcblx0XHRpZiAoIHR5cGVzICYmIHR5cGVzLnByZXZlbnREZWZhdWx0ICYmIHR5cGVzLmhhbmRsZU9iaiApIHtcblxuXHRcdFx0Ly8gKCBldmVudCApICBkaXNwYXRjaGVkIGpRdWVyeS5FdmVudFxuXHRcdFx0aGFuZGxlT2JqID0gdHlwZXMuaGFuZGxlT2JqO1xuXHRcdFx0alF1ZXJ5KCB0eXBlcy5kZWxlZ2F0ZVRhcmdldCApLm9mZihcblx0XHRcdFx0aGFuZGxlT2JqLm5hbWVzcGFjZSA/XG5cdFx0XHRcdFx0aGFuZGxlT2JqLm9yaWdUeXBlICsgXCIuXCIgKyBoYW5kbGVPYmoubmFtZXNwYWNlIDpcblx0XHRcdFx0XHRoYW5kbGVPYmoub3JpZ1R5cGUsXG5cdFx0XHRcdGhhbmRsZU9iai5zZWxlY3Rvcixcblx0XHRcdFx0aGFuZGxlT2JqLmhhbmRsZXJcblx0XHRcdCk7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cdFx0aWYgKCB0eXBlb2YgdHlwZXMgPT09IFwib2JqZWN0XCIgKSB7XG5cblx0XHRcdC8vICggdHlwZXMtb2JqZWN0IFssIHNlbGVjdG9yXSApXG5cdFx0XHRmb3IgKCB0eXBlIGluIHR5cGVzICkge1xuXHRcdFx0XHR0aGlzLm9mZiggdHlwZSwgc2VsZWN0b3IsIHR5cGVzWyB0eXBlIF0gKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblx0XHRpZiAoIHNlbGVjdG9yID09PSBmYWxzZSB8fCB0eXBlb2Ygc2VsZWN0b3IgPT09IFwiZnVuY3Rpb25cIiApIHtcblxuXHRcdFx0Ly8gKCB0eXBlcyBbLCBmbl0gKVxuXHRcdFx0Zm4gPSBzZWxlY3Rvcjtcblx0XHRcdHNlbGVjdG9yID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRpZiAoIGZuID09PSBmYWxzZSApIHtcblx0XHRcdGZuID0gcmV0dXJuRmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0alF1ZXJ5LmV2ZW50LnJlbW92ZSggdGhpcywgdHlwZXMsIGZuLCBzZWxlY3RvciApO1xuXHRcdH0gKTtcblx0fVxufSApO1xuXG5cbnZhclxuXHRyeGh0bWxUYWcgPSAvPCg/IWFyZWF8YnJ8Y29sfGVtYmVkfGhyfGltZ3xpbnB1dHxsaW5rfG1ldGF8cGFyYW0pKChbXFx3Oi1dKylbXj5dKilcXC8+L2dpLFxuXG5cdC8vIFN1cHBvcnQ6IElFIDEwLTExLCBFZGdlIDEwMjQwK1xuXHQvLyBJbiBJRS9FZGdlIHVzaW5nIHJlZ2V4IGdyb3VwcyBoZXJlIGNhdXNlcyBzZXZlcmUgc2xvd2Rvd25zLlxuXHQvLyBTZWUgaHR0cHM6Ly9jb25uZWN0Lm1pY3Jvc29mdC5jb20vSUUvZmVlZGJhY2svZGV0YWlscy8xNzM2NTEyL1xuXHRybm9Jbm5lcmh0bWwgPSAvPHNjcmlwdHw8c3R5bGV8PGxpbmsvaSxcblxuXHQvLyBjaGVja2VkPVwiY2hlY2tlZFwiIG9yIGNoZWNrZWRcblx0cmNoZWNrZWQgPSAvY2hlY2tlZFxccyooPzpbXj1dfD1cXHMqLmNoZWNrZWQuKS9pLFxuXHRyc2NyaXB0VHlwZU1hc2tlZCA9IC9edHJ1ZVxcLyguKikvLFxuXHRyY2xlYW5TY3JpcHQgPSAvXlxccyo8ISg/OlxcW0NEQVRBXFxbfC0tKXwoPzpcXF1cXF18LS0pPlxccyokL2c7XG5cbi8vIE1hbmlwdWxhdGluZyB0YWJsZXMgcmVxdWlyZXMgYSB0Ym9keVxuZnVuY3Rpb24gbWFuaXB1bGF0aW9uVGFyZ2V0KCBlbGVtLCBjb250ZW50ICkge1xuXHRyZXR1cm4galF1ZXJ5Lm5vZGVOYW1lKCBlbGVtLCBcInRhYmxlXCIgKSAmJlxuXHRcdGpRdWVyeS5ub2RlTmFtZSggY29udGVudC5ub2RlVHlwZSAhPT0gMTEgPyBjb250ZW50IDogY29udGVudC5maXJzdENoaWxkLCBcInRyXCIgKSA/XG5cblx0XHRlbGVtLmdldEVsZW1lbnRzQnlUYWdOYW1lKCBcInRib2R5XCIgKVsgMCBdIHx8XG5cdFx0XHRlbGVtLmFwcGVuZENoaWxkKCBlbGVtLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJ0Ym9keVwiICkgKSA6XG5cdFx0ZWxlbTtcbn1cblxuLy8gUmVwbGFjZS9yZXN0b3JlIHRoZSB0eXBlIGF0dHJpYnV0ZSBvZiBzY3JpcHQgZWxlbWVudHMgZm9yIHNhZmUgRE9NIG1hbmlwdWxhdGlvblxuZnVuY3Rpb24gZGlzYWJsZVNjcmlwdCggZWxlbSApIHtcblx0ZWxlbS50eXBlID0gKCBlbGVtLmdldEF0dHJpYnV0ZSggXCJ0eXBlXCIgKSAhPT0gbnVsbCApICsgXCIvXCIgKyBlbGVtLnR5cGU7XG5cdHJldHVybiBlbGVtO1xufVxuZnVuY3Rpb24gcmVzdG9yZVNjcmlwdCggZWxlbSApIHtcblx0dmFyIG1hdGNoID0gcnNjcmlwdFR5cGVNYXNrZWQuZXhlYyggZWxlbS50eXBlICk7XG5cblx0aWYgKCBtYXRjaCApIHtcblx0XHRlbGVtLnR5cGUgPSBtYXRjaFsgMSBdO1xuXHR9IGVsc2Uge1xuXHRcdGVsZW0ucmVtb3ZlQXR0cmlidXRlKCBcInR5cGVcIiApO1xuXHR9XG5cblx0cmV0dXJuIGVsZW07XG59XG5cbmZ1bmN0aW9uIGNsb25lQ29weUV2ZW50KCBzcmMsIGRlc3QgKSB7XG5cdHZhciBpLCBsLCB0eXBlLCBwZGF0YU9sZCwgcGRhdGFDdXIsIHVkYXRhT2xkLCB1ZGF0YUN1ciwgZXZlbnRzO1xuXG5cdGlmICggZGVzdC5ub2RlVHlwZSAhPT0gMSApIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHQvLyAxLiBDb3B5IHByaXZhdGUgZGF0YTogZXZlbnRzLCBoYW5kbGVycywgZXRjLlxuXHRpZiAoIGRhdGFQcml2Lmhhc0RhdGEoIHNyYyApICkge1xuXHRcdHBkYXRhT2xkID0gZGF0YVByaXYuYWNjZXNzKCBzcmMgKTtcblx0XHRwZGF0YUN1ciA9IGRhdGFQcml2LnNldCggZGVzdCwgcGRhdGFPbGQgKTtcblx0XHRldmVudHMgPSBwZGF0YU9sZC5ldmVudHM7XG5cblx0XHRpZiAoIGV2ZW50cyApIHtcblx0XHRcdGRlbGV0ZSBwZGF0YUN1ci5oYW5kbGU7XG5cdFx0XHRwZGF0YUN1ci5ldmVudHMgPSB7fTtcblxuXHRcdFx0Zm9yICggdHlwZSBpbiBldmVudHMgKSB7XG5cdFx0XHRcdGZvciAoIGkgPSAwLCBsID0gZXZlbnRzWyB0eXBlIF0ubGVuZ3RoOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0XHRcdGpRdWVyeS5ldmVudC5hZGQoIGRlc3QsIHR5cGUsIGV2ZW50c1sgdHlwZSBdWyBpIF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIDIuIENvcHkgdXNlciBkYXRhXG5cdGlmICggZGF0YVVzZXIuaGFzRGF0YSggc3JjICkgKSB7XG5cdFx0dWRhdGFPbGQgPSBkYXRhVXNlci5hY2Nlc3MoIHNyYyApO1xuXHRcdHVkYXRhQ3VyID0galF1ZXJ5LmV4dGVuZCgge30sIHVkYXRhT2xkICk7XG5cblx0XHRkYXRhVXNlci5zZXQoIGRlc3QsIHVkYXRhQ3VyICk7XG5cdH1cbn1cblxuLy8gRml4IElFIGJ1Z3MsIHNlZSBzdXBwb3J0IHRlc3RzXG5mdW5jdGlvbiBmaXhJbnB1dCggc3JjLCBkZXN0ICkge1xuXHR2YXIgbm9kZU5hbWUgPSBkZXN0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG5cblx0Ly8gRmFpbHMgdG8gcGVyc2lzdCB0aGUgY2hlY2tlZCBzdGF0ZSBvZiBhIGNsb25lZCBjaGVja2JveCBvciByYWRpbyBidXR0b24uXG5cdGlmICggbm9kZU5hbWUgPT09IFwiaW5wdXRcIiAmJiByY2hlY2thYmxlVHlwZS50ZXN0KCBzcmMudHlwZSApICkge1xuXHRcdGRlc3QuY2hlY2tlZCA9IHNyYy5jaGVja2VkO1xuXG5cdC8vIEZhaWxzIHRvIHJldHVybiB0aGUgc2VsZWN0ZWQgb3B0aW9uIHRvIHRoZSBkZWZhdWx0IHNlbGVjdGVkIHN0YXRlIHdoZW4gY2xvbmluZyBvcHRpb25zXG5cdH0gZWxzZSBpZiAoIG5vZGVOYW1lID09PSBcImlucHV0XCIgfHwgbm9kZU5hbWUgPT09IFwidGV4dGFyZWFcIiApIHtcblx0XHRkZXN0LmRlZmF1bHRWYWx1ZSA9IHNyYy5kZWZhdWx0VmFsdWU7XG5cdH1cbn1cblxuZnVuY3Rpb24gZG9tTWFuaXAoIGNvbGxlY3Rpb24sIGFyZ3MsIGNhbGxiYWNrLCBpZ25vcmVkICkge1xuXG5cdC8vIEZsYXR0ZW4gYW55IG5lc3RlZCBhcnJheXNcblx0YXJncyA9IGNvbmNhdC5hcHBseSggW10sIGFyZ3MgKTtcblxuXHR2YXIgZnJhZ21lbnQsIGZpcnN0LCBzY3JpcHRzLCBoYXNTY3JpcHRzLCBub2RlLCBkb2MsXG5cdFx0aSA9IDAsXG5cdFx0bCA9IGNvbGxlY3Rpb24ubGVuZ3RoLFxuXHRcdGlOb0Nsb25lID0gbCAtIDEsXG5cdFx0dmFsdWUgPSBhcmdzWyAwIF0sXG5cdFx0aXNGdW5jdGlvbiA9IGpRdWVyeS5pc0Z1bmN0aW9uKCB2YWx1ZSApO1xuXG5cdC8vIFdlIGNhbid0IGNsb25lTm9kZSBmcmFnbWVudHMgdGhhdCBjb250YWluIGNoZWNrZWQsIGluIFdlYktpdFxuXHRpZiAoIGlzRnVuY3Rpb24gfHxcblx0XHRcdCggbCA+IDEgJiYgdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICYmXG5cdFx0XHRcdCFzdXBwb3J0LmNoZWNrQ2xvbmUgJiYgcmNoZWNrZWQudGVzdCggdmFsdWUgKSApICkge1xuXHRcdHJldHVybiBjb2xsZWN0aW9uLmVhY2goIGZ1bmN0aW9uKCBpbmRleCApIHtcblx0XHRcdHZhciBzZWxmID0gY29sbGVjdGlvbi5lcSggaW5kZXggKTtcblx0XHRcdGlmICggaXNGdW5jdGlvbiApIHtcblx0XHRcdFx0YXJnc1sgMCBdID0gdmFsdWUuY2FsbCggdGhpcywgaW5kZXgsIHNlbGYuaHRtbCgpICk7XG5cdFx0XHR9XG5cdFx0XHRkb21NYW5pcCggc2VsZiwgYXJncywgY2FsbGJhY2ssIGlnbm9yZWQgKTtcblx0XHR9ICk7XG5cdH1cblxuXHRpZiAoIGwgKSB7XG5cdFx0ZnJhZ21lbnQgPSBidWlsZEZyYWdtZW50KCBhcmdzLCBjb2xsZWN0aW9uWyAwIF0ub3duZXJEb2N1bWVudCwgZmFsc2UsIGNvbGxlY3Rpb24sIGlnbm9yZWQgKTtcblx0XHRmaXJzdCA9IGZyYWdtZW50LmZpcnN0Q2hpbGQ7XG5cblx0XHRpZiAoIGZyYWdtZW50LmNoaWxkTm9kZXMubGVuZ3RoID09PSAxICkge1xuXHRcdFx0ZnJhZ21lbnQgPSBmaXJzdDtcblx0XHR9XG5cblx0XHQvLyBSZXF1aXJlIGVpdGhlciBuZXcgY29udGVudCBvciBhbiBpbnRlcmVzdCBpbiBpZ25vcmVkIGVsZW1lbnRzIHRvIGludm9rZSB0aGUgY2FsbGJhY2tcblx0XHRpZiAoIGZpcnN0IHx8IGlnbm9yZWQgKSB7XG5cdFx0XHRzY3JpcHRzID0galF1ZXJ5Lm1hcCggZ2V0QWxsKCBmcmFnbWVudCwgXCJzY3JpcHRcIiApLCBkaXNhYmxlU2NyaXB0ICk7XG5cdFx0XHRoYXNTY3JpcHRzID0gc2NyaXB0cy5sZW5ndGg7XG5cblx0XHRcdC8vIFVzZSB0aGUgb3JpZ2luYWwgZnJhZ21lbnQgZm9yIHRoZSBsYXN0IGl0ZW1cblx0XHRcdC8vIGluc3RlYWQgb2YgdGhlIGZpcnN0IGJlY2F1c2UgaXQgY2FuIGVuZCB1cFxuXHRcdFx0Ly8gYmVpbmcgZW1wdGllZCBpbmNvcnJlY3RseSBpbiBjZXJ0YWluIHNpdHVhdGlvbnMgKCM4MDcwKS5cblx0XHRcdGZvciAoIDsgaSA8IGw7IGkrKyApIHtcblx0XHRcdFx0bm9kZSA9IGZyYWdtZW50O1xuXG5cdFx0XHRcdGlmICggaSAhPT0gaU5vQ2xvbmUgKSB7XG5cdFx0XHRcdFx0bm9kZSA9IGpRdWVyeS5jbG9uZSggbm9kZSwgdHJ1ZSwgdHJ1ZSApO1xuXG5cdFx0XHRcdFx0Ly8gS2VlcCByZWZlcmVuY2VzIHRvIGNsb25lZCBzY3JpcHRzIGZvciBsYXRlciByZXN0b3JhdGlvblxuXHRcdFx0XHRcdGlmICggaGFzU2NyaXB0cyApIHtcblxuXHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogQW5kcm9pZDw0LjEsIFBoYW50b21KUzwyXG5cdFx0XHRcdFx0XHQvLyBwdXNoLmFwcGx5KF8sIGFycmF5bGlrZSkgdGhyb3dzIG9uIGFuY2llbnQgV2ViS2l0XG5cdFx0XHRcdFx0XHRqUXVlcnkubWVyZ2UoIHNjcmlwdHMsIGdldEFsbCggbm9kZSwgXCJzY3JpcHRcIiApICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y2FsbGJhY2suY2FsbCggY29sbGVjdGlvblsgaSBdLCBub2RlLCBpICk7XG5cdFx0XHR9XG5cblx0XHRcdGlmICggaGFzU2NyaXB0cyApIHtcblx0XHRcdFx0ZG9jID0gc2NyaXB0c1sgc2NyaXB0cy5sZW5ndGggLSAxIF0ub3duZXJEb2N1bWVudDtcblxuXHRcdFx0XHQvLyBSZWVuYWJsZSBzY3JpcHRzXG5cdFx0XHRcdGpRdWVyeS5tYXAoIHNjcmlwdHMsIHJlc3RvcmVTY3JpcHQgKTtcblxuXHRcdFx0XHQvLyBFdmFsdWF0ZSBleGVjdXRhYmxlIHNjcmlwdHMgb24gZmlyc3QgZG9jdW1lbnQgaW5zZXJ0aW9uXG5cdFx0XHRcdGZvciAoIGkgPSAwOyBpIDwgaGFzU2NyaXB0czsgaSsrICkge1xuXHRcdFx0XHRcdG5vZGUgPSBzY3JpcHRzWyBpIF07XG5cdFx0XHRcdFx0aWYgKCByc2NyaXB0VHlwZS50ZXN0KCBub2RlLnR5cGUgfHwgXCJcIiApICYmXG5cdFx0XHRcdFx0XHQhZGF0YVByaXYuYWNjZXNzKCBub2RlLCBcImdsb2JhbEV2YWxcIiApICYmXG5cdFx0XHRcdFx0XHRqUXVlcnkuY29udGFpbnMoIGRvYywgbm9kZSApICkge1xuXG5cdFx0XHRcdFx0XHRpZiAoIG5vZGUuc3JjICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIE9wdGlvbmFsIEFKQVggZGVwZW5kZW5jeSwgYnV0IHdvbid0IHJ1biBzY3JpcHRzIGlmIG5vdCBwcmVzZW50XG5cdFx0XHRcdFx0XHRcdGlmICggalF1ZXJ5Ll9ldmFsVXJsICkge1xuXHRcdFx0XHRcdFx0XHRcdGpRdWVyeS5fZXZhbFVybCggbm9kZS5zcmMgKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0alF1ZXJ5Lmdsb2JhbEV2YWwoIG5vZGUudGV4dENvbnRlbnQucmVwbGFjZSggcmNsZWFuU2NyaXB0LCBcIlwiICkgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gY29sbGVjdGlvbjtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlKCBlbGVtLCBzZWxlY3Rvciwga2VlcERhdGEgKSB7XG5cdHZhciBub2RlLFxuXHRcdG5vZGVzID0gc2VsZWN0b3IgPyBqUXVlcnkuZmlsdGVyKCBzZWxlY3RvciwgZWxlbSApIDogZWxlbSxcblx0XHRpID0gMDtcblxuXHRmb3IgKCA7ICggbm9kZSA9IG5vZGVzWyBpIF0gKSAhPSBudWxsOyBpKysgKSB7XG5cdFx0aWYgKCAha2VlcERhdGEgJiYgbm9kZS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRcdGpRdWVyeS5jbGVhbkRhdGEoIGdldEFsbCggbm9kZSApICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBub2RlLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRpZiAoIGtlZXBEYXRhICYmIGpRdWVyeS5jb250YWlucyggbm9kZS5vd25lckRvY3VtZW50LCBub2RlICkgKSB7XG5cdFx0XHRcdHNldEdsb2JhbEV2YWwoIGdldEFsbCggbm9kZSwgXCJzY3JpcHRcIiApICk7XG5cdFx0XHR9XG5cdFx0XHRub2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIG5vZGUgKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gZWxlbTtcbn1cblxualF1ZXJ5LmV4dGVuZCgge1xuXHRodG1sUHJlZmlsdGVyOiBmdW5jdGlvbiggaHRtbCApIHtcblx0XHRyZXR1cm4gaHRtbC5yZXBsYWNlKCByeGh0bWxUYWcsIFwiPCQxPjwvJDI+XCIgKTtcblx0fSxcblxuXHRjbG9uZTogZnVuY3Rpb24oIGVsZW0sIGRhdGFBbmRFdmVudHMsIGRlZXBEYXRhQW5kRXZlbnRzICkge1xuXHRcdHZhciBpLCBsLCBzcmNFbGVtZW50cywgZGVzdEVsZW1lbnRzLFxuXHRcdFx0Y2xvbmUgPSBlbGVtLmNsb25lTm9kZSggdHJ1ZSApLFxuXHRcdFx0aW5QYWdlID0galF1ZXJ5LmNvbnRhaW5zKCBlbGVtLm93bmVyRG9jdW1lbnQsIGVsZW0gKTtcblxuXHRcdC8vIEZpeCBJRSBjbG9uaW5nIGlzc3Vlc1xuXHRcdGlmICggIXN1cHBvcnQubm9DbG9uZUNoZWNrZWQgJiYgKCBlbGVtLm5vZGVUeXBlID09PSAxIHx8IGVsZW0ubm9kZVR5cGUgPT09IDExICkgJiZcblx0XHRcdFx0IWpRdWVyeS5pc1hNTERvYyggZWxlbSApICkge1xuXG5cdFx0XHQvLyBXZSBlc2NoZXcgU2l6emxlIGhlcmUgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnM6IGh0dHA6Ly9qc3BlcmYuY29tL2dldGFsbC12cy1zaXp6bGUvMlxuXHRcdFx0ZGVzdEVsZW1lbnRzID0gZ2V0QWxsKCBjbG9uZSApO1xuXHRcdFx0c3JjRWxlbWVudHMgPSBnZXRBbGwoIGVsZW0gKTtcblxuXHRcdFx0Zm9yICggaSA9IDAsIGwgPSBzcmNFbGVtZW50cy5sZW5ndGg7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdGZpeElucHV0KCBzcmNFbGVtZW50c1sgaSBdLCBkZXN0RWxlbWVudHNbIGkgXSApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIENvcHkgdGhlIGV2ZW50cyBmcm9tIHRoZSBvcmlnaW5hbCB0byB0aGUgY2xvbmVcblx0XHRpZiAoIGRhdGFBbmRFdmVudHMgKSB7XG5cdFx0XHRpZiAoIGRlZXBEYXRhQW5kRXZlbnRzICkge1xuXHRcdFx0XHRzcmNFbGVtZW50cyA9IHNyY0VsZW1lbnRzIHx8IGdldEFsbCggZWxlbSApO1xuXHRcdFx0XHRkZXN0RWxlbWVudHMgPSBkZXN0RWxlbWVudHMgfHwgZ2V0QWxsKCBjbG9uZSApO1xuXG5cdFx0XHRcdGZvciAoIGkgPSAwLCBsID0gc3JjRWxlbWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0XHRcdGNsb25lQ29weUV2ZW50KCBzcmNFbGVtZW50c1sgaSBdLCBkZXN0RWxlbWVudHNbIGkgXSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjbG9uZUNvcHlFdmVudCggZWxlbSwgY2xvbmUgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBQcmVzZXJ2ZSBzY3JpcHQgZXZhbHVhdGlvbiBoaXN0b3J5XG5cdFx0ZGVzdEVsZW1lbnRzID0gZ2V0QWxsKCBjbG9uZSwgXCJzY3JpcHRcIiApO1xuXHRcdGlmICggZGVzdEVsZW1lbnRzLmxlbmd0aCA+IDAgKSB7XG5cdFx0XHRzZXRHbG9iYWxFdmFsKCBkZXN0RWxlbWVudHMsICFpblBhZ2UgJiYgZ2V0QWxsKCBlbGVtLCBcInNjcmlwdFwiICkgKTtcblx0XHR9XG5cblx0XHQvLyBSZXR1cm4gdGhlIGNsb25lZCBzZXRcblx0XHRyZXR1cm4gY2xvbmU7XG5cdH0sXG5cblx0Y2xlYW5EYXRhOiBmdW5jdGlvbiggZWxlbXMgKSB7XG5cdFx0dmFyIGRhdGEsIGVsZW0sIHR5cGUsXG5cdFx0XHRzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWwsXG5cdFx0XHRpID0gMDtcblxuXHRcdGZvciAoIDsgKCBlbGVtID0gZWxlbXNbIGkgXSApICE9PSB1bmRlZmluZWQ7IGkrKyApIHtcblx0XHRcdGlmICggYWNjZXB0RGF0YSggZWxlbSApICkge1xuXHRcdFx0XHRpZiAoICggZGF0YSA9IGVsZW1bIGRhdGFQcml2LmV4cGFuZG8gXSApICkge1xuXHRcdFx0XHRcdGlmICggZGF0YS5ldmVudHMgKSB7XG5cdFx0XHRcdFx0XHRmb3IgKCB0eXBlIGluIGRhdGEuZXZlbnRzICkge1xuXHRcdFx0XHRcdFx0XHRpZiAoIHNwZWNpYWxbIHR5cGUgXSApIHtcblx0XHRcdFx0XHRcdFx0XHRqUXVlcnkuZXZlbnQucmVtb3ZlKCBlbGVtLCB0eXBlICk7XG5cblx0XHRcdFx0XHRcdFx0Ly8gVGhpcyBpcyBhIHNob3J0Y3V0IHRvIGF2b2lkIGpRdWVyeS5ldmVudC5yZW1vdmUncyBvdmVyaGVhZFxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdGpRdWVyeS5yZW1vdmVFdmVudCggZWxlbSwgdHlwZSwgZGF0YS5oYW5kbGUgKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IENocm9tZSA8PSAzNS00NStcblx0XHRcdFx0XHQvLyBBc3NpZ24gdW5kZWZpbmVkIGluc3RlYWQgb2YgdXNpbmcgZGVsZXRlLCBzZWUgRGF0YSNyZW1vdmVcblx0XHRcdFx0XHRlbGVtWyBkYXRhUHJpdi5leHBhbmRvIF0gPSB1bmRlZmluZWQ7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCBlbGVtWyBkYXRhVXNlci5leHBhbmRvIF0gKSB7XG5cblx0XHRcdFx0XHQvLyBTdXBwb3J0OiBDaHJvbWUgPD0gMzUtNDUrXG5cdFx0XHRcdFx0Ly8gQXNzaWduIHVuZGVmaW5lZCBpbnN0ZWFkIG9mIHVzaW5nIGRlbGV0ZSwgc2VlIERhdGEjcmVtb3ZlXG5cdFx0XHRcdFx0ZWxlbVsgZGF0YVVzZXIuZXhwYW5kbyBdID0gdW5kZWZpbmVkO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59ICk7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblxuXHQvLyBLZWVwIGRvbU1hbmlwIGV4cG9zZWQgdW50aWwgMy4wIChnaC0yMjI1KVxuXHRkb21NYW5pcDogZG9tTWFuaXAsXG5cblx0ZGV0YWNoOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0cmV0dXJuIHJlbW92ZSggdGhpcywgc2VsZWN0b3IsIHRydWUgKTtcblx0fSxcblxuXHRyZW1vdmU6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRyZXR1cm4gcmVtb3ZlKCB0aGlzLCBzZWxlY3RvciApO1xuXHR9LFxuXG5cdHRleHQ6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHRyZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/XG5cdFx0XHRcdGpRdWVyeS50ZXh0KCB0aGlzICkgOlxuXHRcdFx0XHR0aGlzLmVtcHR5KCkuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0aWYgKCB0aGlzLm5vZGVUeXBlID09PSAxIHx8IHRoaXMubm9kZVR5cGUgPT09IDExIHx8IHRoaXMubm9kZVR5cGUgPT09IDkgKSB7XG5cdFx0XHRcdFx0XHR0aGlzLnRleHRDb250ZW50ID0gdmFsdWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9ICk7XG5cdFx0fSwgbnVsbCwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggKTtcblx0fSxcblxuXHRhcHBlbmQ6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBkb21NYW5pcCggdGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdGlmICggdGhpcy5ub2RlVHlwZSA9PT0gMSB8fCB0aGlzLm5vZGVUeXBlID09PSAxMSB8fCB0aGlzLm5vZGVUeXBlID09PSA5ICkge1xuXHRcdFx0XHR2YXIgdGFyZ2V0ID0gbWFuaXB1bGF0aW9uVGFyZ2V0KCB0aGlzLCBlbGVtICk7XG5cdFx0XHRcdHRhcmdldC5hcHBlbmRDaGlsZCggZWxlbSApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRwcmVwZW5kOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gZG9tTWFuaXAoIHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRpZiAoIHRoaXMubm9kZVR5cGUgPT09IDEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gMTEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gOSApIHtcblx0XHRcdFx0dmFyIHRhcmdldCA9IG1hbmlwdWxhdGlvblRhcmdldCggdGhpcywgZWxlbSApO1xuXHRcdFx0XHR0YXJnZXQuaW5zZXJ0QmVmb3JlKCBlbGVtLCB0YXJnZXQuZmlyc3RDaGlsZCApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRiZWZvcmU6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBkb21NYW5pcCggdGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdGlmICggdGhpcy5wYXJlbnROb2RlICkge1xuXHRcdFx0XHR0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKCBlbGVtLCB0aGlzICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdGFmdGVyOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gZG9tTWFuaXAoIHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRpZiAoIHRoaXMucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0dGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSggZWxlbSwgdGhpcy5uZXh0U2libGluZyApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRlbXB0eTogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGVsZW0sXG5cdFx0XHRpID0gMDtcblxuXHRcdGZvciAoIDsgKCBlbGVtID0gdGhpc1sgaSBdICkgIT0gbnVsbDsgaSsrICkge1xuXHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXG5cdFx0XHRcdC8vIFByZXZlbnQgbWVtb3J5IGxlYWtzXG5cdFx0XHRcdGpRdWVyeS5jbGVhbkRhdGEoIGdldEFsbCggZWxlbSwgZmFsc2UgKSApO1xuXG5cdFx0XHRcdC8vIFJlbW92ZSBhbnkgcmVtYWluaW5nIG5vZGVzXG5cdFx0XHRcdGVsZW0udGV4dENvbnRlbnQgPSBcIlwiO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGNsb25lOiBmdW5jdGlvbiggZGF0YUFuZEV2ZW50cywgZGVlcERhdGFBbmRFdmVudHMgKSB7XG5cdFx0ZGF0YUFuZEV2ZW50cyA9IGRhdGFBbmRFdmVudHMgPT0gbnVsbCA/IGZhbHNlIDogZGF0YUFuZEV2ZW50cztcblx0XHRkZWVwRGF0YUFuZEV2ZW50cyA9IGRlZXBEYXRhQW5kRXZlbnRzID09IG51bGwgPyBkYXRhQW5kRXZlbnRzIDogZGVlcERhdGFBbmRFdmVudHM7XG5cblx0XHRyZXR1cm4gdGhpcy5tYXAoIGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIGpRdWVyeS5jbG9uZSggdGhpcywgZGF0YUFuZEV2ZW50cywgZGVlcERhdGFBbmRFdmVudHMgKTtcblx0XHR9ICk7XG5cdH0sXG5cblx0aHRtbDogZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdHZhciBlbGVtID0gdGhpc1sgMCBdIHx8IHt9LFxuXHRcdFx0XHRpID0gMCxcblx0XHRcdFx0bCA9IHRoaXMubGVuZ3RoO1xuXG5cdFx0XHRpZiAoIHZhbHVlID09PSB1bmRlZmluZWQgJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRcdFx0cmV0dXJuIGVsZW0uaW5uZXJIVE1MO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTZWUgaWYgd2UgY2FuIHRha2UgYSBzaG9ydGN1dCBhbmQganVzdCB1c2UgaW5uZXJIVE1MXG5cdFx0XHRpZiAoIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiAmJiAhcm5vSW5uZXJodG1sLnRlc3QoIHZhbHVlICkgJiZcblx0XHRcdFx0IXdyYXBNYXBbICggcnRhZ05hbWUuZXhlYyggdmFsdWUgKSB8fCBbIFwiXCIsIFwiXCIgXSApWyAxIF0udG9Mb3dlckNhc2UoKSBdICkge1xuXG5cdFx0XHRcdHZhbHVlID0galF1ZXJ5Lmh0bWxQcmVmaWx0ZXIoIHZhbHVlICk7XG5cblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRmb3IgKCA7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdFx0XHRlbGVtID0gdGhpc1sgaSBdIHx8IHt9O1xuXG5cdFx0XHRcdFx0XHQvLyBSZW1vdmUgZWxlbWVudCBub2RlcyBhbmQgcHJldmVudCBtZW1vcnkgbGVha3Ncblx0XHRcdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRcdFx0XHRcdFx0alF1ZXJ5LmNsZWFuRGF0YSggZ2V0QWxsKCBlbGVtLCBmYWxzZSApICk7XG5cdFx0XHRcdFx0XHRcdGVsZW0uaW5uZXJIVE1MID0gdmFsdWU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0ZWxlbSA9IDA7XG5cblx0XHRcdFx0Ly8gSWYgdXNpbmcgaW5uZXJIVE1MIHRocm93cyBhbiBleGNlcHRpb24sIHVzZSB0aGUgZmFsbGJhY2sgbWV0aG9kXG5cdFx0XHRcdH0gY2F0Y2ggKCBlICkge31cblx0XHRcdH1cblxuXHRcdFx0aWYgKCBlbGVtICkge1xuXHRcdFx0XHR0aGlzLmVtcHR5KCkuYXBwZW5kKCB2YWx1ZSApO1xuXHRcdFx0fVxuXHRcdH0sIG51bGwsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoICk7XG5cdH0sXG5cblx0cmVwbGFjZVdpdGg6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBpZ25vcmVkID0gW107XG5cblx0XHQvLyBNYWtlIHRoZSBjaGFuZ2VzLCByZXBsYWNpbmcgZWFjaCBub24taWdub3JlZCBjb250ZXh0IGVsZW1lbnQgd2l0aCB0aGUgbmV3IGNvbnRlbnRcblx0XHRyZXR1cm4gZG9tTWFuaXAoIHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHR2YXIgcGFyZW50ID0gdGhpcy5wYXJlbnROb2RlO1xuXG5cdFx0XHRpZiAoIGpRdWVyeS5pbkFycmF5KCB0aGlzLCBpZ25vcmVkICkgPCAwICkge1xuXHRcdFx0XHRqUXVlcnkuY2xlYW5EYXRhKCBnZXRBbGwoIHRoaXMgKSApO1xuXHRcdFx0XHRpZiAoIHBhcmVudCApIHtcblx0XHRcdFx0XHRwYXJlbnQucmVwbGFjZUNoaWxkKCBlbGVtLCB0aGlzICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdC8vIEZvcmNlIGNhbGxiYWNrIGludm9jYXRpb25cblx0XHR9LCBpZ25vcmVkICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmVhY2goIHtcblx0YXBwZW5kVG86IFwiYXBwZW5kXCIsXG5cdHByZXBlbmRUbzogXCJwcmVwZW5kXCIsXG5cdGluc2VydEJlZm9yZTogXCJiZWZvcmVcIixcblx0aW5zZXJ0QWZ0ZXI6IFwiYWZ0ZXJcIixcblx0cmVwbGFjZUFsbDogXCJyZXBsYWNlV2l0aFwiXG59LCBmdW5jdGlvbiggbmFtZSwgb3JpZ2luYWwgKSB7XG5cdGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHZhciBlbGVtcyxcblx0XHRcdHJldCA9IFtdLFxuXHRcdFx0aW5zZXJ0ID0galF1ZXJ5KCBzZWxlY3RvciApLFxuXHRcdFx0bGFzdCA9IGluc2VydC5sZW5ndGggLSAxLFxuXHRcdFx0aSA9IDA7XG5cblx0XHRmb3IgKCA7IGkgPD0gbGFzdDsgaSsrICkge1xuXHRcdFx0ZWxlbXMgPSBpID09PSBsYXN0ID8gdGhpcyA6IHRoaXMuY2xvbmUoIHRydWUgKTtcblx0XHRcdGpRdWVyeSggaW5zZXJ0WyBpIF0gKVsgb3JpZ2luYWwgXSggZWxlbXMgKTtcblxuXHRcdFx0Ly8gU3VwcG9ydDogUXRXZWJLaXRcblx0XHRcdC8vIC5nZXQoKSBiZWNhdXNlIHB1c2guYXBwbHkoXywgYXJyYXlsaWtlKSB0aHJvd3Ncblx0XHRcdHB1c2guYXBwbHkoIHJldCwgZWxlbXMuZ2V0KCkgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIHJldCApO1xuXHR9O1xufSApO1xuXG5cbnZhciBpZnJhbWUsXG5cdGVsZW1kaXNwbGF5ID0ge1xuXG5cdFx0Ly8gU3VwcG9ydDogRmlyZWZveFxuXHRcdC8vIFdlIGhhdmUgdG8gcHJlLWRlZmluZSB0aGVzZSB2YWx1ZXMgZm9yIEZGICgjMTAyMjcpXG5cdFx0SFRNTDogXCJibG9ja1wiLFxuXHRcdEJPRFk6IFwiYmxvY2tcIlxuXHR9O1xuXG4vKipcbiAqIFJldHJpZXZlIHRoZSBhY3R1YWwgZGlzcGxheSBvZiBhIGVsZW1lbnRcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIG5vZGVOYW1lIG9mIHRoZSBlbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gZG9jIERvY3VtZW50IG9iamVjdFxuICovXG5cbi8vIENhbGxlZCBvbmx5IGZyb20gd2l0aGluIGRlZmF1bHREaXNwbGF5XG5mdW5jdGlvbiBhY3R1YWxEaXNwbGF5KCBuYW1lLCBkb2MgKSB7XG5cdHZhciBlbGVtID0galF1ZXJ5KCBkb2MuY3JlYXRlRWxlbWVudCggbmFtZSApICkuYXBwZW5kVG8oIGRvYy5ib2R5ICksXG5cblx0XHRkaXNwbGF5ID0galF1ZXJ5LmNzcyggZWxlbVsgMCBdLCBcImRpc3BsYXlcIiApO1xuXG5cdC8vIFdlIGRvbid0IGhhdmUgYW55IGRhdGEgc3RvcmVkIG9uIHRoZSBlbGVtZW50LFxuXHQvLyBzbyB1c2UgXCJkZXRhY2hcIiBtZXRob2QgYXMgZmFzdCB3YXkgdG8gZ2V0IHJpZCBvZiB0aGUgZWxlbWVudFxuXHRlbGVtLmRldGFjaCgpO1xuXG5cdHJldHVybiBkaXNwbGF5O1xufVxuXG4vKipcbiAqIFRyeSB0byBkZXRlcm1pbmUgdGhlIGRlZmF1bHQgZGlzcGxheSB2YWx1ZSBvZiBhbiBlbGVtZW50XG4gKiBAcGFyYW0ge1N0cmluZ30gbm9kZU5hbWVcbiAqL1xuZnVuY3Rpb24gZGVmYXVsdERpc3BsYXkoIG5vZGVOYW1lICkge1xuXHR2YXIgZG9jID0gZG9jdW1lbnQsXG5cdFx0ZGlzcGxheSA9IGVsZW1kaXNwbGF5WyBub2RlTmFtZSBdO1xuXG5cdGlmICggIWRpc3BsYXkgKSB7XG5cdFx0ZGlzcGxheSA9IGFjdHVhbERpc3BsYXkoIG5vZGVOYW1lLCBkb2MgKTtcblxuXHRcdC8vIElmIHRoZSBzaW1wbGUgd2F5IGZhaWxzLCByZWFkIGZyb20gaW5zaWRlIGFuIGlmcmFtZVxuXHRcdGlmICggZGlzcGxheSA9PT0gXCJub25lXCIgfHwgIWRpc3BsYXkgKSB7XG5cblx0XHRcdC8vIFVzZSB0aGUgYWxyZWFkeS1jcmVhdGVkIGlmcmFtZSBpZiBwb3NzaWJsZVxuXHRcdFx0aWZyYW1lID0gKCBpZnJhbWUgfHwgalF1ZXJ5KCBcIjxpZnJhbWUgZnJhbWVib3JkZXI9JzAnIHdpZHRoPScwJyBoZWlnaHQ9JzAnLz5cIiApIClcblx0XHRcdFx0LmFwcGVuZFRvKCBkb2MuZG9jdW1lbnRFbGVtZW50ICk7XG5cblx0XHRcdC8vIEFsd2F5cyB3cml0ZSBhIG5ldyBIVE1MIHNrZWxldG9uIHNvIFdlYmtpdCBhbmQgRmlyZWZveCBkb24ndCBjaG9rZSBvbiByZXVzZVxuXHRcdFx0ZG9jID0gaWZyYW1lWyAwIF0uY29udGVudERvY3VtZW50O1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRVxuXHRcdFx0ZG9jLndyaXRlKCk7XG5cdFx0XHRkb2MuY2xvc2UoKTtcblxuXHRcdFx0ZGlzcGxheSA9IGFjdHVhbERpc3BsYXkoIG5vZGVOYW1lLCBkb2MgKTtcblx0XHRcdGlmcmFtZS5kZXRhY2goKTtcblx0XHR9XG5cblx0XHQvLyBTdG9yZSB0aGUgY29ycmVjdCBkZWZhdWx0IGRpc3BsYXlcblx0XHRlbGVtZGlzcGxheVsgbm9kZU5hbWUgXSA9IGRpc3BsYXk7XG5cdH1cblxuXHRyZXR1cm4gZGlzcGxheTtcbn1cbnZhciBybWFyZ2luID0gKCAvXm1hcmdpbi8gKTtcblxudmFyIHJudW1ub25weCA9IG5ldyBSZWdFeHAoIFwiXihcIiArIHBudW0gKyBcIikoPyFweClbYS16JV0rJFwiLCBcImlcIiApO1xuXG52YXIgZ2V0U3R5bGVzID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHQvLyBTdXBwb3J0OiBJRTw9MTErLCBGaXJlZm94PD0zMCsgKCMxNTA5OCwgIzE0MTUwKVxuXHRcdC8vIElFIHRocm93cyBvbiBlbGVtZW50cyBjcmVhdGVkIGluIHBvcHVwc1xuXHRcdC8vIEZGIG1lYW53aGlsZSB0aHJvd3Mgb24gZnJhbWUgZWxlbWVudHMgdGhyb3VnaCBcImRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGVcIlxuXHRcdHZhciB2aWV3ID0gZWxlbS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3O1xuXG5cdFx0aWYgKCAhdmlldyB8fCAhdmlldy5vcGVuZXIgKSB7XG5cdFx0XHR2aWV3ID0gd2luZG93O1xuXHRcdH1cblxuXHRcdHJldHVybiB2aWV3LmdldENvbXB1dGVkU3R5bGUoIGVsZW0gKTtcblx0fTtcblxudmFyIHN3YXAgPSBmdW5jdGlvbiggZWxlbSwgb3B0aW9ucywgY2FsbGJhY2ssIGFyZ3MgKSB7XG5cdHZhciByZXQsIG5hbWUsXG5cdFx0b2xkID0ge307XG5cblx0Ly8gUmVtZW1iZXIgdGhlIG9sZCB2YWx1ZXMsIGFuZCBpbnNlcnQgdGhlIG5ldyBvbmVzXG5cdGZvciAoIG5hbWUgaW4gb3B0aW9ucyApIHtcblx0XHRvbGRbIG5hbWUgXSA9IGVsZW0uc3R5bGVbIG5hbWUgXTtcblx0XHRlbGVtLnN0eWxlWyBuYW1lIF0gPSBvcHRpb25zWyBuYW1lIF07XG5cdH1cblxuXHRyZXQgPSBjYWxsYmFjay5hcHBseSggZWxlbSwgYXJncyB8fCBbXSApO1xuXG5cdC8vIFJldmVydCB0aGUgb2xkIHZhbHVlc1xuXHRmb3IgKCBuYW1lIGluIG9wdGlvbnMgKSB7XG5cdFx0ZWxlbS5zdHlsZVsgbmFtZSBdID0gb2xkWyBuYW1lIF07XG5cdH1cblxuXHRyZXR1cm4gcmV0O1xufTtcblxuXG52YXIgZG9jdW1lbnRFbGVtZW50ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuXG5cblxuKCBmdW5jdGlvbigpIHtcblx0dmFyIHBpeGVsUG9zaXRpb25WYWwsIGJveFNpemluZ1JlbGlhYmxlVmFsLCBwaXhlbE1hcmdpblJpZ2h0VmFsLCByZWxpYWJsZU1hcmdpbkxlZnRWYWwsXG5cdFx0Y29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJkaXZcIiApLFxuXHRcdGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiZGl2XCIgKTtcblxuXHQvLyBGaW5pc2ggZWFybHkgaW4gbGltaXRlZCAobm9uLWJyb3dzZXIpIGVudmlyb25tZW50c1xuXHRpZiAoICFkaXYuc3R5bGUgKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Ly8gU3VwcG9ydDogSUU5LTExK1xuXHQvLyBTdHlsZSBvZiBjbG9uZWQgZWxlbWVudCBhZmZlY3RzIHNvdXJjZSBlbGVtZW50IGNsb25lZCAoIzg5MDgpXG5cdGRpdi5zdHlsZS5iYWNrZ3JvdW5kQ2xpcCA9IFwiY29udGVudC1ib3hcIjtcblx0ZGl2LmNsb25lTm9kZSggdHJ1ZSApLnN0eWxlLmJhY2tncm91bmRDbGlwID0gXCJcIjtcblx0c3VwcG9ydC5jbGVhckNsb25lU3R5bGUgPSBkaXYuc3R5bGUuYmFja2dyb3VuZENsaXAgPT09IFwiY29udGVudC1ib3hcIjtcblxuXHRjb250YWluZXIuc3R5bGUuY3NzVGV4dCA9IFwiYm9yZGVyOjA7d2lkdGg6OHB4O2hlaWdodDowO3RvcDowO2xlZnQ6LTk5OTlweDtcIiArXG5cdFx0XCJwYWRkaW5nOjA7bWFyZ2luLXRvcDoxcHg7cG9zaXRpb246YWJzb2x1dGVcIjtcblx0Y29udGFpbmVyLmFwcGVuZENoaWxkKCBkaXYgKTtcblxuXHQvLyBFeGVjdXRpbmcgYm90aCBwaXhlbFBvc2l0aW9uICYgYm94U2l6aW5nUmVsaWFibGUgdGVzdHMgcmVxdWlyZSBvbmx5IG9uZSBsYXlvdXRcblx0Ly8gc28gdGhleSdyZSBleGVjdXRlZCBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgdGhlIHNlY29uZCBjb21wdXRhdGlvbi5cblx0ZnVuY3Rpb24gY29tcHV0ZVN0eWxlVGVzdHMoKSB7XG5cdFx0ZGl2LnN0eWxlLmNzc1RleHQgPVxuXG5cdFx0XHQvLyBTdXBwb3J0OiBGaXJlZm94PDI5LCBBbmRyb2lkIDIuM1xuXHRcdFx0Ly8gVmVuZG9yLXByZWZpeCBib3gtc2l6aW5nXG5cdFx0XHRcIi13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94Oy1tb3otYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveDtcIiArXG5cdFx0XHRcInBvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6YmxvY2s7XCIgK1xuXHRcdFx0XCJtYXJnaW46YXV0bztib3JkZXI6MXB4O3BhZGRpbmc6MXB4O1wiICtcblx0XHRcdFwidG9wOjElO3dpZHRoOjUwJVwiO1xuXHRcdGRpdi5pbm5lckhUTUwgPSBcIlwiO1xuXHRcdGRvY3VtZW50RWxlbWVudC5hcHBlbmRDaGlsZCggY29udGFpbmVyICk7XG5cblx0XHR2YXIgZGl2U3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSggZGl2ICk7XG5cdFx0cGl4ZWxQb3NpdGlvblZhbCA9IGRpdlN0eWxlLnRvcCAhPT0gXCIxJVwiO1xuXHRcdHJlbGlhYmxlTWFyZ2luTGVmdFZhbCA9IGRpdlN0eWxlLm1hcmdpbkxlZnQgPT09IFwiMnB4XCI7XG5cdFx0Ym94U2l6aW5nUmVsaWFibGVWYWwgPSBkaXZTdHlsZS53aWR0aCA9PT0gXCI0cHhcIjtcblxuXHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgNC4wIC0gNC4zIG9ubHlcblx0XHQvLyBTb21lIHN0eWxlcyBjb21lIGJhY2sgd2l0aCBwZXJjZW50YWdlIHZhbHVlcywgZXZlbiB0aG91Z2ggdGhleSBzaG91bGRuJ3Rcblx0XHRkaXYuc3R5bGUubWFyZ2luUmlnaHQgPSBcIjUwJVwiO1xuXHRcdHBpeGVsTWFyZ2luUmlnaHRWYWwgPSBkaXZTdHlsZS5tYXJnaW5SaWdodCA9PT0gXCI0cHhcIjtcblxuXHRcdGRvY3VtZW50RWxlbWVudC5yZW1vdmVDaGlsZCggY29udGFpbmVyICk7XG5cdH1cblxuXHRqUXVlcnkuZXh0ZW5kKCBzdXBwb3J0LCB7XG5cdFx0cGl4ZWxQb3NpdGlvbjogZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8vIFRoaXMgdGVzdCBpcyBleGVjdXRlZCBvbmx5IG9uY2UgYnV0IHdlIHN0aWxsIGRvIG1lbW9pemluZ1xuXHRcdFx0Ly8gc2luY2Ugd2UgY2FuIHVzZSB0aGUgYm94U2l6aW5nUmVsaWFibGUgcHJlLWNvbXB1dGluZy5cblx0XHRcdC8vIE5vIG5lZWQgdG8gY2hlY2sgaWYgdGhlIHRlc3Qgd2FzIGFscmVhZHkgcGVyZm9ybWVkLCB0aG91Z2guXG5cdFx0XHRjb21wdXRlU3R5bGVUZXN0cygpO1xuXHRcdFx0cmV0dXJuIHBpeGVsUG9zaXRpb25WYWw7XG5cdFx0fSxcblx0XHRib3hTaXppbmdSZWxpYWJsZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRpZiAoIGJveFNpemluZ1JlbGlhYmxlVmFsID09IG51bGwgKSB7XG5cdFx0XHRcdGNvbXB1dGVTdHlsZVRlc3RzKCk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gYm94U2l6aW5nUmVsaWFibGVWYWw7XG5cdFx0fSxcblx0XHRwaXhlbE1hcmdpblJpZ2h0OiBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA0LjAtNC4zXG5cdFx0XHQvLyBXZSdyZSBjaGVja2luZyBmb3IgYm94U2l6aW5nUmVsaWFibGVWYWwgaGVyZSBpbnN0ZWFkIG9mIHBpeGVsTWFyZ2luUmlnaHRWYWxcblx0XHRcdC8vIHNpbmNlIHRoYXQgY29tcHJlc3NlcyBiZXR0ZXIgYW5kIHRoZXkncmUgY29tcHV0ZWQgdG9nZXRoZXIgYW55d2F5LlxuXHRcdFx0aWYgKCBib3hTaXppbmdSZWxpYWJsZVZhbCA9PSBudWxsICkge1xuXHRcdFx0XHRjb21wdXRlU3R5bGVUZXN0cygpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHBpeGVsTWFyZ2luUmlnaHRWYWw7XG5cdFx0fSxcblx0XHRyZWxpYWJsZU1hcmdpbkxlZnQ6IGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTggb25seSwgQW5kcm9pZCA0LjAgLSA0LjMgb25seSwgRmlyZWZveCA8PTMgLSAzN1xuXHRcdFx0aWYgKCBib3hTaXppbmdSZWxpYWJsZVZhbCA9PSBudWxsICkge1xuXHRcdFx0XHRjb21wdXRlU3R5bGVUZXN0cygpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHJlbGlhYmxlTWFyZ2luTGVmdFZhbDtcblx0XHR9LFxuXHRcdHJlbGlhYmxlTWFyZ2luUmlnaHQ6IGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDIuM1xuXHRcdFx0Ly8gQ2hlY2sgaWYgZGl2IHdpdGggZXhwbGljaXQgd2lkdGggYW5kIG5vIG1hcmdpbi1yaWdodCBpbmNvcnJlY3RseVxuXHRcdFx0Ly8gZ2V0cyBjb21wdXRlZCBtYXJnaW4tcmlnaHQgYmFzZWQgb24gd2lkdGggb2YgY29udGFpbmVyLiAoIzMzMzMpXG5cdFx0XHQvLyBXZWJLaXQgQnVnIDEzMzQzIC0gZ2V0Q29tcHV0ZWRTdHlsZSByZXR1cm5zIHdyb25nIHZhbHVlIGZvciBtYXJnaW4tcmlnaHRcblx0XHRcdC8vIFRoaXMgc3VwcG9ydCBmdW5jdGlvbiBpcyBvbmx5IGV4ZWN1dGVkIG9uY2Ugc28gbm8gbWVtb2l6aW5nIGlzIG5lZWRlZC5cblx0XHRcdHZhciByZXQsXG5cdFx0XHRcdG1hcmdpbkRpdiA9IGRpdi5hcHBlbmRDaGlsZCggZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJkaXZcIiApICk7XG5cblx0XHRcdC8vIFJlc2V0IENTUzogYm94LXNpemluZzsgZGlzcGxheTsgbWFyZ2luOyBib3JkZXI7IHBhZGRpbmdcblx0XHRcdG1hcmdpbkRpdi5zdHlsZS5jc3NUZXh0ID0gZGl2LnN0eWxlLmNzc1RleHQgPVxuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgMi4zXG5cdFx0XHRcdC8vIFZlbmRvci1wcmVmaXggYm94LXNpemluZ1xuXHRcdFx0XHRcIi13ZWJraXQtYm94LXNpemluZzpjb250ZW50LWJveDtib3gtc2l6aW5nOmNvbnRlbnQtYm94O1wiICtcblx0XHRcdFx0XCJkaXNwbGF5OmJsb2NrO21hcmdpbjowO2JvcmRlcjowO3BhZGRpbmc6MFwiO1xuXHRcdFx0bWFyZ2luRGl2LnN0eWxlLm1hcmdpblJpZ2h0ID0gbWFyZ2luRGl2LnN0eWxlLndpZHRoID0gXCIwXCI7XG5cdFx0XHRkaXYuc3R5bGUud2lkdGggPSBcIjFweFwiO1xuXHRcdFx0ZG9jdW1lbnRFbGVtZW50LmFwcGVuZENoaWxkKCBjb250YWluZXIgKTtcblxuXHRcdFx0cmV0ID0gIXBhcnNlRmxvYXQoIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKCBtYXJnaW5EaXYgKS5tYXJnaW5SaWdodCApO1xuXG5cdFx0XHRkb2N1bWVudEVsZW1lbnQucmVtb3ZlQ2hpbGQoIGNvbnRhaW5lciApO1xuXHRcdFx0ZGl2LnJlbW92ZUNoaWxkKCBtYXJnaW5EaXYgKTtcblxuXHRcdFx0cmV0dXJuIHJldDtcblx0XHR9XG5cdH0gKTtcbn0gKSgpO1xuXG5cbmZ1bmN0aW9uIGN1ckNTUyggZWxlbSwgbmFtZSwgY29tcHV0ZWQgKSB7XG5cdHZhciB3aWR0aCwgbWluV2lkdGgsIG1heFdpZHRoLCByZXQsXG5cdFx0c3R5bGUgPSBlbGVtLnN0eWxlO1xuXG5cdGNvbXB1dGVkID0gY29tcHV0ZWQgfHwgZ2V0U3R5bGVzKCBlbGVtICk7XG5cdHJldCA9IGNvbXB1dGVkID8gY29tcHV0ZWQuZ2V0UHJvcGVydHlWYWx1ZSggbmFtZSApIHx8IGNvbXB1dGVkWyBuYW1lIF0gOiB1bmRlZmluZWQ7XG5cblx0Ly8gU3VwcG9ydDogT3BlcmEgMTIuMXggb25seVxuXHQvLyBGYWxsIGJhY2sgdG8gc3R5bGUgZXZlbiB3aXRob3V0IGNvbXB1dGVkXG5cdC8vIGNvbXB1dGVkIGlzIHVuZGVmaW5lZCBmb3IgZWxlbXMgb24gZG9jdW1lbnQgZnJhZ21lbnRzXG5cdGlmICggKCByZXQgPT09IFwiXCIgfHwgcmV0ID09PSB1bmRlZmluZWQgKSAmJiAhalF1ZXJ5LmNvbnRhaW5zKCBlbGVtLm93bmVyRG9jdW1lbnQsIGVsZW0gKSApIHtcblx0XHRyZXQgPSBqUXVlcnkuc3R5bGUoIGVsZW0sIG5hbWUgKTtcblx0fVxuXG5cdC8vIFN1cHBvcnQ6IElFOVxuXHQvLyBnZXRQcm9wZXJ0eVZhbHVlIGlzIG9ubHkgbmVlZGVkIGZvciAuY3NzKCdmaWx0ZXInKSAoIzEyNTM3KVxuXHRpZiAoIGNvbXB1dGVkICkge1xuXG5cdFx0Ly8gQSB0cmlidXRlIHRvIHRoZSBcImF3ZXNvbWUgaGFjayBieSBEZWFuIEVkd2FyZHNcIlxuXHRcdC8vIEFuZHJvaWQgQnJvd3NlciByZXR1cm5zIHBlcmNlbnRhZ2UgZm9yIHNvbWUgdmFsdWVzLFxuXHRcdC8vIGJ1dCB3aWR0aCBzZWVtcyB0byBiZSByZWxpYWJseSBwaXhlbHMuXG5cdFx0Ly8gVGhpcyBpcyBhZ2FpbnN0IHRoZSBDU1NPTSBkcmFmdCBzcGVjOlxuXHRcdC8vIGh0dHA6Ly9kZXYudzMub3JnL2Nzc3dnL2Nzc29tLyNyZXNvbHZlZC12YWx1ZXNcblx0XHRpZiAoICFzdXBwb3J0LnBpeGVsTWFyZ2luUmlnaHQoKSAmJiBybnVtbm9ucHgudGVzdCggcmV0ICkgJiYgcm1hcmdpbi50ZXN0KCBuYW1lICkgKSB7XG5cblx0XHRcdC8vIFJlbWVtYmVyIHRoZSBvcmlnaW5hbCB2YWx1ZXNcblx0XHRcdHdpZHRoID0gc3R5bGUud2lkdGg7XG5cdFx0XHRtaW5XaWR0aCA9IHN0eWxlLm1pbldpZHRoO1xuXHRcdFx0bWF4V2lkdGggPSBzdHlsZS5tYXhXaWR0aDtcblxuXHRcdFx0Ly8gUHV0IGluIHRoZSBuZXcgdmFsdWVzIHRvIGdldCBhIGNvbXB1dGVkIHZhbHVlIG91dFxuXHRcdFx0c3R5bGUubWluV2lkdGggPSBzdHlsZS5tYXhXaWR0aCA9IHN0eWxlLndpZHRoID0gcmV0O1xuXHRcdFx0cmV0ID0gY29tcHV0ZWQud2lkdGg7XG5cblx0XHRcdC8vIFJldmVydCB0aGUgY2hhbmdlZCB2YWx1ZXNcblx0XHRcdHN0eWxlLndpZHRoID0gd2lkdGg7XG5cdFx0XHRzdHlsZS5taW5XaWR0aCA9IG1pbldpZHRoO1xuXHRcdFx0c3R5bGUubWF4V2lkdGggPSBtYXhXaWR0aDtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gcmV0ICE9PSB1bmRlZmluZWQgP1xuXG5cdFx0Ly8gU3VwcG9ydDogSUU5LTExK1xuXHRcdC8vIElFIHJldHVybnMgekluZGV4IHZhbHVlIGFzIGFuIGludGVnZXIuXG5cdFx0cmV0ICsgXCJcIiA6XG5cdFx0cmV0O1xufVxuXG5cbmZ1bmN0aW9uIGFkZEdldEhvb2tJZiggY29uZGl0aW9uRm4sIGhvb2tGbiApIHtcblxuXHQvLyBEZWZpbmUgdGhlIGhvb2ssIHdlJ2xsIGNoZWNrIG9uIHRoZSBmaXJzdCBydW4gaWYgaXQncyByZWFsbHkgbmVlZGVkLlxuXHRyZXR1cm4ge1xuXHRcdGdldDogZnVuY3Rpb24oKSB7XG5cdFx0XHRpZiAoIGNvbmRpdGlvbkZuKCkgKSB7XG5cblx0XHRcdFx0Ly8gSG9vayBub3QgbmVlZGVkIChvciBpdCdzIG5vdCBwb3NzaWJsZSB0byB1c2UgaXQgZHVlXG5cdFx0XHRcdC8vIHRvIG1pc3NpbmcgZGVwZW5kZW5jeSksIHJlbW92ZSBpdC5cblx0XHRcdFx0ZGVsZXRlIHRoaXMuZ2V0O1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdC8vIEhvb2sgbmVlZGVkOyByZWRlZmluZSBpdCBzbyB0aGF0IHRoZSBzdXBwb3J0IHRlc3QgaXMgbm90IGV4ZWN1dGVkIGFnYWluLlxuXHRcdFx0cmV0dXJuICggdGhpcy5nZXQgPSBob29rRm4gKS5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0fVxuXHR9O1xufVxuXG5cbnZhclxuXG5cdC8vIFN3YXBwYWJsZSBpZiBkaXNwbGF5IGlzIG5vbmUgb3Igc3RhcnRzIHdpdGggdGFibGVcblx0Ly8gZXhjZXB0IFwidGFibGVcIiwgXCJ0YWJsZS1jZWxsXCIsIG9yIFwidGFibGUtY2FwdGlvblwiXG5cdC8vIFNlZSBoZXJlIGZvciBkaXNwbGF5IHZhbHVlczogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9DU1MvZGlzcGxheVxuXHRyZGlzcGxheXN3YXAgPSAvXihub25lfHRhYmxlKD8hLWNbZWFdKS4rKS8sXG5cblx0Y3NzU2hvdyA9IHsgcG9zaXRpb246IFwiYWJzb2x1dGVcIiwgdmlzaWJpbGl0eTogXCJoaWRkZW5cIiwgZGlzcGxheTogXCJibG9ja1wiIH0sXG5cdGNzc05vcm1hbFRyYW5zZm9ybSA9IHtcblx0XHRsZXR0ZXJTcGFjaW5nOiBcIjBcIixcblx0XHRmb250V2VpZ2h0OiBcIjQwMFwiXG5cdH0sXG5cblx0Y3NzUHJlZml4ZXMgPSBbIFwiV2Via2l0XCIsIFwiT1wiLCBcIk1velwiLCBcIm1zXCIgXSxcblx0ZW1wdHlTdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiZGl2XCIgKS5zdHlsZTtcblxuLy8gUmV0dXJuIGEgY3NzIHByb3BlcnR5IG1hcHBlZCB0byBhIHBvdGVudGlhbGx5IHZlbmRvciBwcmVmaXhlZCBwcm9wZXJ0eVxuZnVuY3Rpb24gdmVuZG9yUHJvcE5hbWUoIG5hbWUgKSB7XG5cblx0Ly8gU2hvcnRjdXQgZm9yIG5hbWVzIHRoYXQgYXJlIG5vdCB2ZW5kb3IgcHJlZml4ZWRcblx0aWYgKCBuYW1lIGluIGVtcHR5U3R5bGUgKSB7XG5cdFx0cmV0dXJuIG5hbWU7XG5cdH1cblxuXHQvLyBDaGVjayBmb3IgdmVuZG9yIHByZWZpeGVkIG5hbWVzXG5cdHZhciBjYXBOYW1lID0gbmFtZVsgMCBdLnRvVXBwZXJDYXNlKCkgKyBuYW1lLnNsaWNlKCAxICksXG5cdFx0aSA9IGNzc1ByZWZpeGVzLmxlbmd0aDtcblxuXHR3aGlsZSAoIGktLSApIHtcblx0XHRuYW1lID0gY3NzUHJlZml4ZXNbIGkgXSArIGNhcE5hbWU7XG5cdFx0aWYgKCBuYW1lIGluIGVtcHR5U3R5bGUgKSB7XG5cdFx0XHRyZXR1cm4gbmFtZTtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gc2V0UG9zaXRpdmVOdW1iZXIoIGVsZW0sIHZhbHVlLCBzdWJ0cmFjdCApIHtcblxuXHQvLyBBbnkgcmVsYXRpdmUgKCsvLSkgdmFsdWVzIGhhdmUgYWxyZWFkeSBiZWVuXG5cdC8vIG5vcm1hbGl6ZWQgYXQgdGhpcyBwb2ludFxuXHR2YXIgbWF0Y2hlcyA9IHJjc3NOdW0uZXhlYyggdmFsdWUgKTtcblx0cmV0dXJuIG1hdGNoZXMgP1xuXG5cdFx0Ly8gR3VhcmQgYWdhaW5zdCB1bmRlZmluZWQgXCJzdWJ0cmFjdFwiLCBlLmcuLCB3aGVuIHVzZWQgYXMgaW4gY3NzSG9va3Ncblx0XHRNYXRoLm1heCggMCwgbWF0Y2hlc1sgMiBdIC0gKCBzdWJ0cmFjdCB8fCAwICkgKSArICggbWF0Y2hlc1sgMyBdIHx8IFwicHhcIiApIDpcblx0XHR2YWx1ZTtcbn1cblxuZnVuY3Rpb24gYXVnbWVudFdpZHRoT3JIZWlnaHQoIGVsZW0sIG5hbWUsIGV4dHJhLCBpc0JvcmRlckJveCwgc3R5bGVzICkge1xuXHR2YXIgaSA9IGV4dHJhID09PSAoIGlzQm9yZGVyQm94ID8gXCJib3JkZXJcIiA6IFwiY29udGVudFwiICkgP1xuXG5cdFx0Ly8gSWYgd2UgYWxyZWFkeSBoYXZlIHRoZSByaWdodCBtZWFzdXJlbWVudCwgYXZvaWQgYXVnbWVudGF0aW9uXG5cdFx0NCA6XG5cblx0XHQvLyBPdGhlcndpc2UgaW5pdGlhbGl6ZSBmb3IgaG9yaXpvbnRhbCBvciB2ZXJ0aWNhbCBwcm9wZXJ0aWVzXG5cdFx0bmFtZSA9PT0gXCJ3aWR0aFwiID8gMSA6IDAsXG5cblx0XHR2YWwgPSAwO1xuXG5cdGZvciAoIDsgaSA8IDQ7IGkgKz0gMiApIHtcblxuXHRcdC8vIEJvdGggYm94IG1vZGVscyBleGNsdWRlIG1hcmdpbiwgc28gYWRkIGl0IGlmIHdlIHdhbnQgaXRcblx0XHRpZiAoIGV4dHJhID09PSBcIm1hcmdpblwiICkge1xuXHRcdFx0dmFsICs9IGpRdWVyeS5jc3MoIGVsZW0sIGV4dHJhICsgY3NzRXhwYW5kWyBpIF0sIHRydWUsIHN0eWxlcyApO1xuXHRcdH1cblxuXHRcdGlmICggaXNCb3JkZXJCb3ggKSB7XG5cblx0XHRcdC8vIGJvcmRlci1ib3ggaW5jbHVkZXMgcGFkZGluZywgc28gcmVtb3ZlIGl0IGlmIHdlIHdhbnQgY29udGVudFxuXHRcdFx0aWYgKCBleHRyYSA9PT0gXCJjb250ZW50XCIgKSB7XG5cdFx0XHRcdHZhbCAtPSBqUXVlcnkuY3NzKCBlbGVtLCBcInBhZGRpbmdcIiArIGNzc0V4cGFuZFsgaSBdLCB0cnVlLCBzdHlsZXMgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQXQgdGhpcyBwb2ludCwgZXh0cmEgaXNuJ3QgYm9yZGVyIG5vciBtYXJnaW4sIHNvIHJlbW92ZSBib3JkZXJcblx0XHRcdGlmICggZXh0cmEgIT09IFwibWFyZ2luXCIgKSB7XG5cdFx0XHRcdHZhbCAtPSBqUXVlcnkuY3NzKCBlbGVtLCBcImJvcmRlclwiICsgY3NzRXhwYW5kWyBpIF0gKyBcIldpZHRoXCIsIHRydWUsIHN0eWxlcyApO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vIEF0IHRoaXMgcG9pbnQsIGV4dHJhIGlzbid0IGNvbnRlbnQsIHNvIGFkZCBwYWRkaW5nXG5cdFx0XHR2YWwgKz0galF1ZXJ5LmNzcyggZWxlbSwgXCJwYWRkaW5nXCIgKyBjc3NFeHBhbmRbIGkgXSwgdHJ1ZSwgc3R5bGVzICk7XG5cblx0XHRcdC8vIEF0IHRoaXMgcG9pbnQsIGV4dHJhIGlzbid0IGNvbnRlbnQgbm9yIHBhZGRpbmcsIHNvIGFkZCBib3JkZXJcblx0XHRcdGlmICggZXh0cmEgIT09IFwicGFkZGluZ1wiICkge1xuXHRcdFx0XHR2YWwgKz0galF1ZXJ5LmNzcyggZWxlbSwgXCJib3JkZXJcIiArIGNzc0V4cGFuZFsgaSBdICsgXCJXaWR0aFwiLCB0cnVlLCBzdHlsZXMgKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdmFsO1xufVxuXG5mdW5jdGlvbiBnZXRXaWR0aE9ySGVpZ2h0KCBlbGVtLCBuYW1lLCBleHRyYSApIHtcblxuXHQvLyBTdGFydCB3aXRoIG9mZnNldCBwcm9wZXJ0eSwgd2hpY2ggaXMgZXF1aXZhbGVudCB0byB0aGUgYm9yZGVyLWJveCB2YWx1ZVxuXHR2YXIgdmFsdWVJc0JvcmRlckJveCA9IHRydWUsXG5cdFx0dmFsID0gbmFtZSA9PT0gXCJ3aWR0aFwiID8gZWxlbS5vZmZzZXRXaWR0aCA6IGVsZW0ub2Zmc2V0SGVpZ2h0LFxuXHRcdHN0eWxlcyA9IGdldFN0eWxlcyggZWxlbSApLFxuXHRcdGlzQm9yZGVyQm94ID0galF1ZXJ5LmNzcyggZWxlbSwgXCJib3hTaXppbmdcIiwgZmFsc2UsIHN0eWxlcyApID09PSBcImJvcmRlci1ib3hcIjtcblxuXHQvLyBTb21lIG5vbi1odG1sIGVsZW1lbnRzIHJldHVybiB1bmRlZmluZWQgZm9yIG9mZnNldFdpZHRoLCBzbyBjaGVjayBmb3IgbnVsbC91bmRlZmluZWRcblx0Ly8gc3ZnIC0gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjQ5Mjg1XG5cdC8vIE1hdGhNTCAtIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTQ5MTY2OFxuXHRpZiAoIHZhbCA8PSAwIHx8IHZhbCA9PSBudWxsICkge1xuXG5cdFx0Ly8gRmFsbCBiYWNrIHRvIGNvbXB1dGVkIHRoZW4gdW5jb21wdXRlZCBjc3MgaWYgbmVjZXNzYXJ5XG5cdFx0dmFsID0gY3VyQ1NTKCBlbGVtLCBuYW1lLCBzdHlsZXMgKTtcblx0XHRpZiAoIHZhbCA8IDAgfHwgdmFsID09IG51bGwgKSB7XG5cdFx0XHR2YWwgPSBlbGVtLnN0eWxlWyBuYW1lIF07XG5cdFx0fVxuXG5cdFx0Ly8gQ29tcHV0ZWQgdW5pdCBpcyBub3QgcGl4ZWxzLiBTdG9wIGhlcmUgYW5kIHJldHVybi5cblx0XHRpZiAoIHJudW1ub25weC50ZXN0KCB2YWwgKSApIHtcblx0XHRcdHJldHVybiB2YWw7XG5cdFx0fVxuXG5cdFx0Ly8gQ2hlY2sgZm9yIHN0eWxlIGluIGNhc2UgYSBicm93c2VyIHdoaWNoIHJldHVybnMgdW5yZWxpYWJsZSB2YWx1ZXNcblx0XHQvLyBmb3IgZ2V0Q29tcHV0ZWRTdHlsZSBzaWxlbnRseSBmYWxscyBiYWNrIHRvIHRoZSByZWxpYWJsZSBlbGVtLnN0eWxlXG5cdFx0dmFsdWVJc0JvcmRlckJveCA9IGlzQm9yZGVyQm94ICYmXG5cdFx0XHQoIHN1cHBvcnQuYm94U2l6aW5nUmVsaWFibGUoKSB8fCB2YWwgPT09IGVsZW0uc3R5bGVbIG5hbWUgXSApO1xuXG5cdFx0Ly8gTm9ybWFsaXplIFwiXCIsIGF1dG8sIGFuZCBwcmVwYXJlIGZvciBleHRyYVxuXHRcdHZhbCA9IHBhcnNlRmxvYXQoIHZhbCApIHx8IDA7XG5cdH1cblxuXHQvLyBVc2UgdGhlIGFjdGl2ZSBib3gtc2l6aW5nIG1vZGVsIHRvIGFkZC9zdWJ0cmFjdCBpcnJlbGV2YW50IHN0eWxlc1xuXHRyZXR1cm4gKCB2YWwgK1xuXHRcdGF1Z21lbnRXaWR0aE9ySGVpZ2h0KFxuXHRcdFx0ZWxlbSxcblx0XHRcdG5hbWUsXG5cdFx0XHRleHRyYSB8fCAoIGlzQm9yZGVyQm94ID8gXCJib3JkZXJcIiA6IFwiY29udGVudFwiICksXG5cdFx0XHR2YWx1ZUlzQm9yZGVyQm94LFxuXHRcdFx0c3R5bGVzXG5cdFx0KVxuXHQpICsgXCJweFwiO1xufVxuXG5mdW5jdGlvbiBzaG93SGlkZSggZWxlbWVudHMsIHNob3cgKSB7XG5cdHZhciBkaXNwbGF5LCBlbGVtLCBoaWRkZW4sXG5cdFx0dmFsdWVzID0gW10sXG5cdFx0aW5kZXggPSAwLFxuXHRcdGxlbmd0aCA9IGVsZW1lbnRzLmxlbmd0aDtcblxuXHRmb3IgKCA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xuXHRcdGVsZW0gPSBlbGVtZW50c1sgaW5kZXggXTtcblx0XHRpZiAoICFlbGVtLnN0eWxlICkge1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0dmFsdWVzWyBpbmRleCBdID0gZGF0YVByaXYuZ2V0KCBlbGVtLCBcIm9sZGRpc3BsYXlcIiApO1xuXHRcdGRpc3BsYXkgPSBlbGVtLnN0eWxlLmRpc3BsYXk7XG5cdFx0aWYgKCBzaG93ICkge1xuXG5cdFx0XHQvLyBSZXNldCB0aGUgaW5saW5lIGRpc3BsYXkgb2YgdGhpcyBlbGVtZW50IHRvIGxlYXJuIGlmIGl0IGlzXG5cdFx0XHQvLyBiZWluZyBoaWRkZW4gYnkgY2FzY2FkZWQgcnVsZXMgb3Igbm90XG5cdFx0XHRpZiAoICF2YWx1ZXNbIGluZGV4IF0gJiYgZGlzcGxheSA9PT0gXCJub25lXCIgKSB7XG5cdFx0XHRcdGVsZW0uc3R5bGUuZGlzcGxheSA9IFwiXCI7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFNldCBlbGVtZW50cyB3aGljaCBoYXZlIGJlZW4gb3ZlcnJpZGRlbiB3aXRoIGRpc3BsYXk6IG5vbmVcblx0XHRcdC8vIGluIGEgc3R5bGVzaGVldCB0byB3aGF0ZXZlciB0aGUgZGVmYXVsdCBicm93c2VyIHN0eWxlIGlzXG5cdFx0XHQvLyBmb3Igc3VjaCBhbiBlbGVtZW50XG5cdFx0XHRpZiAoIGVsZW0uc3R5bGUuZGlzcGxheSA9PT0gXCJcIiAmJiBpc0hpZGRlbiggZWxlbSApICkge1xuXHRcdFx0XHR2YWx1ZXNbIGluZGV4IF0gPSBkYXRhUHJpdi5hY2Nlc3MoXG5cdFx0XHRcdFx0ZWxlbSxcblx0XHRcdFx0XHRcIm9sZGRpc3BsYXlcIixcblx0XHRcdFx0XHRkZWZhdWx0RGlzcGxheSggZWxlbS5ub2RlTmFtZSApXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGhpZGRlbiA9IGlzSGlkZGVuKCBlbGVtICk7XG5cblx0XHRcdGlmICggZGlzcGxheSAhPT0gXCJub25lXCIgfHwgIWhpZGRlbiApIHtcblx0XHRcdFx0ZGF0YVByaXYuc2V0KFxuXHRcdFx0XHRcdGVsZW0sXG5cdFx0XHRcdFx0XCJvbGRkaXNwbGF5XCIsXG5cdFx0XHRcdFx0aGlkZGVuID8gZGlzcGxheSA6IGpRdWVyeS5jc3MoIGVsZW0sIFwiZGlzcGxheVwiIClcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBTZXQgdGhlIGRpc3BsYXkgb2YgbW9zdCBvZiB0aGUgZWxlbWVudHMgaW4gYSBzZWNvbmQgbG9vcFxuXHQvLyB0byBhdm9pZCB0aGUgY29uc3RhbnQgcmVmbG93XG5cdGZvciAoIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0ZWxlbSA9IGVsZW1lbnRzWyBpbmRleCBdO1xuXHRcdGlmICggIWVsZW0uc3R5bGUgKSB7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cdFx0aWYgKCAhc2hvdyB8fCBlbGVtLnN0eWxlLmRpc3BsYXkgPT09IFwibm9uZVwiIHx8IGVsZW0uc3R5bGUuZGlzcGxheSA9PT0gXCJcIiApIHtcblx0XHRcdGVsZW0uc3R5bGUuZGlzcGxheSA9IHNob3cgPyB2YWx1ZXNbIGluZGV4IF0gfHwgXCJcIiA6IFwibm9uZVwiO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBlbGVtZW50cztcbn1cblxualF1ZXJ5LmV4dGVuZCgge1xuXG5cdC8vIEFkZCBpbiBzdHlsZSBwcm9wZXJ0eSBob29rcyBmb3Igb3ZlcnJpZGluZyB0aGUgZGVmYXVsdFxuXHQvLyBiZWhhdmlvciBvZiBnZXR0aW5nIGFuZCBzZXR0aW5nIGEgc3R5bGUgcHJvcGVydHlcblx0Y3NzSG9va3M6IHtcblx0XHRvcGFjaXR5OiB7XG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCApIHtcblx0XHRcdFx0aWYgKCBjb21wdXRlZCApIHtcblxuXHRcdFx0XHRcdC8vIFdlIHNob3VsZCBhbHdheXMgZ2V0IGEgbnVtYmVyIGJhY2sgZnJvbSBvcGFjaXR5XG5cdFx0XHRcdFx0dmFyIHJldCA9IGN1ckNTUyggZWxlbSwgXCJvcGFjaXR5XCIgKTtcblx0XHRcdFx0XHRyZXR1cm4gcmV0ID09PSBcIlwiID8gXCIxXCIgOiByZXQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cblx0Ly8gRG9uJ3QgYXV0b21hdGljYWxseSBhZGQgXCJweFwiIHRvIHRoZXNlIHBvc3NpYmx5LXVuaXRsZXNzIHByb3BlcnRpZXNcblx0Y3NzTnVtYmVyOiB7XG5cdFx0XCJhbmltYXRpb25JdGVyYXRpb25Db3VudFwiOiB0cnVlLFxuXHRcdFwiY29sdW1uQ291bnRcIjogdHJ1ZSxcblx0XHRcImZpbGxPcGFjaXR5XCI6IHRydWUsXG5cdFx0XCJmbGV4R3Jvd1wiOiB0cnVlLFxuXHRcdFwiZmxleFNocmlua1wiOiB0cnVlLFxuXHRcdFwiZm9udFdlaWdodFwiOiB0cnVlLFxuXHRcdFwibGluZUhlaWdodFwiOiB0cnVlLFxuXHRcdFwib3BhY2l0eVwiOiB0cnVlLFxuXHRcdFwib3JkZXJcIjogdHJ1ZSxcblx0XHRcIm9ycGhhbnNcIjogdHJ1ZSxcblx0XHRcIndpZG93c1wiOiB0cnVlLFxuXHRcdFwiekluZGV4XCI6IHRydWUsXG5cdFx0XCJ6b29tXCI6IHRydWVcblx0fSxcblxuXHQvLyBBZGQgaW4gcHJvcGVydGllcyB3aG9zZSBuYW1lcyB5b3Ugd2lzaCB0byBmaXggYmVmb3JlXG5cdC8vIHNldHRpbmcgb3IgZ2V0dGluZyB0aGUgdmFsdWVcblx0Y3NzUHJvcHM6IHtcblx0XHRcImZsb2F0XCI6IFwiY3NzRmxvYXRcIlxuXHR9LFxuXG5cdC8vIEdldCBhbmQgc2V0IHRoZSBzdHlsZSBwcm9wZXJ0eSBvbiBhIERPTSBOb2RlXG5cdHN0eWxlOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUsIGV4dHJhICkge1xuXG5cdFx0Ly8gRG9uJ3Qgc2V0IHN0eWxlcyBvbiB0ZXh0IGFuZCBjb21tZW50IG5vZGVzXG5cdFx0aWYgKCAhZWxlbSB8fCBlbGVtLm5vZGVUeXBlID09PSAzIHx8IGVsZW0ubm9kZVR5cGUgPT09IDggfHwgIWVsZW0uc3R5bGUgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gTWFrZSBzdXJlIHRoYXQgd2UncmUgd29ya2luZyB3aXRoIHRoZSByaWdodCBuYW1lXG5cdFx0dmFyIHJldCwgdHlwZSwgaG9va3MsXG5cdFx0XHRvcmlnTmFtZSA9IGpRdWVyeS5jYW1lbENhc2UoIG5hbWUgKSxcblx0XHRcdHN0eWxlID0gZWxlbS5zdHlsZTtcblxuXHRcdG5hbWUgPSBqUXVlcnkuY3NzUHJvcHNbIG9yaWdOYW1lIF0gfHxcblx0XHRcdCggalF1ZXJ5LmNzc1Byb3BzWyBvcmlnTmFtZSBdID0gdmVuZG9yUHJvcE5hbWUoIG9yaWdOYW1lICkgfHwgb3JpZ05hbWUgKTtcblxuXHRcdC8vIEdldHMgaG9vayBmb3IgdGhlIHByZWZpeGVkIHZlcnNpb24sIHRoZW4gdW5wcmVmaXhlZCB2ZXJzaW9uXG5cdFx0aG9va3MgPSBqUXVlcnkuY3NzSG9va3NbIG5hbWUgXSB8fCBqUXVlcnkuY3NzSG9va3NbIG9yaWdOYW1lIF07XG5cblx0XHQvLyBDaGVjayBpZiB3ZSdyZSBzZXR0aW5nIGEgdmFsdWVcblx0XHRpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHR0eXBlID0gdHlwZW9mIHZhbHVlO1xuXG5cdFx0XHQvLyBDb252ZXJ0IFwiKz1cIiBvciBcIi09XCIgdG8gcmVsYXRpdmUgbnVtYmVycyAoIzczNDUpXG5cdFx0XHRpZiAoIHR5cGUgPT09IFwic3RyaW5nXCIgJiYgKCByZXQgPSByY3NzTnVtLmV4ZWMoIHZhbHVlICkgKSAmJiByZXRbIDEgXSApIHtcblx0XHRcdFx0dmFsdWUgPSBhZGp1c3RDU1MoIGVsZW0sIG5hbWUsIHJldCApO1xuXG5cdFx0XHRcdC8vIEZpeGVzIGJ1ZyAjOTIzN1xuXHRcdFx0XHR0eXBlID0gXCJudW1iZXJcIjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTWFrZSBzdXJlIHRoYXQgbnVsbCBhbmQgTmFOIHZhbHVlcyBhcmVuJ3Qgc2V0ICgjNzExNilcblx0XHRcdGlmICggdmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSAhPT0gdmFsdWUgKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgYSBudW1iZXIgd2FzIHBhc3NlZCBpbiwgYWRkIHRoZSB1bml0IChleGNlcHQgZm9yIGNlcnRhaW4gQ1NTIHByb3BlcnRpZXMpXG5cdFx0XHRpZiAoIHR5cGUgPT09IFwibnVtYmVyXCIgKSB7XG5cdFx0XHRcdHZhbHVlICs9IHJldCAmJiByZXRbIDMgXSB8fCAoIGpRdWVyeS5jc3NOdW1iZXJbIG9yaWdOYW1lIF0gPyBcIlwiIDogXCJweFwiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFOS0xMStcblx0XHRcdC8vIGJhY2tncm91bmQtKiBwcm9wcyBhZmZlY3Qgb3JpZ2luYWwgY2xvbmUncyB2YWx1ZXNcblx0XHRcdGlmICggIXN1cHBvcnQuY2xlYXJDbG9uZVN0eWxlICYmIHZhbHVlID09PSBcIlwiICYmIG5hbWUuaW5kZXhPZiggXCJiYWNrZ3JvdW5kXCIgKSA9PT0gMCApIHtcblx0XHRcdFx0c3R5bGVbIG5hbWUgXSA9IFwiaW5oZXJpdFwiO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBJZiBhIGhvb2sgd2FzIHByb3ZpZGVkLCB1c2UgdGhhdCB2YWx1ZSwgb3RoZXJ3aXNlIGp1c3Qgc2V0IHRoZSBzcGVjaWZpZWQgdmFsdWVcblx0XHRcdGlmICggIWhvb2tzIHx8ICEoIFwic2V0XCIgaW4gaG9va3MgKSB8fFxuXHRcdFx0XHQoIHZhbHVlID0gaG9va3Muc2V0KCBlbGVtLCB2YWx1ZSwgZXh0cmEgKSApICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0c3R5bGVbIG5hbWUgXSA9IHZhbHVlO1xuXHRcdFx0fVxuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Ly8gSWYgYSBob29rIHdhcyBwcm92aWRlZCBnZXQgdGhlIG5vbi1jb21wdXRlZCB2YWx1ZSBmcm9tIHRoZXJlXG5cdFx0XHRpZiAoIGhvb2tzICYmIFwiZ2V0XCIgaW4gaG9va3MgJiZcblx0XHRcdFx0KCByZXQgPSBob29rcy5nZXQoIGVsZW0sIGZhbHNlLCBleHRyYSApICkgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRyZXR1cm4gcmV0O1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBPdGhlcndpc2UganVzdCBnZXQgdGhlIHZhbHVlIGZyb20gdGhlIHN0eWxlIG9iamVjdFxuXHRcdFx0cmV0dXJuIHN0eWxlWyBuYW1lIF07XG5cdFx0fVxuXHR9LFxuXG5cdGNzczogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGV4dHJhLCBzdHlsZXMgKSB7XG5cdFx0dmFyIHZhbCwgbnVtLCBob29rcyxcblx0XHRcdG9yaWdOYW1lID0galF1ZXJ5LmNhbWVsQ2FzZSggbmFtZSApO1xuXG5cdFx0Ly8gTWFrZSBzdXJlIHRoYXQgd2UncmUgd29ya2luZyB3aXRoIHRoZSByaWdodCBuYW1lXG5cdFx0bmFtZSA9IGpRdWVyeS5jc3NQcm9wc1sgb3JpZ05hbWUgXSB8fFxuXHRcdFx0KCBqUXVlcnkuY3NzUHJvcHNbIG9yaWdOYW1lIF0gPSB2ZW5kb3JQcm9wTmFtZSggb3JpZ05hbWUgKSB8fCBvcmlnTmFtZSApO1xuXG5cdFx0Ly8gVHJ5IHByZWZpeGVkIG5hbWUgZm9sbG93ZWQgYnkgdGhlIHVucHJlZml4ZWQgbmFtZVxuXHRcdGhvb2tzID0galF1ZXJ5LmNzc0hvb2tzWyBuYW1lIF0gfHwgalF1ZXJ5LmNzc0hvb2tzWyBvcmlnTmFtZSBdO1xuXG5cdFx0Ly8gSWYgYSBob29rIHdhcyBwcm92aWRlZCBnZXQgdGhlIGNvbXB1dGVkIHZhbHVlIGZyb20gdGhlcmVcblx0XHRpZiAoIGhvb2tzICYmIFwiZ2V0XCIgaW4gaG9va3MgKSB7XG5cdFx0XHR2YWwgPSBob29rcy5nZXQoIGVsZW0sIHRydWUsIGV4dHJhICk7XG5cdFx0fVxuXG5cdFx0Ly8gT3RoZXJ3aXNlLCBpZiBhIHdheSB0byBnZXQgdGhlIGNvbXB1dGVkIHZhbHVlIGV4aXN0cywgdXNlIHRoYXRcblx0XHRpZiAoIHZhbCA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0dmFsID0gY3VyQ1NTKCBlbGVtLCBuYW1lLCBzdHlsZXMgKTtcblx0XHR9XG5cblx0XHQvLyBDb252ZXJ0IFwibm9ybWFsXCIgdG8gY29tcHV0ZWQgdmFsdWVcblx0XHRpZiAoIHZhbCA9PT0gXCJub3JtYWxcIiAmJiBuYW1lIGluIGNzc05vcm1hbFRyYW5zZm9ybSApIHtcblx0XHRcdHZhbCA9IGNzc05vcm1hbFRyYW5zZm9ybVsgbmFtZSBdO1xuXHRcdH1cblxuXHRcdC8vIE1ha2UgbnVtZXJpYyBpZiBmb3JjZWQgb3IgYSBxdWFsaWZpZXIgd2FzIHByb3ZpZGVkIGFuZCB2YWwgbG9va3MgbnVtZXJpY1xuXHRcdGlmICggZXh0cmEgPT09IFwiXCIgfHwgZXh0cmEgKSB7XG5cdFx0XHRudW0gPSBwYXJzZUZsb2F0KCB2YWwgKTtcblx0XHRcdHJldHVybiBleHRyYSA9PT0gdHJ1ZSB8fCBpc0Zpbml0ZSggbnVtICkgPyBudW0gfHwgMCA6IHZhbDtcblx0XHR9XG5cdFx0cmV0dXJuIHZhbDtcblx0fVxufSApO1xuXG5qUXVlcnkuZWFjaCggWyBcImhlaWdodFwiLCBcIndpZHRoXCIgXSwgZnVuY3Rpb24oIGksIG5hbWUgKSB7XG5cdGpRdWVyeS5jc3NIb29rc1sgbmFtZSBdID0ge1xuXHRcdGdldDogZnVuY3Rpb24oIGVsZW0sIGNvbXB1dGVkLCBleHRyYSApIHtcblx0XHRcdGlmICggY29tcHV0ZWQgKSB7XG5cblx0XHRcdFx0Ly8gQ2VydGFpbiBlbGVtZW50cyBjYW4gaGF2ZSBkaW1lbnNpb24gaW5mbyBpZiB3ZSBpbnZpc2libHkgc2hvdyB0aGVtXG5cdFx0XHRcdC8vIGJ1dCBpdCBtdXN0IGhhdmUgYSBjdXJyZW50IGRpc3BsYXkgc3R5bGUgdGhhdCB3b3VsZCBiZW5lZml0XG5cdFx0XHRcdHJldHVybiByZGlzcGxheXN3YXAudGVzdCggalF1ZXJ5LmNzcyggZWxlbSwgXCJkaXNwbGF5XCIgKSApICYmXG5cdFx0XHRcdFx0ZWxlbS5vZmZzZXRXaWR0aCA9PT0gMCA/XG5cdFx0XHRcdFx0XHRzd2FwKCBlbGVtLCBjc3NTaG93LCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGdldFdpZHRoT3JIZWlnaHQoIGVsZW0sIG5hbWUsIGV4dHJhICk7XG5cdFx0XHRcdFx0XHR9ICkgOlxuXHRcdFx0XHRcdFx0Z2V0V2lkdGhPckhlaWdodCggZWxlbSwgbmFtZSwgZXh0cmEgKTtcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0c2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUsIGV4dHJhICkge1xuXHRcdFx0dmFyIG1hdGNoZXMsXG5cdFx0XHRcdHN0eWxlcyA9IGV4dHJhICYmIGdldFN0eWxlcyggZWxlbSApLFxuXHRcdFx0XHRzdWJ0cmFjdCA9IGV4dHJhICYmIGF1Z21lbnRXaWR0aE9ySGVpZ2h0KFxuXHRcdFx0XHRcdGVsZW0sXG5cdFx0XHRcdFx0bmFtZSxcblx0XHRcdFx0XHRleHRyYSxcblx0XHRcdFx0XHRqUXVlcnkuY3NzKCBlbGVtLCBcImJveFNpemluZ1wiLCBmYWxzZSwgc3R5bGVzICkgPT09IFwiYm9yZGVyLWJveFwiLFxuXHRcdFx0XHRcdHN0eWxlc1xuXHRcdFx0XHQpO1xuXG5cdFx0XHQvLyBDb252ZXJ0IHRvIHBpeGVscyBpZiB2YWx1ZSBhZGp1c3RtZW50IGlzIG5lZWRlZFxuXHRcdFx0aWYgKCBzdWJ0cmFjdCAmJiAoIG1hdGNoZXMgPSByY3NzTnVtLmV4ZWMoIHZhbHVlICkgKSAmJlxuXHRcdFx0XHQoIG1hdGNoZXNbIDMgXSB8fCBcInB4XCIgKSAhPT0gXCJweFwiICkge1xuXG5cdFx0XHRcdGVsZW0uc3R5bGVbIG5hbWUgXSA9IHZhbHVlO1xuXHRcdFx0XHR2YWx1ZSA9IGpRdWVyeS5jc3MoIGVsZW0sIG5hbWUgKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHNldFBvc2l0aXZlTnVtYmVyKCBlbGVtLCB2YWx1ZSwgc3VidHJhY3QgKTtcblx0XHR9XG5cdH07XG59ICk7XG5cbmpRdWVyeS5jc3NIb29rcy5tYXJnaW5MZWZ0ID0gYWRkR2V0SG9va0lmKCBzdXBwb3J0LnJlbGlhYmxlTWFyZ2luTGVmdCxcblx0ZnVuY3Rpb24oIGVsZW0sIGNvbXB1dGVkICkge1xuXHRcdGlmICggY29tcHV0ZWQgKSB7XG5cdFx0XHRyZXR1cm4gKCBwYXJzZUZsb2F0KCBjdXJDU1MoIGVsZW0sIFwibWFyZ2luTGVmdFwiICkgKSB8fFxuXHRcdFx0XHRlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQgLVxuXHRcdFx0XHRcdHN3YXAoIGVsZW0sIHsgbWFyZ2luTGVmdDogMCB9LCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdHJldHVybiBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQ7XG5cdFx0XHRcdFx0fSApXG5cdFx0XHRcdCkgKyBcInB4XCI7XG5cdFx0fVxuXHR9XG4pO1xuXG4vLyBTdXBwb3J0OiBBbmRyb2lkIDIuM1xualF1ZXJ5LmNzc0hvb2tzLm1hcmdpblJpZ2h0ID0gYWRkR2V0SG9va0lmKCBzdXBwb3J0LnJlbGlhYmxlTWFyZ2luUmlnaHQsXG5cdGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCApIHtcblx0XHRpZiAoIGNvbXB1dGVkICkge1xuXHRcdFx0cmV0dXJuIHN3YXAoIGVsZW0sIHsgXCJkaXNwbGF5XCI6IFwiaW5saW5lLWJsb2NrXCIgfSxcblx0XHRcdFx0Y3VyQ1NTLCBbIGVsZW0sIFwibWFyZ2luUmlnaHRcIiBdICk7XG5cdFx0fVxuXHR9XG4pO1xuXG4vLyBUaGVzZSBob29rcyBhcmUgdXNlZCBieSBhbmltYXRlIHRvIGV4cGFuZCBwcm9wZXJ0aWVzXG5qUXVlcnkuZWFjaCgge1xuXHRtYXJnaW46IFwiXCIsXG5cdHBhZGRpbmc6IFwiXCIsXG5cdGJvcmRlcjogXCJXaWR0aFwiXG59LCBmdW5jdGlvbiggcHJlZml4LCBzdWZmaXggKSB7XG5cdGpRdWVyeS5jc3NIb29rc1sgcHJlZml4ICsgc3VmZml4IF0gPSB7XG5cdFx0ZXhwYW5kOiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHR2YXIgaSA9IDAsXG5cdFx0XHRcdGV4cGFuZGVkID0ge30sXG5cblx0XHRcdFx0Ly8gQXNzdW1lcyBhIHNpbmdsZSBudW1iZXIgaWYgbm90IGEgc3RyaW5nXG5cdFx0XHRcdHBhcnRzID0gdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiID8gdmFsdWUuc3BsaXQoIFwiIFwiICkgOiBbIHZhbHVlIF07XG5cblx0XHRcdGZvciAoIDsgaSA8IDQ7IGkrKyApIHtcblx0XHRcdFx0ZXhwYW5kZWRbIHByZWZpeCArIGNzc0V4cGFuZFsgaSBdICsgc3VmZml4IF0gPVxuXHRcdFx0XHRcdHBhcnRzWyBpIF0gfHwgcGFydHNbIGkgLSAyIF0gfHwgcGFydHNbIDAgXTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGV4cGFuZGVkO1xuXHRcdH1cblx0fTtcblxuXHRpZiAoICFybWFyZ2luLnRlc3QoIHByZWZpeCApICkge1xuXHRcdGpRdWVyeS5jc3NIb29rc1sgcHJlZml4ICsgc3VmZml4IF0uc2V0ID0gc2V0UG9zaXRpdmVOdW1iZXI7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRjc3M6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUgKSB7XG5cdFx0XHR2YXIgc3R5bGVzLCBsZW4sXG5cdFx0XHRcdG1hcCA9IHt9LFxuXHRcdFx0XHRpID0gMDtcblxuXHRcdFx0aWYgKCBqUXVlcnkuaXNBcnJheSggbmFtZSApICkge1xuXHRcdFx0XHRzdHlsZXMgPSBnZXRTdHlsZXMoIGVsZW0gKTtcblx0XHRcdFx0bGVuID0gbmFtZS5sZW5ndGg7XG5cblx0XHRcdFx0Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0XHRcdFx0bWFwWyBuYW1lWyBpIF0gXSA9IGpRdWVyeS5jc3MoIGVsZW0sIG5hbWVbIGkgXSwgZmFsc2UsIHN0eWxlcyApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIG1hcDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHZhbHVlICE9PSB1bmRlZmluZWQgP1xuXHRcdFx0XHRqUXVlcnkuc3R5bGUoIGVsZW0sIG5hbWUsIHZhbHVlICkgOlxuXHRcdFx0XHRqUXVlcnkuY3NzKCBlbGVtLCBuYW1lICk7XG5cdFx0fSwgbmFtZSwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAxICk7XG5cdH0sXG5cdHNob3c6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBzaG93SGlkZSggdGhpcywgdHJ1ZSApO1xuXHR9LFxuXHRoaWRlOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gc2hvd0hpZGUoIHRoaXMgKTtcblx0fSxcblx0dG9nZ2xlOiBmdW5jdGlvbiggc3RhdGUgKSB7XG5cdFx0aWYgKCB0eXBlb2Ygc3RhdGUgPT09IFwiYm9vbGVhblwiICkge1xuXHRcdFx0cmV0dXJuIHN0YXRlID8gdGhpcy5zaG93KCkgOiB0aGlzLmhpZGUoKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGlmICggaXNIaWRkZW4oIHRoaXMgKSApIHtcblx0XHRcdFx0alF1ZXJ5KCB0aGlzICkuc2hvdygpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0alF1ZXJ5KCB0aGlzICkuaGlkZSgpO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fVxufSApO1xuXG5cbmZ1bmN0aW9uIFR3ZWVuKCBlbGVtLCBvcHRpb25zLCBwcm9wLCBlbmQsIGVhc2luZyApIHtcblx0cmV0dXJuIG5ldyBUd2Vlbi5wcm90b3R5cGUuaW5pdCggZWxlbSwgb3B0aW9ucywgcHJvcCwgZW5kLCBlYXNpbmcgKTtcbn1cbmpRdWVyeS5Ud2VlbiA9IFR3ZWVuO1xuXG5Ud2Vlbi5wcm90b3R5cGUgPSB7XG5cdGNvbnN0cnVjdG9yOiBUd2Vlbixcblx0aW5pdDogZnVuY3Rpb24oIGVsZW0sIG9wdGlvbnMsIHByb3AsIGVuZCwgZWFzaW5nLCB1bml0ICkge1xuXHRcdHRoaXMuZWxlbSA9IGVsZW07XG5cdFx0dGhpcy5wcm9wID0gcHJvcDtcblx0XHR0aGlzLmVhc2luZyA9IGVhc2luZyB8fCBqUXVlcnkuZWFzaW5nLl9kZWZhdWx0O1xuXHRcdHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG5cdFx0dGhpcy5zdGFydCA9IHRoaXMubm93ID0gdGhpcy5jdXIoKTtcblx0XHR0aGlzLmVuZCA9IGVuZDtcblx0XHR0aGlzLnVuaXQgPSB1bml0IHx8ICggalF1ZXJ5LmNzc051bWJlclsgcHJvcCBdID8gXCJcIiA6IFwicHhcIiApO1xuXHR9LFxuXHRjdXI6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBob29rcyA9IFR3ZWVuLnByb3BIb29rc1sgdGhpcy5wcm9wIF07XG5cblx0XHRyZXR1cm4gaG9va3MgJiYgaG9va3MuZ2V0ID9cblx0XHRcdGhvb2tzLmdldCggdGhpcyApIDpcblx0XHRcdFR3ZWVuLnByb3BIb29rcy5fZGVmYXVsdC5nZXQoIHRoaXMgKTtcblx0fSxcblx0cnVuOiBmdW5jdGlvbiggcGVyY2VudCApIHtcblx0XHR2YXIgZWFzZWQsXG5cdFx0XHRob29rcyA9IFR3ZWVuLnByb3BIb29rc1sgdGhpcy5wcm9wIF07XG5cblx0XHRpZiAoIHRoaXMub3B0aW9ucy5kdXJhdGlvbiApIHtcblx0XHRcdHRoaXMucG9zID0gZWFzZWQgPSBqUXVlcnkuZWFzaW5nWyB0aGlzLmVhc2luZyBdKFxuXHRcdFx0XHRwZXJjZW50LCB0aGlzLm9wdGlvbnMuZHVyYXRpb24gKiBwZXJjZW50LCAwLCAxLCB0aGlzLm9wdGlvbnMuZHVyYXRpb25cblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMucG9zID0gZWFzZWQgPSBwZXJjZW50O1xuXHRcdH1cblx0XHR0aGlzLm5vdyA9ICggdGhpcy5lbmQgLSB0aGlzLnN0YXJ0ICkgKiBlYXNlZCArIHRoaXMuc3RhcnQ7XG5cblx0XHRpZiAoIHRoaXMub3B0aW9ucy5zdGVwICkge1xuXHRcdFx0dGhpcy5vcHRpb25zLnN0ZXAuY2FsbCggdGhpcy5lbGVtLCB0aGlzLm5vdywgdGhpcyApO1xuXHRcdH1cblxuXHRcdGlmICggaG9va3MgJiYgaG9va3Muc2V0ICkge1xuXHRcdFx0aG9va3Muc2V0KCB0aGlzICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdFR3ZWVuLnByb3BIb29rcy5fZGVmYXVsdC5zZXQoIHRoaXMgKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn07XG5cblR3ZWVuLnByb3RvdHlwZS5pbml0LnByb3RvdHlwZSA9IFR3ZWVuLnByb3RvdHlwZTtcblxuVHdlZW4ucHJvcEhvb2tzID0ge1xuXHRfZGVmYXVsdDoge1xuXHRcdGdldDogZnVuY3Rpb24oIHR3ZWVuICkge1xuXHRcdFx0dmFyIHJlc3VsdDtcblxuXHRcdFx0Ly8gVXNlIGEgcHJvcGVydHkgb24gdGhlIGVsZW1lbnQgZGlyZWN0bHkgd2hlbiBpdCBpcyBub3QgYSBET00gZWxlbWVudCxcblx0XHRcdC8vIG9yIHdoZW4gdGhlcmUgaXMgbm8gbWF0Y2hpbmcgc3R5bGUgcHJvcGVydHkgdGhhdCBleGlzdHMuXG5cdFx0XHRpZiAoIHR3ZWVuLmVsZW0ubm9kZVR5cGUgIT09IDEgfHxcblx0XHRcdFx0dHdlZW4uZWxlbVsgdHdlZW4ucHJvcCBdICE9IG51bGwgJiYgdHdlZW4uZWxlbS5zdHlsZVsgdHdlZW4ucHJvcCBdID09IG51bGwgKSB7XG5cdFx0XHRcdHJldHVybiB0d2Vlbi5lbGVtWyB0d2Vlbi5wcm9wIF07XG5cdFx0XHR9XG5cblx0XHRcdC8vIFBhc3NpbmcgYW4gZW1wdHkgc3RyaW5nIGFzIGEgM3JkIHBhcmFtZXRlciB0byAuY3NzIHdpbGwgYXV0b21hdGljYWxseVxuXHRcdFx0Ly8gYXR0ZW1wdCBhIHBhcnNlRmxvYXQgYW5kIGZhbGxiYWNrIHRvIGEgc3RyaW5nIGlmIHRoZSBwYXJzZSBmYWlscy5cblx0XHRcdC8vIFNpbXBsZSB2YWx1ZXMgc3VjaCBhcyBcIjEwcHhcIiBhcmUgcGFyc2VkIHRvIEZsb2F0O1xuXHRcdFx0Ly8gY29tcGxleCB2YWx1ZXMgc3VjaCBhcyBcInJvdGF0ZSgxcmFkKVwiIGFyZSByZXR1cm5lZCBhcy1pcy5cblx0XHRcdHJlc3VsdCA9IGpRdWVyeS5jc3MoIHR3ZWVuLmVsZW0sIHR3ZWVuLnByb3AsIFwiXCIgKTtcblxuXHRcdFx0Ly8gRW1wdHkgc3RyaW5ncywgbnVsbCwgdW5kZWZpbmVkIGFuZCBcImF1dG9cIiBhcmUgY29udmVydGVkIHRvIDAuXG5cdFx0XHRyZXR1cm4gIXJlc3VsdCB8fCByZXN1bHQgPT09IFwiYXV0b1wiID8gMCA6IHJlc3VsdDtcblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24oIHR3ZWVuICkge1xuXG5cdFx0XHQvLyBVc2Ugc3RlcCBob29rIGZvciBiYWNrIGNvbXBhdC5cblx0XHRcdC8vIFVzZSBjc3NIb29rIGlmIGl0cyB0aGVyZS5cblx0XHRcdC8vIFVzZSAuc3R5bGUgaWYgYXZhaWxhYmxlIGFuZCB1c2UgcGxhaW4gcHJvcGVydGllcyB3aGVyZSBhdmFpbGFibGUuXG5cdFx0XHRpZiAoIGpRdWVyeS5meC5zdGVwWyB0d2Vlbi5wcm9wIF0gKSB7XG5cdFx0XHRcdGpRdWVyeS5meC5zdGVwWyB0d2Vlbi5wcm9wIF0oIHR3ZWVuICk7XG5cdFx0XHR9IGVsc2UgaWYgKCB0d2Vlbi5lbGVtLm5vZGVUeXBlID09PSAxICYmXG5cdFx0XHRcdCggdHdlZW4uZWxlbS5zdHlsZVsgalF1ZXJ5LmNzc1Byb3BzWyB0d2Vlbi5wcm9wIF0gXSAhPSBudWxsIHx8XG5cdFx0XHRcdFx0alF1ZXJ5LmNzc0hvb2tzWyB0d2Vlbi5wcm9wIF0gKSApIHtcblx0XHRcdFx0alF1ZXJ5LnN0eWxlKCB0d2Vlbi5lbGVtLCB0d2Vlbi5wcm9wLCB0d2Vlbi5ub3cgKyB0d2Vlbi51bml0ICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0d2Vlbi5lbGVtWyB0d2Vlbi5wcm9wIF0gPSB0d2Vlbi5ub3c7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59O1xuXG4vLyBTdXBwb3J0OiBJRTlcbi8vIFBhbmljIGJhc2VkIGFwcHJvYWNoIHRvIHNldHRpbmcgdGhpbmdzIG9uIGRpc2Nvbm5lY3RlZCBub2Rlc1xuVHdlZW4ucHJvcEhvb2tzLnNjcm9sbFRvcCA9IFR3ZWVuLnByb3BIb29rcy5zY3JvbGxMZWZ0ID0ge1xuXHRzZXQ6IGZ1bmN0aW9uKCB0d2VlbiApIHtcblx0XHRpZiAoIHR3ZWVuLmVsZW0ubm9kZVR5cGUgJiYgdHdlZW4uZWxlbS5wYXJlbnROb2RlICkge1xuXHRcdFx0dHdlZW4uZWxlbVsgdHdlZW4ucHJvcCBdID0gdHdlZW4ubm93O1xuXHRcdH1cblx0fVxufTtcblxualF1ZXJ5LmVhc2luZyA9IHtcblx0bGluZWFyOiBmdW5jdGlvbiggcCApIHtcblx0XHRyZXR1cm4gcDtcblx0fSxcblx0c3dpbmc6IGZ1bmN0aW9uKCBwICkge1xuXHRcdHJldHVybiAwLjUgLSBNYXRoLmNvcyggcCAqIE1hdGguUEkgKSAvIDI7XG5cdH0sXG5cdF9kZWZhdWx0OiBcInN3aW5nXCJcbn07XG5cbmpRdWVyeS5meCA9IFR3ZWVuLnByb3RvdHlwZS5pbml0O1xuXG4vLyBCYWNrIENvbXBhdCA8MS44IGV4dGVuc2lvbiBwb2ludFxualF1ZXJ5LmZ4LnN0ZXAgPSB7fTtcblxuXG5cblxudmFyXG5cdGZ4Tm93LCB0aW1lcklkLFxuXHRyZnh0eXBlcyA9IC9eKD86dG9nZ2xlfHNob3d8aGlkZSkkLyxcblx0cnJ1biA9IC9xdWV1ZUhvb2tzJC87XG5cbi8vIEFuaW1hdGlvbnMgY3JlYXRlZCBzeW5jaHJvbm91c2x5IHdpbGwgcnVuIHN5bmNocm9ub3VzbHlcbmZ1bmN0aW9uIGNyZWF0ZUZ4Tm93KCkge1xuXHR3aW5kb3cuc2V0VGltZW91dCggZnVuY3Rpb24oKSB7XG5cdFx0ZnhOb3cgPSB1bmRlZmluZWQ7XG5cdH0gKTtcblx0cmV0dXJuICggZnhOb3cgPSBqUXVlcnkubm93KCkgKTtcbn1cblxuLy8gR2VuZXJhdGUgcGFyYW1ldGVycyB0byBjcmVhdGUgYSBzdGFuZGFyZCBhbmltYXRpb25cbmZ1bmN0aW9uIGdlbkZ4KCB0eXBlLCBpbmNsdWRlV2lkdGggKSB7XG5cdHZhciB3aGljaCxcblx0XHRpID0gMCxcblx0XHRhdHRycyA9IHsgaGVpZ2h0OiB0eXBlIH07XG5cblx0Ly8gSWYgd2UgaW5jbHVkZSB3aWR0aCwgc3RlcCB2YWx1ZSBpcyAxIHRvIGRvIGFsbCBjc3NFeHBhbmQgdmFsdWVzLFxuXHQvLyBvdGhlcndpc2Ugc3RlcCB2YWx1ZSBpcyAyIHRvIHNraXAgb3ZlciBMZWZ0IGFuZCBSaWdodFxuXHRpbmNsdWRlV2lkdGggPSBpbmNsdWRlV2lkdGggPyAxIDogMDtcblx0Zm9yICggOyBpIDwgNCA7IGkgKz0gMiAtIGluY2x1ZGVXaWR0aCApIHtcblx0XHR3aGljaCA9IGNzc0V4cGFuZFsgaSBdO1xuXHRcdGF0dHJzWyBcIm1hcmdpblwiICsgd2hpY2ggXSA9IGF0dHJzWyBcInBhZGRpbmdcIiArIHdoaWNoIF0gPSB0eXBlO1xuXHR9XG5cblx0aWYgKCBpbmNsdWRlV2lkdGggKSB7XG5cdFx0YXR0cnMub3BhY2l0eSA9IGF0dHJzLndpZHRoID0gdHlwZTtcblx0fVxuXG5cdHJldHVybiBhdHRycztcbn1cblxuZnVuY3Rpb24gY3JlYXRlVHdlZW4oIHZhbHVlLCBwcm9wLCBhbmltYXRpb24gKSB7XG5cdHZhciB0d2Vlbixcblx0XHRjb2xsZWN0aW9uID0gKCBBbmltYXRpb24udHdlZW5lcnNbIHByb3AgXSB8fCBbXSApLmNvbmNhdCggQW5pbWF0aW9uLnR3ZWVuZXJzWyBcIipcIiBdICksXG5cdFx0aW5kZXggPSAwLFxuXHRcdGxlbmd0aCA9IGNvbGxlY3Rpb24ubGVuZ3RoO1xuXHRmb3IgKCA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xuXHRcdGlmICggKCB0d2VlbiA9IGNvbGxlY3Rpb25bIGluZGV4IF0uY2FsbCggYW5pbWF0aW9uLCBwcm9wLCB2YWx1ZSApICkgKSB7XG5cblx0XHRcdC8vIFdlJ3JlIGRvbmUgd2l0aCB0aGlzIHByb3BlcnR5XG5cdFx0XHRyZXR1cm4gdHdlZW47XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRQcmVmaWx0ZXIoIGVsZW0sIHByb3BzLCBvcHRzICkge1xuXHQvKiBqc2hpbnQgdmFsaWR0aGlzOiB0cnVlICovXG5cdHZhciBwcm9wLCB2YWx1ZSwgdG9nZ2xlLCB0d2VlbiwgaG9va3MsIG9sZGZpcmUsIGRpc3BsYXksIGNoZWNrRGlzcGxheSxcblx0XHRhbmltID0gdGhpcyxcblx0XHRvcmlnID0ge30sXG5cdFx0c3R5bGUgPSBlbGVtLnN0eWxlLFxuXHRcdGhpZGRlbiA9IGVsZW0ubm9kZVR5cGUgJiYgaXNIaWRkZW4oIGVsZW0gKSxcblx0XHRkYXRhU2hvdyA9IGRhdGFQcml2LmdldCggZWxlbSwgXCJmeHNob3dcIiApO1xuXG5cdC8vIEhhbmRsZSBxdWV1ZTogZmFsc2UgcHJvbWlzZXNcblx0aWYgKCAhb3B0cy5xdWV1ZSApIHtcblx0XHRob29rcyA9IGpRdWVyeS5fcXVldWVIb29rcyggZWxlbSwgXCJmeFwiICk7XG5cdFx0aWYgKCBob29rcy51bnF1ZXVlZCA9PSBudWxsICkge1xuXHRcdFx0aG9va3MudW5xdWV1ZWQgPSAwO1xuXHRcdFx0b2xkZmlyZSA9IGhvb2tzLmVtcHR5LmZpcmU7XG5cdFx0XHRob29rcy5lbXB0eS5maXJlID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggIWhvb2tzLnVucXVldWVkICkge1xuXHRcdFx0XHRcdG9sZGZpcmUoKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHR9XG5cdFx0aG9va3MudW5xdWV1ZWQrKztcblxuXHRcdGFuaW0uYWx3YXlzKCBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gRW5zdXJlIHRoZSBjb21wbGV0ZSBoYW5kbGVyIGlzIGNhbGxlZCBiZWZvcmUgdGhpcyBjb21wbGV0ZXNcblx0XHRcdGFuaW0uYWx3YXlzKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0aG9va3MudW5xdWV1ZWQtLTtcblx0XHRcdFx0aWYgKCAhalF1ZXJ5LnF1ZXVlKCBlbGVtLCBcImZ4XCIgKS5sZW5ndGggKSB7XG5cdFx0XHRcdFx0aG9va3MuZW1wdHkuZmlyZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9ICk7XG5cdFx0fSApO1xuXHR9XG5cblx0Ly8gSGVpZ2h0L3dpZHRoIG92ZXJmbG93IHBhc3Ncblx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICYmICggXCJoZWlnaHRcIiBpbiBwcm9wcyB8fCBcIndpZHRoXCIgaW4gcHJvcHMgKSApIHtcblxuXHRcdC8vIE1ha2Ugc3VyZSB0aGF0IG5vdGhpbmcgc25lYWtzIG91dFxuXHRcdC8vIFJlY29yZCBhbGwgMyBvdmVyZmxvdyBhdHRyaWJ1dGVzIGJlY2F1c2UgSUU5LTEwIGRvIG5vdFxuXHRcdC8vIGNoYW5nZSB0aGUgb3ZlcmZsb3cgYXR0cmlidXRlIHdoZW4gb3ZlcmZsb3dYIGFuZFxuXHRcdC8vIG92ZXJmbG93WSBhcmUgc2V0IHRvIHRoZSBzYW1lIHZhbHVlXG5cdFx0b3B0cy5vdmVyZmxvdyA9IFsgc3R5bGUub3ZlcmZsb3csIHN0eWxlLm92ZXJmbG93WCwgc3R5bGUub3ZlcmZsb3dZIF07XG5cblx0XHQvLyBTZXQgZGlzcGxheSBwcm9wZXJ0eSB0byBpbmxpbmUtYmxvY2sgZm9yIGhlaWdodC93aWR0aFxuXHRcdC8vIGFuaW1hdGlvbnMgb24gaW5saW5lIGVsZW1lbnRzIHRoYXQgYXJlIGhhdmluZyB3aWR0aC9oZWlnaHQgYW5pbWF0ZWRcblx0XHRkaXNwbGF5ID0galF1ZXJ5LmNzcyggZWxlbSwgXCJkaXNwbGF5XCIgKTtcblxuXHRcdC8vIFRlc3QgZGVmYXVsdCBkaXNwbGF5IGlmIGRpc3BsYXkgaXMgY3VycmVudGx5IFwibm9uZVwiXG5cdFx0Y2hlY2tEaXNwbGF5ID0gZGlzcGxheSA9PT0gXCJub25lXCIgP1xuXHRcdFx0ZGF0YVByaXYuZ2V0KCBlbGVtLCBcIm9sZGRpc3BsYXlcIiApIHx8IGRlZmF1bHREaXNwbGF5KCBlbGVtLm5vZGVOYW1lICkgOiBkaXNwbGF5O1xuXG5cdFx0aWYgKCBjaGVja0Rpc3BsYXkgPT09IFwiaW5saW5lXCIgJiYgalF1ZXJ5LmNzcyggZWxlbSwgXCJmbG9hdFwiICkgPT09IFwibm9uZVwiICkge1xuXHRcdFx0c3R5bGUuZGlzcGxheSA9IFwiaW5saW5lLWJsb2NrXCI7XG5cdFx0fVxuXHR9XG5cblx0aWYgKCBvcHRzLm92ZXJmbG93ICkge1xuXHRcdHN0eWxlLm92ZXJmbG93ID0gXCJoaWRkZW5cIjtcblx0XHRhbmltLmFsd2F5cyggZnVuY3Rpb24oKSB7XG5cdFx0XHRzdHlsZS5vdmVyZmxvdyA9IG9wdHMub3ZlcmZsb3dbIDAgXTtcblx0XHRcdHN0eWxlLm92ZXJmbG93WCA9IG9wdHMub3ZlcmZsb3dbIDEgXTtcblx0XHRcdHN0eWxlLm92ZXJmbG93WSA9IG9wdHMub3ZlcmZsb3dbIDIgXTtcblx0XHR9ICk7XG5cdH1cblxuXHQvLyBzaG93L2hpZGUgcGFzc1xuXHRmb3IgKCBwcm9wIGluIHByb3BzICkge1xuXHRcdHZhbHVlID0gcHJvcHNbIHByb3AgXTtcblx0XHRpZiAoIHJmeHR5cGVzLmV4ZWMoIHZhbHVlICkgKSB7XG5cdFx0XHRkZWxldGUgcHJvcHNbIHByb3AgXTtcblx0XHRcdHRvZ2dsZSA9IHRvZ2dsZSB8fCB2YWx1ZSA9PT0gXCJ0b2dnbGVcIjtcblx0XHRcdGlmICggdmFsdWUgPT09ICggaGlkZGVuID8gXCJoaWRlXCIgOiBcInNob3dcIiApICkge1xuXG5cdFx0XHRcdC8vIElmIHRoZXJlIGlzIGRhdGFTaG93IGxlZnQgb3ZlciBmcm9tIGEgc3RvcHBlZCBoaWRlIG9yIHNob3dcblx0XHRcdFx0Ly8gYW5kIHdlIGFyZSBnb2luZyB0byBwcm9jZWVkIHdpdGggc2hvdywgd2Ugc2hvdWxkIHByZXRlbmQgdG8gYmUgaGlkZGVuXG5cdFx0XHRcdGlmICggdmFsdWUgPT09IFwic2hvd1wiICYmIGRhdGFTaG93ICYmIGRhdGFTaG93WyBwcm9wIF0gIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHRoaWRkZW4gPSB0cnVlO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRvcmlnWyBwcm9wIF0gPSBkYXRhU2hvdyAmJiBkYXRhU2hvd1sgcHJvcCBdIHx8IGpRdWVyeS5zdHlsZSggZWxlbSwgcHJvcCApO1xuXG5cdFx0Ly8gQW55IG5vbi1meCB2YWx1ZSBzdG9wcyB1cyBmcm9tIHJlc3RvcmluZyB0aGUgb3JpZ2luYWwgZGlzcGxheSB2YWx1ZVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRkaXNwbGF5ID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxuXG5cdGlmICggIWpRdWVyeS5pc0VtcHR5T2JqZWN0KCBvcmlnICkgKSB7XG5cdFx0aWYgKCBkYXRhU2hvdyApIHtcblx0XHRcdGlmICggXCJoaWRkZW5cIiBpbiBkYXRhU2hvdyApIHtcblx0XHRcdFx0aGlkZGVuID0gZGF0YVNob3cuaGlkZGVuO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRkYXRhU2hvdyA9IGRhdGFQcml2LmFjY2VzcyggZWxlbSwgXCJmeHNob3dcIiwge30gKTtcblx0XHR9XG5cblx0XHQvLyBTdG9yZSBzdGF0ZSBpZiBpdHMgdG9nZ2xlIC0gZW5hYmxlcyAuc3RvcCgpLnRvZ2dsZSgpIHRvIFwicmV2ZXJzZVwiXG5cdFx0aWYgKCB0b2dnbGUgKSB7XG5cdFx0XHRkYXRhU2hvdy5oaWRkZW4gPSAhaGlkZGVuO1xuXHRcdH1cblx0XHRpZiAoIGhpZGRlbiApIHtcblx0XHRcdGpRdWVyeSggZWxlbSApLnNob3coKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0YW5pbS5kb25lKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0alF1ZXJ5KCBlbGVtICkuaGlkZSgpO1xuXHRcdFx0fSApO1xuXHRcdH1cblx0XHRhbmltLmRvbmUoIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHByb3A7XG5cblx0XHRcdGRhdGFQcml2LnJlbW92ZSggZWxlbSwgXCJmeHNob3dcIiApO1xuXHRcdFx0Zm9yICggcHJvcCBpbiBvcmlnICkge1xuXHRcdFx0XHRqUXVlcnkuc3R5bGUoIGVsZW0sIHByb3AsIG9yaWdbIHByb3AgXSApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0XHRmb3IgKCBwcm9wIGluIG9yaWcgKSB7XG5cdFx0XHR0d2VlbiA9IGNyZWF0ZVR3ZWVuKCBoaWRkZW4gPyBkYXRhU2hvd1sgcHJvcCBdIDogMCwgcHJvcCwgYW5pbSApO1xuXG5cdFx0XHRpZiAoICEoIHByb3AgaW4gZGF0YVNob3cgKSApIHtcblx0XHRcdFx0ZGF0YVNob3dbIHByb3AgXSA9IHR3ZWVuLnN0YXJ0O1xuXHRcdFx0XHRpZiAoIGhpZGRlbiApIHtcblx0XHRcdFx0XHR0d2Vlbi5lbmQgPSB0d2Vlbi5zdGFydDtcblx0XHRcdFx0XHR0d2Vlbi5zdGFydCA9IHByb3AgPT09IFwid2lkdGhcIiB8fCBwcm9wID09PSBcImhlaWdodFwiID8gMSA6IDA7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0Ly8gSWYgdGhpcyBpcyBhIG5vb3AgbGlrZSAuaGlkZSgpLmhpZGUoKSwgcmVzdG9yZSBhbiBvdmVyd3JpdHRlbiBkaXNwbGF5IHZhbHVlXG5cdH0gZWxzZSBpZiAoICggZGlzcGxheSA9PT0gXCJub25lXCIgPyBkZWZhdWx0RGlzcGxheSggZWxlbS5ub2RlTmFtZSApIDogZGlzcGxheSApID09PSBcImlubGluZVwiICkge1xuXHRcdHN0eWxlLmRpc3BsYXkgPSBkaXNwbGF5O1xuXHR9XG59XG5cbmZ1bmN0aW9uIHByb3BGaWx0ZXIoIHByb3BzLCBzcGVjaWFsRWFzaW5nICkge1xuXHR2YXIgaW5kZXgsIG5hbWUsIGVhc2luZywgdmFsdWUsIGhvb2tzO1xuXG5cdC8vIGNhbWVsQ2FzZSwgc3BlY2lhbEVhc2luZyBhbmQgZXhwYW5kIGNzc0hvb2sgcGFzc1xuXHRmb3IgKCBpbmRleCBpbiBwcm9wcyApIHtcblx0XHRuYW1lID0galF1ZXJ5LmNhbWVsQ2FzZSggaW5kZXggKTtcblx0XHRlYXNpbmcgPSBzcGVjaWFsRWFzaW5nWyBuYW1lIF07XG5cdFx0dmFsdWUgPSBwcm9wc1sgaW5kZXggXTtcblx0XHRpZiAoIGpRdWVyeS5pc0FycmF5KCB2YWx1ZSApICkge1xuXHRcdFx0ZWFzaW5nID0gdmFsdWVbIDEgXTtcblx0XHRcdHZhbHVlID0gcHJvcHNbIGluZGV4IF0gPSB2YWx1ZVsgMCBdO1xuXHRcdH1cblxuXHRcdGlmICggaW5kZXggIT09IG5hbWUgKSB7XG5cdFx0XHRwcm9wc1sgbmFtZSBdID0gdmFsdWU7XG5cdFx0XHRkZWxldGUgcHJvcHNbIGluZGV4IF07XG5cdFx0fVxuXG5cdFx0aG9va3MgPSBqUXVlcnkuY3NzSG9va3NbIG5hbWUgXTtcblx0XHRpZiAoIGhvb2tzICYmIFwiZXhwYW5kXCIgaW4gaG9va3MgKSB7XG5cdFx0XHR2YWx1ZSA9IGhvb2tzLmV4cGFuZCggdmFsdWUgKTtcblx0XHRcdGRlbGV0ZSBwcm9wc1sgbmFtZSBdO1xuXG5cdFx0XHQvLyBOb3QgcXVpdGUgJC5leHRlbmQsIHRoaXMgd29uJ3Qgb3ZlcndyaXRlIGV4aXN0aW5nIGtleXMuXG5cdFx0XHQvLyBSZXVzaW5nICdpbmRleCcgYmVjYXVzZSB3ZSBoYXZlIHRoZSBjb3JyZWN0IFwibmFtZVwiXG5cdFx0XHRmb3IgKCBpbmRleCBpbiB2YWx1ZSApIHtcblx0XHRcdFx0aWYgKCAhKCBpbmRleCBpbiBwcm9wcyApICkge1xuXHRcdFx0XHRcdHByb3BzWyBpbmRleCBdID0gdmFsdWVbIGluZGV4IF07XG5cdFx0XHRcdFx0c3BlY2lhbEVhc2luZ1sgaW5kZXggXSA9IGVhc2luZztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRzcGVjaWFsRWFzaW5nWyBuYW1lIF0gPSBlYXNpbmc7XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIEFuaW1hdGlvbiggZWxlbSwgcHJvcGVydGllcywgb3B0aW9ucyApIHtcblx0dmFyIHJlc3VsdCxcblx0XHRzdG9wcGVkLFxuXHRcdGluZGV4ID0gMCxcblx0XHRsZW5ndGggPSBBbmltYXRpb24ucHJlZmlsdGVycy5sZW5ndGgsXG5cdFx0ZGVmZXJyZWQgPSBqUXVlcnkuRGVmZXJyZWQoKS5hbHdheXMoIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBEb24ndCBtYXRjaCBlbGVtIGluIHRoZSA6YW5pbWF0ZWQgc2VsZWN0b3Jcblx0XHRcdGRlbGV0ZSB0aWNrLmVsZW07XG5cdFx0fSApLFxuXHRcdHRpY2sgPSBmdW5jdGlvbigpIHtcblx0XHRcdGlmICggc3RvcHBlZCApIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0dmFyIGN1cnJlbnRUaW1lID0gZnhOb3cgfHwgY3JlYXRlRnhOb3coKSxcblx0XHRcdFx0cmVtYWluaW5nID0gTWF0aC5tYXgoIDAsIGFuaW1hdGlvbi5zdGFydFRpbWUgKyBhbmltYXRpb24uZHVyYXRpb24gLSBjdXJyZW50VGltZSApLFxuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgMi4zXG5cdFx0XHRcdC8vIEFyY2hhaWMgY3Jhc2ggYnVnIHdvbid0IGFsbG93IHVzIHRvIHVzZSBgMSAtICggMC41IHx8IDAgKWAgKCMxMjQ5Nylcblx0XHRcdFx0dGVtcCA9IHJlbWFpbmluZyAvIGFuaW1hdGlvbi5kdXJhdGlvbiB8fCAwLFxuXHRcdFx0XHRwZXJjZW50ID0gMSAtIHRlbXAsXG5cdFx0XHRcdGluZGV4ID0gMCxcblx0XHRcdFx0bGVuZ3RoID0gYW5pbWF0aW9uLnR3ZWVucy5sZW5ndGg7XG5cblx0XHRcdGZvciAoIDsgaW5kZXggPCBsZW5ndGggOyBpbmRleCsrICkge1xuXHRcdFx0XHRhbmltYXRpb24udHdlZW5zWyBpbmRleCBdLnJ1biggcGVyY2VudCApO1xuXHRcdFx0fVxuXG5cdFx0XHRkZWZlcnJlZC5ub3RpZnlXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiwgcGVyY2VudCwgcmVtYWluaW5nIF0gKTtcblxuXHRcdFx0aWYgKCBwZXJjZW50IDwgMSAmJiBsZW5ndGggKSB7XG5cdFx0XHRcdHJldHVybiByZW1haW5pbmc7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRkZWZlcnJlZC5yZXNvbHZlV2l0aCggZWxlbSwgWyBhbmltYXRpb24gXSApO1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRhbmltYXRpb24gPSBkZWZlcnJlZC5wcm9taXNlKCB7XG5cdFx0XHRlbGVtOiBlbGVtLFxuXHRcdFx0cHJvcHM6IGpRdWVyeS5leHRlbmQoIHt9LCBwcm9wZXJ0aWVzICksXG5cdFx0XHRvcHRzOiBqUXVlcnkuZXh0ZW5kKCB0cnVlLCB7XG5cdFx0XHRcdHNwZWNpYWxFYXNpbmc6IHt9LFxuXHRcdFx0XHRlYXNpbmc6IGpRdWVyeS5lYXNpbmcuX2RlZmF1bHRcblx0XHRcdH0sIG9wdGlvbnMgKSxcblx0XHRcdG9yaWdpbmFsUHJvcGVydGllczogcHJvcGVydGllcyxcblx0XHRcdG9yaWdpbmFsT3B0aW9uczogb3B0aW9ucyxcblx0XHRcdHN0YXJ0VGltZTogZnhOb3cgfHwgY3JlYXRlRnhOb3coKSxcblx0XHRcdGR1cmF0aW9uOiBvcHRpb25zLmR1cmF0aW9uLFxuXHRcdFx0dHdlZW5zOiBbXSxcblx0XHRcdGNyZWF0ZVR3ZWVuOiBmdW5jdGlvbiggcHJvcCwgZW5kICkge1xuXHRcdFx0XHR2YXIgdHdlZW4gPSBqUXVlcnkuVHdlZW4oIGVsZW0sIGFuaW1hdGlvbi5vcHRzLCBwcm9wLCBlbmQsXG5cdFx0XHRcdFx0XHRhbmltYXRpb24ub3B0cy5zcGVjaWFsRWFzaW5nWyBwcm9wIF0gfHwgYW5pbWF0aW9uLm9wdHMuZWFzaW5nICk7XG5cdFx0XHRcdGFuaW1hdGlvbi50d2VlbnMucHVzaCggdHdlZW4gKTtcblx0XHRcdFx0cmV0dXJuIHR3ZWVuO1xuXHRcdFx0fSxcblx0XHRcdHN0b3A6IGZ1bmN0aW9uKCBnb3RvRW5kICkge1xuXHRcdFx0XHR2YXIgaW5kZXggPSAwLFxuXG5cdFx0XHRcdFx0Ly8gSWYgd2UgYXJlIGdvaW5nIHRvIHRoZSBlbmQsIHdlIHdhbnQgdG8gcnVuIGFsbCB0aGUgdHdlZW5zXG5cdFx0XHRcdFx0Ly8gb3RoZXJ3aXNlIHdlIHNraXAgdGhpcyBwYXJ0XG5cdFx0XHRcdFx0bGVuZ3RoID0gZ290b0VuZCA/IGFuaW1hdGlvbi50d2VlbnMubGVuZ3RoIDogMDtcblx0XHRcdFx0aWYgKCBzdG9wcGVkICkge1xuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHN0b3BwZWQgPSB0cnVlO1xuXHRcdFx0XHRmb3IgKCA7IGluZGV4IDwgbGVuZ3RoIDsgaW5kZXgrKyApIHtcblx0XHRcdFx0XHRhbmltYXRpb24udHdlZW5zWyBpbmRleCBdLnJ1biggMSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gUmVzb2x2ZSB3aGVuIHdlIHBsYXllZCB0aGUgbGFzdCBmcmFtZTsgb3RoZXJ3aXNlLCByZWplY3Rcblx0XHRcdFx0aWYgKCBnb3RvRW5kICkge1xuXHRcdFx0XHRcdGRlZmVycmVkLm5vdGlmeVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uLCAxLCAwIF0gKTtcblx0XHRcdFx0XHRkZWZlcnJlZC5yZXNvbHZlV2l0aCggZWxlbSwgWyBhbmltYXRpb24sIGdvdG9FbmQgXSApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGRlZmVycmVkLnJlamVjdFdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uLCBnb3RvRW5kIF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH1cblx0XHR9ICksXG5cdFx0cHJvcHMgPSBhbmltYXRpb24ucHJvcHM7XG5cblx0cHJvcEZpbHRlciggcHJvcHMsIGFuaW1hdGlvbi5vcHRzLnNwZWNpYWxFYXNpbmcgKTtcblxuXHRmb3IgKCA7IGluZGV4IDwgbGVuZ3RoIDsgaW5kZXgrKyApIHtcblx0XHRyZXN1bHQgPSBBbmltYXRpb24ucHJlZmlsdGVyc1sgaW5kZXggXS5jYWxsKCBhbmltYXRpb24sIGVsZW0sIHByb3BzLCBhbmltYXRpb24ub3B0cyApO1xuXHRcdGlmICggcmVzdWx0ICkge1xuXHRcdFx0aWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggcmVzdWx0LnN0b3AgKSApIHtcblx0XHRcdFx0alF1ZXJ5Ll9xdWV1ZUhvb2tzKCBhbmltYXRpb24uZWxlbSwgYW5pbWF0aW9uLm9wdHMucXVldWUgKS5zdG9wID1cblx0XHRcdFx0XHRqUXVlcnkucHJveHkoIHJlc3VsdC5zdG9wLCByZXN1bHQgKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fVxuXHR9XG5cblx0alF1ZXJ5Lm1hcCggcHJvcHMsIGNyZWF0ZVR3ZWVuLCBhbmltYXRpb24gKTtcblxuXHRpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBhbmltYXRpb24ub3B0cy5zdGFydCApICkge1xuXHRcdGFuaW1hdGlvbi5vcHRzLnN0YXJ0LmNhbGwoIGVsZW0sIGFuaW1hdGlvbiApO1xuXHR9XG5cblx0alF1ZXJ5LmZ4LnRpbWVyKFxuXHRcdGpRdWVyeS5leHRlbmQoIHRpY2ssIHtcblx0XHRcdGVsZW06IGVsZW0sXG5cdFx0XHRhbmltOiBhbmltYXRpb24sXG5cdFx0XHRxdWV1ZTogYW5pbWF0aW9uLm9wdHMucXVldWVcblx0XHR9IClcblx0KTtcblxuXHQvLyBhdHRhY2ggY2FsbGJhY2tzIGZyb20gb3B0aW9uc1xuXHRyZXR1cm4gYW5pbWF0aW9uLnByb2dyZXNzKCBhbmltYXRpb24ub3B0cy5wcm9ncmVzcyApXG5cdFx0LmRvbmUoIGFuaW1hdGlvbi5vcHRzLmRvbmUsIGFuaW1hdGlvbi5vcHRzLmNvbXBsZXRlIClcblx0XHQuZmFpbCggYW5pbWF0aW9uLm9wdHMuZmFpbCApXG5cdFx0LmFsd2F5cyggYW5pbWF0aW9uLm9wdHMuYWx3YXlzICk7XG59XG5cbmpRdWVyeS5BbmltYXRpb24gPSBqUXVlcnkuZXh0ZW5kKCBBbmltYXRpb24sIHtcblx0dHdlZW5lcnM6IHtcblx0XHRcIipcIjogWyBmdW5jdGlvbiggcHJvcCwgdmFsdWUgKSB7XG5cdFx0XHR2YXIgdHdlZW4gPSB0aGlzLmNyZWF0ZVR3ZWVuKCBwcm9wLCB2YWx1ZSApO1xuXHRcdFx0YWRqdXN0Q1NTKCB0d2Vlbi5lbGVtLCBwcm9wLCByY3NzTnVtLmV4ZWMoIHZhbHVlICksIHR3ZWVuICk7XG5cdFx0XHRyZXR1cm4gdHdlZW47XG5cdFx0fSBdXG5cdH0sXG5cblx0dHdlZW5lcjogZnVuY3Rpb24oIHByb3BzLCBjYWxsYmFjayApIHtcblx0XHRpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBwcm9wcyApICkge1xuXHRcdFx0Y2FsbGJhY2sgPSBwcm9wcztcblx0XHRcdHByb3BzID0gWyBcIipcIiBdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRwcm9wcyA9IHByb3BzLm1hdGNoKCBybm90d2hpdGUgKTtcblx0XHR9XG5cblx0XHR2YXIgcHJvcCxcblx0XHRcdGluZGV4ID0gMCxcblx0XHRcdGxlbmd0aCA9IHByb3BzLmxlbmd0aDtcblxuXHRcdGZvciAoIDsgaW5kZXggPCBsZW5ndGggOyBpbmRleCsrICkge1xuXHRcdFx0cHJvcCA9IHByb3BzWyBpbmRleCBdO1xuXHRcdFx0QW5pbWF0aW9uLnR3ZWVuZXJzWyBwcm9wIF0gPSBBbmltYXRpb24udHdlZW5lcnNbIHByb3AgXSB8fCBbXTtcblx0XHRcdEFuaW1hdGlvbi50d2VlbmVyc1sgcHJvcCBdLnVuc2hpZnQoIGNhbGxiYWNrICk7XG5cdFx0fVxuXHR9LFxuXG5cdHByZWZpbHRlcnM6IFsgZGVmYXVsdFByZWZpbHRlciBdLFxuXG5cdHByZWZpbHRlcjogZnVuY3Rpb24oIGNhbGxiYWNrLCBwcmVwZW5kICkge1xuXHRcdGlmICggcHJlcGVuZCApIHtcblx0XHRcdEFuaW1hdGlvbi5wcmVmaWx0ZXJzLnVuc2hpZnQoIGNhbGxiYWNrICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdEFuaW1hdGlvbi5wcmVmaWx0ZXJzLnB1c2goIGNhbGxiYWNrICk7XG5cdFx0fVxuXHR9XG59ICk7XG5cbmpRdWVyeS5zcGVlZCA9IGZ1bmN0aW9uKCBzcGVlZCwgZWFzaW5nLCBmbiApIHtcblx0dmFyIG9wdCA9IHNwZWVkICYmIHR5cGVvZiBzcGVlZCA9PT0gXCJvYmplY3RcIiA/IGpRdWVyeS5leHRlbmQoIHt9LCBzcGVlZCApIDoge1xuXHRcdGNvbXBsZXRlOiBmbiB8fCAhZm4gJiYgZWFzaW5nIHx8XG5cdFx0XHRqUXVlcnkuaXNGdW5jdGlvbiggc3BlZWQgKSAmJiBzcGVlZCxcblx0XHRkdXJhdGlvbjogc3BlZWQsXG5cdFx0ZWFzaW5nOiBmbiAmJiBlYXNpbmcgfHwgZWFzaW5nICYmICFqUXVlcnkuaXNGdW5jdGlvbiggZWFzaW5nICkgJiYgZWFzaW5nXG5cdH07XG5cblx0b3B0LmR1cmF0aW9uID0galF1ZXJ5LmZ4Lm9mZiA/IDAgOiB0eXBlb2Ygb3B0LmR1cmF0aW9uID09PSBcIm51bWJlclwiID9cblx0XHRvcHQuZHVyYXRpb24gOiBvcHQuZHVyYXRpb24gaW4galF1ZXJ5LmZ4LnNwZWVkcyA/XG5cdFx0XHRqUXVlcnkuZnguc3BlZWRzWyBvcHQuZHVyYXRpb24gXSA6IGpRdWVyeS5meC5zcGVlZHMuX2RlZmF1bHQ7XG5cblx0Ly8gTm9ybWFsaXplIG9wdC5xdWV1ZSAtIHRydWUvdW5kZWZpbmVkL251bGwgLT4gXCJmeFwiXG5cdGlmICggb3B0LnF1ZXVlID09IG51bGwgfHwgb3B0LnF1ZXVlID09PSB0cnVlICkge1xuXHRcdG9wdC5xdWV1ZSA9IFwiZnhcIjtcblx0fVxuXG5cdC8vIFF1ZXVlaW5nXG5cdG9wdC5vbGQgPSBvcHQuY29tcGxldGU7XG5cblx0b3B0LmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7XG5cdFx0aWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggb3B0Lm9sZCApICkge1xuXHRcdFx0b3B0Lm9sZC5jYWxsKCB0aGlzICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBvcHQucXVldWUgKSB7XG5cdFx0XHRqUXVlcnkuZGVxdWV1ZSggdGhpcywgb3B0LnF1ZXVlICk7XG5cdFx0fVxuXHR9O1xuXG5cdHJldHVybiBvcHQ7XG59O1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGZhZGVUbzogZnVuY3Rpb24oIHNwZWVkLCB0bywgZWFzaW5nLCBjYWxsYmFjayApIHtcblxuXHRcdC8vIFNob3cgYW55IGhpZGRlbiBlbGVtZW50cyBhZnRlciBzZXR0aW5nIG9wYWNpdHkgdG8gMFxuXHRcdHJldHVybiB0aGlzLmZpbHRlciggaXNIaWRkZW4gKS5jc3MoIFwib3BhY2l0eVwiLCAwICkuc2hvdygpXG5cblx0XHRcdC8vIEFuaW1hdGUgdG8gdGhlIHZhbHVlIHNwZWNpZmllZFxuXHRcdFx0LmVuZCgpLmFuaW1hdGUoIHsgb3BhY2l0eTogdG8gfSwgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKTtcblx0fSxcblx0YW5pbWF0ZTogZnVuY3Rpb24oIHByb3AsIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICkge1xuXHRcdHZhciBlbXB0eSA9IGpRdWVyeS5pc0VtcHR5T2JqZWN0KCBwcm9wICksXG5cdFx0XHRvcHRhbGwgPSBqUXVlcnkuc3BlZWQoIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICksXG5cdFx0XHRkb0FuaW1hdGlvbiA9IGZ1bmN0aW9uKCkge1xuXG5cdFx0XHRcdC8vIE9wZXJhdGUgb24gYSBjb3B5IG9mIHByb3Agc28gcGVyLXByb3BlcnR5IGVhc2luZyB3b24ndCBiZSBsb3N0XG5cdFx0XHRcdHZhciBhbmltID0gQW5pbWF0aW9uKCB0aGlzLCBqUXVlcnkuZXh0ZW5kKCB7fSwgcHJvcCApLCBvcHRhbGwgKTtcblxuXHRcdFx0XHQvLyBFbXB0eSBhbmltYXRpb25zLCBvciBmaW5pc2hpbmcgcmVzb2x2ZXMgaW1tZWRpYXRlbHlcblx0XHRcdFx0aWYgKCBlbXB0eSB8fCBkYXRhUHJpdi5nZXQoIHRoaXMsIFwiZmluaXNoXCIgKSApIHtcblx0XHRcdFx0XHRhbmltLnN0b3AoIHRydWUgKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHRcdGRvQW5pbWF0aW9uLmZpbmlzaCA9IGRvQW5pbWF0aW9uO1xuXG5cdFx0cmV0dXJuIGVtcHR5IHx8IG9wdGFsbC5xdWV1ZSA9PT0gZmFsc2UgP1xuXHRcdFx0dGhpcy5lYWNoKCBkb0FuaW1hdGlvbiApIDpcblx0XHRcdHRoaXMucXVldWUoIG9wdGFsbC5xdWV1ZSwgZG9BbmltYXRpb24gKTtcblx0fSxcblx0c3RvcDogZnVuY3Rpb24oIHR5cGUsIGNsZWFyUXVldWUsIGdvdG9FbmQgKSB7XG5cdFx0dmFyIHN0b3BRdWV1ZSA9IGZ1bmN0aW9uKCBob29rcyApIHtcblx0XHRcdHZhciBzdG9wID0gaG9va3Muc3RvcDtcblx0XHRcdGRlbGV0ZSBob29rcy5zdG9wO1xuXHRcdFx0c3RvcCggZ290b0VuZCApO1xuXHRcdH07XG5cblx0XHRpZiAoIHR5cGVvZiB0eXBlICE9PSBcInN0cmluZ1wiICkge1xuXHRcdFx0Z290b0VuZCA9IGNsZWFyUXVldWU7XG5cdFx0XHRjbGVhclF1ZXVlID0gdHlwZTtcblx0XHRcdHR5cGUgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGlmICggY2xlYXJRdWV1ZSAmJiB0eXBlICE9PSBmYWxzZSApIHtcblx0XHRcdHRoaXMucXVldWUoIHR5cGUgfHwgXCJmeFwiLCBbXSApO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIGRlcXVldWUgPSB0cnVlLFxuXHRcdFx0XHRpbmRleCA9IHR5cGUgIT0gbnVsbCAmJiB0eXBlICsgXCJxdWV1ZUhvb2tzXCIsXG5cdFx0XHRcdHRpbWVycyA9IGpRdWVyeS50aW1lcnMsXG5cdFx0XHRcdGRhdGEgPSBkYXRhUHJpdi5nZXQoIHRoaXMgKTtcblxuXHRcdFx0aWYgKCBpbmRleCApIHtcblx0XHRcdFx0aWYgKCBkYXRhWyBpbmRleCBdICYmIGRhdGFbIGluZGV4IF0uc3RvcCApIHtcblx0XHRcdFx0XHRzdG9wUXVldWUoIGRhdGFbIGluZGV4IF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Zm9yICggaW5kZXggaW4gZGF0YSApIHtcblx0XHRcdFx0XHRpZiAoIGRhdGFbIGluZGV4IF0gJiYgZGF0YVsgaW5kZXggXS5zdG9wICYmIHJydW4udGVzdCggaW5kZXggKSApIHtcblx0XHRcdFx0XHRcdHN0b3BRdWV1ZSggZGF0YVsgaW5kZXggXSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRmb3IgKCBpbmRleCA9IHRpbWVycy5sZW5ndGg7IGluZGV4LS07ICkge1xuXHRcdFx0XHRpZiAoIHRpbWVyc1sgaW5kZXggXS5lbGVtID09PSB0aGlzICYmXG5cdFx0XHRcdFx0KCB0eXBlID09IG51bGwgfHwgdGltZXJzWyBpbmRleCBdLnF1ZXVlID09PSB0eXBlICkgKSB7XG5cblx0XHRcdFx0XHR0aW1lcnNbIGluZGV4IF0uYW5pbS5zdG9wKCBnb3RvRW5kICk7XG5cdFx0XHRcdFx0ZGVxdWV1ZSA9IGZhbHNlO1xuXHRcdFx0XHRcdHRpbWVycy5zcGxpY2UoIGluZGV4LCAxICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gU3RhcnQgdGhlIG5leHQgaW4gdGhlIHF1ZXVlIGlmIHRoZSBsYXN0IHN0ZXAgd2Fzbid0IGZvcmNlZC5cblx0XHRcdC8vIFRpbWVycyBjdXJyZW50bHkgd2lsbCBjYWxsIHRoZWlyIGNvbXBsZXRlIGNhbGxiYWNrcywgd2hpY2hcblx0XHRcdC8vIHdpbGwgZGVxdWV1ZSBidXQgb25seSBpZiB0aGV5IHdlcmUgZ290b0VuZC5cblx0XHRcdGlmICggZGVxdWV1ZSB8fCAhZ290b0VuZCApIHtcblx0XHRcdFx0alF1ZXJ5LmRlcXVldWUoIHRoaXMsIHR5cGUgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cdGZpbmlzaDogZnVuY3Rpb24oIHR5cGUgKSB7XG5cdFx0aWYgKCB0eXBlICE9PSBmYWxzZSApIHtcblx0XHRcdHR5cGUgPSB0eXBlIHx8IFwiZnhcIjtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgaW5kZXgsXG5cdFx0XHRcdGRhdGEgPSBkYXRhUHJpdi5nZXQoIHRoaXMgKSxcblx0XHRcdFx0cXVldWUgPSBkYXRhWyB0eXBlICsgXCJxdWV1ZVwiIF0sXG5cdFx0XHRcdGhvb2tzID0gZGF0YVsgdHlwZSArIFwicXVldWVIb29rc1wiIF0sXG5cdFx0XHRcdHRpbWVycyA9IGpRdWVyeS50aW1lcnMsXG5cdFx0XHRcdGxlbmd0aCA9IHF1ZXVlID8gcXVldWUubGVuZ3RoIDogMDtcblxuXHRcdFx0Ly8gRW5hYmxlIGZpbmlzaGluZyBmbGFnIG9uIHByaXZhdGUgZGF0YVxuXHRcdFx0ZGF0YS5maW5pc2ggPSB0cnVlO1xuXG5cdFx0XHQvLyBFbXB0eSB0aGUgcXVldWUgZmlyc3Rcblx0XHRcdGpRdWVyeS5xdWV1ZSggdGhpcywgdHlwZSwgW10gKTtcblxuXHRcdFx0aWYgKCBob29rcyAmJiBob29rcy5zdG9wICkge1xuXHRcdFx0XHRob29rcy5zdG9wLmNhbGwoIHRoaXMsIHRydWUgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTG9vayBmb3IgYW55IGFjdGl2ZSBhbmltYXRpb25zLCBhbmQgZmluaXNoIHRoZW1cblx0XHRcdGZvciAoIGluZGV4ID0gdGltZXJzLmxlbmd0aDsgaW5kZXgtLTsgKSB7XG5cdFx0XHRcdGlmICggdGltZXJzWyBpbmRleCBdLmVsZW0gPT09IHRoaXMgJiYgdGltZXJzWyBpbmRleCBdLnF1ZXVlID09PSB0eXBlICkge1xuXHRcdFx0XHRcdHRpbWVyc1sgaW5kZXggXS5hbmltLnN0b3AoIHRydWUgKTtcblx0XHRcdFx0XHR0aW1lcnMuc3BsaWNlKCBpbmRleCwgMSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIExvb2sgZm9yIGFueSBhbmltYXRpb25zIGluIHRoZSBvbGQgcXVldWUgYW5kIGZpbmlzaCB0aGVtXG5cdFx0XHRmb3IgKCBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xuXHRcdFx0XHRpZiAoIHF1ZXVlWyBpbmRleCBdICYmIHF1ZXVlWyBpbmRleCBdLmZpbmlzaCApIHtcblx0XHRcdFx0XHRxdWV1ZVsgaW5kZXggXS5maW5pc2guY2FsbCggdGhpcyApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIFR1cm4gb2ZmIGZpbmlzaGluZyBmbGFnXG5cdFx0XHRkZWxldGUgZGF0YS5maW5pc2g7XG5cdFx0fSApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5lYWNoKCBbIFwidG9nZ2xlXCIsIFwic2hvd1wiLCBcImhpZGVcIiBdLCBmdW5jdGlvbiggaSwgbmFtZSApIHtcblx0dmFyIGNzc0ZuID0galF1ZXJ5LmZuWyBuYW1lIF07XG5cdGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICkge1xuXHRcdHJldHVybiBzcGVlZCA9PSBudWxsIHx8IHR5cGVvZiBzcGVlZCA9PT0gXCJib29sZWFuXCIgP1xuXHRcdFx0Y3NzRm4uYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApIDpcblx0XHRcdHRoaXMuYW5pbWF0ZSggZ2VuRngoIG5hbWUsIHRydWUgKSwgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKTtcblx0fTtcbn0gKTtcblxuLy8gR2VuZXJhdGUgc2hvcnRjdXRzIGZvciBjdXN0b20gYW5pbWF0aW9uc1xualF1ZXJ5LmVhY2goIHtcblx0c2xpZGVEb3duOiBnZW5GeCggXCJzaG93XCIgKSxcblx0c2xpZGVVcDogZ2VuRngoIFwiaGlkZVwiICksXG5cdHNsaWRlVG9nZ2xlOiBnZW5GeCggXCJ0b2dnbGVcIiApLFxuXHRmYWRlSW46IHsgb3BhY2l0eTogXCJzaG93XCIgfSxcblx0ZmFkZU91dDogeyBvcGFjaXR5OiBcImhpZGVcIiB9LFxuXHRmYWRlVG9nZ2xlOiB7IG9wYWNpdHk6IFwidG9nZ2xlXCIgfVxufSwgZnVuY3Rpb24oIG5hbWUsIHByb3BzICkge1xuXHRqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApIHtcblx0XHRyZXR1cm4gdGhpcy5hbmltYXRlKCBwcm9wcywgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKTtcblx0fTtcbn0gKTtcblxualF1ZXJ5LnRpbWVycyA9IFtdO1xualF1ZXJ5LmZ4LnRpY2sgPSBmdW5jdGlvbigpIHtcblx0dmFyIHRpbWVyLFxuXHRcdGkgPSAwLFxuXHRcdHRpbWVycyA9IGpRdWVyeS50aW1lcnM7XG5cblx0ZnhOb3cgPSBqUXVlcnkubm93KCk7XG5cblx0Zm9yICggOyBpIDwgdGltZXJzLmxlbmd0aDsgaSsrICkge1xuXHRcdHRpbWVyID0gdGltZXJzWyBpIF07XG5cblx0XHQvLyBDaGVja3MgdGhlIHRpbWVyIGhhcyBub3QgYWxyZWFkeSBiZWVuIHJlbW92ZWRcblx0XHRpZiAoICF0aW1lcigpICYmIHRpbWVyc1sgaSBdID09PSB0aW1lciApIHtcblx0XHRcdHRpbWVycy5zcGxpY2UoIGktLSwgMSApO1xuXHRcdH1cblx0fVxuXG5cdGlmICggIXRpbWVycy5sZW5ndGggKSB7XG5cdFx0alF1ZXJ5LmZ4LnN0b3AoKTtcblx0fVxuXHRmeE5vdyA9IHVuZGVmaW5lZDtcbn07XG5cbmpRdWVyeS5meC50aW1lciA9IGZ1bmN0aW9uKCB0aW1lciApIHtcblx0alF1ZXJ5LnRpbWVycy5wdXNoKCB0aW1lciApO1xuXHRpZiAoIHRpbWVyKCkgKSB7XG5cdFx0alF1ZXJ5LmZ4LnN0YXJ0KCk7XG5cdH0gZWxzZSB7XG5cdFx0alF1ZXJ5LnRpbWVycy5wb3AoKTtcblx0fVxufTtcblxualF1ZXJ5LmZ4LmludGVydmFsID0gMTM7XG5qUXVlcnkuZnguc3RhcnQgPSBmdW5jdGlvbigpIHtcblx0aWYgKCAhdGltZXJJZCApIHtcblx0XHR0aW1lcklkID0gd2luZG93LnNldEludGVydmFsKCBqUXVlcnkuZngudGljaywgalF1ZXJ5LmZ4LmludGVydmFsICk7XG5cdH1cbn07XG5cbmpRdWVyeS5meC5zdG9wID0gZnVuY3Rpb24oKSB7XG5cdHdpbmRvdy5jbGVhckludGVydmFsKCB0aW1lcklkICk7XG5cblx0dGltZXJJZCA9IG51bGw7XG59O1xuXG5qUXVlcnkuZnguc3BlZWRzID0ge1xuXHRzbG93OiA2MDAsXG5cdGZhc3Q6IDIwMCxcblxuXHQvLyBEZWZhdWx0IHNwZWVkXG5cdF9kZWZhdWx0OiA0MDBcbn07XG5cblxuLy8gQmFzZWQgb2ZmIG9mIHRoZSBwbHVnaW4gYnkgQ2xpbnQgSGVsZmVycywgd2l0aCBwZXJtaXNzaW9uLlxuLy8gaHR0cDovL3dlYi5hcmNoaXZlLm9yZy93ZWIvMjAxMDAzMjQwMTQ3NDcvaHR0cDovL2JsaW5kc2lnbmFscy5jb20vaW5kZXgucGhwLzIwMDkvMDcvanF1ZXJ5LWRlbGF5L1xualF1ZXJ5LmZuLmRlbGF5ID0gZnVuY3Rpb24oIHRpbWUsIHR5cGUgKSB7XG5cdHRpbWUgPSBqUXVlcnkuZnggPyBqUXVlcnkuZnguc3BlZWRzWyB0aW1lIF0gfHwgdGltZSA6IHRpbWU7XG5cdHR5cGUgPSB0eXBlIHx8IFwiZnhcIjtcblxuXHRyZXR1cm4gdGhpcy5xdWV1ZSggdHlwZSwgZnVuY3Rpb24oIG5leHQsIGhvb2tzICkge1xuXHRcdHZhciB0aW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoIG5leHQsIHRpbWUgKTtcblx0XHRob29rcy5zdG9wID0gZnVuY3Rpb24oKSB7XG5cdFx0XHR3aW5kb3cuY2xlYXJUaW1lb3V0KCB0aW1lb3V0ICk7XG5cdFx0fTtcblx0fSApO1xufTtcblxuXG4oIGZ1bmN0aW9uKCkge1xuXHR2YXIgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImlucHV0XCIgKSxcblx0XHRzZWxlY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcInNlbGVjdFwiICksXG5cdFx0b3B0ID0gc2VsZWN0LmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcIm9wdGlvblwiICkgKTtcblxuXHRpbnB1dC50eXBlID0gXCJjaGVja2JveFwiO1xuXG5cdC8vIFN1cHBvcnQ6IGlPUzw9NS4xLCBBbmRyb2lkPD00LjIrXG5cdC8vIERlZmF1bHQgdmFsdWUgZm9yIGEgY2hlY2tib3ggc2hvdWxkIGJlIFwib25cIlxuXHRzdXBwb3J0LmNoZWNrT24gPSBpbnB1dC52YWx1ZSAhPT0gXCJcIjtcblxuXHQvLyBTdXBwb3J0OiBJRTw9MTErXG5cdC8vIE11c3QgYWNjZXNzIHNlbGVjdGVkSW5kZXggdG8gbWFrZSBkZWZhdWx0IG9wdGlvbnMgc2VsZWN0XG5cdHN1cHBvcnQub3B0U2VsZWN0ZWQgPSBvcHQuc2VsZWN0ZWQ7XG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZDw9Mi4zXG5cdC8vIE9wdGlvbnMgaW5zaWRlIGRpc2FibGVkIHNlbGVjdHMgYXJlIGluY29ycmVjdGx5IG1hcmtlZCBhcyBkaXNhYmxlZFxuXHRzZWxlY3QuZGlzYWJsZWQgPSB0cnVlO1xuXHRzdXBwb3J0Lm9wdERpc2FibGVkID0gIW9wdC5kaXNhYmxlZDtcblxuXHQvLyBTdXBwb3J0OiBJRTw9MTErXG5cdC8vIEFuIGlucHV0IGxvc2VzIGl0cyB2YWx1ZSBhZnRlciBiZWNvbWluZyBhIHJhZGlvXG5cdGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJpbnB1dFwiICk7XG5cdGlucHV0LnZhbHVlID0gXCJ0XCI7XG5cdGlucHV0LnR5cGUgPSBcInJhZGlvXCI7XG5cdHN1cHBvcnQucmFkaW9WYWx1ZSA9IGlucHV0LnZhbHVlID09PSBcInRcIjtcbn0gKSgpO1xuXG5cbnZhciBib29sSG9vayxcblx0YXR0ckhhbmRsZSA9IGpRdWVyeS5leHByLmF0dHJIYW5kbGU7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0YXR0cjogZnVuY3Rpb24oIG5hbWUsIHZhbHVlICkge1xuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGpRdWVyeS5hdHRyLCBuYW1lLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgKTtcblx0fSxcblxuXHRyZW1vdmVBdHRyOiBmdW5jdGlvbiggbmFtZSApIHtcblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGpRdWVyeS5yZW1vdmVBdHRyKCB0aGlzLCBuYW1lICk7XG5cdFx0fSApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5leHRlbmQoIHtcblx0YXR0cjogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIHZhbHVlICkge1xuXHRcdHZhciByZXQsIGhvb2tzLFxuXHRcdFx0blR5cGUgPSBlbGVtLm5vZGVUeXBlO1xuXG5cdFx0Ly8gRG9uJ3QgZ2V0L3NldCBhdHRyaWJ1dGVzIG9uIHRleHQsIGNvbW1lbnQgYW5kIGF0dHJpYnV0ZSBub2Rlc1xuXHRcdGlmICggblR5cGUgPT09IDMgfHwgblR5cGUgPT09IDggfHwgblR5cGUgPT09IDIgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gRmFsbGJhY2sgdG8gcHJvcCB3aGVuIGF0dHJpYnV0ZXMgYXJlIG5vdCBzdXBwb3J0ZWRcblx0XHRpZiAoIHR5cGVvZiBlbGVtLmdldEF0dHJpYnV0ZSA9PT0gXCJ1bmRlZmluZWRcIiApIHtcblx0XHRcdHJldHVybiBqUXVlcnkucHJvcCggZWxlbSwgbmFtZSwgdmFsdWUgKTtcblx0XHR9XG5cblx0XHQvLyBBbGwgYXR0cmlidXRlcyBhcmUgbG93ZXJjYXNlXG5cdFx0Ly8gR3JhYiBuZWNlc3NhcnkgaG9vayBpZiBvbmUgaXMgZGVmaW5lZFxuXHRcdGlmICggblR5cGUgIT09IDEgfHwgIWpRdWVyeS5pc1hNTERvYyggZWxlbSApICkge1xuXHRcdFx0bmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcblx0XHRcdGhvb2tzID0galF1ZXJ5LmF0dHJIb29rc1sgbmFtZSBdIHx8XG5cdFx0XHRcdCggalF1ZXJ5LmV4cHIubWF0Y2guYm9vbC50ZXN0KCBuYW1lICkgPyBib29sSG9vayA6IHVuZGVmaW5lZCApO1xuXHRcdH1cblxuXHRcdGlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdGlmICggdmFsdWUgPT09IG51bGwgKSB7XG5cdFx0XHRcdGpRdWVyeS5yZW1vdmVBdHRyKCBlbGVtLCBuYW1lICk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCBob29rcyAmJiBcInNldFwiIGluIGhvb2tzICYmXG5cdFx0XHRcdCggcmV0ID0gaG9va3Muc2V0KCBlbGVtLCB2YWx1ZSwgbmFtZSApICkgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0cmV0dXJuIHJldDtcblx0XHRcdH1cblxuXHRcdFx0ZWxlbS5zZXRBdHRyaWJ1dGUoIG5hbWUsIHZhbHVlICsgXCJcIiApO1xuXHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdH1cblxuXHRcdGlmICggaG9va3MgJiYgXCJnZXRcIiBpbiBob29rcyAmJiAoIHJldCA9IGhvb2tzLmdldCggZWxlbSwgbmFtZSApICkgIT09IG51bGwgKSB7XG5cdFx0XHRyZXR1cm4gcmV0O1xuXHRcdH1cblxuXHRcdHJldCA9IGpRdWVyeS5maW5kLmF0dHIoIGVsZW0sIG5hbWUgKTtcblxuXHRcdC8vIE5vbi1leGlzdGVudCBhdHRyaWJ1dGVzIHJldHVybiBudWxsLCB3ZSBub3JtYWxpemUgdG8gdW5kZWZpbmVkXG5cdFx0cmV0dXJuIHJldCA9PSBudWxsID8gdW5kZWZpbmVkIDogcmV0O1xuXHR9LFxuXG5cdGF0dHJIb29rczoge1xuXHRcdHR5cGU6IHtcblx0XHRcdHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkge1xuXHRcdFx0XHRpZiAoICFzdXBwb3J0LnJhZGlvVmFsdWUgJiYgdmFsdWUgPT09IFwicmFkaW9cIiAmJlxuXHRcdFx0XHRcdGpRdWVyeS5ub2RlTmFtZSggZWxlbSwgXCJpbnB1dFwiICkgKSB7XG5cdFx0XHRcdFx0dmFyIHZhbCA9IGVsZW0udmFsdWU7XG5cdFx0XHRcdFx0ZWxlbS5zZXRBdHRyaWJ1dGUoIFwidHlwZVwiLCB2YWx1ZSApO1xuXHRcdFx0XHRcdGlmICggdmFsICkge1xuXHRcdFx0XHRcdFx0ZWxlbS52YWx1ZSA9IHZhbDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXG5cdHJlbW92ZUF0dHI6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHtcblx0XHR2YXIgbmFtZSwgcHJvcE5hbWUsXG5cdFx0XHRpID0gMCxcblx0XHRcdGF0dHJOYW1lcyA9IHZhbHVlICYmIHZhbHVlLm1hdGNoKCBybm90d2hpdGUgKTtcblxuXHRcdGlmICggYXR0ck5hbWVzICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0XHR3aGlsZSAoICggbmFtZSA9IGF0dHJOYW1lc1sgaSsrIF0gKSApIHtcblx0XHRcdFx0cHJvcE5hbWUgPSBqUXVlcnkucHJvcEZpeFsgbmFtZSBdIHx8IG5hbWU7XG5cblx0XHRcdFx0Ly8gQm9vbGVhbiBhdHRyaWJ1dGVzIGdldCBzcGVjaWFsIHRyZWF0bWVudCAoIzEwODcwKVxuXHRcdFx0XHRpZiAoIGpRdWVyeS5leHByLm1hdGNoLmJvb2wudGVzdCggbmFtZSApICkge1xuXG5cdFx0XHRcdFx0Ly8gU2V0IGNvcnJlc3BvbmRpbmcgcHJvcGVydHkgdG8gZmFsc2Vcblx0XHRcdFx0XHRlbGVtWyBwcm9wTmFtZSBdID0gZmFsc2U7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRlbGVtLnJlbW92ZUF0dHJpYnV0ZSggbmFtZSApO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufSApO1xuXG4vLyBIb29rcyBmb3IgYm9vbGVhbiBhdHRyaWJ1dGVzXG5ib29sSG9vayA9IHtcblx0c2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUsIG5hbWUgKSB7XG5cdFx0aWYgKCB2YWx1ZSA9PT0gZmFsc2UgKSB7XG5cblx0XHRcdC8vIFJlbW92ZSBib29sZWFuIGF0dHJpYnV0ZXMgd2hlbiBzZXQgdG8gZmFsc2Vcblx0XHRcdGpRdWVyeS5yZW1vdmVBdHRyKCBlbGVtLCBuYW1lICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGVsZW0uc2V0QXR0cmlidXRlKCBuYW1lLCBuYW1lICk7XG5cdFx0fVxuXHRcdHJldHVybiBuYW1lO1xuXHR9XG59O1xualF1ZXJ5LmVhY2goIGpRdWVyeS5leHByLm1hdGNoLmJvb2wuc291cmNlLm1hdGNoKCAvXFx3Ky9nICksIGZ1bmN0aW9uKCBpLCBuYW1lICkge1xuXHR2YXIgZ2V0dGVyID0gYXR0ckhhbmRsZVsgbmFtZSBdIHx8IGpRdWVyeS5maW5kLmF0dHI7XG5cblx0YXR0ckhhbmRsZVsgbmFtZSBdID0gZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGlzWE1MICkge1xuXHRcdHZhciByZXQsIGhhbmRsZTtcblx0XHRpZiAoICFpc1hNTCApIHtcblxuXHRcdFx0Ly8gQXZvaWQgYW4gaW5maW5pdGUgbG9vcCBieSB0ZW1wb3JhcmlseSByZW1vdmluZyB0aGlzIGZ1bmN0aW9uIGZyb20gdGhlIGdldHRlclxuXHRcdFx0aGFuZGxlID0gYXR0ckhhbmRsZVsgbmFtZSBdO1xuXHRcdFx0YXR0ckhhbmRsZVsgbmFtZSBdID0gcmV0O1xuXHRcdFx0cmV0ID0gZ2V0dGVyKCBlbGVtLCBuYW1lLCBpc1hNTCApICE9IG51bGwgP1xuXHRcdFx0XHRuYW1lLnRvTG93ZXJDYXNlKCkgOlxuXHRcdFx0XHRudWxsO1xuXHRcdFx0YXR0ckhhbmRsZVsgbmFtZSBdID0gaGFuZGxlO1xuXHRcdH1cblx0XHRyZXR1cm4gcmV0O1xuXHR9O1xufSApO1xuXG5cblxuXG52YXIgcmZvY3VzYWJsZSA9IC9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbikkL2ksXG5cdHJjbGlja2FibGUgPSAvXig/OmF8YXJlYSkkL2k7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0cHJvcDogZnVuY3Rpb24oIG5hbWUsIHZhbHVlICkge1xuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGpRdWVyeS5wcm9wLCBuYW1lLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgKTtcblx0fSxcblxuXHRyZW1vdmVQcm9wOiBmdW5jdGlvbiggbmFtZSApIHtcblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGRlbGV0ZSB0aGlzWyBqUXVlcnkucHJvcEZpeFsgbmFtZSBdIHx8IG5hbWUgXTtcblx0XHR9ICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmV4dGVuZCgge1xuXHRwcm9wOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUgKSB7XG5cdFx0dmFyIHJldCwgaG9va3MsXG5cdFx0XHRuVHlwZSA9IGVsZW0ubm9kZVR5cGU7XG5cblx0XHQvLyBEb24ndCBnZXQvc2V0IHByb3BlcnRpZXMgb24gdGV4dCwgY29tbWVudCBhbmQgYXR0cmlidXRlIG5vZGVzXG5cdFx0aWYgKCBuVHlwZSA9PT0gMyB8fCBuVHlwZSA9PT0gOCB8fCBuVHlwZSA9PT0gMiApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoIG5UeXBlICE9PSAxIHx8ICFqUXVlcnkuaXNYTUxEb2MoIGVsZW0gKSApIHtcblxuXHRcdFx0Ly8gRml4IG5hbWUgYW5kIGF0dGFjaCBob29rc1xuXHRcdFx0bmFtZSA9IGpRdWVyeS5wcm9wRml4WyBuYW1lIF0gfHwgbmFtZTtcblx0XHRcdGhvb2tzID0galF1ZXJ5LnByb3BIb29rc1sgbmFtZSBdO1xuXHRcdH1cblxuXHRcdGlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdGlmICggaG9va3MgJiYgXCJzZXRcIiBpbiBob29rcyAmJlxuXHRcdFx0XHQoIHJldCA9IGhvb2tzLnNldCggZWxlbSwgdmFsdWUsIG5hbWUgKSApICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdHJldHVybiByZXQ7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiAoIGVsZW1bIG5hbWUgXSA9IHZhbHVlICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBob29rcyAmJiBcImdldFwiIGluIGhvb2tzICYmICggcmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBuYW1lICkgKSAhPT0gbnVsbCApIHtcblx0XHRcdHJldHVybiByZXQ7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGVsZW1bIG5hbWUgXTtcblx0fSxcblxuXHRwcm9wSG9va3M6IHtcblx0XHR0YWJJbmRleDoge1xuXHRcdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdFx0XHQvLyBlbGVtLnRhYkluZGV4IGRvZXNuJ3QgYWx3YXlzIHJldHVybiB0aGVcblx0XHRcdFx0Ly8gY29ycmVjdCB2YWx1ZSB3aGVuIGl0IGhhc24ndCBiZWVuIGV4cGxpY2l0bHkgc2V0XG5cdFx0XHRcdC8vIGh0dHA6Ly9mbHVpZHByb2plY3Qub3JnL2Jsb2cvMjAwOC8wMS8wOS9nZXR0aW5nLXNldHRpbmctYW5kLXJlbW92aW5nLXRhYmluZGV4LXZhbHVlcy13aXRoLWphdmFzY3JpcHQvXG5cdFx0XHRcdC8vIFVzZSBwcm9wZXIgYXR0cmlidXRlIHJldHJpZXZhbCgjMTIwNzIpXG5cdFx0XHRcdHZhciB0YWJpbmRleCA9IGpRdWVyeS5maW5kLmF0dHIoIGVsZW0sIFwidGFiaW5kZXhcIiApO1xuXG5cdFx0XHRcdHJldHVybiB0YWJpbmRleCA/XG5cdFx0XHRcdFx0cGFyc2VJbnQoIHRhYmluZGV4LCAxMCApIDpcblx0XHRcdFx0XHRyZm9jdXNhYmxlLnRlc3QoIGVsZW0ubm9kZU5hbWUgKSB8fFxuXHRcdFx0XHRcdFx0cmNsaWNrYWJsZS50ZXN0KCBlbGVtLm5vZGVOYW1lICkgJiYgZWxlbS5ocmVmID9cblx0XHRcdFx0XHRcdFx0MCA6XG5cdFx0XHRcdFx0XHRcdC0xO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblxuXHRwcm9wRml4OiB7XG5cdFx0XCJmb3JcIjogXCJodG1sRm9yXCIsXG5cdFx0XCJjbGFzc1wiOiBcImNsYXNzTmFtZVwiXG5cdH1cbn0gKTtcblxuLy8gU3VwcG9ydDogSUUgPD0xMSBvbmx5XG4vLyBBY2Nlc3NpbmcgdGhlIHNlbGVjdGVkSW5kZXggcHJvcGVydHlcbi8vIGZvcmNlcyB0aGUgYnJvd3NlciB0byByZXNwZWN0IHNldHRpbmcgc2VsZWN0ZWRcbi8vIG9uIHRoZSBvcHRpb25cbi8vIFRoZSBnZXR0ZXIgZW5zdXJlcyBhIGRlZmF1bHQgb3B0aW9uIGlzIHNlbGVjdGVkXG4vLyB3aGVuIGluIGFuIG9wdGdyb3VwXG5pZiAoICFzdXBwb3J0Lm9wdFNlbGVjdGVkICkge1xuXHRqUXVlcnkucHJvcEhvb2tzLnNlbGVjdGVkID0ge1xuXHRcdGdldDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHR2YXIgcGFyZW50ID0gZWxlbS5wYXJlbnROb2RlO1xuXHRcdFx0aWYgKCBwYXJlbnQgJiYgcGFyZW50LnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdHBhcmVudC5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXg7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHR2YXIgcGFyZW50ID0gZWxlbS5wYXJlbnROb2RlO1xuXHRcdFx0aWYgKCBwYXJlbnQgKSB7XG5cdFx0XHRcdHBhcmVudC5zZWxlY3RlZEluZGV4O1xuXG5cdFx0XHRcdGlmICggcGFyZW50LnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdFx0cGFyZW50LnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fTtcbn1cblxualF1ZXJ5LmVhY2goIFtcblx0XCJ0YWJJbmRleFwiLFxuXHRcInJlYWRPbmx5XCIsXG5cdFwibWF4TGVuZ3RoXCIsXG5cdFwiY2VsbFNwYWNpbmdcIixcblx0XCJjZWxsUGFkZGluZ1wiLFxuXHRcInJvd1NwYW5cIixcblx0XCJjb2xTcGFuXCIsXG5cdFwidXNlTWFwXCIsXG5cdFwiZnJhbWVCb3JkZXJcIixcblx0XCJjb250ZW50RWRpdGFibGVcIlxuXSwgZnVuY3Rpb24oKSB7XG5cdGpRdWVyeS5wcm9wRml4WyB0aGlzLnRvTG93ZXJDYXNlKCkgXSA9IHRoaXM7XG59ICk7XG5cblxuXG5cbnZhciByY2xhc3MgPSAvW1xcdFxcclxcblxcZl0vZztcblxuZnVuY3Rpb24gZ2V0Q2xhc3MoIGVsZW0gKSB7XG5cdHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSAmJiBlbGVtLmdldEF0dHJpYnV0ZSggXCJjbGFzc1wiICkgfHwgXCJcIjtcbn1cblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRhZGRDbGFzczogZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdHZhciBjbGFzc2VzLCBlbGVtLCBjdXIsIGN1clZhbHVlLCBjbGF6eiwgaiwgZmluYWxWYWx1ZSxcblx0XHRcdGkgPSAwO1xuXG5cdFx0aWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggdmFsdWUgKSApIHtcblx0XHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBqICkge1xuXHRcdFx0XHRqUXVlcnkoIHRoaXMgKS5hZGRDbGFzcyggdmFsdWUuY2FsbCggdGhpcywgaiwgZ2V0Q2xhc3MoIHRoaXMgKSApICk7XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0aWYgKCB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiYgdmFsdWUgKSB7XG5cdFx0XHRjbGFzc2VzID0gdmFsdWUubWF0Y2goIHJub3R3aGl0ZSApIHx8IFtdO1xuXG5cdFx0XHR3aGlsZSAoICggZWxlbSA9IHRoaXNbIGkrKyBdICkgKSB7XG5cdFx0XHRcdGN1clZhbHVlID0gZ2V0Q2xhc3MoIGVsZW0gKTtcblx0XHRcdFx0Y3VyID0gZWxlbS5ub2RlVHlwZSA9PT0gMSAmJlxuXHRcdFx0XHRcdCggXCIgXCIgKyBjdXJWYWx1ZSArIFwiIFwiICkucmVwbGFjZSggcmNsYXNzLCBcIiBcIiApO1xuXG5cdFx0XHRcdGlmICggY3VyICkge1xuXHRcdFx0XHRcdGogPSAwO1xuXHRcdFx0XHRcdHdoaWxlICggKCBjbGF6eiA9IGNsYXNzZXNbIGorKyBdICkgKSB7XG5cdFx0XHRcdFx0XHRpZiAoIGN1ci5pbmRleE9mKCBcIiBcIiArIGNsYXp6ICsgXCIgXCIgKSA8IDAgKSB7XG5cdFx0XHRcdFx0XHRcdGN1ciArPSBjbGF6eiArIFwiIFwiO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIE9ubHkgYXNzaWduIGlmIGRpZmZlcmVudCB0byBhdm9pZCB1bm5lZWRlZCByZW5kZXJpbmcuXG5cdFx0XHRcdFx0ZmluYWxWYWx1ZSA9IGpRdWVyeS50cmltKCBjdXIgKTtcblx0XHRcdFx0XHRpZiAoIGN1clZhbHVlICE9PSBmaW5hbFZhbHVlICkge1xuXHRcdFx0XHRcdFx0ZWxlbS5zZXRBdHRyaWJ1dGUoIFwiY2xhc3NcIiwgZmluYWxWYWx1ZSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHJlbW92ZUNsYXNzOiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0dmFyIGNsYXNzZXMsIGVsZW0sIGN1ciwgY3VyVmFsdWUsIGNsYXp6LCBqLCBmaW5hbFZhbHVlLFxuXHRcdFx0aSA9IDA7XG5cblx0XHRpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCB2YWx1ZSApICkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGogKSB7XG5cdFx0XHRcdGpRdWVyeSggdGhpcyApLnJlbW92ZUNsYXNzKCB2YWx1ZS5jYWxsKCB0aGlzLCBqLCBnZXRDbGFzcyggdGhpcyApICkgKTtcblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHRpZiAoICFhcmd1bWVudHMubGVuZ3RoICkge1xuXHRcdFx0cmV0dXJuIHRoaXMuYXR0ciggXCJjbGFzc1wiLCBcIlwiICk7XG5cdFx0fVxuXG5cdFx0aWYgKCB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiYgdmFsdWUgKSB7XG5cdFx0XHRjbGFzc2VzID0gdmFsdWUubWF0Y2goIHJub3R3aGl0ZSApIHx8IFtdO1xuXG5cdFx0XHR3aGlsZSAoICggZWxlbSA9IHRoaXNbIGkrKyBdICkgKSB7XG5cdFx0XHRcdGN1clZhbHVlID0gZ2V0Q2xhc3MoIGVsZW0gKTtcblxuXHRcdFx0XHQvLyBUaGlzIGV4cHJlc3Npb24gaXMgaGVyZSBmb3IgYmV0dGVyIGNvbXByZXNzaWJpbGl0eSAoc2VlIGFkZENsYXNzKVxuXHRcdFx0XHRjdXIgPSBlbGVtLm5vZGVUeXBlID09PSAxICYmXG5cdFx0XHRcdFx0KCBcIiBcIiArIGN1clZhbHVlICsgXCIgXCIgKS5yZXBsYWNlKCByY2xhc3MsIFwiIFwiICk7XG5cblx0XHRcdFx0aWYgKCBjdXIgKSB7XG5cdFx0XHRcdFx0aiA9IDA7XG5cdFx0XHRcdFx0d2hpbGUgKCAoIGNsYXp6ID0gY2xhc3Nlc1sgaisrIF0gKSApIHtcblxuXHRcdFx0XHRcdFx0Ly8gUmVtb3ZlICphbGwqIGluc3RhbmNlc1xuXHRcdFx0XHRcdFx0d2hpbGUgKCBjdXIuaW5kZXhPZiggXCIgXCIgKyBjbGF6eiArIFwiIFwiICkgPiAtMSApIHtcblx0XHRcdFx0XHRcdFx0Y3VyID0gY3VyLnJlcGxhY2UoIFwiIFwiICsgY2xhenogKyBcIiBcIiwgXCIgXCIgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBPbmx5IGFzc2lnbiBpZiBkaWZmZXJlbnQgdG8gYXZvaWQgdW5uZWVkZWQgcmVuZGVyaW5nLlxuXHRcdFx0XHRcdGZpbmFsVmFsdWUgPSBqUXVlcnkudHJpbSggY3VyICk7XG5cdFx0XHRcdFx0aWYgKCBjdXJWYWx1ZSAhPT0gZmluYWxWYWx1ZSApIHtcblx0XHRcdFx0XHRcdGVsZW0uc2V0QXR0cmlidXRlKCBcImNsYXNzXCIsIGZpbmFsVmFsdWUgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHR0b2dnbGVDbGFzczogZnVuY3Rpb24oIHZhbHVlLCBzdGF0ZVZhbCApIHtcblx0XHR2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcblxuXHRcdGlmICggdHlwZW9mIHN0YXRlVmFsID09PSBcImJvb2xlYW5cIiAmJiB0eXBlID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0cmV0dXJuIHN0YXRlVmFsID8gdGhpcy5hZGRDbGFzcyggdmFsdWUgKSA6IHRoaXMucmVtb3ZlQ2xhc3MoIHZhbHVlICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggdmFsdWUgKSApIHtcblx0XHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBpICkge1xuXHRcdFx0XHRqUXVlcnkoIHRoaXMgKS50b2dnbGVDbGFzcyhcblx0XHRcdFx0XHR2YWx1ZS5jYWxsKCB0aGlzLCBpLCBnZXRDbGFzcyggdGhpcyApLCBzdGF0ZVZhbCApLFxuXHRcdFx0XHRcdHN0YXRlVmFsXG5cdFx0XHRcdCk7XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgY2xhc3NOYW1lLCBpLCBzZWxmLCBjbGFzc05hbWVzO1xuXG5cdFx0XHRpZiAoIHR5cGUgPT09IFwic3RyaW5nXCIgKSB7XG5cblx0XHRcdFx0Ly8gVG9nZ2xlIGluZGl2aWR1YWwgY2xhc3MgbmFtZXNcblx0XHRcdFx0aSA9IDA7XG5cdFx0XHRcdHNlbGYgPSBqUXVlcnkoIHRoaXMgKTtcblx0XHRcdFx0Y2xhc3NOYW1lcyA9IHZhbHVlLm1hdGNoKCBybm90d2hpdGUgKSB8fCBbXTtcblxuXHRcdFx0XHR3aGlsZSAoICggY2xhc3NOYW1lID0gY2xhc3NOYW1lc1sgaSsrIF0gKSApIHtcblxuXHRcdFx0XHRcdC8vIENoZWNrIGVhY2ggY2xhc3NOYW1lIGdpdmVuLCBzcGFjZSBzZXBhcmF0ZWQgbGlzdFxuXHRcdFx0XHRcdGlmICggc2VsZi5oYXNDbGFzcyggY2xhc3NOYW1lICkgKSB7XG5cdFx0XHRcdFx0XHRzZWxmLnJlbW92ZUNsYXNzKCBjbGFzc05hbWUgKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0c2VsZi5hZGRDbGFzcyggY2xhc3NOYW1lICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdC8vIFRvZ2dsZSB3aG9sZSBjbGFzcyBuYW1lXG5cdFx0XHR9IGVsc2UgaWYgKCB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHR5cGUgPT09IFwiYm9vbGVhblwiICkge1xuXHRcdFx0XHRjbGFzc05hbWUgPSBnZXRDbGFzcyggdGhpcyApO1xuXHRcdFx0XHRpZiAoIGNsYXNzTmFtZSApIHtcblxuXHRcdFx0XHRcdC8vIFN0b3JlIGNsYXNzTmFtZSBpZiBzZXRcblx0XHRcdFx0XHRkYXRhUHJpdi5zZXQoIHRoaXMsIFwiX19jbGFzc05hbWVfX1wiLCBjbGFzc05hbWUgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIElmIHRoZSBlbGVtZW50IGhhcyBhIGNsYXNzIG5hbWUgb3IgaWYgd2UncmUgcGFzc2VkIGBmYWxzZWAsXG5cdFx0XHRcdC8vIHRoZW4gcmVtb3ZlIHRoZSB3aG9sZSBjbGFzc25hbWUgKGlmIHRoZXJlIHdhcyBvbmUsIHRoZSBhYm92ZSBzYXZlZCBpdCkuXG5cdFx0XHRcdC8vIE90aGVyd2lzZSBicmluZyBiYWNrIHdoYXRldmVyIHdhcyBwcmV2aW91c2x5IHNhdmVkIChpZiBhbnl0aGluZyksXG5cdFx0XHRcdC8vIGZhbGxpbmcgYmFjayB0byB0aGUgZW1wdHkgc3RyaW5nIGlmIG5vdGhpbmcgd2FzIHN0b3JlZC5cblx0XHRcdFx0aWYgKCB0aGlzLnNldEF0dHJpYnV0ZSApIHtcblx0XHRcdFx0XHR0aGlzLnNldEF0dHJpYnV0ZSggXCJjbGFzc1wiLFxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lIHx8IHZhbHVlID09PSBmYWxzZSA/XG5cdFx0XHRcdFx0XHRcIlwiIDpcblx0XHRcdFx0XHRcdGRhdGFQcml2LmdldCggdGhpcywgXCJfX2NsYXNzTmFtZV9fXCIgKSB8fCBcIlwiXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRoYXNDbGFzczogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHZhciBjbGFzc05hbWUsIGVsZW0sXG5cdFx0XHRpID0gMDtcblxuXHRcdGNsYXNzTmFtZSA9IFwiIFwiICsgc2VsZWN0b3IgKyBcIiBcIjtcblx0XHR3aGlsZSAoICggZWxlbSA9IHRoaXNbIGkrKyBdICkgKSB7XG5cdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgJiZcblx0XHRcdFx0KCBcIiBcIiArIGdldENsYXNzKCBlbGVtICkgKyBcIiBcIiApLnJlcGxhY2UoIHJjbGFzcywgXCIgXCIgKVxuXHRcdFx0XHRcdC5pbmRleE9mKCBjbGFzc05hbWUgKSA+IC0xXG5cdFx0XHQpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59ICk7XG5cblxuXG5cbnZhciBycmV0dXJuID0gL1xcci9nLFxuXHRyc3BhY2VzID0gL1tcXHgyMFxcdFxcclxcblxcZl0rL2c7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0dmFsOiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0dmFyIGhvb2tzLCByZXQsIGlzRnVuY3Rpb24sXG5cdFx0XHRlbGVtID0gdGhpc1sgMCBdO1xuXG5cdFx0aWYgKCAhYXJndW1lbnRzLmxlbmd0aCApIHtcblx0XHRcdGlmICggZWxlbSApIHtcblx0XHRcdFx0aG9va3MgPSBqUXVlcnkudmFsSG9va3NbIGVsZW0udHlwZSBdIHx8XG5cdFx0XHRcdFx0alF1ZXJ5LnZhbEhvb2tzWyBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgXTtcblxuXHRcdFx0XHRpZiAoIGhvb2tzICYmXG5cdFx0XHRcdFx0XCJnZXRcIiBpbiBob29rcyAmJlxuXHRcdFx0XHRcdCggcmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBcInZhbHVlXCIgKSApICE9PSB1bmRlZmluZWRcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cmV0dXJuIHJldDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldCA9IGVsZW0udmFsdWU7XG5cblx0XHRcdFx0cmV0dXJuIHR5cGVvZiByZXQgPT09IFwic3RyaW5nXCIgP1xuXG5cdFx0XHRcdFx0Ly8gSGFuZGxlIG1vc3QgY29tbW9uIHN0cmluZyBjYXNlc1xuXHRcdFx0XHRcdHJldC5yZXBsYWNlKCBycmV0dXJuLCBcIlwiICkgOlxuXG5cdFx0XHRcdFx0Ly8gSGFuZGxlIGNhc2VzIHdoZXJlIHZhbHVlIGlzIG51bGwvdW5kZWYgb3IgbnVtYmVyXG5cdFx0XHRcdFx0cmV0ID09IG51bGwgPyBcIlwiIDogcmV0O1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aXNGdW5jdGlvbiA9IGpRdWVyeS5pc0Z1bmN0aW9uKCB2YWx1ZSApO1xuXG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGkgKSB7XG5cdFx0XHR2YXIgdmFsO1xuXG5cdFx0XHRpZiAoIHRoaXMubm9kZVR5cGUgIT09IDEgKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCBpc0Z1bmN0aW9uICkge1xuXHRcdFx0XHR2YWwgPSB2YWx1ZS5jYWxsKCB0aGlzLCBpLCBqUXVlcnkoIHRoaXMgKS52YWwoKSApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dmFsID0gdmFsdWU7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFRyZWF0IG51bGwvdW5kZWZpbmVkIGFzIFwiXCI7IGNvbnZlcnQgbnVtYmVycyB0byBzdHJpbmdcblx0XHRcdGlmICggdmFsID09IG51bGwgKSB7XG5cdFx0XHRcdHZhbCA9IFwiXCI7XG5cblx0XHRcdH0gZWxzZSBpZiAoIHR5cGVvZiB2YWwgPT09IFwibnVtYmVyXCIgKSB7XG5cdFx0XHRcdHZhbCArPSBcIlwiO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCBqUXVlcnkuaXNBcnJheSggdmFsICkgKSB7XG5cdFx0XHRcdHZhbCA9IGpRdWVyeS5tYXAoIHZhbCwgZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdFx0XHRcdHJldHVybiB2YWx1ZSA9PSBudWxsID8gXCJcIiA6IHZhbHVlICsgXCJcIjtcblx0XHRcdFx0fSApO1xuXHRcdFx0fVxuXG5cdFx0XHRob29rcyA9IGpRdWVyeS52YWxIb29rc1sgdGhpcy50eXBlIF0gfHwgalF1ZXJ5LnZhbEhvb2tzWyB0aGlzLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgXTtcblxuXHRcdFx0Ly8gSWYgc2V0IHJldHVybnMgdW5kZWZpbmVkLCBmYWxsIGJhY2sgdG8gbm9ybWFsIHNldHRpbmdcblx0XHRcdGlmICggIWhvb2tzIHx8ICEoIFwic2V0XCIgaW4gaG9va3MgKSB8fCBob29rcy5zZXQoIHRoaXMsIHZhbCwgXCJ2YWx1ZVwiICkgPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0dGhpcy52YWx1ZSA9IHZhbDtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmV4dGVuZCgge1xuXHR2YWxIb29rczoge1xuXHRcdG9wdGlvbjoge1xuXHRcdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdFx0XHR2YXIgdmFsID0galF1ZXJ5LmZpbmQuYXR0ciggZWxlbSwgXCJ2YWx1ZVwiICk7XG5cdFx0XHRcdHJldHVybiB2YWwgIT0gbnVsbCA/XG5cdFx0XHRcdFx0dmFsIDpcblxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFMTAtMTErXG5cdFx0XHRcdFx0Ly8gb3B0aW9uLnRleHQgdGhyb3dzIGV4Y2VwdGlvbnMgKCMxNDY4NiwgIzE0ODU4KVxuXHRcdFx0XHRcdC8vIFN0cmlwIGFuZCBjb2xsYXBzZSB3aGl0ZXNwYWNlXG5cdFx0XHRcdFx0Ly8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy8jc3RyaXAtYW5kLWNvbGxhcHNlLXdoaXRlc3BhY2Vcblx0XHRcdFx0XHRqUXVlcnkudHJpbSggalF1ZXJ5LnRleHQoIGVsZW0gKSApLnJlcGxhY2UoIHJzcGFjZXMsIFwiIFwiICk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRzZWxlY3Q6IHtcblx0XHRcdGdldDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHZhciB2YWx1ZSwgb3B0aW9uLFxuXHRcdFx0XHRcdG9wdGlvbnMgPSBlbGVtLm9wdGlvbnMsXG5cdFx0XHRcdFx0aW5kZXggPSBlbGVtLnNlbGVjdGVkSW5kZXgsXG5cdFx0XHRcdFx0b25lID0gZWxlbS50eXBlID09PSBcInNlbGVjdC1vbmVcIiB8fCBpbmRleCA8IDAsXG5cdFx0XHRcdFx0dmFsdWVzID0gb25lID8gbnVsbCA6IFtdLFxuXHRcdFx0XHRcdG1heCA9IG9uZSA/IGluZGV4ICsgMSA6IG9wdGlvbnMubGVuZ3RoLFxuXHRcdFx0XHRcdGkgPSBpbmRleCA8IDAgP1xuXHRcdFx0XHRcdFx0bWF4IDpcblx0XHRcdFx0XHRcdG9uZSA/IGluZGV4IDogMDtcblxuXHRcdFx0XHQvLyBMb29wIHRocm91Z2ggYWxsIHRoZSBzZWxlY3RlZCBvcHRpb25zXG5cdFx0XHRcdGZvciAoIDsgaSA8IG1heDsgaSsrICkge1xuXHRcdFx0XHRcdG9wdGlvbiA9IG9wdGlvbnNbIGkgXTtcblxuXHRcdFx0XHRcdC8vIElFOC05IGRvZXNuJ3QgdXBkYXRlIHNlbGVjdGVkIGFmdGVyIGZvcm0gcmVzZXQgKCMyNTUxKVxuXHRcdFx0XHRcdGlmICggKCBvcHRpb24uc2VsZWN0ZWQgfHwgaSA9PT0gaW5kZXggKSAmJlxuXG5cdFx0XHRcdFx0XHRcdC8vIERvbid0IHJldHVybiBvcHRpb25zIHRoYXQgYXJlIGRpc2FibGVkIG9yIGluIGEgZGlzYWJsZWQgb3B0Z3JvdXBcblx0XHRcdFx0XHRcdFx0KCBzdXBwb3J0Lm9wdERpc2FibGVkID9cblx0XHRcdFx0XHRcdFx0XHQhb3B0aW9uLmRpc2FibGVkIDogb3B0aW9uLmdldEF0dHJpYnV0ZSggXCJkaXNhYmxlZFwiICkgPT09IG51bGwgKSAmJlxuXHRcdFx0XHRcdFx0XHQoICFvcHRpb24ucGFyZW50Tm9kZS5kaXNhYmxlZCB8fFxuXHRcdFx0XHRcdFx0XHRcdCFqUXVlcnkubm9kZU5hbWUoIG9wdGlvbi5wYXJlbnROb2RlLCBcIm9wdGdyb3VwXCIgKSApICkge1xuXG5cdFx0XHRcdFx0XHQvLyBHZXQgdGhlIHNwZWNpZmljIHZhbHVlIGZvciB0aGUgb3B0aW9uXG5cdFx0XHRcdFx0XHR2YWx1ZSA9IGpRdWVyeSggb3B0aW9uICkudmFsKCk7XG5cblx0XHRcdFx0XHRcdC8vIFdlIGRvbid0IG5lZWQgYW4gYXJyYXkgZm9yIG9uZSBzZWxlY3RzXG5cdFx0XHRcdFx0XHRpZiAoIG9uZSApIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHQvLyBNdWx0aS1TZWxlY3RzIHJldHVybiBhbiBhcnJheVxuXHRcdFx0XHRcdFx0dmFsdWVzLnB1c2goIHZhbHVlICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHZhbHVlcztcblx0XHRcdH0sXG5cblx0XHRcdHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkge1xuXHRcdFx0XHR2YXIgb3B0aW9uU2V0LCBvcHRpb24sXG5cdFx0XHRcdFx0b3B0aW9ucyA9IGVsZW0ub3B0aW9ucyxcblx0XHRcdFx0XHR2YWx1ZXMgPSBqUXVlcnkubWFrZUFycmF5KCB2YWx1ZSApLFxuXHRcdFx0XHRcdGkgPSBvcHRpb25zLmxlbmd0aDtcblxuXHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRvcHRpb24gPSBvcHRpb25zWyBpIF07XG5cdFx0XHRcdFx0aWYgKCBvcHRpb24uc2VsZWN0ZWQgPVxuXHRcdFx0XHRcdFx0alF1ZXJ5LmluQXJyYXkoIGpRdWVyeS52YWxIb29rcy5vcHRpb24uZ2V0KCBvcHRpb24gKSwgdmFsdWVzICkgPiAtMVxuXHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0b3B0aW9uU2V0ID0gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBGb3JjZSBicm93c2VycyB0byBiZWhhdmUgY29uc2lzdGVudGx5IHdoZW4gbm9uLW1hdGNoaW5nIHZhbHVlIGlzIHNldFxuXHRcdFx0XHRpZiAoICFvcHRpb25TZXQgKSB7XG5cdFx0XHRcdFx0ZWxlbS5zZWxlY3RlZEluZGV4ID0gLTE7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHZhbHVlcztcblx0XHRcdH1cblx0XHR9XG5cdH1cbn0gKTtcblxuLy8gUmFkaW9zIGFuZCBjaGVja2JveGVzIGdldHRlci9zZXR0ZXJcbmpRdWVyeS5lYWNoKCBbIFwicmFkaW9cIiwgXCJjaGVja2JveFwiIF0sIGZ1bmN0aW9uKCkge1xuXHRqUXVlcnkudmFsSG9va3NbIHRoaXMgXSA9IHtcblx0XHRzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHtcblx0XHRcdGlmICggalF1ZXJ5LmlzQXJyYXkoIHZhbHVlICkgKSB7XG5cdFx0XHRcdHJldHVybiAoIGVsZW0uY2hlY2tlZCA9IGpRdWVyeS5pbkFycmF5KCBqUXVlcnkoIGVsZW0gKS52YWwoKSwgdmFsdWUgKSA+IC0xICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXHRpZiAoICFzdXBwb3J0LmNoZWNrT24gKSB7XG5cdFx0alF1ZXJ5LnZhbEhvb2tzWyB0aGlzIF0uZ2V0ID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUoIFwidmFsdWVcIiApID09PSBudWxsID8gXCJvblwiIDogZWxlbS52YWx1ZTtcblx0XHR9O1xuXHR9XG59ICk7XG5cblxuXG5cbi8vIFJldHVybiBqUXVlcnkgZm9yIGF0dHJpYnV0ZXMtb25seSBpbmNsdXNpb25cblxuXG52YXIgcmZvY3VzTW9ycGggPSAvXig/OmZvY3VzaW5mb2N1c3xmb2N1c291dGJsdXIpJC87XG5cbmpRdWVyeS5leHRlbmQoIGpRdWVyeS5ldmVudCwge1xuXG5cdHRyaWdnZXI6IGZ1bmN0aW9uKCBldmVudCwgZGF0YSwgZWxlbSwgb25seUhhbmRsZXJzICkge1xuXG5cdFx0dmFyIGksIGN1ciwgdG1wLCBidWJibGVUeXBlLCBvbnR5cGUsIGhhbmRsZSwgc3BlY2lhbCxcblx0XHRcdGV2ZW50UGF0aCA9IFsgZWxlbSB8fCBkb2N1bWVudCBdLFxuXHRcdFx0dHlwZSA9IGhhc093bi5jYWxsKCBldmVudCwgXCJ0eXBlXCIgKSA/IGV2ZW50LnR5cGUgOiBldmVudCxcblx0XHRcdG5hbWVzcGFjZXMgPSBoYXNPd24uY2FsbCggZXZlbnQsIFwibmFtZXNwYWNlXCIgKSA/IGV2ZW50Lm5hbWVzcGFjZS5zcGxpdCggXCIuXCIgKSA6IFtdO1xuXG5cdFx0Y3VyID0gdG1wID0gZWxlbSA9IGVsZW0gfHwgZG9jdW1lbnQ7XG5cblx0XHQvLyBEb24ndCBkbyBldmVudHMgb24gdGV4dCBhbmQgY29tbWVudCBub2Rlc1xuXHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMyB8fCBlbGVtLm5vZGVUeXBlID09PSA4ICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIGZvY3VzL2JsdXIgbW9ycGhzIHRvIGZvY3VzaW4vb3V0OyBlbnN1cmUgd2UncmUgbm90IGZpcmluZyB0aGVtIHJpZ2h0IG5vd1xuXHRcdGlmICggcmZvY3VzTW9ycGgudGVzdCggdHlwZSArIGpRdWVyeS5ldmVudC50cmlnZ2VyZWQgKSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoIHR5cGUuaW5kZXhPZiggXCIuXCIgKSA+IC0xICkge1xuXG5cdFx0XHQvLyBOYW1lc3BhY2VkIHRyaWdnZXI7IGNyZWF0ZSBhIHJlZ2V4cCB0byBtYXRjaCBldmVudCB0eXBlIGluIGhhbmRsZSgpXG5cdFx0XHRuYW1lc3BhY2VzID0gdHlwZS5zcGxpdCggXCIuXCIgKTtcblx0XHRcdHR5cGUgPSBuYW1lc3BhY2VzLnNoaWZ0KCk7XG5cdFx0XHRuYW1lc3BhY2VzLnNvcnQoKTtcblx0XHR9XG5cdFx0b250eXBlID0gdHlwZS5pbmRleE9mKCBcIjpcIiApIDwgMCAmJiBcIm9uXCIgKyB0eXBlO1xuXG5cdFx0Ly8gQ2FsbGVyIGNhbiBwYXNzIGluIGEgalF1ZXJ5LkV2ZW50IG9iamVjdCwgT2JqZWN0LCBvciBqdXN0IGFuIGV2ZW50IHR5cGUgc3RyaW5nXG5cdFx0ZXZlbnQgPSBldmVudFsgalF1ZXJ5LmV4cGFuZG8gXSA/XG5cdFx0XHRldmVudCA6XG5cdFx0XHRuZXcgalF1ZXJ5LkV2ZW50KCB0eXBlLCB0eXBlb2YgZXZlbnQgPT09IFwib2JqZWN0XCIgJiYgZXZlbnQgKTtcblxuXHRcdC8vIFRyaWdnZXIgYml0bWFzazogJiAxIGZvciBuYXRpdmUgaGFuZGxlcnM7ICYgMiBmb3IgalF1ZXJ5IChhbHdheXMgdHJ1ZSlcblx0XHRldmVudC5pc1RyaWdnZXIgPSBvbmx5SGFuZGxlcnMgPyAyIDogMztcblx0XHRldmVudC5uYW1lc3BhY2UgPSBuYW1lc3BhY2VzLmpvaW4oIFwiLlwiICk7XG5cdFx0ZXZlbnQucm5hbWVzcGFjZSA9IGV2ZW50Lm5hbWVzcGFjZSA/XG5cdFx0XHRuZXcgUmVnRXhwKCBcIihefFxcXFwuKVwiICsgbmFtZXNwYWNlcy5qb2luKCBcIlxcXFwuKD86LipcXFxcLnwpXCIgKSArIFwiKFxcXFwufCQpXCIgKSA6XG5cdFx0XHRudWxsO1xuXG5cdFx0Ly8gQ2xlYW4gdXAgdGhlIGV2ZW50IGluIGNhc2UgaXQgaXMgYmVpbmcgcmV1c2VkXG5cdFx0ZXZlbnQucmVzdWx0ID0gdW5kZWZpbmVkO1xuXHRcdGlmICggIWV2ZW50LnRhcmdldCApIHtcblx0XHRcdGV2ZW50LnRhcmdldCA9IGVsZW07XG5cdFx0fVxuXG5cdFx0Ly8gQ2xvbmUgYW55IGluY29taW5nIGRhdGEgYW5kIHByZXBlbmQgdGhlIGV2ZW50LCBjcmVhdGluZyB0aGUgaGFuZGxlciBhcmcgbGlzdFxuXHRcdGRhdGEgPSBkYXRhID09IG51bGwgP1xuXHRcdFx0WyBldmVudCBdIDpcblx0XHRcdGpRdWVyeS5tYWtlQXJyYXkoIGRhdGEsIFsgZXZlbnQgXSApO1xuXG5cdFx0Ly8gQWxsb3cgc3BlY2lhbCBldmVudHMgdG8gZHJhdyBvdXRzaWRlIHRoZSBsaW5lc1xuXHRcdHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9O1xuXHRcdGlmICggIW9ubHlIYW5kbGVycyAmJiBzcGVjaWFsLnRyaWdnZXIgJiYgc3BlY2lhbC50cmlnZ2VyLmFwcGx5KCBlbGVtLCBkYXRhICkgPT09IGZhbHNlICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIERldGVybWluZSBldmVudCBwcm9wYWdhdGlvbiBwYXRoIGluIGFkdmFuY2UsIHBlciBXM0MgZXZlbnRzIHNwZWMgKCM5OTUxKVxuXHRcdC8vIEJ1YmJsZSB1cCB0byBkb2N1bWVudCwgdGhlbiB0byB3aW5kb3c7IHdhdGNoIGZvciBhIGdsb2JhbCBvd25lckRvY3VtZW50IHZhciAoIzk3MjQpXG5cdFx0aWYgKCAhb25seUhhbmRsZXJzICYmICFzcGVjaWFsLm5vQnViYmxlICYmICFqUXVlcnkuaXNXaW5kb3coIGVsZW0gKSApIHtcblxuXHRcdFx0YnViYmxlVHlwZSA9IHNwZWNpYWwuZGVsZWdhdGVUeXBlIHx8IHR5cGU7XG5cdFx0XHRpZiAoICFyZm9jdXNNb3JwaC50ZXN0KCBidWJibGVUeXBlICsgdHlwZSApICkge1xuXHRcdFx0XHRjdXIgPSBjdXIucGFyZW50Tm9kZTtcblx0XHRcdH1cblx0XHRcdGZvciAoIDsgY3VyOyBjdXIgPSBjdXIucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0ZXZlbnRQYXRoLnB1c2goIGN1ciApO1xuXHRcdFx0XHR0bXAgPSBjdXI7XG5cdFx0XHR9XG5cblx0XHRcdC8vIE9ubHkgYWRkIHdpbmRvdyBpZiB3ZSBnb3QgdG8gZG9jdW1lbnQgKGUuZy4sIG5vdCBwbGFpbiBvYmogb3IgZGV0YWNoZWQgRE9NKVxuXHRcdFx0aWYgKCB0bXAgPT09ICggZWxlbS5vd25lckRvY3VtZW50IHx8IGRvY3VtZW50ICkgKSB7XG5cdFx0XHRcdGV2ZW50UGF0aC5wdXNoKCB0bXAuZGVmYXVsdFZpZXcgfHwgdG1wLnBhcmVudFdpbmRvdyB8fCB3aW5kb3cgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBGaXJlIGhhbmRsZXJzIG9uIHRoZSBldmVudCBwYXRoXG5cdFx0aSA9IDA7XG5cdFx0d2hpbGUgKCAoIGN1ciA9IGV2ZW50UGF0aFsgaSsrIF0gKSAmJiAhZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSApIHtcblxuXHRcdFx0ZXZlbnQudHlwZSA9IGkgPiAxID9cblx0XHRcdFx0YnViYmxlVHlwZSA6XG5cdFx0XHRcdHNwZWNpYWwuYmluZFR5cGUgfHwgdHlwZTtcblxuXHRcdFx0Ly8galF1ZXJ5IGhhbmRsZXJcblx0XHRcdGhhbmRsZSA9ICggZGF0YVByaXYuZ2V0KCBjdXIsIFwiZXZlbnRzXCIgKSB8fCB7fSApWyBldmVudC50eXBlIF0gJiZcblx0XHRcdFx0ZGF0YVByaXYuZ2V0KCBjdXIsIFwiaGFuZGxlXCIgKTtcblx0XHRcdGlmICggaGFuZGxlICkge1xuXHRcdFx0XHRoYW5kbGUuYXBwbHkoIGN1ciwgZGF0YSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBOYXRpdmUgaGFuZGxlclxuXHRcdFx0aGFuZGxlID0gb250eXBlICYmIGN1clsgb250eXBlIF07XG5cdFx0XHRpZiAoIGhhbmRsZSAmJiBoYW5kbGUuYXBwbHkgJiYgYWNjZXB0RGF0YSggY3VyICkgKSB7XG5cdFx0XHRcdGV2ZW50LnJlc3VsdCA9IGhhbmRsZS5hcHBseSggY3VyLCBkYXRhICk7XG5cdFx0XHRcdGlmICggZXZlbnQucmVzdWx0ID09PSBmYWxzZSApIHtcblx0XHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGV2ZW50LnR5cGUgPSB0eXBlO1xuXG5cdFx0Ly8gSWYgbm9ib2R5IHByZXZlbnRlZCB0aGUgZGVmYXVsdCBhY3Rpb24sIGRvIGl0IG5vd1xuXHRcdGlmICggIW9ubHlIYW5kbGVycyAmJiAhZXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkgKSB7XG5cblx0XHRcdGlmICggKCAhc3BlY2lhbC5fZGVmYXVsdCB8fFxuXHRcdFx0XHRzcGVjaWFsLl9kZWZhdWx0LmFwcGx5KCBldmVudFBhdGgucG9wKCksIGRhdGEgKSA9PT0gZmFsc2UgKSAmJlxuXHRcdFx0XHRhY2NlcHREYXRhKCBlbGVtICkgKSB7XG5cblx0XHRcdFx0Ly8gQ2FsbCBhIG5hdGl2ZSBET00gbWV0aG9kIG9uIHRoZSB0YXJnZXQgd2l0aCB0aGUgc2FtZSBuYW1lIG5hbWUgYXMgdGhlIGV2ZW50LlxuXHRcdFx0XHQvLyBEb24ndCBkbyBkZWZhdWx0IGFjdGlvbnMgb24gd2luZG93LCB0aGF0J3Mgd2hlcmUgZ2xvYmFsIHZhcmlhYmxlcyBiZSAoIzYxNzApXG5cdFx0XHRcdGlmICggb250eXBlICYmIGpRdWVyeS5pc0Z1bmN0aW9uKCBlbGVtWyB0eXBlIF0gKSAmJiAhalF1ZXJ5LmlzV2luZG93KCBlbGVtICkgKSB7XG5cblx0XHRcdFx0XHQvLyBEb24ndCByZS10cmlnZ2VyIGFuIG9uRk9PIGV2ZW50IHdoZW4gd2UgY2FsbCBpdHMgRk9PKCkgbWV0aG9kXG5cdFx0XHRcdFx0dG1wID0gZWxlbVsgb250eXBlIF07XG5cblx0XHRcdFx0XHRpZiAoIHRtcCApIHtcblx0XHRcdFx0XHRcdGVsZW1bIG9udHlwZSBdID0gbnVsbDtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBQcmV2ZW50IHJlLXRyaWdnZXJpbmcgb2YgdGhlIHNhbWUgZXZlbnQsIHNpbmNlIHdlIGFscmVhZHkgYnViYmxlZCBpdCBhYm92ZVxuXHRcdFx0XHRcdGpRdWVyeS5ldmVudC50cmlnZ2VyZWQgPSB0eXBlO1xuXHRcdFx0XHRcdGVsZW1bIHR5cGUgXSgpO1xuXHRcdFx0XHRcdGpRdWVyeS5ldmVudC50cmlnZ2VyZWQgPSB1bmRlZmluZWQ7XG5cblx0XHRcdFx0XHRpZiAoIHRtcCApIHtcblx0XHRcdFx0XHRcdGVsZW1bIG9udHlwZSBdID0gdG1wO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBldmVudC5yZXN1bHQ7XG5cdH0sXG5cblx0Ly8gUGlnZ3liYWNrIG9uIGEgZG9ub3IgZXZlbnQgdG8gc2ltdWxhdGUgYSBkaWZmZXJlbnQgb25lXG5cdC8vIFVzZWQgb25seSBmb3IgYGZvY3VzKGluIHwgb3V0KWAgZXZlbnRzXG5cdHNpbXVsYXRlOiBmdW5jdGlvbiggdHlwZSwgZWxlbSwgZXZlbnQgKSB7XG5cdFx0dmFyIGUgPSBqUXVlcnkuZXh0ZW5kKFxuXHRcdFx0bmV3IGpRdWVyeS5FdmVudCgpLFxuXHRcdFx0ZXZlbnQsXG5cdFx0XHR7XG5cdFx0XHRcdHR5cGU6IHR5cGUsXG5cdFx0XHRcdGlzU2ltdWxhdGVkOiB0cnVlXG5cdFx0XHR9XG5cdFx0KTtcblxuXHRcdGpRdWVyeS5ldmVudC50cmlnZ2VyKCBlLCBudWxsLCBlbGVtICk7XG5cdH1cblxufSApO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cblx0dHJpZ2dlcjogZnVuY3Rpb24oIHR5cGUsIGRhdGEgKSB7XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRqUXVlcnkuZXZlbnQudHJpZ2dlciggdHlwZSwgZGF0YSwgdGhpcyApO1xuXHRcdH0gKTtcblx0fSxcblx0dHJpZ2dlckhhbmRsZXI6IGZ1bmN0aW9uKCB0eXBlLCBkYXRhICkge1xuXHRcdHZhciBlbGVtID0gdGhpc1sgMCBdO1xuXHRcdGlmICggZWxlbSApIHtcblx0XHRcdHJldHVybiBqUXVlcnkuZXZlbnQudHJpZ2dlciggdHlwZSwgZGF0YSwgZWxlbSwgdHJ1ZSApO1xuXHRcdH1cblx0fVxufSApO1xuXG5cbmpRdWVyeS5lYWNoKCAoIFwiYmx1ciBmb2N1cyBmb2N1c2luIGZvY3Vzb3V0IGxvYWQgcmVzaXplIHNjcm9sbCB1bmxvYWQgY2xpY2sgZGJsY2xpY2sgXCIgK1xuXHRcIm1vdXNlZG93biBtb3VzZXVwIG1vdXNlbW92ZSBtb3VzZW92ZXIgbW91c2VvdXQgbW91c2VlbnRlciBtb3VzZWxlYXZlIFwiICtcblx0XCJjaGFuZ2Ugc2VsZWN0IHN1Ym1pdCBrZXlkb3duIGtleXByZXNzIGtleXVwIGVycm9yIGNvbnRleHRtZW51XCIgKS5zcGxpdCggXCIgXCIgKSxcblx0ZnVuY3Rpb24oIGksIG5hbWUgKSB7XG5cblx0Ly8gSGFuZGxlIGV2ZW50IGJpbmRpbmdcblx0alF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggZGF0YSwgZm4gKSB7XG5cdFx0cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPiAwID9cblx0XHRcdHRoaXMub24oIG5hbWUsIG51bGwsIGRhdGEsIGZuICkgOlxuXHRcdFx0dGhpcy50cmlnZ2VyKCBuYW1lICk7XG5cdH07XG59ICk7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0aG92ZXI6IGZ1bmN0aW9uKCBmbk92ZXIsIGZuT3V0ICkge1xuXHRcdHJldHVybiB0aGlzLm1vdXNlZW50ZXIoIGZuT3ZlciApLm1vdXNlbGVhdmUoIGZuT3V0IHx8IGZuT3ZlciApO1xuXHR9XG59ICk7XG5cblxuXG5cbnN1cHBvcnQuZm9jdXNpbiA9IFwib25mb2N1c2luXCIgaW4gd2luZG93O1xuXG5cbi8vIFN1cHBvcnQ6IEZpcmVmb3hcbi8vIEZpcmVmb3ggZG9lc24ndCBoYXZlIGZvY3VzKGluIHwgb3V0KSBldmVudHNcbi8vIFJlbGF0ZWQgdGlja2V0IC0gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njg3Nzg3XG4vL1xuLy8gU3VwcG9ydDogQ2hyb21lLCBTYWZhcmlcbi8vIGZvY3VzKGluIHwgb3V0KSBldmVudHMgZmlyZSBhZnRlciBmb2N1cyAmIGJsdXIgZXZlbnRzLFxuLy8gd2hpY2ggaXMgc3BlYyB2aW9sYXRpb24gLSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvI2V2ZW50cy1mb2N1c2V2ZW50LWV2ZW50LW9yZGVyXG4vLyBSZWxhdGVkIHRpY2tldCAtIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD00NDk4NTdcbmlmICggIXN1cHBvcnQuZm9jdXNpbiApIHtcblx0alF1ZXJ5LmVhY2goIHsgZm9jdXM6IFwiZm9jdXNpblwiLCBibHVyOiBcImZvY3Vzb3V0XCIgfSwgZnVuY3Rpb24oIG9yaWcsIGZpeCApIHtcblxuXHRcdC8vIEF0dGFjaCBhIHNpbmdsZSBjYXB0dXJpbmcgaGFuZGxlciBvbiB0aGUgZG9jdW1lbnQgd2hpbGUgc29tZW9uZSB3YW50cyBmb2N1c2luL2ZvY3Vzb3V0XG5cdFx0dmFyIGhhbmRsZXIgPSBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0XHRqUXVlcnkuZXZlbnQuc2ltdWxhdGUoIGZpeCwgZXZlbnQudGFyZ2V0LCBqUXVlcnkuZXZlbnQuZml4KCBldmVudCApICk7XG5cdFx0fTtcblxuXHRcdGpRdWVyeS5ldmVudC5zcGVjaWFsWyBmaXggXSA9IHtcblx0XHRcdHNldHVwOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0dmFyIGRvYyA9IHRoaXMub3duZXJEb2N1bWVudCB8fCB0aGlzLFxuXHRcdFx0XHRcdGF0dGFjaGVzID0gZGF0YVByaXYuYWNjZXNzKCBkb2MsIGZpeCApO1xuXG5cdFx0XHRcdGlmICggIWF0dGFjaGVzICkge1xuXHRcdFx0XHRcdGRvYy5hZGRFdmVudExpc3RlbmVyKCBvcmlnLCBoYW5kbGVyLCB0cnVlICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZGF0YVByaXYuYWNjZXNzKCBkb2MsIGZpeCwgKCBhdHRhY2hlcyB8fCAwICkgKyAxICk7XG5cdFx0XHR9LFxuXHRcdFx0dGVhcmRvd246IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHR2YXIgZG9jID0gdGhpcy5vd25lckRvY3VtZW50IHx8IHRoaXMsXG5cdFx0XHRcdFx0YXR0YWNoZXMgPSBkYXRhUHJpdi5hY2Nlc3MoIGRvYywgZml4ICkgLSAxO1xuXG5cdFx0XHRcdGlmICggIWF0dGFjaGVzICkge1xuXHRcdFx0XHRcdGRvYy5yZW1vdmVFdmVudExpc3RlbmVyKCBvcmlnLCBoYW5kbGVyLCB0cnVlICk7XG5cdFx0XHRcdFx0ZGF0YVByaXYucmVtb3ZlKCBkb2MsIGZpeCApO1xuXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZGF0YVByaXYuYWNjZXNzKCBkb2MsIGZpeCwgYXR0YWNoZXMgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cdH0gKTtcbn1cbnZhciBsb2NhdGlvbiA9IHdpbmRvdy5sb2NhdGlvbjtcblxudmFyIG5vbmNlID0galF1ZXJ5Lm5vdygpO1xuXG52YXIgcnF1ZXJ5ID0gKCAvXFw/LyApO1xuXG5cblxuLy8gU3VwcG9ydDogQW5kcm9pZCAyLjNcbi8vIFdvcmthcm91bmQgZmFpbHVyZSB0byBzdHJpbmctY2FzdCBudWxsIGlucHV0XG5qUXVlcnkucGFyc2VKU09OID0gZnVuY3Rpb24oIGRhdGEgKSB7XG5cdHJldHVybiBKU09OLnBhcnNlKCBkYXRhICsgXCJcIiApO1xufTtcblxuXG4vLyBDcm9zcy1icm93c2VyIHhtbCBwYXJzaW5nXG5qUXVlcnkucGFyc2VYTUwgPSBmdW5jdGlvbiggZGF0YSApIHtcblx0dmFyIHhtbDtcblx0aWYgKCAhZGF0YSB8fCB0eXBlb2YgZGF0YSAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdC8vIFN1cHBvcnQ6IElFOVxuXHR0cnkge1xuXHRcdHhtbCA9ICggbmV3IHdpbmRvdy5ET01QYXJzZXIoKSApLnBhcnNlRnJvbVN0cmluZyggZGF0YSwgXCJ0ZXh0L3htbFwiICk7XG5cdH0gY2F0Y2ggKCBlICkge1xuXHRcdHhtbCA9IHVuZGVmaW5lZDtcblx0fVxuXG5cdGlmICggIXhtbCB8fCB4bWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIFwicGFyc2VyZXJyb3JcIiApLmxlbmd0aCApIHtcblx0XHRqUXVlcnkuZXJyb3IoIFwiSW52YWxpZCBYTUw6IFwiICsgZGF0YSApO1xuXHR9XG5cdHJldHVybiB4bWw7XG59O1xuXG5cbnZhclxuXHRyaGFzaCA9IC8jLiokLyxcblx0cnRzID0gLyhbPyZdKV89W14mXSovLFxuXHRyaGVhZGVycyA9IC9eKC4qPyk6WyBcXHRdKihbXlxcclxcbl0qKSQvbWcsXG5cblx0Ly8gIzc2NTMsICM4MTI1LCAjODE1MjogbG9jYWwgcHJvdG9jb2wgZGV0ZWN0aW9uXG5cdHJsb2NhbFByb3RvY29sID0gL14oPzphYm91dHxhcHB8YXBwLXN0b3JhZ2V8ListZXh0ZW5zaW9ufGZpbGV8cmVzfHdpZGdldCk6JC8sXG5cdHJub0NvbnRlbnQgPSAvXig/OkdFVHxIRUFEKSQvLFxuXHRycHJvdG9jb2wgPSAvXlxcL1xcLy8sXG5cblx0LyogUHJlZmlsdGVyc1xuXHQgKiAxKSBUaGV5IGFyZSB1c2VmdWwgdG8gaW50cm9kdWNlIGN1c3RvbSBkYXRhVHlwZXMgKHNlZSBhamF4L2pzb25wLmpzIGZvciBhbiBleGFtcGxlKVxuXHQgKiAyKSBUaGVzZSBhcmUgY2FsbGVkOlxuXHQgKiAgICAtIEJFRk9SRSBhc2tpbmcgZm9yIGEgdHJhbnNwb3J0XG5cdCAqICAgIC0gQUZURVIgcGFyYW0gc2VyaWFsaXphdGlvbiAocy5kYXRhIGlzIGEgc3RyaW5nIGlmIHMucHJvY2Vzc0RhdGEgaXMgdHJ1ZSlcblx0ICogMykga2V5IGlzIHRoZSBkYXRhVHlwZVxuXHQgKiA0KSB0aGUgY2F0Y2hhbGwgc3ltYm9sIFwiKlwiIGNhbiBiZSB1c2VkXG5cdCAqIDUpIGV4ZWN1dGlvbiB3aWxsIHN0YXJ0IHdpdGggdHJhbnNwb3J0IGRhdGFUeXBlIGFuZCBUSEVOIGNvbnRpbnVlIGRvd24gdG8gXCIqXCIgaWYgbmVlZGVkXG5cdCAqL1xuXHRwcmVmaWx0ZXJzID0ge30sXG5cblx0LyogVHJhbnNwb3J0cyBiaW5kaW5nc1xuXHQgKiAxKSBrZXkgaXMgdGhlIGRhdGFUeXBlXG5cdCAqIDIpIHRoZSBjYXRjaGFsbCBzeW1ib2wgXCIqXCIgY2FuIGJlIHVzZWRcblx0ICogMykgc2VsZWN0aW9uIHdpbGwgc3RhcnQgd2l0aCB0cmFuc3BvcnQgZGF0YVR5cGUgYW5kIFRIRU4gZ28gdG8gXCIqXCIgaWYgbmVlZGVkXG5cdCAqL1xuXHR0cmFuc3BvcnRzID0ge30sXG5cblx0Ly8gQXZvaWQgY29tbWVudC1wcm9sb2cgY2hhciBzZXF1ZW5jZSAoIzEwMDk4KTsgbXVzdCBhcHBlYXNlIGxpbnQgYW5kIGV2YWRlIGNvbXByZXNzaW9uXG5cdGFsbFR5cGVzID0gXCIqL1wiLmNvbmNhdCggXCIqXCIgKSxcblxuXHQvLyBBbmNob3IgdGFnIGZvciBwYXJzaW5nIHRoZSBkb2N1bWVudCBvcmlnaW5cblx0b3JpZ2luQW5jaG9yID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJhXCIgKTtcblx0b3JpZ2luQW5jaG9yLmhyZWYgPSBsb2NhdGlvbi5ocmVmO1xuXG4vLyBCYXNlIFwiY29uc3RydWN0b3JcIiBmb3IgalF1ZXJ5LmFqYXhQcmVmaWx0ZXIgYW5kIGpRdWVyeS5hamF4VHJhbnNwb3J0XG5mdW5jdGlvbiBhZGRUb1ByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHN0cnVjdHVyZSApIHtcblxuXHQvLyBkYXRhVHlwZUV4cHJlc3Npb24gaXMgb3B0aW9uYWwgYW5kIGRlZmF1bHRzIHRvIFwiKlwiXG5cdHJldHVybiBmdW5jdGlvbiggZGF0YVR5cGVFeHByZXNzaW9uLCBmdW5jICkge1xuXG5cdFx0aWYgKCB0eXBlb2YgZGF0YVR5cGVFeHByZXNzaW9uICE9PSBcInN0cmluZ1wiICkge1xuXHRcdFx0ZnVuYyA9IGRhdGFUeXBlRXhwcmVzc2lvbjtcblx0XHRcdGRhdGFUeXBlRXhwcmVzc2lvbiA9IFwiKlwiO1xuXHRcdH1cblxuXHRcdHZhciBkYXRhVHlwZSxcblx0XHRcdGkgPSAwLFxuXHRcdFx0ZGF0YVR5cGVzID0gZGF0YVR5cGVFeHByZXNzaW9uLnRvTG93ZXJDYXNlKCkubWF0Y2goIHJub3R3aGl0ZSApIHx8IFtdO1xuXG5cdFx0aWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggZnVuYyApICkge1xuXG5cdFx0XHQvLyBGb3IgZWFjaCBkYXRhVHlwZSBpbiB0aGUgZGF0YVR5cGVFeHByZXNzaW9uXG5cdFx0XHR3aGlsZSAoICggZGF0YVR5cGUgPSBkYXRhVHlwZXNbIGkrKyBdICkgKSB7XG5cblx0XHRcdFx0Ly8gUHJlcGVuZCBpZiByZXF1ZXN0ZWRcblx0XHRcdFx0aWYgKCBkYXRhVHlwZVsgMCBdID09PSBcIitcIiApIHtcblx0XHRcdFx0XHRkYXRhVHlwZSA9IGRhdGFUeXBlLnNsaWNlKCAxICkgfHwgXCIqXCI7XG5cdFx0XHRcdFx0KCBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gPSBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gfHwgW10gKS51bnNoaWZ0KCBmdW5jICk7XG5cblx0XHRcdFx0Ly8gT3RoZXJ3aXNlIGFwcGVuZFxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdCggc3RydWN0dXJlWyBkYXRhVHlwZSBdID0gc3RydWN0dXJlWyBkYXRhVHlwZSBdIHx8IFtdICkucHVzaCggZnVuYyApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xufVxuXG4vLyBCYXNlIGluc3BlY3Rpb24gZnVuY3Rpb24gZm9yIHByZWZpbHRlcnMgYW5kIHRyYW5zcG9ydHNcbmZ1bmN0aW9uIGluc3BlY3RQcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCBzdHJ1Y3R1cmUsIG9wdGlvbnMsIG9yaWdpbmFsT3B0aW9ucywganFYSFIgKSB7XG5cblx0dmFyIGluc3BlY3RlZCA9IHt9LFxuXHRcdHNlZWtpbmdUcmFuc3BvcnQgPSAoIHN0cnVjdHVyZSA9PT0gdHJhbnNwb3J0cyApO1xuXG5cdGZ1bmN0aW9uIGluc3BlY3QoIGRhdGFUeXBlICkge1xuXHRcdHZhciBzZWxlY3RlZDtcblx0XHRpbnNwZWN0ZWRbIGRhdGFUeXBlIF0gPSB0cnVlO1xuXHRcdGpRdWVyeS5lYWNoKCBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gfHwgW10sIGZ1bmN0aW9uKCBfLCBwcmVmaWx0ZXJPckZhY3RvcnkgKSB7XG5cdFx0XHR2YXIgZGF0YVR5cGVPclRyYW5zcG9ydCA9IHByZWZpbHRlck9yRmFjdG9yeSggb3B0aW9ucywgb3JpZ2luYWxPcHRpb25zLCBqcVhIUiApO1xuXHRcdFx0aWYgKCB0eXBlb2YgZGF0YVR5cGVPclRyYW5zcG9ydCA9PT0gXCJzdHJpbmdcIiAmJlxuXHRcdFx0XHQhc2Vla2luZ1RyYW5zcG9ydCAmJiAhaW5zcGVjdGVkWyBkYXRhVHlwZU9yVHJhbnNwb3J0IF0gKSB7XG5cblx0XHRcdFx0b3B0aW9ucy5kYXRhVHlwZXMudW5zaGlmdCggZGF0YVR5cGVPclRyYW5zcG9ydCApO1xuXHRcdFx0XHRpbnNwZWN0KCBkYXRhVHlwZU9yVHJhbnNwb3J0ICk7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH0gZWxzZSBpZiAoIHNlZWtpbmdUcmFuc3BvcnQgKSB7XG5cdFx0XHRcdHJldHVybiAhKCBzZWxlY3RlZCA9IGRhdGFUeXBlT3JUcmFuc3BvcnQgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdFx0cmV0dXJuIHNlbGVjdGVkO1xuXHR9XG5cblx0cmV0dXJuIGluc3BlY3QoIG9wdGlvbnMuZGF0YVR5cGVzWyAwIF0gKSB8fCAhaW5zcGVjdGVkWyBcIipcIiBdICYmIGluc3BlY3QoIFwiKlwiICk7XG59XG5cbi8vIEEgc3BlY2lhbCBleHRlbmQgZm9yIGFqYXggb3B0aW9uc1xuLy8gdGhhdCB0YWtlcyBcImZsYXRcIiBvcHRpb25zIChub3QgdG8gYmUgZGVlcCBleHRlbmRlZClcbi8vIEZpeGVzICM5ODg3XG5mdW5jdGlvbiBhamF4RXh0ZW5kKCB0YXJnZXQsIHNyYyApIHtcblx0dmFyIGtleSwgZGVlcCxcblx0XHRmbGF0T3B0aW9ucyA9IGpRdWVyeS5hamF4U2V0dGluZ3MuZmxhdE9wdGlvbnMgfHwge307XG5cblx0Zm9yICgga2V5IGluIHNyYyApIHtcblx0XHRpZiAoIHNyY1sga2V5IF0gIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdCggZmxhdE9wdGlvbnNbIGtleSBdID8gdGFyZ2V0IDogKCBkZWVwIHx8ICggZGVlcCA9IHt9ICkgKSApWyBrZXkgXSA9IHNyY1sga2V5IF07XG5cdFx0fVxuXHR9XG5cdGlmICggZGVlcCApIHtcblx0XHRqUXVlcnkuZXh0ZW5kKCB0cnVlLCB0YXJnZXQsIGRlZXAgKTtcblx0fVxuXG5cdHJldHVybiB0YXJnZXQ7XG59XG5cbi8qIEhhbmRsZXMgcmVzcG9uc2VzIHRvIGFuIGFqYXggcmVxdWVzdDpcbiAqIC0gZmluZHMgdGhlIHJpZ2h0IGRhdGFUeXBlIChtZWRpYXRlcyBiZXR3ZWVuIGNvbnRlbnQtdHlwZSBhbmQgZXhwZWN0ZWQgZGF0YVR5cGUpXG4gKiAtIHJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcgcmVzcG9uc2VcbiAqL1xuZnVuY3Rpb24gYWpheEhhbmRsZVJlc3BvbnNlcyggcywganFYSFIsIHJlc3BvbnNlcyApIHtcblxuXHR2YXIgY3QsIHR5cGUsIGZpbmFsRGF0YVR5cGUsIGZpcnN0RGF0YVR5cGUsXG5cdFx0Y29udGVudHMgPSBzLmNvbnRlbnRzLFxuXHRcdGRhdGFUeXBlcyA9IHMuZGF0YVR5cGVzO1xuXG5cdC8vIFJlbW92ZSBhdXRvIGRhdGFUeXBlIGFuZCBnZXQgY29udGVudC10eXBlIGluIHRoZSBwcm9jZXNzXG5cdHdoaWxlICggZGF0YVR5cGVzWyAwIF0gPT09IFwiKlwiICkge1xuXHRcdGRhdGFUeXBlcy5zaGlmdCgpO1xuXHRcdGlmICggY3QgPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdGN0ID0gcy5taW1lVHlwZSB8fCBqcVhIUi5nZXRSZXNwb25zZUhlYWRlciggXCJDb250ZW50LVR5cGVcIiApO1xuXHRcdH1cblx0fVxuXG5cdC8vIENoZWNrIGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIGtub3duIGNvbnRlbnQtdHlwZVxuXHRpZiAoIGN0ICkge1xuXHRcdGZvciAoIHR5cGUgaW4gY29udGVudHMgKSB7XG5cdFx0XHRpZiAoIGNvbnRlbnRzWyB0eXBlIF0gJiYgY29udGVudHNbIHR5cGUgXS50ZXN0KCBjdCApICkge1xuXHRcdFx0XHRkYXRhVHlwZXMudW5zaGlmdCggdHlwZSApO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBDaGVjayB0byBzZWUgaWYgd2UgaGF2ZSBhIHJlc3BvbnNlIGZvciB0aGUgZXhwZWN0ZWQgZGF0YVR5cGVcblx0aWYgKCBkYXRhVHlwZXNbIDAgXSBpbiByZXNwb25zZXMgKSB7XG5cdFx0ZmluYWxEYXRhVHlwZSA9IGRhdGFUeXBlc1sgMCBdO1xuXHR9IGVsc2Uge1xuXG5cdFx0Ly8gVHJ5IGNvbnZlcnRpYmxlIGRhdGFUeXBlc1xuXHRcdGZvciAoIHR5cGUgaW4gcmVzcG9uc2VzICkge1xuXHRcdFx0aWYgKCAhZGF0YVR5cGVzWyAwIF0gfHwgcy5jb252ZXJ0ZXJzWyB0eXBlICsgXCIgXCIgKyBkYXRhVHlwZXNbIDAgXSBdICkge1xuXHRcdFx0XHRmaW5hbERhdGFUeXBlID0gdHlwZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRpZiAoICFmaXJzdERhdGFUeXBlICkge1xuXHRcdFx0XHRmaXJzdERhdGFUeXBlID0gdHlwZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBPciBqdXN0IHVzZSBmaXJzdCBvbmVcblx0XHRmaW5hbERhdGFUeXBlID0gZmluYWxEYXRhVHlwZSB8fCBmaXJzdERhdGFUeXBlO1xuXHR9XG5cblx0Ly8gSWYgd2UgZm91bmQgYSBkYXRhVHlwZVxuXHQvLyBXZSBhZGQgdGhlIGRhdGFUeXBlIHRvIHRoZSBsaXN0IGlmIG5lZWRlZFxuXHQvLyBhbmQgcmV0dXJuIHRoZSBjb3JyZXNwb25kaW5nIHJlc3BvbnNlXG5cdGlmICggZmluYWxEYXRhVHlwZSApIHtcblx0XHRpZiAoIGZpbmFsRGF0YVR5cGUgIT09IGRhdGFUeXBlc1sgMCBdICkge1xuXHRcdFx0ZGF0YVR5cGVzLnVuc2hpZnQoIGZpbmFsRGF0YVR5cGUgKTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3BvbnNlc1sgZmluYWxEYXRhVHlwZSBdO1xuXHR9XG59XG5cbi8qIENoYWluIGNvbnZlcnNpb25zIGdpdmVuIHRoZSByZXF1ZXN0IGFuZCB0aGUgb3JpZ2luYWwgcmVzcG9uc2VcbiAqIEFsc28gc2V0cyB0aGUgcmVzcG9uc2VYWFggZmllbGRzIG9uIHRoZSBqcVhIUiBpbnN0YW5jZVxuICovXG5mdW5jdGlvbiBhamF4Q29udmVydCggcywgcmVzcG9uc2UsIGpxWEhSLCBpc1N1Y2Nlc3MgKSB7XG5cdHZhciBjb252MiwgY3VycmVudCwgY29udiwgdG1wLCBwcmV2LFxuXHRcdGNvbnZlcnRlcnMgPSB7fSxcblxuXHRcdC8vIFdvcmsgd2l0aCBhIGNvcHkgb2YgZGF0YVR5cGVzIGluIGNhc2Ugd2UgbmVlZCB0byBtb2RpZnkgaXQgZm9yIGNvbnZlcnNpb25cblx0XHRkYXRhVHlwZXMgPSBzLmRhdGFUeXBlcy5zbGljZSgpO1xuXG5cdC8vIENyZWF0ZSBjb252ZXJ0ZXJzIG1hcCB3aXRoIGxvd2VyY2FzZWQga2V5c1xuXHRpZiAoIGRhdGFUeXBlc1sgMSBdICkge1xuXHRcdGZvciAoIGNvbnYgaW4gcy5jb252ZXJ0ZXJzICkge1xuXHRcdFx0Y29udmVydGVyc1sgY29udi50b0xvd2VyQ2FzZSgpIF0gPSBzLmNvbnZlcnRlcnNbIGNvbnYgXTtcblx0XHR9XG5cdH1cblxuXHRjdXJyZW50ID0gZGF0YVR5cGVzLnNoaWZ0KCk7XG5cblx0Ly8gQ29udmVydCB0byBlYWNoIHNlcXVlbnRpYWwgZGF0YVR5cGVcblx0d2hpbGUgKCBjdXJyZW50ICkge1xuXG5cdFx0aWYgKCBzLnJlc3BvbnNlRmllbGRzWyBjdXJyZW50IF0gKSB7XG5cdFx0XHRqcVhIUlsgcy5yZXNwb25zZUZpZWxkc1sgY3VycmVudCBdIF0gPSByZXNwb25zZTtcblx0XHR9XG5cblx0XHQvLyBBcHBseSB0aGUgZGF0YUZpbHRlciBpZiBwcm92aWRlZFxuXHRcdGlmICggIXByZXYgJiYgaXNTdWNjZXNzICYmIHMuZGF0YUZpbHRlciApIHtcblx0XHRcdHJlc3BvbnNlID0gcy5kYXRhRmlsdGVyKCByZXNwb25zZSwgcy5kYXRhVHlwZSApO1xuXHRcdH1cblxuXHRcdHByZXYgPSBjdXJyZW50O1xuXHRcdGN1cnJlbnQgPSBkYXRhVHlwZXMuc2hpZnQoKTtcblxuXHRcdGlmICggY3VycmVudCApIHtcblxuXHRcdC8vIFRoZXJlJ3Mgb25seSB3b3JrIHRvIGRvIGlmIGN1cnJlbnQgZGF0YVR5cGUgaXMgbm9uLWF1dG9cblx0XHRcdGlmICggY3VycmVudCA9PT0gXCIqXCIgKSB7XG5cblx0XHRcdFx0Y3VycmVudCA9IHByZXY7XG5cblx0XHRcdC8vIENvbnZlcnQgcmVzcG9uc2UgaWYgcHJldiBkYXRhVHlwZSBpcyBub24tYXV0byBhbmQgZGlmZmVycyBmcm9tIGN1cnJlbnRcblx0XHRcdH0gZWxzZSBpZiAoIHByZXYgIT09IFwiKlwiICYmIHByZXYgIT09IGN1cnJlbnQgKSB7XG5cblx0XHRcdFx0Ly8gU2VlayBhIGRpcmVjdCBjb252ZXJ0ZXJcblx0XHRcdFx0Y29udiA9IGNvbnZlcnRlcnNbIHByZXYgKyBcIiBcIiArIGN1cnJlbnQgXSB8fCBjb252ZXJ0ZXJzWyBcIiogXCIgKyBjdXJyZW50IF07XG5cblx0XHRcdFx0Ly8gSWYgbm9uZSBmb3VuZCwgc2VlayBhIHBhaXJcblx0XHRcdFx0aWYgKCAhY29udiApIHtcblx0XHRcdFx0XHRmb3IgKCBjb252MiBpbiBjb252ZXJ0ZXJzICkge1xuXG5cdFx0XHRcdFx0XHQvLyBJZiBjb252MiBvdXRwdXRzIGN1cnJlbnRcblx0XHRcdFx0XHRcdHRtcCA9IGNvbnYyLnNwbGl0KCBcIiBcIiApO1xuXHRcdFx0XHRcdFx0aWYgKCB0bXBbIDEgXSA9PT0gY3VycmVudCApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBJZiBwcmV2IGNhbiBiZSBjb252ZXJ0ZWQgdG8gYWNjZXB0ZWQgaW5wdXRcblx0XHRcdFx0XHRcdFx0Y29udiA9IGNvbnZlcnRlcnNbIHByZXYgKyBcIiBcIiArIHRtcFsgMCBdIF0gfHxcblx0XHRcdFx0XHRcdFx0XHRjb252ZXJ0ZXJzWyBcIiogXCIgKyB0bXBbIDAgXSBdO1xuXHRcdFx0XHRcdFx0XHRpZiAoIGNvbnYgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBDb25kZW5zZSBlcXVpdmFsZW5jZSBjb252ZXJ0ZXJzXG5cdFx0XHRcdFx0XHRcdFx0aWYgKCBjb252ID09PSB0cnVlICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29udiA9IGNvbnZlcnRlcnNbIGNvbnYyIF07XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBPdGhlcndpc2UsIGluc2VydCB0aGUgaW50ZXJtZWRpYXRlIGRhdGFUeXBlXG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmICggY29udmVydGVyc1sgY29udjIgXSAhPT0gdHJ1ZSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdGN1cnJlbnQgPSB0bXBbIDAgXTtcblx0XHRcdFx0XHRcdFx0XHRcdGRhdGFUeXBlcy51bnNoaWZ0KCB0bXBbIDEgXSApO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEFwcGx5IGNvbnZlcnRlciAoaWYgbm90IGFuIGVxdWl2YWxlbmNlKVxuXHRcdFx0XHRpZiAoIGNvbnYgIT09IHRydWUgKSB7XG5cblx0XHRcdFx0XHQvLyBVbmxlc3MgZXJyb3JzIGFyZSBhbGxvd2VkIHRvIGJ1YmJsZSwgY2F0Y2ggYW5kIHJldHVybiB0aGVtXG5cdFx0XHRcdFx0aWYgKCBjb252ICYmIHMudGhyb3dzICkge1xuXHRcdFx0XHRcdFx0cmVzcG9uc2UgPSBjb252KCByZXNwb25zZSApO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHRyZXNwb25zZSA9IGNvbnYoIHJlc3BvbnNlICk7XG5cdFx0XHRcdFx0XHR9IGNhdGNoICggZSApIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdFx0XHRzdGF0ZTogXCJwYXJzZXJlcnJvclwiLFxuXHRcdFx0XHRcdFx0XHRcdGVycm9yOiBjb252ID8gZSA6IFwiTm8gY29udmVyc2lvbiBmcm9tIFwiICsgcHJldiArIFwiIHRvIFwiICsgY3VycmVudFxuXHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiB7IHN0YXRlOiBcInN1Y2Nlc3NcIiwgZGF0YTogcmVzcG9uc2UgfTtcbn1cblxualF1ZXJ5LmV4dGVuZCgge1xuXG5cdC8vIENvdW50ZXIgZm9yIGhvbGRpbmcgdGhlIG51bWJlciBvZiBhY3RpdmUgcXVlcmllc1xuXHRhY3RpdmU6IDAsXG5cblx0Ly8gTGFzdC1Nb2RpZmllZCBoZWFkZXIgY2FjaGUgZm9yIG5leHQgcmVxdWVzdFxuXHRsYXN0TW9kaWZpZWQ6IHt9LFxuXHRldGFnOiB7fSxcblxuXHRhamF4U2V0dGluZ3M6IHtcblx0XHR1cmw6IGxvY2F0aW9uLmhyZWYsXG5cdFx0dHlwZTogXCJHRVRcIixcblx0XHRpc0xvY2FsOiBybG9jYWxQcm90b2NvbC50ZXN0KCBsb2NhdGlvbi5wcm90b2NvbCApLFxuXHRcdGdsb2JhbDogdHJ1ZSxcblx0XHRwcm9jZXNzRGF0YTogdHJ1ZSxcblx0XHRhc3luYzogdHJ1ZSxcblx0XHRjb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7IGNoYXJzZXQ9VVRGLThcIixcblx0XHQvKlxuXHRcdHRpbWVvdXQ6IDAsXG5cdFx0ZGF0YTogbnVsbCxcblx0XHRkYXRhVHlwZTogbnVsbCxcblx0XHR1c2VybmFtZTogbnVsbCxcblx0XHRwYXNzd29yZDogbnVsbCxcblx0XHRjYWNoZTogbnVsbCxcblx0XHR0aHJvd3M6IGZhbHNlLFxuXHRcdHRyYWRpdGlvbmFsOiBmYWxzZSxcblx0XHRoZWFkZXJzOiB7fSxcblx0XHQqL1xuXG5cdFx0YWNjZXB0czoge1xuXHRcdFx0XCIqXCI6IGFsbFR5cGVzLFxuXHRcdFx0dGV4dDogXCJ0ZXh0L3BsYWluXCIsXG5cdFx0XHRodG1sOiBcInRleHQvaHRtbFwiLFxuXHRcdFx0eG1sOiBcImFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWxcIixcblx0XHRcdGpzb246IFwiYXBwbGljYXRpb24vanNvbiwgdGV4dC9qYXZhc2NyaXB0XCJcblx0XHR9LFxuXG5cdFx0Y29udGVudHM6IHtcblx0XHRcdHhtbDogL1xcYnhtbFxcYi8sXG5cdFx0XHRodG1sOiAvXFxiaHRtbC8sXG5cdFx0XHRqc29uOiAvXFxianNvblxcYi9cblx0XHR9LFxuXG5cdFx0cmVzcG9uc2VGaWVsZHM6IHtcblx0XHRcdHhtbDogXCJyZXNwb25zZVhNTFwiLFxuXHRcdFx0dGV4dDogXCJyZXNwb25zZVRleHRcIixcblx0XHRcdGpzb246IFwicmVzcG9uc2VKU09OXCJcblx0XHR9LFxuXG5cdFx0Ly8gRGF0YSBjb252ZXJ0ZXJzXG5cdFx0Ly8gS2V5cyBzZXBhcmF0ZSBzb3VyY2UgKG9yIGNhdGNoYWxsIFwiKlwiKSBhbmQgZGVzdGluYXRpb24gdHlwZXMgd2l0aCBhIHNpbmdsZSBzcGFjZVxuXHRcdGNvbnZlcnRlcnM6IHtcblxuXHRcdFx0Ly8gQ29udmVydCBhbnl0aGluZyB0byB0ZXh0XG5cdFx0XHRcIiogdGV4dFwiOiBTdHJpbmcsXG5cblx0XHRcdC8vIFRleHQgdG8gaHRtbCAodHJ1ZSA9IG5vIHRyYW5zZm9ybWF0aW9uKVxuXHRcdFx0XCJ0ZXh0IGh0bWxcIjogdHJ1ZSxcblxuXHRcdFx0Ly8gRXZhbHVhdGUgdGV4dCBhcyBhIGpzb24gZXhwcmVzc2lvblxuXHRcdFx0XCJ0ZXh0IGpzb25cIjogalF1ZXJ5LnBhcnNlSlNPTixcblxuXHRcdFx0Ly8gUGFyc2UgdGV4dCBhcyB4bWxcblx0XHRcdFwidGV4dCB4bWxcIjogalF1ZXJ5LnBhcnNlWE1MXG5cdFx0fSxcblxuXHRcdC8vIEZvciBvcHRpb25zIHRoYXQgc2hvdWxkbid0IGJlIGRlZXAgZXh0ZW5kZWQ6XG5cdFx0Ly8geW91IGNhbiBhZGQgeW91ciBvd24gY3VzdG9tIG9wdGlvbnMgaGVyZSBpZlxuXHRcdC8vIGFuZCB3aGVuIHlvdSBjcmVhdGUgb25lIHRoYXQgc2hvdWxkbid0IGJlXG5cdFx0Ly8gZGVlcCBleHRlbmRlZCAoc2VlIGFqYXhFeHRlbmQpXG5cdFx0ZmxhdE9wdGlvbnM6IHtcblx0XHRcdHVybDogdHJ1ZSxcblx0XHRcdGNvbnRleHQ6IHRydWVcblx0XHR9XG5cdH0sXG5cblx0Ly8gQ3JlYXRlcyBhIGZ1bGwgZmxlZGdlZCBzZXR0aW5ncyBvYmplY3QgaW50byB0YXJnZXRcblx0Ly8gd2l0aCBib3RoIGFqYXhTZXR0aW5ncyBhbmQgc2V0dGluZ3MgZmllbGRzLlxuXHQvLyBJZiB0YXJnZXQgaXMgb21pdHRlZCwgd3JpdGVzIGludG8gYWpheFNldHRpbmdzLlxuXHRhamF4U2V0dXA6IGZ1bmN0aW9uKCB0YXJnZXQsIHNldHRpbmdzICkge1xuXHRcdHJldHVybiBzZXR0aW5ncyA/XG5cblx0XHRcdC8vIEJ1aWxkaW5nIGEgc2V0dGluZ3Mgb2JqZWN0XG5cdFx0XHRhamF4RXh0ZW5kKCBhamF4RXh0ZW5kKCB0YXJnZXQsIGpRdWVyeS5hamF4U2V0dGluZ3MgKSwgc2V0dGluZ3MgKSA6XG5cblx0XHRcdC8vIEV4dGVuZGluZyBhamF4U2V0dGluZ3Ncblx0XHRcdGFqYXhFeHRlbmQoIGpRdWVyeS5hamF4U2V0dGluZ3MsIHRhcmdldCApO1xuXHR9LFxuXG5cdGFqYXhQcmVmaWx0ZXI6IGFkZFRvUHJlZmlsdGVyc09yVHJhbnNwb3J0cyggcHJlZmlsdGVycyApLFxuXHRhamF4VHJhbnNwb3J0OiBhZGRUb1ByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHRyYW5zcG9ydHMgKSxcblxuXHQvLyBNYWluIG1ldGhvZFxuXHRhamF4OiBmdW5jdGlvbiggdXJsLCBvcHRpb25zICkge1xuXG5cdFx0Ly8gSWYgdXJsIGlzIGFuIG9iamVjdCwgc2ltdWxhdGUgcHJlLTEuNSBzaWduYXR1cmVcblx0XHRpZiAoIHR5cGVvZiB1cmwgPT09IFwib2JqZWN0XCIgKSB7XG5cdFx0XHRvcHRpb25zID0gdXJsO1xuXHRcdFx0dXJsID0gdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdC8vIEZvcmNlIG9wdGlvbnMgdG8gYmUgYW4gb2JqZWN0XG5cdFx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cblx0XHR2YXIgdHJhbnNwb3J0LFxuXG5cdFx0XHQvLyBVUkwgd2l0aG91dCBhbnRpLWNhY2hlIHBhcmFtXG5cdFx0XHRjYWNoZVVSTCxcblxuXHRcdFx0Ly8gUmVzcG9uc2UgaGVhZGVyc1xuXHRcdFx0cmVzcG9uc2VIZWFkZXJzU3RyaW5nLFxuXHRcdFx0cmVzcG9uc2VIZWFkZXJzLFxuXG5cdFx0XHQvLyB0aW1lb3V0IGhhbmRsZVxuXHRcdFx0dGltZW91dFRpbWVyLFxuXG5cdFx0XHQvLyBVcmwgY2xlYW51cCB2YXJcblx0XHRcdHVybEFuY2hvcixcblxuXHRcdFx0Ly8gVG8ga25vdyBpZiBnbG9iYWwgZXZlbnRzIGFyZSB0byBiZSBkaXNwYXRjaGVkXG5cdFx0XHRmaXJlR2xvYmFscyxcblxuXHRcdFx0Ly8gTG9vcCB2YXJpYWJsZVxuXHRcdFx0aSxcblxuXHRcdFx0Ly8gQ3JlYXRlIHRoZSBmaW5hbCBvcHRpb25zIG9iamVjdFxuXHRcdFx0cyA9IGpRdWVyeS5hamF4U2V0dXAoIHt9LCBvcHRpb25zICksXG5cblx0XHRcdC8vIENhbGxiYWNrcyBjb250ZXh0XG5cdFx0XHRjYWxsYmFja0NvbnRleHQgPSBzLmNvbnRleHQgfHwgcyxcblxuXHRcdFx0Ly8gQ29udGV4dCBmb3IgZ2xvYmFsIGV2ZW50cyBpcyBjYWxsYmFja0NvbnRleHQgaWYgaXQgaXMgYSBET00gbm9kZSBvciBqUXVlcnkgY29sbGVjdGlvblxuXHRcdFx0Z2xvYmFsRXZlbnRDb250ZXh0ID0gcy5jb250ZXh0ICYmXG5cdFx0XHRcdCggY2FsbGJhY2tDb250ZXh0Lm5vZGVUeXBlIHx8IGNhbGxiYWNrQ29udGV4dC5qcXVlcnkgKSA/XG5cdFx0XHRcdFx0alF1ZXJ5KCBjYWxsYmFja0NvbnRleHQgKSA6XG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LFxuXG5cdFx0XHQvLyBEZWZlcnJlZHNcblx0XHRcdGRlZmVycmVkID0galF1ZXJ5LkRlZmVycmVkKCksXG5cdFx0XHRjb21wbGV0ZURlZmVycmVkID0galF1ZXJ5LkNhbGxiYWNrcyggXCJvbmNlIG1lbW9yeVwiICksXG5cblx0XHRcdC8vIFN0YXR1cy1kZXBlbmRlbnQgY2FsbGJhY2tzXG5cdFx0XHRzdGF0dXNDb2RlID0gcy5zdGF0dXNDb2RlIHx8IHt9LFxuXG5cdFx0XHQvLyBIZWFkZXJzICh0aGV5IGFyZSBzZW50IGFsbCBhdCBvbmNlKVxuXHRcdFx0cmVxdWVzdEhlYWRlcnMgPSB7fSxcblx0XHRcdHJlcXVlc3RIZWFkZXJzTmFtZXMgPSB7fSxcblxuXHRcdFx0Ly8gVGhlIGpxWEhSIHN0YXRlXG5cdFx0XHRzdGF0ZSA9IDAsXG5cblx0XHRcdC8vIERlZmF1bHQgYWJvcnQgbWVzc2FnZVxuXHRcdFx0c3RyQWJvcnQgPSBcImNhbmNlbGVkXCIsXG5cblx0XHRcdC8vIEZha2UgeGhyXG5cdFx0XHRqcVhIUiA9IHtcblx0XHRcdFx0cmVhZHlTdGF0ZTogMCxcblxuXHRcdFx0XHQvLyBCdWlsZHMgaGVhZGVycyBoYXNodGFibGUgaWYgbmVlZGVkXG5cdFx0XHRcdGdldFJlc3BvbnNlSGVhZGVyOiBmdW5jdGlvbigga2V5ICkge1xuXHRcdFx0XHRcdHZhciBtYXRjaDtcblx0XHRcdFx0XHRpZiAoIHN0YXRlID09PSAyICkge1xuXHRcdFx0XHRcdFx0aWYgKCAhcmVzcG9uc2VIZWFkZXJzICkge1xuXHRcdFx0XHRcdFx0XHRyZXNwb25zZUhlYWRlcnMgPSB7fTtcblx0XHRcdFx0XHRcdFx0d2hpbGUgKCAoIG1hdGNoID0gcmhlYWRlcnMuZXhlYyggcmVzcG9uc2VIZWFkZXJzU3RyaW5nICkgKSApIHtcblx0XHRcdFx0XHRcdFx0XHRyZXNwb25zZUhlYWRlcnNbIG1hdGNoWyAxIF0udG9Mb3dlckNhc2UoKSBdID0gbWF0Y2hbIDIgXTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0bWF0Y2ggPSByZXNwb25zZUhlYWRlcnNbIGtleS50b0xvd2VyQ2FzZSgpIF07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiBtYXRjaCA9PSBudWxsID8gbnVsbCA6IG1hdGNoO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIFJhdyBzdHJpbmdcblx0XHRcdFx0Z2V0QWxsUmVzcG9uc2VIZWFkZXJzOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRyZXR1cm4gc3RhdGUgPT09IDIgPyByZXNwb25zZUhlYWRlcnNTdHJpbmcgOiBudWxsO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIENhY2hlcyB0aGUgaGVhZGVyXG5cdFx0XHRcdHNldFJlcXVlc3RIZWFkZXI6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHtcblx0XHRcdFx0XHR2YXIgbG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRcdFx0aWYgKCAhc3RhdGUgKSB7XG5cdFx0XHRcdFx0XHRuYW1lID0gcmVxdWVzdEhlYWRlcnNOYW1lc1sgbG5hbWUgXSA9IHJlcXVlc3RIZWFkZXJzTmFtZXNbIGxuYW1lIF0gfHwgbmFtZTtcblx0XHRcdFx0XHRcdHJlcXVlc3RIZWFkZXJzWyBuYW1lIF0gPSB2YWx1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gT3ZlcnJpZGVzIHJlc3BvbnNlIGNvbnRlbnQtdHlwZSBoZWFkZXJcblx0XHRcdFx0b3ZlcnJpZGVNaW1lVHlwZTogZnVuY3Rpb24oIHR5cGUgKSB7XG5cdFx0XHRcdFx0aWYgKCAhc3RhdGUgKSB7XG5cdFx0XHRcdFx0XHRzLm1pbWVUeXBlID0gdHlwZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gU3RhdHVzLWRlcGVuZGVudCBjYWxsYmFja3Ncblx0XHRcdFx0c3RhdHVzQ29kZTogZnVuY3Rpb24oIG1hcCApIHtcblx0XHRcdFx0XHR2YXIgY29kZTtcblx0XHRcdFx0XHRpZiAoIG1hcCApIHtcblx0XHRcdFx0XHRcdGlmICggc3RhdGUgPCAyICkge1xuXHRcdFx0XHRcdFx0XHRmb3IgKCBjb2RlIGluIG1hcCApIHtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIExhenktYWRkIHRoZSBuZXcgY2FsbGJhY2sgaW4gYSB3YXkgdGhhdCBwcmVzZXJ2ZXMgb2xkIG9uZXNcblx0XHRcdFx0XHRcdFx0XHRzdGF0dXNDb2RlWyBjb2RlIF0gPSBbIHN0YXR1c0NvZGVbIGNvZGUgXSwgbWFwWyBjb2RlIF0gXTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBFeGVjdXRlIHRoZSBhcHByb3ByaWF0ZSBjYWxsYmFja3Ncblx0XHRcdFx0XHRcdFx0anFYSFIuYWx3YXlzKCBtYXBbIGpxWEhSLnN0YXR1cyBdICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIENhbmNlbCB0aGUgcmVxdWVzdFxuXHRcdFx0XHRhYm9ydDogZnVuY3Rpb24oIHN0YXR1c1RleHQgKSB7XG5cdFx0XHRcdFx0dmFyIGZpbmFsVGV4dCA9IHN0YXR1c1RleHQgfHwgc3RyQWJvcnQ7XG5cdFx0XHRcdFx0aWYgKCB0cmFuc3BvcnQgKSB7XG5cdFx0XHRcdFx0XHR0cmFuc3BvcnQuYWJvcnQoIGZpbmFsVGV4dCApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRkb25lKCAwLCBmaW5hbFRleHQgKTtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fVxuXHRcdFx0fTtcblxuXHRcdC8vIEF0dGFjaCBkZWZlcnJlZHNcblx0XHRkZWZlcnJlZC5wcm9taXNlKCBqcVhIUiApLmNvbXBsZXRlID0gY29tcGxldGVEZWZlcnJlZC5hZGQ7XG5cdFx0anFYSFIuc3VjY2VzcyA9IGpxWEhSLmRvbmU7XG5cdFx0anFYSFIuZXJyb3IgPSBqcVhIUi5mYWlsO1xuXG5cdFx0Ly8gUmVtb3ZlIGhhc2ggY2hhcmFjdGVyICgjNzUzMTogYW5kIHN0cmluZyBwcm9tb3Rpb24pXG5cdFx0Ly8gQWRkIHByb3RvY29sIGlmIG5vdCBwcm92aWRlZCAocHJlZmlsdGVycyBtaWdodCBleHBlY3QgaXQpXG5cdFx0Ly8gSGFuZGxlIGZhbHN5IHVybCBpbiB0aGUgc2V0dGluZ3Mgb2JqZWN0ICgjMTAwOTM6IGNvbnNpc3RlbmN5IHdpdGggb2xkIHNpZ25hdHVyZSlcblx0XHQvLyBXZSBhbHNvIHVzZSB0aGUgdXJsIHBhcmFtZXRlciBpZiBhdmFpbGFibGVcblx0XHRzLnVybCA9ICggKCB1cmwgfHwgcy51cmwgfHwgbG9jYXRpb24uaHJlZiApICsgXCJcIiApLnJlcGxhY2UoIHJoYXNoLCBcIlwiIClcblx0XHRcdC5yZXBsYWNlKCBycHJvdG9jb2wsIGxvY2F0aW9uLnByb3RvY29sICsgXCIvL1wiICk7XG5cblx0XHQvLyBBbGlhcyBtZXRob2Qgb3B0aW9uIHRvIHR5cGUgYXMgcGVyIHRpY2tldCAjMTIwMDRcblx0XHRzLnR5cGUgPSBvcHRpb25zLm1ldGhvZCB8fCBvcHRpb25zLnR5cGUgfHwgcy5tZXRob2QgfHwgcy50eXBlO1xuXG5cdFx0Ly8gRXh0cmFjdCBkYXRhVHlwZXMgbGlzdFxuXHRcdHMuZGF0YVR5cGVzID0galF1ZXJ5LnRyaW0oIHMuZGF0YVR5cGUgfHwgXCIqXCIgKS50b0xvd2VyQ2FzZSgpLm1hdGNoKCBybm90d2hpdGUgKSB8fCBbIFwiXCIgXTtcblxuXHRcdC8vIEEgY3Jvc3MtZG9tYWluIHJlcXVlc3QgaXMgaW4gb3JkZXIgd2hlbiB0aGUgb3JpZ2luIGRvZXNuJ3QgbWF0Y2ggdGhlIGN1cnJlbnQgb3JpZ2luLlxuXHRcdGlmICggcy5jcm9zc0RvbWFpbiA9PSBudWxsICkge1xuXHRcdFx0dXJsQW5jaG9yID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJhXCIgKTtcblxuXHRcdFx0Ly8gU3VwcG9ydDogSUU4LTExK1xuXHRcdFx0Ly8gSUUgdGhyb3dzIGV4Y2VwdGlvbiBpZiB1cmwgaXMgbWFsZm9ybWVkLCBlLmcuIGh0dHA6Ly9leGFtcGxlLmNvbTo4MHgvXG5cdFx0XHR0cnkge1xuXHRcdFx0XHR1cmxBbmNob3IuaHJlZiA9IHMudXJsO1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFOC0xMStcblx0XHRcdFx0Ly8gQW5jaG9yJ3MgaG9zdCBwcm9wZXJ0eSBpc24ndCBjb3JyZWN0bHkgc2V0IHdoZW4gcy51cmwgaXMgcmVsYXRpdmVcblx0XHRcdFx0dXJsQW5jaG9yLmhyZWYgPSB1cmxBbmNob3IuaHJlZjtcblx0XHRcdFx0cy5jcm9zc0RvbWFpbiA9IG9yaWdpbkFuY2hvci5wcm90b2NvbCArIFwiLy9cIiArIG9yaWdpbkFuY2hvci5ob3N0ICE9PVxuXHRcdFx0XHRcdHVybEFuY2hvci5wcm90b2NvbCArIFwiLy9cIiArIHVybEFuY2hvci5ob3N0O1xuXHRcdFx0fSBjYXRjaCAoIGUgKSB7XG5cblx0XHRcdFx0Ly8gSWYgdGhlcmUgaXMgYW4gZXJyb3IgcGFyc2luZyB0aGUgVVJMLCBhc3N1bWUgaXQgaXMgY3Jvc3NEb21haW4sXG5cdFx0XHRcdC8vIGl0IGNhbiBiZSByZWplY3RlZCBieSB0aGUgdHJhbnNwb3J0IGlmIGl0IGlzIGludmFsaWRcblx0XHRcdFx0cy5jcm9zc0RvbWFpbiA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ29udmVydCBkYXRhIGlmIG5vdCBhbHJlYWR5IGEgc3RyaW5nXG5cdFx0aWYgKCBzLmRhdGEgJiYgcy5wcm9jZXNzRGF0YSAmJiB0eXBlb2Ygcy5kYXRhICE9PSBcInN0cmluZ1wiICkge1xuXHRcdFx0cy5kYXRhID0galF1ZXJ5LnBhcmFtKCBzLmRhdGEsIHMudHJhZGl0aW9uYWwgKTtcblx0XHR9XG5cblx0XHQvLyBBcHBseSBwcmVmaWx0ZXJzXG5cdFx0aW5zcGVjdFByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHByZWZpbHRlcnMsIHMsIG9wdGlvbnMsIGpxWEhSICk7XG5cblx0XHQvLyBJZiByZXF1ZXN0IHdhcyBhYm9ydGVkIGluc2lkZSBhIHByZWZpbHRlciwgc3RvcCB0aGVyZVxuXHRcdGlmICggc3RhdGUgPT09IDIgKSB7XG5cdFx0XHRyZXR1cm4ganFYSFI7XG5cdFx0fVxuXG5cdFx0Ly8gV2UgY2FuIGZpcmUgZ2xvYmFsIGV2ZW50cyBhcyBvZiBub3cgaWYgYXNrZWQgdG9cblx0XHQvLyBEb24ndCBmaXJlIGV2ZW50cyBpZiBqUXVlcnkuZXZlbnQgaXMgdW5kZWZpbmVkIGluIGFuIEFNRC11c2FnZSBzY2VuYXJpbyAoIzE1MTE4KVxuXHRcdGZpcmVHbG9iYWxzID0galF1ZXJ5LmV2ZW50ICYmIHMuZ2xvYmFsO1xuXG5cdFx0Ly8gV2F0Y2ggZm9yIGEgbmV3IHNldCBvZiByZXF1ZXN0c1xuXHRcdGlmICggZmlyZUdsb2JhbHMgJiYgalF1ZXJ5LmFjdGl2ZSsrID09PSAwICkge1xuXHRcdFx0alF1ZXJ5LmV2ZW50LnRyaWdnZXIoIFwiYWpheFN0YXJ0XCIgKTtcblx0XHR9XG5cblx0XHQvLyBVcHBlcmNhc2UgdGhlIHR5cGVcblx0XHRzLnR5cGUgPSBzLnR5cGUudG9VcHBlckNhc2UoKTtcblxuXHRcdC8vIERldGVybWluZSBpZiByZXF1ZXN0IGhhcyBjb250ZW50XG5cdFx0cy5oYXNDb250ZW50ID0gIXJub0NvbnRlbnQudGVzdCggcy50eXBlICk7XG5cblx0XHQvLyBTYXZlIHRoZSBVUkwgaW4gY2FzZSB3ZSdyZSB0b3lpbmcgd2l0aCB0aGUgSWYtTW9kaWZpZWQtU2luY2Vcblx0XHQvLyBhbmQvb3IgSWYtTm9uZS1NYXRjaCBoZWFkZXIgbGF0ZXIgb25cblx0XHRjYWNoZVVSTCA9IHMudXJsO1xuXG5cdFx0Ly8gTW9yZSBvcHRpb25zIGhhbmRsaW5nIGZvciByZXF1ZXN0cyB3aXRoIG5vIGNvbnRlbnRcblx0XHRpZiAoICFzLmhhc0NvbnRlbnQgKSB7XG5cblx0XHRcdC8vIElmIGRhdGEgaXMgYXZhaWxhYmxlLCBhcHBlbmQgZGF0YSB0byB1cmxcblx0XHRcdGlmICggcy5kYXRhICkge1xuXHRcdFx0XHRjYWNoZVVSTCA9ICggcy51cmwgKz0gKCBycXVlcnkudGVzdCggY2FjaGVVUkwgKSA/IFwiJlwiIDogXCI/XCIgKSArIHMuZGF0YSApO1xuXG5cdFx0XHRcdC8vICM5NjgyOiByZW1vdmUgZGF0YSBzbyB0aGF0IGl0J3Mgbm90IHVzZWQgaW4gYW4gZXZlbnR1YWwgcmV0cnlcblx0XHRcdFx0ZGVsZXRlIHMuZGF0YTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQWRkIGFudGktY2FjaGUgaW4gdXJsIGlmIG5lZWRlZFxuXHRcdFx0aWYgKCBzLmNhY2hlID09PSBmYWxzZSApIHtcblx0XHRcdFx0cy51cmwgPSBydHMudGVzdCggY2FjaGVVUkwgKSA/XG5cblx0XHRcdFx0XHQvLyBJZiB0aGVyZSBpcyBhbHJlYWR5IGEgJ18nIHBhcmFtZXRlciwgc2V0IGl0cyB2YWx1ZVxuXHRcdFx0XHRcdGNhY2hlVVJMLnJlcGxhY2UoIHJ0cywgXCIkMV89XCIgKyBub25jZSsrICkgOlxuXG5cdFx0XHRcdFx0Ly8gT3RoZXJ3aXNlIGFkZCBvbmUgdG8gdGhlIGVuZFxuXHRcdFx0XHRcdGNhY2hlVVJMICsgKCBycXVlcnkudGVzdCggY2FjaGVVUkwgKSA/IFwiJlwiIDogXCI/XCIgKSArIFwiXz1cIiArIG5vbmNlKys7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gU2V0IHRoZSBJZi1Nb2RpZmllZC1TaW5jZSBhbmQvb3IgSWYtTm9uZS1NYXRjaCBoZWFkZXIsIGlmIGluIGlmTW9kaWZpZWQgbW9kZS5cblx0XHRpZiAoIHMuaWZNb2RpZmllZCApIHtcblx0XHRcdGlmICggalF1ZXJ5Lmxhc3RNb2RpZmllZFsgY2FjaGVVUkwgXSApIHtcblx0XHRcdFx0anFYSFIuc2V0UmVxdWVzdEhlYWRlciggXCJJZi1Nb2RpZmllZC1TaW5jZVwiLCBqUXVlcnkubGFzdE1vZGlmaWVkWyBjYWNoZVVSTCBdICk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIGpRdWVyeS5ldGFnWyBjYWNoZVVSTCBdICkge1xuXHRcdFx0XHRqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCBcIklmLU5vbmUtTWF0Y2hcIiwgalF1ZXJ5LmV0YWdbIGNhY2hlVVJMIF0gKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBTZXQgdGhlIGNvcnJlY3QgaGVhZGVyLCBpZiBkYXRhIGlzIGJlaW5nIHNlbnRcblx0XHRpZiAoIHMuZGF0YSAmJiBzLmhhc0NvbnRlbnQgJiYgcy5jb250ZW50VHlwZSAhPT0gZmFsc2UgfHwgb3B0aW9ucy5jb250ZW50VHlwZSApIHtcblx0XHRcdGpxWEhSLnNldFJlcXVlc3RIZWFkZXIoIFwiQ29udGVudC1UeXBlXCIsIHMuY29udGVudFR5cGUgKTtcblx0XHR9XG5cblx0XHQvLyBTZXQgdGhlIEFjY2VwdHMgaGVhZGVyIGZvciB0aGUgc2VydmVyLCBkZXBlbmRpbmcgb24gdGhlIGRhdGFUeXBlXG5cdFx0anFYSFIuc2V0UmVxdWVzdEhlYWRlcihcblx0XHRcdFwiQWNjZXB0XCIsXG5cdFx0XHRzLmRhdGFUeXBlc1sgMCBdICYmIHMuYWNjZXB0c1sgcy5kYXRhVHlwZXNbIDAgXSBdID9cblx0XHRcdFx0cy5hY2NlcHRzWyBzLmRhdGFUeXBlc1sgMCBdIF0gK1xuXHRcdFx0XHRcdCggcy5kYXRhVHlwZXNbIDAgXSAhPT0gXCIqXCIgPyBcIiwgXCIgKyBhbGxUeXBlcyArIFwiOyBxPTAuMDFcIiA6IFwiXCIgKSA6XG5cdFx0XHRcdHMuYWNjZXB0c1sgXCIqXCIgXVxuXHRcdCk7XG5cblx0XHQvLyBDaGVjayBmb3IgaGVhZGVycyBvcHRpb25cblx0XHRmb3IgKCBpIGluIHMuaGVhZGVycyApIHtcblx0XHRcdGpxWEhSLnNldFJlcXVlc3RIZWFkZXIoIGksIHMuaGVhZGVyc1sgaSBdICk7XG5cdFx0fVxuXG5cdFx0Ly8gQWxsb3cgY3VzdG9tIGhlYWRlcnMvbWltZXR5cGVzIGFuZCBlYXJseSBhYm9ydFxuXHRcdGlmICggcy5iZWZvcmVTZW5kICYmXG5cdFx0XHQoIHMuYmVmb3JlU2VuZC5jYWxsKCBjYWxsYmFja0NvbnRleHQsIGpxWEhSLCBzICkgPT09IGZhbHNlIHx8IHN0YXRlID09PSAyICkgKSB7XG5cblx0XHRcdC8vIEFib3J0IGlmIG5vdCBkb25lIGFscmVhZHkgYW5kIHJldHVyblxuXHRcdFx0cmV0dXJuIGpxWEhSLmFib3J0KCk7XG5cdFx0fVxuXG5cdFx0Ly8gQWJvcnRpbmcgaXMgbm8gbG9uZ2VyIGEgY2FuY2VsbGF0aW9uXG5cdFx0c3RyQWJvcnQgPSBcImFib3J0XCI7XG5cblx0XHQvLyBJbnN0YWxsIGNhbGxiYWNrcyBvbiBkZWZlcnJlZHNcblx0XHRmb3IgKCBpIGluIHsgc3VjY2VzczogMSwgZXJyb3I6IDEsIGNvbXBsZXRlOiAxIH0gKSB7XG5cdFx0XHRqcVhIUlsgaSBdKCBzWyBpIF0gKTtcblx0XHR9XG5cblx0XHQvLyBHZXQgdHJhbnNwb3J0XG5cdFx0dHJhbnNwb3J0ID0gaW5zcGVjdFByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHRyYW5zcG9ydHMsIHMsIG9wdGlvbnMsIGpxWEhSICk7XG5cblx0XHQvLyBJZiBubyB0cmFuc3BvcnQsIHdlIGF1dG8tYWJvcnRcblx0XHRpZiAoICF0cmFuc3BvcnQgKSB7XG5cdFx0XHRkb25lKCAtMSwgXCJObyBUcmFuc3BvcnRcIiApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRqcVhIUi5yZWFkeVN0YXRlID0gMTtcblxuXHRcdFx0Ly8gU2VuZCBnbG9iYWwgZXZlbnRcblx0XHRcdGlmICggZmlyZUdsb2JhbHMgKSB7XG5cdFx0XHRcdGdsb2JhbEV2ZW50Q29udGV4dC50cmlnZ2VyKCBcImFqYXhTZW5kXCIsIFsganFYSFIsIHMgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBJZiByZXF1ZXN0IHdhcyBhYm9ydGVkIGluc2lkZSBhamF4U2VuZCwgc3RvcCB0aGVyZVxuXHRcdFx0aWYgKCBzdGF0ZSA9PT0gMiApIHtcblx0XHRcdFx0cmV0dXJuIGpxWEhSO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBUaW1lb3V0XG5cdFx0XHRpZiAoIHMuYXN5bmMgJiYgcy50aW1lb3V0ID4gMCApIHtcblx0XHRcdFx0dGltZW91dFRpbWVyID0gd2luZG93LnNldFRpbWVvdXQoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGpxWEhSLmFib3J0KCBcInRpbWVvdXRcIiApO1xuXHRcdFx0XHR9LCBzLnRpbWVvdXQgKTtcblx0XHRcdH1cblxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0c3RhdGUgPSAxO1xuXHRcdFx0XHR0cmFuc3BvcnQuc2VuZCggcmVxdWVzdEhlYWRlcnMsIGRvbmUgKTtcblx0XHRcdH0gY2F0Y2ggKCBlICkge1xuXG5cdFx0XHRcdC8vIFByb3BhZ2F0ZSBleGNlcHRpb24gYXMgZXJyb3IgaWYgbm90IGRvbmVcblx0XHRcdFx0aWYgKCBzdGF0ZSA8IDIgKSB7XG5cdFx0XHRcdFx0ZG9uZSggLTEsIGUgKTtcblxuXHRcdFx0XHQvLyBTaW1wbHkgcmV0aHJvdyBvdGhlcndpc2Vcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0aHJvdyBlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ2FsbGJhY2sgZm9yIHdoZW4gZXZlcnl0aGluZyBpcyBkb25lXG5cdFx0ZnVuY3Rpb24gZG9uZSggc3RhdHVzLCBuYXRpdmVTdGF0dXNUZXh0LCByZXNwb25zZXMsIGhlYWRlcnMgKSB7XG5cdFx0XHR2YXIgaXNTdWNjZXNzLCBzdWNjZXNzLCBlcnJvciwgcmVzcG9uc2UsIG1vZGlmaWVkLFxuXHRcdFx0XHRzdGF0dXNUZXh0ID0gbmF0aXZlU3RhdHVzVGV4dDtcblxuXHRcdFx0Ly8gQ2FsbGVkIG9uY2Vcblx0XHRcdGlmICggc3RhdGUgPT09IDIgKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3RhdGUgaXMgXCJkb25lXCIgbm93XG5cdFx0XHRzdGF0ZSA9IDI7XG5cblx0XHRcdC8vIENsZWFyIHRpbWVvdXQgaWYgaXQgZXhpc3RzXG5cdFx0XHRpZiAoIHRpbWVvdXRUaW1lciApIHtcblx0XHRcdFx0d2luZG93LmNsZWFyVGltZW91dCggdGltZW91dFRpbWVyICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIERlcmVmZXJlbmNlIHRyYW5zcG9ydCBmb3IgZWFybHkgZ2FyYmFnZSBjb2xsZWN0aW9uXG5cdFx0XHQvLyAobm8gbWF0dGVyIGhvdyBsb25nIHRoZSBqcVhIUiBvYmplY3Qgd2lsbCBiZSB1c2VkKVxuXHRcdFx0dHJhbnNwb3J0ID0gdW5kZWZpbmVkO1xuXG5cdFx0XHQvLyBDYWNoZSByZXNwb25zZSBoZWFkZXJzXG5cdFx0XHRyZXNwb25zZUhlYWRlcnNTdHJpbmcgPSBoZWFkZXJzIHx8IFwiXCI7XG5cblx0XHRcdC8vIFNldCByZWFkeVN0YXRlXG5cdFx0XHRqcVhIUi5yZWFkeVN0YXRlID0gc3RhdHVzID4gMCA/IDQgOiAwO1xuXG5cdFx0XHQvLyBEZXRlcm1pbmUgaWYgc3VjY2Vzc2Z1bFxuXHRcdFx0aXNTdWNjZXNzID0gc3RhdHVzID49IDIwMCAmJiBzdGF0dXMgPCAzMDAgfHwgc3RhdHVzID09PSAzMDQ7XG5cblx0XHRcdC8vIEdldCByZXNwb25zZSBkYXRhXG5cdFx0XHRpZiAoIHJlc3BvbnNlcyApIHtcblx0XHRcdFx0cmVzcG9uc2UgPSBhamF4SGFuZGxlUmVzcG9uc2VzKCBzLCBqcVhIUiwgcmVzcG9uc2VzICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENvbnZlcnQgbm8gbWF0dGVyIHdoYXQgKHRoYXQgd2F5IHJlc3BvbnNlWFhYIGZpZWxkcyBhcmUgYWx3YXlzIHNldClcblx0XHRcdHJlc3BvbnNlID0gYWpheENvbnZlcnQoIHMsIHJlc3BvbnNlLCBqcVhIUiwgaXNTdWNjZXNzICk7XG5cblx0XHRcdC8vIElmIHN1Y2Nlc3NmdWwsIGhhbmRsZSB0eXBlIGNoYWluaW5nXG5cdFx0XHRpZiAoIGlzU3VjY2VzcyApIHtcblxuXHRcdFx0XHQvLyBTZXQgdGhlIElmLU1vZGlmaWVkLVNpbmNlIGFuZC9vciBJZi1Ob25lLU1hdGNoIGhlYWRlciwgaWYgaW4gaWZNb2RpZmllZCBtb2RlLlxuXHRcdFx0XHRpZiAoIHMuaWZNb2RpZmllZCApIHtcblx0XHRcdFx0XHRtb2RpZmllZCA9IGpxWEhSLmdldFJlc3BvbnNlSGVhZGVyKCBcIkxhc3QtTW9kaWZpZWRcIiApO1xuXHRcdFx0XHRcdGlmICggbW9kaWZpZWQgKSB7XG5cdFx0XHRcdFx0XHRqUXVlcnkubGFzdE1vZGlmaWVkWyBjYWNoZVVSTCBdID0gbW9kaWZpZWQ7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdG1vZGlmaWVkID0ganFYSFIuZ2V0UmVzcG9uc2VIZWFkZXIoIFwiZXRhZ1wiICk7XG5cdFx0XHRcdFx0aWYgKCBtb2RpZmllZCApIHtcblx0XHRcdFx0XHRcdGpRdWVyeS5ldGFnWyBjYWNoZVVSTCBdID0gbW9kaWZpZWQ7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gaWYgbm8gY29udGVudFxuXHRcdFx0XHRpZiAoIHN0YXR1cyA9PT0gMjA0IHx8IHMudHlwZSA9PT0gXCJIRUFEXCIgKSB7XG5cdFx0XHRcdFx0c3RhdHVzVGV4dCA9IFwibm9jb250ZW50XCI7XG5cblx0XHRcdFx0Ly8gaWYgbm90IG1vZGlmaWVkXG5cdFx0XHRcdH0gZWxzZSBpZiAoIHN0YXR1cyA9PT0gMzA0ICkge1xuXHRcdFx0XHRcdHN0YXR1c1RleHQgPSBcIm5vdG1vZGlmaWVkXCI7XG5cblx0XHRcdFx0Ly8gSWYgd2UgaGF2ZSBkYXRhLCBsZXQncyBjb252ZXJ0IGl0XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0c3RhdHVzVGV4dCA9IHJlc3BvbnNlLnN0YXRlO1xuXHRcdFx0XHRcdHN1Y2Nlc3MgPSByZXNwb25zZS5kYXRhO1xuXHRcdFx0XHRcdGVycm9yID0gcmVzcG9uc2UuZXJyb3I7XG5cdFx0XHRcdFx0aXNTdWNjZXNzID0gIWVycm9yO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdC8vIEV4dHJhY3QgZXJyb3IgZnJvbSBzdGF0dXNUZXh0IGFuZCBub3JtYWxpemUgZm9yIG5vbi1hYm9ydHNcblx0XHRcdFx0ZXJyb3IgPSBzdGF0dXNUZXh0O1xuXHRcdFx0XHRpZiAoIHN0YXR1cyB8fCAhc3RhdHVzVGV4dCApIHtcblx0XHRcdFx0XHRzdGF0dXNUZXh0ID0gXCJlcnJvclwiO1xuXHRcdFx0XHRcdGlmICggc3RhdHVzIDwgMCApIHtcblx0XHRcdFx0XHRcdHN0YXR1cyA9IDA7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIFNldCBkYXRhIGZvciB0aGUgZmFrZSB4aHIgb2JqZWN0XG5cdFx0XHRqcVhIUi5zdGF0dXMgPSBzdGF0dXM7XG5cdFx0XHRqcVhIUi5zdGF0dXNUZXh0ID0gKCBuYXRpdmVTdGF0dXNUZXh0IHx8IHN0YXR1c1RleHQgKSArIFwiXCI7XG5cblx0XHRcdC8vIFN1Y2Nlc3MvRXJyb3Jcblx0XHRcdGlmICggaXNTdWNjZXNzICkge1xuXHRcdFx0XHRkZWZlcnJlZC5yZXNvbHZlV2l0aCggY2FsbGJhY2tDb250ZXh0LCBbIHN1Y2Nlc3MsIHN0YXR1c1RleHQsIGpxWEhSIF0gKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGRlZmVycmVkLnJlamVjdFdpdGgoIGNhbGxiYWNrQ29udGV4dCwgWyBqcVhIUiwgc3RhdHVzVGV4dCwgZXJyb3IgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdGF0dXMtZGVwZW5kZW50IGNhbGxiYWNrc1xuXHRcdFx0anFYSFIuc3RhdHVzQ29kZSggc3RhdHVzQ29kZSApO1xuXHRcdFx0c3RhdHVzQ29kZSA9IHVuZGVmaW5lZDtcblxuXHRcdFx0aWYgKCBmaXJlR2xvYmFscyApIHtcblx0XHRcdFx0Z2xvYmFsRXZlbnRDb250ZXh0LnRyaWdnZXIoIGlzU3VjY2VzcyA/IFwiYWpheFN1Y2Nlc3NcIiA6IFwiYWpheEVycm9yXCIsXG5cdFx0XHRcdFx0WyBqcVhIUiwgcywgaXNTdWNjZXNzID8gc3VjY2VzcyA6IGVycm9yIF0gKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ29tcGxldGVcblx0XHRcdGNvbXBsZXRlRGVmZXJyZWQuZmlyZVdpdGgoIGNhbGxiYWNrQ29udGV4dCwgWyBqcVhIUiwgc3RhdHVzVGV4dCBdICk7XG5cblx0XHRcdGlmICggZmlyZUdsb2JhbHMgKSB7XG5cdFx0XHRcdGdsb2JhbEV2ZW50Q29udGV4dC50cmlnZ2VyKCBcImFqYXhDb21wbGV0ZVwiLCBbIGpxWEhSLCBzIF0gKTtcblxuXHRcdFx0XHQvLyBIYW5kbGUgdGhlIGdsb2JhbCBBSkFYIGNvdW50ZXJcblx0XHRcdFx0aWYgKCAhKCAtLWpRdWVyeS5hY3RpdmUgKSApIHtcblx0XHRcdFx0XHRqUXVlcnkuZXZlbnQudHJpZ2dlciggXCJhamF4U3RvcFwiICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4ganFYSFI7XG5cdH0sXG5cblx0Z2V0SlNPTjogZnVuY3Rpb24oIHVybCwgZGF0YSwgY2FsbGJhY2sgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5nZXQoIHVybCwgZGF0YSwgY2FsbGJhY2ssIFwianNvblwiICk7XG5cdH0sXG5cblx0Z2V0U2NyaXB0OiBmdW5jdGlvbiggdXJsLCBjYWxsYmFjayApIHtcblx0XHRyZXR1cm4galF1ZXJ5LmdldCggdXJsLCB1bmRlZmluZWQsIGNhbGxiYWNrLCBcInNjcmlwdFwiICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmVhY2goIFsgXCJnZXRcIiwgXCJwb3N0XCIgXSwgZnVuY3Rpb24oIGksIG1ldGhvZCApIHtcblx0alF1ZXJ5WyBtZXRob2QgXSA9IGZ1bmN0aW9uKCB1cmwsIGRhdGEsIGNhbGxiYWNrLCB0eXBlICkge1xuXG5cdFx0Ly8gU2hpZnQgYXJndW1lbnRzIGlmIGRhdGEgYXJndW1lbnQgd2FzIG9taXR0ZWRcblx0XHRpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBkYXRhICkgKSB7XG5cdFx0XHR0eXBlID0gdHlwZSB8fCBjYWxsYmFjaztcblx0XHRcdGNhbGxiYWNrID0gZGF0YTtcblx0XHRcdGRhdGEgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0Ly8gVGhlIHVybCBjYW4gYmUgYW4gb3B0aW9ucyBvYmplY3QgKHdoaWNoIHRoZW4gbXVzdCBoYXZlIC51cmwpXG5cdFx0cmV0dXJuIGpRdWVyeS5hamF4KCBqUXVlcnkuZXh0ZW5kKCB7XG5cdFx0XHR1cmw6IHVybCxcblx0XHRcdHR5cGU6IG1ldGhvZCxcblx0XHRcdGRhdGFUeXBlOiB0eXBlLFxuXHRcdFx0ZGF0YTogZGF0YSxcblx0XHRcdHN1Y2Nlc3M6IGNhbGxiYWNrXG5cdFx0fSwgalF1ZXJ5LmlzUGxhaW5PYmplY3QoIHVybCApICYmIHVybCApICk7XG5cdH07XG59ICk7XG5cblxualF1ZXJ5Ll9ldmFsVXJsID0gZnVuY3Rpb24oIHVybCApIHtcblx0cmV0dXJuIGpRdWVyeS5hamF4KCB7XG5cdFx0dXJsOiB1cmwsXG5cblx0XHQvLyBNYWtlIHRoaXMgZXhwbGljaXQsIHNpbmNlIHVzZXIgY2FuIG92ZXJyaWRlIHRoaXMgdGhyb3VnaCBhamF4U2V0dXAgKCMxMTI2NClcblx0XHR0eXBlOiBcIkdFVFwiLFxuXHRcdGRhdGFUeXBlOiBcInNjcmlwdFwiLFxuXHRcdGFzeW5jOiBmYWxzZSxcblx0XHRnbG9iYWw6IGZhbHNlLFxuXHRcdFwidGhyb3dzXCI6IHRydWVcblx0fSApO1xufTtcblxuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdHdyYXBBbGw6IGZ1bmN0aW9uKCBodG1sICkge1xuXHRcdHZhciB3cmFwO1xuXG5cdFx0aWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggaHRtbCApICkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGkgKSB7XG5cdFx0XHRcdGpRdWVyeSggdGhpcyApLndyYXBBbGwoIGh0bWwuY2FsbCggdGhpcywgaSApICk7XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0aWYgKCB0aGlzWyAwIF0gKSB7XG5cblx0XHRcdC8vIFRoZSBlbGVtZW50cyB0byB3cmFwIHRoZSB0YXJnZXQgYXJvdW5kXG5cdFx0XHR3cmFwID0galF1ZXJ5KCBodG1sLCB0aGlzWyAwIF0ub3duZXJEb2N1bWVudCApLmVxKCAwICkuY2xvbmUoIHRydWUgKTtcblxuXHRcdFx0aWYgKCB0aGlzWyAwIF0ucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0d3JhcC5pbnNlcnRCZWZvcmUoIHRoaXNbIDAgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHR3cmFwLm1hcCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHZhciBlbGVtID0gdGhpcztcblxuXHRcdFx0XHR3aGlsZSAoIGVsZW0uZmlyc3RFbGVtZW50Q2hpbGQgKSB7XG5cdFx0XHRcdFx0ZWxlbSA9IGVsZW0uZmlyc3RFbGVtZW50Q2hpbGQ7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gZWxlbTtcblx0XHRcdH0gKS5hcHBlbmQoIHRoaXMgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHR3cmFwSW5uZXI6IGZ1bmN0aW9uKCBodG1sICkge1xuXHRcdGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIGh0bWwgKSApIHtcblx0XHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBpICkge1xuXHRcdFx0XHRqUXVlcnkoIHRoaXMgKS53cmFwSW5uZXIoIGh0bWwuY2FsbCggdGhpcywgaSApICk7XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgc2VsZiA9IGpRdWVyeSggdGhpcyApLFxuXHRcdFx0XHRjb250ZW50cyA9IHNlbGYuY29udGVudHMoKTtcblxuXHRcdFx0aWYgKCBjb250ZW50cy5sZW5ndGggKSB7XG5cdFx0XHRcdGNvbnRlbnRzLndyYXBBbGwoIGh0bWwgKTtcblxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c2VsZi5hcHBlbmQoIGh0bWwgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0d3JhcDogZnVuY3Rpb24oIGh0bWwgKSB7XG5cdFx0dmFyIGlzRnVuY3Rpb24gPSBqUXVlcnkuaXNGdW5jdGlvbiggaHRtbCApO1xuXG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGkgKSB7XG5cdFx0XHRqUXVlcnkoIHRoaXMgKS53cmFwQWxsKCBpc0Z1bmN0aW9uID8gaHRtbC5jYWxsKCB0aGlzLCBpICkgOiBodG1sICk7XG5cdFx0fSApO1xuXHR9LFxuXG5cdHVud3JhcDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMucGFyZW50KCkuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRpZiAoICFqUXVlcnkubm9kZU5hbWUoIHRoaXMsIFwiYm9keVwiICkgKSB7XG5cdFx0XHRcdGpRdWVyeSggdGhpcyApLnJlcGxhY2VXaXRoKCB0aGlzLmNoaWxkTm9kZXMgKTtcblx0XHRcdH1cblx0XHR9ICkuZW5kKCk7XG5cdH1cbn0gKTtcblxuXG5qUXVlcnkuZXhwci5maWx0ZXJzLmhpZGRlbiA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRyZXR1cm4gIWpRdWVyeS5leHByLmZpbHRlcnMudmlzaWJsZSggZWxlbSApO1xufTtcbmpRdWVyeS5leHByLmZpbHRlcnMudmlzaWJsZSA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdC8vIFN1cHBvcnQ6IE9wZXJhIDw9IDEyLjEyXG5cdC8vIE9wZXJhIHJlcG9ydHMgb2Zmc2V0V2lkdGhzIGFuZCBvZmZzZXRIZWlnaHRzIGxlc3MgdGhhbiB6ZXJvIG9uIHNvbWUgZWxlbWVudHNcblx0Ly8gVXNlIE9SIGluc3RlYWQgb2YgQU5EIGFzIHRoZSBlbGVtZW50IGlzIG5vdCB2aXNpYmxlIGlmIGVpdGhlciBpcyB0cnVlXG5cdC8vIFNlZSB0aWNrZXRzICMxMDQwNiBhbmQgIzEzMTMyXG5cdHJldHVybiBlbGVtLm9mZnNldFdpZHRoID4gMCB8fCBlbGVtLm9mZnNldEhlaWdodCA+IDAgfHwgZWxlbS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCA+IDA7XG59O1xuXG5cblxuXG52YXIgcjIwID0gLyUyMC9nLFxuXHRyYnJhY2tldCA9IC9cXFtcXF0kLyxcblx0ckNSTEYgPSAvXFxyP1xcbi9nLFxuXHRyc3VibWl0dGVyVHlwZXMgPSAvXig/OnN1Ym1pdHxidXR0b258aW1hZ2V8cmVzZXR8ZmlsZSkkL2ksXG5cdHJzdWJtaXR0YWJsZSA9IC9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGtleWdlbikvaTtcblxuZnVuY3Rpb24gYnVpbGRQYXJhbXMoIHByZWZpeCwgb2JqLCB0cmFkaXRpb25hbCwgYWRkICkge1xuXHR2YXIgbmFtZTtcblxuXHRpZiAoIGpRdWVyeS5pc0FycmF5KCBvYmogKSApIHtcblxuXHRcdC8vIFNlcmlhbGl6ZSBhcnJheSBpdGVtLlxuXHRcdGpRdWVyeS5lYWNoKCBvYmosIGZ1bmN0aW9uKCBpLCB2ICkge1xuXHRcdFx0aWYgKCB0cmFkaXRpb25hbCB8fCByYnJhY2tldC50ZXN0KCBwcmVmaXggKSApIHtcblxuXHRcdFx0XHQvLyBUcmVhdCBlYWNoIGFycmF5IGl0ZW0gYXMgYSBzY2FsYXIuXG5cdFx0XHRcdGFkZCggcHJlZml4LCB2ICk7XG5cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0Ly8gSXRlbSBpcyBub24tc2NhbGFyIChhcnJheSBvciBvYmplY3QpLCBlbmNvZGUgaXRzIG51bWVyaWMgaW5kZXguXG5cdFx0XHRcdGJ1aWxkUGFyYW1zKFxuXHRcdFx0XHRcdHByZWZpeCArIFwiW1wiICsgKCB0eXBlb2YgdiA9PT0gXCJvYmplY3RcIiAmJiB2ICE9IG51bGwgPyBpIDogXCJcIiApICsgXCJdXCIsXG5cdFx0XHRcdFx0dixcblx0XHRcdFx0XHR0cmFkaXRpb25hbCxcblx0XHRcdFx0XHRhZGRcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9ICk7XG5cblx0fSBlbHNlIGlmICggIXRyYWRpdGlvbmFsICYmIGpRdWVyeS50eXBlKCBvYmogKSA9PT0gXCJvYmplY3RcIiApIHtcblxuXHRcdC8vIFNlcmlhbGl6ZSBvYmplY3QgaXRlbS5cblx0XHRmb3IgKCBuYW1lIGluIG9iaiApIHtcblx0XHRcdGJ1aWxkUGFyYW1zKCBwcmVmaXggKyBcIltcIiArIG5hbWUgKyBcIl1cIiwgb2JqWyBuYW1lIF0sIHRyYWRpdGlvbmFsLCBhZGQgKTtcblx0XHR9XG5cblx0fSBlbHNlIHtcblxuXHRcdC8vIFNlcmlhbGl6ZSBzY2FsYXIgaXRlbS5cblx0XHRhZGQoIHByZWZpeCwgb2JqICk7XG5cdH1cbn1cblxuLy8gU2VyaWFsaXplIGFuIGFycmF5IG9mIGZvcm0gZWxlbWVudHMgb3IgYSBzZXQgb2Zcbi8vIGtleS92YWx1ZXMgaW50byBhIHF1ZXJ5IHN0cmluZ1xualF1ZXJ5LnBhcmFtID0gZnVuY3Rpb24oIGEsIHRyYWRpdGlvbmFsICkge1xuXHR2YXIgcHJlZml4LFxuXHRcdHMgPSBbXSxcblx0XHRhZGQgPSBmdW5jdGlvbigga2V5LCB2YWx1ZSApIHtcblxuXHRcdFx0Ly8gSWYgdmFsdWUgaXMgYSBmdW5jdGlvbiwgaW52b2tlIGl0IGFuZCByZXR1cm4gaXRzIHZhbHVlXG5cdFx0XHR2YWx1ZSA9IGpRdWVyeS5pc0Z1bmN0aW9uKCB2YWx1ZSApID8gdmFsdWUoKSA6ICggdmFsdWUgPT0gbnVsbCA/IFwiXCIgOiB2YWx1ZSApO1xuXHRcdFx0c1sgcy5sZW5ndGggXSA9IGVuY29kZVVSSUNvbXBvbmVudCgga2V5ICkgKyBcIj1cIiArIGVuY29kZVVSSUNvbXBvbmVudCggdmFsdWUgKTtcblx0XHR9O1xuXG5cdC8vIFNldCB0cmFkaXRpb25hbCB0byB0cnVlIGZvciBqUXVlcnkgPD0gMS4zLjIgYmVoYXZpb3IuXG5cdGlmICggdHJhZGl0aW9uYWwgPT09IHVuZGVmaW5lZCApIHtcblx0XHR0cmFkaXRpb25hbCA9IGpRdWVyeS5hamF4U2V0dGluZ3MgJiYgalF1ZXJ5LmFqYXhTZXR0aW5ncy50cmFkaXRpb25hbDtcblx0fVxuXG5cdC8vIElmIGFuIGFycmF5IHdhcyBwYXNzZWQgaW4sIGFzc3VtZSB0aGF0IGl0IGlzIGFuIGFycmF5IG9mIGZvcm0gZWxlbWVudHMuXG5cdGlmICggalF1ZXJ5LmlzQXJyYXkoIGEgKSB8fCAoIGEuanF1ZXJ5ICYmICFqUXVlcnkuaXNQbGFpbk9iamVjdCggYSApICkgKSB7XG5cblx0XHQvLyBTZXJpYWxpemUgdGhlIGZvcm0gZWxlbWVudHNcblx0XHRqUXVlcnkuZWFjaCggYSwgZnVuY3Rpb24oKSB7XG5cdFx0XHRhZGQoIHRoaXMubmFtZSwgdGhpcy52YWx1ZSApO1xuXHRcdH0gKTtcblxuXHR9IGVsc2Uge1xuXG5cdFx0Ly8gSWYgdHJhZGl0aW9uYWwsIGVuY29kZSB0aGUgXCJvbGRcIiB3YXkgKHRoZSB3YXkgMS4zLjIgb3Igb2xkZXJcblx0XHQvLyBkaWQgaXQpLCBvdGhlcndpc2UgZW5jb2RlIHBhcmFtcyByZWN1cnNpdmVseS5cblx0XHRmb3IgKCBwcmVmaXggaW4gYSApIHtcblx0XHRcdGJ1aWxkUGFyYW1zKCBwcmVmaXgsIGFbIHByZWZpeCBdLCB0cmFkaXRpb25hbCwgYWRkICk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gUmV0dXJuIHRoZSByZXN1bHRpbmcgc2VyaWFsaXphdGlvblxuXHRyZXR1cm4gcy5qb2luKCBcIiZcIiApLnJlcGxhY2UoIHIyMCwgXCIrXCIgKTtcbn07XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0c2VyaWFsaXplOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4galF1ZXJ5LnBhcmFtKCB0aGlzLnNlcmlhbGl6ZUFycmF5KCkgKTtcblx0fSxcblx0c2VyaWFsaXplQXJyYXk6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLm1hcCggZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8vIENhbiBhZGQgcHJvcEhvb2sgZm9yIFwiZWxlbWVudHNcIiB0byBmaWx0ZXIgb3IgYWRkIGZvcm0gZWxlbWVudHNcblx0XHRcdHZhciBlbGVtZW50cyA9IGpRdWVyeS5wcm9wKCB0aGlzLCBcImVsZW1lbnRzXCIgKTtcblx0XHRcdHJldHVybiBlbGVtZW50cyA/IGpRdWVyeS5tYWtlQXJyYXkoIGVsZW1lbnRzICkgOiB0aGlzO1xuXHRcdH0gKVxuXHRcdC5maWx0ZXIoIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHR5cGUgPSB0aGlzLnR5cGU7XG5cblx0XHRcdC8vIFVzZSAuaXMoIFwiOmRpc2FibGVkXCIgKSBzbyB0aGF0IGZpZWxkc2V0W2Rpc2FibGVkXSB3b3Jrc1xuXHRcdFx0cmV0dXJuIHRoaXMubmFtZSAmJiAhalF1ZXJ5KCB0aGlzICkuaXMoIFwiOmRpc2FibGVkXCIgKSAmJlxuXHRcdFx0XHRyc3VibWl0dGFibGUudGVzdCggdGhpcy5ub2RlTmFtZSApICYmICFyc3VibWl0dGVyVHlwZXMudGVzdCggdHlwZSApICYmXG5cdFx0XHRcdCggdGhpcy5jaGVja2VkIHx8ICFyY2hlY2thYmxlVHlwZS50ZXN0KCB0eXBlICkgKTtcblx0XHR9IClcblx0XHQubWFwKCBmdW5jdGlvbiggaSwgZWxlbSApIHtcblx0XHRcdHZhciB2YWwgPSBqUXVlcnkoIHRoaXMgKS52YWwoKTtcblxuXHRcdFx0cmV0dXJuIHZhbCA9PSBudWxsID9cblx0XHRcdFx0bnVsbCA6XG5cdFx0XHRcdGpRdWVyeS5pc0FycmF5KCB2YWwgKSA/XG5cdFx0XHRcdFx0alF1ZXJ5Lm1hcCggdmFsLCBmdW5jdGlvbiggdmFsICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHsgbmFtZTogZWxlbS5uYW1lLCB2YWx1ZTogdmFsLnJlcGxhY2UoIHJDUkxGLCBcIlxcclxcblwiICkgfTtcblx0XHRcdFx0XHR9ICkgOlxuXHRcdFx0XHRcdHsgbmFtZTogZWxlbS5uYW1lLCB2YWx1ZTogdmFsLnJlcGxhY2UoIHJDUkxGLCBcIlxcclxcblwiICkgfTtcblx0XHR9ICkuZ2V0KCk7XG5cdH1cbn0gKTtcblxuXG5qUXVlcnkuYWpheFNldHRpbmdzLnhociA9IGZ1bmN0aW9uKCkge1xuXHR0cnkge1xuXHRcdHJldHVybiBuZXcgd2luZG93LlhNTEh0dHBSZXF1ZXN0KCk7XG5cdH0gY2F0Y2ggKCBlICkge31cbn07XG5cbnZhciB4aHJTdWNjZXNzU3RhdHVzID0ge1xuXG5cdFx0Ly8gRmlsZSBwcm90b2NvbCBhbHdheXMgeWllbGRzIHN0YXR1cyBjb2RlIDAsIGFzc3VtZSAyMDBcblx0XHQwOiAyMDAsXG5cblx0XHQvLyBTdXBwb3J0OiBJRTlcblx0XHQvLyAjMTQ1MDogc29tZXRpbWVzIElFIHJldHVybnMgMTIyMyB3aGVuIGl0IHNob3VsZCBiZSAyMDRcblx0XHQxMjIzOiAyMDRcblx0fSxcblx0eGhyU3VwcG9ydGVkID0galF1ZXJ5LmFqYXhTZXR0aW5ncy54aHIoKTtcblxuc3VwcG9ydC5jb3JzID0gISF4aHJTdXBwb3J0ZWQgJiYgKCBcIndpdGhDcmVkZW50aWFsc1wiIGluIHhoclN1cHBvcnRlZCApO1xuc3VwcG9ydC5hamF4ID0geGhyU3VwcG9ydGVkID0gISF4aHJTdXBwb3J0ZWQ7XG5cbmpRdWVyeS5hamF4VHJhbnNwb3J0KCBmdW5jdGlvbiggb3B0aW9ucyApIHtcblx0dmFyIGNhbGxiYWNrLCBlcnJvckNhbGxiYWNrO1xuXG5cdC8vIENyb3NzIGRvbWFpbiBvbmx5IGFsbG93ZWQgaWYgc3VwcG9ydGVkIHRocm91Z2ggWE1MSHR0cFJlcXVlc3Rcblx0aWYgKCBzdXBwb3J0LmNvcnMgfHwgeGhyU3VwcG9ydGVkICYmICFvcHRpb25zLmNyb3NzRG9tYWluICkge1xuXHRcdHJldHVybiB7XG5cdFx0XHRzZW5kOiBmdW5jdGlvbiggaGVhZGVycywgY29tcGxldGUgKSB7XG5cdFx0XHRcdHZhciBpLFxuXHRcdFx0XHRcdHhociA9IG9wdGlvbnMueGhyKCk7XG5cblx0XHRcdFx0eGhyLm9wZW4oXG5cdFx0XHRcdFx0b3B0aW9ucy50eXBlLFxuXHRcdFx0XHRcdG9wdGlvbnMudXJsLFxuXHRcdFx0XHRcdG9wdGlvbnMuYXN5bmMsXG5cdFx0XHRcdFx0b3B0aW9ucy51c2VybmFtZSxcblx0XHRcdFx0XHRvcHRpb25zLnBhc3N3b3JkXG5cdFx0XHRcdCk7XG5cblx0XHRcdFx0Ly8gQXBwbHkgY3VzdG9tIGZpZWxkcyBpZiBwcm92aWRlZFxuXHRcdFx0XHRpZiAoIG9wdGlvbnMueGhyRmllbGRzICkge1xuXHRcdFx0XHRcdGZvciAoIGkgaW4gb3B0aW9ucy54aHJGaWVsZHMgKSB7XG5cdFx0XHRcdFx0XHR4aHJbIGkgXSA9IG9wdGlvbnMueGhyRmllbGRzWyBpIF07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gT3ZlcnJpZGUgbWltZSB0eXBlIGlmIG5lZWRlZFxuXHRcdFx0XHRpZiAoIG9wdGlvbnMubWltZVR5cGUgJiYgeGhyLm92ZXJyaWRlTWltZVR5cGUgKSB7XG5cdFx0XHRcdFx0eGhyLm92ZXJyaWRlTWltZVR5cGUoIG9wdGlvbnMubWltZVR5cGUgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFgtUmVxdWVzdGVkLVdpdGggaGVhZGVyXG5cdFx0XHRcdC8vIEZvciBjcm9zcy1kb21haW4gcmVxdWVzdHMsIHNlZWluZyBhcyBjb25kaXRpb25zIGZvciBhIHByZWZsaWdodCBhcmVcblx0XHRcdFx0Ly8gYWtpbiB0byBhIGppZ3NhdyBwdXp6bGUsIHdlIHNpbXBseSBuZXZlciBzZXQgaXQgdG8gYmUgc3VyZS5cblx0XHRcdFx0Ly8gKGl0IGNhbiBhbHdheXMgYmUgc2V0IG9uIGEgcGVyLXJlcXVlc3QgYmFzaXMgb3IgZXZlbiB1c2luZyBhamF4U2V0dXApXG5cdFx0XHRcdC8vIEZvciBzYW1lLWRvbWFpbiByZXF1ZXN0cywgd29uJ3QgY2hhbmdlIGhlYWRlciBpZiBhbHJlYWR5IHByb3ZpZGVkLlxuXHRcdFx0XHRpZiAoICFvcHRpb25zLmNyb3NzRG9tYWluICYmICFoZWFkZXJzWyBcIlgtUmVxdWVzdGVkLVdpdGhcIiBdICkge1xuXHRcdFx0XHRcdGhlYWRlcnNbIFwiWC1SZXF1ZXN0ZWQtV2l0aFwiIF0gPSBcIlhNTEh0dHBSZXF1ZXN0XCI7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBTZXQgaGVhZGVyc1xuXHRcdFx0XHRmb3IgKCBpIGluIGhlYWRlcnMgKSB7XG5cdFx0XHRcdFx0eGhyLnNldFJlcXVlc3RIZWFkZXIoIGksIGhlYWRlcnNbIGkgXSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQ2FsbGJhY2tcblx0XHRcdFx0Y2FsbGJhY2sgPSBmdW5jdGlvbiggdHlwZSApIHtcblx0XHRcdFx0XHRyZXR1cm4gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRpZiAoIGNhbGxiYWNrICkge1xuXHRcdFx0XHRcdFx0XHRjYWxsYmFjayA9IGVycm9yQ2FsbGJhY2sgPSB4aHIub25sb2FkID1cblx0XHRcdFx0XHRcdFx0XHR4aHIub25lcnJvciA9IHhoci5vbmFib3J0ID0geGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IG51bGw7XG5cblx0XHRcdFx0XHRcdFx0aWYgKCB0eXBlID09PSBcImFib3J0XCIgKSB7XG5cdFx0XHRcdFx0XHRcdFx0eGhyLmFib3J0KCk7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoIHR5cGUgPT09IFwiZXJyb3JcIiApIHtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFOVxuXHRcdFx0XHRcdFx0XHRcdC8vIE9uIGEgbWFudWFsIG5hdGl2ZSBhYm9ydCwgSUU5IHRocm93c1xuXHRcdFx0XHRcdFx0XHRcdC8vIGVycm9ycyBvbiBhbnkgcHJvcGVydHkgYWNjZXNzIHRoYXQgaXMgbm90IHJlYWR5U3RhdGVcblx0XHRcdFx0XHRcdFx0XHRpZiAoIHR5cGVvZiB4aHIuc3RhdHVzICE9PSBcIm51bWJlclwiICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29tcGxldGUoIDAsIFwiZXJyb3JcIiApO1xuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb21wbGV0ZShcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBGaWxlOiBwcm90b2NvbCBhbHdheXMgeWllbGRzIHN0YXR1cyAwOyBzZWUgIzg2MDUsICMxNDIwN1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR4aHIuc3RhdHVzLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR4aHIuc3RhdHVzVGV4dFxuXHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29tcGxldGUoXG5cdFx0XHRcdFx0XHRcdFx0XHR4aHJTdWNjZXNzU3RhdHVzWyB4aHIuc3RhdHVzIF0gfHwgeGhyLnN0YXR1cyxcblx0XHRcdFx0XHRcdFx0XHRcdHhoci5zdGF0dXNUZXh0LFxuXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRTkgb25seVxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gSUU5IGhhcyBubyBYSFIyIGJ1dCB0aHJvd3Mgb24gYmluYXJ5ICh0cmFjLTExNDI2KVxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gRm9yIFhIUjIgbm9uLXRleHQsIGxldCB0aGUgY2FsbGVyIGhhbmRsZSBpdCAoZ2gtMjQ5OClcblx0XHRcdFx0XHRcdFx0XHRcdCggeGhyLnJlc3BvbnNlVHlwZSB8fCBcInRleHRcIiApICE9PSBcInRleHRcIiAgfHxcblx0XHRcdFx0XHRcdFx0XHRcdHR5cGVvZiB4aHIucmVzcG9uc2VUZXh0ICE9PSBcInN0cmluZ1wiID9cblx0XHRcdFx0XHRcdFx0XHRcdFx0eyBiaW5hcnk6IHhoci5yZXNwb25zZSB9IDpcblx0XHRcdFx0XHRcdFx0XHRcdFx0eyB0ZXh0OiB4aHIucmVzcG9uc2VUZXh0IH0sXG5cdFx0XHRcdFx0XHRcdFx0XHR4aHIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKClcblx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fTtcblxuXHRcdFx0XHQvLyBMaXN0ZW4gdG8gZXZlbnRzXG5cdFx0XHRcdHhoci5vbmxvYWQgPSBjYWxsYmFjaygpO1xuXHRcdFx0XHRlcnJvckNhbGxiYWNrID0geGhyLm9uZXJyb3IgPSBjYWxsYmFjayggXCJlcnJvclwiICk7XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogSUU5XG5cdFx0XHRcdC8vIFVzZSBvbnJlYWR5c3RhdGVjaGFuZ2UgdG8gcmVwbGFjZSBvbmFib3J0XG5cdFx0XHRcdC8vIHRvIGhhbmRsZSB1bmNhdWdodCBhYm9ydHNcblx0XHRcdFx0aWYgKCB4aHIub25hYm9ydCAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdHhoci5vbmFib3J0ID0gZXJyb3JDYWxsYmFjaztcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKSB7XG5cblx0XHRcdFx0XHRcdC8vIENoZWNrIHJlYWR5U3RhdGUgYmVmb3JlIHRpbWVvdXQgYXMgaXQgY2hhbmdlc1xuXHRcdFx0XHRcdFx0aWYgKCB4aHIucmVhZHlTdGF0ZSA9PT0gNCApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBBbGxvdyBvbmVycm9yIHRvIGJlIGNhbGxlZCBmaXJzdCxcblx0XHRcdFx0XHRcdFx0Ly8gYnV0IHRoYXQgd2lsbCBub3QgaGFuZGxlIGEgbmF0aXZlIGFib3J0XG5cdFx0XHRcdFx0XHRcdC8vIEFsc28sIHNhdmUgZXJyb3JDYWxsYmFjayB0byBhIHZhcmlhYmxlXG5cdFx0XHRcdFx0XHRcdC8vIGFzIHhoci5vbmVycm9yIGNhbm5vdCBiZSBhY2Nlc3NlZFxuXHRcdFx0XHRcdFx0XHR3aW5kb3cuc2V0VGltZW91dCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKCBjYWxsYmFjayApIHtcblx0XHRcdFx0XHRcdFx0XHRcdGVycm9yQ2FsbGJhY2soKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQ3JlYXRlIHRoZSBhYm9ydCBjYWxsYmFja1xuXHRcdFx0XHRjYWxsYmFjayA9IGNhbGxiYWNrKCBcImFib3J0XCIgKTtcblxuXHRcdFx0XHR0cnkge1xuXG5cdFx0XHRcdFx0Ly8gRG8gc2VuZCB0aGUgcmVxdWVzdCAodGhpcyBtYXkgcmFpc2UgYW4gZXhjZXB0aW9uKVxuXHRcdFx0XHRcdHhoci5zZW5kKCBvcHRpb25zLmhhc0NvbnRlbnQgJiYgb3B0aW9ucy5kYXRhIHx8IG51bGwgKTtcblx0XHRcdFx0fSBjYXRjaCAoIGUgKSB7XG5cblx0XHRcdFx0XHQvLyAjMTQ2ODM6IE9ubHkgcmV0aHJvdyBpZiB0aGlzIGhhc24ndCBiZWVuIG5vdGlmaWVkIGFzIGFuIGVycm9yIHlldFxuXHRcdFx0XHRcdGlmICggY2FsbGJhY2sgKSB7XG5cdFx0XHRcdFx0XHR0aHJvdyBlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSxcblxuXHRcdFx0YWJvcnQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoIGNhbGxiYWNrICkge1xuXHRcdFx0XHRcdGNhbGxiYWNrKCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXHR9XG59ICk7XG5cblxuXG5cbi8vIEluc3RhbGwgc2NyaXB0IGRhdGFUeXBlXG5qUXVlcnkuYWpheFNldHVwKCB7XG5cdGFjY2VwdHM6IHtcblx0XHRzY3JpcHQ6IFwidGV4dC9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9qYXZhc2NyaXB0LCBcIiArXG5cdFx0XHRcImFwcGxpY2F0aW9uL2VjbWFzY3JpcHQsIGFwcGxpY2F0aW9uL3gtZWNtYXNjcmlwdFwiXG5cdH0sXG5cdGNvbnRlbnRzOiB7XG5cdFx0c2NyaXB0OiAvXFxiKD86amF2YXxlY21hKXNjcmlwdFxcYi9cblx0fSxcblx0Y29udmVydGVyczoge1xuXHRcdFwidGV4dCBzY3JpcHRcIjogZnVuY3Rpb24oIHRleHQgKSB7XG5cdFx0XHRqUXVlcnkuZ2xvYmFsRXZhbCggdGV4dCApO1xuXHRcdFx0cmV0dXJuIHRleHQ7XG5cdFx0fVxuXHR9XG59ICk7XG5cbi8vIEhhbmRsZSBjYWNoZSdzIHNwZWNpYWwgY2FzZSBhbmQgY3Jvc3NEb21haW5cbmpRdWVyeS5hamF4UHJlZmlsdGVyKCBcInNjcmlwdFwiLCBmdW5jdGlvbiggcyApIHtcblx0aWYgKCBzLmNhY2hlID09PSB1bmRlZmluZWQgKSB7XG5cdFx0cy5jYWNoZSA9IGZhbHNlO1xuXHR9XG5cdGlmICggcy5jcm9zc0RvbWFpbiApIHtcblx0XHRzLnR5cGUgPSBcIkdFVFwiO1xuXHR9XG59ICk7XG5cbi8vIEJpbmQgc2NyaXB0IHRhZyBoYWNrIHRyYW5zcG9ydFxualF1ZXJ5LmFqYXhUcmFuc3BvcnQoIFwic2NyaXB0XCIsIGZ1bmN0aW9uKCBzICkge1xuXG5cdC8vIFRoaXMgdHJhbnNwb3J0IG9ubHkgZGVhbHMgd2l0aCBjcm9zcyBkb21haW4gcmVxdWVzdHNcblx0aWYgKCBzLmNyb3NzRG9tYWluICkge1xuXHRcdHZhciBzY3JpcHQsIGNhbGxiYWNrO1xuXHRcdHJldHVybiB7XG5cdFx0XHRzZW5kOiBmdW5jdGlvbiggXywgY29tcGxldGUgKSB7XG5cdFx0XHRcdHNjcmlwdCA9IGpRdWVyeSggXCI8c2NyaXB0PlwiICkucHJvcCgge1xuXHRcdFx0XHRcdGNoYXJzZXQ6IHMuc2NyaXB0Q2hhcnNldCxcblx0XHRcdFx0XHRzcmM6IHMudXJsXG5cdFx0XHRcdH0gKS5vbihcblx0XHRcdFx0XHRcImxvYWQgZXJyb3JcIixcblx0XHRcdFx0XHRjYWxsYmFjayA9IGZ1bmN0aW9uKCBldnQgKSB7XG5cdFx0XHRcdFx0XHRzY3JpcHQucmVtb3ZlKCk7XG5cdFx0XHRcdFx0XHRjYWxsYmFjayA9IG51bGw7XG5cdFx0XHRcdFx0XHRpZiAoIGV2dCApIHtcblx0XHRcdFx0XHRcdFx0Y29tcGxldGUoIGV2dC50eXBlID09PSBcImVycm9yXCIgPyA0MDQgOiAyMDAsIGV2dC50eXBlICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdC8vIFVzZSBuYXRpdmUgRE9NIG1hbmlwdWxhdGlvbiB0byBhdm9pZCBvdXIgZG9tTWFuaXAgQUpBWCB0cmlja2VyeVxuXHRcdFx0XHRkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKCBzY3JpcHRbIDAgXSApO1xuXHRcdFx0fSxcblx0XHRcdGFib3J0OiBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCBjYWxsYmFjayApIHtcblx0XHRcdFx0XHRjYWxsYmFjaygpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxufSApO1xuXG5cblxuXG52YXIgb2xkQ2FsbGJhY2tzID0gW10sXG5cdHJqc29ucCA9IC8oPSlcXD8oPz0mfCQpfFxcP1xcPy87XG5cbi8vIERlZmF1bHQganNvbnAgc2V0dGluZ3NcbmpRdWVyeS5hamF4U2V0dXAoIHtcblx0anNvbnA6IFwiY2FsbGJhY2tcIixcblx0anNvbnBDYWxsYmFjazogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGNhbGxiYWNrID0gb2xkQ2FsbGJhY2tzLnBvcCgpIHx8ICggalF1ZXJ5LmV4cGFuZG8gKyBcIl9cIiArICggbm9uY2UrKyApICk7XG5cdFx0dGhpc1sgY2FsbGJhY2sgXSA9IHRydWU7XG5cdFx0cmV0dXJuIGNhbGxiYWNrO1xuXHR9XG59ICk7XG5cbi8vIERldGVjdCwgbm9ybWFsaXplIG9wdGlvbnMgYW5kIGluc3RhbGwgY2FsbGJhY2tzIGZvciBqc29ucCByZXF1ZXN0c1xualF1ZXJ5LmFqYXhQcmVmaWx0ZXIoIFwianNvbiBqc29ucFwiLCBmdW5jdGlvbiggcywgb3JpZ2luYWxTZXR0aW5ncywganFYSFIgKSB7XG5cblx0dmFyIGNhbGxiYWNrTmFtZSwgb3ZlcndyaXR0ZW4sIHJlc3BvbnNlQ29udGFpbmVyLFxuXHRcdGpzb25Qcm9wID0gcy5qc29ucCAhPT0gZmFsc2UgJiYgKCByanNvbnAudGVzdCggcy51cmwgKSA/XG5cdFx0XHRcInVybFwiIDpcblx0XHRcdHR5cGVvZiBzLmRhdGEgPT09IFwic3RyaW5nXCIgJiZcblx0XHRcdFx0KCBzLmNvbnRlbnRUeXBlIHx8IFwiXCIgKVxuXHRcdFx0XHRcdC5pbmRleE9mKCBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiICkgPT09IDAgJiZcblx0XHRcdFx0cmpzb25wLnRlc3QoIHMuZGF0YSApICYmIFwiZGF0YVwiXG5cdFx0KTtcblxuXHQvLyBIYW5kbGUgaWZmIHRoZSBleHBlY3RlZCBkYXRhIHR5cGUgaXMgXCJqc29ucFwiIG9yIHdlIGhhdmUgYSBwYXJhbWV0ZXIgdG8gc2V0XG5cdGlmICgganNvblByb3AgfHwgcy5kYXRhVHlwZXNbIDAgXSA9PT0gXCJqc29ucFwiICkge1xuXG5cdFx0Ly8gR2V0IGNhbGxiYWNrIG5hbWUsIHJlbWVtYmVyaW5nIHByZWV4aXN0aW5nIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCBpdFxuXHRcdGNhbGxiYWNrTmFtZSA9IHMuanNvbnBDYWxsYmFjayA9IGpRdWVyeS5pc0Z1bmN0aW9uKCBzLmpzb25wQ2FsbGJhY2sgKSA/XG5cdFx0XHRzLmpzb25wQ2FsbGJhY2soKSA6XG5cdFx0XHRzLmpzb25wQ2FsbGJhY2s7XG5cblx0XHQvLyBJbnNlcnQgY2FsbGJhY2sgaW50byB1cmwgb3IgZm9ybSBkYXRhXG5cdFx0aWYgKCBqc29uUHJvcCApIHtcblx0XHRcdHNbIGpzb25Qcm9wIF0gPSBzWyBqc29uUHJvcCBdLnJlcGxhY2UoIHJqc29ucCwgXCIkMVwiICsgY2FsbGJhY2tOYW1lICk7XG5cdFx0fSBlbHNlIGlmICggcy5qc29ucCAhPT0gZmFsc2UgKSB7XG5cdFx0XHRzLnVybCArPSAoIHJxdWVyeS50ZXN0KCBzLnVybCApID8gXCImXCIgOiBcIj9cIiApICsgcy5qc29ucCArIFwiPVwiICsgY2FsbGJhY2tOYW1lO1xuXHRcdH1cblxuXHRcdC8vIFVzZSBkYXRhIGNvbnZlcnRlciB0byByZXRyaWV2ZSBqc29uIGFmdGVyIHNjcmlwdCBleGVjdXRpb25cblx0XHRzLmNvbnZlcnRlcnNbIFwic2NyaXB0IGpzb25cIiBdID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRpZiAoICFyZXNwb25zZUNvbnRhaW5lciApIHtcblx0XHRcdFx0alF1ZXJ5LmVycm9yKCBjYWxsYmFja05hbWUgKyBcIiB3YXMgbm90IGNhbGxlZFwiICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmVzcG9uc2VDb250YWluZXJbIDAgXTtcblx0XHR9O1xuXG5cdFx0Ly8gRm9yY2UganNvbiBkYXRhVHlwZVxuXHRcdHMuZGF0YVR5cGVzWyAwIF0gPSBcImpzb25cIjtcblxuXHRcdC8vIEluc3RhbGwgY2FsbGJhY2tcblx0XHRvdmVyd3JpdHRlbiA9IHdpbmRvd1sgY2FsbGJhY2tOYW1lIF07XG5cdFx0d2luZG93WyBjYWxsYmFja05hbWUgXSA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0cmVzcG9uc2VDb250YWluZXIgPSBhcmd1bWVudHM7XG5cdFx0fTtcblxuXHRcdC8vIENsZWFuLXVwIGZ1bmN0aW9uIChmaXJlcyBhZnRlciBjb252ZXJ0ZXJzKVxuXHRcdGpxWEhSLmFsd2F5cyggZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8vIElmIHByZXZpb3VzIHZhbHVlIGRpZG4ndCBleGlzdCAtIHJlbW92ZSBpdFxuXHRcdFx0aWYgKCBvdmVyd3JpdHRlbiA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRqUXVlcnkoIHdpbmRvdyApLnJlbW92ZVByb3AoIGNhbGxiYWNrTmFtZSApO1xuXG5cdFx0XHQvLyBPdGhlcndpc2UgcmVzdG9yZSBwcmVleGlzdGluZyB2YWx1ZVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0d2luZG93WyBjYWxsYmFja05hbWUgXSA9IG92ZXJ3cml0dGVuO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTYXZlIGJhY2sgYXMgZnJlZVxuXHRcdFx0aWYgKCBzWyBjYWxsYmFja05hbWUgXSApIHtcblxuXHRcdFx0XHQvLyBNYWtlIHN1cmUgdGhhdCByZS11c2luZyB0aGUgb3B0aW9ucyBkb2Vzbid0IHNjcmV3IHRoaW5ncyBhcm91bmRcblx0XHRcdFx0cy5qc29ucENhbGxiYWNrID0gb3JpZ2luYWxTZXR0aW5ncy5qc29ucENhbGxiYWNrO1xuXG5cdFx0XHRcdC8vIFNhdmUgdGhlIGNhbGxiYWNrIG5hbWUgZm9yIGZ1dHVyZSB1c2Vcblx0XHRcdFx0b2xkQ2FsbGJhY2tzLnB1c2goIGNhbGxiYWNrTmFtZSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDYWxsIGlmIGl0IHdhcyBhIGZ1bmN0aW9uIGFuZCB3ZSBoYXZlIGEgcmVzcG9uc2Vcblx0XHRcdGlmICggcmVzcG9uc2VDb250YWluZXIgJiYgalF1ZXJ5LmlzRnVuY3Rpb24oIG92ZXJ3cml0dGVuICkgKSB7XG5cdFx0XHRcdG92ZXJ3cml0dGVuKCByZXNwb25zZUNvbnRhaW5lclsgMCBdICk7XG5cdFx0XHR9XG5cblx0XHRcdHJlc3BvbnNlQ29udGFpbmVyID0gb3ZlcndyaXR0ZW4gPSB1bmRlZmluZWQ7XG5cdFx0fSApO1xuXG5cdFx0Ly8gRGVsZWdhdGUgdG8gc2NyaXB0XG5cdFx0cmV0dXJuIFwic2NyaXB0XCI7XG5cdH1cbn0gKTtcblxuXG5cblxuLy8gQXJndW1lbnQgXCJkYXRhXCIgc2hvdWxkIGJlIHN0cmluZyBvZiBodG1sXG4vLyBjb250ZXh0IChvcHRpb25hbCk6IElmIHNwZWNpZmllZCwgdGhlIGZyYWdtZW50IHdpbGwgYmUgY3JlYXRlZCBpbiB0aGlzIGNvbnRleHQsXG4vLyBkZWZhdWx0cyB0byBkb2N1bWVudFxuLy8ga2VlcFNjcmlwdHMgKG9wdGlvbmFsKTogSWYgdHJ1ZSwgd2lsbCBpbmNsdWRlIHNjcmlwdHMgcGFzc2VkIGluIHRoZSBodG1sIHN0cmluZ1xualF1ZXJ5LnBhcnNlSFRNTCA9IGZ1bmN0aW9uKCBkYXRhLCBjb250ZXh0LCBrZWVwU2NyaXB0cyApIHtcblx0aWYgKCAhZGF0YSB8fCB0eXBlb2YgZGF0YSAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXHRpZiAoIHR5cGVvZiBjb250ZXh0ID09PSBcImJvb2xlYW5cIiApIHtcblx0XHRrZWVwU2NyaXB0cyA9IGNvbnRleHQ7XG5cdFx0Y29udGV4dCA9IGZhbHNlO1xuXHR9XG5cdGNvbnRleHQgPSBjb250ZXh0IHx8IGRvY3VtZW50O1xuXG5cdHZhciBwYXJzZWQgPSByc2luZ2xlVGFnLmV4ZWMoIGRhdGEgKSxcblx0XHRzY3JpcHRzID0gIWtlZXBTY3JpcHRzICYmIFtdO1xuXG5cdC8vIFNpbmdsZSB0YWdcblx0aWYgKCBwYXJzZWQgKSB7XG5cdFx0cmV0dXJuIFsgY29udGV4dC5jcmVhdGVFbGVtZW50KCBwYXJzZWRbIDEgXSApIF07XG5cdH1cblxuXHRwYXJzZWQgPSBidWlsZEZyYWdtZW50KCBbIGRhdGEgXSwgY29udGV4dCwgc2NyaXB0cyApO1xuXG5cdGlmICggc2NyaXB0cyAmJiBzY3JpcHRzLmxlbmd0aCApIHtcblx0XHRqUXVlcnkoIHNjcmlwdHMgKS5yZW1vdmUoKTtcblx0fVxuXG5cdHJldHVybiBqUXVlcnkubWVyZ2UoIFtdLCBwYXJzZWQuY2hpbGROb2RlcyApO1xufTtcblxuXG4vLyBLZWVwIGEgY29weSBvZiB0aGUgb2xkIGxvYWQgbWV0aG9kXG52YXIgX2xvYWQgPSBqUXVlcnkuZm4ubG9hZDtcblxuLyoqXG4gKiBMb2FkIGEgdXJsIGludG8gYSBwYWdlXG4gKi9cbmpRdWVyeS5mbi5sb2FkID0gZnVuY3Rpb24oIHVybCwgcGFyYW1zLCBjYWxsYmFjayApIHtcblx0aWYgKCB0eXBlb2YgdXJsICE9PSBcInN0cmluZ1wiICYmIF9sb2FkICkge1xuXHRcdHJldHVybiBfbG9hZC5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdH1cblxuXHR2YXIgc2VsZWN0b3IsIHR5cGUsIHJlc3BvbnNlLFxuXHRcdHNlbGYgPSB0aGlzLFxuXHRcdG9mZiA9IHVybC5pbmRleE9mKCBcIiBcIiApO1xuXG5cdGlmICggb2ZmID4gLTEgKSB7XG5cdFx0c2VsZWN0b3IgPSBqUXVlcnkudHJpbSggdXJsLnNsaWNlKCBvZmYgKSApO1xuXHRcdHVybCA9IHVybC5zbGljZSggMCwgb2ZmICk7XG5cdH1cblxuXHQvLyBJZiBpdCdzIGEgZnVuY3Rpb25cblx0aWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggcGFyYW1zICkgKSB7XG5cblx0XHQvLyBXZSBhc3N1bWUgdGhhdCBpdCdzIHRoZSBjYWxsYmFja1xuXHRcdGNhbGxiYWNrID0gcGFyYW1zO1xuXHRcdHBhcmFtcyA9IHVuZGVmaW5lZDtcblxuXHQvLyBPdGhlcndpc2UsIGJ1aWxkIGEgcGFyYW0gc3RyaW5nXG5cdH0gZWxzZSBpZiAoIHBhcmFtcyAmJiB0eXBlb2YgcGFyYW1zID09PSBcIm9iamVjdFwiICkge1xuXHRcdHR5cGUgPSBcIlBPU1RcIjtcblx0fVxuXG5cdC8vIElmIHdlIGhhdmUgZWxlbWVudHMgdG8gbW9kaWZ5LCBtYWtlIHRoZSByZXF1ZXN0XG5cdGlmICggc2VsZi5sZW5ndGggPiAwICkge1xuXHRcdGpRdWVyeS5hamF4KCB7XG5cdFx0XHR1cmw6IHVybCxcblxuXHRcdFx0Ly8gSWYgXCJ0eXBlXCIgdmFyaWFibGUgaXMgdW5kZWZpbmVkLCB0aGVuIFwiR0VUXCIgbWV0aG9kIHdpbGwgYmUgdXNlZC5cblx0XHRcdC8vIE1ha2UgdmFsdWUgb2YgdGhpcyBmaWVsZCBleHBsaWNpdCBzaW5jZVxuXHRcdFx0Ly8gdXNlciBjYW4gb3ZlcnJpZGUgaXQgdGhyb3VnaCBhamF4U2V0dXAgbWV0aG9kXG5cdFx0XHR0eXBlOiB0eXBlIHx8IFwiR0VUXCIsXG5cdFx0XHRkYXRhVHlwZTogXCJodG1sXCIsXG5cdFx0XHRkYXRhOiBwYXJhbXNcblx0XHR9ICkuZG9uZSggZnVuY3Rpb24oIHJlc3BvbnNlVGV4dCApIHtcblxuXHRcdFx0Ly8gU2F2ZSByZXNwb25zZSBmb3IgdXNlIGluIGNvbXBsZXRlIGNhbGxiYWNrXG5cdFx0XHRyZXNwb25zZSA9IGFyZ3VtZW50cztcblxuXHRcdFx0c2VsZi5odG1sKCBzZWxlY3RvciA/XG5cblx0XHRcdFx0Ly8gSWYgYSBzZWxlY3RvciB3YXMgc3BlY2lmaWVkLCBsb2NhdGUgdGhlIHJpZ2h0IGVsZW1lbnRzIGluIGEgZHVtbXkgZGl2XG5cdFx0XHRcdC8vIEV4Y2x1ZGUgc2NyaXB0cyB0byBhdm9pZCBJRSAnUGVybWlzc2lvbiBEZW5pZWQnIGVycm9yc1xuXHRcdFx0XHRqUXVlcnkoIFwiPGRpdj5cIiApLmFwcGVuZCggalF1ZXJ5LnBhcnNlSFRNTCggcmVzcG9uc2VUZXh0ICkgKS5maW5kKCBzZWxlY3RvciApIDpcblxuXHRcdFx0XHQvLyBPdGhlcndpc2UgdXNlIHRoZSBmdWxsIHJlc3VsdFxuXHRcdFx0XHRyZXNwb25zZVRleHQgKTtcblxuXHRcdC8vIElmIHRoZSByZXF1ZXN0IHN1Y2NlZWRzLCB0aGlzIGZ1bmN0aW9uIGdldHMgXCJkYXRhXCIsIFwic3RhdHVzXCIsIFwianFYSFJcIlxuXHRcdC8vIGJ1dCB0aGV5IGFyZSBpZ25vcmVkIGJlY2F1c2UgcmVzcG9uc2Ugd2FzIHNldCBhYm92ZS5cblx0XHQvLyBJZiBpdCBmYWlscywgdGhpcyBmdW5jdGlvbiBnZXRzIFwianFYSFJcIiwgXCJzdGF0dXNcIiwgXCJlcnJvclwiXG5cdFx0fSApLmFsd2F5cyggY2FsbGJhY2sgJiYgZnVuY3Rpb24oIGpxWEhSLCBzdGF0dXMgKSB7XG5cdFx0XHRzZWxmLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRjYWxsYmFjay5hcHBseSggdGhpcywgcmVzcG9uc2UgfHwgWyBqcVhIUi5yZXNwb25zZVRleHQsIHN0YXR1cywganFYSFIgXSApO1xuXHRcdFx0fSApO1xuXHRcdH0gKTtcblx0fVxuXG5cdHJldHVybiB0aGlzO1xufTtcblxuXG5cblxuLy8gQXR0YWNoIGEgYnVuY2ggb2YgZnVuY3Rpb25zIGZvciBoYW5kbGluZyBjb21tb24gQUpBWCBldmVudHNcbmpRdWVyeS5lYWNoKCBbXG5cdFwiYWpheFN0YXJ0XCIsXG5cdFwiYWpheFN0b3BcIixcblx0XCJhamF4Q29tcGxldGVcIixcblx0XCJhamF4RXJyb3JcIixcblx0XCJhamF4U3VjY2Vzc1wiLFxuXHRcImFqYXhTZW5kXCJcbl0sIGZ1bmN0aW9uKCBpLCB0eXBlICkge1xuXHRqUXVlcnkuZm5bIHR5cGUgXSA9IGZ1bmN0aW9uKCBmbiApIHtcblx0XHRyZXR1cm4gdGhpcy5vbiggdHlwZSwgZm4gKTtcblx0fTtcbn0gKTtcblxuXG5cblxualF1ZXJ5LmV4cHIuZmlsdGVycy5hbmltYXRlZCA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRyZXR1cm4galF1ZXJ5LmdyZXAoIGpRdWVyeS50aW1lcnMsIGZ1bmN0aW9uKCBmbiApIHtcblx0XHRyZXR1cm4gZWxlbSA9PT0gZm4uZWxlbTtcblx0fSApLmxlbmd0aDtcbn07XG5cblxuXG5cbi8qKlxuICogR2V0cyBhIHdpbmRvdyBmcm9tIGFuIGVsZW1lbnRcbiAqL1xuZnVuY3Rpb24gZ2V0V2luZG93KCBlbGVtICkge1xuXHRyZXR1cm4galF1ZXJ5LmlzV2luZG93KCBlbGVtICkgPyBlbGVtIDogZWxlbS5ub2RlVHlwZSA9PT0gOSAmJiBlbGVtLmRlZmF1bHRWaWV3O1xufVxuXG5qUXVlcnkub2Zmc2V0ID0ge1xuXHRzZXRPZmZzZXQ6IGZ1bmN0aW9uKCBlbGVtLCBvcHRpb25zLCBpICkge1xuXHRcdHZhciBjdXJQb3NpdGlvbiwgY3VyTGVmdCwgY3VyQ1NTVG9wLCBjdXJUb3AsIGN1ck9mZnNldCwgY3VyQ1NTTGVmdCwgY2FsY3VsYXRlUG9zaXRpb24sXG5cdFx0XHRwb3NpdGlvbiA9IGpRdWVyeS5jc3MoIGVsZW0sIFwicG9zaXRpb25cIiApLFxuXHRcdFx0Y3VyRWxlbSA9IGpRdWVyeSggZWxlbSApLFxuXHRcdFx0cHJvcHMgPSB7fTtcblxuXHRcdC8vIFNldCBwb3NpdGlvbiBmaXJzdCwgaW4tY2FzZSB0b3AvbGVmdCBhcmUgc2V0IGV2ZW4gb24gc3RhdGljIGVsZW1cblx0XHRpZiAoIHBvc2l0aW9uID09PSBcInN0YXRpY1wiICkge1xuXHRcdFx0ZWxlbS5zdHlsZS5wb3NpdGlvbiA9IFwicmVsYXRpdmVcIjtcblx0XHR9XG5cblx0XHRjdXJPZmZzZXQgPSBjdXJFbGVtLm9mZnNldCgpO1xuXHRcdGN1ckNTU1RvcCA9IGpRdWVyeS5jc3MoIGVsZW0sIFwidG9wXCIgKTtcblx0XHRjdXJDU1NMZWZ0ID0galF1ZXJ5LmNzcyggZWxlbSwgXCJsZWZ0XCIgKTtcblx0XHRjYWxjdWxhdGVQb3NpdGlvbiA9ICggcG9zaXRpb24gPT09IFwiYWJzb2x1dGVcIiB8fCBwb3NpdGlvbiA9PT0gXCJmaXhlZFwiICkgJiZcblx0XHRcdCggY3VyQ1NTVG9wICsgY3VyQ1NTTGVmdCApLmluZGV4T2YoIFwiYXV0b1wiICkgPiAtMTtcblxuXHRcdC8vIE5lZWQgdG8gYmUgYWJsZSB0byBjYWxjdWxhdGUgcG9zaXRpb24gaWYgZWl0aGVyXG5cdFx0Ly8gdG9wIG9yIGxlZnQgaXMgYXV0byBhbmQgcG9zaXRpb24gaXMgZWl0aGVyIGFic29sdXRlIG9yIGZpeGVkXG5cdFx0aWYgKCBjYWxjdWxhdGVQb3NpdGlvbiApIHtcblx0XHRcdGN1clBvc2l0aW9uID0gY3VyRWxlbS5wb3NpdGlvbigpO1xuXHRcdFx0Y3VyVG9wID0gY3VyUG9zaXRpb24udG9wO1xuXHRcdFx0Y3VyTGVmdCA9IGN1clBvc2l0aW9uLmxlZnQ7XG5cblx0XHR9IGVsc2Uge1xuXHRcdFx0Y3VyVG9wID0gcGFyc2VGbG9hdCggY3VyQ1NTVG9wICkgfHwgMDtcblx0XHRcdGN1ckxlZnQgPSBwYXJzZUZsb2F0KCBjdXJDU1NMZWZ0ICkgfHwgMDtcblx0XHR9XG5cblx0XHRpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBvcHRpb25zICkgKSB7XG5cblx0XHRcdC8vIFVzZSBqUXVlcnkuZXh0ZW5kIGhlcmUgdG8gYWxsb3cgbW9kaWZpY2F0aW9uIG9mIGNvb3JkaW5hdGVzIGFyZ3VtZW50IChnaC0xODQ4KVxuXHRcdFx0b3B0aW9ucyA9IG9wdGlvbnMuY2FsbCggZWxlbSwgaSwgalF1ZXJ5LmV4dGVuZCgge30sIGN1ck9mZnNldCApICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBvcHRpb25zLnRvcCAhPSBudWxsICkge1xuXHRcdFx0cHJvcHMudG9wID0gKCBvcHRpb25zLnRvcCAtIGN1ck9mZnNldC50b3AgKSArIGN1clRvcDtcblx0XHR9XG5cdFx0aWYgKCBvcHRpb25zLmxlZnQgIT0gbnVsbCApIHtcblx0XHRcdHByb3BzLmxlZnQgPSAoIG9wdGlvbnMubGVmdCAtIGN1ck9mZnNldC5sZWZ0ICkgKyBjdXJMZWZ0O1xuXHRcdH1cblxuXHRcdGlmICggXCJ1c2luZ1wiIGluIG9wdGlvbnMgKSB7XG5cdFx0XHRvcHRpb25zLnVzaW5nLmNhbGwoIGVsZW0sIHByb3BzICk7XG5cblx0XHR9IGVsc2Uge1xuXHRcdFx0Y3VyRWxlbS5jc3MoIHByb3BzICk7XG5cdFx0fVxuXHR9XG59O1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdG9mZnNldDogZnVuY3Rpb24oIG9wdGlvbnMgKSB7XG5cdFx0aWYgKCBhcmd1bWVudHMubGVuZ3RoICkge1xuXHRcdFx0cmV0dXJuIG9wdGlvbnMgPT09IHVuZGVmaW5lZCA/XG5cdFx0XHRcdHRoaXMgOlxuXHRcdFx0XHR0aGlzLmVhY2goIGZ1bmN0aW9uKCBpICkge1xuXHRcdFx0XHRcdGpRdWVyeS5vZmZzZXQuc2V0T2Zmc2V0KCB0aGlzLCBvcHRpb25zLCBpICk7XG5cdFx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHR2YXIgZG9jRWxlbSwgd2luLFxuXHRcdFx0ZWxlbSA9IHRoaXNbIDAgXSxcblx0XHRcdGJveCA9IHsgdG9wOiAwLCBsZWZ0OiAwIH0sXG5cdFx0XHRkb2MgPSBlbGVtICYmIGVsZW0ub3duZXJEb2N1bWVudDtcblxuXHRcdGlmICggIWRvYyApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRkb2NFbGVtID0gZG9jLmRvY3VtZW50RWxlbWVudDtcblxuXHRcdC8vIE1ha2Ugc3VyZSBpdCdzIG5vdCBhIGRpc2Nvbm5lY3RlZCBET00gbm9kZVxuXHRcdGlmICggIWpRdWVyeS5jb250YWlucyggZG9jRWxlbSwgZWxlbSApICkge1xuXHRcdFx0cmV0dXJuIGJveDtcblx0XHR9XG5cblx0XHRib3ggPSBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXHRcdHdpbiA9IGdldFdpbmRvdyggZG9jICk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHRvcDogYm94LnRvcCArIHdpbi5wYWdlWU9mZnNldCAtIGRvY0VsZW0uY2xpZW50VG9wLFxuXHRcdFx0bGVmdDogYm94LmxlZnQgKyB3aW4ucGFnZVhPZmZzZXQgLSBkb2NFbGVtLmNsaWVudExlZnRcblx0XHR9O1xuXHR9LFxuXG5cdHBvc2l0aW9uOiBmdW5jdGlvbigpIHtcblx0XHRpZiAoICF0aGlzWyAwIF0gKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dmFyIG9mZnNldFBhcmVudCwgb2Zmc2V0LFxuXHRcdFx0ZWxlbSA9IHRoaXNbIDAgXSxcblx0XHRcdHBhcmVudE9mZnNldCA9IHsgdG9wOiAwLCBsZWZ0OiAwIH07XG5cblx0XHQvLyBGaXhlZCBlbGVtZW50cyBhcmUgb2Zmc2V0IGZyb20gd2luZG93IChwYXJlbnRPZmZzZXQgPSB7dG9wOjAsIGxlZnQ6IDB9LFxuXHRcdC8vIGJlY2F1c2UgaXQgaXMgaXRzIG9ubHkgb2Zmc2V0IHBhcmVudFxuXHRcdGlmICggalF1ZXJ5LmNzcyggZWxlbSwgXCJwb3NpdGlvblwiICkgPT09IFwiZml4ZWRcIiApIHtcblxuXHRcdFx0Ly8gQXNzdW1lIGdldEJvdW5kaW5nQ2xpZW50UmVjdCBpcyB0aGVyZSB3aGVuIGNvbXB1dGVkIHBvc2l0aW9uIGlzIGZpeGVkXG5cdFx0XHRvZmZzZXQgPSBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Ly8gR2V0ICpyZWFsKiBvZmZzZXRQYXJlbnRcblx0XHRcdG9mZnNldFBhcmVudCA9IHRoaXMub2Zmc2V0UGFyZW50KCk7XG5cblx0XHRcdC8vIEdldCBjb3JyZWN0IG9mZnNldHNcblx0XHRcdG9mZnNldCA9IHRoaXMub2Zmc2V0KCk7XG5cdFx0XHRpZiAoICFqUXVlcnkubm9kZU5hbWUoIG9mZnNldFBhcmVudFsgMCBdLCBcImh0bWxcIiApICkge1xuXHRcdFx0XHRwYXJlbnRPZmZzZXQgPSBvZmZzZXRQYXJlbnQub2Zmc2V0KCk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEFkZCBvZmZzZXRQYXJlbnQgYm9yZGVyc1xuXHRcdFx0cGFyZW50T2Zmc2V0LnRvcCArPSBqUXVlcnkuY3NzKCBvZmZzZXRQYXJlbnRbIDAgXSwgXCJib3JkZXJUb3BXaWR0aFwiLCB0cnVlICk7XG5cdFx0XHRwYXJlbnRPZmZzZXQubGVmdCArPSBqUXVlcnkuY3NzKCBvZmZzZXRQYXJlbnRbIDAgXSwgXCJib3JkZXJMZWZ0V2lkdGhcIiwgdHJ1ZSApO1xuXHRcdH1cblxuXHRcdC8vIFN1YnRyYWN0IHBhcmVudCBvZmZzZXRzIGFuZCBlbGVtZW50IG1hcmdpbnNcblx0XHRyZXR1cm4ge1xuXHRcdFx0dG9wOiBvZmZzZXQudG9wIC0gcGFyZW50T2Zmc2V0LnRvcCAtIGpRdWVyeS5jc3MoIGVsZW0sIFwibWFyZ2luVG9wXCIsIHRydWUgKSxcblx0XHRcdGxlZnQ6IG9mZnNldC5sZWZ0IC0gcGFyZW50T2Zmc2V0LmxlZnQgLSBqUXVlcnkuY3NzKCBlbGVtLCBcIm1hcmdpbkxlZnRcIiwgdHJ1ZSApXG5cdFx0fTtcblx0fSxcblxuXHQvLyBUaGlzIG1ldGhvZCB3aWxsIHJldHVybiBkb2N1bWVudEVsZW1lbnQgaW4gdGhlIGZvbGxvd2luZyBjYXNlczpcblx0Ly8gMSkgRm9yIHRoZSBlbGVtZW50IGluc2lkZSB0aGUgaWZyYW1lIHdpdGhvdXQgb2Zmc2V0UGFyZW50LCB0aGlzIG1ldGhvZCB3aWxsIHJldHVyblxuXHQvLyAgICBkb2N1bWVudEVsZW1lbnQgb2YgdGhlIHBhcmVudCB3aW5kb3dcblx0Ly8gMikgRm9yIHRoZSBoaWRkZW4gb3IgZGV0YWNoZWQgZWxlbWVudFxuXHQvLyAzKSBGb3IgYm9keSBvciBodG1sIGVsZW1lbnQsIGkuZS4gaW4gY2FzZSBvZiB0aGUgaHRtbCBub2RlIC0gaXQgd2lsbCByZXR1cm4gaXRzZWxmXG5cdC8vXG5cdC8vIGJ1dCB0aG9zZSBleGNlcHRpb25zIHdlcmUgbmV2ZXIgcHJlc2VudGVkIGFzIGEgcmVhbCBsaWZlIHVzZS1jYXNlc1xuXHQvLyBhbmQgbWlnaHQgYmUgY29uc2lkZXJlZCBhcyBtb3JlIHByZWZlcmFibGUgcmVzdWx0cy5cblx0Ly9cblx0Ly8gVGhpcyBsb2dpYywgaG93ZXZlciwgaXMgbm90IGd1YXJhbnRlZWQgYW5kIGNhbiBjaGFuZ2UgYXQgYW55IHBvaW50IGluIHRoZSBmdXR1cmVcblx0b2Zmc2V0UGFyZW50OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5tYXAoIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIG9mZnNldFBhcmVudCA9IHRoaXMub2Zmc2V0UGFyZW50O1xuXG5cdFx0XHR3aGlsZSAoIG9mZnNldFBhcmVudCAmJiBqUXVlcnkuY3NzKCBvZmZzZXRQYXJlbnQsIFwicG9zaXRpb25cIiApID09PSBcInN0YXRpY1wiICkge1xuXHRcdFx0XHRvZmZzZXRQYXJlbnQgPSBvZmZzZXRQYXJlbnQub2Zmc2V0UGFyZW50O1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gb2Zmc2V0UGFyZW50IHx8IGRvY3VtZW50RWxlbWVudDtcblx0XHR9ICk7XG5cdH1cbn0gKTtcblxuLy8gQ3JlYXRlIHNjcm9sbExlZnQgYW5kIHNjcm9sbFRvcCBtZXRob2RzXG5qUXVlcnkuZWFjaCggeyBzY3JvbGxMZWZ0OiBcInBhZ2VYT2Zmc2V0XCIsIHNjcm9sbFRvcDogXCJwYWdlWU9mZnNldFwiIH0sIGZ1bmN0aW9uKCBtZXRob2QsIHByb3AgKSB7XG5cdHZhciB0b3AgPSBcInBhZ2VZT2Zmc2V0XCIgPT09IHByb3A7XG5cblx0alF1ZXJ5LmZuWyBtZXRob2QgXSA9IGZ1bmN0aW9uKCB2YWwgKSB7XG5cdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIGVsZW0sIG1ldGhvZCwgdmFsICkge1xuXHRcdFx0dmFyIHdpbiA9IGdldFdpbmRvdyggZWxlbSApO1xuXG5cdFx0XHRpZiAoIHZhbCA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRyZXR1cm4gd2luID8gd2luWyBwcm9wIF0gOiBlbGVtWyBtZXRob2QgXTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCB3aW4gKSB7XG5cdFx0XHRcdHdpbi5zY3JvbGxUbyhcblx0XHRcdFx0XHQhdG9wID8gdmFsIDogd2luLnBhZ2VYT2Zmc2V0LFxuXHRcdFx0XHRcdHRvcCA/IHZhbCA6IHdpbi5wYWdlWU9mZnNldFxuXHRcdFx0XHQpO1xuXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRlbGVtWyBtZXRob2QgXSA9IHZhbDtcblx0XHRcdH1cblx0XHR9LCBtZXRob2QsIHZhbCwgYXJndW1lbnRzLmxlbmd0aCApO1xuXHR9O1xufSApO1xuXG4vLyBTdXBwb3J0OiBTYWZhcmk8Ny04KywgQ2hyb21lPDM3LTQ0K1xuLy8gQWRkIHRoZSB0b3AvbGVmdCBjc3NIb29rcyB1c2luZyBqUXVlcnkuZm4ucG9zaXRpb25cbi8vIFdlYmtpdCBidWc6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yOTA4NFxuLy8gQmxpbmsgYnVnOiBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9MjI5MjgwXG4vLyBnZXRDb21wdXRlZFN0eWxlIHJldHVybnMgcGVyY2VudCB3aGVuIHNwZWNpZmllZCBmb3IgdG9wL2xlZnQvYm90dG9tL3JpZ2h0O1xuLy8gcmF0aGVyIHRoYW4gbWFrZSB0aGUgY3NzIG1vZHVsZSBkZXBlbmQgb24gdGhlIG9mZnNldCBtb2R1bGUsIGp1c3QgY2hlY2sgZm9yIGl0IGhlcmVcbmpRdWVyeS5lYWNoKCBbIFwidG9wXCIsIFwibGVmdFwiIF0sIGZ1bmN0aW9uKCBpLCBwcm9wICkge1xuXHRqUXVlcnkuY3NzSG9va3NbIHByb3AgXSA9IGFkZEdldEhvb2tJZiggc3VwcG9ydC5waXhlbFBvc2l0aW9uLFxuXHRcdGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCApIHtcblx0XHRcdGlmICggY29tcHV0ZWQgKSB7XG5cdFx0XHRcdGNvbXB1dGVkID0gY3VyQ1NTKCBlbGVtLCBwcm9wICk7XG5cblx0XHRcdFx0Ly8gSWYgY3VyQ1NTIHJldHVybnMgcGVyY2VudGFnZSwgZmFsbGJhY2sgdG8gb2Zmc2V0XG5cdFx0XHRcdHJldHVybiBybnVtbm9ucHgudGVzdCggY29tcHV0ZWQgKSA/XG5cdFx0XHRcdFx0alF1ZXJ5KCBlbGVtICkucG9zaXRpb24oKVsgcHJvcCBdICsgXCJweFwiIDpcblx0XHRcdFx0XHRjb21wdXRlZDtcblx0XHRcdH1cblx0XHR9XG5cdCk7XG59ICk7XG5cblxuLy8gQ3JlYXRlIGlubmVySGVpZ2h0LCBpbm5lcldpZHRoLCBoZWlnaHQsIHdpZHRoLCBvdXRlckhlaWdodCBhbmQgb3V0ZXJXaWR0aCBtZXRob2RzXG5qUXVlcnkuZWFjaCggeyBIZWlnaHQ6IFwiaGVpZ2h0XCIsIFdpZHRoOiBcIndpZHRoXCIgfSwgZnVuY3Rpb24oIG5hbWUsIHR5cGUgKSB7XG5cdGpRdWVyeS5lYWNoKCB7IHBhZGRpbmc6IFwiaW5uZXJcIiArIG5hbWUsIGNvbnRlbnQ6IHR5cGUsIFwiXCI6IFwib3V0ZXJcIiArIG5hbWUgfSxcblx0XHRmdW5jdGlvbiggZGVmYXVsdEV4dHJhLCBmdW5jTmFtZSApIHtcblxuXHRcdC8vIE1hcmdpbiBpcyBvbmx5IGZvciBvdXRlckhlaWdodCwgb3V0ZXJXaWR0aFxuXHRcdGpRdWVyeS5mblsgZnVuY05hbWUgXSA9IGZ1bmN0aW9uKCBtYXJnaW4sIHZhbHVlICkge1xuXHRcdFx0dmFyIGNoYWluYWJsZSA9IGFyZ3VtZW50cy5sZW5ndGggJiYgKCBkZWZhdWx0RXh0cmEgfHwgdHlwZW9mIG1hcmdpbiAhPT0gXCJib29sZWFuXCIgKSxcblx0XHRcdFx0ZXh0cmEgPSBkZWZhdWx0RXh0cmEgfHwgKCBtYXJnaW4gPT09IHRydWUgfHwgdmFsdWUgPT09IHRydWUgPyBcIm1hcmdpblwiIDogXCJib3JkZXJcIiApO1xuXG5cdFx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggZWxlbSwgdHlwZSwgdmFsdWUgKSB7XG5cdFx0XHRcdHZhciBkb2M7XG5cblx0XHRcdFx0aWYgKCBqUXVlcnkuaXNXaW5kb3coIGVsZW0gKSApIHtcblxuXHRcdFx0XHRcdC8vIEFzIG9mIDUvOC8yMDEyIHRoaXMgd2lsbCB5aWVsZCBpbmNvcnJlY3QgcmVzdWx0cyBmb3IgTW9iaWxlIFNhZmFyaSwgYnV0IHRoZXJlXG5cdFx0XHRcdFx0Ly8gaXNuJ3QgYSB3aG9sZSBsb3Qgd2UgY2FuIGRvLiBTZWUgcHVsbCByZXF1ZXN0IGF0IHRoaXMgVVJMIGZvciBkaXNjdXNzaW9uOlxuXHRcdFx0XHRcdC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9qcXVlcnkvanF1ZXJ5L3B1bGwvNzY0XG5cdFx0XHRcdFx0cmV0dXJuIGVsZW0uZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50WyBcImNsaWVudFwiICsgbmFtZSBdO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gR2V0IGRvY3VtZW50IHdpZHRoIG9yIGhlaWdodFxuXHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDkgKSB7XG5cdFx0XHRcdFx0ZG9jID0gZWxlbS5kb2N1bWVudEVsZW1lbnQ7XG5cblx0XHRcdFx0XHQvLyBFaXRoZXIgc2Nyb2xsW1dpZHRoL0hlaWdodF0gb3Igb2Zmc2V0W1dpZHRoL0hlaWdodF0gb3IgY2xpZW50W1dpZHRoL0hlaWdodF0sXG5cdFx0XHRcdFx0Ly8gd2hpY2hldmVyIGlzIGdyZWF0ZXN0XG5cdFx0XHRcdFx0cmV0dXJuIE1hdGgubWF4KFxuXHRcdFx0XHRcdFx0ZWxlbS5ib2R5WyBcInNjcm9sbFwiICsgbmFtZSBdLCBkb2NbIFwic2Nyb2xsXCIgKyBuYW1lIF0sXG5cdFx0XHRcdFx0XHRlbGVtLmJvZHlbIFwib2Zmc2V0XCIgKyBuYW1lIF0sIGRvY1sgXCJvZmZzZXRcIiArIG5hbWUgXSxcblx0XHRcdFx0XHRcdGRvY1sgXCJjbGllbnRcIiArIG5hbWUgXVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/XG5cblx0XHRcdFx0XHQvLyBHZXQgd2lkdGggb3IgaGVpZ2h0IG9uIHRoZSBlbGVtZW50LCByZXF1ZXN0aW5nIGJ1dCBub3QgZm9yY2luZyBwYXJzZUZsb2F0XG5cdFx0XHRcdFx0alF1ZXJ5LmNzcyggZWxlbSwgdHlwZSwgZXh0cmEgKSA6XG5cblx0XHRcdFx0XHQvLyBTZXQgd2lkdGggb3IgaGVpZ2h0IG9uIHRoZSBlbGVtZW50XG5cdFx0XHRcdFx0alF1ZXJ5LnN0eWxlKCBlbGVtLCB0eXBlLCB2YWx1ZSwgZXh0cmEgKTtcblx0XHRcdH0sIHR5cGUsIGNoYWluYWJsZSA/IG1hcmdpbiA6IHVuZGVmaW5lZCwgY2hhaW5hYmxlLCBudWxsICk7XG5cdFx0fTtcblx0fSApO1xufSApO1xuXG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblxuXHRiaW5kOiBmdW5jdGlvbiggdHlwZXMsIGRhdGEsIGZuICkge1xuXHRcdHJldHVybiB0aGlzLm9uKCB0eXBlcywgbnVsbCwgZGF0YSwgZm4gKTtcblx0fSxcblx0dW5iaW5kOiBmdW5jdGlvbiggdHlwZXMsIGZuICkge1xuXHRcdHJldHVybiB0aGlzLm9mZiggdHlwZXMsIG51bGwsIGZuICk7XG5cdH0sXG5cblx0ZGVsZWdhdGU6IGZ1bmN0aW9uKCBzZWxlY3RvciwgdHlwZXMsIGRhdGEsIGZuICkge1xuXHRcdHJldHVybiB0aGlzLm9uKCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuICk7XG5cdH0sXG5cdHVuZGVsZWdhdGU6IGZ1bmN0aW9uKCBzZWxlY3RvciwgdHlwZXMsIGZuICkge1xuXG5cdFx0Ly8gKCBuYW1lc3BhY2UgKSBvciAoIHNlbGVjdG9yLCB0eXBlcyBbLCBmbl0gKVxuXHRcdHJldHVybiBhcmd1bWVudHMubGVuZ3RoID09PSAxID9cblx0XHRcdHRoaXMub2ZmKCBzZWxlY3RvciwgXCIqKlwiICkgOlxuXHRcdFx0dGhpcy5vZmYoIHR5cGVzLCBzZWxlY3RvciB8fCBcIioqXCIsIGZuICk7XG5cdH0sXG5cdHNpemU6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLmxlbmd0aDtcblx0fVxufSApO1xuXG5qUXVlcnkuZm4uYW5kU2VsZiA9IGpRdWVyeS5mbi5hZGRCYWNrO1xuXG5cblxuXG4vLyBSZWdpc3RlciBhcyBhIG5hbWVkIEFNRCBtb2R1bGUsIHNpbmNlIGpRdWVyeSBjYW4gYmUgY29uY2F0ZW5hdGVkIHdpdGggb3RoZXJcbi8vIGZpbGVzIHRoYXQgbWF5IHVzZSBkZWZpbmUsIGJ1dCBub3QgdmlhIGEgcHJvcGVyIGNvbmNhdGVuYXRpb24gc2NyaXB0IHRoYXRcbi8vIHVuZGVyc3RhbmRzIGFub255bW91cyBBTUQgbW9kdWxlcy4gQSBuYW1lZCBBTUQgaXMgc2FmZXN0IGFuZCBtb3N0IHJvYnVzdFxuLy8gd2F5IHRvIHJlZ2lzdGVyLiBMb3dlcmNhc2UganF1ZXJ5IGlzIHVzZWQgYmVjYXVzZSBBTUQgbW9kdWxlIG5hbWVzIGFyZVxuLy8gZGVyaXZlZCBmcm9tIGZpbGUgbmFtZXMsIGFuZCBqUXVlcnkgaXMgbm9ybWFsbHkgZGVsaXZlcmVkIGluIGEgbG93ZXJjYXNlXG4vLyBmaWxlIG5hbWUuIERvIHRoaXMgYWZ0ZXIgY3JlYXRpbmcgdGhlIGdsb2JhbCBzbyB0aGF0IGlmIGFuIEFNRCBtb2R1bGUgd2FudHNcbi8vIHRvIGNhbGwgbm9Db25mbGljdCB0byBoaWRlIHRoaXMgdmVyc2lvbiBvZiBqUXVlcnksIGl0IHdpbGwgd29yay5cblxuLy8gTm90ZSB0aGF0IGZvciBtYXhpbXVtIHBvcnRhYmlsaXR5LCBsaWJyYXJpZXMgdGhhdCBhcmUgbm90IGpRdWVyeSBzaG91bGRcbi8vIGRlY2xhcmUgdGhlbXNlbHZlcyBhcyBhbm9ueW1vdXMgbW9kdWxlcywgYW5kIGF2b2lkIHNldHRpbmcgYSBnbG9iYWwgaWYgYW5cbi8vIEFNRCBsb2FkZXIgaXMgcHJlc2VudC4galF1ZXJ5IGlzIGEgc3BlY2lhbCBjYXNlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlXG4vLyBodHRwczovL2dpdGh1Yi5jb20vanJidXJrZS9yZXF1aXJlanMvd2lraS9VcGRhdGluZy1leGlzdGluZy1saWJyYXJpZXMjd2lraS1hbm9uXG5cbmlmICggdHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQgKSB7XG5cdGRlZmluZSggXCJqcXVlcnlcIiwgW10sIGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBqUXVlcnk7XG5cdH0gKTtcbn1cblxuXG5cbnZhclxuXG5cdC8vIE1hcCBvdmVyIGpRdWVyeSBpbiBjYXNlIG9mIG92ZXJ3cml0ZVxuXHRfalF1ZXJ5ID0gd2luZG93LmpRdWVyeSxcblxuXHQvLyBNYXAgb3ZlciB0aGUgJCBpbiBjYXNlIG9mIG92ZXJ3cml0ZVxuXHRfJCA9IHdpbmRvdy4kO1xuXG5qUXVlcnkubm9Db25mbGljdCA9IGZ1bmN0aW9uKCBkZWVwICkge1xuXHRpZiAoIHdpbmRvdy4kID09PSBqUXVlcnkgKSB7XG5cdFx0d2luZG93LiQgPSBfJDtcblx0fVxuXG5cdGlmICggZGVlcCAmJiB3aW5kb3cualF1ZXJ5ID09PSBqUXVlcnkgKSB7XG5cdFx0d2luZG93LmpRdWVyeSA9IF9qUXVlcnk7XG5cdH1cblxuXHRyZXR1cm4galF1ZXJ5O1xufTtcblxuLy8gRXhwb3NlIGpRdWVyeSBhbmQgJCBpZGVudGlmaWVycywgZXZlbiBpbiBBTURcbi8vICgjNzEwMiNjb21tZW50OjEwLCBodHRwczovL2dpdGh1Yi5jb20vanF1ZXJ5L2pxdWVyeS9wdWxsLzU1Nylcbi8vIGFuZCBDb21tb25KUyBmb3IgYnJvd3NlciBlbXVsYXRvcnMgKCMxMzU2NilcbmlmICggIW5vR2xvYmFsICkge1xuXHR3aW5kb3cualF1ZXJ5ID0gd2luZG93LiQgPSBqUXVlcnk7XG59XG5cbnJldHVybiBqUXVlcnk7XG59KSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/jquery/dist/jquery.js\n");
/***/ }),
/***/ "./resources/sass/app.scss":
/*!*********************************!*\
!*** ./resources/sass/app.scss ***!
\*********************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n// extracted by mini-css-extract-plugin\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvc2Fzcy9hcHAuc2Nzcy5qcyIsIm1hcHBpbmdzIjoiO0FBQUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvc2Fzcy9hcHAuc2Nzcz9hODg1Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IHt9OyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./resources/sass/app.scss\n");
/***/ }),
/***/ "./resources/theme/theme.scss":
/*!************************************!*\
!*** ./resources/theme/theme.scss ***!
\************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n// extracted by mini-css-extract-plugin\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvdGhlbWUvdGhlbWUuc2Nzcy5qcyIsIm1hcHBpbmdzIjoiO0FBQUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvdGhlbWUvdGhlbWUuc2Nzcz9iYWNiIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IHt9OyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./resources/theme/theme.scss\n");
/***/ }),
/***/ "./node_modules/select2/dist/js/select2.min.js":
/*!*****************************************************!*\
!*** ./node_modules/select2/dist/js/select2.min.js ***!
\*****************************************************/
/***/ ((module, exports, __webpack_require__) => {
eval("var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */\n!function(n){ true?!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! jquery */ \"./node_modules/jquery/dist/jquery.js\")], __WEBPACK_AMD_DEFINE_FACTORY__ = (n),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)):0}(function(t){var e,n,s,p,r,o,h,f,g,m,y,v,i,a,_,s=((u=t&&t.fn&&t.fn.select2&&t.fn.select2.amd?t.fn.select2.amd:u)&&u.requirejs||(u?n=u:u={},g={},m={},y={},v={},i=Object.prototype.hasOwnProperty,a=[].slice,_=/\\.js$/,h=function(e,t){var n,s,i=c(e),r=i[0],t=t[1];return e=i[1],r&&(n=x(r=l(r,t))),r?e=n&&n.normalize?n.normalize(e,(s=t,function(e){return l(e,s)})):l(e,t):(r=(i=c(e=l(e,t)))[0],e=i[1],r&&(n=x(r))),{f:r?r+\"!\"+e:e,n:e,pr:r,p:n}},f={require:function(e){return w(e)},exports:function(e){var t=g[e];return void 0!==t?t:g[e]={}},module:function(e){return{id:e,uri:\"\",exports:g[e],config:(t=e,function(){return y&&y.config&&y.config[t]||{}})};var t}},r=function(e,t,n,s){var i,r,o,a,l,c=[],u=typeof n,d=A(s=s||e);if(\"undefined\"==u||\"function\"==u){for(t=!t.length&&n.length?[\"require\",\"exports\",\"module\"]:t,a=0;a<t.length;a+=1)if(\"require\"===(r=(o=h(t[a],d)).f))c[a]=f.require(e);else if(\"exports\"===r)c[a]=f.exports(e),l=!0;else if(\"module\"===r)i=c[a]=f.module(e);else if(b(g,r)||b(m,r)||b(v,r))c[a]=x(r);else{if(!o.p)throw new Error(e+\" missing \"+r);o.p.load(o.n,w(s,!0),function(t){return function(e){g[t]=e}}(r),{}),c[a]=g[r]}u=n?n.apply(g[e],c):void 0,e&&(i&&i.exports!==p&&i.exports!==g[e]?g[e]=i.exports:u===p&&l||(g[e]=u))}else e&&(g[e]=n)},e=n=o=function(e,t,n,s,i){if(\"string\"==typeof e)return f[e]?f[e](t):x(h(e,A(t)).f);if(!e.splice){if((y=e).deps&&o(y.deps,y.callback),!t)return;t.splice?(e=t,t=n,n=null):e=p}return t=t||function(){},\"function\"==typeof n&&(n=s,s=i),s?r(p,e,t,n):setTimeout(function(){r(p,e,t,n)},4),o},o.config=function(e){return o(e)},e._defined=g,(s=function(e,t,n){if(\"string\"!=typeof e)throw new Error(\"See almond README: incorrect module build, no module name\");t.splice||(n=t,t=[]),b(g,e)||b(m,e)||(m[e]=[e,t,n])}).amd={jQuery:!0},u.requirejs=e,u.require=n,u.define=s),u.define(\"almond\",function(){}),u.define(\"jquery\",[],function(){var e=t||$;return null==e&&console&&console.error&&console.error(\"Select2: An instance of jQuery or a jQuery-compatible library was not found. Make sure that you are including jQuery before Select2 on your web page.\"),e}),u.define(\"select2/utils\",[\"jquery\"],function(r){var s={};function c(e){var t,n=e.prototype,s=[];for(t in n)\"function\"==typeof n[t]&&\"constructor\"!==t&&s.push(t);return s}s.Extend=function(e,t){var n,s={}.hasOwnProperty;function i(){this.constructor=e}for(n in t)s.call(t,n)&&(e[n]=t[n]);return i.prototype=t.prototype,e.prototype=new i,e.__super__=t.prototype,e},s.Decorate=function(s,i){var e=c(i),t=c(s);function r(){var e=Array.prototype.unshift,t=i.prototype.constructor.length,n=s.prototype.constructor;0<t&&(e.call(arguments,s.prototype.constructor),n=i.prototype.constructor),n.apply(this,arguments)}i.displayName=s.displayName,r.prototype=new function(){this.constructor=r};for(var n=0;n<t.length;n++){var o=t[n];r.prototype[o]=s.prototype[o]}for(var a=0;a<e.length;a++){var l=e[a];r.prototype[l]=function(e){var t=function(){};e in r.prototype&&(t=r.prototype[e]);var n=i.prototype[e];return function(){return Array.prototype.unshift.call(arguments,t),n.apply(this,arguments)}}(l)}return r};function e(){this.listeners={}}e.prototype.on=function(e,t){this.listeners=this.listeners||{},e in this.listeners?this.listeners[e].push(t):this.listeners[e]=[t]},e.prototype.trigger=function(e){var t=Array.prototype.slice,n=t.call(arguments,1);this.listeners=this.listeners||{},0===(n=null==n?[]:n).length&&n.push({}),(n[0]._type=e)in this.listeners&&this.invoke(this.listeners[e],t.call(arguments,1)),\"*\"in this.listeners&&this.invoke(this.listeners[\"*\"],arguments)},e.prototype.invoke=function(e,t){for(var n=0,s=e.length;n<s;n++)e[n].apply(this,t)},s.Observable=e,s.generateChars=function(e){for(var t=\"\",n=0;n<e;n++)t+=Math.floor(36*Math.random()).toString(36);return t},s.bind=function(e,t){return function(){e.apply(t,arguments)}},s._convertData=function(e){for(var t in e){var n=t.split(\"-\"),s=e;if(1!==n.length){for(var i=0;i<n.length;i++){var r=n[i];(r=r.substring(0,1).toLowerCase()+r.substring(1))in s||(s[r]={}),i==n.length-1&&(s[r]=e[t]),s=s[r]}delete e[t]}}return e},s.hasScroll=function(e,t){var n=r(t),s=t.style.overflowX,i=t.style.overflowY;return(s!==i||\"hidden\"!==i&&\"visible\"!==i)&&(\"scroll\"===s||\"scroll\"===i||(n.innerHeight()<t.scrollHeight||n.innerWidth()<t.scrollWidth))},s.escapeMarkup=function(e){var t={\"\\\\\":\"&#92;\",\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\",\"'\":\"&#39;\",\"/\":\"&#47;\"};return\"string\"!=typeof e?e:String(e).replace(/[&<>\"'\\/\\\\]/g,function(e){return t[e]})},s.__cache={};var n=0;return s.GetUniqueElementId=function(e){var t=e.getAttribute(\"data-select2-id\");return null!=t||(t=e.id?\"select2-data-\"+e.id:\"select2-data-\"+(++n).toString()+\"-\"+s.generateChars(4),e.setAttribute(\"data-select2-id\",t)),t},s.StoreData=function(e,t,n){e=s.GetUniqueElementId(e);s.__cache[e]||(s.__cache[e]={}),s.__cache[e][t]=n},s.GetData=function(e,t){var n=s.GetUniqueElementId(e);return t?s.__cache[n]&&null!=s.__cache[n][t]?s.__cache[n][t]:r(e).data(t):s.__cache[n]},s.RemoveData=function(e){var t=s.GetUniqueElementId(e);null!=s.__cache[t]&&delete s.__cache[t],e.removeAttribute(\"data-select2-id\")},s.copyNonInternalCssClasses=function(e,t){var n=(n=e.getAttribute(\"class\").trim().split(/\\s+/)).filter(function(e){return 0===e.indexOf(\"select2-\")}),t=(t=t.getAttribute(\"class\").trim().split(/\\s+/)).filter(function(e){return 0!==e.indexOf(\"select2-\")}),t=n.concat(t);e.setAttribute(\"class\",t.join(\" \"))},s}),u.define(\"select2/results\",[\"jquery\",\"./utils\"],function(d,p){function s(e,t,n){this.$element=e,this.data=n,this.options=t,s.__super__.constructor.call(this)}return p.Extend(s,p.Observable),s.prototype.render=function(){var e=d('<ul class=\"select2-results__options\" role=\"listbox\"></ul>');return this.options.get(\"multiple\")&&e.attr(\"aria-multiselectable\",\"true\"),this.$results=e},s.prototype.clear=function(){this.$results.empty()},s.prototype.displayMessage=function(e){var t=this.options.get(\"escapeMarkup\");this.clear(),this.hideLoading();var n=d('<li role=\"alert\" aria-live=\"assertive\" class=\"select2-results__option\"></li>'),s=this.options.get(\"translations\").get(e.message);n.append(t(s(e.args))),n[0].className+=\" select2-results__message\",this.$results.append(n)},s.prototype.hideMessages=function(){this.$results.find(\".select2-results__message\").remove()},s.prototype.append=function(e){this.hideLoading();var t=[];if(null!=e.results&&0!==e.results.length){e.results=this.sort(e.results);for(var n=0;n<e.results.length;n++){var s=e.results[n],s=this.option(s);t.push(s)}this.$results.append(t)}else 0===this.$results.children().length&&this.trigger(\"results:message\",{message:\"noResults\"})},s.prototype.position=function(e,t){t.find(\".select2-results\").append(e)},s.prototype.sort=function(e){return this.options.get(\"sorter\")(e)},s.prototype.highlightFirstItem=function(){var e=this.$results.find(\".select2-results__option--selectable\"),t=e.filter(\".select2-results__option--selected\");(0<t.length?t:e).first().trigger(\"mouseenter\"),this.ensureHighlightVisible()},s.prototype.setClasses=function(){var t=this;this.data.current(function(e){var s=e.map(function(e){return e.id.toString()});t.$results.find(\".select2-results__option--selectable\").each(function(){var e=d(this),t=p.GetData(this,\"data\"),n=\"\"+t.id;null!=t.element&&t.element.selected||null==t.element&&-1<s.indexOf(n)?(this.classList.add(\"select2-results__option--selected\"),e.attr(\"aria-selected\",\"true\")):(this.classList.remove(\"select2-results__option--selected\"),e.attr(\"aria-selected\",\"false\"))})})},s.prototype.showLoading=function(e){this.hideLoading();e={disabled:!0,loading:!0,text:this.options.get(\"translations\").get(\"searching\")(e)},e=this.option(e);e.className+=\" loading-results\",this.$results.prepend(e)},s.prototype.hideLoading=function(){this.$results.find(\".loading-results\").remove()},s.prototype.option=function(e){var t=document.createElement(\"li\");t.classList.add(\"select2-results__option\"),t.classList.add(\"select2-results__option--selectable\");var n,s={role:\"option\"},i=window.Element.prototype.matches||window.Element.prototype.msMatchesSelector||window.Element.prototype.webkitMatchesSelector;for(n in(null!=e.element&&i.call(e.element,\":disabled\")||null==e.element&&e.disabled)&&(s[\"aria-disabled\"]=\"true\",t.classList.remove(\"select2-results__option--selectable\"),t.classList.add(\"select2-results__option--disabled\")),null==e.id&&t.classList.remove(\"select2-results__option--selectable\"),null!=e._resultId&&(t.id=e._resultId),e.title&&(t.title=e.title),e.children&&(s.role=\"group\",s[\"aria-label\"]=e.text,t.classList.remove(\"select2-results__option--selectable\"),t.classList.add(\"select2-results__option--group\")),s){var r=s[n];t.setAttribute(n,r)}if(e.children){var o=d(t),a=document.createElement(\"strong\");a.className=\"select2-results__group\",this.template(e,a);for(var l=[],c=0;c<e.children.length;c++){var u=e.children[c],u=this.option(u);l.push(u)}i=d(\"<ul></ul>\",{class:\"select2-results__options select2-results__options--nested\",role:\"none\"});i.append(l),o.append(a),o.append(i)}else this.template(e,t);return p.StoreData(t,\"data\",e),t},s.prototype.bind=function(t,e){var i=this,n=t.id+\"-results\";this.$results.attr(\"id\",n),t.on(\"results:all\",function(e){i.clear(),i.append(e.data),t.isOpen()&&(i.setClasses(),i.highlightFirstItem())}),t.on(\"results:append\",function(e){i.append(e.data),t.isOpen()&&i.setClasses()}),t.on(\"query\",function(e){i.hideMessages(),i.showLoading(e)}),t.on(\"select\",function(){t.isOpen()&&(i.setClasses(),i.options.get(\"scrollAfterSelect\")&&i.highlightFirstItem())}),t.on(\"unselect\",function(){t.isOpen()&&(i.setClasses(),i.options.get(\"scrollAfterSelect\")&&i.highlightFirstItem())}),t.on(\"open\",function(){i.$results.attr(\"aria-expanded\",\"true\"),i.$results.attr(\"aria-hidden\",\"false\"),i.setClasses(),i.ensureHighlightVisible()}),t.on(\"close\",function(){i.$results.attr(\"aria-expanded\",\"false\"),i.$results.attr(\"aria-hidden\",\"true\"),i.$results.removeAttr(\"aria-activedescendant\")}),t.on(\"results:toggle\",function(){var e=i.getHighlightedResults();0!==e.length&&e.trigger(\"mouseup\")}),t.on(\"results:select\",function(){var e,t=i.getHighlightedResults();0!==t.length&&(e=p.GetData(t[0],\"data\"),t.hasClass(\"select2-results__option--selected\")?i.trigger(\"close\",{}):i.trigger(\"select\",{data:e}))}),t.on(\"results:previous\",function(){var e,t=i.getHighlightedResults(),n=i.$results.find(\".select2-results__option--selectable\"),s=n.index(t);s<=0||(e=s-1,0===t.length&&(e=0),(s=n.eq(e)).trigger(\"mouseenter\"),t=i.$results.offset().top,n=s.offset().top,s=i.$results.scrollTop()+(n-t),0===e?i.$results.scrollTop(0):n-t<0&&i.$results.scrollTop(s))}),t.on(\"results:next\",function(){var e,t=i.getHighlightedResults(),n=i.$results.find(\".select2-results__option--selectable\"),s=n.index(t)+1;s>=n.length||((e=n.eq(s)).trigger(\"mouseenter\"),t=i.$results.offset().top+i.$results.outerHeight(!1),n=e.offset().top+e.outerHeight(!1),e=i.$results.scrollTop()+n-t,0===s?i.$results.scrollTop(0):t<n&&i.$results.scrollTop(e))}),t.on(\"results:focus\",function(e){e.element[0].classList.add(\"select2-results__option--highlighted\"),e.element[0].setAttribute(\"aria-selected\",\"true\")}),t.on(\"results:message\",function(e){i.displayMessage(e)}),d.fn.mousewheel&&this.$results.on(\"mousewheel\",function(e){var t=i.$results.scrollTop(),n=i.$results.get(0).scrollHeight-t+e.deltaY,t=0<e.deltaY&&t-e.deltaY<=0,n=e.deltaY<0&&n<=i.$results.height();t?(i.$results.scrollTop(0),e.preventDefault(),e.stopPropagation()):n&&(i.$results.scrollTop(i.$results.get(0).scrollHeight-i.$results.height()),e.preventDefault(),e.stopPropagation())}),this.$results.on(\"mouseup\",\".select2-results__option--selectable\",function(e){var t=d(this),n=p.GetData(this,\"data\");t.hasClass(\"select2-results__option--selected\")?i.options.get(\"multiple\")?i.trigger(\"unselect\",{originalEvent:e,data:n}):i.trigger(\"close\",{}):i.trigger(\"select\",{originalEvent:e,data:n})}),this.$results.on(\"mouseenter\",\".select2-results__option--selectable\",function(e){var t=p.GetData(this,\"data\");i.getHighlightedResults().removeClass(\"select2-results__option--highlighted\").attr(\"aria-selected\",\"false\"),i.trigger(\"results:focus\",{data:t,element:d(this)})})},s.prototype.getHighlightedResults=function(){return this.$results.find(\".select2-results__option--highlighted\")},s.prototype.destroy=function(){this.$results.remove()},s.prototype.ensureHighlightVisible=function(){var e,t,n,s,i=this.getHighlightedResults();0!==i.length&&(e=this.$results.find(\".select2-results__option--selectable\").index(i),s=this.$results.offset().top,t=i.offset().top,n=this.$results.scrollTop()+(t-s),s=t-s,n-=2*i.outerHeight(!1),e<=2?this.$results.scrollTop(0):(s>this.$results.outerHeight()||s<0)&&this.$results.scrollTop(n))},s.prototype.template=function(e,t){var n=this.options.get(\"templateResult\"),s=this.options.get(\"escapeMarkup\"),e=n(e,t);null==e?t.style.display=\"none\":\"string\"==typeof e?t.innerHTML=s(e):d(t).append(e)},s}),u.define(\"select2/keys\",[],function(){return{BACKSPACE:8,TAB:9,ENTER:13,SHIFT:16,CTRL:17,ALT:18,ESC:27,SPACE:32,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,DELETE:46}}),u.define(\"select2/selection/base\",[\"jquery\",\"../utils\",\"../keys\"],function(n,s,i){function r(e,t){this.$element=e,this.options=t,r.__super__.constructor.call(this)}return s.Extend(r,s.Observable),r.prototype.render=function(){var e=n('<span class=\"select2-selection\" role=\"combobox\" aria-haspopup=\"true\" aria-expanded=\"false\"></span>');return this._tabindex=0,null!=s.GetData(this.$element[0],\"old-tabindex\")?this._tabindex=s.GetData(this.$element[0],\"old-tabindex\"):null!=this.$element.attr(\"tabindex\")&&(this._tabindex=this.$element.attr(\"tabindex\")),e.attr(\"title\",this.$element.attr(\"title\")),e.attr(\"tabindex\",this._tabindex),e.attr(\"aria-disabled\",\"false\"),this.$selection=e},r.prototype.bind=function(e,t){var n=this,s=e.id+\"-results\";this.container=e,this.$selection.on(\"focus\",function(e){n.trigger(\"focus\",e)}),this.$selection.on(\"blur\",function(e){n._handleBlur(e)}),this.$selection.on(\"keydown\",function(e){n.trigger(\"keypress\",e),e.which===i.SPACE&&e.preventDefault()}),e.on(\"results:focus\",function(e){n.$selection.attr(\"aria-activedescendant\",e.data._resultId)}),e.on(\"selection:update\",function(e){n.update(e.data)}),e.on(\"open\",function(){n.$selection.attr(\"aria-expanded\",\"true\"),n.$selection.attr(\"aria-owns\",s),n._attachCloseHandler(e)}),e.on(\"close\",function(){n.$selection.attr(\"aria-expanded\",\"false\"),n.$selection.removeAttr(\"aria-activedescendant\"),n.$selection.removeAttr(\"aria-owns\"),n.$selection.trigger(\"focus\"),n._detachCloseHandler(e)}),e.on(\"enable\",function(){n.$selection.attr(\"tabindex\",n._tabindex),n.$selection.attr(\"aria-disabled\",\"false\")}),e.on(\"disable\",function(){n.$selection.attr(\"tabindex\",\"-1\"),n.$selection.attr(\"aria-disabled\",\"true\")})},r.prototype._handleBlur=function(e){var t=this;window.setTimeout(function(){document.activeElement==t.$selection[0]||n.contains(t.$selection[0],document.activeElement)||t.trigger(\"blur\",e)},1)},r.prototype._attachCloseHandler=function(e){n(document.body).on(\"mousedown.select2.\"+e.id,function(e){var t=n(e.target).closest(\".select2\");n(\".select2.select2-container--open\").each(function(){this!=t[0]&&s.GetData(this,\"element\").select2(\"close\")})})},r.prototype._detachCloseHandler=function(e){n(document.body).off(\"mousedown.select2.\"+e.id)},r.prototype.position=function(e,t){t.find(\".selection\").append(e)},r.prototype.destroy=function(){this._detachCloseHandler(this.container)},r.prototype.update=function(e){throw new Error(\"The `update` method must be defined in child classes.\")},r.prototype.isEnabled=function(){return!this.isDisabled()},r.prototype.isDisabled=function(){return this.options.get(\"disabled\")},r}),u.define(\"select2/selection/single\",[\"jquery\",\"./base\",\"../utils\",\"../keys\"],function(e,t,n,s){function i(){i.__super__.constructor.apply(this,arguments)}return n.Extend(i,t),i.prototype.render=function(){var e=i.__super__.render.call(this);return e[0].classList.add(\"select2-selection--single\"),e.html('<span class=\"select2-selection__rendered\"></span><span class=\"select2-selection__arrow\" role=\"presentation\"><b role=\"presentation\"></b></span>'),e},i.prototype.bind=function(t,e){var n=this;i.__super__.bind.apply(this,arguments);var s=t.id+\"-container\";this.$selection.find(\".select2-selection__rendered\").attr(\"id\",s).attr(\"role\",\"textbox\").attr(\"aria-readonly\",\"true\"),this.$selection.attr(\"aria-labelledby\",s),this.$selection.attr(\"aria-controls\",s),this.$selection.on(\"mousedown\",function(e){1===e.which&&n.trigger(\"toggle\",{originalEvent:e})}),this.$selection.on(\"focus\",function(e){}),this.$selection.on(\"blur\",function(e){}),t.on(\"focus\",function(e){t.isOpen()||n.$selection.trigger(\"focus\")})},i.prototype.clear=function(){var e=this.$selection.find(\".select2-selection__rendered\");e.empty(),e.removeAttr(\"title\")},i.prototype.display=function(e,t){var n=this.options.get(\"templateSelection\");return this.options.get(\"escapeMarkup\")(n(e,t))},i.prototype.selectionContainer=function(){return e(\"<span></span>\")},i.prototype.update=function(e){var t,n;0!==e.length?(n=e[0],t=this.$selection.find(\".select2-selection__rendered\"),e=this.display(n,t),t.empty().append(e),(n=n.title||n.text)?t.attr(\"title\",n):t.removeAttr(\"title\")):this.clear()},i}),u.define(\"select2/selection/multiple\",[\"jquery\",\"./base\",\"../utils\"],function(i,e,c){function r(e,t){r.__super__.constructor.apply(this,arguments)}return c.Extend(r,e),r.prototype.render=function(){var e=r.__super__.render.call(this);return e[0].classList.add(\"select2-selection--multiple\"),e.html('<ul class=\"select2-selection__rendered\"></ul>'),e},r.prototype.bind=function(e,t){var n=this;r.__super__.bind.apply(this,arguments);var s=e.id+\"-container\";this.$selection.find(\".select2-selection__rendered\").attr(\"id\",s),this.$selection.on(\"click\",function(e){n.trigger(\"toggle\",{originalEvent:e})}),this.$selection.on(\"click\",\".select2-selection__choice__remove\",function(e){var t;n.isDisabled()||(t=i(this).parent(),t=c.GetData(t[0],\"data\"),n.trigger(\"unselect\",{originalEvent:e,data:t}))}),this.$selection.on(\"keydown\",\".select2-selection__choice__remove\",function(e){n.isDisabled()||e.stopPropagation()})},r.prototype.clear=function(){var e=this.$selection.find(\".select2-selection__rendered\");e.empty(),e.removeAttr(\"title\")},r.prototype.display=function(e,t){var n=this.options.get(\"templateSelection\");return this.options.get(\"escapeMarkup\")(n(e,t))},r.prototype.selectionContainer=function(){return i('<li class=\"select2-selection__choice\"><button type=\"button\" class=\"select2-selection__choice__remove\" tabindex=\"-1\"><span aria-hidden=\"true\">&times;</span></button><span class=\"select2-selection__choice__display\"></span></li>')},r.prototype.update=function(e){if(this.clear(),0!==e.length){for(var t=[],n=this.$selection.find(\".select2-selection__rendered\").attr(\"id\")+\"-choice-\",s=0;s<e.length;s++){var i=e[s],r=this.selectionContainer(),o=this.display(i,r),a=n+c.generateChars(4)+\"-\";i.id?a+=i.id:a+=c.generateChars(4),r.find(\".select2-selection__choice__display\").append(o).attr(\"id\",a);var l=i.title||i.text;l&&r.attr(\"title\",l);o=this.options.get(\"translations\").get(\"removeItem\"),l=r.find(\".select2-selection__choice__remove\");l.attr(\"title\",o()),l.attr(\"aria-label\",o()),l.attr(\"aria-describedby\",a),c.StoreData(r[0],\"data\",i),t.push(r)}this.$selection.find(\".select2-selection__rendered\").append(t)}},r}),u.define(\"select2/selection/placeholder\",[],function(){function e(e,t,n){this.placeholder=this.normalizePlaceholder(n.get(\"placeholder\")),e.call(this,t,n)}return e.prototype.normalizePlaceholder=function(e,t){return t=\"string\"==typeof t?{id:\"\",text:t}:t},e.prototype.createPlaceholder=function(e,t){var n=this.selectionContainer();n.html(this.display(t)),n[0].classList.add(\"select2-selection__placeholder\"),n[0].classList.remove(\"select2-selection__choice\");t=t.title||t.text||n.text();return this.$selection.find(\".select2-selection__rendered\").attr(\"title\",t),n},e.prototype.update=function(e,t){var n=1==t.length&&t[0].id!=this.placeholder.id;if(1<t.length||n)return e.call(this,t);this.clear();t=this.createPlaceholder(this.placeholder);this.$selection.find(\".select2-selection__rendered\").append(t)},e}),u.define(\"select2/selection/allowClear\",[\"jquery\",\"../keys\",\"../utils\"],function(i,s,a){function e(){}return e.prototype.bind=function(e,t,n){var s=this;e.call(this,t,n),null==this.placeholder&&this.options.get(\"debug\")&&window.console&&console.error&&console.error(\"Select2: The `allowClear` option should be used in combination with the `placeholder` option.\"),this.$selection.on(\"mousedown\",\".select2-selection__clear\",function(e){s._handleClear(e)}),t.on(\"keypress\",function(e){s._handleKeyboardClear(e,t)})},e.prototype._handleClear=function(e,t){if(!this.isDisabled()){var n=this.$selection.find(\".select2-selection__clear\");if(0!==n.length){t.stopPropagation();var s=a.GetData(n[0],\"data\"),i=this.$element.val();this.$element.val(this.placeholder.id);var r={data:s};if(this.trigger(\"clear\",r),r.prevented)this.$element.val(i);else{for(var o=0;o<s.length;o++)if(r={data:s[o]},this.trigger(\"unselect\",r),r.prevented)return void this.$element.val(i);this.$element.trigger(\"input\").trigger(\"change\"),this.trigger(\"toggle\",{})}}}},e.prototype._handleKeyboardClear=function(e,t,n){n.isOpen()||t.which!=s.DELETE&&t.which!=s.BACKSPACE||this._handleClear(t)},e.prototype.update=function(e,t){var n,s;e.call(this,t),this.$selection.find(\".select2-selection__clear\").remove(),this.$selection[0].classList.remove(\"select2-selection--clearable\"),0<this.$selection.find(\".select2-selection__placeholder\").length||0===t.length||(n=this.$selection.find(\".select2-selection__rendered\").attr(\"id\"),s=this.options.get(\"translations\").get(\"removeAllItems\"),(e=i('<button type=\"button\" class=\"select2-selection__clear\" tabindex=\"-1\"><span aria-hidden=\"true\">&times;</span></button>')).attr(\"title\",s()),e.attr(\"aria-label\",s()),e.attr(\"aria-describedby\",n),a.StoreData(e[0],\"data\",t),this.$selection.prepend(e),this.$selection[0].classList.add(\"select2-selection--clearable\"))},e}),u.define(\"select2/selection/search\",[\"jquery\",\"../utils\",\"../keys\"],function(s,a,l){function e(e,t,n){e.call(this,t,n)}return e.prototype.render=function(e){var t=this.options.get(\"translations\").get(\"search\"),n=s('<span class=\"select2-search select2-search--inline\"><textarea class=\"select2-search__field\" type=\"search\" tabindex=\"-1\" autocorrect=\"off\" autocapitalize=\"none\" spellcheck=\"false\" role=\"searchbox\" aria-autocomplete=\"list\" ></textarea></span>');this.$searchContainer=n,this.$search=n.find(\"textarea\"),this.$search.prop(\"autocomplete\",this.options.get(\"autocomplete\")),this.$search.attr(\"aria-label\",t());e=e.call(this);return this._transferTabIndex(),e.append(this.$searchContainer),e},e.prototype.bind=function(e,t,n){var s=this,i=t.id+\"-results\",r=t.id+\"-container\";e.call(this,t,n),s.$search.attr(\"aria-describedby\",r),t.on(\"open\",function(){s.$search.attr(\"aria-controls\",i),s.$search.trigger(\"focus\")}),t.on(\"close\",function(){s.$search.val(\"\"),s.resizeSearch(),s.$search.removeAttr(\"aria-controls\"),s.$search.removeAttr(\"aria-activedescendant\"),s.$search.trigger(\"focus\")}),t.on(\"enable\",function(){s.$search.prop(\"disabled\",!1),s._transferTabIndex()}),t.on(\"disable\",function(){s.$search.prop(\"disabled\",!0)}),t.on(\"focus\",function(e){s.$search.trigger(\"focus\")}),t.on(\"results:focus\",function(e){e.data._resultId?s.$search.attr(\"aria-activedescendant\",e.data._resultId):s.$search.removeAttr(\"aria-activedescendant\")}),this.$selection.on(\"focusin\",\".select2-search--inline\",function(e){s.trigger(\"focus\",e)}),this.$selection.on(\"focusout\",\".select2-search--inline\",function(e){s._handleBlur(e)}),this.$selection.on(\"keydown\",\".select2-search--inline\",function(e){var t;e.stopPropagation(),s.trigger(\"keypress\",e),s._keyUpPrevented=e.isDefaultPrevented(),e.which!==l.BACKSPACE||\"\"!==s.$search.val()||0<(t=s.$selection.find(\".select2-selection__choice\").last()).length&&(t=a.GetData(t[0],\"data\"),s.searchRemoveChoice(t),e.preventDefault())}),this.$selection.on(\"click\",\".select2-search--inline\",function(e){s.$search.val()&&e.stopPropagation()});var t=document.documentMode,o=t&&t<=11;this.$selection.on(\"input.searchcheck\",\".select2-search--inline\",function(e){o?s.$selection.off(\"input.search input.searchcheck\"):s.$selection.off(\"keyup.search\")}),this.$selection.on(\"keyup.search input.search\",\".select2-search--inline\",function(e){var t;o&&\"input\"===e.type?s.$selection.off(\"input.search input.searchcheck\"):(t=e.which)!=l.SHIFT&&t!=l.CTRL&&t!=l.ALT&&t!=l.TAB&&s.handleSearch(e)})},e.prototype._transferTabIndex=function(e){this.$search.attr(\"tabindex\",this.$selection.attr(\"tabindex\")),this.$selection.attr(\"tabindex\",\"-1\")},e.prototype.createPlaceholder=function(e,t){this.$search.attr(\"placeholder\",t.text)},e.prototype.update=function(e,t){var n=this.$search[0]==document.activeElement;this.$search.attr(\"placeholder\",\"\"),e.call(this,t),this.resizeSearch(),n&&this.$search.trigger(\"focus\")},e.prototype.handleSearch=function(){var e;this.resizeSearch(),this._keyUpPrevented||(e=this.$search.val(),this.trigger(\"query\",{term:e})),this._keyUpPrevented=!1},e.prototype.searchRemoveChoice=function(e,t){this.trigger(\"unselect\",{data:t}),this.$search.val(t.text),this.handleSearch()},e.prototype.resizeSearch=function(){this.$search.css(\"width\",\"25px\");var e=\"100%\";\"\"===this.$search.attr(\"placeholder\")&&(e=.75*(this.$search.val().length+1)+\"em\"),this.$search.css(\"width\",e)},e}),u.define(\"select2/selection/selectionCss\",[\"../utils\"],function(n){function e(){}return e.prototype.render=function(e){var t=e.call(this),e=this.options.get(\"selectionCssClass\")||\"\";return-1!==e.indexOf(\":all:\")&&(e=e.replace(\":all:\",\"\"),n.copyNonInternalCssClasses(t[0],this.$element[0])),t.addClass(e),t},e}),u.define(\"select2/selection/eventRelay\",[\"jquery\"],function(o){function e(){}return e.prototype.bind=function(e,t,n){var s=this,i=[\"open\",\"opening\",\"close\",\"closing\",\"select\",\"selecting\",\"unselect\",\"unselecting\",\"clear\",\"clearing\"],r=[\"opening\",\"closing\",\"selecting\",\"unselecting\",\"clearing\"];e.call(this,t,n),t.on(\"*\",function(e,t){var n;-1!==i.indexOf(e)&&(t=t||{},n=o.Event(\"select2:\"+e,{params:t}),s.$element.trigger(n),-1!==r.indexOf(e)&&(t.prevented=n.isDefaultPrevented()))})},e}),u.define(\"select2/translation\",[\"jquery\",\"require\"],function(t,n){function s(e){this.dict=e||{}}return s.prototype.all=function(){return this.dict},s.prototype.get=function(e){return this.dict[e]},s.prototype.extend=function(e){this.dict=t.extend({},e.all(),this.dict)},s._cache={},s.loadPath=function(e){var t;return e in s._cache||(t=n(e),s._cache[e]=t),new s(s._cache[e])},s}),u.define(\"select2/diacritics\",[],function(){return{\"Ⓐ\":\"A\",\"\":\"A\",\"À\":\"A\",\"Á\":\"A\",\"Â\":\"A\",\"Ầ\":\"A\",\"Ấ\":\"A\",\"Ẫ\":\"A\",\"Ẩ\":\"A\",\"Ã\":\"A\",\"Ā\":\"A\",\"Ă\":\"A\",\"Ằ\":\"A\",\"Ắ\":\"A\",\"Ẵ\":\"A\",\"Ẳ\":\"A\",\"Ȧ\":\"A\",\"Ǡ\":\"A\",\"Ä\":\"A\",\"Ǟ\":\"A\",\"Ả\":\"A\",\"Å\":\"A\",\"Ǻ\":\"A\",\"Ǎ\":\"A\",\"Ȁ\":\"A\",\"Ȃ\":\"A\",\"Ạ\":\"A\",\"Ậ\":\"A\",\"Ặ\":\"A\",\"Ḁ\":\"A\",\"Ą\":\"A\",\"Ⱥ\":\"A\",\"Ɐ\":\"A\",\"Ꜳ\":\"AA\",\"Æ\":\"AE\",\"Ǽ\":\"AE\",\"Ǣ\":\"AE\",\"Ꜵ\":\"AO\",\"Ꜷ\":\"AU\",\"Ꜹ\":\"AV\",\"Ꜻ\":\"AV\",\"Ꜽ\":\"AY\",\"Ⓑ\":\"B\",\"\":\"B\",\"Ḃ\":\"B\",\"Ḅ\":\"B\",\"Ḇ\":\"B\",\"Ƀ\":\"B\",\"Ƃ\":\"B\",\"Ɓ\":\"B\",\"Ⓒ\":\"C\",\"\":\"C\",\"Ć\":\"C\",\"Ĉ\":\"C\",\"Ċ\":\"C\",\"Č\":\"C\",\"Ç\":\"C\",\"Ḉ\":\"C\",\"Ƈ\":\"C\",\"Ȼ\":\"C\",\"Ꜿ\":\"C\",\"Ⓓ\":\"D\",\"\":\"D\",\"Ḋ\":\"D\",\"Ď\":\"D\",\"Ḍ\":\"D\",\"Ḑ\":\"D\",\"Ḓ\":\"D\",\"Ḏ\":\"D\",\"Đ\":\"D\",\"Ƌ\":\"D\",\"Ɗ\":\"D\",\"Ɖ\":\"D\",\"Ꝺ\":\"D\",\"DZ\":\"DZ\",\"DŽ\":\"DZ\",\"Dz\":\"Dz\",\"Dž\":\"Dz\",\"Ⓔ\":\"E\",\"\":\"E\",\"È\":\"E\",\"É\":\"E\",\"Ê\":\"E\",\"Ề\":\"E\",\"Ế\":\"E\",\"Ễ\":\"E\",\"Ể\":\"E\",\"Ẽ\":\"E\",\"Ē\":\"E\",\"Ḕ\":\"E\",\"Ḗ\":\"E\",\"Ĕ\":\"E\",\"Ė\":\"E\",\"Ë\":\"E\",\"Ẻ\":\"E\",\"Ě\":\"E\",\"Ȅ\":\"E\",\"Ȇ\":\"E\",\"Ẹ\":\"E\",\"Ệ\":\"E\",\"Ȩ\":\"E\",\"Ḝ\":\"E\",\"Ę\":\"E\",\"Ḙ\":\"E\",\"Ḛ\":\"E\",\"Ɛ\":\"E\",\"Ǝ\":\"E\",\"Ⓕ\":\"F\",\"\":\"F\",\"Ḟ\":\"F\",\"Ƒ\":\"F\",\"Ꝼ\":\"F\",\"Ⓖ\":\"G\",\"\":\"G\",\"Ǵ\":\"G\",\"Ĝ\":\"G\",\"Ḡ\":\"G\",\"Ğ\":\"G\",\"Ġ\":\"G\",\"Ǧ\":\"G\",\"Ģ\":\"G\",\"Ǥ\":\"G\",\"Ɠ\":\"G\",\"Ꞡ\":\"G\",\"Ᵹ\":\"G\",\"Ꝿ\":\"G\",\"Ⓗ\":\"H\",\"\":\"H\",\"Ĥ\":\"H\",\"Ḣ\":\"H\",\"Ḧ\":\"H\",\"Ȟ\":\"H\",\"Ḥ\":\"H\",\"Ḩ\":\"H\",\"Ḫ\":\"H\",\"Ħ\":\"H\",\"Ⱨ\":\"H\",\"Ⱶ\":\"H\",\"Ɥ\":\"H\",\"Ⓘ\":\"I\",\"\":\"I\",\"Ì\":\"I\",\"Í\":\"I\",\"Î\":\"I\",\"Ĩ\":\"I\",\"Ī\":\"I\",\"Ĭ\":\"I\",\"İ\":\"I\",\"Ï\":\"I\",\"Ḯ\":\"I\",\"Ỉ\":\"I\",\"Ǐ\":\"I\",\"Ȉ\":\"I\",\"Ȋ\":\"I\",\"Ị\":\"I\",\"Į\":\"I\",\"Ḭ\":\"I\",\"Ɨ\":\"I\",\"Ⓙ\":\"J\",\"\":\"J\",\"Ĵ\":\"J\",\"Ɉ\":\"J\",\"Ⓚ\":\"K\",\"\":\"K\",\"Ḱ\":\"K\",\"Ǩ\":\"K\",\"Ḳ\":\"K\",\"Ķ\":\"K\",\"Ḵ\":\"K\",\"Ƙ\":\"K\",\"Ⱪ\":\"K\",\"Ꝁ\":\"K\",\"Ꝃ\":\"K\",\"Ꝅ\":\"K\",\"Ꞣ\":\"K\",\"Ⓛ\":\"L\",\"\":\"L\",\"Ŀ\":\"L\",\"Ĺ\":\"L\",\"Ľ\":\"L\",\"Ḷ\":\"L\",\"Ḹ\":\"L\",\"Ļ\":\"L\",\"Ḽ\":\"L\",\"Ḻ\":\"L\",\"Ł\":\"L\",\"Ƚ\":\"L\",\"Ɫ\":\"L\",\"Ⱡ\":\"L\",\"Ꝉ\":\"L\",\"Ꝇ\":\"L\",\"Ꞁ\":\"L\",\"LJ\":\"LJ\",\"Lj\":\"Lj\",\"Ⓜ\":\"M\",\"\":\"M\",\"Ḿ\":\"M\",\"Ṁ\":\"M\",\"Ṃ\":\"M\",\"Ɱ\":\"M\",\"Ɯ\":\"M\",\"Ⓝ\":\"N\",\"\":\"N\",\"Ǹ\":\"N\",\"Ń\":\"N\",\"Ñ\":\"N\",\"Ṅ\":\"N\",\"Ň\":\"N\",\"Ṇ\":\"N\",\"Ņ\":\"N\",\"Ṋ\":\"N\",\"Ṉ\":\"N\",\"Ƞ\":\"N\",\"Ɲ\":\"N\",\"Ꞑ\":\"N\",\"Ꞥ\":\"N\",\"NJ\":\"NJ\",\"Nj\":\"Nj\",\"Ⓞ\":\"O\",\"\":\"O\",\"Ò\":\"O\",\"Ó\":\"O\",\"Ô\":\"O\",\"Ồ\":\"O\",\"Ố\":\"O\",\"Ỗ\":\"O\",\"Ổ\":\"O\",\"Õ\":\"O\",\"Ṍ\":\"O\",\"Ȭ\":\"O\",\"Ṏ\":\"O\",\"Ō\":\"O\",\"Ṑ\":\"O\",\"Ṓ\":\"O\",\"Ŏ\":\"O\",\"Ȯ\":\"O\",\"Ȱ\":\"O\",\"Ö\":\"O\",\"Ȫ\":\"O\",\"Ỏ\":\"O\",\"Ő\":\"O\",\"Ǒ\":\"O\",\"Ȍ\":\"O\",\"Ȏ\":\"O\",\"Ơ\":\"O\",\"Ờ\":\"O\",\"Ớ\":\"O\",\"Ỡ\":\"O\",\"Ở\":\"O\",\"Ợ\":\"O\",\"Ọ\":\"O\",\"Ộ\":\"O\",\"Ǫ\":\"O\",\"Ǭ\":\"O\",\"Ø\":\"O\",\"Ǿ\":\"O\",\"Ɔ\":\"O\",\"Ɵ\":\"O\",\"Ꝋ\":\"O\",\"Ꝍ\":\"O\",\"Œ\":\"OE\",\"Ƣ\":\"OI\",\"Ꝏ\":\"OO\",\"Ȣ\":\"OU\",\"Ⓟ\":\"P\",\"\":\"P\",\"Ṕ\":\"P\",\"Ṗ\":\"P\",\"Ƥ\":\"P\",\"Ᵽ\":\"P\",\"Ꝑ\":\"P\",\"Ꝓ\":\"P\",\"Ꝕ\":\"P\",\"Ⓠ\":\"Q\",\"\":\"Q\",\"Ꝗ\":\"Q\",\"Ꝙ\":\"Q\",\"Ɋ\":\"Q\",\"Ⓡ\":\"R\",\"\":\"R\",\"Ŕ\":\"R\",\"Ṙ\":\"R\",\"Ř\":\"R\",\"Ȑ\":\"R\",\"Ȓ\":\"R\",\"Ṛ\":\"R\",\"Ṝ\":\"R\",\"Ŗ\":\"R\",\"Ṟ\":\"R\",\"Ɍ\":\"R\",\"Ɽ\":\"R\",\"\":\"R\",\"Ꞧ\":\"R\",\"Ꞃ\":\"R\",\"Ⓢ\":\"S\",\"\":\"S\",\"ẞ\":\"S\",\"Ś\":\"S\",\"Ṥ\":\"S\",\"Ŝ\":\"S\",\"Ṡ\":\"S\",\"Š\":\"S\",\"Ṧ\":\"S\",\"Ṣ\":\"S\",\"Ṩ\":\"S\",\"Ș\":\"S\",\"Ş\":\"S\",\"Ȿ\":\"S\",\"Ꞩ\":\"S\",\"Ꞅ\":\"S\",\"Ⓣ\":\"T\",\"\":\"T\",\"Ṫ\":\"T\",\"Ť\":\"T\",\"Ṭ\":\"T\",\"Ț\":\"T\",\"Ţ\":\"T\",\"Ṱ\":\"T\",\"Ṯ\":\"T\",\"Ŧ\":\"T\",\"Ƭ\":\"T\",\"Ʈ\":\"T\",\"Ⱦ\":\"T\",\"Ꞇ\":\"T\",\"Ꜩ\":\"TZ\",\"Ⓤ\":\"U\",\"\":\"U\",\"Ù\":\"U\",\"Ú\":\"U\",\"Û\":\"U\",\"Ũ\":\"U\",\"Ṹ\":\"U\",\"Ū\":\"U\",\"Ṻ\":\"U\",\"Ŭ\":\"U\",\"Ü\":\"U\",\"Ǜ\":\"U\",\"Ǘ\":\"U\",\"Ǖ\":\"U\",\"Ǚ\":\"U\",\"Ủ\":\"U\",\"Ů\":\"U\",\"Ű\":\"U\",\"Ǔ\":\"U\",\"Ȕ\":\"U\",\"Ȗ\":\"U\",\"Ư\":\"U\",\"Ừ\":\"U\",\"Ứ\":\"U\",\"Ữ\":\"U\",\"Ử\":\"U\",\"Ự\":\"U\",\"Ụ\":\"U\",\"Ṳ\":\"U\",\"Ų\":\"U\",\"Ṷ\":\"U\",\"Ṵ\":\"U\",\"Ʉ\":\"U\",\"Ⓥ\":\"V\",\"\":\"V\",\"Ṽ\":\"V\",\"Ṿ\":\"V\",\"Ʋ\":\"V\",\"Ꝟ\":\"V\",\"Ʌ\":\"V\",\"Ꝡ\":\"VY\",\"Ⓦ\":\"W\",\"\":\"W\",\"Ẁ\":\"W\",\"Ẃ\":\"W\",\"Ŵ\":\"W\",\"Ẇ\":\"W\",\"Ẅ\":\"W\",\"Ẉ\":\"W\",\"Ⱳ\":\"W\",\"Ⓧ\":\"X\",\"\":\"X\",\"Ẋ\":\"X\",\"Ẍ\":\"X\",\"Ⓨ\":\"Y\",\"\":\"Y\",\"Ỳ\":\"Y\",\"Ý\":\"Y\",\"Ŷ\":\"Y\",\"Ỹ\":\"Y\",\"Ȳ\":\"Y\",\"Ẏ\":\"Y\",\"Ÿ\":\"Y\",\"Ỷ\":\"Y\",\"Ỵ\":\"Y\",\"Ƴ\":\"Y\",\"Ɏ\":\"Y\",\"Ỿ\":\"Y\",\"Ⓩ\":\"Z\",\"\":\"Z\",\"Ź\":\"Z\",\"Ẑ\":\"Z\",\"Ż\":\"Z\",\"Ž\":\"Z\",\"Ẓ\":\"Z\",\"Ẕ\":\"Z\",\"Ƶ\":\"Z\",\"Ȥ\":\"Z\",\"Ɀ\":\"Z\",\"Ⱬ\":\"Z\",\"Ꝣ\":\"Z\",\"ⓐ\":\"a\",\"\":\"a\",\"ẚ\":\"a\",\"à\":\"a\",\"á\":\"a\",\"â\":\"a\",\"ầ\":\"a\",\"ấ\":\"a\",\"ẫ\":\"a\",\"ẩ\":\"a\",\"ã\":\"a\",\"ā\":\"a\",\"ă\":\"a\",\"ằ\":\"a\",\"ắ\":\"a\",\"ẵ\":\"a\",\"ẳ\":\"a\",\"ȧ\":\"a\",\"ǡ\":\"a\",\"ä\":\"a\",\"ǟ\":\"a\",\"ả\":\"a\",\"å\":\"a\",\"ǻ\":\"a\",\"ǎ\":\"a\",\"ȁ\":\"a\",\"ȃ\":\"a\",\"ạ\":\"a\",\"ậ\":\"a\",\"ặ\":\"a\",\"ḁ\":\"a\",\"ą\":\"a\",\"ⱥ\":\"a\",\"ɐ\":\"a\",\"ꜳ\":\"aa\",\"æ\":\"ae\",\"ǽ\":\"ae\",\"ǣ\":\"ae\",\"ꜵ\":\"ao\",\"ꜷ\":\"au\",\"ꜹ\":\"av\",\"ꜻ\":\"av\",\"ꜽ\":\"ay\",\"ⓑ\":\"b\",\"\":\"b\",\"ḃ\":\"b\",\"ḅ\":\"b\",\"ḇ\":\"b\",\"ƀ\":\"b\",\"ƃ\":\"b\",\"ɓ\":\"b\",\"ⓒ\":\"c\",\"\":\"c\",\"ć\":\"c\",\"ĉ\":\"c\",\"ċ\":\"c\",\"č\":\"c\",\"ç\":\"c\",\"ḉ\":\"c\",\"ƈ\":\"c\",\"ȼ\":\"c\",\"ꜿ\":\"c\",\"ↄ\":\"c\",\"ⓓ\":\"d\",\"\":\"d\",\"ḋ\":\"d\",\"ď\":\"d\",\"ḍ\":\"d\",\"ḑ\":\"d\",\"ḓ\":\"d\",\"ḏ\":\"d\",\"đ\":\"d\",\"ƌ\":\"d\",\"ɖ\":\"d\",\"ɗ\":\"d\",\"ꝺ\":\"d\",\"dz\":\"dz\",\"dž\":\"dz\",\"ⓔ\":\"e\",\"\":\"e\",\"è\":\"e\",\"é\":\"e\",\"ê\":\"e\",\"ề\":\"e\",\"ế\":\"e\",\"ễ\":\"e\",\"ể\":\"e\",\"ẽ\":\"e\",\"ē\":\"e\",\"ḕ\":\"e\",\"ḗ\":\"e\",\"ĕ\":\"e\",\"ė\":\"e\",\"ë\":\"e\",\"ẻ\":\"e\",\"ě\":\"e\",\"ȅ\":\"e\",\"ȇ\":\"e\",\"ẹ\":\"e\",\"ệ\":\"e\",\"ȩ\":\"e\",\"ḝ\":\"e\",\"ę\":\"e\",\"ḙ\":\"e\",\"ḛ\":\"e\",\"ɇ\":\"e\",\"ɛ\":\"e\",\"ǝ\":\"e\",\"ⓕ\":\"f\",\"\":\"f\",\"ḟ\":\"f\",\"ƒ\":\"f\",\"ꝼ\":\"f\",\"ⓖ\":\"g\",\"\":\"g\",\"ǵ\":\"g\",\"ĝ\":\"g\",\"ḡ\":\"g\",\"ğ\":\"g\",\"ġ\":\"g\",\"ǧ\":\"g\",\"ģ\":\"g\",\"ǥ\":\"g\",\"ɠ\":\"g\",\"ꞡ\":\"g\",\"ᵹ\":\"g\",\"ꝿ\":\"g\",\"ⓗ\":\"h\",\"\":\"h\",\"ĥ\":\"h\",\"ḣ\":\"h\",\"ḧ\":\"h\",\"ȟ\":\"h\",\"ḥ\":\"h\",\"ḩ\":\"h\",\"ḫ\":\"h\",\"ẖ\":\"h\",\"ħ\":\"h\",\"ⱨ\":\"h\",\"ⱶ\":\"h\",\"ɥ\":\"h\",\"ƕ\":\"hv\",\"ⓘ\":\"i\",\"\":\"i\",\"ì\":\"i\",\"í\":\"i\",\"î\":\"i\",\"ĩ\":\"i\",\"ī\":\"i\",\"ĭ\":\"i\",\"ï\":\"i\",\"ḯ\":\"i\",\"ỉ\":\"i\",\"ǐ\":\"i\",\"ȉ\":\"i\",\"ȋ\":\"i\",\"ị\":\"i\",\"į\":\"i\",\"ḭ\":\"i\",\"ɨ\":\"i\",\"ı\":\"i\",\"ⓙ\":\"j\",\"\":\"j\",\"ĵ\":\"j\",\"ǰ\":\"j\",\"ɉ\":\"j\",\"ⓚ\":\"k\",\"\":\"k\",\"ḱ\":\"k\",\"ǩ\":\"k\",\"ḳ\":\"k\",\"ķ\":\"k\",\"ḵ\":\"k\",\"ƙ\":\"k\",\"ⱪ\":\"k\",\"ꝁ\":\"k\",\"ꝃ\":\"k\",\"ꝅ\":\"k\",\"ꞣ\":\"k\",\"ⓛ\":\"l\",\"\":\"l\",\"ŀ\":\"l\",\"ĺ\":\"l\",\"ľ\":\"l\",\"ḷ\":\"l\",\"ḹ\":\"l\",\"ļ\":\"l\",\"ḽ\":\"l\",\"ḻ\":\"l\",\"ſ\":\"l\",\"ł\":\"l\",\"ƚ\":\"l\",\"ɫ\":\"l\",\"ⱡ\":\"l\",\"ꝉ\":\"l\",\"ꞁ\":\"l\",\"ꝇ\":\"l\",\"lj\":\"lj\",\"ⓜ\":\"m\",\"\":\"m\",\"ḿ\":\"m\",\"ṁ\":\"m\",\"ṃ\":\"m\",\"ɱ\":\"m\",\"ɯ\":\"m\",\"ⓝ\":\"n\",\"\":\"n\",\"ǹ\":\"n\",\"ń\":\"n\",\"ñ\":\"n\",\"ṅ\":\"n\",\"ň\":\"n\",\"ṇ\":\"n\",\"ņ\":\"n\",\"ṋ\":\"n\",\"ṉ\":\"n\",\"ƞ\":\"n\",\"ɲ\":\"n\",\"ʼn\":\"n\",\"ꞑ\":\"n\",\"ꞥ\":\"n\",\"nj\":\"nj\",\"ⓞ\":\"o\",\"\":\"o\",\"ò\":\"o\",\"ó\":\"o\",\"ô\":\"o\",\"ồ\":\"o\",\"ố\":\"o\",\"ỗ\":\"o\",\"ổ\":\"o\",\"õ\":\"o\",\"ṍ\":\"o\",\"ȭ\":\"o\",\"ṏ\":\"o\",\"ō\":\"o\",\"ṑ\":\"o\",\"ṓ\":\"o\",\"ŏ\":\"o\",\"ȯ\":\"o\",\"ȱ\":\"o\",\"ö\":\"o\",\"ȫ\":\"o\",\"ỏ\":\"o\",\"ő\":\"o\",\"ǒ\":\"o\",\"ȍ\":\"o\",\"ȏ\":\"o\",\"ơ\":\"o\",\"ờ\":\"o\",\"ớ\":\"o\",\"ỡ\":\"o\",\"ở\":\"o\",\"ợ\":\"o\",\"ọ\":\"o\",\"ộ\":\"o\",\"ǫ\":\"o\",\"ǭ\":\"o\",\"ø\":\"o\",\"ǿ\":\"o\",\"ɔ\":\"o\",\"ꝋ\":\"o\",\"ꝍ\":\"o\",\"ɵ\":\"o\",\"œ\":\"oe\",\"ƣ\":\"oi\",\"ȣ\":\"ou\",\"ꝏ\":\"oo\",\"ⓟ\":\"p\",\"\":\"p\",\"ṕ\":\"p\",\"ṗ\":\"p\",\"ƥ\":\"p\",\"ᵽ\":\"p\",\"ꝑ\":\"p\",\"ꝓ\":\"p\",\"ꝕ\":\"p\",\"ⓠ\":\"q\",\"\":\"q\",\"ɋ\":\"q\",\"ꝗ\":\"q\",\"ꝙ\":\"q\",\"ⓡ\":\"r\",\"\":\"r\",\"ŕ\":\"r\",\"ṙ\":\"r\",\"ř\":\"r\",\"ȑ\":\"r\",\"ȓ\":\"r\",\"ṛ\":\"r\",\"ṝ\":\"r\",\"ŗ\":\"r\",\"ṟ\":\"r\",\"ɍ\":\"r\",\"ɽ\":\"r\",\"ꝛ\":\"r\",\"ꞧ\":\"r\",\"ꞃ\":\"r\",\"ⓢ\":\"s\",\"\":\"s\",\"ß\":\"s\",\"ś\":\"s\",\"ṥ\":\"s\",\"ŝ\":\"s\",\"ṡ\":\"s\",\"š\":\"s\",\"ṧ\":\"s\",\"ṣ\":\"s\",\"ṩ\":\"s\",\"ș\":\"s\",\"ş\":\"s\",\"ȿ\":\"s\",\"ꞩ\":\"s\",\"ꞅ\":\"s\",\"ẛ\":\"s\",\"ⓣ\":\"t\",\"\":\"t\",\"ṫ\":\"t\",\"ẗ\":\"t\",\"ť\":\"t\",\"ṭ\":\"t\",\"ț\":\"t\",\"ţ\":\"t\",\"ṱ\":\"t\",\"ṯ\":\"t\",\"ŧ\":\"t\",\"ƭ\":\"t\",\"ʈ\":\"t\",\"ⱦ\":\"t\",\"ꞇ\":\"t\",\"ꜩ\":\"tz\",\"ⓤ\":\"u\",\"\":\"u\",\"ù\":\"u\",\"ú\":\"u\",\"û\":\"u\",\"ũ\":\"u\",\"ṹ\":\"u\",\"ū\":\"u\",\"ṻ\":\"u\",\"ŭ\":\"u\",\"ü\":\"u\",\"ǜ\":\"u\",\"ǘ\":\"u\",\"ǖ\":\"u\",\"ǚ\":\"u\",\"ủ\":\"u\",\"ů\":\"u\",\"ű\":\"u\",\"ǔ\":\"u\",\"ȕ\":\"u\",\"ȗ\":\"u\",\"ư\":\"u\",\"ừ\":\"u\",\"ứ\":\"u\",\"ữ\":\"u\",\"ử\":\"u\",\"ự\":\"u\",\"ụ\":\"u\",\"ṳ\":\"u\",\"ų\":\"u\",\"ṷ\":\"u\",\"ṵ\":\"u\",\"ʉ\":\"u\",\"ⓥ\":\"v\",\"\":\"v\",\"ṽ\":\"v\",\"ṿ\":\"v\",\"ʋ\":\"v\",\"ꝟ\":\"v\",\"ʌ\":\"v\",\"ꝡ\":\"vy\",\"ⓦ\":\"w\",\"\":\"w\",\"ẁ\":\"w\",\"ẃ\":\"w\",\"ŵ\":\"w\",\"ẇ\":\"w\",\"ẅ\":\"w\",\"ẘ\":\"w\",\"ẉ\":\"w\",\"ⱳ\":\"w\",\"ⓧ\":\"x\",\"\":\"x\",\"ẋ\":\"x\",\"ẍ\":\"x\",\"ⓨ\":\"y\",\"\":\"y\",\"ỳ\":\"y\",\"ý\":\"y\",\"ŷ\":\"y\",\"ỹ\":\"y\",\"ȳ\":\"y\",\"ẏ\":\"y\",\"ÿ\":\"y\",\"ỷ\":\"y\",\"ẙ\":\"y\",\"ỵ\":\"y\",\"ƴ\":\"y\",\"ɏ\":\"y\",\"ỿ\":\"y\",\"ⓩ\":\"z\",\"\":\"z\",\"ź\":\"z\",\"ẑ\":\"z\",\"ż\":\"z\",\"ž\":\"z\",\"ẓ\":\"z\",\"ẕ\":\"z\",\"ƶ\":\"z\",\"ȥ\":\"z\",\"ɀ\":\"z\",\"ⱬ\":\"z\",\"ꝣ\":\"z\",\"Ά\":\"Α\",\"Έ\":\"Ε\",\"Ή\":\"Η\",\"Ί\":\"Ι\",\"Ϊ\":\"Ι\",\"Ό\":\"Ο\",\"Ύ\":\"Υ\",\"Ϋ\":\"Υ\",\"Ώ\":\"Ω\",\"ά\":\"α\",\"έ\":\"ε\",\"ή\":\"η\",\"ί\":\"ι\",\"ϊ\":\"ι\",\"ΐ\":\"ι\",\"ό\":\"ο\",\"ύ\":\"υ\",\"ϋ\":\"υ\",\"ΰ\":\"υ\",\"ώ\":\"ω\",\"ς\":\"σ\",\"\":\"'\"}}),u.define(\"select2/data/base\",[\"../utils\"],function(n){function s(e,t){s.__super__.constructor.call(this)}return n.Extend(s,n.Observable),s.prototype.current=function(e){throw new Error(\"The `current` method must be defined in child classes.\")},s.prototype.query=function(e,t){throw new Error(\"The `query` method must be defined in child classes.\")},s.prototype.bind=function(e,t){},s.prototype.destroy=function(){},s.prototype.generateResultId=function(e,t){e=e.id+\"-result-\";return e+=n.generateChars(4),null!=t.id?e+=\"-\"+t.id.toString():e+=\"-\"+n.generateChars(4),e},s}),u.define(\"select2/data/select\",[\"./base\",\"../utils\",\"jquery\"],function(e,a,l){function n(e,t){this.$element=e,this.options=t,n.__super__.constructor.call(this)}return a.Extend(n,e),n.prototype.current=function(e){var t=this;e(Array.prototype.map.call(this.$element[0].querySelectorAll(\":checked\"),function(e){return t.item(l(e))}))},n.prototype.select=function(i){var e,r=this;if(i.selected=!0,null!=i.element&&\"option\"===i.element.tagName.toLowerCase())return i.element.selected=!0,void this.$element.trigger(\"input\").trigger(\"change\");this.$element.prop(\"multiple\")?this.current(function(e){var t=[];(i=[i]).push.apply(i,e);for(var n=0;n<i.length;n++){var s=i[n].id;-1===t.indexOf(s)&&t.push(s)}r.$element.val(t),r.$element.trigger(\"input\").trigger(\"change\")}):(e=i.id,this.$element.val(e),this.$element.trigger(\"input\").trigger(\"change\"))},n.prototype.unselect=function(i){var r=this;if(this.$element.prop(\"multiple\")){if(i.selected=!1,null!=i.element&&\"option\"===i.element.tagName.toLowerCase())return i.element.selected=!1,void this.$element.trigger(\"input\").trigger(\"change\");this.current(function(e){for(var t=[],n=0;n<e.length;n++){var s=e[n].id;s!==i.id&&-1===t.indexOf(s)&&t.push(s)}r.$element.val(t),r.$element.trigger(\"input\").trigger(\"change\")})}},n.prototype.bind=function(e,t){var n=this;(this.container=e).on(\"select\",function(e){n.select(e.data)}),e.on(\"unselect\",function(e){n.unselect(e.data)})},n.prototype.destroy=function(){this.$element.find(\"*\").each(function(){a.RemoveData(this)})},n.prototype.query=function(t,e){var n=[],s=this;this.$element.children().each(function(){var e;\"option\"!==this.tagName.toLowerCase()&&\"optgroup\"!==this.tagName.toLowerCase()||(e=l(this),e=s.item(e),null!==(e=s.matches(t,e))&&n.push(e))}),e({results:n})},n.prototype.addOptions=function(e){this.$element.append(e)},n.prototype.option=function(e){var t;e.children?(t=document.createElement(\"optgroup\")).label=e.text:void 0!==(t=document.createElement(\"option\")).textContent?t.textContent=e.text:t.innerText=e.text,void 0!==e.id&&(t.value=e.id),e.disabled&&(t.disabled=!0),e.selected&&(t.selected=!0),e.title&&(t.title=e.title);e=this._normalizeItem(e);return e.element=t,a.StoreData(t,\"data\",e),l(t)},n.prototype.item=function(e){var t={};if(null!=(t=a.GetData(e[0],\"data\")))return t;var n=e[0];if(\"option\"===n.tagName.toLowerCase())t={id:e.val(),text:e.text(),disabled:e.prop(\"disabled\"),selected:e.prop(\"selected\"),title:e.prop(\"title\")};else if(\"optgroup\"===n.tagName.toLowerCase()){t={text:e.prop(\"label\"),children:[],title:e.prop(\"title\")};for(var s=e.children(\"option\"),i=[],r=0;r<s.length;r++){var o=l(s[r]),o=this.item(o);i.push(o)}t.children=i}return(t=this._normalizeItem(t)).element=e[0],a.StoreData(e[0],\"data\",t),t},n.prototype._normalizeItem=function(e){e!==Object(e)&&(e={id:e,text:e});return null!=(e=l.extend({},{text:\"\"},e)).id&&(e.id=e.id.toString()),null!=e.text&&(e.text=e.text.toString()),null==e._resultId&&e.id&&null!=this.container&&(e._resultId=this.generateResultId(this.container,e)),l.extend({},{selected:!1,disabled:!1},e)},n.prototype.matches=function(e,t){return this.options.get(\"matcher\")(e,t)},n}),u.define(\"select2/data/array\",[\"./select\",\"../utils\",\"jquery\"],function(e,t,c){function s(e,t){this._dataToConvert=t.get(\"data\")||[],s.__super__.constructor.call(this,e,t)}return t.Extend(s,e),s.prototype.bind=function(e,t){s.__super__.bind.call(this,e,t),this.addOptions(this.convertToOptions(this._dataToConvert))},s.prototype.select=function(n){var e=this.$element.find(\"option\").filter(function(e,t){return t.value==n.id.toString()});0===e.length&&(e=this.option(n),this.addOptions(e)),s.__super__.select.call(this,n)},s.prototype.convertToOptions=function(e){var t=this,n=this.$element.find(\"option\"),s=n.map(function(){return t.item(c(this)).id}).get(),i=[];for(var r=0;r<e.length;r++){var o,a,l=this._normalizeItem(e[r]);0<=s.indexOf(l.id)?(o=n.filter(function(e){return function(){return c(this).val()==e.id}}(l)),a=this.item(o),a=c.extend(!0,{},l,a),a=this.option(a),o.replaceWith(a)):(a=this.option(l),l.children&&(l=this.convertToOptions(l.children),a.append(l)),i.push(a))}return i},s}),u.define(\"select2/data/ajax\",[\"./array\",\"../utils\",\"jquery\"],function(e,t,r){function n(e,t){this.ajaxOptions=this._applyDefaults(t.get(\"ajax\")),null!=this.ajaxOptions.processResults&&(this.processResults=this.ajaxOptions.processResults),n.__super__.constructor.call(this,e,t)}return t.Extend(n,e),n.prototype._applyDefaults=function(e){var t={data:function(e){return r.extend({},e,{q:e.term})},transport:function(e,t,n){e=r.ajax(e);return e.then(t),e.fail(n),e}};return r.extend({},t,e,!0)},n.prototype.processResults=function(e){return e},n.prototype.query=function(t,n){var s=this;null!=this._request&&(\"function\"==typeof this._request.abort&&this._request.abort(),this._request=null);var i=r.extend({type:\"GET\"},this.ajaxOptions);function e(){var e=i.transport(i,function(e){e=s.processResults(e,t);s.options.get(\"debug\")&&window.console&&console.error&&(e&&e.results&&Array.isArray(e.results)||console.error(\"Select2: The AJAX results did not return an array in the `results` key of the response.\")),n(e)},function(){\"status\"in e&&(0===e.status||\"0\"===e.status)||s.trigger(\"results:message\",{message:\"errorLoading\"})});s._request=e}\"function\"==typeof i.url&&(i.url=i.url.call(this.$element,t)),\"function\"==typeof i.data&&(i.data=i.data.call(this.$element,t)),this.ajaxOptions.delay&&null!=t.term?(this._queryTimeout&&window.clearTimeout(this._queryTimeout),this._queryTimeout=window.setTimeout(e,this.ajaxOptions.delay)):e()},n}),u.define(\"select2/data/tags\",[\"jquery\"],function(t){function e(e,t,n){var s=n.get(\"tags\"),i=n.get(\"createTag\");void 0!==i&&(this.createTag=i);i=n.get(\"insertTag\");if(void 0!==i&&(this.insertTag=i),e.call(this,t,n),Array.isArray(s))for(var r=0;r<s.length;r++){var o=s[r],o=this._normalizeItem(o),o=this.option(o);this.$element.append(o)}}return e.prototype.query=function(e,c,u){var d=this;this._removeOldTags(),null!=c.term&&null==c.page?e.call(this,c,function e(t,n){for(var s=t.results,i=0;i<s.length;i++){var r=s[i],o=null!=r.children&&!e({results:r.children},!0);if((r.text||\"\").toUpperCase()===(c.term||\"\").toUpperCase()||o)return!n&&(t.data=s,void u(t))}if(n)return!0;var a,l=d.createTag(c);null!=l&&((a=d.option(l)).attr(\"data-select2-tag\",\"true\"),d.addOptions([a]),d.insertTag(s,l)),t.results=s,u(t)}):e.call(this,c,u)},e.prototype.createTag=function(e,t){if(null==t.term)return null;t=t.term.trim();return\"\"===t?null:{id:t,text:t}},e.prototype.insertTag=function(e,t,n){t.unshift(n)},e.prototype._removeOldTags=function(e){this.$element.find(\"option[data-select2-tag]\").each(function(){this.selected||t(this).remove()})},e}),u.define(\"select2/data/tokenizer\",[\"jquery\"],function(c){function e(e,t,n){var s=n.get(\"tokenizer\");void 0!==s&&(this.tokenizer=s),e.call(this,t,n)}return e.prototype.bind=function(e,t,n){e.call(this,t,n),this.$search=t.dropdown.$search||t.selection.$search||n.find(\".select2-search__field\")},e.prototype.query=function(e,t,n){var s=this;t.term=t.term||\"\";var i=this.tokenizer(t,this.options,function(e){var t,n=s._normalizeItem(e);s.$element.find(\"option\").filter(function(){return c(this).val()===n.id}).length||((t=s.option(n)).attr(\"data-select2-tag\",!0),s._removeOldTags(),s.addOptions([t])),t=n,s.trigger(\"select\",{data:t})});i.term!==t.term&&(this.$search.length&&(this.$search.val(i.term),this.$search.trigger(\"focus\")),t.term=i.term),e.call(this,t,n)},e.prototype.tokenizer=function(e,t,n,s){for(var i=n.get(\"tokenSeparators\")||[],r=t.term,o=0,a=this.createTag||function(e){return{id:e.term,text:e.term}};o<r.length;){var l=r[o];-1!==i.indexOf(l)?(l=r.substr(0,o),null!=(l=a(c.extend({},t,{term:l})))?(s(l),r=r.substr(o+1)||\"\",o=0):o++):o++}return{term:r}},e}),u.define(\"select2/data/minimumInputLength\",[],function(){function e(e,t,n){this.minimumInputLength=n.get(\"minimumInputLength\"),e.call(this,t,n)}return e.prototype.query=function(e,t,n){t.term=t.term||\"\",t.term.length<this.minimumInputLength?this.trigger(\"results:message\",{message:\"inputTooShort\",args:{minimum:this.minimumInputLength,input:t.term,params:t}}):e.call(this,t,n)},e}),u.define(\"select2/data/maximumInputLength\",[],function(){function e(e,t,n){this.maximumInputLength=n.get(\"maximumInputLength\"),e.call(this,t,n)}return e.prototype.query=function(e,t,n){t.term=t.term||\"\",0<this.maximumInputLength&&t.term.length>this.maximumInputLength?this.trigger(\"results:message\",{message:\"inputTooLong\",args:{maximum:this.maximumInputLength,input:t.term,params:t}}):e.call(this,t,n)},e}),u.define(\"select2/data/maximumSelectionLength\",[],function(){function e(e,t,n){this.maximumSelectionLength=n.get(\"maximumSelectionLength\"),e.call(this,t,n)}return e.prototype.bind=function(e,t,n){var s=this;e.call(this,t,n),t.on(\"select\",function(){s._checkIfMaximumSelected()})},e.prototype.query=function(e,t,n){var s=this;this._checkIfMaximumSelected(function(){e.call(s,t,n)})},e.prototype._checkIfMaximumSelected=function(e,t){var n=this;this.current(function(e){e=null!=e?e.length:0;0<n.maximumSelectionLength&&e>=n.maximumSelectionLength?n.trigger(\"results:message\",{message:\"maximumSelected\",args:{maximum:n.maximumSelectionLength}}):t&&t()})},e}),u.define(\"select2/dropdown\",[\"jquery\",\"./utils\"],function(t,e){function n(e,t){this.$element=e,this.options=t,n.__super__.constructor.call(this)}return e.Extend(n,e.Observable),n.prototype.render=function(){var e=t('<span class=\"select2-dropdown\"><span class=\"select2-results\"></span></span>');return e.attr(\"dir\",this.options.get(\"dir\")),this.$dropdown=e},n.prototype.bind=function(){},n.prototype.position=function(e,t){},n.prototype.destroy=function(){this.$dropdown.remove()},n}),u.define(\"select2/dropdown/search\",[\"jquery\"],function(r){function e(){}return e.prototype.render=function(e){var t=e.call(this),n=this.options.get(\"translations\").get(\"search\"),e=r('<span class=\"select2-search select2-search--dropdown\"><input class=\"select2-search__field\" type=\"search\" tabindex=\"-1\" autocorrect=\"off\" autocapitalize=\"none\" spellcheck=\"false\" role=\"searchbox\" aria-autocomplete=\"list\" /></span>');return this.$searchContainer=e,this.$search=e.find(\"input\"),this.$search.prop(\"autocomplete\",this.options.get(\"autocomplete\")),this.$search.attr(\"aria-label\",n()),t.prepend(e),t},e.prototype.bind=function(e,t,n){var s=this,i=t.id+\"-results\";e.call(this,t,n),this.$search.on(\"keydown\",function(e){s.trigger(\"keypress\",e),s._keyUpPrevented=e.isDefaultPrevented()}),this.$search.on(\"input\",function(e){r(this).off(\"keyup\")}),this.$search.on(\"keyup input\",function(e){s.handleSearch(e)}),t.on(\"open\",function(){s.$search.attr(\"tabindex\",0),s.$search.attr(\"aria-controls\",i),s.$search.trigger(\"focus\"),window.setTimeout(function(){s.$search.trigger(\"focus\")},0)}),t.on(\"close\",function(){s.$search.attr(\"tabindex\",-1),s.$search.removeAttr(\"aria-controls\"),s.$search.removeAttr(\"aria-activedescendant\"),s.$search.val(\"\"),s.$search.trigger(\"blur\")}),t.on(\"focus\",function(){t.isOpen()||s.$search.trigger(\"focus\")}),t.on(\"results:all\",function(e){null!=e.query.term&&\"\"!==e.query.term||(s.showSearch(e)?s.$searchContainer[0].classList.remove(\"select2-search--hide\"):s.$searchContainer[0].classList.add(\"select2-search--hide\"))}),t.on(\"results:focus\",function(e){e.data._resultId?s.$search.attr(\"aria-activedescendant\",e.data._resultId):s.$search.removeAttr(\"aria-activedescendant\")})},e.prototype.handleSearch=function(e){var t;this._keyUpPrevented||(t=this.$search.val(),this.trigger(\"query\",{term:t})),this._keyUpPrevented=!1},e.prototype.showSearch=function(e,t){return!0},e}),u.define(\"select2/dropdown/hidePlaceholder\",[],function(){function e(e,t,n,s){this.placeholder=this.normalizePlaceholder(n.get(\"placeholder\")),e.call(this,t,n,s)}return e.prototype.append=function(e,t){t.results=this.removePlaceholder(t.results),e.call(this,t)},e.prototype.normalizePlaceholder=function(e,t){return t=\"string\"==typeof t?{id:\"\",text:t}:t},e.prototype.removePlaceholder=function(e,t){for(var n=t.slice(0),s=t.length-1;0<=s;s--){var i=t[s];this.placeholder.id===i.id&&n.splice(s,1)}return n},e}),u.define(\"select2/dropdown/infiniteScroll\",[\"jquery\"],function(n){function e(e,t,n,s){this.lastParams={},e.call(this,t,n,s),this.$loadingMore=this.createLoadingMore(),this.loading=!1}return e.prototype.append=function(e,t){this.$loadingMore.remove(),this.loading=!1,e.call(this,t),this.showLoadingMore(t)&&(this.$results.append(this.$loadingMore),this.loadMoreIfNeeded())},e.prototype.bind=function(e,t,n){var s=this;e.call(this,t,n),t.on(\"query\",function(e){s.lastParams=e,s.loading=!0}),t.on(\"query:append\",function(e){s.lastParams=e,s.loading=!0}),this.$results.on(\"scroll\",this.loadMoreIfNeeded.bind(this))},e.prototype.loadMoreIfNeeded=function(){var e=n.contains(document.documentElement,this.$loadingMore[0]);!this.loading&&e&&(e=this.$results.offset().top+this.$results.outerHeight(!1),this.$loadingMore.offset().top+this.$loadingMore.outerHeight(!1)<=e+50&&this.loadMore())},e.prototype.loadMore=function(){this.loading=!0;var e=n.extend({},{page:1},this.lastParams);e.page++,this.trigger(\"query:append\",e)},e.prototype.showLoadingMore=function(e,t){return t.pagination&&t.pagination.more},e.prototype.createLoadingMore=function(){var e=n('<li class=\"select2-results__option select2-results__option--load-more\"role=\"option\" aria-disabled=\"true\"></li>'),t=this.options.get(\"translations\").get(\"loadingMore\");return e.html(t(this.lastParams)),e},e}),u.define(\"select2/dropdown/attachBody\",[\"jquery\",\"../utils\"],function(u,o){function e(e,t,n){this.$dropdownParent=u(n.get(\"dropdownParent\")||document.body),e.call(this,t,n)}return e.prototype.bind=function(e,t,n){var s=this;e.call(this,t,n),t.on(\"open\",function(){s._showDropdown(),s._attachPositioningHandler(t),s._bindContainerResultHandlers(t)}),t.on(\"close\",function(){s._hideDropdown(),s._detachPositioningHandler(t)}),this.$dropdownContainer.on(\"mousedown\",function(e){e.stopPropagation()})},e.prototype.destroy=function(e){e.call(this),this.$dropdownContainer.remove()},e.prototype.position=function(e,t,n){t.attr(\"class\",n.attr(\"class\")),t[0].classList.remove(\"select2\"),t[0].classList.add(\"select2-container--open\"),t.css({position:\"absolute\",top:-999999}),this.$container=n},e.prototype.render=function(e){var t=u(\"<span></span>\"),e=e.call(this);return t.append(e),this.$dropdownContainer=t},e.prototype._hideDropdown=function(e){this.$dropdownContainer.detach()},e.prototype._bindContainerResultHandlers=function(e,t){var n;this._containerResultsHandlersBound||(n=this,t.on(\"results:all\",function(){n._positionDropdown(),n._resizeDropdown()}),t.on(\"results:append\",function(){n._positionDropdown(),n._resizeDropdown()}),t.on(\"results:message\",function(){n._positionDropdown(),n._resizeDropdown()}),t.on(\"select\",function(){n._positionDropdown(),n._resizeDropdown()}),t.on(\"unselect\",function(){n._positionDropdown(),n._resizeDropdown()}),this._containerResultsHandlersBound=!0)},e.prototype._attachPositioningHandler=function(e,t){var n=this,s=\"scroll.select2.\"+t.id,i=\"resize.select2.\"+t.id,r=\"orientationchange.select2.\"+t.id,t=this.$container.parents().filter(o.hasScroll);t.each(function(){o.StoreData(this,\"select2-scroll-position\",{x:u(this).scrollLeft(),y:u(this).scrollTop()})}),t.on(s,function(e){var t=o.GetData(this,\"select2-scroll-position\");u(this).scrollTop(t.y)}),u(window).on(s+\" \"+i+\" \"+r,function(e){n._positionDropdown(),n._resizeDropdown()})},e.prototype._detachPositioningHandler=function(e,t){var n=\"scroll.select2.\"+t.id,s=\"resize.select2.\"+t.id,t=\"orientationchange.select2.\"+t.id;this.$container.parents().filter(o.hasScroll).off(n),u(window).off(n+\" \"+s+\" \"+t)},e.prototype._positionDropdown=function(){var e=u(window),t=this.$dropdown[0].classList.contains(\"select2-dropdown--above\"),n=this.$dropdown[0].classList.contains(\"select2-dropdown--below\"),s=null,i=this.$container.offset();i.bottom=i.top+this.$container.outerHeight(!1);var r={height:this.$container.outerHeight(!1)};r.top=i.top,r.bottom=i.top+r.height;var o=this.$dropdown.outerHeight(!1),a=e.scrollTop(),l=e.scrollTop()+e.height(),c=a<i.top-o,e=l>i.bottom+o,a={left:i.left,top:r.bottom},l=this.$dropdownParent;\"static\"===l.css(\"position\")&&(l=l.offsetParent());i={top:0,left:0};(u.contains(document.body,l[0])||l[0].isConnected)&&(i=l.offset()),a.top-=i.top,a.left-=i.left,t||n||(s=\"below\"),e||!c||t?!c&&e&&t&&(s=\"below\"):s=\"above\",(\"above\"==s||t&&\"below\"!==s)&&(a.top=r.top-i.top-o),null!=s&&(this.$dropdown[0].classList.remove(\"select2-dropdown--below\"),this.$dropdown[0].classList.remove(\"select2-dropdown--above\"),this.$dropdown[0].classList.add(\"select2-dropdown--\"+s),this.$container[0].classList.remove(\"select2-container--below\"),this.$container[0].classList.remove(\"select2-container--above\"),this.$container[0].classList.add(\"select2-container--\"+s)),this.$dropdownContainer.css(a)},e.prototype._resizeDropdown=function(){var e={width:this.$container.outerWidth(!1)+\"px\"};this.options.get(\"dropdownAutoWidth\")&&(e.minWidth=e.width,e.position=\"relative\",e.width=\"auto\"),this.$dropdown.css(e)},e.prototype._showDropdown=function(e){this.$dropdownContainer.appendTo(this.$dropdownParent),this._positionDropdown(),this._resizeDropdown()},e}),u.define(\"select2/dropdown/minimumResultsForSearch\",[],function(){function e(e,t,n,s){this.minimumResultsForSearch=n.get(\"minimumResultsForSearch\"),this.minimumResultsForSearch<0&&(this.minimumResultsForSearch=1/0),e.call(this,t,n,s)}return e.prototype.showSearch=function(e,t){return!(function e(t){for(var n=0,s=0;s<t.length;s++){var i=t[s];i.children?n+=e(i.children):n++}return n}(t.data.results)<this.minimumResultsForSearch)&&e.call(this,t)},e}),u.define(\"select2/dropdown/selectOnClose\",[\"../utils\"],function(s){function e(){}return e.prototype.bind=function(e,t,n){var s=this;e.call(this,t,n),t.on(\"close\",function(e){s._handleSelectOnClose(e)})},e.prototype._handleSelectOnClose=function(e,t){if(t&&null!=t.originalSelect2Event){var n=t.originalSelect2Event;if(\"select\"===n._type||\"unselect\"===n._type)return}n=this.getHighlightedResults();n.length<1||(null!=(n=s.GetData(n[0],\"data\")).element&&n.element.selected||null==n.element&&n.selected||this.trigger(\"select\",{data:n}))},e}),u.define(\"select2/dropdown/closeOnSelect\",[],function(){function e(){}return e.prototype.bind=function(e,t,n){var s=this;e.call(this,t,n),t.on(\"select\",function(e){s._selectTriggered(e)}),t.on(\"unselect\",function(e){s._selectTriggered(e)})},e.prototype._selectTriggered=function(e,t){var n=t.originalEvent;n&&(n.ctrlKey||n.metaKey)||this.trigger(\"close\",{originalEvent:n,originalSelect2Event:t})},e}),u.define(\"select2/dropdown/dropdownCss\",[\"../utils\"],function(n){function e(){}return e.prototype.render=function(e){var t=e.call(this),e=this.options.get(\"dropdownCssClass\")||\"\";return-1!==e.indexOf(\":all:\")&&(e=e.replace(\":all:\",\"\"),n.copyNonInternalCssClasses(t[0],this.$element[0])),t.addClass(e),t},e}),u.define(\"select2/dropdown/tagsSearchHighlight\",[\"../utils\"],function(s){function e(){}return e.prototype.highlightFirstItem=function(e){var t=this.$results.find(\".select2-results__option--selectable:not(.select2-results__option--selected)\");if(0<t.length){var n=t.first(),t=s.GetData(n[0],\"data\").element;if(t&&t.getAttribute&&\"true\"===t.getAttribute(\"data-select2-tag\"))return void n.trigger(\"mouseenter\")}e.call(this)},e}),u.define(\"select2/i18n/en\",[],function(){return{errorLoading:function(){return\"The results could not be loaded.\"},inputTooLong:function(e){var t=e.input.length-e.maximum,e=\"Please delete \"+t+\" character\";return 1!=t&&(e+=\"s\"),e},inputTooShort:function(e){return\"Please enter \"+(e.minimum-e.input.length)+\" or more characters\"},loadingMore:function(){return\"Loading more results…\"},maximumSelected:function(e){var t=\"You can only select \"+e.maximum+\" item\";return 1!=e.maximum&&(t+=\"s\"),t},noResults:function(){return\"No results found\"},searching:function(){return\"Searching…\"},removeAllItems:function(){return\"Remove all items\"},removeItem:function(){return\"Remove item\"},search:function(){return\"Search\"}}}),u.define(\"select2/defaults\",[\"jquery\",\"./results\",\"./selection/single\",\"./selection/multiple\",\"./selection/placeholder\",\"./selection/allowClear\",\"./selection/search\",\"./selection/selectionCss\",\"./selection/eventRelay\",\"./utils\",\"./translation\",\"./diacritics\",\"./data/select\",\"./data/array\",\"./data/ajax\",\"./data/tags\",\"./data/tokenizer\",\"./data/minimumInputLength\",\"./data/maximumInputLength\",\"./data/maximumSelectionLength\",\"./dropdown\",\"./dropdown/search\",\"./dropdown/hidePlaceholder\",\"./dropdown/infiniteScroll\",\"./dropdown/attachBody\",\"./dropdown/minimumResultsForSearch\",\"./dropdown/selectOnClose\",\"./dropdown/closeOnSelect\",\"./dropdown/dropdownCss\",\"./dropdown/tagsSearchHighlight\",\"./i18n/en\"],function(l,r,o,a,c,u,d,p,h,f,g,t,m,y,v,_,b,$,w,x,A,D,S,E,O,C,L,T,q,I,e){function n(){this.reset()}return n.prototype.apply=function(e){var t;null==(e=l.extend(!0,{},this.defaults,e)).dataAdapter&&(null!=e.ajax?e.dataAdapter=v:null!=e.data?e.dataAdapter=y:e.dataAdapter=m,0<e.minimumInputLength&&(e.dataAdapter=f.Decorate(e.dataAdapter,$)),0<e.maximumInputLength&&(e.dataAdapter=f.Decorate(e.dataAdapter,w)),0<e.maximumSelectionLength&&(e.dataAdapter=f.Decorate(e.dataAdapter,x)),e.tags&&(e.dataAdapter=f.Decorate(e.dataAdapter,_)),null==e.tokenSeparators&&null==e.tokenizer||(e.dataAdapter=f.Decorate(e.dataAdapter,b))),null==e.resultsAdapter&&(e.resultsAdapter=r,null!=e.ajax&&(e.resultsAdapter=f.Decorate(e.resultsAdapter,E)),null!=e.placeholder&&(e.resultsAdapter=f.Decorate(e.resultsAdapter,S)),e.selectOnClose&&(e.resultsAdapter=f.Decorate(e.resultsAdapter,L)),e.tags&&(e.resultsAdapter=f.Decorate(e.resultsAdapter,I))),null==e.dropdownAdapter&&(e.multiple?e.dropdownAdapter=A:(t=f.Decorate(A,D),e.dropdownAdapter=t),0!==e.minimumResultsForSearch&&(e.dropdownAdapter=f.Decorate(e.dropdownAdapter,C)),e.closeOnSelect&&(e.dropdownAdapter=f.Decorate(e.dropdownAdapter,T)),null!=e.dropdownCssClass&&(e.dropdownAdapter=f.Decorate(e.dropdownAdapter,q)),e.dropdownAdapter=f.Decorate(e.dropdownAdapter,O)),null==e.selectionAdapter&&(e.multiple?e.selectionAdapter=a:e.selectionAdapter=o,null!=e.placeholder&&(e.selectionAdapter=f.Decorate(e.selectionAdapter,c)),e.allowClear&&(e.selectionAdapter=f.Decorate(e.selectionAdapter,u)),e.multiple&&(e.selectionAdapter=f.Decorate(e.selectionAdapter,d)),null!=e.selectionCssClass&&(e.selectionAdapter=f.Decorate(e.selectionAdapter,p)),e.selectionAdapter=f.Decorate(e.selectionAdapter,h)),e.language=this._resolveLanguage(e.language),e.language.push(\"en\");for(var n=[],s=0;s<e.language.length;s++){var i=e.language[s];-1===n.indexOf(i)&&n.push(i)}return e.language=n,e.translations=this._processTranslations(e.language,e.debug),e},n.prototype.reset=function(){function a(e){return e.replace(/[^\\u0000-\\u007E]/g,function(e){return t[e]||e})}this.defaults={amdLanguageBase:\"./i18n/\",autocomplete:\"off\",closeOnSelect:!0,debug:!1,dropdownAutoWidth:!1,escapeMarkup:f.escapeMarkup,language:{},matcher:function e(t,n){if(null==t.term||\"\"===t.term.trim())return n;if(n.children&&0<n.children.length){for(var s=l.extend(!0,{},n),i=n.children.length-1;0<=i;i--)null==e(t,n.children[i])&&s.children.splice(i,1);return 0<s.children.length?s:e(t,s)}var r=a(n.text).toUpperCase(),o=a(t.term).toUpperCase();return-1<r.indexOf(o)?n:null},minimumInputLength:0,maximumInputLength:0,maximumSelectionLength:0,minimumResultsForSearch:0,selectOnClose:!1,scrollAfterSelect:!1,sorter:function(e){return e},templateResult:function(e){return e.text},templateSelection:function(e){return e.text},theme:\"default\",width:\"resolve\"}},n.prototype.applyFromElement=function(e,t){var n=e.language,s=this.defaults.language,i=t.prop(\"lang\"),t=t.closest(\"[lang]\").prop(\"lang\"),t=Array.prototype.concat.call(this._resolveLanguage(i),this._resolveLanguage(n),this._resolveLanguage(s),this._resolveLanguage(t));return e.language=t,e},n.prototype._resolveLanguage=function(e){if(!e)return[];if(l.isEmptyObject(e))return[];if(l.isPlainObject(e))return[e];for(var t,n=Array.isArray(e)?e:[e],s=[],i=0;i<n.length;i++)s.push(n[i]),\"string\"==typeof n[i]&&0<n[i].indexOf(\"-\")&&(t=n[i].split(\"-\")[0],s.push(t));return s},n.prototype._processTranslations=function(e,t){for(var n=new g,s=0;s<e.length;s++){var i=new g,r=e[s];if(\"string\"==typeof r)try{i=g.loadPath(r)}catch(e){try{r=this.defaults.amdLanguageBase+r,i=g.loadPath(r)}catch(e){t&&window.console&&console.warn&&console.warn('Select2: The language file for \"'+r+'\" could not be automatically loaded. A fallback will be used instead.')}}else i=l.isPlainObject(r)?new g(r):r;n.extend(i)}return n},n.prototype.set=function(e,t){var n={};n[l.camelCase(e)]=t;n=f._convertData(n);l.extend(!0,this.defaults,n)},new n}),u.define(\"select2/options\",[\"jquery\",\"./defaults\",\"./utils\"],function(c,n,u){function e(e,t){this.options=e,null!=t&&this.fromElement(t),null!=t&&(this.options=n.applyFromElement(this.options,t)),this.options=n.apply(this.options)}return e.prototype.fromElement=function(e){var t=[\"select2\"];null==this.options.multiple&&(this.options.multiple=e.prop(\"multiple\")),null==this.options.disabled&&(this.options.disabled=e.prop(\"disabled\")),null==this.options.autocomplete&&e.prop(\"autocomplete\")&&(this.options.autocomplete=e.prop(\"autocomplete\")),null==this.options.dir&&(e.prop(\"dir\")?this.options.dir=e.prop(\"dir\"):e.closest(\"[dir]\").prop(\"dir\")?this.options.dir=e.closest(\"[dir]\").prop(\"dir\"):this.options.dir=\"ltr\"),e.prop(\"disabled\",this.options.disabled),e.prop(\"multiple\",this.options.multiple),u.GetData(e[0],\"select2Tags\")&&(this.options.debug&&window.console&&console.warn&&console.warn('Select2: The `data-select2-tags` attribute has been changed to use the `data-data` and `data-tags=\"true\"` attributes and will be removed in future versions of Select2.'),u.StoreData(e[0],\"data\",u.GetData(e[0],\"select2Tags\")),u.StoreData(e[0],\"tags\",!0)),u.GetData(e[0],\"ajaxUrl\")&&(this.options.debug&&window.console&&console.warn&&console.warn(\"Select2: The `data-ajax-url` attribute has been changed to `data-ajax--url` and support for the old attribute will be removed in future versions of Select2.\"),e.attr(\"ajax--url\",u.GetData(e[0],\"ajaxUrl\")),u.StoreData(e[0],\"ajax-Url\",u.GetData(e[0],\"ajaxUrl\")));var n={};function s(e,t){return t.toUpperCase()}for(var i=0;i<e[0].attributes.length;i++){var r=e[0].attributes[i].name,o=\"data-\";r.substr(0,o.length)==o&&(r=r.substring(o.length),o=u.GetData(e[0],r),n[r.replace(/-([a-z])/g,s)]=o)}c.fn.jquery&&\"1.\"==c.fn.jquery.substr(0,2)&&e[0].dataset&&(n=c.extend(!0,{},e[0].dataset,n));var a,l=c.extend(!0,{},u.GetData(e[0]),n);for(a in l=u._convertData(l))-1<t.indexOf(a)||(c.isPlainObject(this.options[a])?c.extend(this.options[a],l[a]):this.options[a]=l[a]);return this},e.prototype.get=function(e){return this.options[e]},e.prototype.set=function(e,t){this.options[e]=t},e}),u.define(\"select2/core\",[\"jquery\",\"./options\",\"./utils\",\"./keys\"],function(t,i,r,s){var o=function(e,t){null!=r.GetData(e[0],\"select2\")&&r.GetData(e[0],\"select2\").destroy(),this.$element=e,this.id=this._generateId(e),t=t||{},this.options=new i(t,e),o.__super__.constructor.call(this);var n=e.attr(\"tabindex\")||0;r.StoreData(e[0],\"old-tabindex\",n),e.attr(\"tabindex\",\"-1\");t=this.options.get(\"dataAdapter\");this.dataAdapter=new t(e,this.options);n=this.render();this._placeContainer(n);t=this.options.get(\"selectionAdapter\");this.selection=new t(e,this.options),this.$selection=this.selection.render(),this.selection.position(this.$selection,n);t=this.options.get(\"dropdownAdapter\");this.dropdown=new t(e,this.options),this.$dropdown=this.dropdown.render(),this.dropdown.position(this.$dropdown,n);n=this.options.get(\"resultsAdapter\");this.results=new n(e,this.options,this.dataAdapter),this.$results=this.results.render(),this.results.position(this.$results,this.$dropdown);var s=this;this._bindAdapters(),this._registerDomEvents(),this._registerDataEvents(),this._registerSelectionEvents(),this._registerDropdownEvents(),this._registerResultsEvents(),this._registerEvents(),this.dataAdapter.current(function(e){s.trigger(\"selection:update\",{data:e})}),e[0].classList.add(\"select2-hidden-accessible\"),e.attr(\"aria-hidden\",\"true\"),this._syncAttributes(),r.StoreData(e[0],\"select2\",this),e.data(\"select2\",this)};return r.Extend(o,r.Observable),o.prototype._generateId=function(e){return\"select2-\"+(null!=e.attr(\"id\")?e.attr(\"id\"):null!=e.attr(\"name\")?e.attr(\"name\")+\"-\"+r.generateChars(2):r.generateChars(4)).replace(/(:|\\.|\\[|\\]|,)/g,\"\")},o.prototype._placeContainer=function(e){e.insertAfter(this.$element);var t=this._resolveWidth(this.$element,this.options.get(\"width\"));null!=t&&e.css(\"width\",t)},o.prototype._resolveWidth=function(e,t){var n=/^width:(([-+]?([0-9]*\\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i;if(\"resolve\"==t){var s=this._resolveWidth(e,\"style\");return null!=s?s:this._resolveWidth(e,\"element\")}if(\"element\"==t){s=e.outerWidth(!1);return s<=0?\"auto\":s+\"px\"}if(\"style\"!=t)return\"computedstyle\"!=t?t:window.getComputedStyle(e[0]).width;e=e.attr(\"style\");if(\"string\"!=typeof e)return null;for(var i=e.split(\";\"),r=0,o=i.length;r<o;r+=1){var a=i[r].replace(/\\s/g,\"\").match(n);if(null!==a&&1<=a.length)return a[1]}return null},o.prototype._bindAdapters=function(){this.dataAdapter.bind(this,this.$container),this.selection.bind(this,this.$container),this.dropdown.bind(this,this.$container),this.results.bind(this,this.$container)},o.prototype._registerDomEvents=function(){var t=this;this.$element.on(\"change.select2\",function(){t.dataAdapter.current(function(e){t.trigger(\"selection:update\",{data:e})})}),this.$element.on(\"focus.select2\",function(e){t.trigger(\"focus\",e)}),this._syncA=r.bind(this._syncAttributes,this),this._syncS=r.bind(this._syncSubtree,this),this._observer=new window.MutationObserver(function(e){t._syncA(),t._syncS(e)}),this._observer.observe(this.$element[0],{attributes:!0,childList:!0,subtree:!1})},o.prototype._registerDataEvents=function(){var n=this;this.dataAdapter.on(\"*\",function(e,t){n.trigger(e,t)})},o.prototype._registerSelectionEvents=function(){var n=this,s=[\"toggle\",\"focus\"];this.selection.on(\"toggle\",function(){n.toggleDropdown()}),this.selection.on(\"focus\",function(e){n.focus(e)}),this.selection.on(\"*\",function(e,t){-1===s.indexOf(e)&&n.trigger(e,t)})},o.prototype._registerDropdownEvents=function(){var n=this;this.dropdown.on(\"*\",function(e,t){n.trigger(e,t)})},o.prototype._registerResultsEvents=function(){var n=this;this.results.on(\"*\",function(e,t){n.trigger(e,t)})},o.prototype._registerEvents=function(){var n=this;this.on(\"open\",function(){n.$container[0].classList.add(\"select2-container--open\")}),this.on(\"close\",function(){n.$container[0].classList.remove(\"select2-container--open\")}),this.on(\"enable\",function(){n.$container[0].classList.remove(\"select2-container--disabled\")}),this.on(\"disable\",function(){n.$container[0].classList.add(\"select2-container--disabled\")}),this.on(\"blur\",function(){n.$container[0].classList.remove(\"select2-container--focus\")}),this.on(\"query\",function(t){n.isOpen()||n.trigger(\"open\",{}),this.dataAdapter.query(t,function(e){n.trigger(\"results:all\",{data:e,query:t})})}),this.on(\"query:append\",function(t){this.dataAdapter.query(t,function(e){n.trigger(\"results:append\",{data:e,query:t})})}),this.on(\"keypress\",function(e){var t=e.which;n.isOpen()?t===s.ESC||t===s.UP&&e.altKey?(n.close(e),e.preventDefault()):t===s.ENTER||t===s.TAB?(n.trigger(\"results:select\",{}),e.preventDefault()):t===s.SPACE&&e.ctrlKey?(n.trigger(\"results:toggle\",{}),e.preventDefault()):t===s.UP?(n.trigger(\"results:previous\",{}),e.preventDefault()):t===s.DOWN&&(n.trigger(\"results:next\",{}),e.preventDefault()):(t===s.ENTER||t===s.SPACE||t===s.DOWN&&e.altKey)&&(n.open(),e.preventDefault())})},o.prototype._syncAttributes=function(){this.options.set(\"disabled\",this.$element.prop(\"disabled\")),this.isDisabled()?(this.isOpen()&&this.close(),this.trigger(\"disable\",{})):this.trigger(\"enable\",{})},o.prototype._isChangeMutation=function(e){var t=this;if(e.addedNodes&&0<e.addedNodes.length){for(var n=0;n<e.addedNodes.length;n++)if(e.addedNodes[n].selected)return!0}else{if(e.removedNodes&&0<e.removedNodes.length)return!0;if(Array.isArray(e))return e.some(function(e){return t._isChangeMutation(e)})}return!1},o.prototype._syncSubtree=function(e){var e=this._isChangeMutation(e),t=this;e&&this.dataAdapter.current(function(e){t.trigger(\"selection:update\",{data:e})})},o.prototype.trigger=function(e,t){var n=o.__super__.trigger,s={open:\"opening\",close:\"closing\",select:\"selecting\",unselect:\"unselecting\",clear:\"clearing\"};if(void 0===t&&(t={}),e in s){var i=s[e],s={prevented:!1,name:e,args:t};if(n.call(this,i,s),s.prevented)return void(t.prevented=!0)}n.call(this,e,t)},o.prototype.toggleDropdown=function(){this.isDisabled()||(this.isOpen()?this.close():this.open())},o.prototype.open=function(){this.isOpen()||this.isDisabled()||this.trigger(\"query\",{})},o.prototype.close=function(e){this.isOpen()&&this.trigger(\"close\",{originalEvent:e})},o.prototype.isEnabled=function(){return!this.isDisabled()},o.prototype.isDisabled=function(){return this.options.get(\"disabled\")},o.prototype.isOpen=function(){return this.$container[0].classList.contains(\"select2-container--open\")},o.prototype.hasFocus=function(){return this.$container[0].classList.contains(\"select2-container--focus\")},o.prototype.focus=function(e){this.hasFocus()||(this.$container[0].classList.add(\"select2-container--focus\"),this.trigger(\"focus\",{}))},o.prototype.enable=function(e){this.options.get(\"debug\")&&window.console&&console.warn&&console.warn('Select2: The `select2(\"enable\")` method has been deprecated and will be removed in later Select2 versions. Use $element.prop(\"disabled\") instead.');e=!(e=null==e||0===e.length?[!0]:e)[0];this.$element.prop(\"disabled\",e)},o.prototype.data=function(){this.options.get(\"debug\")&&0<arguments.length&&window.console&&console.warn&&console.warn('Select2: Data can no longer be set using `select2(\"data\")`. You should consider setting the value instead using `$element.val()`.');var t=[];return this.dataAdapter.current(function(e){t=e}),t},o.prototype.val=function(e){if(this.options.get(\"debug\")&&window.console&&console.warn&&console.warn('Select2: The `select2(\"val\")` method has been deprecated and will be removed in later Select2 versions. Use $element.val() instead.'),null==e||0===e.length)return this.$element.val();e=e[0];Array.isArray(e)&&(e=e.map(function(e){return e.toString()})),this.$element.val(e).trigger(\"input\").trigger(\"change\")},o.prototype.destroy=function(){r.RemoveData(this.$container[0]),this.$container.remove(),this._observer.disconnect(),this._observer=null,this._syncA=null,this._syncS=null,this.$element.off(\".select2\"),this.$element.attr(\"tabindex\",r.GetData(this.$element[0],\"old-tabindex\")),this.$element[0].classList.remove(\"select2-hidden-accessible\"),this.$element.attr(\"aria-hidden\",\"false\"),r.RemoveData(this.$element[0]),this.$element.removeData(\"select2\"),this.dataAdapter.destroy(),this.selection.destroy(),this.dropdown.destroy(),this.results.destroy(),this.dataAdapter=null,this.selection=null,this.dropdown=null,this.results=null},o.prototype.render=function(){var e=t('<span class=\"select2 select2-container\"><span class=\"selection\"></span><span class=\"dropdown-wrapper\" aria-hidden=\"true\"></span></span>');return e.attr(\"dir\",this.options.get(\"dir\")),this.$container=e,this.$container[0].classList.add(\"select2-container--\"+this.options.get(\"theme\")),r.StoreData(e[0],\"element\",this.$element),e},o}),u.define(\"jquery-mousewheel\",[\"jquery\"],function(e){return e}),u.define(\"jquery.select2\",[\"jquery\",\"jquery-mousewheel\",\"./select2/core\",\"./select2/defaults\",\"./select2/utils\"],function(i,e,r,t,o){var a;return null==i.fn.select2&&(a=[\"open\",\"close\",\"destroy\"],i.fn.select2=function(t){if(\"object\"==typeof(t=t||{}))return this.each(function(){var e=i.extend(!0,{},t);new r(i(this),e)}),this;if(\"string\"!=typeof t)throw new Error(\"Invalid arguments for Select2: \"+t);var n,s=Array.prototype.slice.call(arguments,1);return this.each(function(){var e=o.GetData(this,\"select2\");null==e&&window.console&&console.error&&console.error(\"The select2('\"+t+\"') method was called on an element that is not using Select2.\"),n=e[t].apply(e,s)}),-1<a.indexOf(t)?this:n}),null==i.fn.select2.defaults&&(i.fn.select2.defaults=t),r}),{define:u.define,require:u.require});function b(e,t){return i.call(e,t)}function l(e,t){var n,s,i,r,o,a,l,c,u,d,p=t&&t.split(\"/\"),h=y.map,f=h&&h[\"*\"]||{};if(e){for(t=(e=e.split(\"/\")).length-1,y.nodeIdCompat&&_.test(e[t])&&(e[t]=e[t].replace(_,\"\")),\".\"===e[0].charAt(0)&&p&&(e=p.slice(0,p.length-1).concat(e)),c=0;c<e.length;c++)\".\"===(d=e[c])?(e.splice(c,1),--c):\"..\"===d&&(0===c||1===c&&\"..\"===e[2]||\"..\"===e[c-1]||0<c&&(e.splice(c-1,2),c-=2));e=e.join(\"/\")}if((p||f)&&h){for(c=(n=e.split(\"/\")).length;0<c;--c){if(s=n.slice(0,c).join(\"/\"),p)for(u=p.length;0<u;--u)if(i=h[p.slice(0,u).join(\"/\")],i=i&&i[s]){r=i,o=c;break}if(r)break;!a&&f&&f[s]&&(a=f[s],l=c)}!r&&a&&(r=a,o=l),r&&(n.splice(0,o,r),e=n.join(\"/\"))}return e}function w(t,n){return function(){var e=a.call(arguments,0);return\"string\"!=typeof e[0]&&1===e.length&&e.push(null),o.apply(p,e.concat([t,n]))}}function x(e){var t;if(b(m,e)&&(t=m[e],delete m[e],v[e]=!0,r.apply(p,t)),!b(g,e)&&!b(v,e))throw new Error(\"No \"+e);return g[e]}function c(e){var t,n=e?e.indexOf(\"!\"):-1;return-1<n&&(t=e.substring(0,n),e=e.substring(n+1,e.length)),[t,e]}function A(e){return e?c(e):[]}var u=s.require(\"jquery.select2\");return t.fn.select2.amd=s,u});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc2VsZWN0Mi9kaXN0L2pzL3NlbGVjdDIubWluLmpzLmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsYUFBYSxLQUFxQyxDQUFDLGlDQUFPLENBQUMseUVBQVEsQ0FBQyxvQ0FBQyxDQUFDO0FBQUE7QUFBQTtBQUFBLGtHQUFDLENBQUMsQ0FBK0ssQ0FBQyxhQUFhLDZIQUE2SCxLQUFLLEtBQUssS0FBSyxLQUFLLHdFQUF3RSw2QkFBNkIsbUZBQW1GLGNBQWMscURBQXFELDRCQUE0QixJQUFJLG9CQUFvQixZQUFZLHFCQUFxQixXQUFXLDRCQUE0QixvQkFBb0IsT0FBTyxnREFBZ0Qsb0NBQW9DLEdBQUcsT0FBTyxxQkFBcUIsMENBQTBDLGtDQUFrQywrREFBK0QsV0FBVywwREFBMEQsNkNBQTZDLHdDQUF3Qyx5Q0FBeUMsS0FBSyx5Q0FBeUMsaUNBQWlDLG1CQUFtQixRQUFRLE1BQU0sWUFBWSxxR0FBcUcsaUJBQWlCLDJCQUEyQix5REFBeUQsY0FBYyw4Q0FBOEMsOEJBQThCLHdCQUF3QixvRUFBb0UsV0FBVyxNQUFNLHNCQUFzQixZQUFZLGlDQUFpQyxtR0FBbUcsb0RBQW9ELE9BQU8sVUFBVSxxRUFBcUUsa0NBQWtDLFdBQVcsaU5BQWlOLGtEQUFrRCxTQUFTLGNBQWMseUJBQXlCLGlFQUFpRSxTQUFTLHVCQUF1QixVQUFVLGdCQUFnQixhQUFhLG1CQUFtQixvQ0FBb0MsMkVBQTJFLDBCQUEwQixrQkFBa0IsYUFBYSx5RkFBeUYsbUdBQW1HLHVEQUF1RCxvQkFBb0IsWUFBWSxXQUFXLEtBQUssV0FBVyw4QkFBOEIsWUFBWSxXQUFXLEtBQUssV0FBVywyQkFBMkIsbUJBQW1CLHFDQUFxQyxxQkFBcUIsa0JBQWtCLDBFQUEwRSxJQUFJLFVBQVUsYUFBYSxrQkFBa0IsNkJBQTZCLGlDQUFpQyxxRUFBcUUsaUNBQWlDLGtEQUFrRCxpQ0FBaUMsdUNBQXVDLHVKQUF1SixrQ0FBa0MsdUJBQXVCLElBQUksdUJBQXVCLDRDQUE0QyxpQkFBaUIs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RSxrQ0FBa0MseUJBQXlCLG1DQUFtQyxvQ0FBb0MsK0JBQStCLHdFQUF3RSxpQ0FBaUMseUVBQXlFLCtCQUErQixzR0FBc0csR0FBRyxnQ0FBZ0MsMk5BQTJOLHVDQUF1QyxpQ0FBaUMsNkJBQTZCLCtOQUErTixTQUFTLDRDQUE0QyxJQUFJLElBQUksNkJBQTZCLGlRQUFpUSxPQUFPLHVDQUF1QyxvQkFBb0IsMkRBQTJELGdDQUFnQyxrbEJBQWtsQiwrQkFBK0IsbUpBQW1KLDZMQUE2TCxHQUFHLHNEQUFzRCxTQUFTLHVJQUF1SSxNQUFNLGtGQUFrRiwyQkFBMkIsOEJBQThCLG9CQUFvQixJQUFJLGlCQUFpQixPQUFPLDJFQUEyRSxnREFBZ0QsNEJBQTRCLGdDQUFnQywySkFBMkoseUJBQXlCLDJEQUEyRCxHQUFHLGtDQUFrQyxFQUFFLGdCQUFnQixtQkFBbUIsZ0JBQWdCLGtFQUFrRSxNQUFNLHlKQUF5SixXQUFXLHlIQUF5SCxjQUFjLGNBQWMsOEJBQThCLElBQUksS0FBSyw2Q0FBNkMsSUFBSSw4Q0FBOEMsUUFBUSxNQUFNLFdBQVcsMEJBQTBCLG9EQUFvRCxTQUFTLGdCQUFnQixrQkFBa0IsMEJBQTBCLG9GQUFvRixjQUFjLE1BQU0sK0ZBQStGLFlBQVksY0FBYyw0QkFBNEIsbUVBQW1FLGNBQWMsaUJBQWlCLGtDQUFrQyw0QkFBNEIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvc2VsZWN0Mi9kaXN0L2pzL3NlbGVjdDIubWluLmpzPzBkNmMiXSwic291cmNlc0NvbnRlbnQiOlsiLyohIFNlbGVjdDIgNC4xLjAtcmMuMCB8IGh0dHBzOi8vZ2l0aHViLmNvbS9zZWxlY3QyL3NlbGVjdDIvYmxvYi9tYXN0ZXIvTElDRU5TRS5tZCAqL1xuIWZ1bmN0aW9uKG4pe1wiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoW1wianF1ZXJ5XCJdLG4pOlwib2JqZWN0XCI9PXR5cGVvZiBtb2R1bGUmJm1vZHVsZS5leHBvcnRzP21vZHVsZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PVwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3c/cmVxdWlyZShcImpxdWVyeVwiKTpyZXF1aXJlKFwianF1ZXJ5XCIpKGUpKSxuKHQpLHR9Om4oalF1ZXJ5KX0oZnVuY3Rpb24odCl7dmFyIGUsbixzLHAscixvLGgsZixnLG0seSx2LGksYSxfLHM9KCh1PXQmJnQuZm4mJnQuZm4uc2VsZWN0MiYmdC5mbi5zZWxlY3QyLmFtZD90LmZuLnNlbGVjdDIuYW1kOnUpJiZ1LnJlcXVpcmVqc3x8KHU/bj11OnU9e30sZz17fSxtPXt9LHk9e30sdj17fSxpPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksYT1bXS5zbGljZSxfPS9cXC5qcyQvLGg9ZnVuY3Rpb24oZSx0KXt2YXIgbixzLGk9YyhlKSxyPWlbMF0sdD10WzFdO3JldHVybiBlPWlbMV0sciYmKG49eChyPWwocix0KSkpLHI/ZT1uJiZuLm5vcm1hbGl6ZT9uLm5vcm1hbGl6ZShlLChzPXQsZnVuY3Rpb24oZSl7cmV0dXJuIGwoZSxzKX0pKTpsKGUsdCk6KHI9KGk9YyhlPWwoZSx0KSkpWzBdLGU9aVsxXSxyJiYobj14KHIpKSkse2Y6cj9yK1wiIVwiK2U6ZSxuOmUscHI6cixwOm59fSxmPXtyZXF1aXJlOmZ1bmN0aW9uKGUpe3JldHVybiB3KGUpfSxleHBvcnRzOmZ1bmN0aW9uKGUpe3ZhciB0PWdbZV07cmV0dXJuIHZvaWQgMCE9PXQ/dDpnW2VdPXt9fSxtb2R1bGU6ZnVuY3Rpb24oZSl7cmV0dXJue2lkOmUsdXJpOlwiXCIsZXhwb3J0czpnW2VdLGNvbmZpZzoodD1lLGZ1bmN0aW9uKCl7cmV0dXJuIHkmJnkuY29uZmlnJiZ5LmNvbmZpZ1t0XXx8e319KX07dmFyIHR9fSxyPWZ1bmN0aW9uKGUsdCxuLHMpe3ZhciBpLHIsbyxhLGwsYz1bXSx1PXR5cGVvZiBuLGQ9QShzPXN8fGUpO2lmKFwidW5kZWZpbmVkXCI9PXV8fFwiZnVuY3Rpb25cIj09dSl7Zm9yKHQ9IXQubGVuZ3RoJiZuLmxlbmd0aD9bXCJyZXF1aXJlXCIsXCJleHBvcnRzXCIsXCJtb2R1bGVcIl06dCxhPTA7YTx0Lmxlbmd0aDthKz0xKWlmKFwicmVxdWlyZVwiPT09KHI9KG89aCh0W2FdLGQpKS5mKSljW2FdPWYucmVxdWlyZShlKTtlbHNlIGlmKFwiZXhwb3J0c1wiPT09ciljW2FdPWYuZXhwb3J0cyhlKSxsPSEwO2Vsc2UgaWYoXCJtb2R1bGVcIj09PXIpaT1jW2FdPWYubW9kdWxlKGUpO2Vsc2UgaWYoYihnLHIpfHxiKG0scil8fGIodixyKSljW2FdPXgocik7ZWxzZXtpZighby5wKXRocm93IG5ldyBFcnJvcihlK1wiIG1pc3NpbmcgXCIrcik7by5wLmxvYWQoby5uLHcocywhMCksZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2dbdF09ZX19KHIpLHt9KSxjW2FdPWdbcl19dT1uP24uYXBwbHkoZ1tlXSxjKTp2b2lkIDAsZSYmKGkmJmkuZXhwb3J0cyE9PXAmJmkuZXhwb3J0cyE9PWdbZV0/Z1tlXT1pLmV4cG9ydHM6dT09PXAmJmx8fChnW2VdPXUpKX1lbHNlIGUmJihnW2VdPW4pfSxlPW49bz1mdW5jdGlvbihlLHQsbixzLGkpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXJldHVybiBmW2VdP2ZbZV0odCk6eChoKGUsQSh0KSkuZik7aWYoIWUuc3BsaWNlKXtpZigoeT1lKS5kZXBzJiZvKHkuZGVwcyx5LmNhbGxiYWNrKSwhdClyZXR1cm47dC5zcGxpY2U/KGU9dCx0PW4sbj1udWxsKTplPXB9cmV0dXJuIHQ9dHx8ZnVuY3Rpb24oKXt9LFwiZnVuY3Rpb25cIj09dHlwZW9mIG4mJihuPXMscz1pKSxzP3IocCxlLHQsbik6c2V0VGltZW91dChmdW5jdGlvbigpe3IocCxlLHQsbil9LDQpLG99LG8uY29uZmlnPWZ1bmN0aW9uKGUpe3JldHVybiBvKGUpfSxlLl9kZWZpbmVkPWcsKHM9ZnVuY3Rpb24oZSx0LG4pe2lmKFwic3RyaW5nXCIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcihcIlNlZSBhbG1vbmQgUkVBRE1FOiBpbmNvcnJlY3QgbW9kdWxlIGJ1aWxkLCBubyBtb2R1bGUgbmFtZVwiKTt0LnNwbGljZXx8KG49dCx0PVtdKSxiKGcsZSl8fGIobSxlKXx8KG1bZV09W2UsdCxuXSl9KS5hbWQ9e2pRdWVyeTohMH0sdS5yZXF1aXJlanM9ZSx1LnJlcXVpcmU9bix1LmRlZmluZT1zKSx1LmRlZmluZShcImFsbW9uZFwiLGZ1bmN0aW9uKCl7fSksdS5kZWZpbmUoXCJqcXVlcnlcIixbXSxmdW5jdGlvbigpe3ZhciBlPXR8fCQ7cmV0dXJuIG51bGw9PWUmJmNvbnNvbGUmJmNvbnNvbGUuZXJyb3ImJmNvbnNvbGUuZXJyb3IoXCJTZWxlY3QyOiBBbiBpbnN0YW5jZSBvZiBqUXVlcnkgb3IgYSBqUXVlcnktY29tcGF0aWJsZSBsaWJyYXJ5IHdhcyBub3QgZm91bmQuIE1ha2Ugc3VyZSB0aGF0IHlvdSBhcmUgaW5jbHVkaW5nIGpRdWVyeSBiZWZvcmUgU2VsZWN0MiBvbiB5b3VyIHdlYiBwYWdlLlwiKSxlfSksdS5kZWZpbmUoXCJzZWxlY3QyL3V0aWxzXCIsW1wianF1ZXJ5XCJdLGZ1bmN0aW9uKHIpe3ZhciBzPXt9O2Z1bmN0aW9uIGMoZSl7dmFyIHQsbj1lLnByb3RvdHlwZSxzPVtdO2Zvcih0IGluIG4pXCJmdW5jdGlvblwiPT10eXBlb2Ygblt0XSYmXCJjb25zdHJ1Y3RvclwiIT09dCYmcy5wdXNoKHQpO3JldHVybiBzfXMuRXh0ZW5kPWZ1bmN0aW9uKGUsdCl7dmFyIG4scz17fS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBpKCl7dGhpcy5jb25zdHJ1Y3Rvcj1lfWZvcihuIGluIHQpcy5jYWxsKHQsbikmJihlW25dPXRbbl0pO3JldHVybiBpLnByb3RvdHlwZT10LnByb3RvdHlwZSxlLnByb3RvdHlwZT1uZXcgaSxlLl9fc3VwZXJfXz10LnByb3RvdHlwZSxlfSxzLkRlY29yYXRlPWZ1bmN0aW9uKHMsaSl7dmFyIGU9YyhpKSx0PWMocyk7ZnVuY3Rpb24gcigpe3ZhciBlPUFycmF5LnByb3RvdHlwZS51bnNoaWZ0LHQ9aS5wcm90b3R5cGUuY29uc3RydWN0b3IubGVuZ3RoLG49cy5wcm90b3R5cGUuY29uc3RydWN0b3I7MDx0JiYoZS5jYWxsKGFyZ3VtZW50cyxzLnByb3RvdHlwZS5jb25zdHJ1Y3Rvciksbj1pLnByb3RvdHlwZS5jb25zdHJ1Y3Rvciksbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9aS5kaXNwbGF5TmFtZT1zLmRpc3BsYXlOYW1lLHIucHJvdG90eXBlPW5ldyBmdW5jdGlvbigpe3RoaXMuY29uc3RydWN0b3I9cn07Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBvPXRbbl07ci5wcm90b3R5cGVbb109cy5wcm90b3R5cGVbb119Zm9yKHZhciBhPTA7YTxlLmxlbmd0aDthKyspe3ZhciBsPWVbYV07ci5wcm90b3R5cGVbbF09ZnVuY3Rpb24oZSl7dmFyIHQ9ZnVuY3Rpb24oKXt9O2UgaW4gci5wcm90b3R5cGUmJih0PXIucHJvdG90eXBlW2VdKTt2YXIgbj1pLnByb3RvdHlwZVtlXTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLnVuc2hpZnQuY2FsbChhcmd1bWVudHMsdCksbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fShsKX1yZXR1cm4gcn07ZnVuY3Rpb24gZSgpe3RoaXMubGlzdGVuZXJzPXt9fWUucHJvdG90eXBlLm9uPWZ1bmN0aW9uKGUsdCl7dGhpcy5saXN0ZW5lcnM9dGhpcy5saXN0ZW5lcnN8fHt9LGUgaW4gdGhpcy5saXN0ZW5lcnM/dGhpcy5saXN0ZW5lcnNbZV0ucHVzaCh0KTp0aGlzLmxpc3RlbmVyc1tlXT1bdF19LGUucHJvdG90eXBlLnRyaWdnZXI9ZnVuY3Rpb24oZSl7dmFyIHQ9QXJyYXkucHJvdG90eXBlLnNsaWNlLG49dC5jYWxsKGFyZ3VtZW50cywxKTt0aGlzLmxpc3RlbmVycz10aGlzLmxpc3RlbmVyc3x8e30sMD09PShuPW51bGw9PW4/W106bikubGVuZ3RoJiZuLnB1c2goe30pLChuWzBdLl90eXBlPWUpaW4gdGhpcy5saXN0ZW5lcnMmJnRoaXMuaW52b2tlKHRoaXMubGlzdGVuZXJzW2VdLHQuY2FsbChhcmd1bWVudHMsMSkpLFwiKlwiaW4gdGhpcy5saXN0ZW5lcnMmJnRoaXMuaW52b2tlKHRoaXMubGlzdGVuZXJzW1wiKlwiXSxhcmd1bWVudHMpfSxlLnByb3RvdHlwZS5pbnZva2U9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49MCxzPWUubGVuZ3RoO248cztuKyspZVtuXS5hcHBseSh0aGlzLHQpfSxzLk9ic2VydmFibGU9ZSxzLmdlbmVyYXRlQ2hhcnM9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVwiXCIsbj0wO248ZTtuKyspdCs9TWF0aC5mbG9vcigzNipNYXRoLnJhbmRvbSgpKS50b1N0cmluZygzNik7cmV0dXJuIHR9LHMuYmluZD1mdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbigpe2UuYXBwbHkodCxhcmd1bWVudHMpfX0scy5fY29udmVydERhdGE9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0IGluIGUpe3ZhciBuPXQuc3BsaXQoXCItXCIpLHM9ZTtpZigxIT09bi5sZW5ndGgpe2Zvcih2YXIgaT0wO2k8bi5sZW5ndGg7aSsrKXt2YXIgcj1uW2ldOyhyPXIuc3Vic3RyaW5nKDAsMSkudG9Mb3dlckNhc2UoKStyLnN1YnN0cmluZygxKSlpbiBzfHwoc1tyXT17fSksaT09bi5sZW5ndGgtMSYmKHNbcl09ZVt0XSkscz1zW3JdfWRlbGV0ZSBlW3RdfX1yZXR1cm4gZX0scy5oYXNTY3JvbGw9ZnVuY3Rpb24oZSx0KXt2YXIgbj1yKHQpLHM9dC5zdHlsZS5vdmVyZmxvd1gsaT10LnN0eWxlLm92ZXJmbG93WTtyZXR1cm4ocyE9PWl8fFwiaGlkZGVuXCIhPT1pJiZcInZpc2libGVcIiE9PWkpJiYoXCJzY3JvbGxcIj09PXN8fFwic2Nyb2xsXCI9PT1pfHwobi5pbm5lckhlaWdodCgpPHQuc2Nyb2xsSGVpZ2h0fHxuLmlubmVyV2lkdGgoKTx0LnNjcm9sbFdpZHRoKSl9LHMuZXNjYXBlTWFya3VwPWZ1bmN0aW9uKGUpe3ZhciB0PXtcIlxcXFxcIjpcIiYjOTI7XCIsXCImXCI6XCImYW1wO1wiLFwiPFwiOlwiJmx0O1wiLFwiPlwiOlwiJmd0O1wiLCdcIic6XCImcXVvdDtcIixcIidcIjpcIiYjMzk7XCIsXCIvXCI6XCImIzQ3O1wifTtyZXR1cm5cInN0cmluZ1wiIT10eXBlb2YgZT9lOlN0cmluZyhlKS5yZXBsYWNlKC9bJjw+XCInXFwvXFxcXF0vZyxmdW5jdGlvbihlKXtyZXR1cm4gdFtlXX0pfSxzLl9fY2FjaGU9e307dmFyIG49MDtyZXR1cm4gcy5HZXRVbmlxdWVFbGVtZW50SWQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5nZXRBdHRyaWJ1dGUoXCJkYXRhLXNlbGVjdDItaWRcIik7cmV0dXJuIG51bGwhPXR8fCh0PWUuaWQ/XCJzZWxlY3QyLWRhdGEtXCIrZS5pZDpcInNlbGVjdDItZGF0YS1cIisoKytuKS50b1N0cmluZygpK1wiLVwiK3MuZ2VuZXJhdGVDaGFycyg0KSxlLnNldEF0dHJpYnV0ZShcImRhdGEtc2VsZWN0Mi1pZFwiLHQpKSx0fSxzLlN0b3JlRGF0YT1mdW5jdGlvbihlLHQsbil7ZT1zLkdldFVuaXF1ZUVsZW1lbnRJZChlKTtzLl9fY2FjaGVbZV18fChzLl9fY2FjaGVbZV09e30pLHMuX19jYWNoZVtlXVt0XT1ufSxzLkdldERhdGE9ZnVuY3Rpb24oZSx0KXt2YXIgbj1zLkdldFVuaXF1ZUVsZW1lbnRJZChlKTtyZXR1cm4gdD9zLl9fY2FjaGVbbl0mJm51bGwhPXMuX19jYWNoZVtuXVt0XT9zLl9fY2FjaGVbbl1bdF06cihlKS5kYXRhKHQpOnMuX19jYWNoZVtuXX0scy5SZW1vdmVEYXRhPWZ1bmN0aW9uKGUpe3ZhciB0PXMuR2V0VW5pcXVlRWxlbWVudElkKGUpO251bGwhPXMuX19jYWNoZVt0XSYmZGVsZXRlIHMuX19jYWNoZVt0XSxlLnJlbW92ZUF0dHJpYnV0ZShcImRhdGEtc2VsZWN0Mi1pZFwiKX0scy5jb3B5Tm9uSW50ZXJuYWxDc3NDbGFzc2VzPWZ1bmN0aW9uKGUsdCl7dmFyIG49KG49ZS5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKS50cmltKCkuc3BsaXQoL1xccysvKSkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiAwPT09ZS5pbmRleE9mKFwic2VsZWN0Mi1cIil9KSx0PSh0PXQuZ2V0QXR0cmlidXRlKFwiY2xhc3NcIikudHJpbSgpLnNwbGl0KC9cXHMrLykpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gMCE9PWUuaW5kZXhPZihcInNlbGVjdDItXCIpfSksdD1uLmNvbmNhdCh0KTtlLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsdC5qb2luKFwiIFwiKSl9LHN9KSx1LmRlZmluZShcInNlbGVjdDIvcmVzdWx0c1wiLFtcImpxdWVyeVwiLFwiLi91dGlsc1wiXSxmdW5jdGlvbihkLHApe2Z1bmN0aW9uIHMoZSx0LG4pe3RoaXMuJGVsZW1lbnQ9ZSx0aGlzLmRhdGE9bix0aGlzLm9wdGlvbnM9dCxzLl9fc3VwZXJfXy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMpfXJldHVybiBwLkV4dGVuZChzLHAuT2JzZXJ2YWJsZSkscy5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7dmFyIGU9ZCgnPHVsIGNsYXNzPVwic2VsZWN0Mi1yZXN1bHRzX19vcHRpb25zXCIgcm9sZT1cImxpc3Rib3hcIj48L3VsPicpO3JldHVybiB0aGlzLm9wdGlvbnMuZ2V0KFwibXVsdGlwbGVcIikmJmUuYXR0cihcImFyaWEtbXVsdGlzZWxlY3RhYmxlXCIsXCJ0cnVlXCIpLHRoaXMuJHJlc3VsdHM9ZX0scy5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLiRyZXN1bHRzLmVtcHR5KCl9LHMucHJvdG90eXBlLmRpc3BsYXlNZXNzYWdlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMub3B0aW9ucy5nZXQoXCJlc2NhcGVNYXJrdXBcIik7dGhpcy5jbGVhcigpLHRoaXMuaGlkZUxvYWRpbmcoKTt2YXIgbj1kKCc8bGkgcm9sZT1cImFsZXJ0XCIgYXJpYS1saXZlPVwiYXNzZXJ0aXZlXCIgY2xhc3M9XCJzZWxlY3QyLXJlc3VsdHNfX29wdGlvblwiPjwvbGk+Jykscz10aGlzLm9wdGlvbnMuZ2V0KFwidHJhbnNsYXRpb25zXCIpLmdldChlLm1lc3NhZ2UpO24uYXBwZW5kKHQocyhlLmFyZ3MpKSksblswXS5jbGFzc05hbWUrPVwiIHNlbGVjdDItcmVzdWx0c19fbWVzc2FnZVwiLHRoaXMuJHJlc3VsdHMuYXBwZW5kKG4pfSxzLnByb3RvdHlwZS5oaWRlTWVzc2FnZXM9ZnVuY3Rpb24oKXt0aGlzLiRyZXN1bHRzLmZpbmQoXCIuc2VsZWN0Mi1yZXN1bHRzX19tZXNzYWdlXCIpLnJlbW92ZSgpfSxzLnByb3RvdHlwZS5hcHBlbmQ9ZnVuY3Rpb24oZSl7dGhpcy5oaWRlTG9hZGluZygpO3ZhciB0PVtdO2lmKG51bGwhPWUucmVzdWx0cyYmMCE9PWUucmVzdWx0cy5sZW5ndGgpe2UucmVzdWx0cz10aGlzLnNvcnQoZS5yZXN1bHRzKTtmb3IodmFyIG49MDtuPGUucmVzdWx0cy5sZW5ndGg7bisrKXt2YXIgcz1lLnJlc3VsdHNbbl0scz10aGlzLm9wdGlvbihzKTt0LnB1c2gocyl9dGhpcy4kcmVzdWx0cy5hcHBlbmQodCl9ZWxzZSAwPT09dGhpcy4kcmVzdWx0cy5jaGlsZHJlbigpLmxlbmd0aCYmdGhpcy50cmlnZ2VyKFwicmVzdWx0czptZXNzYWdlXCIse21lc3NhZ2U6XCJub1Jlc3VsdHNcIn0pfSxzLnByb3RvdHlwZS5wb3NpdGlvbj1mdW5jdGlvbihlLHQpe3QuZmluZChcIi5zZWxlY3QyLXJlc3VsdHNcIikuYXBwZW5kKGUpfSxzLnByb3RvdHlwZS5zb3J0PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLm9wdGlvbnMuZ2V0KFwic29ydGVyXCIpKGUpfSxzLnByb3RvdHlwZS5oaWdobGlnaHRGaXJzdEl0ZW09ZnVuY3Rpb24oKXt2YXIgZT10aGlzLiRyZXN1bHRzLmZpbmQoXCIuc2VsZWN0Mi1yZXN1bHRzX19vcHRpb24tLXNlbGVjdGFibGVcIiksdD1lLmZpbHRlcihcIi5zZWxlY3QyLXJlc3VsdHNfX29wdGlvbi0tc2VsZWN0ZWRcIik7KDA8dC5sZW5ndGg/dDplKS5maXJzdCgpLnRyaWdnZXIoXCJtb3VzZWVudGVyXCIpLHRoaXMuZW5zdXJlSGlnaGxpZ2h0VmlzaWJsZSgpfSxzLnByb3RvdHlwZS5zZXRDbGFzc2VzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLmRhdGEuY3VycmVudChmdW5jdGlvbihlKXt2YXIgcz1lLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS5pZC50b1N0cmluZygpfSk7dC4kcmVzdWx0cy5maW5kKFwiLnNlbGVjdDItcmVzdWx0c19fb3B0aW9uLS1zZWxlY3RhYmxlXCIpLmVhY2goZnVuY3Rpb24oKXt2YXIgZT1kKHRoaXMpLHQ9cC5HZXREYXRhKHRoaXMsXCJkYXRhXCIpLG49XCJcIit0LmlkO251bGwhPXQuZWxlbWVudCYmdC5lbGVtZW50LnNlbGVjdGVkfHxudWxsPT10LmVsZW1lbnQmJi0xPHMuaW5kZXhPZihuKT8odGhpcy5jbGFzc0xpc3QuYWRkKFwic2VsZWN0Mi1yZXN1bHRzX19vcHRpb24tLXNlbGVjdGVkXCIpLGUuYXR0cihcImFyaWEtc2VsZWN0ZWRcIixcInRydWVcIikpOih0aGlzLmNsYXNzTGlzdC5yZW1vdmUoXCJzZWxlY3QyLXJlc3VsdHNfX29wdGlvbi0tc2VsZWN0ZWRcIiksZS5hdHRyKFwiYXJpYS1zZWxlY3RlZFwiLFwiZmFsc2VcIikpfSl9KX0scy5wcm90b3R5cGUuc2hvd0xvYWRpbmc9ZnVuY3Rpb24oZSl7dGhpcy5oaWRlTG9hZGluZygpO2U9e2Rpc2FibGVkOiEwLGxvYWRpbmc6ITAsdGV4dDp0aGlzLm9wdGlvbnMuZ2V0KFwidHJhbnNsYXRpb25zXCIpLmdldChcInNlYXJjaGluZ1wiKShlKX0sZT10aGlzLm9wdGlvbihlKTtlLmNsYXNzTmFtZSs9XCIgbG9hZGluZy1yZXN1bHRzXCIsdGhpcy4kcmVzdWx0cy5wcmVwZW5kKGUpfSxzLnByb3RvdHlwZS5oaWRlTG9hZGluZz1mdW5jdGlvbigpe3RoaXMuJHJlc3VsdHMuZmluZChcIi5sb2FkaW5nLXJlc3VsdHNcIikucmVtb3ZlKCl9LHMucHJvdG90eXBlLm9wdGlvbj1mdW5jdGlvbihlKXt2YXIgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwibGlcIik7dC5jbGFzc0xpc3QuYWRkKFwic2VsZWN0Mi1yZXN1bHRzX19vcHRpb25cIiksdC5jbGFzc0xpc3QuYWRkKFwic2VsZWN0Mi1yZXN1bHRzX19vcHRpb24tLXNlbGVjdGFibGVcIik7dmFyIG4scz17cm9sZTpcIm9wdGlvblwifSxpPXdpbmRvdy5FbGVtZW50LnByb3RvdHlwZS5tYXRjaGVzfHx3aW5kb3cuRWxlbWVudC5wcm90b3R5cGUubXNNYXRjaGVzU2VsZWN0b3J8fHdpbmRvdy5FbGVtZW50LnByb3RvdHlwZS53ZWJraXRNYXRjaGVzU2VsZWN0b3I7Zm9yKG4gaW4obnVsbCE9ZS5lbGVtZW50JiZpLmNhbGwoZS5lbGVtZW50LFwiOmRpc2FibGVkXCIpfHxudWxsPT1lLmVsZW1lbnQmJmUuZGlzYWJsZWQpJiYoc1tcImFyaWEtZGlzYWJsZWRcIl09XCJ0cnVlXCIsdC5jbGFzc0xpc3QucmVtb3ZlKFwic2VsZWN0Mi1yZXN1bHRzX19vcHRpb24tLXNlbGVjdGFibGVcIiksdC5jbGFzc0xpc3QuYWRkKFwic2VsZWN0Mi1yZXN1bHRzX19vcHRpb24tLWRpc2FibGVkXCIpKSxudWxsPT1lLmlkJiZ0LmNsYXNzTGlzdC5yZW1vdmUoXCJzZWxlY3QyLXJlc3VsdHNfX29wdGlvbi0tc2VsZWN0YWJsZVwiKSxudWxsIT1lLl9yZXN1bHRJZCYmKHQuaWQ9ZS5fcmVzdWx0SWQpLGUudGl0bGUmJih0LnRpdGxlPWUudGl0bGUpLGUuY2hpbGRyZW4mJihzLnJvbGU9XCJncm91cFwiLHNbXCJhcmlhLWxhYmVsXCJdPWUudGV4dCx0LmNsYXNzTGlzdC5yZW1vdmUoXCJzZWxlY3QyLXJlc3VsdHNfX29wdGlvbi0tc2VsZWN0YWJsZVwiKSx0LmNsYXNzTGlzdC5hZGQoXCJzZWxlY3QyLXJlc3VsdHNfX29wdGlvbi0tZ3JvdXBcIikpLHMpe3ZhciByPXNbbl07dC5zZXRBdHRyaWJ1dGUobixyKX1pZihlLmNoaWxkcmVuKXt2YXIgbz1kKHQpLGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInN0cm9uZ1wiKTthLmNsYXNzTmFtZT1cInNlbGVjdDItcmVzdWx0c19fZ3JvdXBcIix0aGlzLnRlbXBsYXRlKGUsYSk7Zm9yKHZhciBsPVtdLGM9MDtjPGUuY2hpbGRyZW4ubGVuZ3RoO2MrKyl7dmFyIHU9ZS5jaGlsZHJlbltjXSx1PXRoaXMub3B0aW9uKHUpO2wucHVzaCh1KX1pPWQoXCI8dWw+PC91bD5cIix7Y2xhc3M6XCJzZWxlY3QyLXJlc3VsdHNfX29wdGlvbnMgc2VsZWN0Mi1yZXN1bHRzX19vcHRpb25zLS1uZXN0ZWRcIixyb2xlOlwibm9uZVwifSk7aS5hcHBlbmQobCksby5hcHBlbmQoYSksby5hcHBlbmQoaSl9ZWxzZSB0aGlzLnRlbXBsYXRlKGUsdCk7cmV0dXJuIHAuU3RvcmVEYXRhKHQsXCJkYXRhXCIsZSksdH0scy5wcm90b3R5cGUuYmluZD1mdW5jdGlvbih0LGUpe3ZhciBpPXRoaXMsbj10LmlkK1wiLXJlc3VsdHNcIjt0aGlzLiRyZXN1bHRzLmF0dHIoXCJpZFwiLG4pLHQub24oXCJyZXN1bHRzOmFsbFwiLGZ1bmN0aW9uKGUpe2kuY2xlYXIoKSxpLmFwcGVuZChlLmRhdGEpLHQuaXNPcGVuKCkmJihpLnNldENsYXNzZXMoKSxpLmhpZ2hsaWdodEZpcnN0SXRlbSgpKX0pLHQub24oXCJyZXN1bHRzOmFwcGVuZFwiLGZ1bmN0aW9uKGUpe2kuYXBwZW5kKGUuZGF0YSksdC5pc09wZW4oKSYmaS5zZXRDbGFzc2VzKCl9KSx0Lm9uKFwicXVlcnlcIixmdW5jdGlvbihlKXtpLmhpZGVNZXNzYWdlcygpLGkuc2hvd0xvYWRpbmcoZSl9KSx0Lm9uKFwic2VsZWN0XCIsZnVuY3Rpb24oKXt0LmlzT3BlbigpJiYoaS5zZXRDbGFzc2VzKCksaS5vcHRpb25zLmdldChcInNjcm9sbEFmdGVyU2VsZWN0XCIpJiZpLmhpZ2hsaWdodEZpcnN0SXRlbSgpKX0pLHQub24oXCJ1bnNlbGVjdFwiLGZ1bmN0aW9uKCl7dC5pc09wZW4oKSYmKGkuc2V0Q2xhc3NlcygpLGkub3B0aW9ucy5nZXQoXCJzY3JvbGxBZnRlclNlbGVjdFwiKSYmaS5oaWdobGlnaHRGaXJzdEl0ZW0oKSl9KSx0Lm9uKFwib3BlblwiLGZ1bmN0aW9uKCl7aS4kcmVzdWx0cy5hdHRyKFwiYXJpYS1leHBhbmRlZFwiLFwidHJ1ZVwiKSxpLiRyZXN1bHRzLmF0dHIoXCJhcmlhLWhpZGRlblwiLFwiZmFsc2VcIiksaS5zZXRDbGFzc2VzKCksaS5lbnN1cmVIaWdobGlnaHRWaXNpYmxlKCl9KSx0Lm9uKFwiY2xvc2VcIixmdW5jdGlvbigpe2kuJHJlc3VsdHMuYXR0cihcImFyaWEtZXhwYW5kZWRcIixcImZhbHNlXCIpLGkuJHJlc3VsdHMuYXR0cihcImFyaWEtaGlkZGVuXCIsXCJ0cnVlXCIpLGkuJHJlc3VsdHMucmVtb3ZlQXR0cihcImFyaWEtYWN0aXZlZGVzY2VuZGFudFwiKX0pLHQub24oXCJyZXN1bHRzOnRvZ2dsZVwiLGZ1bmN0aW9uKCl7dmFyIGU9aS5nZXRIaWdobGlnaHRlZFJlc3VsdHMoKTswIT09ZS5sZW5ndGgmJmUudHJpZ2dlcihcIm1vdXNldXBcIil9KSx0Lm9uKFwicmVzdWx0czpzZWxlY3RcIixmdW5jdGlvbigpe3ZhciBlLHQ9aS5nZXRIaWdobGlnaHRlZFJlc3VsdHMoKTswIT09dC5sZW5ndGgmJihlPXAuR2V0RGF0YSh0WzBdLFwiZGF0YVwiKSx0Lmhhc0NsYXNzKFwic2VsZWN0Mi1yZXN1bHRzX19vcHRpb24tLXNlbGVjdGVkXCIpP2kudHJpZ2dlcihcImNsb3NlXCIse30pOmkudHJpZ2dlcihcInNlbGVjdFwiLHtkYXRhOmV9KSl9KSx0Lm9uKFwicmVzdWx0czpwcmV2aW91c1wiLGZ1bmN0aW9uKCl7dmFyIGUsdD1pLmdldEhpZ2hsaWdodGVkUmVzdWx0cygpLG49aS4kcmVzdWx0cy5maW5kKFwiLnNlbGVjdDItcmVzdWx0c19fb3B0aW9uLS1zZWxlY3RhYmxlXCIpLHM9bi5pbmRleCh0KTtzPD0wfHwoZT1zLTEsMD09PXQubGVuZ3RoJiYoZT0wKSwocz1uLmVxKGUpKS50cmlnZ2VyKFwibW91c2VlbnRlclwiKSx0PWkuJHJlc3VsdHMub2Zmc2V0KCkudG9wLG49cy5vZmZzZXQoKS50b3Ascz1pLiRyZXN1bHRzLnNjcm9sbFRvcCgpKyhuLXQpLDA9PT1lP2kuJHJlc3VsdHMuc2Nyb2xsVG9wKDApOm4tdDwwJiZpLiRyZXN1bHRzLnNjcm9sbFRvcChzKSl9KSx0Lm9uKFwicmVzdWx0czpuZXh0XCIsZnVuY3Rpb24oKXt2YXIgZSx0PWkuZ2V0SGlnaGxpZ2h0ZWRSZXN1bHRzKCksbj1pLiRyZXN1bHRzLmZpbmQoXCIuc2VsZWN0Mi1yZXN1bHRzX19vcHRpb24tLXNlbGVjdGFibGVcIikscz1uLmluZGV4KHQpKzE7cz49bi5sZW5ndGh8fCgoZT1uLmVxKHMpKS50cmlnZ2VyKFwibW91c2VlbnRlclwiKSx0PWkuJHJlc3VsdHMub2Zmc2V0KCkudG9wK2kuJHJlc3VsdHMub3V0ZXJIZWlnaHQoITEpLG49ZS5vZmZzZXQoKS50b3ArZS5vdXRlckhlaWdodCghMSksZT1pLiRyZXN1bHRzLnNjcm9sbFRvcCgpK24tdCwwPT09cz9pLiRyZXN1bHRzLnNjcm9sbFRvcCgwKTp0PG4mJmkuJHJlc3VsdHMuc2Nyb2xsVG9wKGUpKX0pLHQub24oXCJyZXN1bHRzOmZvY3VzXCIsZnVuY3Rpb24oZSl7ZS5lbGVtZW50WzBdLmNsYXNzTGlzdC5hZGQoXCJzZWxlY3QyLXJlc3VsdHNfX29wdGlvbi0taGlnaGxpZ2h0ZWRcIiksZS5lbGVtZW50WzBdLnNldEF0dHJpYnV0ZShcImFyaWEtc2VsZWN0ZWRcIixcInRydWVcIil9KSx0Lm9uKFwicmVzdWx0czptZXNzYWdlXCIsZnVuY3Rpb24oZSl7aS5kaXNwbGF5TWVzc2FnZShlKX0pLGQuZm4ubW91c2V3aGVlbCYmdGhpcy4kcmVzdWx0cy5vbihcIm1vdXNld2hlZWxcIixmdW5jdGlvbihlKXt2YXIgdD1pLiRyZXN1bHRzLnNjcm9sbFRvcCgpLG49aS4kcmVzdWx0cy5nZXQoMCkuc2Nyb2xsSGVpZ2h0LXQrZS5kZWx0YVksdD0wPGUuZGVsdGFZJiZ0LWUuZGVsdGFZPD0wLG49ZS5kZWx0YVk8MCYmbjw9aS4kcmVzdWx0cy5oZWlnaHQoKTt0PyhpLiRyZXN1bHRzLnNjcm9sbFRvcCgwKSxlLnByZXZlbnREZWZhdWx0KCksZS5zdG9wUHJvcGFnYXRpb24oKSk6biYmKGkuJHJlc3VsdHMuc2Nyb2xsVG9wKGkuJHJlc3VsdHMuZ2V0KDApLnNjcm9sbEhlaWdodC1pLiRyZXN1bHRzLmhlaWdodCgpKSxlLnByZXZlbnREZWZhdWx0KCksZS5zdG9wUHJvcGFnYXRpb24oKSl9KSx0aGlzLiRyZXN1bHRzLm9uKFwibW91c2V1cFwiLFwiLnNlbGVjdDItcmVzdWx0c19fb3B0aW9uLS1zZWxlY3RhYmxlXCIsZnVuY3Rpb24oZSl7dmFyIHQ9ZCh0aGlzKSxuPXAuR2V0RGF0YSh0aGlzLFwiZGF0YVwiKTt0Lmhhc0NsYXNzKFwic2VsZWN0Mi1yZXN1bHRzX19vcHRpb24tLXNlbGVjdGVkXCIpP2kub3B0aW9ucy5nZXQoXCJtdWx0aXBsZVwiKT9pLnRyaWdnZXIoXCJ1bnNlbGVjdFwiLHtvcmlnaW5hbEV2ZW50OmUsZGF0YTpufSk6aS50cmlnZ2VyKFwiY2xvc2VcIix7fSk6aS50cmlnZ2VyKFwic2VsZWN0XCIse29yaWdpbmFsRXZlbnQ6ZSxkYXRhOm59KX0pLHRoaXMuJHJlc3VsdHMub24oXCJtb3VzZWVudGVyXCIsXCIuc2VsZWN0Mi1yZXN1bHRzX19vcHRpb24tLXNlbGVjdGFibGVcIixmdW5jdGlvbihlKXt2YXIgdD1wLkdldERhdGEodGhpcyxcImRhdGFcIik7aS5nZXRIaWdobGlnaHRlZFJlc3VsdHMoKS5yZW1vdmVDbGFzcyhcInNlbGVjdDItcmVzdWx0c19fb3B0aW9uLS1oaWdobGlnaHRlZFwiKS5hdHRyKFwiYXJpYS1zZWxlY3RlZFwiLFwiZmFsc2VcIiksaS50cmlnZ2VyKFwicmVzdWx0czpmb2N1c1wiLHtkYXRhOnQsZWxlbWVudDpkKHRoaXMpfSl9KX0scy5wcm90b3R5cGUuZ2V0SGlnaGxpZ2h0ZWRSZXN1bHRzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJHJlc3VsdHMuZmluZChcIi5zZWxlY3QyLXJlc3VsdHNfX29wdGlvbi0taGlnaGxpZ2h0ZWRcIil9LHMucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLiRyZXN1bHRzLnJlbW92ZSgpfSxzLnByb3RvdHlwZS5lbnN1cmVIaWdobGlnaHRWaXNpYmxlPWZ1bmN0aW9uKCl7dmFyIGUsdCxuLHMsaT10aGlzLmdldEhpZ2hsaWdodGVkUmVzdWx0cygpOzAhPT1pLmxlbmd0aCYmKGU9dGhpcy4kcmVzdWx0cy5maW5kKFwiLnNlbGVjdDItcmVzdWx0c19fb3B0aW9uLS1zZWxlY3RhYmxlXCIpLmluZGV4KGkpLHM9dGhpcy4kcmVzdWx0cy5vZmZzZXQoKS50b3AsdD1pLm9mZnNldCgpLnRvcCxuPXRoaXMuJHJlc3VsdHMuc2Nyb2xsVG9wKCkrKHQtcykscz10LXMsbi09MippLm91dGVySGVpZ2h0KCExKSxlPD0yP3RoaXMuJHJlc3VsdHMuc2Nyb2xsVG9wKDApOihzPnRoaXMuJHJlc3VsdHMub3V0ZXJIZWlnaHQoKXx8czwwKSYmdGhpcy4kcmVzdWx0cy5zY3JvbGxUb3AobikpfSxzLnByb3RvdHlwZS50ZW1wbGF0ZT1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMub3B0aW9ucy5nZXQoXCJ0ZW1wbGF0ZVJlc3VsdFwiKSxzPXRoaXMub3B0aW9ucy5nZXQoXCJlc2NhcGVNYXJrdXBcIiksZT1uKGUsdCk7bnVsbD09ZT90LnN0eWxlLmRpc3BsYXk9XCJub25lXCI6XCJzdHJpbmdcIj09dHlwZW9mIGU/dC5pbm5lckhUTUw9cyhlKTpkKHQpLmFwcGVuZChlKX0sc30pLHUuZGVmaW5lKFwic2VsZWN0Mi9rZXlzXCIsW10sZnVuY3Rpb24oKXtyZXR1cm57QkFDS1NQQUNFOjgsVEFCOjksRU5URVI6MTMsU0hJRlQ6MTYsQ1RSTDoxNyxBTFQ6MTgsRVNDOjI3LFNQQUNFOjMyLFBBR0VfVVA6MzMsUEFHRV9ET1dOOjM0LEVORDozNSxIT01FOjM2LExFRlQ6MzcsVVA6MzgsUklHSFQ6MzksRE9XTjo0MCxERUxFVEU6NDZ9fSksdS5kZWZpbmUoXCJzZWxlY3QyL3NlbGVjdGlvbi9iYXNlXCIsW1wianF1ZXJ5XCIsXCIuLi91dGlsc1wiLFwiLi4va2V5c1wiXSxmdW5jdGlvbihuLHMsaSl7ZnVuY3Rpb24gcihlLHQpe3RoaXMuJGVsZW1lbnQ9ZSx0aGlzLm9wdGlvbnM9dCxyLl9fc3VwZXJfXy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMpfXJldHVybiBzLkV4dGVuZChyLHMuT2JzZXJ2YWJsZSksci5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7dmFyIGU9bignPHNwYW4gY2xhc3M9XCJzZWxlY3QyLXNlbGVjdGlvblwiIHJvbGU9XCJjb21ib2JveFwiICBhcmlhLWhhc3BvcHVwPVwidHJ1ZVwiIGFyaWEtZXhwYW5kZWQ9XCJmYWxzZVwiPjwvc3Bhbj4nKTtyZXR1cm4gdGhpcy5fdGFiaW5kZXg9MCxudWxsIT1zLkdldERhdGEodGhpcy4kZWxlbWVudFswXSxcIm9sZC10YWJpbmRleFwiKT90aGlzLl90YWJpbmRleD1zLkdldERhdGEodGhpcy4kZWxlbWVudFswXSxcIm9sZC10YWJpbmRleFwiKTpudWxsIT10aGlzLiRlbGVtZW50LmF0dHIoXCJ0YWJpbmRleFwiKSYmKHRoaXMuX3RhYmluZGV4PXRoaXMuJGVsZW1lbnQuYXR0cihcInRhYmluZGV4XCIpKSxlLmF0dHIoXCJ0aXRsZVwiLHRoaXMuJGVsZW1lbnQuYXR0cihcInRpdGxlXCIpKSxlLmF0dHIoXCJ0YWJpbmRleFwiLHRoaXMuX3RhYmluZGV4KSxlLmF0dHIoXCJhcmlhLWRpc2FibGVkXCIsXCJmYWxzZVwiKSx0aGlzLiRzZWxlY3Rpb249ZX0sci5wcm90b3R5cGUuYmluZD1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMscz1lLmlkK1wiLXJlc3VsdHNcIjt0aGlzLmNvbnRhaW5lcj1lLHRoaXMuJHNlbGVjdGlvbi5vbihcImZvY3VzXCIsZnVuY3Rpb24oZSl7bi50cmlnZ2VyKFwiZm9jdXNcIixlKX0pLHRoaXMuJHNlbGVjdGlvbi5vbihcImJsdXJcIixmdW5jdGlvbihlKXtuLl9oYW5kbGVCbHVyKGUpfSksdGhpcy4kc2VsZWN0aW9uLm9uKFwia2V5ZG93blwiLGZ1bmN0aW9uKGUpe24udHJpZ2dlcihcImtleXByZXNzXCIsZSksZS53aGljaD09PWkuU1BBQ0UmJmUucHJldmVudERlZmF1bHQoKX0pLGUub24oXCJyZXN1bHRzOmZvY3VzXCIsZnVuY3Rpb24oZSl7bi4kc2VsZWN0aW9uLmF0dHIoXCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnRcIixlLmRhdGEuX3Jlc3VsdElkKX0pLGUub24oXCJzZWxlY3Rpb246dXBkYXRlXCIsZnVuY3Rpb24oZSl7bi51cGRhdGUoZS5kYXRhKX0pLGUub24oXCJvcGVuXCIsZnVuY3Rpb24oKXtuLiRzZWxlY3Rpb24uYXR0cihcImFyaWEtZXhwYW5kZWRcIixcInRydWVcIiksbi4kc2VsZWN0aW9uLmF0dHIoXCJhcmlhLW93bnNcIixzKSxuLl9hdHRhY2hDbG9zZUhhbmRsZXIoZSl9KSxlLm9uKFwiY2xvc2VcIixmdW5jdGlvbigpe24uJHNlbGVjdGlvbi5hdHRyKFwiYXJpYS1leHBhbmRlZFwiLFwiZmFsc2VcIiksbi4kc2VsZWN0aW9uLnJlbW92ZUF0dHIoXCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnRcIiksbi4kc2VsZWN0aW9uLnJlbW92ZUF0dHIoXCJhcmlhLW93bnNcIiksbi4kc2VsZWN0aW9uLnRyaWdnZXIoXCJmb2N1c1wiKSxuLl9kZXRhY2hDbG9zZUhhbmRsZXIoZSl9KSxlLm9uKFwiZW5hYmxlXCIsZnVuY3Rpb24oKXtuLiRzZWxlY3Rpb24uYXR0cihcInRhYmluZGV4XCIsbi5fdGFiaW5kZXgpLG4uJHNlbGVjdGlvbi5hdHRyKFwiYXJpYS1kaXNhYmxlZFwiLFwiZmFsc2VcIil9KSxlLm9uKFwiZGlzYWJsZVwiLGZ1bmN0aW9uKCl7bi4kc2VsZWN0aW9uLmF0dHIoXCJ0YWJpbmRleFwiLFwiLTFcIiksbi4kc2VsZWN0aW9uLmF0dHIoXCJhcmlhLWRpc2FibGVkXCIsXCJ0cnVlXCIpfSl9LHIucHJvdG90eXBlLl9oYW5kbGVCbHVyPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtkb2N1bWVudC5hY3RpdmVFbGVtZW50PT10LiRzZWxlY3Rpb25bMF18fG4uY29udGFpbnModC4kc2VsZWN0aW9uWzBdLGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpfHx0LnRyaWdnZXIoXCJibHVyXCIsZSl9LDEpfSxyLnByb3RvdHlwZS5fYXR0YWNoQ2xvc2VIYW5kbGVyPWZ1bmN0aW9uKGUpe24oZG9jdW1lbnQuYm9keSkub24oXCJtb3VzZWRvd24uc2VsZWN0Mi5cIitlLmlkLGZ1bmN0aW9uKGUpe3ZhciB0PW4oZS50YXJnZXQpLmNsb3Nlc3QoXCIuc2VsZWN0MlwiKTtuKFwiLnNlbGVjdDIuc2VsZWN0Mi1jb250YWluZXItLW9wZW5cIikuZWFjaChmdW5jdGlvbigpe3RoaXMhPXRbMF0mJnMuR2V0RGF0YSh0aGlzLFwiZWxlbWVudFwiKS5zZWxlY3QyKFwiY2xvc2VcIil9KX0pfSxyLnByb3RvdHlwZS5fZGV0YWNoQ2xvc2VIYW5kbGVyPWZ1bmN0aW9uKGUpe24oZG9jdW1lbnQuYm9keSkub2ZmKFwibW91c2Vkb3duLnNlbGVjdDIuXCIrZS5pZCl9LHIucHJvdG90eXBlLnBvc2l0aW9uPWZ1bmN0aW9uKGUsdCl7dC5maW5kKFwiLnNlbGVjdGlvblwiKS5hcHBlbmQoZSl9LHIucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9kZXRhY2hDbG9zZUhhbmRsZXIodGhpcy5jb250YWluZXIpfSxyLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oZSl7dGhyb3cgbmV3IEVycm9yKFwiVGhlIGB1cGRhdGVgIG1ldGhvZCBtdXN0IGJlIGRlZmluZWQgaW4gY2hpbGQgY2xhc3Nlcy5cIil9LHIucHJvdG90eXBlLmlzRW5hYmxlZD1mdW5jdGlvbigpe3JldHVybiF0aGlzLmlzRGlzYWJsZWQoKX0sci5wcm90b3R5cGUuaXNEaXNhYmxlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbnMuZ2V0KFwiZGlzYWJsZWRcIil9LHJ9KSx1LmRlZmluZShcInNlbGVjdDIvc2VsZWN0aW9uL3NpbmdsZVwiLFtcImpxdWVyeVwiLFwiLi9iYXNlXCIsXCIuLi91dGlsc1wiLFwiLi4va2V5c1wiXSxmdW5jdGlvbihlLHQsbixzKXtmdW5jdGlvbiBpKCl7aS5fX3N1cGVyX18uY29uc3RydWN0b3IuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiBuLkV4dGVuZChpLHQpLGkucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3ZhciBlPWkuX19zdXBlcl9fLnJlbmRlci5jYWxsKHRoaXMpO3JldHVybiBlWzBdLmNsYXNzTGlzdC5hZGQoXCJzZWxlY3QyLXNlbGVjdGlvbi0tc2luZ2xlXCIpLGUuaHRtbCgnPHNwYW4gY2xhc3M9XCJzZWxlY3QyLXNlbGVjdGlvbl9fcmVuZGVyZWRcIj48L3NwYW4+PHNwYW4gY2xhc3M9XCJzZWxlY3QyLXNlbGVjdGlvbl9fYXJyb3dcIiByb2xlPVwicHJlc2VudGF0aW9uXCI+PGIgcm9sZT1cInByZXNlbnRhdGlvblwiPjwvYj48L3NwYW4+JyksZX0saS5wcm90b3R5cGUuYmluZD1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXM7aS5fX3N1cGVyX18uYmluZC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dmFyIHM9dC5pZCtcIi1jb250YWluZXJcIjt0aGlzLiRzZWxlY3Rpb24uZmluZChcIi5zZWxlY3QyLXNlbGVjdGlvbl9fcmVuZGVyZWRcIikuYXR0cihcImlkXCIscykuYXR0cihcInJvbGVcIixcInRleHRib3hcIikuYXR0cihcImFyaWEtcmVhZG9ubHlcIixcInRydWVcIiksdGhpcy4kc2VsZWN0aW9uLmF0dHIoXCJhcmlhLWxhYmVsbGVkYnlcIixzKSx0aGlzLiRzZWxlY3Rpb24uYXR0cihcImFyaWEtY29udHJvbHNcIixzKSx0aGlzLiRzZWxlY3Rpb24ub24oXCJtb3VzZWRvd25cIixmdW5jdGlvbihlKXsxPT09ZS53aGljaCYmbi50cmlnZ2VyKFwidG9nZ2xlXCIse29yaWdpbmFsRXZlbnQ6ZX0pfSksdGhpcy4kc2VsZWN0aW9uLm9uKFwiZm9jdXNcIixmdW5jdGlvbihlKXt9KSx0aGlzLiRzZWxlY3Rpb24ub24oXCJibHVyXCIsZnVuY3Rpb24oZSl7fSksdC5vbihcImZvY3VzXCIsZnVuY3Rpb24oZSl7dC5pc09wZW4oKXx8bi4kc2VsZWN0aW9uLnRyaWdnZXIoXCJmb2N1c1wiKX0pfSxpLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3ZhciBlPXRoaXMuJHNlbGVjdGlvbi5maW5kKFwiLnNlbGVjdDItc2VsZWN0aW9uX19yZW5kZXJlZFwiKTtlLmVtcHR5KCksZS5yZW1vdmVBdHRyKFwidGl0bGVcIil9LGkucHJvdG90eXBlLmRpc3BsYXk9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLm9wdGlvbnMuZ2V0KFwidGVtcGxhdGVTZWxlY3Rpb25cIik7cmV0dXJuIHRoaXMub3B0aW9ucy5nZXQoXCJlc2NhcGVNYXJrdXBcIikobihlLHQpKX0saS5wcm90b3R5cGUuc2VsZWN0aW9uQ29udGFpbmVyPWZ1bmN0aW9uKCl7cmV0dXJuIGUoXCI8c3Bhbj48L3NwYW4+XCIpfSxpLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oZSl7dmFyIHQsbjswIT09ZS5sZW5ndGg/KG49ZVswXSx0PXRoaXMuJHNlbGVjdGlvbi5maW5kKFwiLnNlbGVjdDItc2VsZWN0aW9uX19yZW5kZXJlZFwiKSxlPXRoaXMuZGlzcGxheShuLHQpLHQuZW1wdHkoKS5hcHBlbmQoZSksKG49bi50aXRsZXx8bi50ZXh0KT90LmF0dHIoXCJ0aXRsZVwiLG4pOnQucmVtb3ZlQXR0cihcInRpdGxlXCIpKTp0aGlzLmNsZWFyKCl9LGl9KSx1LmRlZmluZShcInNlbGVjdDIvc2VsZWN0aW9uL211bHRpcGxlXCIsW1wianF1ZXJ5XCIsXCIuL2Jhc2VcIixcIi4uL3V0aWxzXCJdLGZ1bmN0aW9uKGksZSxjKXtmdW5jdGlvbiByKGUsdCl7ci5fX3N1cGVyX18uY29uc3RydWN0b3IuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiBjLkV4dGVuZChyLGUpLHIucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3ZhciBlPXIuX19zdXBlcl9fLnJlbmRlci5jYWxsKHRoaXMpO3JldHVybiBlWzBdLmNsYXNzTGlzdC5hZGQoXCJzZWxlY3QyLXNlbGVjdGlvbi0tbXVsdGlwbGVcIiksZS5odG1sKCc8dWwgY2xhc3M9XCJzZWxlY3QyLXNlbGVjdGlvbl9fcmVuZGVyZWRcIj48L3VsPicpLGV9LHIucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzO3IuX19zdXBlcl9fLmJpbmQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3ZhciBzPWUuaWQrXCItY29udGFpbmVyXCI7dGhpcy4kc2VsZWN0aW9uLmZpbmQoXCIuc2VsZWN0Mi1zZWxlY3Rpb25fX3JlbmRlcmVkXCIpLmF0dHIoXCJpZFwiLHMpLHRoaXMuJHNlbGVjdGlvbi5vbihcImNsaWNrXCIsZnVuY3Rpb24oZSl7bi50cmlnZ2VyKFwidG9nZ2xlXCIse29yaWdpbmFsRXZlbnQ6ZX0pfSksdGhpcy4kc2VsZWN0aW9uLm9uKFwiY2xpY2tcIixcIi5zZWxlY3QyLXNlbGVjdGlvbl9fY2hvaWNlX19yZW1vdmVcIixmdW5jdGlvbihlKXt2YXIgdDtuLmlzRGlzYWJsZWQoKXx8KHQ9aSh0aGlzKS5wYXJlbnQoKSx0PWMuR2V0RGF0YSh0WzBdLFwiZGF0YVwiKSxuLnRyaWdnZXIoXCJ1bnNlbGVjdFwiLHtvcmlnaW5hbEV2ZW50OmUsZGF0YTp0fSkpfSksdGhpcy4kc2VsZWN0aW9uLm9uKFwia2V5ZG93blwiLFwiLnNlbGVjdDItc2VsZWN0aW9uX19jaG9pY2VfX3JlbW92ZVwiLGZ1bmN0aW9uKGUpe24uaXNEaXNhYmxlZCgpfHxlLnN0b3BQcm9wYWdhdGlvbigpfSl9LHIucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy4kc2VsZWN0aW9uLmZpbmQoXCIuc2VsZWN0Mi1zZWxlY3Rpb25fX3JlbmRlcmVkXCIpO2UuZW1wdHkoKSxlLnJlbW92ZUF0dHIoXCJ0aXRsZVwiKX0sci5wcm90b3R5cGUuZGlzcGxheT1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMub3B0aW9ucy5nZXQoXCJ0ZW1wbGF0ZVNlbGVjdGlvblwiKTtyZXR1cm4gdGhpcy5vcHRpb25zLmdldChcImVzY2FwZU1hcmt1cFwiKShuKGUsdCkpfSxyLnByb3RvdHlwZS5zZWxlY3Rpb25Db250YWluZXI9ZnVuY3Rpb24oKXtyZXR1cm4gaSgnPGxpIGNsYXNzPVwic2VsZWN0Mi1zZWxlY3Rpb25fX2Nob2ljZVwiPjxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwic2VsZWN0Mi1zZWxlY3Rpb25fX2Nob2ljZV9fcmVtb3ZlXCIgdGFiaW5kZXg9XCItMVwiPjxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPiZ0aW1lczs8L3NwYW4+PC9idXR0b24+PHNwYW4gY2xhc3M9XCJzZWxlY3QyLXNlbGVjdGlvbl9fY2hvaWNlX19kaXNwbGF5XCI+PC9zcGFuPjwvbGk+Jyl9LHIucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihlKXtpZih0aGlzLmNsZWFyKCksMCE9PWUubGVuZ3RoKXtmb3IodmFyIHQ9W10sbj10aGlzLiRzZWxlY3Rpb24uZmluZChcIi5zZWxlY3QyLXNlbGVjdGlvbl9fcmVuZGVyZWRcIikuYXR0cihcImlkXCIpK1wiLWNob2ljZS1cIixzPTA7czxlLmxlbmd0aDtzKyspe3ZhciBpPWVbc10scj10aGlzLnNlbGVjdGlvbkNvbnRhaW5lcigpLG89dGhpcy5kaXNwbGF5KGksciksYT1uK2MuZ2VuZXJhdGVDaGFycyg0KStcIi1cIjtpLmlkP2ErPWkuaWQ6YSs9Yy5nZW5lcmF0ZUNoYXJzKDQpLHIuZmluZChcIi5zZWxlY3QyLXNlbGVjdGlvbl9fY2hvaWNlX19kaXNwbGF5XCIpLmFwcGVuZChvKS5hdHRyKFwiaWRcIixhKTt2YXIgbD1pLnRpdGxlfHxpLnRleHQ7bCYmci5hdHRyKFwidGl0bGVcIixsKTtvPXRoaXMub3B0aW9ucy5nZXQoXCJ0cmFuc2xhdGlvbnNcIikuZ2V0KFwicmVtb3ZlSXRlbVwiKSxsPXIuZmluZChcIi5zZWxlY3QyLXNlbGVjdGlvbl9fY2hvaWNlX19yZW1vdmVcIik7bC5hdHRyKFwidGl0bGVcIixvKCkpLGwuYXR0cihcImFyaWEtbGFiZWxcIixvKCkpLGwuYXR0cihcImFyaWEtZGVzY3JpYmVkYnlcIixhKSxjLlN0b3JlRGF0YShyWzBdLFwiZGF0YVwiLGkpLHQucHVzaChyKX10aGlzLiRzZWxlY3Rpb24uZmluZChcIi5zZWxlY3QyLXNlbGVjdGlvbl9fcmVuZGVyZWRcIikuYXBwZW5kKHQpfX0scn0pLHUuZGVmaW5lKFwic2VsZWN0Mi9zZWxlY3Rpb24vcGxhY2Vob2xkZXJcIixbXSxmdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LG4pe3RoaXMucGxhY2Vob2xkZXI9dGhpcy5ub3JtYWxpemVQbGFjZWhvbGRlcihuLmdldChcInBsYWNlaG9sZGVyXCIpKSxlLmNhbGwodGhpcyx0LG4pfXJldHVybiBlLnByb3RvdHlwZS5ub3JtYWxpemVQbGFjZWhvbGRlcj1mdW5jdGlvbihlLHQpe3JldHVybiB0PVwic3RyaW5nXCI9PXR5cGVvZiB0P3tpZDpcIlwiLHRleHQ6dH06dH0sZS5wcm90b3R5cGUuY3JlYXRlUGxhY2Vob2xkZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLnNlbGVjdGlvbkNvbnRhaW5lcigpO24uaHRtbCh0aGlzLmRpc3BsYXkodCkpLG5bMF0uY2xhc3NMaXN0LmFkZChcInNlbGVjdDItc2VsZWN0aW9uX19wbGFjZWhvbGRlclwiKSxuWzBdLmNsYXNzTGlzdC5yZW1vdmUoXCJzZWxlY3QyLXNlbGVjdGlvbl9fY2hvaWNlXCIpO3Q9dC50aXRsZXx8dC50ZXh0fHxuLnRleHQoKTtyZXR1cm4gdGhpcy4kc2VsZWN0aW9uLmZpbmQoXCIuc2VsZWN0Mi1zZWxlY3Rpb25fX3JlbmRlcmVkXCIpLmF0dHIoXCJ0aXRsZVwiLHQpLG59LGUucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihlLHQpe3ZhciBuPTE9PXQubGVuZ3RoJiZ0WzBdLmlkIT10aGlzLnBsYWNlaG9sZGVyLmlkO2lmKDE8dC5sZW5ndGh8fG4pcmV0dXJuIGUuY2FsbCh0aGlzLHQpO3RoaXMuY2xlYXIoKTt0PXRoaXMuY3JlYXRlUGxhY2Vob2xkZXIodGhpcy5wbGFjZWhvbGRlcik7dGhpcy4kc2VsZWN0aW9uLmZpbmQoXCIuc2VsZWN0Mi1zZWxlY3Rpb25fX3JlbmRlcmVkXCIpLmFwcGVuZCh0KX0sZX0pLHUuZGVmaW5lKFwic2VsZWN0Mi9zZWxlY3Rpb24vYWxsb3dDbGVhclwiLFtcImpxdWVyeVwiLFwiLi4va2V5c1wiLFwiLi4vdXRpbHNcIl0sZnVuY3Rpb24oaSxzLGEpe2Z1bmN0aW9uIGUoKXt9cmV0dXJuIGUucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciBzPXRoaXM7ZS5jYWxsKHRoaXMsdCxuKSxudWxsPT10aGlzLnBsYWNlaG9sZGVyJiZ0aGlzLm9wdGlvbnMuZ2V0KFwiZGVidWdcIikmJndpbmRvdy5jb25zb2xlJiZjb25zb2xlLmVycm9yJiZjb25zb2xlLmVycm9yKFwiU2VsZWN0MjogVGhlIGBhbGxvd0NsZWFyYCBvcHRpb24gc2hvdWxkIGJlIHVzZWQgaW4gY29tYmluYXRpb24gd2l0aCB0aGUgYHBsYWNlaG9sZGVyYCBvcHRpb24uXCIpLHRoaXMuJHNlbGVjdGlvbi5vbihcIm1vdXNlZG93blwiLFwiLnNlbGVjdDItc2VsZWN0aW9uX19jbGVhclwiLGZ1bmN0aW9uKGUpe3MuX2hhbmRsZUNsZWFyKGUpfSksdC5vbihcImtleXByZXNzXCIsZnVuY3Rpb24oZSl7cy5faGFuZGxlS2V5Ym9hcmRDbGVhcihlLHQpfSl9LGUucHJvdG90eXBlLl9oYW5kbGVDbGVhcj1mdW5jdGlvbihlLHQpe2lmKCF0aGlzLmlzRGlzYWJsZWQoKSl7dmFyIG49dGhpcy4kc2VsZWN0aW9uLmZpbmQoXCIuc2VsZWN0Mi1zZWxlY3Rpb25fX2NsZWFyXCIpO2lmKDAhPT1uLmxlbmd0aCl7dC5zdG9wUHJvcGFnYXRpb24oKTt2YXIgcz1hLkdldERhdGEoblswXSxcImRhdGFcIiksaT10aGlzLiRlbGVtZW50LnZhbCgpO3RoaXMuJGVsZW1lbnQudmFsKHRoaXMucGxhY2Vob2xkZXIuaWQpO3ZhciByPXtkYXRhOnN9O2lmKHRoaXMudHJpZ2dlcihcImNsZWFyXCIsciksci5wcmV2ZW50ZWQpdGhpcy4kZWxlbWVudC52YWwoaSk7ZWxzZXtmb3IodmFyIG89MDtvPHMubGVuZ3RoO28rKylpZihyPXtkYXRhOnNbb119LHRoaXMudHJpZ2dlcihcInVuc2VsZWN0XCIsciksci5wcmV2ZW50ZWQpcmV0dXJuIHZvaWQgdGhpcy4kZWxlbWVudC52YWwoaSk7dGhpcy4kZWxlbWVudC50cmlnZ2VyKFwiaW5wdXRcIikudHJpZ2dlcihcImNoYW5nZVwiKSx0aGlzLnRyaWdnZXIoXCJ0b2dnbGVcIix7fSl9fX19LGUucHJvdG90eXBlLl9oYW5kbGVLZXlib2FyZENsZWFyPWZ1bmN0aW9uKGUsdCxuKXtuLmlzT3BlbigpfHx0LndoaWNoIT1zLkRFTEVURSYmdC53aGljaCE9cy5CQUNLU1BBQ0V8fHRoaXMuX2hhbmRsZUNsZWFyKHQpfSxlLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oZSx0KXt2YXIgbixzO2UuY2FsbCh0aGlzLHQpLHRoaXMuJHNlbGVjdGlvbi5maW5kKFwiLnNlbGVjdDItc2VsZWN0aW9uX19jbGVhclwiKS5yZW1vdmUoKSx0aGlzLiRzZWxlY3Rpb25bMF0uY2xhc3NMaXN0LnJlbW92ZShcInNlbGVjdDItc2VsZWN0aW9uLS1jbGVhcmFibGVcIiksMDx0aGlzLiRzZWxlY3Rpb24uZmluZChcIi5zZWxlY3QyLXNlbGVjdGlvbl9fcGxhY2Vob2xkZXJcIikubGVuZ3RofHwwPT09dC5sZW5ndGh8fChuPXRoaXMuJHNlbGVjdGlvbi5maW5kKFwiLnNlbGVjdDItc2VsZWN0aW9uX19yZW5kZXJlZFwiKS5hdHRyKFwiaWRcIikscz10aGlzLm9wdGlvbnMuZ2V0KFwidHJhbnNsYXRpb25zXCIpLmdldChcInJlbW92ZUFsbEl0ZW1zXCIpLChlPWkoJzxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwic2VsZWN0Mi1zZWxlY3Rpb25fX2NsZWFyXCIgdGFiaW5kZXg9XCItMVwiPjxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPiZ0aW1lczs8L3NwYW4+PC9idXR0b24+JykpLmF0dHIoXCJ0aXRsZVwiLHMoKSksZS5hdHRyKFwiYXJpYS1sYWJlbFwiLHMoKSksZS5hdHRyKFwiYXJpYS1kZXNjcmliZWRieVwiLG4pLGEuU3RvcmVEYXRhKGVbMF0sXCJkYXRhXCIsdCksdGhpcy4kc2VsZWN0aW9uLnByZXBlbmQoZSksdGhpcy4kc2VsZWN0aW9uWzBdLmNsYXNzTGlzdC5hZGQoXCJzZWxlY3QyLXNlbGVjdGlvbi0tY2xlYXJhYmxlXCIpKX0sZX0pLHUuZGVmaW5lKFwic2VsZWN0Mi9zZWxlY3Rpb24vc2VhcmNoXCIsW1wianF1ZXJ5XCIsXCIuLi91dGlsc1wiLFwiLi4va2V5c1wiXSxmdW5jdGlvbihzLGEsbCl7ZnVuY3Rpb24gZShlLHQsbil7ZS5jYWxsKHRoaXMsdCxuKX1yZXR1cm4gZS5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMub3B0aW9ucy5nZXQoXCJ0cmFuc2xhdGlvbnNcIikuZ2V0KFwic2VhcmNoXCIpLG49cygnPHNwYW4gY2xhc3M9XCJzZWxlY3QyLXNlYXJjaCBzZWxlY3QyLXNlYXJjaC0taW5saW5lXCI+PHRleHRhcmVhIGNsYXNzPVwic2VsZWN0Mi1zZWFyY2hfX2ZpZWxkXCIgdHlwZT1cInNlYXJjaFwiIHRhYmluZGV4PVwiLTFcIiBhdXRvY29ycmVjdD1cIm9mZlwiIGF1dG9jYXBpdGFsaXplPVwibm9uZVwiIHNwZWxsY2hlY2s9XCJmYWxzZVwiIHJvbGU9XCJzZWFyY2hib3hcIiBhcmlhLWF1dG9jb21wbGV0ZT1cImxpc3RcIiA+PC90ZXh0YXJlYT48L3NwYW4+Jyk7dGhpcy4kc2VhcmNoQ29udGFpbmVyPW4sdGhpcy4kc2VhcmNoPW4uZmluZChcInRleHRhcmVhXCIpLHRoaXMuJHNlYXJjaC5wcm9wKFwiYXV0b2NvbXBsZXRlXCIsdGhpcy5vcHRpb25zLmdldChcImF1dG9jb21wbGV0ZVwiKSksdGhpcy4kc2VhcmNoLmF0dHIoXCJhcmlhLWxhYmVsXCIsdCgpKTtlPWUuY2FsbCh0aGlzKTtyZXR1cm4gdGhpcy5fdHJhbnNmZXJUYWJJbmRleCgpLGUuYXBwZW5kKHRoaXMuJHNlYXJjaENvbnRhaW5lciksZX0sZS5wcm90b3R5cGUuYmluZD1mdW5jdGlvbihlLHQsbil7dmFyIHM9dGhpcyxpPXQuaWQrXCItcmVzdWx0c1wiLHI9dC5pZCtcIi1jb250YWluZXJcIjtlLmNhbGwodGhpcyx0LG4pLHMuJHNlYXJjaC5hdHRyKFwiYXJpYS1kZXNjcmliZWRieVwiLHIpLHQub24oXCJvcGVuXCIsZnVuY3Rpb24oKXtzLiRzZWFyY2guYXR0cihcImFyaWEtY29udHJvbHNcIixpKSxzLiRzZWFyY2gudHJpZ2dlcihcImZvY3VzXCIpfSksdC5vbihcImNsb3NlXCIsZnVuY3Rpb24oKXtzLiRzZWFyY2gudmFsKFwiXCIpLHMucmVzaXplU2VhcmNoKCkscy4kc2VhcmNoLnJlbW92ZUF0dHIoXCJhcmlhLWNvbnRyb2xzXCIpLHMuJHNlYXJjaC5yZW1vdmVBdHRyKFwiYXJpYS1hY3RpdmVkZXNjZW5kYW50XCIpLHMuJHNlYXJjaC50cmlnZ2VyKFwiZm9jdXNcIil9KSx0Lm9uKFwiZW5hYmxlXCIsZnVuY3Rpb24oKXtzLiRzZWFyY2gucHJvcChcImRpc2FibGVkXCIsITEpLHMuX3RyYW5zZmVyVGFiSW5kZXgoKX0pLHQub24oXCJkaXNhYmxlXCIsZnVuY3Rpb24oKXtzLiRzZWFyY2gucHJvcChcImRpc2FibGVkXCIsITApfSksdC5vbihcImZvY3VzXCIsZnVuY3Rpb24oZSl7cy4kc2VhcmNoLnRyaWdnZXIoXCJmb2N1c1wiKX0pLHQub24oXCJyZXN1bHRzOmZvY3VzXCIsZnVuY3Rpb24oZSl7ZS5kYXRhLl9yZXN1bHRJZD9zLiRzZWFyY2guYXR0cihcImFyaWEtYWN0aXZlZGVzY2VuZGFudFwiLGUuZGF0YS5fcmVzdWx0SWQpOnMuJHNlYXJjaC5yZW1vdmVBdHRyKFwiYXJpYS1hY3RpdmVkZXNjZW5kYW50XCIpfSksdGhpcy4kc2VsZWN0aW9uLm9uKFwiZm9jdXNpblwiLFwiLnNlbGVjdDItc2VhcmNoLS1pbmxpbmVcIixmdW5jdGlvbihlKXtzLnRyaWdnZXIoXCJmb2N1c1wiLGUpfSksdGhpcy4kc2VsZWN0aW9uLm9uKFwiZm9jdXNvdXRcIixcIi5zZWxlY3QyLXNlYXJjaC0taW5saW5lXCIsZnVuY3Rpb24oZSl7cy5faGFuZGxlQmx1cihlKX0pLHRoaXMuJHNlbGVjdGlvbi5vbihcImtleWRvd25cIixcIi5zZWxlY3QyLXNlYXJjaC0taW5saW5lXCIsZnVuY3Rpb24oZSl7dmFyIHQ7ZS5zdG9wUHJvcGFnYXRpb24oKSxzLnRyaWdnZXIoXCJrZXlwcmVzc1wiLGUpLHMuX2tleVVwUHJldmVudGVkPWUuaXNEZWZhdWx0UHJldmVudGVkKCksZS53aGljaCE9PWwuQkFDS1NQQUNFfHxcIlwiIT09cy4kc2VhcmNoLnZhbCgpfHwwPCh0PXMuJHNlbGVjdGlvbi5maW5kKFwiLnNlbGVjdDItc2VsZWN0aW9uX19jaG9pY2VcIikubGFzdCgpKS5sZW5ndGgmJih0PWEuR2V0RGF0YSh0WzBdLFwiZGF0YVwiKSxzLnNlYXJjaFJlbW92ZUNob2ljZSh0KSxlLnByZXZlbnREZWZhdWx0KCkpfSksdGhpcy4kc2VsZWN0aW9uLm9uKFwiY2xpY2tcIixcIi5zZWxlY3QyLXNlYXJjaC0taW5saW5lXCIsZnVuY3Rpb24oZSl7cy4kc2VhcmNoLnZhbCgpJiZlLnN0b3BQcm9wYWdhdGlvbigpfSk7dmFyIHQ9ZG9jdW1lbnQuZG9jdW1lbnRNb2RlLG89dCYmdDw9MTE7dGhpcy4kc2VsZWN0aW9uLm9uKFwiaW5wdXQuc2VhcmNoY2hlY2tcIixcIi5zZWxlY3QyLXNlYXJjaC0taW5saW5lXCIsZnVuY3Rpb24oZSl7bz9zLiRzZWxlY3Rpb24ub2ZmKFwiaW5wdXQuc2VhcmNoIGlucHV0LnNlYXJjaGNoZWNrXCIpOnMuJHNlbGVjdGlvbi5vZmYoXCJrZXl1cC5zZWFyY2hcIil9KSx0aGlzLiRzZWxlY3Rpb24ub24oXCJrZXl1cC5zZWFyY2ggaW5wdXQuc2VhcmNoXCIsXCIuc2VsZWN0Mi1zZWFyY2gtLWlubGluZVwiLGZ1bmN0aW9uKGUpe3ZhciB0O28mJlwiaW5wdXRcIj09PWUudHlwZT9zLiRzZWxlY3Rpb24ub2ZmKFwiaW5wdXQuc2VhcmNoIGlucHV0LnNlYXJjaGNoZWNrXCIpOih0PWUud2hpY2gpIT1sLlNISUZUJiZ0IT1sLkNUUkwmJnQhPWwuQUxUJiZ0IT1sLlRBQiYmcy5oYW5kbGVTZWFyY2goZSl9KX0sZS5wcm90b3R5cGUuX3RyYW5zZmVyVGFiSW5kZXg9ZnVuY3Rpb24oZSl7dGhpcy4kc2VhcmNoLmF0dHIoXCJ0YWJpbmRleFwiLHRoaXMuJHNlbGVjdGlvbi5hdHRyKFwidGFiaW5kZXhcIikpLHRoaXMuJHNlbGVjdGlvbi5hdHRyKFwidGFiaW5kZXhcIixcIi0xXCIpfSxlLnByb3RvdHlwZS5jcmVhdGVQbGFjZWhvbGRlcj1mdW5jdGlvbihlLHQpe3RoaXMuJHNlYXJjaC5hdHRyKFwicGxhY2Vob2xkZXJcIix0LnRleHQpfSxlLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLiRzZWFyY2hbMF09PWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7dGhpcy4kc2VhcmNoLmF0dHIoXCJwbGFjZWhvbGRlclwiLFwiXCIpLGUuY2FsbCh0aGlzLHQpLHRoaXMucmVzaXplU2VhcmNoKCksbiYmdGhpcy4kc2VhcmNoLnRyaWdnZXIoXCJmb2N1c1wiKX0sZS5wcm90b3R5cGUuaGFuZGxlU2VhcmNoPWZ1bmN0aW9uKCl7dmFyIGU7dGhpcy5yZXNpemVTZWFyY2goKSx0aGlzLl9rZXlVcFByZXZlbnRlZHx8KGU9dGhpcy4kc2VhcmNoLnZhbCgpLHRoaXMudHJpZ2dlcihcInF1ZXJ5XCIse3Rlcm06ZX0pKSx0aGlzLl9rZXlVcFByZXZlbnRlZD0hMX0sZS5wcm90b3R5cGUuc2VhcmNoUmVtb3ZlQ2hvaWNlPWZ1bmN0aW9uKGUsdCl7dGhpcy50cmlnZ2VyKFwidW5zZWxlY3RcIix7ZGF0YTp0fSksdGhpcy4kc2VhcmNoLnZhbCh0LnRleHQpLHRoaXMuaGFuZGxlU2VhcmNoKCl9LGUucHJvdG90eXBlLnJlc2l6ZVNlYXJjaD1mdW5jdGlvbigpe3RoaXMuJHNlYXJjaC5jc3MoXCJ3aWR0aFwiLFwiMjVweFwiKTt2YXIgZT1cIjEwMCVcIjtcIlwiPT09dGhpcy4kc2VhcmNoLmF0dHIoXCJwbGFjZWhvbGRlclwiKSYmKGU9Ljc1Kih0aGlzLiRzZWFyY2gudmFsKCkubGVuZ3RoKzEpK1wiZW1cIiksdGhpcy4kc2VhcmNoLmNzcyhcIndpZHRoXCIsZSl9LGV9KSx1LmRlZmluZShcInNlbGVjdDIvc2VsZWN0aW9uL3NlbGVjdGlvbkNzc1wiLFtcIi4uL3V0aWxzXCJdLGZ1bmN0aW9uKG4pe2Z1bmN0aW9uIGUoKXt9cmV0dXJuIGUucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNhbGwodGhpcyksZT10aGlzLm9wdGlvbnMuZ2V0KFwic2VsZWN0aW9uQ3NzQ2xhc3NcIil8fFwiXCI7cmV0dXJuLTEhPT1lLmluZGV4T2YoXCI6YWxsOlwiKSYmKGU9ZS5yZXBsYWNlKFwiOmFsbDpcIixcIlwiKSxuLmNvcHlOb25JbnRlcm5hbENzc0NsYXNzZXModFswXSx0aGlzLiRlbGVtZW50WzBdKSksdC5hZGRDbGFzcyhlKSx0fSxlfSksdS5kZWZpbmUoXCJzZWxlY3QyL3NlbGVjdGlvbi9ldmVudFJlbGF5XCIsW1wianF1ZXJ5XCJdLGZ1bmN0aW9uKG8pe2Z1bmN0aW9uIGUoKXt9cmV0dXJuIGUucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciBzPXRoaXMsaT1bXCJvcGVuXCIsXCJvcGVuaW5nXCIsXCJjbG9zZVwiLFwiY2xvc2luZ1wiLFwic2VsZWN0XCIsXCJzZWxlY3RpbmdcIixcInVuc2VsZWN0XCIsXCJ1bnNlbGVjdGluZ1wiLFwiY2xlYXJcIixcImNsZWFyaW5nXCJdLHI9W1wib3BlbmluZ1wiLFwiY2xvc2luZ1wiLFwic2VsZWN0aW5nXCIsXCJ1bnNlbGVjdGluZ1wiLFwiY2xlYXJpbmdcIl07ZS5jYWxsKHRoaXMsdCxuKSx0Lm9uKFwiKlwiLGZ1bmN0aW9uKGUsdCl7dmFyIG47LTEhPT1pLmluZGV4T2YoZSkmJih0PXR8fHt9LG49by5FdmVudChcInNlbGVjdDI6XCIrZSx7cGFyYW1zOnR9KSxzLiRlbGVtZW50LnRyaWdnZXIobiksLTEhPT1yLmluZGV4T2YoZSkmJih0LnByZXZlbnRlZD1uLmlzRGVmYXVsdFByZXZlbnRlZCgpKSl9KX0sZX0pLHUuZGVmaW5lKFwic2VsZWN0Mi90cmFuc2xhdGlvblwiLFtcImpxdWVyeVwiLFwicmVxdWlyZVwiXSxmdW5jdGlvbih0LG4pe2Z1bmN0aW9uIHMoZSl7dGhpcy5kaWN0PWV8fHt9fXJldHVybiBzLnByb3RvdHlwZS5hbGw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kaWN0fSxzLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZGljdFtlXX0scy5wcm90b3R5cGUuZXh0ZW5kPWZ1bmN0aW9uKGUpe3RoaXMuZGljdD10LmV4dGVuZCh7fSxlLmFsbCgpLHRoaXMuZGljdCl9LHMuX2NhY2hlPXt9LHMubG9hZFBhdGg9ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIGUgaW4gcy5fY2FjaGV8fCh0PW4oZSkscy5fY2FjaGVbZV09dCksbmV3IHMocy5fY2FjaGVbZV0pfSxzfSksdS5kZWZpbmUoXCJzZWxlY3QyL2RpYWNyaXRpY3NcIixbXSxmdW5jdGlvbigpe3JldHVybntcIuKStlwiOlwiQVwiLFwi77yhXCI6XCJBXCIsXCLDgFwiOlwiQVwiLFwiw4FcIjpcIkFcIixcIsOCXCI6XCJBXCIsXCLhuqZcIjpcIkFcIixcIuG6pFwiOlwiQVwiLFwi4bqqXCI6XCJBXCIsXCLhuqhcIjpcIkFcIixcIsODXCI6XCJBXCIsXCLEgFwiOlwiQVwiLFwixIJcIjpcIkFcIixcIuG6sFwiOlwiQVwiLFwi4bquXCI6XCJBXCIsXCLhurRcIjpcIkFcIixcIuG6slwiOlwiQVwiLFwiyKZcIjpcIkFcIixcIsegXCI6XCJBXCIsXCLDhFwiOlwiQVwiLFwix55cIjpcIkFcIixcIuG6olwiOlwiQVwiLFwiw4VcIjpcIkFcIixcIse6XCI6XCJBXCIsXCLHjVwiOlwiQVwiLFwiyIBcIjpcIkFcIixcIsiCXCI6XCJBXCIsXCLhuqBcIjpcIkFcIixcIuG6rFwiOlwiQVwiLFwi4bq2XCI6XCJBXCIsXCLhuIBcIjpcIkFcIixcIsSEXCI6XCJBXCIsXCLIulwiOlwiQVwiLFwi4rGvXCI6XCJBXCIsXCLqnLJcIjpcIkFBXCIsXCLDhlwiOlwiQUVcIixcIse8XCI6XCJBRVwiLFwix6JcIjpcIkFFXCIsXCLqnLRcIjpcIkFPXCIsXCLqnLZcIjpcIkFVXCIsXCLqnLhcIjpcIkFWXCIsXCLqnLpcIjpcIkFWXCIsXCLqnLxcIjpcIkFZXCIsXCLikrdcIjpcIkJcIixcIu+8olwiOlwiQlwiLFwi4biCXCI6XCJCXCIsXCLhuIRcIjpcIkJcIixcIuG4hlwiOlwiQlwiLFwiyYNcIjpcIkJcIixcIsaCXCI6XCJCXCIsXCLGgVwiOlwiQlwiLFwi4pK4XCI6XCJDXCIsXCLvvKNcIjpcIkNcIixcIsSGXCI6XCJDXCIsXCLEiFwiOlwiQ1wiLFwixIpcIjpcIkNcIixcIsSMXCI6XCJDXCIsXCLDh1wiOlwiQ1wiLFwi4biIXCI6XCJDXCIsXCLGh1wiOlwiQ1wiLFwiyLtcIjpcIkNcIixcIuqcvlwiOlwiQ1wiLFwi4pK5XCI6XCJEXCIsXCLvvKRcIjpcIkRcIixcIuG4ilwiOlwiRFwiLFwixI5cIjpcIkRcIixcIuG4jFwiOlwiRFwiLFwi4biQXCI6XCJEXCIsXCLhuJJcIjpcIkRcIixcIuG4jlwiOlwiRFwiLFwixJBcIjpcIkRcIixcIsaLXCI6XCJEXCIsXCLGilwiOlwiRFwiLFwixolcIjpcIkRcIixcIuqduVwiOlwiRFwiLFwix7FcIjpcIkRaXCIsXCLHhFwiOlwiRFpcIixcIseyXCI6XCJEelwiLFwix4VcIjpcIkR6XCIsXCLikrpcIjpcIkVcIixcIu+8pVwiOlwiRVwiLFwiw4hcIjpcIkVcIixcIsOJXCI6XCJFXCIsXCLDilwiOlwiRVwiLFwi4buAXCI6XCJFXCIsXCLhur5cIjpcIkVcIixcIuG7hFwiOlwiRVwiLFwi4buCXCI6XCJFXCIsXCLhurxcIjpcIkVcIixcIsSSXCI6XCJFXCIsXCLhuJRcIjpcIkVcIixcIuG4llwiOlwiRVwiLFwixJRcIjpcIkVcIixcIsSWXCI6XCJFXCIsXCLDi1wiOlwiRVwiLFwi4bq6XCI6XCJFXCIsXCLEmlwiOlwiRVwiLFwiyIRcIjpcIkVcIixcIsiGXCI6XCJFXCIsXCLhurhcIjpcIkVcIixcIuG7hlwiOlwiRVwiLFwiyKhcIjpcIkVcIixcIuG4nFwiOlwiRVwiLFwixJhcIjpcIkVcIixcIuG4mFwiOlwiRVwiLFwi4biaXCI6XCJFXCIsXCLGkFwiOlwiRVwiLFwixo5cIjpcIkVcIixcIuKSu1wiOlwiRlwiLFwi77ymXCI6XCJGXCIsXCLhuJ5cIjpcIkZcIixcIsaRXCI6XCJGXCIsXCLqnbtcIjpcIkZcIixcIuKSvFwiOlwiR1wiLFwi77ynXCI6XCJHXCIsXCLHtFwiOlwiR1wiLFwixJxcIjpcIkdcIixcIuG4oFwiOlwiR1wiLFwixJ5cIjpcIkdcIixcIsSgXCI6XCJHXCIsXCLHplwiOlwiR1wiLFwixKJcIjpcIkdcIixcIsekXCI6XCJHXCIsXCLGk1wiOlwiR1wiLFwi6p6gXCI6XCJHXCIsXCLqnb1cIjpcIkdcIixcIuqdvlwiOlwiR1wiLFwi4pK9XCI6XCJIXCIsXCLvvKhcIjpcIkhcIixcIsSkXCI6XCJIXCIsXCLhuKJcIjpcIkhcIixcIuG4plwiOlwiSFwiLFwiyJ5cIjpcIkhcIixcIuG4pFwiOlwiSFwiLFwi4bioXCI6XCJIXCIsXCLhuKpcIjpcIkhcIixcIsSmXCI6XCJIXCIsXCLisadcIjpcIkhcIixcIuKxtVwiOlwiSFwiLFwi6p6NXCI6XCJIXCIsXCLikr5cIjpcIklcIixcIu+8qVwiOlwiSVwiLFwiw4xcIjpcIklcIixcIsONXCI6XCJJXCIsXCLDjlwiOlwiSVwiLFwixKhcIjpcIklcIixcIsSqXCI6XCJJXCIsXCLErFwiOlwiSVwiLFwixLBcIjpcIklcIixcIsOPXCI6XCJJXCIsXCLhuK5cIjpcIklcIixcIuG7iFwiOlwiSVwiLFwix49cIjpcIklcIixcIsiIXCI6XCJJXCIsXCLIilwiOlwiSVwiLFwi4buKXCI6XCJJXCIsXCLErlwiOlwiSVwiLFwi4bisXCI6XCJJXCIsXCLGl1wiOlwiSVwiLFwi4pK/XCI6XCJKXCIsXCLvvKpcIjpcIkpcIixcIsS0XCI6XCJKXCIsXCLJiFwiOlwiSlwiLFwi4pOAXCI6XCJLXCIsXCLvvKtcIjpcIktcIixcIuG4sFwiOlwiS1wiLFwix6hcIjpcIktcIixcIuG4slwiOlwiS1wiLFwixLZcIjpcIktcIixcIuG4tFwiOlwiS1wiLFwixphcIjpcIktcIixcIuKxqVwiOlwiS1wiLFwi6p2AXCI6XCJLXCIsXCLqnYJcIjpcIktcIixcIuqdhFwiOlwiS1wiLFwi6p6iXCI6XCJLXCIsXCLik4FcIjpcIkxcIixcIu+8rFwiOlwiTFwiLFwixL9cIjpcIkxcIixcIsS5XCI6XCJMXCIsXCLEvVwiOlwiTFwiLFwi4bi2XCI6XCJMXCIsXCLhuLhcIjpcIkxcIixcIsS7XCI6XCJMXCIsXCLhuLxcIjpcIkxcIixcIuG4ulwiOlwiTFwiLFwixYFcIjpcIkxcIixcIsi9XCI6XCJMXCIsXCLisaJcIjpcIkxcIixcIuKxoFwiOlwiTFwiLFwi6p2IXCI6XCJMXCIsXCLqnYZcIjpcIkxcIixcIuqegFwiOlwiTFwiLFwix4dcIjpcIkxKXCIsXCLHiFwiOlwiTGpcIixcIuKTglwiOlwiTVwiLFwi77ytXCI6XCJNXCIsXCLhuL5cIjpcIk1cIixcIuG5gFwiOlwiTVwiLFwi4bmCXCI6XCJNXCIsXCLisa5cIjpcIk1cIixcIsacXCI6XCJNXCIsXCLik4NcIjpcIk5cIixcIu+8rlwiOlwiTlwiLFwix7hcIjpcIk5cIixcIsWDXCI6XCJOXCIsXCLDkVwiOlwiTlwiLFwi4bmEXCI6XCJOXCIsXCLFh1wiOlwiTlwiLFwi4bmGXCI6XCJOXCIsXCLFhVwiOlwiTlwiLFwi4bmKXCI6XCJOXCIsXCLhuYhcIjpcIk5cIixcIsigXCI6XCJOXCIsXCLGnVwiOlwiTlwiLFwi6p6QXCI6XCJOXCIsXCLqnqRcIjpcIk5cIixcIseKXCI6XCJOSlwiLFwix4tcIjpcIk5qXCIsXCLik4RcIjpcIk9cIixcIu+8r1wiOlwiT1wiLFwiw5JcIjpcIk9cIixcIsOTXCI6XCJPXCIsXCLDlFwiOlwiT1wiLFwi4buSXCI6XCJPXCIsXCLhu5BcIjpcIk9cIixcIuG7llwiOlwiT1wiLFwi4buUXCI6XCJPXCIsXCLDlVwiOlwiT1wiLFwi4bmMXCI6XCJPXCIsXCLIrFwiOlwiT1wiLFwi4bmOXCI6XCJPXCIsXCLFjFwiOlwiT1wiLFwi4bmQXCI6XCJPXCIsXCLhuZJcIjpcIk9cIixcIsWOXCI6XCJPXCIsXCLIrlwiOlwiT1wiLFwiyLBcIjpcIk9cIixcIsOWXCI6XCJPXCIsXCLIqlwiOlwiT1wiLFwi4buOXCI6XCJPXCIsXCLFkFwiOlwiT1wiLFwix5FcIjpcIk9cIixcIsiMXCI6XCJPXCIsXCLIjlwiOlwiT1wiLFwixqBcIjpcIk9cIixcIuG7nFwiOlwiT1wiLFwi4buaXCI6XCJPXCIsXCLhu6BcIjpcIk9cIixcIuG7nlwiOlwiT1wiLFwi4buiXCI6XCJPXCIsXCLhu4xcIjpcIk9cIixcIuG7mFwiOlwiT1wiLFwix6pcIjpcIk9cIixcIsesXCI6XCJPXCIsXCLDmFwiOlwiT1wiLFwix75cIjpcIk9cIixcIsaGXCI6XCJPXCIsXCLGn1wiOlwiT1wiLFwi6p2KXCI6XCJPXCIsXCLqnYxcIjpcIk9cIixcIsWSXCI6XCJPRVwiLFwixqJcIjpcIk9JXCIsXCLqnY5cIjpcIk9PXCIsXCLIolwiOlwiT1VcIixcIuKThVwiOlwiUFwiLFwi77ywXCI6XCJQXCIsXCLhuZRcIjpcIlBcIixcIuG5llwiOlwiUFwiLFwixqRcIjpcIlBcIixcIuKxo1wiOlwiUFwiLFwi6p2QXCI6XCJQXCIsXCLqnZJcIjpcIlBcIixcIuqdlFwiOlwiUFwiLFwi4pOGXCI6XCJRXCIsXCLvvLFcIjpcIlFcIixcIuqdllwiOlwiUVwiLFwi6p2YXCI6XCJRXCIsXCLJilwiOlwiUVwiLFwi4pOHXCI6XCJSXCIsXCLvvLJcIjpcIlJcIixcIsWUXCI6XCJSXCIsXCLhuZhcIjpcIlJcIixcIsWYXCI6XCJSXCIsXCLIkFwiOlwiUlwiLFwiyJJcIjpcIlJcIixcIuG5mlwiOlwiUlwiLFwi4bmcXCI6XCJSXCIsXCLFllwiOlwiUlwiLFwi4bmeXCI6XCJSXCIsXCLJjFwiOlwiUlwiLFwi4rGkXCI6XCJSXCIsXCLqnZpcIjpcIlJcIixcIuqeplwiOlwiUlwiLFwi6p6CXCI6XCJSXCIsXCLik4hcIjpcIlNcIixcIu+8s1wiOlwiU1wiLFwi4bqeXCI6XCJTXCIsXCLFmlwiOlwiU1wiLFwi4bmkXCI6XCJTXCIsXCLFnFwiOlwiU1wiLFwi4bmgXCI6XCJTXCIsXCLFoFwiOlwiU1wiLFwi4bmmXCI6XCJTXCIsXCLhuaJcIjpcIlNcIixcIuG5qFwiOlwiU1wiLFwiyJhcIjpcIlNcIixcIsWeXCI6XCJTXCIsXCLisb5cIjpcIlNcIixcIuqeqFwiOlwiU1wiLFwi6p6EXCI6XCJTXCIsXCLik4lcIjpcIlRcIixcIu+8tFwiOlwiVFwiLFwi4bmqXCI6XCJUXCIsXCLFpFwiOlwiVFwiLFwi4bmsXCI6XCJUXCIsXCLImlwiOlwiVFwiLFwixaJcIjpcIlRcIixcIuG5sFwiOlwiVFwiLFwi4bmuXCI6XCJUXCIsXCLFplwiOlwiVFwiLFwixqxcIjpcIlRcIixcIsauXCI6XCJUXCIsXCLIvlwiOlwiVFwiLFwi6p6GXCI6XCJUXCIsXCLqnKhcIjpcIlRaXCIsXCLik4pcIjpcIlVcIixcIu+8tVwiOlwiVVwiLFwiw5lcIjpcIlVcIixcIsOaXCI6XCJVXCIsXCLDm1wiOlwiVVwiLFwixahcIjpcIlVcIixcIuG5uFwiOlwiVVwiLFwixapcIjpcIlVcIixcIuG5ulwiOlwiVVwiLFwixaxcIjpcIlVcIixcIsOcXCI6XCJVXCIsXCLHm1wiOlwiVVwiLFwix5dcIjpcIlVcIixcIseVXCI6XCJVXCIsXCLHmVwiOlwiVVwiLFwi4bumXCI6XCJVXCIsXCLFrlwiOlwiVVwiLFwixbBcIjpcIlVcIixcIseTXCI6XCJVXCIsXCLIlFwiOlwiVVwiLFwiyJZcIjpcIlVcIixcIsavXCI6XCJVXCIsXCLhu6pcIjpcIlVcIixcIuG7qFwiOlwiVVwiLFwi4buuXCI6XCJVXCIsXCLhu6xcIjpcIlVcIixcIuG7sFwiOlwiVVwiLFwi4bukXCI6XCJVXCIsXCLhubJcIjpcIlVcIixcIsWyXCI6XCJVXCIsXCLhubZcIjpcIlVcIixcIuG5tFwiOlwiVVwiLFwiyYRcIjpcIlVcIixcIuKTi1wiOlwiVlwiLFwi77y2XCI6XCJWXCIsXCLhubxcIjpcIlZcIixcIuG5vlwiOlwiVlwiLFwixrJcIjpcIlZcIixcIuqdnlwiOlwiVlwiLFwiyYVcIjpcIlZcIixcIuqdoFwiOlwiVllcIixcIuKTjFwiOlwiV1wiLFwi77y3XCI6XCJXXCIsXCLhuoBcIjpcIldcIixcIuG6glwiOlwiV1wiLFwixbRcIjpcIldcIixcIuG6hlwiOlwiV1wiLFwi4bqEXCI6XCJXXCIsXCLhuohcIjpcIldcIixcIuKxslwiOlwiV1wiLFwi4pONXCI6XCJYXCIsXCLvvLhcIjpcIlhcIixcIuG6ilwiOlwiWFwiLFwi4bqMXCI6XCJYXCIsXCLik45cIjpcIllcIixcIu+8uVwiOlwiWVwiLFwi4buyXCI6XCJZXCIsXCLDnVwiOlwiWVwiLFwixbZcIjpcIllcIixcIuG7uFwiOlwiWVwiLFwiyLJcIjpcIllcIixcIuG6jlwiOlwiWVwiLFwixbhcIjpcIllcIixcIuG7tlwiOlwiWVwiLFwi4bu0XCI6XCJZXCIsXCLGs1wiOlwiWVwiLFwiyY5cIjpcIllcIixcIuG7vlwiOlwiWVwiLFwi4pOPXCI6XCJaXCIsXCLvvLpcIjpcIlpcIixcIsW5XCI6XCJaXCIsXCLhupBcIjpcIlpcIixcIsW7XCI6XCJaXCIsXCLFvVwiOlwiWlwiLFwi4bqSXCI6XCJaXCIsXCLhupRcIjpcIlpcIixcIsa1XCI6XCJaXCIsXCLIpFwiOlwiWlwiLFwi4rG/XCI6XCJaXCIsXCLisatcIjpcIlpcIixcIuqdolwiOlwiWlwiLFwi4pOQXCI6XCJhXCIsXCLvvYFcIjpcImFcIixcIuG6mlwiOlwiYVwiLFwiw6BcIjpcImFcIixcIsOhXCI6XCJhXCIsXCLDolwiOlwiYVwiLFwi4bqnXCI6XCJhXCIsXCLhuqVcIjpcImFcIixcIuG6q1wiOlwiYVwiLFwi4bqpXCI6XCJhXCIsXCLDo1wiOlwiYVwiLFwixIFcIjpcImFcIixcIsSDXCI6XCJhXCIsXCLhurFcIjpcImFcIixcIuG6r1wiOlwiYVwiLFwi4bq1XCI6XCJhXCIsXCLhurNcIjpcImFcIixcIsinXCI6XCJhXCIsXCLHoVwiOlwiYVwiLFwiw6RcIjpcImFcIixcIsefXCI6XCJhXCIsXCLhuqNcIjpcImFcIixcIsOlXCI6XCJhXCIsXCLHu1wiOlwiYVwiLFwix45cIjpcImFcIixcIsiBXCI6XCJhXCIsXCLIg1wiOlwiYVwiLFwi4bqhXCI6XCJhXCIsXCLhuq1cIjpcImFcIixcIuG6t1wiOlwiYVwiLFwi4biBXCI6XCJhXCIsXCLEhVwiOlwiYVwiLFwi4rGlXCI6XCJhXCIsXCLJkFwiOlwiYVwiLFwi6pyzXCI6XCJhYVwiLFwiw6ZcIjpcImFlXCIsXCLHvVwiOlwiYWVcIixcIsejXCI6XCJhZVwiLFwi6py1XCI6XCJhb1wiLFwi6py3XCI6XCJhdVwiLFwi6py5XCI6XCJhdlwiLFwi6py7XCI6XCJhdlwiLFwi6py9XCI6XCJheVwiLFwi4pORXCI6XCJiXCIsXCLvvYJcIjpcImJcIixcIuG4g1wiOlwiYlwiLFwi4biFXCI6XCJiXCIsXCLhuIdcIjpcImJcIixcIsaAXCI6XCJiXCIsXCLGg1wiOlwiYlwiLFwiyZNcIjpcImJcIixcIuKTklwiOlwiY1wiLFwi772DXCI6XCJjXCIsXCLEh1wiOlwiY1wiLFwixIlcIjpcImNcIixcIsSLXCI6XCJjXCIsXCLEjVwiOlwiY1wiLFwiw6dcIjpcImNcIixcIuG4iVwiOlwiY1wiLFwixohcIjpcImNcIixcIsi8XCI6XCJjXCIsXCLqnL9cIjpcImNcIixcIuKGhFwiOlwiY1wiLFwi4pOTXCI6XCJkXCIsXCLvvYRcIjpcImRcIixcIuG4i1wiOlwiZFwiLFwixI9cIjpcImRcIixcIuG4jVwiOlwiZFwiLFwi4biRXCI6XCJkXCIsXCLhuJNcIjpcImRcIixcIuG4j1wiOlwiZFwiLFwixJFcIjpcImRcIixcIsaMXCI6XCJkXCIsXCLJllwiOlwiZFwiLFwiyZdcIjpcImRcIixcIuqdulwiOlwiZFwiLFwix7NcIjpcImR6XCIsXCLHhlwiOlwiZHpcIixcIuKTlFwiOlwiZVwiLFwi772FXCI6XCJlXCIsXCLDqFwiOlwiZVwiLFwiw6lcIjpcImVcIixcIsOqXCI6XCJlXCIsXCLhu4FcIjpcImVcIixcIuG6v1wiOlwiZVwiLFwi4buFXCI6XCJlXCIsXCLhu4NcIjpcImVcIixcIuG6vVwiOlwiZVwiLFwixJNcIjpcImVcIixcIuG4lVwiOlwiZVwiLFwi4biXXCI6XCJlXCIsXCLElVwiOlwiZVwiLFwixJdcIjpcImVcIixcIsOrXCI6XCJlXCIsXCLhurtcIjpcImVcIixcIsSbXCI6XCJlXCIsXCLIhVwiOlwiZVwiLFwiyIdcIjpcImVcIixcIuG6uVwiOlwiZVwiLFwi4buHXCI6XCJlXCIsXCLIqVwiOlwiZVwiLFwi4bidXCI6XCJlXCIsXCLEmVwiOlwiZVwiLFwi4biZXCI6XCJlXCIsXCLhuJtcIjpcImVcIixcIsmHXCI6XCJlXCIsXCLJm1wiOlwiZVwiLFwix51cIjpcImVcIixcIuKTlVwiOlwiZlwiLFwi772GXCI6XCJmXCIsXCLhuJ9cIjpcImZcIixcIsaSXCI6XCJmXCIsXCLqnbxcIjpcImZcIixcIuKTllwiOlwiZ1wiLFwi772HXCI6XCJnXCIsXCLHtVwiOlwiZ1wiLFwixJ1cIjpcImdcIixcIuG4oVwiOlwiZ1wiLFwixJ9cIjpcImdcIixcIsShXCI6XCJnXCIsXCLHp1wiOlwiZ1wiLFwixKNcIjpcImdcIixcIselXCI6XCJnXCIsXCLJoFwiOlwiZ1wiLFwi6p6hXCI6XCJnXCIsXCLhtblcIjpcImdcIixcIuqdv1wiOlwiZ1wiLFwi4pOXXCI6XCJoXCIsXCLvvYhcIjpcImhcIixcIsSlXCI6XCJoXCIsXCLhuKNcIjpcImhcIixcIuG4p1wiOlwiaFwiLFwiyJ9cIjpcImhcIixcIuG4pVwiOlwiaFwiLFwi4bipXCI6XCJoXCIsXCLhuKtcIjpcImhcIixcIuG6llwiOlwiaFwiLFwixKdcIjpcImhcIixcIuKxqFwiOlwiaFwiLFwi4rG2XCI6XCJoXCIsXCLJpVwiOlwiaFwiLFwixpVcIjpcImh2XCIsXCLik5hcIjpcImlcIixcIu+9iVwiOlwiaVwiLFwiw6xcIjpcImlcIixcIsOtXCI6XCJpXCIsXCLDrlwiOlwiaVwiLFwixKlcIjpcImlcIixcIsSrXCI6XCJpXCIsXCLErVwiOlwiaVwiLFwiw69cIjpcImlcIixcIuG4r1wiOlwiaVwiLFwi4buJXCI6XCJpXCIsXCLHkFwiOlwiaVwiLFwiyIlcIjpcImlcIixcIsiLXCI6XCJpXCIsXCLhu4tcIjpcImlcIixcIsSvXCI6XCJpXCIsXCLhuK1cIjpcImlcIixcIsmoXCI6XCJpXCIsXCLEsVwiOlwiaVwiLFwi4pOZXCI6XCJqXCIsXCLvvYpcIjpcImpcIixcIsS1XCI6XCJqXCIsXCLHsFwiOlwialwiLFwiyYlcIjpcImpcIixcIuKTmlwiOlwia1wiLFwi772LXCI6XCJrXCIsXCLhuLFcIjpcImtcIixcIsepXCI6XCJrXCIsXCLhuLNcIjpcImtcIixcIsS3XCI6XCJrXCIsXCLhuLVcIjpcImtcIixcIsaZXCI6XCJrXCIsXCLisapcIjpcImtcIixcIuqdgVwiOlwia1wiLFwi6p2DXCI6XCJrXCIsXCLqnYVcIjpcImtcIixcIuqeo1wiOlwia1wiLFwi4pObXCI6XCJsXCIsXCLvvYxcIjpcImxcIixcIsWAXCI6XCJsXCIsXCLEulwiOlwibFwiLFwixL5cIjpcImxcIixcIuG4t1wiOlwibFwiLFwi4bi5XCI6XCJsXCIsXCLEvFwiOlwibFwiLFwi4bi9XCI6XCJsXCIsXCLhuLtcIjpcImxcIixcIsW/XCI6XCJsXCIsXCLFglwiOlwibFwiLFwixppcIjpcImxcIixcIsmrXCI6XCJsXCIsXCLisaFcIjpcImxcIixcIuqdiVwiOlwibFwiLFwi6p6BXCI6XCJsXCIsXCLqnYdcIjpcImxcIixcIseJXCI6XCJsalwiLFwi4pOcXCI6XCJtXCIsXCLvvY1cIjpcIm1cIixcIuG4v1wiOlwibVwiLFwi4bmBXCI6XCJtXCIsXCLhuYNcIjpcIm1cIixcIsmxXCI6XCJtXCIsXCLJr1wiOlwibVwiLFwi4pOdXCI6XCJuXCIsXCLvvY5cIjpcIm5cIixcIse5XCI6XCJuXCIsXCLFhFwiOlwiblwiLFwiw7FcIjpcIm5cIixcIuG5hVwiOlwiblwiLFwixYhcIjpcIm5cIixcIuG5h1wiOlwiblwiLFwixYZcIjpcIm5cIixcIuG5i1wiOlwiblwiLFwi4bmJXCI6XCJuXCIsXCLGnlwiOlwiblwiLFwiybJcIjpcIm5cIixcIsWJXCI6XCJuXCIsXCLqnpFcIjpcIm5cIixcIuqepVwiOlwiblwiLFwix4xcIjpcIm5qXCIsXCLik55cIjpcIm9cIixcIu+9j1wiOlwib1wiLFwiw7JcIjpcIm9cIixcIsOzXCI6XCJvXCIsXCLDtFwiOlwib1wiLFwi4buTXCI6XCJvXCIsXCLhu5FcIjpcIm9cIixcIuG7l1wiOlwib1wiLFwi4buVXCI6XCJvXCIsXCLDtVwiOlwib1wiLFwi4bmNXCI6XCJvXCIsXCLIrVwiOlwib1wiLFwi4bmPXCI6XCJvXCIsXCLFjVwiOlwib1wiLFwi4bmRXCI6XCJvXCIsXCLhuZNcIjpcIm9cIixcIsWPXCI6XCJvXCIsXCLIr1wiOlwib1wiLFwiyLFcIjpcIm9cIixcIsO2XCI6XCJvXCIsXCLIq1wiOlwib1wiLFwi4buPXCI6XCJvXCIsXCLFkVwiOlwib1wiLFwix5JcIjpcIm9cIixcIsiNXCI6XCJvXCIsXCLIj1wiOlwib1wiLFwixqFcIjpcIm9cIixcIuG7nVwiOlwib1wiLFwi4bubXCI6XCJvXCIsXCLhu6FcIjpcIm9cIixcIuG7n1wiOlwib1wiLFwi4bujXCI6XCJvXCIsXCLhu41cIjpcIm9cIixcIuG7mVwiOlwib1wiLFwix6tcIjpcIm9cIixcIsetXCI6XCJvXCIsXCLDuFwiOlwib1wiLFwix79cIjpcIm9cIixcIsmUXCI6XCJvXCIsXCLqnYtcIjpcIm9cIixcIuqdjVwiOlwib1wiLFwiybVcIjpcIm9cIixcIsWTXCI6XCJvZVwiLFwixqNcIjpcIm9pXCIsXCLIo1wiOlwib3VcIixcIuqdj1wiOlwib29cIixcIuKTn1wiOlwicFwiLFwi772QXCI6XCJwXCIsXCLhuZVcIjpcInBcIixcIuG5l1wiOlwicFwiLFwixqVcIjpcInBcIixcIuG1vVwiOlwicFwiLFwi6p2RXCI6XCJwXCIsXCLqnZNcIjpcInBcIixcIuqdlVwiOlwicFwiLFwi4pOgXCI6XCJxXCIsXCLvvZFcIjpcInFcIixcIsmLXCI6XCJxXCIsXCLqnZdcIjpcInFcIixcIuqdmVwiOlwicVwiLFwi4pOhXCI6XCJyXCIsXCLvvZJcIjpcInJcIixcIsWVXCI6XCJyXCIsXCLhuZlcIjpcInJcIixcIsWZXCI6XCJyXCIsXCLIkVwiOlwiclwiLFwiyJNcIjpcInJcIixcIuG5m1wiOlwiclwiLFwi4bmdXCI6XCJyXCIsXCLFl1wiOlwiclwiLFwi4bmfXCI6XCJyXCIsXCLJjVwiOlwiclwiLFwiyb1cIjpcInJcIixcIuqdm1wiOlwiclwiLFwi6p6nXCI6XCJyXCIsXCLqnoNcIjpcInJcIixcIuKTolwiOlwic1wiLFwi772TXCI6XCJzXCIsXCLDn1wiOlwic1wiLFwixZtcIjpcInNcIixcIuG5pVwiOlwic1wiLFwixZ1cIjpcInNcIixcIuG5oVwiOlwic1wiLFwixaFcIjpcInNcIixcIuG5p1wiOlwic1wiLFwi4bmjXCI6XCJzXCIsXCLhualcIjpcInNcIixcIsiZXCI6XCJzXCIsXCLFn1wiOlwic1wiLFwiyL9cIjpcInNcIixcIuqeqVwiOlwic1wiLFwi6p6FXCI6XCJzXCIsXCLhuptcIjpcInNcIixcIuKTo1wiOlwidFwiLFwi772UXCI6XCJ0XCIsXCLhuatcIjpcInRcIixcIuG6l1wiOlwidFwiLFwixaVcIjpcInRcIixcIuG5rVwiOlwidFwiLFwiyJtcIjpcInRcIixcIsWjXCI6XCJ0XCIsXCLhubFcIjpcInRcIixcIuG5r1wiOlwidFwiLFwixadcIjpcInRcIixcIsatXCI6XCJ0XCIsXCLKiFwiOlwidFwiLFwi4rGmXCI6XCJ0XCIsXCLqnodcIjpcInRcIixcIuqcqVwiOlwidHpcIixcIuKTpFwiOlwidVwiLFwi772VXCI6XCJ1XCIsXCLDuVwiOlwidVwiLFwiw7pcIjpcInVcIixcIsO7XCI6XCJ1XCIsXCLFqVwiOlwidVwiLFwi4bm5XCI6XCJ1XCIsXCLFq1wiOlwidVwiLFwi4bm7XCI6XCJ1XCIsXCLFrVwiOlwidVwiLFwiw7xcIjpcInVcIixcIsecXCI6XCJ1XCIsXCLHmFwiOlwidVwiLFwix5ZcIjpcInVcIixcIseaXCI6XCJ1XCIsXCLhu6dcIjpcInVcIixcIsWvXCI6XCJ1XCIsXCLFsVwiOlwidVwiLFwix5RcIjpcInVcIixcIsiVXCI6XCJ1XCIsXCLIl1wiOlwidVwiLFwixrBcIjpcInVcIixcIuG7q1wiOlwidVwiLFwi4bupXCI6XCJ1XCIsXCLhu69cIjpcInVcIixcIuG7rVwiOlwidVwiLFwi4buxXCI6XCJ1XCIsXCLhu6VcIjpcInVcIixcIuG5s1wiOlwidVwiLFwixbNcIjpcInVcIixcIuG5t1wiOlwidVwiLFwi4bm1XCI6XCJ1XCIsXCLKiVwiOlwidVwiLFwi4pOlXCI6XCJ2XCIsXCLvvZZcIjpcInZcIixcIuG5vVwiOlwidlwiLFwi4bm/XCI6XCJ2XCIsXCLKi1wiOlwidlwiLFwi6p2fXCI6XCJ2XCIsXCLKjFwiOlwidlwiLFwi6p2hXCI6XCJ2eVwiLFwi4pOmXCI6XCJ3XCIsXCLvvZdcIjpcIndcIixcIuG6gVwiOlwid1wiLFwi4bqDXCI6XCJ3XCIsXCLFtVwiOlwid1wiLFwi4bqHXCI6XCJ3XCIsXCLhuoVcIjpcIndcIixcIuG6mFwiOlwid1wiLFwi4bqJXCI6XCJ3XCIsXCLisbNcIjpcIndcIixcIuKTp1wiOlwieFwiLFwi772YXCI6XCJ4XCIsXCLhuotcIjpcInhcIixcIuG6jVwiOlwieFwiLFwi4pOoXCI6XCJ5XCIsXCLvvZlcIjpcInlcIixcIuG7s1wiOlwieVwiLFwiw71cIjpcInlcIixcIsW3XCI6XCJ5XCIsXCLhu7lcIjpcInlcIixcIsizXCI6XCJ5XCIsXCLhuo9cIjpcInlcIixcIsO/XCI6XCJ5XCIsXCLhu7dcIjpcInlcIixcIuG6mVwiOlwieVwiLFwi4bu1XCI6XCJ5XCIsXCLGtFwiOlwieVwiLFwiyY9cIjpcInlcIixcIuG7v1wiOlwieVwiLFwi4pOpXCI6XCJ6XCIsXCLvvZpcIjpcInpcIixcIsW6XCI6XCJ6XCIsXCLhupFcIjpcInpcIixcIsW8XCI6XCJ6XCIsXCLFvlwiOlwielwiLFwi4bqTXCI6XCJ6XCIsXCLhupVcIjpcInpcIixcIsa2XCI6XCJ6XCIsXCLIpVwiOlwielwiLFwiyYBcIjpcInpcIixcIuKxrFwiOlwielwiLFwi6p2jXCI6XCJ6XCIsXCLOhlwiOlwizpFcIixcIs6IXCI6XCLOlVwiLFwizolcIjpcIs6XXCIsXCLOilwiOlwizplcIixcIs6qXCI6XCLOmVwiLFwizoxcIjpcIs6fXCIsXCLOjlwiOlwizqVcIixcIs6rXCI6XCLOpVwiLFwizo9cIjpcIs6pXCIsXCLOrFwiOlwizrFcIixcIs6tXCI6XCLOtVwiLFwizq5cIjpcIs63XCIsXCLOr1wiOlwizrlcIixcIs+KXCI6XCLOuVwiLFwizpBcIjpcIs65XCIsXCLPjFwiOlwizr9cIixcIs+NXCI6XCLPhVwiLFwiz4tcIjpcIs+FXCIsXCLOsFwiOlwiz4VcIixcIs+OXCI6XCLPiVwiLFwiz4JcIjpcIs+DXCIsXCLigJlcIjpcIidcIn19KSx1LmRlZmluZShcInNlbGVjdDIvZGF0YS9iYXNlXCIsW1wiLi4vdXRpbHNcIl0sZnVuY3Rpb24obil7ZnVuY3Rpb24gcyhlLHQpe3MuX19zdXBlcl9fLmNvbnN0cnVjdG9yLmNhbGwodGhpcyl9cmV0dXJuIG4uRXh0ZW5kKHMsbi5PYnNlcnZhYmxlKSxzLnByb3RvdHlwZS5jdXJyZW50PWZ1bmN0aW9uKGUpe3Rocm93IG5ldyBFcnJvcihcIlRoZSBgY3VycmVudGAgbWV0aG9kIG11c3QgYmUgZGVmaW5lZCBpbiBjaGlsZCBjbGFzc2VzLlwiKX0scy5wcm90b3R5cGUucXVlcnk9ZnVuY3Rpb24oZSx0KXt0aHJvdyBuZXcgRXJyb3IoXCJUaGUgYHF1ZXJ5YCBtZXRob2QgbXVzdCBiZSBkZWZpbmVkIGluIGNoaWxkIGNsYXNzZXMuXCIpfSxzLnByb3RvdHlwZS5iaW5kPWZ1bmN0aW9uKGUsdCl7fSxzLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7fSxzLnByb3RvdHlwZS5nZW5lcmF0ZVJlc3VsdElkPWZ1bmN0aW9uKGUsdCl7ZT1lLmlkK1wiLXJlc3VsdC1cIjtyZXR1cm4gZSs9bi5nZW5lcmF0ZUNoYXJzKDQpLG51bGwhPXQuaWQ/ZSs9XCItXCIrdC5pZC50b1N0cmluZygpOmUrPVwiLVwiK24uZ2VuZXJhdGVDaGFycyg0KSxlfSxzfSksdS5kZWZpbmUoXCJzZWxlY3QyL2RhdGEvc2VsZWN0XCIsW1wiLi9iYXNlXCIsXCIuLi91dGlsc1wiLFwianF1ZXJ5XCJdLGZ1bmN0aW9uKGUsYSxsKXtmdW5jdGlvbiBuKGUsdCl7dGhpcy4kZWxlbWVudD1lLHRoaXMub3B0aW9ucz10LG4uX19zdXBlcl9fLmNvbnN0cnVjdG9yLmNhbGwodGhpcyl9cmV0dXJuIGEuRXh0ZW5kKG4sZSksbi5wcm90b3R5cGUuY3VycmVudD1mdW5jdGlvbihlKXt2YXIgdD10aGlzO2UoQXJyYXkucHJvdG90eXBlLm1hcC5jYWxsKHRoaXMuJGVsZW1lbnRbMF0ucXVlcnlTZWxlY3RvckFsbChcIjpjaGVja2VkXCIpLGZ1bmN0aW9uKGUpe3JldHVybiB0Lml0ZW0obChlKSl9KSl9LG4ucHJvdG90eXBlLnNlbGVjdD1mdW5jdGlvbihpKXt2YXIgZSxyPXRoaXM7aWYoaS5zZWxlY3RlZD0hMCxudWxsIT1pLmVsZW1lbnQmJlwib3B0aW9uXCI9PT1pLmVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpKXJldHVybiBpLmVsZW1lbnQuc2VsZWN0ZWQ9ITAsdm9pZCB0aGlzLiRlbGVtZW50LnRyaWdnZXIoXCJpbnB1dFwiKS50cmlnZ2VyKFwiY2hhbmdlXCIpO3RoaXMuJGVsZW1lbnQucHJvcChcIm11bHRpcGxlXCIpP3RoaXMuY3VycmVudChmdW5jdGlvbihlKXt2YXIgdD1bXTsoaT1baV0pLnB1c2guYXBwbHkoaSxlKTtmb3IodmFyIG49MDtuPGkubGVuZ3RoO24rKyl7dmFyIHM9aVtuXS5pZDstMT09PXQuaW5kZXhPZihzKSYmdC5wdXNoKHMpfXIuJGVsZW1lbnQudmFsKHQpLHIuJGVsZW1lbnQudHJpZ2dlcihcImlucHV0XCIpLnRyaWdnZXIoXCJjaGFuZ2VcIil9KTooZT1pLmlkLHRoaXMuJGVsZW1lbnQudmFsKGUpLHRoaXMuJGVsZW1lbnQudHJpZ2dlcihcImlucHV0XCIpLnRyaWdnZXIoXCJjaGFuZ2VcIikpfSxuLnByb3RvdHlwZS51bnNlbGVjdD1mdW5jdGlvbihpKXt2YXIgcj10aGlzO2lmKHRoaXMuJGVsZW1lbnQucHJvcChcIm11bHRpcGxlXCIpKXtpZihpLnNlbGVjdGVkPSExLG51bGwhPWkuZWxlbWVudCYmXCJvcHRpb25cIj09PWkuZWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCkpcmV0dXJuIGkuZWxlbWVudC5zZWxlY3RlZD0hMSx2b2lkIHRoaXMuJGVsZW1lbnQudHJpZ2dlcihcImlucHV0XCIpLnRyaWdnZXIoXCJjaGFuZ2VcIik7dGhpcy5jdXJyZW50KGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciBzPWVbbl0uaWQ7cyE9PWkuaWQmJi0xPT09dC5pbmRleE9mKHMpJiZ0LnB1c2gocyl9ci4kZWxlbWVudC52YWwodCksci4kZWxlbWVudC50cmlnZ2VyKFwiaW5wdXRcIikudHJpZ2dlcihcImNoYW5nZVwiKX0pfX0sbi5wcm90b3R5cGUuYmluZD1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXM7KHRoaXMuY29udGFpbmVyPWUpLm9uKFwic2VsZWN0XCIsZnVuY3Rpb24oZSl7bi5zZWxlY3QoZS5kYXRhKX0pLGUub24oXCJ1bnNlbGVjdFwiLGZ1bmN0aW9uKGUpe24udW5zZWxlY3QoZS5kYXRhKX0pfSxuLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy4kZWxlbWVudC5maW5kKFwiKlwiKS5lYWNoKGZ1bmN0aW9uKCl7YS5SZW1vdmVEYXRhKHRoaXMpfSl9LG4ucHJvdG90eXBlLnF1ZXJ5PWZ1bmN0aW9uKHQsZSl7dmFyIG49W10scz10aGlzO3RoaXMuJGVsZW1lbnQuY2hpbGRyZW4oKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGU7XCJvcHRpb25cIiE9PXRoaXMudGFnTmFtZS50b0xvd2VyQ2FzZSgpJiZcIm9wdGdyb3VwXCIhPT10aGlzLnRhZ05hbWUudG9Mb3dlckNhc2UoKXx8KGU9bCh0aGlzKSxlPXMuaXRlbShlKSxudWxsIT09KGU9cy5tYXRjaGVzKHQsZSkpJiZuLnB1c2goZSkpfSksZSh7cmVzdWx0czpufSl9LG4ucHJvdG90eXBlLmFkZE9wdGlvbnM9ZnVuY3Rpb24oZSl7dGhpcy4kZWxlbWVudC5hcHBlbmQoZSl9LG4ucHJvdG90eXBlLm9wdGlvbj1mdW5jdGlvbihlKXt2YXIgdDtlLmNoaWxkcmVuPyh0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJvcHRncm91cFwiKSkubGFiZWw9ZS50ZXh0OnZvaWQgMCE9PSh0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJvcHRpb25cIikpLnRleHRDb250ZW50P3QudGV4dENvbnRlbnQ9ZS50ZXh0OnQuaW5uZXJUZXh0PWUudGV4dCx2b2lkIDAhPT1lLmlkJiYodC52YWx1ZT1lLmlkKSxlLmRpc2FibGVkJiYodC5kaXNhYmxlZD0hMCksZS5zZWxlY3RlZCYmKHQuc2VsZWN0ZWQ9ITApLGUudGl0bGUmJih0LnRpdGxlPWUudGl0bGUpO2U9dGhpcy5fbm9ybWFsaXplSXRlbShlKTtyZXR1cm4gZS5lbGVtZW50PXQsYS5TdG9yZURhdGEodCxcImRhdGFcIixlKSxsKHQpfSxuLnByb3RvdHlwZS5pdGVtPWZ1bmN0aW9uKGUpe3ZhciB0PXt9O2lmKG51bGwhPSh0PWEuR2V0RGF0YShlWzBdLFwiZGF0YVwiKSkpcmV0dXJuIHQ7dmFyIG49ZVswXTtpZihcIm9wdGlvblwiPT09bi50YWdOYW1lLnRvTG93ZXJDYXNlKCkpdD17aWQ6ZS52YWwoKSx0ZXh0OmUudGV4dCgpLGRpc2FibGVkOmUucHJvcChcImRpc2FibGVkXCIpLHNlbGVjdGVkOmUucHJvcChcInNlbGVjdGVkXCIpLHRpdGxlOmUucHJvcChcInRpdGxlXCIpfTtlbHNlIGlmKFwib3B0Z3JvdXBcIj09PW4udGFnTmFtZS50b0xvd2VyQ2FzZSgpKXt0PXt0ZXh0OmUucHJvcChcImxhYmVsXCIpLGNoaWxkcmVuOltdLHRpdGxlOmUucHJvcChcInRpdGxlXCIpfTtmb3IodmFyIHM9ZS5jaGlsZHJlbihcIm9wdGlvblwiKSxpPVtdLHI9MDtyPHMubGVuZ3RoO3IrKyl7dmFyIG89bChzW3JdKSxvPXRoaXMuaXRlbShvKTtpLnB1c2gobyl9dC5jaGlsZHJlbj1pfXJldHVybih0PXRoaXMuX25vcm1hbGl6ZUl0ZW0odCkpLmVsZW1lbnQ9ZVswXSxhLlN0b3JlRGF0YShlWzBdLFwiZGF0YVwiLHQpLHR9LG4ucHJvdG90eXBlLl9ub3JtYWxpemVJdGVtPWZ1bmN0aW9uKGUpe2UhPT1PYmplY3QoZSkmJihlPXtpZDplLHRleHQ6ZX0pO3JldHVybiBudWxsIT0oZT1sLmV4dGVuZCh7fSx7dGV4dDpcIlwifSxlKSkuaWQmJihlLmlkPWUuaWQudG9TdHJpbmcoKSksbnVsbCE9ZS50ZXh0JiYoZS50ZXh0PWUudGV4dC50b1N0cmluZygpKSxudWxsPT1lLl9yZXN1bHRJZCYmZS5pZCYmbnVsbCE9dGhpcy5jb250YWluZXImJihlLl9yZXN1bHRJZD10aGlzLmdlbmVyYXRlUmVzdWx0SWQodGhpcy5jb250YWluZXIsZSkpLGwuZXh0ZW5kKHt9LHtzZWxlY3RlZDohMSxkaXNhYmxlZDohMX0sZSl9LG4ucHJvdG90eXBlLm1hdGNoZXM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5vcHRpb25zLmdldChcIm1hdGNoZXJcIikoZSx0KX0sbn0pLHUuZGVmaW5lKFwic2VsZWN0Mi9kYXRhL2FycmF5XCIsW1wiLi9zZWxlY3RcIixcIi4uL3V0aWxzXCIsXCJqcXVlcnlcIl0sZnVuY3Rpb24oZSx0LGMpe2Z1bmN0aW9uIHMoZSx0KXt0aGlzLl9kYXRhVG9Db252ZXJ0PXQuZ2V0KFwiZGF0YVwiKXx8W10scy5fX3N1cGVyX18uY29uc3RydWN0b3IuY2FsbCh0aGlzLGUsdCl9cmV0dXJuIHQuRXh0ZW5kKHMsZSkscy5wcm90b3R5cGUuYmluZD1mdW5jdGlvbihlLHQpe3MuX19zdXBlcl9fLmJpbmQuY2FsbCh0aGlzLGUsdCksdGhpcy5hZGRPcHRpb25zKHRoaXMuY29udmVydFRvT3B0aW9ucyh0aGlzLl9kYXRhVG9Db252ZXJ0KSl9LHMucHJvdG90eXBlLnNlbGVjdD1mdW5jdGlvbihuKXt2YXIgZT10aGlzLiRlbGVtZW50LmZpbmQoXCJvcHRpb25cIikuZmlsdGVyKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQudmFsdWU9PW4uaWQudG9TdHJpbmcoKX0pOzA9PT1lLmxlbmd0aCYmKGU9dGhpcy5vcHRpb24obiksdGhpcy5hZGRPcHRpb25zKGUpKSxzLl9fc3VwZXJfXy5zZWxlY3QuY2FsbCh0aGlzLG4pfSxzLnByb3RvdHlwZS5jb252ZXJ0VG9PcHRpb25zPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbj10aGlzLiRlbGVtZW50LmZpbmQoXCJvcHRpb25cIikscz1uLm1hcChmdW5jdGlvbigpe3JldHVybiB0Lml0ZW0oYyh0aGlzKSkuaWR9KS5nZXQoKSxpPVtdO2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbyxhLGw9dGhpcy5fbm9ybWFsaXplSXRlbShlW3JdKTswPD1zLmluZGV4T2YobC5pZCk/KG89bi5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGModGhpcykudmFsKCk9PWUuaWR9fShsKSksYT10aGlzLml0ZW0obyksYT1jLmV4dGVuZCghMCx7fSxsLGEpLGE9dGhpcy5vcHRpb24oYSksby5yZXBsYWNlV2l0aChhKSk6KGE9dGhpcy5vcHRpb24obCksbC5jaGlsZHJlbiYmKGw9dGhpcy5jb252ZXJ0VG9PcHRpb25zKGwuY2hpbGRyZW4pLGEuYXBwZW5kKGwpKSxpLnB1c2goYSkpfXJldHVybiBpfSxzfSksdS5kZWZpbmUoXCJzZWxlY3QyL2RhdGEvYWpheFwiLFtcIi4vYXJyYXlcIixcIi4uL3V0aWxzXCIsXCJqcXVlcnlcIl0sZnVuY3Rpb24oZSx0LHIpe2Z1bmN0aW9uIG4oZSx0KXt0aGlzLmFqYXhPcHRpb25zPXRoaXMuX2FwcGx5RGVmYXVsdHModC5nZXQoXCJhamF4XCIpKSxudWxsIT10aGlzLmFqYXhPcHRpb25zLnByb2Nlc3NSZXN1bHRzJiYodGhpcy5wcm9jZXNzUmVzdWx0cz10aGlzLmFqYXhPcHRpb25zLnByb2Nlc3NSZXN1bHRzKSxuLl9fc3VwZXJfXy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsZSx0KX1yZXR1cm4gdC5FeHRlbmQobixlKSxuLnByb3RvdHlwZS5fYXBwbHlEZWZhdWx0cz1mdW5jdGlvbihlKXt2YXIgdD17ZGF0YTpmdW5jdGlvbihlKXtyZXR1cm4gci5leHRlbmQoe30sZSx7cTplLnRlcm19KX0sdHJhbnNwb3J0OmZ1bmN0aW9uKGUsdCxuKXtlPXIuYWpheChlKTtyZXR1cm4gZS50aGVuKHQpLGUuZmFpbChuKSxlfX07cmV0dXJuIHIuZXh0ZW5kKHt9LHQsZSwhMCl9LG4ucHJvdG90eXBlLnByb2Nlc3NSZXN1bHRzPWZ1bmN0aW9uKGUpe3JldHVybiBlfSxuLnByb3RvdHlwZS5xdWVyeT1mdW5jdGlvbih0LG4pe3ZhciBzPXRoaXM7bnVsbCE9dGhpcy5fcmVxdWVzdCYmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHRoaXMuX3JlcXVlc3QuYWJvcnQmJnRoaXMuX3JlcXVlc3QuYWJvcnQoKSx0aGlzLl9yZXF1ZXN0PW51bGwpO3ZhciBpPXIuZXh0ZW5kKHt0eXBlOlwiR0VUXCJ9LHRoaXMuYWpheE9wdGlvbnMpO2Z1bmN0aW9uIGUoKXt2YXIgZT1pLnRyYW5zcG9ydChpLGZ1bmN0aW9uKGUpe2U9cy5wcm9jZXNzUmVzdWx0cyhlLHQpO3Mub3B0aW9ucy5nZXQoXCJkZWJ1Z1wiKSYmd2luZG93LmNvbnNvbGUmJmNvbnNvbGUuZXJyb3ImJihlJiZlLnJlc3VsdHMmJkFycmF5LmlzQXJyYXkoZS5yZXN1bHRzKXx8Y29uc29sZS5lcnJvcihcIlNlbGVjdDI6IFRoZSBBSkFYIHJlc3VsdHMgZGlkIG5vdCByZXR1cm4gYW4gYXJyYXkgaW4gdGhlIGByZXN1bHRzYCBrZXkgb2YgdGhlIHJlc3BvbnNlLlwiKSksbihlKX0sZnVuY3Rpb24oKXtcInN0YXR1c1wiaW4gZSYmKDA9PT1lLnN0YXR1c3x8XCIwXCI9PT1lLnN0YXR1cyl8fHMudHJpZ2dlcihcInJlc3VsdHM6bWVzc2FnZVwiLHttZXNzYWdlOlwiZXJyb3JMb2FkaW5nXCJ9KX0pO3MuX3JlcXVlc3Q9ZX1cImZ1bmN0aW9uXCI9PXR5cGVvZiBpLnVybCYmKGkudXJsPWkudXJsLmNhbGwodGhpcy4kZWxlbWVudCx0KSksXCJmdW5jdGlvblwiPT10eXBlb2YgaS5kYXRhJiYoaS5kYXRhPWkuZGF0YS5jYWxsKHRoaXMuJGVsZW1lbnQsdCkpLHRoaXMuYWpheE9wdGlvbnMuZGVsYXkmJm51bGwhPXQudGVybT8odGhpcy5fcXVlcnlUaW1lb3V0JiZ3aW5kb3cuY2xlYXJUaW1lb3V0KHRoaXMuX3F1ZXJ5VGltZW91dCksdGhpcy5fcXVlcnlUaW1lb3V0PXdpbmRvdy5zZXRUaW1lb3V0KGUsdGhpcy5hamF4T3B0aW9ucy5kZWxheSkpOmUoKX0sbn0pLHUuZGVmaW5lKFwic2VsZWN0Mi9kYXRhL3RhZ3NcIixbXCJqcXVlcnlcIl0sZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLHQsbil7dmFyIHM9bi5nZXQoXCJ0YWdzXCIpLGk9bi5nZXQoXCJjcmVhdGVUYWdcIik7dm9pZCAwIT09aSYmKHRoaXMuY3JlYXRlVGFnPWkpO2k9bi5nZXQoXCJpbnNlcnRUYWdcIik7aWYodm9pZCAwIT09aSYmKHRoaXMuaW5zZXJ0VGFnPWkpLGUuY2FsbCh0aGlzLHQsbiksQXJyYXkuaXNBcnJheShzKSlmb3IodmFyIHI9MDtyPHMubGVuZ3RoO3IrKyl7dmFyIG89c1tyXSxvPXRoaXMuX25vcm1hbGl6ZUl0ZW0obyksbz10aGlzLm9wdGlvbihvKTt0aGlzLiRlbGVtZW50LmFwcGVuZChvKX19cmV0dXJuIGUucHJvdG90eXBlLnF1ZXJ5PWZ1bmN0aW9uKGUsYyx1KXt2YXIgZD10aGlzO3RoaXMuX3JlbW92ZU9sZFRhZ3MoKSxudWxsIT1jLnRlcm0mJm51bGw9PWMucGFnZT9lLmNhbGwodGhpcyxjLGZ1bmN0aW9uIGUodCxuKXtmb3IodmFyIHM9dC5yZXN1bHRzLGk9MDtpPHMubGVuZ3RoO2krKyl7dmFyIHI9c1tpXSxvPW51bGwhPXIuY2hpbGRyZW4mJiFlKHtyZXN1bHRzOnIuY2hpbGRyZW59LCEwKTtpZigoci50ZXh0fHxcIlwiKS50b1VwcGVyQ2FzZSgpPT09KGMudGVybXx8XCJcIikudG9VcHBlckNhc2UoKXx8bylyZXR1cm4hbiYmKHQuZGF0YT1zLHZvaWQgdSh0KSl9aWYobilyZXR1cm4hMDt2YXIgYSxsPWQuY3JlYXRlVGFnKGMpO251bGwhPWwmJigoYT1kLm9wdGlvbihsKSkuYXR0cihcImRhdGEtc2VsZWN0Mi10YWdcIixcInRydWVcIiksZC5hZGRPcHRpb25zKFthXSksZC5pbnNlcnRUYWcocyxsKSksdC5yZXN1bHRzPXMsdSh0KX0pOmUuY2FsbCh0aGlzLGMsdSl9LGUucHJvdG90eXBlLmNyZWF0ZVRhZz1mdW5jdGlvbihlLHQpe2lmKG51bGw9PXQudGVybSlyZXR1cm4gbnVsbDt0PXQudGVybS50cmltKCk7cmV0dXJuXCJcIj09PXQ/bnVsbDp7aWQ6dCx0ZXh0OnR9fSxlLnByb3RvdHlwZS5pbnNlcnRUYWc9ZnVuY3Rpb24oZSx0LG4pe3QudW5zaGlmdChuKX0sZS5wcm90b3R5cGUuX3JlbW92ZU9sZFRhZ3M9ZnVuY3Rpb24oZSl7dGhpcy4kZWxlbWVudC5maW5kKFwib3B0aW9uW2RhdGEtc2VsZWN0Mi10YWddXCIpLmVhY2goZnVuY3Rpb24oKXt0aGlzLnNlbGVjdGVkfHx0KHRoaXMpLnJlbW92ZSgpfSl9LGV9KSx1LmRlZmluZShcInNlbGVjdDIvZGF0YS90b2tlbml6ZXJcIixbXCJqcXVlcnlcIl0sZnVuY3Rpb24oYyl7ZnVuY3Rpb24gZShlLHQsbil7dmFyIHM9bi5nZXQoXCJ0b2tlbml6ZXJcIik7dm9pZCAwIT09cyYmKHRoaXMudG9rZW5pemVyPXMpLGUuY2FsbCh0aGlzLHQsbil9cmV0dXJuIGUucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24oZSx0LG4pe2UuY2FsbCh0aGlzLHQsbiksdGhpcy4kc2VhcmNoPXQuZHJvcGRvd24uJHNlYXJjaHx8dC5zZWxlY3Rpb24uJHNlYXJjaHx8bi5maW5kKFwiLnNlbGVjdDItc2VhcmNoX19maWVsZFwiKX0sZS5wcm90b3R5cGUucXVlcnk9ZnVuY3Rpb24oZSx0LG4pe3ZhciBzPXRoaXM7dC50ZXJtPXQudGVybXx8XCJcIjt2YXIgaT10aGlzLnRva2VuaXplcih0LHRoaXMub3B0aW9ucyxmdW5jdGlvbihlKXt2YXIgdCxuPXMuX25vcm1hbGl6ZUl0ZW0oZSk7cy4kZWxlbWVudC5maW5kKFwib3B0aW9uXCIpLmZpbHRlcihmdW5jdGlvbigpe3JldHVybiBjKHRoaXMpLnZhbCgpPT09bi5pZH0pLmxlbmd0aHx8KCh0PXMub3B0aW9uKG4pKS5hdHRyKFwiZGF0YS1zZWxlY3QyLXRhZ1wiLCEwKSxzLl9yZW1vdmVPbGRUYWdzKCkscy5hZGRPcHRpb25zKFt0XSkpLHQ9bixzLnRyaWdnZXIoXCJzZWxlY3RcIix7ZGF0YTp0fSl9KTtpLnRlcm0hPT10LnRlcm0mJih0aGlzLiRzZWFyY2gubGVuZ3RoJiYodGhpcy4kc2VhcmNoLnZhbChpLnRlcm0pLHRoaXMuJHNlYXJjaC50cmlnZ2VyKFwiZm9jdXNcIikpLHQudGVybT1pLnRlcm0pLGUuY2FsbCh0aGlzLHQsbil9LGUucHJvdG90eXBlLnRva2VuaXplcj1mdW5jdGlvbihlLHQsbixzKXtmb3IodmFyIGk9bi5nZXQoXCJ0b2tlblNlcGFyYXRvcnNcIil8fFtdLHI9dC50ZXJtLG89MCxhPXRoaXMuY3JlYXRlVGFnfHxmdW5jdGlvbihlKXtyZXR1cm57aWQ6ZS50ZXJtLHRleHQ6ZS50ZXJtfX07bzxyLmxlbmd0aDspe3ZhciBsPXJbb107LTEhPT1pLmluZGV4T2YobCk/KGw9ci5zdWJzdHIoMCxvKSxudWxsIT0obD1hKGMuZXh0ZW5kKHt9LHQse3Rlcm06bH0pKSk/KHMobCkscj1yLnN1YnN0cihvKzEpfHxcIlwiLG89MCk6bysrKTpvKyt9cmV0dXJue3Rlcm06cn19LGV9KSx1LmRlZmluZShcInNlbGVjdDIvZGF0YS9taW5pbXVtSW5wdXRMZW5ndGhcIixbXSxmdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LG4pe3RoaXMubWluaW11bUlucHV0TGVuZ3RoPW4uZ2V0KFwibWluaW11bUlucHV0TGVuZ3RoXCIpLGUuY2FsbCh0aGlzLHQsbil9cmV0dXJuIGUucHJvdG90eXBlLnF1ZXJ5PWZ1bmN0aW9uKGUsdCxuKXt0LnRlcm09dC50ZXJtfHxcIlwiLHQudGVybS5sZW5ndGg8dGhpcy5taW5pbXVtSW5wdXRMZW5ndGg/dGhpcy50cmlnZ2VyKFwicmVzdWx0czptZXNzYWdlXCIse21lc3NhZ2U6XCJpbnB1dFRvb1Nob3J0XCIsYXJnczp7bWluaW11bTp0aGlzLm1pbmltdW1JbnB1dExlbmd0aCxpbnB1dDp0LnRlcm0scGFyYW1zOnR9fSk6ZS5jYWxsKHRoaXMsdCxuKX0sZX0pLHUuZGVmaW5lKFwic2VsZWN0Mi9kYXRhL21heGltdW1JbnB1dExlbmd0aFwiLFtdLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsbil7dGhpcy5tYXhpbXVtSW5wdXRMZW5ndGg9bi5nZXQoXCJtYXhpbXVtSW5wdXRMZW5ndGhcIiksZS5jYWxsKHRoaXMsdCxuKX1yZXR1cm4gZS5wcm90b3R5cGUucXVlcnk9ZnVuY3Rpb24oZSx0LG4pe3QudGVybT10LnRlcm18fFwiXCIsMDx0aGlzLm1heGltdW1JbnB1dExlbmd0aCYmdC50ZXJtLmxlbmd0aD50aGlzLm1heGltdW1JbnB1dExlbmd0aD90aGlzLnRyaWdnZXIoXCJyZXN1bHRzOm1lc3NhZ2VcIix7bWVzc2FnZTpcImlucHV0VG9vTG9uZ1wiLGFyZ3M6e21heGltdW06dGhpcy5tYXhpbXVtSW5wdXRMZW5ndGgsaW5wdXQ6dC50ZXJtLHBhcmFtczp0fX0pOmUuY2FsbCh0aGlzLHQsbil9LGV9KSx1LmRlZmluZShcInNlbGVjdDIvZGF0YS9tYXhpbXVtU2VsZWN0aW9uTGVuZ3RoXCIsW10sZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuKXt0aGlzLm1heGltdW1TZWxlY3Rpb25MZW5ndGg9bi5nZXQoXCJtYXhpbXVtU2VsZWN0aW9uTGVuZ3RoXCIpLGUuY2FsbCh0aGlzLHQsbil9cmV0dXJuIGUucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciBzPXRoaXM7ZS5jYWxsKHRoaXMsdCxuKSx0Lm9uKFwic2VsZWN0XCIsZnVuY3Rpb24oKXtzLl9jaGVja0lmTWF4aW11bVNlbGVjdGVkKCl9KX0sZS5wcm90b3R5cGUucXVlcnk9ZnVuY3Rpb24oZSx0LG4pe3ZhciBzPXRoaXM7dGhpcy5fY2hlY2tJZk1heGltdW1TZWxlY3RlZChmdW5jdGlvbigpe2UuY2FsbChzLHQsbil9KX0sZS5wcm90b3R5cGUuX2NoZWNrSWZNYXhpbXVtU2VsZWN0ZWQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzO3RoaXMuY3VycmVudChmdW5jdGlvbihlKXtlPW51bGwhPWU/ZS5sZW5ndGg6MDswPG4ubWF4aW11bVNlbGVjdGlvbkxlbmd0aCYmZT49bi5tYXhpbXVtU2VsZWN0aW9uTGVuZ3RoP24udHJpZ2dlcihcInJlc3VsdHM6bWVzc2FnZVwiLHttZXNzYWdlOlwibWF4aW11bVNlbGVjdGVkXCIsYXJnczp7bWF4aW11bTpuLm1heGltdW1TZWxlY3Rpb25MZW5ndGh9fSk6dCYmdCgpfSl9LGV9KSx1LmRlZmluZShcInNlbGVjdDIvZHJvcGRvd25cIixbXCJqcXVlcnlcIixcIi4vdXRpbHNcIl0sZnVuY3Rpb24odCxlKXtmdW5jdGlvbiBuKGUsdCl7dGhpcy4kZWxlbWVudD1lLHRoaXMub3B0aW9ucz10LG4uX19zdXBlcl9fLmNvbnN0cnVjdG9yLmNhbGwodGhpcyl9cmV0dXJuIGUuRXh0ZW5kKG4sZS5PYnNlcnZhYmxlKSxuLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXt2YXIgZT10KCc8c3BhbiBjbGFzcz1cInNlbGVjdDItZHJvcGRvd25cIj48c3BhbiBjbGFzcz1cInNlbGVjdDItcmVzdWx0c1wiPjwvc3Bhbj48L3NwYW4+Jyk7cmV0dXJuIGUuYXR0cihcImRpclwiLHRoaXMub3B0aW9ucy5nZXQoXCJkaXJcIikpLHRoaXMuJGRyb3Bkb3duPWV9LG4ucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24oKXt9LG4ucHJvdG90eXBlLnBvc2l0aW9uPWZ1bmN0aW9uKGUsdCl7fSxuLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy4kZHJvcGRvd24ucmVtb3ZlKCl9LG59KSx1LmRlZmluZShcInNlbGVjdDIvZHJvcGRvd24vc2VhcmNoXCIsW1wianF1ZXJ5XCJdLGZ1bmN0aW9uKHIpe2Z1bmN0aW9uIGUoKXt9cmV0dXJuIGUucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNhbGwodGhpcyksbj10aGlzLm9wdGlvbnMuZ2V0KFwidHJhbnNsYXRpb25zXCIpLmdldChcInNlYXJjaFwiKSxlPXIoJzxzcGFuIGNsYXNzPVwic2VsZWN0Mi1zZWFyY2ggc2VsZWN0Mi1zZWFyY2gtLWRyb3Bkb3duXCI+PGlucHV0IGNsYXNzPVwic2VsZWN0Mi1zZWFyY2hfX2ZpZWxkXCIgdHlwZT1cInNlYXJjaFwiIHRhYmluZGV4PVwiLTFcIiBhdXRvY29ycmVjdD1cIm9mZlwiIGF1dG9jYXBpdGFsaXplPVwibm9uZVwiIHNwZWxsY2hlY2s9XCJmYWxzZVwiIHJvbGU9XCJzZWFyY2hib3hcIiBhcmlhLWF1dG9jb21wbGV0ZT1cImxpc3RcIiAvPjwvc3Bhbj4nKTtyZXR1cm4gdGhpcy4kc2VhcmNoQ29udGFpbmVyPWUsdGhpcy4kc2VhcmNoPWUuZmluZChcImlucHV0XCIpLHRoaXMuJHNlYXJjaC5wcm9wKFwiYXV0b2NvbXBsZXRlXCIsdGhpcy5vcHRpb25zLmdldChcImF1dG9jb21wbGV0ZVwiKSksdGhpcy4kc2VhcmNoLmF0dHIoXCJhcmlhLWxhYmVsXCIsbigpKSx0LnByZXBlbmQoZSksdH0sZS5wcm90b3R5cGUuYmluZD1mdW5jdGlvbihlLHQsbil7dmFyIHM9dGhpcyxpPXQuaWQrXCItcmVzdWx0c1wiO2UuY2FsbCh0aGlzLHQsbiksdGhpcy4kc2VhcmNoLm9uKFwia2V5ZG93blwiLGZ1bmN0aW9uKGUpe3MudHJpZ2dlcihcImtleXByZXNzXCIsZSkscy5fa2V5VXBQcmV2ZW50ZWQ9ZS5pc0RlZmF1bHRQcmV2ZW50ZWQoKX0pLHRoaXMuJHNlYXJjaC5vbihcImlucHV0XCIsZnVuY3Rpb24oZSl7cih0aGlzKS5vZmYoXCJrZXl1cFwiKX0pLHRoaXMuJHNlYXJjaC5vbihcImtleXVwIGlucHV0XCIsZnVuY3Rpb24oZSl7cy5oYW5kbGVTZWFyY2goZSl9KSx0Lm9uKFwib3BlblwiLGZ1bmN0aW9uKCl7cy4kc2VhcmNoLmF0dHIoXCJ0YWJpbmRleFwiLDApLHMuJHNlYXJjaC5hdHRyKFwiYXJpYS1jb250cm9sc1wiLGkpLHMuJHNlYXJjaC50cmlnZ2VyKFwiZm9jdXNcIiksd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtzLiRzZWFyY2gudHJpZ2dlcihcImZvY3VzXCIpfSwwKX0pLHQub24oXCJjbG9zZVwiLGZ1bmN0aW9uKCl7cy4kc2VhcmNoLmF0dHIoXCJ0YWJpbmRleFwiLC0xKSxzLiRzZWFyY2gucmVtb3ZlQXR0cihcImFyaWEtY29udHJvbHNcIikscy4kc2VhcmNoLnJlbW92ZUF0dHIoXCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnRcIikscy4kc2VhcmNoLnZhbChcIlwiKSxzLiRzZWFyY2gudHJpZ2dlcihcImJsdXJcIil9KSx0Lm9uKFwiZm9jdXNcIixmdW5jdGlvbigpe3QuaXNPcGVuKCl8fHMuJHNlYXJjaC50cmlnZ2VyKFwiZm9jdXNcIil9KSx0Lm9uKFwicmVzdWx0czphbGxcIixmdW5jdGlvbihlKXtudWxsIT1lLnF1ZXJ5LnRlcm0mJlwiXCIhPT1lLnF1ZXJ5LnRlcm18fChzLnNob3dTZWFyY2goZSk/cy4kc2VhcmNoQ29udGFpbmVyWzBdLmNsYXNzTGlzdC5yZW1vdmUoXCJzZWxlY3QyLXNlYXJjaC0taGlkZVwiKTpzLiRzZWFyY2hDb250YWluZXJbMF0uY2xhc3NMaXN0LmFkZChcInNlbGVjdDItc2VhcmNoLS1oaWRlXCIpKX0pLHQub24oXCJyZXN1bHRzOmZvY3VzXCIsZnVuY3Rpb24oZSl7ZS5kYXRhLl9yZXN1bHRJZD9zLiRzZWFyY2guYXR0cihcImFyaWEtYWN0aXZlZGVzY2VuZGFudFwiLGUuZGF0YS5fcmVzdWx0SWQpOnMuJHNlYXJjaC5yZW1vdmVBdHRyKFwiYXJpYS1hY3RpdmVkZXNjZW5kYW50XCIpfSl9LGUucHJvdG90eXBlLmhhbmRsZVNlYXJjaD1mdW5jdGlvbihlKXt2YXIgdDt0aGlzLl9rZXlVcFByZXZlbnRlZHx8KHQ9dGhpcy4kc2VhcmNoLnZhbCgpLHRoaXMudHJpZ2dlcihcInF1ZXJ5XCIse3Rlcm06dH0pKSx0aGlzLl9rZXlVcFByZXZlbnRlZD0hMX0sZS5wcm90b3R5cGUuc2hvd1NlYXJjaD1mdW5jdGlvbihlLHQpe3JldHVybiEwfSxlfSksdS5kZWZpbmUoXCJzZWxlY3QyL2Ryb3Bkb3duL2hpZGVQbGFjZWhvbGRlclwiLFtdLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsbixzKXt0aGlzLnBsYWNlaG9sZGVyPXRoaXMubm9ybWFsaXplUGxhY2Vob2xkZXIobi5nZXQoXCJwbGFjZWhvbGRlclwiKSksZS5jYWxsKHRoaXMsdCxuLHMpfXJldHVybiBlLnByb3RvdHlwZS5hcHBlbmQ9ZnVuY3Rpb24oZSx0KXt0LnJlc3VsdHM9dGhpcy5yZW1vdmVQbGFjZWhvbGRlcih0LnJlc3VsdHMpLGUuY2FsbCh0aGlzLHQpfSxlLnByb3RvdHlwZS5ub3JtYWxpemVQbGFjZWhvbGRlcj1mdW5jdGlvbihlLHQpe3JldHVybiB0PVwic3RyaW5nXCI9PXR5cGVvZiB0P3tpZDpcIlwiLHRleHQ6dH06dH0sZS5wcm90b3R5cGUucmVtb3ZlUGxhY2Vob2xkZXI9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49dC5zbGljZSgwKSxzPXQubGVuZ3RoLTE7MDw9cztzLS0pe3ZhciBpPXRbc107dGhpcy5wbGFjZWhvbGRlci5pZD09PWkuaWQmJm4uc3BsaWNlKHMsMSl9cmV0dXJuIG59LGV9KSx1LmRlZmluZShcInNlbGVjdDIvZHJvcGRvd24vaW5maW5pdGVTY3JvbGxcIixbXCJqcXVlcnlcIl0sZnVuY3Rpb24obil7ZnVuY3Rpb24gZShlLHQsbixzKXt0aGlzLmxhc3RQYXJhbXM9e30sZS5jYWxsKHRoaXMsdCxuLHMpLHRoaXMuJGxvYWRpbmdNb3JlPXRoaXMuY3JlYXRlTG9hZGluZ01vcmUoKSx0aGlzLmxvYWRpbmc9ITF9cmV0dXJuIGUucHJvdG90eXBlLmFwcGVuZD1mdW5jdGlvbihlLHQpe3RoaXMuJGxvYWRpbmdNb3JlLnJlbW92ZSgpLHRoaXMubG9hZGluZz0hMSxlLmNhbGwodGhpcyx0KSx0aGlzLnNob3dMb2FkaW5nTW9yZSh0KSYmKHRoaXMuJHJlc3VsdHMuYXBwZW5kKHRoaXMuJGxvYWRpbmdNb3JlKSx0aGlzLmxvYWRNb3JlSWZOZWVkZWQoKSl9LGUucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciBzPXRoaXM7ZS5jYWxsKHRoaXMsdCxuKSx0Lm9uKFwicXVlcnlcIixmdW5jdGlvbihlKXtzLmxhc3RQYXJhbXM9ZSxzLmxvYWRpbmc9ITB9KSx0Lm9uKFwicXVlcnk6YXBwZW5kXCIsZnVuY3Rpb24oZSl7cy5sYXN0UGFyYW1zPWUscy5sb2FkaW5nPSEwfSksdGhpcy4kcmVzdWx0cy5vbihcInNjcm9sbFwiLHRoaXMubG9hZE1vcmVJZk5lZWRlZC5iaW5kKHRoaXMpKX0sZS5wcm90b3R5cGUubG9hZE1vcmVJZk5lZWRlZD1mdW5jdGlvbigpe3ZhciBlPW4uY29udGFpbnMoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LHRoaXMuJGxvYWRpbmdNb3JlWzBdKTshdGhpcy5sb2FkaW5nJiZlJiYoZT10aGlzLiRyZXN1bHRzLm9mZnNldCgpLnRvcCt0aGlzLiRyZXN1bHRzLm91dGVySGVpZ2h0KCExKSx0aGlzLiRsb2FkaW5nTW9yZS5vZmZzZXQoKS50b3ArdGhpcy4kbG9hZGluZ01vcmUub3V0ZXJIZWlnaHQoITEpPD1lKzUwJiZ0aGlzLmxvYWRNb3JlKCkpfSxlLnByb3RvdHlwZS5sb2FkTW9yZT1mdW5jdGlvbigpe3RoaXMubG9hZGluZz0hMDt2YXIgZT1uLmV4dGVuZCh7fSx7cGFnZToxfSx0aGlzLmxhc3RQYXJhbXMpO2UucGFnZSsrLHRoaXMudHJpZ2dlcihcInF1ZXJ5OmFwcGVuZFwiLGUpfSxlLnByb3RvdHlwZS5zaG93TG9hZGluZ01vcmU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC5wYWdpbmF0aW9uJiZ0LnBhZ2luYXRpb24ubW9yZX0sZS5wcm90b3R5cGUuY3JlYXRlTG9hZGluZ01vcmU9ZnVuY3Rpb24oKXt2YXIgZT1uKCc8bGkgY2xhc3M9XCJzZWxlY3QyLXJlc3VsdHNfX29wdGlvbiBzZWxlY3QyLXJlc3VsdHNfX29wdGlvbi0tbG9hZC1tb3JlXCJyb2xlPVwib3B0aW9uXCIgYXJpYS1kaXNhYmxlZD1cInRydWVcIj48L2xpPicpLHQ9dGhpcy5vcHRpb25zLmdldChcInRyYW5zbGF0aW9uc1wiKS5nZXQoXCJsb2FkaW5nTW9yZVwiKTtyZXR1cm4gZS5odG1sKHQodGhpcy5sYXN0UGFyYW1zKSksZX0sZX0pLHUuZGVmaW5lKFwic2VsZWN0Mi9kcm9wZG93bi9hdHRhY2hCb2R5XCIsW1wianF1ZXJ5XCIsXCIuLi91dGlsc1wiXSxmdW5jdGlvbih1LG8pe2Z1bmN0aW9uIGUoZSx0LG4pe3RoaXMuJGRyb3Bkb3duUGFyZW50PXUobi5nZXQoXCJkcm9wZG93blBhcmVudFwiKXx8ZG9jdW1lbnQuYm9keSksZS5jYWxsKHRoaXMsdCxuKX1yZXR1cm4gZS5wcm90b3R5cGUuYmluZD1mdW5jdGlvbihlLHQsbil7dmFyIHM9dGhpcztlLmNhbGwodGhpcyx0LG4pLHQub24oXCJvcGVuXCIsZnVuY3Rpb24oKXtzLl9zaG93RHJvcGRvd24oKSxzLl9hdHRhY2hQb3NpdGlvbmluZ0hhbmRsZXIodCkscy5fYmluZENvbnRhaW5lclJlc3VsdEhhbmRsZXJzKHQpfSksdC5vbihcImNsb3NlXCIsZnVuY3Rpb24oKXtzLl9oaWRlRHJvcGRvd24oKSxzLl9kZXRhY2hQb3NpdGlvbmluZ0hhbmRsZXIodCl9KSx0aGlzLiRkcm9wZG93bkNvbnRhaW5lci5vbihcIm1vdXNlZG93blwiLGZ1bmN0aW9uKGUpe2Uuc3RvcFByb3BhZ2F0aW9uKCl9KX0sZS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbihlKXtlLmNhbGwodGhpcyksdGhpcy4kZHJvcGRvd25Db250YWluZXIucmVtb3ZlKCl9LGUucHJvdG90eXBlLnBvc2l0aW9uPWZ1bmN0aW9uKGUsdCxuKXt0LmF0dHIoXCJjbGFzc1wiLG4uYXR0cihcImNsYXNzXCIpKSx0WzBdLmNsYXNzTGlzdC5yZW1vdmUoXCJzZWxlY3QyXCIpLHRbMF0uY2xhc3NMaXN0LmFkZChcInNlbGVjdDItY29udGFpbmVyLS1vcGVuXCIpLHQuY3NzKHtwb3NpdGlvbjpcImFic29sdXRlXCIsdG9wOi05OTk5OTl9KSx0aGlzLiRjb250YWluZXI9bn0sZS5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKGUpe3ZhciB0PXUoXCI8c3Bhbj48L3NwYW4+XCIpLGU9ZS5jYWxsKHRoaXMpO3JldHVybiB0LmFwcGVuZChlKSx0aGlzLiRkcm9wZG93bkNvbnRhaW5lcj10fSxlLnByb3RvdHlwZS5faGlkZURyb3Bkb3duPWZ1bmN0aW9uKGUpe3RoaXMuJGRyb3Bkb3duQ29udGFpbmVyLmRldGFjaCgpfSxlLnByb3RvdHlwZS5fYmluZENvbnRhaW5lclJlc3VsdEhhbmRsZXJzPWZ1bmN0aW9uKGUsdCl7dmFyIG47dGhpcy5fY29udGFpbmVyUmVzdWx0c0hhbmRsZXJzQm91bmR8fChuPXRoaXMsdC5vbihcInJlc3VsdHM6YWxsXCIsZnVuY3Rpb24oKXtuLl9wb3NpdGlvbkRyb3Bkb3duKCksbi5fcmVzaXplRHJvcGRvd24oKX0pLHQub24oXCJyZXN1bHRzOmFwcGVuZFwiLGZ1bmN0aW9uKCl7bi5fcG9zaXRpb25Ecm9wZG93bigpLG4uX3Jlc2l6ZURyb3Bkb3duKCl9KSx0Lm9uKFwicmVzdWx0czptZXNzYWdlXCIsZnVuY3Rpb24oKXtuLl9wb3NpdGlvbkRyb3Bkb3duKCksbi5fcmVzaXplRHJvcGRvd24oKX0pLHQub24oXCJzZWxlY3RcIixmdW5jdGlvbigpe24uX3Bvc2l0aW9uRHJvcGRvd24oKSxuLl9yZXNpemVEcm9wZG93bigpfSksdC5vbihcInVuc2VsZWN0XCIsZnVuY3Rpb24oKXtuLl9wb3NpdGlvbkRyb3Bkb3duKCksbi5fcmVzaXplRHJvcGRvd24oKX0pLHRoaXMuX2NvbnRhaW5lclJlc3VsdHNIYW5kbGVyc0JvdW5kPSEwKX0sZS5wcm90b3R5cGUuX2F0dGFjaFBvc2l0aW9uaW5nSGFuZGxlcj1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMscz1cInNjcm9sbC5zZWxlY3QyLlwiK3QuaWQsaT1cInJlc2l6ZS5zZWxlY3QyLlwiK3QuaWQscj1cIm9yaWVudGF0aW9uY2hhbmdlLnNlbGVjdDIuXCIrdC5pZCx0PXRoaXMuJGNvbnRhaW5lci5wYXJlbnRzKCkuZmlsdGVyKG8uaGFzU2Nyb2xsKTt0LmVhY2goZnVuY3Rpb24oKXtvLlN0b3JlRGF0YSh0aGlzLFwic2VsZWN0Mi1zY3JvbGwtcG9zaXRpb25cIix7eDp1KHRoaXMpLnNjcm9sbExlZnQoKSx5OnUodGhpcykuc2Nyb2xsVG9wKCl9KX0pLHQub24ocyxmdW5jdGlvbihlKXt2YXIgdD1vLkdldERhdGEodGhpcyxcInNlbGVjdDItc2Nyb2xsLXBvc2l0aW9uXCIpO3UodGhpcykuc2Nyb2xsVG9wKHQueSl9KSx1KHdpbmRvdykub24ocytcIiBcIitpK1wiIFwiK3IsZnVuY3Rpb24oZSl7bi5fcG9zaXRpb25Ecm9wZG93bigpLG4uX3Jlc2l6ZURyb3Bkb3duKCl9KX0sZS5wcm90b3R5cGUuX2RldGFjaFBvc2l0aW9uaW5nSGFuZGxlcj1mdW5jdGlvbihlLHQpe3ZhciBuPVwic2Nyb2xsLnNlbGVjdDIuXCIrdC5pZCxzPVwicmVzaXplLnNlbGVjdDIuXCIrdC5pZCx0PVwib3JpZW50YXRpb25jaGFuZ2Uuc2VsZWN0Mi5cIit0LmlkO3RoaXMuJGNvbnRhaW5lci5wYXJlbnRzKCkuZmlsdGVyKG8uaGFzU2Nyb2xsKS5vZmYobiksdSh3aW5kb3cpLm9mZihuK1wiIFwiK3MrXCIgXCIrdCl9LGUucHJvdG90eXBlLl9wb3NpdGlvbkRyb3Bkb3duPWZ1bmN0aW9uKCl7dmFyIGU9dSh3aW5kb3cpLHQ9dGhpcy4kZHJvcGRvd25bMF0uY2xhc3NMaXN0LmNvbnRhaW5zKFwic2VsZWN0Mi1kcm9wZG93bi0tYWJvdmVcIiksbj10aGlzLiRkcm9wZG93blswXS5jbGFzc0xpc3QuY29udGFpbnMoXCJzZWxlY3QyLWRyb3Bkb3duLS1iZWxvd1wiKSxzPW51bGwsaT10aGlzLiRjb250YWluZXIub2Zmc2V0KCk7aS5ib3R0b209aS50b3ArdGhpcy4kY29udGFpbmVyLm91dGVySGVpZ2h0KCExKTt2YXIgcj17aGVpZ2h0OnRoaXMuJGNvbnRhaW5lci5vdXRlckhlaWdodCghMSl9O3IudG9wPWkudG9wLHIuYm90dG9tPWkudG9wK3IuaGVpZ2h0O3ZhciBvPXRoaXMuJGRyb3Bkb3duLm91dGVySGVpZ2h0KCExKSxhPWUuc2Nyb2xsVG9wKCksbD1lLnNjcm9sbFRvcCgpK2UuaGVpZ2h0KCksYz1hPGkudG9wLW8sZT1sPmkuYm90dG9tK28sYT17bGVmdDppLmxlZnQsdG9wOnIuYm90dG9tfSxsPXRoaXMuJGRyb3Bkb3duUGFyZW50O1wic3RhdGljXCI9PT1sLmNzcyhcInBvc2l0aW9uXCIpJiYobD1sLm9mZnNldFBhcmVudCgpKTtpPXt0b3A6MCxsZWZ0OjB9Oyh1LmNvbnRhaW5zKGRvY3VtZW50LmJvZHksbFswXSl8fGxbMF0uaXNDb25uZWN0ZWQpJiYoaT1sLm9mZnNldCgpKSxhLnRvcC09aS50b3AsYS5sZWZ0LT1pLmxlZnQsdHx8bnx8KHM9XCJiZWxvd1wiKSxlfHwhY3x8dD8hYyYmZSYmdCYmKHM9XCJiZWxvd1wiKTpzPVwiYWJvdmVcIiwoXCJhYm92ZVwiPT1zfHx0JiZcImJlbG93XCIhPT1zKSYmKGEudG9wPXIudG9wLWkudG9wLW8pLG51bGwhPXMmJih0aGlzLiRkcm9wZG93blswXS5jbGFzc0xpc3QucmVtb3ZlKFwic2VsZWN0Mi1kcm9wZG93bi0tYmVsb3dcIiksdGhpcy4kZHJvcGRvd25bMF0uY2xhc3NMaXN0LnJlbW92ZShcInNlbGVjdDItZHJvcGRvd24tLWFib3ZlXCIpLHRoaXMuJGRyb3Bkb3duWzBdLmNsYXNzTGlzdC5hZGQoXCJzZWxlY3QyLWRyb3Bkb3duLS1cIitzKSx0aGlzLiRjb250YWluZXJbMF0uY2xhc3NMaXN0LnJlbW92ZShcInNlbGVjdDItY29udGFpbmVyLS1iZWxvd1wiKSx0aGlzLiRjb250YWluZXJbMF0uY2xhc3NMaXN0LnJlbW92ZShcInNlbGVjdDItY29udGFpbmVyLS1hYm92ZVwiKSx0aGlzLiRjb250YWluZXJbMF0uY2xhc3NMaXN0LmFkZChcInNlbGVjdDItY29udGFpbmVyLS1cIitzKSksdGhpcy4kZHJvcGRvd25Db250YWluZXIuY3NzKGEpfSxlLnByb3RvdHlwZS5fcmVzaXplRHJvcGRvd249ZnVuY3Rpb24oKXt2YXIgZT17d2lkdGg6dGhpcy4kY29udGFpbmVyLm91dGVyV2lkdGgoITEpK1wicHhcIn07dGhpcy5vcHRpb25zLmdldChcImRyb3Bkb3duQXV0b1dpZHRoXCIpJiYoZS5taW5XaWR0aD1lLndpZHRoLGUucG9zaXRpb249XCJyZWxhdGl2ZVwiLGUud2lkdGg9XCJhdXRvXCIpLHRoaXMuJGRyb3Bkb3duLmNzcyhlKX0sZS5wcm90b3R5cGUuX3Nob3dEcm9wZG93bj1mdW5jdGlvbihlKXt0aGlzLiRkcm9wZG93bkNvbnRhaW5lci5hcHBlbmRUbyh0aGlzLiRkcm9wZG93blBhcmVudCksdGhpcy5fcG9zaXRpb25Ecm9wZG93bigpLHRoaXMuX3Jlc2l6ZURyb3Bkb3duKCl9LGV9KSx1LmRlZmluZShcInNlbGVjdDIvZHJvcGRvd24vbWluaW11bVJlc3VsdHNGb3JTZWFyY2hcIixbXSxmdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LG4scyl7dGhpcy5taW5pbXVtUmVzdWx0c0ZvclNlYXJjaD1uLmdldChcIm1pbmltdW1SZXN1bHRzRm9yU2VhcmNoXCIpLHRoaXMubWluaW11bVJlc3VsdHNGb3JTZWFyY2g8MCYmKHRoaXMubWluaW11bVJlc3VsdHNGb3JTZWFyY2g9MS8wKSxlLmNhbGwodGhpcyx0LG4scyl9cmV0dXJuIGUucHJvdG90eXBlLnNob3dTZWFyY2g9ZnVuY3Rpb24oZSx0KXtyZXR1cm4hKGZ1bmN0aW9uIGUodCl7Zm9yKHZhciBuPTAscz0wO3M8dC5sZW5ndGg7cysrKXt2YXIgaT10W3NdO2kuY2hpbGRyZW4/bis9ZShpLmNoaWxkcmVuKTpuKyt9cmV0dXJuIG59KHQuZGF0YS5yZXN1bHRzKTx0aGlzLm1pbmltdW1SZXN1bHRzRm9yU2VhcmNoKSYmZS5jYWxsKHRoaXMsdCl9LGV9KSx1LmRlZmluZShcInNlbGVjdDIvZHJvcGRvd24vc2VsZWN0T25DbG9zZVwiLFtcIi4uL3V0aWxzXCJdLGZ1bmN0aW9uKHMpe2Z1bmN0aW9uIGUoKXt9cmV0dXJuIGUucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciBzPXRoaXM7ZS5jYWxsKHRoaXMsdCxuKSx0Lm9uKFwiY2xvc2VcIixmdW5jdGlvbihlKXtzLl9oYW5kbGVTZWxlY3RPbkNsb3NlKGUpfSl9LGUucHJvdG90eXBlLl9oYW5kbGVTZWxlY3RPbkNsb3NlPWZ1bmN0aW9uKGUsdCl7aWYodCYmbnVsbCE9dC5vcmlnaW5hbFNlbGVjdDJFdmVudCl7dmFyIG49dC5vcmlnaW5hbFNlbGVjdDJFdmVudDtpZihcInNlbGVjdFwiPT09bi5fdHlwZXx8XCJ1bnNlbGVjdFwiPT09bi5fdHlwZSlyZXR1cm59bj10aGlzLmdldEhpZ2hsaWdodGVkUmVzdWx0cygpO24ubGVuZ3RoPDF8fChudWxsIT0obj1zLkdldERhdGEoblswXSxcImRhdGFcIikpLmVsZW1lbnQmJm4uZWxlbWVudC5zZWxlY3RlZHx8bnVsbD09bi5lbGVtZW50JiZuLnNlbGVjdGVkfHx0aGlzLnRyaWdnZXIoXCJzZWxlY3RcIix7ZGF0YTpufSkpfSxlfSksdS5kZWZpbmUoXCJzZWxlY3QyL2Ryb3Bkb3duL2Nsb3NlT25TZWxlY3RcIixbXSxmdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt9cmV0dXJuIGUucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciBzPXRoaXM7ZS5jYWxsKHRoaXMsdCxuKSx0Lm9uKFwic2VsZWN0XCIsZnVuY3Rpb24oZSl7cy5fc2VsZWN0VHJpZ2dlcmVkKGUpfSksdC5vbihcInVuc2VsZWN0XCIsZnVuY3Rpb24oZSl7cy5fc2VsZWN0VHJpZ2dlcmVkKGUpfSl9LGUucHJvdG90eXBlLl9zZWxlY3RUcmlnZ2VyZWQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj10Lm9yaWdpbmFsRXZlbnQ7biYmKG4uY3RybEtleXx8bi5tZXRhS2V5KXx8dGhpcy50cmlnZ2VyKFwiY2xvc2VcIix7b3JpZ2luYWxFdmVudDpuLG9yaWdpbmFsU2VsZWN0MkV2ZW50OnR9KX0sZX0pLHUuZGVmaW5lKFwic2VsZWN0Mi9kcm9wZG93bi9kcm9wZG93bkNzc1wiLFtcIi4uL3V0aWxzXCJdLGZ1bmN0aW9uKG4pe2Z1bmN0aW9uIGUoKXt9cmV0dXJuIGUucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNhbGwodGhpcyksZT10aGlzLm9wdGlvbnMuZ2V0KFwiZHJvcGRvd25Dc3NDbGFzc1wiKXx8XCJcIjtyZXR1cm4tMSE9PWUuaW5kZXhPZihcIjphbGw6XCIpJiYoZT1lLnJlcGxhY2UoXCI6YWxsOlwiLFwiXCIpLG4uY29weU5vbkludGVybmFsQ3NzQ2xhc3Nlcyh0WzBdLHRoaXMuJGVsZW1lbnRbMF0pKSx0LmFkZENsYXNzKGUpLHR9LGV9KSx1LmRlZmluZShcInNlbGVjdDIvZHJvcGRvd24vdGFnc1NlYXJjaEhpZ2hsaWdodFwiLFtcIi4uL3V0aWxzXCJdLGZ1bmN0aW9uKHMpe2Z1bmN0aW9uIGUoKXt9cmV0dXJuIGUucHJvdG90eXBlLmhpZ2hsaWdodEZpcnN0SXRlbT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLiRyZXN1bHRzLmZpbmQoXCIuc2VsZWN0Mi1yZXN1bHRzX19vcHRpb24tLXNlbGVjdGFibGU6bm90KC5zZWxlY3QyLXJlc3VsdHNfX29wdGlvbi0tc2VsZWN0ZWQpXCIpO2lmKDA8dC5sZW5ndGgpe3ZhciBuPXQuZmlyc3QoKSx0PXMuR2V0RGF0YShuWzBdLFwiZGF0YVwiKS5lbGVtZW50O2lmKHQmJnQuZ2V0QXR0cmlidXRlJiZcInRydWVcIj09PXQuZ2V0QXR0cmlidXRlKFwiZGF0YS1zZWxlY3QyLXRhZ1wiKSlyZXR1cm4gdm9pZCBuLnRyaWdnZXIoXCJtb3VzZWVudGVyXCIpfWUuY2FsbCh0aGlzKX0sZX0pLHUuZGVmaW5lKFwic2VsZWN0Mi9pMThuL2VuXCIsW10sZnVuY3Rpb24oKXtyZXR1cm57ZXJyb3JMb2FkaW5nOmZ1bmN0aW9uKCl7cmV0dXJuXCJUaGUgcmVzdWx0cyBjb3VsZCBub3QgYmUgbG9hZGVkLlwifSxpbnB1dFRvb0xvbmc6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5pbnB1dC5sZW5ndGgtZS5tYXhpbXVtLGU9XCJQbGVhc2UgZGVsZXRlIFwiK3QrXCIgY2hhcmFjdGVyXCI7cmV0dXJuIDEhPXQmJihlKz1cInNcIiksZX0saW5wdXRUb29TaG9ydDpmdW5jdGlvbihlKXtyZXR1cm5cIlBsZWFzZSBlbnRlciBcIisoZS5taW5pbXVtLWUuaW5wdXQubGVuZ3RoKStcIiBvciBtb3JlIGNoYXJhY3RlcnNcIn0sbG9hZGluZ01vcmU6ZnVuY3Rpb24oKXtyZXR1cm5cIkxvYWRpbmcgbW9yZSByZXN1bHRz4oCmXCJ9LG1heGltdW1TZWxlY3RlZDpmdW5jdGlvbihlKXt2YXIgdD1cIllvdSBjYW4gb25seSBzZWxlY3QgXCIrZS5tYXhpbXVtK1wiIGl0ZW1cIjtyZXR1cm4gMSE9ZS5tYXhpbXVtJiYodCs9XCJzXCIpLHR9LG5vUmVzdWx0czpmdW5jdGlvbigpe3JldHVyblwiTm8gcmVzdWx0cyBmb3VuZFwifSxzZWFyY2hpbmc6ZnVuY3Rpb24oKXtyZXR1cm5cIlNlYXJjaGluZ+KAplwifSxyZW1vdmVBbGxJdGVtczpmdW5jdGlvbigpe3JldHVyblwiUmVtb3ZlIGFsbCBpdGVtc1wifSxyZW1vdmVJdGVtOmZ1bmN0aW9uKCl7cmV0dXJuXCJSZW1vdmUgaXRlbVwifSxzZWFyY2g6ZnVuY3Rpb24oKXtyZXR1cm5cIlNlYXJjaFwifX19KSx1LmRlZmluZShcInNlbGVjdDIvZGVmYXVsdHNcIixbXCJqcXVlcnlcIixcIi4vcmVzdWx0c1wiLFwiLi9zZWxlY3Rpb24vc2luZ2xlXCIsXCIuL3NlbGVjdGlvbi9tdWx0aXBsZVwiLFwiLi9zZWxlY3Rpb24vcGxhY2Vob2xkZXJcIixcIi4vc2VsZWN0aW9uL2FsbG93Q2xlYXJcIixcIi4vc2VsZWN0aW9uL3NlYXJjaFwiLFwiLi9zZWxlY3Rpb24vc2VsZWN0aW9uQ3NzXCIsXCIuL3NlbGVjdGlvbi9ldmVudFJlbGF5XCIsXCIuL3V0aWxzXCIsXCIuL3RyYW5zbGF0aW9uXCIsXCIuL2RpYWNyaXRpY3NcIixcIi4vZGF0YS9zZWxlY3RcIixcIi4vZGF0YS9hcnJheVwiLFwiLi9kYXRhL2FqYXhcIixcIi4vZGF0YS90YWdzXCIsXCIuL2RhdGEvdG9rZW5pemVyXCIsXCIuL2RhdGEvbWluaW11bUlucHV0TGVuZ3RoXCIsXCIuL2RhdGEvbWF4aW11bUlucHV0TGVuZ3RoXCIsXCIuL2RhdGEvbWF4aW11bVNlbGVjdGlvbkxlbmd0aFwiLFwiLi9kcm9wZG93blwiLFwiLi9kcm9wZG93bi9zZWFyY2hcIixcIi4vZHJvcGRvd24vaGlkZVBsYWNlaG9sZGVyXCIsXCIuL2Ryb3Bkb3duL2luZmluaXRlU2Nyb2xsXCIsXCIuL2Ryb3Bkb3duL2F0dGFjaEJvZHlcIixcIi4vZHJvcGRvd24vbWluaW11bVJlc3VsdHNGb3JTZWFyY2hcIixcIi4vZHJvcGRvd24vc2VsZWN0T25DbG9zZVwiLFwiLi9kcm9wZG93bi9jbG9zZU9uU2VsZWN0XCIsXCIuL2Ryb3Bkb3duL2Ryb3Bkb3duQ3NzXCIsXCIuL2Ryb3Bkb3duL3RhZ3NTZWFyY2hIaWdobGlnaHRcIixcIi4vaTE4bi9lblwiXSxmdW5jdGlvbihsLHIsbyxhLGMsdSxkLHAsaCxmLGcsdCxtLHksdixfLGIsJCx3LHgsQSxELFMsRSxPLEMsTCxULHEsSSxlKXtmdW5jdGlvbiBuKCl7dGhpcy5yZXNldCgpfXJldHVybiBuLnByb3RvdHlwZS5hcHBseT1mdW5jdGlvbihlKXt2YXIgdDtudWxsPT0oZT1sLmV4dGVuZCghMCx7fSx0aGlzLmRlZmF1bHRzLGUpKS5kYXRhQWRhcHRlciYmKG51bGwhPWUuYWpheD9lLmRhdGFBZGFwdGVyPXY6bnVsbCE9ZS5kYXRhP2UuZGF0YUFkYXB0ZXI9eTplLmRhdGFBZGFwdGVyPW0sMDxlLm1pbmltdW1JbnB1dExlbmd0aCYmKGUuZGF0YUFkYXB0ZXI9Zi5EZWNvcmF0ZShlLmRhdGFBZGFwdGVyLCQpKSwwPGUubWF4aW11bUlucHV0TGVuZ3RoJiYoZS5kYXRhQWRhcHRlcj1mLkRlY29yYXRlKGUuZGF0YUFkYXB0ZXIsdykpLDA8ZS5tYXhpbXVtU2VsZWN0aW9uTGVuZ3RoJiYoZS5kYXRhQWRhcHRlcj1mLkRlY29yYXRlKGUuZGF0YUFkYXB0ZXIseCkpLGUudGFncyYmKGUuZGF0YUFkYXB0ZXI9Zi5EZWNvcmF0ZShlLmRhdGFBZGFwdGVyLF8pKSxudWxsPT1lLnRva2VuU2VwYXJhdG9ycyYmbnVsbD09ZS50b2tlbml6ZXJ8fChlLmRhdGFBZGFwdGVyPWYuRGVjb3JhdGUoZS5kYXRhQWRhcHRlcixiKSkpLG51bGw9PWUucmVzdWx0c0FkYXB0ZXImJihlLnJlc3VsdHNBZGFwdGVyPXIsbnVsbCE9ZS5hamF4JiYoZS5yZXN1bHRzQWRhcHRlcj1mLkRlY29yYXRlKGUucmVzdWx0c0FkYXB0ZXIsRSkpLG51bGwhPWUucGxhY2Vob2xkZXImJihlLnJlc3VsdHNBZGFwdGVyPWYuRGVjb3JhdGUoZS5yZXN1bHRzQWRhcHRlcixTKSksZS5zZWxlY3RPbkNsb3NlJiYoZS5yZXN1bHRzQWRhcHRlcj1mLkRlY29yYXRlKGUucmVzdWx0c0FkYXB0ZXIsTCkpLGUudGFncyYmKGUucmVzdWx0c0FkYXB0ZXI9Zi5EZWNvcmF0ZShlLnJlc3VsdHNBZGFwdGVyLEkpKSksbnVsbD09ZS5kcm9wZG93bkFkYXB0ZXImJihlLm11bHRpcGxlP2UuZHJvcGRvd25BZGFwdGVyPUE6KHQ9Zi5EZWNvcmF0ZShBLEQpLGUuZHJvcGRvd25BZGFwdGVyPXQpLDAhPT1lLm1pbmltdW1SZXN1bHRzRm9yU2VhcmNoJiYoZS5kcm9wZG93bkFkYXB0ZXI9Zi5EZWNvcmF0ZShlLmRyb3Bkb3duQWRhcHRlcixDKSksZS5jbG9zZU9uU2VsZWN0JiYoZS5kcm9wZG93bkFkYXB0ZXI9Zi5EZWNvcmF0ZShlLmRyb3Bkb3duQWRhcHRlcixUKSksbnVsbCE9ZS5kcm9wZG93bkNzc0NsYXNzJiYoZS5kcm9wZG93bkFkYXB0ZXI9Zi5EZWNvcmF0ZShlLmRyb3Bkb3duQWRhcHRlcixxKSksZS5kcm9wZG93bkFkYXB0ZXI9Zi5EZWNvcmF0ZShlLmRyb3Bkb3duQWRhcHRlcixPKSksbnVsbD09ZS5zZWxlY3Rpb25BZGFwdGVyJiYoZS5tdWx0aXBsZT9lLnNlbGVjdGlvbkFkYXB0ZXI9YTplLnNlbGVjdGlvbkFkYXB0ZXI9byxudWxsIT1lLnBsYWNlaG9sZGVyJiYoZS5zZWxlY3Rpb25BZGFwdGVyPWYuRGVjb3JhdGUoZS5zZWxlY3Rpb25BZGFwdGVyLGMpKSxlLmFsbG93Q2xlYXImJihlLnNlbGVjdGlvbkFkYXB0ZXI9Zi5EZWNvcmF0ZShlLnNlbGVjdGlvbkFkYXB0ZXIsdSkpLGUubXVsdGlwbGUmJihlLnNlbGVjdGlvbkFkYXB0ZXI9Zi5EZWNvcmF0ZShlLnNlbGVjdGlvbkFkYXB0ZXIsZCkpLG51bGwhPWUuc2VsZWN0aW9uQ3NzQ2xhc3MmJihlLnNlbGVjdGlvbkFkYXB0ZXI9Zi5EZWNvcmF0ZShlLnNlbGVjdGlvbkFkYXB0ZXIscCkpLGUuc2VsZWN0aW9uQWRhcHRlcj1mLkRlY29yYXRlKGUuc2VsZWN0aW9uQWRhcHRlcixoKSksZS5sYW5ndWFnZT10aGlzLl9yZXNvbHZlTGFuZ3VhZ2UoZS5sYW5ndWFnZSksZS5sYW5ndWFnZS5wdXNoKFwiZW5cIik7Zm9yKHZhciBuPVtdLHM9MDtzPGUubGFuZ3VhZ2UubGVuZ3RoO3MrKyl7dmFyIGk9ZS5sYW5ndWFnZVtzXTstMT09PW4uaW5kZXhPZihpKSYmbi5wdXNoKGkpfXJldHVybiBlLmxhbmd1YWdlPW4sZS50cmFuc2xhdGlvbnM9dGhpcy5fcHJvY2Vzc1RyYW5zbGF0aW9ucyhlLmxhbmd1YWdlLGUuZGVidWcpLGV9LG4ucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShlKXtyZXR1cm4gZS5yZXBsYWNlKC9bXlxcdTAwMDAtXFx1MDA3RV0vZyxmdW5jdGlvbihlKXtyZXR1cm4gdFtlXXx8ZX0pfXRoaXMuZGVmYXVsdHM9e2FtZExhbmd1YWdlQmFzZTpcIi4vaTE4bi9cIixhdXRvY29tcGxldGU6XCJvZmZcIixjbG9zZU9uU2VsZWN0OiEwLGRlYnVnOiExLGRyb3Bkb3duQXV0b1dpZHRoOiExLGVzY2FwZU1hcmt1cDpmLmVzY2FwZU1hcmt1cCxsYW5ndWFnZTp7fSxtYXRjaGVyOmZ1bmN0aW9uIGUodCxuKXtpZihudWxsPT10LnRlcm18fFwiXCI9PT10LnRlcm0udHJpbSgpKXJldHVybiBuO2lmKG4uY2hpbGRyZW4mJjA8bi5jaGlsZHJlbi5sZW5ndGgpe2Zvcih2YXIgcz1sLmV4dGVuZCghMCx7fSxuKSxpPW4uY2hpbGRyZW4ubGVuZ3RoLTE7MDw9aTtpLS0pbnVsbD09ZSh0LG4uY2hpbGRyZW5baV0pJiZzLmNoaWxkcmVuLnNwbGljZShpLDEpO3JldHVybiAwPHMuY2hpbGRyZW4ubGVuZ3RoP3M6ZSh0LHMpfXZhciByPWEobi50ZXh0KS50b1VwcGVyQ2FzZSgpLG89YSh0LnRlcm0pLnRvVXBwZXJDYXNlKCk7cmV0dXJuLTE8ci5pbmRleE9mKG8pP246bnVsbH0sbWluaW11bUlucHV0TGVuZ3RoOjAsbWF4aW11bUlucHV0TGVuZ3RoOjAsbWF4aW11bVNlbGVjdGlvbkxlbmd0aDowLG1pbmltdW1SZXN1bHRzRm9yU2VhcmNoOjAsc2VsZWN0T25DbG9zZTohMSxzY3JvbGxBZnRlclNlbGVjdDohMSxzb3J0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LHRlbXBsYXRlUmVzdWx0OmZ1bmN0aW9uKGUpe3JldHVybiBlLnRleHR9LHRlbXBsYXRlU2VsZWN0aW9uOmZ1bmN0aW9uKGUpe3JldHVybiBlLnRleHR9LHRoZW1lOlwiZGVmYXVsdFwiLHdpZHRoOlwicmVzb2x2ZVwifX0sbi5wcm90b3R5cGUuYXBwbHlGcm9tRWxlbWVudD1mdW5jdGlvbihlLHQpe3ZhciBuPWUubGFuZ3VhZ2Uscz10aGlzLmRlZmF1bHRzLmxhbmd1YWdlLGk9dC5wcm9wKFwibGFuZ1wiKSx0PXQuY2xvc2VzdChcIltsYW5nXVwiKS5wcm9wKFwibGFuZ1wiKSx0PUFycmF5LnByb3RvdHlwZS5jb25jYXQuY2FsbCh0aGlzLl9yZXNvbHZlTGFuZ3VhZ2UoaSksdGhpcy5fcmVzb2x2ZUxhbmd1YWdlKG4pLHRoaXMuX3Jlc29sdmVMYW5ndWFnZShzKSx0aGlzLl9yZXNvbHZlTGFuZ3VhZ2UodCkpO3JldHVybiBlLmxhbmd1YWdlPXQsZX0sbi5wcm90b3R5cGUuX3Jlc29sdmVMYW5ndWFnZT1mdW5jdGlvbihlKXtpZighZSlyZXR1cm5bXTtpZihsLmlzRW1wdHlPYmplY3QoZSkpcmV0dXJuW107aWYobC5pc1BsYWluT2JqZWN0KGUpKXJldHVybltlXTtmb3IodmFyIHQsbj1BcnJheS5pc0FycmF5KGUpP2U6W2VdLHM9W10saT0wO2k8bi5sZW5ndGg7aSsrKXMucHVzaChuW2ldKSxcInN0cmluZ1wiPT10eXBlb2YgbltpXSYmMDxuW2ldLmluZGV4T2YoXCItXCIpJiYodD1uW2ldLnNwbGl0KFwiLVwiKVswXSxzLnB1c2godCkpO3JldHVybiBzfSxuLnByb3RvdHlwZS5fcHJvY2Vzc1RyYW5zbGF0aW9ucz1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj1uZXcgZyxzPTA7czxlLmxlbmd0aDtzKyspe3ZhciBpPW5ldyBnLHI9ZVtzXTtpZihcInN0cmluZ1wiPT10eXBlb2Ygcil0cnl7aT1nLmxvYWRQYXRoKHIpfWNhdGNoKGUpe3RyeXtyPXRoaXMuZGVmYXVsdHMuYW1kTGFuZ3VhZ2VCYXNlK3IsaT1nLmxvYWRQYXRoKHIpfWNhdGNoKGUpe3QmJndpbmRvdy5jb25zb2xlJiZjb25zb2xlLndhcm4mJmNvbnNvbGUud2FybignU2VsZWN0MjogVGhlIGxhbmd1YWdlIGZpbGUgZm9yIFwiJytyKydcIiBjb3VsZCBub3QgYmUgYXV0b21hdGljYWxseSBsb2FkZWQuIEEgZmFsbGJhY2sgd2lsbCBiZSB1c2VkIGluc3RlYWQuJyl9fWVsc2UgaT1sLmlzUGxhaW5PYmplY3Qocik/bmV3IGcocik6cjtuLmV4dGVuZChpKX1yZXR1cm4gbn0sbi5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGUsdCl7dmFyIG49e307bltsLmNhbWVsQ2FzZShlKV09dDtuPWYuX2NvbnZlcnREYXRhKG4pO2wuZXh0ZW5kKCEwLHRoaXMuZGVmYXVsdHMsbil9LG5ldyBufSksdS5kZWZpbmUoXCJzZWxlY3QyL29wdGlvbnNcIixbXCJqcXVlcnlcIixcIi4vZGVmYXVsdHNcIixcIi4vdXRpbHNcIl0sZnVuY3Rpb24oYyxuLHUpe2Z1bmN0aW9uIGUoZSx0KXt0aGlzLm9wdGlvbnM9ZSxudWxsIT10JiZ0aGlzLmZyb21FbGVtZW50KHQpLG51bGwhPXQmJih0aGlzLm9wdGlvbnM9bi5hcHBseUZyb21FbGVtZW50KHRoaXMub3B0aW9ucyx0KSksdGhpcy5vcHRpb25zPW4uYXBwbHkodGhpcy5vcHRpb25zKX1yZXR1cm4gZS5wcm90b3R5cGUuZnJvbUVsZW1lbnQ9ZnVuY3Rpb24oZSl7dmFyIHQ9W1wic2VsZWN0MlwiXTtudWxsPT10aGlzLm9wdGlvbnMubXVsdGlwbGUmJih0aGlzLm9wdGlvbnMubXVsdGlwbGU9ZS5wcm9wKFwibXVsdGlwbGVcIikpLG51bGw9PXRoaXMub3B0aW9ucy5kaXNhYmxlZCYmKHRoaXMub3B0aW9ucy5kaXNhYmxlZD1lLnByb3AoXCJkaXNhYmxlZFwiKSksbnVsbD09dGhpcy5vcHRpb25zLmF1dG9jb21wbGV0ZSYmZS5wcm9wKFwiYXV0b2NvbXBsZXRlXCIpJiYodGhpcy5vcHRpb25zLmF1dG9jb21wbGV0ZT1lLnByb3AoXCJhdXRvY29tcGxldGVcIikpLG51bGw9PXRoaXMub3B0aW9ucy5kaXImJihlLnByb3AoXCJkaXJcIik/dGhpcy5vcHRpb25zLmRpcj1lLnByb3AoXCJkaXJcIik6ZS5jbG9zZXN0KFwiW2Rpcl1cIikucHJvcChcImRpclwiKT90aGlzLm9wdGlvbnMuZGlyPWUuY2xvc2VzdChcIltkaXJdXCIpLnByb3AoXCJkaXJcIik6dGhpcy5vcHRpb25zLmRpcj1cImx0clwiKSxlLnByb3AoXCJkaXNhYmxlZFwiLHRoaXMub3B0aW9ucy5kaXNhYmxlZCksZS5wcm9wKFwibXVsdGlwbGVcIix0aGlzLm9wdGlvbnMubXVsdGlwbGUpLHUuR2V0RGF0YShlWzBdLFwic2VsZWN0MlRhZ3NcIikmJih0aGlzLm9wdGlvbnMuZGVidWcmJndpbmRvdy5jb25zb2xlJiZjb25zb2xlLndhcm4mJmNvbnNvbGUud2FybignU2VsZWN0MjogVGhlIGBkYXRhLXNlbGVjdDItdGFnc2AgYXR0cmlidXRlIGhhcyBiZWVuIGNoYW5nZWQgdG8gdXNlIHRoZSBgZGF0YS1kYXRhYCBhbmQgYGRhdGEtdGFncz1cInRydWVcImAgYXR0cmlidXRlcyBhbmQgd2lsbCBiZSByZW1vdmVkIGluIGZ1dHVyZSB2ZXJzaW9ucyBvZiBTZWxlY3QyLicpLHUuU3RvcmVEYXRhKGVbMF0sXCJkYXRhXCIsdS5HZXREYXRhKGVbMF0sXCJzZWxlY3QyVGFnc1wiKSksdS5TdG9yZURhdGEoZVswXSxcInRhZ3NcIiwhMCkpLHUuR2V0RGF0YShlWzBdLFwiYWpheFVybFwiKSYmKHRoaXMub3B0aW9ucy5kZWJ1ZyYmd2luZG93LmNvbnNvbGUmJmNvbnNvbGUud2FybiYmY29uc29sZS53YXJuKFwiU2VsZWN0MjogVGhlIGBkYXRhLWFqYXgtdXJsYCBhdHRyaWJ1dGUgaGFzIGJlZW4gY2hhbmdlZCB0byBgZGF0YS1hamF4LS11cmxgIGFuZCBzdXBwb3J0IGZvciB0aGUgb2xkIGF0dHJpYnV0ZSB3aWxsIGJlIHJlbW92ZWQgaW4gZnV0dXJlIHZlcnNpb25zIG9mIFNlbGVjdDIuXCIpLGUuYXR0cihcImFqYXgtLXVybFwiLHUuR2V0RGF0YShlWzBdLFwiYWpheFVybFwiKSksdS5TdG9yZURhdGEoZVswXSxcImFqYXgtVXJsXCIsdS5HZXREYXRhKGVbMF0sXCJhamF4VXJsXCIpKSk7dmFyIG49e307ZnVuY3Rpb24gcyhlLHQpe3JldHVybiB0LnRvVXBwZXJDYXNlKCl9Zm9yKHZhciBpPTA7aTxlWzBdLmF0dHJpYnV0ZXMubGVuZ3RoO2krKyl7dmFyIHI9ZVswXS5hdHRyaWJ1dGVzW2ldLm5hbWUsbz1cImRhdGEtXCI7ci5zdWJzdHIoMCxvLmxlbmd0aCk9PW8mJihyPXIuc3Vic3RyaW5nKG8ubGVuZ3RoKSxvPXUuR2V0RGF0YShlWzBdLHIpLG5bci5yZXBsYWNlKC8tKFthLXpdKS9nLHMpXT1vKX1jLmZuLmpxdWVyeSYmXCIxLlwiPT1jLmZuLmpxdWVyeS5zdWJzdHIoMCwyKSYmZVswXS5kYXRhc2V0JiYobj1jLmV4dGVuZCghMCx7fSxlWzBdLmRhdGFzZXQsbikpO3ZhciBhLGw9Yy5leHRlbmQoITAse30sdS5HZXREYXRhKGVbMF0pLG4pO2ZvcihhIGluIGw9dS5fY29udmVydERhdGEobCkpLTE8dC5pbmRleE9mKGEpfHwoYy5pc1BsYWluT2JqZWN0KHRoaXMub3B0aW9uc1thXSk/Yy5leHRlbmQodGhpcy5vcHRpb25zW2FdLGxbYV0pOnRoaXMub3B0aW9uc1thXT1sW2FdKTtyZXR1cm4gdGhpc30sZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLm9wdGlvbnNbZV19LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbihlLHQpe3RoaXMub3B0aW9uc1tlXT10fSxlfSksdS5kZWZpbmUoXCJzZWxlY3QyL2NvcmVcIixbXCJqcXVlcnlcIixcIi4vb3B0aW9uc1wiLFwiLi91dGlsc1wiLFwiLi9rZXlzXCJdLGZ1bmN0aW9uKHQsaSxyLHMpe3ZhciBvPWZ1bmN0aW9uKGUsdCl7bnVsbCE9ci5HZXREYXRhKGVbMF0sXCJzZWxlY3QyXCIpJiZyLkdldERhdGEoZVswXSxcInNlbGVjdDJcIikuZGVzdHJveSgpLHRoaXMuJGVsZW1lbnQ9ZSx0aGlzLmlkPXRoaXMuX2dlbmVyYXRlSWQoZSksdD10fHx7fSx0aGlzLm9wdGlvbnM9bmV3IGkodCxlKSxvLl9fc3VwZXJfXy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMpO3ZhciBuPWUuYXR0cihcInRhYmluZGV4XCIpfHwwO3IuU3RvcmVEYXRhKGVbMF0sXCJvbGQtdGFiaW5kZXhcIixuKSxlLmF0dHIoXCJ0YWJpbmRleFwiLFwiLTFcIik7dD10aGlzLm9wdGlvbnMuZ2V0KFwiZGF0YUFkYXB0ZXJcIik7dGhpcy5kYXRhQWRhcHRlcj1uZXcgdChlLHRoaXMub3B0aW9ucyk7bj10aGlzLnJlbmRlcigpO3RoaXMuX3BsYWNlQ29udGFpbmVyKG4pO3Q9dGhpcy5vcHRpb25zLmdldChcInNlbGVjdGlvbkFkYXB0ZXJcIik7dGhpcy5zZWxlY3Rpb249bmV3IHQoZSx0aGlzLm9wdGlvbnMpLHRoaXMuJHNlbGVjdGlvbj10aGlzLnNlbGVjdGlvbi5yZW5kZXIoKSx0aGlzLnNlbGVjdGlvbi5wb3NpdGlvbih0aGlzLiRzZWxlY3Rpb24sbik7dD10aGlzLm9wdGlvbnMuZ2V0KFwiZHJvcGRvd25BZGFwdGVyXCIpO3RoaXMuZHJvcGRvd249bmV3IHQoZSx0aGlzLm9wdGlvbnMpLHRoaXMuJGRyb3Bkb3duPXRoaXMuZHJvcGRvd24ucmVuZGVyKCksdGhpcy5kcm9wZG93bi5wb3NpdGlvbih0aGlzLiRkcm9wZG93bixuKTtuPXRoaXMub3B0aW9ucy5nZXQoXCJyZXN1bHRzQWRhcHRlclwiKTt0aGlzLnJlc3VsdHM9bmV3IG4oZSx0aGlzLm9wdGlvbnMsdGhpcy5kYXRhQWRhcHRlciksdGhpcy4kcmVzdWx0cz10aGlzLnJlc3VsdHMucmVuZGVyKCksdGhpcy5yZXN1bHRzLnBvc2l0aW9uKHRoaXMuJHJlc3VsdHMsdGhpcy4kZHJvcGRvd24pO3ZhciBzPXRoaXM7dGhpcy5fYmluZEFkYXB0ZXJzKCksdGhpcy5fcmVnaXN0ZXJEb21FdmVudHMoKSx0aGlzLl9yZWdpc3RlckRhdGFFdmVudHMoKSx0aGlzLl9yZWdpc3RlclNlbGVjdGlvbkV2ZW50cygpLHRoaXMuX3JlZ2lzdGVyRHJvcGRvd25FdmVudHMoKSx0aGlzLl9yZWdpc3RlclJlc3VsdHNFdmVudHMoKSx0aGlzLl9yZWdpc3RlckV2ZW50cygpLHRoaXMuZGF0YUFkYXB0ZXIuY3VycmVudChmdW5jdGlvbihlKXtzLnRyaWdnZXIoXCJzZWxlY3Rpb246dXBkYXRlXCIse2RhdGE6ZX0pfSksZVswXS5jbGFzc0xpc3QuYWRkKFwic2VsZWN0Mi1oaWRkZW4tYWNjZXNzaWJsZVwiKSxlLmF0dHIoXCJhcmlhLWhpZGRlblwiLFwidHJ1ZVwiKSx0aGlzLl9zeW5jQXR0cmlidXRlcygpLHIuU3RvcmVEYXRhKGVbMF0sXCJzZWxlY3QyXCIsdGhpcyksZS5kYXRhKFwic2VsZWN0MlwiLHRoaXMpfTtyZXR1cm4gci5FeHRlbmQobyxyLk9ic2VydmFibGUpLG8ucHJvdG90eXBlLl9nZW5lcmF0ZUlkPWZ1bmN0aW9uKGUpe3JldHVyblwic2VsZWN0Mi1cIisobnVsbCE9ZS5hdHRyKFwiaWRcIik/ZS5hdHRyKFwiaWRcIik6bnVsbCE9ZS5hdHRyKFwibmFtZVwiKT9lLmF0dHIoXCJuYW1lXCIpK1wiLVwiK3IuZ2VuZXJhdGVDaGFycygyKTpyLmdlbmVyYXRlQ2hhcnMoNCkpLnJlcGxhY2UoLyg6fFxcLnxcXFt8XFxdfCwpL2csXCJcIil9LG8ucHJvdG90eXBlLl9wbGFjZUNvbnRhaW5lcj1mdW5jdGlvbihlKXtlLmluc2VydEFmdGVyKHRoaXMuJGVsZW1lbnQpO3ZhciB0PXRoaXMuX3Jlc29sdmVXaWR0aCh0aGlzLiRlbGVtZW50LHRoaXMub3B0aW9ucy5nZXQoXCJ3aWR0aFwiKSk7bnVsbCE9dCYmZS5jc3MoXCJ3aWR0aFwiLHQpfSxvLnByb3RvdHlwZS5fcmVzb2x2ZVdpZHRoPWZ1bmN0aW9uKGUsdCl7dmFyIG49L153aWR0aDooKFstK10/KFswLTldKlxcLik/WzAtOV0rKShweHxlbXxleHwlfGlufGNtfG1tfHB0fHBjKSkvaTtpZihcInJlc29sdmVcIj09dCl7dmFyIHM9dGhpcy5fcmVzb2x2ZVdpZHRoKGUsXCJzdHlsZVwiKTtyZXR1cm4gbnVsbCE9cz9zOnRoaXMuX3Jlc29sdmVXaWR0aChlLFwiZWxlbWVudFwiKX1pZihcImVsZW1lbnRcIj09dCl7cz1lLm91dGVyV2lkdGgoITEpO3JldHVybiBzPD0wP1wiYXV0b1wiOnMrXCJweFwifWlmKFwic3R5bGVcIiE9dClyZXR1cm5cImNvbXB1dGVkc3R5bGVcIiE9dD90OndpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVbMF0pLndpZHRoO2U9ZS5hdHRyKFwic3R5bGVcIik7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIGUpcmV0dXJuIG51bGw7Zm9yKHZhciBpPWUuc3BsaXQoXCI7XCIpLHI9MCxvPWkubGVuZ3RoO3I8bztyKz0xKXt2YXIgYT1pW3JdLnJlcGxhY2UoL1xccy9nLFwiXCIpLm1hdGNoKG4pO2lmKG51bGwhPT1hJiYxPD1hLmxlbmd0aClyZXR1cm4gYVsxXX1yZXR1cm4gbnVsbH0sby5wcm90b3R5cGUuX2JpbmRBZGFwdGVycz1mdW5jdGlvbigpe3RoaXMuZGF0YUFkYXB0ZXIuYmluZCh0aGlzLHRoaXMuJGNvbnRhaW5lciksdGhpcy5zZWxlY3Rpb24uYmluZCh0aGlzLHRoaXMuJGNvbnRhaW5lciksdGhpcy5kcm9wZG93bi5iaW5kKHRoaXMsdGhpcy4kY29udGFpbmVyKSx0aGlzLnJlc3VsdHMuYmluZCh0aGlzLHRoaXMuJGNvbnRhaW5lcil9LG8ucHJvdG90eXBlLl9yZWdpc3RlckRvbUV2ZW50cz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy4kZWxlbWVudC5vbihcImNoYW5nZS5zZWxlY3QyXCIsZnVuY3Rpb24oKXt0LmRhdGFBZGFwdGVyLmN1cnJlbnQoZnVuY3Rpb24oZSl7dC50cmlnZ2VyKFwic2VsZWN0aW9uOnVwZGF0ZVwiLHtkYXRhOmV9KX0pfSksdGhpcy4kZWxlbWVudC5vbihcImZvY3VzLnNlbGVjdDJcIixmdW5jdGlvbihlKXt0LnRyaWdnZXIoXCJmb2N1c1wiLGUpfSksdGhpcy5fc3luY0E9ci5iaW5kKHRoaXMuX3N5bmNBdHRyaWJ1dGVzLHRoaXMpLHRoaXMuX3N5bmNTPXIuYmluZCh0aGlzLl9zeW5jU3VidHJlZSx0aGlzKSx0aGlzLl9vYnNlcnZlcj1uZXcgd2luZG93Lk11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24oZSl7dC5fc3luY0EoKSx0Ll9zeW5jUyhlKX0pLHRoaXMuX29ic2VydmVyLm9ic2VydmUodGhpcy4kZWxlbWVudFswXSx7YXR0cmlidXRlczohMCxjaGlsZExpc3Q6ITAsc3VidHJlZTohMX0pfSxvLnByb3RvdHlwZS5fcmVnaXN0ZXJEYXRhRXZlbnRzPWZ1bmN0aW9uKCl7dmFyIG49dGhpczt0aGlzLmRhdGFBZGFwdGVyLm9uKFwiKlwiLGZ1bmN0aW9uKGUsdCl7bi50cmlnZ2VyKGUsdCl9KX0sby5wcm90b3R5cGUuX3JlZ2lzdGVyU2VsZWN0aW9uRXZlbnRzPWZ1bmN0aW9uKCl7dmFyIG49dGhpcyxzPVtcInRvZ2dsZVwiLFwiZm9jdXNcIl07dGhpcy5zZWxlY3Rpb24ub24oXCJ0b2dnbGVcIixmdW5jdGlvbigpe24udG9nZ2xlRHJvcGRvd24oKX0pLHRoaXMuc2VsZWN0aW9uLm9uKFwiZm9jdXNcIixmdW5jdGlvbihlKXtuLmZvY3VzKGUpfSksdGhpcy5zZWxlY3Rpb24ub24oXCIqXCIsZnVuY3Rpb24oZSx0KXstMT09PXMuaW5kZXhPZihlKSYmbi50cmlnZ2VyKGUsdCl9KX0sby5wcm90b3R5cGUuX3JlZ2lzdGVyRHJvcGRvd25FdmVudHM9ZnVuY3Rpb24oKXt2YXIgbj10aGlzO3RoaXMuZHJvcGRvd24ub24oXCIqXCIsZnVuY3Rpb24oZSx0KXtuLnRyaWdnZXIoZSx0KX0pfSxvLnByb3RvdHlwZS5fcmVnaXN0ZXJSZXN1bHRzRXZlbnRzPWZ1bmN0aW9uKCl7dmFyIG49dGhpczt0aGlzLnJlc3VsdHMub24oXCIqXCIsZnVuY3Rpb24oZSx0KXtuLnRyaWdnZXIoZSx0KX0pfSxvLnByb3RvdHlwZS5fcmVnaXN0ZXJFdmVudHM9ZnVuY3Rpb24oKXt2YXIgbj10aGlzO3RoaXMub24oXCJvcGVuXCIsZnVuY3Rpb24oKXtuLiRjb250YWluZXJbMF0uY2xhc3NMaXN0LmFkZChcInNlbGVjdDItY29udGFpbmVyLS1vcGVuXCIpfSksdGhpcy5vbihcImNsb3NlXCIsZnVuY3Rpb24oKXtuLiRjb250YWluZXJbMF0uY2xhc3NMaXN0LnJlbW92ZShcInNlbGVjdDItY29udGFpbmVyLS1vcGVuXCIpfSksdGhpcy5vbihcImVuYWJsZVwiLGZ1bmN0aW9uKCl7bi4kY29udGFpbmVyWzBdLmNsYXNzTGlzdC5yZW1vdmUoXCJzZWxlY3QyLWNvbnRhaW5lci0tZGlzYWJsZWRcIil9KSx0aGlzLm9uKFwiZGlzYWJsZVwiLGZ1bmN0aW9uKCl7bi4kY29udGFpbmVyWzBdLmNsYXNzTGlzdC5hZGQoXCJzZWxlY3QyLWNvbnRhaW5lci0tZGlzYWJsZWRcIil9KSx0aGlzLm9uKFwiYmx1clwiLGZ1bmN0aW9uKCl7bi4kY29udGFpbmVyWzBdLmNsYXNzTGlzdC5yZW1vdmUoXCJzZWxlY3QyLWNvbnRhaW5lci0tZm9jdXNcIil9KSx0aGlzLm9uKFwicXVlcnlcIixmdW5jdGlvbih0KXtuLmlzT3BlbigpfHxuLnRyaWdnZXIoXCJvcGVuXCIse30pLHRoaXMuZGF0YUFkYXB0ZXIucXVlcnkodCxmdW5jdGlvbihlKXtuLnRyaWdnZXIoXCJyZXN1bHRzOmFsbFwiLHtkYXRhOmUscXVlcnk6dH0pfSl9KSx0aGlzLm9uKFwicXVlcnk6YXBwZW5kXCIsZnVuY3Rpb24odCl7dGhpcy5kYXRhQWRhcHRlci5xdWVyeSh0LGZ1bmN0aW9uKGUpe24udHJpZ2dlcihcInJlc3VsdHM6YXBwZW5kXCIse2RhdGE6ZSxxdWVyeTp0fSl9KX0pLHRoaXMub24oXCJrZXlwcmVzc1wiLGZ1bmN0aW9uKGUpe3ZhciB0PWUud2hpY2g7bi5pc09wZW4oKT90PT09cy5FU0N8fHQ9PT1zLlVQJiZlLmFsdEtleT8obi5jbG9zZShlKSxlLnByZXZlbnREZWZhdWx0KCkpOnQ9PT1zLkVOVEVSfHx0PT09cy5UQUI/KG4udHJpZ2dlcihcInJlc3VsdHM6c2VsZWN0XCIse30pLGUucHJldmVudERlZmF1bHQoKSk6dD09PXMuU1BBQ0UmJmUuY3RybEtleT8obi50cmlnZ2VyKFwicmVzdWx0czp0b2dnbGVcIix7fSksZS5wcmV2ZW50RGVmYXVsdCgpKTp0PT09cy5VUD8obi50cmlnZ2VyKFwicmVzdWx0czpwcmV2aW91c1wiLHt9KSxlLnByZXZlbnREZWZhdWx0KCkpOnQ9PT1zLkRPV04mJihuLnRyaWdnZXIoXCJyZXN1bHRzOm5leHRcIix7fSksZS5wcmV2ZW50RGVmYXVsdCgpKToodD09PXMuRU5URVJ8fHQ9PT1zLlNQQUNFfHx0PT09cy5ET1dOJiZlLmFsdEtleSkmJihuLm9wZW4oKSxlLnByZXZlbnREZWZhdWx0KCkpfSl9LG8ucHJvdG90eXBlLl9zeW5jQXR0cmlidXRlcz1mdW5jdGlvbigpe3RoaXMub3B0aW9ucy5zZXQoXCJkaXNhYmxlZFwiLHRoaXMuJGVsZW1lbnQucHJvcChcImRpc2FibGVkXCIpKSx0aGlzLmlzRGlzYWJsZWQoKT8odGhpcy5pc09wZW4oKSYmdGhpcy5jbG9zZSgpLHRoaXMudHJpZ2dlcihcImRpc2FibGVcIix7fSkpOnRoaXMudHJpZ2dlcihcImVuYWJsZVwiLHt9KX0sby5wcm90b3R5cGUuX2lzQ2hhbmdlTXV0YXRpb249ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztpZihlLmFkZGVkTm9kZXMmJjA8ZS5hZGRlZE5vZGVzLmxlbmd0aCl7Zm9yKHZhciBuPTA7bjxlLmFkZGVkTm9kZXMubGVuZ3RoO24rKylpZihlLmFkZGVkTm9kZXNbbl0uc2VsZWN0ZWQpcmV0dXJuITB9ZWxzZXtpZihlLnJlbW92ZWROb2RlcyYmMDxlLnJlbW92ZWROb2Rlcy5sZW5ndGgpcmV0dXJuITA7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZS5zb21lKGZ1bmN0aW9uKGUpe3JldHVybiB0Ll9pc0NoYW5nZU11dGF0aW9uKGUpfSl9cmV0dXJuITF9LG8ucHJvdG90eXBlLl9zeW5jU3VidHJlZT1mdW5jdGlvbihlKXt2YXIgZT10aGlzLl9pc0NoYW5nZU11dGF0aW9uKGUpLHQ9dGhpcztlJiZ0aGlzLmRhdGFBZGFwdGVyLmN1cnJlbnQoZnVuY3Rpb24oZSl7dC50cmlnZ2VyKFwic2VsZWN0aW9uOnVwZGF0ZVwiLHtkYXRhOmV9KX0pfSxvLnByb3RvdHlwZS50cmlnZ2VyPWZ1bmN0aW9uKGUsdCl7dmFyIG49by5fX3N1cGVyX18udHJpZ2dlcixzPXtvcGVuOlwib3BlbmluZ1wiLGNsb3NlOlwiY2xvc2luZ1wiLHNlbGVjdDpcInNlbGVjdGluZ1wiLHVuc2VsZWN0OlwidW5zZWxlY3RpbmdcIixjbGVhcjpcImNsZWFyaW5nXCJ9O2lmKHZvaWQgMD09PXQmJih0PXt9KSxlIGluIHMpe3ZhciBpPXNbZV0scz17cHJldmVudGVkOiExLG5hbWU6ZSxhcmdzOnR9O2lmKG4uY2FsbCh0aGlzLGkscykscy5wcmV2ZW50ZWQpcmV0dXJuIHZvaWQodC5wcmV2ZW50ZWQ9ITApfW4uY2FsbCh0aGlzLGUsdCl9LG8ucHJvdG90eXBlLnRvZ2dsZURyb3Bkb3duPWZ1bmN0aW9uKCl7dGhpcy5pc0Rpc2FibGVkKCl8fCh0aGlzLmlzT3BlbigpP3RoaXMuY2xvc2UoKTp0aGlzLm9wZW4oKSl9LG8ucHJvdG90eXBlLm9wZW49ZnVuY3Rpb24oKXt0aGlzLmlzT3BlbigpfHx0aGlzLmlzRGlzYWJsZWQoKXx8dGhpcy50cmlnZ2VyKFwicXVlcnlcIix7fSl9LG8ucHJvdG90eXBlLmNsb3NlPWZ1bmN0aW9uKGUpe3RoaXMuaXNPcGVuKCkmJnRoaXMudHJpZ2dlcihcImNsb3NlXCIse29yaWdpbmFsRXZlbnQ6ZX0pfSxvLnByb3RvdHlwZS5pc0VuYWJsZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5pc0Rpc2FibGVkKCl9LG8ucHJvdG90eXBlLmlzRGlzYWJsZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25zLmdldChcImRpc2FibGVkXCIpfSxvLnByb3RvdHlwZS5pc09wZW49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kY29udGFpbmVyWzBdLmNsYXNzTGlzdC5jb250YWlucyhcInNlbGVjdDItY29udGFpbmVyLS1vcGVuXCIpfSxvLnByb3RvdHlwZS5oYXNGb2N1cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRjb250YWluZXJbMF0uY2xhc3NMaXN0LmNvbnRhaW5zKFwic2VsZWN0Mi1jb250YWluZXItLWZvY3VzXCIpfSxvLnByb3RvdHlwZS5mb2N1cz1mdW5jdGlvbihlKXt0aGlzLmhhc0ZvY3VzKCl8fCh0aGlzLiRjb250YWluZXJbMF0uY2xhc3NMaXN0LmFkZChcInNlbGVjdDItY29udGFpbmVyLS1mb2N1c1wiKSx0aGlzLnRyaWdnZXIoXCJmb2N1c1wiLHt9KSl9LG8ucHJvdG90eXBlLmVuYWJsZT1mdW5jdGlvbihlKXt0aGlzLm9wdGlvbnMuZ2V0KFwiZGVidWdcIikmJndpbmRvdy5jb25zb2xlJiZjb25zb2xlLndhcm4mJmNvbnNvbGUud2FybignU2VsZWN0MjogVGhlIGBzZWxlY3QyKFwiZW5hYmxlXCIpYCBtZXRob2QgaGFzIGJlZW4gZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIGxhdGVyIFNlbGVjdDIgdmVyc2lvbnMuIFVzZSAkZWxlbWVudC5wcm9wKFwiZGlzYWJsZWRcIikgaW5zdGVhZC4nKTtlPSEoZT1udWxsPT1lfHwwPT09ZS5sZW5ndGg/WyEwXTplKVswXTt0aGlzLiRlbGVtZW50LnByb3AoXCJkaXNhYmxlZFwiLGUpfSxvLnByb3RvdHlwZS5kYXRhPWZ1bmN0aW9uKCl7dGhpcy5vcHRpb25zLmdldChcImRlYnVnXCIpJiYwPGFyZ3VtZW50cy5sZW5ndGgmJndpbmRvdy5jb25zb2xlJiZjb25zb2xlLndhcm4mJmNvbnNvbGUud2FybignU2VsZWN0MjogRGF0YSBjYW4gbm8gbG9uZ2VyIGJlIHNldCB1c2luZyBgc2VsZWN0MihcImRhdGFcIilgLiBZb3Ugc2hvdWxkIGNvbnNpZGVyIHNldHRpbmcgdGhlIHZhbHVlIGluc3RlYWQgdXNpbmcgYCRlbGVtZW50LnZhbCgpYC4nKTt2YXIgdD1bXTtyZXR1cm4gdGhpcy5kYXRhQWRhcHRlci5jdXJyZW50KGZ1bmN0aW9uKGUpe3Q9ZX0pLHR9LG8ucHJvdG90eXBlLnZhbD1mdW5jdGlvbihlKXtpZih0aGlzLm9wdGlvbnMuZ2V0KFwiZGVidWdcIikmJndpbmRvdy5jb25zb2xlJiZjb25zb2xlLndhcm4mJmNvbnNvbGUud2FybignU2VsZWN0MjogVGhlIGBzZWxlY3QyKFwidmFsXCIpYCBtZXRob2QgaGFzIGJlZW4gZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIGxhdGVyIFNlbGVjdDIgdmVyc2lvbnMuIFVzZSAkZWxlbWVudC52YWwoKSBpbnN0ZWFkLicpLG51bGw9PWV8fDA9PT1lLmxlbmd0aClyZXR1cm4gdGhpcy4kZWxlbWVudC52YWwoKTtlPWVbMF07QXJyYXkuaXNBcnJheShlKSYmKGU9ZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUudG9TdHJpbmcoKX0pKSx0aGlzLiRlbGVtZW50LnZhbChlKS50cmlnZ2VyKFwiaW5wdXRcIikudHJpZ2dlcihcImNoYW5nZVwiKX0sby5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3IuUmVtb3ZlRGF0YSh0aGlzLiRjb250YWluZXJbMF0pLHRoaXMuJGNvbnRhaW5lci5yZW1vdmUoKSx0aGlzLl9vYnNlcnZlci5kaXNjb25uZWN0KCksdGhpcy5fb2JzZXJ2ZXI9bnVsbCx0aGlzLl9zeW5jQT1udWxsLHRoaXMuX3N5bmNTPW51bGwsdGhpcy4kZWxlbWVudC5vZmYoXCIuc2VsZWN0MlwiKSx0aGlzLiRlbGVtZW50LmF0dHIoXCJ0YWJpbmRleFwiLHIuR2V0RGF0YSh0aGlzLiRlbGVtZW50WzBdLFwib2xkLXRhYmluZGV4XCIpKSx0aGlzLiRlbGVtZW50WzBdLmNsYXNzTGlzdC5yZW1vdmUoXCJzZWxlY3QyLWhpZGRlbi1hY2Nlc3NpYmxlXCIpLHRoaXMuJGVsZW1lbnQuYXR0cihcImFyaWEtaGlkZGVuXCIsXCJmYWxzZVwiKSxyLlJlbW92ZURhdGEodGhpcy4kZWxlbWVudFswXSksdGhpcy4kZWxlbWVudC5yZW1vdmVEYXRhKFwic2VsZWN0MlwiKSx0aGlzLmRhdGFBZGFwdGVyLmRlc3Ryb3koKSx0aGlzLnNlbGVjdGlvbi5kZXN0cm95KCksdGhpcy5kcm9wZG93bi5kZXN0cm95KCksdGhpcy5yZXN1bHRzLmRlc3Ryb3koKSx0aGlzLmRhdGFBZGFwdGVyPW51bGwsdGhpcy5zZWxlY3Rpb249bnVsbCx0aGlzLmRyb3Bkb3duPW51bGwsdGhpcy5yZXN1bHRzPW51bGx9LG8ucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3ZhciBlPXQoJzxzcGFuIGNsYXNzPVwic2VsZWN0MiBzZWxlY3QyLWNvbnRhaW5lclwiPjxzcGFuIGNsYXNzPVwic2VsZWN0aW9uXCI+PC9zcGFuPjxzcGFuIGNsYXNzPVwiZHJvcGRvd24td3JhcHBlclwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvc3Bhbj48L3NwYW4+Jyk7cmV0dXJuIGUuYXR0cihcImRpclwiLHRoaXMub3B0aW9ucy5nZXQoXCJkaXJcIikpLHRoaXMuJGNvbnRhaW5lcj1lLHRoaXMuJGNvbnRhaW5lclswXS5jbGFzc0xpc3QuYWRkKFwic2VsZWN0Mi1jb250YWluZXItLVwiK3RoaXMub3B0aW9ucy5nZXQoXCJ0aGVtZVwiKSksci5TdG9yZURhdGEoZVswXSxcImVsZW1lbnRcIix0aGlzLiRlbGVtZW50KSxlfSxvfSksdS5kZWZpbmUoXCJqcXVlcnktbW91c2V3aGVlbFwiLFtcImpxdWVyeVwiXSxmdW5jdGlvbihlKXtyZXR1cm4gZX0pLHUuZGVmaW5lKFwianF1ZXJ5LnNlbGVjdDJcIixbXCJqcXVlcnlcIixcImpxdWVyeS1tb3VzZXdoZWVsXCIsXCIuL3NlbGVjdDIvY29yZVwiLFwiLi9zZWxlY3QyL2RlZmF1bHRzXCIsXCIuL3NlbGVjdDIvdXRpbHNcIl0sZnVuY3Rpb24oaSxlLHIsdCxvKXt2YXIgYTtyZXR1cm4gbnVsbD09aS5mbi5zZWxlY3QyJiYoYT1bXCJvcGVuXCIsXCJjbG9zZVwiLFwiZGVzdHJveVwiXSxpLmZuLnNlbGVjdDI9ZnVuY3Rpb24odCl7aWYoXCJvYmplY3RcIj09dHlwZW9mKHQ9dHx8e30pKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZT1pLmV4dGVuZCghMCx7fSx0KTtuZXcgcihpKHRoaXMpLGUpfSksdGhpcztpZihcInN0cmluZ1wiIT10eXBlb2YgdCl0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGFyZ3VtZW50cyBmb3IgU2VsZWN0MjogXCIrdCk7dmFyIG4scz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBlPW8uR2V0RGF0YSh0aGlzLFwic2VsZWN0MlwiKTtudWxsPT1lJiZ3aW5kb3cuY29uc29sZSYmY29uc29sZS5lcnJvciYmY29uc29sZS5lcnJvcihcIlRoZSBzZWxlY3QyKCdcIit0K1wiJykgbWV0aG9kIHdhcyBjYWxsZWQgb24gYW4gZWxlbWVudCB0aGF0IGlzIG5vdCB1c2luZyBTZWxlY3QyLlwiKSxuPWVbdF0uYXBwbHkoZSxzKX0pLC0xPGEuaW5kZXhPZih0KT90aGlzOm59KSxudWxsPT1pLmZuLnNlbGVjdDIuZGVmYXVsdHMmJihpLmZuLnNlbGVjdDIuZGVmYXVsdHM9dCkscn0pLHtkZWZpbmU6dS5kZWZpbmUscmVxdWlyZTp1LnJlcXVpcmV9KTtmdW5jdGlvbiBiKGUsdCl7cmV0dXJuIGkuY2FsbChlLHQpfWZ1bmN0aW9uIGwoZSx0KXt2YXIgbixzLGkscixvLGEsbCxjLHUsZCxwPXQmJnQuc3BsaXQoXCIvXCIpLGg9eS5tYXAsZj1oJiZoW1wiKlwiXXx8e307aWYoZSl7Zm9yKHQ9KGU9ZS5zcGxpdChcIi9cIikpLmxlbmd0aC0xLHkubm9kZUlkQ29tcGF0JiZfLnRlc3QoZVt0XSkmJihlW3RdPWVbdF0ucmVwbGFjZShfLFwiXCIpKSxcIi5cIj09PWVbMF0uY2hhckF0KDApJiZwJiYoZT1wLnNsaWNlKDAscC5sZW5ndGgtMSkuY29uY2F0KGUpKSxjPTA7YzxlLmxlbmd0aDtjKyspXCIuXCI9PT0oZD1lW2NdKT8oZS5zcGxpY2UoYywxKSwtLWMpOlwiLi5cIj09PWQmJigwPT09Y3x8MT09PWMmJlwiLi5cIj09PWVbMl18fFwiLi5cIj09PWVbYy0xXXx8MDxjJiYoZS5zcGxpY2UoYy0xLDIpLGMtPTIpKTtlPWUuam9pbihcIi9cIil9aWYoKHB8fGYpJiZoKXtmb3IoYz0obj1lLnNwbGl0KFwiL1wiKSkubGVuZ3RoOzA8YzstLWMpe2lmKHM9bi5zbGljZSgwLGMpLmpvaW4oXCIvXCIpLHApZm9yKHU9cC5sZW5ndGg7MDx1Oy0tdSlpZihpPWhbcC5zbGljZSgwLHUpLmpvaW4oXCIvXCIpXSxpPWkmJmlbc10pe3I9aSxvPWM7YnJlYWt9aWYocilicmVhazshYSYmZiYmZltzXSYmKGE9ZltzXSxsPWMpfSFyJiZhJiYocj1hLG89bCksciYmKG4uc3BsaWNlKDAsbyxyKSxlPW4uam9pbihcIi9cIikpfXJldHVybiBlfWZ1bmN0aW9uIHcodCxuKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT1hLmNhbGwoYXJndW1lbnRzLDApO3JldHVyblwic3RyaW5nXCIhPXR5cGVvZiBlWzBdJiYxPT09ZS5sZW5ndGgmJmUucHVzaChudWxsKSxvLmFwcGx5KHAsZS5jb25jYXQoW3Qsbl0pKX19ZnVuY3Rpb24geChlKXt2YXIgdDtpZihiKG0sZSkmJih0PW1bZV0sZGVsZXRlIG1bZV0sdltlXT0hMCxyLmFwcGx5KHAsdCkpLCFiKGcsZSkmJiFiKHYsZSkpdGhyb3cgbmV3IEVycm9yKFwiTm8gXCIrZSk7cmV0dXJuIGdbZV19ZnVuY3Rpb24gYyhlKXt2YXIgdCxuPWU/ZS5pbmRleE9mKFwiIVwiKTotMTtyZXR1cm4tMTxuJiYodD1lLnN1YnN0cmluZygwLG4pLGU9ZS5zdWJzdHJpbmcobisxLGUubGVuZ3RoKSksW3QsZV19ZnVuY3Rpb24gQShlKXtyZXR1cm4gZT9jKGUpOltdfXZhciB1PXMucmVxdWlyZShcImpxdWVyeS5zZWxlY3QyXCIpO3JldHVybiB0LmZuLnNlbGVjdDIuYW1kPXMsdX0pOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/select2/dist/js/select2.min.js\n");
/***/ }),
/***/ "./node_modules/style-loader/dist/cjs.js!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-10[0].rules[0].use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-10[0].rules[0].use[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/MetaElement.vue?vue&type=style&index=0&id=5a696ec8&scoped=true&lang=css&":
/*!********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/style-loader/dist/cjs.js!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-10[0].rules[0].use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-10[0].rules[0].use[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/MetaElement.vue?vue&type=style&index=0&id=5a696ec8&scoped=true&lang=css& ***!
\********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ \"./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\");\n/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_cjs_js_clonedRuleSet_10_0_rules_0_use_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_10_0_rules_0_use_2_node_modules_vue_loader_lib_index_js_vue_loader_options_MetaElement_vue_vue_type_style_index_0_id_5a696ec8_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !!../../../node_modules/css-loader/dist/cjs.js??clonedRuleSet-10[0].rules[0].use[1]!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-10[0].rules[0].use[2]!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MetaElement.vue?vue&type=style&index=0&id=5a696ec8&scoped=true&lang=css& */ \"./node_modules/css-loader/dist/cjs.js??clonedRuleSet-10[0].rules[0].use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-10[0].rules[0].use[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/MetaElement.vue?vue&type=style&index=0&id=5a696ec8&scoped=true&lang=css&\");\n\n \n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_node_modules_css_loader_dist_cjs_js_clonedRuleSet_10_0_rules_0_use_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_10_0_rules_0_use_2_node_modules_vue_loader_lib_index_js_vue_loader_options_MetaElement_vue_vue_type_style_index_0_id_5a696ec8_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_1__[\"default\"], options);\n\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_css_loader_dist_cjs_js_clonedRuleSet_10_0_rules_0_use_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_10_0_rules_0_use_2_node_modules_vue_loader_lib_index_js_vue_loader_options_MetaElement_vue_vue_type_style_index_0_id_5a696ec8_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_1__[\"default\"].locals || {});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanM/P2Nsb25lZFJ1bGVTZXQtMTBbMF0ucnVsZXNbMF0udXNlWzFdIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9jbG9uZWRSdWxlU2V0LTEwWzBdLnJ1bGVzWzBdLnVzZVsyXSEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvTWV0YUVsZW1lbnQudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9NWE2OTZlYzgmc2NvcGVkPXRydWUmbGFuZz1jc3MmLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBK0Y7QUFDL0YsWUFBeVo7O0FBRXpaOztBQUVBO0FBQ0E7O0FBRUEsYUFBYSwwR0FBRyxDQUFDLDhXQUFPOzs7O0FBSXhCLGlFQUFlLHFYQUFjLE1BQU0iLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9NZXRhRWxlbWVudC52dWU/NDZhNSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXBpIGZyb20gXCIhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5qZWN0U3R5bGVzSW50b1N0eWxlVGFnLmpzXCI7XG4gICAgICAgICAgICBpbXBvcnQgY29udGVudCBmcm9tIFwiISEuLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcz8/Y2xvbmVkUnVsZVNldC0xMFswXS5ydWxlc1swXS51c2VbMV0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9wb3N0Y3NzLWxvYWRlci9kaXN0L2Nqcy5qcz8/Y2xvbmVkUnVsZVNldC0xMFswXS5ydWxlc1swXS51c2VbMl0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9NZXRhRWxlbWVudC52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZpZD01YTY5NmVjOCZzY29wZWQ9dHJ1ZSZsYW5nPWNzcyZcIjtcblxudmFyIG9wdGlvbnMgPSB7fTtcblxub3B0aW9ucy5pbnNlcnQgPSBcImhlYWRcIjtcbm9wdGlvbnMuc2luZ2xldG9uID0gZmFsc2U7XG5cbnZhciB1cGRhdGUgPSBhcGkoY29udGVudCwgb3B0aW9ucyk7XG5cblxuXG5leHBvcnQgZGVmYXVsdCBjb250ZW50LmxvY2FscyB8fCB7fTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/style-loader/dist/cjs.js!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-10[0].rules[0].use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-10[0].rules[0].use[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/MetaElement.vue?vue&type=style&index=0&id=5a696ec8&scoped=true&lang=css&\n");
/***/ }),
/***/ "./node_modules/style-loader/dist/cjs.js!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-10[0].rules[0].use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-10[0].rules[0].use[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/MetaPrice.vue?vue&type=style&index=0&id=7664e32e&scoped=true&lang=css&":
/*!******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/style-loader/dist/cjs.js!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-10[0].rules[0].use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-10[0].rules[0].use[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/MetaPrice.vue?vue&type=style&index=0&id=7664e32e&scoped=true&lang=css& ***!
\******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ \"./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\");\n/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_cjs_js_clonedRuleSet_10_0_rules_0_use_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_10_0_rules_0_use_2_node_modules_vue_loader_lib_index_js_vue_loader_options_MetaPrice_vue_vue_type_style_index_0_id_7664e32e_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !!../../../node_modules/css-loader/dist/cjs.js??clonedRuleSet-10[0].rules[0].use[1]!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-10[0].rules[0].use[2]!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MetaPrice.vue?vue&type=style&index=0&id=7664e32e&scoped=true&lang=css& */ \"./node_modules/css-loader/dist/cjs.js??clonedRuleSet-10[0].rules[0].use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-10[0].rules[0].use[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/MetaPrice.vue?vue&type=style&index=0&id=7664e32e&scoped=true&lang=css&\");\n\n \n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_node_modules_css_loader_dist_cjs_js_clonedRuleSet_10_0_rules_0_use_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_10_0_rules_0_use_2_node_modules_vue_loader_lib_index_js_vue_loader_options_MetaPrice_vue_vue_type_style_index_0_id_7664e32e_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_1__[\"default\"], options);\n\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_css_loader_dist_cjs_js_clonedRuleSet_10_0_rules_0_use_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_10_0_rules_0_use_2_node_modules_vue_loader_lib_index_js_vue_loader_options_MetaPrice_vue_vue_type_style_index_0_id_7664e32e_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_1__[\"default\"].locals || {});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanM/P2Nsb25lZFJ1bGVTZXQtMTBbMF0ucnVsZXNbMF0udXNlWzFdIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9jbG9uZWRSdWxlU2V0LTEwWzBdLnJ1bGVzWzBdLnVzZVsyXSEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvTWV0YVByaWNlLnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPTc2NjRlMzJlJnNjb3BlZD10cnVlJmxhbmc9Y3NzJi5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQStGO0FBQy9GLFlBQXVaOztBQUV2Wjs7QUFFQTtBQUNBOztBQUVBLGFBQWEsMEdBQUcsQ0FBQyw0V0FBTzs7OztBQUl4QixpRUFBZSxtWEFBYyxNQUFNIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvTWV0YVByaWNlLnZ1ZT8zMWRjIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhcGkgZnJvbSBcIiEuLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbmplY3RTdHlsZXNJbnRvU3R5bGVUYWcuanNcIjtcbiAgICAgICAgICAgIGltcG9ydCBjb250ZW50IGZyb20gXCIhIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9jbG9uZWRSdWxlU2V0LTEwWzBdLnJ1bGVzWzBdLnVzZVsxXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy9zdHlsZVBvc3RMb2FkZXIuanMhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9jbG9uZWRSdWxlU2V0LTEwWzBdLnJ1bGVzWzBdLnVzZVsyXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL01ldGFQcmljZS52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZpZD03NjY0ZTMyZSZzY29wZWQ9dHJ1ZSZsYW5nPWNzcyZcIjtcblxudmFyIG9wdGlvbnMgPSB7fTtcblxub3B0aW9ucy5pbnNlcnQgPSBcImhlYWRcIjtcbm9wdGlvbnMuc2luZ2xldG9uID0gZmFsc2U7XG5cbnZhciB1cGRhdGUgPSBhcGkoY29udGVudCwgb3B0aW9ucyk7XG5cblxuXG5leHBvcnQgZGVmYXVsdCBjb250ZW50LmxvY2FscyB8fCB7fTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/style-loader/dist/cjs.js!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-10[0].rules[0].use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-10[0].rules[0].use[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/MetaPrice.vue?vue&type=style&index=0&id=7664e32e&scoped=true&lang=css&\n");
/***/ }),
/***/ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js":
/*!****************************************************************************!*\
!*** ./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js ***!
\****************************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
"use strict";
eval("\n\nvar isOldIE = function isOldIE() {\n var memo;\n return function memorize() {\n if (typeof memo === 'undefined') {\n // Test for IE <= 9 as proposed by Browserhacks\n // @see http://browserhacks.com/#hack-e71d8692f65334173fee715c222cb805\n // Tests for existence of standard globals is to allow style-loader\n // to operate correctly into non-standard environments\n // @see https://github.com/webpack-contrib/style-loader/issues/177\n memo = Boolean(window && document && document.all && !window.atob);\n }\n\n return memo;\n };\n}();\n\nvar getTarget = function getTarget() {\n var memo = {};\n return function memorize(target) {\n if (typeof memo[target] === 'undefined') {\n var styleTarget = document.querySelector(target); // Special case to return head of iframe instead of iframe itself\n\n if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {\n try {\n // This will throw an exception if access to iframe is blocked\n // due to cross-origin restrictions\n styleTarget = styleTarget.contentDocument.head;\n } catch (e) {\n // istanbul ignore next\n styleTarget = null;\n }\n }\n\n memo[target] = styleTarget;\n }\n\n return memo[target];\n };\n}();\n\nvar stylesInDom = [];\n\nfunction getIndexByIdentifier(identifier) {\n var result = -1;\n\n for (var i = 0; i < stylesInDom.length; i++) {\n if (stylesInDom[i].identifier === identifier) {\n result = i;\n break;\n }\n }\n\n return result;\n}\n\nfunction modulesToDom(list, options) {\n var idCountMap = {};\n var identifiers = [];\n\n for (var i = 0; i < list.length; i++) {\n var item = list[i];\n var id = options.base ? item[0] + options.base : item[0];\n var count = idCountMap[id] || 0;\n var identifier = \"\".concat(id, \" \").concat(count);\n idCountMap[id] = count + 1;\n var index = getIndexByIdentifier(identifier);\n var obj = {\n css: item[1],\n media: item[2],\n sourceMap: item[3]\n };\n\n if (index !== -1) {\n stylesInDom[index].references++;\n stylesInDom[index].updater(obj);\n } else {\n stylesInDom.push({\n identifier: identifier,\n updater: addStyle(obj, options),\n references: 1\n });\n }\n\n identifiers.push(identifier);\n }\n\n return identifiers;\n}\n\nfunction insertStyleElement(options) {\n var style = document.createElement('style');\n var attributes = options.attributes || {};\n\n if (typeof attributes.nonce === 'undefined') {\n var nonce = true ? __webpack_require__.nc : 0;\n\n if (nonce) {\n attributes.nonce = nonce;\n }\n }\n\n Object.keys(attributes).forEach(function (key) {\n style.setAttribute(key, attributes[key]);\n });\n\n if (typeof options.insert === 'function') {\n options.insert(style);\n } else {\n var target = getTarget(options.insert || 'head');\n\n if (!target) {\n throw new Error(\"Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.\");\n }\n\n target.appendChild(style);\n }\n\n return style;\n}\n\nfunction removeStyleElement(style) {\n // istanbul ignore if\n if (style.parentNode === null) {\n return false;\n }\n\n style.parentNode.removeChild(style);\n}\n/* istanbul ignore next */\n\n\nvar replaceText = function replaceText() {\n var textStore = [];\n return function replace(index, replacement) {\n textStore[index] = replacement;\n return textStore.filter(Boolean).join('\\n');\n };\n}();\n\nfunction applyToSingletonTag(style, index, remove, obj) {\n var css = remove ? '' : obj.media ? \"@media \".concat(obj.media, \" {\").concat(obj.css, \"}\") : obj.css; // For old IE\n\n /* istanbul ignore if */\n\n if (style.styleSheet) {\n style.styleSheet.cssText = replaceText(index, css);\n } else {\n var cssNode = document.createTextNode(css);\n var childNodes = style.childNodes;\n\n if (childNodes[index]) {\n style.removeChild(childNodes[index]);\n }\n\n if (childNodes.length) {\n style.insertBefore(cssNode, childNodes[index]);\n } else {\n style.appendChild(cssNode);\n }\n }\n}\n\nfunction applyToTag(style, options, obj) {\n var css = obj.css;\n var media = obj.media;\n var sourceMap = obj.sourceMap;\n\n if (media) {\n style.setAttribute('media', media);\n } else {\n style.removeAttribute('media');\n }\n\n if (sourceMap && typeof btoa !== 'undefined') {\n css += \"\\n/*# sourceMappingURL=data:application/json;base64,\".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), \" */\");\n } // For old IE\n\n /* istanbul ignore if */\n\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n while (style.firstChild) {\n style.removeChild(style.firstChild);\n }\n\n style.appendChild(document.createTextNode(css));\n }\n}\n\nvar singleton = null;\nvar singletonCounter = 0;\n\nfunction addStyle(obj, options) {\n var style;\n var update;\n var remove;\n\n if (options.singleton) {\n var styleIndex = singletonCounter++;\n style = singleton || (singleton = insertStyleElement(options));\n update = applyToSingletonTag.bind(null, style, styleIndex, false);\n remove = applyToSingletonTag.bind(null, style, styleIndex, true);\n } else {\n style = insertStyleElement(options);\n update = applyToTag.bind(null, style, options);\n\n remove = function remove() {\n removeStyleElement(style);\n };\n }\n\n update(obj);\n return function updateStyle(newObj) {\n if (newObj) {\n if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap) {\n return;\n }\n\n update(obj = newObj);\n } else {\n remove();\n }\n };\n}\n\nmodule.exports = function (list, options) {\n options = options || {}; // Force single-tag solution on IE6-9, which has a hard limit on the # of <style>\n // tags it will allow on a page\n\n if (!options.singleton && typeof options.singleton !== 'boolean') {\n options.singleton = isOldIE();\n }\n\n list = list || [];\n var lastIdentifiers = modulesToDom(list, options);\n return function update(newList) {\n newList = newList || [];\n\n if (Object.prototype.toString.call(newList) !== '[object Array]') {\n return;\n }\n\n for (var i = 0; i < lastIdentifiers.length; i++) {\n var identifier = lastIdentifiers[i];\n var index = getIndexByIdentifier(identifier);\n stylesInDom[index].references--;\n }\n\n var newLastIdentifiers = modulesToDom(newList, options);\n\n for (var _i = 0; _i < lastIdentifiers.length; _i++) {\n var _identifier = lastIdentifiers[_i];\n\n var _index = getIndexByIdentifier(_identifier);\n\n if (stylesInDom[_index].references === 0) {\n stylesInDom[_index].updater();\n\n stylesInDom.splice(_index, 1);\n }\n }\n\n lastIdentifiers = newLastIdentifiers;\n };\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbmplY3RTdHlsZXNJbnRvU3R5bGVUYWcuanMuanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdEQUF3RDs7QUFFeEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxDQUFDOztBQUVEOztBQUVBO0FBQ0E7O0FBRUEsa0JBQWtCLHdCQUF3QjtBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLGtCQUFrQixpQkFBaUI7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGdCQUFnQixLQUF3QyxHQUFHLHNCQUFpQixHQUFHLENBQUk7O0FBRW5GO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBLHFFQUFxRSxxQkFBcUIsY0FBYzs7QUFFeEc7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBLHlEQUF5RDtBQUN6RCxJQUFJOztBQUVKOzs7QUFHQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMkJBQTJCO0FBQzNCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsb0JBQW9CLDRCQUE0QjtBQUNoRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxxQkFBcUIsNkJBQTZCO0FBQ2xEOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luamVjdFN0eWxlc0ludG9TdHlsZVRhZy5qcz9kYmQ5Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG52YXIgaXNPbGRJRSA9IGZ1bmN0aW9uIGlzT2xkSUUoKSB7XG4gIHZhciBtZW1vO1xuICByZXR1cm4gZnVuY3Rpb24gbWVtb3JpemUoKSB7XG4gICAgaWYgKHR5cGVvZiBtZW1vID09PSAndW5kZWZpbmVkJykge1xuICAgICAgLy8gVGVzdCBmb3IgSUUgPD0gOSBhcyBwcm9wb3NlZCBieSBCcm93c2VyaGFja3NcbiAgICAgIC8vIEBzZWUgaHR0cDovL2Jyb3dzZXJoYWNrcy5jb20vI2hhY2stZTcxZDg2OTJmNjUzMzQxNzNmZWU3MTVjMjIyY2I4MDVcbiAgICAgIC8vIFRlc3RzIGZvciBleGlzdGVuY2Ugb2Ygc3RhbmRhcmQgZ2xvYmFscyBpcyB0byBhbGxvdyBzdHlsZS1sb2FkZXJcbiAgICAgIC8vIHRvIG9wZXJhdGUgY29ycmVjdGx5IGludG8gbm9uLXN0YW5kYXJkIGVudmlyb25tZW50c1xuICAgICAgLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vd2VicGFjay1jb250cmliL3N0eWxlLWxvYWRlci9pc3N1ZXMvMTc3XG4gICAgICBtZW1vID0gQm9vbGVhbih3aW5kb3cgJiYgZG9jdW1lbnQgJiYgZG9jdW1lbnQuYWxsICYmICF3aW5kb3cuYXRvYik7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1lbW87XG4gIH07XG59KCk7XG5cbnZhciBnZXRUYXJnZXQgPSBmdW5jdGlvbiBnZXRUYXJnZXQoKSB7XG4gIHZhciBtZW1vID0ge307XG4gIHJldHVybiBmdW5jdGlvbiBtZW1vcml6ZSh0YXJnZXQpIHtcbiAgICBpZiAodHlwZW9mIG1lbW9bdGFyZ2V0XSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHZhciBzdHlsZVRhcmdldCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGFyZ2V0KTsgLy8gU3BlY2lhbCBjYXNlIHRvIHJldHVybiBoZWFkIG9mIGlmcmFtZSBpbnN0ZWFkIG9mIGlmcmFtZSBpdHNlbGZcblxuICAgICAgaWYgKHdpbmRvdy5IVE1MSUZyYW1lRWxlbWVudCAmJiBzdHlsZVRhcmdldCBpbnN0YW5jZW9mIHdpbmRvdy5IVE1MSUZyYW1lRWxlbWVudCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIFRoaXMgd2lsbCB0aHJvdyBhbiBleGNlcHRpb24gaWYgYWNjZXNzIHRvIGlmcmFtZSBpcyBibG9ja2VkXG4gICAgICAgICAgLy8gZHVlIHRvIGNyb3NzLW9yaWdpbiByZXN0cmljdGlvbnNcbiAgICAgICAgICBzdHlsZVRhcmdldCA9IHN0eWxlVGFyZ2V0LmNvbnRlbnREb2N1bWVudC5oZWFkO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgICAgICAgICBzdHlsZVRhcmdldCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbWVtb1t0YXJnZXRdID0gc3R5bGVUYXJnZXQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1lbW9bdGFyZ2V0XTtcbiAgfTtcbn0oKTtcblxudmFyIHN0eWxlc0luRG9tID0gW107XG5cbmZ1bmN0aW9uIGdldEluZGV4QnlJZGVudGlmaWVyKGlkZW50aWZpZXIpIHtcbiAgdmFyIHJlc3VsdCA9IC0xO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3R5bGVzSW5Eb20ubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoc3R5bGVzSW5Eb21baV0uaWRlbnRpZmllciA9PT0gaWRlbnRpZmllcikge1xuICAgICAgcmVzdWx0ID0gaTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIG1vZHVsZXNUb0RvbShsaXN0LCBvcHRpb25zKSB7XG4gIHZhciBpZENvdW50TWFwID0ge307XG4gIHZhciBpZGVudGlmaWVycyA9IFtdO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgIHZhciBpdGVtID0gbGlzdFtpXTtcbiAgICB2YXIgaWQgPSBvcHRpb25zLmJhc2UgPyBpdGVtWzBdICsgb3B0aW9ucy5iYXNlIDogaXRlbVswXTtcbiAgICB2YXIgY291bnQgPSBpZENvdW50TWFwW2lkXSB8fCAwO1xuICAgIHZhciBpZGVudGlmaWVyID0gXCJcIi5jb25jYXQoaWQsIFwiIFwiKS5jb25jYXQoY291bnQpO1xuICAgIGlkQ291bnRNYXBbaWRdID0gY291bnQgKyAxO1xuICAgIHZhciBpbmRleCA9IGdldEluZGV4QnlJZGVudGlmaWVyKGlkZW50aWZpZXIpO1xuICAgIHZhciBvYmogPSB7XG4gICAgICBjc3M6IGl0ZW1bMV0sXG4gICAgICBtZWRpYTogaXRlbVsyXSxcbiAgICAgIHNvdXJjZU1hcDogaXRlbVszXVxuICAgIH07XG5cbiAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICBzdHlsZXNJbkRvbVtpbmRleF0ucmVmZXJlbmNlcysrO1xuICAgICAgc3R5bGVzSW5Eb21baW5kZXhdLnVwZGF0ZXIob2JqKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3R5bGVzSW5Eb20ucHVzaCh7XG4gICAgICAgIGlkZW50aWZpZXI6IGlkZW50aWZpZXIsXG4gICAgICAgIHVwZGF0ZXI6IGFkZFN0eWxlKG9iaiwgb3B0aW9ucyksXG4gICAgICAgIHJlZmVyZW5jZXM6IDFcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlkZW50aWZpZXJzLnB1c2goaWRlbnRpZmllcik7XG4gIH1cblxuICByZXR1cm4gaWRlbnRpZmllcnM7XG59XG5cbmZ1bmN0aW9uIGluc2VydFN0eWxlRWxlbWVudChvcHRpb25zKSB7XG4gIHZhciBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gIHZhciBhdHRyaWJ1dGVzID0gb3B0aW9ucy5hdHRyaWJ1dGVzIHx8IHt9O1xuXG4gIGlmICh0eXBlb2YgYXR0cmlidXRlcy5ub25jZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICB2YXIgbm9uY2UgPSB0eXBlb2YgX193ZWJwYWNrX25vbmNlX18gIT09ICd1bmRlZmluZWQnID8gX193ZWJwYWNrX25vbmNlX18gOiBudWxsO1xuXG4gICAgaWYgKG5vbmNlKSB7XG4gICAgICBhdHRyaWJ1dGVzLm5vbmNlID0gbm9uY2U7XG4gICAgfVxuICB9XG5cbiAgT2JqZWN0LmtleXMoYXR0cmlidXRlcykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgc3R5bGUuc2V0QXR0cmlidXRlKGtleSwgYXR0cmlidXRlc1trZXldKTtcbiAgfSk7XG5cbiAgaWYgKHR5cGVvZiBvcHRpb25zLmluc2VydCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIG9wdGlvbnMuaW5zZXJ0KHN0eWxlKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgdGFyZ2V0ID0gZ2V0VGFyZ2V0KG9wdGlvbnMuaW5zZXJ0IHx8ICdoZWFkJyk7XG5cbiAgICBpZiAoIXRhcmdldCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ291bGRuJ3QgZmluZCBhIHN0eWxlIHRhcmdldC4gVGhpcyBwcm9iYWJseSBtZWFucyB0aGF0IHRoZSB2YWx1ZSBmb3IgdGhlICdpbnNlcnQnIHBhcmFtZXRlciBpcyBpbnZhbGlkLlwiKTtcbiAgICB9XG5cbiAgICB0YXJnZXQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xuICB9XG5cbiAgcmV0dXJuIHN0eWxlO1xufVxuXG5mdW5jdGlvbiByZW1vdmVTdHlsZUVsZW1lbnQoc3R5bGUpIHtcbiAgLy8gaXN0YW5idWwgaWdub3JlIGlmXG4gIGlmIChzdHlsZS5wYXJlbnROb2RlID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgc3R5bGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzdHlsZSk7XG59XG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cblxuXG52YXIgcmVwbGFjZVRleHQgPSBmdW5jdGlvbiByZXBsYWNlVGV4dCgpIHtcbiAgdmFyIHRleHRTdG9yZSA9IFtdO1xuICByZXR1cm4gZnVuY3Rpb24gcmVwbGFjZShpbmRleCwgcmVwbGFjZW1lbnQpIHtcbiAgICB0ZXh0U3RvcmVbaW5kZXhdID0gcmVwbGFjZW1lbnQ7XG4gICAgcmV0dXJuIHRleHRTdG9yZS5maWx0ZXIoQm9vbGVhbikuam9pbignXFxuJyk7XG4gIH07XG59KCk7XG5cbmZ1bmN0aW9uIGFwcGx5VG9TaW5nbGV0b25UYWcoc3R5bGUsIGluZGV4LCByZW1vdmUsIG9iaikge1xuICB2YXIgY3NzID0gcmVtb3ZlID8gJycgOiBvYmoubWVkaWEgPyBcIkBtZWRpYSBcIi5jb25jYXQob2JqLm1lZGlhLCBcIiB7XCIpLmNvbmNhdChvYmouY3NzLCBcIn1cIikgOiBvYmouY3NzOyAvLyBGb3Igb2xkIElFXG5cbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICAqL1xuXG4gIGlmIChzdHlsZS5zdHlsZVNoZWV0KSB7XG4gICAgc3R5bGUuc3R5bGVTaGVldC5jc3NUZXh0ID0gcmVwbGFjZVRleHQoaW5kZXgsIGNzcyk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGNzc05vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjc3MpO1xuICAgIHZhciBjaGlsZE5vZGVzID0gc3R5bGUuY2hpbGROb2RlcztcblxuICAgIGlmIChjaGlsZE5vZGVzW2luZGV4XSkge1xuICAgICAgc3R5bGUucmVtb3ZlQ2hpbGQoY2hpbGROb2Rlc1tpbmRleF0pO1xuICAgIH1cblxuICAgIGlmIChjaGlsZE5vZGVzLmxlbmd0aCkge1xuICAgICAgc3R5bGUuaW5zZXJ0QmVmb3JlKGNzc05vZGUsIGNoaWxkTm9kZXNbaW5kZXhdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3R5bGUuYXBwZW5kQ2hpbGQoY3NzTm9kZSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGFwcGx5VG9UYWcoc3R5bGUsIG9wdGlvbnMsIG9iaikge1xuICB2YXIgY3NzID0gb2JqLmNzcztcbiAgdmFyIG1lZGlhID0gb2JqLm1lZGlhO1xuICB2YXIgc291cmNlTWFwID0gb2JqLnNvdXJjZU1hcDtcblxuICBpZiAobWVkaWEpIHtcbiAgICBzdHlsZS5zZXRBdHRyaWJ1dGUoJ21lZGlhJywgbWVkaWEpO1xuICB9IGVsc2Uge1xuICAgIHN0eWxlLnJlbW92ZUF0dHJpYnV0ZSgnbWVkaWEnKTtcbiAgfVxuXG4gIGlmIChzb3VyY2VNYXAgJiYgdHlwZW9mIGJ0b2EgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgY3NzICs9IFwiXFxuLyojIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxcIi5jb25jYXQoYnRvYSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoc291cmNlTWFwKSkpKSwgXCIgKi9cIik7XG4gIH0gLy8gRm9yIG9sZCBJRVxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAgKi9cblxuXG4gIGlmIChzdHlsZS5zdHlsZVNoZWV0KSB7XG4gICAgc3R5bGUuc3R5bGVTaGVldC5jc3NUZXh0ID0gY3NzO1xuICB9IGVsc2Uge1xuICAgIHdoaWxlIChzdHlsZS5maXJzdENoaWxkKSB7XG4gICAgICBzdHlsZS5yZW1vdmVDaGlsZChzdHlsZS5maXJzdENoaWxkKTtcbiAgICB9XG5cbiAgICBzdHlsZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjc3MpKTtcbiAgfVxufVxuXG52YXIgc2luZ2xldG9uID0gbnVsbDtcbnZhciBzaW5nbGV0b25Db3VudGVyID0gMDtcblxuZnVuY3Rpb24gYWRkU3R5bGUob2JqLCBvcHRpb25zKSB7XG4gIHZhciBzdHlsZTtcbiAgdmFyIHVwZGF0ZTtcbiAgdmFyIHJlbW92ZTtcblxuICBpZiAob3B0aW9ucy5zaW5nbGV0b24pIHtcbiAgICB2YXIgc3R5bGVJbmRleCA9IHNpbmdsZXRvbkNvdW50ZXIrKztcbiAgICBzdHlsZSA9IHNpbmdsZXRvbiB8fCAoc2luZ2xldG9uID0gaW5zZXJ0U3R5bGVFbGVtZW50KG9wdGlvbnMpKTtcbiAgICB1cGRhdGUgPSBhcHBseVRvU2luZ2xldG9uVGFnLmJpbmQobnVsbCwgc3R5bGUsIHN0eWxlSW5kZXgsIGZhbHNlKTtcbiAgICByZW1vdmUgPSBhcHBseVRvU2luZ2xldG9uVGFnLmJpbmQobnVsbCwgc3R5bGUsIHN0eWxlSW5kZXgsIHRydWUpO1xuICB9IGVsc2Uge1xuICAgIHN0eWxlID0gaW5zZXJ0U3R5bGVFbGVtZW50KG9wdGlvbnMpO1xuICAgIHVwZGF0ZSA9IGFwcGx5VG9UYWcuYmluZChudWxsLCBzdHlsZSwgb3B0aW9ucyk7XG5cbiAgICByZW1vdmUgPSBmdW5jdGlvbiByZW1vdmUoKSB7XG4gICAgICByZW1vdmVTdHlsZUVsZW1lbnQoc3R5bGUpO1xuICAgIH07XG4gIH1cblxuICB1cGRhdGUob2JqKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIHVwZGF0ZVN0eWxlKG5ld09iaikge1xuICAgIGlmIChuZXdPYmopIHtcbiAgICAgIGlmIChuZXdPYmouY3NzID09PSBvYmouY3NzICYmIG5ld09iai5tZWRpYSA9PT0gb2JqLm1lZGlhICYmIG5ld09iai5zb3VyY2VNYXAgPT09IG9iai5zb3VyY2VNYXApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB1cGRhdGUob2JqID0gbmV3T2JqKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVtb3ZlKCk7XG4gICAgfVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChsaXN0LCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9OyAvLyBGb3JjZSBzaW5nbGUtdGFnIHNvbHV0aW9uIG9uIElFNi05LCB3aGljaCBoYXMgYSBoYXJkIGxpbWl0IG9uIHRoZSAjIG9mIDxzdHlsZT5cbiAgLy8gdGFncyBpdCB3aWxsIGFsbG93IG9uIGEgcGFnZVxuXG4gIGlmICghb3B0aW9ucy5zaW5nbGV0b24gJiYgdHlwZW9mIG9wdGlvbnMuc2luZ2xldG9uICE9PSAnYm9vbGVhbicpIHtcbiAgICBvcHRpb25zLnNpbmdsZXRvbiA9IGlzT2xkSUUoKTtcbiAgfVxuXG4gIGxpc3QgPSBsaXN0IHx8IFtdO1xuICB2YXIgbGFzdElkZW50aWZpZXJzID0gbW9kdWxlc1RvRG9tKGxpc3QsIG9wdGlvbnMpO1xuICByZXR1cm4gZnVuY3Rpb24gdXBkYXRlKG5ld0xpc3QpIHtcbiAgICBuZXdMaXN0ID0gbmV3TGlzdCB8fCBbXTtcblxuICAgIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobmV3TGlzdCkgIT09ICdbb2JqZWN0IEFycmF5XScpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxhc3RJZGVudGlmaWVycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGlkZW50aWZpZXIgPSBsYXN0SWRlbnRpZmllcnNbaV07XG4gICAgICB2YXIgaW5kZXggPSBnZXRJbmRleEJ5SWRlbnRpZmllcihpZGVudGlmaWVyKTtcbiAgICAgIHN0eWxlc0luRG9tW2luZGV4XS5yZWZlcmVuY2VzLS07XG4gICAgfVxuXG4gICAgdmFyIG5ld0xhc3RJZGVudGlmaWVycyA9IG1vZHVsZXNUb0RvbShuZXdMaXN0LCBvcHRpb25zKTtcblxuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBsYXN0SWRlbnRpZmllcnMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICB2YXIgX2lkZW50aWZpZXIgPSBsYXN0SWRlbnRpZmllcnNbX2ldO1xuXG4gICAgICB2YXIgX2luZGV4ID0gZ2V0SW5kZXhCeUlkZW50aWZpZXIoX2lkZW50aWZpZXIpO1xuXG4gICAgICBpZiAoc3R5bGVzSW5Eb21bX2luZGV4XS5yZWZlcmVuY2VzID09PSAwKSB7XG4gICAgICAgIHN0eWxlc0luRG9tW19pbmRleF0udXBkYXRlcigpO1xuXG4gICAgICAgIHN0eWxlc0luRG9tLnNwbGljZShfaW5kZXgsIDEpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxhc3RJZGVudGlmaWVycyA9IG5ld0xhc3RJZGVudGlmaWVycztcbiAgfTtcbn07Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\n");
/***/ }),
/***/ "./resources/js/components/CurrencyInput.vue":
/*!***************************************************!*\
!*** ./resources/js/components/CurrencyInput.vue ***!
\***************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _CurrencyInput_vue_vue_type_template_id_22dd315e_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./CurrencyInput.vue?vue&type=template&id=22dd315e&scoped=true& */ \"./resources/js/components/CurrencyInput.vue?vue&type=template&id=22dd315e&scoped=true&\");\n/* harmony import */ var _CurrencyInput_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./CurrencyInput.vue?vue&type=script&lang=js& */ \"./resources/js/components/CurrencyInput.vue?vue&type=script&lang=js&\");\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n;\nvar component = (0,_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _CurrencyInput_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _CurrencyInput_vue_vue_type_template_id_22dd315e_scoped_true___WEBPACK_IMPORTED_MODULE_0__.render,\n _CurrencyInput_vue_vue_type_template_id_22dd315e_scoped_true___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns,\n false,\n null,\n \"22dd315e\",\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"resources/js/components/CurrencyInput.vue\"\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (component.exports);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9DdXJyZW5jeUlucHV0LnZ1ZS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQXdHO0FBQ3ZDO0FBQ0w7OztBQUc1RDtBQUNBLENBQTZGO0FBQzdGLGdCQUFnQix1R0FBVTtBQUMxQixFQUFFLG1GQUFNO0FBQ1IsRUFBRSxpR0FBTTtBQUNSLEVBQUUsMEdBQWU7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSSxLQUFVLEVBQUUsWUFpQmY7QUFDRDtBQUNBLGlFQUFlIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvQ3VycmVuY3lJbnB1dC52dWU/MmM4OCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL0N1cnJlbmN5SW5wdXQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTIyZGQzMTVlJnNjb3BlZD10cnVlJlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL0N1cnJlbmN5SW5wdXQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9DdXJyZW5jeUlucHV0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIFwiMjJkZDMxNWVcIixcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvaG9tZS9mcmVlbWFuL1Byb2plY3RzL2xhcmF2ZWwveHNob3Avbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnMjJkZDMxNWUnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnMjJkZDMxNWUnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnMjJkZDMxNWUnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL0N1cnJlbmN5SW5wdXQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTIyZGQzMTVlJnNjb3BlZD10cnVlJlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzIyZGQzMTVlJywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJyZXNvdXJjZXMvanMvY29tcG9uZW50cy9DdXJyZW5jeUlucHV0LnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./resources/js/components/CurrencyInput.vue\n");
/***/ }),
/***/ "./resources/js/components/ExampleComponent.vue":
/*!******************************************************!*\
!*** ./resources/js/components/ExampleComponent.vue ***!
\******************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _ExampleComponent_vue_vue_type_template_id_299e239e___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ExampleComponent.vue?vue&type=template&id=299e239e& */ \"./resources/js/components/ExampleComponent.vue?vue&type=template&id=299e239e&\");\n/* harmony import */ var _ExampleComponent_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ExampleComponent.vue?vue&type=script&lang=js& */ \"./resources/js/components/ExampleComponent.vue?vue&type=script&lang=js&\");\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n;\nvar component = (0,_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _ExampleComponent_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _ExampleComponent_vue_vue_type_template_id_299e239e___WEBPACK_IMPORTED_MODULE_0__.render,\n _ExampleComponent_vue_vue_type_template_id_299e239e___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"resources/js/components/ExampleComponent.vue\"\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (component.exports);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9FeGFtcGxlQ29tcG9uZW50LnZ1ZS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQStGO0FBQzNCO0FBQ0w7OztBQUcvRDtBQUNBLENBQTZGO0FBQzdGLGdCQUFnQix1R0FBVTtBQUMxQixFQUFFLHNGQUFNO0FBQ1IsRUFBRSx3RkFBTTtBQUNSLEVBQUUsaUdBQWU7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSSxLQUFVLEVBQUUsWUFpQmY7QUFDRDtBQUNBLGlFQUFlIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvRXhhbXBsZUNvbXBvbmVudC52dWU/ZTg1ZiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL0V4YW1wbGVDb21wb25lbnQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTI5OWUyMzllJlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL0V4YW1wbGVDb21wb25lbnQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9FeGFtcGxlQ29tcG9uZW50LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvZnJlZW1hbi9Qcm9qZWN0cy9sYXJhdmVsL3hzaG9wL25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzI5OWUyMzllJykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzI5OWUyMzllJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzI5OWUyMzllJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9FeGFtcGxlQ29tcG9uZW50LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yOTllMjM5ZSZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCcyOTllMjM5ZScsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvRXhhbXBsZUNvbXBvbmVudC52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./resources/js/components/ExampleComponent.vue\n");
/***/ }),
/***/ "./resources/js/components/MetaElement.vue":
/*!*************************************************!*\
!*** ./resources/js/components/MetaElement.vue ***!
\*************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _MetaElement_vue_vue_type_template_id_5a696ec8_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./MetaElement.vue?vue&type=template&id=5a696ec8&scoped=true& */ \"./resources/js/components/MetaElement.vue?vue&type=template&id=5a696ec8&scoped=true&\");\n/* harmony import */ var _MetaElement_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./MetaElement.vue?vue&type=script&lang=js& */ \"./resources/js/components/MetaElement.vue?vue&type=script&lang=js&\");\n/* harmony import */ var _MetaElement_vue_vue_type_style_index_0_id_5a696ec8_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./MetaElement.vue?vue&type=style&index=0&id=5a696ec8&scoped=true&lang=css& */ \"./resources/js/components/MetaElement.vue?vue&type=style&index=0&id=5a696ec8&scoped=true&lang=css&\");\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n;\n\n\n/* normalize component */\n\nvar component = (0,_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(\n _MetaElement_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _MetaElement_vue_vue_type_template_id_5a696ec8_scoped_true___WEBPACK_IMPORTED_MODULE_0__.render,\n _MetaElement_vue_vue_type_template_id_5a696ec8_scoped_true___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns,\n false,\n null,\n \"5a696ec8\",\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"resources/js/components/MetaElement.vue\"\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (component.exports);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9NZXRhRWxlbWVudC52dWUuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBc0c7QUFDdkM7QUFDTDtBQUMxRCxDQUErRjs7O0FBRy9GO0FBQzZGO0FBQzdGLGdCQUFnQix1R0FBVTtBQUMxQixFQUFFLGlGQUFNO0FBQ1IsRUFBRSwrRkFBTTtBQUNSLEVBQUUsd0dBQWU7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSSxLQUFVLEVBQUUsWUFpQmY7QUFDRDtBQUNBLGlFQUFlIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvTWV0YUVsZW1lbnQudnVlP2ZhNjEiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9NZXRhRWxlbWVudC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NWE2OTZlYzgmc2NvcGVkPXRydWUmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vTWV0YUVsZW1lbnQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9NZXRhRWxlbWVudC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcbmltcG9ydCBzdHlsZTAgZnJvbSBcIi4vTWV0YUVsZW1lbnQudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9NWE2OTZlYzgmc2NvcGVkPXRydWUmbGFuZz1jc3MmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBcIjVhNjk2ZWM4XCIsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvZnJlZW1hbi9Qcm9qZWN0cy9sYXJhdmVsL3hzaG9wL25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzVhNjk2ZWM4JykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzVhNjk2ZWM4JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzVhNjk2ZWM4JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9NZXRhRWxlbWVudC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NWE2OTZlYzgmc2NvcGVkPXRydWUmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignNWE2OTZlYzgnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInJlc291cmNlcy9qcy9jb21wb25lbnRzL01ldGFFbGVtZW50LnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./resources/js/components/MetaElement.vue\n");
/***/ }),
/***/ "./resources/js/components/MetaPrice.vue":
/*!***********************************************!*\
!*** ./resources/js/components/MetaPrice.vue ***!
\***********************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _MetaPrice_vue_vue_type_template_id_7664e32e_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./MetaPrice.vue?vue&type=template&id=7664e32e&scoped=true& */ \"./resources/js/components/MetaPrice.vue?vue&type=template&id=7664e32e&scoped=true&\");\n/* harmony import */ var _MetaPrice_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./MetaPrice.vue?vue&type=script&lang=js& */ \"./resources/js/components/MetaPrice.vue?vue&type=script&lang=js&\");\n/* harmony import */ var _MetaPrice_vue_vue_type_style_index_0_id_7664e32e_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./MetaPrice.vue?vue&type=style&index=0&id=7664e32e&scoped=true&lang=css& */ \"./resources/js/components/MetaPrice.vue?vue&type=style&index=0&id=7664e32e&scoped=true&lang=css&\");\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n;\n\n\n/* normalize component */\n\nvar component = (0,_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(\n _MetaPrice_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _MetaPrice_vue_vue_type_template_id_7664e32e_scoped_true___WEBPACK_IMPORTED_MODULE_0__.render,\n _MetaPrice_vue_vue_type_template_id_7664e32e_scoped_true___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns,\n false,\n null,\n \"7664e32e\",\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"resources/js/components/MetaPrice.vue\"\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (component.exports);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9NZXRhUHJpY2UudnVlLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQW9HO0FBQ3ZDO0FBQ0w7QUFDeEQsQ0FBNkY7OztBQUc3RjtBQUM2RjtBQUM3RixnQkFBZ0IsdUdBQVU7QUFDMUIsRUFBRSwrRUFBTTtBQUNSLEVBQUUsNkZBQU07QUFDUixFQUFFLHNHQUFlO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUksS0FBVSxFQUFFLFlBaUJmO0FBQ0Q7QUFDQSxpRUFBZSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3Jlc291cmNlcy9qcy9jb21wb25lbnRzL01ldGFQcmljZS52dWU/NDQ0ZCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL01ldGFQcmljZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NzY2NGUzMmUmc2NvcGVkPXRydWUmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vTWV0YVByaWNlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vTWV0YVByaWNlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuaW1wb3J0IHN0eWxlMCBmcm9tIFwiLi9NZXRhUHJpY2UudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9NzY2NGUzMmUmc2NvcGVkPXRydWUmbGFuZz1jc3MmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBcIjc2NjRlMzJlXCIsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvZnJlZW1hbi9Qcm9qZWN0cy9sYXJhdmVsL3hzaG9wL25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzc2NjRlMzJlJykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzc2NjRlMzJlJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzc2NjRlMzJlJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9NZXRhUHJpY2UudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTc2NjRlMzJlJnNjb3BlZD10cnVlJlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzc2NjRlMzJlJywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJyZXNvdXJjZXMvanMvY29tcG9uZW50cy9NZXRhUHJpY2UudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./resources/js/components/MetaPrice.vue\n");
/***/ }),
/***/ "./resources/js/components/CurrencyInput.vue?vue&type=script&lang=js&":
/*!****************************************************************************!*\
!*** ./resources/js/components/CurrencyInput.vue?vue&type=script&lang=js& ***!
\****************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_0_rules_0_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_CurrencyInput_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CurrencyInput.vue?vue&type=script&lang=js& */ \"./node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/CurrencyInput.vue?vue&type=script&lang=js&\");\n /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_babel_loader_lib_index_js_clonedRuleSet_5_0_rules_0_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_CurrencyInput_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); //# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9DdXJyZW5jeUlucHV0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBdU4sQ0FBQyxpRUFBZSxrTkFBRyxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvQ3VycmVuY3lJbnB1dC52dWU/NzI0NSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTVbMF0ucnVsZXNbMF0udXNlWzBdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vQ3VycmVuY3lJbnB1dC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNVswXS5ydWxlc1swXS51c2VbMF0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9DdXJyZW5jeUlucHV0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./resources/js/components/CurrencyInput.vue?vue&type=script&lang=js&\n");
/***/ }),
/***/ "./resources/js/components/ExampleComponent.vue?vue&type=script&lang=js&":
/*!*******************************************************************************!*\
!*** ./resources/js/components/ExampleComponent.vue?vue&type=script&lang=js& ***!
\*******************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_0_rules_0_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_ExampleComponent_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ExampleComponent.vue?vue&type=script&lang=js& */ \"./node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/ExampleComponent.vue?vue&type=script&lang=js&\");\n /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_babel_loader_lib_index_js_clonedRuleSet_5_0_rules_0_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_ExampleComponent_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); //# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9FeGFtcGxlQ29tcG9uZW50LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBME4sQ0FBQyxpRUFBZSxxTkFBRyxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvRXhhbXBsZUNvbXBvbmVudC52dWU/ZTdjZSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTVbMF0ucnVsZXNbMF0udXNlWzBdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vRXhhbXBsZUNvbXBvbmVudC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNVswXS5ydWxlc1swXS51c2VbMF0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9FeGFtcGxlQ29tcG9uZW50LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./resources/js/components/ExampleComponent.vue?vue&type=script&lang=js&\n");
/***/ }),
/***/ "./resources/js/components/MetaElement.vue?vue&type=script&lang=js&":
/*!**************************************************************************!*\
!*** ./resources/js/components/MetaElement.vue?vue&type=script&lang=js& ***!
\**************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_0_rules_0_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_MetaElement_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MetaElement.vue?vue&type=script&lang=js& */ \"./node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/MetaElement.vue?vue&type=script&lang=js&\");\n /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_babel_loader_lib_index_js_clonedRuleSet_5_0_rules_0_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_MetaElement_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); //# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9NZXRhRWxlbWVudC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQXFOLENBQUMsaUVBQWUsZ05BQUcsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3Jlc291cmNlcy9qcy9jb21wb25lbnRzL01ldGFFbGVtZW50LnZ1ZT8yOTZlIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNVswXS5ydWxlc1swXS51c2VbMF0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9NZXRhRWxlbWVudC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNVswXS5ydWxlc1swXS51c2VbMF0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9NZXRhRWxlbWVudC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCIiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./resources/js/components/MetaElement.vue?vue&type=script&lang=js&\n");
/***/ }),
/***/ "./resources/js/components/MetaPrice.vue?vue&type=script&lang=js&":
/*!************************************************************************!*\
!*** ./resources/js/components/MetaPrice.vue?vue&type=script&lang=js& ***!
\************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_0_rules_0_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_MetaPrice_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MetaPrice.vue?vue&type=script&lang=js& */ \"./node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/MetaPrice.vue?vue&type=script&lang=js&\");\n /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_babel_loader_lib_index_js_clonedRuleSet_5_0_rules_0_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_MetaPrice_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); //# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9NZXRhUHJpY2UudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJi5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFtTixDQUFDLGlFQUFlLDhNQUFHLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9NZXRhUHJpY2UudnVlP2Y3ODEiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01WzBdLnJ1bGVzWzBdLnVzZVswXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL01ldGFQcmljZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNVswXS5ydWxlc1swXS51c2VbMF0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9NZXRhUHJpY2UudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./resources/js/components/MetaPrice.vue?vue&type=script&lang=js&\n");
/***/ }),
/***/ "./resources/js/components/MetaElement.vue?vue&type=style&index=0&id=5a696ec8&scoped=true&lang=css&":
/*!**********************************************************************************************************!*\
!*** ./resources/js/components/MetaElement.vue?vue&type=style&index=0&id=5a696ec8&scoped=true&lang=css& ***!
\**********************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var _node_modules_style_loader_dist_cjs_js_node_modules_css_loader_dist_cjs_js_clonedRuleSet_10_0_rules_0_use_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_10_0_rules_0_use_2_node_modules_vue_loader_lib_index_js_vue_loader_options_MetaElement_vue_vue_type_style_index_0_id_5a696ec8_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/style-loader/dist/cjs.js!../../../node_modules/css-loader/dist/cjs.js??clonedRuleSet-10[0].rules[0].use[1]!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-10[0].rules[0].use[2]!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MetaElement.vue?vue&type=style&index=0&id=5a696ec8&scoped=true&lang=css& */ "./node_modules/style-loader/dist/cjs.js!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-10[0].rules[0].use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-10[0].rules[0].use[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/MetaElement.vue?vue&type=style&index=0&id=5a696ec8&scoped=true&lang=css&");
/***/ }),
/***/ "./resources/js/components/MetaPrice.vue?vue&type=style&index=0&id=7664e32e&scoped=true&lang=css&":
/*!********************************************************************************************************!*\
!*** ./resources/js/components/MetaPrice.vue?vue&type=style&index=0&id=7664e32e&scoped=true&lang=css& ***!
\********************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var _node_modules_style_loader_dist_cjs_js_node_modules_css_loader_dist_cjs_js_clonedRuleSet_10_0_rules_0_use_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_10_0_rules_0_use_2_node_modules_vue_loader_lib_index_js_vue_loader_options_MetaPrice_vue_vue_type_style_index_0_id_7664e32e_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/style-loader/dist/cjs.js!../../../node_modules/css-loader/dist/cjs.js??clonedRuleSet-10[0].rules[0].use[1]!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-10[0].rules[0].use[2]!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MetaPrice.vue?vue&type=style&index=0&id=7664e32e&scoped=true&lang=css& */ "./node_modules/style-loader/dist/cjs.js!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-10[0].rules[0].use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-10[0].rules[0].use[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/MetaPrice.vue?vue&type=style&index=0&id=7664e32e&scoped=true&lang=css&");
/***/ }),
/***/ "./resources/js/components/CurrencyInput.vue?vue&type=template&id=22dd315e&scoped=true&":
/*!**********************************************************************************************!*\
!*** ./resources/js/components/CurrencyInput.vue?vue&type=template&id=22dd315e&scoped=true& ***!
\**********************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "render": () => (/* reexport safe */ _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_CurrencyInput_vue_vue_type_template_id_22dd315e_scoped_true___WEBPACK_IMPORTED_MODULE_0__.render),
/* harmony export */ "staticRenderFns": () => (/* reexport safe */ _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_CurrencyInput_vue_vue_type_template_id_22dd315e_scoped_true___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns)
/* harmony export */ });
/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_CurrencyInput_vue_vue_type_template_id_22dd315e_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CurrencyInput.vue?vue&type=template&id=22dd315e&scoped=true& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/CurrencyInput.vue?vue&type=template&id=22dd315e&scoped=true&");
/***/ }),
/***/ "./resources/js/components/ExampleComponent.vue?vue&type=template&id=299e239e&":
/*!*************************************************************************************!*\
!*** ./resources/js/components/ExampleComponent.vue?vue&type=template&id=299e239e& ***!
\*************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "render": () => (/* reexport safe */ _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_ExampleComponent_vue_vue_type_template_id_299e239e___WEBPACK_IMPORTED_MODULE_0__.render),
/* harmony export */ "staticRenderFns": () => (/* reexport safe */ _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_ExampleComponent_vue_vue_type_template_id_299e239e___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns)
/* harmony export */ });
/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_ExampleComponent_vue_vue_type_template_id_299e239e___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ExampleComponent.vue?vue&type=template&id=299e239e& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/ExampleComponent.vue?vue&type=template&id=299e239e&");
/***/ }),
/***/ "./resources/js/components/MetaElement.vue?vue&type=template&id=5a696ec8&scoped=true&":
/*!********************************************************************************************!*\
!*** ./resources/js/components/MetaElement.vue?vue&type=template&id=5a696ec8&scoped=true& ***!
\********************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "render": () => (/* reexport safe */ _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_MetaElement_vue_vue_type_template_id_5a696ec8_scoped_true___WEBPACK_IMPORTED_MODULE_0__.render),
/* harmony export */ "staticRenderFns": () => (/* reexport safe */ _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_MetaElement_vue_vue_type_template_id_5a696ec8_scoped_true___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns)
/* harmony export */ });
/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_MetaElement_vue_vue_type_template_id_5a696ec8_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MetaElement.vue?vue&type=template&id=5a696ec8&scoped=true& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/MetaElement.vue?vue&type=template&id=5a696ec8&scoped=true&");
/***/ }),
/***/ "./resources/js/components/MetaPrice.vue?vue&type=template&id=7664e32e&scoped=true&":
/*!******************************************************************************************!*\
!*** ./resources/js/components/MetaPrice.vue?vue&type=template&id=7664e32e&scoped=true& ***!
\******************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "render": () => (/* reexport safe */ _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_MetaPrice_vue_vue_type_template_id_7664e32e_scoped_true___WEBPACK_IMPORTED_MODULE_0__.render),
/* harmony export */ "staticRenderFns": () => (/* reexport safe */ _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_MetaPrice_vue_vue_type_template_id_7664e32e_scoped_true___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns)
/* harmony export */ });
/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_MetaPrice_vue_vue_type_template_id_7664e32e_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MetaPrice.vue?vue&type=template&id=7664e32e&scoped=true& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/MetaPrice.vue?vue&type=template&id=7664e32e&scoped=true&");
/***/ }),
/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/CurrencyInput.vue?vue&type=template&id=22dd315e&scoped=true&":
/*!*************************************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/CurrencyInput.vue?vue&type=template&id=22dd315e&scoped=true& ***!
\*************************************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"render\": () => (/* binding */ render),\n/* harmony export */ \"staticRenderFns\": () => (/* binding */ staticRenderFns)\n/* harmony export */ });\nvar render = function () {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"input\", {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.content,\n expression: \"content\",\n },\n ],\n class: _vm.classes,\n attrs: {\n type: \"text\",\n id: _vm.id,\n name: _vm.name,\n placeholder: _vm.placeholder,\n },\n domProps: { value: _vm.content },\n on: {\n keyup: _vm.fix,\n input: [\n function ($event) {\n if ($event.target.composing) {\n return\n }\n _vm.content = $event.target.value\n },\n _vm.handleInput,\n ],\n },\n })\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9DdXJyZW5jeUlucHV0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yMmRkMzE1ZSZzY29wZWQ9dHJ1ZSYuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLGdCQUFnQixvQkFBb0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9DdXJyZW5jeUlucHV0LnZ1ZT82YzBmIl0sInNvdXJjZXNDb250ZW50IjpbInZhciByZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFwiaW5wdXRcIiwge1xuICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgIHtcbiAgICAgICAgbmFtZTogXCJtb2RlbFwiLFxuICAgICAgICByYXdOYW1lOiBcInYtbW9kZWxcIixcbiAgICAgICAgdmFsdWU6IF92bS5jb250ZW50LFxuICAgICAgICBleHByZXNzaW9uOiBcImNvbnRlbnRcIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICBjbGFzczogX3ZtLmNsYXNzZXMsXG4gICAgYXR0cnM6IHtcbiAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgaWQ6IF92bS5pZCxcbiAgICAgIG5hbWU6IF92bS5uYW1lLFxuICAgICAgcGxhY2Vob2xkZXI6IF92bS5wbGFjZWhvbGRlcixcbiAgICB9LFxuICAgIGRvbVByb3BzOiB7IHZhbHVlOiBfdm0uY29udGVudCB9LFxuICAgIG9uOiB7XG4gICAgICBrZXl1cDogX3ZtLmZpeCxcbiAgICAgIGlucHV0OiBbXG4gICAgICAgIGZ1bmN0aW9uICgkZXZlbnQpIHtcbiAgICAgICAgICBpZiAoJGV2ZW50LnRhcmdldC5jb21wb3NpbmcpIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cbiAgICAgICAgICBfdm0uY29udGVudCA9ICRldmVudC50YXJnZXQudmFsdWVcbiAgICAgICAgfSxcbiAgICAgICAgX3ZtLmhhbmRsZUlucHV0LFxuICAgICAgXSxcbiAgICB9LFxuICB9KVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/CurrencyInput.vue?vue&type=template&id=22dd315e&scoped=true&\n");
/***/ }),
/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/ExampleComponent.vue?vue&type=template&id=299e239e&":
/*!****************************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/ExampleComponent.vue?vue&type=template&id=299e239e& ***!
\****************************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"render\": () => (/* binding */ render),\n/* harmony export */ \"staticRenderFns\": () => (/* binding */ staticRenderFns)\n/* harmony export */ });\nvar render = function () {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _vm._m(0)\n}\nvar staticRenderFns = [\n function () {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { staticClass: \"container\" }, [\n _c(\"div\", { staticClass: \"row justify-content-center\" }, [\n _c(\"div\", { staticClass: \"col-md-8\" }, [\n _c(\"div\", { staticClass: \"card\" }, [\n _c(\"div\", { staticClass: \"card-header\" }, [\n _vm._v(\"Example Component\"),\n ]),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"card-body\" }, [\n _vm._v(\n \"\\n I'm an example component.\\n \"\n ),\n ]),\n ]),\n ]),\n ]),\n ])\n },\n]\nrender._withStripped = true\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9FeGFtcGxlQ29tcG9uZW50LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yOTllMjM5ZSYuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLDBCQUEwQjtBQUNqRCxrQkFBa0IsMkNBQTJDO0FBQzdELG9CQUFvQix5QkFBeUI7QUFDN0Msc0JBQXNCLHFCQUFxQjtBQUMzQyx3QkFBd0IsNEJBQTRCO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBMEI7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvRXhhbXBsZUNvbXBvbmVudC52dWU/NmM2MyJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgcmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfdm0uX20oMClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXG4gIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgX3ZtID0gdGhpc1xuICAgIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICAgIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICAgIHJldHVybiBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcImNvbnRhaW5lclwiIH0sIFtcbiAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwicm93IGp1c3RpZnktY29udGVudC1jZW50ZXJcIiB9LCBbXG4gICAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwiY29sLW1kLThcIiB9LCBbXG4gICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJjYXJkXCIgfSwgW1xuICAgICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJjYXJkLWhlYWRlclwiIH0sIFtcbiAgICAgICAgICAgICAgX3ZtLl92KFwiRXhhbXBsZSBDb21wb25lbnRcIiksXG4gICAgICAgICAgICBdKSxcbiAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcImNhcmQtYm9keVwiIH0sIFtcbiAgICAgICAgICAgICAgX3ZtLl92KFxuICAgICAgICAgICAgICAgIFwiXFxuICAgICAgICAgICAgICAgICAgICBJJ20gYW4gZXhhbXBsZSBjb21wb25lbnQuXFxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICBdKSxcbiAgICAgICAgICBdKSxcbiAgICAgICAgXSksXG4gICAgICBdKSxcbiAgICBdKVxuICB9LFxuXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/ExampleComponent.vue?vue&type=template&id=299e239e&\n");
/***/ }),
/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/MetaElement.vue?vue&type=template&id=5a696ec8&scoped=true&":
/*!***********************************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/MetaElement.vue?vue&type=template&id=5a696ec8&scoped=true& ***!
\***********************************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"render\": () => (/* binding */ render),\n/* harmony export */ \"staticRenderFns\": () => (/* binding */ staticRenderFns)\n/* harmony export */ });\nvar render = function () {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n { staticClass: \"row\" },\n _vm._l(_vm.elms, function (d) {\n return _c(\"div\", { class: d.width + \" mb-3\" }, [\n d.type === \"text\"\n ? _c(\"div\", [\n _c(\"label\", { attrs: { for: d.name } }, [\n _vm._v(\n \"\\n \" + _vm._s(d.label) + \"\\n \"\n ),\n ]),\n _vm._v(\" \"),\n _c(\"input\", {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.defaults[d.name],\n expression: \"defaults[d.name]\",\n },\n ],\n staticClass: \"form-control\",\n attrs: {\n type: \"text\",\n id: d.name,\n name: \"meta[\" + d.name + \"]\",\n },\n domProps: { value: _vm.defaults[d.name] },\n on: {\n input: function ($event) {\n if ($event.target.composing) {\n return\n }\n _vm.$set(_vm.defaults, d.name, $event.target.value)\n },\n },\n }),\n ])\n : d.type === \"number\"\n ? _c(\"div\", [\n _c(\"label\", { attrs: { for: d.name } }, [\n _vm._v(\n \"\\n \" + _vm._s(d.label) + \"\\n \"\n ),\n ]),\n _vm._v(\" \"),\n _c(\"input\", {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.defaults[d.name],\n expression: \"defaults[d.name]\",\n },\n ],\n staticClass: \"form-control\",\n attrs: {\n type: \"number\",\n placeholder: d.label,\n id: d.name,\n name: \"meta[\" + d.name + \"]\",\n },\n domProps: { value: _vm.defaults[d.name] },\n on: {\n input: function ($event) {\n if ($event.target.composing) {\n return\n }\n _vm.$set(_vm.defaults, d.name, $event.target.value)\n },\n },\n }),\n ])\n : d.type === \"color\"\n ? _c(\"div\", { attrs: { id: d.name, name: \"meta[\" + d.name + \"]\" } }, [\n _c(\"label\", { attrs: { for: d.name } }, [\n _vm._v(\n \"\\n \" + _vm._s(d.label) + \"\\n \"\n ),\n ]),\n _vm._v(\" \"),\n _c(\n \"select\",\n {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.defaults[d.name],\n expression: \"defaults[d.name]\",\n },\n ],\n staticClass: \"form-control\",\n attrs: { name: \"meta[\" + d.name + \"]\", id: d.name },\n on: {\n change: function ($event) {\n var $$selectedVal = Array.prototype.filter\n .call($event.target.options, function (o) {\n return o.selected\n })\n .map(function (o) {\n var val = \"_value\" in o ? o._value : o.value\n return val\n })\n _vm.$set(\n _vm.defaults,\n d.name,\n $event.target.multiple\n ? $$selectedVal\n : $$selectedVal[0]\n )\n },\n },\n },\n [\n _c(\"option\", { attrs: { value: \"\" } }, [\n _vm._v(\" \" + _vm._s(d.label)),\n ]),\n _vm._v(\" \"),\n _vm._l(d.options, function (o) {\n return _c(\n \"option\",\n {\n style: \"background-color:\" + o.value,\n domProps: { value: o.value },\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(o.title) +\n \"\\n \"\n ),\n ]\n )\n }),\n ],\n 2\n ),\n ])\n : d.type === \"checkbox\"\n ? _c(\"div\", [\n _c(\"label\", { attrs: { for: d.name } }, [\n _vm._v(\n \"\\n \" + _vm._s(d.label) + \"\\n \"\n ),\n ]),\n _vm._v(\" \"),\n _c(\"br\"),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"panel panel-default\" }, [\n _c(\"div\", { staticClass: \"panel-body\" }, [\n _c(\"label\", { staticClass: \"switch\" }, [\n _c(\"input\", {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.defaults[d.name],\n expression: \"defaults[d.name]\",\n },\n ],\n attrs: { name: \"meta[\" + d.name + \"]\", type: \"checkbox\" },\n domProps: {\n checked: Array.isArray(_vm.defaults[d.name])\n ? _vm._i(_vm.defaults[d.name], null) > -1\n : _vm.defaults[d.name],\n },\n on: {\n change: function ($event) {\n var $$a = _vm.defaults[d.name],\n $$el = $event.target,\n $$c = $$el.checked ? true : false\n if (Array.isArray($$a)) {\n var $$v = null,\n $$i = _vm._i($$a, $$v)\n if ($$el.checked) {\n $$i < 0 &&\n _vm.$set(\n _vm.defaults,\n d.name,\n $$a.concat([$$v])\n )\n } else {\n $$i > -1 &&\n _vm.$set(\n _vm.defaults,\n d.name,\n $$a.slice(0, $$i).concat($$a.slice($$i + 1))\n )\n }\n } else {\n _vm.$set(_vm.defaults, d.name, $$c)\n }\n },\n },\n }),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"slider round\" }),\n ]),\n _vm._v(\" \"),\n _c(\"p\"),\n ]),\n ]),\n ])\n : d.type === \"select\"\n ? _c(\"div\", [\n _c(\"label\", { attrs: { for: d.name } }, [\n _vm._v(\n \"\\n \" + _vm._s(d.label) + \"\\n \"\n ),\n ]),\n _vm._v(\" \"),\n _c(\n \"select\",\n {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.defaults[d.name],\n expression: \"defaults[d.name]\",\n },\n ],\n staticClass: \"form-control\",\n attrs: { name: \"meta[\" + d.name + \"]\", id: d.name },\n on: {\n change: function ($event) {\n var $$selectedVal = Array.prototype.filter\n .call($event.target.options, function (o) {\n return o.selected\n })\n .map(function (o) {\n var val = \"_value\" in o ? o._value : o.value\n return val\n })\n _vm.$set(\n _vm.defaults,\n d.name,\n $event.target.multiple\n ? $$selectedVal\n : $$selectedVal[0]\n )\n },\n },\n },\n [\n _c(\"option\", { attrs: { value: \"\" } }, [\n _vm._v(\" \" + _vm._s(d.label)),\n ]),\n _vm._v(\" \"),\n _vm._l(d.options, function (o) {\n return _c(\"option\", { domProps: { value: o.value } }, [\n _vm._v(\" \" + _vm._s(o.title)),\n ])\n }),\n ],\n 2\n ),\n ])\n : d.type === \"multi\"\n ? _c(\n \"div\",\n [\n _c(\"label\", { attrs: { for: d.name } }, [\n _vm._v(\n \"\\n \" + _vm._s(d.label) + \"\\n \"\n ),\n ]),\n _vm._v(\" \"),\n _c(\"multiselect\", {\n attrs: {\n multiple: true,\n taggable: true,\n label: \"title\",\n placeholder: d.label,\n options: d.options,\n },\n on: {\n select: function ($event) {\n return _vm.upd()\n },\n },\n model: {\n value: _vm.defaults[d.name],\n callback: function ($$v) {\n _vm.$set(_vm.defaults, d.name, $$v)\n },\n expression: \"defaults[d.name]\",\n },\n }),\n _vm._v(\" \"),\n _c(\"input\", {\n attrs: {\n id: d.label,\n type: \"hidden\",\n name: \"meta[\" + d.name + \"]\",\n },\n domProps: { value: _vm.makeVal(_vm.defaults[d.name]) },\n }),\n ],\n 1\n )\n : d.type === \"singlemulti\"\n ? _c(\"div\", [\n _c(\"label\", { attrs: { for: d.name } }, [\n _vm._v(\n \"\\n \" + _vm._s(d.label) + \"\\n \"\n ),\n ]),\n _vm._v(\" \"),\n _vm.searchable\n ? _c(\n \"div\",\n [\n _c(\"multiselect\", {\n attrs: {\n multiple: true,\n taggable: true,\n label: \"title\",\n placeholder: d.label,\n options: d.options,\n },\n on: {\n select: function ($event) {\n return _vm.upd()\n },\n },\n model: {\n value: _vm.defaults[d.name],\n callback: function ($$v) {\n _vm.$set(_vm.defaults, d.name, $$v)\n },\n expression: \"defaults[d.name]\",\n },\n }),\n _vm._v(\" \"),\n _c(\"input\", {\n attrs: { type: \"hidden\", name: \"meta[\" + d.name + \"]\" },\n domProps: { value: _vm.defaults[d.name] },\n }),\n ],\n 1\n )\n : _c(\n \"select\",\n {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.defaults[d.name],\n expression: \"defaults[d.name]\",\n },\n ],\n staticClass: \"form-control\",\n attrs: { name: \"meta[\" + d.name + \"]\", id: d.name },\n on: {\n change: function ($event) {\n var $$selectedVal = Array.prototype.filter\n .call($event.target.options, function (o) {\n return o.selected\n })\n .map(function (o) {\n var val = \"_value\" in o ? o._value : o.value\n return val\n })\n _vm.$set(\n _vm.defaults,\n d.name,\n $event.target.multiple\n ? $$selectedVal\n : $$selectedVal[0]\n )\n },\n },\n },\n [\n _c(\"option\", { attrs: { value: \"\" } }, [\n _vm._v(\" \" + _vm._s(d.label)),\n ]),\n _vm._v(\" \"),\n _vm._l(d.options, function (o) {\n return _c(\"option\", { domProps: { value: o.value } }, [\n _vm._v(\" \" + _vm._s(o.title)),\n ])\n }),\n ],\n 2\n ),\n ])\n : _vm._e(),\n ])\n }),\n 0\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9NZXRhRWxlbWVudC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NWE2OTZlYzgmc2NvcGVkPXRydWUmLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSxvQkFBb0I7QUFDMUI7QUFDQSx5QkFBeUIsMEJBQTBCO0FBQ25EO0FBQ0E7QUFDQSw0QkFBNEIsU0FBUyxlQUFlO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQjtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakIsNEJBQTRCLDZCQUE2QjtBQUN6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkIsaUJBQWlCO0FBQ2pCLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsU0FBUyxlQUFlO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQjtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQiw0QkFBNEIsNkJBQTZCO0FBQ3pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQjtBQUNuQixpQkFBaUI7QUFDakIsZUFBZTtBQUNmO0FBQ0E7QUFDQSx3QkFBd0IsU0FBUyw0Q0FBNEM7QUFDN0UsNEJBQTRCLFNBQVMsZUFBZTtBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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QUF5QjtBQUN6Qix1QkFBdUI7QUFDdkI7QUFDQTtBQUNBLGlDQUFpQyw4Q0FBOEM7QUFDL0Usb0NBQW9DLDZCQUE2QjtBQUNqRSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQSwrQkFBK0IsMENBQTBDO0FBQ3pFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCLHVCQUF1QjtBQUN2QixxQkFBcUI7QUFDckI7QUFDQSxxQ0FBcUMsU0FBUyxhQUFhO0FBQzNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQThDLFlBQVksa0JBQWtCO0FBQzVFO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9NZXRhRWxlbWVudC52dWU/MjIyYSJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgcmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIHsgc3RhdGljQ2xhc3M6IFwicm93XCIgfSxcbiAgICBfdm0uX2woX3ZtLmVsbXMsIGZ1bmN0aW9uIChkKSB7XG4gICAgICByZXR1cm4gX2MoXCJkaXZcIiwgeyBjbGFzczogZC53aWR0aCArIFwiIG1iLTNcIiB9LCBbXG4gICAgICAgIGQudHlwZSA9PT0gXCJ0ZXh0XCJcbiAgICAgICAgICA/IF9jKFwiZGl2XCIsIFtcbiAgICAgICAgICAgICAgX2MoXCJsYWJlbFwiLCB7IGF0dHJzOiB7IGZvcjogZC5uYW1lIH0gfSwgW1xuICAgICAgICAgICAgICAgIF92bS5fdihcbiAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgICAgICAgICAgIFwiICsgX3ZtLl9zKGQubGFiZWwpICsgXCJcXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICBfYyhcImlucHV0XCIsIHtcbiAgICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwibW9kZWxcIixcbiAgICAgICAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LW1vZGVsXCIsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0uZGVmYXVsdHNbZC5uYW1lXSxcbiAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJkZWZhdWx0c1tkLm5hbWVdXCIsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZm9ybS1jb250cm9sXCIsXG4gICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICAgICAgaWQ6IGQubmFtZSxcbiAgICAgICAgICAgICAgICAgIG5hbWU6IFwibWV0YVtcIiArIGQubmFtZSArIFwiXVwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZG9tUHJvcHM6IHsgdmFsdWU6IF92bS5kZWZhdWx0c1tkLm5hbWVdIH0sXG4gICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgIGlucHV0OiBmdW5jdGlvbiAoJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICgkZXZlbnQudGFyZ2V0LmNvbXBvc2luZykge1xuICAgICAgICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF92bS4kc2V0KF92bS5kZWZhdWx0cywgZC5uYW1lLCAkZXZlbnQudGFyZ2V0LnZhbHVlKVxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIF0pXG4gICAgICAgICAgOiBkLnR5cGUgPT09IFwibnVtYmVyXCJcbiAgICAgICAgICA/IF9jKFwiZGl2XCIsIFtcbiAgICAgICAgICAgICAgX2MoXCJsYWJlbFwiLCB7IGF0dHJzOiB7IGZvcjogZC5uYW1lIH0gfSwgW1xuICAgICAgICAgICAgICAgIF92bS5fdihcbiAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgICAgICAgICAgIFwiICsgX3ZtLl9zKGQubGFiZWwpICsgXCJcXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgX2MoXCJpbnB1dFwiLCB7XG4gICAgICAgICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIm1vZGVsXCIsXG4gICAgICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1tb2RlbFwiLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLmRlZmF1bHRzW2QubmFtZV0sXG4gICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IFwiZGVmYXVsdHNbZC5uYW1lXVwiLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImZvcm0tY29udHJvbFwiLFxuICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICB0eXBlOiBcIm51bWJlclwiLFxuICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6IGQubGFiZWwsXG4gICAgICAgICAgICAgICAgICBpZDogZC5uYW1lLFxuICAgICAgICAgICAgICAgICAgbmFtZTogXCJtZXRhW1wiICsgZC5uYW1lICsgXCJdXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBkb21Qcm9wczogeyB2YWx1ZTogX3ZtLmRlZmF1bHRzW2QubmFtZV0gfSxcbiAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgaW5wdXQ6IGZ1bmN0aW9uICgkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCRldmVudC50YXJnZXQuY29tcG9zaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgX3ZtLiRzZXQoX3ZtLmRlZmF1bHRzLCBkLm5hbWUsICRldmVudC50YXJnZXQudmFsdWUpXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgXSlcbiAgICAgICAgICA6IGQudHlwZSA9PT0gXCJjb2xvclwiXG4gICAgICAgICAgPyBfYyhcImRpdlwiLCB7IGF0dHJzOiB7IGlkOiBkLm5hbWUsIG5hbWU6IFwibWV0YVtcIiArIGQubmFtZSArIFwiXVwiIH0gfSwgW1xuICAgICAgICAgICAgICBfYyhcImxhYmVsXCIsIHsgYXR0cnM6IHsgZm9yOiBkLm5hbWUgfSB9LCBbXG4gICAgICAgICAgICAgICAgX3ZtLl92KFxuICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICAgICAgICAgICAgXCIgKyBfdm0uX3MoZC5sYWJlbCkgKyBcIlxcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgIFwic2VsZWN0XCIsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJtb2RlbFwiLFxuICAgICAgICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1tb2RlbFwiLFxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0uZGVmYXVsdHNbZC5uYW1lXSxcbiAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcImRlZmF1bHRzW2QubmFtZV1cIixcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJmb3JtLWNvbnRyb2xcIixcbiAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IG5hbWU6IFwibWV0YVtcIiArIGQubmFtZSArIFwiXVwiLCBpZDogZC5uYW1lIH0sXG4gICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICBjaGFuZ2U6IGZ1bmN0aW9uICgkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICB2YXIgJCRzZWxlY3RlZFZhbCA9IEFycmF5LnByb3RvdHlwZS5maWx0ZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5jYWxsKCRldmVudC50YXJnZXQub3B0aW9ucywgZnVuY3Rpb24gKG8pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG8uc2VsZWN0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAubWFwKGZ1bmN0aW9uIChvKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWwgPSBcIl92YWx1ZVwiIGluIG8gPyBvLl92YWx1ZSA6IG8udmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbFxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICBfdm0uJHNldChcbiAgICAgICAgICAgICAgICAgICAgICAgIF92bS5kZWZhdWx0cyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGQubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICRldmVudC50YXJnZXQubXVsdGlwbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyAkJHNlbGVjdGVkVmFsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogJCRzZWxlY3RlZFZhbFswXVxuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICBfYyhcIm9wdGlvblwiLCB7IGF0dHJzOiB7IHZhbHVlOiBcIlwiIH0gfSwgW1xuICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIgKyBfdm0uX3MoZC5sYWJlbCkpLFxuICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgX3ZtLl9sKGQub3B0aW9ucywgZnVuY3Rpb24gKG8pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jKFxuICAgICAgICAgICAgICAgICAgICAgIFwib3B0aW9uXCIsXG4gICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU6IFwiYmFja2dyb3VuZC1jb2xvcjpcIiArIG8udmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBkb21Qcm9wczogeyB2YWx1ZTogby52YWx1ZSB9LFxuICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFxuICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxcbiAgICAgICAgICAgICAgICAgICAgXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fcyhvLnRpdGxlKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIF0pXG4gICAgICAgICAgOiBkLnR5cGUgPT09IFwiY2hlY2tib3hcIlxuICAgICAgICAgID8gX2MoXCJkaXZcIiwgW1xuICAgICAgICAgICAgICBfYyhcImxhYmVsXCIsIHsgYXR0cnM6IHsgZm9yOiBkLm5hbWUgfSB9LCBbXG4gICAgICAgICAgICAgICAgX3ZtLl92KFxuICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICAgICAgICAgICAgXCIgKyBfdm0uX3MoZC5sYWJlbCkgKyBcIlxcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgIF9jKFwiYnJcIiksXG4gICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwicGFuZWwgcGFuZWwtZGVmYXVsdFwiIH0sIFtcbiAgICAgICAgICAgICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcInBhbmVsLWJvZHlcIiB9LCBbXG4gICAgICAgICAgICAgICAgICBfYyhcImxhYmVsXCIsIHsgc3RhdGljQ2xhc3M6IFwic3dpdGNoXCIgfSwgW1xuICAgICAgICAgICAgICAgICAgICBfYyhcImlucHV0XCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwibW9kZWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LW1vZGVsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0uZGVmYXVsdHNbZC5uYW1lXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJkZWZhdWx0c1tkLm5hbWVdXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgbmFtZTogXCJtZXRhW1wiICsgZC5uYW1lICsgXCJdXCIsIHR5cGU6IFwiY2hlY2tib3hcIiB9LFxuICAgICAgICAgICAgICAgICAgICAgIGRvbVByb3BzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGVja2VkOiBBcnJheS5pc0FycmF5KF92bS5kZWZhdWx0c1tkLm5hbWVdKVxuICAgICAgICAgICAgICAgICAgICAgICAgICA/IF92bS5faShfdm0uZGVmYXVsdHNbZC5uYW1lXSwgbnVsbCkgPiAtMVxuICAgICAgICAgICAgICAgICAgICAgICAgICA6IF92bS5kZWZhdWx0c1tkLm5hbWVdLFxuICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZTogZnVuY3Rpb24gKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgJCRhID0gX3ZtLmRlZmF1bHRzW2QubmFtZV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJCRlbCA9ICRldmVudC50YXJnZXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJCRjID0gJCRlbC5jaGVja2VkID8gdHJ1ZSA6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KCQkYSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgJCR2ID0gbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQkaSA9IF92bS5faSgkJGEsICQkdilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJCRlbC5jaGVja2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkJGkgPCAwICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS4kc2V0KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5kZWZhdWx0cyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCRhLmNvbmNhdChbJCR2XSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkJGkgPiAtMSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uJHNldChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uZGVmYXVsdHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQkYS5zbGljZSgwLCAkJGkpLmNvbmNhdCgkJGEuc2xpY2UoJCRpICsgMSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLiRzZXQoX3ZtLmRlZmF1bHRzLCBkLm5hbWUsICQkYylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJzbGlkZXIgcm91bmRcIiB9KSxcbiAgICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgIF9jKFwicFwiKSxcbiAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICBdKVxuICAgICAgICAgIDogZC50eXBlID09PSBcInNlbGVjdFwiXG4gICAgICAgICAgPyBfYyhcImRpdlwiLCBbXG4gICAgICAgICAgICAgIF9jKFwibGFiZWxcIiwgeyBhdHRyczogeyBmb3I6IGQubmFtZSB9IH0sIFtcbiAgICAgICAgICAgICAgICBfdm0uX3YoXG4gICAgICAgICAgICAgICAgICBcIlxcbiAgICAgICAgICAgICAgICBcIiArIF92bS5fcyhkLmxhYmVsKSArIFwiXFxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgXCJzZWxlY3RcIixcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIm1vZGVsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LW1vZGVsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IF92bS5kZWZhdWx0c1tkLm5hbWVdLFxuICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IFwiZGVmYXVsdHNbZC5uYW1lXVwiLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImZvcm0tY29udHJvbFwiLFxuICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgbmFtZTogXCJtZXRhW1wiICsgZC5uYW1lICsgXCJdXCIsIGlkOiBkLm5hbWUgfSxcbiAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgIGNoYW5nZTogZnVuY3Rpb24gKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgIHZhciAkJHNlbGVjdGVkVmFsID0gQXJyYXkucHJvdG90eXBlLmZpbHRlclxuICAgICAgICAgICAgICAgICAgICAgICAgLmNhbGwoJGV2ZW50LnRhcmdldC5vcHRpb25zLCBmdW5jdGlvbiAobykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gby5zZWxlY3RlZFxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24gKG8pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbCA9IFwiX3ZhbHVlXCIgaW4gbyA/IG8uX3ZhbHVlIDogby52YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgIF92bS4kc2V0KFxuICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLmRlZmF1bHRzLFxuICAgICAgICAgICAgICAgICAgICAgICAgZC5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgJGV2ZW50LnRhcmdldC5tdWx0aXBsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICA/ICQkc2VsZWN0ZWRWYWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiAkJHNlbGVjdGVkVmFsWzBdXG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgIF9jKFwib3B0aW9uXCIsIHsgYXR0cnM6IHsgdmFsdWU6IFwiXCIgfSB9LCBbXG4gICAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiArIF92bS5fcyhkLmxhYmVsKSksXG4gICAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICBfdm0uX2woZC5vcHRpb25zLCBmdW5jdGlvbiAobykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2MoXCJvcHRpb25cIiwgeyBkb21Qcm9wczogeyB2YWx1ZTogby52YWx1ZSB9IH0sIFtcbiAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIgKyBfdm0uX3Moby50aXRsZSkpLFxuICAgICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICBdKVxuICAgICAgICAgIDogZC50eXBlID09PSBcIm11bHRpXCJcbiAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgX2MoXCJsYWJlbFwiLCB7IGF0dHJzOiB7IGZvcjogZC5uYW1lIH0gfSwgW1xuICAgICAgICAgICAgICAgICAgX3ZtLl92KFxuICAgICAgICAgICAgICAgICAgICBcIlxcbiAgICAgICAgICAgICAgICBcIiArIF92bS5fcyhkLmxhYmVsKSArIFwiXFxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICBfYyhcIm11bHRpc2VsZWN0XCIsIHtcbiAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgIG11bHRpcGxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICB0YWdnYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IFwidGl0bGVcIixcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6IGQubGFiZWwsXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IGQub3B0aW9ucyxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICBzZWxlY3Q6IGZ1bmN0aW9uICgkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLnVwZCgpXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgbW9kZWw6IHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IF92bS5kZWZhdWx0c1tkLm5hbWVdLFxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjazogZnVuY3Rpb24gKCQkdikge1xuICAgICAgICAgICAgICAgICAgICAgIF92bS4kc2V0KF92bS5kZWZhdWx0cywgZC5uYW1lLCAkJHYpXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IFwiZGVmYXVsdHNbZC5uYW1lXVwiLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgIF9jKFwiaW5wdXRcIiwge1xuICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6IGQubGFiZWwsXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiaGlkZGVuXCIsXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwibWV0YVtcIiArIGQubmFtZSArIFwiXVwiLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIGRvbVByb3BzOiB7IHZhbHVlOiBfdm0ubWFrZVZhbChfdm0uZGVmYXVsdHNbZC5uYW1lXSkgfSxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgKVxuICAgICAgICAgIDogZC50eXBlID09PSBcInNpbmdsZW11bHRpXCJcbiAgICAgICAgICA/IF9jKFwiZGl2XCIsIFtcbiAgICAgICAgICAgICAgX2MoXCJsYWJlbFwiLCB7IGF0dHJzOiB7IGZvcjogZC5uYW1lIH0gfSwgW1xuICAgICAgICAgICAgICAgIF92bS5fdihcbiAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgICAgICAgICAgIFwiICsgX3ZtLl9zKGQubGFiZWwpICsgXCJcXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICBfdm0uc2VhcmNoYWJsZVxuICAgICAgICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICBfYyhcIm11bHRpc2VsZWN0XCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG11bHRpcGxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0YWdnYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IFwidGl0bGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6IGQubGFiZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IGQub3B0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Q6IGZ1bmN0aW9uICgkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLnVwZCgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgbW9kZWw6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IF92bS5kZWZhdWx0c1tkLm5hbWVdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjazogZnVuY3Rpb24gKCQkdikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS4kc2V0KF92bS5kZWZhdWx0cywgZC5uYW1lLCAkJHYpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IFwiZGVmYXVsdHNbZC5uYW1lXVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgICAgIF9jKFwiaW5wdXRcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgdHlwZTogXCJoaWRkZW5cIiwgbmFtZTogXCJtZXRhW1wiICsgZC5uYW1lICsgXCJdXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbVByb3BzOiB7IHZhbHVlOiBfdm0uZGVmYXVsdHNbZC5uYW1lXSB9LFxuICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgOiBfYyhcbiAgICAgICAgICAgICAgICAgICAgXCJzZWxlY3RcIixcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJtb2RlbFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICByYXdOYW1lOiBcInYtbW9kZWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IF92bS5kZWZhdWx0c1tkLm5hbWVdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcImRlZmF1bHRzW2QubmFtZV1cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJmb3JtLWNvbnRyb2xcIixcbiAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBuYW1lOiBcIm1ldGFbXCIgKyBkLm5hbWUgKyBcIl1cIiwgaWQ6IGQubmFtZSB9LFxuICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2U6IGZ1bmN0aW9uICgkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyICQkc2VsZWN0ZWRWYWwgPSBBcnJheS5wcm90b3R5cGUuZmlsdGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmNhbGwoJGV2ZW50LnRhcmdldC5vcHRpb25zLCBmdW5jdGlvbiAobykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG8uc2VsZWN0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24gKG8pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWwgPSBcIl92YWx1ZVwiIGluIG8gPyBvLl92YWx1ZSA6IG8udmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uJHNldChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uZGVmYXVsdHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRldmVudC50YXJnZXQubXVsdGlwbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJCRzZWxlY3RlZFZhbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAkJHNlbGVjdGVkVmFsWzBdXG4gICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgIF9jKFwib3B0aW9uXCIsIHsgYXR0cnM6IHsgdmFsdWU6IFwiXCIgfSB9LCBbXG4gICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIgKyBfdm0uX3MoZC5sYWJlbCkpLFxuICAgICAgICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICAgICAgX3ZtLl9sKGQub3B0aW9ucywgZnVuY3Rpb24gKG8pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfYyhcIm9wdGlvblwiLCB7IGRvbVByb3BzOiB7IHZhbHVlOiBvLnZhbHVlIH0gfSwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIgKyBfdm0uX3Moby50aXRsZSkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIF0pXG4gICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgIF0pXG4gICAgfSksXG4gICAgMFxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/MetaElement.vue?vue&type=template&id=5a696ec8&scoped=true&\n");
/***/ }),
/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/MetaPrice.vue?vue&type=template&id=7664e32e&scoped=true&":
/*!*********************************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/MetaPrice.vue?vue&type=template&id=7664e32e&scoped=true& ***!
\*********************************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"render\": () => (/* binding */ render),\n/* harmony export */ \"staticRenderFns\": () => (/* binding */ staticRenderFns)\n/* harmony export */ });\nvar render = function () {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n [\n _c(\"h3\", [\n _vm._v(\"\\n \" + _vm._s(_vm.t.specialQuantity) + \"\\n \"),\n ]),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass: \"btn btn-success mb-3\",\n on: {\n click: function ($event) {\n return _vm.adding()\n },\n },\n },\n [_c(\"i\", { staticClass: \"fa fa-plus\" })]\n ),\n _vm._v(\" \"),\n _vm._l(_vm.quantities, function (q, k) {\n return _c(\"div\", { staticClass: \"border p-2\" }, [\n _c(\n \"div\",\n { staticClass: \"row\" },\n [\n _vm._l(_vm.elms, function (meta, i) {\n return meta.priceable\n ? _c(\"div\", { staticClass: \"col-md\" }, [\n _c(\"label\", { attrs: { for: meta.name + k } }, [\n _vm._v(\n \"\\n \" +\n _vm._s(meta.label) +\n \"\\n \"\n ),\n ]),\n _vm._v(\" \"),\n meta.type == \"select\" ||\n meta.type == \"multi\" ||\n meta.type == \"singlemulti\"\n ? _c(\"div\", [\n _c(\n \"select\",\n {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.quantities[k][meta.name],\n expression: \"quantities[k][meta.name]\",\n },\n ],\n class:\n \"form-control \" +\n (q[meta.name] === \"\" ? \"is-invalid\" : \"\"),\n attrs: { id: meta.name + k },\n on: {\n change: [\n function ($event) {\n var $$selectedVal = Array.prototype.filter\n .call(\n $event.target.options,\n function (o) {\n return o.selected\n }\n )\n .map(function (o) {\n var val =\n \"_value\" in o ? o._value : o.value\n return val\n })\n _vm.$set(\n _vm.quantities[k],\n meta.name,\n $event.target.multiple\n ? $$selectedVal\n : $$selectedVal[0]\n )\n },\n _vm.updateForce,\n ],\n },\n },\n [\n _c(\"option\", { attrs: { value: \"\" } }, [\n _vm._v(_vm._s(_vm.t.choose)),\n ]),\n _vm._v(\" \"),\n _vm._l(meta.options, function (op, j) {\n return _c(\n \"option\",\n { domProps: { value: op.value } },\n [_vm._v(\" \" + _vm._s(op.title))]\n )\n }),\n ],\n 2\n ),\n ])\n : meta.type == \"color\"\n ? _c(\"div\", [\n _c(\n \"select\",\n {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: q[meta.name],\n expression: \"q[meta.name]\",\n },\n ],\n class:\n \"form-control \" +\n (_vm.quantities[k][meta.name] === \"\"\n ? \"is-invalid\"\n : \"\"),\n attrs: { id: meta.name + k },\n on: {\n change: [\n function ($event) {\n var $$selectedVal = Array.prototype.filter\n .call(\n $event.target.options,\n function (o) {\n return o.selected\n }\n )\n .map(function (o) {\n var val =\n \"_value\" in o ? o._value : o.value\n return val\n })\n _vm.$set(\n q,\n meta.name,\n $event.target.multiple\n ? $$selectedVal\n : $$selectedVal[0]\n )\n },\n _vm.updateForce,\n ],\n },\n },\n [\n _c(\"option\", { attrs: { value: \"\" } }, [\n _vm._v(_vm._s(_vm.t.choose)),\n ]),\n _vm._v(\" \"),\n _vm._l(meta.options, function (o) {\n return _c(\n \"option\",\n {\n style: \"background-color:\" + o.value,\n domProps: { value: o.value },\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(o.title) +\n \"\\n \"\n ),\n ]\n )\n }),\n ],\n 2\n ),\n ])\n : meta.type == \"number\" || meta.type == \"text\"\n ? _c(\"div\", [\n _c(\"input\", {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.quantities[k][meta.name],\n expression: \"quantities[k][meta.name]\",\n },\n ],\n class:\n \"form-control \" +\n (q[meta.name] === \"\" ? \"is-invalid\" : \"\"),\n attrs: { type: \"text\", id: meta.name + k },\n domProps: { value: _vm.quantities[k][meta.name] },\n on: {\n blur: _vm.updateForce,\n input: function ($event) {\n if ($event.target.composing) {\n return\n }\n _vm.$set(\n _vm.quantities[k],\n meta.name,\n $event.target.value\n )\n },\n },\n }),\n ])\n : _c(\"div\", [\n _c(\n \"select\",\n {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.quantities[k][meta.name],\n expression: \"quantities[k][meta.name]\",\n },\n ],\n class:\n \"form-control \" +\n (q[meta.name] === \"\" ? \"is-invalid\" : \"\"),\n attrs: { id: meta.name + k },\n on: {\n change: [\n function ($event) {\n var $$selectedVal = Array.prototype.filter\n .call(\n $event.target.options,\n function (o) {\n return o.selected\n }\n )\n .map(function (o) {\n var val =\n \"_value\" in o ? o._value : o.value\n return val\n })\n _vm.$set(\n _vm.quantities[k],\n meta.name,\n $event.target.multiple\n ? $$selectedVal\n : $$selectedVal[0]\n )\n },\n _vm.updateForce,\n ],\n },\n },\n [\n _c(\"option\", { attrs: { value: \"\" } }, [\n _vm._v(_vm._s(_vm.t.choose)),\n ]),\n _vm._v(\" \"),\n _c(\"option\", { attrs: { value: \"0\" } }, [\n _vm._v(\" \" + _vm._s(_vm.t.false)),\n ]),\n _vm._v(\" \"),\n _c(\"option\", { attrs: { value: \"1\" } }, [\n _vm._v(\" \" + _vm._s(_vm.t.true)),\n ]),\n ]\n ),\n ]),\n ])\n : _vm._e()\n }),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"col-md\" },\n [\n _c(\"label\", { attrs: { for: \"price\" + k } }, [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.t.price) +\n \"\\n \"\n ),\n ]),\n _vm._v(\" \"),\n _c(\"currency\", {\n attrs: {\n placeholder: _vm.t.price,\n id: \"price\" + k,\n classes: \"form-control\",\n },\n on: { keyup: _vm.updateForce },\n model: {\n value: _vm.quantities[k].price,\n callback: function ($$v) {\n _vm.$set(_vm.quantities[k], \"price\", $$v)\n },\n expression: \"quantities[k].price\",\n },\n }),\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"col-md\" }, [\n _c(\"label\", { attrs: { for: \"q\" + k } }, [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.t.count) +\n \"\\n \"\n ),\n ]),\n _vm._v(\" \"),\n _c(\"input\", {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.quantities[k].count,\n expression: \"quantities[k].count\",\n },\n ],\n staticClass: \"form-control\",\n attrs: {\n \"data-id\": k,\n \"data-key\": \"count\",\n type: \"text\",\n placeholder: _vm.t.remove,\n id: \"q\" + k,\n },\n domProps: { value: _vm.quantities[k].count },\n on: {\n keyup: _vm.updateForce,\n input: function ($event) {\n if ($event.target.composing) {\n return\n }\n _vm.$set(_vm.quantities[k], \"count\", $event.target.value)\n },\n },\n }),\n ]),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"col-md\" }, [\n _c(\"br\"),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass: \"btn btn-dark mt-2\",\n on: {\n click: function ($event) {\n return _vm.showModal(k)\n },\n },\n },\n [_c(\"i\", { staticClass: \"fa fa-image\" })]\n ),\n ]),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"col-md\" }, [\n _c(\"br\"),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass: \"btn btn-danger mt-2\",\n on: {\n click: function ($event) {\n return _vm.rem(k)\n },\n },\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.t.remove) +\n \"\\n \"\n ),\n _c(\"i\", { staticClass: \"fa fa-trash\" }),\n ]\n ),\n ]),\n ],\n 2\n ),\n ])\n }),\n _vm._v(\" \"),\n _c(\"input\", {\n attrs: { type: \"hidden\", name: \"quantity\" },\n domProps: { value: JSON.stringify(_vm.quantities) },\n }),\n _vm._v(\" \"),\n _vm.modal\n ? _c(\"div\", { attrs: { id: \"overlay\" } }, [\n _c(\"div\", { staticClass: \"container\" }, [\n _c(\"img\", {\n staticClass: \"selected\",\n staticStyle: { display: \"none\" },\n attrs: { src: \"\", alt: \"\" },\n }),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"row\" },\n _vm._l(_vm.images, function (img, key, i) {\n return _c(\n \"div\",\n {\n key: key,\n staticClass: \"col-md-2 col-sm-6 mt-3\",\n on: {\n click: function ($event) {\n return _vm.changeImg(i)\n },\n },\n },\n [\n _c(\"img\", {\n class:\n _vm.quantities[_vm.onSelectImage].image === i\n ? \"selected\"\n : \"\",\n attrs: { src: img.original_url, alt: \"\" },\n }),\n ]\n )\n }),\n 0\n ),\n _vm._v(\" \"),\n _c(\"hr\"),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"btn btn-danger\", on: { click: _vm.hideModal } },\n [_c(\"div\", { staticClass: \"fa fa-times\" })]\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass: \"btn btn-primary\",\n on: { click: _vm.hideModal },\n },\n [_c(\"div\", { staticClass: \"fa fa-check\" })]\n ),\n ]),\n ])\n : _vm._e(),\n ],\n 2\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9NZXRhUHJpY2UudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTc2NjRlMzJlJnNjb3BlZD10cnVlJi5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYixXQUFXO0FBQ1gsU0FBUztBQUNULG1CQUFtQiwyQkFBMkI7QUFDOUM7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCLDJCQUEyQjtBQUN0RDtBQUNBO0FBQ0EsY0FBYyxvQkFBb0I7QUFDbEM7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDLHVCQUF1QjtBQUN2RCxvQ0FBb0MsU0FBUyxzQkFBc0I7QUFDbkU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQztBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QyxtQkFBbUI7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QztBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQztBQUNyQztBQUNBO0FBQ0EsaUNBQWlDO0FBQ2pDLCtCQUErQjtBQUMvQjtBQUNBLCtDQUErQyxTQUFTLGFBQWE7QUFDckU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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NkJBQTZCLDRCQUE0QjtBQUN6RDtBQUNBO0FBQ0E7QUFDQSwwQkFBMEIsdUJBQXVCO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QjtBQUN2QixxQkFBcUI7QUFDckIsbUJBQW1CO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4Qiw0QkFBNEI7QUFDMUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLGlCQUFpQixrQ0FBa0M7QUFDbkQsb0JBQW9CLHVDQUF1QztBQUMzRCxPQUFPO0FBQ1A7QUFDQTtBQUNBLHNCQUFzQixTQUFTLGlCQUFpQjtBQUNoRCx3QkFBd0IsMEJBQTBCO0FBQ2xEO0FBQ0E7QUFDQSwrQkFBK0IsaUJBQWlCO0FBQ2hELHlCQUF5QixrQkFBa0I7QUFDM0MsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixvQkFBb0I7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCLHVCQUF1QjtBQUN2QixxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDLGdDQUFnQztBQUNqRSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixxQ0FBcUMsd0JBQXdCO0FBQy9FLDZCQUE2Qiw0QkFBNEI7QUFDekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLHNCQUFzQjtBQUM5QyxpQkFBaUI7QUFDakIsNkJBQTZCLDRCQUE0QjtBQUN6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3Jlc291cmNlcy9qcy9jb21wb25lbnRzL01ldGFQcmljZS52dWU/YTIxYyJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgcmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIFtcbiAgICAgIF9jKFwiaDNcIiwgW1xuICAgICAgICBfdm0uX3YoXCJcXG4gICAgICAgIFwiICsgX3ZtLl9zKF92bS50LnNwZWNpYWxRdWFudGl0eSkgKyBcIlxcbiAgICBcIiksXG4gICAgICBdKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfYyhcbiAgICAgICAgXCJkaXZcIixcbiAgICAgICAge1xuICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImJ0biBidG4tc3VjY2VzcyBtYi0zXCIsXG4gICAgICAgICAgb246IHtcbiAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbiAoJGV2ZW50KSB7XG4gICAgICAgICAgICAgIHJldHVybiBfdm0uYWRkaW5nKClcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgW19jKFwiaVwiLCB7IHN0YXRpY0NsYXNzOiBcImZhIGZhLXBsdXNcIiB9KV1cbiAgICAgICksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX3ZtLl9sKF92bS5xdWFudGl0aWVzLCBmdW5jdGlvbiAocSwgaykge1xuICAgICAgICByZXR1cm4gX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJib3JkZXIgcC0yXCIgfSwgW1xuICAgICAgICAgIF9jKFxuICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6IFwicm93XCIgfSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgX3ZtLl9sKF92bS5lbG1zLCBmdW5jdGlvbiAobWV0YSwgaSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBtZXRhLnByaWNlYWJsZVxuICAgICAgICAgICAgICAgICAgPyBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcImNvbC1tZFwiIH0sIFtcbiAgICAgICAgICAgICAgICAgICAgICBfYyhcImxhYmVsXCIsIHsgYXR0cnM6IHsgZm9yOiBtZXRhLm5hbWUgKyBrIH0gfSwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFxuICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxcbiAgICAgICAgICAgICAgICAgICAgXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fcyhtZXRhLmxhYmVsKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICBtZXRhLnR5cGUgPT0gXCJzZWxlY3RcIiB8fFxuICAgICAgICAgICAgICAgICAgICAgIG1ldGEudHlwZSA9PSBcIm11bHRpXCIgfHxcbiAgICAgICAgICAgICAgICAgICAgICBtZXRhLnR5cGUgPT0gXCJzaW5nbGVtdWx0aVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA/IF9jKFwiZGl2XCIsIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic2VsZWN0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIm1vZGVsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXdOYW1lOiBcInYtbW9kZWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0ucXVhbnRpdGllc1trXVttZXRhLm5hbWVdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJxdWFudGl0aWVzW2tdW21ldGEubmFtZV1cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzczpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImZvcm0tY29udHJvbCBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHFbbWV0YS5uYW1lXSA9PT0gXCJcIiA/IFwiaXMtaW52YWxpZFwiIDogXCJcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IGlkOiBtZXRhLm5hbWUgKyBrIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciAkJHNlbGVjdGVkVmFsID0gQXJyYXkucHJvdG90eXBlLmZpbHRlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jYWxsKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGV2ZW50LnRhcmdldC5vcHRpb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKG8pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG8uc2VsZWN0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcChmdW5jdGlvbiAobykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbCA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiX3ZhbHVlXCIgaW4gbyA/IG8uX3ZhbHVlIDogby52YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS4kc2V0KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5xdWFudGl0aWVzW2tdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGEubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXZlbnQudGFyZ2V0Lm11bHRpcGxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICQkc2VsZWN0ZWRWYWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJCRzZWxlY3RlZFZhbFswXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLnVwZGF0ZUZvcmNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYyhcIm9wdGlvblwiLCB7IGF0dHJzOiB7IHZhbHVlOiBcIlwiIH0gfSwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihfdm0uX3MoX3ZtLnQuY2hvb3NlKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX2wobWV0YS5vcHRpb25zLCBmdW5jdGlvbiAob3AsIGopIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm9wdGlvblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBkb21Qcm9wczogeyB2YWx1ZTogb3AudmFsdWUgfSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW192bS5fdihcIiBcIiArIF92bS5fcyhvcC50aXRsZSkpXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICAgICAgICA6IG1ldGEudHlwZSA9PSBcImNvbG9yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gX2MoXCJkaXZcIiwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzZWxlY3RcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwibW9kZWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1tb2RlbFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHFbbWV0YS5uYW1lXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IFwicVttZXRhLm5hbWVdXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJmb3JtLWNvbnRyb2wgXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfdm0ucXVhbnRpdGllc1trXVttZXRhLm5hbWVdID09PSBcIlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFwiaXMtaW52YWxpZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFwiXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBpZDogbWV0YS5uYW1lICsgayB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZTogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgJCRzZWxlY3RlZFZhbCA9IEFycmF5LnByb3RvdHlwZS5maWx0ZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuY2FsbChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRldmVudC50YXJnZXQub3B0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChvKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvLnNlbGVjdGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24gKG8pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWwgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIl92YWx1ZVwiIGluIG8gPyBvLl92YWx1ZSA6IG8udmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uJHNldChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGEubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXZlbnQudGFyZ2V0Lm11bHRpcGxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICQkc2VsZWN0ZWRWYWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJCRzZWxlY3RlZFZhbFswXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLnVwZGF0ZUZvcmNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYyhcIm9wdGlvblwiLCB7IGF0dHJzOiB7IHZhbHVlOiBcIlwiIH0gfSwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihfdm0uX3MoX3ZtLnQuY2hvb3NlKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX2wobWV0YS5vcHRpb25zLCBmdW5jdGlvbiAobykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfYyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwib3B0aW9uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlOiBcImJhY2tncm91bmQtY29sb3I6XCIgKyBvLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb21Qcm9wczogeyB2YWx1ZTogby52YWx1ZSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fcyhvLnRpdGxlKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICAgICAgICAgIDogbWV0YS50eXBlID09IFwibnVtYmVyXCIgfHwgbWV0YS50eXBlID09IFwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICA/IF9jKFwiZGl2XCIsIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYyhcImlucHV0XCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwibW9kZWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXdOYW1lOiBcInYtbW9kZWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLnF1YW50aXRpZXNba11bbWV0YS5uYW1lXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcInF1YW50aXRpZXNba11bbWV0YS5uYW1lXVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImZvcm0tY29udHJvbCBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChxW21ldGEubmFtZV0gPT09IFwiXCIgPyBcImlzLWludmFsaWRcIiA6IFwiXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgdHlwZTogXCJ0ZXh0XCIsIGlkOiBtZXRhLm5hbWUgKyBrIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb21Qcm9wczogeyB2YWx1ZTogX3ZtLnF1YW50aXRpZXNba11bbWV0YS5uYW1lXSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmx1cjogX3ZtLnVwZGF0ZUZvcmNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dDogZnVuY3Rpb24gKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkZXZlbnQudGFyZ2V0LmNvbXBvc2luZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS4kc2V0KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLnF1YW50aXRpZXNba10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRhLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXZlbnQudGFyZ2V0LnZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICAgICAgICAgIDogX2MoXCJkaXZcIiwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzZWxlY3RcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwibW9kZWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1tb2RlbFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IF92bS5xdWFudGl0aWVzW2tdW21ldGEubmFtZV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcInF1YW50aXRpZXNba11bbWV0YS5uYW1lXVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZm9ybS1jb250cm9sIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocVttZXRhLm5hbWVdID09PSBcIlwiID8gXCJpcy1pbnZhbGlkXCIgOiBcIlwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgaWQ6IG1ldGEubmFtZSArIGsgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2U6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICgkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyICQkc2VsZWN0ZWRWYWwgPSBBcnJheS5wcm90b3R5cGUuZmlsdGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmNhbGwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXZlbnQudGFyZ2V0Lm9wdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAobykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gby5zZWxlY3RlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAubWFwKGZ1bmN0aW9uIChvKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJfdmFsdWVcIiBpbiBvID8gby5fdmFsdWUgOiBvLnZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLiRzZXQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLnF1YW50aXRpZXNba10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0YS5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRldmVudC50YXJnZXQubXVsdGlwbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJCRzZWxlY3RlZFZhbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAkJHNlbGVjdGVkVmFsWzBdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0udXBkYXRlRm9yY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jKFwib3B0aW9uXCIsIHsgYXR0cnM6IHsgdmFsdWU6IFwiXCIgfSB9LCBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KF92bS5fcyhfdm0udC5jaG9vc2UpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jKFwib3B0aW9uXCIsIHsgYXR0cnM6IHsgdmFsdWU6IFwiMFwiIH0gfSwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiArIF92bS5fcyhfdm0udC5mYWxzZSkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXCJvcHRpb25cIiwgeyBhdHRyczogeyB2YWx1ZTogXCIxXCIgfSB9LCBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiICsgX3ZtLl9zKF92bS50LnRydWUpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6IFwiY29sLW1kXCIgfSxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICBfYyhcImxhYmVsXCIsIHsgYXR0cnM6IHsgZm9yOiBcInByaWNlXCIgKyBrIH0gfSwgW1xuICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXG4gICAgICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICAgICAgICAgICAgICAgIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fcyhfdm0udC5wcmljZSkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgIF9jKFwiY3VycmVuY3lcIiwge1xuICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBfdm0udC5wcmljZSxcbiAgICAgICAgICAgICAgICAgICAgICBpZDogXCJwcmljZVwiICsgayxcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzc2VzOiBcImZvcm0tY29udHJvbFwiLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBvbjogeyBrZXl1cDogX3ZtLnVwZGF0ZUZvcmNlIH0sXG4gICAgICAgICAgICAgICAgICAgIG1vZGVsOiB7XG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IF92bS5xdWFudGl0aWVzW2tdLnByaWNlLFxuICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiBmdW5jdGlvbiAoJCR2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfdm0uJHNldChfdm0ucXVhbnRpdGllc1trXSwgXCJwcmljZVwiLCAkJHYpXG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcInF1YW50aXRpZXNba10ucHJpY2VcIixcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcImNvbC1tZFwiIH0sIFtcbiAgICAgICAgICAgICAgICBfYyhcImxhYmVsXCIsIHsgYXR0cnM6IHsgZm9yOiBcInFcIiArIGsgfSB9LCBbXG4gICAgICAgICAgICAgICAgICBfdm0uX3YoXG4gICAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgICAgICAgICAgICAgICBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgX3ZtLl9zKF92bS50LmNvdW50KSArXG4gICAgICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICBfYyhcImlucHV0XCIsIHtcbiAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwibW9kZWxcIixcbiAgICAgICAgICAgICAgICAgICAgICByYXdOYW1lOiBcInYtbW9kZWxcIixcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLnF1YW50aXRpZXNba10uY291bnQsXG4gICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJxdWFudGl0aWVzW2tdLmNvdW50XCIsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZm9ybS1jb250cm9sXCIsXG4gICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICBcImRhdGEtaWRcIjogayxcbiAgICAgICAgICAgICAgICAgICAgXCJkYXRhLWtleVwiOiBcImNvdW50XCIsXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogX3ZtLnQucmVtb3ZlLFxuICAgICAgICAgICAgICAgICAgICBpZDogXCJxXCIgKyBrLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIGRvbVByb3BzOiB7IHZhbHVlOiBfdm0ucXVhbnRpdGllc1trXS5jb3VudCB9LFxuICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAga2V5dXA6IF92bS51cGRhdGVGb3JjZSxcbiAgICAgICAgICAgICAgICAgICAgaW5wdXQ6IGZ1bmN0aW9uICgkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoJGV2ZW50LnRhcmdldC5jb21wb3NpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICBfdm0uJHNldChfdm0ucXVhbnRpdGllc1trXSwgXCJjb3VudFwiLCAkZXZlbnQudGFyZ2V0LnZhbHVlKVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwiY29sLW1kXCIgfSwgW1xuICAgICAgICAgICAgICAgIF9jKFwiYnJcIiksXG4gICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImJ0biBidG4tZGFyayBtdC0yXCIsXG4gICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uICgkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0uc2hvd01vZGFsKGspXG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBbX2MoXCJpXCIsIHsgc3RhdGljQ2xhc3M6IFwiZmEgZmEtaW1hZ2VcIiB9KV1cbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJjb2wtbWRcIiB9LCBbXG4gICAgICAgICAgICAgICAgX2MoXCJiclwiKSxcbiAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiYnRuIGJ0bi1kYW5nZXIgbXQtMlwiLFxuICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbiAoJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLnJlbShrKVxuICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXG4gICAgICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICAgICAgICAgICAgICAgIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fcyhfdm0udC5yZW1vdmUpICtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICBfYyhcImlcIiwgeyBzdGF0aWNDbGFzczogXCJmYSBmYS10cmFzaFwiIH0pLFxuICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIDJcbiAgICAgICAgICApLFxuICAgICAgICBdKVxuICAgICAgfSksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX2MoXCJpbnB1dFwiLCB7XG4gICAgICAgIGF0dHJzOiB7IHR5cGU6IFwiaGlkZGVuXCIsIG5hbWU6IFwicXVhbnRpdHlcIiB9LFxuICAgICAgICBkb21Qcm9wczogeyB2YWx1ZTogSlNPTi5zdHJpbmdpZnkoX3ZtLnF1YW50aXRpZXMpIH0sXG4gICAgICB9KSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfdm0ubW9kYWxcbiAgICAgICAgPyBfYyhcImRpdlwiLCB7IGF0dHJzOiB7IGlkOiBcIm92ZXJsYXlcIiB9IH0sIFtcbiAgICAgICAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwiY29udGFpbmVyXCIgfSwgW1xuICAgICAgICAgICAgICBfYyhcImltZ1wiLCB7XG4gICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwic2VsZWN0ZWRcIixcbiAgICAgICAgICAgICAgICBzdGF0aWNTdHlsZTogeyBkaXNwbGF5OiBcIm5vbmVcIiB9LFxuICAgICAgICAgICAgICAgIGF0dHJzOiB7IHNyYzogXCJcIiwgYWx0OiBcIlwiIH0sXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6IFwicm93XCIgfSxcbiAgICAgICAgICAgICAgICBfdm0uX2woX3ZtLmltYWdlcywgZnVuY3Rpb24gKGltZywga2V5LCBpKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gX2MoXG4gICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJjb2wtbWQtMiBjb2wtc20tNiBtdC0zXCIsXG4gICAgICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbiAoJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0uY2hhbmdlSW1nKGkpXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICBfYyhcImltZ1wiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzczpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLnF1YW50aXRpZXNbX3ZtLm9uU2VsZWN0SW1hZ2VdLmltYWdlID09PSBpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBcInNlbGVjdGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBzcmM6IGltZy5vcmlnaW5hbF91cmwsIGFsdDogXCJcIiB9LFxuICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICBfYyhcImhyXCIpLFxuICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6IFwiYnRuIGJ0bi1kYW5nZXJcIiwgb246IHsgY2xpY2s6IF92bS5oaWRlTW9kYWwgfSB9LFxuICAgICAgICAgICAgICAgIFtfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcImZhIGZhLXRpbWVzXCIgfSldXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiYnRuIGJ0bi1wcmltYXJ5XCIsXG4gICAgICAgICAgICAgICAgICBvbjogeyBjbGljazogX3ZtLmhpZGVNb2RhbCB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgW19jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwiZmEgZmEtY2hlY2tcIiB9KV1cbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIF0pLFxuICAgICAgICAgIF0pXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgXSxcbiAgICAyXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/MetaPrice.vue?vue&type=template&id=7664e32e&scoped=true&\n");
/***/ }),
/***/ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js":
/*!********************************************************************!*\
!*** ./node_modules/vue-loader/lib/runtime/componentNormalizer.js ***!
\********************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ normalizeComponent)\n/* harmony export */ });\n/* globals __VUE_SSR_CONTEXT__ */\n\n// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).\n// This module is a runtime utility for cleaner component module output and will\n// be included in the final webpack user bundle.\n\nfunction normalizeComponent (\n scriptExports,\n render,\n staticRenderFns,\n functionalTemplate,\n injectStyles,\n scopeId,\n moduleIdentifier, /* server only */\n shadowMode /* vue-cli only */\n) {\n // Vue.extend constructor export interop\n var options = typeof scriptExports === 'function'\n ? scriptExports.options\n : scriptExports\n\n // render functions\n if (render) {\n options.render = render\n options.staticRenderFns = staticRenderFns\n options._compiled = true\n }\n\n // functional template\n if (functionalTemplate) {\n options.functional = true\n }\n\n // scopedId\n if (scopeId) {\n options._scopeId = 'data-v-' + scopeId\n }\n\n var hook\n if (moduleIdentifier) { // server build\n hook = function (context) {\n // 2.3 injection\n context =\n context || // cached call\n (this.$vnode && this.$vnode.ssrContext) || // stateful\n (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n // 2.2 with runInNewContext: true\n if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n context = __VUE_SSR_CONTEXT__\n }\n // inject component styles\n if (injectStyles) {\n injectStyles.call(this, context)\n }\n // register component module identifier for async chunk inferrence\n if (context && context._registeredComponents) {\n context._registeredComponents.add(moduleIdentifier)\n }\n }\n // used by ssr in case component is cached and beforeCreate\n // never gets called\n options._ssrRegister = hook\n } else if (injectStyles) {\n hook = shadowMode\n ? function () {\n injectStyles.call(\n this,\n (options.functional ? this.parent : this).$root.$options.shadowRoot\n )\n }\n : injectStyles\n }\n\n if (hook) {\n if (options.functional) {\n // for template-only hot-reload because in that case the render fn doesn't\n // go through the normalizer\n options._injectStyles = hook\n // register for functional component in vue file\n var originalRender = options.render\n options.render = function renderWithStyleInjection (h, context) {\n hook.call(context)\n return originalRender(h, context)\n }\n } else {\n // inject component registration as beforeCreate hook\n var existing = options.beforeCreate\n options.beforeCreate = existing\n ? [].concat(existing, hook)\n : [hook]\n }\n }\n\n return {\n exports: scriptExports,\n options: options\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwwQkFBMEI7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanM/YWUwYyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBnbG9iYWxzIF9fVlVFX1NTUl9DT05URVhUX18gKi9cblxuLy8gSU1QT1JUQU5UOiBEbyBOT1QgdXNlIEVTMjAxNSBmZWF0dXJlcyBpbiB0aGlzIGZpbGUgKGV4Y2VwdCBmb3IgbW9kdWxlcykuXG4vLyBUaGlzIG1vZHVsZSBpcyBhIHJ1bnRpbWUgdXRpbGl0eSBmb3IgY2xlYW5lciBjb21wb25lbnQgbW9kdWxlIG91dHB1dCBhbmQgd2lsbFxuLy8gYmUgaW5jbHVkZWQgaW4gdGhlIGZpbmFsIHdlYnBhY2sgdXNlciBidW5kbGUuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG5vcm1hbGl6ZUNvbXBvbmVudCAoXG4gIHNjcmlwdEV4cG9ydHMsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmdW5jdGlvbmFsVGVtcGxhdGUsXG4gIGluamVjdFN0eWxlcyxcbiAgc2NvcGVJZCxcbiAgbW9kdWxlSWRlbnRpZmllciwgLyogc2VydmVyIG9ubHkgKi9cbiAgc2hhZG93TW9kZSAvKiB2dWUtY2xpIG9ubHkgKi9cbikge1xuICAvLyBWdWUuZXh0ZW5kIGNvbnN0cnVjdG9yIGV4cG9ydCBpbnRlcm9wXG4gIHZhciBvcHRpb25zID0gdHlwZW9mIHNjcmlwdEV4cG9ydHMgPT09ICdmdW5jdGlvbidcbiAgICA/IHNjcmlwdEV4cG9ydHMub3B0aW9uc1xuICAgIDogc2NyaXB0RXhwb3J0c1xuXG4gIC8vIHJlbmRlciBmdW5jdGlvbnNcbiAgaWYgKHJlbmRlcikge1xuICAgIG9wdGlvbnMucmVuZGVyID0gcmVuZGVyXG4gICAgb3B0aW9ucy5zdGF0aWNSZW5kZXJGbnMgPSBzdGF0aWNSZW5kZXJGbnNcbiAgICBvcHRpb25zLl9jb21waWxlZCA9IHRydWVcbiAgfVxuXG4gIC8vIGZ1bmN0aW9uYWwgdGVtcGxhdGVcbiAgaWYgKGZ1bmN0aW9uYWxUZW1wbGF0ZSkge1xuICAgIG9wdGlvbnMuZnVuY3Rpb25hbCA9IHRydWVcbiAgfVxuXG4gIC8vIHNjb3BlZElkXG4gIGlmIChzY29wZUlkKSB7XG4gICAgb3B0aW9ucy5fc2NvcGVJZCA9ICdkYXRhLXYtJyArIHNjb3BlSWRcbiAgfVxuXG4gIHZhciBob29rXG4gIGlmIChtb2R1bGVJZGVudGlmaWVyKSB7IC8vIHNlcnZlciBidWlsZFxuICAgIGhvb2sgPSBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgICAgLy8gMi4zIGluamVjdGlvblxuICAgICAgY29udGV4dCA9XG4gICAgICAgIGNvbnRleHQgfHwgLy8gY2FjaGVkIGNhbGxcbiAgICAgICAgKHRoaXMuJHZub2RlICYmIHRoaXMuJHZub2RlLnNzckNvbnRleHQpIHx8IC8vIHN0YXRlZnVsXG4gICAgICAgICh0aGlzLnBhcmVudCAmJiB0aGlzLnBhcmVudC4kdm5vZGUgJiYgdGhpcy5wYXJlbnQuJHZub2RlLnNzckNvbnRleHQpIC8vIGZ1bmN0aW9uYWxcbiAgICAgIC8vIDIuMiB3aXRoIHJ1bkluTmV3Q29udGV4dDogdHJ1ZVxuICAgICAgaWYgKCFjb250ZXh0ICYmIHR5cGVvZiBfX1ZVRV9TU1JfQ09OVEVYVF9fICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBjb250ZXh0ID0gX19WVUVfU1NSX0NPTlRFWFRfX1xuICAgICAgfVxuICAgICAgLy8gaW5qZWN0IGNvbXBvbmVudCBzdHlsZXNcbiAgICAgIGlmIChpbmplY3RTdHlsZXMpIHtcbiAgICAgICAgaW5qZWN0U3R5bGVzLmNhbGwodGhpcywgY29udGV4dClcbiAgICAgIH1cbiAgICAgIC8vIHJlZ2lzdGVyIGNvbXBvbmVudCBtb2R1bGUgaWRlbnRpZmllciBmb3IgYXN5bmMgY2h1bmsgaW5mZXJyZW5jZVxuICAgICAgaWYgKGNvbnRleHQgJiYgY29udGV4dC5fcmVnaXN0ZXJlZENvbXBvbmVudHMpIHtcbiAgICAgICAgY29udGV4dC5fcmVnaXN0ZXJlZENvbXBvbmVudHMuYWRkKG1vZHVsZUlkZW50aWZpZXIpXG4gICAgICB9XG4gICAgfVxuICAgIC8vIHVzZWQgYnkgc3NyIGluIGNhc2UgY29tcG9uZW50IGlzIGNhY2hlZCBhbmQgYmVmb3JlQ3JlYXRlXG4gICAgLy8gbmV2ZXIgZ2V0cyBjYWxsZWRcbiAgICBvcHRpb25zLl9zc3JSZWdpc3RlciA9IGhvb2tcbiAgfSBlbHNlIGlmIChpbmplY3RTdHlsZXMpIHtcbiAgICBob29rID0gc2hhZG93TW9kZVxuICAgICAgPyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGluamVjdFN0eWxlcy5jYWxsKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgKG9wdGlvbnMuZnVuY3Rpb25hbCA/IHRoaXMucGFyZW50IDogdGhpcykuJHJvb3QuJG9wdGlvbnMuc2hhZG93Um9vdFxuICAgICAgICApXG4gICAgICB9XG4gICAgICA6IGluamVjdFN0eWxlc1xuICB9XG5cbiAgaWYgKGhvb2spIHtcbiAgICBpZiAob3B0aW9ucy5mdW5jdGlvbmFsKSB7XG4gICAgICAvLyBmb3IgdGVtcGxhdGUtb25seSBob3QtcmVsb2FkIGJlY2F1c2UgaW4gdGhhdCBjYXNlIHRoZSByZW5kZXIgZm4gZG9lc24ndFxuICAgICAgLy8gZ28gdGhyb3VnaCB0aGUgbm9ybWFsaXplclxuICAgICAgb3B0aW9ucy5faW5qZWN0U3R5bGVzID0gaG9va1xuICAgICAgLy8gcmVnaXN0ZXIgZm9yIGZ1bmN0aW9uYWwgY29tcG9uZW50IGluIHZ1ZSBmaWxlXG4gICAgICB2YXIgb3JpZ2luYWxSZW5kZXIgPSBvcHRpb25zLnJlbmRlclxuICAgICAgb3B0aW9ucy5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXJXaXRoU3R5bGVJbmplY3Rpb24gKGgsIGNvbnRleHQpIHtcbiAgICAgICAgaG9vay5jYWxsKGNvbnRleHQpXG4gICAgICAgIHJldHVybiBvcmlnaW5hbFJlbmRlcihoLCBjb250ZXh0KVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBpbmplY3QgY29tcG9uZW50IHJlZ2lzdHJhdGlvbiBhcyBiZWZvcmVDcmVhdGUgaG9va1xuICAgICAgdmFyIGV4aXN0aW5nID0gb3B0aW9ucy5iZWZvcmVDcmVhdGVcbiAgICAgIG9wdGlvbnMuYmVmb3JlQ3JlYXRlID0gZXhpc3RpbmdcbiAgICAgICAgPyBbXS5jb25jYXQoZXhpc3RpbmcsIGhvb2spXG4gICAgICAgIDogW2hvb2tdXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBleHBvcnRzOiBzY3JpcHRFeHBvcnRzLFxuICAgIG9wdGlvbnM6IG9wdGlvbnNcbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/vue-loader/lib/runtime/componentNormalizer.js\n");
/***/ }),
/***/ "./node_modules/vue-multiselect/dist/vue-multiselect.min.js":
/*!******************************************************************!*\
!*** ./node_modules/vue-multiselect/dist/vue-multiselect.min.js ***!
\******************************************************************/
/***/ (function(module) {
eval("!function(t,e){ true?module.exports=e():0}(this,function(){return function(t){function e(i){if(n[i])return n[i].exports;var r=n[i]={i:i,l:!1,exports:{}};return t[i].call(r.exports,r,r.exports,e),r.l=!0,r.exports}var n={};return e.m=t,e.c=n,e.i=function(t){return t},e.d=function(t,n,i){e.o(t,n)||Object.defineProperty(t,n,{configurable:!1,enumerable:!0,get:i})},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,\"a\",n),n},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p=\"/\",e(e.s=60)}([function(t,e){var n=t.exports=\"undefined\"!=typeof window&&window.Math==Math?window:\"undefined\"!=typeof self&&self.Math==Math?self:Function(\"return this\")();\"number\"==typeof __g&&(__g=n)},function(t,e,n){var i=n(49)(\"wks\"),r=n(30),o=n(0).Symbol,s=\"function\"==typeof o;(t.exports=function(t){return i[t]||(i[t]=s&&o[t]||(s?o:r)(\"Symbol.\"+t))}).store=i},function(t,e,n){var i=n(5);t.exports=function(t){if(!i(t))throw TypeError(t+\" is not an object!\");return t}},function(t,e,n){var i=n(0),r=n(10),o=n(8),s=n(6),u=n(11),a=function(t,e,n){var l,c,f,p,h=t&a.F,d=t&a.G,v=t&a.S,g=t&a.P,y=t&a.B,m=d?i:v?i[e]||(i[e]={}):(i[e]||{}).prototype,b=d?r:r[e]||(r[e]={}),_=b.prototype||(b.prototype={});d&&(n=e);for(l in n)c=!h&&m&&void 0!==m[l],f=(c?m:n)[l],p=y&&c?u(f,i):g&&\"function\"==typeof f?u(Function.call,f):f,m&&s(m,l,f,t&a.U),b[l]!=f&&o(b,l,p),g&&_[l]!=f&&(_[l]=f)};i.core=r,a.F=1,a.G=2,a.S=4,a.P=8,a.B=16,a.W=32,a.U=64,a.R=128,t.exports=a},function(t,e,n){t.exports=!n(7)(function(){return 7!=Object.defineProperty({},\"a\",{get:function(){return 7}}).a})},function(t,e){t.exports=function(t){return\"object\"==typeof t?null!==t:\"function\"==typeof t}},function(t,e,n){var i=n(0),r=n(8),o=n(12),s=n(30)(\"src\"),u=Function.toString,a=(\"\"+u).split(\"toString\");n(10).inspectSource=function(t){return u.call(t)},(t.exports=function(t,e,n,u){var l=\"function\"==typeof n;l&&(o(n,\"name\")||r(n,\"name\",e)),t[e]!==n&&(l&&(o(n,s)||r(n,s,t[e]?\"\"+t[e]:a.join(String(e)))),t===i?t[e]=n:u?t[e]?t[e]=n:r(t,e,n):(delete t[e],r(t,e,n)))})(Function.prototype,\"toString\",function(){return\"function\"==typeof this&&this[s]||u.call(this)})},function(t,e){t.exports=function(t){try{return!!t()}catch(t){return!0}}},function(t,e,n){var i=n(13),r=n(25);t.exports=n(4)?function(t,e,n){return i.f(t,e,r(1,n))}:function(t,e,n){return t[e]=n,t}},function(t,e){var n={}.toString;t.exports=function(t){return n.call(t).slice(8,-1)}},function(t,e){var n=t.exports={version:\"2.5.7\"};\"number\"==typeof __e&&(__e=n)},function(t,e,n){var i=n(14);t.exports=function(t,e,n){if(i(t),void 0===e)return t;switch(n){case 1:return function(n){return t.call(e,n)};case 2:return function(n,i){return t.call(e,n,i)};case 3:return function(n,i,r){return t.call(e,n,i,r)}}return function(){return t.apply(e,arguments)}}},function(t,e){var n={}.hasOwnProperty;t.exports=function(t,e){return n.call(t,e)}},function(t,e,n){var i=n(2),r=n(41),o=n(29),s=Object.defineProperty;e.f=n(4)?Object.defineProperty:function(t,e,n){if(i(t),e=o(e,!0),i(n),r)try{return s(t,e,n)}catch(t){}if(\"get\"in n||\"set\"in n)throw TypeError(\"Accessors not supported!\");return\"value\"in n&&(t[e]=n.value),t}},function(t,e){t.exports=function(t){if(\"function\"!=typeof t)throw TypeError(t+\" is not a function!\");return t}},function(t,e){t.exports={}},function(t,e){t.exports=function(t){if(void 0==t)throw TypeError(\"Can't call method on \"+t);return t}},function(t,e,n){\"use strict\";var i=n(7);t.exports=function(t,e){return!!t&&i(function(){e?t.call(null,function(){},1):t.call(null)})}},function(t,e,n){var i=n(23),r=n(16);t.exports=function(t){return i(r(t))}},function(t,e,n){var i=n(53),r=Math.min;t.exports=function(t){return t>0?r(i(t),9007199254740991):0}},function(t,e,n){var i=n(11),r=n(23),o=n(28),s=n(19),u=n(64);t.exports=function(t,e){var n=1==t,a=2==t,l=3==t,c=4==t,f=6==t,p=5==t||f,h=e||u;return function(e,u,d){for(var v,g,y=o(e),m=r(y),b=i(u,d,3),_=s(m.length),x=0,w=n?h(e,_):a?h(e,0):void 0;_>x;x++)if((p||x in m)&&(v=m[x],g=b(v,x,y),t))if(n)w[x]=g;else if(g)switch(t){case 3:return!0;case 5:return v;case 6:return x;case 2:w.push(v)}else if(c)return!1;return f?-1:l||c?c:w}}},function(t,e,n){var i=n(5),r=n(0).document,o=i(r)&&i(r.createElement);t.exports=function(t){return o?r.createElement(t):{}}},function(t,e){t.exports=\"constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf\".split(\",\")},function(t,e,n){var i=n(9);t.exports=Object(\"z\").propertyIsEnumerable(0)?Object:function(t){return\"String\"==i(t)?t.split(\"\"):Object(t)}},function(t,e){t.exports=!1},function(t,e){t.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},function(t,e,n){var i=n(13).f,r=n(12),o=n(1)(\"toStringTag\");t.exports=function(t,e,n){t&&!r(t=n?t:t.prototype,o)&&i(t,o,{configurable:!0,value:e})}},function(t,e,n){var i=n(49)(\"keys\"),r=n(30);t.exports=function(t){return i[t]||(i[t]=r(t))}},function(t,e,n){var i=n(16);t.exports=function(t){return Object(i(t))}},function(t,e,n){var i=n(5);t.exports=function(t,e){if(!i(t))return t;var n,r;if(e&&\"function\"==typeof(n=t.toString)&&!i(r=n.call(t)))return r;if(\"function\"==typeof(n=t.valueOf)&&!i(r=n.call(t)))return r;if(!e&&\"function\"==typeof(n=t.toString)&&!i(r=n.call(t)))return r;throw TypeError(\"Can't convert object to primitive value\")}},function(t,e){var n=0,i=Math.random();t.exports=function(t){return\"Symbol(\".concat(void 0===t?\"\":t,\")_\",(++n+i).toString(36))}},function(t,e,n){\"use strict\";var i=n(0),r=n(12),o=n(9),s=n(67),u=n(29),a=n(7),l=n(77).f,c=n(45).f,f=n(13).f,p=n(51).trim,h=i.Number,d=h,v=h.prototype,g=\"Number\"==o(n(44)(v)),y=\"trim\"in String.prototype,m=function(t){var e=u(t,!1);if(\"string\"==typeof e&&e.length>2){e=y?e.trim():p(e,3);var n,i,r,o=e.charCodeAt(0);if(43===o||45===o){if(88===(n=e.charCodeAt(2))||120===n)return NaN}else if(48===o){switch(e.charCodeAt(1)){case 66:case 98:i=2,r=49;break;case 79:case 111:i=8,r=55;break;default:return+e}for(var s,a=e.slice(2),l=0,c=a.length;l<c;l++)if((s=a.charCodeAt(l))<48||s>r)return NaN;return parseInt(a,i)}}return+e};if(!h(\" 0o1\")||!h(\"0b1\")||h(\"+0x1\")){h=function(t){var e=arguments.length<1?0:t,n=this;return n instanceof h&&(g?a(function(){v.valueOf.call(n)}):\"Number\"!=o(n))?s(new d(m(e)),n,h):m(e)};for(var b,_=n(4)?l(d):\"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger\".split(\",\"),x=0;_.length>x;x++)r(d,b=_[x])&&!r(h,b)&&f(h,b,c(d,b));h.prototype=v,v.constructor=h,n(6)(i,\"Number\",h)}},function(t,e,n){\"use strict\";function i(t){return 0!==t&&(!(!Array.isArray(t)||0!==t.length)||!t)}function r(t){return function(){return!t.apply(void 0,arguments)}}function o(t,e){return void 0===t&&(t=\"undefined\"),null===t&&(t=\"null\"),!1===t&&(t=\"false\"),-1!==t.toString().toLowerCase().indexOf(e.trim())}function s(t,e,n,i){return t.filter(function(t){return o(i(t,n),e)})}function u(t){return t.filter(function(t){return!t.$isLabel})}function a(t,e){return function(n){return n.reduce(function(n,i){return i[t]&&i[t].length?(n.push({$groupLabel:i[e],$isLabel:!0}),n.concat(i[t])):n},[])}}function l(t,e,i,r,o){return function(u){return u.map(function(u){var a;if(!u[i])return console.warn(\"Options passed to vue-multiselect do not contain groups, despite the config.\"),[];var l=s(u[i],t,e,o);return l.length?(a={},n.i(d.a)(a,r,u[r]),n.i(d.a)(a,i,l),a):[]})}}var c=n(59),f=n(54),p=(n.n(f),n(95)),h=(n.n(p),n(31)),d=(n.n(h),n(58)),v=n(91),g=(n.n(v),n(98)),y=(n.n(g),n(92)),m=(n.n(y),n(88)),b=(n.n(m),n(97)),_=(n.n(b),n(89)),x=(n.n(_),n(96)),w=(n.n(x),n(93)),S=(n.n(w),n(90)),O=(n.n(S),function(){for(var t=arguments.length,e=new Array(t),n=0;n<t;n++)e[n]=arguments[n];return function(t){return e.reduce(function(t,e){return e(t)},t)}});e.a={data:function(){return{search:\"\",isOpen:!1,preferredOpenDirection:\"below\",optimizedHeight:this.maxHeight}},props:{internalSearch:{type:Boolean,default:!0},options:{type:Array,required:!0},multiple:{type:Boolean,default:!1},value:{type:null,default:function(){return[]}},trackBy:{type:String},label:{type:String},searchable:{type:Boolean,default:!0},clearOnSelect:{type:Boolean,default:!0},hideSelected:{type:Boolean,default:!1},placeholder:{type:String,default:\"Select option\"},allowEmpty:{type:Boolean,default:!0},resetAfter:{type:Boolean,default:!1},closeOnSelect:{type:Boolean,default:!0},customLabel:{type:Function,default:function(t,e){return i(t)?\"\":e?t[e]:t}},taggable:{type:Boolean,default:!1},tagPlaceholder:{type:String,default:\"Press enter to create a tag\"},tagPosition:{type:String,default:\"top\"},max:{type:[Number,Boolean],default:!1},id:{default:null},optionsLimit:{type:Number,default:1e3},groupValues:{type:String},groupLabel:{type:String},groupSelect:{type:Boolean,default:!1},blockKeys:{type:Array,default:function(){return[]}},preserveSearch:{type:Boolean,default:!1},preselectFirst:{type:Boolean,default:!1}},mounted:function(){!this.multiple&&this.max&&console.warn(\"[Vue-Multiselect warn]: Max prop should not be used when prop Multiple equals false.\"),this.preselectFirst&&!this.internalValue.length&&this.options.length&&this.select(this.filteredOptions[0])},computed:{internalValue:function(){return this.value||0===this.value?Array.isArray(this.value)?this.value:[this.value]:[]},filteredOptions:function(){var t=this.search||\"\",e=t.toLowerCase().trim(),n=this.options.concat();return n=this.internalSearch?this.groupValues?this.filterAndFlat(n,e,this.label):s(n,e,this.label,this.customLabel):this.groupValues?a(this.groupValues,this.groupLabel)(n):n,n=this.hideSelected?n.filter(r(this.isSelected)):n,this.taggable&&e.length&&!this.isExistingOption(e)&&(\"bottom\"===this.tagPosition?n.push({isTag:!0,label:t}):n.unshift({isTag:!0,label:t})),n.slice(0,this.optionsLimit)},valueKeys:function(){var t=this;return this.trackBy?this.internalValue.map(function(e){return e[t.trackBy]}):this.internalValue},optionKeys:function(){var t=this;return(this.groupValues?this.flatAndStrip(this.options):this.options).map(function(e){return t.customLabel(e,t.label).toString().toLowerCase()})},currentOptionLabel:function(){return this.multiple?this.searchable?\"\":this.placeholder:this.internalValue.length?this.getOptionLabel(this.internalValue[0]):this.searchable?\"\":this.placeholder}},watch:{internalValue:function(){this.resetAfter&&this.internalValue.length&&(this.search=\"\",this.$emit(\"input\",this.multiple?[]:null))},search:function(){this.$emit(\"search-change\",this.search,this.id)}},methods:{getValue:function(){return this.multiple?this.internalValue:0===this.internalValue.length?null:this.internalValue[0]},filterAndFlat:function(t,e,n){return O(l(e,n,this.groupValues,this.groupLabel,this.customLabel),a(this.groupValues,this.groupLabel))(t)},flatAndStrip:function(t){return O(a(this.groupValues,this.groupLabel),u)(t)},updateSearch:function(t){this.search=t},isExistingOption:function(t){return!!this.options&&this.optionKeys.indexOf(t)>-1},isSelected:function(t){var e=this.trackBy?t[this.trackBy]:t;return this.valueKeys.indexOf(e)>-1},isOptionDisabled:function(t){return!!t.$isDisabled},getOptionLabel:function(t){if(i(t))return\"\";if(t.isTag)return t.label;if(t.$isLabel)return t.$groupLabel;var e=this.customLabel(t,this.label);return i(e)?\"\":e},select:function(t,e){if(t.$isLabel&&this.groupSelect)return void this.selectGroup(t);if(!(-1!==this.blockKeys.indexOf(e)||this.disabled||t.$isDisabled||t.$isLabel)&&(!this.max||!this.multiple||this.internalValue.length!==this.max)&&(\"Tab\"!==e||this.pointerDirty)){if(t.isTag)this.$emit(\"tag\",t.label,this.id),this.search=\"\",this.closeOnSelect&&!this.multiple&&this.deactivate();else{if(this.isSelected(t))return void(\"Tab\"!==e&&this.removeElement(t));this.$emit(\"select\",t,this.id),this.multiple?this.$emit(\"input\",this.internalValue.concat([t]),this.id):this.$emit(\"input\",t,this.id),this.clearOnSelect&&(this.search=\"\")}this.closeOnSelect&&this.deactivate()}},selectGroup:function(t){var e=this,n=this.options.find(function(n){return n[e.groupLabel]===t.$groupLabel});if(n)if(this.wholeGroupSelected(n)){this.$emit(\"remove\",n[this.groupValues],this.id);var i=this.internalValue.filter(function(t){return-1===n[e.groupValues].indexOf(t)});this.$emit(\"input\",i,this.id)}else{var r=n[this.groupValues].filter(function(t){return!(e.isOptionDisabled(t)||e.isSelected(t))});this.$emit(\"select\",r,this.id),this.$emit(\"input\",this.internalValue.concat(r),this.id)}},wholeGroupSelected:function(t){var e=this;return t[this.groupValues].every(function(t){return e.isSelected(t)||e.isOptionDisabled(t)})},wholeGroupDisabled:function(t){return t[this.groupValues].every(this.isOptionDisabled)},removeElement:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(!this.disabled&&!t.$isDisabled){if(!this.allowEmpty&&this.internalValue.length<=1)return void this.deactivate();var i=\"object\"===n.i(c.a)(t)?this.valueKeys.indexOf(t[this.trackBy]):this.valueKeys.indexOf(t);if(this.$emit(\"remove\",t,this.id),this.multiple){var r=this.internalValue.slice(0,i).concat(this.internalValue.slice(i+1));this.$emit(\"input\",r,this.id)}else this.$emit(\"input\",null,this.id);this.closeOnSelect&&e&&this.deactivate()}},removeLastElement:function(){-1===this.blockKeys.indexOf(\"Delete\")&&0===this.search.length&&Array.isArray(this.internalValue)&&this.internalValue.length&&this.removeElement(this.internalValue[this.internalValue.length-1],!1)},activate:function(){var t=this;this.isOpen||this.disabled||(this.adjustPosition(),this.groupValues&&0===this.pointer&&this.filteredOptions.length&&(this.pointer=1),this.isOpen=!0,this.searchable?(this.preserveSearch||(this.search=\"\"),this.$nextTick(function(){return t.$refs.search.focus()})):this.$el.focus(),this.$emit(\"open\",this.id))},deactivate:function(){this.isOpen&&(this.isOpen=!1,this.searchable?this.$refs.search.blur():this.$el.blur(),this.preserveSearch||(this.search=\"\"),this.$emit(\"close\",this.getValue(),this.id))},toggle:function(){this.isOpen?this.deactivate():this.activate()},adjustPosition:function(){if(\"undefined\"!=typeof window){var t=this.$el.getBoundingClientRect().top,e=window.innerHeight-this.$el.getBoundingClientRect().bottom;e>this.maxHeight||e>t||\"below\"===this.openDirection||\"bottom\"===this.openDirection?(this.preferredOpenDirection=\"below\",this.optimizedHeight=Math.min(e-40,this.maxHeight)):(this.preferredOpenDirection=\"above\",this.optimizedHeight=Math.min(t-40,this.maxHeight))}}}}},function(t,e,n){\"use strict\";var i=n(54),r=(n.n(i),n(31));n.n(r);e.a={data:function(){return{pointer:0,pointerDirty:!1}},props:{showPointer:{type:Boolean,default:!0},optionHeight:{type:Number,default:40}},computed:{pointerPosition:function(){return this.pointer*this.optionHeight},visibleElements:function(){return this.optimizedHeight/this.optionHeight}},watch:{filteredOptions:function(){this.pointerAdjust()},isOpen:function(){this.pointerDirty=!1}},methods:{optionHighlight:function(t,e){return{\"multiselect__option--highlight\":t===this.pointer&&this.showPointer,\"multiselect__option--selected\":this.isSelected(e)}},groupHighlight:function(t,e){var n=this;if(!this.groupSelect)return[\"multiselect__option--group\",\"multiselect__option--disabled\"];var i=this.options.find(function(t){return t[n.groupLabel]===e.$groupLabel});return i&&!this.wholeGroupDisabled(i)?[\"multiselect__option--group\",{\"multiselect__option--highlight\":t===this.pointer&&this.showPointer},{\"multiselect__option--group-selected\":this.wholeGroupSelected(i)}]:\"multiselect__option--disabled\"},addPointerElement:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"Enter\",e=t.key;this.filteredOptions.length>0&&this.select(this.filteredOptions[this.pointer],e),this.pointerReset()},pointerForward:function(){this.pointer<this.filteredOptions.length-1&&(this.pointer++,this.$refs.list.scrollTop<=this.pointerPosition-(this.visibleElements-1)*this.optionHeight&&(this.$refs.list.scrollTop=this.pointerPosition-(this.visibleElements-1)*this.optionHeight),this.filteredOptions[this.pointer]&&this.filteredOptions[this.pointer].$isLabel&&!this.groupSelect&&this.pointerForward()),this.pointerDirty=!0},pointerBackward:function(){this.pointer>0?(this.pointer--,this.$refs.list.scrollTop>=this.pointerPosition&&(this.$refs.list.scrollTop=this.pointerPosition),this.filteredOptions[this.pointer]&&this.filteredOptions[this.pointer].$isLabel&&!this.groupSelect&&this.pointerBackward()):this.filteredOptions[this.pointer]&&this.filteredOptions[0].$isLabel&&!this.groupSelect&&this.pointerForward(),this.pointerDirty=!0},pointerReset:function(){this.closeOnSelect&&(this.pointer=0,this.$refs.list&&(this.$refs.list.scrollTop=0))},pointerAdjust:function(){this.pointer>=this.filteredOptions.length-1&&(this.pointer=this.filteredOptions.length?this.filteredOptions.length-1:0),this.filteredOptions.length>0&&this.filteredOptions[this.pointer].$isLabel&&!this.groupSelect&&this.pointerForward()},pointerSet:function(t){this.pointer=t,this.pointerDirty=!0}}}},function(t,e,n){\"use strict\";var i=n(36),r=n(74),o=n(15),s=n(18);t.exports=n(72)(Array,\"Array\",function(t,e){this._t=s(t),this._i=0,this._k=e},function(){var t=this._t,e=this._k,n=this._i++;return!t||n>=t.length?(this._t=void 0,r(1)):\"keys\"==e?r(0,n):\"values\"==e?r(0,t[n]):r(0,[n,t[n]])},\"values\"),o.Arguments=o.Array,i(\"keys\"),i(\"values\"),i(\"entries\")},function(t,e,n){\"use strict\";var i=n(31),r=(n.n(i),n(32)),o=n(33);e.a={name:\"vue-multiselect\",mixins:[r.a,o.a],props:{name:{type:String,default:\"\"},selectLabel:{type:String,default:\"Press enter to select\"},selectGroupLabel:{type:String,default:\"Press enter to select group\"},selectedLabel:{type:String,default:\"Selected\"},deselectLabel:{type:String,default:\"Press enter to remove\"},deselectGroupLabel:{type:String,default:\"Press enter to deselect group\"},showLabels:{type:Boolean,default:!0},limit:{type:Number,default:99999},maxHeight:{type:Number,default:300},limitText:{type:Function,default:function(t){return\"and \".concat(t,\" more\")}},loading:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},openDirection:{type:String,default:\"\"},showNoOptions:{type:Boolean,default:!0},showNoResults:{type:Boolean,default:!0},tabindex:{type:Number,default:0}},computed:{isSingleLabelVisible:function(){return(this.singleValue||0===this.singleValue)&&(!this.isOpen||!this.searchable)&&!this.visibleValues.length},isPlaceholderVisible:function(){return!(this.internalValue.length||this.searchable&&this.isOpen)},visibleValues:function(){return this.multiple?this.internalValue.slice(0,this.limit):[]},singleValue:function(){return this.internalValue[0]},deselectLabelText:function(){return this.showLabels?this.deselectLabel:\"\"},deselectGroupLabelText:function(){return this.showLabels?this.deselectGroupLabel:\"\"},selectLabelText:function(){return this.showLabels?this.selectLabel:\"\"},selectGroupLabelText:function(){return this.showLabels?this.selectGroupLabel:\"\"},selectedLabelText:function(){return this.showLabels?this.selectedLabel:\"\"},inputStyle:function(){if(this.searchable||this.multiple&&this.value&&this.value.length)return this.isOpen?{width:\"100%\"}:{width:\"0\",position:\"absolute\",padding:\"0\"}},contentStyle:function(){return this.options.length?{display:\"inline-block\"}:{display:\"block\"}},isAbove:function(){return\"above\"===this.openDirection||\"top\"===this.openDirection||\"below\"!==this.openDirection&&\"bottom\"!==this.openDirection&&\"above\"===this.preferredOpenDirection},showSearchInput:function(){return this.searchable&&(!this.hasSingleSelectedSlot||!this.visibleSingleValue&&0!==this.visibleSingleValue||this.isOpen)}}}},function(t,e,n){var i=n(1)(\"unscopables\"),r=Array.prototype;void 0==r[i]&&n(8)(r,i,{}),t.exports=function(t){r[i][t]=!0}},function(t,e,n){var i=n(18),r=n(19),o=n(85);t.exports=function(t){return function(e,n,s){var u,a=i(e),l=r(a.length),c=o(s,l);if(t&&n!=n){for(;l>c;)if((u=a[c++])!=u)return!0}else for(;l>c;c++)if((t||c in a)&&a[c]===n)return t||c||0;return!t&&-1}}},function(t,e,n){var i=n(9),r=n(1)(\"toStringTag\"),o=\"Arguments\"==i(function(){return arguments}()),s=function(t,e){try{return t[e]}catch(t){}};t.exports=function(t){var e,n,u;return void 0===t?\"Undefined\":null===t?\"Null\":\"string\"==typeof(n=s(e=Object(t),r))?n:o?i(e):\"Object\"==(u=i(e))&&\"function\"==typeof e.callee?\"Arguments\":u}},function(t,e,n){\"use strict\";var i=n(2);t.exports=function(){var t=i(this),e=\"\";return t.global&&(e+=\"g\"),t.ignoreCase&&(e+=\"i\"),t.multiline&&(e+=\"m\"),t.unicode&&(e+=\"u\"),t.sticky&&(e+=\"y\"),e}},function(t,e,n){var i=n(0).document;t.exports=i&&i.documentElement},function(t,e,n){t.exports=!n(4)&&!n(7)(function(){return 7!=Object.defineProperty(n(21)(\"div\"),\"a\",{get:function(){return 7}}).a})},function(t,e,n){var i=n(9);t.exports=Array.isArray||function(t){return\"Array\"==i(t)}},function(t,e,n){\"use strict\";function i(t){var e,n;this.promise=new t(function(t,i){if(void 0!==e||void 0!==n)throw TypeError(\"Bad Promise constructor\");e=t,n=i}),this.resolve=r(e),this.reject=r(n)}var r=n(14);t.exports.f=function(t){return new i(t)}},function(t,e,n){var i=n(2),r=n(76),o=n(22),s=n(27)(\"IE_PROTO\"),u=function(){},a=function(){var t,e=n(21)(\"iframe\"),i=o.length;for(e.style.display=\"none\",n(40).appendChild(e),e.src=\"javascript:\",t=e.contentWindow.document,t.open(),t.write(\"<script>document.F=Object<\\/script>\"),t.close(),a=t.F;i--;)delete a.prototype[o[i]];return a()};t.exports=Object.create||function(t,e){var n;return null!==t?(u.prototype=i(t),n=new u,u.prototype=null,n[s]=t):n=a(),void 0===e?n:r(n,e)}},function(t,e,n){var i=n(79),r=n(25),o=n(18),s=n(29),u=n(12),a=n(41),l=Object.getOwnPropertyDescriptor;e.f=n(4)?l:function(t,e){if(t=o(t),e=s(e,!0),a)try{return l(t,e)}catch(t){}if(u(t,e))return r(!i.f.call(t,e),t[e])}},function(t,e,n){var i=n(12),r=n(18),o=n(37)(!1),s=n(27)(\"IE_PROTO\");t.exports=function(t,e){var n,u=r(t),a=0,l=[];for(n in u)n!=s&&i(u,n)&&l.push(n);for(;e.length>a;)i(u,n=e[a++])&&(~o(l,n)||l.push(n));return l}},function(t,e,n){var i=n(46),r=n(22);t.exports=Object.keys||function(t){return i(t,r)}},function(t,e,n){var i=n(2),r=n(5),o=n(43);t.exports=function(t,e){if(i(t),r(e)&&e.constructor===t)return e;var n=o.f(t);return(0,n.resolve)(e),n.promise}},function(t,e,n){var i=n(10),r=n(0),o=r[\"__core-js_shared__\"]||(r[\"__core-js_shared__\"]={});(t.exports=function(t,e){return o[t]||(o[t]=void 0!==e?e:{})})(\"versions\",[]).push({version:i.version,mode:n(24)?\"pure\":\"global\",copyright:\"© 2018 Denis Pushkarev (zloirock.ru)\"})},function(t,e,n){var i=n(2),r=n(14),o=n(1)(\"species\");t.exports=function(t,e){var n,s=i(t).constructor;return void 0===s||void 0==(n=i(s)[o])?e:r(n)}},function(t,e,n){var i=n(3),r=n(16),o=n(7),s=n(84),u=\"[\"+s+\"]\",a=\"…\",l=RegExp(\"^\"+u+u+\"*\"),c=RegExp(u+u+\"*$\"),f=function(t,e,n){var r={},u=o(function(){return!!s[t]()||a[t]()!=a}),l=r[t]=u?e(p):s[t];n&&(r[n]=l),i(i.P+i.F*u,\"String\",r)},p=f.trim=function(t,e){return t=String(r(t)),1&e&&(t=t.replace(l,\"\")),2&e&&(t=t.replace(c,\"\")),t};t.exports=f},function(t,e,n){var i,r,o,s=n(11),u=n(68),a=n(40),l=n(21),c=n(0),f=c.process,p=c.setImmediate,h=c.clearImmediate,d=c.MessageChannel,v=c.Dispatch,g=0,y={},m=function(){var t=+this;if(y.hasOwnProperty(t)){var e=y[t];delete y[t],e()}},b=function(t){m.call(t.data)};p&&h||(p=function(t){for(var e=[],n=1;arguments.length>n;)e.push(arguments[n++]);return y[++g]=function(){u(\"function\"==typeof t?t:Function(t),e)},i(g),g},h=function(t){delete y[t]},\"process\"==n(9)(f)?i=function(t){f.nextTick(s(m,t,1))}:v&&v.now?i=function(t){v.now(s(m,t,1))}:d?(r=new d,o=r.port2,r.port1.onmessage=b,i=s(o.postMessage,o,1)):c.addEventListener&&\"function\"==typeof postMessage&&!c.importScripts?(i=function(t){c.postMessage(t+\"\",\"*\")},c.addEventListener(\"message\",b,!1)):i=\"onreadystatechange\"in l(\"script\")?function(t){a.appendChild(l(\"script\")).onreadystatechange=function(){a.removeChild(this),m.call(t)}}:function(t){setTimeout(s(m,t,1),0)}),t.exports={set:p,clear:h}},function(t,e){var n=Math.ceil,i=Math.floor;t.exports=function(t){return isNaN(t=+t)?0:(t>0?i:n)(t)}},function(t,e,n){\"use strict\";var i=n(3),r=n(20)(5),o=!0;\"find\"in[]&&Array(1).find(function(){o=!1}),i(i.P+i.F*o,\"Array\",{find:function(t){return r(this,t,arguments.length>1?arguments[1]:void 0)}}),n(36)(\"find\")},function(t,e,n){\"use strict\";var i,r,o,s,u=n(24),a=n(0),l=n(11),c=n(38),f=n(3),p=n(5),h=n(14),d=n(61),v=n(66),g=n(50),y=n(52).set,m=n(75)(),b=n(43),_=n(80),x=n(86),w=n(48),S=a.TypeError,O=a.process,L=O&&O.versions,k=L&&L.v8||\"\",P=a.Promise,T=\"process\"==c(O),V=function(){},E=r=b.f,A=!!function(){try{var t=P.resolve(1),e=(t.constructor={})[n(1)(\"species\")]=function(t){t(V,V)};return(T||\"function\"==typeof PromiseRejectionEvent)&&t.then(V)instanceof e&&0!==k.indexOf(\"6.6\")&&-1===x.indexOf(\"Chrome/66\")}catch(t){}}(),C=function(t){var e;return!(!p(t)||\"function\"!=typeof(e=t.then))&&e},D=function(t,e){if(!t._n){t._n=!0;var n=t._c;m(function(){for(var i=t._v,r=1==t._s,o=0;n.length>o;)!function(e){var n,o,s,u=r?e.ok:e.fail,a=e.resolve,l=e.reject,c=e.domain;try{u?(r||(2==t._h&&$(t),t._h=1),!0===u?n=i:(c&&c.enter(),n=u(i),c&&(c.exit(),s=!0)),n===e.promise?l(S(\"Promise-chain cycle\")):(o=C(n))?o.call(n,a,l):a(n)):l(i)}catch(t){c&&!s&&c.exit(),l(t)}}(n[o++]);t._c=[],t._n=!1,e&&!t._h&&j(t)})}},j=function(t){y.call(a,function(){var e,n,i,r=t._v,o=N(t);if(o&&(e=_(function(){T?O.emit(\"unhandledRejection\",r,t):(n=a.onunhandledrejection)?n({promise:t,reason:r}):(i=a.console)&&i.error&&i.error(\"Unhandled promise rejection\",r)}),t._h=T||N(t)?2:1),t._a=void 0,o&&e.e)throw e.v})},N=function(t){return 1!==t._h&&0===(t._a||t._c).length},$=function(t){y.call(a,function(){var e;T?O.emit(\"rejectionHandled\",t):(e=a.onrejectionhandled)&&e({promise:t,reason:t._v})})},F=function(t){var e=this;e._d||(e._d=!0,e=e._w||e,e._v=t,e._s=2,e._a||(e._a=e._c.slice()),D(e,!0))},M=function(t){var e,n=this;if(!n._d){n._d=!0,n=n._w||n;try{if(n===t)throw S(\"Promise can't be resolved itself\");(e=C(t))?m(function(){var i={_w:n,_d:!1};try{e.call(t,l(M,i,1),l(F,i,1))}catch(t){F.call(i,t)}}):(n._v=t,n._s=1,D(n,!1))}catch(t){F.call({_w:n,_d:!1},t)}}};A||(P=function(t){d(this,P,\"Promise\",\"_h\"),h(t),i.call(this);try{t(l(M,this,1),l(F,this,1))}catch(t){F.call(this,t)}},i=function(t){this._c=[],this._a=void 0,this._s=0,this._d=!1,this._v=void 0,this._h=0,this._n=!1},i.prototype=n(81)(P.prototype,{then:function(t,e){var n=E(g(this,P));return n.ok=\"function\"!=typeof t||t,n.fail=\"function\"==typeof e&&e,n.domain=T?O.domain:void 0,this._c.push(n),this._a&&this._a.push(n),this._s&&D(this,!1),n.promise},catch:function(t){return this.then(void 0,t)}}),o=function(){var t=new i;this.promise=t,this.resolve=l(M,t,1),this.reject=l(F,t,1)},b.f=E=function(t){return t===P||t===s?new o(t):r(t)}),f(f.G+f.W+f.F*!A,{Promise:P}),n(26)(P,\"Promise\"),n(83)(\"Promise\"),s=n(10).Promise,f(f.S+f.F*!A,\"Promise\",{reject:function(t){var e=E(this);return(0,e.reject)(t),e.promise}}),f(f.S+f.F*(u||!A),\"Promise\",{resolve:function(t){return w(u&&this===s?P:this,t)}}),f(f.S+f.F*!(A&&n(73)(function(t){P.all(t).catch(V)})),\"Promise\",{all:function(t){var e=this,n=E(e),i=n.resolve,r=n.reject,o=_(function(){var n=[],o=0,s=1;v(t,!1,function(t){var u=o++,a=!1;n.push(void 0),s++,e.resolve(t).then(function(t){a||(a=!0,n[u]=t,--s||i(n))},r)}),--s||i(n)});return o.e&&r(o.v),n.promise},race:function(t){var e=this,n=E(e),i=n.reject,r=_(function(){v(t,!1,function(t){e.resolve(t).then(n.resolve,i)})});return r.e&&i(r.v),n.promise}})},function(t,e,n){\"use strict\";var i=n(3),r=n(10),o=n(0),s=n(50),u=n(48);i(i.P+i.R,\"Promise\",{finally:function(t){var e=s(this,r.Promise||o.Promise),n=\"function\"==typeof t;return this.then(n?function(n){return u(e,t()).then(function(){return n})}:t,n?function(n){return u(e,t()).then(function(){throw n})}:t)}})},function(t,e,n){\"use strict\";function i(t){n(99)}var r=n(35),o=n(101),s=n(100),u=i,a=s(r.a,o.a,!1,u,null,null);e.a=a.exports},function(t,e,n){\"use strict\";function i(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}e.a=i},function(t,e,n){\"use strict\";function i(t){return(i=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t})(t)}function r(t){return(r=\"function\"==typeof Symbol&&\"symbol\"===i(Symbol.iterator)?function(t){return i(t)}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":i(t)})(t)}e.a=r},function(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var i=n(34),r=(n.n(i),n(55)),o=(n.n(r),n(56)),s=(n.n(o),n(57)),u=n(32),a=n(33);n.d(e,\"Multiselect\",function(){return s.a}),n.d(e,\"multiselectMixin\",function(){return u.a}),n.d(e,\"pointerMixin\",function(){return a.a}),e.default=s.a},function(t,e){t.exports=function(t,e,n,i){if(!(t instanceof e)||void 0!==i&&i in t)throw TypeError(n+\": incorrect invocation!\");return t}},function(t,e,n){var i=n(14),r=n(28),o=n(23),s=n(19);t.exports=function(t,e,n,u,a){i(e);var l=r(t),c=o(l),f=s(l.length),p=a?f-1:0,h=a?-1:1;if(n<2)for(;;){if(p in c){u=c[p],p+=h;break}if(p+=h,a?p<0:f<=p)throw TypeError(\"Reduce of empty array with no initial value\")}for(;a?p>=0:f>p;p+=h)p in c&&(u=e(u,c[p],p,l));return u}},function(t,e,n){var i=n(5),r=n(42),o=n(1)(\"species\");t.exports=function(t){var e;return r(t)&&(e=t.constructor,\"function\"!=typeof e||e!==Array&&!r(e.prototype)||(e=void 0),i(e)&&null===(e=e[o])&&(e=void 0)),void 0===e?Array:e}},function(t,e,n){var i=n(63);t.exports=function(t,e){return new(i(t))(e)}},function(t,e,n){\"use strict\";var i=n(8),r=n(6),o=n(7),s=n(16),u=n(1);t.exports=function(t,e,n){var a=u(t),l=n(s,a,\"\"[t]),c=l[0],f=l[1];o(function(){var e={};return e[a]=function(){return 7},7!=\"\"[t](e)})&&(r(String.prototype,t,c),i(RegExp.prototype,a,2==e?function(t,e){return f.call(t,this,e)}:function(t){return f.call(t,this)}))}},function(t,e,n){var i=n(11),r=n(70),o=n(69),s=n(2),u=n(19),a=n(87),l={},c={},e=t.exports=function(t,e,n,f,p){var h,d,v,g,y=p?function(){return t}:a(t),m=i(n,f,e?2:1),b=0;if(\"function\"!=typeof y)throw TypeError(t+\" is not iterable!\");if(o(y)){for(h=u(t.length);h>b;b++)if((g=e?m(s(d=t[b])[0],d[1]):m(t[b]))===l||g===c)return g}else for(v=y.call(t);!(d=v.next()).done;)if((g=r(v,m,d.value,e))===l||g===c)return g};e.BREAK=l,e.RETURN=c},function(t,e,n){var i=n(5),r=n(82).set;t.exports=function(t,e,n){var o,s=e.constructor;return s!==n&&\"function\"==typeof s&&(o=s.prototype)!==n.prototype&&i(o)&&r&&r(t,o),t}},function(t,e){t.exports=function(t,e,n){var i=void 0===n;switch(e.length){case 0:return i?t():t.call(n);case 1:return i?t(e[0]):t.call(n,e[0]);case 2:return i?t(e[0],e[1]):t.call(n,e[0],e[1]);case 3:return i?t(e[0],e[1],e[2]):t.call(n,e[0],e[1],e[2]);case 4:return i?t(e[0],e[1],e[2],e[3]):t.call(n,e[0],e[1],e[2],e[3])}return t.apply(n,e)}},function(t,e,n){var i=n(15),r=n(1)(\"iterator\"),o=Array.prototype;t.exports=function(t){return void 0!==t&&(i.Array===t||o[r]===t)}},function(t,e,n){var i=n(2);t.exports=function(t,e,n,r){try{return r?e(i(n)[0],n[1]):e(n)}catch(e){var o=t.return;throw void 0!==o&&i(o.call(t)),e}}},function(t,e,n){\"use strict\";var i=n(44),r=n(25),o=n(26),s={};n(8)(s,n(1)(\"iterator\"),function(){return this}),t.exports=function(t,e,n){t.prototype=i(s,{next:r(1,n)}),o(t,e+\" Iterator\")}},function(t,e,n){\"use strict\";var i=n(24),r=n(3),o=n(6),s=n(8),u=n(15),a=n(71),l=n(26),c=n(78),f=n(1)(\"iterator\"),p=!([].keys&&\"next\"in[].keys()),h=function(){return this};t.exports=function(t,e,n,d,v,g,y){a(n,e,d);var m,b,_,x=function(t){if(!p&&t in L)return L[t];switch(t){case\"keys\":case\"values\":return function(){return new n(this,t)}}return function(){return new n(this,t)}},w=e+\" Iterator\",S=\"values\"==v,O=!1,L=t.prototype,k=L[f]||L[\"@@iterator\"]||v&&L[v],P=k||x(v),T=v?S?x(\"entries\"):P:void 0,V=\"Array\"==e?L.entries||k:k;if(V&&(_=c(V.call(new t)))!==Object.prototype&&_.next&&(l(_,w,!0),i||\"function\"==typeof _[f]||s(_,f,h)),S&&k&&\"values\"!==k.name&&(O=!0,P=function(){return k.call(this)}),i&&!y||!p&&!O&&L[f]||s(L,f,P),u[e]=P,u[w]=h,v)if(m={values:S?P:x(\"values\"),keys:g?P:x(\"keys\"),entries:T},y)for(b in m)b in L||o(L,b,m[b]);else r(r.P+r.F*(p||O),e,m);return m}},function(t,e,n){var i=n(1)(\"iterator\"),r=!1;try{var o=[7][i]();o.return=function(){r=!0},Array.from(o,function(){throw 2})}catch(t){}t.exports=function(t,e){if(!e&&!r)return!1;var n=!1;try{var o=[7],s=o[i]();s.next=function(){return{done:n=!0}},o[i]=function(){return s},t(o)}catch(t){}return n}},function(t,e){t.exports=function(t,e){return{value:e,done:!!t}}},function(t,e,n){var i=n(0),r=n(52).set,o=i.MutationObserver||i.WebKitMutationObserver,s=i.process,u=i.Promise,a=\"process\"==n(9)(s);t.exports=function(){var t,e,n,l=function(){var i,r;for(a&&(i=s.domain)&&i.exit();t;){r=t.fn,t=t.next;try{r()}catch(i){throw t?n():e=void 0,i}}e=void 0,i&&i.enter()};if(a)n=function(){s.nextTick(l)};else if(!o||i.navigator&&i.navigator.standalone)if(u&&u.resolve){var c=u.resolve(void 0);n=function(){c.then(l)}}else n=function(){r.call(i,l)};else{var f=!0,p=document.createTextNode(\"\");new o(l).observe(p,{characterData:!0}),n=function(){p.data=f=!f}}return function(i){var r={fn:i,next:void 0};e&&(e.next=r),t||(t=r,n()),e=r}}},function(t,e,n){var i=n(13),r=n(2),o=n(47);t.exports=n(4)?Object.defineProperties:function(t,e){r(t);for(var n,s=o(e),u=s.length,a=0;u>a;)i.f(t,n=s[a++],e[n]);return t}},function(t,e,n){var i=n(46),r=n(22).concat(\"length\",\"prototype\");e.f=Object.getOwnPropertyNames||function(t){return i(t,r)}},function(t,e,n){var i=n(12),r=n(28),o=n(27)(\"IE_PROTO\"),s=Object.prototype;t.exports=Object.getPrototypeOf||function(t){return t=r(t),i(t,o)?t[o]:\"function\"==typeof t.constructor&&t instanceof t.constructor?t.constructor.prototype:t instanceof Object?s:null}},function(t,e){e.f={}.propertyIsEnumerable},function(t,e){t.exports=function(t){try{return{e:!1,v:t()}}catch(t){return{e:!0,v:t}}}},function(t,e,n){var i=n(6);t.exports=function(t,e,n){for(var r in e)i(t,r,e[r],n);return t}},function(t,e,n){var i=n(5),r=n(2),o=function(t,e){if(r(t),!i(e)&&null!==e)throw TypeError(e+\": can't set as prototype!\")};t.exports={set:Object.setPrototypeOf||(\"__proto__\"in{}?function(t,e,i){try{i=n(11)(Function.call,n(45).f(Object.prototype,\"__proto__\").set,2),i(t,[]),e=!(t instanceof Array)}catch(t){e=!0}return function(t,n){return o(t,n),e?t.__proto__=n:i(t,n),t}}({},!1):void 0),check:o}},function(t,e,n){\"use strict\";var i=n(0),r=n(13),o=n(4),s=n(1)(\"species\");t.exports=function(t){var e=i[t];o&&e&&!e[s]&&r.f(e,s,{configurable:!0,get:function(){return this}})}},function(t,e){t.exports=\"\\t\\n\\v\\f\\r    \\u2028\\u2029\\ufeff\"},function(t,e,n){var i=n(53),r=Math.max,o=Math.min;t.exports=function(t,e){return t=i(t),t<0?r(t+e,0):o(t,e)}},function(t,e,n){var i=n(0),r=i.navigator;t.exports=r&&r.userAgent||\"\"},function(t,e,n){var i=n(38),r=n(1)(\"iterator\"),o=n(15);t.exports=n(10).getIteratorMethod=function(t){if(void 0!=t)return t[r]||t[\"@@iterator\"]||o[i(t)]}},function(t,e,n){\"use strict\";var i=n(3),r=n(20)(2);i(i.P+i.F*!n(17)([].filter,!0),\"Array\",{filter:function(t){return r(this,t,arguments[1])}})},function(t,e,n){\"use strict\";var i=n(3),r=n(37)(!1),o=[].indexOf,s=!!o&&1/[1].indexOf(1,-0)<0;i(i.P+i.F*(s||!n(17)(o)),\"Array\",{indexOf:function(t){return s?o.apply(this,arguments)||0:r(this,t,arguments[1])}})},function(t,e,n){var i=n(3);i(i.S,\"Array\",{isArray:n(42)})},function(t,e,n){\"use strict\";var i=n(3),r=n(20)(1);i(i.P+i.F*!n(17)([].map,!0),\"Array\",{map:function(t){return r(this,t,arguments[1])}})},function(t,e,n){\"use strict\";var i=n(3),r=n(62);i(i.P+i.F*!n(17)([].reduce,!0),\"Array\",{reduce:function(t){return r(this,t,arguments.length,arguments[1],!1)}})},function(t,e,n){var i=Date.prototype,r=i.toString,o=i.getTime;new Date(NaN)+\"\"!=\"Invalid Date\"&&n(6)(i,\"toString\",function(){var t=o.call(this);return t===t?r.call(this):\"Invalid Date\"})},function(t,e,n){n(4)&&\"g\"!=/./g.flags&&n(13).f(RegExp.prototype,\"flags\",{configurable:!0,get:n(39)})},function(t,e,n){n(65)(\"search\",1,function(t,e,n){return[function(n){\"use strict\";var i=t(this),r=void 0==n?void 0:n[e];return void 0!==r?r.call(n,i):new RegExp(n)[e](String(i))},n]})},function(t,e,n){\"use strict\";n(94);var i=n(2),r=n(39),o=n(4),s=/./.toString,u=function(t){n(6)(RegExp.prototype,\"toString\",t,!0)};n(7)(function(){return\"/a/b\"!=s.call({source:\"a\",flags:\"b\"})})?u(function(){var t=i(this);return\"/\".concat(t.source,\"/\",\"flags\"in t?t.flags:!o&&t instanceof RegExp?r.call(t):void 0)}):\"toString\"!=s.name&&u(function(){return s.call(this)})},function(t,e,n){\"use strict\";n(51)(\"trim\",function(t){return function(){return t(this,3)}})},function(t,e,n){for(var i=n(34),r=n(47),o=n(6),s=n(0),u=n(8),a=n(15),l=n(1),c=l(\"iterator\"),f=l(\"toStringTag\"),p=a.Array,h={CSSRuleList:!0,CSSStyleDeclaration:!1,CSSValueList:!1,ClientRectList:!1,DOMRectList:!1,DOMStringList:!1,DOMTokenList:!0,DataTransferItemList:!1,FileList:!1,HTMLAllCollection:!1,HTMLCollection:!1,HTMLFormElement:!1,HTMLSelectElement:!1,MediaList:!0,MimeTypeArray:!1,NamedNodeMap:!1,NodeList:!0,PaintRequestList:!1,Plugin:!1,PluginArray:!1,SVGLengthList:!1,SVGNumberList:!1,SVGPathSegList:!1,SVGPointList:!1,SVGStringList:!1,SVGTransformList:!1,SourceBufferList:!1,StyleSheetList:!0,TextTrackCueList:!1,TextTrackList:!1,TouchList:!1},d=r(h),v=0;v<d.length;v++){var g,y=d[v],m=h[y],b=s[y],_=b&&b.prototype;if(_&&(_[c]||u(_,c,p),_[f]||u(_,f,y),a[y]=p,m))for(g in i)_[g]||o(_,g,i[g],!0)}},function(t,e){},function(t,e){t.exports=function(t,e,n,i,r,o){var s,u=t=t||{},a=typeof t.default;\"object\"!==a&&\"function\"!==a||(s=t,u=t.default);var l=\"function\"==typeof u?u.options:u;e&&(l.render=e.render,l.staticRenderFns=e.staticRenderFns,l._compiled=!0),n&&(l.functional=!0),r&&(l._scopeId=r);var c;if(o?(c=function(t){t=t||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,t||\"undefined\"==typeof __VUE_SSR_CONTEXT__||(t=__VUE_SSR_CONTEXT__),i&&i.call(this,t),t&&t._registeredComponents&&t._registeredComponents.add(o)},l._ssrRegister=c):i&&(c=i),c){var f=l.functional,p=f?l.render:l.beforeCreate;f?(l._injectStyles=c,l.render=function(t,e){return c.call(e),p(t,e)}):l.beforeCreate=p?[].concat(p,c):[c]}return{esModule:s,exports:u,options:l}}},function(t,e,n){\"use strict\";var i=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n(\"div\",{staticClass:\"multiselect\",class:{\"multiselect--active\":t.isOpen,\"multiselect--disabled\":t.disabled,\"multiselect--above\":t.isAbove},attrs:{tabindex:t.searchable?-1:t.tabindex},on:{focus:function(e){t.activate()},blur:function(e){!t.searchable&&t.deactivate()},keydown:[function(e){return\"button\"in e||!t._k(e.keyCode,\"down\",40,e.key,[\"Down\",\"ArrowDown\"])?e.target!==e.currentTarget?null:(e.preventDefault(),void t.pointerForward()):null},function(e){return\"button\"in e||!t._k(e.keyCode,\"up\",38,e.key,[\"Up\",\"ArrowUp\"])?e.target!==e.currentTarget?null:(e.preventDefault(),void t.pointerBackward()):null}],keypress:function(e){return\"button\"in e||!t._k(e.keyCode,\"enter\",13,e.key,\"Enter\")||!t._k(e.keyCode,\"tab\",9,e.key,\"Tab\")?(e.stopPropagation(),e.target!==e.currentTarget?null:void t.addPointerElement(e)):null},keyup:function(e){if(!(\"button\"in e)&&t._k(e.keyCode,\"esc\",27,e.key,\"Escape\"))return null;t.deactivate()}}},[t._t(\"caret\",[n(\"div\",{staticClass:\"multiselect__select\",on:{mousedown:function(e){e.preventDefault(),e.stopPropagation(),t.toggle()}}})],{toggle:t.toggle}),t._v(\" \"),t._t(\"clear\",null,{search:t.search}),t._v(\" \"),n(\"div\",{ref:\"tags\",staticClass:\"multiselect__tags\"},[t._t(\"selection\",[n(\"div\",{directives:[{name:\"show\",rawName:\"v-show\",value:t.visibleValues.length>0,expression:\"visibleValues.length > 0\"}],staticClass:\"multiselect__tags-wrap\"},[t._l(t.visibleValues,function(e,i){return[t._t(\"tag\",[n(\"span\",{key:i,staticClass:\"multiselect__tag\"},[n(\"span\",{domProps:{textContent:t._s(t.getOptionLabel(e))}}),t._v(\" \"),n(\"i\",{staticClass:\"multiselect__tag-icon\",attrs:{\"aria-hidden\":\"true\",tabindex:\"1\"},on:{keypress:function(n){if(!(\"button\"in n)&&t._k(n.keyCode,\"enter\",13,n.key,\"Enter\"))return null;n.preventDefault(),t.removeElement(e)},mousedown:function(n){n.preventDefault(),t.removeElement(e)}}})])],{option:e,search:t.search,remove:t.removeElement})]})],2),t._v(\" \"),t.internalValue&&t.internalValue.length>t.limit?[t._t(\"limit\",[n(\"strong\",{staticClass:\"multiselect__strong\",domProps:{textContent:t._s(t.limitText(t.internalValue.length-t.limit))}})])]:t._e()],{search:t.search,remove:t.removeElement,values:t.visibleValues,isOpen:t.isOpen}),t._v(\" \"),n(\"transition\",{attrs:{name:\"multiselect__loading\"}},[t._t(\"loading\",[n(\"div\",{directives:[{name:\"show\",rawName:\"v-show\",value:t.loading,expression:\"loading\"}],staticClass:\"multiselect__spinner\"})])],2),t._v(\" \"),t.searchable?n(\"input\",{ref:\"search\",staticClass:\"multiselect__input\",style:t.inputStyle,attrs:{name:t.name,id:t.id,type:\"text\",autocomplete:\"nope\",placeholder:t.placeholder,disabled:t.disabled,tabindex:t.tabindex},domProps:{value:t.search},on:{input:function(e){t.updateSearch(e.target.value)},focus:function(e){e.preventDefault(),t.activate()},blur:function(e){e.preventDefault(),t.deactivate()},keyup:function(e){if(!(\"button\"in e)&&t._k(e.keyCode,\"esc\",27,e.key,\"Escape\"))return null;t.deactivate()},keydown:[function(e){if(!(\"button\"in e)&&t._k(e.keyCode,\"down\",40,e.key,[\"Down\",\"ArrowDown\"]))return null;e.preventDefault(),t.pointerForward()},function(e){if(!(\"button\"in e)&&t._k(e.keyCode,\"up\",38,e.key,[\"Up\",\"ArrowUp\"]))return null;e.preventDefault(),t.pointerBackward()},function(e){if(!(\"button\"in e)&&t._k(e.keyCode,\"delete\",[8,46],e.key,[\"Backspace\",\"Delete\"]))return null;e.stopPropagation(),t.removeLastElement()}],keypress:function(e){return\"button\"in e||!t._k(e.keyCode,\"enter\",13,e.key,\"Enter\")?(e.preventDefault(),e.stopPropagation(),e.target!==e.currentTarget?null:void t.addPointerElement(e)):null}}}):t._e(),t._v(\" \"),t.isSingleLabelVisible?n(\"span\",{staticClass:\"multiselect__single\",on:{mousedown:function(e){return e.preventDefault(),t.toggle(e)}}},[t._t(\"singleLabel\",[[t._v(t._s(t.currentOptionLabel))]],{option:t.singleValue})],2):t._e(),t._v(\" \"),t.isPlaceholderVisible?n(\"span\",{staticClass:\"multiselect__placeholder\",on:{mousedown:function(e){return e.preventDefault(),t.toggle(e)}}},[t._t(\"placeholder\",[t._v(\"\\n \"+t._s(t.placeholder)+\"\\n \")])],2):t._e()],2),t._v(\" \"),n(\"transition\",{attrs:{name:\"multiselect\"}},[n(\"div\",{directives:[{name:\"show\",rawName:\"v-show\",value:t.isOpen,expression:\"isOpen\"}],ref:\"list\",staticClass:\"multiselect__content-wrapper\",style:{maxHeight:t.optimizedHeight+\"px\"},attrs:{tabindex:\"-1\"},on:{focus:t.activate,mousedown:function(t){t.preventDefault()}}},[n(\"ul\",{staticClass:\"multiselect__content\",style:t.contentStyle},[t._t(\"beforeList\"),t._v(\" \"),t.multiple&&t.max===t.internalValue.length?n(\"li\",[n(\"span\",{staticClass:\"multiselect__option\"},[t._t(\"maxElements\",[t._v(\"Maximum of \"+t._s(t.max)+\" options selected. First remove a selected option to select another.\")])],2)]):t._e(),t._v(\" \"),!t.max||t.internalValue.length<t.max?t._l(t.filteredOptions,function(e,i){return n(\"li\",{key:i,staticClass:\"multiselect__element\"},[e&&(e.$isLabel||e.$isDisabled)?t._e():n(\"span\",{staticClass:\"multiselect__option\",class:t.optionHighlight(i,e),attrs:{\"data-select\":e&&e.isTag?t.tagPlaceholder:t.selectLabelText,\"data-selected\":t.selectedLabelText,\"data-deselect\":t.deselectLabelText},on:{click:function(n){n.stopPropagation(),t.select(e)},mouseenter:function(e){if(e.target!==e.currentTarget)return null;t.pointerSet(i)}}},[t._t(\"option\",[n(\"span\",[t._v(t._s(t.getOptionLabel(e)))])],{option:e,search:t.search})],2),t._v(\" \"),e&&(e.$isLabel||e.$isDisabled)?n(\"span\",{staticClass:\"multiselect__option\",class:t.groupHighlight(i,e),attrs:{\"data-select\":t.groupSelect&&t.selectGroupLabelText,\"data-deselect\":t.groupSelect&&t.deselectGroupLabelText},on:{mouseenter:function(e){if(e.target!==e.currentTarget)return null;t.groupSelect&&t.pointerSet(i)},mousedown:function(n){n.preventDefault(),t.selectGroup(e)}}},[t._t(\"option\",[n(\"span\",[t._v(t._s(t.getOptionLabel(e)))])],{option:e,search:t.search})],2):t._e()])}):t._e(),t._v(\" \"),n(\"li\",{directives:[{name:\"show\",rawName:\"v-show\",value:t.showNoResults&&0===t.filteredOptions.length&&t.search&&!t.loading,expression:\"showNoResults && (filteredOptions.length === 0 && search && !loading)\"}]},[n(\"span\",{staticClass:\"multiselect__option\"},[t._t(\"noResult\",[t._v(\"No elements found. Consider changing the search query.\")],{search:t.search})],2)]),t._v(\" \"),n(\"li\",{directives:[{name:\"show\",rawName:\"v-show\",value:t.showNoOptions&&0===t.options.length&&!t.search&&!t.loading,expression:\"showNoOptions && (options.length === 0 && !search && !loading)\"}]},[n(\"span\",{staticClass:\"multiselect__option\"},[t._t(\"noOptions\",[t._v(\"List is empty.\")])],2)]),t._v(\" \"),t._t(\"afterList\")],2)])])],2)},r=[],o={render:i,staticRenderFns:r};e.a=o}])});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvdnVlLW11bHRpc2VsZWN0L2Rpc3QvdnVlLW11bHRpc2VsZWN0Lm1pbi5qcy5qcyIsIm1hcHBpbmdzIjoiQUFBQSxlQUFlLEtBQWlELG9CQUFvQixDQUEySCxDQUFDLGlCQUFpQixtQkFBbUIsY0FBYyw0QkFBNEIsWUFBWSxxQkFBcUIsMkRBQTJELFNBQVMsbUNBQW1DLFNBQVMscUJBQXFCLHFDQUFxQyxvQ0FBb0MsRUFBRSxpQkFBaUIsaUNBQWlDLGlCQUFpQixZQUFZLFVBQVUsc0JBQXNCLG1CQUFtQixpREFBaUQsbUJBQW1CLGdCQUFnQiw4SUFBOEksOEJBQThCLGlCQUFpQixnRUFBZ0UsdUJBQXVCLGtEQUFrRCxVQUFVLGlCQUFpQixXQUFXLHNCQUFzQixpREFBaUQsVUFBVSxpQkFBaUIsMkRBQTJELDBFQUEwRSxXQUFXLGdDQUFnQyxnQ0FBZ0MsRUFBRSxTQUFTLG9LQUFvSywwRUFBMEUsaUJBQWlCLDJCQUEyQixrQ0FBa0MsTUFBTSxlQUFlLFVBQVUsSUFBSSxFQUFFLGVBQWUsc0JBQXNCLHdEQUF3RCxpQkFBaUIsd0ZBQXdGLGdDQUFnQyxpQkFBaUIsOEJBQThCLDJCQUEyQiwwSkFBMEosMkNBQTJDLHFEQUFxRCxFQUFFLGVBQWUsc0JBQXNCLElBQUksWUFBWSxTQUFTLFdBQVcsaUJBQWlCLG9CQUFvQiwrQkFBK0IsdUJBQXVCLGlCQUFpQixpQkFBaUIsZUFBZSxRQUFRLFVBQVUsc0JBQXNCLDhCQUE4QixlQUFlLGlCQUFpQixpQkFBaUIsOEJBQThCLGlCQUFpQixZQUFZLDBCQUEwQiw0QkFBNEIsVUFBVSwwQkFBMEIsb0JBQW9CLDRCQUE0QixzQkFBc0IsOEJBQThCLHdCQUF3QixrQkFBa0IsOEJBQThCLGVBQWUsUUFBUSxnQkFBZ0Isd0JBQXdCLG9CQUFvQixpQkFBaUIsbURBQW1ELCtDQUErQyw2QkFBNkIsZ0JBQWdCLFVBQVUsb0VBQW9FLHFDQUFxQyxlQUFlLHNCQUFzQixpRUFBaUUsVUFBVSxlQUFlLGFBQWEsZUFBZSxz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LGVBQWUsMkJBQTJCLGFBQWEsMExBQTBMLEVBQUUsWUFBWSxrQ0FBa0Msb0ZBQW9GLGdCQUFnQiwwQkFBMEIsYUFBYSw0S0FBNEssRUFBRSxZQUFZLGtDQUFrQywyRkFBMkYsU0FBUyw0QkFBNEIsTUFBTSxHQUFHIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3Z1ZS1tdWx0aXNlbGVjdC9kaXN0L3Z1ZS1tdWx0aXNlbGVjdC5taW4uanM/MGYxMCJdLCJzb3VyY2VzQ29udGVudCI6WyIhZnVuY3Rpb24odCxlKXtcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cyYmXCJvYmplY3RcIj09dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz1lKCk6XCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShbXSxlKTpcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cz9leHBvcnRzLlZ1ZU11bHRpc2VsZWN0PWUoKTp0LlZ1ZU11bHRpc2VsZWN0PWUoKX0odGhpcyxmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0KXtmdW5jdGlvbiBlKGkpe2lmKG5baV0pcmV0dXJuIG5baV0uZXhwb3J0czt2YXIgcj1uW2ldPXtpOmksbDohMSxleHBvcnRzOnt9fTtyZXR1cm4gdFtpXS5jYWxsKHIuZXhwb3J0cyxyLHIuZXhwb3J0cyxlKSxyLmw9ITAsci5leHBvcnRzfXZhciBuPXt9O3JldHVybiBlLm09dCxlLmM9bixlLmk9ZnVuY3Rpb24odCl7cmV0dXJuIHR9LGUuZD1mdW5jdGlvbih0LG4saSl7ZS5vKHQsbil8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LG4se2NvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiEwLGdldDppfSl9LGUubj1mdW5jdGlvbih0KXt2YXIgbj10JiZ0Ll9fZXNNb2R1bGU/ZnVuY3Rpb24oKXtyZXR1cm4gdC5kZWZhdWx0fTpmdW5jdGlvbigpe3JldHVybiB0fTtyZXR1cm4gZS5kKG4sXCJhXCIsbiksbn0sZS5vPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LGUpfSxlLnA9XCIvXCIsZShlLnM9NjApfShbZnVuY3Rpb24odCxlKXt2YXIgbj10LmV4cG9ydHM9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdyYmd2luZG93Lk1hdGg9PU1hdGg/d2luZG93OlwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmJiZzZWxmLk1hdGg9PU1hdGg/c2VsZjpGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCk7XCJudW1iZXJcIj09dHlwZW9mIF9fZyYmKF9fZz1uKX0sZnVuY3Rpb24odCxlLG4pe3ZhciBpPW4oNDkpKFwid2tzXCIpLHI9bigzMCksbz1uKDApLlN5bWJvbCxzPVwiZnVuY3Rpb25cIj09dHlwZW9mIG87KHQuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gaVt0XXx8KGlbdF09cyYmb1t0XXx8KHM/bzpyKShcIlN5bWJvbC5cIit0KSl9KS5zdG9yZT1pfSxmdW5jdGlvbih0LGUsbil7dmFyIGk9big1KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoIWkodCkpdGhyb3cgVHlwZUVycm9yKHQrXCIgaXMgbm90IGFuIG9iamVjdCFcIik7cmV0dXJuIHR9fSxmdW5jdGlvbih0LGUsbil7dmFyIGk9bigwKSxyPW4oMTApLG89big4KSxzPW4oNiksdT1uKDExKSxhPWZ1bmN0aW9uKHQsZSxuKXt2YXIgbCxjLGYscCxoPXQmYS5GLGQ9dCZhLkcsdj10JmEuUyxnPXQmYS5QLHk9dCZhLkIsbT1kP2k6dj9pW2VdfHwoaVtlXT17fSk6KGlbZV18fHt9KS5wcm90b3R5cGUsYj1kP3I6cltlXXx8KHJbZV09e30pLF89Yi5wcm90b3R5cGV8fChiLnByb3RvdHlwZT17fSk7ZCYmKG49ZSk7Zm9yKGwgaW4gbiljPSFoJiZtJiZ2b2lkIDAhPT1tW2xdLGY9KGM/bTpuKVtsXSxwPXkmJmM/dShmLGkpOmcmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGY/dShGdW5jdGlvbi5jYWxsLGYpOmYsbSYmcyhtLGwsZix0JmEuVSksYltsXSE9ZiYmbyhiLGwscCksZyYmX1tsXSE9ZiYmKF9bbF09Zil9O2kuY29yZT1yLGEuRj0xLGEuRz0yLGEuUz00LGEuUD04LGEuQj0xNixhLlc9MzIsYS5VPTY0LGEuUj0xMjgsdC5leHBvcnRzPWF9LGZ1bmN0aW9uKHQsZSxuKXt0LmV4cG9ydHM9IW4oNykoZnVuY3Rpb24oKXtyZXR1cm4gNyE9T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LFwiYVwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gN319KS5hfSl9LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVyblwib2JqZWN0XCI9PXR5cGVvZiB0P251bGwhPT10OlwiZnVuY3Rpb25cIj09dHlwZW9mIHR9fSxmdW5jdGlvbih0LGUsbil7dmFyIGk9bigwKSxyPW4oOCksbz1uKDEyKSxzPW4oMzApKFwic3JjXCIpLHU9RnVuY3Rpb24udG9TdHJpbmcsYT0oXCJcIit1KS5zcGxpdChcInRvU3RyaW5nXCIpO24oMTApLmluc3BlY3RTb3VyY2U9ZnVuY3Rpb24odCl7cmV0dXJuIHUuY2FsbCh0KX0sKHQuZXhwb3J0cz1mdW5jdGlvbih0LGUsbix1KXt2YXIgbD1cImZ1bmN0aW9uXCI9PXR5cGVvZiBuO2wmJihvKG4sXCJuYW1lXCIpfHxyKG4sXCJuYW1lXCIsZSkpLHRbZV0hPT1uJiYobCYmKG8obixzKXx8cihuLHMsdFtlXT9cIlwiK3RbZV06YS5qb2luKFN0cmluZyhlKSkpKSx0PT09aT90W2VdPW46dT90W2VdP3RbZV09bjpyKHQsZSxuKTooZGVsZXRlIHRbZV0scih0LGUsbikpKX0pKEZ1bmN0aW9uLnByb3RvdHlwZSxcInRvU3RyaW5nXCIsZnVuY3Rpb24oKXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiB0aGlzJiZ0aGlzW3NdfHx1LmNhbGwodGhpcyl9KX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dHJ5e3JldHVybiEhdCgpfWNhdGNoKHQpe3JldHVybiEwfX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgaT1uKDEzKSxyPW4oMjUpO3QuZXhwb3J0cz1uKDQpP2Z1bmN0aW9uKHQsZSxuKXtyZXR1cm4gaS5mKHQsZSxyKDEsbikpfTpmdW5jdGlvbih0LGUsbil7cmV0dXJuIHRbZV09bix0fX0sZnVuY3Rpb24odCxlKXt2YXIgbj17fS50b1N0cmluZzt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG4uY2FsbCh0KS5zbGljZSg4LC0xKX19LGZ1bmN0aW9uKHQsZSl7dmFyIG49dC5leHBvcnRzPXt2ZXJzaW9uOlwiMi41LjdcIn07XCJudW1iZXJcIj09dHlwZW9mIF9fZSYmKF9fZT1uKX0sZnVuY3Rpb24odCxlLG4pe3ZhciBpPW4oMTQpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7aWYoaSh0KSx2b2lkIDA9PT1lKXJldHVybiB0O3N3aXRjaChuKXtjYXNlIDE6cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiB0LmNhbGwoZSxuKX07Y2FzZSAyOnJldHVybiBmdW5jdGlvbihuLGkpe3JldHVybiB0LmNhbGwoZSxuLGkpfTtjYXNlIDM6cmV0dXJuIGZ1bmN0aW9uKG4saSxyKXtyZXR1cm4gdC5jYWxsKGUsbixpLHIpfX1yZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdC5hcHBseShlLGFyZ3VtZW50cyl9fX0sZnVuY3Rpb24odCxlKXt2YXIgbj17fS5oYXNPd25Qcm9wZXJ0eTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbi5jYWxsKHQsZSl9fSxmdW5jdGlvbih0LGUsbil7dmFyIGk9bigyKSxyPW4oNDEpLG89bigyOSkscz1PYmplY3QuZGVmaW5lUHJvcGVydHk7ZS5mPW4oNCk/T2JqZWN0LmRlZmluZVByb3BlcnR5OmZ1bmN0aW9uKHQsZSxuKXtpZihpKHQpLGU9byhlLCEwKSxpKG4pLHIpdHJ5e3JldHVybiBzKHQsZSxuKX1jYXRjaCh0KXt9aWYoXCJnZXRcImluIG58fFwic2V0XCJpbiBuKXRocm93IFR5cGVFcnJvcihcIkFjY2Vzc29ycyBub3Qgc3VwcG9ydGVkIVwiKTtyZXR1cm5cInZhbHVlXCJpbiBuJiYodFtlXT1uLnZhbHVlKSx0fX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgdCl0aHJvdyBUeXBlRXJyb3IodCtcIiBpcyBub3QgYSBmdW5jdGlvbiFcIik7cmV0dXJuIHR9fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz17fX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYodm9pZCAwPT10KXRocm93IFR5cGVFcnJvcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uICBcIit0KTtyZXR1cm4gdH19LGZ1bmN0aW9uKHQsZSxuKXtcInVzZSBzdHJpY3RcIjt2YXIgaT1uKDcpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiEhdCYmaShmdW5jdGlvbigpe2U/dC5jYWxsKG51bGwsZnVuY3Rpb24oKXt9LDEpOnQuY2FsbChudWxsKX0pfX0sZnVuY3Rpb24odCxlLG4pe3ZhciBpPW4oMjMpLHI9bigxNik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBpKHIodCkpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciBpPW4oNTMpLHI9TWF0aC5taW47dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0PjA/cihpKHQpLDkwMDcxOTkyNTQ3NDA5OTEpOjB9fSxmdW5jdGlvbih0LGUsbil7dmFyIGk9bigxMSkscj1uKDIzKSxvPW4oMjgpLHM9bigxOSksdT1uKDY0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbj0xPT10LGE9Mj09dCxsPTM9PXQsYz00PT10LGY9Nj09dCxwPTU9PXR8fGYsaD1lfHx1O3JldHVybiBmdW5jdGlvbihlLHUsZCl7Zm9yKHZhciB2LGcseT1vKGUpLG09cih5KSxiPWkodSxkLDMpLF89cyhtLmxlbmd0aCkseD0wLHc9bj9oKGUsXyk6YT9oKGUsMCk6dm9pZCAwO18+eDt4KyspaWYoKHB8fHggaW4gbSkmJih2PW1beF0sZz1iKHYseCx5KSx0KSlpZihuKXdbeF09ZztlbHNlIGlmKGcpc3dpdGNoKHQpe2Nhc2UgMzpyZXR1cm4hMDtjYXNlIDU6cmV0dXJuIHY7Y2FzZSA2OnJldHVybiB4O2Nhc2UgMjp3LnB1c2godil9ZWxzZSBpZihjKXJldHVybiExO3JldHVybiBmPy0xOmx8fGM/Yzp3fX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgaT1uKDUpLHI9bigwKS5kb2N1bWVudCxvPWkocikmJmkoci5jcmVhdGVFbGVtZW50KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG8/ci5jcmVhdGVFbGVtZW50KHQpOnt9fX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9XCJjb25zdHJ1Y3RvcixoYXNPd25Qcm9wZXJ0eSxpc1Byb3RvdHlwZU9mLHByb3BlcnR5SXNFbnVtZXJhYmxlLHRvTG9jYWxlU3RyaW5nLHRvU3RyaW5nLHZhbHVlT2ZcIi5zcGxpdChcIixcIil9LGZ1bmN0aW9uKHQsZSxuKXt2YXIgaT1uKDkpO3QuZXhwb3J0cz1PYmplY3QoXCJ6XCIpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApP09iamVjdDpmdW5jdGlvbih0KXtyZXR1cm5cIlN0cmluZ1wiPT1pKHQpP3Quc3BsaXQoXCJcIik6T2JqZWN0KHQpfX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ITF9LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJue2VudW1lcmFibGU6ISgxJnQpLGNvbmZpZ3VyYWJsZTohKDImdCksd3JpdGFibGU6ISg0JnQpLHZhbHVlOmV9fX0sZnVuY3Rpb24odCxlLG4pe3ZhciBpPW4oMTMpLmYscj1uKDEyKSxvPW4oMSkoXCJ0b1N0cmluZ1RhZ1wiKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe3QmJiFyKHQ9bj90OnQucHJvdG90eXBlLG8pJiZpKHQsbyx7Y29uZmlndXJhYmxlOiEwLHZhbHVlOmV9KX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgaT1uKDQ5KShcImtleXNcIikscj1uKDMwKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGlbdF18fChpW3RdPXIodCkpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciBpPW4oMTYpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0KGkodCkpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciBpPW4oNSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoIWkodCkpcmV0dXJuIHQ7dmFyIG4scjtpZihlJiZcImZ1bmN0aW9uXCI9PXR5cGVvZihuPXQudG9TdHJpbmcpJiYhaShyPW4uY2FsbCh0KSkpcmV0dXJuIHI7aWYoXCJmdW5jdGlvblwiPT10eXBlb2Yobj10LnZhbHVlT2YpJiYhaShyPW4uY2FsbCh0KSkpcmV0dXJuIHI7aWYoIWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mKG49dC50b1N0cmluZykmJiFpKHI9bi5jYWxsKHQpKSlyZXR1cm4gcjt0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIil9fSxmdW5jdGlvbih0LGUpe3ZhciBuPTAsaT1NYXRoLnJhbmRvbSgpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm5cIlN5bWJvbChcIi5jb25jYXQodm9pZCAwPT09dD9cIlwiOnQsXCIpX1wiLCgrK24raSkudG9TdHJpbmcoMzYpKX19LGZ1bmN0aW9uKHQsZSxuKXtcInVzZSBzdHJpY3RcIjt2YXIgaT1uKDApLHI9bigxMiksbz1uKDkpLHM9big2NyksdT1uKDI5KSxhPW4oNyksbD1uKDc3KS5mLGM9big0NSkuZixmPW4oMTMpLmYscD1uKDUxKS50cmltLGg9aS5OdW1iZXIsZD1oLHY9aC5wcm90b3R5cGUsZz1cIk51bWJlclwiPT1vKG4oNDQpKHYpKSx5PVwidHJpbVwiaW4gU3RyaW5nLnByb3RvdHlwZSxtPWZ1bmN0aW9uKHQpe3ZhciBlPXUodCwhMSk7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUmJmUubGVuZ3RoPjIpe2U9eT9lLnRyaW0oKTpwKGUsMyk7dmFyIG4saSxyLG89ZS5jaGFyQ29kZUF0KDApO2lmKDQzPT09b3x8NDU9PT1vKXtpZig4OD09PShuPWUuY2hhckNvZGVBdCgyKSl8fDEyMD09PW4pcmV0dXJuIE5hTn1lbHNlIGlmKDQ4PT09byl7c3dpdGNoKGUuY2hhckNvZGVBdCgxKSl7Y2FzZSA2NjpjYXNlIDk4Omk9MixyPTQ5O2JyZWFrO2Nhc2UgNzk6Y2FzZSAxMTE6aT04LHI9NTU7YnJlYWs7ZGVmYXVsdDpyZXR1cm4rZX1mb3IodmFyIHMsYT1lLnNsaWNlKDIpLGw9MCxjPWEubGVuZ3RoO2w8YztsKyspaWYoKHM9YS5jaGFyQ29kZUF0KGwpKTw0OHx8cz5yKXJldHVybiBOYU47cmV0dXJuIHBhcnNlSW50KGEsaSl9fXJldHVybitlfTtpZighaChcIiAwbzFcIil8fCFoKFwiMGIxXCIpfHxoKFwiKzB4MVwiKSl7aD1mdW5jdGlvbih0KXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPDE/MDp0LG49dGhpcztyZXR1cm4gbiBpbnN0YW5jZW9mIGgmJihnP2EoZnVuY3Rpb24oKXt2LnZhbHVlT2YuY2FsbChuKX0pOlwiTnVtYmVyXCIhPW8obikpP3MobmV3IGQobShlKSksbixoKTptKGUpfTtmb3IodmFyIGIsXz1uKDQpP2woZCk6XCJNQVhfVkFMVUUsTUlOX1ZBTFVFLE5hTixORUdBVElWRV9JTkZJTklUWSxQT1NJVElWRV9JTkZJTklUWSxFUFNJTE9OLGlzRmluaXRlLGlzSW50ZWdlcixpc05hTixpc1NhZmVJbnRlZ2VyLE1BWF9TQUZFX0lOVEVHRVIsTUlOX1NBRkVfSU5URUdFUixwYXJzZUZsb2F0LHBhcnNlSW50LGlzSW50ZWdlclwiLnNwbGl0KFwiLFwiKSx4PTA7Xy5sZW5ndGg+eDt4KyspcihkLGI9X1t4XSkmJiFyKGgsYikmJmYoaCxiLGMoZCxiKSk7aC5wcm90b3R5cGU9dix2LmNvbnN0cnVjdG9yPWgsbig2KShpLFwiTnVtYmVyXCIsaCl9fSxmdW5jdGlvbih0LGUsbil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gaSh0KXtyZXR1cm4gMCE9PXQmJighKCFBcnJheS5pc0FycmF5KHQpfHwwIT09dC5sZW5ndGgpfHwhdCl9ZnVuY3Rpb24gcih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4hdC5hcHBseSh2b2lkIDAsYXJndW1lbnRzKX19ZnVuY3Rpb24gbyh0LGUpe3JldHVybiB2b2lkIDA9PT10JiYodD1cInVuZGVmaW5lZFwiKSxudWxsPT09dCYmKHQ9XCJudWxsXCIpLCExPT09dCYmKHQ9XCJmYWxzZVwiKSwtMSE9PXQudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoZS50cmltKCkpfWZ1bmN0aW9uIHModCxlLG4saSl7cmV0dXJuIHQuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiBvKGkodCxuKSxlKX0pfWZ1bmN0aW9uIHUodCl7cmV0dXJuIHQuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiF0LiRpc0xhYmVsfSl9ZnVuY3Rpb24gYSh0LGUpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gbi5yZWR1Y2UoZnVuY3Rpb24obixpKXtyZXR1cm4gaVt0XSYmaVt0XS5sZW5ndGg/KG4ucHVzaCh7JGdyb3VwTGFiZWw6aVtlXSwkaXNMYWJlbDohMH0pLG4uY29uY2F0KGlbdF0pKTpufSxbXSl9fWZ1bmN0aW9uIGwodCxlLGkscixvKXtyZXR1cm4gZnVuY3Rpb24odSl7cmV0dXJuIHUubWFwKGZ1bmN0aW9uKHUpe3ZhciBhO2lmKCF1W2ldKXJldHVybiBjb25zb2xlLndhcm4oXCJPcHRpb25zIHBhc3NlZCB0byB2dWUtbXVsdGlzZWxlY3QgZG8gbm90IGNvbnRhaW4gZ3JvdXBzLCBkZXNwaXRlIHRoZSBjb25maWcuXCIpLFtdO3ZhciBsPXModVtpXSx0LGUsbyk7cmV0dXJuIGwubGVuZ3RoPyhhPXt9LG4uaShkLmEpKGEscix1W3JdKSxuLmkoZC5hKShhLGksbCksYSk6W119KX19dmFyIGM9big1OSksZj1uKDU0KSxwPShuLm4oZiksbig5NSkpLGg9KG4ubihwKSxuKDMxKSksZD0obi5uKGgpLG4oNTgpKSx2PW4oOTEpLGc9KG4ubih2KSxuKDk4KSkseT0obi5uKGcpLG4oOTIpKSxtPShuLm4oeSksbig4OCkpLGI9KG4ubihtKSxuKDk3KSksXz0obi5uKGIpLG4oODkpKSx4PShuLm4oXyksbig5NikpLHc9KG4ubih4KSxuKDkzKSksUz0obi5uKHcpLG4oOTApKSxPPShuLm4oUyksZnVuY3Rpb24oKXtmb3IodmFyIHQ9YXJndW1lbnRzLmxlbmd0aCxlPW5ldyBBcnJheSh0KSxuPTA7bjx0O24rKyllW25dPWFyZ3VtZW50c1tuXTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUucmVkdWNlKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUodCl9LHQpfX0pO2UuYT17ZGF0YTpmdW5jdGlvbigpe3JldHVybntzZWFyY2g6XCJcIixpc09wZW46ITEscHJlZmVycmVkT3BlbkRpcmVjdGlvbjpcImJlbG93XCIsb3B0aW1pemVkSGVpZ2h0OnRoaXMubWF4SGVpZ2h0fX0scHJvcHM6e2ludGVybmFsU2VhcmNoOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMH0sb3B0aW9uczp7dHlwZTpBcnJheSxyZXF1aXJlZDohMH0sbXVsdGlwbGU6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSx2YWx1ZTp7dHlwZTpudWxsLGRlZmF1bHQ6ZnVuY3Rpb24oKXtyZXR1cm5bXX19LHRyYWNrQnk6e3R5cGU6U3RyaW5nfSxsYWJlbDp7dHlwZTpTdHJpbmd9LHNlYXJjaGFibGU6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiEwfSxjbGVhck9uU2VsZWN0Ont0eXBlOkJvb2xlYW4sZGVmYXVsdDohMH0saGlkZVNlbGVjdGVkOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX0scGxhY2Vob2xkZXI6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6XCJTZWxlY3Qgb3B0aW9uXCJ9LGFsbG93RW1wdHk6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiEwfSxyZXNldEFmdGVyOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX0sY2xvc2VPblNlbGVjdDp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITB9LGN1c3RvbUxhYmVsOnt0eXBlOkZ1bmN0aW9uLGRlZmF1bHQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gaSh0KT9cIlwiOmU/dFtlXTp0fX0sdGFnZ2FibGU6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSx0YWdQbGFjZWhvbGRlcjp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcIlByZXNzIGVudGVyIHRvIGNyZWF0ZSBhIHRhZ1wifSx0YWdQb3NpdGlvbjp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcInRvcFwifSxtYXg6e3R5cGU6W051bWJlcixCb29sZWFuXSxkZWZhdWx0OiExfSxpZDp7ZGVmYXVsdDpudWxsfSxvcHRpb25zTGltaXQ6e3R5cGU6TnVtYmVyLGRlZmF1bHQ6MWUzfSxncm91cFZhbHVlczp7dHlwZTpTdHJpbmd9LGdyb3VwTGFiZWw6e3R5cGU6U3RyaW5nfSxncm91cFNlbGVjdDp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9LGJsb2NrS2V5czp7dHlwZTpBcnJheSxkZWZhdWx0OmZ1bmN0aW9uKCl7cmV0dXJuW119fSxwcmVzZXJ2ZVNlYXJjaDp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9LHByZXNlbGVjdEZpcnN0Ont0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX19LG1vdW50ZWQ6ZnVuY3Rpb24oKXshdGhpcy5tdWx0aXBsZSYmdGhpcy5tYXgmJmNvbnNvbGUud2FybihcIltWdWUtTXVsdGlzZWxlY3Qgd2Fybl06IE1heCBwcm9wIHNob3VsZCBub3QgYmUgdXNlZCB3aGVuIHByb3AgTXVsdGlwbGUgZXF1YWxzIGZhbHNlLlwiKSx0aGlzLnByZXNlbGVjdEZpcnN0JiYhdGhpcy5pbnRlcm5hbFZhbHVlLmxlbmd0aCYmdGhpcy5vcHRpb25zLmxlbmd0aCYmdGhpcy5zZWxlY3QodGhpcy5maWx0ZXJlZE9wdGlvbnNbMF0pfSxjb21wdXRlZDp7aW50ZXJuYWxWYWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnZhbHVlfHwwPT09dGhpcy52YWx1ZT9BcnJheS5pc0FycmF5KHRoaXMudmFsdWUpP3RoaXMudmFsdWU6W3RoaXMudmFsdWVdOltdfSxmaWx0ZXJlZE9wdGlvbnM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnNlYXJjaHx8XCJcIixlPXQudG9Mb3dlckNhc2UoKS50cmltKCksbj10aGlzLm9wdGlvbnMuY29uY2F0KCk7cmV0dXJuIG49dGhpcy5pbnRlcm5hbFNlYXJjaD90aGlzLmdyb3VwVmFsdWVzP3RoaXMuZmlsdGVyQW5kRmxhdChuLGUsdGhpcy5sYWJlbCk6cyhuLGUsdGhpcy5sYWJlbCx0aGlzLmN1c3RvbUxhYmVsKTp0aGlzLmdyb3VwVmFsdWVzP2EodGhpcy5ncm91cFZhbHVlcyx0aGlzLmdyb3VwTGFiZWwpKG4pOm4sbj10aGlzLmhpZGVTZWxlY3RlZD9uLmZpbHRlcihyKHRoaXMuaXNTZWxlY3RlZCkpOm4sdGhpcy50YWdnYWJsZSYmZS5sZW5ndGgmJiF0aGlzLmlzRXhpc3RpbmdPcHRpb24oZSkmJihcImJvdHRvbVwiPT09dGhpcy50YWdQb3NpdGlvbj9uLnB1c2goe2lzVGFnOiEwLGxhYmVsOnR9KTpuLnVuc2hpZnQoe2lzVGFnOiEwLGxhYmVsOnR9KSksbi5zbGljZSgwLHRoaXMub3B0aW9uc0xpbWl0KX0sdmFsdWVLZXlzOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyZXR1cm4gdGhpcy50cmFja0J5P3RoaXMuaW50ZXJuYWxWYWx1ZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGVbdC50cmFja0J5XX0pOnRoaXMuaW50ZXJuYWxWYWx1ZX0sb3B0aW9uS2V5czpmdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuKHRoaXMuZ3JvdXBWYWx1ZXM/dGhpcy5mbGF0QW5kU3RyaXAodGhpcy5vcHRpb25zKTp0aGlzLm9wdGlvbnMpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gdC5jdXN0b21MYWJlbChlLHQubGFiZWwpLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKX0pfSxjdXJyZW50T3B0aW9uTGFiZWw6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWx0aXBsZT90aGlzLnNlYXJjaGFibGU/XCJcIjp0aGlzLnBsYWNlaG9sZGVyOnRoaXMuaW50ZXJuYWxWYWx1ZS5sZW5ndGg/dGhpcy5nZXRPcHRpb25MYWJlbCh0aGlzLmludGVybmFsVmFsdWVbMF0pOnRoaXMuc2VhcmNoYWJsZT9cIlwiOnRoaXMucGxhY2Vob2xkZXJ9fSx3YXRjaDp7aW50ZXJuYWxWYWx1ZTpmdW5jdGlvbigpe3RoaXMucmVzZXRBZnRlciYmdGhpcy5pbnRlcm5hbFZhbHVlLmxlbmd0aCYmKHRoaXMuc2VhcmNoPVwiXCIsdGhpcy4kZW1pdChcImlucHV0XCIsdGhpcy5tdWx0aXBsZT9bXTpudWxsKSl9LHNlYXJjaDpmdW5jdGlvbigpe3RoaXMuJGVtaXQoXCJzZWFyY2gtY2hhbmdlXCIsdGhpcy5zZWFyY2gsdGhpcy5pZCl9fSxtZXRob2RzOntnZXRWYWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm11bHRpcGxlP3RoaXMuaW50ZXJuYWxWYWx1ZTowPT09dGhpcy5pbnRlcm5hbFZhbHVlLmxlbmd0aD9udWxsOnRoaXMuaW50ZXJuYWxWYWx1ZVswXX0sZmlsdGVyQW5kRmxhdDpmdW5jdGlvbih0LGUsbil7cmV0dXJuIE8obChlLG4sdGhpcy5ncm91cFZhbHVlcyx0aGlzLmdyb3VwTGFiZWwsdGhpcy5jdXN0b21MYWJlbCksYSh0aGlzLmdyb3VwVmFsdWVzLHRoaXMuZ3JvdXBMYWJlbCkpKHQpfSxmbGF0QW5kU3RyaXA6ZnVuY3Rpb24odCl7cmV0dXJuIE8oYSh0aGlzLmdyb3VwVmFsdWVzLHRoaXMuZ3JvdXBMYWJlbCksdSkodCl9LHVwZGF0ZVNlYXJjaDpmdW5jdGlvbih0KXt0aGlzLnNlYXJjaD10fSxpc0V4aXN0aW5nT3B0aW9uOmZ1bmN0aW9uKHQpe3JldHVybiEhdGhpcy5vcHRpb25zJiZ0aGlzLm9wdGlvbktleXMuaW5kZXhPZih0KT4tMX0saXNTZWxlY3RlZDpmdW5jdGlvbih0KXt2YXIgZT10aGlzLnRyYWNrQnk/dFt0aGlzLnRyYWNrQnldOnQ7cmV0dXJuIHRoaXMudmFsdWVLZXlzLmluZGV4T2YoZSk+LTF9LGlzT3B0aW9uRGlzYWJsZWQ6ZnVuY3Rpb24odCl7cmV0dXJuISF0LiRpc0Rpc2FibGVkfSxnZXRPcHRpb25MYWJlbDpmdW5jdGlvbih0KXtpZihpKHQpKXJldHVyblwiXCI7aWYodC5pc1RhZylyZXR1cm4gdC5sYWJlbDtpZih0LiRpc0xhYmVsKXJldHVybiB0LiRncm91cExhYmVsO3ZhciBlPXRoaXMuY3VzdG9tTGFiZWwodCx0aGlzLmxhYmVsKTtyZXR1cm4gaShlKT9cIlwiOmV9LHNlbGVjdDpmdW5jdGlvbih0LGUpe2lmKHQuJGlzTGFiZWwmJnRoaXMuZ3JvdXBTZWxlY3QpcmV0dXJuIHZvaWQgdGhpcy5zZWxlY3RHcm91cCh0KTtpZighKC0xIT09dGhpcy5ibG9ja0tleXMuaW5kZXhPZihlKXx8dGhpcy5kaXNhYmxlZHx8dC4kaXNEaXNhYmxlZHx8dC4kaXNMYWJlbCkmJighdGhpcy5tYXh8fCF0aGlzLm11bHRpcGxlfHx0aGlzLmludGVybmFsVmFsdWUubGVuZ3RoIT09dGhpcy5tYXgpJiYoXCJUYWJcIiE9PWV8fHRoaXMucG9pbnRlckRpcnR5KSl7aWYodC5pc1RhZyl0aGlzLiRlbWl0KFwidGFnXCIsdC5sYWJlbCx0aGlzLmlkKSx0aGlzLnNlYXJjaD1cIlwiLHRoaXMuY2xvc2VPblNlbGVjdCYmIXRoaXMubXVsdGlwbGUmJnRoaXMuZGVhY3RpdmF0ZSgpO2Vsc2V7aWYodGhpcy5pc1NlbGVjdGVkKHQpKXJldHVybiB2b2lkKFwiVGFiXCIhPT1lJiZ0aGlzLnJlbW92ZUVsZW1lbnQodCkpO3RoaXMuJGVtaXQoXCJzZWxlY3RcIix0LHRoaXMuaWQpLHRoaXMubXVsdGlwbGU/dGhpcy4kZW1pdChcImlucHV0XCIsdGhpcy5pbnRlcm5hbFZhbHVlLmNvbmNhdChbdF0pLHRoaXMuaWQpOnRoaXMuJGVtaXQoXCJpbnB1dFwiLHQsdGhpcy5pZCksdGhpcy5jbGVhck9uU2VsZWN0JiYodGhpcy5zZWFyY2g9XCJcIil9dGhpcy5jbG9zZU9uU2VsZWN0JiZ0aGlzLmRlYWN0aXZhdGUoKX19LHNlbGVjdEdyb3VwOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj10aGlzLm9wdGlvbnMuZmluZChmdW5jdGlvbihuKXtyZXR1cm4gbltlLmdyb3VwTGFiZWxdPT09dC4kZ3JvdXBMYWJlbH0pO2lmKG4paWYodGhpcy53aG9sZUdyb3VwU2VsZWN0ZWQobikpe3RoaXMuJGVtaXQoXCJyZW1vdmVcIixuW3RoaXMuZ3JvdXBWYWx1ZXNdLHRoaXMuaWQpO3ZhciBpPXRoaXMuaW50ZXJuYWxWYWx1ZS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuLTE9PT1uW2UuZ3JvdXBWYWx1ZXNdLmluZGV4T2YodCl9KTt0aGlzLiRlbWl0KFwiaW5wdXRcIixpLHRoaXMuaWQpfWVsc2V7dmFyIHI9blt0aGlzLmdyb3VwVmFsdWVzXS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIShlLmlzT3B0aW9uRGlzYWJsZWQodCl8fGUuaXNTZWxlY3RlZCh0KSl9KTt0aGlzLiRlbWl0KFwic2VsZWN0XCIscix0aGlzLmlkKSx0aGlzLiRlbWl0KFwiaW5wdXRcIix0aGlzLmludGVybmFsVmFsdWUuY29uY2F0KHIpLHRoaXMuaWQpfX0sd2hvbGVHcm91cFNlbGVjdGVkOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIHRbdGhpcy5ncm91cFZhbHVlc10uZXZlcnkoZnVuY3Rpb24odCl7cmV0dXJuIGUuaXNTZWxlY3RlZCh0KXx8ZS5pc09wdGlvbkRpc2FibGVkKHQpfSl9LHdob2xlR3JvdXBEaXNhYmxlZDpmdW5jdGlvbih0KXtyZXR1cm4gdFt0aGlzLmdyb3VwVmFsdWVzXS5ldmVyeSh0aGlzLmlzT3B0aW9uRGlzYWJsZWQpfSxyZW1vdmVFbGVtZW50OmZ1bmN0aW9uKHQpe3ZhciBlPSEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0pfHxhcmd1bWVudHNbMV07aWYoIXRoaXMuZGlzYWJsZWQmJiF0LiRpc0Rpc2FibGVkKXtpZighdGhpcy5hbGxvd0VtcHR5JiZ0aGlzLmludGVybmFsVmFsdWUubGVuZ3RoPD0xKXJldHVybiB2b2lkIHRoaXMuZGVhY3RpdmF0ZSgpO3ZhciBpPVwib2JqZWN0XCI9PT1uLmkoYy5hKSh0KT90aGlzLnZhbHVlS2V5cy5pbmRleE9mKHRbdGhpcy50cmFja0J5XSk6dGhpcy52YWx1ZUtleXMuaW5kZXhPZih0KTtpZih0aGlzLiRlbWl0KFwicmVtb3ZlXCIsdCx0aGlzLmlkKSx0aGlzLm11bHRpcGxlKXt2YXIgcj10aGlzLmludGVybmFsVmFsdWUuc2xpY2UoMCxpKS5jb25jYXQodGhpcy5pbnRlcm5hbFZhbHVlLnNsaWNlKGkrMSkpO3RoaXMuJGVtaXQoXCJpbnB1dFwiLHIsdGhpcy5pZCl9ZWxzZSB0aGlzLiRlbWl0KFwiaW5wdXRcIixudWxsLHRoaXMuaWQpO3RoaXMuY2xvc2VPblNlbGVjdCYmZSYmdGhpcy5kZWFjdGl2YXRlKCl9fSxyZW1vdmVMYXN0RWxlbWVudDpmdW5jdGlvbigpey0xPT09dGhpcy5ibG9ja0tleXMuaW5kZXhPZihcIkRlbGV0ZVwiKSYmMD09PXRoaXMuc2VhcmNoLmxlbmd0aCYmQXJyYXkuaXNBcnJheSh0aGlzLmludGVybmFsVmFsdWUpJiZ0aGlzLmludGVybmFsVmFsdWUubGVuZ3RoJiZ0aGlzLnJlbW92ZUVsZW1lbnQodGhpcy5pbnRlcm5hbFZhbHVlW3RoaXMuaW50ZXJuYWxWYWx1ZS5sZW5ndGgtMV0sITEpfSxhY3RpdmF0ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5pc09wZW58fHRoaXMuZGlzYWJsZWR8fCh0aGlzLmFkanVzdFBvc2l0aW9uKCksdGhpcy5ncm91cFZhbHVlcyYmMD09PXRoaXMucG9pbnRlciYmdGhpcy5maWx0ZXJlZE9wdGlvbnMubGVuZ3RoJiYodGhpcy5wb2ludGVyPTEpLHRoaXMuaXNPcGVuPSEwLHRoaXMuc2VhcmNoYWJsZT8odGhpcy5wcmVzZXJ2ZVNlYXJjaHx8KHRoaXMuc2VhcmNoPVwiXCIpLHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uKCl7cmV0dXJuIHQuJHJlZnMuc2VhcmNoLmZvY3VzKCl9KSk6dGhpcy4kZWwuZm9jdXMoKSx0aGlzLiRlbWl0KFwib3BlblwiLHRoaXMuaWQpKX0sZGVhY3RpdmF0ZTpmdW5jdGlvbigpe3RoaXMuaXNPcGVuJiYodGhpcy5pc09wZW49ITEsdGhpcy5zZWFyY2hhYmxlP3RoaXMuJHJlZnMuc2VhcmNoLmJsdXIoKTp0aGlzLiRlbC5ibHVyKCksdGhpcy5wcmVzZXJ2ZVNlYXJjaHx8KHRoaXMuc2VhcmNoPVwiXCIpLHRoaXMuJGVtaXQoXCJjbG9zZVwiLHRoaXMuZ2V0VmFsdWUoKSx0aGlzLmlkKSl9LHRvZ2dsZTpmdW5jdGlvbigpe3RoaXMuaXNPcGVuP3RoaXMuZGVhY3RpdmF0ZSgpOnRoaXMuYWN0aXZhdGUoKX0sYWRqdXN0UG9zaXRpb246ZnVuY3Rpb24oKXtpZihcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93KXt2YXIgdD10aGlzLiRlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AsZT13aW5kb3cuaW5uZXJIZWlnaHQtdGhpcy4kZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuYm90dG9tO2U+dGhpcy5tYXhIZWlnaHR8fGU+dHx8XCJiZWxvd1wiPT09dGhpcy5vcGVuRGlyZWN0aW9ufHxcImJvdHRvbVwiPT09dGhpcy5vcGVuRGlyZWN0aW9uPyh0aGlzLnByZWZlcnJlZE9wZW5EaXJlY3Rpb249XCJiZWxvd1wiLHRoaXMub3B0aW1pemVkSGVpZ2h0PU1hdGgubWluKGUtNDAsdGhpcy5tYXhIZWlnaHQpKToodGhpcy5wcmVmZXJyZWRPcGVuRGlyZWN0aW9uPVwiYWJvdmVcIix0aGlzLm9wdGltaXplZEhlaWdodD1NYXRoLm1pbih0LTQwLHRoaXMubWF4SGVpZ2h0KSl9fX19fSxmdW5jdGlvbih0LGUsbil7XCJ1c2Ugc3RyaWN0XCI7dmFyIGk9big1NCkscj0obi5uKGkpLG4oMzEpKTtuLm4ocik7ZS5hPXtkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue3BvaW50ZXI6MCxwb2ludGVyRGlydHk6ITF9fSxwcm9wczp7c2hvd1BvaW50ZXI6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiEwfSxvcHRpb25IZWlnaHQ6e3R5cGU6TnVtYmVyLGRlZmF1bHQ6NDB9fSxjb21wdXRlZDp7cG9pbnRlclBvc2l0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucG9pbnRlcip0aGlzLm9wdGlvbkhlaWdodH0sdmlzaWJsZUVsZW1lbnRzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW1pemVkSGVpZ2h0L3RoaXMub3B0aW9uSGVpZ2h0fX0sd2F0Y2g6e2ZpbHRlcmVkT3B0aW9uczpmdW5jdGlvbigpe3RoaXMucG9pbnRlckFkanVzdCgpfSxpc09wZW46ZnVuY3Rpb24oKXt0aGlzLnBvaW50ZXJEaXJ0eT0hMX19LG1ldGhvZHM6e29wdGlvbkhpZ2hsaWdodDpmdW5jdGlvbih0LGUpe3JldHVybntcIm11bHRpc2VsZWN0X19vcHRpb24tLWhpZ2hsaWdodFwiOnQ9PT10aGlzLnBvaW50ZXImJnRoaXMuc2hvd1BvaW50ZXIsXCJtdWx0aXNlbGVjdF9fb3B0aW9uLS1zZWxlY3RlZFwiOnRoaXMuaXNTZWxlY3RlZChlKX19LGdyb3VwSGlnaGxpZ2h0OmZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcztpZighdGhpcy5ncm91cFNlbGVjdClyZXR1cm5bXCJtdWx0aXNlbGVjdF9fb3B0aW9uLS1ncm91cFwiLFwibXVsdGlzZWxlY3RfX29wdGlvbi0tZGlzYWJsZWRcIl07dmFyIGk9dGhpcy5vcHRpb25zLmZpbmQoZnVuY3Rpb24odCl7cmV0dXJuIHRbbi5ncm91cExhYmVsXT09PWUuJGdyb3VwTGFiZWx9KTtyZXR1cm4gaSYmIXRoaXMud2hvbGVHcm91cERpc2FibGVkKGkpP1tcIm11bHRpc2VsZWN0X19vcHRpb24tLWdyb3VwXCIse1wibXVsdGlzZWxlY3RfX29wdGlvbi0taGlnaGxpZ2h0XCI6dD09PXRoaXMucG9pbnRlciYmdGhpcy5zaG93UG9pbnRlcn0se1wibXVsdGlzZWxlY3RfX29wdGlvbi0tZ3JvdXAtc2VsZWN0ZWRcIjp0aGlzLndob2xlR3JvdXBTZWxlY3RlZChpKX1dOlwibXVsdGlzZWxlY3RfX29wdGlvbi0tZGlzYWJsZWRcIn0sYWRkUG9pbnRlckVsZW1lbnQ6ZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06XCJFbnRlclwiLGU9dC5rZXk7dGhpcy5maWx0ZXJlZE9wdGlvbnMubGVuZ3RoPjAmJnRoaXMuc2VsZWN0KHRoaXMuZmlsdGVyZWRPcHRpb25zW3RoaXMucG9pbnRlcl0sZSksdGhpcy5wb2ludGVyUmVzZXQoKX0scG9pbnRlckZvcndhcmQ6ZnVuY3Rpb24oKXt0aGlzLnBvaW50ZXI8dGhpcy5maWx0ZXJlZE9wdGlvbnMubGVuZ3RoLTEmJih0aGlzLnBvaW50ZXIrKyx0aGlzLiRyZWZzLmxpc3Quc2Nyb2xsVG9wPD10aGlzLnBvaW50ZXJQb3NpdGlvbi0odGhpcy52aXNpYmxlRWxlbWVudHMtMSkqdGhpcy5vcHRpb25IZWlnaHQmJih0aGlzLiRyZWZzLmxpc3Quc2Nyb2xsVG9wPXRoaXMucG9pbnRlclBvc2l0aW9uLSh0aGlzLnZpc2libGVFbGVtZW50cy0xKSp0aGlzLm9wdGlvbkhlaWdodCksdGhpcy5maWx0ZXJlZE9wdGlvbnNbdGhpcy5wb2ludGVyXSYmdGhpcy5maWx0ZXJlZE9wdGlvbnNbdGhpcy5wb2ludGVyXS4kaXNMYWJlbCYmIXRoaXMuZ3JvdXBTZWxlY3QmJnRoaXMucG9pbnRlckZvcndhcmQoKSksdGhpcy5wb2ludGVyRGlydHk9ITB9LHBvaW50ZXJCYWNrd2FyZDpmdW5jdGlvbigpe3RoaXMucG9pbnRlcj4wPyh0aGlzLnBvaW50ZXItLSx0aGlzLiRyZWZzLmxpc3Quc2Nyb2xsVG9wPj10aGlzLnBvaW50ZXJQb3NpdGlvbiYmKHRoaXMuJHJlZnMubGlzdC5zY3JvbGxUb3A9dGhpcy5wb2ludGVyUG9zaXRpb24pLHRoaXMuZmlsdGVyZWRPcHRpb25zW3RoaXMucG9pbnRlcl0mJnRoaXMuZmlsdGVyZWRPcHRpb25zW3RoaXMucG9pbnRlcl0uJGlzTGFiZWwmJiF0aGlzLmdyb3VwU2VsZWN0JiZ0aGlzLnBvaW50ZXJCYWNrd2FyZCgpKTp0aGlzLmZpbHRlcmVkT3B0aW9uc1t0aGlzLnBvaW50ZXJdJiZ0aGlzLmZpbHRlcmVkT3B0aW9uc1swXS4kaXNMYWJlbCYmIXRoaXMuZ3JvdXBTZWxlY3QmJnRoaXMucG9pbnRlckZvcndhcmQoKSx0aGlzLnBvaW50ZXJEaXJ0eT0hMH0scG9pbnRlclJlc2V0OmZ1bmN0aW9uKCl7dGhpcy5jbG9zZU9uU2VsZWN0JiYodGhpcy5wb2ludGVyPTAsdGhpcy4kcmVmcy5saXN0JiYodGhpcy4kcmVmcy5saXN0LnNjcm9sbFRvcD0wKSl9LHBvaW50ZXJBZGp1c3Q6ZnVuY3Rpb24oKXt0aGlzLnBvaW50ZXI+PXRoaXMuZmlsdGVyZWRPcHRpb25zLmxlbmd0aC0xJiYodGhpcy5wb2ludGVyPXRoaXMuZmlsdGVyZWRPcHRpb25zLmxlbmd0aD90aGlzLmZpbHRlcmVkT3B0aW9ucy5sZW5ndGgtMTowKSx0aGlzLmZpbHRlcmVkT3B0aW9ucy5sZW5ndGg+MCYmdGhpcy5maWx0ZXJlZE9wdGlvbnNbdGhpcy5wb2ludGVyXS4kaXNMYWJlbCYmIXRoaXMuZ3JvdXBTZWxlY3QmJnRoaXMucG9pbnRlckZvcndhcmQoKX0scG9pbnRlclNldDpmdW5jdGlvbih0KXt0aGlzLnBvaW50ZXI9dCx0aGlzLnBvaW50ZXJEaXJ0eT0hMH19fX0sZnVuY3Rpb24odCxlLG4pe1widXNlIHN0cmljdFwiO3ZhciBpPW4oMzYpLHI9big3NCksbz1uKDE1KSxzPW4oMTgpO3QuZXhwb3J0cz1uKDcyKShBcnJheSxcIkFycmF5XCIsZnVuY3Rpb24odCxlKXt0aGlzLl90PXModCksdGhpcy5faT0wLHRoaXMuX2s9ZX0sZnVuY3Rpb24oKXt2YXIgdD10aGlzLl90LGU9dGhpcy5fayxuPXRoaXMuX2krKztyZXR1cm4hdHx8bj49dC5sZW5ndGg/KHRoaXMuX3Q9dm9pZCAwLHIoMSkpOlwia2V5c1wiPT1lP3IoMCxuKTpcInZhbHVlc1wiPT1lP3IoMCx0W25dKTpyKDAsW24sdFtuXV0pfSxcInZhbHVlc1wiKSxvLkFyZ3VtZW50cz1vLkFycmF5LGkoXCJrZXlzXCIpLGkoXCJ2YWx1ZXNcIiksaShcImVudHJpZXNcIil9LGZ1bmN0aW9uKHQsZSxuKXtcInVzZSBzdHJpY3RcIjt2YXIgaT1uKDMxKSxyPShuLm4oaSksbigzMikpLG89bigzMyk7ZS5hPXtuYW1lOlwidnVlLW11bHRpc2VsZWN0XCIsbWl4aW5zOltyLmEsby5hXSxwcm9wczp7bmFtZTp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcIlwifSxzZWxlY3RMYWJlbDp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcIlByZXNzIGVudGVyIHRvIHNlbGVjdFwifSxzZWxlY3RHcm91cExhYmVsOnt0eXBlOlN0cmluZyxkZWZhdWx0OlwiUHJlc3MgZW50ZXIgdG8gc2VsZWN0IGdyb3VwXCJ9LHNlbGVjdGVkTGFiZWw6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6XCJTZWxlY3RlZFwifSxkZXNlbGVjdExhYmVsOnt0eXBlOlN0cmluZyxkZWZhdWx0OlwiUHJlc3MgZW50ZXIgdG8gcmVtb3ZlXCJ9LGRlc2VsZWN0R3JvdXBMYWJlbDp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcIlByZXNzIGVudGVyIHRvIGRlc2VsZWN0IGdyb3VwXCJ9LHNob3dMYWJlbHM6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiEwfSxsaW1pdDp7dHlwZTpOdW1iZXIsZGVmYXVsdDo5OTk5OX0sbWF4SGVpZ2h0Ont0eXBlOk51bWJlcixkZWZhdWx0OjMwMH0sbGltaXRUZXh0Ont0eXBlOkZ1bmN0aW9uLGRlZmF1bHQ6ZnVuY3Rpb24odCl7cmV0dXJuXCJhbmQgXCIuY29uY2F0KHQsXCIgbW9yZVwiKX19LGxvYWRpbmc6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSxkaXNhYmxlZDp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9LG9wZW5EaXJlY3Rpb246e3R5cGU6U3RyaW5nLGRlZmF1bHQ6XCJcIn0sc2hvd05vT3B0aW9uczp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITB9LHNob3dOb1Jlc3VsdHM6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiEwfSx0YWJpbmRleDp7dHlwZTpOdW1iZXIsZGVmYXVsdDowfX0sY29tcHV0ZWQ6e2lzU2luZ2xlTGFiZWxWaXNpYmxlOmZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuc2luZ2xlVmFsdWV8fDA9PT10aGlzLnNpbmdsZVZhbHVlKSYmKCF0aGlzLmlzT3Blbnx8IXRoaXMuc2VhcmNoYWJsZSkmJiF0aGlzLnZpc2libGVWYWx1ZXMubGVuZ3RofSxpc1BsYWNlaG9sZGVyVmlzaWJsZTpmdW5jdGlvbigpe3JldHVybiEodGhpcy5pbnRlcm5hbFZhbHVlLmxlbmd0aHx8dGhpcy5zZWFyY2hhYmxlJiZ0aGlzLmlzT3Blbil9LHZpc2libGVWYWx1ZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWx0aXBsZT90aGlzLmludGVybmFsVmFsdWUuc2xpY2UoMCx0aGlzLmxpbWl0KTpbXX0sc2luZ2xlVmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnRlcm5hbFZhbHVlWzBdfSxkZXNlbGVjdExhYmVsVGV4dDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNob3dMYWJlbHM/dGhpcy5kZXNlbGVjdExhYmVsOlwiXCJ9LGRlc2VsZWN0R3JvdXBMYWJlbFRleHQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zaG93TGFiZWxzP3RoaXMuZGVzZWxlY3RHcm91cExhYmVsOlwiXCJ9LHNlbGVjdExhYmVsVGV4dDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNob3dMYWJlbHM/dGhpcy5zZWxlY3RMYWJlbDpcIlwifSxzZWxlY3RHcm91cExhYmVsVGV4dDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNob3dMYWJlbHM/dGhpcy5zZWxlY3RHcm91cExhYmVsOlwiXCJ9LHNlbGVjdGVkTGFiZWxUZXh0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2hvd0xhYmVscz90aGlzLnNlbGVjdGVkTGFiZWw6XCJcIn0saW5wdXRTdHlsZTpmdW5jdGlvbigpe2lmKHRoaXMuc2VhcmNoYWJsZXx8dGhpcy5tdWx0aXBsZSYmdGhpcy52YWx1ZSYmdGhpcy52YWx1ZS5sZW5ndGgpcmV0dXJuIHRoaXMuaXNPcGVuP3t3aWR0aDpcIjEwMCVcIn06e3dpZHRoOlwiMFwiLHBvc2l0aW9uOlwiYWJzb2x1dGVcIixwYWRkaW5nOlwiMFwifX0sY29udGVudFN0eWxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5sZW5ndGg/e2Rpc3BsYXk6XCJpbmxpbmUtYmxvY2tcIn06e2Rpc3BsYXk6XCJibG9ja1wifX0saXNBYm92ZTpmdW5jdGlvbigpe3JldHVyblwiYWJvdmVcIj09PXRoaXMub3BlbkRpcmVjdGlvbnx8XCJ0b3BcIj09PXRoaXMub3BlbkRpcmVjdGlvbnx8XCJiZWxvd1wiIT09dGhpcy5vcGVuRGlyZWN0aW9uJiZcImJvdHRvbVwiIT09dGhpcy5vcGVuRGlyZWN0aW9uJiZcImFib3ZlXCI9PT10aGlzLnByZWZlcnJlZE9wZW5EaXJlY3Rpb259LHNob3dTZWFyY2hJbnB1dDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNlYXJjaGFibGUmJighdGhpcy5oYXNTaW5nbGVTZWxlY3RlZFNsb3R8fCF0aGlzLnZpc2libGVTaW5nbGVWYWx1ZSYmMCE9PXRoaXMudmlzaWJsZVNpbmdsZVZhbHVlfHx0aGlzLmlzT3Blbil9fX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgaT1uKDEpKFwidW5zY29wYWJsZXNcIikscj1BcnJheS5wcm90b3R5cGU7dm9pZCAwPT1yW2ldJiZuKDgpKHIsaSx7fSksdC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JbaV1bdF09ITB9fSxmdW5jdGlvbih0LGUsbil7dmFyIGk9bigxOCkscj1uKDE5KSxvPW4oODUpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxuLHMpe3ZhciB1LGE9aShlKSxsPXIoYS5sZW5ndGgpLGM9byhzLGwpO2lmKHQmJm4hPW4pe2Zvcig7bD5jOylpZigodT1hW2MrK10pIT11KXJldHVybiEwfWVsc2UgZm9yKDtsPmM7YysrKWlmKCh0fHxjIGluIGEpJiZhW2NdPT09bilyZXR1cm4gdHx8Y3x8MDtyZXR1cm4hdCYmLTF9fX0sZnVuY3Rpb24odCxlLG4pe3ZhciBpPW4oOSkscj1uKDEpKFwidG9TdHJpbmdUYWdcIiksbz1cIkFyZ3VtZW50c1wiPT1pKGZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50c30oKSkscz1mdW5jdGlvbih0LGUpe3RyeXtyZXR1cm4gdFtlXX1jYXRjaCh0KXt9fTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGUsbix1O3JldHVybiB2b2lkIDA9PT10P1wiVW5kZWZpbmVkXCI6bnVsbD09PXQ/XCJOdWxsXCI6XCJzdHJpbmdcIj09dHlwZW9mKG49cyhlPU9iamVjdCh0KSxyKSk/bjpvP2koZSk6XCJPYmplY3RcIj09KHU9aShlKSkmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGUuY2FsbGVlP1wiQXJndW1lbnRzXCI6dX19LGZ1bmN0aW9uKHQsZSxuKXtcInVzZSBzdHJpY3RcIjt2YXIgaT1uKDIpO3QuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciB0PWkodGhpcyksZT1cIlwiO3JldHVybiB0Lmdsb2JhbCYmKGUrPVwiZ1wiKSx0Lmlnbm9yZUNhc2UmJihlKz1cImlcIiksdC5tdWx0aWxpbmUmJihlKz1cIm1cIiksdC51bmljb2RlJiYoZSs9XCJ1XCIpLHQuc3RpY2t5JiYoZSs9XCJ5XCIpLGV9fSxmdW5jdGlvbih0LGUsbil7dmFyIGk9bigwKS5kb2N1bWVudDt0LmV4cG9ydHM9aSYmaS5kb2N1bWVudEVsZW1lbnR9LGZ1bmN0aW9uKHQsZSxuKXt0LmV4cG9ydHM9IW4oNCkmJiFuKDcpKGZ1bmN0aW9uKCl7cmV0dXJuIDchPU9iamVjdC5kZWZpbmVQcm9wZXJ0eShuKDIxKShcImRpdlwiKSxcImFcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDd9fSkuYX0pfSxmdW5jdGlvbih0LGUsbil7dmFyIGk9big5KTt0LmV4cG9ydHM9QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24odCl7cmV0dXJuXCJBcnJheVwiPT1pKHQpfX0sZnVuY3Rpb24odCxlLG4pe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGkodCl7dmFyIGUsbjt0aGlzLnByb21pc2U9bmV3IHQoZnVuY3Rpb24odCxpKXtpZih2b2lkIDAhPT1lfHx2b2lkIDAhPT1uKXRocm93IFR5cGVFcnJvcihcIkJhZCBQcm9taXNlIGNvbnN0cnVjdG9yXCIpO2U9dCxuPWl9KSx0aGlzLnJlc29sdmU9cihlKSx0aGlzLnJlamVjdD1yKG4pfXZhciByPW4oMTQpO3QuZXhwb3J0cy5mPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgaSh0KX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgaT1uKDIpLHI9big3Niksbz1uKDIyKSxzPW4oMjcpKFwiSUVfUFJPVE9cIiksdT1mdW5jdGlvbigpe30sYT1mdW5jdGlvbigpe3ZhciB0LGU9bigyMSkoXCJpZnJhbWVcIiksaT1vLmxlbmd0aDtmb3IoZS5zdHlsZS5kaXNwbGF5PVwibm9uZVwiLG4oNDApLmFwcGVuZENoaWxkKGUpLGUuc3JjPVwiamF2YXNjcmlwdDpcIix0PWUuY29udGVudFdpbmRvdy5kb2N1bWVudCx0Lm9wZW4oKSx0LndyaXRlKFwiPHNjcmlwdD5kb2N1bWVudC5GPU9iamVjdDxcXC9zY3JpcHQ+XCIpLHQuY2xvc2UoKSxhPXQuRjtpLS07KWRlbGV0ZSBhLnByb3RvdHlwZVtvW2ldXTtyZXR1cm4gYSgpfTt0LmV4cG9ydHM9T2JqZWN0LmNyZWF0ZXx8ZnVuY3Rpb24odCxlKXt2YXIgbjtyZXR1cm4gbnVsbCE9PXQ/KHUucHJvdG90eXBlPWkodCksbj1uZXcgdSx1LnByb3RvdHlwZT1udWxsLG5bc109dCk6bj1hKCksdm9pZCAwPT09ZT9uOnIobixlKX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgaT1uKDc5KSxyPW4oMjUpLG89bigxOCkscz1uKDI5KSx1PW4oMTIpLGE9big0MSksbD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO2UuZj1uKDQpP2w6ZnVuY3Rpb24odCxlKXtpZih0PW8odCksZT1zKGUsITApLGEpdHJ5e3JldHVybiBsKHQsZSl9Y2F0Y2godCl7fWlmKHUodCxlKSlyZXR1cm4gcighaS5mLmNhbGwodCxlKSx0W2VdKX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgaT1uKDEyKSxyPW4oMTgpLG89bigzNykoITEpLHM9bigyNykoXCJJRV9QUk9UT1wiKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbix1PXIodCksYT0wLGw9W107Zm9yKG4gaW4gdSluIT1zJiZpKHUsbikmJmwucHVzaChuKTtmb3IoO2UubGVuZ3RoPmE7KWkodSxuPWVbYSsrXSkmJih+byhsLG4pfHxsLnB1c2gobikpO3JldHVybiBsfX0sZnVuY3Rpb24odCxlLG4pe3ZhciBpPW4oNDYpLHI9bigyMik7dC5leHBvcnRzPU9iamVjdC5rZXlzfHxmdW5jdGlvbih0KXtyZXR1cm4gaSh0LHIpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciBpPW4oMikscj1uKDUpLG89big0Myk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoaSh0KSxyKGUpJiZlLmNvbnN0cnVjdG9yPT09dClyZXR1cm4gZTt2YXIgbj1vLmYodCk7cmV0dXJuKDAsbi5yZXNvbHZlKShlKSxuLnByb21pc2V9fSxmdW5jdGlvbih0LGUsbil7dmFyIGk9bigxMCkscj1uKDApLG89cltcIl9fY29yZS1qc19zaGFyZWRfX1wiXXx8KHJbXCJfX2NvcmUtanNfc2hhcmVkX19cIl09e30pOyh0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gb1t0XXx8KG9bdF09dm9pZCAwIT09ZT9lOnt9KX0pKFwidmVyc2lvbnNcIixbXSkucHVzaCh7dmVyc2lvbjppLnZlcnNpb24sbW9kZTpuKDI0KT9cInB1cmVcIjpcImdsb2JhbFwiLGNvcHlyaWdodDpcIsKpIDIwMTggRGVuaXMgUHVzaGthcmV2ICh6bG9pcm9jay5ydSlcIn0pfSxmdW5jdGlvbih0LGUsbil7dmFyIGk9bigyKSxyPW4oMTQpLG89bigxKShcInNwZWNpZXNcIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG4scz1pKHQpLmNvbnN0cnVjdG9yO3JldHVybiB2b2lkIDA9PT1zfHx2b2lkIDA9PShuPWkocylbb10pP2U6cihuKX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgaT1uKDMpLHI9bigxNiksbz1uKDcpLHM9big4NCksdT1cIltcIitzK1wiXVwiLGE9XCLigIvChVwiLGw9UmVnRXhwKFwiXlwiK3UrdStcIipcIiksYz1SZWdFeHAodSt1K1wiKiRcIiksZj1mdW5jdGlvbih0LGUsbil7dmFyIHI9e30sdT1vKGZ1bmN0aW9uKCl7cmV0dXJuISFzW3RdKCl8fGFbdF0oKSE9YX0pLGw9clt0XT11P2UocCk6c1t0XTtuJiYocltuXT1sKSxpKGkuUCtpLkYqdSxcIlN0cmluZ1wiLHIpfSxwPWYudHJpbT1mdW5jdGlvbih0LGUpe3JldHVybiB0PVN0cmluZyhyKHQpKSwxJmUmJih0PXQucmVwbGFjZShsLFwiXCIpKSwyJmUmJih0PXQucmVwbGFjZShjLFwiXCIpKSx0fTt0LmV4cG9ydHM9Zn0sZnVuY3Rpb24odCxlLG4pe3ZhciBpLHIsbyxzPW4oMTEpLHU9big2OCksYT1uKDQwKSxsPW4oMjEpLGM9bigwKSxmPWMucHJvY2VzcyxwPWMuc2V0SW1tZWRpYXRlLGg9Yy5jbGVhckltbWVkaWF0ZSxkPWMuTWVzc2FnZUNoYW5uZWwsdj1jLkRpc3BhdGNoLGc9MCx5PXt9LG09ZnVuY3Rpb24oKXt2YXIgdD0rdGhpcztpZih5Lmhhc093blByb3BlcnR5KHQpKXt2YXIgZT15W3RdO2RlbGV0ZSB5W3RdLGUoKX19LGI9ZnVuY3Rpb24odCl7bS5jYWxsKHQuZGF0YSl9O3AmJmh8fChwPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1bXSxuPTE7YXJndW1lbnRzLmxlbmd0aD5uOyllLnB1c2goYXJndW1lbnRzW24rK10pO3JldHVybiB5WysrZ109ZnVuY3Rpb24oKXt1KFwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpGdW5jdGlvbih0KSxlKX0saShnKSxnfSxoPWZ1bmN0aW9uKHQpe2RlbGV0ZSB5W3RdfSxcInByb2Nlc3NcIj09big5KShmKT9pPWZ1bmN0aW9uKHQpe2YubmV4dFRpY2socyhtLHQsMSkpfTp2JiZ2Lm5vdz9pPWZ1bmN0aW9uKHQpe3Yubm93KHMobSx0LDEpKX06ZD8ocj1uZXcgZCxvPXIucG9ydDIsci5wb3J0MS5vbm1lc3NhZ2U9YixpPXMoby5wb3N0TWVzc2FnZSxvLDEpKTpjLmFkZEV2ZW50TGlzdGVuZXImJlwiZnVuY3Rpb25cIj09dHlwZW9mIHBvc3RNZXNzYWdlJiYhYy5pbXBvcnRTY3JpcHRzPyhpPWZ1bmN0aW9uKHQpe2MucG9zdE1lc3NhZ2UodCtcIlwiLFwiKlwiKX0sYy5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLGIsITEpKTppPVwib25yZWFkeXN0YXRlY2hhbmdlXCJpbiBsKFwic2NyaXB0XCIpP2Z1bmN0aW9uKHQpe2EuYXBwZW5kQ2hpbGQobChcInNjcmlwdFwiKSkub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7YS5yZW1vdmVDaGlsZCh0aGlzKSxtLmNhbGwodCl9fTpmdW5jdGlvbih0KXtzZXRUaW1lb3V0KHMobSx0LDEpLDApfSksdC5leHBvcnRzPXtzZXQ6cCxjbGVhcjpofX0sZnVuY3Rpb24odCxlKXt2YXIgbj1NYXRoLmNlaWwsaT1NYXRoLmZsb29yO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gaXNOYU4odD0rdCk/MDoodD4wP2k6bikodCl9fSxmdW5jdGlvbih0LGUsbil7XCJ1c2Ugc3RyaWN0XCI7dmFyIGk9bigzKSxyPW4oMjApKDUpLG89ITA7XCJmaW5kXCJpbltdJiZBcnJheSgxKS5maW5kKGZ1bmN0aW9uKCl7bz0hMX0pLGkoaS5QK2kuRipvLFwiQXJyYXlcIix7ZmluZDpmdW5jdGlvbih0KXtyZXR1cm4gcih0aGlzLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfX0pLG4oMzYpKFwiZmluZFwiKX0sZnVuY3Rpb24odCxlLG4pe1widXNlIHN0cmljdFwiO3ZhciBpLHIsbyxzLHU9bigyNCksYT1uKDApLGw9bigxMSksYz1uKDM4KSxmPW4oMykscD1uKDUpLGg9bigxNCksZD1uKDYxKSx2PW4oNjYpLGc9big1MCkseT1uKDUyKS5zZXQsbT1uKDc1KSgpLGI9big0MyksXz1uKDgwKSx4PW4oODYpLHc9big0OCksUz1hLlR5cGVFcnJvcixPPWEucHJvY2VzcyxMPU8mJk8udmVyc2lvbnMsaz1MJiZMLnY4fHxcIlwiLFA9YS5Qcm9taXNlLFQ9XCJwcm9jZXNzXCI9PWMoTyksVj1mdW5jdGlvbigpe30sRT1yPWIuZixBPSEhZnVuY3Rpb24oKXt0cnl7dmFyIHQ9UC5yZXNvbHZlKDEpLGU9KHQuY29uc3RydWN0b3I9e30pW24oMSkoXCJzcGVjaWVzXCIpXT1mdW5jdGlvbih0KXt0KFYsVil9O3JldHVybihUfHxcImZ1bmN0aW9uXCI9PXR5cGVvZiBQcm9taXNlUmVqZWN0aW9uRXZlbnQpJiZ0LnRoZW4oVilpbnN0YW5jZW9mIGUmJjAhPT1rLmluZGV4T2YoXCI2LjZcIikmJi0xPT09eC5pbmRleE9mKFwiQ2hyb21lLzY2XCIpfWNhdGNoKHQpe319KCksQz1mdW5jdGlvbih0KXt2YXIgZTtyZXR1cm4hKCFwKHQpfHxcImZ1bmN0aW9uXCIhPXR5cGVvZihlPXQudGhlbikpJiZlfSxEPWZ1bmN0aW9uKHQsZSl7aWYoIXQuX24pe3QuX249ITA7dmFyIG49dC5fYzttKGZ1bmN0aW9uKCl7Zm9yKHZhciBpPXQuX3Yscj0xPT10Ll9zLG89MDtuLmxlbmd0aD5vOykhZnVuY3Rpb24oZSl7dmFyIG4sbyxzLHU9cj9lLm9rOmUuZmFpbCxhPWUucmVzb2x2ZSxsPWUucmVqZWN0LGM9ZS5kb21haW47dHJ5e3U/KHJ8fCgyPT10Ll9oJiYkKHQpLHQuX2g9MSksITA9PT11P249aTooYyYmYy5lbnRlcigpLG49dShpKSxjJiYoYy5leGl0KCkscz0hMCkpLG49PT1lLnByb21pc2U/bChTKFwiUHJvbWlzZS1jaGFpbiBjeWNsZVwiKSk6KG89QyhuKSk/by5jYWxsKG4sYSxsKTphKG4pKTpsKGkpfWNhdGNoKHQpe2MmJiFzJiZjLmV4aXQoKSxsKHQpfX0obltvKytdKTt0Ll9jPVtdLHQuX249ITEsZSYmIXQuX2gmJmoodCl9KX19LGo9ZnVuY3Rpb24odCl7eS5jYWxsKGEsZnVuY3Rpb24oKXt2YXIgZSxuLGkscj10Ll92LG89Tih0KTtpZihvJiYoZT1fKGZ1bmN0aW9uKCl7VD9PLmVtaXQoXCJ1bmhhbmRsZWRSZWplY3Rpb25cIixyLHQpOihuPWEub251bmhhbmRsZWRyZWplY3Rpb24pP24oe3Byb21pc2U6dCxyZWFzb246cn0pOihpPWEuY29uc29sZSkmJmkuZXJyb3ImJmkuZXJyb3IoXCJVbmhhbmRsZWQgcHJvbWlzZSByZWplY3Rpb25cIixyKX0pLHQuX2g9VHx8Tih0KT8yOjEpLHQuX2E9dm9pZCAwLG8mJmUuZSl0aHJvdyBlLnZ9KX0sTj1mdW5jdGlvbih0KXtyZXR1cm4gMSE9PXQuX2gmJjA9PT0odC5fYXx8dC5fYykubGVuZ3RofSwkPWZ1bmN0aW9uKHQpe3kuY2FsbChhLGZ1bmN0aW9uKCl7dmFyIGU7VD9PLmVtaXQoXCJyZWplY3Rpb25IYW5kbGVkXCIsdCk6KGU9YS5vbnJlamVjdGlvbmhhbmRsZWQpJiZlKHtwcm9taXNlOnQscmVhc29uOnQuX3Z9KX0pfSxGPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7ZS5fZHx8KGUuX2Q9ITAsZT1lLl93fHxlLGUuX3Y9dCxlLl9zPTIsZS5fYXx8KGUuX2E9ZS5fYy5zbGljZSgpKSxEKGUsITApKX0sTT1mdW5jdGlvbih0KXt2YXIgZSxuPXRoaXM7aWYoIW4uX2Qpe24uX2Q9ITAsbj1uLl93fHxuO3RyeXtpZihuPT09dCl0aHJvdyBTKFwiUHJvbWlzZSBjYW4ndCBiZSByZXNvbHZlZCBpdHNlbGZcIik7KGU9Qyh0KSk/bShmdW5jdGlvbigpe3ZhciBpPXtfdzpuLF9kOiExfTt0cnl7ZS5jYWxsKHQsbChNLGksMSksbChGLGksMSkpfWNhdGNoKHQpe0YuY2FsbChpLHQpfX0pOihuLl92PXQsbi5fcz0xLEQobiwhMSkpfWNhdGNoKHQpe0YuY2FsbCh7X3c6bixfZDohMX0sdCl9fX07QXx8KFA9ZnVuY3Rpb24odCl7ZCh0aGlzLFAsXCJQcm9taXNlXCIsXCJfaFwiKSxoKHQpLGkuY2FsbCh0aGlzKTt0cnl7dChsKE0sdGhpcywxKSxsKEYsdGhpcywxKSl9Y2F0Y2godCl7Ri5jYWxsKHRoaXMsdCl9fSxpPWZ1bmN0aW9uKHQpe3RoaXMuX2M9W10sdGhpcy5fYT12b2lkIDAsdGhpcy5fcz0wLHRoaXMuX2Q9ITEsdGhpcy5fdj12b2lkIDAsdGhpcy5faD0wLHRoaXMuX249ITF9LGkucHJvdG90eXBlPW4oODEpKFAucHJvdG90eXBlLHt0aGVuOmZ1bmN0aW9uKHQsZSl7dmFyIG49RShnKHRoaXMsUCkpO3JldHVybiBuLm9rPVwiZnVuY3Rpb25cIiE9dHlwZW9mIHR8fHQsbi5mYWlsPVwiZnVuY3Rpb25cIj09dHlwZW9mIGUmJmUsbi5kb21haW49VD9PLmRvbWFpbjp2b2lkIDAsdGhpcy5fYy5wdXNoKG4pLHRoaXMuX2EmJnRoaXMuX2EucHVzaChuKSx0aGlzLl9zJiZEKHRoaXMsITEpLG4ucHJvbWlzZX0sY2F0Y2g6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudGhlbih2b2lkIDAsdCl9fSksbz1mdW5jdGlvbigpe3ZhciB0PW5ldyBpO3RoaXMucHJvbWlzZT10LHRoaXMucmVzb2x2ZT1sKE0sdCwxKSx0aGlzLnJlamVjdD1sKEYsdCwxKX0sYi5mPUU9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT1QfHx0PT09cz9uZXcgbyh0KTpyKHQpfSksZihmLkcrZi5XK2YuRiohQSx7UHJvbWlzZTpQfSksbigyNikoUCxcIlByb21pc2VcIiksbig4MykoXCJQcm9taXNlXCIpLHM9bigxMCkuUHJvbWlzZSxmKGYuUytmLkYqIUEsXCJQcm9taXNlXCIse3JlamVjdDpmdW5jdGlvbih0KXt2YXIgZT1FKHRoaXMpO3JldHVybigwLGUucmVqZWN0KSh0KSxlLnByb21pc2V9fSksZihmLlMrZi5GKih1fHwhQSksXCJQcm9taXNlXCIse3Jlc29sdmU6ZnVuY3Rpb24odCl7cmV0dXJuIHcodSYmdGhpcz09PXM/UDp0aGlzLHQpfX0pLGYoZi5TK2YuRiohKEEmJm4oNzMpKGZ1bmN0aW9uKHQpe1AuYWxsKHQpLmNhdGNoKFYpfSkpLFwiUHJvbWlzZVwiLHthbGw6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPUUoZSksaT1uLnJlc29sdmUscj1uLnJlamVjdCxvPV8oZnVuY3Rpb24oKXt2YXIgbj1bXSxvPTAscz0xO3YodCwhMSxmdW5jdGlvbih0KXt2YXIgdT1vKyssYT0hMTtuLnB1c2godm9pZCAwKSxzKyssZS5yZXNvbHZlKHQpLnRoZW4oZnVuY3Rpb24odCl7YXx8KGE9ITAsblt1XT10LC0tc3x8aShuKSl9LHIpfSksLS1zfHxpKG4pfSk7cmV0dXJuIG8uZSYmcihvLnYpLG4ucHJvbWlzZX0scmFjZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLG49RShlKSxpPW4ucmVqZWN0LHI9XyhmdW5jdGlvbigpe3YodCwhMSxmdW5jdGlvbih0KXtlLnJlc29sdmUodCkudGhlbihuLnJlc29sdmUsaSl9KX0pO3JldHVybiByLmUmJmkoci52KSxuLnByb21pc2V9fSl9LGZ1bmN0aW9uKHQsZSxuKXtcInVzZSBzdHJpY3RcIjt2YXIgaT1uKDMpLHI9bigxMCksbz1uKDApLHM9big1MCksdT1uKDQ4KTtpKGkuUCtpLlIsXCJQcm9taXNlXCIse2ZpbmFsbHk6ZnVuY3Rpb24odCl7dmFyIGU9cyh0aGlzLHIuUHJvbWlzZXx8by5Qcm9taXNlKSxuPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ7cmV0dXJuIHRoaXMudGhlbihuP2Z1bmN0aW9uKG4pe3JldHVybiB1KGUsdCgpKS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIG59KX06dCxuP2Z1bmN0aW9uKG4pe3JldHVybiB1KGUsdCgpKS50aGVuKGZ1bmN0aW9uKCl7dGhyb3cgbn0pfTp0KX19KX0sZnVuY3Rpb24odCxlLG4pe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGkodCl7big5OSl9dmFyIHI9bigzNSksbz1uKDEwMSkscz1uKDEwMCksdT1pLGE9cyhyLmEsby5hLCExLHUsbnVsbCxudWxsKTtlLmE9YS5leHBvcnRzfSxmdW5jdGlvbih0LGUsbil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gaSh0LGUsbil7cmV0dXJuIGUgaW4gdD9PYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLHt2YWx1ZTpuLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6dFtlXT1uLHR9ZS5hPWl9LGZ1bmN0aW9uKHQsZSxuKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBpKHQpe3JldHVybihpPVwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmXCJzeW1ib2xcIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3JldHVybiB0JiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlP1wic3ltYm9sXCI6dHlwZW9mIHR9KSh0KX1mdW5jdGlvbiByKHQpe3JldHVybihyPVwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmXCJzeW1ib2xcIj09PWkoU3ltYm9sLml0ZXJhdG9yKT9mdW5jdGlvbih0KXtyZXR1cm4gaSh0KX06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJlwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/XCJzeW1ib2xcIjppKHQpfSkodCl9ZS5hPXJ9LGZ1bmN0aW9uKHQsZSxuKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KTt2YXIgaT1uKDM0KSxyPShuLm4oaSksbig1NSkpLG89KG4ubihyKSxuKDU2KSkscz0obi5uKG8pLG4oNTcpKSx1PW4oMzIpLGE9bigzMyk7bi5kKGUsXCJNdWx0aXNlbGVjdFwiLGZ1bmN0aW9uKCl7cmV0dXJuIHMuYX0pLG4uZChlLFwibXVsdGlzZWxlY3RNaXhpblwiLGZ1bmN0aW9uKCl7cmV0dXJuIHUuYX0pLG4uZChlLFwicG9pbnRlck1peGluXCIsZnVuY3Rpb24oKXtyZXR1cm4gYS5hfSksZS5kZWZhdWx0PXMuYX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4saSl7aWYoISh0IGluc3RhbmNlb2YgZSl8fHZvaWQgMCE9PWkmJmkgaW4gdCl0aHJvdyBUeXBlRXJyb3IobitcIjogaW5jb3JyZWN0IGludm9jYXRpb24hXCIpO3JldHVybiB0fX0sZnVuY3Rpb24odCxlLG4pe3ZhciBpPW4oMTQpLHI9bigyOCksbz1uKDIzKSxzPW4oMTkpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbix1LGEpe2koZSk7dmFyIGw9cih0KSxjPW8obCksZj1zKGwubGVuZ3RoKSxwPWE/Zi0xOjAsaD1hPy0xOjE7aWYobjwyKWZvcig7Oyl7aWYocCBpbiBjKXt1PWNbcF0scCs9aDticmVha31pZihwKz1oLGE/cDwwOmY8PXApdGhyb3cgVHlwZUVycm9yKFwiUmVkdWNlIG9mIGVtcHR5IGFycmF5IHdpdGggbm8gaW5pdGlhbCB2YWx1ZVwiKX1mb3IoO2E/cD49MDpmPnA7cCs9aClwIGluIGMmJih1PWUodSxjW3BdLHAsbCkpO3JldHVybiB1fX0sZnVuY3Rpb24odCxlLG4pe3ZhciBpPW4oNSkscj1uKDQyKSxvPW4oMSkoXCJzcGVjaWVzXCIpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZTtyZXR1cm4gcih0KSYmKGU9dC5jb25zdHJ1Y3RvcixcImZ1bmN0aW9uXCIhPXR5cGVvZiBlfHxlIT09QXJyYXkmJiFyKGUucHJvdG90eXBlKXx8KGU9dm9pZCAwKSxpKGUpJiZudWxsPT09KGU9ZVtvXSkmJihlPXZvaWQgMCkpLHZvaWQgMD09PWU/QXJyYXk6ZX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgaT1uKDYzKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3KGkodCkpKGUpfX0sZnVuY3Rpb24odCxlLG4pe1widXNlIHN0cmljdFwiO3ZhciBpPW4oOCkscj1uKDYpLG89big3KSxzPW4oMTYpLHU9bigxKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe3ZhciBhPXUodCksbD1uKHMsYSxcIlwiW3RdKSxjPWxbMF0sZj1sWzFdO28oZnVuY3Rpb24oKXt2YXIgZT17fTtyZXR1cm4gZVthXT1mdW5jdGlvbigpe3JldHVybiA3fSw3IT1cIlwiW3RdKGUpfSkmJihyKFN0cmluZy5wcm90b3R5cGUsdCxjKSxpKFJlZ0V4cC5wcm90b3R5cGUsYSwyPT1lP2Z1bmN0aW9uKHQsZSl7cmV0dXJuIGYuY2FsbCh0LHRoaXMsZSl9OmZ1bmN0aW9uKHQpe3JldHVybiBmLmNhbGwodCx0aGlzKX0pKX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgaT1uKDExKSxyPW4oNzApLG89big2OSkscz1uKDIpLHU9bigxOSksYT1uKDg3KSxsPXt9LGM9e30sZT10LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4sZixwKXt2YXIgaCxkLHYsZyx5PXA/ZnVuY3Rpb24oKXtyZXR1cm4gdH06YSh0KSxtPWkobixmLGU/MjoxKSxiPTA7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgeSl0aHJvdyBUeXBlRXJyb3IodCtcIiBpcyBub3QgaXRlcmFibGUhXCIpO2lmKG8oeSkpe2ZvcihoPXUodC5sZW5ndGgpO2g+YjtiKyspaWYoKGc9ZT9tKHMoZD10W2JdKVswXSxkWzFdKTptKHRbYl0pKT09PWx8fGc9PT1jKXJldHVybiBnfWVsc2UgZm9yKHY9eS5jYWxsKHQpOyEoZD12Lm5leHQoKSkuZG9uZTspaWYoKGc9cih2LG0sZC52YWx1ZSxlKSk9PT1sfHxnPT09YylyZXR1cm4gZ307ZS5CUkVBSz1sLGUuUkVUVVJOPWN9LGZ1bmN0aW9uKHQsZSxuKXt2YXIgaT1uKDUpLHI9big4Mikuc2V0O3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7dmFyIG8scz1lLmNvbnN0cnVjdG9yO3JldHVybiBzIT09biYmXCJmdW5jdGlvblwiPT10eXBlb2YgcyYmKG89cy5wcm90b3R5cGUpIT09bi5wcm90b3R5cGUmJmkobykmJnImJnIodCxvKSx0fX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe3ZhciBpPXZvaWQgMD09PW47c3dpdGNoKGUubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIGk/dCgpOnQuY2FsbChuKTtjYXNlIDE6cmV0dXJuIGk/dChlWzBdKTp0LmNhbGwobixlWzBdKTtjYXNlIDI6cmV0dXJuIGk/dChlWzBdLGVbMV0pOnQuY2FsbChuLGVbMF0sZVsxXSk7Y2FzZSAzOnJldHVybiBpP3QoZVswXSxlWzFdLGVbMl0pOnQuY2FsbChuLGVbMF0sZVsxXSxlWzJdKTtjYXNlIDQ6cmV0dXJuIGk/dChlWzBdLGVbMV0sZVsyXSxlWzNdKTp0LmNhbGwobixlWzBdLGVbMV0sZVsyXSxlWzNdKX1yZXR1cm4gdC5hcHBseShuLGUpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciBpPW4oMTUpLHI9bigxKShcIml0ZXJhdG9yXCIpLG89QXJyYXkucHJvdG90eXBlO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwIT09dCYmKGkuQXJyYXk9PT10fHxvW3JdPT09dCl9fSxmdW5jdGlvbih0LGUsbil7dmFyIGk9bigyKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4scil7dHJ5e3JldHVybiByP2UoaShuKVswXSxuWzFdKTplKG4pfWNhdGNoKGUpe3ZhciBvPXQucmV0dXJuO3Rocm93IHZvaWQgMCE9PW8mJmkoby5jYWxsKHQpKSxlfX19LGZ1bmN0aW9uKHQsZSxuKXtcInVzZSBzdHJpY3RcIjt2YXIgaT1uKDQ0KSxyPW4oMjUpLG89bigyNikscz17fTtuKDgpKHMsbigxKShcIml0ZXJhdG9yXCIpLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSx0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe3QucHJvdG90eXBlPWkocyx7bmV4dDpyKDEsbil9KSxvKHQsZStcIiBJdGVyYXRvclwiKX19LGZ1bmN0aW9uKHQsZSxuKXtcInVzZSBzdHJpY3RcIjt2YXIgaT1uKDI0KSxyPW4oMyksbz1uKDYpLHM9big4KSx1PW4oMTUpLGE9big3MSksbD1uKDI2KSxjPW4oNzgpLGY9bigxKShcIml0ZXJhdG9yXCIpLHA9IShbXS5rZXlzJiZcIm5leHRcImluW10ua2V5cygpKSxoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9O3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbixkLHYsZyx5KXthKG4sZSxkKTt2YXIgbSxiLF8seD1mdW5jdGlvbih0KXtpZighcCYmdCBpbiBMKXJldHVybiBMW3RdO3N3aXRjaCh0KXtjYXNlXCJrZXlzXCI6Y2FzZVwidmFsdWVzXCI6cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBuKHRoaXMsdCl9fXJldHVybiBmdW5jdGlvbigpe3JldHVybiBuZXcgbih0aGlzLHQpfX0sdz1lK1wiIEl0ZXJhdG9yXCIsUz1cInZhbHVlc1wiPT12LE89ITEsTD10LnByb3RvdHlwZSxrPUxbZl18fExbXCJAQGl0ZXJhdG9yXCJdfHx2JiZMW3ZdLFA9a3x8eCh2KSxUPXY/Uz94KFwiZW50cmllc1wiKTpQOnZvaWQgMCxWPVwiQXJyYXlcIj09ZT9MLmVudHJpZXN8fGs6aztpZihWJiYoXz1jKFYuY2FsbChuZXcgdCkpKSE9PU9iamVjdC5wcm90b3R5cGUmJl8ubmV4dCYmKGwoXyx3LCEwKSxpfHxcImZ1bmN0aW9uXCI9PXR5cGVvZiBfW2ZdfHxzKF8sZixoKSksUyYmayYmXCJ2YWx1ZXNcIiE9PWsubmFtZSYmKE89ITAsUD1mdW5jdGlvbigpe3JldHVybiBrLmNhbGwodGhpcyl9KSxpJiYheXx8IXAmJiFPJiZMW2ZdfHxzKEwsZixQKSx1W2VdPVAsdVt3XT1oLHYpaWYobT17dmFsdWVzOlM/UDp4KFwidmFsdWVzXCIpLGtleXM6Zz9QOngoXCJrZXlzXCIpLGVudHJpZXM6VH0seSlmb3IoYiBpbiBtKWIgaW4gTHx8byhMLGIsbVtiXSk7ZWxzZSByKHIuUCtyLkYqKHB8fE8pLGUsbSk7cmV0dXJuIG19fSxmdW5jdGlvbih0LGUsbil7dmFyIGk9bigxKShcIml0ZXJhdG9yXCIpLHI9ITE7dHJ5e3ZhciBvPVs3XVtpXSgpO28ucmV0dXJuPWZ1bmN0aW9uKCl7cj0hMH0sQXJyYXkuZnJvbShvLGZ1bmN0aW9uKCl7dGhyb3cgMn0pfWNhdGNoKHQpe310LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpZighZSYmIXIpcmV0dXJuITE7dmFyIG49ITE7dHJ5e3ZhciBvPVs3XSxzPW9baV0oKTtzLm5leHQ9ZnVuY3Rpb24oKXtyZXR1cm57ZG9uZTpuPSEwfX0sb1tpXT1mdW5jdGlvbigpe3JldHVybiBzfSx0KG8pfWNhdGNoKHQpe31yZXR1cm4gbn19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJue3ZhbHVlOmUsZG9uZTohIXR9fX0sZnVuY3Rpb24odCxlLG4pe3ZhciBpPW4oMCkscj1uKDUyKS5zZXQsbz1pLk11dGF0aW9uT2JzZXJ2ZXJ8fGkuV2ViS2l0TXV0YXRpb25PYnNlcnZlcixzPWkucHJvY2Vzcyx1PWkuUHJvbWlzZSxhPVwicHJvY2Vzc1wiPT1uKDkpKHMpO3QuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciB0LGUsbixsPWZ1bmN0aW9uKCl7dmFyIGkscjtmb3IoYSYmKGk9cy5kb21haW4pJiZpLmV4aXQoKTt0Oyl7cj10LmZuLHQ9dC5uZXh0O3RyeXtyKCl9Y2F0Y2goaSl7dGhyb3cgdD9uKCk6ZT12b2lkIDAsaX19ZT12b2lkIDAsaSYmaS5lbnRlcigpfTtpZihhKW49ZnVuY3Rpb24oKXtzLm5leHRUaWNrKGwpfTtlbHNlIGlmKCFvfHxpLm5hdmlnYXRvciYmaS5uYXZpZ2F0b3Iuc3RhbmRhbG9uZSlpZih1JiZ1LnJlc29sdmUpe3ZhciBjPXUucmVzb2x2ZSh2b2lkIDApO249ZnVuY3Rpb24oKXtjLnRoZW4obCl9fWVsc2Ugbj1mdW5jdGlvbigpe3IuY2FsbChpLGwpfTtlbHNle3ZhciBmPSEwLHA9ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoXCJcIik7bmV3IG8obCkub2JzZXJ2ZShwLHtjaGFyYWN0ZXJEYXRhOiEwfSksbj1mdW5jdGlvbigpe3AuZGF0YT1mPSFmfX1yZXR1cm4gZnVuY3Rpb24oaSl7dmFyIHI9e2ZuOmksbmV4dDp2b2lkIDB9O2UmJihlLm5leHQ9ciksdHx8KHQ9cixuKCkpLGU9cn19fSxmdW5jdGlvbih0LGUsbil7dmFyIGk9bigxMykscj1uKDIpLG89big0Nyk7dC5leHBvcnRzPW4oNCk/T2JqZWN0LmRlZmluZVByb3BlcnRpZXM6ZnVuY3Rpb24odCxlKXtyKHQpO2Zvcih2YXIgbixzPW8oZSksdT1zLmxlbmd0aCxhPTA7dT5hOylpLmYodCxuPXNbYSsrXSxlW25dKTtyZXR1cm4gdH19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgaT1uKDQ2KSxyPW4oMjIpLmNvbmNhdChcImxlbmd0aFwiLFwicHJvdG90eXBlXCIpO2UuZj1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc3x8ZnVuY3Rpb24odCl7cmV0dXJuIGkodCxyKX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgaT1uKDEyKSxyPW4oMjgpLG89bigyNykoXCJJRV9QUk9UT1wiKSxzPU9iamVjdC5wcm90b3R5cGU7dC5leHBvcnRzPU9iamVjdC5nZXRQcm90b3R5cGVPZnx8ZnVuY3Rpb24odCl7cmV0dXJuIHQ9cih0KSxpKHQsbyk/dFtvXTpcImZ1bmN0aW9uXCI9PXR5cGVvZiB0LmNvbnN0cnVjdG9yJiZ0IGluc3RhbmNlb2YgdC5jb25zdHJ1Y3Rvcj90LmNvbnN0cnVjdG9yLnByb3RvdHlwZTp0IGluc3RhbmNlb2YgT2JqZWN0P3M6bnVsbH19LGZ1bmN0aW9uKHQsZSl7ZS5mPXt9LnByb3BlcnR5SXNFbnVtZXJhYmxlfSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0KXt0cnl7cmV0dXJue2U6ITEsdjp0KCl9fWNhdGNoKHQpe3JldHVybntlOiEwLHY6dH19fX0sZnVuY3Rpb24odCxlLG4pe3ZhciBpPW4oNik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXtmb3IodmFyIHIgaW4gZSlpKHQscixlW3JdLG4pO3JldHVybiB0fX0sZnVuY3Rpb24odCxlLG4pe3ZhciBpPW4oNSkscj1uKDIpLG89ZnVuY3Rpb24odCxlKXtpZihyKHQpLCFpKGUpJiZudWxsIT09ZSl0aHJvdyBUeXBlRXJyb3IoZStcIjogY2FuJ3Qgc2V0IGFzIHByb3RvdHlwZSFcIil9O3QuZXhwb3J0cz17c2V0Ok9iamVjdC5zZXRQcm90b3R5cGVPZnx8KFwiX19wcm90b19fXCJpbnt9P2Z1bmN0aW9uKHQsZSxpKXt0cnl7aT1uKDExKShGdW5jdGlvbi5jYWxsLG4oNDUpLmYoT2JqZWN0LnByb3RvdHlwZSxcIl9fcHJvdG9fX1wiKS5zZXQsMiksaSh0LFtdKSxlPSEodCBpbnN0YW5jZW9mIEFycmF5KX1jYXRjaCh0KXtlPSEwfXJldHVybiBmdW5jdGlvbih0LG4pe3JldHVybiBvKHQsbiksZT90Ll9fcHJvdG9fXz1uOmkodCxuKSx0fX0oe30sITEpOnZvaWQgMCksY2hlY2s6b319LGZ1bmN0aW9uKHQsZSxuKXtcInVzZSBzdHJpY3RcIjt2YXIgaT1uKDApLHI9bigxMyksbz1uKDQpLHM9bigxKShcInNwZWNpZXNcIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPWlbdF07byYmZSYmIWVbc10mJnIuZihlLHMse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc319KX19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPVwiXFx0XFxuXFx2XFxmXFxyIMKg4ZqA4aCO4oCA4oCB4oCC4oCD4oCE4oCF4oCG4oCH4oCI4oCJ4oCK4oCv4oGf44CAXFx1MjAyOFxcdTIwMjlcXHVmZWZmXCJ9LGZ1bmN0aW9uKHQsZSxuKXt2YXIgaT1uKDUzKSxyPU1hdGgubWF4LG89TWF0aC5taW47dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9aSh0KSx0PDA/cih0K2UsMCk6byh0LGUpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciBpPW4oMCkscj1pLm5hdmlnYXRvcjt0LmV4cG9ydHM9ciYmci51c2VyQWdlbnR8fFwiXCJ9LGZ1bmN0aW9uKHQsZSxuKXt2YXIgaT1uKDM4KSxyPW4oMSkoXCJpdGVyYXRvclwiKSxvPW4oMTUpO3QuZXhwb3J0cz1uKDEwKS5nZXRJdGVyYXRvck1ldGhvZD1mdW5jdGlvbih0KXtpZih2b2lkIDAhPXQpcmV0dXJuIHRbcl18fHRbXCJAQGl0ZXJhdG9yXCJdfHxvW2kodCldfX0sZnVuY3Rpb24odCxlLG4pe1widXNlIHN0cmljdFwiO3ZhciBpPW4oMykscj1uKDIwKSgyKTtpKGkuUCtpLkYqIW4oMTcpKFtdLmZpbHRlciwhMCksXCJBcnJheVwiLHtmaWx0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHIodGhpcyx0LGFyZ3VtZW50c1sxXSl9fSl9LGZ1bmN0aW9uKHQsZSxuKXtcInVzZSBzdHJpY3RcIjt2YXIgaT1uKDMpLHI9bigzNykoITEpLG89W10uaW5kZXhPZixzPSEhbyYmMS9bMV0uaW5kZXhPZigxLC0wKTwwO2koaS5QK2kuRiooc3x8IW4oMTcpKG8pKSxcIkFycmF5XCIse2luZGV4T2Y6ZnVuY3Rpb24odCl7cmV0dXJuIHM/by5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fDA6cih0aGlzLHQsYXJndW1lbnRzWzFdKX19KX0sZnVuY3Rpb24odCxlLG4pe3ZhciBpPW4oMyk7aShpLlMsXCJBcnJheVwiLHtpc0FycmF5Om4oNDIpfSl9LGZ1bmN0aW9uKHQsZSxuKXtcInVzZSBzdHJpY3RcIjt2YXIgaT1uKDMpLHI9bigyMCkoMSk7aShpLlAraS5GKiFuKDE3KShbXS5tYXAsITApLFwiQXJyYXlcIix7bWFwOmZ1bmN0aW9uKHQpe3JldHVybiByKHRoaXMsdCxhcmd1bWVudHNbMV0pfX0pfSxmdW5jdGlvbih0LGUsbil7XCJ1c2Ugc3RyaWN0XCI7dmFyIGk9bigzKSxyPW4oNjIpO2koaS5QK2kuRiohbigxNykoW10ucmVkdWNlLCEwKSxcIkFycmF5XCIse3JlZHVjZTpmdW5jdGlvbih0KXtyZXR1cm4gcih0aGlzLHQsYXJndW1lbnRzLmxlbmd0aCxhcmd1bWVudHNbMV0sITEpfX0pfSxmdW5jdGlvbih0LGUsbil7dmFyIGk9RGF0ZS5wcm90b3R5cGUscj1pLnRvU3RyaW5nLG89aS5nZXRUaW1lO25ldyBEYXRlKE5hTikrXCJcIiE9XCJJbnZhbGlkIERhdGVcIiYmbig2KShpLFwidG9TdHJpbmdcIixmdW5jdGlvbigpe3ZhciB0PW8uY2FsbCh0aGlzKTtyZXR1cm4gdD09PXQ/ci5jYWxsKHRoaXMpOlwiSW52YWxpZCBEYXRlXCJ9KX0sZnVuY3Rpb24odCxlLG4pe24oNCkmJlwiZ1wiIT0vLi9nLmZsYWdzJiZuKDEzKS5mKFJlZ0V4cC5wcm90b3R5cGUsXCJmbGFnc1wiLHtjb25maWd1cmFibGU6ITAsZ2V0Om4oMzkpfSl9LGZ1bmN0aW9uKHQsZSxuKXtuKDY1KShcInNlYXJjaFwiLDEsZnVuY3Rpb24odCxlLG4pe3JldHVybltmdW5jdGlvbihuKXtcInVzZSBzdHJpY3RcIjt2YXIgaT10KHRoaXMpLHI9dm9pZCAwPT1uP3ZvaWQgMDpuW2VdO3JldHVybiB2b2lkIDAhPT1yP3IuY2FsbChuLGkpOm5ldyBSZWdFeHAobilbZV0oU3RyaW5nKGkpKX0sbl19KX0sZnVuY3Rpb24odCxlLG4pe1widXNlIHN0cmljdFwiO24oOTQpO3ZhciBpPW4oMikscj1uKDM5KSxvPW4oNCkscz0vLi8udG9TdHJpbmcsdT1mdW5jdGlvbih0KXtuKDYpKFJlZ0V4cC5wcm90b3R5cGUsXCJ0b1N0cmluZ1wiLHQsITApfTtuKDcpKGZ1bmN0aW9uKCl7cmV0dXJuXCIvYS9iXCIhPXMuY2FsbCh7c291cmNlOlwiYVwiLGZsYWdzOlwiYlwifSl9KT91KGZ1bmN0aW9uKCl7dmFyIHQ9aSh0aGlzKTtyZXR1cm5cIi9cIi5jb25jYXQodC5zb3VyY2UsXCIvXCIsXCJmbGFnc1wiaW4gdD90LmZsYWdzOiFvJiZ0IGluc3RhbmNlb2YgUmVnRXhwP3IuY2FsbCh0KTp2b2lkIDApfSk6XCJ0b1N0cmluZ1wiIT1zLm5hbWUmJnUoZnVuY3Rpb24oKXtyZXR1cm4gcy5jYWxsKHRoaXMpfSl9LGZ1bmN0aW9uKHQsZSxuKXtcInVzZSBzdHJpY3RcIjtuKDUxKShcInRyaW1cIixmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdCh0aGlzLDMpfX0pfSxmdW5jdGlvbih0LGUsbil7Zm9yKHZhciBpPW4oMzQpLHI9big0Nyksbz1uKDYpLHM9bigwKSx1PW4oOCksYT1uKDE1KSxsPW4oMSksYz1sKFwiaXRlcmF0b3JcIiksZj1sKFwidG9TdHJpbmdUYWdcIikscD1hLkFycmF5LGg9e0NTU1J1bGVMaXN0OiEwLENTU1N0eWxlRGVjbGFyYXRpb246ITEsQ1NTVmFsdWVMaXN0OiExLENsaWVudFJlY3RMaXN0OiExLERPTVJlY3RMaXN0OiExLERPTVN0cmluZ0xpc3Q6ITEsRE9NVG9rZW5MaXN0OiEwLERhdGFUcmFuc2Zlckl0ZW1MaXN0OiExLEZpbGVMaXN0OiExLEhUTUxBbGxDb2xsZWN0aW9uOiExLEhUTUxDb2xsZWN0aW9uOiExLEhUTUxGb3JtRWxlbWVudDohMSxIVE1MU2VsZWN0RWxlbWVudDohMSxNZWRpYUxpc3Q6ITAsTWltZVR5cGVBcnJheTohMSxOYW1lZE5vZGVNYXA6ITEsTm9kZUxpc3Q6ITAsUGFpbnRSZXF1ZXN0TGlzdDohMSxQbHVnaW46ITEsUGx1Z2luQXJyYXk6ITEsU1ZHTGVuZ3RoTGlzdDohMSxTVkdOdW1iZXJMaXN0OiExLFNWR1BhdGhTZWdMaXN0OiExLFNWR1BvaW50TGlzdDohMSxTVkdTdHJpbmdMaXN0OiExLFNWR1RyYW5zZm9ybUxpc3Q6ITEsU291cmNlQnVmZmVyTGlzdDohMSxTdHlsZVNoZWV0TGlzdDohMCxUZXh0VHJhY2tDdWVMaXN0OiExLFRleHRUcmFja0xpc3Q6ITEsVG91Y2hMaXN0OiExfSxkPXIoaCksdj0wO3Y8ZC5sZW5ndGg7disrKXt2YXIgZyx5PWRbdl0sbT1oW3ldLGI9c1t5XSxfPWImJmIucHJvdG90eXBlO2lmKF8mJihfW2NdfHx1KF8sYyxwKSxfW2ZdfHx1KF8sZix5KSxhW3ldPXAsbSkpZm9yKGcgaW4gaSlfW2ddfHxvKF8sZyxpW2ddLCEwKX19LGZ1bmN0aW9uKHQsZSl7fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbixpLHIsbyl7dmFyIHMsdT10PXR8fHt9LGE9dHlwZW9mIHQuZGVmYXVsdDtcIm9iamVjdFwiIT09YSYmXCJmdW5jdGlvblwiIT09YXx8KHM9dCx1PXQuZGVmYXVsdCk7dmFyIGw9XCJmdW5jdGlvblwiPT10eXBlb2YgdT91Lm9wdGlvbnM6dTtlJiYobC5yZW5kZXI9ZS5yZW5kZXIsbC5zdGF0aWNSZW5kZXJGbnM9ZS5zdGF0aWNSZW5kZXJGbnMsbC5fY29tcGlsZWQ9ITApLG4mJihsLmZ1bmN0aW9uYWw9ITApLHImJihsLl9zY29wZUlkPXIpO3ZhciBjO2lmKG8/KGM9ZnVuY3Rpb24odCl7dD10fHx0aGlzLiR2bm9kZSYmdGhpcy4kdm5vZGUuc3NyQ29udGV4dHx8dGhpcy5wYXJlbnQmJnRoaXMucGFyZW50LiR2bm9kZSYmdGhpcy5wYXJlbnQuJHZub2RlLnNzckNvbnRleHQsdHx8XCJ1bmRlZmluZWRcIj09dHlwZW9mIF9fVlVFX1NTUl9DT05URVhUX198fCh0PV9fVlVFX1NTUl9DT05URVhUX18pLGkmJmkuY2FsbCh0aGlzLHQpLHQmJnQuX3JlZ2lzdGVyZWRDb21wb25lbnRzJiZ0Ll9yZWdpc3RlcmVkQ29tcG9uZW50cy5hZGQobyl9LGwuX3NzclJlZ2lzdGVyPWMpOmkmJihjPWkpLGMpe3ZhciBmPWwuZnVuY3Rpb25hbCxwPWY/bC5yZW5kZXI6bC5iZWZvcmVDcmVhdGU7Zj8obC5faW5qZWN0U3R5bGVzPWMsbC5yZW5kZXI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gYy5jYWxsKGUpLHAodCxlKX0pOmwuYmVmb3JlQ3JlYXRlPXA/W10uY29uY2F0KHAsYyk6W2NdfXJldHVybntlc01vZHVsZTpzLGV4cG9ydHM6dSxvcHRpb25zOmx9fX0sZnVuY3Rpb24odCxlLG4pe1widXNlIHN0cmljdFwiO3ZhciBpPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPXQuJGNyZWF0ZUVsZW1lbnQsbj10Ll9zZWxmLl9jfHxlO3JldHVybiBuKFwiZGl2XCIse3N0YXRpY0NsYXNzOlwibXVsdGlzZWxlY3RcIixjbGFzczp7XCJtdWx0aXNlbGVjdC0tYWN0aXZlXCI6dC5pc09wZW4sXCJtdWx0aXNlbGVjdC0tZGlzYWJsZWRcIjp0LmRpc2FibGVkLFwibXVsdGlzZWxlY3QtLWFib3ZlXCI6dC5pc0Fib3ZlfSxhdHRyczp7dGFiaW5kZXg6dC5zZWFyY2hhYmxlPy0xOnQudGFiaW5kZXh9LG9uOntmb2N1czpmdW5jdGlvbihlKXt0LmFjdGl2YXRlKCl9LGJsdXI6ZnVuY3Rpb24oZSl7IXQuc2VhcmNoYWJsZSYmdC5kZWFjdGl2YXRlKCl9LGtleWRvd246W2Z1bmN0aW9uKGUpe3JldHVyblwiYnV0dG9uXCJpbiBlfHwhdC5fayhlLmtleUNvZGUsXCJkb3duXCIsNDAsZS5rZXksW1wiRG93blwiLFwiQXJyb3dEb3duXCJdKT9lLnRhcmdldCE9PWUuY3VycmVudFRhcmdldD9udWxsOihlLnByZXZlbnREZWZhdWx0KCksdm9pZCB0LnBvaW50ZXJGb3J3YXJkKCkpOm51bGx9LGZ1bmN0aW9uKGUpe3JldHVyblwiYnV0dG9uXCJpbiBlfHwhdC5fayhlLmtleUNvZGUsXCJ1cFwiLDM4LGUua2V5LFtcIlVwXCIsXCJBcnJvd1VwXCJdKT9lLnRhcmdldCE9PWUuY3VycmVudFRhcmdldD9udWxsOihlLnByZXZlbnREZWZhdWx0KCksdm9pZCB0LnBvaW50ZXJCYWNrd2FyZCgpKTpudWxsfV0sa2V5cHJlc3M6ZnVuY3Rpb24oZSl7cmV0dXJuXCJidXR0b25cImluIGV8fCF0Ll9rKGUua2V5Q29kZSxcImVudGVyXCIsMTMsZS5rZXksXCJFbnRlclwiKXx8IXQuX2soZS5rZXlDb2RlLFwidGFiXCIsOSxlLmtleSxcIlRhYlwiKT8oZS5zdG9wUHJvcGFnYXRpb24oKSxlLnRhcmdldCE9PWUuY3VycmVudFRhcmdldD9udWxsOnZvaWQgdC5hZGRQb2ludGVyRWxlbWVudChlKSk6bnVsbH0sa2V5dXA6ZnVuY3Rpb24oZSl7aWYoIShcImJ1dHRvblwiaW4gZSkmJnQuX2soZS5rZXlDb2RlLFwiZXNjXCIsMjcsZS5rZXksXCJFc2NhcGVcIikpcmV0dXJuIG51bGw7dC5kZWFjdGl2YXRlKCl9fX0sW3QuX3QoXCJjYXJldFwiLFtuKFwiZGl2XCIse3N0YXRpY0NsYXNzOlwibXVsdGlzZWxlY3RfX3NlbGVjdFwiLG9uOnttb3VzZWRvd246ZnVuY3Rpb24oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpLGUuc3RvcFByb3BhZ2F0aW9uKCksdC50b2dnbGUoKX19fSldLHt0b2dnbGU6dC50b2dnbGV9KSx0Ll92KFwiIFwiKSx0Ll90KFwiY2xlYXJcIixudWxsLHtzZWFyY2g6dC5zZWFyY2h9KSx0Ll92KFwiIFwiKSxuKFwiZGl2XCIse3JlZjpcInRhZ3NcIixzdGF0aWNDbGFzczpcIm11bHRpc2VsZWN0X190YWdzXCJ9LFt0Ll90KFwic2VsZWN0aW9uXCIsW24oXCJkaXZcIix7ZGlyZWN0aXZlczpbe25hbWU6XCJzaG93XCIscmF3TmFtZTpcInYtc2hvd1wiLHZhbHVlOnQudmlzaWJsZVZhbHVlcy5sZW5ndGg+MCxleHByZXNzaW9uOlwidmlzaWJsZVZhbHVlcy5sZW5ndGggPiAwXCJ9XSxzdGF0aWNDbGFzczpcIm11bHRpc2VsZWN0X190YWdzLXdyYXBcIn0sW3QuX2wodC52aXNpYmxlVmFsdWVzLGZ1bmN0aW9uKGUsaSl7cmV0dXJuW3QuX3QoXCJ0YWdcIixbbihcInNwYW5cIix7a2V5Omksc3RhdGljQ2xhc3M6XCJtdWx0aXNlbGVjdF9fdGFnXCJ9LFtuKFwic3BhblwiLHtkb21Qcm9wczp7dGV4dENvbnRlbnQ6dC5fcyh0LmdldE9wdGlvbkxhYmVsKGUpKX19KSx0Ll92KFwiIFwiKSxuKFwiaVwiLHtzdGF0aWNDbGFzczpcIm11bHRpc2VsZWN0X190YWctaWNvblwiLGF0dHJzOntcImFyaWEtaGlkZGVuXCI6XCJ0cnVlXCIsdGFiaW5kZXg6XCIxXCJ9LG9uOntrZXlwcmVzczpmdW5jdGlvbihuKXtpZighKFwiYnV0dG9uXCJpbiBuKSYmdC5fayhuLmtleUNvZGUsXCJlbnRlclwiLDEzLG4ua2V5LFwiRW50ZXJcIikpcmV0dXJuIG51bGw7bi5wcmV2ZW50RGVmYXVsdCgpLHQucmVtb3ZlRWxlbWVudChlKX0sbW91c2Vkb3duOmZ1bmN0aW9uKG4pe24ucHJldmVudERlZmF1bHQoKSx0LnJlbW92ZUVsZW1lbnQoZSl9fX0pXSldLHtvcHRpb246ZSxzZWFyY2g6dC5zZWFyY2gscmVtb3ZlOnQucmVtb3ZlRWxlbWVudH0pXX0pXSwyKSx0Ll92KFwiIFwiKSx0LmludGVybmFsVmFsdWUmJnQuaW50ZXJuYWxWYWx1ZS5sZW5ndGg+dC5saW1pdD9bdC5fdChcImxpbWl0XCIsW24oXCJzdHJvbmdcIix7c3RhdGljQ2xhc3M6XCJtdWx0aXNlbGVjdF9fc3Ryb25nXCIsZG9tUHJvcHM6e3RleHRDb250ZW50OnQuX3ModC5saW1pdFRleHQodC5pbnRlcm5hbFZhbHVlLmxlbmd0aC10LmxpbWl0KSl9fSldKV06dC5fZSgpXSx7c2VhcmNoOnQuc2VhcmNoLHJlbW92ZTp0LnJlbW92ZUVsZW1lbnQsdmFsdWVzOnQudmlzaWJsZVZhbHVlcyxpc09wZW46dC5pc09wZW59KSx0Ll92KFwiIFwiKSxuKFwidHJhbnNpdGlvblwiLHthdHRyczp7bmFtZTpcIm11bHRpc2VsZWN0X19sb2FkaW5nXCJ9fSxbdC5fdChcImxvYWRpbmdcIixbbihcImRpdlwiLHtkaXJlY3RpdmVzOlt7bmFtZTpcInNob3dcIixyYXdOYW1lOlwidi1zaG93XCIsdmFsdWU6dC5sb2FkaW5nLGV4cHJlc3Npb246XCJsb2FkaW5nXCJ9XSxzdGF0aWNDbGFzczpcIm11bHRpc2VsZWN0X19zcGlubmVyXCJ9KV0pXSwyKSx0Ll92KFwiIFwiKSx0LnNlYXJjaGFibGU/bihcImlucHV0XCIse3JlZjpcInNlYXJjaFwiLHN0YXRpY0NsYXNzOlwibXVsdGlzZWxlY3RfX2lucHV0XCIsc3R5bGU6dC5pbnB1dFN0eWxlLGF0dHJzOntuYW1lOnQubmFtZSxpZDp0LmlkLHR5cGU6XCJ0ZXh0XCIsYXV0b2NvbXBsZXRlOlwibm9wZVwiLHBsYWNlaG9sZGVyOnQucGxhY2Vob2xkZXIsZGlzYWJsZWQ6dC5kaXNhYmxlZCx0YWJpbmRleDp0LnRhYmluZGV4fSxkb21Qcm9wczp7dmFsdWU6dC5zZWFyY2h9LG9uOntpbnB1dDpmdW5jdGlvbihlKXt0LnVwZGF0ZVNlYXJjaChlLnRhcmdldC52YWx1ZSl9LGZvY3VzOmZ1bmN0aW9uKGUpe2UucHJldmVudERlZmF1bHQoKSx0LmFjdGl2YXRlKCl9LGJsdXI6ZnVuY3Rpb24oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpLHQuZGVhY3RpdmF0ZSgpfSxrZXl1cDpmdW5jdGlvbihlKXtpZighKFwiYnV0dG9uXCJpbiBlKSYmdC5fayhlLmtleUNvZGUsXCJlc2NcIiwyNyxlLmtleSxcIkVzY2FwZVwiKSlyZXR1cm4gbnVsbDt0LmRlYWN0aXZhdGUoKX0sa2V5ZG93bjpbZnVuY3Rpb24oZSl7aWYoIShcImJ1dHRvblwiaW4gZSkmJnQuX2soZS5rZXlDb2RlLFwiZG93blwiLDQwLGUua2V5LFtcIkRvd25cIixcIkFycm93RG93blwiXSkpcmV0dXJuIG51bGw7ZS5wcmV2ZW50RGVmYXVsdCgpLHQucG9pbnRlckZvcndhcmQoKX0sZnVuY3Rpb24oZSl7aWYoIShcImJ1dHRvblwiaW4gZSkmJnQuX2soZS5rZXlDb2RlLFwidXBcIiwzOCxlLmtleSxbXCJVcFwiLFwiQXJyb3dVcFwiXSkpcmV0dXJuIG51bGw7ZS5wcmV2ZW50RGVmYXVsdCgpLHQucG9pbnRlckJhY2t3YXJkKCl9LGZ1bmN0aW9uKGUpe2lmKCEoXCJidXR0b25cImluIGUpJiZ0Ll9rKGUua2V5Q29kZSxcImRlbGV0ZVwiLFs4LDQ2XSxlLmtleSxbXCJCYWNrc3BhY2VcIixcIkRlbGV0ZVwiXSkpcmV0dXJuIG51bGw7ZS5zdG9wUHJvcGFnYXRpb24oKSx0LnJlbW92ZUxhc3RFbGVtZW50KCl9XSxrZXlwcmVzczpmdW5jdGlvbihlKXtyZXR1cm5cImJ1dHRvblwiaW4gZXx8IXQuX2soZS5rZXlDb2RlLFwiZW50ZXJcIiwxMyxlLmtleSxcIkVudGVyXCIpPyhlLnByZXZlbnREZWZhdWx0KCksZS5zdG9wUHJvcGFnYXRpb24oKSxlLnRhcmdldCE9PWUuY3VycmVudFRhcmdldD9udWxsOnZvaWQgdC5hZGRQb2ludGVyRWxlbWVudChlKSk6bnVsbH19fSk6dC5fZSgpLHQuX3YoXCIgXCIpLHQuaXNTaW5nbGVMYWJlbFZpc2libGU/bihcInNwYW5cIix7c3RhdGljQ2xhc3M6XCJtdWx0aXNlbGVjdF9fc2luZ2xlXCIsb246e21vdXNlZG93bjpmdW5jdGlvbihlKXtyZXR1cm4gZS5wcmV2ZW50RGVmYXVsdCgpLHQudG9nZ2xlKGUpfX19LFt0Ll90KFwic2luZ2xlTGFiZWxcIixbW3QuX3YodC5fcyh0LmN1cnJlbnRPcHRpb25MYWJlbCkpXV0se29wdGlvbjp0LnNpbmdsZVZhbHVlfSldLDIpOnQuX2UoKSx0Ll92KFwiIFwiKSx0LmlzUGxhY2Vob2xkZXJWaXNpYmxlP24oXCJzcGFuXCIse3N0YXRpY0NsYXNzOlwibXVsdGlzZWxlY3RfX3BsYWNlaG9sZGVyXCIsb246e21vdXNlZG93bjpmdW5jdGlvbihlKXtyZXR1cm4gZS5wcmV2ZW50RGVmYXVsdCgpLHQudG9nZ2xlKGUpfX19LFt0Ll90KFwicGxhY2Vob2xkZXJcIixbdC5fdihcIlxcbiAgICAgICAgICBcIit0Ll9zKHQucGxhY2Vob2xkZXIpK1wiXFxuICAgICAgICBcIildKV0sMik6dC5fZSgpXSwyKSx0Ll92KFwiIFwiKSxuKFwidHJhbnNpdGlvblwiLHthdHRyczp7bmFtZTpcIm11bHRpc2VsZWN0XCJ9fSxbbihcImRpdlwiLHtkaXJlY3RpdmVzOlt7bmFtZTpcInNob3dcIixyYXdOYW1lOlwidi1zaG93XCIsdmFsdWU6dC5pc09wZW4sZXhwcmVzc2lvbjpcImlzT3BlblwifV0scmVmOlwibGlzdFwiLHN0YXRpY0NsYXNzOlwibXVsdGlzZWxlY3RfX2NvbnRlbnQtd3JhcHBlclwiLHN0eWxlOnttYXhIZWlnaHQ6dC5vcHRpbWl6ZWRIZWlnaHQrXCJweFwifSxhdHRyczp7dGFiaW5kZXg6XCItMVwifSxvbjp7Zm9jdXM6dC5hY3RpdmF0ZSxtb3VzZWRvd246ZnVuY3Rpb24odCl7dC5wcmV2ZW50RGVmYXVsdCgpfX19LFtuKFwidWxcIix7c3RhdGljQ2xhc3M6XCJtdWx0aXNlbGVjdF9fY29udGVudFwiLHN0eWxlOnQuY29udGVudFN0eWxlfSxbdC5fdChcImJlZm9yZUxpc3RcIiksdC5fdihcIiBcIiksdC5tdWx0aXBsZSYmdC5tYXg9PT10LmludGVybmFsVmFsdWUubGVuZ3RoP24oXCJsaVwiLFtuKFwic3BhblwiLHtzdGF0aWNDbGFzczpcIm11bHRpc2VsZWN0X19vcHRpb25cIn0sW3QuX3QoXCJtYXhFbGVtZW50c1wiLFt0Ll92KFwiTWF4aW11bSBvZiBcIit0Ll9zKHQubWF4KStcIiBvcHRpb25zIHNlbGVjdGVkLiBGaXJzdCByZW1vdmUgYSBzZWxlY3RlZCBvcHRpb24gdG8gc2VsZWN0IGFub3RoZXIuXCIpXSldLDIpXSk6dC5fZSgpLHQuX3YoXCIgXCIpLCF0Lm1heHx8dC5pbnRlcm5hbFZhbHVlLmxlbmd0aDx0Lm1heD90Ll9sKHQuZmlsdGVyZWRPcHRpb25zLGZ1bmN0aW9uKGUsaSl7cmV0dXJuIG4oXCJsaVwiLHtrZXk6aSxzdGF0aWNDbGFzczpcIm11bHRpc2VsZWN0X19lbGVtZW50XCJ9LFtlJiYoZS4kaXNMYWJlbHx8ZS4kaXNEaXNhYmxlZCk/dC5fZSgpOm4oXCJzcGFuXCIse3N0YXRpY0NsYXNzOlwibXVsdGlzZWxlY3RfX29wdGlvblwiLGNsYXNzOnQub3B0aW9uSGlnaGxpZ2h0KGksZSksYXR0cnM6e1wiZGF0YS1zZWxlY3RcIjplJiZlLmlzVGFnP3QudGFnUGxhY2Vob2xkZXI6dC5zZWxlY3RMYWJlbFRleHQsXCJkYXRhLXNlbGVjdGVkXCI6dC5zZWxlY3RlZExhYmVsVGV4dCxcImRhdGEtZGVzZWxlY3RcIjp0LmRlc2VsZWN0TGFiZWxUZXh0fSxvbjp7Y2xpY2s6ZnVuY3Rpb24obil7bi5zdG9wUHJvcGFnYXRpb24oKSx0LnNlbGVjdChlKX0sbW91c2VlbnRlcjpmdW5jdGlvbihlKXtpZihlLnRhcmdldCE9PWUuY3VycmVudFRhcmdldClyZXR1cm4gbnVsbDt0LnBvaW50ZXJTZXQoaSl9fX0sW3QuX3QoXCJvcHRpb25cIixbbihcInNwYW5cIixbdC5fdih0Ll9zKHQuZ2V0T3B0aW9uTGFiZWwoZSkpKV0pXSx7b3B0aW9uOmUsc2VhcmNoOnQuc2VhcmNofSldLDIpLHQuX3YoXCIgXCIpLGUmJihlLiRpc0xhYmVsfHxlLiRpc0Rpc2FibGVkKT9uKFwic3BhblwiLHtzdGF0aWNDbGFzczpcIm11bHRpc2VsZWN0X19vcHRpb25cIixjbGFzczp0Lmdyb3VwSGlnaGxpZ2h0KGksZSksYXR0cnM6e1wiZGF0YS1zZWxlY3RcIjp0Lmdyb3VwU2VsZWN0JiZ0LnNlbGVjdEdyb3VwTGFiZWxUZXh0LFwiZGF0YS1kZXNlbGVjdFwiOnQuZ3JvdXBTZWxlY3QmJnQuZGVzZWxlY3RHcm91cExhYmVsVGV4dH0sb246e21vdXNlZW50ZXI6ZnVuY3Rpb24oZSl7aWYoZS50YXJnZXQhPT1lLmN1cnJlbnRUYXJnZXQpcmV0dXJuIG51bGw7dC5ncm91cFNlbGVjdCYmdC5wb2ludGVyU2V0KGkpfSxtb3VzZWRvd246ZnVuY3Rpb24obil7bi5wcmV2ZW50RGVmYXVsdCgpLHQuc2VsZWN0R3JvdXAoZSl9fX0sW3QuX3QoXCJvcHRpb25cIixbbihcInNwYW5cIixbdC5fdih0Ll9zKHQuZ2V0T3B0aW9uTGFiZWwoZSkpKV0pXSx7b3B0aW9uOmUsc2VhcmNoOnQuc2VhcmNofSldLDIpOnQuX2UoKV0pfSk6dC5fZSgpLHQuX3YoXCIgXCIpLG4oXCJsaVwiLHtkaXJlY3RpdmVzOlt7bmFtZTpcInNob3dcIixyYXdOYW1lOlwidi1zaG93XCIsdmFsdWU6dC5zaG93Tm9SZXN1bHRzJiYwPT09dC5maWx0ZXJlZE9wdGlvbnMubGVuZ3RoJiZ0LnNlYXJjaCYmIXQubG9hZGluZyxleHByZXNzaW9uOlwic2hvd05vUmVzdWx0cyAmJiAoZmlsdGVyZWRPcHRpb25zLmxlbmd0aCA9PT0gMCAmJiBzZWFyY2ggJiYgIWxvYWRpbmcpXCJ9XX0sW24oXCJzcGFuXCIse3N0YXRpY0NsYXNzOlwibXVsdGlzZWxlY3RfX29wdGlvblwifSxbdC5fdChcIm5vUmVzdWx0XCIsW3QuX3YoXCJObyBlbGVtZW50cyBmb3VuZC4gQ29uc2lkZXIgY2hhbmdpbmcgdGhlIHNlYXJjaCBxdWVyeS5cIildLHtzZWFyY2g6dC5zZWFyY2h9KV0sMildKSx0Ll92KFwiIFwiKSxuKFwibGlcIix7ZGlyZWN0aXZlczpbe25hbWU6XCJzaG93XCIscmF3TmFtZTpcInYtc2hvd1wiLHZhbHVlOnQuc2hvd05vT3B0aW9ucyYmMD09PXQub3B0aW9ucy5sZW5ndGgmJiF0LnNlYXJjaCYmIXQubG9hZGluZyxleHByZXNzaW9uOlwic2hvd05vT3B0aW9ucyAmJiAob3B0aW9ucy5sZW5ndGggPT09IDAgJiYgIXNlYXJjaCAmJiAhbG9hZGluZylcIn1dfSxbbihcInNwYW5cIix7c3RhdGljQ2xhc3M6XCJtdWx0aXNlbGVjdF9fb3B0aW9uXCJ9LFt0Ll90KFwibm9PcHRpb25zXCIsW3QuX3YoXCJMaXN0IGlzIGVtcHR5LlwiKV0pXSwyKV0pLHQuX3YoXCIgXCIpLHQuX3QoXCJhZnRlckxpc3RcIildLDIpXSldKV0sMil9LHI9W10sbz17cmVuZGVyOmksc3RhdGljUmVuZGVyRm5zOnJ9O2UuYT1vfV0pfSk7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/vue-multiselect/dist/vue-multiselect.min.js\n");
/***/ }),
/***/ "./node_modules/vue/dist/vue.esm.js":
/*!******************************************!*\
!*** ./node_modules/vue/dist/vue.esm.js ***!
\******************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"EffectScope\": () => (/* binding */ EffectScope),\n/* harmony export */ \"computed\": () => (/* binding */ computed),\n/* harmony export */ \"customRef\": () => (/* binding */ customRef),\n/* harmony export */ \"default\": () => (/* binding */ Vue),\n/* harmony export */ \"defineAsyncComponent\": () => (/* binding */ defineAsyncComponent),\n/* harmony export */ \"defineComponent\": () => (/* binding */ defineComponent),\n/* harmony export */ \"del\": () => (/* binding */ del),\n/* harmony export */ \"effectScope\": () => (/* binding */ effectScope),\n/* harmony export */ \"getCurrentInstance\": () => (/* binding */ getCurrentInstance),\n/* harmony export */ \"getCurrentScope\": () => (/* binding */ getCurrentScope),\n/* harmony export */ \"h\": () => (/* binding */ h),\n/* harmony export */ \"inject\": () => (/* binding */ inject),\n/* harmony export */ \"isProxy\": () => (/* binding */ isProxy),\n/* harmony export */ \"isReactive\": () => (/* binding */ isReactive),\n/* harmony export */ \"isReadonly\": () => (/* binding */ isReadonly),\n/* harmony export */ \"isRef\": () => (/* binding */ isRef),\n/* harmony export */ \"isShallow\": () => (/* binding */ isShallow),\n/* harmony export */ \"markRaw\": () => (/* binding */ markRaw),\n/* harmony export */ \"mergeDefaults\": () => (/* binding */ mergeDefaults),\n/* harmony export */ \"nextTick\": () => (/* binding */ nextTick),\n/* harmony export */ \"onActivated\": () => (/* binding */ onActivated),\n/* harmony export */ \"onBeforeMount\": () => (/* binding */ onBeforeMount),\n/* harmony export */ \"onBeforeUnmount\": () => (/* binding */ onBeforeUnmount),\n/* harmony export */ \"onBeforeUpdate\": () => (/* binding */ onBeforeUpdate),\n/* harmony export */ \"onDeactivated\": () => (/* binding */ onDeactivated),\n/* harmony export */ \"onErrorCaptured\": () => (/* binding */ onErrorCaptured),\n/* harmony export */ \"onMounted\": () => (/* binding */ onMounted),\n/* harmony export */ \"onRenderTracked\": () => (/* binding */ onRenderTracked),\n/* harmony export */ \"onRenderTriggered\": () => (/* binding */ onRenderTriggered),\n/* harmony export */ \"onScopeDispose\": () => (/* binding */ onScopeDispose),\n/* harmony export */ \"onServerPrefetch\": () => (/* binding */ onServerPrefetch),\n/* harmony export */ \"onUnmounted\": () => (/* binding */ onUnmounted),\n/* harmony export */ \"onUpdated\": () => (/* binding */ onUpdated),\n/* harmony export */ \"provide\": () => (/* binding */ provide),\n/* harmony export */ \"proxyRefs\": () => (/* binding */ proxyRefs),\n/* harmony export */ \"reactive\": () => (/* binding */ reactive),\n/* harmony export */ \"readonly\": () => (/* binding */ readonly),\n/* harmony export */ \"ref\": () => (/* binding */ ref$1),\n/* harmony export */ \"set\": () => (/* binding */ set),\n/* harmony export */ \"shallowReactive\": () => (/* binding */ shallowReactive),\n/* harmony export */ \"shallowReadonly\": () => (/* binding */ shallowReadonly),\n/* harmony export */ \"shallowRef\": () => (/* binding */ shallowRef),\n/* harmony export */ \"toRaw\": () => (/* binding */ toRaw),\n/* harmony export */ \"toRef\": () => (/* binding */ toRef),\n/* harmony export */ \"toRefs\": () => (/* binding */ toRefs),\n/* harmony export */ \"triggerRef\": () => (/* binding */ triggerRef),\n/* harmony export */ \"unref\": () => (/* binding */ unref),\n/* harmony export */ \"useAttrs\": () => (/* binding */ useAttrs),\n/* harmony export */ \"useCssModule\": () => (/* binding */ useCssModule),\n/* harmony export */ \"useCssVars\": () => (/* binding */ useCssVars),\n/* harmony export */ \"useListeners\": () => (/* binding */ useListeners),\n/* harmony export */ \"useSlots\": () => (/* binding */ useSlots),\n/* harmony export */ \"version\": () => (/* binding */ version),\n/* harmony export */ \"watch\": () => (/* binding */ watch),\n/* harmony export */ \"watchEffect\": () => (/* binding */ watchEffect),\n/* harmony export */ \"watchPostEffect\": () => (/* binding */ watchPostEffect),\n/* harmony export */ \"watchSyncEffect\": () => (/* binding */ watchSyncEffect)\n/* harmony export */ });\n/*!\n * Vue.js v2.7.10\n * (c) 2014-2022 Evan You\n * Released under the MIT License.\n */\nvar emptyObject = Object.freeze({});\r\nvar isArray = Array.isArray;\r\n// These helpers produce better VM code in JS engines due to their\r\n// explicitness and function inlining.\r\nfunction isUndef(v) {\r\n return v === undefined || v === null;\r\n}\r\nfunction isDef(v) {\r\n return v !== undefined && v !== null;\r\n}\r\nfunction isTrue(v) {\r\n return v === true;\r\n}\r\nfunction isFalse(v) {\r\n return v === false;\r\n}\r\n/**\r\n * Check if value is primitive.\r\n */\r\nfunction isPrimitive(value) {\r\n return (typeof value === 'string' ||\r\n typeof value === 'number' ||\r\n // $flow-disable-line\r\n typeof value === 'symbol' ||\r\n typeof value === 'boolean');\r\n}\r\nfunction isFunction(value) {\r\n return typeof value === 'function';\r\n}\r\n/**\r\n * Quick object check - this is primarily used to tell\r\n * objects from primitive values when we know the value\r\n * is a JSON-compliant type.\r\n */\r\nfunction isObject(obj) {\r\n return obj !== null && typeof obj === 'object';\r\n}\r\n/**\r\n * Get the raw type string of a value, e.g., [object Object].\r\n */\r\nvar _toString = Object.prototype.toString;\r\nfunction toRawType(value) {\r\n return _toString.call(value).slice(8, -1);\r\n}\r\n/**\r\n * Strict object type check. Only returns true\r\n * for plain JavaScript objects.\r\n */\r\nfunction isPlainObject(obj) {\r\n return _toString.call(obj) === '[object Object]';\r\n}\r\nfunction isRegExp(v) {\r\n return _toString.call(v) === '[object RegExp]';\r\n}\r\n/**\r\n * Check if val is a valid array index.\r\n */\r\nfunction isValidArrayIndex(val) {\r\n var n = parseFloat(String(val));\r\n return n >= 0 && Math.floor(n) === n && isFinite(val);\r\n}\r\nfunction isPromise(val) {\r\n return (isDef(val) &&\r\n typeof val.then === 'function' &&\r\n typeof val.catch === 'function');\r\n}\r\n/**\r\n * Convert a value to a string that is actually rendered.\r\n */\r\nfunction toString(val) {\r\n return val == null\r\n ? ''\r\n : Array.isArray(val) || (isPlainObject(val) && val.toString === _toString)\r\n ? JSON.stringify(val, null, 2)\r\n : String(val);\r\n}\r\n/**\r\n * Convert an input value to a number for persistence.\r\n * If the conversion fails, return original string.\r\n */\r\nfunction toNumber(val) {\r\n var n = parseFloat(val);\r\n return isNaN(n) ? val : n;\r\n}\r\n/**\r\n * Make a map and return a function for checking if a key\r\n * is in that map.\r\n */\r\nfunction makeMap(str, expectsLowerCase) {\r\n var map = Object.create(null);\r\n var list = str.split(',');\r\n for (var i = 0; i < list.length; i++) {\r\n map[list[i]] = true;\r\n }\r\n return expectsLowerCase ? function (val) { return map[val.toLowerCase()]; } : function (val) { return map[val]; };\r\n}\r\n/**\r\n * Check if a tag is a built-in tag.\r\n */\r\nvar isBuiltInTag = makeMap('slot,component', true);\r\n/**\r\n * Check if an attribute is a reserved attribute.\r\n */\r\nvar isReservedAttribute = makeMap('key,ref,slot,slot-scope,is');\r\n/**\r\n * Remove an item from an array.\r\n */\r\nfunction remove$2(arr, item) {\r\n if (arr.length) {\r\n var index = arr.indexOf(item);\r\n if (index > -1) {\r\n return arr.splice(index, 1);\r\n }\r\n }\r\n}\r\n/**\r\n * Check whether an object has the property.\r\n */\r\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\r\nfunction hasOwn(obj, key) {\r\n return hasOwnProperty.call(obj, key);\r\n}\r\n/**\r\n * Create a cached version of a pure function.\r\n */\r\nfunction cached(fn) {\r\n var cache = Object.create(null);\r\n return function cachedFn(str) {\r\n var hit = cache[str];\r\n return hit || (cache[str] = fn(str));\r\n };\r\n}\r\n/**\r\n * Camelize a hyphen-delimited string.\r\n */\r\nvar camelizeRE = /-(\\w)/g;\r\nvar camelize = cached(function (str) {\r\n return str.replace(camelizeRE, function (_, c) { return (c ? c.toUpperCase() : ''); });\r\n});\r\n/**\r\n * Capitalize a string.\r\n */\r\nvar capitalize = cached(function (str) {\r\n return str.charAt(0).toUpperCase() + str.slice(1);\r\n});\r\n/**\r\n * Hyphenate a camelCase string.\r\n */\r\nvar hyphenateRE = /\\B([A-Z])/g;\r\nvar hyphenate = cached(function (str) {\r\n return str.replace(hyphenateRE, '-$1').toLowerCase();\r\n});\r\n/**\r\n * Simple bind polyfill for environments that do not support it,\r\n * e.g., PhantomJS 1.x. Technically, we don't need this anymore\r\n * since native bind is now performant enough in most browsers.\r\n * But removing it would mean breaking code that was able to run in\r\n * PhantomJS 1.x, so this must be kept for backward compatibility.\r\n */\r\n/* istanbul ignore next */\r\nfunction polyfillBind(fn, ctx) {\r\n function boundFn(a) {\r\n var l = arguments.length;\r\n return l\r\n ? l > 1\r\n ? fn.apply(ctx, arguments)\r\n : fn.call(ctx, a)\r\n : fn.call(ctx);\r\n }\r\n boundFn._length = fn.length;\r\n return boundFn;\r\n}\r\nfunction nativeBind(fn, ctx) {\r\n return fn.bind(ctx);\r\n}\r\n// @ts-expect-error bind cannot be `undefined`\r\nvar bind$1 = Function.prototype.bind ? nativeBind : polyfillBind;\r\n/**\r\n * Convert an Array-like object to a real Array.\r\n */\r\nfunction toArray(list, start) {\r\n start = start || 0;\r\n var i = list.length - start;\r\n var ret = new Array(i);\r\n while (i--) {\r\n ret[i] = list[i + start];\r\n }\r\n return ret;\r\n}\r\n/**\r\n * Mix properties into target object.\r\n */\r\nfunction extend(to, _from) {\r\n for (var key in _from) {\r\n to[key] = _from[key];\r\n }\r\n return to;\r\n}\r\n/**\r\n * Merge an Array of Objects into a single Object.\r\n */\r\nfunction toObject(arr) {\r\n var res = {};\r\n for (var i = 0; i < arr.length; i++) {\r\n if (arr[i]) {\r\n extend(res, arr[i]);\r\n }\r\n }\r\n return res;\r\n}\r\n/* eslint-disable no-unused-vars */\r\n/**\r\n * Perform no operation.\r\n * Stubbing args to make Flow happy without leaving useless transpiled code\r\n * with ...rest (https://flow.org/blog/2017/05/07/Strict-Function-Call-Arity/).\r\n */\r\nfunction noop(a, b, c) { }\r\n/**\r\n * Always return false.\r\n */\r\nvar no = function (a, b, c) { return false; };\r\n/* eslint-enable no-unused-vars */\r\n/**\r\n * Return the same value.\r\n */\r\nvar identity = function (_) { return _; };\r\n/**\r\n * Generate a string containing static keys from compiler modules.\r\n */\r\nfunction genStaticKeys$1(modules) {\r\n return modules\r\n .reduce(function (keys, m) {\r\n return keys.concat(m.staticKeys || []);\r\n }, [])\r\n .join(',');\r\n}\r\n/**\r\n * Check if two values are loosely equal - that is,\r\n * if they are plain objects, do they have the same shape?\r\n */\r\nfunction looseEqual(a, b) {\r\n if (a === b)\r\n return true;\r\n var isObjectA = isObject(a);\r\n var isObjectB = isObject(b);\r\n if (isObjectA && isObjectB) {\r\n try {\r\n var isArrayA = Array.isArray(a);\r\n var isArrayB = Array.isArray(b);\r\n if (isArrayA && isArrayB) {\r\n return (a.length === b.length &&\r\n a.every(function (e, i) {\r\n return looseEqual(e, b[i]);\r\n }));\r\n }\r\n else if (a instanceof Date && b instanceof Date) {\r\n return a.getTime() === b.getTime();\r\n }\r\n else if (!isArrayA && !isArrayB) {\r\n var keysA = Object.keys(a);\r\n var keysB = Object.keys(b);\r\n return (keysA.length === keysB.length &&\r\n keysA.every(function (key) {\r\n return looseEqual(a[key], b[key]);\r\n }));\r\n }\r\n else {\r\n /* istanbul ignore next */\r\n return false;\r\n }\r\n }\r\n catch (e) {\r\n /* istanbul ignore next */\r\n return false;\r\n }\r\n }\r\n else if (!isObjectA && !isObjectB) {\r\n return String(a) === String(b);\r\n }\r\n else {\r\n return false;\r\n }\r\n}\r\n/**\r\n * Return the first index at which a loosely equal value can be\r\n * found in the array (if value is a plain object, the array must\r\n * contain an object of the same shape), or -1 if it is not present.\r\n */\r\nfunction looseIndexOf(arr, val) {\r\n for (var i = 0; i < arr.length; i++) {\r\n if (looseEqual(arr[i], val))\r\n return i;\r\n }\r\n return -1;\r\n}\r\n/**\r\n * Ensure a function is called only once.\r\n */\r\nfunction once(fn) {\r\n var called = false;\r\n return function () {\r\n if (!called) {\r\n called = true;\r\n fn.apply(this, arguments);\r\n }\r\n };\r\n}\r\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is#polyfill\r\nfunction hasChanged(x, y) {\r\n if (x === y) {\r\n return x === 0 && 1 / x !== 1 / y;\r\n }\r\n else {\r\n return x === x || y === y;\r\n }\r\n}\n\nvar SSR_ATTR = 'data-server-rendered';\r\nvar ASSET_TYPES = ['component', 'directive', 'filter'];\r\nvar LIFECYCLE_HOOKS = [\r\n 'beforeCreate',\r\n 'created',\r\n 'beforeMount',\r\n 'mounted',\r\n 'beforeUpdate',\r\n 'updated',\r\n 'beforeDestroy',\r\n 'destroyed',\r\n 'activated',\r\n 'deactivated',\r\n 'errorCaptured',\r\n 'serverPrefetch',\r\n 'renderTracked',\r\n 'renderTriggered'\r\n];\n\nvar config = {\r\n /**\r\n * Option merge strategies (used in core/util/options)\r\n */\r\n // $flow-disable-line\r\n optionMergeStrategies: Object.create(null),\r\n /**\r\n * Whether to suppress warnings.\r\n */\r\n silent: false,\r\n /**\r\n * Show production mode tip message on boot?\r\n */\r\n productionTip: \"development\" !== 'production',\r\n /**\r\n * Whether to enable devtools\r\n */\r\n devtools: \"development\" !== 'production',\r\n /**\r\n * Whether to record perf\r\n */\r\n performance: false,\r\n /**\r\n * Error handler for watcher errors\r\n */\r\n errorHandler: null,\r\n /**\r\n * Warn handler for watcher warns\r\n */\r\n warnHandler: null,\r\n /**\r\n * Ignore certain custom elements\r\n */\r\n ignoredElements: [],\r\n /**\r\n * Custom user key aliases for v-on\r\n */\r\n // $flow-disable-line\r\n keyCodes: Object.create(null),\r\n /**\r\n * Check if a tag is reserved so that it cannot be registered as a\r\n * component. This is platform-dependent and may be overwritten.\r\n */\r\n isReservedTag: no,\r\n /**\r\n * Check if an attribute is reserved so that it cannot be used as a component\r\n * prop. This is platform-dependent and may be overwritten.\r\n */\r\n isReservedAttr: no,\r\n /**\r\n * Check if a tag is an unknown element.\r\n * Platform-dependent.\r\n */\r\n isUnknownElement: no,\r\n /**\r\n * Get the namespace of an element\r\n */\r\n getTagNamespace: noop,\r\n /**\r\n * Parse the real tag name for the specific platform.\r\n */\r\n parsePlatformTagName: identity,\r\n /**\r\n * Check if an attribute must be bound using property, e.g. value\r\n * Platform-dependent.\r\n */\r\n mustUseProp: no,\r\n /**\r\n * Perform updates asynchronously. Intended to be used by Vue Test Utils\r\n * This will significantly reduce performance if set to false.\r\n */\r\n async: true,\r\n /**\r\n * Exposed for legacy reasons\r\n */\r\n _lifecycleHooks: LIFECYCLE_HOOKS\r\n};\n\n/**\r\n * unicode letters used for parsing html tags, component names and property paths.\r\n * using https://www.w3.org/TR/html53/semantics-scripting.html#potentialcustomelementname\r\n * skipping \\u10000-\\uEFFFF due to it freezing up PhantomJS\r\n */\r\nvar unicodeRegExp = /a-zA-Z\\u00B7\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u203F-\\u2040\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD/;\r\n/**\r\n * Check if a string starts with $ or _\r\n */\r\nfunction isReserved(str) {\r\n var c = (str + '').charCodeAt(0);\r\n return c === 0x24 || c === 0x5f;\r\n}\r\n/**\r\n * Define a property.\r\n */\r\nfunction def(obj, key, val, enumerable) {\r\n Object.defineProperty(obj, key, {\r\n value: val,\r\n enumerable: !!enumerable,\r\n writable: true,\r\n configurable: true\r\n });\r\n}\r\n/**\r\n * Parse simple path.\r\n */\r\nvar bailRE = new RegExp(\"[^\".concat(unicodeRegExp.source, \".$_\\\\d]\"));\r\nfunction parsePath(path) {\r\n if (bailRE.test(path)) {\r\n return;\r\n }\r\n var segments = path.split('.');\r\n return function (obj) {\r\n for (var i = 0; i < segments.length; i++) {\r\n if (!obj)\r\n return;\r\n obj = obj[segments[i]];\r\n }\r\n return obj;\r\n };\r\n}\n\n// can we use __proto__?\r\nvar hasProto = '__proto__' in {};\r\n// Browser environment sniffing\r\nvar inBrowser = typeof window !== 'undefined';\r\nvar UA = inBrowser && window.navigator.userAgent.toLowerCase();\r\nvar isIE = UA && /msie|trident/.test(UA);\r\nvar isIE9 = UA && UA.indexOf('msie 9.0') > 0;\r\nvar isEdge = UA && UA.indexOf('edge/') > 0;\r\nUA && UA.indexOf('android') > 0;\r\nvar isIOS = UA && /iphone|ipad|ipod|ios/.test(UA);\r\nUA && /chrome\\/\\d+/.test(UA) && !isEdge;\r\nUA && /phantomjs/.test(UA);\r\nvar isFF = UA && UA.match(/firefox\\/(\\d+)/);\r\n// Firefox has a \"watch\" function on Object.prototype...\r\n// @ts-expect-error firebox support\r\nvar nativeWatch = {}.watch;\r\nvar supportsPassive = false;\r\nif (inBrowser) {\r\n try {\r\n var opts = {};\r\n Object.defineProperty(opts, 'passive', {\r\n get: function () {\r\n /* istanbul ignore next */\r\n supportsPassive = true;\r\n }\r\n }); // https://github.com/facebook/flow/issues/285\r\n window.addEventListener('test-passive', null, opts);\r\n }\r\n catch (e) { }\r\n}\r\n// this needs to be lazy-evaled because vue may be required before\r\n// vue-server-renderer can set VUE_ENV\r\nvar _isServer;\r\nvar isServerRendering = function () {\r\n if (_isServer === undefined) {\r\n /* istanbul ignore if */\r\n if (!inBrowser && typeof __webpack_require__.g !== 'undefined') {\r\n // detect presence of vue-server-renderer and avoid\r\n // Webpack shimming the process\r\n _isServer =\r\n __webpack_require__.g['process'] && __webpack_require__.g['process'].env.VUE_ENV === 'server';\r\n }\r\n else {\r\n _isServer = false;\r\n }\r\n }\r\n return _isServer;\r\n};\r\n// detect devtools\r\nvar devtools = inBrowser && window.__VUE_DEVTOOLS_GLOBAL_HOOK__;\r\n/* istanbul ignore next */\r\nfunction isNative(Ctor) {\r\n return typeof Ctor === 'function' && /native code/.test(Ctor.toString());\r\n}\r\nvar hasSymbol = typeof Symbol !== 'undefined' &&\r\n isNative(Symbol) &&\r\n typeof Reflect !== 'undefined' &&\r\n isNative(Reflect.ownKeys);\r\nvar _Set; // $flow-disable-line\r\n/* istanbul ignore if */ if (typeof Set !== 'undefined' && isNative(Set)) {\r\n // use native Set when available.\r\n _Set = Set;\r\n}\r\nelse {\r\n // a non-standard Set polyfill that only works with primitive keys.\r\n _Set = /** @class */ (function () {\r\n function Set() {\r\n this.set = Object.create(null);\r\n }\r\n Set.prototype.has = function (key) {\r\n return this.set[key] === true;\r\n };\r\n Set.prototype.add = function (key) {\r\n this.set[key] = true;\r\n };\r\n Set.prototype.clear = function () {\r\n this.set = Object.create(null);\r\n };\r\n return Set;\r\n }());\r\n}\n\nvar currentInstance = null;\r\n/**\r\n * This is exposed for compatibility with v3 (e.g. some functions in VueUse\r\n * relies on it). Do not use this internally, just use `currentInstance`.\r\n *\r\n * @internal this function needs manual type declaration because it relies\r\n * on previously manually authored types from Vue 2\r\n */\r\nfunction getCurrentInstance() {\r\n return currentInstance && { proxy: currentInstance };\r\n}\r\n/**\r\n * @internal\r\n */\r\nfunction setCurrentInstance(vm) {\r\n if (vm === void 0) { vm = null; }\r\n if (!vm)\r\n currentInstance && currentInstance._scope.off();\r\n currentInstance = vm;\r\n vm && vm._scope.on();\r\n}\n\n/**\r\n * @internal\r\n */\r\nvar VNode = /** @class */ (function () {\r\n function VNode(tag, data, children, text, elm, context, componentOptions, asyncFactory) {\r\n this.tag = tag;\r\n this.data = data;\r\n this.children = children;\r\n this.text = text;\r\n this.elm = elm;\r\n this.ns = undefined;\r\n this.context = context;\r\n this.fnContext = undefined;\r\n this.fnOptions = undefined;\r\n this.fnScopeId = undefined;\r\n this.key = data && data.key;\r\n this.componentOptions = componentOptions;\r\n this.componentInstance = undefined;\r\n this.parent = undefined;\r\n this.raw = false;\r\n this.isStatic = false;\r\n this.isRootInsert = true;\r\n this.isComment = false;\r\n this.isCloned = false;\r\n this.isOnce = false;\r\n this.asyncFactory = asyncFactory;\r\n this.asyncMeta = undefined;\r\n this.isAsyncPlaceholder = false;\r\n }\r\n Object.defineProperty(VNode.prototype, \"child\", {\r\n // DEPRECATED: alias for componentInstance for backwards compat.\r\n /* istanbul ignore next */\r\n get: function () {\r\n return this.componentInstance;\r\n },\r\n enumerable: false,\r\n configurable: true\r\n });\r\n return VNode;\r\n}());\r\nvar createEmptyVNode = function (text) {\r\n if (text === void 0) { text = ''; }\r\n var node = new VNode();\r\n node.text = text;\r\n node.isComment = true;\r\n return node;\r\n};\r\nfunction createTextVNode(val) {\r\n return new VNode(undefined, undefined, undefined, String(val));\r\n}\r\n// optimized shallow clone\r\n// used for static nodes and slot nodes because they may be reused across\r\n// multiple renders, cloning them avoids errors when DOM manipulations rely\r\n// on their elm reference.\r\nfunction cloneVNode(vnode) {\r\n var cloned = new VNode(vnode.tag, vnode.data, \r\n // #7975\r\n // clone children array to avoid mutating original in case of cloning\r\n // a child.\r\n vnode.children && vnode.children.slice(), vnode.text, vnode.elm, vnode.context, vnode.componentOptions, vnode.asyncFactory);\r\n cloned.ns = vnode.ns;\r\n cloned.isStatic = vnode.isStatic;\r\n cloned.key = vnode.key;\r\n cloned.isComment = vnode.isComment;\r\n cloned.fnContext = vnode.fnContext;\r\n cloned.fnOptions = vnode.fnOptions;\r\n cloned.fnScopeId = vnode.fnScopeId;\r\n cloned.asyncMeta = vnode.asyncMeta;\r\n cloned.isCloned = true;\r\n return cloned;\r\n}\n\n/* not type checking this file because flow doesn't play well with Proxy */\r\nvar initProxy;\r\nif (true) {\r\n var allowedGlobals_1 = makeMap('Infinity,undefined,NaN,isFinite,isNaN,' +\r\n 'parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,' +\r\n 'Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt,' +\r\n 'require' // for Webpack/Browserify\r\n );\r\n var warnNonPresent_1 = function (target, key) {\r\n warn$2(\"Property or method \\\"\".concat(key, \"\\\" is not defined on the instance but \") +\r\n 'referenced during render. Make sure that this property is reactive, ' +\r\n 'either in the data option, or for class-based components, by ' +\r\n 'initializing the property. ' +\r\n 'See: https://v2.vuejs.org/v2/guide/reactivity.html#Declaring-Reactive-Properties.', target);\r\n };\r\n var warnReservedPrefix_1 = function (target, key) {\r\n warn$2(\"Property \\\"\".concat(key, \"\\\" must be accessed with \\\"$data.\").concat(key, \"\\\" because \") +\r\n 'properties starting with \"$\" or \"_\" are not proxied in the Vue instance to ' +\r\n 'prevent conflicts with Vue internals. ' +\r\n 'See: https://v2.vuejs.org/v2/api/#data', target);\r\n };\r\n var hasProxy_1 = typeof Proxy !== 'undefined' && isNative(Proxy);\r\n if (hasProxy_1) {\r\n var isBuiltInModifier_1 = makeMap('stop,prevent,self,ctrl,shift,alt,meta,exact');\r\n config.keyCodes = new Proxy(config.keyCodes, {\r\n set: function (target, key, value) {\r\n if (isBuiltInModifier_1(key)) {\r\n warn$2(\"Avoid overwriting built-in modifier in config.keyCodes: .\".concat(key));\r\n return false;\r\n }\r\n else {\r\n target[key] = value;\r\n return true;\r\n }\r\n }\r\n });\r\n }\r\n var hasHandler_1 = {\r\n has: function (target, key) {\r\n var has = key in target;\r\n var isAllowed = allowedGlobals_1(key) ||\r\n (typeof key === 'string' &&\r\n key.charAt(0) === '_' &&\r\n !(key in target.$data));\r\n if (!has && !isAllowed) {\r\n if (key in target.$data)\r\n warnReservedPrefix_1(target, key);\r\n else\r\n warnNonPresent_1(target, key);\r\n }\r\n return has || !isAllowed;\r\n }\r\n };\r\n var getHandler_1 = {\r\n get: function (target, key) {\r\n if (typeof key === 'string' && !(key in target)) {\r\n if (key in target.$data)\r\n warnReservedPrefix_1(target, key);\r\n else\r\n warnNonPresent_1(target, key);\r\n }\r\n return target[key];\r\n }\r\n };\r\n initProxy = function initProxy(vm) {\r\n if (hasProxy_1) {\r\n // determine which proxy handler to use\r\n var options = vm.$options;\r\n var handlers = options.render && options.render._withStripped ? getHandler_1 : hasHandler_1;\r\n vm._renderProxy = new Proxy(vm, handlers);\r\n }\r\n else {\r\n vm._renderProxy = vm;\r\n }\r\n };\r\n}\n\n/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n\r\nvar __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n};\n\nvar uid$2 = 0;\r\n/**\r\n * A dep is an observable that can have multiple\r\n * directives subscribing to it.\r\n * @internal\r\n */\r\nvar Dep = /** @class */ (function () {\r\n function Dep() {\r\n this.id = uid$2++;\r\n this.subs = [];\r\n }\r\n Dep.prototype.addSub = function (sub) {\r\n this.subs.push(sub);\r\n };\r\n Dep.prototype.removeSub = function (sub) {\r\n remove$2(this.subs, sub);\r\n };\r\n Dep.prototype.depend = function (info) {\r\n if (Dep.target) {\r\n Dep.target.addDep(this);\r\n if ( true && info && Dep.target.onTrack) {\r\n Dep.target.onTrack(__assign({ effect: Dep.target }, info));\r\n }\r\n }\r\n };\r\n Dep.prototype.notify = function (info) {\r\n // stabilize the subscriber list first\r\n var subs = this.subs.slice();\r\n if ( true && !config.async) {\r\n // subs aren't sorted in scheduler if not running async\r\n // we need to sort them now to make sure they fire in correct\r\n // order\r\n subs.sort(function (a, b) { return a.id - b.id; });\r\n }\r\n for (var i = 0, l = subs.length; i < l; i++) {\r\n if ( true && info) {\r\n var sub = subs[i];\r\n sub.onTrigger &&\r\n sub.onTrigger(__assign({ effect: subs[i] }, info));\r\n }\r\n subs[i].update();\r\n }\r\n };\r\n return Dep;\r\n}());\r\n// The current target watcher being evaluated.\r\n// This is globally unique because only one watcher\r\n// can be evaluated at a time.\r\nDep.target = null;\r\nvar targetStack = [];\r\nfunction pushTarget(target) {\r\n targetStack.push(target);\r\n Dep.target = target;\r\n}\r\nfunction popTarget() {\r\n targetStack.pop();\r\n Dep.target = targetStack[targetStack.length - 1];\r\n}\n\n/*\r\n * not type checking this file because flow doesn't play well with\r\n * dynamically accessing methods on Array prototype\r\n */\r\nvar arrayProto = Array.prototype;\r\nvar arrayMethods = Object.create(arrayProto);\r\nvar methodsToPatch = [\r\n 'push',\r\n 'pop',\r\n 'shift',\r\n 'unshift',\r\n 'splice',\r\n 'sort',\r\n 'reverse'\r\n];\r\n/**\r\n * Intercept mutating methods and emit events\r\n */\r\nmethodsToPatch.forEach(function (method) {\r\n // cache original method\r\n var original = arrayProto[method];\r\n def(arrayMethods, method, function mutator() {\r\n var args = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n args[_i] = arguments[_i];\r\n }\r\n var result = original.apply(this, args);\r\n var ob = this.__ob__;\r\n var inserted;\r\n switch (method) {\r\n case 'push':\r\n case 'unshift':\r\n inserted = args;\r\n break;\r\n case 'splice':\r\n inserted = args.slice(2);\r\n break;\r\n }\r\n if (inserted)\r\n ob.observeArray(inserted);\r\n // notify change\r\n if (true) {\r\n ob.dep.notify({\r\n type: \"array mutation\" /* TriggerOpTypes.ARRAY_MUTATION */,\r\n target: this,\r\n key: method\r\n });\r\n }\r\n else {}\r\n return result;\r\n });\r\n});\n\nvar arrayKeys = Object.getOwnPropertyNames(arrayMethods);\r\nvar NO_INIITIAL_VALUE = {};\r\n/**\r\n * In some cases we may want to disable observation inside a component's\r\n * update computation.\r\n */\r\nvar shouldObserve = true;\r\nfunction toggleObserving(value) {\r\n shouldObserve = value;\r\n}\r\n// ssr mock dep\r\nvar mockDep = {\r\n notify: noop,\r\n depend: noop,\r\n addSub: noop,\r\n removeSub: noop\r\n};\r\n/**\r\n * Observer class that is attached to each observed\r\n * object. Once attached, the observer converts the target\r\n * object's property keys into getter/setters that\r\n * collect dependencies and dispatch updates.\r\n */\r\nvar Observer = /** @class */ (function () {\r\n function Observer(value, shallow, mock) {\r\n if (shallow === void 0) { shallow = false; }\r\n if (mock === void 0) { mock = false; }\r\n this.value = value;\r\n this.shallow = shallow;\r\n this.mock = mock;\r\n // this.value = value\r\n this.dep = mock ? mockDep : new Dep();\r\n this.vmCount = 0;\r\n def(value, '__ob__', this);\r\n if (isArray(value)) {\r\n if (!mock) {\r\n if (hasProto) {\r\n value.__proto__ = arrayMethods;\r\n /* eslint-enable no-proto */\r\n }\r\n else {\r\n for (var i = 0, l = arrayKeys.length; i < l; i++) {\r\n var key = arrayKeys[i];\r\n def(value, key, arrayMethods[key]);\r\n }\r\n }\r\n }\r\n if (!shallow) {\r\n this.observeArray(value);\r\n }\r\n }\r\n else {\r\n /**\r\n * Walk through all properties and convert them into\r\n * getter/setters. This method should only be called when\r\n * value type is Object.\r\n */\r\n var keys = Object.keys(value);\r\n for (var i = 0; i < keys.length; i++) {\r\n var key = keys[i];\r\n defineReactive(value, key, NO_INIITIAL_VALUE, undefined, shallow, mock);\r\n }\r\n }\r\n }\r\n /**\r\n * Observe a list of Array items.\r\n */\r\n Observer.prototype.observeArray = function (value) {\r\n for (var i = 0, l = value.length; i < l; i++) {\r\n observe(value[i], false, this.mock);\r\n }\r\n };\r\n return Observer;\r\n}());\r\n// helpers\r\n/**\r\n * Attempt to create an observer instance for a value,\r\n * returns the new observer if successfully observed,\r\n * or the existing observer if the value already has one.\r\n */\r\nfunction observe(value, shallow, ssrMockReactivity) {\r\n if (!isObject(value) || isRef(value) || value instanceof VNode) {\r\n return;\r\n }\r\n var ob;\r\n if (hasOwn(value, '__ob__') && value.__ob__ instanceof Observer) {\r\n ob = value.__ob__;\r\n }\r\n else if (shouldObserve &&\r\n (ssrMockReactivity || !isServerRendering()) &&\r\n (isArray(value) || isPlainObject(value)) &&\r\n Object.isExtensible(value) &&\r\n !value.__v_skip /* ReactiveFlags.SKIP */) {\r\n ob = new Observer(value, shallow, ssrMockReactivity);\r\n }\r\n return ob;\r\n}\r\n/**\r\n * Define a reactive property on an Object.\r\n */\r\nfunction defineReactive(obj, key, val, customSetter, shallow, mock) {\r\n var dep = new Dep();\r\n var property = Object.getOwnPropertyDescriptor(obj, key);\r\n if (property && property.configurable === false) {\r\n return;\r\n }\r\n // cater for pre-defined getter/setters\r\n var getter = property && property.get;\r\n var setter = property && property.set;\r\n if ((!getter || setter) &&\r\n (val === NO_INIITIAL_VALUE || arguments.length === 2)) {\r\n val = obj[key];\r\n }\r\n var childOb = !shallow && observe(val, false, mock);\r\n Object.defineProperty(obj, key, {\r\n enumerable: true,\r\n configurable: true,\r\n get: function reactiveGetter() {\r\n var value = getter ? getter.call(obj) : val;\r\n if (Dep.target) {\r\n if (true) {\r\n dep.depend({\r\n target: obj,\r\n type: \"get\" /* TrackOpTypes.GET */,\r\n key: key\r\n });\r\n }\r\n else {}\r\n if (childOb) {\r\n childOb.dep.depend();\r\n if (isArray(value)) {\r\n dependArray(value);\r\n }\r\n }\r\n }\r\n return isRef(value) && !shallow ? value.value : value;\r\n },\r\n set: function reactiveSetter(newVal) {\r\n var value = getter ? getter.call(obj) : val;\r\n if (!hasChanged(value, newVal)) {\r\n return;\r\n }\r\n if ( true && customSetter) {\r\n customSetter();\r\n }\r\n if (setter) {\r\n setter.call(obj, newVal);\r\n }\r\n else if (getter) {\r\n // #7981: for accessor properties without setter\r\n return;\r\n }\r\n else if (!shallow && isRef(value) && !isRef(newVal)) {\r\n value.value = newVal;\r\n return;\r\n }\r\n else {\r\n val = newVal;\r\n }\r\n childOb = !shallow && observe(newVal, false, mock);\r\n if (true) {\r\n dep.notify({\r\n type: \"set\" /* TriggerOpTypes.SET */,\r\n target: obj,\r\n key: key,\r\n newValue: newVal,\r\n oldValue: value\r\n });\r\n }\r\n else {}\r\n }\r\n });\r\n return dep;\r\n}\r\nfunction set(target, key, val) {\r\n if ( true && (isUndef(target) || isPrimitive(target))) {\r\n warn$2(\"Cannot set reactive property on undefined, null, or primitive value: \".concat(target));\r\n }\r\n if (isReadonly(target)) {\r\n true && warn$2(\"Set operation on key \\\"\".concat(key, \"\\\" failed: target is readonly.\"));\r\n return;\r\n }\r\n var ob = target.__ob__;\r\n if (isArray(target) && isValidArrayIndex(key)) {\r\n target.length = Math.max(target.length, key);\r\n target.splice(key, 1, val);\r\n // when mocking for SSR, array methods are not hijacked\r\n if (ob && !ob.shallow && ob.mock) {\r\n observe(val, false, true);\r\n }\r\n return val;\r\n }\r\n if (key in target && !(key in Object.prototype)) {\r\n target[key] = val;\r\n return val;\r\n }\r\n if (target._isVue || (ob && ob.vmCount)) {\r\n true &&\r\n warn$2('Avoid adding reactive properties to a Vue instance or its root $data ' +\r\n 'at runtime - declare it upfront in the data option.');\r\n return val;\r\n }\r\n if (!ob) {\r\n target[key] = val;\r\n return val;\r\n }\r\n defineReactive(ob.value, key, val, undefined, ob.shallow, ob.mock);\r\n if (true) {\r\n ob.dep.notify({\r\n type: \"add\" /* TriggerOpTypes.ADD */,\r\n target: target,\r\n key: key,\r\n newValue: val,\r\n oldValue: undefined\r\n });\r\n }\r\n else {}\r\n return val;\r\n}\r\nfunction del(target, key) {\r\n if ( true && (isUndef(target) || isPrimitive(target))) {\r\n warn$2(\"Cannot delete reactive property on undefined, null, or primitive value: \".concat(target));\r\n }\r\n if (isArray(target) && isValidArrayIndex(key)) {\r\n target.splice(key, 1);\r\n return;\r\n }\r\n var ob = target.__ob__;\r\n if (target._isVue || (ob && ob.vmCount)) {\r\n true &&\r\n warn$2('Avoid deleting properties on a Vue instance or its root $data ' +\r\n '- just set it to null.');\r\n return;\r\n }\r\n if (isReadonly(target)) {\r\n true &&\r\n warn$2(\"Delete operation on key \\\"\".concat(key, \"\\\" failed: target is readonly.\"));\r\n return;\r\n }\r\n if (!hasOwn(target, key)) {\r\n return;\r\n }\r\n delete target[key];\r\n if (!ob) {\r\n return;\r\n }\r\n if (true) {\r\n ob.dep.notify({\r\n type: \"delete\" /* TriggerOpTypes.DELETE */,\r\n target: target,\r\n key: key\r\n });\r\n }\r\n else {}\r\n}\r\n/**\r\n * Collect dependencies on array elements when the array is touched, since\r\n * we cannot intercept array element access like property getters.\r\n */\r\nfunction dependArray(value) {\r\n for (var e = void 0, i = 0, l = value.length; i < l; i++) {\r\n e = value[i];\r\n if (e && e.__ob__) {\r\n e.__ob__.dep.depend();\r\n }\r\n if (isArray(e)) {\r\n dependArray(e);\r\n }\r\n }\r\n}\n\nfunction reactive(target) {\r\n makeReactive(target, false);\r\n return target;\r\n}\r\n/**\r\n * Return a shallowly-reactive copy of the original object, where only the root\r\n * level properties are reactive. It also does not auto-unwrap refs (even at the\r\n * root level).\r\n */\r\nfunction shallowReactive(target) {\r\n makeReactive(target, true);\r\n def(target, \"__v_isShallow\" /* ReactiveFlags.IS_SHALLOW */, true);\r\n return target;\r\n}\r\nfunction makeReactive(target, shallow) {\r\n // if trying to observe a readonly proxy, return the readonly version.\r\n if (!isReadonly(target)) {\r\n if (true) {\r\n if (isArray(target)) {\r\n warn$2(\"Avoid using Array as root value for \".concat(shallow ? \"shallowReactive()\" : \"reactive()\", \" as it cannot be tracked in watch() or watchEffect(). Use \").concat(shallow ? \"shallowRef()\" : \"ref()\", \" instead. This is a Vue-2-only limitation.\"));\r\n }\r\n var existingOb = target && target.__ob__;\r\n if (existingOb && existingOb.shallow !== shallow) {\r\n warn$2(\"Target is already a \".concat(existingOb.shallow ? \"\" : \"non-\", \"shallow reactive object, and cannot be converted to \").concat(shallow ? \"\" : \"non-\", \"shallow.\"));\r\n }\r\n }\r\n var ob = observe(target, shallow, isServerRendering() /* ssr mock reactivity */);\r\n if ( true && !ob) {\r\n if (target == null || isPrimitive(target)) {\r\n warn$2(\"value cannot be made reactive: \".concat(String(target)));\r\n }\r\n if (isCollectionType(target)) {\r\n warn$2(\"Vue 2 does not support reactive collection types such as Map or Set.\");\r\n }\r\n }\r\n }\r\n}\r\nfunction isReactive(value) {\r\n if (isReadonly(value)) {\r\n return isReactive(value[\"__v_raw\" /* ReactiveFlags.RAW */]);\r\n }\r\n return !!(value && value.__ob__);\r\n}\r\nfunction isShallow(value) {\r\n return !!(value && value.__v_isShallow);\r\n}\r\nfunction isReadonly(value) {\r\n return !!(value && value.__v_isReadonly);\r\n}\r\nfunction isProxy(value) {\r\n return isReactive(value) || isReadonly(value);\r\n}\r\nfunction toRaw(observed) {\r\n var raw = observed && observed[\"__v_raw\" /* ReactiveFlags.RAW */];\r\n return raw ? toRaw(raw) : observed;\r\n}\r\nfunction markRaw(value) {\r\n def(value, \"__v_skip\" /* ReactiveFlags.SKIP */, true);\r\n return value;\r\n}\r\n/**\r\n * @internal\r\n */\r\nfunction isCollectionType(value) {\r\n var type = toRawType(value);\r\n return (type === 'Map' || type === 'WeakMap' || type === 'Set' || type === 'WeakSet');\r\n}\n\n/**\r\n * @internal\r\n */\r\nvar RefFlag = \"__v_isRef\";\r\nfunction isRef(r) {\r\n return !!(r && r.__v_isRef === true);\r\n}\r\nfunction ref$1(value) {\r\n return createRef(value, false);\r\n}\r\nfunction shallowRef(value) {\r\n return createRef(value, true);\r\n}\r\nfunction createRef(rawValue, shallow) {\r\n if (isRef(rawValue)) {\r\n return rawValue;\r\n }\r\n var ref = {};\r\n def(ref, RefFlag, true);\r\n def(ref, \"__v_isShallow\" /* ReactiveFlags.IS_SHALLOW */, shallow);\r\n def(ref, 'dep', defineReactive(ref, 'value', rawValue, null, shallow, isServerRendering()));\r\n return ref;\r\n}\r\nfunction triggerRef(ref) {\r\n if ( true && !ref.dep) {\r\n warn$2(\"received object is not a triggerable ref.\");\r\n }\r\n if (true) {\r\n ref.dep &&\r\n ref.dep.notify({\r\n type: \"set\" /* TriggerOpTypes.SET */,\r\n target: ref,\r\n key: 'value'\r\n });\r\n }\r\n else {}\r\n}\r\nfunction unref(ref) {\r\n return isRef(ref) ? ref.value : ref;\r\n}\r\nfunction proxyRefs(objectWithRefs) {\r\n if (isReactive(objectWithRefs)) {\r\n return objectWithRefs;\r\n }\r\n var proxy = {};\r\n var keys = Object.keys(objectWithRefs);\r\n for (var i = 0; i < keys.length; i++) {\r\n proxyWithRefUnwrap(proxy, objectWithRefs, keys[i]);\r\n }\r\n return proxy;\r\n}\r\nfunction proxyWithRefUnwrap(target, source, key) {\r\n Object.defineProperty(target, key, {\r\n enumerable: true,\r\n configurable: true,\r\n get: function () {\r\n var val = source[key];\r\n if (isRef(val)) {\r\n return val.value;\r\n }\r\n else {\r\n var ob = val && val.__ob__;\r\n if (ob)\r\n ob.dep.depend();\r\n return val;\r\n }\r\n },\r\n set: function (value) {\r\n var oldValue = source[key];\r\n if (isRef(oldValue) && !isRef(value)) {\r\n oldValue.value = value;\r\n }\r\n else {\r\n source[key] = value;\r\n }\r\n }\r\n });\r\n}\r\nfunction customRef(factory) {\r\n var dep = new Dep();\r\n var _a = factory(function () {\r\n if (true) {\r\n dep.depend({\r\n target: ref,\r\n type: \"get\" /* TrackOpTypes.GET */,\r\n key: 'value'\r\n });\r\n }\r\n else {}\r\n }, function () {\r\n if (true) {\r\n dep.notify({\r\n target: ref,\r\n type: \"set\" /* TriggerOpTypes.SET */,\r\n key: 'value'\r\n });\r\n }\r\n else {}\r\n }), get = _a.get, set = _a.set;\r\n var ref = {\r\n get value() {\r\n return get();\r\n },\r\n set value(newVal) {\r\n set(newVal);\r\n }\r\n };\r\n def(ref, RefFlag, true);\r\n return ref;\r\n}\r\nfunction toRefs(object) {\r\n if ( true && !isReactive(object)) {\r\n warn$2(\"toRefs() expects a reactive object but received a plain one.\");\r\n }\r\n var ret = isArray(object) ? new Array(object.length) : {};\r\n for (var key in object) {\r\n ret[key] = toRef(object, key);\r\n }\r\n return ret;\r\n}\r\nfunction toRef(object, key, defaultValue) {\r\n var val = object[key];\r\n if (isRef(val)) {\r\n return val;\r\n }\r\n var ref = {\r\n get value() {\r\n var val = object[key];\r\n return val === undefined ? defaultValue : val;\r\n },\r\n set value(newVal) {\r\n object[key] = newVal;\r\n }\r\n };\r\n def(ref, RefFlag, true);\r\n return ref;\r\n}\n\nvar rawToReadonlyFlag = \"__v_rawToReadonly\";\r\nvar rawToShallowReadonlyFlag = \"__v_rawToShallowReadonly\";\r\nfunction readonly(target) {\r\n return createReadonly(target, false);\r\n}\r\nfunction createReadonly(target, shallow) {\r\n if (!isPlainObject(target)) {\r\n if (true) {\r\n if (isArray(target)) {\r\n warn$2(\"Vue 2 does not support readonly arrays.\");\r\n }\r\n else if (isCollectionType(target)) {\r\n warn$2(\"Vue 2 does not support readonly collection types such as Map or Set.\");\r\n }\r\n else {\r\n warn$2(\"value cannot be made readonly: \".concat(typeof target));\r\n }\r\n }\r\n return target;\r\n }\r\n // already a readonly object\r\n if (isReadonly(target)) {\r\n return target;\r\n }\r\n // already has a readonly proxy\r\n var existingFlag = shallow ? rawToShallowReadonlyFlag : rawToReadonlyFlag;\r\n var existingProxy = target[existingFlag];\r\n if (existingProxy) {\r\n return existingProxy;\r\n }\r\n var proxy = Object.create(Object.getPrototypeOf(target));\r\n def(target, existingFlag, proxy);\r\n def(proxy, \"__v_isReadonly\" /* ReactiveFlags.IS_READONLY */, true);\r\n def(proxy, \"__v_raw\" /* ReactiveFlags.RAW */, target);\r\n if (isRef(target)) {\r\n def(proxy, RefFlag, true);\r\n }\r\n if (shallow || isShallow(target)) {\r\n def(proxy, \"__v_isShallow\" /* ReactiveFlags.IS_SHALLOW */, true);\r\n }\r\n var keys = Object.keys(target);\r\n for (var i = 0; i < keys.length; i++) {\r\n defineReadonlyProperty(proxy, target, keys[i], shallow);\r\n }\r\n return proxy;\r\n}\r\nfunction defineReadonlyProperty(proxy, target, key, shallow) {\r\n Object.defineProperty(proxy, key, {\r\n enumerable: true,\r\n configurable: true,\r\n get: function () {\r\n var val = target[key];\r\n return shallow || !isPlainObject(val) ? val : readonly(val);\r\n },\r\n set: function () {\r\n true &&\r\n warn$2(\"Set operation on key \\\"\".concat(key, \"\\\" failed: target is readonly.\"));\r\n }\r\n });\r\n}\r\n/**\r\n * Returns a reactive-copy of the original object, where only the root level\r\n * properties are readonly, and does NOT unwrap refs nor recursively convert\r\n * returned properties.\r\n * This is used for creating the props proxy object for stateful components.\r\n */\r\nfunction shallowReadonly(target) {\r\n return createReadonly(target, true);\r\n}\n\nfunction computed(getterOrOptions, debugOptions) {\r\n var getter;\r\n var setter;\r\n var onlyGetter = isFunction(getterOrOptions);\r\n if (onlyGetter) {\r\n getter = getterOrOptions;\r\n setter = true\r\n ? function () {\r\n warn$2('Write operation failed: computed value is readonly');\r\n }\r\n : 0;\r\n }\r\n else {\r\n getter = getterOrOptions.get;\r\n setter = getterOrOptions.set;\r\n }\r\n var watcher = isServerRendering()\r\n ? null\r\n : new Watcher(currentInstance, getter, noop, { lazy: true });\r\n if ( true && watcher && debugOptions) {\r\n watcher.onTrack = debugOptions.onTrack;\r\n watcher.onTrigger = debugOptions.onTrigger;\r\n }\r\n var ref = {\r\n // some libs rely on the presence effect for checking computed refs\r\n // from normal refs, but the implementation doesn't matter\r\n effect: watcher,\r\n get value() {\r\n if (watcher) {\r\n if (watcher.dirty) {\r\n watcher.evaluate();\r\n }\r\n if (Dep.target) {\r\n if ( true && Dep.target.onTrack) {\r\n Dep.target.onTrack({\r\n effect: Dep.target,\r\n target: ref,\r\n type: \"get\" /* TrackOpTypes.GET */,\r\n key: 'value'\r\n });\r\n }\r\n watcher.depend();\r\n }\r\n return watcher.value;\r\n }\r\n else {\r\n return getter();\r\n }\r\n },\r\n set value(newVal) {\r\n setter(newVal);\r\n }\r\n };\r\n def(ref, RefFlag, true);\r\n def(ref, \"__v_isReadonly\" /* ReactiveFlags.IS_READONLY */, onlyGetter);\r\n return ref;\r\n}\n\nvar mark;\r\nvar measure;\r\nif (true) {\r\n var perf_1 = inBrowser && window.performance;\r\n /* istanbul ignore if */\r\n if (perf_1 &&\r\n // @ts-ignore\r\n perf_1.mark &&\r\n // @ts-ignore\r\n perf_1.measure &&\r\n // @ts-ignore\r\n perf_1.clearMarks &&\r\n // @ts-ignore\r\n perf_1.clearMeasures) {\r\n mark = function (tag) { return perf_1.mark(tag); };\r\n measure = function (name, startTag, endTag) {\r\n perf_1.measure(name, startTag, endTag);\r\n perf_1.clearMarks(startTag);\r\n perf_1.clearMarks(endTag);\r\n // perf.clearMeasures(name)\r\n };\r\n }\r\n}\n\nvar normalizeEvent = cached(function (name) {\r\n var passive = name.charAt(0) === '&';\r\n name = passive ? name.slice(1) : name;\r\n var once = name.charAt(0) === '~'; // Prefixed last, checked first\r\n name = once ? name.slice(1) : name;\r\n var capture = name.charAt(0) === '!';\r\n name = capture ? name.slice(1) : name;\r\n return {\r\n name: name,\r\n once: once,\r\n capture: capture,\r\n passive: passive\r\n };\r\n});\r\nfunction createFnInvoker(fns, vm) {\r\n function invoker() {\r\n var fns = invoker.fns;\r\n if (isArray(fns)) {\r\n var cloned = fns.slice();\r\n for (var i = 0; i < cloned.length; i++) {\r\n invokeWithErrorHandling(cloned[i], null, arguments, vm, \"v-on handler\");\r\n }\r\n }\r\n else {\r\n // return handler return value for single handlers\r\n return invokeWithErrorHandling(fns, null, arguments, vm, \"v-on handler\");\r\n }\r\n }\r\n invoker.fns = fns;\r\n return invoker;\r\n}\r\nfunction updateListeners(on, oldOn, add, remove, createOnceHandler, vm) {\r\n var name, cur, old, event;\r\n for (name in on) {\r\n cur = on[name];\r\n old = oldOn[name];\r\n event = normalizeEvent(name);\r\n if (isUndef(cur)) {\r\n true &&\r\n warn$2(\"Invalid handler for event \\\"\".concat(event.name, \"\\\": got \") + String(cur), vm);\r\n }\r\n else if (isUndef(old)) {\r\n if (isUndef(cur.fns)) {\r\n cur = on[name] = createFnInvoker(cur, vm);\r\n }\r\n if (isTrue(event.once)) {\r\n cur = on[name] = createOnceHandler(event.name, cur, event.capture);\r\n }\r\n add(event.name, cur, event.capture, event.passive, event.params);\r\n }\r\n else if (cur !== old) {\r\n old.fns = cur;\r\n on[name] = old;\r\n }\r\n }\r\n for (name in oldOn) {\r\n if (isUndef(on[name])) {\r\n event = normalizeEvent(name);\r\n remove(event.name, oldOn[name], event.capture);\r\n }\r\n }\r\n}\n\nfunction mergeVNodeHook(def, hookKey, hook) {\r\n if (def instanceof VNode) {\r\n def = def.data.hook || (def.data.hook = {});\r\n }\r\n var invoker;\r\n var oldHook = def[hookKey];\r\n function wrappedHook() {\r\n hook.apply(this, arguments);\r\n // important: remove merged hook to ensure it's called only once\r\n // and prevent memory leak\r\n remove$2(invoker.fns, wrappedHook);\r\n }\r\n if (isUndef(oldHook)) {\r\n // no existing hook\r\n invoker = createFnInvoker([wrappedHook]);\r\n }\r\n else {\r\n /* istanbul ignore if */\r\n if (isDef(oldHook.fns) && isTrue(oldHook.merged)) {\r\n // already a merged invoker\r\n invoker = oldHook;\r\n invoker.fns.push(wrappedHook);\r\n }\r\n else {\r\n // existing plain hook\r\n invoker = createFnInvoker([oldHook, wrappedHook]);\r\n }\r\n }\r\n invoker.merged = true;\r\n def[hookKey] = invoker;\r\n}\n\nfunction extractPropsFromVNodeData(data, Ctor, tag) {\r\n // we are only extracting raw values here.\r\n // validation and default values are handled in the child\r\n // component itself.\r\n var propOptions = Ctor.options.props;\r\n if (isUndef(propOptions)) {\r\n return;\r\n }\r\n var res = {};\r\n var attrs = data.attrs, props = data.props;\r\n if (isDef(attrs) || isDef(props)) {\r\n for (var key in propOptions) {\r\n var altKey = hyphenate(key);\r\n if (true) {\r\n var keyInLowerCase = key.toLowerCase();\r\n if (key !== keyInLowerCase && attrs && hasOwn(attrs, keyInLowerCase)) {\r\n tip(\"Prop \\\"\".concat(keyInLowerCase, \"\\\" is passed to component \") +\r\n \"\".concat(formatComponentName(\r\n // @ts-expect-error tag is string\r\n tag || Ctor), \", but the declared prop name is\") +\r\n \" \\\"\".concat(key, \"\\\". \") +\r\n \"Note that HTML attributes are case-insensitive and camelCased \" +\r\n \"props need to use their kebab-case equivalents when using in-DOM \" +\r\n \"templates. You should probably use \\\"\".concat(altKey, \"\\\" instead of \\\"\").concat(key, \"\\\".\"));\r\n }\r\n }\r\n checkProp(res, props, key, altKey, true) ||\r\n checkProp(res, attrs, key, altKey, false);\r\n }\r\n }\r\n return res;\r\n}\r\nfunction checkProp(res, hash, key, altKey, preserve) {\r\n if (isDef(hash)) {\r\n if (hasOwn(hash, key)) {\r\n res[key] = hash[key];\r\n if (!preserve) {\r\n delete hash[key];\r\n }\r\n return true;\r\n }\r\n else if (hasOwn(hash, altKey)) {\r\n res[key] = hash[altKey];\r\n if (!preserve) {\r\n delete hash[altKey];\r\n }\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\n\n// The template compiler attempts to minimize the need for normalization by\r\n// statically analyzing the template at compile time.\r\n//\r\n// For plain HTML markup, normalization can be completely skipped because the\r\n// generated render function is guaranteed to return Array<VNode>. There are\r\n// two cases where extra normalization is needed:\r\n// 1. When the children contains components - because a functional component\r\n// may return an Array instead of a single root. In this case, just a simple\r\n// normalization is needed - if any child is an Array, we flatten the whole\r\n// thing with Array.prototype.concat. It is guaranteed to be only 1-level deep\r\n// because functional components already normalize their own children.\r\nfunction simpleNormalizeChildren(children) {\r\n for (var i = 0; i < children.length; i++) {\r\n if (isArray(children[i])) {\r\n return Array.prototype.concat.apply([], children);\r\n }\r\n }\r\n return children;\r\n}\r\n// 2. When the children contains constructs that always generated nested Arrays,\r\n// e.g. <template>, <slot>, v-for, or when the children is provided by user\r\n// with hand-written render functions / JSX. In such cases a full normalization\r\n// is needed to cater to all possible types of children values.\r\nfunction normalizeChildren(children) {\r\n return isPrimitive(children)\r\n ? [createTextVNode(children)]\r\n : isArray(children)\r\n ? normalizeArrayChildren(children)\r\n : undefined;\r\n}\r\nfunction isTextNode(node) {\r\n return isDef(node) && isDef(node.text) && isFalse(node.isComment);\r\n}\r\nfunction normalizeArrayChildren(children, nestedIndex) {\r\n var res = [];\r\n var i, c, lastIndex, last;\r\n for (i = 0; i < children.length; i++) {\r\n c = children[i];\r\n if (isUndef(c) || typeof c === 'boolean')\r\n continue;\r\n lastIndex = res.length - 1;\r\n last = res[lastIndex];\r\n // nested\r\n if (isArray(c)) {\r\n if (c.length > 0) {\r\n c = normalizeArrayChildren(c, \"\".concat(nestedIndex || '', \"_\").concat(i));\r\n // merge adjacent text nodes\r\n if (isTextNode(c[0]) && isTextNode(last)) {\r\n res[lastIndex] = createTextVNode(last.text + c[0].text);\r\n c.shift();\r\n }\r\n res.push.apply(res, c);\r\n }\r\n }\r\n else if (isPrimitive(c)) {\r\n if (isTextNode(last)) {\r\n // merge adjacent text nodes\r\n // this is necessary for SSR hydration because text nodes are\r\n // essentially merged when rendered to HTML strings\r\n res[lastIndex] = createTextVNode(last.text + c);\r\n }\r\n else if (c !== '') {\r\n // convert primitive to vnode\r\n res.push(createTextVNode(c));\r\n }\r\n }\r\n else {\r\n if (isTextNode(c) && isTextNode(last)) {\r\n // merge adjacent text nodes\r\n res[lastIndex] = createTextVNode(last.text + c.text);\r\n }\r\n else {\r\n // default key for nested array children (likely generated by v-for)\r\n if (isTrue(children._isVList) &&\r\n isDef(c.tag) &&\r\n isUndef(c.key) &&\r\n isDef(nestedIndex)) {\r\n c.key = \"__vlist\".concat(nestedIndex, \"_\").concat(i, \"__\");\r\n }\r\n res.push(c);\r\n }\r\n }\r\n }\r\n return res;\r\n}\n\nvar SIMPLE_NORMALIZE = 1;\r\nvar ALWAYS_NORMALIZE = 2;\r\n// wrapper function for providing a more flexible interface\r\n// without getting yelled at by flow\r\nfunction createElement$1(context, tag, data, children, normalizationType, alwaysNormalize) {\r\n if (isArray(data) || isPrimitive(data)) {\r\n normalizationType = children;\r\n children = data;\r\n data = undefined;\r\n }\r\n if (isTrue(alwaysNormalize)) {\r\n normalizationType = ALWAYS_NORMALIZE;\r\n }\r\n return _createElement(context, tag, data, children, normalizationType);\r\n}\r\nfunction _createElement(context, tag, data, children, normalizationType) {\r\n if (isDef(data) && isDef(data.__ob__)) {\r\n true &&\r\n warn$2(\"Avoid using observed data object as vnode data: \".concat(JSON.stringify(data), \"\\n\") + 'Always create fresh vnode data objects in each render!', context);\r\n return createEmptyVNode();\r\n }\r\n // object syntax in v-bind\r\n if (isDef(data) && isDef(data.is)) {\r\n tag = data.is;\r\n }\r\n if (!tag) {\r\n // in case of component :is set to falsy value\r\n return createEmptyVNode();\r\n }\r\n // warn against non-primitive key\r\n if ( true && isDef(data) && isDef(data.key) && !isPrimitive(data.key)) {\r\n warn$2('Avoid using non-primitive value as key, ' +\r\n 'use string/number value instead.', context);\r\n }\r\n // support single function children as default scoped slot\r\n if (isArray(children) && isFunction(children[0])) {\r\n data = data || {};\r\n data.scopedSlots = { default: children[0] };\r\n children.length = 0;\r\n }\r\n if (normalizationType === ALWAYS_NORMALIZE) {\r\n children = normalizeChildren(children);\r\n }\r\n else if (normalizationType === SIMPLE_NORMALIZE) {\r\n children = simpleNormalizeChildren(children);\r\n }\r\n var vnode, ns;\r\n if (typeof tag === 'string') {\r\n var Ctor = void 0;\r\n ns = (context.$vnode && context.$vnode.ns) || config.getTagNamespace(tag);\r\n if (config.isReservedTag(tag)) {\r\n // platform built-in elements\r\n if ( true &&\r\n isDef(data) &&\r\n isDef(data.nativeOn) &&\r\n data.tag !== 'component') {\r\n warn$2(\"The .native modifier for v-on is only valid on components but it was used on <\".concat(tag, \">.\"), context);\r\n }\r\n vnode = new VNode(config.parsePlatformTagName(tag), data, children, undefined, undefined, context);\r\n }\r\n else if ((!data || !data.pre) &&\r\n isDef((Ctor = resolveAsset(context.$options, 'components', tag)))) {\r\n // component\r\n vnode = createComponent(Ctor, data, context, children, tag);\r\n }\r\n else {\r\n // unknown or unlisted namespaced elements\r\n // check at runtime because it may get assigned a namespace when its\r\n // parent normalizes children\r\n vnode = new VNode(tag, data, children, undefined, undefined, context);\r\n }\r\n }\r\n else {\r\n // direct component options / constructor\r\n vnode = createComponent(tag, data, context, children);\r\n }\r\n if (isArray(vnode)) {\r\n return vnode;\r\n }\r\n else if (isDef(vnode)) {\r\n if (isDef(ns))\r\n applyNS(vnode, ns);\r\n if (isDef(data))\r\n registerDeepBindings(data);\r\n return vnode;\r\n }\r\n else {\r\n return createEmptyVNode();\r\n }\r\n}\r\nfunction applyNS(vnode, ns, force) {\r\n vnode.ns = ns;\r\n if (vnode.tag === 'foreignObject') {\r\n // use default namespace inside foreignObject\r\n ns = undefined;\r\n force = true;\r\n }\r\n if (isDef(vnode.children)) {\r\n for (var i = 0, l = vnode.children.length; i < l; i++) {\r\n var child = vnode.children[i];\r\n if (isDef(child.tag) &&\r\n (isUndef(child.ns) || (isTrue(force) && child.tag !== 'svg'))) {\r\n applyNS(child, ns, force);\r\n }\r\n }\r\n }\r\n}\r\n// ref #5318\r\n// necessary to ensure parent re-render when deep bindings like :style and\r\n// :class are used on slot nodes\r\nfunction registerDeepBindings(data) {\r\n if (isObject(data.style)) {\r\n traverse(data.style);\r\n }\r\n if (isObject(data.class)) {\r\n traverse(data.class);\r\n }\r\n}\n\n/**\r\n * Runtime helper for rendering v-for lists.\r\n */\r\nfunction renderList(val, render) {\r\n var ret = null, i, l, keys, key;\r\n if (isArray(val) || typeof val === 'string') {\r\n ret = new Array(val.length);\r\n for (i = 0, l = val.length; i < l; i++) {\r\n ret[i] = render(val[i], i);\r\n }\r\n }\r\n else if (typeof val === 'number') {\r\n ret = new Array(val);\r\n for (i = 0; i < val; i++) {\r\n ret[i] = render(i + 1, i);\r\n }\r\n }\r\n else if (isObject(val)) {\r\n if (hasSymbol && val[Symbol.iterator]) {\r\n ret = [];\r\n var iterator = val[Symbol.iterator]();\r\n var result = iterator.next();\r\n while (!result.done) {\r\n ret.push(render(result.value, ret.length));\r\n result = iterator.next();\r\n }\r\n }\r\n else {\r\n keys = Object.keys(val);\r\n ret = new Array(keys.length);\r\n for (i = 0, l = keys.length; i < l; i++) {\r\n key = keys[i];\r\n ret[i] = render(val[key], key, i);\r\n }\r\n }\r\n }\r\n if (!isDef(ret)) {\r\n ret = [];\r\n }\r\n ret._isVList = true;\r\n return ret;\r\n}\n\n/**\r\n * Runtime helper for rendering <slot>\r\n */\r\nfunction renderSlot(name, fallbackRender, props, bindObject) {\r\n var scopedSlotFn = this.$scopedSlots[name];\r\n var nodes;\r\n if (scopedSlotFn) {\r\n // scoped slot\r\n props = props || {};\r\n if (bindObject) {\r\n if ( true && !isObject(bindObject)) {\r\n warn$2('slot v-bind without argument expects an Object', this);\r\n }\r\n props = extend(extend({}, bindObject), props);\r\n }\r\n nodes =\r\n scopedSlotFn(props) ||\r\n (isFunction(fallbackRender) ? fallbackRender() : fallbackRender);\r\n }\r\n else {\r\n nodes =\r\n this.$slots[name] ||\r\n (isFunction(fallbackRender) ? fallbackRender() : fallbackRender);\r\n }\r\n var target = props && props.slot;\r\n if (target) {\r\n return this.$createElement('template', { slot: target }, nodes);\r\n }\r\n else {\r\n return nodes;\r\n }\r\n}\n\n/**\r\n * Runtime helper for resolving filters\r\n */\r\nfunction resolveFilter(id) {\r\n return resolveAsset(this.$options, 'filters', id, true) || identity;\r\n}\n\nfunction isKeyNotMatch(expect, actual) {\r\n if (isArray(expect)) {\r\n return expect.indexOf(actual) === -1;\r\n }\r\n else {\r\n return expect !== actual;\r\n }\r\n}\r\n/**\r\n * Runtime helper for checking keyCodes from config.\r\n * exposed as Vue.prototype._k\r\n * passing in eventKeyName as last argument separately for backwards compat\r\n */\r\nfunction checkKeyCodes(eventKeyCode, key, builtInKeyCode, eventKeyName, builtInKeyName) {\r\n var mappedKeyCode = config.keyCodes[key] || builtInKeyCode;\r\n if (builtInKeyName && eventKeyName && !config.keyCodes[key]) {\r\n return isKeyNotMatch(builtInKeyName, eventKeyName);\r\n }\r\n else if (mappedKeyCode) {\r\n return isKeyNotMatch(mappedKeyCode, eventKeyCode);\r\n }\r\n else if (eventKeyName) {\r\n return hyphenate(eventKeyName) !== key;\r\n }\r\n return eventKeyCode === undefined;\r\n}\n\n/**\r\n * Runtime helper for merging v-bind=\"object\" into a VNode's data.\r\n */\r\nfunction bindObjectProps(data, tag, value, asProp, isSync) {\r\n if (value) {\r\n if (!isObject(value)) {\r\n true &&\r\n warn$2('v-bind without argument expects an Object or Array value', this);\r\n }\r\n else {\r\n if (isArray(value)) {\r\n value = toObject(value);\r\n }\r\n var hash = void 0;\r\n var _loop_1 = function (key) {\r\n if (key === 'class' || key === 'style' || isReservedAttribute(key)) {\r\n hash = data;\r\n }\r\n else {\r\n var type = data.attrs && data.attrs.type;\r\n hash =\r\n asProp || config.mustUseProp(tag, type, key)\r\n ? data.domProps || (data.domProps = {})\r\n : data.attrs || (data.attrs = {});\r\n }\r\n var camelizedKey = camelize(key);\r\n var hyphenatedKey = hyphenate(key);\r\n if (!(camelizedKey in hash) && !(hyphenatedKey in hash)) {\r\n hash[key] = value[key];\r\n if (isSync) {\r\n var on = data.on || (data.on = {});\r\n on[\"update:\".concat(key)] = function ($event) {\r\n value[key] = $event;\r\n };\r\n }\r\n }\r\n };\r\n for (var key in value) {\r\n _loop_1(key);\r\n }\r\n }\r\n }\r\n return data;\r\n}\n\n/**\r\n * Runtime helper for rendering static trees.\r\n */\r\nfunction renderStatic(index, isInFor) {\r\n var cached = this._staticTrees || (this._staticTrees = []);\r\n var tree = cached[index];\r\n // if has already-rendered static tree and not inside v-for,\r\n // we can reuse the same tree.\r\n if (tree && !isInFor) {\r\n return tree;\r\n }\r\n // otherwise, render a fresh tree.\r\n tree = cached[index] = this.$options.staticRenderFns[index].call(this._renderProxy, this._c, this // for render fns generated for functional component templates\r\n );\r\n markStatic$1(tree, \"__static__\".concat(index), false);\r\n return tree;\r\n}\r\n/**\r\n * Runtime helper for v-once.\r\n * Effectively it means marking the node as static with a unique key.\r\n */\r\nfunction markOnce(tree, index, key) {\r\n markStatic$1(tree, \"__once__\".concat(index).concat(key ? \"_\".concat(key) : \"\"), true);\r\n return tree;\r\n}\r\nfunction markStatic$1(tree, key, isOnce) {\r\n if (isArray(tree)) {\r\n for (var i = 0; i < tree.length; i++) {\r\n if (tree[i] && typeof tree[i] !== 'string') {\r\n markStaticNode(tree[i], \"\".concat(key, \"_\").concat(i), isOnce);\r\n }\r\n }\r\n }\r\n else {\r\n markStaticNode(tree, key, isOnce);\r\n }\r\n}\r\nfunction markStaticNode(node, key, isOnce) {\r\n node.isStatic = true;\r\n node.key = key;\r\n node.isOnce = isOnce;\r\n}\n\nfunction bindObjectListeners(data, value) {\r\n if (value) {\r\n if (!isPlainObject(value)) {\r\n true && warn$2('v-on without argument expects an Object value', this);\r\n }\r\n else {\r\n var on = (data.on = data.on ? extend({}, data.on) : {});\r\n for (var key in value) {\r\n var existing = on[key];\r\n var ours = value[key];\r\n on[key] = existing ? [].concat(existing, ours) : ours;\r\n }\r\n }\r\n }\r\n return data;\r\n}\n\nfunction resolveScopedSlots(fns, res, \r\n// the following are added in 2.6\r\nhasDynamicKeys, contentHashKey) {\r\n res = res || { $stable: !hasDynamicKeys };\r\n for (var i = 0; i < fns.length; i++) {\r\n var slot = fns[i];\r\n if (isArray(slot)) {\r\n resolveScopedSlots(slot, res, hasDynamicKeys);\r\n }\r\n else if (slot) {\r\n // marker for reverse proxying v-slot without scope on this.$slots\r\n // @ts-expect-error\r\n if (slot.proxy) {\r\n // @ts-expect-error\r\n slot.fn.proxy = true;\r\n }\r\n res[slot.key] = slot.fn;\r\n }\r\n }\r\n if (contentHashKey) {\r\n res.$key = contentHashKey;\r\n }\r\n return res;\r\n}\n\n// helper to process dynamic keys for dynamic arguments in v-bind and v-on.\r\nfunction bindDynamicKeys(baseObj, values) {\r\n for (var i = 0; i < values.length; i += 2) {\r\n var key = values[i];\r\n if (typeof key === 'string' && key) {\r\n baseObj[values[i]] = values[i + 1];\r\n }\r\n else if ( true && key !== '' && key !== null) {\r\n // null is a special value for explicitly removing a binding\r\n warn$2(\"Invalid value for dynamic directive argument (expected string or null): \".concat(key), this);\r\n }\r\n }\r\n return baseObj;\r\n}\r\n// helper to dynamically append modifier runtime markers to event names.\r\n// ensure only append when value is already string, otherwise it will be cast\r\n// to string and cause the type check to miss.\r\nfunction prependModifier(value, symbol) {\r\n return typeof value === 'string' ? symbol + value : value;\r\n}\n\nfunction installRenderHelpers(target) {\r\n target._o = markOnce;\r\n target._n = toNumber;\r\n target._s = toString;\r\n target._l = renderList;\r\n target._t = renderSlot;\r\n target._q = looseEqual;\r\n target._i = looseIndexOf;\r\n target._m = renderStatic;\r\n target._f = resolveFilter;\r\n target._k = checkKeyCodes;\r\n target._b = bindObjectProps;\r\n target._v = createTextVNode;\r\n target._e = createEmptyVNode;\r\n target._u = resolveScopedSlots;\r\n target._g = bindObjectListeners;\r\n target._d = bindDynamicKeys;\r\n target._p = prependModifier;\r\n}\n\n/**\r\n * Runtime helper for resolving raw children VNodes into a slot object.\r\n */\r\nfunction resolveSlots(children, context) {\r\n if (!children || !children.length) {\r\n return {};\r\n }\r\n var slots = {};\r\n for (var i = 0, l = children.length; i < l; i++) {\r\n var child = children[i];\r\n var data = child.data;\r\n // remove slot attribute if the node is resolved as a Vue slot node\r\n if (data && data.attrs && data.attrs.slot) {\r\n delete data.attrs.slot;\r\n }\r\n // named slots should only be respected if the vnode was rendered in the\r\n // same context.\r\n if ((child.context === context || child.fnContext === context) &&\r\n data &&\r\n data.slot != null) {\r\n var name_1 = data.slot;\r\n var slot = slots[name_1] || (slots[name_1] = []);\r\n if (child.tag === 'template') {\r\n slot.push.apply(slot, child.children || []);\r\n }\r\n else {\r\n slot.push(child);\r\n }\r\n }\r\n else {\r\n (slots.default || (slots.default = [])).push(child);\r\n }\r\n }\r\n // ignore slots that contains only whitespace\r\n for (var name_2 in slots) {\r\n if (slots[name_2].every(isWhitespace)) {\r\n delete slots[name_2];\r\n }\r\n }\r\n return slots;\r\n}\r\nfunction isWhitespace(node) {\r\n return (node.isComment && !node.asyncFactory) || node.text === ' ';\r\n}\n\nfunction isAsyncPlaceholder(node) {\r\n // @ts-expect-error not really boolean type\r\n return node.isComment && node.asyncFactory;\r\n}\n\nfunction normalizeScopedSlots(ownerVm, scopedSlots, normalSlots, prevScopedSlots) {\r\n var res;\r\n var hasNormalSlots = Object.keys(normalSlots).length > 0;\r\n var isStable = scopedSlots ? !!scopedSlots.$stable : !hasNormalSlots;\r\n var key = scopedSlots && scopedSlots.$key;\r\n if (!scopedSlots) {\r\n res = {};\r\n }\r\n else if (scopedSlots._normalized) {\r\n // fast path 1: child component re-render only, parent did not change\r\n return scopedSlots._normalized;\r\n }\r\n else if (isStable &&\r\n prevScopedSlots &&\r\n prevScopedSlots !== emptyObject &&\r\n key === prevScopedSlots.$key &&\r\n !hasNormalSlots &&\r\n !prevScopedSlots.$hasNormal) {\r\n // fast path 2: stable scoped slots w/ no normal slots to proxy,\r\n // only need to normalize once\r\n return prevScopedSlots;\r\n }\r\n else {\r\n res = {};\r\n for (var key_1 in scopedSlots) {\r\n if (scopedSlots[key_1] && key_1[0] !== '$') {\r\n res[key_1] = normalizeScopedSlot(ownerVm, normalSlots, key_1, scopedSlots[key_1]);\r\n }\r\n }\r\n }\r\n // expose normal slots on scopedSlots\r\n for (var key_2 in normalSlots) {\r\n if (!(key_2 in res)) {\r\n res[key_2] = proxyNormalSlot(normalSlots, key_2);\r\n }\r\n }\r\n // avoriaz seems to mock a non-extensible $scopedSlots object\r\n // and when that is passed down this would cause an error\r\n if (scopedSlots && Object.isExtensible(scopedSlots)) {\r\n scopedSlots._normalized = res;\r\n }\r\n def(res, '$stable', isStable);\r\n def(res, '$key', key);\r\n def(res, '$hasNormal', hasNormalSlots);\r\n return res;\r\n}\r\nfunction normalizeScopedSlot(vm, normalSlots, key, fn) {\r\n var normalized = function () {\r\n var cur = currentInstance;\r\n setCurrentInstance(vm);\r\n var res = arguments.length ? fn.apply(null, arguments) : fn({});\r\n res =\r\n res && typeof res === 'object' && !isArray(res)\r\n ? [res] // single vnode\r\n : normalizeChildren(res);\r\n var vnode = res && res[0];\r\n setCurrentInstance(cur);\r\n return res &&\r\n (!vnode ||\r\n (res.length === 1 && vnode.isComment && !isAsyncPlaceholder(vnode))) // #9658, #10391\r\n ? undefined\r\n : res;\r\n };\r\n // this is a slot using the new v-slot syntax without scope. although it is\r\n // compiled as a scoped slot, render fn users would expect it to be present\r\n // on this.$slots because the usage is semantically a normal slot.\r\n if (fn.proxy) {\r\n Object.defineProperty(normalSlots, key, {\r\n get: normalized,\r\n enumerable: true,\r\n configurable: true\r\n });\r\n }\r\n return normalized;\r\n}\r\nfunction proxyNormalSlot(slots, key) {\r\n return function () { return slots[key]; };\r\n}\n\nfunction initSetup(vm) {\r\n var options = vm.$options;\r\n var setup = options.setup;\r\n if (setup) {\r\n var ctx = (vm._setupContext = createSetupContext(vm));\r\n setCurrentInstance(vm);\r\n pushTarget();\r\n var setupResult = invokeWithErrorHandling(setup, null, [vm._props || shallowReactive({}), ctx], vm, \"setup\");\r\n popTarget();\r\n setCurrentInstance();\r\n if (isFunction(setupResult)) {\r\n // render function\r\n // @ts-ignore\r\n options.render = setupResult;\r\n }\r\n else if (isObject(setupResult)) {\r\n // bindings\r\n if ( true && setupResult instanceof VNode) {\r\n warn$2(\"setup() should not return VNodes directly - \" +\r\n \"return a render function instead.\");\r\n }\r\n vm._setupState = setupResult;\r\n // __sfc indicates compiled bindings from <script setup>\r\n if (!setupResult.__sfc) {\r\n for (var key in setupResult) {\r\n if (!isReserved(key)) {\r\n proxyWithRefUnwrap(vm, setupResult, key);\r\n }\r\n else if (true) {\r\n warn$2(\"Avoid using variables that start with _ or $ in setup().\");\r\n }\r\n }\r\n }\r\n else {\r\n // exposed for compiled render fn\r\n var proxy = (vm._setupProxy = {});\r\n for (var key in setupResult) {\r\n if (key !== '__sfc') {\r\n proxyWithRefUnwrap(proxy, setupResult, key);\r\n }\r\n }\r\n }\r\n }\r\n else if ( true && setupResult !== undefined) {\r\n warn$2(\"setup() should return an object. Received: \".concat(setupResult === null ? 'null' : typeof setupResult));\r\n }\r\n }\r\n}\r\nfunction createSetupContext(vm) {\r\n var exposeCalled = false;\r\n return {\r\n get attrs() {\r\n if (!vm._attrsProxy) {\r\n var proxy = (vm._attrsProxy = {});\r\n def(proxy, '_v_attr_proxy', true);\r\n syncSetupProxy(proxy, vm.$attrs, emptyObject, vm, '$attrs');\r\n }\r\n return vm._attrsProxy;\r\n },\r\n get listeners() {\r\n if (!vm._listenersProxy) {\r\n var proxy = (vm._listenersProxy = {});\r\n syncSetupProxy(proxy, vm.$listeners, emptyObject, vm, '$listeners');\r\n }\r\n return vm._listenersProxy;\r\n },\r\n get slots() {\r\n return initSlotsProxy(vm);\r\n },\r\n emit: bind$1(vm.$emit, vm),\r\n expose: function (exposed) {\r\n if (true) {\r\n if (exposeCalled) {\r\n warn$2(\"expose() should be called only once per setup().\", vm);\r\n }\r\n exposeCalled = true;\r\n }\r\n if (exposed) {\r\n Object.keys(exposed).forEach(function (key) {\r\n return proxyWithRefUnwrap(vm, exposed, key);\r\n });\r\n }\r\n }\r\n };\r\n}\r\nfunction syncSetupProxy(to, from, prev, instance, type) {\r\n var changed = false;\r\n for (var key in from) {\r\n if (!(key in to)) {\r\n changed = true;\r\n defineProxyAttr(to, key, instance, type);\r\n }\r\n else if (from[key] !== prev[key]) {\r\n changed = true;\r\n }\r\n }\r\n for (var key in to) {\r\n if (!(key in from)) {\r\n changed = true;\r\n delete to[key];\r\n }\r\n }\r\n return changed;\r\n}\r\nfunction defineProxyAttr(proxy, key, instance, type) {\r\n Object.defineProperty(proxy, key, {\r\n enumerable: true,\r\n configurable: true,\r\n get: function () {\r\n return instance[type][key];\r\n }\r\n });\r\n}\r\nfunction initSlotsProxy(vm) {\r\n if (!vm._slotsProxy) {\r\n syncSetupSlots((vm._slotsProxy = {}), vm.$scopedSlots);\r\n }\r\n return vm._slotsProxy;\r\n}\r\nfunction syncSetupSlots(to, from) {\r\n for (var key in from) {\r\n to[key] = from[key];\r\n }\r\n for (var key in to) {\r\n if (!(key in from)) {\r\n delete to[key];\r\n }\r\n }\r\n}\r\n/**\r\n * @internal use manual type def because public setup context type relies on\r\n * legacy VNode types\r\n */\r\nfunction useSlots() {\r\n return getContext().slots;\r\n}\r\n/**\r\n * @internal use manual type def because public setup context type relies on\r\n * legacy VNode types\r\n */\r\nfunction useAttrs() {\r\n return getContext().attrs;\r\n}\r\n/**\r\n * Vue 2 only\r\n * @internal use manual type def because public setup context type relies on\r\n * legacy VNode types\r\n */\r\nfunction useListeners() {\r\n return getContext().listeners;\r\n}\r\nfunction getContext() {\r\n if ( true && !currentInstance) {\r\n warn$2(\"useContext() called without active instance.\");\r\n }\r\n var vm = currentInstance;\r\n return vm._setupContext || (vm._setupContext = createSetupContext(vm));\r\n}\r\n/**\r\n * Runtime helper for merging default declarations. Imported by compiled code\r\n * only.\r\n * @internal\r\n */\r\nfunction mergeDefaults(raw, defaults) {\r\n var props = isArray(raw)\r\n ? raw.reduce(function (normalized, p) { return ((normalized[p] = {}), normalized); }, {})\r\n : raw;\r\n for (var key in defaults) {\r\n var opt = props[key];\r\n if (opt) {\r\n if (isArray(opt) || isFunction(opt)) {\r\n props[key] = { type: opt, default: defaults[key] };\r\n }\r\n else {\r\n opt.default = defaults[key];\r\n }\r\n }\r\n else if (opt === null) {\r\n props[key] = { default: defaults[key] };\r\n }\r\n else if (true) {\r\n warn$2(\"props default key \\\"\".concat(key, \"\\\" has no corresponding declaration.\"));\r\n }\r\n }\r\n return props;\r\n}\n\nfunction initRender(vm) {\r\n vm._vnode = null; // the root of the child tree\r\n vm._staticTrees = null; // v-once cached trees\r\n var options = vm.$options;\r\n var parentVnode = (vm.$vnode = options._parentVnode); // the placeholder node in parent tree\r\n var renderContext = parentVnode && parentVnode.context;\r\n vm.$slots = resolveSlots(options._renderChildren, renderContext);\r\n vm.$scopedSlots = parentVnode\r\n ? normalizeScopedSlots(vm.$parent, parentVnode.data.scopedSlots, vm.$slots)\r\n : emptyObject;\r\n // bind the createElement fn to this instance\r\n // so that we get proper render context inside it.\r\n // args order: tag, data, children, normalizationType, alwaysNormalize\r\n // internal version is used by render functions compiled from templates\r\n // @ts-expect-error\r\n vm._c = function (a, b, c, d) { return createElement$1(vm, a, b, c, d, false); };\r\n // normalization is always applied for the public version, used in\r\n // user-written render functions.\r\n // @ts-expect-error\r\n vm.$createElement = function (a, b, c, d) { return createElement$1(vm, a, b, c, d, true); };\r\n // $attrs & $listeners are exposed for easier HOC creation.\r\n // they need to be reactive so that HOCs using them are always updated\r\n var parentData = parentVnode && parentVnode.data;\r\n /* istanbul ignore else */\r\n if (true) {\r\n defineReactive(vm, '$attrs', (parentData && parentData.attrs) || emptyObject, function () {\r\n !isUpdatingChildComponent && warn$2(\"$attrs is readonly.\", vm);\r\n }, true);\r\n defineReactive(vm, '$listeners', options._parentListeners || emptyObject, function () {\r\n !isUpdatingChildComponent && warn$2(\"$listeners is readonly.\", vm);\r\n }, true);\r\n }\r\n else {}\r\n}\r\nvar currentRenderingInstance = null;\r\nfunction renderMixin(Vue) {\r\n // install runtime convenience helpers\r\n installRenderHelpers(Vue.prototype);\r\n Vue.prototype.$nextTick = function (fn) {\r\n return nextTick(fn, this);\r\n };\r\n Vue.prototype._render = function () {\r\n var vm = this;\r\n var _a = vm.$options, render = _a.render, _parentVnode = _a._parentVnode;\r\n if (_parentVnode && vm._isMounted) {\r\n vm.$scopedSlots = normalizeScopedSlots(vm.$parent, _parentVnode.data.scopedSlots, vm.$slots, vm.$scopedSlots);\r\n if (vm._slotsProxy) {\r\n syncSetupSlots(vm._slotsProxy, vm.$scopedSlots);\r\n }\r\n }\r\n // set parent vnode. this allows render functions to have access\r\n // to the data on the placeholder node.\r\n vm.$vnode = _parentVnode;\r\n // render self\r\n var vnode;\r\n try {\r\n // There's no need to maintain a stack because all render fns are called\r\n // separately from one another. Nested component's render fns are called\r\n // when parent component is patched.\r\n setCurrentInstance(vm);\r\n currentRenderingInstance = vm;\r\n vnode = render.call(vm._renderProxy, vm.$createElement);\r\n }\r\n catch (e) {\r\n handleError(e, vm, \"render\");\r\n // return error render result,\r\n // or previous vnode to prevent render error causing blank component\r\n /* istanbul ignore else */\r\n if ( true && vm.$options.renderError) {\r\n try {\r\n vnode = vm.$options.renderError.call(vm._renderProxy, vm.$createElement, e);\r\n }\r\n catch (e) {\r\n handleError(e, vm, \"renderError\");\r\n vnode = vm._vnode;\r\n }\r\n }\r\n else {\r\n vnode = vm._vnode;\r\n }\r\n }\r\n finally {\r\n currentRenderingInstance = null;\r\n setCurrentInstance();\r\n }\r\n // if the returned array contains only a single node, allow it\r\n if (isArray(vnode) && vnode.length === 1) {\r\n vnode = vnode[0];\r\n }\r\n // return empty vnode in case the render function errored out\r\n if (!(vnode instanceof VNode)) {\r\n if ( true && isArray(vnode)) {\r\n warn$2('Multiple root nodes returned from render function. Render function ' +\r\n 'should return a single root node.', vm);\r\n }\r\n vnode = createEmptyVNode();\r\n }\r\n // set parent\r\n vnode.parent = _parentVnode;\r\n return vnode;\r\n };\r\n}\n\nfunction ensureCtor(comp, base) {\r\n if (comp.__esModule || (hasSymbol && comp[Symbol.toStringTag] === 'Module')) {\r\n comp = comp.default;\r\n }\r\n return isObject(comp) ? base.extend(comp) : comp;\r\n}\r\nfunction createAsyncPlaceholder(factory, data, context, children, tag) {\r\n var node = createEmptyVNode();\r\n node.asyncFactory = factory;\r\n node.asyncMeta = { data: data, context: context, children: children, tag: tag };\r\n return node;\r\n}\r\nfunction resolveAsyncComponent(factory, baseCtor) {\r\n if (isTrue(factory.error) && isDef(factory.errorComp)) {\r\n return factory.errorComp;\r\n }\r\n if (isDef(factory.resolved)) {\r\n return factory.resolved;\r\n }\r\n var owner = currentRenderingInstance;\r\n if (owner && isDef(factory.owners) && factory.owners.indexOf(owner) === -1) {\r\n // already pending\r\n factory.owners.push(owner);\r\n }\r\n if (isTrue(factory.loading) && isDef(factory.loadingComp)) {\r\n return factory.loadingComp;\r\n }\r\n if (owner && !isDef(factory.owners)) {\r\n var owners_1 = (factory.owners = [owner]);\r\n var sync_1 = true;\r\n var timerLoading_1 = null;\r\n var timerTimeout_1 = null;\r\n owner.$on('hook:destroyed', function () { return remove$2(owners_1, owner); });\r\n var forceRender_1 = function (renderCompleted) {\r\n for (var i = 0, l = owners_1.length; i < l; i++) {\r\n owners_1[i].$forceUpdate();\r\n }\r\n if (renderCompleted) {\r\n owners_1.length = 0;\r\n if (timerLoading_1 !== null) {\r\n clearTimeout(timerLoading_1);\r\n timerLoading_1 = null;\r\n }\r\n if (timerTimeout_1 !== null) {\r\n clearTimeout(timerTimeout_1);\r\n timerTimeout_1 = null;\r\n }\r\n }\r\n };\r\n var resolve = once(function (res) {\r\n // cache resolved\r\n factory.resolved = ensureCtor(res, baseCtor);\r\n // invoke callbacks only if this is not a synchronous resolve\r\n // (async resolves are shimmed as synchronous during SSR)\r\n if (!sync_1) {\r\n forceRender_1(true);\r\n }\r\n else {\r\n owners_1.length = 0;\r\n }\r\n });\r\n var reject_1 = once(function (reason) {\r\n true &&\r\n warn$2(\"Failed to resolve async component: \".concat(String(factory)) +\r\n (reason ? \"\\nReason: \".concat(reason) : ''));\r\n if (isDef(factory.errorComp)) {\r\n factory.error = true;\r\n forceRender_1(true);\r\n }\r\n });\r\n var res_1 = factory(resolve, reject_1);\r\n if (isObject(res_1)) {\r\n if (isPromise(res_1)) {\r\n // () => Promise\r\n if (isUndef(factory.resolved)) {\r\n res_1.then(resolve, reject_1);\r\n }\r\n }\r\n else if (isPromise(res_1.component)) {\r\n res_1.component.then(resolve, reject_1);\r\n if (isDef(res_1.error)) {\r\n factory.errorComp = ensureCtor(res_1.error, baseCtor);\r\n }\r\n if (isDef(res_1.loading)) {\r\n factory.loadingComp = ensureCtor(res_1.loading, baseCtor);\r\n if (res_1.delay === 0) {\r\n factory.loading = true;\r\n }\r\n else {\r\n // @ts-expect-error NodeJS timeout type\r\n timerLoading_1 = setTimeout(function () {\r\n timerLoading_1 = null;\r\n if (isUndef(factory.resolved) && isUndef(factory.error)) {\r\n factory.loading = true;\r\n forceRender_1(false);\r\n }\r\n }, res_1.delay || 200);\r\n }\r\n }\r\n if (isDef(res_1.timeout)) {\r\n // @ts-expect-error NodeJS timeout type\r\n timerTimeout_1 = setTimeout(function () {\r\n timerTimeout_1 = null;\r\n if (isUndef(factory.resolved)) {\r\n reject_1( true ? \"timeout (\".concat(res_1.timeout, \"ms)\") : 0);\r\n }\r\n }, res_1.timeout);\r\n }\r\n }\r\n }\r\n sync_1 = false;\r\n // return in case resolved synchronously\r\n return factory.loading ? factory.loadingComp : factory.resolved;\r\n }\r\n}\n\nfunction getFirstComponentChild(children) {\r\n if (isArray(children)) {\r\n for (var i = 0; i < children.length; i++) {\r\n var c = children[i];\r\n if (isDef(c) && (isDef(c.componentOptions) || isAsyncPlaceholder(c))) {\r\n return c;\r\n }\r\n }\r\n }\r\n}\n\nfunction initEvents(vm) {\r\n vm._events = Object.create(null);\r\n vm._hasHookEvent = false;\r\n // init parent attached events\r\n var listeners = vm.$options._parentListeners;\r\n if (listeners) {\r\n updateComponentListeners(vm, listeners);\r\n }\r\n}\r\nvar target$1;\r\nfunction add$1(event, fn) {\r\n target$1.$on(event, fn);\r\n}\r\nfunction remove$1(event, fn) {\r\n target$1.$off(event, fn);\r\n}\r\nfunction createOnceHandler$1(event, fn) {\r\n var _target = target$1;\r\n return function onceHandler() {\r\n var res = fn.apply(null, arguments);\r\n if (res !== null) {\r\n _target.$off(event, onceHandler);\r\n }\r\n };\r\n}\r\nfunction updateComponentListeners(vm, listeners, oldListeners) {\r\n target$1 = vm;\r\n updateListeners(listeners, oldListeners || {}, add$1, remove$1, createOnceHandler$1, vm);\r\n target$1 = undefined;\r\n}\r\nfunction eventsMixin(Vue) {\r\n var hookRE = /^hook:/;\r\n Vue.prototype.$on = function (event, fn) {\r\n var vm = this;\r\n if (isArray(event)) {\r\n for (var i = 0, l = event.length; i < l; i++) {\r\n vm.$on(event[i], fn);\r\n }\r\n }\r\n else {\r\n (vm._events[event] || (vm._events[event] = [])).push(fn);\r\n // optimize hook:event cost by using a boolean flag marked at registration\r\n // instead of a hash lookup\r\n if (hookRE.test(event)) {\r\n vm._hasHookEvent = true;\r\n }\r\n }\r\n return vm;\r\n };\r\n Vue.prototype.$once = function (event, fn) {\r\n var vm = this;\r\n function on() {\r\n vm.$off(event, on);\r\n fn.apply(vm, arguments);\r\n }\r\n on.fn = fn;\r\n vm.$on(event, on);\r\n return vm;\r\n };\r\n Vue.prototype.$off = function (event, fn) {\r\n var vm = this;\r\n // all\r\n if (!arguments.length) {\r\n vm._events = Object.create(null);\r\n return vm;\r\n }\r\n // array of events\r\n if (isArray(event)) {\r\n for (var i_1 = 0, l = event.length; i_1 < l; i_1++) {\r\n vm.$off(event[i_1], fn);\r\n }\r\n return vm;\r\n }\r\n // specific event\r\n var cbs = vm._events[event];\r\n if (!cbs) {\r\n return vm;\r\n }\r\n if (!fn) {\r\n vm._events[event] = null;\r\n return vm;\r\n }\r\n // specific handler\r\n var cb;\r\n var i = cbs.length;\r\n while (i--) {\r\n cb = cbs[i];\r\n if (cb === fn || cb.fn === fn) {\r\n cbs.splice(i, 1);\r\n break;\r\n }\r\n }\r\n return vm;\r\n };\r\n Vue.prototype.$emit = function (event) {\r\n var vm = this;\r\n if (true) {\r\n var lowerCaseEvent = event.toLowerCase();\r\n if (lowerCaseEvent !== event && vm._events[lowerCaseEvent]) {\r\n tip(\"Event \\\"\".concat(lowerCaseEvent, \"\\\" is emitted in component \") +\r\n \"\".concat(formatComponentName(vm), \" but the handler is registered for \\\"\").concat(event, \"\\\". \") +\r\n \"Note that HTML attributes are case-insensitive and you cannot use \" +\r\n \"v-on to listen to camelCase events when using in-DOM templates. \" +\r\n \"You should probably use \\\"\".concat(hyphenate(event), \"\\\" instead of \\\"\").concat(event, \"\\\".\"));\r\n }\r\n }\r\n var cbs = vm._events[event];\r\n if (cbs) {\r\n cbs = cbs.length > 1 ? toArray(cbs) : cbs;\r\n var args = toArray(arguments, 1);\r\n var info = \"event handler for \\\"\".concat(event, \"\\\"\");\r\n for (var i = 0, l = cbs.length; i < l; i++) {\r\n invokeWithErrorHandling(cbs[i], vm, args, vm, info);\r\n }\r\n }\r\n return vm;\r\n };\r\n}\n\nvar activeInstance = null;\r\nvar isUpdatingChildComponent = false;\r\nfunction setActiveInstance(vm) {\r\n var prevActiveInstance = activeInstance;\r\n activeInstance = vm;\r\n return function () {\r\n activeInstance = prevActiveInstance;\r\n };\r\n}\r\nfunction initLifecycle(vm) {\r\n var options = vm.$options;\r\n // locate first non-abstract parent\r\n var parent = options.parent;\r\n if (parent && !options.abstract) {\r\n while (parent.$options.abstract && parent.$parent) {\r\n parent = parent.$parent;\r\n }\r\n parent.$children.push(vm);\r\n }\r\n vm.$parent = parent;\r\n vm.$root = parent ? parent.$root : vm;\r\n vm.$children = [];\r\n vm.$refs = {};\r\n vm._provided = parent ? parent._provided : Object.create(null);\r\n vm._watcher = null;\r\n vm._inactive = null;\r\n vm._directInactive = false;\r\n vm._isMounted = false;\r\n vm._isDestroyed = false;\r\n vm._isBeingDestroyed = false;\r\n}\r\nfunction lifecycleMixin(Vue) {\r\n Vue.prototype._update = function (vnode, hydrating) {\r\n var vm = this;\r\n var prevEl = vm.$el;\r\n var prevVnode = vm._vnode;\r\n var restoreActiveInstance = setActiveInstance(vm);\r\n vm._vnode = vnode;\r\n // Vue.prototype.__patch__ is injected in entry points\r\n // based on the rendering backend used.\r\n if (!prevVnode) {\r\n // initial render\r\n vm.$el = vm.__patch__(vm.$el, vnode, hydrating, false /* removeOnly */);\r\n }\r\n else {\r\n // updates\r\n vm.$el = vm.__patch__(prevVnode, vnode);\r\n }\r\n restoreActiveInstance();\r\n // update __vue__ reference\r\n if (prevEl) {\r\n prevEl.__vue__ = null;\r\n }\r\n if (vm.$el) {\r\n vm.$el.__vue__ = vm;\r\n }\r\n // if parent is an HOC, update its $el as well\r\n var wrapper = vm;\r\n while (wrapper &&\r\n wrapper.$vnode &&\r\n wrapper.$parent &&\r\n wrapper.$vnode === wrapper.$parent._vnode) {\r\n wrapper.$parent.$el = wrapper.$el;\r\n wrapper = wrapper.$parent;\r\n }\r\n // updated hook is called by the scheduler to ensure that children are\r\n // updated in a parent's updated hook.\r\n };\r\n Vue.prototype.$forceUpdate = function () {\r\n var vm = this;\r\n if (vm._watcher) {\r\n vm._watcher.update();\r\n }\r\n };\r\n Vue.prototype.$destroy = function () {\r\n var vm = this;\r\n if (vm._isBeingDestroyed) {\r\n return;\r\n }\r\n callHook$1(vm, 'beforeDestroy');\r\n vm._isBeingDestroyed = true;\r\n // remove self from parent\r\n var parent = vm.$parent;\r\n if (parent && !parent._isBeingDestroyed && !vm.$options.abstract) {\r\n remove$2(parent.$children, vm);\r\n }\r\n // teardown scope. this includes both the render watcher and other\r\n // watchers created\r\n vm._scope.stop();\r\n // remove reference from data ob\r\n // frozen object may not have observer.\r\n if (vm._data.__ob__) {\r\n vm._data.__ob__.vmCount--;\r\n }\r\n // call the last hook...\r\n vm._isDestroyed = true;\r\n // invoke destroy hooks on current rendered tree\r\n vm.__patch__(vm._vnode, null);\r\n // fire destroyed hook\r\n callHook$1(vm, 'destroyed');\r\n // turn off all instance listeners.\r\n vm.$off();\r\n // remove __vue__ reference\r\n if (vm.$el) {\r\n vm.$el.__vue__ = null;\r\n }\r\n // release circular reference (#6759)\r\n if (vm.$vnode) {\r\n vm.$vnode.parent = null;\r\n }\r\n };\r\n}\r\nfunction mountComponent(vm, el, hydrating) {\r\n vm.$el = el;\r\n if (!vm.$options.render) {\r\n // @ts-expect-error invalid type\r\n vm.$options.render = createEmptyVNode;\r\n if (true) {\r\n /* istanbul ignore if */\r\n if ((vm.$options.template && vm.$options.template.charAt(0) !== '#') ||\r\n vm.$options.el ||\r\n el) {\r\n warn$2('You are using the runtime-only build of Vue where the template ' +\r\n 'compiler is not available. Either pre-compile the templates into ' +\r\n 'render functions, or use the compiler-included build.', vm);\r\n }\r\n else {\r\n warn$2('Failed to mount component: template or render function not defined.', vm);\r\n }\r\n }\r\n }\r\n callHook$1(vm, 'beforeMount');\r\n var updateComponent;\r\n /* istanbul ignore if */\r\n if ( true && config.performance && mark) {\r\n updateComponent = function () {\r\n var name = vm._name;\r\n var id = vm._uid;\r\n var startTag = \"vue-perf-start:\".concat(id);\r\n var endTag = \"vue-perf-end:\".concat(id);\r\n mark(startTag);\r\n var vnode = vm._render();\r\n mark(endTag);\r\n measure(\"vue \".concat(name, \" render\"), startTag, endTag);\r\n mark(startTag);\r\n vm._update(vnode, hydrating);\r\n mark(endTag);\r\n measure(\"vue \".concat(name, \" patch\"), startTag, endTag);\r\n };\r\n }\r\n else {\r\n updateComponent = function () {\r\n vm._update(vm._render(), hydrating);\r\n };\r\n }\r\n var watcherOptions = {\r\n before: function () {\r\n if (vm._isMounted && !vm._isDestroyed) {\r\n callHook$1(vm, 'beforeUpdate');\r\n }\r\n }\r\n };\r\n if (true) {\r\n watcherOptions.onTrack = function (e) { return callHook$1(vm, 'renderTracked', [e]); };\r\n watcherOptions.onTrigger = function (e) { return callHook$1(vm, 'renderTriggered', [e]); };\r\n }\r\n // we set this to vm._watcher inside the watcher's constructor\r\n // since the watcher's initial patch may call $forceUpdate (e.g. inside child\r\n // component's mounted hook), which relies on vm._watcher being already defined\r\n new Watcher(vm, updateComponent, noop, watcherOptions, true /* isRenderWatcher */);\r\n hydrating = false;\r\n // flush buffer for flush: \"pre\" watchers queued in setup()\r\n var preWatchers = vm._preWatchers;\r\n if (preWatchers) {\r\n for (var i = 0; i < preWatchers.length; i++) {\r\n preWatchers[i].run();\r\n }\r\n }\r\n // manually mounted instance, call mounted on self\r\n // mounted is called for render-created child components in its inserted hook\r\n if (vm.$vnode == null) {\r\n vm._isMounted = true;\r\n callHook$1(vm, 'mounted');\r\n }\r\n return vm;\r\n}\r\nfunction updateChildComponent(vm, propsData, listeners, parentVnode, renderChildren) {\r\n if (true) {\r\n isUpdatingChildComponent = true;\r\n }\r\n // determine whether component has slot children\r\n // we need to do this before overwriting $options._renderChildren.\r\n // check if there are dynamic scopedSlots (hand-written or compiled but with\r\n // dynamic slot names). Static scoped slots compiled from template has the\r\n // \"$stable\" marker.\r\n var newScopedSlots = parentVnode.data.scopedSlots;\r\n var oldScopedSlots = vm.$scopedSlots;\r\n var hasDynamicScopedSlot = !!((newScopedSlots && !newScopedSlots.$stable) ||\r\n (oldScopedSlots !== emptyObject && !oldScopedSlots.$stable) ||\r\n (newScopedSlots && vm.$scopedSlots.$key !== newScopedSlots.$key) ||\r\n (!newScopedSlots && vm.$scopedSlots.$key));\r\n // Any static slot children from the parent may have changed during parent's\r\n // update. Dynamic scoped slots may also have changed. In such cases, a forced\r\n // update is necessary to ensure correctness.\r\n var needsForceUpdate = !!(renderChildren || // has new static slots\r\n vm.$options._renderChildren || // has old static slots\r\n hasDynamicScopedSlot);\r\n var prevVNode = vm.$vnode;\r\n vm.$options._parentVnode = parentVnode;\r\n vm.$vnode = parentVnode; // update vm's placeholder node without re-render\r\n if (vm._vnode) {\r\n // update child tree's parent\r\n vm._vnode.parent = parentVnode;\r\n }\r\n vm.$options._renderChildren = renderChildren;\r\n // update $attrs and $listeners hash\r\n // these are also reactive so they may trigger child update if the child\r\n // used them during render\r\n var attrs = parentVnode.data.attrs || emptyObject;\r\n if (vm._attrsProxy) {\r\n // force update if attrs are accessed and has changed since it may be\r\n // passed to a child component.\r\n if (syncSetupProxy(vm._attrsProxy, attrs, (prevVNode.data && prevVNode.data.attrs) || emptyObject, vm, '$attrs')) {\r\n needsForceUpdate = true;\r\n }\r\n }\r\n vm.$attrs = attrs;\r\n // update listeners\r\n listeners = listeners || emptyObject;\r\n var prevListeners = vm.$options._parentListeners;\r\n if (vm._listenersProxy) {\r\n syncSetupProxy(vm._listenersProxy, listeners, prevListeners || emptyObject, vm, '$listeners');\r\n }\r\n vm.$listeners = vm.$options._parentListeners = listeners;\r\n updateComponentListeners(vm, listeners, prevListeners);\r\n // update props\r\n if (propsData && vm.$options.props) {\r\n toggleObserving(false);\r\n var props = vm._props;\r\n var propKeys = vm.$options._propKeys || [];\r\n for (var i = 0; i < propKeys.length; i++) {\r\n var key = propKeys[i];\r\n var propOptions = vm.$options.props; // wtf flow?\r\n props[key] = validateProp(key, propOptions, propsData, vm);\r\n }\r\n toggleObserving(true);\r\n // keep a copy of raw propsData\r\n vm.$options.propsData = propsData;\r\n }\r\n // resolve slots + force update if has children\r\n if (needsForceUpdate) {\r\n vm.$slots = resolveSlots(renderChildren, parentVnode.context);\r\n vm.$forceUpdate();\r\n }\r\n if (true) {\r\n isUpdatingChildComponent = false;\r\n }\r\n}\r\nfunction isInInactiveTree(vm) {\r\n while (vm && (vm = vm.$parent)) {\r\n if (vm._inactive)\r\n return true;\r\n }\r\n return false;\r\n}\r\nfunction activateChildComponent(vm, direct) {\r\n if (direct) {\r\n vm._directInactive = false;\r\n if (isInInactiveTree(vm)) {\r\n return;\r\n }\r\n }\r\n else if (vm._directInactive) {\r\n return;\r\n }\r\n if (vm._inactive || vm._inactive === null) {\r\n vm._inactive = false;\r\n for (var i = 0; i < vm.$children.length; i++) {\r\n activateChildComponent(vm.$children[i]);\r\n }\r\n callHook$1(vm, 'activated');\r\n }\r\n}\r\nfunction deactivateChildComponent(vm, direct) {\r\n if (direct) {\r\n vm._directInactive = true;\r\n if (isInInactiveTree(vm)) {\r\n return;\r\n }\r\n }\r\n if (!vm._inactive) {\r\n vm._inactive = true;\r\n for (var i = 0; i < vm.$children.length; i++) {\r\n deactivateChildComponent(vm.$children[i]);\r\n }\r\n callHook$1(vm, 'deactivated');\r\n }\r\n}\r\nfunction callHook$1(vm, hook, args, setContext) {\r\n if (setContext === void 0) { setContext = true; }\r\n // #7573 disable dep collection when invoking lifecycle hooks\r\n pushTarget();\r\n var prev = currentInstance;\r\n setContext && setCurrentInstance(vm);\r\n var handlers = vm.$options[hook];\r\n var info = \"\".concat(hook, \" hook\");\r\n if (handlers) {\r\n for (var i = 0, j = handlers.length; i < j; i++) {\r\n invokeWithErrorHandling(handlers[i], vm, args || null, vm, info);\r\n }\r\n }\r\n if (vm._hasHookEvent) {\r\n vm.$emit('hook:' + hook);\r\n }\r\n setContext && setCurrentInstance(prev);\r\n popTarget();\r\n}\n\nvar MAX_UPDATE_COUNT = 100;\r\nvar queue = [];\r\nvar activatedChildren = [];\r\nvar has = {};\r\nvar circular = {};\r\nvar waiting = false;\r\nvar flushing = false;\r\nvar index$1 = 0;\r\n/**\r\n * Reset the scheduler's state.\r\n */\r\nfunction resetSchedulerState() {\r\n index$1 = queue.length = activatedChildren.length = 0;\r\n has = {};\r\n if (true) {\r\n circular = {};\r\n }\r\n waiting = flushing = false;\r\n}\r\n// Async edge case #6566 requires saving the timestamp when event listeners are\r\n// attached. However, calling performance.now() has a perf overhead especially\r\n// if the page has thousands of event listeners. Instead, we take a timestamp\r\n// every time the scheduler flushes and use that for all event listeners\r\n// attached during that flush.\r\nvar currentFlushTimestamp = 0;\r\n// Async edge case fix requires storing an event listener's attach timestamp.\r\nvar getNow = Date.now;\r\n// Determine what event timestamp the browser is using. Annoyingly, the\r\n// timestamp can either be hi-res (relative to page load) or low-res\r\n// (relative to UNIX epoch), so in order to compare time we have to use the\r\n// same timestamp type when saving the flush timestamp.\r\n// All IE versions use low-res event timestamps, and have problematic clock\r\n// implementations (#9632)\r\nif (inBrowser && !isIE) {\r\n var performance_1 = window.performance;\r\n if (performance_1 &&\r\n typeof performance_1.now === 'function' &&\r\n getNow() > document.createEvent('Event').timeStamp) {\r\n // if the event timestamp, although evaluated AFTER the Date.now(), is\r\n // smaller than it, it means the event is using a hi-res timestamp,\r\n // and we need to use the hi-res version for event listener timestamps as\r\n // well.\r\n getNow = function () { return performance_1.now(); };\r\n }\r\n}\r\nvar sortCompareFn = function (a, b) {\r\n if (a.post) {\r\n if (!b.post)\r\n return 1;\r\n }\r\n else if (b.post) {\r\n return -1;\r\n }\r\n return a.id - b.id;\r\n};\r\n/**\r\n * Flush both queues and run the watchers.\r\n */\r\nfunction flushSchedulerQueue() {\r\n currentFlushTimestamp = getNow();\r\n flushing = true;\r\n var watcher, id;\r\n // Sort queue before flush.\r\n // This ensures that:\r\n // 1. Components are updated from parent to child. (because parent is always\r\n // created before the child)\r\n // 2. A component's user watchers are run before its render watcher (because\r\n // user watchers are created before the render watcher)\r\n // 3. If a component is destroyed during a parent component's watcher run,\r\n // its watchers can be skipped.\r\n queue.sort(sortCompareFn);\r\n // do not cache length because more watchers might be pushed\r\n // as we run existing watchers\r\n for (index$1 = 0; index$1 < queue.length; index$1++) {\r\n watcher = queue[index$1];\r\n if (watcher.before) {\r\n watcher.before();\r\n }\r\n id = watcher.id;\r\n has[id] = null;\r\n watcher.run();\r\n // in dev build, check and stop circular updates.\r\n if ( true && has[id] != null) {\r\n circular[id] = (circular[id] || 0) + 1;\r\n if (circular[id] > MAX_UPDATE_COUNT) {\r\n warn$2('You may have an infinite update loop ' +\r\n (watcher.user\r\n ? \"in watcher with expression \\\"\".concat(watcher.expression, \"\\\"\")\r\n : \"in a component render function.\"), watcher.vm);\r\n break;\r\n }\r\n }\r\n }\r\n // keep copies of post queues before resetting state\r\n var activatedQueue = activatedChildren.slice();\r\n var updatedQueue = queue.slice();\r\n resetSchedulerState();\r\n // call component updated and activated hooks\r\n callActivatedHooks(activatedQueue);\r\n callUpdatedHooks(updatedQueue);\r\n // devtool hook\r\n /* istanbul ignore if */\r\n if (devtools && config.devtools) {\r\n devtools.emit('flush');\r\n }\r\n}\r\nfunction callUpdatedHooks(queue) {\r\n var i = queue.length;\r\n while (i--) {\r\n var watcher = queue[i];\r\n var vm = watcher.vm;\r\n if (vm && vm._watcher === watcher && vm._isMounted && !vm._isDestroyed) {\r\n callHook$1(vm, 'updated');\r\n }\r\n }\r\n}\r\n/**\r\n * Queue a kept-alive component that was activated during patch.\r\n * The queue will be processed after the entire tree has been patched.\r\n */\r\nfunction queueActivatedComponent(vm) {\r\n // setting _inactive to false here so that a render function can\r\n // rely on checking whether it's in an inactive tree (e.g. router-view)\r\n vm._inactive = false;\r\n activatedChildren.push(vm);\r\n}\r\nfunction callActivatedHooks(queue) {\r\n for (var i = 0; i < queue.length; i++) {\r\n queue[i]._inactive = true;\r\n activateChildComponent(queue[i], true /* true */);\r\n }\r\n}\r\n/**\r\n * Push a watcher into the watcher queue.\r\n * Jobs with duplicate IDs will be skipped unless it's\r\n * pushed when the queue is being flushed.\r\n */\r\nfunction queueWatcher(watcher) {\r\n var id = watcher.id;\r\n if (has[id] != null) {\r\n return;\r\n }\r\n if (watcher === Dep.target && watcher.noRecurse) {\r\n return;\r\n }\r\n has[id] = true;\r\n if (!flushing) {\r\n queue.push(watcher);\r\n }\r\n else {\r\n // if already flushing, splice the watcher based on its id\r\n // if already past its id, it will be run next immediately.\r\n var i = queue.length - 1;\r\n while (i > index$1 && queue[i].id > watcher.id) {\r\n i--;\r\n }\r\n queue.splice(i + 1, 0, watcher);\r\n }\r\n // queue the flush\r\n if (!waiting) {\r\n waiting = true;\r\n if ( true && !config.async) {\r\n flushSchedulerQueue();\r\n return;\r\n }\r\n nextTick(flushSchedulerQueue);\r\n }\r\n}\n\nvar WATCHER = \"watcher\";\r\nvar WATCHER_CB = \"\".concat(WATCHER, \" callback\");\r\nvar WATCHER_GETTER = \"\".concat(WATCHER, \" getter\");\r\nvar WATCHER_CLEANUP = \"\".concat(WATCHER, \" cleanup\");\r\n// Simple effect.\r\nfunction watchEffect(effect, options) {\r\n return doWatch(effect, null, options);\r\n}\r\nfunction watchPostEffect(effect, options) {\r\n return doWatch(effect, null, ( true\r\n ? __assign(__assign({}, options), { flush: 'post' }) : 0));\r\n}\r\nfunction watchSyncEffect(effect, options) {\r\n return doWatch(effect, null, ( true\r\n ? __assign(__assign({}, options), { flush: 'sync' }) : 0));\r\n}\r\n// initial value for watchers to trigger on undefined initial values\r\nvar INITIAL_WATCHER_VALUE = {};\r\n// implementation\r\nfunction watch(source, cb, options) {\r\n if ( true && typeof cb !== 'function') {\r\n warn$2(\"`watch(fn, options?)` signature has been moved to a separate API. \" +\r\n \"Use `watchEffect(fn, options?)` instead. `watch` now only \" +\r\n \"supports `watch(source, cb, options?) signature.\");\r\n }\r\n return doWatch(source, cb, options);\r\n}\r\nfunction doWatch(source, cb, _a) {\r\n var _b = _a === void 0 ? emptyObject : _a, immediate = _b.immediate, deep = _b.deep, _c = _b.flush, flush = _c === void 0 ? 'pre' : _c, onTrack = _b.onTrack, onTrigger = _b.onTrigger;\r\n if ( true && !cb) {\r\n if (immediate !== undefined) {\r\n warn$2(\"watch() \\\"immediate\\\" option is only respected when using the \" +\r\n \"watch(source, callback, options?) signature.\");\r\n }\r\n if (deep !== undefined) {\r\n warn$2(\"watch() \\\"deep\\\" option is only respected when using the \" +\r\n \"watch(source, callback, options?) signature.\");\r\n }\r\n }\r\n var warnInvalidSource = function (s) {\r\n warn$2(\"Invalid watch source: \".concat(s, \". A watch source can only be a getter/effect \") +\r\n \"function, a ref, a reactive object, or an array of these types.\");\r\n };\r\n var instance = currentInstance;\r\n var call = function (fn, type, args) {\r\n if (args === void 0) { args = null; }\r\n return invokeWithErrorHandling(fn, null, args, instance, type);\r\n };\r\n var getter;\r\n var forceTrigger = false;\r\n var isMultiSource = false;\r\n if (isRef(source)) {\r\n getter = function () { return source.value; };\r\n forceTrigger = isShallow(source);\r\n }\r\n else if (isReactive(source)) {\r\n getter = function () {\r\n source.__ob__.dep.depend();\r\n return source;\r\n };\r\n deep = true;\r\n }\r\n else if (isArray(source)) {\r\n isMultiSource = true;\r\n forceTrigger = source.some(function (s) { return isReactive(s) || isShallow(s); });\r\n getter = function () {\r\n return source.map(function (s) {\r\n if (isRef(s)) {\r\n return s.value;\r\n }\r\n else if (isReactive(s)) {\r\n return traverse(s);\r\n }\r\n else if (isFunction(s)) {\r\n return call(s, WATCHER_GETTER);\r\n }\r\n else {\r\n true && warnInvalidSource(s);\r\n }\r\n });\r\n };\r\n }\r\n else if (isFunction(source)) {\r\n if (cb) {\r\n // getter with cb\r\n getter = function () { return call(source, WATCHER_GETTER); };\r\n }\r\n else {\r\n // no cb -> simple effect\r\n getter = function () {\r\n if (instance && instance._isDestroyed) {\r\n return;\r\n }\r\n if (cleanup) {\r\n cleanup();\r\n }\r\n return call(source, WATCHER, [onCleanup]);\r\n };\r\n }\r\n }\r\n else {\r\n getter = noop;\r\n true && warnInvalidSource(source);\r\n }\r\n if (cb && deep) {\r\n var baseGetter_1 = getter;\r\n getter = function () { return traverse(baseGetter_1()); };\r\n }\r\n var cleanup;\r\n var onCleanup = function (fn) {\r\n cleanup = watcher.onStop = function () {\r\n call(fn, WATCHER_CLEANUP);\r\n };\r\n };\r\n // in SSR there is no need to setup an actual effect, and it should be noop\r\n // unless it's eager\r\n if (isServerRendering()) {\r\n // we will also not call the invalidate callback (+ runner is not set up)\r\n onCleanup = noop;\r\n if (!cb) {\r\n getter();\r\n }\r\n else if (immediate) {\r\n call(cb, WATCHER_CB, [\r\n getter(),\r\n isMultiSource ? [] : undefined,\r\n onCleanup\r\n ]);\r\n }\r\n return noop;\r\n }\r\n var watcher = new Watcher(currentInstance, getter, noop, {\r\n lazy: true\r\n });\r\n watcher.noRecurse = !cb;\r\n var oldValue = isMultiSource ? [] : INITIAL_WATCHER_VALUE;\r\n // overwrite default run\r\n watcher.run = function () {\r\n if (!watcher.active) {\r\n return;\r\n }\r\n if (cb) {\r\n // watch(source, cb)\r\n var newValue = watcher.get();\r\n if (deep ||\r\n forceTrigger ||\r\n (isMultiSource\r\n ? newValue.some(function (v, i) {\r\n return hasChanged(v, oldValue[i]);\r\n })\r\n : hasChanged(newValue, oldValue))) {\r\n // cleanup before running cb again\r\n if (cleanup) {\r\n cleanup();\r\n }\r\n call(cb, WATCHER_CB, [\r\n newValue,\r\n // pass undefined as the old value when it's changed for the first time\r\n oldValue === INITIAL_WATCHER_VALUE ? undefined : oldValue,\r\n onCleanup\r\n ]);\r\n oldValue = newValue;\r\n }\r\n }\r\n else {\r\n // watchEffect\r\n watcher.get();\r\n }\r\n };\r\n if (flush === 'sync') {\r\n watcher.update = watcher.run;\r\n }\r\n else if (flush === 'post') {\r\n watcher.post = true;\r\n watcher.update = function () { return queueWatcher(watcher); };\r\n }\r\n else {\r\n // pre\r\n watcher.update = function () {\r\n if (instance && instance === currentInstance && !instance._isMounted) {\r\n // pre-watcher triggered before\r\n var buffer = instance._preWatchers || (instance._preWatchers = []);\r\n if (buffer.indexOf(watcher) < 0)\r\n buffer.push(watcher);\r\n }\r\n else {\r\n queueWatcher(watcher);\r\n }\r\n };\r\n }\r\n if (true) {\r\n watcher.onTrack = onTrack;\r\n watcher.onTrigger = onTrigger;\r\n }\r\n // initial run\r\n if (cb) {\r\n if (immediate) {\r\n watcher.run();\r\n }\r\n else {\r\n oldValue = watcher.get();\r\n }\r\n }\r\n else if (flush === 'post' && instance) {\r\n instance.$once('hook:mounted', function () { return watcher.get(); });\r\n }\r\n else {\r\n watcher.get();\r\n }\r\n return function () {\r\n watcher.teardown();\r\n };\r\n}\n\nvar activeEffectScope;\r\nvar EffectScope = /** @class */ (function () {\r\n function EffectScope(detached) {\r\n if (detached === void 0) { detached = false; }\r\n /**\r\n * @internal\r\n */\r\n this.active = true;\r\n /**\r\n * @internal\r\n */\r\n this.effects = [];\r\n /**\r\n * @internal\r\n */\r\n this.cleanups = [];\r\n if (!detached && activeEffectScope) {\r\n this.parent = activeEffectScope;\r\n this.index =\r\n (activeEffectScope.scopes || (activeEffectScope.scopes = [])).push(this) - 1;\r\n }\r\n }\r\n EffectScope.prototype.run = function (fn) {\r\n if (this.active) {\r\n var currentEffectScope = activeEffectScope;\r\n try {\r\n activeEffectScope = this;\r\n return fn();\r\n }\r\n finally {\r\n activeEffectScope = currentEffectScope;\r\n }\r\n }\r\n else if (true) {\r\n warn$2(\"cannot run an inactive effect scope.\");\r\n }\r\n };\r\n /**\r\n * This should only be called on non-detached scopes\r\n * @internal\r\n */\r\n EffectScope.prototype.on = function () {\r\n activeEffectScope = this;\r\n };\r\n /**\r\n * This should only be called on non-detached scopes\r\n * @internal\r\n */\r\n EffectScope.prototype.off = function () {\r\n activeEffectScope = this.parent;\r\n };\r\n EffectScope.prototype.stop = function (fromParent) {\r\n if (this.active) {\r\n var i = void 0, l = void 0;\r\n for (i = 0, l = this.effects.length; i < l; i++) {\r\n this.effects[i].teardown();\r\n }\r\n for (i = 0, l = this.cleanups.length; i < l; i++) {\r\n this.cleanups[i]();\r\n }\r\n if (this.scopes) {\r\n for (i = 0, l = this.scopes.length; i < l; i++) {\r\n this.scopes[i].stop(true);\r\n }\r\n }\r\n // nested scope, dereference from parent to avoid memory leaks\r\n if (this.parent && !fromParent) {\r\n // optimized O(1) removal\r\n var last = this.parent.scopes.pop();\r\n if (last && last !== this) {\r\n this.parent.scopes[this.index] = last;\r\n last.index = this.index;\r\n }\r\n }\r\n this.active = false;\r\n }\r\n };\r\n return EffectScope;\r\n}());\r\nfunction effectScope(detached) {\r\n return new EffectScope(detached);\r\n}\r\n/**\r\n * @internal\r\n */\r\nfunction recordEffectScope(effect, scope) {\r\n if (scope === void 0) { scope = activeEffectScope; }\r\n if (scope && scope.active) {\r\n scope.effects.push(effect);\r\n }\r\n}\r\nfunction getCurrentScope() {\r\n return activeEffectScope;\r\n}\r\nfunction onScopeDispose(fn) {\r\n if (activeEffectScope) {\r\n activeEffectScope.cleanups.push(fn);\r\n }\r\n else if (true) {\r\n warn$2(\"onScopeDispose() is called when there is no active effect scope\" +\r\n \" to be associated with.\");\r\n }\r\n}\n\nfunction provide(key, value) {\r\n if (!currentInstance) {\r\n if (true) {\r\n warn$2(\"provide() can only be used inside setup().\");\r\n }\r\n }\r\n else {\r\n // TS doesn't allow symbol as index type\r\n resolveProvided(currentInstance)[key] = value;\r\n }\r\n}\r\nfunction resolveProvided(vm) {\r\n // by default an instance inherits its parent's provides object\r\n // but when it needs to provide values of its own, it creates its\r\n // own provides object using parent provides object as prototype.\r\n // this way in `inject` we can simply look up injections from direct\r\n // parent and let the prototype chain do the work.\r\n var existing = vm._provided;\r\n var parentProvides = vm.$parent && vm.$parent._provided;\r\n if (parentProvides === existing) {\r\n return (vm._provided = Object.create(parentProvides));\r\n }\r\n else {\r\n return existing;\r\n }\r\n}\r\nfunction inject(key, defaultValue, treatDefaultAsFactory) {\r\n if (treatDefaultAsFactory === void 0) { treatDefaultAsFactory = false; }\r\n // fallback to `currentRenderingInstance` so that this can be called in\r\n // a functional component\r\n var instance = currentInstance;\r\n if (instance) {\r\n // #2400\r\n // to support `app.use` plugins,\r\n // fallback to appContext's `provides` if the instance is at root\r\n var provides = instance.$parent && instance.$parent._provided;\r\n if (provides && key in provides) {\r\n // TS doesn't allow symbol as index type\r\n return provides[key];\r\n }\r\n else if (arguments.length > 1) {\r\n return treatDefaultAsFactory && isFunction(defaultValue)\r\n ? defaultValue.call(instance)\r\n : defaultValue;\r\n }\r\n else if (true) {\r\n warn$2(\"injection \\\"\".concat(String(key), \"\\\" not found.\"));\r\n }\r\n }\r\n else if (true) {\r\n warn$2(\"inject() can only be used inside setup() or functional components.\");\r\n }\r\n}\n\n/**\r\n * @internal this function needs manual public type declaration because it relies\r\n * on previously manually authored types from Vue 2\r\n */\r\nfunction h(type, props, children) {\r\n if (!currentInstance) {\r\n true &&\r\n warn$2(\"globally imported h() can only be invoked when there is an active \" +\r\n \"component instance, e.g. synchronously in a component's render or setup function.\");\r\n }\r\n return createElement$1(currentInstance, type, props, children, 2, true);\r\n}\n\nfunction handleError(err, vm, info) {\r\n // Deactivate deps tracking while processing error handler to avoid possible infinite rendering.\r\n // See: https://github.com/vuejs/vuex/issues/1505\r\n pushTarget();\r\n try {\r\n if (vm) {\r\n var cur = vm;\r\n while ((cur = cur.$parent)) {\r\n var hooks = cur.$options.errorCaptured;\r\n if (hooks) {\r\n for (var i = 0; i < hooks.length; i++) {\r\n try {\r\n var capture = hooks[i].call(cur, err, vm, info) === false;\r\n if (capture)\r\n return;\r\n }\r\n catch (e) {\r\n globalHandleError(e, cur, 'errorCaptured hook');\r\n }\r\n }\r\n }\r\n }\r\n }\r\n globalHandleError(err, vm, info);\r\n }\r\n finally {\r\n popTarget();\r\n }\r\n}\r\nfunction invokeWithErrorHandling(handler, context, args, vm, info) {\r\n var res;\r\n try {\r\n res = args ? handler.apply(context, args) : handler.call(context);\r\n if (res && !res._isVue && isPromise(res) && !res._handled) {\r\n res.catch(function (e) { return handleError(e, vm, info + \" (Promise/async)\"); });\r\n res._handled = true;\r\n }\r\n }\r\n catch (e) {\r\n handleError(e, vm, info);\r\n }\r\n return res;\r\n}\r\nfunction globalHandleError(err, vm, info) {\r\n if (config.errorHandler) {\r\n try {\r\n return config.errorHandler.call(null, err, vm, info);\r\n }\r\n catch (e) {\r\n // if the user intentionally throws the original error in the handler,\r\n // do not log it twice\r\n if (e !== err) {\r\n logError(e, null, 'config.errorHandler');\r\n }\r\n }\r\n }\r\n logError(err, vm, info);\r\n}\r\nfunction logError(err, vm, info) {\r\n if (true) {\r\n warn$2(\"Error in \".concat(info, \": \\\"\").concat(err.toString(), \"\\\"\"), vm);\r\n }\r\n /* istanbul ignore else */\r\n if (inBrowser && typeof console !== 'undefined') {\r\n console.error(err);\r\n }\r\n else {\r\n throw err;\r\n }\r\n}\n\n/* globals MutationObserver */\r\nvar isUsingMicroTask = false;\r\nvar callbacks = [];\r\nvar pending = false;\r\nfunction flushCallbacks() {\r\n pending = false;\r\n var copies = callbacks.slice(0);\r\n callbacks.length = 0;\r\n for (var i = 0; i < copies.length; i++) {\r\n copies[i]();\r\n }\r\n}\r\n// Here we have async deferring wrappers using microtasks.\r\n// In 2.5 we used (macro) tasks (in combination with microtasks).\r\n// However, it has subtle problems when state is changed right before repaint\r\n// (e.g. #6813, out-in transitions).\r\n// Also, using (macro) tasks in event handler would cause some weird behaviors\r\n// that cannot be circumvented (e.g. #7109, #7153, #7546, #7834, #8109).\r\n// So we now use microtasks everywhere, again.\r\n// A major drawback of this tradeoff is that there are some scenarios\r\n// where microtasks have too high a priority and fire in between supposedly\r\n// sequential events (e.g. #4521, #6690, which have workarounds)\r\n// or even between bubbling of the same event (#6566).\r\nvar timerFunc;\r\n// The nextTick behavior leverages the microtask queue, which can be accessed\r\n// via either native Promise.then or MutationObserver.\r\n// MutationObserver has wider support, however it is seriously bugged in\r\n// UIWebView in iOS >= 9.3.3 when triggered in touch event handlers. It\r\n// completely stops working after triggering a few times... so, if native\r\n// Promise is available, we will use it:\r\n/* istanbul ignore next, $flow-disable-line */\r\nif (typeof Promise !== 'undefined' && isNative(Promise)) {\r\n var p_1 = Promise.resolve();\r\n timerFunc = function () {\r\n p_1.then(flushCallbacks);\r\n // In problematic UIWebViews, Promise.then doesn't completely break, but\r\n // it can get stuck in a weird state where callbacks are pushed into the\r\n // microtask queue but the queue isn't being flushed, until the browser\r\n // needs to do some other work, e.g. handle a timer. Therefore we can\r\n // \"force\" the microtask queue to be flushed by adding an empty timer.\r\n if (isIOS)\r\n setTimeout(noop);\r\n };\r\n isUsingMicroTask = true;\r\n}\r\nelse if (!isIE &&\r\n typeof MutationObserver !== 'undefined' &&\r\n (isNative(MutationObserver) ||\r\n // PhantomJS and iOS 7.x\r\n MutationObserver.toString() === '[object MutationObserverConstructor]')) {\r\n // Use MutationObserver where native Promise is not available,\r\n // e.g. PhantomJS, iOS7, Android 4.4\r\n // (#6466 MutationObserver is unreliable in IE11)\r\n var counter_1 = 1;\r\n var observer = new MutationObserver(flushCallbacks);\r\n var textNode_1 = document.createTextNode(String(counter_1));\r\n observer.observe(textNode_1, {\r\n characterData: true\r\n });\r\n timerFunc = function () {\r\n counter_1 = (counter_1 + 1) % 2;\r\n textNode_1.data = String(counter_1);\r\n };\r\n isUsingMicroTask = true;\r\n}\r\nelse if (typeof setImmediate !== 'undefined' && isNative(setImmediate)) {\r\n // Fallback to setImmediate.\r\n // Technically it leverages the (macro) task queue,\r\n // but it is still a better choice than setTimeout.\r\n timerFunc = function () {\r\n setImmediate(flushCallbacks);\r\n };\r\n}\r\nelse {\r\n // Fallback to setTimeout.\r\n timerFunc = function () {\r\n setTimeout(flushCallbacks, 0);\r\n };\r\n}\r\n/**\r\n * @internal\r\n */\r\nfunction nextTick(cb, ctx) {\r\n var _resolve;\r\n callbacks.push(function () {\r\n if (cb) {\r\n try {\r\n cb.call(ctx);\r\n }\r\n catch (e) {\r\n handleError(e, ctx, 'nextTick');\r\n }\r\n }\r\n else if (_resolve) {\r\n _resolve(ctx);\r\n }\r\n });\r\n if (!pending) {\r\n pending = true;\r\n timerFunc();\r\n }\r\n // $flow-disable-line\r\n if (!cb && typeof Promise !== 'undefined') {\r\n return new Promise(function (resolve) {\r\n _resolve = resolve;\r\n });\r\n }\r\n}\n\nfunction useCssModule(name) {\r\n if (name === void 0) { name = '$style'; }\r\n /* istanbul ignore else */\r\n {\r\n if (!currentInstance) {\r\n true && warn$2(\"useCssModule must be called inside setup()\");\r\n return emptyObject;\r\n }\r\n var mod = currentInstance[name];\r\n if (!mod) {\r\n true &&\r\n warn$2(\"Current instance does not have CSS module named \\\"\".concat(name, \"\\\".\"));\r\n return emptyObject;\r\n }\r\n return mod;\r\n }\r\n}\n\n/**\r\n * Runtime helper for SFC's CSS variable injection feature.\r\n * @private\r\n */\r\nfunction useCssVars(getter) {\r\n if (!inBrowser && !false)\r\n return;\r\n var instance = currentInstance;\r\n if (!instance) {\r\n true &&\r\n warn$2(\"useCssVars is called without current active component instance.\");\r\n return;\r\n }\r\n watchPostEffect(function () {\r\n var el = instance.$el;\r\n var vars = getter(instance, instance._setupProxy);\r\n if (el && el.nodeType === 1) {\r\n var style = el.style;\r\n for (var key in vars) {\r\n style.setProperty(\"--\".concat(key), vars[key]);\r\n }\r\n }\r\n });\r\n}\n\n/**\r\n * v3-compatible async component API.\r\n * @internal the type is manually declared in <root>/types/v3-define-async-component.d.ts\r\n * because it relies on existing manual types\r\n */\r\nfunction defineAsyncComponent(source) {\r\n if (isFunction(source)) {\r\n source = { loader: source };\r\n }\r\n var loader = source.loader, loadingComponent = source.loadingComponent, errorComponent = source.errorComponent, _a = source.delay, delay = _a === void 0 ? 200 : _a, timeout = source.timeout, // undefined = never times out\r\n _b = source.suspensible, // undefined = never times out\r\n suspensible = _b === void 0 ? false : _b, // in Vue 3 default is true\r\n userOnError = source.onError;\r\n if ( true && suspensible) {\r\n warn$2(\"The suspensiblbe option for async components is not supported in Vue2. It is ignored.\");\r\n }\r\n var pendingRequest = null;\r\n var retries = 0;\r\n var retry = function () {\r\n retries++;\r\n pendingRequest = null;\r\n return load();\r\n };\r\n var load = function () {\r\n var thisRequest;\r\n return (pendingRequest ||\r\n (thisRequest = pendingRequest =\r\n loader()\r\n .catch(function (err) {\r\n err = err instanceof Error ? err : new Error(String(err));\r\n if (userOnError) {\r\n return new Promise(function (resolve, reject) {\r\n var userRetry = function () { return resolve(retry()); };\r\n var userFail = function () { return reject(err); };\r\n userOnError(err, userRetry, userFail, retries + 1);\r\n });\r\n }\r\n else {\r\n throw err;\r\n }\r\n })\r\n .then(function (comp) {\r\n if (thisRequest !== pendingRequest && pendingRequest) {\r\n return pendingRequest;\r\n }\r\n if ( true && !comp) {\r\n warn$2(\"Async component loader resolved to undefined. \" +\r\n \"If you are using retry(), make sure to return its return value.\");\r\n }\r\n // interop module default\r\n if (comp &&\r\n (comp.__esModule || comp[Symbol.toStringTag] === 'Module')) {\r\n comp = comp.default;\r\n }\r\n if ( true && comp && !isObject(comp) && !isFunction(comp)) {\r\n throw new Error(\"Invalid async component load result: \".concat(comp));\r\n }\r\n return comp;\r\n })));\r\n };\r\n return function () {\r\n var component = load();\r\n return {\r\n component: component,\r\n delay: delay,\r\n timeout: timeout,\r\n error: errorComponent,\r\n loading: loadingComponent\r\n };\r\n };\r\n}\n\nfunction createLifeCycle(hookName) {\r\n return function (fn, target) {\r\n if (target === void 0) { target = currentInstance; }\r\n if (!target) {\r\n true &&\r\n warn$2(\"\".concat(formatName(hookName), \" is called when there is no active component instance to be \") +\r\n \"associated with. \" +\r\n \"Lifecycle injection APIs can only be used during execution of setup().\");\r\n return;\r\n }\r\n return injectHook(target, hookName, fn);\r\n };\r\n}\r\nfunction formatName(name) {\r\n if (name === 'beforeDestroy') {\r\n name = 'beforeUnmount';\r\n }\r\n else if (name === 'destroyed') {\r\n name = 'unmounted';\r\n }\r\n return \"on\".concat(name[0].toUpperCase() + name.slice(1));\r\n}\r\nfunction injectHook(instance, hookName, fn) {\r\n var options = instance.$options;\r\n options[hookName] = mergeLifecycleHook(options[hookName], fn);\r\n}\r\nvar onBeforeMount = createLifeCycle('beforeMount');\r\nvar onMounted = createLifeCycle('mounted');\r\nvar onBeforeUpdate = createLifeCycle('beforeUpdate');\r\nvar onUpdated = createLifeCycle('updated');\r\nvar onBeforeUnmount = createLifeCycle('beforeDestroy');\r\nvar onUnmounted = createLifeCycle('destroyed');\r\nvar onActivated = createLifeCycle('activated');\r\nvar onDeactivated = createLifeCycle('deactivated');\r\nvar onServerPrefetch = createLifeCycle('serverPrefetch');\r\nvar onRenderTracked = createLifeCycle('renderTracked');\r\nvar onRenderTriggered = createLifeCycle('renderTriggered');\r\nvar injectErrorCapturedHook = createLifeCycle('errorCaptured');\r\nfunction onErrorCaptured(hook, target) {\r\n if (target === void 0) { target = currentInstance; }\r\n injectErrorCapturedHook(hook, target);\r\n}\n\n/**\r\n * Note: also update dist/vue.runtime.mjs when adding new exports to this file.\r\n */\r\nvar version = '2.7.10';\r\n/**\r\n * @internal type is manually declared in <root>/types/v3-define-component.d.ts\r\n */\r\nfunction defineComponent(options) {\r\n return options;\r\n}\n\nvar seenObjects = new _Set();\r\n/**\r\n * Recursively traverse an object to evoke all converted\r\n * getters, so that every nested property inside the object\r\n * is collected as a \"deep\" dependency.\r\n */\r\nfunction traverse(val) {\r\n _traverse(val, seenObjects);\r\n seenObjects.clear();\r\n return val;\r\n}\r\nfunction _traverse(val, seen) {\r\n var i, keys;\r\n var isA = isArray(val);\r\n if ((!isA && !isObject(val)) ||\r\n Object.isFrozen(val) ||\r\n val instanceof VNode) {\r\n return;\r\n }\r\n if (val.__ob__) {\r\n var depId = val.__ob__.dep.id;\r\n if (seen.has(depId)) {\r\n return;\r\n }\r\n seen.add(depId);\r\n }\r\n if (isA) {\r\n i = val.length;\r\n while (i--)\r\n _traverse(val[i], seen);\r\n }\r\n else if (isRef(val)) {\r\n _traverse(val.value, seen);\r\n }\r\n else {\r\n keys = Object.keys(val);\r\n i = keys.length;\r\n while (i--)\r\n _traverse(val[keys[i]], seen);\r\n }\r\n}\n\nvar uid$1 = 0;\r\n/**\r\n * A watcher parses an expression, collects dependencies,\r\n * and fires callback when the expression value changes.\r\n * This is used for both the $watch() api and directives.\r\n * @internal\r\n */\r\nvar Watcher = /** @class */ (function () {\r\n function Watcher(vm, expOrFn, cb, options, isRenderWatcher) {\r\n recordEffectScope(this, \r\n // if the active effect scope is manually created (not a component scope),\r\n // prioritize it\r\n activeEffectScope && !activeEffectScope._vm\r\n ? activeEffectScope\r\n : vm\r\n ? vm._scope\r\n : undefined);\r\n if ((this.vm = vm) && isRenderWatcher) {\r\n vm._watcher = this;\r\n }\r\n // options\r\n if (options) {\r\n this.deep = !!options.deep;\r\n this.user = !!options.user;\r\n this.lazy = !!options.lazy;\r\n this.sync = !!options.sync;\r\n this.before = options.before;\r\n if (true) {\r\n this.onTrack = options.onTrack;\r\n this.onTrigger = options.onTrigger;\r\n }\r\n }\r\n else {\r\n this.deep = this.user = this.lazy = this.sync = false;\r\n }\r\n this.cb = cb;\r\n this.id = ++uid$1; // uid for batching\r\n this.active = true;\r\n this.post = false;\r\n this.dirty = this.lazy; // for lazy watchers\r\n this.deps = [];\r\n this.newDeps = [];\r\n this.depIds = new _Set();\r\n this.newDepIds = new _Set();\r\n this.expression = true ? expOrFn.toString() : 0;\r\n // parse expression for getter\r\n if (isFunction(expOrFn)) {\r\n this.getter = expOrFn;\r\n }\r\n else {\r\n this.getter = parsePath(expOrFn);\r\n if (!this.getter) {\r\n this.getter = noop;\r\n true &&\r\n warn$2(\"Failed watching path: \\\"\".concat(expOrFn, \"\\\" \") +\r\n 'Watcher only accepts simple dot-delimited paths. ' +\r\n 'For full control, use a function instead.', vm);\r\n }\r\n }\r\n this.value = this.lazy ? undefined : this.get();\r\n }\r\n /**\r\n * Evaluate the getter, and re-collect dependencies.\r\n */\r\n Watcher.prototype.get = function () {\r\n pushTarget(this);\r\n var value;\r\n var vm = this.vm;\r\n try {\r\n value = this.getter.call(vm, vm);\r\n }\r\n catch (e) {\r\n if (this.user) {\r\n handleError(e, vm, \"getter for watcher \\\"\".concat(this.expression, \"\\\"\"));\r\n }\r\n else {\r\n throw e;\r\n }\r\n }\r\n finally {\r\n // \"touch\" every property so they are all tracked as\r\n // dependencies for deep watching\r\n if (this.deep) {\r\n traverse(value);\r\n }\r\n popTarget();\r\n this.cleanupDeps();\r\n }\r\n return value;\r\n };\r\n /**\r\n * Add a dependency to this directive.\r\n */\r\n Watcher.prototype.addDep = function (dep) {\r\n var id = dep.id;\r\n if (!this.newDepIds.has(id)) {\r\n this.newDepIds.add(id);\r\n this.newDeps.push(dep);\r\n if (!this.depIds.has(id)) {\r\n dep.addSub(this);\r\n }\r\n }\r\n };\r\n /**\r\n * Clean up for dependency collection.\r\n */\r\n Watcher.prototype.cleanupDeps = function () {\r\n var i = this.deps.length;\r\n while (i--) {\r\n var dep = this.deps[i];\r\n if (!this.newDepIds.has(dep.id)) {\r\n dep.removeSub(this);\r\n }\r\n }\r\n var tmp = this.depIds;\r\n this.depIds = this.newDepIds;\r\n this.newDepIds = tmp;\r\n this.newDepIds.clear();\r\n tmp = this.deps;\r\n this.deps = this.newDeps;\r\n this.newDeps = tmp;\r\n this.newDeps.length = 0;\r\n };\r\n /**\r\n * Subscriber interface.\r\n * Will be called when a dependency changes.\r\n */\r\n Watcher.prototype.update = function () {\r\n /* istanbul ignore else */\r\n if (this.lazy) {\r\n this.dirty = true;\r\n }\r\n else if (this.sync) {\r\n this.run();\r\n }\r\n else {\r\n queueWatcher(this);\r\n }\r\n };\r\n /**\r\n * Scheduler job interface.\r\n * Will be called by the scheduler.\r\n */\r\n Watcher.prototype.run = function () {\r\n if (this.active) {\r\n var value = this.get();\r\n if (value !== this.value ||\r\n // Deep watchers and watchers on Object/Arrays should fire even\r\n // when the value is the same, because the value may\r\n // have mutated.\r\n isObject(value) ||\r\n this.deep) {\r\n // set new value\r\n var oldValue = this.value;\r\n this.value = value;\r\n if (this.user) {\r\n var info = \"callback for watcher \\\"\".concat(this.expression, \"\\\"\");\r\n invokeWithErrorHandling(this.cb, this.vm, [value, oldValue], this.vm, info);\r\n }\r\n else {\r\n this.cb.call(this.vm, value, oldValue);\r\n }\r\n }\r\n }\r\n };\r\n /**\r\n * Evaluate the value of the watcher.\r\n * This only gets called for lazy watchers.\r\n */\r\n Watcher.prototype.evaluate = function () {\r\n this.value = this.get();\r\n this.dirty = false;\r\n };\r\n /**\r\n * Depend on all deps collected by this watcher.\r\n */\r\n Watcher.prototype.depend = function () {\r\n var i = this.deps.length;\r\n while (i--) {\r\n this.deps[i].depend();\r\n }\r\n };\r\n /**\r\n * Remove self from all dependencies' subscriber list.\r\n */\r\n Watcher.prototype.teardown = function () {\r\n if (this.vm && !this.vm._isBeingDestroyed) {\r\n remove$2(this.vm._scope.effects, this);\r\n }\r\n if (this.active) {\r\n var i = this.deps.length;\r\n while (i--) {\r\n this.deps[i].removeSub(this);\r\n }\r\n this.active = false;\r\n if (this.onStop) {\r\n this.onStop();\r\n }\r\n }\r\n };\r\n return Watcher;\r\n}());\n\nvar sharedPropertyDefinition = {\r\n enumerable: true,\r\n configurable: true,\r\n get: noop,\r\n set: noop\r\n};\r\nfunction proxy(target, sourceKey, key) {\r\n sharedPropertyDefinition.get = function proxyGetter() {\r\n return this[sourceKey][key];\r\n };\r\n sharedPropertyDefinition.set = function proxySetter(val) {\r\n this[sourceKey][key] = val;\r\n };\r\n Object.defineProperty(target, key, sharedPropertyDefinition);\r\n}\r\nfunction initState(vm) {\r\n var opts = vm.$options;\r\n if (opts.props)\r\n initProps$1(vm, opts.props);\r\n // Composition API\r\n initSetup(vm);\r\n if (opts.methods)\r\n initMethods(vm, opts.methods);\r\n if (opts.data) {\r\n initData(vm);\r\n }\r\n else {\r\n var ob = observe((vm._data = {}));\r\n ob && ob.vmCount++;\r\n }\r\n if (opts.computed)\r\n initComputed$1(vm, opts.computed);\r\n if (opts.watch && opts.watch !== nativeWatch) {\r\n initWatch(vm, opts.watch);\r\n }\r\n}\r\nfunction initProps$1(vm, propsOptions) {\r\n var propsData = vm.$options.propsData || {};\r\n var props = (vm._props = shallowReactive({}));\r\n // cache prop keys so that future props updates can iterate using Array\r\n // instead of dynamic object key enumeration.\r\n var keys = (vm.$options._propKeys = []);\r\n var isRoot = !vm.$parent;\r\n // root instance props should be converted\r\n if (!isRoot) {\r\n toggleObserving(false);\r\n }\r\n var _loop_1 = function (key) {\r\n keys.push(key);\r\n var value = validateProp(key, propsOptions, propsData, vm);\r\n /* istanbul ignore else */\r\n if (true) {\r\n var hyphenatedKey = hyphenate(key);\r\n if (isReservedAttribute(hyphenatedKey) ||\r\n config.isReservedAttr(hyphenatedKey)) {\r\n warn$2(\"\\\"\".concat(hyphenatedKey, \"\\\" is a reserved attribute and cannot be used as component prop.\"), vm);\r\n }\r\n defineReactive(props, key, value, function () {\r\n if (!isRoot && !isUpdatingChildComponent) {\r\n warn$2(\"Avoid mutating a prop directly since the value will be \" +\r\n \"overwritten whenever the parent component re-renders. \" +\r\n \"Instead, use a data or computed property based on the prop's \" +\r\n \"value. Prop being mutated: \\\"\".concat(key, \"\\\"\"), vm);\r\n }\r\n });\r\n }\r\n else {}\r\n // static props are already proxied on the component's prototype\r\n // during Vue.extend(). We only need to proxy props defined at\r\n // instantiation here.\r\n if (!(key in vm)) {\r\n proxy(vm, \"_props\", key);\r\n }\r\n };\r\n for (var key in propsOptions) {\r\n _loop_1(key);\r\n }\r\n toggleObserving(true);\r\n}\r\nfunction initData(vm) {\r\n var data = vm.$options.data;\r\n data = vm._data = isFunction(data) ? getData(data, vm) : data || {};\r\n if (!isPlainObject(data)) {\r\n data = {};\r\n true &&\r\n warn$2('data functions should return an object:\\n' +\r\n 'https://v2.vuejs.org/v2/guide/components.html#data-Must-Be-a-Function', vm);\r\n }\r\n // proxy data on instance\r\n var keys = Object.keys(data);\r\n var props = vm.$options.props;\r\n var methods = vm.$options.methods;\r\n var i = keys.length;\r\n while (i--) {\r\n var key = keys[i];\r\n if (true) {\r\n if (methods && hasOwn(methods, key)) {\r\n warn$2(\"Method \\\"\".concat(key, \"\\\" has already been defined as a data property.\"), vm);\r\n }\r\n }\r\n if (props && hasOwn(props, key)) {\r\n true &&\r\n warn$2(\"The data property \\\"\".concat(key, \"\\\" is already declared as a prop. \") +\r\n \"Use prop default value instead.\", vm);\r\n }\r\n else if (!isReserved(key)) {\r\n proxy(vm, \"_data\", key);\r\n }\r\n }\r\n // observe data\r\n var ob = observe(data);\r\n ob && ob.vmCount++;\r\n}\r\nfunction getData(data, vm) {\r\n // #7573 disable dep collection when invoking data getters\r\n pushTarget();\r\n try {\r\n return data.call(vm, vm);\r\n }\r\n catch (e) {\r\n handleError(e, vm, \"data()\");\r\n return {};\r\n }\r\n finally {\r\n popTarget();\r\n }\r\n}\r\nvar computedWatcherOptions = { lazy: true };\r\nfunction initComputed$1(vm, computed) {\r\n // $flow-disable-line\r\n var watchers = (vm._computedWatchers = Object.create(null));\r\n // computed properties are just getters during SSR\r\n var isSSR = isServerRendering();\r\n for (var key in computed) {\r\n var userDef = computed[key];\r\n var getter = isFunction(userDef) ? userDef : userDef.get;\r\n if ( true && getter == null) {\r\n warn$2(\"Getter is missing for computed property \\\"\".concat(key, \"\\\".\"), vm);\r\n }\r\n if (!isSSR) {\r\n // create internal watcher for the computed property.\r\n watchers[key] = new Watcher(vm, getter || noop, noop, computedWatcherOptions);\r\n }\r\n // component-defined computed properties are already defined on the\r\n // component prototype. We only need to define computed properties defined\r\n // at instantiation here.\r\n if (!(key in vm)) {\r\n defineComputed(vm, key, userDef);\r\n }\r\n else if (true) {\r\n if (key in vm.$data) {\r\n warn$2(\"The computed property \\\"\".concat(key, \"\\\" is already defined in data.\"), vm);\r\n }\r\n else if (vm.$options.props && key in vm.$options.props) {\r\n warn$2(\"The computed property \\\"\".concat(key, \"\\\" is already defined as a prop.\"), vm);\r\n }\r\n else if (vm.$options.methods && key in vm.$options.methods) {\r\n warn$2(\"The computed property \\\"\".concat(key, \"\\\" is already defined as a method.\"), vm);\r\n }\r\n }\r\n }\r\n}\r\nfunction defineComputed(target, key, userDef) {\r\n var shouldCache = !isServerRendering();\r\n if (isFunction(userDef)) {\r\n sharedPropertyDefinition.get = shouldCache\r\n ? createComputedGetter(key)\r\n : createGetterInvoker(userDef);\r\n sharedPropertyDefinition.set = noop;\r\n }\r\n else {\r\n sharedPropertyDefinition.get = userDef.get\r\n ? shouldCache && userDef.cache !== false\r\n ? createComputedGetter(key)\r\n : createGetterInvoker(userDef.get)\r\n : noop;\r\n sharedPropertyDefinition.set = userDef.set || noop;\r\n }\r\n if ( true && sharedPropertyDefinition.set === noop) {\r\n sharedPropertyDefinition.set = function () {\r\n warn$2(\"Computed property \\\"\".concat(key, \"\\\" was assigned to but it has no setter.\"), this);\r\n };\r\n }\r\n Object.defineProperty(target, key, sharedPropertyDefinition);\r\n}\r\nfunction createComputedGetter(key) {\r\n return function computedGetter() {\r\n var watcher = this._computedWatchers && this._computedWatchers[key];\r\n if (watcher) {\r\n if (watcher.dirty) {\r\n watcher.evaluate();\r\n }\r\n if (Dep.target) {\r\n if ( true && Dep.target.onTrack) {\r\n Dep.target.onTrack({\r\n effect: Dep.target,\r\n target: this,\r\n type: \"get\" /* TrackOpTypes.GET */,\r\n key: key\r\n });\r\n }\r\n watcher.depend();\r\n }\r\n return watcher.value;\r\n }\r\n };\r\n}\r\nfunction createGetterInvoker(fn) {\r\n return function computedGetter() {\r\n return fn.call(this, this);\r\n };\r\n}\r\nfunction initMethods(vm, methods) {\r\n var props = vm.$options.props;\r\n for (var key in methods) {\r\n if (true) {\r\n if (typeof methods[key] !== 'function') {\r\n warn$2(\"Method \\\"\".concat(key, \"\\\" has type \\\"\").concat(typeof methods[key], \"\\\" in the component definition. \") +\r\n \"Did you reference the function correctly?\", vm);\r\n }\r\n if (props && hasOwn(props, key)) {\r\n warn$2(\"Method \\\"\".concat(key, \"\\\" has already been defined as a prop.\"), vm);\r\n }\r\n if (key in vm && isReserved(key)) {\r\n warn$2(\"Method \\\"\".concat(key, \"\\\" conflicts with an existing Vue instance method. \") +\r\n \"Avoid defining component methods that start with _ or $.\");\r\n }\r\n }\r\n vm[key] = typeof methods[key] !== 'function' ? noop : bind$1(methods[key], vm);\r\n }\r\n}\r\nfunction initWatch(vm, watch) {\r\n for (var key in watch) {\r\n var handler = watch[key];\r\n if (isArray(handler)) {\r\n for (var i = 0; i < handler.length; i++) {\r\n createWatcher(vm, key, handler[i]);\r\n }\r\n }\r\n else {\r\n createWatcher(vm, key, handler);\r\n }\r\n }\r\n}\r\nfunction createWatcher(vm, expOrFn, handler, options) {\r\n if (isPlainObject(handler)) {\r\n options = handler;\r\n handler = handler.handler;\r\n }\r\n if (typeof handler === 'string') {\r\n handler = vm[handler];\r\n }\r\n return vm.$watch(expOrFn, handler, options);\r\n}\r\nfunction stateMixin(Vue) {\r\n // flow somehow has problems with directly declared definition object\r\n // when using Object.defineProperty, so we have to procedurally build up\r\n // the object here.\r\n var dataDef = {};\r\n dataDef.get = function () {\r\n return this._data;\r\n };\r\n var propsDef = {};\r\n propsDef.get = function () {\r\n return this._props;\r\n };\r\n if (true) {\r\n dataDef.set = function () {\r\n warn$2('Avoid replacing instance root $data. ' +\r\n 'Use nested data properties instead.', this);\r\n };\r\n propsDef.set = function () {\r\n warn$2(\"$props is readonly.\", this);\r\n };\r\n }\r\n Object.defineProperty(Vue.prototype, '$data', dataDef);\r\n Object.defineProperty(Vue.prototype, '$props', propsDef);\r\n Vue.prototype.$set = set;\r\n Vue.prototype.$delete = del;\r\n Vue.prototype.$watch = function (expOrFn, cb, options) {\r\n var vm = this;\r\n if (isPlainObject(cb)) {\r\n return createWatcher(vm, expOrFn, cb, options);\r\n }\r\n options = options || {};\r\n options.user = true;\r\n var watcher = new Watcher(vm, expOrFn, cb, options);\r\n if (options.immediate) {\r\n var info = \"callback for immediate watcher \\\"\".concat(watcher.expression, \"\\\"\");\r\n pushTarget();\r\n invokeWithErrorHandling(cb, vm, [watcher.value], vm, info);\r\n popTarget();\r\n }\r\n return function unwatchFn() {\r\n watcher.teardown();\r\n };\r\n };\r\n}\n\nfunction initProvide(vm) {\r\n var provideOption = vm.$options.provide;\r\n if (provideOption) {\r\n var provided = isFunction(provideOption)\r\n ? provideOption.call(vm)\r\n : provideOption;\r\n if (!isObject(provided)) {\r\n return;\r\n }\r\n var source = resolveProvided(vm);\r\n // IE9 doesn't support Object.getOwnPropertyDescriptors so we have to\r\n // iterate the keys ourselves.\r\n var keys = hasSymbol ? Reflect.ownKeys(provided) : Object.keys(provided);\r\n for (var i = 0; i < keys.length; i++) {\r\n var key = keys[i];\r\n Object.defineProperty(source, key, Object.getOwnPropertyDescriptor(provided, key));\r\n }\r\n }\r\n}\r\nfunction initInjections(vm) {\r\n var result = resolveInject(vm.$options.inject, vm);\r\n if (result) {\r\n toggleObserving(false);\r\n Object.keys(result).forEach(function (key) {\r\n /* istanbul ignore else */\r\n if (true) {\r\n defineReactive(vm, key, result[key], function () {\r\n warn$2(\"Avoid mutating an injected value directly since the changes will be \" +\r\n \"overwritten whenever the provided component re-renders. \" +\r\n \"injection being mutated: \\\"\".concat(key, \"\\\"\"), vm);\r\n });\r\n }\r\n else {}\r\n });\r\n toggleObserving(true);\r\n }\r\n}\r\nfunction resolveInject(inject, vm) {\r\n if (inject) {\r\n // inject is :any because flow is not smart enough to figure out cached\r\n var result = Object.create(null);\r\n var keys = hasSymbol ? Reflect.ownKeys(inject) : Object.keys(inject);\r\n for (var i = 0; i < keys.length; i++) {\r\n var key = keys[i];\r\n // #6574 in case the inject object is observed...\r\n if (key === '__ob__')\r\n continue;\r\n var provideKey = inject[key].from;\r\n if (provideKey in vm._provided) {\r\n result[key] = vm._provided[provideKey];\r\n }\r\n else if ('default' in inject[key]) {\r\n var provideDefault = inject[key].default;\r\n result[key] = isFunction(provideDefault)\r\n ? provideDefault.call(vm)\r\n : provideDefault;\r\n }\r\n else if (true) {\r\n warn$2(\"Injection \\\"\".concat(key, \"\\\" not found\"), vm);\r\n }\r\n }\r\n return result;\r\n }\r\n}\n\nvar uid = 0;\r\nfunction initMixin$1(Vue) {\r\n Vue.prototype._init = function (options) {\r\n var vm = this;\r\n // a uid\r\n vm._uid = uid++;\r\n var startTag, endTag;\r\n /* istanbul ignore if */\r\n if ( true && config.performance && mark) {\r\n startTag = \"vue-perf-start:\".concat(vm._uid);\r\n endTag = \"vue-perf-end:\".concat(vm._uid);\r\n mark(startTag);\r\n }\r\n // a flag to mark this as a Vue instance without having to do instanceof\r\n // check\r\n vm._isVue = true;\r\n // avoid instances from being observed\r\n vm.__v_skip = true;\r\n // effect scope\r\n vm._scope = new EffectScope(true /* detached */);\r\n vm._scope._vm = true;\r\n // merge options\r\n if (options && options._isComponent) {\r\n // optimize internal component instantiation\r\n // since dynamic options merging is pretty slow, and none of the\r\n // internal component options needs special treatment.\r\n initInternalComponent(vm, options);\r\n }\r\n else {\r\n vm.$options = mergeOptions(resolveConstructorOptions(vm.constructor), options || {}, vm);\r\n }\r\n /* istanbul ignore else */\r\n if (true) {\r\n initProxy(vm);\r\n }\r\n else {}\r\n // expose real self\r\n vm._self = vm;\r\n initLifecycle(vm);\r\n initEvents(vm);\r\n initRender(vm);\r\n callHook$1(vm, 'beforeCreate', undefined, false /* setContext */);\r\n initInjections(vm); // resolve injections before data/props\r\n initState(vm);\r\n initProvide(vm); // resolve provide after data/props\r\n callHook$1(vm, 'created');\r\n /* istanbul ignore if */\r\n if ( true && config.performance && mark) {\r\n vm._name = formatComponentName(vm, false);\r\n mark(endTag);\r\n measure(\"vue \".concat(vm._name, \" init\"), startTag, endTag);\r\n }\r\n if (vm.$options.el) {\r\n vm.$mount(vm.$options.el);\r\n }\r\n };\r\n}\r\nfunction initInternalComponent(vm, options) {\r\n var opts = (vm.$options = Object.create(vm.constructor.options));\r\n // doing this because it's faster than dynamic enumeration.\r\n var parentVnode = options._parentVnode;\r\n opts.parent = options.parent;\r\n opts._parentVnode = parentVnode;\r\n var vnodeComponentOptions = parentVnode.componentOptions;\r\n opts.propsData = vnodeComponentOptions.propsData;\r\n opts._parentListeners = vnodeComponentOptions.listeners;\r\n opts._renderChildren = vnodeComponentOptions.children;\r\n opts._componentTag = vnodeComponentOptions.tag;\r\n if (options.render) {\r\n opts.render = options.render;\r\n opts.staticRenderFns = options.staticRenderFns;\r\n }\r\n}\r\nfunction resolveConstructorOptions(Ctor) {\r\n var options = Ctor.options;\r\n if (Ctor.super) {\r\n var superOptions = resolveConstructorOptions(Ctor.super);\r\n var cachedSuperOptions = Ctor.superOptions;\r\n if (superOptions !== cachedSuperOptions) {\r\n // super option changed,\r\n // need to resolve new options.\r\n Ctor.superOptions = superOptions;\r\n // check if there are any late-modified/attached options (#4976)\r\n var modifiedOptions = resolveModifiedOptions(Ctor);\r\n // update base extend options\r\n if (modifiedOptions) {\r\n extend(Ctor.extendOptions, modifiedOptions);\r\n }\r\n options = Ctor.options = mergeOptions(superOptions, Ctor.extendOptions);\r\n if (options.name) {\r\n options.components[options.name] = Ctor;\r\n }\r\n }\r\n }\r\n return options;\r\n}\r\nfunction resolveModifiedOptions(Ctor) {\r\n var modified;\r\n var latest = Ctor.options;\r\n var sealed = Ctor.sealedOptions;\r\n for (var key in latest) {\r\n if (latest[key] !== sealed[key]) {\r\n if (!modified)\r\n modified = {};\r\n modified[key] = latest[key];\r\n }\r\n }\r\n return modified;\r\n}\n\nfunction FunctionalRenderContext(data, props, children, parent, Ctor) {\r\n var _this = this;\r\n var options = Ctor.options;\r\n // ensure the createElement function in functional components\r\n // gets a unique context - this is necessary for correct named slot check\r\n var contextVm;\r\n if (hasOwn(parent, '_uid')) {\r\n contextVm = Object.create(parent);\r\n contextVm._original = parent;\r\n }\r\n else {\r\n // the context vm passed in is a functional context as well.\r\n // in this case we want to make sure we are able to get a hold to the\r\n // real context instance.\r\n contextVm = parent;\r\n // @ts-ignore\r\n parent = parent._original;\r\n }\r\n var isCompiled = isTrue(options._compiled);\r\n var needNormalization = !isCompiled;\r\n this.data = data;\r\n this.props = props;\r\n this.children = children;\r\n this.parent = parent;\r\n this.listeners = data.on || emptyObject;\r\n this.injections = resolveInject(options.inject, parent);\r\n this.slots = function () {\r\n if (!_this.$slots) {\r\n normalizeScopedSlots(parent, data.scopedSlots, (_this.$slots = resolveSlots(children, parent)));\r\n }\r\n return _this.$slots;\r\n };\r\n Object.defineProperty(this, 'scopedSlots', {\r\n enumerable: true,\r\n get: function () {\r\n return normalizeScopedSlots(parent, data.scopedSlots, this.slots());\r\n }\r\n });\r\n // support for compiled functional template\r\n if (isCompiled) {\r\n // exposing $options for renderStatic()\r\n this.$options = options;\r\n // pre-resolve slots for renderSlot()\r\n this.$slots = this.slots();\r\n this.$scopedSlots = normalizeScopedSlots(parent, data.scopedSlots, this.$slots);\r\n }\r\n if (options._scopeId) {\r\n this._c = function (a, b, c, d) {\r\n var vnode = createElement$1(contextVm, a, b, c, d, needNormalization);\r\n if (vnode && !isArray(vnode)) {\r\n vnode.fnScopeId = options._scopeId;\r\n vnode.fnContext = parent;\r\n }\r\n return vnode;\r\n };\r\n }\r\n else {\r\n this._c = function (a, b, c, d) {\r\n return createElement$1(contextVm, a, b, c, d, needNormalization);\r\n };\r\n }\r\n}\r\ninstallRenderHelpers(FunctionalRenderContext.prototype);\r\nfunction createFunctionalComponent(Ctor, propsData, data, contextVm, children) {\r\n var options = Ctor.options;\r\n var props = {};\r\n var propOptions = options.props;\r\n if (isDef(propOptions)) {\r\n for (var key in propOptions) {\r\n props[key] = validateProp(key, propOptions, propsData || emptyObject);\r\n }\r\n }\r\n else {\r\n if (isDef(data.attrs))\r\n mergeProps(props, data.attrs);\r\n if (isDef(data.props))\r\n mergeProps(props, data.props);\r\n }\r\n var renderContext = new FunctionalRenderContext(data, props, children, contextVm, Ctor);\r\n var vnode = options.render.call(null, renderContext._c, renderContext);\r\n if (vnode instanceof VNode) {\r\n return cloneAndMarkFunctionalResult(vnode, data, renderContext.parent, options, renderContext);\r\n }\r\n else if (isArray(vnode)) {\r\n var vnodes = normalizeChildren(vnode) || [];\r\n var res = new Array(vnodes.length);\r\n for (var i = 0; i < vnodes.length; i++) {\r\n res[i] = cloneAndMarkFunctionalResult(vnodes[i], data, renderContext.parent, options, renderContext);\r\n }\r\n return res;\r\n }\r\n}\r\nfunction cloneAndMarkFunctionalResult(vnode, data, contextVm, options, renderContext) {\r\n // #7817 clone node before setting fnContext, otherwise if the node is reused\r\n // (e.g. it was from a cached normal slot) the fnContext causes named slots\r\n // that should not be matched to match.\r\n var clone = cloneVNode(vnode);\r\n clone.fnContext = contextVm;\r\n clone.fnOptions = options;\r\n if (true) {\r\n (clone.devtoolsMeta = clone.devtoolsMeta || {}).renderContext =\r\n renderContext;\r\n }\r\n if (data.slot) {\r\n (clone.data || (clone.data = {})).slot = data.slot;\r\n }\r\n return clone;\r\n}\r\nfunction mergeProps(to, from) {\r\n for (var key in from) {\r\n to[camelize(key)] = from[key];\r\n }\r\n}\n\nfunction getComponentName(options) {\r\n return options.name || options.__name || options._componentTag;\r\n}\r\n// inline hooks to be invoked on component VNodes during patch\r\nvar componentVNodeHooks = {\r\n init: function (vnode, hydrating) {\r\n if (vnode.componentInstance &&\r\n !vnode.componentInstance._isDestroyed &&\r\n vnode.data.keepAlive) {\r\n // kept-alive components, treat as a patch\r\n var mountedNode = vnode; // work around flow\r\n componentVNodeHooks.prepatch(mountedNode, mountedNode);\r\n }\r\n else {\r\n var child = (vnode.componentInstance = createComponentInstanceForVnode(vnode, activeInstance));\r\n child.$mount(hydrating ? vnode.elm : undefined, hydrating);\r\n }\r\n },\r\n prepatch: function (oldVnode, vnode) {\r\n var options = vnode.componentOptions;\r\n var child = (vnode.componentInstance = oldVnode.componentInstance);\r\n updateChildComponent(child, options.propsData, // updated props\r\n options.listeners, // updated listeners\r\n vnode, // new parent vnode\r\n options.children // new children\r\n );\r\n },\r\n insert: function (vnode) {\r\n var context = vnode.context, componentInstance = vnode.componentInstance;\r\n if (!componentInstance._isMounted) {\r\n componentInstance._isMounted = true;\r\n callHook$1(componentInstance, 'mounted');\r\n }\r\n if (vnode.data.keepAlive) {\r\n if (context._isMounted) {\r\n // vue-router#1212\r\n // During updates, a kept-alive component's child components may\r\n // change, so directly walking the tree here may call activated hooks\r\n // on incorrect children. Instead we push them into a queue which will\r\n // be processed after the whole patch process ended.\r\n queueActivatedComponent(componentInstance);\r\n }\r\n else {\r\n activateChildComponent(componentInstance, true /* direct */);\r\n }\r\n }\r\n },\r\n destroy: function (vnode) {\r\n var componentInstance = vnode.componentInstance;\r\n if (!componentInstance._isDestroyed) {\r\n if (!vnode.data.keepAlive) {\r\n componentInstance.$destroy();\r\n }\r\n else {\r\n deactivateChildComponent(componentInstance, true /* direct */);\r\n }\r\n }\r\n }\r\n};\r\nvar hooksToMerge = Object.keys(componentVNodeHooks);\r\nfunction createComponent(Ctor, data, context, children, tag) {\r\n if (isUndef(Ctor)) {\r\n return;\r\n }\r\n var baseCtor = context.$options._base;\r\n // plain options object: turn it into a constructor\r\n if (isObject(Ctor)) {\r\n Ctor = baseCtor.extend(Ctor);\r\n }\r\n // if at this stage it's not a constructor or an async component factory,\r\n // reject.\r\n if (typeof Ctor !== 'function') {\r\n if (true) {\r\n warn$2(\"Invalid Component definition: \".concat(String(Ctor)), context);\r\n }\r\n return;\r\n }\r\n // async component\r\n var asyncFactory;\r\n // @ts-expect-error\r\n if (isUndef(Ctor.cid)) {\r\n asyncFactory = Ctor;\r\n Ctor = resolveAsyncComponent(asyncFactory, baseCtor);\r\n if (Ctor === undefined) {\r\n // return a placeholder node for async component, which is rendered\r\n // as a comment node but preserves all the raw information for the node.\r\n // the information will be used for async server-rendering and hydration.\r\n return createAsyncPlaceholder(asyncFactory, data, context, children, tag);\r\n }\r\n }\r\n data = data || {};\r\n // resolve constructor options in case global mixins are applied after\r\n // component constructor creation\r\n resolveConstructorOptions(Ctor);\r\n // transform component v-model data into props & events\r\n if (isDef(data.model)) {\r\n // @ts-expect-error\r\n transformModel(Ctor.options, data);\r\n }\r\n // extract props\r\n // @ts-expect-error\r\n var propsData = extractPropsFromVNodeData(data, Ctor, tag);\r\n // functional component\r\n // @ts-expect-error\r\n if (isTrue(Ctor.options.functional)) {\r\n return createFunctionalComponent(Ctor, propsData, data, context, children);\r\n }\r\n // extract listeners, since these needs to be treated as\r\n // child component listeners instead of DOM listeners\r\n var listeners = data.on;\r\n // replace with listeners with .native modifier\r\n // so it gets processed during parent component patch.\r\n data.on = data.nativeOn;\r\n // @ts-expect-error\r\n if (isTrue(Ctor.options.abstract)) {\r\n // abstract components do not keep anything\r\n // other than props & listeners & slot\r\n // work around flow\r\n var slot = data.slot;\r\n data = {};\r\n if (slot) {\r\n data.slot = slot;\r\n }\r\n }\r\n // install component management hooks onto the placeholder node\r\n installComponentHooks(data);\r\n // return a placeholder vnode\r\n // @ts-expect-error\r\n var name = getComponentName(Ctor.options) || tag;\r\n var vnode = new VNode(\r\n // @ts-expect-error\r\n \"vue-component-\".concat(Ctor.cid).concat(name ? \"-\".concat(name) : ''), data, undefined, undefined, undefined, context, \r\n // @ts-expect-error\r\n { Ctor: Ctor, propsData: propsData, listeners: listeners, tag: tag, children: children }, asyncFactory);\r\n return vnode;\r\n}\r\nfunction createComponentInstanceForVnode(\r\n// we know it's MountedComponentVNode but flow doesn't\r\nvnode, \r\n// activeInstance in lifecycle state\r\nparent) {\r\n var options = {\r\n _isComponent: true,\r\n _parentVnode: vnode,\r\n parent: parent\r\n };\r\n // check inline-template render functions\r\n var inlineTemplate = vnode.data.inlineTemplate;\r\n if (isDef(inlineTemplate)) {\r\n options.render = inlineTemplate.render;\r\n options.staticRenderFns = inlineTemplate.staticRenderFns;\r\n }\r\n return new vnode.componentOptions.Ctor(options);\r\n}\r\nfunction installComponentHooks(data) {\r\n var hooks = data.hook || (data.hook = {});\r\n for (var i = 0; i < hooksToMerge.length; i++) {\r\n var key = hooksToMerge[i];\r\n var existing = hooks[key];\r\n var toMerge = componentVNodeHooks[key];\r\n // @ts-expect-error\r\n if (existing !== toMerge && !(existing && existing._merged)) {\r\n hooks[key] = existing ? mergeHook(toMerge, existing) : toMerge;\r\n }\r\n }\r\n}\r\nfunction mergeHook(f1, f2) {\r\n var merged = function (a, b) {\r\n // flow complains about extra args which is why we use any\r\n f1(a, b);\r\n f2(a, b);\r\n };\r\n merged._merged = true;\r\n return merged;\r\n}\r\n// transform component v-model info (value and callback) into\r\n// prop and event handler respectively.\r\nfunction transformModel(options, data) {\r\n var prop = (options.model && options.model.prop) || 'value';\r\n var event = (options.model && options.model.event) || 'input';\r\n (data.attrs || (data.attrs = {}))[prop] = data.model.value;\r\n var on = data.on || (data.on = {});\r\n var existing = on[event];\r\n var callback = data.model.callback;\r\n if (isDef(existing)) {\r\n if (isArray(existing)\r\n ? existing.indexOf(callback) === -1\r\n : existing !== callback) {\r\n on[event] = [callback].concat(existing);\r\n }\r\n }\r\n else {\r\n on[event] = callback;\r\n }\r\n}\n\nvar warn$2 = noop;\r\nvar tip = noop;\r\nvar generateComponentTrace; // work around flow check\r\nvar formatComponentName;\r\nif (true) {\r\n var hasConsole_1 = typeof console !== 'undefined';\r\n var classifyRE_1 = /(?:^|[-_])(\\w)/g;\r\n var classify_1 = function (str) {\r\n return str.replace(classifyRE_1, function (c) { return c.toUpperCase(); }).replace(/[-_]/g, '');\r\n };\r\n warn$2 = function (msg, vm) {\r\n if (vm === void 0) { vm = currentInstance; }\r\n var trace = vm ? generateComponentTrace(vm) : '';\r\n if (config.warnHandler) {\r\n config.warnHandler.call(null, msg, vm, trace);\r\n }\r\n else if (hasConsole_1 && !config.silent) {\r\n console.error(\"[Vue warn]: \".concat(msg).concat(trace));\r\n }\r\n };\r\n tip = function (msg, vm) {\r\n if (hasConsole_1 && !config.silent) {\r\n console.warn(\"[Vue tip]: \".concat(msg) + (vm ? generateComponentTrace(vm) : ''));\r\n }\r\n };\r\n formatComponentName = function (vm, includeFile) {\r\n if (vm.$root === vm) {\r\n return '<Root>';\r\n }\r\n var options = isFunction(vm) && vm.cid != null\r\n ? vm.options\r\n : vm._isVue\r\n ? vm.$options || vm.constructor.options\r\n : vm;\r\n var name = getComponentName(options);\r\n var file = options.__file;\r\n if (!name && file) {\r\n var match = file.match(/([^/\\\\]+)\\.vue$/);\r\n name = match && match[1];\r\n }\r\n return ((name ? \"<\".concat(classify_1(name), \">\") : \"<Anonymous>\") +\r\n (file && includeFile !== false ? \" at \".concat(file) : ''));\r\n };\r\n var repeat_1 = function (str, n) {\r\n var res = '';\r\n while (n) {\r\n if (n % 2 === 1)\r\n res += str;\r\n if (n > 1)\r\n str += str;\r\n n >>= 1;\r\n }\r\n return res;\r\n };\r\n generateComponentTrace = function (vm) {\r\n if (vm._isVue && vm.$parent) {\r\n var tree = [];\r\n var currentRecursiveSequence = 0;\r\n while (vm) {\r\n if (tree.length > 0) {\r\n var last = tree[tree.length - 1];\r\n if (last.constructor === vm.constructor) {\r\n currentRecursiveSequence++;\r\n vm = vm.$parent;\r\n continue;\r\n }\r\n else if (currentRecursiveSequence > 0) {\r\n tree[tree.length - 1] = [last, currentRecursiveSequence];\r\n currentRecursiveSequence = 0;\r\n }\r\n }\r\n tree.push(vm);\r\n vm = vm.$parent;\r\n }\r\n return ('\\n\\nfound in\\n\\n' +\r\n tree\r\n .map(function (vm, i) {\r\n return \"\".concat(i === 0 ? '---> ' : repeat_1(' ', 5 + i * 2)).concat(isArray(vm)\r\n ? \"\".concat(formatComponentName(vm[0]), \"... (\").concat(vm[1], \" recursive calls)\")\r\n : formatComponentName(vm));\r\n })\r\n .join('\\n'));\r\n }\r\n else {\r\n return \"\\n\\n(found in \".concat(formatComponentName(vm), \")\");\r\n }\r\n };\r\n}\n\n/**\r\n * Option overwriting strategies are functions that handle\r\n * how to merge a parent option value and a child option\r\n * value into the final value.\r\n */\r\nvar strats = config.optionMergeStrategies;\r\n/**\r\n * Options with restrictions\r\n */\r\nif (true) {\r\n strats.el = strats.propsData = function (parent, child, vm, key) {\r\n if (!vm) {\r\n warn$2(\"option \\\"\".concat(key, \"\\\" can only be used during instance \") +\r\n 'creation with the `new` keyword.');\r\n }\r\n return defaultStrat(parent, child);\r\n };\r\n}\r\n/**\r\n * Helper that recursively merges two data objects together.\r\n */\r\nfunction mergeData(to, from) {\r\n if (!from)\r\n return to;\r\n var key, toVal, fromVal;\r\n var keys = hasSymbol\r\n ? Reflect.ownKeys(from)\r\n : Object.keys(from);\r\n for (var i = 0; i < keys.length; i++) {\r\n key = keys[i];\r\n // in case the object is already observed...\r\n if (key === '__ob__')\r\n continue;\r\n toVal = to[key];\r\n fromVal = from[key];\r\n if (!hasOwn(to, key)) {\r\n set(to, key, fromVal);\r\n }\r\n else if (toVal !== fromVal &&\r\n isPlainObject(toVal) &&\r\n isPlainObject(fromVal)) {\r\n mergeData(toVal, fromVal);\r\n }\r\n }\r\n return to;\r\n}\r\n/**\r\n * Data\r\n */\r\nfunction mergeDataOrFn(parentVal, childVal, vm) {\r\n if (!vm) {\r\n // in a Vue.extend merge, both should be functions\r\n if (!childVal) {\r\n return parentVal;\r\n }\r\n if (!parentVal) {\r\n return childVal;\r\n }\r\n // when parentVal & childVal are both present,\r\n // we need to return a function that returns the\r\n // merged result of both functions... no need to\r\n // check if parentVal is a function here because\r\n // it has to be a function to pass previous merges.\r\n return function mergedDataFn() {\r\n return mergeData(isFunction(childVal) ? childVal.call(this, this) : childVal, isFunction(parentVal) ? parentVal.call(this, this) : parentVal);\r\n };\r\n }\r\n else {\r\n return function mergedInstanceDataFn() {\r\n // instance merge\r\n var instanceData = isFunction(childVal)\r\n ? childVal.call(vm, vm)\r\n : childVal;\r\n var defaultData = isFunction(parentVal)\r\n ? parentVal.call(vm, vm)\r\n : parentVal;\r\n if (instanceData) {\r\n return mergeData(instanceData, defaultData);\r\n }\r\n else {\r\n return defaultData;\r\n }\r\n };\r\n }\r\n}\r\nstrats.data = function (parentVal, childVal, vm) {\r\n if (!vm) {\r\n if (childVal && typeof childVal !== 'function') {\r\n true &&\r\n warn$2('The \"data\" option should be a function ' +\r\n 'that returns a per-instance value in component ' +\r\n 'definitions.', vm);\r\n return parentVal;\r\n }\r\n return mergeDataOrFn(parentVal, childVal);\r\n }\r\n return mergeDataOrFn(parentVal, childVal, vm);\r\n};\r\n/**\r\n * Hooks and props are merged as arrays.\r\n */\r\nfunction mergeLifecycleHook(parentVal, childVal) {\r\n var res = childVal\r\n ? parentVal\r\n ? parentVal.concat(childVal)\r\n : isArray(childVal)\r\n ? childVal\r\n : [childVal]\r\n : parentVal;\r\n return res ? dedupeHooks(res) : res;\r\n}\r\nfunction dedupeHooks(hooks) {\r\n var res = [];\r\n for (var i = 0; i < hooks.length; i++) {\r\n if (res.indexOf(hooks[i]) === -1) {\r\n res.push(hooks[i]);\r\n }\r\n }\r\n return res;\r\n}\r\nLIFECYCLE_HOOKS.forEach(function (hook) {\r\n strats[hook] = mergeLifecycleHook;\r\n});\r\n/**\r\n * Assets\r\n *\r\n * When a vm is present (instance creation), we need to do\r\n * a three-way merge between constructor options, instance\r\n * options and parent options.\r\n */\r\nfunction mergeAssets(parentVal, childVal, vm, key) {\r\n var res = Object.create(parentVal || null);\r\n if (childVal) {\r\n true && assertObjectType(key, childVal, vm);\r\n return extend(res, childVal);\r\n }\r\n else {\r\n return res;\r\n }\r\n}\r\nASSET_TYPES.forEach(function (type) {\r\n strats[type + 's'] = mergeAssets;\r\n});\r\n/**\r\n * Watchers.\r\n *\r\n * Watchers hashes should not overwrite one\r\n * another, so we merge them as arrays.\r\n */\r\nstrats.watch = function (parentVal, childVal, vm, key) {\r\n // work around Firefox's Object.prototype.watch...\r\n //@ts-expect-error work around\r\n if (parentVal === nativeWatch)\r\n parentVal = undefined;\r\n //@ts-expect-error work around\r\n if (childVal === nativeWatch)\r\n childVal = undefined;\r\n /* istanbul ignore if */\r\n if (!childVal)\r\n return Object.create(parentVal || null);\r\n if (true) {\r\n assertObjectType(key, childVal, vm);\r\n }\r\n if (!parentVal)\r\n return childVal;\r\n var ret = {};\r\n extend(ret, parentVal);\r\n for (var key_1 in childVal) {\r\n var parent_1 = ret[key_1];\r\n var child = childVal[key_1];\r\n if (parent_1 && !isArray(parent_1)) {\r\n parent_1 = [parent_1];\r\n }\r\n ret[key_1] = parent_1 ? parent_1.concat(child) : isArray(child) ? child : [child];\r\n }\r\n return ret;\r\n};\r\n/**\r\n * Other object hashes.\r\n */\r\nstrats.props =\r\n strats.methods =\r\n strats.inject =\r\n strats.computed =\r\n function (parentVal, childVal, vm, key) {\r\n if (childVal && \"development\" !== 'production') {\r\n assertObjectType(key, childVal, vm);\r\n }\r\n if (!parentVal)\r\n return childVal;\r\n var ret = Object.create(null);\r\n extend(ret, parentVal);\r\n if (childVal)\r\n extend(ret, childVal);\r\n return ret;\r\n };\r\nstrats.provide = mergeDataOrFn;\r\n/**\r\n * Default strategy.\r\n */\r\nvar defaultStrat = function (parentVal, childVal) {\r\n return childVal === undefined ? parentVal : childVal;\r\n};\r\n/**\r\n * Validate component names\r\n */\r\nfunction checkComponents(options) {\r\n for (var key in options.components) {\r\n validateComponentName(key);\r\n }\r\n}\r\nfunction validateComponentName(name) {\r\n if (!new RegExp(\"^[a-zA-Z][\\\\-\\\\.0-9_\".concat(unicodeRegExp.source, \"]*$\")).test(name)) {\r\n warn$2('Invalid component name: \"' +\r\n name +\r\n '\". Component names ' +\r\n 'should conform to valid custom element name in html5 specification.');\r\n }\r\n if (isBuiltInTag(name) || config.isReservedTag(name)) {\r\n warn$2('Do not use built-in or reserved HTML elements as component ' +\r\n 'id: ' +\r\n name);\r\n }\r\n}\r\n/**\r\n * Ensure all props option syntax are normalized into the\r\n * Object-based format.\r\n */\r\nfunction normalizeProps(options, vm) {\r\n var props = options.props;\r\n if (!props)\r\n return;\r\n var res = {};\r\n var i, val, name;\r\n if (isArray(props)) {\r\n i = props.length;\r\n while (i--) {\r\n val = props[i];\r\n if (typeof val === 'string') {\r\n name = camelize(val);\r\n res[name] = { type: null };\r\n }\r\n else if (true) {\r\n warn$2('props must be strings when using array syntax.');\r\n }\r\n }\r\n }\r\n else if (isPlainObject(props)) {\r\n for (var key in props) {\r\n val = props[key];\r\n name = camelize(key);\r\n res[name] = isPlainObject(val) ? val : { type: val };\r\n }\r\n }\r\n else if (true) {\r\n warn$2(\"Invalid value for option \\\"props\\\": expected an Array or an Object, \" +\r\n \"but got \".concat(toRawType(props), \".\"), vm);\r\n }\r\n options.props = res;\r\n}\r\n/**\r\n * Normalize all injections into Object-based format\r\n */\r\nfunction normalizeInject(options, vm) {\r\n var inject = options.inject;\r\n if (!inject)\r\n return;\r\n var normalized = (options.inject = {});\r\n if (isArray(inject)) {\r\n for (var i = 0; i < inject.length; i++) {\r\n normalized[inject[i]] = { from: inject[i] };\r\n }\r\n }\r\n else if (isPlainObject(inject)) {\r\n for (var key in inject) {\r\n var val = inject[key];\r\n normalized[key] = isPlainObject(val)\r\n ? extend({ from: key }, val)\r\n : { from: val };\r\n }\r\n }\r\n else if (true) {\r\n warn$2(\"Invalid value for option \\\"inject\\\": expected an Array or an Object, \" +\r\n \"but got \".concat(toRawType(inject), \".\"), vm);\r\n }\r\n}\r\n/**\r\n * Normalize raw function directives into object format.\r\n */\r\nfunction normalizeDirectives$1(options) {\r\n var dirs = options.directives;\r\n if (dirs) {\r\n for (var key in dirs) {\r\n var def = dirs[key];\r\n if (isFunction(def)) {\r\n dirs[key] = { bind: def, update: def };\r\n }\r\n }\r\n }\r\n}\r\nfunction assertObjectType(name, value, vm) {\r\n if (!isPlainObject(value)) {\r\n warn$2(\"Invalid value for option \\\"\".concat(name, \"\\\": expected an Object, \") +\r\n \"but got \".concat(toRawType(value), \".\"), vm);\r\n }\r\n}\r\n/**\r\n * Merge two option objects into a new one.\r\n * Core utility used in both instantiation and inheritance.\r\n */\r\nfunction mergeOptions(parent, child, vm) {\r\n if (true) {\r\n checkComponents(child);\r\n }\r\n if (isFunction(child)) {\r\n // @ts-expect-error\r\n child = child.options;\r\n }\r\n normalizeProps(child, vm);\r\n normalizeInject(child, vm);\r\n normalizeDirectives$1(child);\r\n // Apply extends and mixins on the child options,\r\n // but only if it is a raw options object that isn't\r\n // the result of another mergeOptions call.\r\n // Only merged options has the _base property.\r\n if (!child._base) {\r\n if (child.extends) {\r\n parent = mergeOptions(parent, child.extends, vm);\r\n }\r\n if (child.mixins) {\r\n for (var i = 0, l = child.mixins.length; i < l; i++) {\r\n parent = mergeOptions(parent, child.mixins[i], vm);\r\n }\r\n }\r\n }\r\n var options = {};\r\n var key;\r\n for (key in parent) {\r\n mergeField(key);\r\n }\r\n for (key in child) {\r\n if (!hasOwn(parent, key)) {\r\n mergeField(key);\r\n }\r\n }\r\n function mergeField(key) {\r\n var strat = strats[key] || defaultStrat;\r\n options[key] = strat(parent[key], child[key], vm, key);\r\n }\r\n return options;\r\n}\r\n/**\r\n * Resolve an asset.\r\n * This function is used because child instances need access\r\n * to assets defined in its ancestor chain.\r\n */\r\nfunction resolveAsset(options, type, id, warnMissing) {\r\n /* istanbul ignore if */\r\n if (typeof id !== 'string') {\r\n return;\r\n }\r\n var assets = options[type];\r\n // check local registration variations first\r\n if (hasOwn(assets, id))\r\n return assets[id];\r\n var camelizedId = camelize(id);\r\n if (hasOwn(assets, camelizedId))\r\n return assets[camelizedId];\r\n var PascalCaseId = capitalize(camelizedId);\r\n if (hasOwn(assets, PascalCaseId))\r\n return assets[PascalCaseId];\r\n // fallback to prototype chain\r\n var res = assets[id] || assets[camelizedId] || assets[PascalCaseId];\r\n if ( true && warnMissing && !res) {\r\n warn$2('Failed to resolve ' + type.slice(0, -1) + ': ' + id);\r\n }\r\n return res;\r\n}\n\nfunction validateProp(key, propOptions, propsData, vm) {\r\n var prop = propOptions[key];\r\n var absent = !hasOwn(propsData, key);\r\n var value = propsData[key];\r\n // boolean casting\r\n var booleanIndex = getTypeIndex(Boolean, prop.type);\r\n if (booleanIndex > -1) {\r\n if (absent && !hasOwn(prop, 'default')) {\r\n value = false;\r\n }\r\n else if (value === '' || value === hyphenate(key)) {\r\n // only cast empty string / same name to boolean if\r\n // boolean has higher priority\r\n var stringIndex = getTypeIndex(String, prop.type);\r\n if (stringIndex < 0 || booleanIndex < stringIndex) {\r\n value = true;\r\n }\r\n }\r\n }\r\n // check default value\r\n if (value === undefined) {\r\n value = getPropDefaultValue(vm, prop, key);\r\n // since the default value is a fresh copy,\r\n // make sure to observe it.\r\n var prevShouldObserve = shouldObserve;\r\n toggleObserving(true);\r\n observe(value);\r\n toggleObserving(prevShouldObserve);\r\n }\r\n if (true) {\r\n assertProp(prop, key, value, vm, absent);\r\n }\r\n return value;\r\n}\r\n/**\r\n * Get the default value of a prop.\r\n */\r\nfunction getPropDefaultValue(vm, prop, key) {\r\n // no default, return undefined\r\n if (!hasOwn(prop, 'default')) {\r\n return undefined;\r\n }\r\n var def = prop.default;\r\n // warn against non-factory defaults for Object & Array\r\n if ( true && isObject(def)) {\r\n warn$2('Invalid default value for prop \"' +\r\n key +\r\n '\": ' +\r\n 'Props with type Object/Array must use a factory function ' +\r\n 'to return the default value.', vm);\r\n }\r\n // the raw prop value was also undefined from previous render,\r\n // return previous default value to avoid unnecessary watcher trigger\r\n if (vm &&\r\n vm.$options.propsData &&\r\n vm.$options.propsData[key] === undefined &&\r\n vm._props[key] !== undefined) {\r\n return vm._props[key];\r\n }\r\n // call factory function for non-Function types\r\n // a value is Function if its prototype is function even across different execution context\r\n return isFunction(def) && getType(prop.type) !== 'Function'\r\n ? def.call(vm)\r\n : def;\r\n}\r\n/**\r\n * Assert whether a prop is valid.\r\n */\r\nfunction assertProp(prop, name, value, vm, absent) {\r\n if (prop.required && absent) {\r\n warn$2('Missing required prop: \"' + name + '\"', vm);\r\n return;\r\n }\r\n if (value == null && !prop.required) {\r\n return;\r\n }\r\n var type = prop.type;\r\n var valid = !type || type === true;\r\n var expectedTypes = [];\r\n if (type) {\r\n if (!isArray(type)) {\r\n type = [type];\r\n }\r\n for (var i = 0; i < type.length && !valid; i++) {\r\n var assertedType = assertType(value, type[i], vm);\r\n expectedTypes.push(assertedType.expectedType || '');\r\n valid = assertedType.valid;\r\n }\r\n }\r\n var haveExpectedTypes = expectedTypes.some(function (t) { return t; });\r\n if (!valid && haveExpectedTypes) {\r\n warn$2(getInvalidTypeMessage(name, value, expectedTypes), vm);\r\n return;\r\n }\r\n var validator = prop.validator;\r\n if (validator) {\r\n if (!validator(value)) {\r\n warn$2('Invalid prop: custom validator check failed for prop \"' + name + '\".', vm);\r\n }\r\n }\r\n}\r\nvar simpleCheckRE = /^(String|Number|Boolean|Function|Symbol|BigInt)$/;\r\nfunction assertType(value, type, vm) {\r\n var valid;\r\n var expectedType = getType(type);\r\n if (simpleCheckRE.test(expectedType)) {\r\n var t = typeof value;\r\n valid = t === expectedType.toLowerCase();\r\n // for primitive wrapper objects\r\n if (!valid && t === 'object') {\r\n valid = value instanceof type;\r\n }\r\n }\r\n else if (expectedType === 'Object') {\r\n valid = isPlainObject(value);\r\n }\r\n else if (expectedType === 'Array') {\r\n valid = isArray(value);\r\n }\r\n else {\r\n try {\r\n valid = value instanceof type;\r\n }\r\n catch (e) {\r\n warn$2('Invalid prop type: \"' + String(type) + '\" is not a constructor', vm);\r\n valid = false;\r\n }\r\n }\r\n return {\r\n valid: valid,\r\n expectedType: expectedType\r\n };\r\n}\r\nvar functionTypeCheckRE = /^\\s*function (\\w+)/;\r\n/**\r\n * Use function string name to check built-in types,\r\n * because a simple equality check will fail when running\r\n * across different vms / iframes.\r\n */\r\nfunction getType(fn) {\r\n var match = fn && fn.toString().match(functionTypeCheckRE);\r\n return match ? match[1] : '';\r\n}\r\nfunction isSameType(a, b) {\r\n return getType(a) === getType(b);\r\n}\r\nfunction getTypeIndex(type, expectedTypes) {\r\n if (!isArray(expectedTypes)) {\r\n return isSameType(expectedTypes, type) ? 0 : -1;\r\n }\r\n for (var i = 0, len = expectedTypes.length; i < len; i++) {\r\n if (isSameType(expectedTypes[i], type)) {\r\n return i;\r\n }\r\n }\r\n return -1;\r\n}\r\nfunction getInvalidTypeMessage(name, value, expectedTypes) {\r\n var message = \"Invalid prop: type check failed for prop \\\"\".concat(name, \"\\\".\") +\r\n \" Expected \".concat(expectedTypes.map(capitalize).join(', '));\r\n var expectedType = expectedTypes[0];\r\n var receivedType = toRawType(value);\r\n // check if we need to specify expected value\r\n if (expectedTypes.length === 1 &&\r\n isExplicable(expectedType) &&\r\n isExplicable(typeof value) &&\r\n !isBoolean(expectedType, receivedType)) {\r\n message += \" with value \".concat(styleValue(value, expectedType));\r\n }\r\n message += \", got \".concat(receivedType, \" \");\r\n // check if we need to specify received value\r\n if (isExplicable(receivedType)) {\r\n message += \"with value \".concat(styleValue(value, receivedType), \".\");\r\n }\r\n return message;\r\n}\r\nfunction styleValue(value, type) {\r\n if (type === 'String') {\r\n return \"\\\"\".concat(value, \"\\\"\");\r\n }\r\n else if (type === 'Number') {\r\n return \"\".concat(Number(value));\r\n }\r\n else {\r\n return \"\".concat(value);\r\n }\r\n}\r\nvar EXPLICABLE_TYPES = ['string', 'number', 'boolean'];\r\nfunction isExplicable(value) {\r\n return EXPLICABLE_TYPES.some(function (elem) { return value.toLowerCase() === elem; });\r\n}\r\nfunction isBoolean() {\r\n var args = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n args[_i] = arguments[_i];\r\n }\r\n return args.some(function (elem) { return elem.toLowerCase() === 'boolean'; });\r\n}\n\nfunction Vue(options) {\r\n if ( true && !(this instanceof Vue)) {\r\n warn$2('Vue is a constructor and should be called with the `new` keyword');\r\n }\r\n this._init(options);\r\n}\r\n//@ts-expect-error Vue has function type\r\ninitMixin$1(Vue);\r\n//@ts-expect-error Vue has function type\r\nstateMixin(Vue);\r\n//@ts-expect-error Vue has function type\r\neventsMixin(Vue);\r\n//@ts-expect-error Vue has function type\r\nlifecycleMixin(Vue);\r\n//@ts-expect-error Vue has function type\r\nrenderMixin(Vue);\n\nfunction initUse(Vue) {\r\n Vue.use = function (plugin) {\r\n var installedPlugins = this._installedPlugins || (this._installedPlugins = []);\r\n if (installedPlugins.indexOf(plugin) > -1) {\r\n return this;\r\n }\r\n // additional parameters\r\n var args = toArray(arguments, 1);\r\n args.unshift(this);\r\n if (isFunction(plugin.install)) {\r\n plugin.install.apply(plugin, args);\r\n }\r\n else if (isFunction(plugin)) {\r\n plugin.apply(null, args);\r\n }\r\n installedPlugins.push(plugin);\r\n return this;\r\n };\r\n}\n\nfunction initMixin(Vue) {\r\n Vue.mixin = function (mixin) {\r\n this.options = mergeOptions(this.options, mixin);\r\n return this;\r\n };\r\n}\n\nfunction initExtend(Vue) {\r\n /**\r\n * Each instance constructor, including Vue, has a unique\r\n * cid. This enables us to create wrapped \"child\r\n * constructors\" for prototypal inheritance and cache them.\r\n */\r\n Vue.cid = 0;\r\n var cid = 1;\r\n /**\r\n * Class inheritance\r\n */\r\n Vue.extend = function (extendOptions) {\r\n extendOptions = extendOptions || {};\r\n var Super = this;\r\n var SuperId = Super.cid;\r\n var cachedCtors = extendOptions._Ctor || (extendOptions._Ctor = {});\r\n if (cachedCtors[SuperId]) {\r\n return cachedCtors[SuperId];\r\n }\r\n var name = getComponentName(extendOptions) || getComponentName(Super.options);\r\n if ( true && name) {\r\n validateComponentName(name);\r\n }\r\n var Sub = function VueComponent(options) {\r\n this._init(options);\r\n };\r\n Sub.prototype = Object.create(Super.prototype);\r\n Sub.prototype.constructor = Sub;\r\n Sub.cid = cid++;\r\n Sub.options = mergeOptions(Super.options, extendOptions);\r\n Sub['super'] = Super;\r\n // For props and computed properties, we define the proxy getters on\r\n // the Vue instances at extension time, on the extended prototype. This\r\n // avoids Object.defineProperty calls for each instance created.\r\n if (Sub.options.props) {\r\n initProps(Sub);\r\n }\r\n if (Sub.options.computed) {\r\n initComputed(Sub);\r\n }\r\n // allow further extension/mixin/plugin usage\r\n Sub.extend = Super.extend;\r\n Sub.mixin = Super.mixin;\r\n Sub.use = Super.use;\r\n // create asset registers, so extended classes\r\n // can have their private assets too.\r\n ASSET_TYPES.forEach(function (type) {\r\n Sub[type] = Super[type];\r\n });\r\n // enable recursive self-lookup\r\n if (name) {\r\n Sub.options.components[name] = Sub;\r\n }\r\n // keep a reference to the super options at extension time.\r\n // later at instantiation we can check if Super's options have\r\n // been updated.\r\n Sub.superOptions = Super.options;\r\n Sub.extendOptions = extendOptions;\r\n Sub.sealedOptions = extend({}, Sub.options);\r\n // cache constructor\r\n cachedCtors[SuperId] = Sub;\r\n return Sub;\r\n };\r\n}\r\nfunction initProps(Comp) {\r\n var props = Comp.options.props;\r\n for (var key in props) {\r\n proxy(Comp.prototype, \"_props\", key);\r\n }\r\n}\r\nfunction initComputed(Comp) {\r\n var computed = Comp.options.computed;\r\n for (var key in computed) {\r\n defineComputed(Comp.prototype, key, computed[key]);\r\n }\r\n}\n\nfunction initAssetRegisters(Vue) {\r\n /**\r\n * Create asset registration methods.\r\n */\r\n ASSET_TYPES.forEach(function (type) {\r\n // @ts-expect-error function is not exact same type\r\n Vue[type] = function (id, definition) {\r\n if (!definition) {\r\n return this.options[type + 's'][id];\r\n }\r\n else {\r\n /* istanbul ignore if */\r\n if ( true && type === 'component') {\r\n validateComponentName(id);\r\n }\r\n if (type === 'component' && isPlainObject(definition)) {\r\n // @ts-expect-error\r\n definition.name = definition.name || id;\r\n definition = this.options._base.extend(definition);\r\n }\r\n if (type === 'directive' && isFunction(definition)) {\r\n definition = { bind: definition, update: definition };\r\n }\r\n this.options[type + 's'][id] = definition;\r\n return definition;\r\n }\r\n };\r\n });\r\n}\n\nfunction _getComponentName(opts) {\r\n return opts && (getComponentName(opts.Ctor.options) || opts.tag);\r\n}\r\nfunction matches(pattern, name) {\r\n if (isArray(pattern)) {\r\n return pattern.indexOf(name) > -1;\r\n }\r\n else if (typeof pattern === 'string') {\r\n return pattern.split(',').indexOf(name) > -1;\r\n }\r\n else if (isRegExp(pattern)) {\r\n return pattern.test(name);\r\n }\r\n /* istanbul ignore next */\r\n return false;\r\n}\r\nfunction pruneCache(keepAliveInstance, filter) {\r\n var cache = keepAliveInstance.cache, keys = keepAliveInstance.keys, _vnode = keepAliveInstance._vnode;\r\n for (var key in cache) {\r\n var entry = cache[key];\r\n if (entry) {\r\n var name_1 = entry.name;\r\n if (name_1 && !filter(name_1)) {\r\n pruneCacheEntry(cache, key, keys, _vnode);\r\n }\r\n }\r\n }\r\n}\r\nfunction pruneCacheEntry(cache, key, keys, current) {\r\n var entry = cache[key];\r\n if (entry && (!current || entry.tag !== current.tag)) {\r\n // @ts-expect-error can be undefined\r\n entry.componentInstance.$destroy();\r\n }\r\n cache[key] = null;\r\n remove$2(keys, key);\r\n}\r\nvar patternTypes = [String, RegExp, Array];\r\n// TODO defineComponent\r\nvar KeepAlive = {\r\n name: 'keep-alive',\r\n abstract: true,\r\n props: {\r\n include: patternTypes,\r\n exclude: patternTypes,\r\n max: [String, Number]\r\n },\r\n methods: {\r\n cacheVNode: function () {\r\n var _a = this, cache = _a.cache, keys = _a.keys, vnodeToCache = _a.vnodeToCache, keyToCache = _a.keyToCache;\r\n if (vnodeToCache) {\r\n var tag = vnodeToCache.tag, componentInstance = vnodeToCache.componentInstance, componentOptions = vnodeToCache.componentOptions;\r\n cache[keyToCache] = {\r\n name: _getComponentName(componentOptions),\r\n tag: tag,\r\n componentInstance: componentInstance\r\n };\r\n keys.push(keyToCache);\r\n // prune oldest entry\r\n if (this.max && keys.length > parseInt(this.max)) {\r\n pruneCacheEntry(cache, keys[0], keys, this._vnode);\r\n }\r\n this.vnodeToCache = null;\r\n }\r\n }\r\n },\r\n created: function () {\r\n this.cache = Object.create(null);\r\n this.keys = [];\r\n },\r\n destroyed: function () {\r\n for (var key in this.cache) {\r\n pruneCacheEntry(this.cache, key, this.keys);\r\n }\r\n },\r\n mounted: function () {\r\n var _this = this;\r\n this.cacheVNode();\r\n this.$watch('include', function (val) {\r\n pruneCache(_this, function (name) { return matches(val, name); });\r\n });\r\n this.$watch('exclude', function (val) {\r\n pruneCache(_this, function (name) { return !matches(val, name); });\r\n });\r\n },\r\n updated: function () {\r\n this.cacheVNode();\r\n },\r\n render: function () {\r\n var slot = this.$slots.default;\r\n var vnode = getFirstComponentChild(slot);\r\n var componentOptions = vnode && vnode.componentOptions;\r\n if (componentOptions) {\r\n // check pattern\r\n var name_2 = _getComponentName(componentOptions);\r\n var _a = this, include = _a.include, exclude = _a.exclude;\r\n if (\r\n // not included\r\n (include && (!name_2 || !matches(include, name_2))) ||\r\n // excluded\r\n (exclude && name_2 && matches(exclude, name_2))) {\r\n return vnode;\r\n }\r\n var _b = this, cache = _b.cache, keys = _b.keys;\r\n var key = vnode.key == null\r\n ? // same constructor may get registered as different local components\r\n // so cid alone is not enough (#3269)\r\n componentOptions.Ctor.cid +\r\n (componentOptions.tag ? \"::\".concat(componentOptions.tag) : '')\r\n : vnode.key;\r\n if (cache[key]) {\r\n vnode.componentInstance = cache[key].componentInstance;\r\n // make current key freshest\r\n remove$2(keys, key);\r\n keys.push(key);\r\n }\r\n else {\r\n // delay setting the cache until update\r\n this.vnodeToCache = vnode;\r\n this.keyToCache = key;\r\n }\r\n // @ts-expect-error can vnode.data can be undefined\r\n vnode.data.keepAlive = true;\r\n }\r\n return vnode || (slot && slot[0]);\r\n }\r\n};\n\nvar builtInComponents = {\r\n KeepAlive: KeepAlive\r\n};\n\nfunction initGlobalAPI(Vue) {\r\n // config\r\n var configDef = {};\r\n configDef.get = function () { return config; };\r\n if (true) {\r\n configDef.set = function () {\r\n warn$2('Do not replace the Vue.config object, set individual fields instead.');\r\n };\r\n }\r\n Object.defineProperty(Vue, 'config', configDef);\r\n // exposed util methods.\r\n // NOTE: these are not considered part of the public API - avoid relying on\r\n // them unless you are aware of the risk.\r\n Vue.util = {\r\n warn: warn$2,\r\n extend: extend,\r\n mergeOptions: mergeOptions,\r\n defineReactive: defineReactive\r\n };\r\n Vue.set = set;\r\n Vue.delete = del;\r\n Vue.nextTick = nextTick;\r\n // 2.6 explicit observable API\r\n Vue.observable = function (obj) {\r\n observe(obj);\r\n return obj;\r\n };\r\n Vue.options = Object.create(null);\r\n ASSET_TYPES.forEach(function (type) {\r\n Vue.options[type + 's'] = Object.create(null);\r\n });\r\n // this is used to identify the \"base\" constructor to extend all plain-object\r\n // components with in Weex's multi-instance scenarios.\r\n Vue.options._base = Vue;\r\n extend(Vue.options.components, builtInComponents);\r\n initUse(Vue);\r\n initMixin(Vue);\r\n initExtend(Vue);\r\n initAssetRegisters(Vue);\r\n}\n\ninitGlobalAPI(Vue);\r\nObject.defineProperty(Vue.prototype, '$isServer', {\r\n get: isServerRendering\r\n});\r\nObject.defineProperty(Vue.prototype, '$ssrContext', {\r\n get: function () {\r\n /* istanbul ignore next */\r\n return this.$vnode && this.$vnode.ssrContext;\r\n }\r\n});\r\n// expose FunctionalRenderContext for ssr runtime helper installation\r\nObject.defineProperty(Vue, 'FunctionalRenderContext', {\r\n value: FunctionalRenderContext\r\n});\r\nVue.version = version;\n\n// these are reserved for web because they are directly compiled away\r\n// during template compilation\r\nvar isReservedAttr = makeMap('style,class');\r\n// attributes that should be using props for binding\r\nvar acceptValue = makeMap('input,textarea,option,select,progress');\r\nvar mustUseProp = function (tag, type, attr) {\r\n return ((attr === 'value' && acceptValue(tag) && type !== 'button') ||\r\n (attr === 'selected' && tag === 'option') ||\r\n (attr === 'checked' && tag === 'input') ||\r\n (attr === 'muted' && tag === 'video'));\r\n};\r\nvar isEnumeratedAttr = makeMap('contenteditable,draggable,spellcheck');\r\nvar isValidContentEditableValue = makeMap('events,caret,typing,plaintext-only');\r\nvar convertEnumeratedValue = function (key, value) {\r\n return isFalsyAttrValue(value) || value === 'false'\r\n ? 'false'\r\n : // allow arbitrary string value for contenteditable\r\n key === 'contenteditable' && isValidContentEditableValue(value)\r\n ? value\r\n : 'true';\r\n};\r\nvar isBooleanAttr = makeMap('allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,' +\r\n 'default,defaultchecked,defaultmuted,defaultselected,defer,disabled,' +\r\n 'enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,' +\r\n 'muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,' +\r\n 'required,reversed,scoped,seamless,selected,sortable,' +\r\n 'truespeed,typemustmatch,visible');\r\nvar xlinkNS = 'http://www.w3.org/1999/xlink';\r\nvar isXlink = function (name) {\r\n return name.charAt(5) === ':' && name.slice(0, 5) === 'xlink';\r\n};\r\nvar getXlinkProp = function (name) {\r\n return isXlink(name) ? name.slice(6, name.length) : '';\r\n};\r\nvar isFalsyAttrValue = function (val) {\r\n return val == null || val === false;\r\n};\n\nfunction genClassForVnode(vnode) {\r\n var data = vnode.data;\r\n var parentNode = vnode;\r\n var childNode = vnode;\r\n while (isDef(childNode.componentInstance)) {\r\n childNode = childNode.componentInstance._vnode;\r\n if (childNode && childNode.data) {\r\n data = mergeClassData(childNode.data, data);\r\n }\r\n }\r\n // @ts-expect-error parentNode.parent not VNodeWithData\r\n while (isDef((parentNode = parentNode.parent))) {\r\n if (parentNode && parentNode.data) {\r\n data = mergeClassData(data, parentNode.data);\r\n }\r\n }\r\n return renderClass(data.staticClass, data.class);\r\n}\r\nfunction mergeClassData(child, parent) {\r\n return {\r\n staticClass: concat(child.staticClass, parent.staticClass),\r\n class: isDef(child.class) ? [child.class, parent.class] : parent.class\r\n };\r\n}\r\nfunction renderClass(staticClass, dynamicClass) {\r\n if (isDef(staticClass) || isDef(dynamicClass)) {\r\n return concat(staticClass, stringifyClass(dynamicClass));\r\n }\r\n /* istanbul ignore next */\r\n return '';\r\n}\r\nfunction concat(a, b) {\r\n return a ? (b ? a + ' ' + b : a) : b || '';\r\n}\r\nfunction stringifyClass(value) {\r\n if (Array.isArray(value)) {\r\n return stringifyArray(value);\r\n }\r\n if (isObject(value)) {\r\n return stringifyObject(value);\r\n }\r\n if (typeof value === 'string') {\r\n return value;\r\n }\r\n /* istanbul ignore next */\r\n return '';\r\n}\r\nfunction stringifyArray(value) {\r\n var res = '';\r\n var stringified;\r\n for (var i = 0, l = value.length; i < l; i++) {\r\n if (isDef((stringified = stringifyClass(value[i]))) && stringified !== '') {\r\n if (res)\r\n res += ' ';\r\n res += stringified;\r\n }\r\n }\r\n return res;\r\n}\r\nfunction stringifyObject(value) {\r\n var res = '';\r\n for (var key in value) {\r\n if (value[key]) {\r\n if (res)\r\n res += ' ';\r\n res += key;\r\n }\r\n }\r\n return res;\r\n}\n\nvar namespaceMap = {\r\n svg: 'http://www.w3.org/2000/svg',\r\n math: 'http://www.w3.org/1998/Math/MathML'\r\n};\r\nvar isHTMLTag = makeMap('html,body,base,head,link,meta,style,title,' +\r\n 'address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,' +\r\n 'div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,' +\r\n 'a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,' +\r\n 's,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,' +\r\n 'embed,object,param,source,canvas,script,noscript,del,ins,' +\r\n 'caption,col,colgroup,table,thead,tbody,td,th,tr,' +\r\n 'button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,' +\r\n 'output,progress,select,textarea,' +\r\n 'details,dialog,menu,menuitem,summary,' +\r\n 'content,element,shadow,template,blockquote,iframe,tfoot');\r\n// this map is intentionally selective, only covering SVG elements that may\r\n// contain child elements.\r\nvar isSVG = makeMap('svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,' +\r\n 'foreignobject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,' +\r\n 'polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view', true);\r\nvar isPreTag = function (tag) { return tag === 'pre'; };\r\nvar isReservedTag = function (tag) {\r\n return isHTMLTag(tag) || isSVG(tag);\r\n};\r\nfunction getTagNamespace(tag) {\r\n if (isSVG(tag)) {\r\n return 'svg';\r\n }\r\n // basic support for MathML\r\n // note it doesn't support other MathML elements being component roots\r\n if (tag === 'math') {\r\n return 'math';\r\n }\r\n}\r\nvar unknownElementCache = Object.create(null);\r\nfunction isUnknownElement(tag) {\r\n /* istanbul ignore if */\r\n if (!inBrowser) {\r\n return true;\r\n }\r\n if (isReservedTag(tag)) {\r\n return false;\r\n }\r\n tag = tag.toLowerCase();\r\n /* istanbul ignore if */\r\n if (unknownElementCache[tag] != null) {\r\n return unknownElementCache[tag];\r\n }\r\n var el = document.createElement(tag);\r\n if (tag.indexOf('-') > -1) {\r\n // http://stackoverflow.com/a/28210364/1070244\r\n return (unknownElementCache[tag] =\r\n el.constructor === window.HTMLUnknownElement ||\r\n el.constructor === window.HTMLElement);\r\n }\r\n else {\r\n return (unknownElementCache[tag] = /HTMLUnknownElement/.test(el.toString()));\r\n }\r\n}\r\nvar isTextInputType = makeMap('text,number,password,search,email,tel,url');\n\n/**\r\n * Query an element selector if it's not an element already.\r\n */\r\nfunction query(el) {\r\n if (typeof el === 'string') {\r\n var selected = document.querySelector(el);\r\n if (!selected) {\r\n true && warn$2('Cannot find element: ' + el);\r\n return document.createElement('div');\r\n }\r\n return selected;\r\n }\r\n else {\r\n return el;\r\n }\r\n}\n\nfunction createElement(tagName, vnode) {\r\n var elm = document.createElement(tagName);\r\n if (tagName !== 'select') {\r\n return elm;\r\n }\r\n // false or null will remove the attribute but undefined will not\r\n if (vnode.data &&\r\n vnode.data.attrs &&\r\n vnode.data.attrs.multiple !== undefined) {\r\n elm.setAttribute('multiple', 'multiple');\r\n }\r\n return elm;\r\n}\r\nfunction createElementNS(namespace, tagName) {\r\n return document.createElementNS(namespaceMap[namespace], tagName);\r\n}\r\nfunction createTextNode(text) {\r\n return document.createTextNode(text);\r\n}\r\nfunction createComment(text) {\r\n return document.createComment(text);\r\n}\r\nfunction insertBefore(parentNode, newNode, referenceNode) {\r\n parentNode.insertBefore(newNode, referenceNode);\r\n}\r\nfunction removeChild(node, child) {\r\n node.removeChild(child);\r\n}\r\nfunction appendChild(node, child) {\r\n node.appendChild(child);\r\n}\r\nfunction parentNode(node) {\r\n return node.parentNode;\r\n}\r\nfunction nextSibling(node) {\r\n return node.nextSibling;\r\n}\r\nfunction tagName(node) {\r\n return node.tagName;\r\n}\r\nfunction setTextContent(node, text) {\r\n node.textContent = text;\r\n}\r\nfunction setStyleScope(node, scopeId) {\r\n node.setAttribute(scopeId, '');\r\n}\n\nvar nodeOps = /*#__PURE__*/Object.freeze({\n __proto__: null,\n createElement: createElement,\n createElementNS: createElementNS,\n createTextNode: createTextNode,\n createComment: createComment,\n insertBefore: insertBefore,\n removeChild: removeChild,\n appendChild: appendChild,\n parentNode: parentNode,\n nextSibling: nextSibling,\n tagName: tagName,\n setTextContent: setTextContent,\n setStyleScope: setStyleScope\n});\n\nvar ref = {\r\n create: function (_, vnode) {\r\n registerRef(vnode);\r\n },\r\n update: function (oldVnode, vnode) {\r\n if (oldVnode.data.ref !== vnode.data.ref) {\r\n registerRef(oldVnode, true);\r\n registerRef(vnode);\r\n }\r\n },\r\n destroy: function (vnode) {\r\n registerRef(vnode, true);\r\n }\r\n};\r\nfunction registerRef(vnode, isRemoval) {\r\n var ref = vnode.data.ref;\r\n if (!isDef(ref))\r\n return;\r\n var vm = vnode.context;\r\n var refValue = vnode.componentInstance || vnode.elm;\r\n var value = isRemoval ? null : refValue;\r\n var $refsValue = isRemoval ? undefined : refValue;\r\n if (isFunction(ref)) {\r\n invokeWithErrorHandling(ref, vm, [value], vm, \"template ref function\");\r\n return;\r\n }\r\n var isFor = vnode.data.refInFor;\r\n var _isString = typeof ref === 'string' || typeof ref === 'number';\r\n var _isRef = isRef(ref);\r\n var refs = vm.$refs;\r\n if (_isString || _isRef) {\r\n if (isFor) {\r\n var existing = _isString ? refs[ref] : ref.value;\r\n if (isRemoval) {\r\n isArray(existing) && remove$2(existing, refValue);\r\n }\r\n else {\r\n if (!isArray(existing)) {\r\n if (_isString) {\r\n refs[ref] = [refValue];\r\n setSetupRef(vm, ref, refs[ref]);\r\n }\r\n else {\r\n ref.value = [refValue];\r\n }\r\n }\r\n else if (!existing.includes(refValue)) {\r\n existing.push(refValue);\r\n }\r\n }\r\n }\r\n else if (_isString) {\r\n if (isRemoval && refs[ref] !== refValue) {\r\n return;\r\n }\r\n refs[ref] = $refsValue;\r\n setSetupRef(vm, ref, value);\r\n }\r\n else if (_isRef) {\r\n if (isRemoval && ref.value !== refValue) {\r\n return;\r\n }\r\n ref.value = value;\r\n }\r\n else if (true) {\r\n warn$2(\"Invalid template ref type: \".concat(typeof ref));\r\n }\r\n }\r\n}\r\nfunction setSetupRef(_a, key, val) {\r\n var _setupState = _a._setupState;\r\n if (_setupState && hasOwn(_setupState, key)) {\r\n if (isRef(_setupState[key])) {\r\n _setupState[key].value = val;\r\n }\r\n else {\r\n _setupState[key] = val;\r\n }\r\n }\r\n}\n\n/**\r\n * Virtual DOM patching algorithm based on Snabbdom by\r\n * Simon Friis Vindum (@paldepind)\r\n * Licensed under the MIT License\r\n * https://github.com/paldepind/snabbdom/blob/master/LICENSE\r\n *\r\n * modified by Evan You (@yyx990803)\r\n *\r\n * Not type-checking this because this file is perf-critical and the cost\r\n * of making flow understand it is not worth it.\r\n */\r\nvar emptyNode = new VNode('', {}, []);\r\nvar hooks = ['create', 'activate', 'update', 'remove', 'destroy'];\r\nfunction sameVnode(a, b) {\r\n return (a.key === b.key &&\r\n a.asyncFactory === b.asyncFactory &&\r\n ((a.tag === b.tag &&\r\n a.isComment === b.isComment &&\r\n isDef(a.data) === isDef(b.data) &&\r\n sameInputType(a, b)) ||\r\n (isTrue(a.isAsyncPlaceholder) && isUndef(b.asyncFactory.error))));\r\n}\r\nfunction sameInputType(a, b) {\r\n if (a.tag !== 'input')\r\n return true;\r\n var i;\r\n var typeA = isDef((i = a.data)) && isDef((i = i.attrs)) && i.type;\r\n var typeB = isDef((i = b.data)) && isDef((i = i.attrs)) && i.type;\r\n return typeA === typeB || (isTextInputType(typeA) && isTextInputType(typeB));\r\n}\r\nfunction createKeyToOldIdx(children, beginIdx, endIdx) {\r\n var i, key;\r\n var map = {};\r\n for (i = beginIdx; i <= endIdx; ++i) {\r\n key = children[i].key;\r\n if (isDef(key))\r\n map[key] = i;\r\n }\r\n return map;\r\n}\r\nfunction createPatchFunction(backend) {\r\n var i, j;\r\n var cbs = {};\r\n var modules = backend.modules, nodeOps = backend.nodeOps;\r\n for (i = 0; i < hooks.length; ++i) {\r\n cbs[hooks[i]] = [];\r\n for (j = 0; j < modules.length; ++j) {\r\n if (isDef(modules[j][hooks[i]])) {\r\n cbs[hooks[i]].push(modules[j][hooks[i]]);\r\n }\r\n }\r\n }\r\n function emptyNodeAt(elm) {\r\n return new VNode(nodeOps.tagName(elm).toLowerCase(), {}, [], undefined, elm);\r\n }\r\n function createRmCb(childElm, listeners) {\r\n function remove() {\r\n if (--remove.listeners === 0) {\r\n removeNode(childElm);\r\n }\r\n }\r\n remove.listeners = listeners;\r\n return remove;\r\n }\r\n function removeNode(el) {\r\n var parent = nodeOps.parentNode(el);\r\n // element may have already been removed due to v-html / v-text\r\n if (isDef(parent)) {\r\n nodeOps.removeChild(parent, el);\r\n }\r\n }\r\n function isUnknownElement(vnode, inVPre) {\r\n return (!inVPre &&\r\n !vnode.ns &&\r\n !(config.ignoredElements.length &&\r\n config.ignoredElements.some(function (ignore) {\r\n return isRegExp(ignore)\r\n ? ignore.test(vnode.tag)\r\n : ignore === vnode.tag;\r\n })) &&\r\n config.isUnknownElement(vnode.tag));\r\n }\r\n var creatingElmInVPre = 0;\r\n function createElm(vnode, insertedVnodeQueue, parentElm, refElm, nested, ownerArray, index) {\r\n if (isDef(vnode.elm) && isDef(ownerArray)) {\r\n // This vnode was used in a previous render!\r\n // now it's used as a new node, overwriting its elm would cause\r\n // potential patch errors down the road when it's used as an insertion\r\n // reference node. Instead, we clone the node on-demand before creating\r\n // associated DOM element for it.\r\n vnode = ownerArray[index] = cloneVNode(vnode);\r\n }\r\n vnode.isRootInsert = !nested; // for transition enter check\r\n if (createComponent(vnode, insertedVnodeQueue, parentElm, refElm)) {\r\n return;\r\n }\r\n var data = vnode.data;\r\n var children = vnode.children;\r\n var tag = vnode.tag;\r\n if (isDef(tag)) {\r\n if (true) {\r\n if (data && data.pre) {\r\n creatingElmInVPre++;\r\n }\r\n if (isUnknownElement(vnode, creatingElmInVPre)) {\r\n warn$2('Unknown custom element: <' +\r\n tag +\r\n '> - did you ' +\r\n 'register the component correctly? For recursive components, ' +\r\n 'make sure to provide the \"name\" option.', vnode.context);\r\n }\r\n }\r\n vnode.elm = vnode.ns\r\n ? nodeOps.createElementNS(vnode.ns, tag)\r\n : nodeOps.createElement(tag, vnode);\r\n setScope(vnode);\r\n createChildren(vnode, children, insertedVnodeQueue);\r\n if (isDef(data)) {\r\n invokeCreateHooks(vnode, insertedVnodeQueue);\r\n }\r\n insert(parentElm, vnode.elm, refElm);\r\n if ( true && data && data.pre) {\r\n creatingElmInVPre--;\r\n }\r\n }\r\n else if (isTrue(vnode.isComment)) {\r\n vnode.elm = nodeOps.createComment(vnode.text);\r\n insert(parentElm, vnode.elm, refElm);\r\n }\r\n else {\r\n vnode.elm = nodeOps.createTextNode(vnode.text);\r\n insert(parentElm, vnode.elm, refElm);\r\n }\r\n }\r\n function createComponent(vnode, insertedVnodeQueue, parentElm, refElm) {\r\n var i = vnode.data;\r\n if (isDef(i)) {\r\n var isReactivated = isDef(vnode.componentInstance) && i.keepAlive;\r\n if (isDef((i = i.hook)) && isDef((i = i.init))) {\r\n i(vnode, false /* hydrating */);\r\n }\r\n // after calling the init hook, if the vnode is a child component\r\n // it should've created a child instance and mounted it. the child\r\n // component also has set the placeholder vnode's elm.\r\n // in that case we can just return the element and be done.\r\n if (isDef(vnode.componentInstance)) {\r\n initComponent(vnode, insertedVnodeQueue);\r\n insert(parentElm, vnode.elm, refElm);\r\n if (isTrue(isReactivated)) {\r\n reactivateComponent(vnode, insertedVnodeQueue, parentElm, refElm);\r\n }\r\n return true;\r\n }\r\n }\r\n }\r\n function initComponent(vnode, insertedVnodeQueue) {\r\n if (isDef(vnode.data.pendingInsert)) {\r\n insertedVnodeQueue.push.apply(insertedVnodeQueue, vnode.data.pendingInsert);\r\n vnode.data.pendingInsert = null;\r\n }\r\n vnode.elm = vnode.componentInstance.$el;\r\n if (isPatchable(vnode)) {\r\n invokeCreateHooks(vnode, insertedVnodeQueue);\r\n setScope(vnode);\r\n }\r\n else {\r\n // empty component root.\r\n // skip all element-related modules except for ref (#3455)\r\n registerRef(vnode);\r\n // make sure to invoke the insert hook\r\n insertedVnodeQueue.push(vnode);\r\n }\r\n }\r\n function reactivateComponent(vnode, insertedVnodeQueue, parentElm, refElm) {\r\n var i;\r\n // hack for #4339: a reactivated component with inner transition\r\n // does not trigger because the inner node's created hooks are not called\r\n // again. It's not ideal to involve module-specific logic in here but\r\n // there doesn't seem to be a better way to do it.\r\n var innerNode = vnode;\r\n while (innerNode.componentInstance) {\r\n innerNode = innerNode.componentInstance._vnode;\r\n if (isDef((i = innerNode.data)) && isDef((i = i.transition))) {\r\n for (i = 0; i < cbs.activate.length; ++i) {\r\n cbs.activate[i](emptyNode, innerNode);\r\n }\r\n insertedVnodeQueue.push(innerNode);\r\n break;\r\n }\r\n }\r\n // unlike a newly created component,\r\n // a reactivated keep-alive component doesn't insert itself\r\n insert(parentElm, vnode.elm, refElm);\r\n }\r\n function insert(parent, elm, ref) {\r\n if (isDef(parent)) {\r\n if (isDef(ref)) {\r\n if (nodeOps.parentNode(ref) === parent) {\r\n nodeOps.insertBefore(parent, elm, ref);\r\n }\r\n }\r\n else {\r\n nodeOps.appendChild(parent, elm);\r\n }\r\n }\r\n }\r\n function createChildren(vnode, children, insertedVnodeQueue) {\r\n if (isArray(children)) {\r\n if (true) {\r\n checkDuplicateKeys(children);\r\n }\r\n for (var i_1 = 0; i_1 < children.length; ++i_1) {\r\n createElm(children[i_1], insertedVnodeQueue, vnode.elm, null, true, children, i_1);\r\n }\r\n }\r\n else if (isPrimitive(vnode.text)) {\r\n nodeOps.appendChild(vnode.elm, nodeOps.createTextNode(String(vnode.text)));\r\n }\r\n }\r\n function isPatchable(vnode) {\r\n while (vnode.componentInstance) {\r\n vnode = vnode.componentInstance._vnode;\r\n }\r\n return isDef(vnode.tag);\r\n }\r\n function invokeCreateHooks(vnode, insertedVnodeQueue) {\r\n for (var i_2 = 0; i_2 < cbs.create.length; ++i_2) {\r\n cbs.create[i_2](emptyNode, vnode);\r\n }\r\n i = vnode.data.hook; // Reuse variable\r\n if (isDef(i)) {\r\n if (isDef(i.create))\r\n i.create(emptyNode, vnode);\r\n if (isDef(i.insert))\r\n insertedVnodeQueue.push(vnode);\r\n }\r\n }\r\n // set scope id attribute for scoped CSS.\r\n // this is implemented as a special case to avoid the overhead\r\n // of going through the normal attribute patching process.\r\n function setScope(vnode) {\r\n var i;\r\n if (isDef((i = vnode.fnScopeId))) {\r\n nodeOps.setStyleScope(vnode.elm, i);\r\n }\r\n else {\r\n var ancestor = vnode;\r\n while (ancestor) {\r\n if (isDef((i = ancestor.context)) && isDef((i = i.$options._scopeId))) {\r\n nodeOps.setStyleScope(vnode.elm, i);\r\n }\r\n ancestor = ancestor.parent;\r\n }\r\n }\r\n // for slot content they should also get the scopeId from the host instance.\r\n if (isDef((i = activeInstance)) &&\r\n i !== vnode.context &&\r\n i !== vnode.fnContext &&\r\n isDef((i = i.$options._scopeId))) {\r\n nodeOps.setStyleScope(vnode.elm, i);\r\n }\r\n }\r\n function addVnodes(parentElm, refElm, vnodes, startIdx, endIdx, insertedVnodeQueue) {\r\n for (; startIdx <= endIdx; ++startIdx) {\r\n createElm(vnodes[startIdx], insertedVnodeQueue, parentElm, refElm, false, vnodes, startIdx);\r\n }\r\n }\r\n function invokeDestroyHook(vnode) {\r\n var i, j;\r\n var data = vnode.data;\r\n if (isDef(data)) {\r\n if (isDef((i = data.hook)) && isDef((i = i.destroy)))\r\n i(vnode);\r\n for (i = 0; i < cbs.destroy.length; ++i)\r\n cbs.destroy[i](vnode);\r\n }\r\n if (isDef((i = vnode.children))) {\r\n for (j = 0; j < vnode.children.length; ++j) {\r\n invokeDestroyHook(vnode.children[j]);\r\n }\r\n }\r\n }\r\n function removeVnodes(vnodes, startIdx, endIdx) {\r\n for (; startIdx <= endIdx; ++startIdx) {\r\n var ch = vnodes[startIdx];\r\n if (isDef(ch)) {\r\n if (isDef(ch.tag)) {\r\n removeAndInvokeRemoveHook(ch);\r\n invokeDestroyHook(ch);\r\n }\r\n else {\r\n // Text node\r\n removeNode(ch.elm);\r\n }\r\n }\r\n }\r\n }\r\n function removeAndInvokeRemoveHook(vnode, rm) {\r\n if (isDef(rm) || isDef(vnode.data)) {\r\n var i_3;\r\n var listeners = cbs.remove.length + 1;\r\n if (isDef(rm)) {\r\n // we have a recursively passed down rm callback\r\n // increase the listeners count\r\n rm.listeners += listeners;\r\n }\r\n else {\r\n // directly removing\r\n rm = createRmCb(vnode.elm, listeners);\r\n }\r\n // recursively invoke hooks on child component root node\r\n if (isDef((i_3 = vnode.componentInstance)) &&\r\n isDef((i_3 = i_3._vnode)) &&\r\n isDef(i_3.data)) {\r\n removeAndInvokeRemoveHook(i_3, rm);\r\n }\r\n for (i_3 = 0; i_3 < cbs.remove.length; ++i_3) {\r\n cbs.remove[i_3](vnode, rm);\r\n }\r\n if (isDef((i_3 = vnode.data.hook)) && isDef((i_3 = i_3.remove))) {\r\n i_3(vnode, rm);\r\n }\r\n else {\r\n rm();\r\n }\r\n }\r\n else {\r\n removeNode(vnode.elm);\r\n }\r\n }\r\n function updateChildren(parentElm, oldCh, newCh, insertedVnodeQueue, removeOnly) {\r\n var oldStartIdx = 0;\r\n var newStartIdx = 0;\r\n var oldEndIdx = oldCh.length - 1;\r\n var oldStartVnode = oldCh[0];\r\n var oldEndVnode = oldCh[oldEndIdx];\r\n var newEndIdx = newCh.length - 1;\r\n var newStartVnode = newCh[0];\r\n var newEndVnode = newCh[newEndIdx];\r\n var oldKeyToIdx, idxInOld, vnodeToMove, refElm;\r\n // removeOnly is a special flag used only by <transition-group>\r\n // to ensure removed elements stay in correct relative positions\r\n // during leaving transitions\r\n var canMove = !removeOnly;\r\n if (true) {\r\n checkDuplicateKeys(newCh);\r\n }\r\n while (oldStartIdx <= oldEndIdx && newStartIdx <= newEndIdx) {\r\n if (isUndef(oldStartVnode)) {\r\n oldStartVnode = oldCh[++oldStartIdx]; // Vnode has been moved left\r\n }\r\n else if (isUndef(oldEndVnode)) {\r\n oldEndVnode = oldCh[--oldEndIdx];\r\n }\r\n else if (sameVnode(oldStartVnode, newStartVnode)) {\r\n patchVnode(oldStartVnode, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);\r\n oldStartVnode = oldCh[++oldStartIdx];\r\n newStartVnode = newCh[++newStartIdx];\r\n }\r\n else if (sameVnode(oldEndVnode, newEndVnode)) {\r\n patchVnode(oldEndVnode, newEndVnode, insertedVnodeQueue, newCh, newEndIdx);\r\n oldEndVnode = oldCh[--oldEndIdx];\r\n newEndVnode = newCh[--newEndIdx];\r\n }\r\n else if (sameVnode(oldStartVnode, newEndVnode)) {\r\n // Vnode moved right\r\n patchVnode(oldStartVnode, newEndVnode, insertedVnodeQueue, newCh, newEndIdx);\r\n canMove &&\r\n nodeOps.insertBefore(parentElm, oldStartVnode.elm, nodeOps.nextSibling(oldEndVnode.elm));\r\n oldStartVnode = oldCh[++oldStartIdx];\r\n newEndVnode = newCh[--newEndIdx];\r\n }\r\n else if (sameVnode(oldEndVnode, newStartVnode)) {\r\n // Vnode moved left\r\n patchVnode(oldEndVnode, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);\r\n canMove &&\r\n nodeOps.insertBefore(parentElm, oldEndVnode.elm, oldStartVnode.elm);\r\n oldEndVnode = oldCh[--oldEndIdx];\r\n newStartVnode = newCh[++newStartIdx];\r\n }\r\n else {\r\n if (isUndef(oldKeyToIdx))\r\n oldKeyToIdx = createKeyToOldIdx(oldCh, oldStartIdx, oldEndIdx);\r\n idxInOld = isDef(newStartVnode.key)\r\n ? oldKeyToIdx[newStartVnode.key]\r\n : findIdxInOld(newStartVnode, oldCh, oldStartIdx, oldEndIdx);\r\n if (isUndef(idxInOld)) {\r\n // New element\r\n createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm, false, newCh, newStartIdx);\r\n }\r\n else {\r\n vnodeToMove = oldCh[idxInOld];\r\n if (sameVnode(vnodeToMove, newStartVnode)) {\r\n patchVnode(vnodeToMove, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);\r\n oldCh[idxInOld] = undefined;\r\n canMove &&\r\n nodeOps.insertBefore(parentElm, vnodeToMove.elm, oldStartVnode.elm);\r\n }\r\n else {\r\n // same key but different element. treat as new element\r\n createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm, false, newCh, newStartIdx);\r\n }\r\n }\r\n newStartVnode = newCh[++newStartIdx];\r\n }\r\n }\r\n if (oldStartIdx > oldEndIdx) {\r\n refElm = isUndef(newCh[newEndIdx + 1]) ? null : newCh[newEndIdx + 1].elm;\r\n addVnodes(parentElm, refElm, newCh, newStartIdx, newEndIdx, insertedVnodeQueue);\r\n }\r\n else if (newStartIdx > newEndIdx) {\r\n removeVnodes(oldCh, oldStartIdx, oldEndIdx);\r\n }\r\n }\r\n function checkDuplicateKeys(children) {\r\n var seenKeys = {};\r\n for (var i_4 = 0; i_4 < children.length; i_4++) {\r\n var vnode = children[i_4];\r\n var key = vnode.key;\r\n if (isDef(key)) {\r\n if (seenKeys[key]) {\r\n warn$2(\"Duplicate keys detected: '\".concat(key, \"'. This may cause an update error.\"), vnode.context);\r\n }\r\n else {\r\n seenKeys[key] = true;\r\n }\r\n }\r\n }\r\n }\r\n function findIdxInOld(node, oldCh, start, end) {\r\n for (var i_5 = start; i_5 < end; i_5++) {\r\n var c = oldCh[i_5];\r\n if (isDef(c) && sameVnode(node, c))\r\n return i_5;\r\n }\r\n }\r\n function patchVnode(oldVnode, vnode, insertedVnodeQueue, ownerArray, index, removeOnly) {\r\n if (oldVnode === vnode) {\r\n return;\r\n }\r\n if (isDef(vnode.elm) && isDef(ownerArray)) {\r\n // clone reused vnode\r\n vnode = ownerArray[index] = cloneVNode(vnode);\r\n }\r\n var elm = (vnode.elm = oldVnode.elm);\r\n if (isTrue(oldVnode.isAsyncPlaceholder)) {\r\n if (isDef(vnode.asyncFactory.resolved)) {\r\n hydrate(oldVnode.elm, vnode, insertedVnodeQueue);\r\n }\r\n else {\r\n vnode.isAsyncPlaceholder = true;\r\n }\r\n return;\r\n }\r\n // reuse element for static trees.\r\n // note we only do this if the vnode is cloned -\r\n // if the new node is not cloned it means the render functions have been\r\n // reset by the hot-reload-api and we need to do a proper re-render.\r\n if (isTrue(vnode.isStatic) &&\r\n isTrue(oldVnode.isStatic) &&\r\n vnode.key === oldVnode.key &&\r\n (isTrue(vnode.isCloned) || isTrue(vnode.isOnce))) {\r\n vnode.componentInstance = oldVnode.componentInstance;\r\n return;\r\n }\r\n var i;\r\n var data = vnode.data;\r\n if (isDef(data) && isDef((i = data.hook)) && isDef((i = i.prepatch))) {\r\n i(oldVnode, vnode);\r\n }\r\n var oldCh = oldVnode.children;\r\n var ch = vnode.children;\r\n if (isDef(data) && isPatchable(vnode)) {\r\n for (i = 0; i < cbs.update.length; ++i)\r\n cbs.update[i](oldVnode, vnode);\r\n if (isDef((i = data.hook)) && isDef((i = i.update)))\r\n i(oldVnode, vnode);\r\n }\r\n if (isUndef(vnode.text)) {\r\n if (isDef(oldCh) && isDef(ch)) {\r\n if (oldCh !== ch)\r\n updateChildren(elm, oldCh, ch, insertedVnodeQueue, removeOnly);\r\n }\r\n else if (isDef(ch)) {\r\n if (true) {\r\n checkDuplicateKeys(ch);\r\n }\r\n if (isDef(oldVnode.text))\r\n nodeOps.setTextContent(elm, '');\r\n addVnodes(elm, null, ch, 0, ch.length - 1, insertedVnodeQueue);\r\n }\r\n else if (isDef(oldCh)) {\r\n removeVnodes(oldCh, 0, oldCh.length - 1);\r\n }\r\n else if (isDef(oldVnode.text)) {\r\n nodeOps.setTextContent(elm, '');\r\n }\r\n }\r\n else if (oldVnode.text !== vnode.text) {\r\n nodeOps.setTextContent(elm, vnode.text);\r\n }\r\n if (isDef(data)) {\r\n if (isDef((i = data.hook)) && isDef((i = i.postpatch)))\r\n i(oldVnode, vnode);\r\n }\r\n }\r\n function invokeInsertHook(vnode, queue, initial) {\r\n // delay insert hooks for component root nodes, invoke them after the\r\n // element is really inserted\r\n if (isTrue(initial) && isDef(vnode.parent)) {\r\n vnode.parent.data.pendingInsert = queue;\r\n }\r\n else {\r\n for (var i_6 = 0; i_6 < queue.length; ++i_6) {\r\n queue[i_6].data.hook.insert(queue[i_6]);\r\n }\r\n }\r\n }\r\n var hydrationBailed = false;\r\n // list of modules that can skip create hook during hydration because they\r\n // are already rendered on the client or has no need for initialization\r\n // Note: style is excluded because it relies on initial clone for future\r\n // deep updates (#7063).\r\n var isRenderedModule = makeMap('attrs,class,staticClass,staticStyle,key');\r\n // Note: this is a browser-only function so we can assume elms are DOM nodes.\r\n function hydrate(elm, vnode, insertedVnodeQueue, inVPre) {\r\n var i;\r\n var tag = vnode.tag, data = vnode.data, children = vnode.children;\r\n inVPre = inVPre || (data && data.pre);\r\n vnode.elm = elm;\r\n if (isTrue(vnode.isComment) && isDef(vnode.asyncFactory)) {\r\n vnode.isAsyncPlaceholder = true;\r\n return true;\r\n }\r\n // assert node match\r\n if (true) {\r\n if (!assertNodeMatch(elm, vnode, inVPre)) {\r\n return false;\r\n }\r\n }\r\n if (isDef(data)) {\r\n if (isDef((i = data.hook)) && isDef((i = i.init)))\r\n i(vnode, true /* hydrating */);\r\n if (isDef((i = vnode.componentInstance))) {\r\n // child component. it should have hydrated its own tree.\r\n initComponent(vnode, insertedVnodeQueue);\r\n return true;\r\n }\r\n }\r\n if (isDef(tag)) {\r\n if (isDef(children)) {\r\n // empty element, allow client to pick up and populate children\r\n if (!elm.hasChildNodes()) {\r\n createChildren(vnode, children, insertedVnodeQueue);\r\n }\r\n else {\r\n // v-html and domProps: innerHTML\r\n if (isDef((i = data)) &&\r\n isDef((i = i.domProps)) &&\r\n isDef((i = i.innerHTML))) {\r\n if (i !== elm.innerHTML) {\r\n /* istanbul ignore if */\r\n if ( true &&\r\n typeof console !== 'undefined' &&\r\n !hydrationBailed) {\r\n hydrationBailed = true;\r\n console.warn('Parent: ', elm);\r\n console.warn('server innerHTML: ', i);\r\n console.warn('client innerHTML: ', elm.innerHTML);\r\n }\r\n return false;\r\n }\r\n }\r\n else {\r\n // iterate and compare children lists\r\n var childrenMatch = true;\r\n var childNode = elm.firstChild;\r\n for (var i_7 = 0; i_7 < children.length; i_7++) {\r\n if (!childNode ||\r\n !hydrate(childNode, children[i_7], insertedVnodeQueue, inVPre)) {\r\n childrenMatch = false;\r\n break;\r\n }\r\n childNode = childNode.nextSibling;\r\n }\r\n // if childNode is not null, it means the actual childNodes list is\r\n // longer than the virtual children list.\r\n if (!childrenMatch || childNode) {\r\n /* istanbul ignore if */\r\n if ( true &&\r\n typeof console !== 'undefined' &&\r\n !hydrationBailed) {\r\n hydrationBailed = true;\r\n console.warn('Parent: ', elm);\r\n console.warn('Mismatching childNodes vs. VNodes: ', elm.childNodes, children);\r\n }\r\n return false;\r\n }\r\n }\r\n }\r\n }\r\n if (isDef(data)) {\r\n var fullInvoke = false;\r\n for (var key in data) {\r\n if (!isRenderedModule(key)) {\r\n fullInvoke = true;\r\n invokeCreateHooks(vnode, insertedVnodeQueue);\r\n break;\r\n }\r\n }\r\n if (!fullInvoke && data['class']) {\r\n // ensure collecting deps for deep class bindings for future updates\r\n traverse(data['class']);\r\n }\r\n }\r\n }\r\n else if (elm.data !== vnode.text) {\r\n elm.data = vnode.text;\r\n }\r\n return true;\r\n }\r\n function assertNodeMatch(node, vnode, inVPre) {\r\n if (isDef(vnode.tag)) {\r\n return (vnode.tag.indexOf('vue-component') === 0 ||\r\n (!isUnknownElement(vnode, inVPre) &&\r\n vnode.tag.toLowerCase() ===\r\n (node.tagName && node.tagName.toLowerCase())));\r\n }\r\n else {\r\n return node.nodeType === (vnode.isComment ? 8 : 3);\r\n }\r\n }\r\n return function patch(oldVnode, vnode, hydrating, removeOnly) {\r\n if (isUndef(vnode)) {\r\n if (isDef(oldVnode))\r\n invokeDestroyHook(oldVnode);\r\n return;\r\n }\r\n var isInitialPatch = false;\r\n var insertedVnodeQueue = [];\r\n if (isUndef(oldVnode)) {\r\n // empty mount (likely as component), create new root element\r\n isInitialPatch = true;\r\n createElm(vnode, insertedVnodeQueue);\r\n }\r\n else {\r\n var isRealElement = isDef(oldVnode.nodeType);\r\n if (!isRealElement && sameVnode(oldVnode, vnode)) {\r\n // patch existing root node\r\n patchVnode(oldVnode, vnode, insertedVnodeQueue, null, null, removeOnly);\r\n }\r\n else {\r\n if (isRealElement) {\r\n // mounting to a real element\r\n // check if this is server-rendered content and if we can perform\r\n // a successful hydration.\r\n if (oldVnode.nodeType === 1 && oldVnode.hasAttribute(SSR_ATTR)) {\r\n oldVnode.removeAttribute(SSR_ATTR);\r\n hydrating = true;\r\n }\r\n if (isTrue(hydrating)) {\r\n if (hydrate(oldVnode, vnode, insertedVnodeQueue)) {\r\n invokeInsertHook(vnode, insertedVnodeQueue, true);\r\n return oldVnode;\r\n }\r\n else if (true) {\r\n warn$2('The client-side rendered virtual DOM tree is not matching ' +\r\n 'server-rendered content. This is likely caused by incorrect ' +\r\n 'HTML markup, for example nesting block-level elements inside ' +\r\n '<p>, or missing <tbody>. Bailing hydration and performing ' +\r\n 'full client-side render.');\r\n }\r\n }\r\n // either not server-rendered, or hydration failed.\r\n // create an empty node and replace it\r\n oldVnode = emptyNodeAt(oldVnode);\r\n }\r\n // replacing existing element\r\n var oldElm = oldVnode.elm;\r\n var parentElm = nodeOps.parentNode(oldElm);\r\n // create new node\r\n createElm(vnode, insertedVnodeQueue, \r\n // extremely rare edge case: do not insert if old element is in a\r\n // leaving transition. Only happens when combining transition +\r\n // keep-alive + HOCs. (#4590)\r\n oldElm._leaveCb ? null : parentElm, nodeOps.nextSibling(oldElm));\r\n // update parent placeholder node element, recursively\r\n if (isDef(vnode.parent)) {\r\n var ancestor = vnode.parent;\r\n var patchable = isPatchable(vnode);\r\n while (ancestor) {\r\n for (var i_8 = 0; i_8 < cbs.destroy.length; ++i_8) {\r\n cbs.destroy[i_8](ancestor);\r\n }\r\n ancestor.elm = vnode.elm;\r\n if (patchable) {\r\n for (var i_9 = 0; i_9 < cbs.create.length; ++i_9) {\r\n cbs.create[i_9](emptyNode, ancestor);\r\n }\r\n // #6513\r\n // invoke insert hooks that may have been merged by create hooks.\r\n // e.g. for directives that uses the \"inserted\" hook.\r\n var insert_1 = ancestor.data.hook.insert;\r\n if (insert_1.merged) {\r\n // start at index 1 to avoid re-invoking component mounted hook\r\n for (var i_10 = 1; i_10 < insert_1.fns.length; i_10++) {\r\n insert_1.fns[i_10]();\r\n }\r\n }\r\n }\r\n else {\r\n registerRef(ancestor);\r\n }\r\n ancestor = ancestor.parent;\r\n }\r\n }\r\n // destroy old node\r\n if (isDef(parentElm)) {\r\n removeVnodes([oldVnode], 0, 0);\r\n }\r\n else if (isDef(oldVnode.tag)) {\r\n invokeDestroyHook(oldVnode);\r\n }\r\n }\r\n }\r\n invokeInsertHook(vnode, insertedVnodeQueue, isInitialPatch);\r\n return vnode.elm;\r\n };\r\n}\n\nvar directives$1 = {\r\n create: updateDirectives,\r\n update: updateDirectives,\r\n destroy: function unbindDirectives(vnode) {\r\n // @ts-expect-error emptyNode is not VNodeWithData\r\n updateDirectives(vnode, emptyNode);\r\n }\r\n};\r\nfunction updateDirectives(oldVnode, vnode) {\r\n if (oldVnode.data.directives || vnode.data.directives) {\r\n _update(oldVnode, vnode);\r\n }\r\n}\r\nfunction _update(oldVnode, vnode) {\r\n var isCreate = oldVnode === emptyNode;\r\n var isDestroy = vnode === emptyNode;\r\n var oldDirs = normalizeDirectives(oldVnode.data.directives, oldVnode.context);\r\n var newDirs = normalizeDirectives(vnode.data.directives, vnode.context);\r\n var dirsWithInsert = [];\r\n var dirsWithPostpatch = [];\r\n var key, oldDir, dir;\r\n for (key in newDirs) {\r\n oldDir = oldDirs[key];\r\n dir = newDirs[key];\r\n if (!oldDir) {\r\n // new directive, bind\r\n callHook(dir, 'bind', vnode, oldVnode);\r\n if (dir.def && dir.def.inserted) {\r\n dirsWithInsert.push(dir);\r\n }\r\n }\r\n else {\r\n // existing directive, update\r\n dir.oldValue = oldDir.value;\r\n dir.oldArg = oldDir.arg;\r\n callHook(dir, 'update', vnode, oldVnode);\r\n if (dir.def && dir.def.componentUpdated) {\r\n dirsWithPostpatch.push(dir);\r\n }\r\n }\r\n }\r\n if (dirsWithInsert.length) {\r\n var callInsert = function () {\r\n for (var i = 0; i < dirsWithInsert.length; i++) {\r\n callHook(dirsWithInsert[i], 'inserted', vnode, oldVnode);\r\n }\r\n };\r\n if (isCreate) {\r\n mergeVNodeHook(vnode, 'insert', callInsert);\r\n }\r\n else {\r\n callInsert();\r\n }\r\n }\r\n if (dirsWithPostpatch.length) {\r\n mergeVNodeHook(vnode, 'postpatch', function () {\r\n for (var i = 0; i < dirsWithPostpatch.length; i++) {\r\n callHook(dirsWithPostpatch[i], 'componentUpdated', vnode, oldVnode);\r\n }\r\n });\r\n }\r\n if (!isCreate) {\r\n for (key in oldDirs) {\r\n if (!newDirs[key]) {\r\n // no longer present, unbind\r\n callHook(oldDirs[key], 'unbind', oldVnode, oldVnode, isDestroy);\r\n }\r\n }\r\n }\r\n}\r\nvar emptyModifiers = Object.create(null);\r\nfunction normalizeDirectives(dirs, vm) {\r\n var res = Object.create(null);\r\n if (!dirs) {\r\n // $flow-disable-line\r\n return res;\r\n }\r\n var i, dir;\r\n for (i = 0; i < dirs.length; i++) {\r\n dir = dirs[i];\r\n if (!dir.modifiers) {\r\n // $flow-disable-line\r\n dir.modifiers = emptyModifiers;\r\n }\r\n res[getRawDirName(dir)] = dir;\r\n if (vm._setupState && vm._setupState.__sfc) {\r\n var setupDef = dir.def || resolveAsset(vm, '_setupState', 'v-' + dir.name);\r\n if (typeof setupDef === 'function') {\r\n dir.def = {\r\n bind: setupDef,\r\n update: setupDef,\r\n };\r\n }\r\n else {\r\n dir.def = setupDef;\r\n }\r\n }\r\n dir.def = dir.def || resolveAsset(vm.$options, 'directives', dir.name, true);\r\n }\r\n // $flow-disable-line\r\n return res;\r\n}\r\nfunction getRawDirName(dir) {\r\n return (dir.rawName || \"\".concat(dir.name, \".\").concat(Object.keys(dir.modifiers || {}).join('.')));\r\n}\r\nfunction callHook(dir, hook, vnode, oldVnode, isDestroy) {\r\n var fn = dir.def && dir.def[hook];\r\n if (fn) {\r\n try {\r\n fn(vnode.elm, dir, vnode, oldVnode, isDestroy);\r\n }\r\n catch (e) {\r\n handleError(e, vnode.context, \"directive \".concat(dir.name, \" \").concat(hook, \" hook\"));\r\n }\r\n }\r\n}\n\nvar baseModules = [ref, directives$1];\n\nfunction updateAttrs(oldVnode, vnode) {\r\n var opts = vnode.componentOptions;\r\n if (isDef(opts) && opts.Ctor.options.inheritAttrs === false) {\r\n return;\r\n }\r\n if (isUndef(oldVnode.data.attrs) && isUndef(vnode.data.attrs)) {\r\n return;\r\n }\r\n var key, cur, old;\r\n var elm = vnode.elm;\r\n var oldAttrs = oldVnode.data.attrs || {};\r\n var attrs = vnode.data.attrs || {};\r\n // clone observed objects, as the user probably wants to mutate it\r\n if (isDef(attrs.__ob__) || isTrue(attrs._v_attr_proxy)) {\r\n attrs = vnode.data.attrs = extend({}, attrs);\r\n }\r\n for (key in attrs) {\r\n cur = attrs[key];\r\n old = oldAttrs[key];\r\n if (old !== cur) {\r\n setAttr(elm, key, cur, vnode.data.pre);\r\n }\r\n }\r\n // #4391: in IE9, setting type can reset value for input[type=radio]\r\n // #6666: IE/Edge forces progress value down to 1 before setting a max\r\n /* istanbul ignore if */\r\n if ((isIE || isEdge) && attrs.value !== oldAttrs.value) {\r\n setAttr(elm, 'value', attrs.value);\r\n }\r\n for (key in oldAttrs) {\r\n if (isUndef(attrs[key])) {\r\n if (isXlink(key)) {\r\n elm.removeAttributeNS(xlinkNS, getXlinkProp(key));\r\n }\r\n else if (!isEnumeratedAttr(key)) {\r\n elm.removeAttribute(key);\r\n }\r\n }\r\n }\r\n}\r\nfunction setAttr(el, key, value, isInPre) {\r\n if (isInPre || el.tagName.indexOf('-') > -1) {\r\n baseSetAttr(el, key, value);\r\n }\r\n else if (isBooleanAttr(key)) {\r\n // set attribute for blank value\r\n // e.g. <option disabled>Select one</option>\r\n if (isFalsyAttrValue(value)) {\r\n el.removeAttribute(key);\r\n }\r\n else {\r\n // technically allowfullscreen is a boolean attribute for <iframe>,\r\n // but Flash expects a value of \"true\" when used on <embed> tag\r\n value = key === 'allowfullscreen' && el.tagName === 'EMBED' ? 'true' : key;\r\n el.setAttribute(key, value);\r\n }\r\n }\r\n else if (isEnumeratedAttr(key)) {\r\n el.setAttribute(key, convertEnumeratedValue(key, value));\r\n }\r\n else if (isXlink(key)) {\r\n if (isFalsyAttrValue(value)) {\r\n el.removeAttributeNS(xlinkNS, getXlinkProp(key));\r\n }\r\n else {\r\n el.setAttributeNS(xlinkNS, key, value);\r\n }\r\n }\r\n else {\r\n baseSetAttr(el, key, value);\r\n }\r\n}\r\nfunction baseSetAttr(el, key, value) {\r\n if (isFalsyAttrValue(value)) {\r\n el.removeAttribute(key);\r\n }\r\n else {\r\n // #7138: IE10 & 11 fires input event when setting placeholder on\r\n // <textarea>... block the first input event and remove the blocker\r\n // immediately.\r\n /* istanbul ignore if */\r\n if (isIE &&\r\n !isIE9 &&\r\n el.tagName === 'TEXTAREA' &&\r\n key === 'placeholder' &&\r\n value !== '' &&\r\n !el.__ieph) {\r\n var blocker_1 = function (e) {\r\n e.stopImmediatePropagation();\r\n el.removeEventListener('input', blocker_1);\r\n };\r\n el.addEventListener('input', blocker_1);\r\n // $flow-disable-line\r\n el.__ieph = true; /* IE placeholder patched */\r\n }\r\n el.setAttribute(key, value);\r\n }\r\n}\r\nvar attrs = {\r\n create: updateAttrs,\r\n update: updateAttrs\r\n};\n\nfunction updateClass(oldVnode, vnode) {\r\n var el = vnode.elm;\r\n var data = vnode.data;\r\n var oldData = oldVnode.data;\r\n if (isUndef(data.staticClass) &&\r\n isUndef(data.class) &&\r\n (isUndef(oldData) ||\r\n (isUndef(oldData.staticClass) && isUndef(oldData.class)))) {\r\n return;\r\n }\r\n var cls = genClassForVnode(vnode);\r\n // handle transition classes\r\n var transitionClass = el._transitionClasses;\r\n if (isDef(transitionClass)) {\r\n cls = concat(cls, stringifyClass(transitionClass));\r\n }\r\n // set the class\r\n if (cls !== el._prevClass) {\r\n el.setAttribute('class', cls);\r\n el._prevClass = cls;\r\n }\r\n}\r\nvar klass$1 = {\r\n create: updateClass,\r\n update: updateClass\r\n};\n\nvar validDivisionCharRE = /[\\w).+\\-_$\\]]/;\r\nfunction parseFilters(exp) {\r\n var inSingle = false;\r\n var inDouble = false;\r\n var inTemplateString = false;\r\n var inRegex = false;\r\n var curly = 0;\r\n var square = 0;\r\n var paren = 0;\r\n var lastFilterIndex = 0;\r\n var c, prev, i, expression, filters;\r\n for (i = 0; i < exp.length; i++) {\r\n prev = c;\r\n c = exp.charCodeAt(i);\r\n if (inSingle) {\r\n if (c === 0x27 && prev !== 0x5c)\r\n inSingle = false;\r\n }\r\n else if (inDouble) {\r\n if (c === 0x22 && prev !== 0x5c)\r\n inDouble = false;\r\n }\r\n else if (inTemplateString) {\r\n if (c === 0x60 && prev !== 0x5c)\r\n inTemplateString = false;\r\n }\r\n else if (inRegex) {\r\n if (c === 0x2f && prev !== 0x5c)\r\n inRegex = false;\r\n }\r\n else if (c === 0x7c && // pipe\r\n exp.charCodeAt(i + 1) !== 0x7c &&\r\n exp.charCodeAt(i - 1) !== 0x7c &&\r\n !curly &&\r\n !square &&\r\n !paren) {\r\n if (expression === undefined) {\r\n // first filter, end of expression\r\n lastFilterIndex = i + 1;\r\n expression = exp.slice(0, i).trim();\r\n }\r\n else {\r\n pushFilter();\r\n }\r\n }\r\n else {\r\n switch (c) {\r\n case 0x22:\r\n inDouble = true;\r\n break; // \"\r\n case 0x27:\r\n inSingle = true;\r\n break; // '\r\n case 0x60:\r\n inTemplateString = true;\r\n break; // `\r\n case 0x28:\r\n paren++;\r\n break; // (\r\n case 0x29:\r\n paren--;\r\n break; // )\r\n case 0x5b:\r\n square++;\r\n break; // [\r\n case 0x5d:\r\n square--;\r\n break; // ]\r\n case 0x7b:\r\n curly++;\r\n break; // {\r\n case 0x7d:\r\n curly--;\r\n break; // }\r\n }\r\n if (c === 0x2f) {\r\n // /\r\n var j = i - 1;\r\n var p \r\n // find first non-whitespace prev char\r\n = void 0;\r\n // find first non-whitespace prev char\r\n for (; j >= 0; j--) {\r\n p = exp.charAt(j);\r\n if (p !== ' ')\r\n break;\r\n }\r\n if (!p || !validDivisionCharRE.test(p)) {\r\n inRegex = true;\r\n }\r\n }\r\n }\r\n }\r\n if (expression === undefined) {\r\n expression = exp.slice(0, i).trim();\r\n }\r\n else if (lastFilterIndex !== 0) {\r\n pushFilter();\r\n }\r\n function pushFilter() {\r\n (filters || (filters = [])).push(exp.slice(lastFilterIndex, i).trim());\r\n lastFilterIndex = i + 1;\r\n }\r\n if (filters) {\r\n for (i = 0; i < filters.length; i++) {\r\n expression = wrapFilter(expression, filters[i]);\r\n }\r\n }\r\n return expression;\r\n}\r\nfunction wrapFilter(exp, filter) {\r\n var i = filter.indexOf('(');\r\n if (i < 0) {\r\n // _f: resolveFilter\r\n return \"_f(\\\"\".concat(filter, \"\\\")(\").concat(exp, \")\");\r\n }\r\n else {\r\n var name_1 = filter.slice(0, i);\r\n var args = filter.slice(i + 1);\r\n return \"_f(\\\"\".concat(name_1, \"\\\")(\").concat(exp).concat(args !== ')' ? ',' + args : args);\r\n }\r\n}\n\n/* eslint-disable no-unused-vars */\r\nfunction baseWarn(msg, range) {\r\n console.error(\"[Vue compiler]: \".concat(msg));\r\n}\r\n/* eslint-enable no-unused-vars */\r\nfunction pluckModuleFunction(modules, key) {\r\n return modules ? modules.map(function (m) { return m[key]; }).filter(function (_) { return _; }) : [];\r\n}\r\nfunction addProp(el, name, value, range, dynamic) {\r\n (el.props || (el.props = [])).push(rangeSetItem({ name: name, value: value, dynamic: dynamic }, range));\r\n el.plain = false;\r\n}\r\nfunction addAttr(el, name, value, range, dynamic) {\r\n var attrs = dynamic\r\n ? el.dynamicAttrs || (el.dynamicAttrs = [])\r\n : el.attrs || (el.attrs = []);\r\n attrs.push(rangeSetItem({ name: name, value: value, dynamic: dynamic }, range));\r\n el.plain = false;\r\n}\r\n// add a raw attr (use this in preTransforms)\r\nfunction addRawAttr(el, name, value, range) {\r\n el.attrsMap[name] = value;\r\n el.attrsList.push(rangeSetItem({ name: name, value: value }, range));\r\n}\r\nfunction addDirective(el, name, rawName, value, arg, isDynamicArg, modifiers, range) {\r\n (el.directives || (el.directives = [])).push(rangeSetItem({\r\n name: name,\r\n rawName: rawName,\r\n value: value,\r\n arg: arg,\r\n isDynamicArg: isDynamicArg,\r\n modifiers: modifiers\r\n }, range));\r\n el.plain = false;\r\n}\r\nfunction prependModifierMarker(symbol, name, dynamic) {\r\n return dynamic ? \"_p(\".concat(name, \",\\\"\").concat(symbol, \"\\\")\") : symbol + name; // mark the event as captured\r\n}\r\nfunction addHandler(el, name, value, modifiers, important, warn, range, dynamic) {\r\n modifiers = modifiers || emptyObject;\r\n // warn prevent and passive modifier\r\n /* istanbul ignore if */\r\n if ( true && warn && modifiers.prevent && modifiers.passive) {\r\n warn(\"passive and prevent can't be used together. \" +\r\n \"Passive handler can't prevent default event.\", range);\r\n }\r\n // normalize click.right and click.middle since they don't actually fire\r\n // this is technically browser-specific, but at least for now browsers are\r\n // the only target envs that have right/middle clicks.\r\n if (modifiers.right) {\r\n if (dynamic) {\r\n name = \"(\".concat(name, \")==='click'?'contextmenu':(\").concat(name, \")\");\r\n }\r\n else if (name === 'click') {\r\n name = 'contextmenu';\r\n delete modifiers.right;\r\n }\r\n }\r\n else if (modifiers.middle) {\r\n if (dynamic) {\r\n name = \"(\".concat(name, \")==='click'?'mouseup':(\").concat(name, \")\");\r\n }\r\n else if (name === 'click') {\r\n name = 'mouseup';\r\n }\r\n }\r\n // check capture modifier\r\n if (modifiers.capture) {\r\n delete modifiers.capture;\r\n name = prependModifierMarker('!', name, dynamic);\r\n }\r\n if (modifiers.once) {\r\n delete modifiers.once;\r\n name = prependModifierMarker('~', name, dynamic);\r\n }\r\n /* istanbul ignore if */\r\n if (modifiers.passive) {\r\n delete modifiers.passive;\r\n name = prependModifierMarker('&', name, dynamic);\r\n }\r\n var events;\r\n if (modifiers.native) {\r\n delete modifiers.native;\r\n events = el.nativeEvents || (el.nativeEvents = {});\r\n }\r\n else {\r\n events = el.events || (el.events = {});\r\n }\r\n var newHandler = rangeSetItem({ value: value.trim(), dynamic: dynamic }, range);\r\n if (modifiers !== emptyObject) {\r\n newHandler.modifiers = modifiers;\r\n }\r\n var handlers = events[name];\r\n /* istanbul ignore if */\r\n if (Array.isArray(handlers)) {\r\n important ? handlers.unshift(newHandler) : handlers.push(newHandler);\r\n }\r\n else if (handlers) {\r\n events[name] = important ? [newHandler, handlers] : [handlers, newHandler];\r\n }\r\n else {\r\n events[name] = newHandler;\r\n }\r\n el.plain = false;\r\n}\r\nfunction getRawBindingAttr(el, name) {\r\n return (el.rawAttrsMap[':' + name] ||\r\n el.rawAttrsMap['v-bind:' + name] ||\r\n el.rawAttrsMap[name]);\r\n}\r\nfunction getBindingAttr(el, name, getStatic) {\r\n var dynamicValue = getAndRemoveAttr(el, ':' + name) || getAndRemoveAttr(el, 'v-bind:' + name);\r\n if (dynamicValue != null) {\r\n return parseFilters(dynamicValue);\r\n }\r\n else if (getStatic !== false) {\r\n var staticValue = getAndRemoveAttr(el, name);\r\n if (staticValue != null) {\r\n return JSON.stringify(staticValue);\r\n }\r\n }\r\n}\r\n// note: this only removes the attr from the Array (attrsList) so that it\r\n// doesn't get processed by processAttrs.\r\n// By default it does NOT remove it from the map (attrsMap) because the map is\r\n// needed during codegen.\r\nfunction getAndRemoveAttr(el, name, removeFromMap) {\r\n var val;\r\n if ((val = el.attrsMap[name]) != null) {\r\n var list = el.attrsList;\r\n for (var i = 0, l = list.length; i < l; i++) {\r\n if (list[i].name === name) {\r\n list.splice(i, 1);\r\n break;\r\n }\r\n }\r\n }\r\n if (removeFromMap) {\r\n delete el.attrsMap[name];\r\n }\r\n return val;\r\n}\r\nfunction getAndRemoveAttrByRegex(el, name) {\r\n var list = el.attrsList;\r\n for (var i = 0, l = list.length; i < l; i++) {\r\n var attr = list[i];\r\n if (name.test(attr.name)) {\r\n list.splice(i, 1);\r\n return attr;\r\n }\r\n }\r\n}\r\nfunction rangeSetItem(item, range) {\r\n if (range) {\r\n if (range.start != null) {\r\n item.start = range.start;\r\n }\r\n if (range.end != null) {\r\n item.end = range.end;\r\n }\r\n }\r\n return item;\r\n}\n\n/**\r\n * Cross-platform code generation for component v-model\r\n */\r\nfunction genComponentModel(el, value, modifiers) {\r\n var _a = modifiers || {}, number = _a.number, trim = _a.trim;\r\n var baseValueExpression = '$$v';\r\n var valueExpression = baseValueExpression;\r\n if (trim) {\r\n valueExpression =\r\n \"(typeof \".concat(baseValueExpression, \" === 'string'\") +\r\n \"? \".concat(baseValueExpression, \".trim()\") +\r\n \": \".concat(baseValueExpression, \")\");\r\n }\r\n if (number) {\r\n valueExpression = \"_n(\".concat(valueExpression, \")\");\r\n }\r\n var assignment = genAssignmentCode(value, valueExpression);\r\n el.model = {\r\n value: \"(\".concat(value, \")\"),\r\n expression: JSON.stringify(value),\r\n callback: \"function (\".concat(baseValueExpression, \") {\").concat(assignment, \"}\")\r\n };\r\n}\r\n/**\r\n * Cross-platform codegen helper for generating v-model value assignment code.\r\n */\r\nfunction genAssignmentCode(value, assignment) {\r\n var res = parseModel(value);\r\n if (res.key === null) {\r\n return \"\".concat(value, \"=\").concat(assignment);\r\n }\r\n else {\r\n return \"$set(\".concat(res.exp, \", \").concat(res.key, \", \").concat(assignment, \")\");\r\n }\r\n}\r\n/**\r\n * Parse a v-model expression into a base path and a final key segment.\r\n * Handles both dot-path and possible square brackets.\r\n *\r\n * Possible cases:\r\n *\r\n * - test\r\n * - test[key]\r\n * - test[test1[key]]\r\n * - test[\"a\"][key]\r\n * - xxx.test[a[a].test1[key]]\r\n * - test.xxx.a[\"asa\"][test1[key]]\r\n *\r\n */\r\nvar len, str, chr, index, expressionPos, expressionEndPos;\r\nfunction parseModel(val) {\r\n // Fix https://github.com/vuejs/vue/pull/7730\r\n // allow v-model=\"obj.val \" (trailing whitespace)\r\n val = val.trim();\r\n len = val.length;\r\n if (val.indexOf('[') < 0 || val.lastIndexOf(']') < len - 1) {\r\n index = val.lastIndexOf('.');\r\n if (index > -1) {\r\n return {\r\n exp: val.slice(0, index),\r\n key: '\"' + val.slice(index + 1) + '\"'\r\n };\r\n }\r\n else {\r\n return {\r\n exp: val,\r\n key: null\r\n };\r\n }\r\n }\r\n str = val;\r\n index = expressionPos = expressionEndPos = 0;\r\n while (!eof()) {\r\n chr = next();\r\n /* istanbul ignore if */\r\n if (isStringStart(chr)) {\r\n parseString(chr);\r\n }\r\n else if (chr === 0x5b) {\r\n parseBracket(chr);\r\n }\r\n }\r\n return {\r\n exp: val.slice(0, expressionPos),\r\n key: val.slice(expressionPos + 1, expressionEndPos)\r\n };\r\n}\r\nfunction next() {\r\n return str.charCodeAt(++index);\r\n}\r\nfunction eof() {\r\n return index >= len;\r\n}\r\nfunction isStringStart(chr) {\r\n return chr === 0x22 || chr === 0x27;\r\n}\r\nfunction parseBracket(chr) {\r\n var inBracket = 1;\r\n expressionPos = index;\r\n while (!eof()) {\r\n chr = next();\r\n if (isStringStart(chr)) {\r\n parseString(chr);\r\n continue;\r\n }\r\n if (chr === 0x5b)\r\n inBracket++;\r\n if (chr === 0x5d)\r\n inBracket--;\r\n if (inBracket === 0) {\r\n expressionEndPos = index;\r\n break;\r\n }\r\n }\r\n}\r\nfunction parseString(chr) {\r\n var stringQuote = chr;\r\n while (!eof()) {\r\n chr = next();\r\n if (chr === stringQuote) {\r\n break;\r\n }\r\n }\r\n}\n\nvar warn$1;\r\n// in some cases, the event used has to be determined at runtime\r\n// so we used some reserved tokens during compile.\r\nvar RANGE_TOKEN = '__r';\r\nvar CHECKBOX_RADIO_TOKEN = '__c';\r\nfunction model$1(el, dir, _warn) {\r\n warn$1 = _warn;\r\n var value = dir.value;\r\n var modifiers = dir.modifiers;\r\n var tag = el.tag;\r\n var type = el.attrsMap.type;\r\n if (true) {\r\n // inputs with type=\"file\" are read only and setting the input's\r\n // value will throw an error.\r\n if (tag === 'input' && type === 'file') {\r\n warn$1(\"<\".concat(el.tag, \" v-model=\\\"\").concat(value, \"\\\" type=\\\"file\\\">:\\n\") +\r\n \"File inputs are read only. Use a v-on:change listener instead.\", el.rawAttrsMap['v-model']);\r\n }\r\n }\r\n if (el.component) {\r\n genComponentModel(el, value, modifiers);\r\n // component v-model doesn't need extra runtime\r\n return false;\r\n }\r\n else if (tag === 'select') {\r\n genSelect(el, value, modifiers);\r\n }\r\n else if (tag === 'input' && type === 'checkbox') {\r\n genCheckboxModel(el, value, modifiers);\r\n }\r\n else if (tag === 'input' && type === 'radio') {\r\n genRadioModel(el, value, modifiers);\r\n }\r\n else if (tag === 'input' || tag === 'textarea') {\r\n genDefaultModel(el, value, modifiers);\r\n }\r\n else if (!config.isReservedTag(tag)) {\r\n genComponentModel(el, value, modifiers);\r\n // component v-model doesn't need extra runtime\r\n return false;\r\n }\r\n else if (true) {\r\n warn$1(\"<\".concat(el.tag, \" v-model=\\\"\").concat(value, \"\\\">: \") +\r\n \"v-model is not supported on this element type. \" +\r\n \"If you are working with contenteditable, it's recommended to \" +\r\n 'wrap a library dedicated for that purpose inside a custom component.', el.rawAttrsMap['v-model']);\r\n }\r\n // ensure runtime directive metadata\r\n return true;\r\n}\r\nfunction genCheckboxModel(el, value, modifiers) {\r\n var number = modifiers && modifiers.number;\r\n var valueBinding = getBindingAttr(el, 'value') || 'null';\r\n var trueValueBinding = getBindingAttr(el, 'true-value') || 'true';\r\n var falseValueBinding = getBindingAttr(el, 'false-value') || 'false';\r\n addProp(el, 'checked', \"Array.isArray(\".concat(value, \")\") +\r\n \"?_i(\".concat(value, \",\").concat(valueBinding, \")>-1\") +\r\n (trueValueBinding === 'true'\r\n ? \":(\".concat(value, \")\")\r\n : \":_q(\".concat(value, \",\").concat(trueValueBinding, \")\")));\r\n addHandler(el, 'change', \"var $$a=\".concat(value, \",\") +\r\n '$$el=$event.target,' +\r\n \"$$c=$$el.checked?(\".concat(trueValueBinding, \"):(\").concat(falseValueBinding, \");\") +\r\n 'if(Array.isArray($$a)){' +\r\n \"var $$v=\".concat(number ? '_n(' + valueBinding + ')' : valueBinding, \",\") +\r\n '$$i=_i($$a,$$v);' +\r\n \"if($$el.checked){$$i<0&&(\".concat(genAssignmentCode(value, '$$a.concat([$$v])'), \")}\") +\r\n \"else{$$i>-1&&(\".concat(genAssignmentCode(value, '$$a.slice(0,$$i).concat($$a.slice($$i+1))'), \")}\") +\r\n \"}else{\".concat(genAssignmentCode(value, '$$c'), \"}\"), null, true);\r\n}\r\nfunction genRadioModel(el, value, modifiers) {\r\n var number = modifiers && modifiers.number;\r\n var valueBinding = getBindingAttr(el, 'value') || 'null';\r\n valueBinding = number ? \"_n(\".concat(valueBinding, \")\") : valueBinding;\r\n addProp(el, 'checked', \"_q(\".concat(value, \",\").concat(valueBinding, \")\"));\r\n addHandler(el, 'change', genAssignmentCode(value, valueBinding), null, true);\r\n}\r\nfunction genSelect(el, value, modifiers) {\r\n var number = modifiers && modifiers.number;\r\n var selectedVal = \"Array.prototype.filter\" +\r\n \".call($event.target.options,function(o){return o.selected})\" +\r\n \".map(function(o){var val = \\\"_value\\\" in o ? o._value : o.value;\" +\r\n \"return \".concat(number ? '_n(val)' : 'val', \"})\");\r\n var assignment = '$event.target.multiple ? $$selectedVal : $$selectedVal[0]';\r\n var code = \"var $$selectedVal = \".concat(selectedVal, \";\");\r\n code = \"\".concat(code, \" \").concat(genAssignmentCode(value, assignment));\r\n addHandler(el, 'change', code, null, true);\r\n}\r\nfunction genDefaultModel(el, value, modifiers) {\r\n var type = el.attrsMap.type;\r\n // warn if v-bind:value conflicts with v-model\r\n // except for inputs with v-bind:type\r\n if (true) {\r\n var value_1 = el.attrsMap['v-bind:value'] || el.attrsMap[':value'];\r\n var typeBinding = el.attrsMap['v-bind:type'] || el.attrsMap[':type'];\r\n if (value_1 && !typeBinding) {\r\n var binding = el.attrsMap['v-bind:value'] ? 'v-bind:value' : ':value';\r\n warn$1(\"\".concat(binding, \"=\\\"\").concat(value_1, \"\\\" conflicts with v-model on the same element \") +\r\n 'because the latter already expands to a value binding internally', el.rawAttrsMap[binding]);\r\n }\r\n }\r\n var _a = modifiers || {}, lazy = _a.lazy, number = _a.number, trim = _a.trim;\r\n var needCompositionGuard = !lazy && type !== 'range';\r\n var event = lazy ? 'change' : type === 'range' ? RANGE_TOKEN : 'input';\r\n var valueExpression = '$event.target.value';\r\n if (trim) {\r\n valueExpression = \"$event.target.value.trim()\";\r\n }\r\n if (number) {\r\n valueExpression = \"_n(\".concat(valueExpression, \")\");\r\n }\r\n var code = genAssignmentCode(value, valueExpression);\r\n if (needCompositionGuard) {\r\n code = \"if($event.target.composing)return;\".concat(code);\r\n }\r\n addProp(el, 'value', \"(\".concat(value, \")\"));\r\n addHandler(el, event, code, null, true);\r\n if (trim || number) {\r\n addHandler(el, 'blur', '$forceUpdate()');\r\n }\r\n}\n\n// normalize v-model event tokens that can only be determined at runtime.\r\n// it's important to place the event as the first in the array because\r\n// the whole point is ensuring the v-model callback gets called before\r\n// user-attached handlers.\r\nfunction normalizeEvents(on) {\r\n /* istanbul ignore if */\r\n if (isDef(on[RANGE_TOKEN])) {\r\n // IE input[type=range] only supports `change` event\r\n var event_1 = isIE ? 'change' : 'input';\r\n on[event_1] = [].concat(on[RANGE_TOKEN], on[event_1] || []);\r\n delete on[RANGE_TOKEN];\r\n }\r\n // This was originally intended to fix #4521 but no longer necessary\r\n // after 2.5. Keeping it for backwards compat with generated code from < 2.4\r\n /* istanbul ignore if */\r\n if (isDef(on[CHECKBOX_RADIO_TOKEN])) {\r\n on.change = [].concat(on[CHECKBOX_RADIO_TOKEN], on.change || []);\r\n delete on[CHECKBOX_RADIO_TOKEN];\r\n }\r\n}\r\nvar target;\r\nfunction createOnceHandler(event, handler, capture) {\r\n var _target = target; // save current target element in closure\r\n return function onceHandler() {\r\n var res = handler.apply(null, arguments);\r\n if (res !== null) {\r\n remove(event, onceHandler, capture, _target);\r\n }\r\n };\r\n}\r\n// #9446: Firefox <= 53 (in particular, ESR 52) has incorrect Event.timeStamp\r\n// implementation and does not fire microtasks in between event propagation, so\r\n// safe to exclude.\r\nvar useMicrotaskFix = isUsingMicroTask && !(isFF && Number(isFF[1]) <= 53);\r\nfunction add(name, handler, capture, passive) {\r\n // async edge case #6566: inner click event triggers patch, event handler\r\n // attached to outer element during patch, and triggered again. This\r\n // happens because browsers fire microtask ticks between event propagation.\r\n // the solution is simple: we save the timestamp when a handler is attached,\r\n // and the handler would only fire if the event passed to it was fired\r\n // AFTER it was attached.\r\n if (useMicrotaskFix) {\r\n var attachedTimestamp_1 = currentFlushTimestamp;\r\n var original_1 = handler;\r\n //@ts-expect-error\r\n handler = original_1._wrapper = function (e) {\r\n if (\r\n // no bubbling, should always fire.\r\n // this is just a safety net in case event.timeStamp is unreliable in\r\n // certain weird environments...\r\n e.target === e.currentTarget ||\r\n // event is fired after handler attachment\r\n e.timeStamp >= attachedTimestamp_1 ||\r\n // bail for environments that have buggy event.timeStamp implementations\r\n // #9462 iOS 9 bug: event.timeStamp is 0 after history.pushState\r\n // #9681 QtWebEngine event.timeStamp is negative value\r\n e.timeStamp <= 0 ||\r\n // #9448 bail if event is fired in another document in a multi-page\r\n // electron/nw.js app, since event.timeStamp will be using a different\r\n // starting reference\r\n e.target.ownerDocument !== document) {\r\n return original_1.apply(this, arguments);\r\n }\r\n };\r\n }\r\n target.addEventListener(name, handler, supportsPassive ? { capture: capture, passive: passive } : capture);\r\n}\r\nfunction remove(name, handler, capture, _target) {\r\n (_target || target).removeEventListener(name, \r\n //@ts-expect-error\r\n handler._wrapper || handler, capture);\r\n}\r\nfunction updateDOMListeners(oldVnode, vnode) {\r\n if (isUndef(oldVnode.data.on) && isUndef(vnode.data.on)) {\r\n return;\r\n }\r\n var on = vnode.data.on || {};\r\n var oldOn = oldVnode.data.on || {};\r\n // vnode is empty when removing all listeners,\r\n // and use old vnode dom element\r\n target = vnode.elm || oldVnode.elm;\r\n normalizeEvents(on);\r\n updateListeners(on, oldOn, add, remove, createOnceHandler, vnode.context);\r\n target = undefined;\r\n}\r\nvar events = {\r\n create: updateDOMListeners,\r\n update: updateDOMListeners,\r\n // @ts-expect-error emptyNode has actually data\r\n destroy: function (vnode) { return updateDOMListeners(vnode, emptyNode); }\r\n};\n\nvar svgContainer;\r\nfunction updateDOMProps(oldVnode, vnode) {\r\n if (isUndef(oldVnode.data.domProps) && isUndef(vnode.data.domProps)) {\r\n return;\r\n }\r\n var key, cur;\r\n var elm = vnode.elm;\r\n var oldProps = oldVnode.data.domProps || {};\r\n var props = vnode.data.domProps || {};\r\n // clone observed objects, as the user probably wants to mutate it\r\n if (isDef(props.__ob__) || isTrue(props._v_attr_proxy)) {\r\n props = vnode.data.domProps = extend({}, props);\r\n }\r\n for (key in oldProps) {\r\n if (!(key in props)) {\r\n elm[key] = '';\r\n }\r\n }\r\n for (key in props) {\r\n cur = props[key];\r\n // ignore children if the node has textContent or innerHTML,\r\n // as these will throw away existing DOM nodes and cause removal errors\r\n // on subsequent patches (#3360)\r\n if (key === 'textContent' || key === 'innerHTML') {\r\n if (vnode.children)\r\n vnode.children.length = 0;\r\n if (cur === oldProps[key])\r\n continue;\r\n // #6601 work around Chrome version <= 55 bug where single textNode\r\n // replaced by innerHTML/textContent retains its parentNode property\r\n if (elm.childNodes.length === 1) {\r\n elm.removeChild(elm.childNodes[0]);\r\n }\r\n }\r\n if (key === 'value' && elm.tagName !== 'PROGRESS') {\r\n // store value as _value as well since\r\n // non-string values will be stringified\r\n elm._value = cur;\r\n // avoid resetting cursor position when value is the same\r\n var strCur = isUndef(cur) ? '' : String(cur);\r\n if (shouldUpdateValue(elm, strCur)) {\r\n elm.value = strCur;\r\n }\r\n }\r\n else if (key === 'innerHTML' &&\r\n isSVG(elm.tagName) &&\r\n isUndef(elm.innerHTML)) {\r\n // IE doesn't support innerHTML for SVG elements\r\n svgContainer = svgContainer || document.createElement('div');\r\n svgContainer.innerHTML = \"<svg>\".concat(cur, \"</svg>\");\r\n var svg = svgContainer.firstChild;\r\n while (elm.firstChild) {\r\n elm.removeChild(elm.firstChild);\r\n }\r\n while (svg.firstChild) {\r\n elm.appendChild(svg.firstChild);\r\n }\r\n }\r\n else if (\r\n // skip the update if old and new VDOM state is the same.\r\n // `value` is handled separately because the DOM value may be temporarily\r\n // out of sync with VDOM state due to focus, composition and modifiers.\r\n // This #4521 by skipping the unnecessary `checked` update.\r\n cur !== oldProps[key]) {\r\n // some property updates can throw\r\n // e.g. `value` on <progress> w/ non-finite value\r\n try {\r\n elm[key] = cur;\r\n }\r\n catch (e) { }\r\n }\r\n }\r\n}\r\nfunction shouldUpdateValue(elm, checkVal) {\r\n return (\r\n //@ts-expect-error\r\n !elm.composing &&\r\n (elm.tagName === 'OPTION' ||\r\n isNotInFocusAndDirty(elm, checkVal) ||\r\n isDirtyWithModifiers(elm, checkVal)));\r\n}\r\nfunction isNotInFocusAndDirty(elm, checkVal) {\r\n // return true when textbox (.number and .trim) loses focus and its value is\r\n // not equal to the updated value\r\n var notInFocus = true;\r\n // #6157\r\n // work around IE bug when accessing document.activeElement in an iframe\r\n try {\r\n notInFocus = document.activeElement !== elm;\r\n }\r\n catch (e) { }\r\n return notInFocus && elm.value !== checkVal;\r\n}\r\nfunction isDirtyWithModifiers(elm, newVal) {\r\n var value = elm.value;\r\n var modifiers = elm._vModifiers; // injected by v-model runtime\r\n if (isDef(modifiers)) {\r\n if (modifiers.number) {\r\n return toNumber(value) !== toNumber(newVal);\r\n }\r\n if (modifiers.trim) {\r\n return value.trim() !== newVal.trim();\r\n }\r\n }\r\n return value !== newVal;\r\n}\r\nvar domProps = {\r\n create: updateDOMProps,\r\n update: updateDOMProps\r\n};\n\nvar parseStyleText = cached(function (cssText) {\r\n var res = {};\r\n var listDelimiter = /;(?![^(]*\\))/g;\r\n var propertyDelimiter = /:(.+)/;\r\n cssText.split(listDelimiter).forEach(function (item) {\r\n if (item) {\r\n var tmp = item.split(propertyDelimiter);\r\n tmp.length > 1 && (res[tmp[0].trim()] = tmp[1].trim());\r\n }\r\n });\r\n return res;\r\n});\r\n// merge static and dynamic style data on the same vnode\r\nfunction normalizeStyleData(data) {\r\n var style = normalizeStyleBinding(data.style);\r\n // static style is pre-processed into an object during compilation\r\n // and is always a fresh object, so it's safe to merge into it\r\n return data.staticStyle ? extend(data.staticStyle, style) : style;\r\n}\r\n// normalize possible array / string values into Object\r\nfunction normalizeStyleBinding(bindingStyle) {\r\n if (Array.isArray(bindingStyle)) {\r\n return toObject(bindingStyle);\r\n }\r\n if (typeof bindingStyle === 'string') {\r\n return parseStyleText(bindingStyle);\r\n }\r\n return bindingStyle;\r\n}\r\n/**\r\n * parent component style should be after child's\r\n * so that parent component's style could override it\r\n */\r\nfunction getStyle(vnode, checkChild) {\r\n var res = {};\r\n var styleData;\r\n if (checkChild) {\r\n var childNode = vnode;\r\n while (childNode.componentInstance) {\r\n childNode = childNode.componentInstance._vnode;\r\n if (childNode &&\r\n childNode.data &&\r\n (styleData = normalizeStyleData(childNode.data))) {\r\n extend(res, styleData);\r\n }\r\n }\r\n }\r\n if ((styleData = normalizeStyleData(vnode.data))) {\r\n extend(res, styleData);\r\n }\r\n var parentNode = vnode;\r\n // @ts-expect-error parentNode.parent not VNodeWithData\r\n while ((parentNode = parentNode.parent)) {\r\n if (parentNode.data && (styleData = normalizeStyleData(parentNode.data))) {\r\n extend(res, styleData);\r\n }\r\n }\r\n return res;\r\n}\n\nvar cssVarRE = /^--/;\r\nvar importantRE = /\\s*!important$/;\r\nvar setProp = function (el, name, val) {\r\n /* istanbul ignore if */\r\n if (cssVarRE.test(name)) {\r\n el.style.setProperty(name, val);\r\n }\r\n else if (importantRE.test(val)) {\r\n el.style.setProperty(hyphenate(name), val.replace(importantRE, ''), 'important');\r\n }\r\n else {\r\n var normalizedName = normalize(name);\r\n if (Array.isArray(val)) {\r\n // Support values array created by autoprefixer, e.g.\r\n // {display: [\"-webkit-box\", \"-ms-flexbox\", \"flex\"]}\r\n // Set them one by one, and the browser will only set those it can recognize\r\n for (var i = 0, len = val.length; i < len; i++) {\r\n el.style[normalizedName] = val[i];\r\n }\r\n }\r\n else {\r\n el.style[normalizedName] = val;\r\n }\r\n }\r\n};\r\nvar vendorNames = ['Webkit', 'Moz', 'ms'];\r\nvar emptyStyle;\r\nvar normalize = cached(function (prop) {\r\n emptyStyle = emptyStyle || document.createElement('div').style;\r\n prop = camelize(prop);\r\n if (prop !== 'filter' && prop in emptyStyle) {\r\n return prop;\r\n }\r\n var capName = prop.charAt(0).toUpperCase() + prop.slice(1);\r\n for (var i = 0; i < vendorNames.length; i++) {\r\n var name_1 = vendorNames[i] + capName;\r\n if (name_1 in emptyStyle) {\r\n return name_1;\r\n }\r\n }\r\n});\r\nfunction updateStyle(oldVnode, vnode) {\r\n var data = vnode.data;\r\n var oldData = oldVnode.data;\r\n if (isUndef(data.staticStyle) &&\r\n isUndef(data.style) &&\r\n isUndef(oldData.staticStyle) &&\r\n isUndef(oldData.style)) {\r\n return;\r\n }\r\n var cur, name;\r\n var el = vnode.elm;\r\n var oldStaticStyle = oldData.staticStyle;\r\n var oldStyleBinding = oldData.normalizedStyle || oldData.style || {};\r\n // if static style exists, stylebinding already merged into it when doing normalizeStyleData\r\n var oldStyle = oldStaticStyle || oldStyleBinding;\r\n var style = normalizeStyleBinding(vnode.data.style) || {};\r\n // store normalized style under a different key for next diff\r\n // make sure to clone it if it's reactive, since the user likely wants\r\n // to mutate it.\r\n vnode.data.normalizedStyle = isDef(style.__ob__) ? extend({}, style) : style;\r\n var newStyle = getStyle(vnode, true);\r\n for (name in oldStyle) {\r\n if (isUndef(newStyle[name])) {\r\n setProp(el, name, '');\r\n }\r\n }\r\n for (name in newStyle) {\r\n cur = newStyle[name];\r\n if (cur !== oldStyle[name]) {\r\n // ie9 setting to null has no effect, must use empty string\r\n setProp(el, name, cur == null ? '' : cur);\r\n }\r\n }\r\n}\r\nvar style$1 = {\r\n create: updateStyle,\r\n update: updateStyle\r\n};\n\nvar whitespaceRE$1 = /\\s+/;\r\n/**\r\n * Add class with compatibility for SVG since classList is not supported on\r\n * SVG elements in IE\r\n */\r\nfunction addClass(el, cls) {\r\n /* istanbul ignore if */\r\n if (!cls || !(cls = cls.trim())) {\r\n return;\r\n }\r\n /* istanbul ignore else */\r\n if (el.classList) {\r\n if (cls.indexOf(' ') > -1) {\r\n cls.split(whitespaceRE$1).forEach(function (c) { return el.classList.add(c); });\r\n }\r\n else {\r\n el.classList.add(cls);\r\n }\r\n }\r\n else {\r\n var cur = \" \".concat(el.getAttribute('class') || '', \" \");\r\n if (cur.indexOf(' ' + cls + ' ') < 0) {\r\n el.setAttribute('class', (cur + cls).trim());\r\n }\r\n }\r\n}\r\n/**\r\n * Remove class with compatibility for SVG since classList is not supported on\r\n * SVG elements in IE\r\n */\r\nfunction removeClass(el, cls) {\r\n /* istanbul ignore if */\r\n if (!cls || !(cls = cls.trim())) {\r\n return;\r\n }\r\n /* istanbul ignore else */\r\n if (el.classList) {\r\n if (cls.indexOf(' ') > -1) {\r\n cls.split(whitespaceRE$1).forEach(function (c) { return el.classList.remove(c); });\r\n }\r\n else {\r\n el.classList.remove(cls);\r\n }\r\n if (!el.classList.length) {\r\n el.removeAttribute('class');\r\n }\r\n }\r\n else {\r\n var cur = \" \".concat(el.getAttribute('class') || '', \" \");\r\n var tar = ' ' + cls + ' ';\r\n while (cur.indexOf(tar) >= 0) {\r\n cur = cur.replace(tar, ' ');\r\n }\r\n cur = cur.trim();\r\n if (cur) {\r\n el.setAttribute('class', cur);\r\n }\r\n else {\r\n el.removeAttribute('class');\r\n }\r\n }\r\n}\n\nfunction resolveTransition(def) {\r\n if (!def) {\r\n return;\r\n }\r\n /* istanbul ignore else */\r\n if (typeof def === 'object') {\r\n var res = {};\r\n if (def.css !== false) {\r\n extend(res, autoCssTransition(def.name || 'v'));\r\n }\r\n extend(res, def);\r\n return res;\r\n }\r\n else if (typeof def === 'string') {\r\n return autoCssTransition(def);\r\n }\r\n}\r\nvar autoCssTransition = cached(function (name) {\r\n return {\r\n enterClass: \"\".concat(name, \"-enter\"),\r\n enterToClass: \"\".concat(name, \"-enter-to\"),\r\n enterActiveClass: \"\".concat(name, \"-enter-active\"),\r\n leaveClass: \"\".concat(name, \"-leave\"),\r\n leaveToClass: \"\".concat(name, \"-leave-to\"),\r\n leaveActiveClass: \"\".concat(name, \"-leave-active\")\r\n };\r\n});\r\nvar hasTransition = inBrowser && !isIE9;\r\nvar TRANSITION = 'transition';\r\nvar ANIMATION = 'animation';\r\n// Transition property/event sniffing\r\nvar transitionProp = 'transition';\r\nvar transitionEndEvent = 'transitionend';\r\nvar animationProp = 'animation';\r\nvar animationEndEvent = 'animationend';\r\nif (hasTransition) {\r\n /* istanbul ignore if */\r\n if (window.ontransitionend === undefined &&\r\n window.onwebkittransitionend !== undefined) {\r\n transitionProp = 'WebkitTransition';\r\n transitionEndEvent = 'webkitTransitionEnd';\r\n }\r\n if (window.onanimationend === undefined &&\r\n window.onwebkitanimationend !== undefined) {\r\n animationProp = 'WebkitAnimation';\r\n animationEndEvent = 'webkitAnimationEnd';\r\n }\r\n}\r\n// binding to window is necessary to make hot reload work in IE in strict mode\r\nvar raf = inBrowser\r\n ? window.requestAnimationFrame\r\n ? window.requestAnimationFrame.bind(window)\r\n : setTimeout\r\n : /* istanbul ignore next */ function (/* istanbul ignore next */ fn) { return fn(); };\r\nfunction nextFrame(fn) {\r\n raf(function () {\r\n // @ts-expect-error\r\n raf(fn);\r\n });\r\n}\r\nfunction addTransitionClass(el, cls) {\r\n var transitionClasses = el._transitionClasses || (el._transitionClasses = []);\r\n if (transitionClasses.indexOf(cls) < 0) {\r\n transitionClasses.push(cls);\r\n addClass(el, cls);\r\n }\r\n}\r\nfunction removeTransitionClass(el, cls) {\r\n if (el._transitionClasses) {\r\n remove$2(el._transitionClasses, cls);\r\n }\r\n removeClass(el, cls);\r\n}\r\nfunction whenTransitionEnds(el, expectedType, cb) {\r\n var _a = getTransitionInfo(el, expectedType), type = _a.type, timeout = _a.timeout, propCount = _a.propCount;\r\n if (!type)\r\n return cb();\r\n var event = type === TRANSITION ? transitionEndEvent : animationEndEvent;\r\n var ended = 0;\r\n var end = function () {\r\n el.removeEventListener(event, onEnd);\r\n cb();\r\n };\r\n var onEnd = function (e) {\r\n if (e.target === el) {\r\n if (++ended >= propCount) {\r\n end();\r\n }\r\n }\r\n };\r\n setTimeout(function () {\r\n if (ended < propCount) {\r\n end();\r\n }\r\n }, timeout + 1);\r\n el.addEventListener(event, onEnd);\r\n}\r\nvar transformRE = /\\b(transform|all)(,|$)/;\r\nfunction getTransitionInfo(el, expectedType) {\r\n var styles = window.getComputedStyle(el);\r\n // JSDOM may return undefined for transition properties\r\n var transitionDelays = (styles[transitionProp + 'Delay'] || '').split(', ');\r\n var transitionDurations = (styles[transitionProp + 'Duration'] || '').split(', ');\r\n var transitionTimeout = getTimeout(transitionDelays, transitionDurations);\r\n var animationDelays = (styles[animationProp + 'Delay'] || '').split(', ');\r\n var animationDurations = (styles[animationProp + 'Duration'] || '').split(', ');\r\n var animationTimeout = getTimeout(animationDelays, animationDurations);\r\n var type;\r\n var timeout = 0;\r\n var propCount = 0;\r\n /* istanbul ignore if */\r\n if (expectedType === TRANSITION) {\r\n if (transitionTimeout > 0) {\r\n type = TRANSITION;\r\n timeout = transitionTimeout;\r\n propCount = transitionDurations.length;\r\n }\r\n }\r\n else if (expectedType === ANIMATION) {\r\n if (animationTimeout > 0) {\r\n type = ANIMATION;\r\n timeout = animationTimeout;\r\n propCount = animationDurations.length;\r\n }\r\n }\r\n else {\r\n timeout = Math.max(transitionTimeout, animationTimeout);\r\n type =\r\n timeout > 0\r\n ? transitionTimeout > animationTimeout\r\n ? TRANSITION\r\n : ANIMATION\r\n : null;\r\n propCount = type\r\n ? type === TRANSITION\r\n ? transitionDurations.length\r\n : animationDurations.length\r\n : 0;\r\n }\r\n var hasTransform = type === TRANSITION && transformRE.test(styles[transitionProp + 'Property']);\r\n return {\r\n type: type,\r\n timeout: timeout,\r\n propCount: propCount,\r\n hasTransform: hasTransform\r\n };\r\n}\r\nfunction getTimeout(delays, durations) {\r\n /* istanbul ignore next */\r\n while (delays.length < durations.length) {\r\n delays = delays.concat(delays);\r\n }\r\n return Math.max.apply(null, durations.map(function (d, i) {\r\n return toMs(d) + toMs(delays[i]);\r\n }));\r\n}\r\n// Old versions of Chromium (below 61.0.3163.100) formats floating pointer numbers\r\n// in a locale-dependent way, using a comma instead of a dot.\r\n// If comma is not replaced with a dot, the input will be rounded down (i.e. acting\r\n// as a floor function) causing unexpected behaviors\r\nfunction toMs(s) {\r\n return Number(s.slice(0, -1).replace(',', '.')) * 1000;\r\n}\n\nfunction enter(vnode, toggleDisplay) {\r\n var el = vnode.elm;\r\n // call leave callback now\r\n if (isDef(el._leaveCb)) {\r\n el._leaveCb.cancelled = true;\r\n el._leaveCb();\r\n }\r\n var data = resolveTransition(vnode.data.transition);\r\n if (isUndef(data)) {\r\n return;\r\n }\r\n /* istanbul ignore if */\r\n if (isDef(el._enterCb) || el.nodeType !== 1) {\r\n return;\r\n }\r\n var css = data.css, type = data.type, enterClass = data.enterClass, enterToClass = data.enterToClass, enterActiveClass = data.enterActiveClass, appearClass = data.appearClass, appearToClass = data.appearToClass, appearActiveClass = data.appearActiveClass, beforeEnter = data.beforeEnter, enter = data.enter, afterEnter = data.afterEnter, enterCancelled = data.enterCancelled, beforeAppear = data.beforeAppear, appear = data.appear, afterAppear = data.afterAppear, appearCancelled = data.appearCancelled, duration = data.duration;\r\n // activeInstance will always be the <transition> component managing this\r\n // transition. One edge case to check is when the <transition> is placed\r\n // as the root node of a child component. In that case we need to check\r\n // <transition>'s parent for appear check.\r\n var context = activeInstance;\r\n var transitionNode = activeInstance.$vnode;\r\n while (transitionNode && transitionNode.parent) {\r\n context = transitionNode.context;\r\n transitionNode = transitionNode.parent;\r\n }\r\n var isAppear = !context._isMounted || !vnode.isRootInsert;\r\n if (isAppear && !appear && appear !== '') {\r\n return;\r\n }\r\n var startClass = isAppear && appearClass ? appearClass : enterClass;\r\n var activeClass = isAppear && appearActiveClass ? appearActiveClass : enterActiveClass;\r\n var toClass = isAppear && appearToClass ? appearToClass : enterToClass;\r\n var beforeEnterHook = isAppear ? beforeAppear || beforeEnter : beforeEnter;\r\n var enterHook = isAppear ? (isFunction(appear) ? appear : enter) : enter;\r\n var afterEnterHook = isAppear ? afterAppear || afterEnter : afterEnter;\r\n var enterCancelledHook = isAppear\r\n ? appearCancelled || enterCancelled\r\n : enterCancelled;\r\n var explicitEnterDuration = toNumber(isObject(duration) ? duration.enter : duration);\r\n if ( true && explicitEnterDuration != null) {\r\n checkDuration(explicitEnterDuration, 'enter', vnode);\r\n }\r\n var expectsCSS = css !== false && !isIE9;\r\n var userWantsControl = getHookArgumentsLength(enterHook);\r\n var cb = (el._enterCb = once(function () {\r\n if (expectsCSS) {\r\n removeTransitionClass(el, toClass);\r\n removeTransitionClass(el, activeClass);\r\n }\r\n // @ts-expect-error\r\n if (cb.cancelled) {\r\n if (expectsCSS) {\r\n removeTransitionClass(el, startClass);\r\n }\r\n enterCancelledHook && enterCancelledHook(el);\r\n }\r\n else {\r\n afterEnterHook && afterEnterHook(el);\r\n }\r\n el._enterCb = null;\r\n }));\r\n if (!vnode.data.show) {\r\n // remove pending leave element on enter by injecting an insert hook\r\n mergeVNodeHook(vnode, 'insert', function () {\r\n var parent = el.parentNode;\r\n var pendingNode = parent && parent._pending && parent._pending[vnode.key];\r\n if (pendingNode &&\r\n pendingNode.tag === vnode.tag &&\r\n pendingNode.elm._leaveCb) {\r\n pendingNode.elm._leaveCb();\r\n }\r\n enterHook && enterHook(el, cb);\r\n });\r\n }\r\n // start enter transition\r\n beforeEnterHook && beforeEnterHook(el);\r\n if (expectsCSS) {\r\n addTransitionClass(el, startClass);\r\n addTransitionClass(el, activeClass);\r\n nextFrame(function () {\r\n removeTransitionClass(el, startClass);\r\n // @ts-expect-error\r\n if (!cb.cancelled) {\r\n addTransitionClass(el, toClass);\r\n if (!userWantsControl) {\r\n if (isValidDuration(explicitEnterDuration)) {\r\n setTimeout(cb, explicitEnterDuration);\r\n }\r\n else {\r\n whenTransitionEnds(el, type, cb);\r\n }\r\n }\r\n }\r\n });\r\n }\r\n if (vnode.data.show) {\r\n toggleDisplay && toggleDisplay();\r\n enterHook && enterHook(el, cb);\r\n }\r\n if (!expectsCSS && !userWantsControl) {\r\n cb();\r\n }\r\n}\r\nfunction leave(vnode, rm) {\r\n var el = vnode.elm;\r\n // call enter callback now\r\n if (isDef(el._enterCb)) {\r\n el._enterCb.cancelled = true;\r\n el._enterCb();\r\n }\r\n var data = resolveTransition(vnode.data.transition);\r\n if (isUndef(data) || el.nodeType !== 1) {\r\n return rm();\r\n }\r\n /* istanbul ignore if */\r\n if (isDef(el._leaveCb)) {\r\n return;\r\n }\r\n var css = data.css, type = data.type, leaveClass = data.leaveClass, leaveToClass = data.leaveToClass, leaveActiveClass = data.leaveActiveClass, beforeLeave = data.beforeLeave, leave = data.leave, afterLeave = data.afterLeave, leaveCancelled = data.leaveCancelled, delayLeave = data.delayLeave, duration = data.duration;\r\n var expectsCSS = css !== false && !isIE9;\r\n var userWantsControl = getHookArgumentsLength(leave);\r\n var explicitLeaveDuration = toNumber(isObject(duration) ? duration.leave : duration);\r\n if ( true && isDef(explicitLeaveDuration)) {\r\n checkDuration(explicitLeaveDuration, 'leave', vnode);\r\n }\r\n var cb = (el._leaveCb = once(function () {\r\n if (el.parentNode && el.parentNode._pending) {\r\n el.parentNode._pending[vnode.key] = null;\r\n }\r\n if (expectsCSS) {\r\n removeTransitionClass(el, leaveToClass);\r\n removeTransitionClass(el, leaveActiveClass);\r\n }\r\n // @ts-expect-error\r\n if (cb.cancelled) {\r\n if (expectsCSS) {\r\n removeTransitionClass(el, leaveClass);\r\n }\r\n leaveCancelled && leaveCancelled(el);\r\n }\r\n else {\r\n rm();\r\n afterLeave && afterLeave(el);\r\n }\r\n el._leaveCb = null;\r\n }));\r\n if (delayLeave) {\r\n delayLeave(performLeave);\r\n }\r\n else {\r\n performLeave();\r\n }\r\n function performLeave() {\r\n // the delayed leave may have already been cancelled\r\n // @ts-expect-error\r\n if (cb.cancelled) {\r\n return;\r\n }\r\n // record leaving element\r\n if (!vnode.data.show && el.parentNode) {\r\n (el.parentNode._pending || (el.parentNode._pending = {}))[vnode.key] =\r\n vnode;\r\n }\r\n beforeLeave && beforeLeave(el);\r\n if (expectsCSS) {\r\n addTransitionClass(el, leaveClass);\r\n addTransitionClass(el, leaveActiveClass);\r\n nextFrame(function () {\r\n removeTransitionClass(el, leaveClass);\r\n // @ts-expect-error\r\n if (!cb.cancelled) {\r\n addTransitionClass(el, leaveToClass);\r\n if (!userWantsControl) {\r\n if (isValidDuration(explicitLeaveDuration)) {\r\n setTimeout(cb, explicitLeaveDuration);\r\n }\r\n else {\r\n whenTransitionEnds(el, type, cb);\r\n }\r\n }\r\n }\r\n });\r\n }\r\n leave && leave(el, cb);\r\n if (!expectsCSS && !userWantsControl) {\r\n cb();\r\n }\r\n }\r\n}\r\n// only used in dev mode\r\nfunction checkDuration(val, name, vnode) {\r\n if (typeof val !== 'number') {\r\n warn$2(\"<transition> explicit \".concat(name, \" duration is not a valid number - \") +\r\n \"got \".concat(JSON.stringify(val), \".\"), vnode.context);\r\n }\r\n else if (isNaN(val)) {\r\n warn$2(\"<transition> explicit \".concat(name, \" duration is NaN - \") +\r\n 'the duration expression might be incorrect.', vnode.context);\r\n }\r\n}\r\nfunction isValidDuration(val) {\r\n return typeof val === 'number' && !isNaN(val);\r\n}\r\n/**\r\n * Normalize a transition hook's argument length. The hook may be:\r\n * - a merged hook (invoker) with the original in .fns\r\n * - a wrapped component method (check ._length)\r\n * - a plain function (.length)\r\n */\r\nfunction getHookArgumentsLength(fn) {\r\n if (isUndef(fn)) {\r\n return false;\r\n }\r\n // @ts-expect-error\r\n var invokerFns = fn.fns;\r\n if (isDef(invokerFns)) {\r\n // invoker\r\n return getHookArgumentsLength(Array.isArray(invokerFns) ? invokerFns[0] : invokerFns);\r\n }\r\n else {\r\n // @ts-expect-error\r\n return (fn._length || fn.length) > 1;\r\n }\r\n}\r\nfunction _enter(_, vnode) {\r\n if (vnode.data.show !== true) {\r\n enter(vnode);\r\n }\r\n}\r\nvar transition = inBrowser\r\n ? {\r\n create: _enter,\r\n activate: _enter,\r\n remove: function (vnode, rm) {\r\n /* istanbul ignore else */\r\n if (vnode.data.show !== true) {\r\n // @ts-expect-error\r\n leave(vnode, rm);\r\n }\r\n else {\r\n rm();\r\n }\r\n }\r\n }\r\n : {};\n\nvar platformModules = [attrs, klass$1, events, domProps, style$1, transition];\n\n// the directive module should be applied last, after all\r\n// built-in modules have been applied.\r\nvar modules$1 = platformModules.concat(baseModules);\r\nvar patch = createPatchFunction({ nodeOps: nodeOps, modules: modules$1 });\n\n/**\r\n * Not type checking this file because flow doesn't like attaching\r\n * properties to Elements.\r\n */\r\n/* istanbul ignore if */\r\nif (isIE9) {\r\n // http://www.matts411.com/post/internet-explorer-9-oninput/\r\n document.addEventListener('selectionchange', function () {\r\n var el = document.activeElement;\r\n // @ts-expect-error\r\n if (el && el.vmodel) {\r\n trigger(el, 'input');\r\n }\r\n });\r\n}\r\nvar directive = {\r\n inserted: function (el, binding, vnode, oldVnode) {\r\n if (vnode.tag === 'select') {\r\n // #6903\r\n if (oldVnode.elm && !oldVnode.elm._vOptions) {\r\n mergeVNodeHook(vnode, 'postpatch', function () {\r\n directive.componentUpdated(el, binding, vnode);\r\n });\r\n }\r\n else {\r\n setSelected(el, binding, vnode.context);\r\n }\r\n el._vOptions = [].map.call(el.options, getValue);\r\n }\r\n else if (vnode.tag === 'textarea' || isTextInputType(el.type)) {\r\n el._vModifiers = binding.modifiers;\r\n if (!binding.modifiers.lazy) {\r\n el.addEventListener('compositionstart', onCompositionStart);\r\n el.addEventListener('compositionend', onCompositionEnd);\r\n // Safari < 10.2 & UIWebView doesn't fire compositionend when\r\n // switching focus before confirming composition choice\r\n // this also fixes the issue where some browsers e.g. iOS Chrome\r\n // fires \"change\" instead of \"input\" on autocomplete.\r\n el.addEventListener('change', onCompositionEnd);\r\n /* istanbul ignore if */\r\n if (isIE9) {\r\n el.vmodel = true;\r\n }\r\n }\r\n }\r\n },\r\n componentUpdated: function (el, binding, vnode) {\r\n if (vnode.tag === 'select') {\r\n setSelected(el, binding, vnode.context);\r\n // in case the options rendered by v-for have changed,\r\n // it's possible that the value is out-of-sync with the rendered options.\r\n // detect such cases and filter out values that no longer has a matching\r\n // option in the DOM.\r\n var prevOptions_1 = el._vOptions;\r\n var curOptions_1 = (el._vOptions = [].map.call(el.options, getValue));\r\n if (curOptions_1.some(function (o, i) { return !looseEqual(o, prevOptions_1[i]); })) {\r\n // trigger change event if\r\n // no matching option found for at least one value\r\n var needReset = el.multiple\r\n ? binding.value.some(function (v) { return hasNoMatchingOption(v, curOptions_1); })\r\n : binding.value !== binding.oldValue &&\r\n hasNoMatchingOption(binding.value, curOptions_1);\r\n if (needReset) {\r\n trigger(el, 'change');\r\n }\r\n }\r\n }\r\n }\r\n};\r\nfunction setSelected(el, binding, vm) {\r\n actuallySetSelected(el, binding, vm);\r\n /* istanbul ignore if */\r\n if (isIE || isEdge) {\r\n setTimeout(function () {\r\n actuallySetSelected(el, binding, vm);\r\n }, 0);\r\n }\r\n}\r\nfunction actuallySetSelected(el, binding, vm) {\r\n var value = binding.value;\r\n var isMultiple = el.multiple;\r\n if (isMultiple && !Array.isArray(value)) {\r\n true &&\r\n warn$2(\"<select multiple v-model=\\\"\".concat(binding.expression, \"\\\"> \") +\r\n \"expects an Array value for its binding, but got \".concat(Object.prototype.toString\r\n .call(value)\r\n .slice(8, -1)), vm);\r\n return;\r\n }\r\n var selected, option;\r\n for (var i = 0, l = el.options.length; i < l; i++) {\r\n option = el.options[i];\r\n if (isMultiple) {\r\n selected = looseIndexOf(value, getValue(option)) > -1;\r\n if (option.selected !== selected) {\r\n option.selected = selected;\r\n }\r\n }\r\n else {\r\n if (looseEqual(getValue(option), value)) {\r\n if (el.selectedIndex !== i) {\r\n el.selectedIndex = i;\r\n }\r\n return;\r\n }\r\n }\r\n }\r\n if (!isMultiple) {\r\n el.selectedIndex = -1;\r\n }\r\n}\r\nfunction hasNoMatchingOption(value, options) {\r\n return options.every(function (o) { return !looseEqual(o, value); });\r\n}\r\nfunction getValue(option) {\r\n return '_value' in option ? option._value : option.value;\r\n}\r\nfunction onCompositionStart(e) {\r\n e.target.composing = true;\r\n}\r\nfunction onCompositionEnd(e) {\r\n // prevent triggering an input event for no reason\r\n if (!e.target.composing)\r\n return;\r\n e.target.composing = false;\r\n trigger(e.target, 'input');\r\n}\r\nfunction trigger(el, type) {\r\n var e = document.createEvent('HTMLEvents');\r\n e.initEvent(type, true, true);\r\n el.dispatchEvent(e);\r\n}\n\n// recursively search for possible transition defined inside the component root\r\nfunction locateNode(vnode) {\r\n // @ts-expect-error\r\n return vnode.componentInstance && (!vnode.data || !vnode.data.transition)\r\n ? locateNode(vnode.componentInstance._vnode)\r\n : vnode;\r\n}\r\nvar show = {\r\n bind: function (el, _a, vnode) {\r\n var value = _a.value;\r\n vnode = locateNode(vnode);\r\n var transition = vnode.data && vnode.data.transition;\r\n var originalDisplay = (el.__vOriginalDisplay =\r\n el.style.display === 'none' ? '' : el.style.display);\r\n if (value && transition) {\r\n vnode.data.show = true;\r\n enter(vnode, function () {\r\n el.style.display = originalDisplay;\r\n });\r\n }\r\n else {\r\n el.style.display = value ? originalDisplay : 'none';\r\n }\r\n },\r\n update: function (el, _a, vnode) {\r\n var value = _a.value, oldValue = _a.oldValue;\r\n /* istanbul ignore if */\r\n if (!value === !oldValue)\r\n return;\r\n vnode = locateNode(vnode);\r\n var transition = vnode.data && vnode.data.transition;\r\n if (transition) {\r\n vnode.data.show = true;\r\n if (value) {\r\n enter(vnode, function () {\r\n el.style.display = el.__vOriginalDisplay;\r\n });\r\n }\r\n else {\r\n leave(vnode, function () {\r\n el.style.display = 'none';\r\n });\r\n }\r\n }\r\n else {\r\n el.style.display = value ? el.__vOriginalDisplay : 'none';\r\n }\r\n },\r\n unbind: function (el, binding, vnode, oldVnode, isDestroy) {\r\n if (!isDestroy) {\r\n el.style.display = el.__vOriginalDisplay;\r\n }\r\n }\r\n};\n\nvar platformDirectives = {\r\n model: directive,\r\n show: show\r\n};\n\n// Provides transition support for a single element/component.\r\nvar transitionProps = {\r\n name: String,\r\n appear: Boolean,\r\n css: Boolean,\r\n mode: String,\r\n type: String,\r\n enterClass: String,\r\n leaveClass: String,\r\n enterToClass: String,\r\n leaveToClass: String,\r\n enterActiveClass: String,\r\n leaveActiveClass: String,\r\n appearClass: String,\r\n appearActiveClass: String,\r\n appearToClass: String,\r\n duration: [Number, String, Object]\r\n};\r\n// in case the child is also an abstract component, e.g. <keep-alive>\r\n// we want to recursively retrieve the real component to be rendered\r\nfunction getRealChild(vnode) {\r\n var compOptions = vnode && vnode.componentOptions;\r\n if (compOptions && compOptions.Ctor.options.abstract) {\r\n return getRealChild(getFirstComponentChild(compOptions.children));\r\n }\r\n else {\r\n return vnode;\r\n }\r\n}\r\nfunction extractTransitionData(comp) {\r\n var data = {};\r\n var options = comp.$options;\r\n // props\r\n for (var key in options.propsData) {\r\n data[key] = comp[key];\r\n }\r\n // events.\r\n // extract listeners and pass them directly to the transition methods\r\n var listeners = options._parentListeners;\r\n for (var key in listeners) {\r\n data[camelize(key)] = listeners[key];\r\n }\r\n return data;\r\n}\r\nfunction placeholder(h, rawChild) {\r\n // @ts-expect-error\r\n if (/\\d-keep-alive$/.test(rawChild.tag)) {\r\n return h('keep-alive', {\r\n props: rawChild.componentOptions.propsData\r\n });\r\n }\r\n}\r\nfunction hasParentTransition(vnode) {\r\n while ((vnode = vnode.parent)) {\r\n if (vnode.data.transition) {\r\n return true;\r\n }\r\n }\r\n}\r\nfunction isSameChild(child, oldChild) {\r\n return oldChild.key === child.key && oldChild.tag === child.tag;\r\n}\r\nvar isNotTextNode = function (c) { return c.tag || isAsyncPlaceholder(c); };\r\nvar isVShowDirective = function (d) { return d.name === 'show'; };\r\nvar Transition = {\r\n name: 'transition',\r\n props: transitionProps,\r\n abstract: true,\r\n render: function (h) {\r\n var _this = this;\r\n var children = this.$slots.default;\r\n if (!children) {\r\n return;\r\n }\r\n // filter out text nodes (possible whitespaces)\r\n children = children.filter(isNotTextNode);\r\n /* istanbul ignore if */\r\n if (!children.length) {\r\n return;\r\n }\r\n // warn multiple elements\r\n if ( true && children.length > 1) {\r\n warn$2('<transition> can only be used on a single element. Use ' +\r\n '<transition-group> for lists.', this.$parent);\r\n }\r\n var mode = this.mode;\r\n // warn invalid mode\r\n if ( true && mode && mode !== 'in-out' && mode !== 'out-in') {\r\n warn$2('invalid <transition> mode: ' + mode, this.$parent);\r\n }\r\n var rawChild = children[0];\r\n // if this is a component root node and the component's\r\n // parent container node also has transition, skip.\r\n if (hasParentTransition(this.$vnode)) {\r\n return rawChild;\r\n }\r\n // apply transition data to child\r\n // use getRealChild() to ignore abstract components e.g. keep-alive\r\n var child = getRealChild(rawChild);\r\n /* istanbul ignore if */\r\n if (!child) {\r\n return rawChild;\r\n }\r\n if (this._leaving) {\r\n return placeholder(h, rawChild);\r\n }\r\n // ensure a key that is unique to the vnode type and to this transition\r\n // component instance. This key will be used to remove pending leaving nodes\r\n // during entering.\r\n var id = \"__transition-\".concat(this._uid, \"-\");\r\n child.key =\r\n child.key == null\r\n ? child.isComment\r\n ? id + 'comment'\r\n : id + child.tag\r\n : isPrimitive(child.key)\r\n ? String(child.key).indexOf(id) === 0\r\n ? child.key\r\n : id + child.key\r\n : child.key;\r\n var data = ((child.data || (child.data = {})).transition =\r\n extractTransitionData(this));\r\n var oldRawChild = this._vnode;\r\n var oldChild = getRealChild(oldRawChild);\r\n // mark v-show\r\n // so that the transition module can hand over the control to the directive\r\n if (child.data.directives && child.data.directives.some(isVShowDirective)) {\r\n child.data.show = true;\r\n }\r\n if (oldChild &&\r\n oldChild.data &&\r\n !isSameChild(child, oldChild) &&\r\n !isAsyncPlaceholder(oldChild) &&\r\n // #6687 component root is a comment node\r\n !(oldChild.componentInstance &&\r\n oldChild.componentInstance._vnode.isComment)) {\r\n // replace old child transition data with fresh one\r\n // important for dynamic transitions!\r\n var oldData = (oldChild.data.transition = extend({}, data));\r\n // handle transition mode\r\n if (mode === 'out-in') {\r\n // return placeholder node and queue update when leave finishes\r\n this._leaving = true;\r\n mergeVNodeHook(oldData, 'afterLeave', function () {\r\n _this._leaving = false;\r\n _this.$forceUpdate();\r\n });\r\n return placeholder(h, rawChild);\r\n }\r\n else if (mode === 'in-out') {\r\n if (isAsyncPlaceholder(child)) {\r\n return oldRawChild;\r\n }\r\n var delayedLeave_1;\r\n var performLeave = function () {\r\n delayedLeave_1();\r\n };\r\n mergeVNodeHook(data, 'afterEnter', performLeave);\r\n mergeVNodeHook(data, 'enterCancelled', performLeave);\r\n mergeVNodeHook(oldData, 'delayLeave', function (leave) {\r\n delayedLeave_1 = leave;\r\n });\r\n }\r\n }\r\n return rawChild;\r\n }\r\n};\n\n// Provides transition support for list items.\r\nvar props = extend({\r\n tag: String,\r\n moveClass: String\r\n}, transitionProps);\r\ndelete props.mode;\r\nvar TransitionGroup = {\r\n props: props,\r\n beforeMount: function () {\r\n var _this = this;\r\n var update = this._update;\r\n this._update = function (vnode, hydrating) {\r\n var restoreActiveInstance = setActiveInstance(_this);\r\n // force removing pass\r\n _this.__patch__(_this._vnode, _this.kept, false, // hydrating\r\n true // removeOnly (!important, avoids unnecessary moves)\r\n );\r\n _this._vnode = _this.kept;\r\n restoreActiveInstance();\r\n update.call(_this, vnode, hydrating);\r\n };\r\n },\r\n render: function (h) {\r\n var tag = this.tag || this.$vnode.data.tag || 'span';\r\n var map = Object.create(null);\r\n var prevChildren = (this.prevChildren = this.children);\r\n var rawChildren = this.$slots.default || [];\r\n var children = (this.children = []);\r\n var transitionData = extractTransitionData(this);\r\n for (var i = 0; i < rawChildren.length; i++) {\r\n var c = rawChildren[i];\r\n if (c.tag) {\r\n if (c.key != null && String(c.key).indexOf('__vlist') !== 0) {\r\n children.push(c);\r\n map[c.key] = c;\r\n (c.data || (c.data = {})).transition = transitionData;\r\n }\r\n else if (true) {\r\n var opts = c.componentOptions;\r\n var name_1 = opts\r\n ? getComponentName(opts.Ctor.options) || opts.tag || ''\r\n : c.tag;\r\n warn$2(\"<transition-group> children must be keyed: <\".concat(name_1, \">\"));\r\n }\r\n }\r\n }\r\n if (prevChildren) {\r\n var kept = [];\r\n var removed = [];\r\n for (var i = 0; i < prevChildren.length; i++) {\r\n var c = prevChildren[i];\r\n c.data.transition = transitionData;\r\n // @ts-expect-error .getBoundingClientRect is not typed in Node\r\n c.data.pos = c.elm.getBoundingClientRect();\r\n if (map[c.key]) {\r\n kept.push(c);\r\n }\r\n else {\r\n removed.push(c);\r\n }\r\n }\r\n this.kept = h(tag, null, kept);\r\n this.removed = removed;\r\n }\r\n return h(tag, null, children);\r\n },\r\n updated: function () {\r\n var children = this.prevChildren;\r\n var moveClass = this.moveClass || (this.name || 'v') + '-move';\r\n if (!children.length || !this.hasMove(children[0].elm, moveClass)) {\r\n return;\r\n }\r\n // we divide the work into three loops to avoid mixing DOM reads and writes\r\n // in each iteration - which helps prevent layout thrashing.\r\n children.forEach(callPendingCbs);\r\n children.forEach(recordPosition);\r\n children.forEach(applyTranslation);\r\n // force reflow to put everything in position\r\n // assign to this to avoid being removed in tree-shaking\r\n // $flow-disable-line\r\n this._reflow = document.body.offsetHeight;\r\n children.forEach(function (c) {\r\n if (c.data.moved) {\r\n var el_1 = c.elm;\r\n var s = el_1.style;\r\n addTransitionClass(el_1, moveClass);\r\n s.transform = s.WebkitTransform = s.transitionDuration = '';\r\n el_1.addEventListener(transitionEndEvent, (el_1._moveCb = function cb(e) {\r\n if (e && e.target !== el_1) {\r\n return;\r\n }\r\n if (!e || /transform$/.test(e.propertyName)) {\r\n el_1.removeEventListener(transitionEndEvent, cb);\r\n el_1._moveCb = null;\r\n removeTransitionClass(el_1, moveClass);\r\n }\r\n }));\r\n }\r\n });\r\n },\r\n methods: {\r\n hasMove: function (el, moveClass) {\r\n /* istanbul ignore if */\r\n if (!hasTransition) {\r\n return false;\r\n }\r\n /* istanbul ignore if */\r\n if (this._hasMove) {\r\n return this._hasMove;\r\n }\r\n // Detect whether an element with the move class applied has\r\n // CSS transitions. Since the element may be inside an entering\r\n // transition at this very moment, we make a clone of it and remove\r\n // all other transition classes applied to ensure only the move class\r\n // is applied.\r\n var clone = el.cloneNode();\r\n if (el._transitionClasses) {\r\n el._transitionClasses.forEach(function (cls) {\r\n removeClass(clone, cls);\r\n });\r\n }\r\n addClass(clone, moveClass);\r\n clone.style.display = 'none';\r\n this.$el.appendChild(clone);\r\n var info = getTransitionInfo(clone);\r\n this.$el.removeChild(clone);\r\n return (this._hasMove = info.hasTransform);\r\n }\r\n }\r\n};\r\nfunction callPendingCbs(c) {\r\n /* istanbul ignore if */\r\n if (c.elm._moveCb) {\r\n c.elm._moveCb();\r\n }\r\n /* istanbul ignore if */\r\n if (c.elm._enterCb) {\r\n c.elm._enterCb();\r\n }\r\n}\r\nfunction recordPosition(c) {\r\n c.data.newPos = c.elm.getBoundingClientRect();\r\n}\r\nfunction applyTranslation(c) {\r\n var oldPos = c.data.pos;\r\n var newPos = c.data.newPos;\r\n var dx = oldPos.left - newPos.left;\r\n var dy = oldPos.top - newPos.top;\r\n if (dx || dy) {\r\n c.data.moved = true;\r\n var s = c.elm.style;\r\n s.transform = s.WebkitTransform = \"translate(\".concat(dx, \"px,\").concat(dy, \"px)\");\r\n s.transitionDuration = '0s';\r\n }\r\n}\n\nvar platformComponents = {\r\n Transition: Transition,\r\n TransitionGroup: TransitionGroup\r\n};\n\n// install platform specific utils\r\nVue.config.mustUseProp = mustUseProp;\r\nVue.config.isReservedTag = isReservedTag;\r\nVue.config.isReservedAttr = isReservedAttr;\r\nVue.config.getTagNamespace = getTagNamespace;\r\nVue.config.isUnknownElement = isUnknownElement;\r\n// install platform runtime directives & components\r\nextend(Vue.options.directives, platformDirectives);\r\nextend(Vue.options.components, platformComponents);\r\n// install platform patch function\r\nVue.prototype.__patch__ = inBrowser ? patch : noop;\r\n// public mount method\r\nVue.prototype.$mount = function (el, hydrating) {\r\n el = el && inBrowser ? query(el) : undefined;\r\n return mountComponent(this, el, hydrating);\r\n};\r\n// devtools global hook\r\n/* istanbul ignore next */\r\nif (inBrowser) {\r\n setTimeout(function () {\r\n if (config.devtools) {\r\n if (devtools) {\r\n devtools.emit('init', Vue);\r\n }\r\n else if (true) {\r\n // @ts-expect-error\r\n console[console.info ? 'info' : 'log']('Download the Vue Devtools extension for a better development experience:\\n' +\r\n 'https://github.com/vuejs/vue-devtools');\r\n }\r\n }\r\n if ( true &&\r\n config.productionTip !== false &&\r\n typeof console !== 'undefined') {\r\n // @ts-expect-error\r\n console[console.info ? 'info' : 'log'](\"You are running Vue in development mode.\\n\" +\r\n \"Make sure to turn on production mode when deploying for production.\\n\" +\r\n \"See more tips at https://vuejs.org/guide/deployment.html\");\r\n }\r\n }, 0);\r\n}\n\nvar defaultTagRE = /\\{\\{((?:.|\\r?\\n)+?)\\}\\}/g;\r\nvar regexEscapeRE = /[-.*+?^${}()|[\\]\\/\\\\]/g;\r\nvar buildRegex = cached(function (delimiters) {\r\n var open = delimiters[0].replace(regexEscapeRE, '\\\\$&');\r\n var close = delimiters[1].replace(regexEscapeRE, '\\\\$&');\r\n return new RegExp(open + '((?:.|\\\\n)+?)' + close, 'g');\r\n});\r\nfunction parseText(text, delimiters) {\r\n //@ts-expect-error\r\n var tagRE = delimiters ? buildRegex(delimiters) : defaultTagRE;\r\n if (!tagRE.test(text)) {\r\n return;\r\n }\r\n var tokens = [];\r\n var rawTokens = [];\r\n var lastIndex = (tagRE.lastIndex = 0);\r\n var match, index, tokenValue;\r\n while ((match = tagRE.exec(text))) {\r\n index = match.index;\r\n // push text token\r\n if (index > lastIndex) {\r\n rawTokens.push((tokenValue = text.slice(lastIndex, index)));\r\n tokens.push(JSON.stringify(tokenValue));\r\n }\r\n // tag token\r\n var exp = parseFilters(match[1].trim());\r\n tokens.push(\"_s(\".concat(exp, \")\"));\r\n rawTokens.push({ '@binding': exp });\r\n lastIndex = index + match[0].length;\r\n }\r\n if (lastIndex < text.length) {\r\n rawTokens.push((tokenValue = text.slice(lastIndex)));\r\n tokens.push(JSON.stringify(tokenValue));\r\n }\r\n return {\r\n expression: tokens.join('+'),\r\n tokens: rawTokens\r\n };\r\n}\n\nfunction transformNode$1(el, options) {\r\n var warn = options.warn || baseWarn;\r\n var staticClass = getAndRemoveAttr(el, 'class');\r\n if ( true && staticClass) {\r\n var res = parseText(staticClass, options.delimiters);\r\n if (res) {\r\n warn(\"class=\\\"\".concat(staticClass, \"\\\": \") +\r\n 'Interpolation inside attributes has been removed. ' +\r\n 'Use v-bind or the colon shorthand instead. For example, ' +\r\n 'instead of <div class=\"{{ val }}\">, use <div :class=\"val\">.', el.rawAttrsMap['class']);\r\n }\r\n }\r\n if (staticClass) {\r\n el.staticClass = JSON.stringify(staticClass.replace(/\\s+/g, ' ').trim());\r\n }\r\n var classBinding = getBindingAttr(el, 'class', false /* getStatic */);\r\n if (classBinding) {\r\n el.classBinding = classBinding;\r\n }\r\n}\r\nfunction genData$2(el) {\r\n var data = '';\r\n if (el.staticClass) {\r\n data += \"staticClass:\".concat(el.staticClass, \",\");\r\n }\r\n if (el.classBinding) {\r\n data += \"class:\".concat(el.classBinding, \",\");\r\n }\r\n return data;\r\n}\r\nvar klass = {\r\n staticKeys: ['staticClass'],\r\n transformNode: transformNode$1,\r\n genData: genData$2\r\n};\n\nfunction transformNode(el, options) {\r\n var warn = options.warn || baseWarn;\r\n var staticStyle = getAndRemoveAttr(el, 'style');\r\n if (staticStyle) {\r\n /* istanbul ignore if */\r\n if (true) {\r\n var res = parseText(staticStyle, options.delimiters);\r\n if (res) {\r\n warn(\"style=\\\"\".concat(staticStyle, \"\\\": \") +\r\n 'Interpolation inside attributes has been removed. ' +\r\n 'Use v-bind or the colon shorthand instead. For example, ' +\r\n 'instead of <div style=\"{{ val }}\">, use <div :style=\"val\">.', el.rawAttrsMap['style']);\r\n }\r\n }\r\n el.staticStyle = JSON.stringify(parseStyleText(staticStyle));\r\n }\r\n var styleBinding = getBindingAttr(el, 'style', false /* getStatic */);\r\n if (styleBinding) {\r\n el.styleBinding = styleBinding;\r\n }\r\n}\r\nfunction genData$1(el) {\r\n var data = '';\r\n if (el.staticStyle) {\r\n data += \"staticStyle:\".concat(el.staticStyle, \",\");\r\n }\r\n if (el.styleBinding) {\r\n data += \"style:(\".concat(el.styleBinding, \"),\");\r\n }\r\n return data;\r\n}\r\nvar style = {\r\n staticKeys: ['staticStyle'],\r\n transformNode: transformNode,\r\n genData: genData$1\r\n};\n\nvar decoder;\r\nvar he = {\r\n decode: function (html) {\r\n decoder = decoder || document.createElement('div');\r\n decoder.innerHTML = html;\r\n return decoder.textContent;\r\n }\r\n};\n\nvar isUnaryTag = makeMap('area,base,br,col,embed,frame,hr,img,input,isindex,keygen,' +\r\n 'link,meta,param,source,track,wbr');\r\n// Elements that you can, intentionally, leave open\r\n// (and which close themselves)\r\nvar canBeLeftOpenTag = makeMap('colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source');\r\n// HTML5 tags https://html.spec.whatwg.org/multipage/indices.html#elements-3\r\n// Phrasing Content https://html.spec.whatwg.org/multipage/dom.html#phrasing-content\r\nvar isNonPhrasingTag = makeMap('address,article,aside,base,blockquote,body,caption,col,colgroup,dd,' +\r\n 'details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,' +\r\n 'h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,' +\r\n 'optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,' +\r\n 'title,tr,track');\n\n/**\r\n * Not type-checking this file because it's mostly vendor code.\r\n */\r\n// Regular Expressions for parsing tags and attributes\r\nvar attribute = /^\\s*([^\\s\"'<>\\/=]+)(?:\\s*(=)\\s*(?:\"([^\"]*)\"+|'([^']*)'+|([^\\s\"'=<>`]+)))?/;\r\nvar dynamicArgAttribute = /^\\s*((?:v-[\\w-]+:|@|:|#)\\[[^=]+?\\][^\\s\"'<>\\/=]*)(?:\\s*(=)\\s*(?:\"([^\"]*)\"+|'([^']*)'+|([^\\s\"'=<>`]+)))?/;\r\nvar ncname = \"[a-zA-Z_][\\\\-\\\\.0-9_a-zA-Z\".concat(unicodeRegExp.source, \"]*\");\r\nvar qnameCapture = \"((?:\".concat(ncname, \"\\\\:)?\").concat(ncname, \")\");\r\nvar startTagOpen = new RegExp(\"^<\".concat(qnameCapture));\r\nvar startTagClose = /^\\s*(\\/?)>/;\r\nvar endTag = new RegExp(\"^<\\\\/\".concat(qnameCapture, \"[^>]*>\"));\r\nvar doctype = /^<!DOCTYPE [^>]+>/i;\r\n// #7298: escape - to avoid being passed as HTML comment when inlined in page\r\nvar comment = /^<!\\--/;\r\nvar conditionalComment = /^<!\\[/;\r\n// Special Elements (can contain anything)\r\nvar isPlainTextElement = makeMap('script,style,textarea', true);\r\nvar reCache = {};\r\nvar decodingMap = {\r\n '&lt;': '<',\r\n '&gt;': '>',\r\n '&quot;': '\"',\r\n '&amp;': '&',\r\n '&#10;': '\\n',\r\n '&#9;': '\\t',\r\n '&#39;': \"'\"\r\n};\r\nvar encodedAttr = /&(?:lt|gt|quot|amp|#39);/g;\r\nvar encodedAttrWithNewLines = /&(?:lt|gt|quot|amp|#39|#10|#9);/g;\r\n// #5992\r\nvar isIgnoreNewlineTag = makeMap('pre,textarea', true);\r\nvar shouldIgnoreFirstNewline = function (tag, html) {\r\n return tag && isIgnoreNewlineTag(tag) && html[0] === '\\n';\r\n};\r\nfunction decodeAttr(value, shouldDecodeNewlines) {\r\n var re = shouldDecodeNewlines ? encodedAttrWithNewLines : encodedAttr;\r\n return value.replace(re, function (match) { return decodingMap[match]; });\r\n}\r\nfunction parseHTML(html, options) {\r\n var stack = [];\r\n var expectHTML = options.expectHTML;\r\n var isUnaryTag = options.isUnaryTag || no;\r\n var canBeLeftOpenTag = options.canBeLeftOpenTag || no;\r\n var index = 0;\r\n var last, lastTag;\r\n var _loop_1 = function () {\r\n last = html;\r\n // Make sure we're not in a plaintext content element like script/style\r\n if (!lastTag || !isPlainTextElement(lastTag)) {\r\n var textEnd = html.indexOf('<');\r\n if (textEnd === 0) {\r\n // Comment:\r\n if (comment.test(html)) {\r\n var commentEnd = html.indexOf('-->');\r\n if (commentEnd >= 0) {\r\n if (options.shouldKeepComment && options.comment) {\r\n options.comment(html.substring(4, commentEnd), index, index + commentEnd + 3);\r\n }\r\n advance(commentEnd + 3);\r\n return \"continue\";\r\n }\r\n }\r\n // http://en.wikipedia.org/wiki/Conditional_comment#Downlevel-revealed_conditional_comment\r\n if (conditionalComment.test(html)) {\r\n var conditionalEnd = html.indexOf(']>');\r\n if (conditionalEnd >= 0) {\r\n advance(conditionalEnd + 2);\r\n return \"continue\";\r\n }\r\n }\r\n // Doctype:\r\n var doctypeMatch = html.match(doctype);\r\n if (doctypeMatch) {\r\n advance(doctypeMatch[0].length);\r\n return \"continue\";\r\n }\r\n // End tag:\r\n var endTagMatch = html.match(endTag);\r\n if (endTagMatch) {\r\n var curIndex = index;\r\n advance(endTagMatch[0].length);\r\n parseEndTag(endTagMatch[1], curIndex, index);\r\n return \"continue\";\r\n }\r\n // Start tag:\r\n var startTagMatch = parseStartTag();\r\n if (startTagMatch) {\r\n handleStartTag(startTagMatch);\r\n if (shouldIgnoreFirstNewline(startTagMatch.tagName, html)) {\r\n advance(1);\r\n }\r\n return \"continue\";\r\n }\r\n }\r\n var text = void 0, rest = void 0, next = void 0;\r\n if (textEnd >= 0) {\r\n rest = html.slice(textEnd);\r\n while (!endTag.test(rest) &&\r\n !startTagOpen.test(rest) &&\r\n !comment.test(rest) &&\r\n !conditionalComment.test(rest)) {\r\n // < in plain text, be forgiving and treat it as text\r\n next = rest.indexOf('<', 1);\r\n if (next < 0)\r\n break;\r\n textEnd += next;\r\n rest = html.slice(textEnd);\r\n }\r\n text = html.substring(0, textEnd);\r\n }\r\n if (textEnd < 0) {\r\n text = html;\r\n }\r\n if (text) {\r\n advance(text.length);\r\n }\r\n if (options.chars && text) {\r\n options.chars(text, index - text.length, index);\r\n }\r\n }\r\n else {\r\n var endTagLength_1 = 0;\r\n var stackedTag_1 = lastTag.toLowerCase();\r\n var reStackedTag = reCache[stackedTag_1] ||\r\n (reCache[stackedTag_1] = new RegExp('([\\\\s\\\\S]*?)(</' + stackedTag_1 + '[^>]*>)', 'i'));\r\n var rest = html.replace(reStackedTag, function (all, text, endTag) {\r\n endTagLength_1 = endTag.length;\r\n if (!isPlainTextElement(stackedTag_1) && stackedTag_1 !== 'noscript') {\r\n text = text\r\n .replace(/<!\\--([\\s\\S]*?)-->/g, '$1') // #7298\r\n .replace(/<!\\[CDATA\\[([\\s\\S]*?)]]>/g, '$1');\r\n }\r\n if (shouldIgnoreFirstNewline(stackedTag_1, text)) {\r\n text = text.slice(1);\r\n }\r\n if (options.chars) {\r\n options.chars(text);\r\n }\r\n return '';\r\n });\r\n index += html.length - rest.length;\r\n html = rest;\r\n parseEndTag(stackedTag_1, index - endTagLength_1, index);\r\n }\r\n if (html === last) {\r\n options.chars && options.chars(html);\r\n if ( true && !stack.length && options.warn) {\r\n options.warn(\"Mal-formatted tag at end of template: \\\"\".concat(html, \"\\\"\"), {\r\n start: index + html.length\r\n });\r\n }\r\n return \"break\";\r\n }\r\n };\r\n while (html) {\r\n var state_1 = _loop_1();\r\n if (state_1 === \"break\")\r\n break;\r\n }\r\n // Clean up any remaining tags\r\n parseEndTag();\r\n function advance(n) {\r\n index += n;\r\n html = html.substring(n);\r\n }\r\n function parseStartTag() {\r\n var start = html.match(startTagOpen);\r\n if (start) {\r\n var match = {\r\n tagName: start[1],\r\n attrs: [],\r\n start: index\r\n };\r\n advance(start[0].length);\r\n var end = void 0, attr = void 0;\r\n while (!(end = html.match(startTagClose)) &&\r\n (attr = html.match(dynamicArgAttribute) || html.match(attribute))) {\r\n attr.start = index;\r\n advance(attr[0].length);\r\n attr.end = index;\r\n match.attrs.push(attr);\r\n }\r\n if (end) {\r\n match.unarySlash = end[1];\r\n advance(end[0].length);\r\n match.end = index;\r\n return match;\r\n }\r\n }\r\n }\r\n function handleStartTag(match) {\r\n var tagName = match.tagName;\r\n var unarySlash = match.unarySlash;\r\n if (expectHTML) {\r\n if (lastTag === 'p' && isNonPhrasingTag(tagName)) {\r\n parseEndTag(lastTag);\r\n }\r\n if (canBeLeftOpenTag(tagName) && lastTag === tagName) {\r\n parseEndTag(tagName);\r\n }\r\n }\r\n var unary = isUnaryTag(tagName) || !!unarySlash;\r\n var l = match.attrs.length;\r\n var attrs = new Array(l);\r\n for (var i = 0; i < l; i++) {\r\n var args = match.attrs[i];\r\n var value = args[3] || args[4] || args[5] || '';\r\n var shouldDecodeNewlines = tagName === 'a' && args[1] === 'href'\r\n ? options.shouldDecodeNewlinesForHref\r\n : options.shouldDecodeNewlines;\r\n attrs[i] = {\r\n name: args[1],\r\n value: decodeAttr(value, shouldDecodeNewlines)\r\n };\r\n if ( true && options.outputSourceRange) {\r\n attrs[i].start = args.start + args[0].match(/^\\s*/).length;\r\n attrs[i].end = args.end;\r\n }\r\n }\r\n if (!unary) {\r\n stack.push({\r\n tag: tagName,\r\n lowerCasedTag: tagName.toLowerCase(),\r\n attrs: attrs,\r\n start: match.start,\r\n end: match.end\r\n });\r\n lastTag = tagName;\r\n }\r\n if (options.start) {\r\n options.start(tagName, attrs, unary, match.start, match.end);\r\n }\r\n }\r\n function parseEndTag(tagName, start, end) {\r\n var pos, lowerCasedTagName;\r\n if (start == null)\r\n start = index;\r\n if (end == null)\r\n end = index;\r\n // Find the closest opened tag of the same type\r\n if (tagName) {\r\n lowerCasedTagName = tagName.toLowerCase();\r\n for (pos = stack.length - 1; pos >= 0; pos--) {\r\n if (stack[pos].lowerCasedTag === lowerCasedTagName) {\r\n break;\r\n }\r\n }\r\n }\r\n else {\r\n // If no tag name is provided, clean shop\r\n pos = 0;\r\n }\r\n if (pos >= 0) {\r\n // Close all the open elements, up the stack\r\n for (var i = stack.length - 1; i >= pos; i--) {\r\n if ( true && (i > pos || !tagName) && options.warn) {\r\n options.warn(\"tag <\".concat(stack[i].tag, \"> has no matching end tag.\"), {\r\n start: stack[i].start,\r\n end: stack[i].end\r\n });\r\n }\r\n if (options.end) {\r\n options.end(stack[i].tag, start, end);\r\n }\r\n }\r\n // Remove the open elements from the stack\r\n stack.length = pos;\r\n lastTag = pos && stack[pos - 1].tag;\r\n }\r\n else if (lowerCasedTagName === 'br') {\r\n if (options.start) {\r\n options.start(tagName, [], true, start, end);\r\n }\r\n }\r\n else if (lowerCasedTagName === 'p') {\r\n if (options.start) {\r\n options.start(tagName, [], false, start, end);\r\n }\r\n if (options.end) {\r\n options.end(tagName, start, end);\r\n }\r\n }\r\n }\r\n}\n\nvar onRE = /^@|^v-on:/;\r\nvar dirRE = /^v-|^@|^:|^#/;\r\nvar forAliasRE = /([\\s\\S]*?)\\s+(?:in|of)\\s+([\\s\\S]*)/;\r\nvar forIteratorRE = /,([^,\\}\\]]*)(?:,([^,\\}\\]]*))?$/;\r\nvar stripParensRE = /^\\(|\\)$/g;\r\nvar dynamicArgRE = /^\\[.*\\]$/;\r\nvar argRE = /:(.*)$/;\r\nvar bindRE = /^:|^\\.|^v-bind:/;\r\nvar modifierRE = /\\.[^.\\]]+(?=[^\\]]*$)/g;\r\nvar slotRE = /^v-slot(:|$)|^#/;\r\nvar lineBreakRE = /[\\r\\n]/;\r\nvar whitespaceRE = /[ \\f\\t\\r\\n]+/g;\r\nvar invalidAttributeRE = /[\\s\"'<>\\/=]/;\r\nvar decodeHTMLCached = cached(he.decode);\r\nvar emptySlotScopeToken = \"_empty_\";\r\n// configurable state\r\nvar warn;\r\nvar delimiters;\r\nvar transforms;\r\nvar preTransforms;\r\nvar postTransforms;\r\nvar platformIsPreTag;\r\nvar platformMustUseProp;\r\nvar platformGetTagNamespace;\r\nvar maybeComponent;\r\nfunction createASTElement(tag, attrs, parent) {\r\n return {\r\n type: 1,\r\n tag: tag,\r\n attrsList: attrs,\r\n attrsMap: makeAttrsMap(attrs),\r\n rawAttrsMap: {},\r\n parent: parent,\r\n children: []\r\n };\r\n}\r\n/**\r\n * Convert HTML string to AST.\r\n */\r\nfunction parse(template, options) {\r\n warn = options.warn || baseWarn;\r\n platformIsPreTag = options.isPreTag || no;\r\n platformMustUseProp = options.mustUseProp || no;\r\n platformGetTagNamespace = options.getTagNamespace || no;\r\n var isReservedTag = options.isReservedTag || no;\r\n maybeComponent = function (el) {\r\n return !!(el.component ||\r\n el.attrsMap[':is'] ||\r\n el.attrsMap['v-bind:is'] ||\r\n !(el.attrsMap.is ? isReservedTag(el.attrsMap.is) : isReservedTag(el.tag)));\r\n };\r\n transforms = pluckModuleFunction(options.modules, 'transformNode');\r\n preTransforms = pluckModuleFunction(options.modules, 'preTransformNode');\r\n postTransforms = pluckModuleFunction(options.modules, 'postTransformNode');\r\n delimiters = options.delimiters;\r\n var stack = [];\r\n var preserveWhitespace = options.preserveWhitespace !== false;\r\n var whitespaceOption = options.whitespace;\r\n var root;\r\n var currentParent;\r\n var inVPre = false;\r\n var inPre = false;\r\n var warned = false;\r\n function warnOnce(msg, range) {\r\n if (!warned) {\r\n warned = true;\r\n warn(msg, range);\r\n }\r\n }\r\n function closeElement(element) {\r\n trimEndingWhitespace(element);\r\n if (!inVPre && !element.processed) {\r\n element = processElement(element, options);\r\n }\r\n // tree management\r\n if (!stack.length && element !== root) {\r\n // allow root elements with v-if, v-else-if and v-else\r\n if (root.if && (element.elseif || element.else)) {\r\n if (true) {\r\n checkRootConstraints(element);\r\n }\r\n addIfCondition(root, {\r\n exp: element.elseif,\r\n block: element\r\n });\r\n }\r\n else if (true) {\r\n warnOnce(\"Component template should contain exactly one root element. \" +\r\n \"If you are using v-if on multiple elements, \" +\r\n \"use v-else-if to chain them instead.\", { start: element.start });\r\n }\r\n }\r\n if (currentParent && !element.forbidden) {\r\n if (element.elseif || element.else) {\r\n processIfConditions(element, currentParent);\r\n }\r\n else {\r\n if (element.slotScope) {\r\n // scoped slot\r\n // keep it in the children list so that v-else(-if) conditions can\r\n // find it as the prev node.\r\n var name_1 = element.slotTarget || '\"default\"';\r\n (currentParent.scopedSlots || (currentParent.scopedSlots = {}))[name_1] = element;\r\n }\r\n currentParent.children.push(element);\r\n element.parent = currentParent;\r\n }\r\n }\r\n // final children cleanup\r\n // filter out scoped slots\r\n element.children = element.children.filter(function (c) { return !c.slotScope; });\r\n // remove trailing whitespace node again\r\n trimEndingWhitespace(element);\r\n // check pre state\r\n if (element.pre) {\r\n inVPre = false;\r\n }\r\n if (platformIsPreTag(element.tag)) {\r\n inPre = false;\r\n }\r\n // apply post-transforms\r\n for (var i = 0; i < postTransforms.length; i++) {\r\n postTransforms[i](element, options);\r\n }\r\n }\r\n function trimEndingWhitespace(el) {\r\n // remove trailing whitespace node\r\n if (!inPre) {\r\n var lastNode = void 0;\r\n while ((lastNode = el.children[el.children.length - 1]) &&\r\n lastNode.type === 3 &&\r\n lastNode.text === ' ') {\r\n el.children.pop();\r\n }\r\n }\r\n }\r\n function checkRootConstraints(el) {\r\n if (el.tag === 'slot' || el.tag === 'template') {\r\n warnOnce(\"Cannot use <\".concat(el.tag, \"> as component root element because it may \") +\r\n 'contain multiple nodes.', { start: el.start });\r\n }\r\n if (el.attrsMap.hasOwnProperty('v-for')) {\r\n warnOnce('Cannot use v-for on stateful component root element because ' +\r\n 'it renders multiple elements.', el.rawAttrsMap['v-for']);\r\n }\r\n }\r\n parseHTML(template, {\r\n warn: warn,\r\n expectHTML: options.expectHTML,\r\n isUnaryTag: options.isUnaryTag,\r\n canBeLeftOpenTag: options.canBeLeftOpenTag,\r\n shouldDecodeNewlines: options.shouldDecodeNewlines,\r\n shouldDecodeNewlinesForHref: options.shouldDecodeNewlinesForHref,\r\n shouldKeepComment: options.comments,\r\n outputSourceRange: options.outputSourceRange,\r\n start: function (tag, attrs, unary, start, end) {\r\n // check namespace.\r\n // inherit parent ns if there is one\r\n var ns = (currentParent && currentParent.ns) || platformGetTagNamespace(tag);\r\n // handle IE svg bug\r\n /* istanbul ignore if */\r\n if (isIE && ns === 'svg') {\r\n attrs = guardIESVGBug(attrs);\r\n }\r\n var element = createASTElement(tag, attrs, currentParent);\r\n if (ns) {\r\n element.ns = ns;\r\n }\r\n if (true) {\r\n if (options.outputSourceRange) {\r\n element.start = start;\r\n element.end = end;\r\n element.rawAttrsMap = element.attrsList.reduce(function (cumulated, attr) {\r\n cumulated[attr.name] = attr;\r\n return cumulated;\r\n }, {});\r\n }\r\n attrs.forEach(function (attr) {\r\n if (invalidAttributeRE.test(attr.name)) {\r\n warn(\"Invalid dynamic argument expression: attribute names cannot contain \" +\r\n \"spaces, quotes, <, >, / or =.\", options.outputSourceRange\r\n ? {\r\n start: attr.start + attr.name.indexOf(\"[\"),\r\n end: attr.start + attr.name.length\r\n }\r\n : undefined);\r\n }\r\n });\r\n }\r\n if (isForbiddenTag(element) && !isServerRendering()) {\r\n element.forbidden = true;\r\n true &&\r\n warn('Templates should only be responsible for mapping the state to the ' +\r\n 'UI. Avoid placing tags with side-effects in your templates, such as ' +\r\n \"<\".concat(tag, \">\") +\r\n ', as they will not be parsed.', { start: element.start });\r\n }\r\n // apply pre-transforms\r\n for (var i = 0; i < preTransforms.length; i++) {\r\n element = preTransforms[i](element, options) || element;\r\n }\r\n if (!inVPre) {\r\n processPre(element);\r\n if (element.pre) {\r\n inVPre = true;\r\n }\r\n }\r\n if (platformIsPreTag(element.tag)) {\r\n inPre = true;\r\n }\r\n if (inVPre) {\r\n processRawAttrs(element);\r\n }\r\n else if (!element.processed) {\r\n // structural directives\r\n processFor(element);\r\n processIf(element);\r\n processOnce(element);\r\n }\r\n if (!root) {\r\n root = element;\r\n if (true) {\r\n checkRootConstraints(root);\r\n }\r\n }\r\n if (!unary) {\r\n currentParent = element;\r\n stack.push(element);\r\n }\r\n else {\r\n closeElement(element);\r\n }\r\n },\r\n end: function (tag, start, end) {\r\n var element = stack[stack.length - 1];\r\n // pop stack\r\n stack.length -= 1;\r\n currentParent = stack[stack.length - 1];\r\n if ( true && options.outputSourceRange) {\r\n element.end = end;\r\n }\r\n closeElement(element);\r\n },\r\n chars: function (text, start, end) {\r\n if (!currentParent) {\r\n if (true) {\r\n if (text === template) {\r\n warnOnce('Component template requires a root element, rather than just text.', { start: start });\r\n }\r\n else if ((text = text.trim())) {\r\n warnOnce(\"text \\\"\".concat(text, \"\\\" outside root element will be ignored.\"), {\r\n start: start\r\n });\r\n }\r\n }\r\n return;\r\n }\r\n // IE textarea placeholder bug\r\n /* istanbul ignore if */\r\n if (isIE &&\r\n currentParent.tag === 'textarea' &&\r\n currentParent.attrsMap.placeholder === text) {\r\n return;\r\n }\r\n var children = currentParent.children;\r\n if (inPre || text.trim()) {\r\n text = isTextTag(currentParent)\r\n ? text\r\n : decodeHTMLCached(text);\r\n }\r\n else if (!children.length) {\r\n // remove the whitespace-only node right after an opening tag\r\n text = '';\r\n }\r\n else if (whitespaceOption) {\r\n if (whitespaceOption === 'condense') {\r\n // in condense mode, remove the whitespace node if it contains\r\n // line break, otherwise condense to a single space\r\n text = lineBreakRE.test(text) ? '' : ' ';\r\n }\r\n else {\r\n text = ' ';\r\n }\r\n }\r\n else {\r\n text = preserveWhitespace ? ' ' : '';\r\n }\r\n if (text) {\r\n if (!inPre && whitespaceOption === 'condense') {\r\n // condense consecutive whitespaces into single space\r\n text = text.replace(whitespaceRE, ' ');\r\n }\r\n var res = void 0;\r\n var child = void 0;\r\n if (!inVPre && text !== ' ' && (res = parseText(text, delimiters))) {\r\n child = {\r\n type: 2,\r\n expression: res.expression,\r\n tokens: res.tokens,\r\n text: text\r\n };\r\n }\r\n else if (text !== ' ' ||\r\n !children.length ||\r\n children[children.length - 1].text !== ' ') {\r\n child = {\r\n type: 3,\r\n text: text\r\n };\r\n }\r\n if (child) {\r\n if ( true && options.outputSourceRange) {\r\n child.start = start;\r\n child.end = end;\r\n }\r\n children.push(child);\r\n }\r\n }\r\n },\r\n comment: function (text, start, end) {\r\n // adding anything as a sibling to the root node is forbidden\r\n // comments should still be allowed, but ignored\r\n if (currentParent) {\r\n var child = {\r\n type: 3,\r\n text: text,\r\n isComment: true\r\n };\r\n if ( true && options.outputSourceRange) {\r\n child.start = start;\r\n child.end = end;\r\n }\r\n currentParent.children.push(child);\r\n }\r\n }\r\n });\r\n return root;\r\n}\r\nfunction processPre(el) {\r\n if (getAndRemoveAttr(el, 'v-pre') != null) {\r\n el.pre = true;\r\n }\r\n}\r\nfunction processRawAttrs(el) {\r\n var list = el.attrsList;\r\n var len = list.length;\r\n if (len) {\r\n var attrs = (el.attrs = new Array(len));\r\n for (var i = 0; i < len; i++) {\r\n attrs[i] = {\r\n name: list[i].name,\r\n value: JSON.stringify(list[i].value)\r\n };\r\n if (list[i].start != null) {\r\n attrs[i].start = list[i].start;\r\n attrs[i].end = list[i].end;\r\n }\r\n }\r\n }\r\n else if (!el.pre) {\r\n // non root node in pre blocks with no attributes\r\n el.plain = true;\r\n }\r\n}\r\nfunction processElement(element, options) {\r\n processKey(element);\r\n // determine whether this is a plain element after\r\n // removing structural attributes\r\n element.plain =\r\n !element.key && !element.scopedSlots && !element.attrsList.length;\r\n processRef(element);\r\n processSlotContent(element);\r\n processSlotOutlet(element);\r\n processComponent(element);\r\n for (var i = 0; i < transforms.length; i++) {\r\n element = transforms[i](element, options) || element;\r\n }\r\n processAttrs(element);\r\n return element;\r\n}\r\nfunction processKey(el) {\r\n var exp = getBindingAttr(el, 'key');\r\n if (exp) {\r\n if (true) {\r\n if (el.tag === 'template') {\r\n warn(\"<template> cannot be keyed. Place the key on real elements instead.\", getRawBindingAttr(el, 'key'));\r\n }\r\n if (el.for) {\r\n var iterator = el.iterator2 || el.iterator1;\r\n var parent_1 = el.parent;\r\n if (iterator &&\r\n iterator === exp &&\r\n parent_1 &&\r\n parent_1.tag === 'transition-group') {\r\n warn(\"Do not use v-for index as key on <transition-group> children, \" +\r\n \"this is the same as not using keys.\", getRawBindingAttr(el, 'key'), true /* tip */);\r\n }\r\n }\r\n }\r\n el.key = exp;\r\n }\r\n}\r\nfunction processRef(el) {\r\n var ref = getBindingAttr(el, 'ref');\r\n if (ref) {\r\n el.ref = ref;\r\n el.refInFor = checkInFor(el);\r\n }\r\n}\r\nfunction processFor(el) {\r\n var exp;\r\n if ((exp = getAndRemoveAttr(el, 'v-for'))) {\r\n var res = parseFor(exp);\r\n if (res) {\r\n extend(el, res);\r\n }\r\n else if (true) {\r\n warn(\"Invalid v-for expression: \".concat(exp), el.rawAttrsMap['v-for']);\r\n }\r\n }\r\n}\r\nfunction parseFor(exp) {\r\n var inMatch = exp.match(forAliasRE);\r\n if (!inMatch)\r\n return;\r\n var res = {};\r\n res.for = inMatch[2].trim();\r\n var alias = inMatch[1].trim().replace(stripParensRE, '');\r\n var iteratorMatch = alias.match(forIteratorRE);\r\n if (iteratorMatch) {\r\n res.alias = alias.replace(forIteratorRE, '').trim();\r\n res.iterator1 = iteratorMatch[1].trim();\r\n if (iteratorMatch[2]) {\r\n res.iterator2 = iteratorMatch[2].trim();\r\n }\r\n }\r\n else {\r\n res.alias = alias;\r\n }\r\n return res;\r\n}\r\nfunction processIf(el) {\r\n var exp = getAndRemoveAttr(el, 'v-if');\r\n if (exp) {\r\n el.if = exp;\r\n addIfCondition(el, {\r\n exp: exp,\r\n block: el\r\n });\r\n }\r\n else {\r\n if (getAndRemoveAttr(el, 'v-else') != null) {\r\n el.else = true;\r\n }\r\n var elseif = getAndRemoveAttr(el, 'v-else-if');\r\n if (elseif) {\r\n el.elseif = elseif;\r\n }\r\n }\r\n}\r\nfunction processIfConditions(el, parent) {\r\n var prev = findPrevElement(parent.children);\r\n if (prev && prev.if) {\r\n addIfCondition(prev, {\r\n exp: el.elseif,\r\n block: el\r\n });\r\n }\r\n else if (true) {\r\n warn(\"v-\".concat(el.elseif ? 'else-if=\"' + el.elseif + '\"' : 'else', \" \") +\r\n \"used on element <\".concat(el.tag, \"> without corresponding v-if.\"), el.rawAttrsMap[el.elseif ? 'v-else-if' : 'v-else']);\r\n }\r\n}\r\nfunction findPrevElement(children) {\r\n var i = children.length;\r\n while (i--) {\r\n if (children[i].type === 1) {\r\n return children[i];\r\n }\r\n else {\r\n if ( true && children[i].text !== ' ') {\r\n warn(\"text \\\"\".concat(children[i].text.trim(), \"\\\" between v-if and v-else(-if) \") +\r\n \"will be ignored.\", children[i]);\r\n }\r\n children.pop();\r\n }\r\n }\r\n}\r\nfunction addIfCondition(el, condition) {\r\n if (!el.ifConditions) {\r\n el.ifConditions = [];\r\n }\r\n el.ifConditions.push(condition);\r\n}\r\nfunction processOnce(el) {\r\n var once = getAndRemoveAttr(el, 'v-once');\r\n if (once != null) {\r\n el.once = true;\r\n }\r\n}\r\n// handle content being passed to a component as slot,\r\n// e.g. <template slot=\"xxx\">, <div slot-scope=\"xxx\">\r\nfunction processSlotContent(el) {\r\n var slotScope;\r\n if (el.tag === 'template') {\r\n slotScope = getAndRemoveAttr(el, 'scope');\r\n /* istanbul ignore if */\r\n if ( true && slotScope) {\r\n warn(\"the \\\"scope\\\" attribute for scoped slots have been deprecated and \" +\r\n \"replaced by \\\"slot-scope\\\" since 2.5. The new \\\"slot-scope\\\" attribute \" +\r\n \"can also be used on plain elements in addition to <template> to \" +\r\n \"denote scoped slots.\", el.rawAttrsMap['scope'], true);\r\n }\r\n el.slotScope = slotScope || getAndRemoveAttr(el, 'slot-scope');\r\n }\r\n else if ((slotScope = getAndRemoveAttr(el, 'slot-scope'))) {\r\n /* istanbul ignore if */\r\n if ( true && el.attrsMap['v-for']) {\r\n warn(\"Ambiguous combined usage of slot-scope and v-for on <\".concat(el.tag, \"> \") +\r\n \"(v-for takes higher priority). Use a wrapper <template> for the \" +\r\n \"scoped slot to make it clearer.\", el.rawAttrsMap['slot-scope'], true);\r\n }\r\n el.slotScope = slotScope;\r\n }\r\n // slot=\"xxx\"\r\n var slotTarget = getBindingAttr(el, 'slot');\r\n if (slotTarget) {\r\n el.slotTarget = slotTarget === '\"\"' ? '\"default\"' : slotTarget;\r\n el.slotTargetDynamic = !!(el.attrsMap[':slot'] || el.attrsMap['v-bind:slot']);\r\n // preserve slot as an attribute for native shadow DOM compat\r\n // only for non-scoped slots.\r\n if (el.tag !== 'template' && !el.slotScope) {\r\n addAttr(el, 'slot', slotTarget, getRawBindingAttr(el, 'slot'));\r\n }\r\n }\r\n // 2.6 v-slot syntax\r\n {\r\n if (el.tag === 'template') {\r\n // v-slot on <template>\r\n var slotBinding = getAndRemoveAttrByRegex(el, slotRE);\r\n if (slotBinding) {\r\n if (true) {\r\n if (el.slotTarget || el.slotScope) {\r\n warn(\"Unexpected mixed usage of different slot syntaxes.\", el);\r\n }\r\n if (el.parent && !maybeComponent(el.parent)) {\r\n warn(\"<template v-slot> can only appear at the root level inside \" +\r\n \"the receiving component\", el);\r\n }\r\n }\r\n var _a = getSlotName(slotBinding), name_2 = _a.name, dynamic = _a.dynamic;\r\n el.slotTarget = name_2;\r\n el.slotTargetDynamic = dynamic;\r\n el.slotScope = slotBinding.value || emptySlotScopeToken; // force it into a scoped slot for perf\r\n }\r\n }\r\n else {\r\n // v-slot on component, denotes default slot\r\n var slotBinding = getAndRemoveAttrByRegex(el, slotRE);\r\n if (slotBinding) {\r\n if (true) {\r\n if (!maybeComponent(el)) {\r\n warn(\"v-slot can only be used on components or <template>.\", slotBinding);\r\n }\r\n if (el.slotScope || el.slotTarget) {\r\n warn(\"Unexpected mixed usage of different slot syntaxes.\", el);\r\n }\r\n if (el.scopedSlots) {\r\n warn(\"To avoid scope ambiguity, the default slot should also use \" +\r\n \"<template> syntax when there are other named slots.\", slotBinding);\r\n }\r\n }\r\n // add the component's children to its default slot\r\n var slots = el.scopedSlots || (el.scopedSlots = {});\r\n var _b = getSlotName(slotBinding), name_3 = _b.name, dynamic = _b.dynamic;\r\n var slotContainer_1 = (slots[name_3] = createASTElement('template', [], el));\r\n slotContainer_1.slotTarget = name_3;\r\n slotContainer_1.slotTargetDynamic = dynamic;\r\n slotContainer_1.children = el.children.filter(function (c) {\r\n if (!c.slotScope) {\r\n c.parent = slotContainer_1;\r\n return true;\r\n }\r\n });\r\n slotContainer_1.slotScope = slotBinding.value || emptySlotScopeToken;\r\n // remove children as they are returned from scopedSlots now\r\n el.children = [];\r\n // mark el non-plain so data gets generated\r\n el.plain = false;\r\n }\r\n }\r\n }\r\n}\r\nfunction getSlotName(binding) {\r\n var name = binding.name.replace(slotRE, '');\r\n if (!name) {\r\n if (binding.name[0] !== '#') {\r\n name = 'default';\r\n }\r\n else if (true) {\r\n warn(\"v-slot shorthand syntax requires a slot name.\", binding);\r\n }\r\n }\r\n return dynamicArgRE.test(name)\r\n ? // dynamic [name]\r\n { name: name.slice(1, -1), dynamic: true }\r\n : // static name\r\n { name: \"\\\"\".concat(name, \"\\\"\"), dynamic: false };\r\n}\r\n// handle <slot/> outlets\r\nfunction processSlotOutlet(el) {\r\n if (el.tag === 'slot') {\r\n el.slotName = getBindingAttr(el, 'name');\r\n if ( true && el.key) {\r\n warn(\"`key` does not work on <slot> because slots are abstract outlets \" +\r\n \"and can possibly expand into multiple elements. \" +\r\n \"Use the key on a wrapping element instead.\", getRawBindingAttr(el, 'key'));\r\n }\r\n }\r\n}\r\nfunction processComponent(el) {\r\n var binding;\r\n if ((binding = getBindingAttr(el, 'is'))) {\r\n el.component = binding;\r\n }\r\n if (getAndRemoveAttr(el, 'inline-template') != null) {\r\n el.inlineTemplate = true;\r\n }\r\n}\r\nfunction processAttrs(el) {\r\n var list = el.attrsList;\r\n var i, l, name, rawName, value, modifiers, syncGen, isDynamic;\r\n for (i = 0, l = list.length; i < l; i++) {\r\n name = rawName = list[i].name;\r\n value = list[i].value;\r\n if (dirRE.test(name)) {\r\n // mark element as dynamic\r\n el.hasBindings = true;\r\n // modifiers\r\n modifiers = parseModifiers(name.replace(dirRE, ''));\r\n // support .foo shorthand syntax for the .prop modifier\r\n if (modifiers) {\r\n name = name.replace(modifierRE, '');\r\n }\r\n if (bindRE.test(name)) {\r\n // v-bind\r\n name = name.replace(bindRE, '');\r\n value = parseFilters(value);\r\n isDynamic = dynamicArgRE.test(name);\r\n if (isDynamic) {\r\n name = name.slice(1, -1);\r\n }\r\n if ( true && value.trim().length === 0) {\r\n warn(\"The value for a v-bind expression cannot be empty. Found in \\\"v-bind:\".concat(name, \"\\\"\"));\r\n }\r\n if (modifiers) {\r\n if (modifiers.prop && !isDynamic) {\r\n name = camelize(name);\r\n if (name === 'innerHtml')\r\n name = 'innerHTML';\r\n }\r\n if (modifiers.camel && !isDynamic) {\r\n name = camelize(name);\r\n }\r\n if (modifiers.sync) {\r\n syncGen = genAssignmentCode(value, \"$event\");\r\n if (!isDynamic) {\r\n addHandler(el, \"update:\".concat(camelize(name)), syncGen, null, false, warn, list[i]);\r\n if (hyphenate(name) !== camelize(name)) {\r\n addHandler(el, \"update:\".concat(hyphenate(name)), syncGen, null, false, warn, list[i]);\r\n }\r\n }\r\n else {\r\n // handler w/ dynamic event name\r\n addHandler(el, \"\\\"update:\\\"+(\".concat(name, \")\"), syncGen, null, false, warn, list[i], true // dynamic\r\n );\r\n }\r\n }\r\n }\r\n if ((modifiers && modifiers.prop) ||\r\n (!el.component && platformMustUseProp(el.tag, el.attrsMap.type, name))) {\r\n addProp(el, name, value, list[i], isDynamic);\r\n }\r\n else {\r\n addAttr(el, name, value, list[i], isDynamic);\r\n }\r\n }\r\n else if (onRE.test(name)) {\r\n // v-on\r\n name = name.replace(onRE, '');\r\n isDynamic = dynamicArgRE.test(name);\r\n if (isDynamic) {\r\n name = name.slice(1, -1);\r\n }\r\n addHandler(el, name, value, modifiers, false, warn, list[i], isDynamic);\r\n }\r\n else {\r\n // normal directives\r\n name = name.replace(dirRE, '');\r\n // parse arg\r\n var argMatch = name.match(argRE);\r\n var arg = argMatch && argMatch[1];\r\n isDynamic = false;\r\n if (arg) {\r\n name = name.slice(0, -(arg.length + 1));\r\n if (dynamicArgRE.test(arg)) {\r\n arg = arg.slice(1, -1);\r\n isDynamic = true;\r\n }\r\n }\r\n addDirective(el, name, rawName, value, arg, isDynamic, modifiers, list[i]);\r\n if ( true && name === 'model') {\r\n checkForAliasModel(el, value);\r\n }\r\n }\r\n }\r\n else {\r\n // literal attribute\r\n if (true) {\r\n var res = parseText(value, delimiters);\r\n if (res) {\r\n warn(\"\".concat(name, \"=\\\"\").concat(value, \"\\\": \") +\r\n 'Interpolation inside attributes has been removed. ' +\r\n 'Use v-bind or the colon shorthand instead. For example, ' +\r\n 'instead of <div id=\"{{ val }}\">, use <div :id=\"val\">.', list[i]);\r\n }\r\n }\r\n addAttr(el, name, JSON.stringify(value), list[i]);\r\n // #6887 firefox doesn't update muted state if set via attribute\r\n // even immediately after element creation\r\n if (!el.component &&\r\n name === 'muted' &&\r\n platformMustUseProp(el.tag, el.attrsMap.type, name)) {\r\n addProp(el, name, 'true', list[i]);\r\n }\r\n }\r\n }\r\n}\r\nfunction checkInFor(el) {\r\n var parent = el;\r\n while (parent) {\r\n if (parent.for !== undefined) {\r\n return true;\r\n }\r\n parent = parent.parent;\r\n }\r\n return false;\r\n}\r\nfunction parseModifiers(name) {\r\n var match = name.match(modifierRE);\r\n if (match) {\r\n var ret_1 = {};\r\n match.forEach(function (m) {\r\n ret_1[m.slice(1)] = true;\r\n });\r\n return ret_1;\r\n }\r\n}\r\nfunction makeAttrsMap(attrs) {\r\n var map = {};\r\n for (var i = 0, l = attrs.length; i < l; i++) {\r\n if ( true && map[attrs[i].name] && !isIE && !isEdge) {\r\n warn('duplicate attribute: ' + attrs[i].name, attrs[i]);\r\n }\r\n map[attrs[i].name] = attrs[i].value;\r\n }\r\n return map;\r\n}\r\n// for script (e.g. type=\"x/template\") or style, do not decode content\r\nfunction isTextTag(el) {\r\n return el.tag === 'script' || el.tag === 'style';\r\n}\r\nfunction isForbiddenTag(el) {\r\n return (el.tag === 'style' ||\r\n (el.tag === 'script' &&\r\n (!el.attrsMap.type || el.attrsMap.type === 'text/javascript')));\r\n}\r\nvar ieNSBug = /^xmlns:NS\\d+/;\r\nvar ieNSPrefix = /^NS\\d+:/;\r\n/* istanbul ignore next */\r\nfunction guardIESVGBug(attrs) {\r\n var res = [];\r\n for (var i = 0; i < attrs.length; i++) {\r\n var attr = attrs[i];\r\n if (!ieNSBug.test(attr.name)) {\r\n attr.name = attr.name.replace(ieNSPrefix, '');\r\n res.push(attr);\r\n }\r\n }\r\n return res;\r\n}\r\nfunction checkForAliasModel(el, value) {\r\n var _el = el;\r\n while (_el) {\r\n if (_el.for && _el.alias === value) {\r\n warn(\"<\".concat(el.tag, \" v-model=\\\"\").concat(value, \"\\\">: \") +\r\n \"You are binding v-model directly to a v-for iteration alias. \" +\r\n \"This will not be able to modify the v-for source array because \" +\r\n \"writing to the alias is like modifying a function local variable. \" +\r\n \"Consider using an array of objects and use v-model on an object property instead.\", el.rawAttrsMap['v-model']);\r\n }\r\n _el = _el.parent;\r\n }\r\n}\n\n/**\r\n * Expand input[v-model] with dynamic type bindings into v-if-else chains\r\n * Turn this:\r\n * <input v-model=\"data[type]\" :type=\"type\">\r\n * into this:\r\n * <input v-if=\"type === 'checkbox'\" type=\"checkbox\" v-model=\"data[type]\">\r\n * <input v-else-if=\"type === 'radio'\" type=\"radio\" v-model=\"data[type]\">\r\n * <input v-else :type=\"type\" v-model=\"data[type]\">\r\n */\r\nfunction preTransformNode(el, options) {\r\n if (el.tag === 'input') {\r\n var map = el.attrsMap;\r\n if (!map['v-model']) {\r\n return;\r\n }\r\n var typeBinding = void 0;\r\n if (map[':type'] || map['v-bind:type']) {\r\n typeBinding = getBindingAttr(el, 'type');\r\n }\r\n if (!map.type && !typeBinding && map['v-bind']) {\r\n typeBinding = \"(\".concat(map['v-bind'], \").type\");\r\n }\r\n if (typeBinding) {\r\n var ifCondition = getAndRemoveAttr(el, 'v-if', true);\r\n var ifConditionExtra = ifCondition ? \"&&(\".concat(ifCondition, \")\") : \"\";\r\n var hasElse = getAndRemoveAttr(el, 'v-else', true) != null;\r\n var elseIfCondition = getAndRemoveAttr(el, 'v-else-if', true);\r\n // 1. checkbox\r\n var branch0 = cloneASTElement(el);\r\n // process for on the main node\r\n processFor(branch0);\r\n addRawAttr(branch0, 'type', 'checkbox');\r\n processElement(branch0, options);\r\n branch0.processed = true; // prevent it from double-processed\r\n branch0.if = \"(\".concat(typeBinding, \")==='checkbox'\") + ifConditionExtra;\r\n addIfCondition(branch0, {\r\n exp: branch0.if,\r\n block: branch0\r\n });\r\n // 2. add radio else-if condition\r\n var branch1 = cloneASTElement(el);\r\n getAndRemoveAttr(branch1, 'v-for', true);\r\n addRawAttr(branch1, 'type', 'radio');\r\n processElement(branch1, options);\r\n addIfCondition(branch0, {\r\n exp: \"(\".concat(typeBinding, \")==='radio'\") + ifConditionExtra,\r\n block: branch1\r\n });\r\n // 3. other\r\n var branch2 = cloneASTElement(el);\r\n getAndRemoveAttr(branch2, 'v-for', true);\r\n addRawAttr(branch2, ':type', typeBinding);\r\n processElement(branch2, options);\r\n addIfCondition(branch0, {\r\n exp: ifCondition,\r\n block: branch2\r\n });\r\n if (hasElse) {\r\n branch0.else = true;\r\n }\r\n else if (elseIfCondition) {\r\n branch0.elseif = elseIfCondition;\r\n }\r\n return branch0;\r\n }\r\n }\r\n}\r\nfunction cloneASTElement(el) {\r\n return createASTElement(el.tag, el.attrsList.slice(), el.parent);\r\n}\r\nvar model = {\r\n preTransformNode: preTransformNode\r\n};\n\nvar modules = [klass, style, model];\n\nfunction text(el, dir) {\r\n if (dir.value) {\r\n addProp(el, 'textContent', \"_s(\".concat(dir.value, \")\"), dir);\r\n }\r\n}\n\nfunction html(el, dir) {\r\n if (dir.value) {\r\n addProp(el, 'innerHTML', \"_s(\".concat(dir.value, \")\"), dir);\r\n }\r\n}\n\nvar directives = {\r\n model: model$1,\r\n text: text,\r\n html: html\r\n};\n\nvar baseOptions = {\r\n expectHTML: true,\r\n modules: modules,\r\n directives: directives,\r\n isPreTag: isPreTag,\r\n isUnaryTag: isUnaryTag,\r\n mustUseProp: mustUseProp,\r\n canBeLeftOpenTag: canBeLeftOpenTag,\r\n isReservedTag: isReservedTag,\r\n getTagNamespace: getTagNamespace,\r\n staticKeys: genStaticKeys$1(modules)\r\n};\n\nvar isStaticKey;\r\nvar isPlatformReservedTag;\r\nvar genStaticKeysCached = cached(genStaticKeys);\r\n/**\r\n * Goal of the optimizer: walk the generated template AST tree\r\n * and detect sub-trees that are purely static, i.e. parts of\r\n * the DOM that never needs to change.\r\n *\r\n * Once we detect these sub-trees, we can:\r\n *\r\n * 1. Hoist them into constants, so that we no longer need to\r\n * create fresh nodes for them on each re-render;\r\n * 2. Completely skip them in the patching process.\r\n */\r\nfunction optimize(root, options) {\r\n if (!root)\r\n return;\r\n isStaticKey = genStaticKeysCached(options.staticKeys || '');\r\n isPlatformReservedTag = options.isReservedTag || no;\r\n // first pass: mark all non-static nodes.\r\n markStatic(root);\r\n // second pass: mark static roots.\r\n markStaticRoots(root, false);\r\n}\r\nfunction genStaticKeys(keys) {\r\n return makeMap('type,tag,attrsList,attrsMap,plain,parent,children,attrs,start,end,rawAttrsMap' +\r\n (keys ? ',' + keys : ''));\r\n}\r\nfunction markStatic(node) {\r\n node.static = isStatic(node);\r\n if (node.type === 1) {\r\n // do not make component slot content static. this avoids\r\n // 1. components not able to mutate slot nodes\r\n // 2. static slot content fails for hot-reloading\r\n if (!isPlatformReservedTag(node.tag) &&\r\n node.tag !== 'slot' &&\r\n node.attrsMap['inline-template'] == null) {\r\n return;\r\n }\r\n for (var i = 0, l = node.children.length; i < l; i++) {\r\n var child = node.children[i];\r\n markStatic(child);\r\n if (!child.static) {\r\n node.static = false;\r\n }\r\n }\r\n if (node.ifConditions) {\r\n for (var i = 1, l = node.ifConditions.length; i < l; i++) {\r\n var block = node.ifConditions[i].block;\r\n markStatic(block);\r\n if (!block.static) {\r\n node.static = false;\r\n }\r\n }\r\n }\r\n }\r\n}\r\nfunction markStaticRoots(node, isInFor) {\r\n if (node.type === 1) {\r\n if (node.static || node.once) {\r\n node.staticInFor = isInFor;\r\n }\r\n // For a node to qualify as a static root, it should have children that\r\n // are not just static text. Otherwise the cost of hoisting out will\r\n // outweigh the benefits and it's better off to just always render it fresh.\r\n if (node.static &&\r\n node.children.length &&\r\n !(node.children.length === 1 && node.children[0].type === 3)) {\r\n node.staticRoot = true;\r\n return;\r\n }\r\n else {\r\n node.staticRoot = false;\r\n }\r\n if (node.children) {\r\n for (var i = 0, l = node.children.length; i < l; i++) {\r\n markStaticRoots(node.children[i], isInFor || !!node.for);\r\n }\r\n }\r\n if (node.ifConditions) {\r\n for (var i = 1, l = node.ifConditions.length; i < l; i++) {\r\n markStaticRoots(node.ifConditions[i].block, isInFor);\r\n }\r\n }\r\n }\r\n}\r\nfunction isStatic(node) {\r\n if (node.type === 2) {\r\n // expression\r\n return false;\r\n }\r\n if (node.type === 3) {\r\n // text\r\n return true;\r\n }\r\n return !!(node.pre ||\r\n (!node.hasBindings && // no dynamic bindings\r\n !node.if &&\r\n !node.for && // not v-if or v-for or v-else\r\n !isBuiltInTag(node.tag) && // not a built-in\r\n isPlatformReservedTag(node.tag) && // not a component\r\n !isDirectChildOfTemplateFor(node) &&\r\n Object.keys(node).every(isStaticKey)));\r\n}\r\nfunction isDirectChildOfTemplateFor(node) {\r\n while (node.parent) {\r\n node = node.parent;\r\n if (node.tag !== 'template') {\r\n return false;\r\n }\r\n if (node.for) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\n\nvar fnExpRE = /^([\\w$_]+|\\([^)]*?\\))\\s*=>|^function(?:\\s+[\\w$]+)?\\s*\\(/;\r\nvar fnInvokeRE = /\\([^)]*?\\);*$/;\r\nvar simplePathRE = /^[A-Za-z_$][\\w$]*(?:\\.[A-Za-z_$][\\w$]*|\\['[^']*?']|\\[\"[^\"]*?\"]|\\[\\d+]|\\[[A-Za-z_$][\\w$]*])*$/;\r\n// KeyboardEvent.keyCode aliases\r\nvar keyCodes = {\r\n esc: 27,\r\n tab: 9,\r\n enter: 13,\r\n space: 32,\r\n up: 38,\r\n left: 37,\r\n right: 39,\r\n down: 40,\r\n delete: [8, 46]\r\n};\r\n// KeyboardEvent.key aliases\r\nvar keyNames = {\r\n // #7880: IE11 and Edge use `Esc` for Escape key name.\r\n esc: ['Esc', 'Escape'],\r\n tab: 'Tab',\r\n enter: 'Enter',\r\n // #9112: IE11 uses `Spacebar` for Space key name.\r\n space: [' ', 'Spacebar'],\r\n // #7806: IE11 uses key names without `Arrow` prefix for arrow keys.\r\n up: ['Up', 'ArrowUp'],\r\n left: ['Left', 'ArrowLeft'],\r\n right: ['Right', 'ArrowRight'],\r\n down: ['Down', 'ArrowDown'],\r\n // #9112: IE11 uses `Del` for Delete key name.\r\n delete: ['Backspace', 'Delete', 'Del']\r\n};\r\n// #4868: modifiers that prevent the execution of the listener\r\n// need to explicitly return null so that we can determine whether to remove\r\n// the listener for .once\r\nvar genGuard = function (condition) { return \"if(\".concat(condition, \")return null;\"); };\r\nvar modifierCode = {\r\n stop: '$event.stopPropagation();',\r\n prevent: '$event.preventDefault();',\r\n self: genGuard(\"$event.target !== $event.currentTarget\"),\r\n ctrl: genGuard(\"!$event.ctrlKey\"),\r\n shift: genGuard(\"!$event.shiftKey\"),\r\n alt: genGuard(\"!$event.altKey\"),\r\n meta: genGuard(\"!$event.metaKey\"),\r\n left: genGuard(\"'button' in $event && $event.button !== 0\"),\r\n middle: genGuard(\"'button' in $event && $event.button !== 1\"),\r\n right: genGuard(\"'button' in $event && $event.button !== 2\")\r\n};\r\nfunction genHandlers(events, isNative) {\r\n var prefix = isNative ? 'nativeOn:' : 'on:';\r\n var staticHandlers = \"\";\r\n var dynamicHandlers = \"\";\r\n for (var name_1 in events) {\r\n var handlerCode = genHandler(events[name_1]);\r\n //@ts-expect-error\r\n if (events[name_1] && events[name_1].dynamic) {\r\n dynamicHandlers += \"\".concat(name_1, \",\").concat(handlerCode, \",\");\r\n }\r\n else {\r\n staticHandlers += \"\\\"\".concat(name_1, \"\\\":\").concat(handlerCode, \",\");\r\n }\r\n }\r\n staticHandlers = \"{\".concat(staticHandlers.slice(0, -1), \"}\");\r\n if (dynamicHandlers) {\r\n return prefix + \"_d(\".concat(staticHandlers, \",[\").concat(dynamicHandlers.slice(0, -1), \"])\");\r\n }\r\n else {\r\n return prefix + staticHandlers;\r\n }\r\n}\r\nfunction genHandler(handler) {\r\n if (!handler) {\r\n return 'function(){}';\r\n }\r\n if (Array.isArray(handler)) {\r\n return \"[\".concat(handler.map(function (handler) { return genHandler(handler); }).join(','), \"]\");\r\n }\r\n var isMethodPath = simplePathRE.test(handler.value);\r\n var isFunctionExpression = fnExpRE.test(handler.value);\r\n var isFunctionInvocation = simplePathRE.test(handler.value.replace(fnInvokeRE, ''));\r\n if (!handler.modifiers) {\r\n if (isMethodPath || isFunctionExpression) {\r\n return handler.value;\r\n }\r\n return \"function($event){\".concat(isFunctionInvocation ? \"return \".concat(handler.value) : handler.value, \"}\"); // inline statement\r\n }\r\n else {\r\n var code = '';\r\n var genModifierCode = '';\r\n var keys = [];\r\n var _loop_1 = function (key) {\r\n if (modifierCode[key]) {\r\n genModifierCode += modifierCode[key];\r\n // left/right\r\n if (keyCodes[key]) {\r\n keys.push(key);\r\n }\r\n }\r\n else if (key === 'exact') {\r\n var modifiers_1 = handler.modifiers;\r\n genModifierCode += genGuard(['ctrl', 'shift', 'alt', 'meta']\r\n .filter(function (keyModifier) { return !modifiers_1[keyModifier]; })\r\n .map(function (keyModifier) { return \"$event.\".concat(keyModifier, \"Key\"); })\r\n .join('||'));\r\n }\r\n else {\r\n keys.push(key);\r\n }\r\n };\r\n for (var key in handler.modifiers) {\r\n _loop_1(key);\r\n }\r\n if (keys.length) {\r\n code += genKeyFilter(keys);\r\n }\r\n // Make sure modifiers like prevent and stop get executed after key filtering\r\n if (genModifierCode) {\r\n code += genModifierCode;\r\n }\r\n var handlerCode = isMethodPath\r\n ? \"return \".concat(handler.value, \".apply(null, arguments)\")\r\n : isFunctionExpression\r\n ? \"return (\".concat(handler.value, \").apply(null, arguments)\")\r\n : isFunctionInvocation\r\n ? \"return \".concat(handler.value)\r\n : handler.value;\r\n return \"function($event){\".concat(code).concat(handlerCode, \"}\");\r\n }\r\n}\r\nfunction genKeyFilter(keys) {\r\n return (\r\n // make sure the key filters only apply to KeyboardEvents\r\n // #9441: can't use 'keyCode' in $event because Chrome autofill fires fake\r\n // key events that do not have keyCode property...\r\n \"if(!$event.type.indexOf('key')&&\" +\r\n \"\".concat(keys.map(genFilterCode).join('&&'), \")return null;\"));\r\n}\r\nfunction genFilterCode(key) {\r\n var keyVal = parseInt(key, 10);\r\n if (keyVal) {\r\n return \"$event.keyCode!==\".concat(keyVal);\r\n }\r\n var keyCode = keyCodes[key];\r\n var keyName = keyNames[key];\r\n return (\"_k($event.keyCode,\" +\r\n \"\".concat(JSON.stringify(key), \",\") +\r\n \"\".concat(JSON.stringify(keyCode), \",\") +\r\n \"$event.key,\" +\r\n \"\".concat(JSON.stringify(keyName)) +\r\n \")\");\r\n}\n\nfunction on(el, dir) {\r\n if ( true && dir.modifiers) {\r\n warn$2(\"v-on without argument does not support modifiers.\");\r\n }\r\n el.wrapListeners = function (code) { return \"_g(\".concat(code, \",\").concat(dir.value, \")\"); };\r\n}\n\nfunction bind(el, dir) {\r\n el.wrapData = function (code) {\r\n return \"_b(\".concat(code, \",'\").concat(el.tag, \"',\").concat(dir.value, \",\").concat(dir.modifiers && dir.modifiers.prop ? 'true' : 'false').concat(dir.modifiers && dir.modifiers.sync ? ',true' : '', \")\");\r\n };\r\n}\n\nvar baseDirectives = {\r\n on: on,\r\n bind: bind,\r\n cloak: noop\r\n};\n\nvar CodegenState = /** @class */ (function () {\r\n function CodegenState(options) {\r\n this.options = options;\r\n this.warn = options.warn || baseWarn;\r\n this.transforms = pluckModuleFunction(options.modules, 'transformCode');\r\n this.dataGenFns = pluckModuleFunction(options.modules, 'genData');\r\n this.directives = extend(extend({}, baseDirectives), options.directives);\r\n var isReservedTag = options.isReservedTag || no;\r\n this.maybeComponent = function (el) {\r\n return !!el.component || !isReservedTag(el.tag);\r\n };\r\n this.onceId = 0;\r\n this.staticRenderFns = [];\r\n this.pre = false;\r\n }\r\n return CodegenState;\r\n}());\r\nfunction generate(ast, options) {\r\n var state = new CodegenState(options);\r\n // fix #11483, Root level <script> tags should not be rendered.\r\n var code = ast\r\n ? ast.tag === 'script'\r\n ? 'null'\r\n : genElement(ast, state)\r\n : '_c(\"div\")';\r\n return {\r\n render: \"with(this){return \".concat(code, \"}\"),\r\n staticRenderFns: state.staticRenderFns\r\n };\r\n}\r\nfunction genElement(el, state) {\r\n if (el.parent) {\r\n el.pre = el.pre || el.parent.pre;\r\n }\r\n if (el.staticRoot && !el.staticProcessed) {\r\n return genStatic(el, state);\r\n }\r\n else if (el.once && !el.onceProcessed) {\r\n return genOnce(el, state);\r\n }\r\n else if (el.for && !el.forProcessed) {\r\n return genFor(el, state);\r\n }\r\n else if (el.if && !el.ifProcessed) {\r\n return genIf(el, state);\r\n }\r\n else if (el.tag === 'template' && !el.slotTarget && !state.pre) {\r\n return genChildren(el, state) || 'void 0';\r\n }\r\n else if (el.tag === 'slot') {\r\n return genSlot(el, state);\r\n }\r\n else {\r\n // component or element\r\n var code = void 0;\r\n if (el.component) {\r\n code = genComponent(el.component, el, state);\r\n }\r\n else {\r\n var data = void 0;\r\n var maybeComponent = state.maybeComponent(el);\r\n if (!el.plain || (el.pre && maybeComponent)) {\r\n data = genData(el, state);\r\n }\r\n var tag \r\n // check if this is a component in <script setup>\r\n = void 0;\r\n // check if this is a component in <script setup>\r\n var bindings = state.options.bindings;\r\n if (maybeComponent && bindings && bindings.__isScriptSetup !== false) {\r\n tag = checkBindingType(bindings, el.tag);\r\n }\r\n if (!tag)\r\n tag = \"'\".concat(el.tag, \"'\");\r\n var children = el.inlineTemplate ? null : genChildren(el, state, true);\r\n code = \"_c(\".concat(tag).concat(data ? \",\".concat(data) : '' // data\r\n ).concat(children ? \",\".concat(children) : '' // children\r\n , \")\");\r\n }\r\n // module transforms\r\n for (var i = 0; i < state.transforms.length; i++) {\r\n code = state.transforms[i](el, code);\r\n }\r\n return code;\r\n }\r\n}\r\nfunction checkBindingType(bindings, key) {\r\n var camelName = camelize(key);\r\n var PascalName = capitalize(camelName);\r\n var checkType = function (type) {\r\n if (bindings[key] === type) {\r\n return key;\r\n }\r\n if (bindings[camelName] === type) {\r\n return camelName;\r\n }\r\n if (bindings[PascalName] === type) {\r\n return PascalName;\r\n }\r\n };\r\n var fromConst = checkType(\"setup-const\" /* BindingTypes.SETUP_CONST */) ||\r\n checkType(\"setup-reactive-const\" /* BindingTypes.SETUP_REACTIVE_CONST */);\r\n if (fromConst) {\r\n return fromConst;\r\n }\r\n var fromMaybeRef = checkType(\"setup-let\" /* BindingTypes.SETUP_LET */) ||\r\n checkType(\"setup-ref\" /* BindingTypes.SETUP_REF */) ||\r\n checkType(\"setup-maybe-ref\" /* BindingTypes.SETUP_MAYBE_REF */);\r\n if (fromMaybeRef) {\r\n return fromMaybeRef;\r\n }\r\n}\r\n// hoist static sub-trees out\r\nfunction genStatic(el, state) {\r\n el.staticProcessed = true;\r\n // Some elements (templates) need to behave differently inside of a v-pre\r\n // node. All pre nodes are static roots, so we can use this as a location to\r\n // wrap a state change and reset it upon exiting the pre node.\r\n var originalPreState = state.pre;\r\n if (el.pre) {\r\n state.pre = el.pre;\r\n }\r\n state.staticRenderFns.push(\"with(this){return \".concat(genElement(el, state), \"}\"));\r\n state.pre = originalPreState;\r\n return \"_m(\".concat(state.staticRenderFns.length - 1).concat(el.staticInFor ? ',true' : '', \")\");\r\n}\r\n// v-once\r\nfunction genOnce(el, state) {\r\n el.onceProcessed = true;\r\n if (el.if && !el.ifProcessed) {\r\n return genIf(el, state);\r\n }\r\n else if (el.staticInFor) {\r\n var key = '';\r\n var parent_1 = el.parent;\r\n while (parent_1) {\r\n if (parent_1.for) {\r\n key = parent_1.key;\r\n break;\r\n }\r\n parent_1 = parent_1.parent;\r\n }\r\n if (!key) {\r\n true &&\r\n state.warn(\"v-once can only be used inside v-for that is keyed. \", el.rawAttrsMap['v-once']);\r\n return genElement(el, state);\r\n }\r\n return \"_o(\".concat(genElement(el, state), \",\").concat(state.onceId++, \",\").concat(key, \")\");\r\n }\r\n else {\r\n return genStatic(el, state);\r\n }\r\n}\r\nfunction genIf(el, state, altGen, altEmpty) {\r\n el.ifProcessed = true; // avoid recursion\r\n return genIfConditions(el.ifConditions.slice(), state, altGen, altEmpty);\r\n}\r\nfunction genIfConditions(conditions, state, altGen, altEmpty) {\r\n if (!conditions.length) {\r\n return altEmpty || '_e()';\r\n }\r\n var condition = conditions.shift();\r\n if (condition.exp) {\r\n return \"(\".concat(condition.exp, \")?\").concat(genTernaryExp(condition.block), \":\").concat(genIfConditions(conditions, state, altGen, altEmpty));\r\n }\r\n else {\r\n return \"\".concat(genTernaryExp(condition.block));\r\n }\r\n // v-if with v-once should generate code like (a)?_m(0):_m(1)\r\n function genTernaryExp(el) {\r\n return altGen\r\n ? altGen(el, state)\r\n : el.once\r\n ? genOnce(el, state)\r\n : genElement(el, state);\r\n }\r\n}\r\nfunction genFor(el, state, altGen, altHelper) {\r\n var exp = el.for;\r\n var alias = el.alias;\r\n var iterator1 = el.iterator1 ? \",\".concat(el.iterator1) : '';\r\n var iterator2 = el.iterator2 ? \",\".concat(el.iterator2) : '';\r\n if ( true &&\r\n state.maybeComponent(el) &&\r\n el.tag !== 'slot' &&\r\n el.tag !== 'template' &&\r\n !el.key) {\r\n state.warn(\"<\".concat(el.tag, \" v-for=\\\"\").concat(alias, \" in \").concat(exp, \"\\\">: component lists rendered with \") +\r\n \"v-for should have explicit keys. \" +\r\n \"See https://vuejs.org/guide/list.html#key for more info.\", el.rawAttrsMap['v-for'], true /* tip */);\r\n }\r\n el.forProcessed = true; // avoid recursion\r\n return (\"\".concat(altHelper || '_l', \"((\").concat(exp, \"),\") +\r\n \"function(\".concat(alias).concat(iterator1).concat(iterator2, \"){\") +\r\n \"return \".concat((altGen || genElement)(el, state)) +\r\n '})');\r\n}\r\nfunction genData(el, state) {\r\n var data = '{';\r\n // directives first.\r\n // directives may mutate the el's other properties before they are generated.\r\n var dirs = genDirectives(el, state);\r\n if (dirs)\r\n data += dirs + ',';\r\n // key\r\n if (el.key) {\r\n data += \"key:\".concat(el.key, \",\");\r\n }\r\n // ref\r\n if (el.ref) {\r\n data += \"ref:\".concat(el.ref, \",\");\r\n }\r\n if (el.refInFor) {\r\n data += \"refInFor:true,\";\r\n }\r\n // pre\r\n if (el.pre) {\r\n data += \"pre:true,\";\r\n }\r\n // record original tag name for components using \"is\" attribute\r\n if (el.component) {\r\n data += \"tag:\\\"\".concat(el.tag, \"\\\",\");\r\n }\r\n // module data generation functions\r\n for (var i = 0; i < state.dataGenFns.length; i++) {\r\n data += state.dataGenFns[i](el);\r\n }\r\n // attributes\r\n if (el.attrs) {\r\n data += \"attrs:\".concat(genProps(el.attrs), \",\");\r\n }\r\n // DOM props\r\n if (el.props) {\r\n data += \"domProps:\".concat(genProps(el.props), \",\");\r\n }\r\n // event handlers\r\n if (el.events) {\r\n data += \"\".concat(genHandlers(el.events, false), \",\");\r\n }\r\n if (el.nativeEvents) {\r\n data += \"\".concat(genHandlers(el.nativeEvents, true), \",\");\r\n }\r\n // slot target\r\n // only for non-scoped slots\r\n if (el.slotTarget && !el.slotScope) {\r\n data += \"slot:\".concat(el.slotTarget, \",\");\r\n }\r\n // scoped slots\r\n if (el.scopedSlots) {\r\n data += \"\".concat(genScopedSlots(el, el.scopedSlots, state), \",\");\r\n }\r\n // component v-model\r\n if (el.model) {\r\n data += \"model:{value:\".concat(el.model.value, \",callback:\").concat(el.model.callback, \",expression:\").concat(el.model.expression, \"},\");\r\n }\r\n // inline-template\r\n if (el.inlineTemplate) {\r\n var inlineTemplate = genInlineTemplate(el, state);\r\n if (inlineTemplate) {\r\n data += \"\".concat(inlineTemplate, \",\");\r\n }\r\n }\r\n data = data.replace(/,$/, '') + '}';\r\n // v-bind dynamic argument wrap\r\n // v-bind with dynamic arguments must be applied using the same v-bind object\r\n // merge helper so that class/style/mustUseProp attrs are handled correctly.\r\n if (el.dynamicAttrs) {\r\n data = \"_b(\".concat(data, \",\\\"\").concat(el.tag, \"\\\",\").concat(genProps(el.dynamicAttrs), \")\");\r\n }\r\n // v-bind data wrap\r\n if (el.wrapData) {\r\n data = el.wrapData(data);\r\n }\r\n // v-on data wrap\r\n if (el.wrapListeners) {\r\n data = el.wrapListeners(data);\r\n }\r\n return data;\r\n}\r\nfunction genDirectives(el, state) {\r\n var dirs = el.directives;\r\n if (!dirs)\r\n return;\r\n var res = 'directives:[';\r\n var hasRuntime = false;\r\n var i, l, dir, needRuntime;\r\n for (i = 0, l = dirs.length; i < l; i++) {\r\n dir = dirs[i];\r\n needRuntime = true;\r\n var gen = state.directives[dir.name];\r\n if (gen) {\r\n // compile-time directive that manipulates AST.\r\n // returns true if it also needs a runtime counterpart.\r\n needRuntime = !!gen(el, dir, state.warn);\r\n }\r\n if (needRuntime) {\r\n hasRuntime = true;\r\n res += \"{name:\\\"\".concat(dir.name, \"\\\",rawName:\\\"\").concat(dir.rawName, \"\\\"\").concat(dir.value\r\n ? \",value:(\".concat(dir.value, \"),expression:\").concat(JSON.stringify(dir.value))\r\n : '').concat(dir.arg ? \",arg:\".concat(dir.isDynamicArg ? dir.arg : \"\\\"\".concat(dir.arg, \"\\\"\")) : '').concat(dir.modifiers ? \",modifiers:\".concat(JSON.stringify(dir.modifiers)) : '', \"},\");\r\n }\r\n }\r\n if (hasRuntime) {\r\n return res.slice(0, -1) + ']';\r\n }\r\n}\r\nfunction genInlineTemplate(el, state) {\r\n var ast = el.children[0];\r\n if ( true && (el.children.length !== 1 || ast.type !== 1)) {\r\n state.warn('Inline-template components must have exactly one child element.', { start: el.start });\r\n }\r\n if (ast && ast.type === 1) {\r\n var inlineRenderFns = generate(ast, state.options);\r\n return \"inlineTemplate:{render:function(){\".concat(inlineRenderFns.render, \"},staticRenderFns:[\").concat(inlineRenderFns.staticRenderFns\r\n .map(function (code) { return \"function(){\".concat(code, \"}\"); })\r\n .join(','), \"]}\");\r\n }\r\n}\r\nfunction genScopedSlots(el, slots, state) {\r\n // by default scoped slots are considered \"stable\", this allows child\r\n // components with only scoped slots to skip forced updates from parent.\r\n // but in some cases we have to bail-out of this optimization\r\n // for example if the slot contains dynamic names, has v-if or v-for on them...\r\n var needsForceUpdate = el.for ||\r\n Object.keys(slots).some(function (key) {\r\n var slot = slots[key];\r\n return (slot.slotTargetDynamic || slot.if || slot.for || containsSlotChild(slot) // is passing down slot from parent which may be dynamic\r\n );\r\n });\r\n // #9534: if a component with scoped slots is inside a conditional branch,\r\n // it's possible for the same component to be reused but with different\r\n // compiled slot content. To avoid that, we generate a unique key based on\r\n // the generated code of all the slot contents.\r\n var needsKey = !!el.if;\r\n // OR when it is inside another scoped slot or v-for (the reactivity may be\r\n // disconnected due to the intermediate scope variable)\r\n // #9438, #9506\r\n // TODO: this can be further optimized by properly analyzing in-scope bindings\r\n // and skip force updating ones that do not actually use scope variables.\r\n if (!needsForceUpdate) {\r\n var parent_2 = el.parent;\r\n while (parent_2) {\r\n if ((parent_2.slotScope && parent_2.slotScope !== emptySlotScopeToken) ||\r\n parent_2.for) {\r\n needsForceUpdate = true;\r\n break;\r\n }\r\n if (parent_2.if) {\r\n needsKey = true;\r\n }\r\n parent_2 = parent_2.parent;\r\n }\r\n }\r\n var generatedSlots = Object.keys(slots)\r\n .map(function (key) { return genScopedSlot(slots[key], state); })\r\n .join(',');\r\n return \"scopedSlots:_u([\".concat(generatedSlots, \"]\").concat(needsForceUpdate ? \",null,true\" : \"\").concat(!needsForceUpdate && needsKey ? \",null,false,\".concat(hash(generatedSlots)) : \"\", \")\");\r\n}\r\nfunction hash(str) {\r\n var hash = 5381;\r\n var i = str.length;\r\n while (i) {\r\n hash = (hash * 33) ^ str.charCodeAt(--i);\r\n }\r\n return hash >>> 0;\r\n}\r\nfunction containsSlotChild(el) {\r\n if (el.type === 1) {\r\n if (el.tag === 'slot') {\r\n return true;\r\n }\r\n return el.children.some(containsSlotChild);\r\n }\r\n return false;\r\n}\r\nfunction genScopedSlot(el, state) {\r\n var isLegacySyntax = el.attrsMap['slot-scope'];\r\n if (el.if && !el.ifProcessed && !isLegacySyntax) {\r\n return genIf(el, state, genScopedSlot, \"null\");\r\n }\r\n if (el.for && !el.forProcessed) {\r\n return genFor(el, state, genScopedSlot);\r\n }\r\n var slotScope = el.slotScope === emptySlotScopeToken ? \"\" : String(el.slotScope);\r\n var fn = \"function(\".concat(slotScope, \"){\") +\r\n \"return \".concat(el.tag === 'template'\r\n ? el.if && isLegacySyntax\r\n ? \"(\".concat(el.if, \")?\").concat(genChildren(el, state) || 'undefined', \":undefined\")\r\n : genChildren(el, state) || 'undefined'\r\n : genElement(el, state), \"}\");\r\n // reverse proxy v-slot without scope on this.$slots\r\n var reverseProxy = slotScope ? \"\" : \",proxy:true\";\r\n return \"{key:\".concat(el.slotTarget || \"\\\"default\\\"\", \",fn:\").concat(fn).concat(reverseProxy, \"}\");\r\n}\r\nfunction genChildren(el, state, checkSkip, altGenElement, altGenNode) {\r\n var children = el.children;\r\n if (children.length) {\r\n var el_1 = children[0];\r\n // optimize single v-for\r\n if (children.length === 1 &&\r\n el_1.for &&\r\n el_1.tag !== 'template' &&\r\n el_1.tag !== 'slot') {\r\n var normalizationType_1 = checkSkip\r\n ? state.maybeComponent(el_1)\r\n ? \",1\"\r\n : \",0\"\r\n : \"\";\r\n return \"\".concat((altGenElement || genElement)(el_1, state)).concat(normalizationType_1);\r\n }\r\n var normalizationType = checkSkip\r\n ? getNormalizationType(children, state.maybeComponent)\r\n : 0;\r\n var gen_1 = altGenNode || genNode;\r\n return \"[\".concat(children.map(function (c) { return gen_1(c, state); }).join(','), \"]\").concat(normalizationType ? \",\".concat(normalizationType) : '');\r\n }\r\n}\r\n// determine the normalization needed for the children array.\r\n// 0: no normalization needed\r\n// 1: simple normalization needed (possible 1-level deep nested array)\r\n// 2: full normalization needed\r\nfunction getNormalizationType(children, maybeComponent) {\r\n var res = 0;\r\n for (var i = 0; i < children.length; i++) {\r\n var el = children[i];\r\n if (el.type !== 1) {\r\n continue;\r\n }\r\n if (needsNormalization(el) ||\r\n (el.ifConditions &&\r\n el.ifConditions.some(function (c) { return needsNormalization(c.block); }))) {\r\n res = 2;\r\n break;\r\n }\r\n if (maybeComponent(el) ||\r\n (el.ifConditions && el.ifConditions.some(function (c) { return maybeComponent(c.block); }))) {\r\n res = 1;\r\n }\r\n }\r\n return res;\r\n}\r\nfunction needsNormalization(el) {\r\n return el.for !== undefined || el.tag === 'template' || el.tag === 'slot';\r\n}\r\nfunction genNode(node, state) {\r\n if (node.type === 1) {\r\n return genElement(node, state);\r\n }\r\n else if (node.type === 3 && node.isComment) {\r\n return genComment(node);\r\n }\r\n else {\r\n return genText(node);\r\n }\r\n}\r\nfunction genText(text) {\r\n return \"_v(\".concat(text.type === 2\r\n ? text.expression // no need for () because already wrapped in _s()\r\n : transformSpecialNewlines(JSON.stringify(text.text)), \")\");\r\n}\r\nfunction genComment(comment) {\r\n return \"_e(\".concat(JSON.stringify(comment.text), \")\");\r\n}\r\nfunction genSlot(el, state) {\r\n var slotName = el.slotName || '\"default\"';\r\n var children = genChildren(el, state);\r\n var res = \"_t(\".concat(slotName).concat(children ? \",function(){return \".concat(children, \"}\") : '');\r\n var attrs = el.attrs || el.dynamicAttrs\r\n ? genProps((el.attrs || []).concat(el.dynamicAttrs || []).map(function (attr) { return ({\r\n // slot props are camelized\r\n name: camelize(attr.name),\r\n value: attr.value,\r\n dynamic: attr.dynamic\r\n }); }))\r\n : null;\r\n var bind = el.attrsMap['v-bind'];\r\n if ((attrs || bind) && !children) {\r\n res += \",null\";\r\n }\r\n if (attrs) {\r\n res += \",\".concat(attrs);\r\n }\r\n if (bind) {\r\n res += \"\".concat(attrs ? '' : ',null', \",\").concat(bind);\r\n }\r\n return res + ')';\r\n}\r\n// componentName is el.component, take it as argument to shun flow's pessimistic refinement\r\nfunction genComponent(componentName, el, state) {\r\n var children = el.inlineTemplate ? null : genChildren(el, state, true);\r\n return \"_c(\".concat(componentName, \",\").concat(genData(el, state)).concat(children ? \",\".concat(children) : '', \")\");\r\n}\r\nfunction genProps(props) {\r\n var staticProps = \"\";\r\n var dynamicProps = \"\";\r\n for (var i = 0; i < props.length; i++) {\r\n var prop = props[i];\r\n var value = transformSpecialNewlines(prop.value);\r\n if (prop.dynamic) {\r\n dynamicProps += \"\".concat(prop.name, \",\").concat(value, \",\");\r\n }\r\n else {\r\n staticProps += \"\\\"\".concat(prop.name, \"\\\":\").concat(value, \",\");\r\n }\r\n }\r\n staticProps = \"{\".concat(staticProps.slice(0, -1), \"}\");\r\n if (dynamicProps) {\r\n return \"_d(\".concat(staticProps, \",[\").concat(dynamicProps.slice(0, -1), \"])\");\r\n }\r\n else {\r\n return staticProps;\r\n }\r\n}\r\n// #3895, #4268\r\nfunction transformSpecialNewlines(text) {\r\n return text.replace(/\\u2028/g, '\\\\u2028').replace(/\\u2029/g, '\\\\u2029');\r\n}\n\n// these keywords should not appear inside expressions, but operators like\r\n// typeof, instanceof and in are allowed\r\nvar prohibitedKeywordRE = new RegExp('\\\\b' +\r\n ('do,if,for,let,new,try,var,case,else,with,await,break,catch,class,const,' +\r\n 'super,throw,while,yield,delete,export,import,return,switch,default,' +\r\n 'extends,finally,continue,debugger,function,arguments')\r\n .split(',')\r\n .join('\\\\b|\\\\b') +\r\n '\\\\b');\r\n// these unary operators should not be used as property/method names\r\nvar unaryOperatorsRE = new RegExp('\\\\b' +\r\n 'delete,typeof,void'.split(',').join('\\\\s*\\\\([^\\\\)]*\\\\)|\\\\b') +\r\n '\\\\s*\\\\([^\\\\)]*\\\\)');\r\n// strip strings in expressions\r\nvar stripStringRE = /'(?:[^'\\\\]|\\\\.)*'|\"(?:[^\"\\\\]|\\\\.)*\"|`(?:[^`\\\\]|\\\\.)*\\$\\{|\\}(?:[^`\\\\]|\\\\.)*`|`(?:[^`\\\\]|\\\\.)*`/g;\r\n// detect problematic expressions in a template\r\nfunction detectErrors(ast, warn) {\r\n if (ast) {\r\n checkNode(ast, warn);\r\n }\r\n}\r\nfunction checkNode(node, warn) {\r\n if (node.type === 1) {\r\n for (var name_1 in node.attrsMap) {\r\n if (dirRE.test(name_1)) {\r\n var value = node.attrsMap[name_1];\r\n if (value) {\r\n var range = node.rawAttrsMap[name_1];\r\n if (name_1 === 'v-for') {\r\n checkFor(node, \"v-for=\\\"\".concat(value, \"\\\"\"), warn, range);\r\n }\r\n else if (name_1 === 'v-slot' || name_1[0] === '#') {\r\n checkFunctionParameterExpression(value, \"\".concat(name_1, \"=\\\"\").concat(value, \"\\\"\"), warn, range);\r\n }\r\n else if (onRE.test(name_1)) {\r\n checkEvent(value, \"\".concat(name_1, \"=\\\"\").concat(value, \"\\\"\"), warn, range);\r\n }\r\n else {\r\n checkExpression(value, \"\".concat(name_1, \"=\\\"\").concat(value, \"\\\"\"), warn, range);\r\n }\r\n }\r\n }\r\n }\r\n if (node.children) {\r\n for (var i = 0; i < node.children.length; i++) {\r\n checkNode(node.children[i], warn);\r\n }\r\n }\r\n }\r\n else if (node.type === 2) {\r\n checkExpression(node.expression, node.text, warn, node);\r\n }\r\n}\r\nfunction checkEvent(exp, text, warn, range) {\r\n var stripped = exp.replace(stripStringRE, '');\r\n var keywordMatch = stripped.match(unaryOperatorsRE);\r\n if (keywordMatch && stripped.charAt(keywordMatch.index - 1) !== '$') {\r\n warn(\"avoid using JavaScript unary operator as property name: \" +\r\n \"\\\"\".concat(keywordMatch[0], \"\\\" in expression \").concat(text.trim()), range);\r\n }\r\n checkExpression(exp, text, warn, range);\r\n}\r\nfunction checkFor(node, text, warn, range) {\r\n checkExpression(node.for || '', text, warn, range);\r\n checkIdentifier(node.alias, 'v-for alias', text, warn, range);\r\n checkIdentifier(node.iterator1, 'v-for iterator', text, warn, range);\r\n checkIdentifier(node.iterator2, 'v-for iterator', text, warn, range);\r\n}\r\nfunction checkIdentifier(ident, type, text, warn, range) {\r\n if (typeof ident === 'string') {\r\n try {\r\n new Function(\"var \".concat(ident, \"=_\"));\r\n }\r\n catch (e) {\r\n warn(\"invalid \".concat(type, \" \\\"\").concat(ident, \"\\\" in expression: \").concat(text.trim()), range);\r\n }\r\n }\r\n}\r\nfunction checkExpression(exp, text, warn, range) {\r\n try {\r\n new Function(\"return \".concat(exp));\r\n }\r\n catch (e) {\r\n var keywordMatch = exp\r\n .replace(stripStringRE, '')\r\n .match(prohibitedKeywordRE);\r\n if (keywordMatch) {\r\n warn(\"avoid using JavaScript keyword as property name: \" +\r\n \"\\\"\".concat(keywordMatch[0], \"\\\"\\n Raw expression: \").concat(text.trim()), range);\r\n }\r\n else {\r\n warn(\"invalid expression: \".concat(e.message, \" in\\n\\n\") +\r\n \" \".concat(exp, \"\\n\\n\") +\r\n \" Raw expression: \".concat(text.trim(), \"\\n\"), range);\r\n }\r\n }\r\n}\r\nfunction checkFunctionParameterExpression(exp, text, warn, range) {\r\n try {\r\n new Function(exp, '');\r\n }\r\n catch (e) {\r\n warn(\"invalid function parameter expression: \".concat(e.message, \" in\\n\\n\") +\r\n \" \".concat(exp, \"\\n\\n\") +\r\n \" Raw expression: \".concat(text.trim(), \"\\n\"), range);\r\n }\r\n}\n\nvar range = 2;\r\nfunction generateCodeFrame(source, start, end) {\r\n if (start === void 0) { start = 0; }\r\n if (end === void 0) { end = source.length; }\r\n var lines = source.split(/\\r?\\n/);\r\n var count = 0;\r\n var res = [];\r\n for (var i = 0; i < lines.length; i++) {\r\n count += lines[i].length + 1;\r\n if (count >= start) {\r\n for (var j = i - range; j <= i + range || end > count; j++) {\r\n if (j < 0 || j >= lines.length)\r\n continue;\r\n res.push(\"\".concat(j + 1).concat(repeat(\" \", 3 - String(j + 1).length), \"| \").concat(lines[j]));\r\n var lineLength = lines[j].length;\r\n if (j === i) {\r\n // push underline\r\n var pad = start - (count - lineLength) + 1;\r\n var length_1 = end > count ? lineLength - pad : end - start;\r\n res.push(\" | \" + repeat(\" \", pad) + repeat(\"^\", length_1));\r\n }\r\n else if (j > i) {\r\n if (end > count) {\r\n var length_2 = Math.min(end - count, lineLength);\r\n res.push(\" | \" + repeat(\"^\", length_2));\r\n }\r\n count += lineLength + 1;\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n return res.join('\\n');\r\n}\r\nfunction repeat(str, n) {\r\n var result = '';\r\n if (n > 0) {\r\n // eslint-disable-next-line no-constant-condition\r\n while (true) {\r\n // eslint-disable-line\r\n if (n & 1)\r\n result += str;\r\n n >>>= 1;\r\n if (n <= 0)\r\n break;\r\n str += str;\r\n }\r\n }\r\n return result;\r\n}\n\nfunction createFunction(code, errors) {\r\n try {\r\n return new Function(code);\r\n }\r\n catch (err) {\r\n errors.push({ err: err, code: code });\r\n return noop;\r\n }\r\n}\r\nfunction createCompileToFunctionFn(compile) {\r\n var cache = Object.create(null);\r\n return function compileToFunctions(template, options, vm) {\r\n options = extend({}, options);\r\n var warn = options.warn || warn$2;\r\n delete options.warn;\r\n /* istanbul ignore if */\r\n if (true) {\r\n // detect possible CSP restriction\r\n try {\r\n new Function('return 1');\r\n }\r\n catch (e) {\r\n if (e.toString().match(/unsafe-eval|CSP/)) {\r\n warn('It seems you are using the standalone build of Vue.js in an ' +\r\n 'environment with Content Security Policy that prohibits unsafe-eval. ' +\r\n 'The template compiler cannot work in this environment. Consider ' +\r\n 'relaxing the policy to allow unsafe-eval or pre-compiling your ' +\r\n 'templates into render functions.');\r\n }\r\n }\r\n }\r\n // check cache\r\n var key = options.delimiters\r\n ? String(options.delimiters) + template\r\n : template;\r\n if (cache[key]) {\r\n return cache[key];\r\n }\r\n // compile\r\n var compiled = compile(template, options);\r\n // check compilation errors/tips\r\n if (true) {\r\n if (compiled.errors && compiled.errors.length) {\r\n if (options.outputSourceRange) {\r\n compiled.errors.forEach(function (e) {\r\n warn(\"Error compiling template:\\n\\n\".concat(e.msg, \"\\n\\n\") +\r\n generateCodeFrame(template, e.start, e.end), vm);\r\n });\r\n }\r\n else {\r\n warn(\"Error compiling template:\\n\\n\".concat(template, \"\\n\\n\") +\r\n compiled.errors.map(function (e) { return \"- \".concat(e); }).join('\\n') +\r\n '\\n', vm);\r\n }\r\n }\r\n if (compiled.tips && compiled.tips.length) {\r\n if (options.outputSourceRange) {\r\n compiled.tips.forEach(function (e) { return tip(e.msg, vm); });\r\n }\r\n else {\r\n compiled.tips.forEach(function (msg) { return tip(msg, vm); });\r\n }\r\n }\r\n }\r\n // turn code into functions\r\n var res = {};\r\n var fnGenErrors = [];\r\n res.render = createFunction(compiled.render, fnGenErrors);\r\n res.staticRenderFns = compiled.staticRenderFns.map(function (code) {\r\n return createFunction(code, fnGenErrors);\r\n });\r\n // check function generation errors.\r\n // this should only happen if there is a bug in the compiler itself.\r\n // mostly for codegen development use\r\n /* istanbul ignore if */\r\n if (true) {\r\n if ((!compiled.errors || !compiled.errors.length) && fnGenErrors.length) {\r\n warn(\"Failed to generate render function:\\n\\n\" +\r\n fnGenErrors\r\n .map(function (_a) {\r\n var err = _a.err, code = _a.code;\r\n return \"\".concat(err.toString(), \" in\\n\\n\").concat(code, \"\\n\");\r\n })\r\n .join('\\n'), vm);\r\n }\r\n }\r\n return (cache[key] = res);\r\n };\r\n}\n\nfunction createCompilerCreator(baseCompile) {\r\n return function createCompiler(baseOptions) {\r\n function compile(template, options) {\r\n var finalOptions = Object.create(baseOptions);\r\n var errors = [];\r\n var tips = [];\r\n var warn = function (msg, range, tip) {\r\n (tip ? tips : errors).push(msg);\r\n };\r\n if (options) {\r\n if ( true && options.outputSourceRange) {\r\n // $flow-disable-line\r\n var leadingSpaceLength_1 = template.match(/^\\s*/)[0].length;\r\n warn = function (msg, range, tip) {\r\n var data = typeof msg === 'string' ? { msg: msg } : msg;\r\n if (range) {\r\n if (range.start != null) {\r\n data.start = range.start + leadingSpaceLength_1;\r\n }\r\n if (range.end != null) {\r\n data.end = range.end + leadingSpaceLength_1;\r\n }\r\n }\r\n (tip ? tips : errors).push(data);\r\n };\r\n }\r\n // merge custom modules\r\n if (options.modules) {\r\n finalOptions.modules = (baseOptions.modules || []).concat(options.modules);\r\n }\r\n // merge custom directives\r\n if (options.directives) {\r\n finalOptions.directives = extend(Object.create(baseOptions.directives || null), options.directives);\r\n }\r\n // copy other options\r\n for (var key in options) {\r\n if (key !== 'modules' && key !== 'directives') {\r\n finalOptions[key] = options[key];\r\n }\r\n }\r\n }\r\n finalOptions.warn = warn;\r\n var compiled = baseCompile(template.trim(), finalOptions);\r\n if (true) {\r\n detectErrors(compiled.ast, warn);\r\n }\r\n compiled.errors = errors;\r\n compiled.tips = tips;\r\n return compiled;\r\n }\r\n return {\r\n compile: compile,\r\n compileToFunctions: createCompileToFunctionFn(compile)\r\n };\r\n };\r\n}\n\n// `createCompilerCreator` allows creating compilers that use alternative\r\n// parser/optimizer/codegen, e.g the SSR optimizing compiler.\r\n// Here we just export a default compiler using the default parts.\r\nvar createCompiler = createCompilerCreator(function baseCompile(template, options) {\r\n var ast = parse(template.trim(), options);\r\n if (options.optimize !== false) {\r\n optimize(ast, options);\r\n }\r\n var code = generate(ast, options);\r\n return {\r\n ast: ast,\r\n render: code.render,\r\n staticRenderFns: code.staticRenderFns\r\n };\r\n});\n\nvar _a = createCompiler(baseOptions), compileToFunctions = _a.compileToFunctions;\n\n// check whether current browser encodes a char inside attribute values\r\nvar div;\r\nfunction getShouldDecode(href) {\r\n div = div || document.createElement('div');\r\n div.innerHTML = href ? \"<a href=\\\"\\n\\\"/>\" : \"<div a=\\\"\\n\\\"/>\";\r\n return div.innerHTML.indexOf('&#10;') > 0;\r\n}\r\n// #3663: IE encodes newlines inside attribute values while other browsers don't\r\nvar shouldDecodeNewlines = inBrowser ? getShouldDecode(false) : false;\r\n// #6828: chrome encodes content in a[href]\r\nvar shouldDecodeNewlinesForHref = inBrowser\r\n ? getShouldDecode(true)\r\n : false;\n\nvar idToTemplate = cached(function (id) {\r\n var el = query(id);\r\n return el && el.innerHTML;\r\n});\r\nvar mount = Vue.prototype.$mount;\r\nVue.prototype.$mount = function (el, hydrating) {\r\n el = el && query(el);\r\n /* istanbul ignore if */\r\n if (el === document.body || el === document.documentElement) {\r\n true &&\r\n warn$2(\"Do not mount Vue to <html> or <body> - mount to normal elements instead.\");\r\n return this;\r\n }\r\n var options = this.$options;\r\n // resolve template/el and convert to render function\r\n if (!options.render) {\r\n var template = options.template;\r\n if (template) {\r\n if (typeof template === 'string') {\r\n if (template.charAt(0) === '#') {\r\n template = idToTemplate(template);\r\n /* istanbul ignore if */\r\n if ( true && !template) {\r\n warn$2(\"Template element not found or is empty: \".concat(options.template), this);\r\n }\r\n }\r\n }\r\n else if (template.nodeType) {\r\n template = template.innerHTML;\r\n }\r\n else {\r\n if (true) {\r\n warn$2('invalid template option:' + template, this);\r\n }\r\n return this;\r\n }\r\n }\r\n else if (el) {\r\n // @ts-expect-error\r\n template = getOuterHTML(el);\r\n }\r\n if (template) {\r\n /* istanbul ignore if */\r\n if ( true && config.performance && mark) {\r\n mark('compile');\r\n }\r\n var _a = compileToFunctions(template, {\r\n outputSourceRange: \"development\" !== 'production',\r\n shouldDecodeNewlines: shouldDecodeNewlines,\r\n shouldDecodeNewlinesForHref: shouldDecodeNewlinesForHref,\r\n delimiters: options.delimiters,\r\n comments: options.comments\r\n }, this), render = _a.render, staticRenderFns = _a.staticRenderFns;\r\n options.render = render;\r\n options.staticRenderFns = staticRenderFns;\r\n /* istanbul ignore if */\r\n if ( true && config.performance && mark) {\r\n mark('compile end');\r\n measure(\"vue \".concat(this._name, \" compile\"), 'compile', 'compile end');\r\n }\r\n }\r\n }\r\n return mount.call(this, el, hydrating);\r\n};\r\n/**\r\n * Get outerHTML of elements, taking care\r\n * of SVG elements in IE as well.\r\n */\r\nfunction getOuterHTML(el) {\r\n if (el.outerHTML) {\r\n return el.outerHTML;\r\n }\r\n else {\r\n var container = document.createElement('div');\r\n container.appendChild(el.cloneNode(true));\r\n return container.innerHTML;\r\n }\r\n}\r\nVue.compile = compileToFunctions;\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvdnVlL2Rpc3QvdnVlLmVzbS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixpQkFBaUI7QUFDckM7QUFDQTtBQUNBLCtDQUErQyxpQ0FBaUMsbUJBQW1CO0FBQ25HO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFEQUFxRCxvQ0FBb0M7QUFDekYsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixnQkFBZ0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4QkFBOEI7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4QkFBOEI7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLGdCQUFnQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixhQUFvQjtBQUN2QztBQUNBO0FBQ0E7QUFDQSxjQUFjLGFBQW9CO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixxQkFBcUI7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9C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O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsSUFBcUM7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLHFCQUFxQjtBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLHFCQUFxQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFB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QjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esb0JBQW9CLG1CQUFtQjtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixLQUFxQztBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QyxPQUFPO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNFQUFzRTtBQUN0RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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QUNBO0FBQ0EsaURBQWlEO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQThDLE9BQU87QUFDckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdEQUFnRCxTQUFTO0FBQ3pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksSUFBcUM7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRDQUE0QyxPQUFPO0FBQ25EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLElBQXFDO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxLQUFxQztBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQXFDO0FBQzdDLGdEQUFnRDtBQUNoRCxrREFBa0Q7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLHdCQUF3QjtBQUNoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQXFDO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QjtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IscUJBQXFCO0FBQzdDO0FBQ0EsaURBQWlEO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQXFDO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLHlCQUF5QjtBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLHlCQUF5QjtBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUM7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkMsT0FBTztBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBcUM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQix3QkFBd0I7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksS0FBcUM7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixrQkFBa0I7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxLQUFxQztBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLEtBQXFDO0FBQ3ZFLDhCQUE4QixjQUFjLGVBQWUsSUFBSSxDQUFpQjtBQUNoRjtBQUNBO0FBQ0Esa0NBQWtDLEtBQXFDO0FBQ3ZFLDhCQUE4QixjQUFjLGVBQWUsSUFBSSxDQUFpQjtBQUNoRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxLQUFxQztBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxLQUFxQztBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQkFBK0I7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrREFBa0QsdUNBQXVDO0FBQ3pGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixLQUFxQztBQUN6RDtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxLQUFxQztBQUM3QztBQUNBO0FBQ0E7QUFDQSwrQkFBK0I7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBcUM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxREFBcUQsdUJBQXVCO0FBQzVFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsSUFBcUM7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlEQUFpRCxPQUFPO0FBQ3hEO0FBQ0E7QUFDQSxrREFBa0QsT0FBTztBQUN6RDtBQUNBO0FBQ0E7QUFDQSxvREFBb0QsT0FBTztBQUMzRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QjtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxJQUFxQztBQUNsRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsWUFBWSxJQUFxQztBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEM7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixJQUFxQztBQUN0RDtBQUNBO0FBQ0E7QUFDQSxhQUFhLElBQXFDO0FBQ2xEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLEtBQXFDO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0Msa0JBQWtCO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUMsdURBQXVEO0FBQzVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBcUM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixtQkFBbUI7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBOztBQUVBO0FBQ0EsMkJBQTJCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFlBQVksS0FBcUM7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLEtBQXFDO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLEtBQXFDO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQjtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxLQUFxQztBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwREFBMEQ7QUFDMUQseURBQXlEO0FBQ3pEO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEtBQXFDO0FBQzdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsS0FBcUM7QUFDN0Q7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsaUNBQWlDO0FBQ2pDO0FBQ0EsWUFBWSxLQUFxQztBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QjtBQUM3QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLElBQXFDO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkI7QUFDM0I7QUFDQTtBQUNBLGdDQUFnQztBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQixLQUFxQyx3QkFBd0IsQ0FBRTtBQUN6RjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLEtBQXFDO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0NBQStDO0FBQy9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLG1CQUFtQjtBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQXFDO0FBQzdDLHNEQUFzRDtBQUN0RDtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUM7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksSUFBcUM7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSxzRkFBc0Y7QUFDNUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNENBQTRDO0FBQzVDLG9CQUFvQix5QkFBeUI7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQztBQUNuQyxxQ0FBcUM7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDRCQUE0QjtBQUM1QjtBQUNBLElBQUksSUFBcUM7QUFDekM7QUFDQTtBQUNBO0FBQ0Esd0RBQXdELHlCQUF5QjtBQUNqRjtBQUNBO0FBQ0EsNkJBQTZCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxJQUFxQztBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsaUJBQWlCO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLEtBQXFDO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixrQkFBa0I7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsS0FBcUM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFxQztBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0MsYUFBb0I7QUFDeEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEJBQThCO0FBQzlCO0FBQ0EscUJBQXFCLElBQXFDO0FBQzFEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxREFBcUQ7QUFDckQ7QUFDQTtBQUNBLGFBQWEsSUFBcUM7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXlDO0FBQ3pDO0FBQ0Esd0JBQXdCLG1CQUFtQjtBQUMzQyxzQ0FBc0M7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCLFdBQVc7QUFDdEMsb0JBQW9CO0FBQ3BCO0FBQ0E7QUFDQSxhQUFhLElBQXFDO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEJBQThCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBcUM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscURBQXFELE9BQU87QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxLQUFxQztBQUM3QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFxQztBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxLQUFxQztBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDJCQUEyQjtBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOERBQThELFdBQVc7QUFDekU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0RBQWdELFNBQVM7QUFDekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1EQUFtRCxzQ0FBc0M7QUFDekY7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLHVCQUF1QjtBQUM1QztBQUNBO0FBQ0EsdUNBQXVDLDBDQUEwQztBQUNqRjs7QUFFQTtBQUNBLFFBQVEsS0FBcUM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEVBQTBFO0FBQzFFO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxLQUFxQztBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUNBQXFDO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLEtBQXFDO0FBQ3pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUM7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0RBQWdELDRCQUE0QjtBQUM1RSxTQUFTO0FBQ1Q7QUFDQSxnREFBZ0QsNkJBQTZCO0FBQzdFLFNBQVM7QUFDVCxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQztBQUNsQyxRQUFRLElBQXFDO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNDQUFzQyxPQUFPO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0M7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxLQUFxQztBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEJBQThCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLGdCQUFnQjtBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQjtBQUMzQjtBQUNBO0FBQ0EsMkJBQTJCO0FBQzNCO0FBQ0E7QUFDQSwyQkFBMkI7QUFDM0I7QUFDQTtB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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtEQUFrRDtBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrREFBK0QscUNBQXFDO0FBQ3BHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0M7QUFDaEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtDQUErQztBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUNBQXFDO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0EsOENBQThDLFNBQVM7QUFDdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQix3QkFBd0I7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdFQUFnRTtBQUNoRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2REFBNkQsNkJBQTZCO0FBQzFGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZEQUE2RCxnQ0FBZ0M7QUFDN0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0RUFBNEU7QUFDNUU7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLEtBQXFDO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxLQUFxQztBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUVBQW1FO0FBQ25FO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQyxzQ0FBc0M7O0FBRXhFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0RBQW9ELDBDQUEwQztBQUM5RjtBQUNBO0FBQ0E7QUFDQSx3REFBd0QsOENBQThDO0FBQ3RHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLEtBQXFDO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDLE9BQU87QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0NBQXdDLCtCQUErQjtBQUN2RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQztBQUNuQyxzQ0FBc0M7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksS0FBcUM7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksS0FBcUM7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1EQUFtRDtBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0RBQStEO0FBQy9EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3Qix3QkFBd0I7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJDQUEyQztBQUMzQztBQUNBLHlCQUF5QixJQUFxQztBQUM5RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLHlCQUF5QjtBQUNyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0EsU0FBUztBQUNULEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQixJQUF3RTtBQUM3RjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxLQUMrQjtBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQSxzQkFBc0IsRUFBRSxpQkFBaUIsRUFBRTtBQUMzQywrQkFBK0I7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QixpQkFBaUI7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLEtBQXFDO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQ0FBMkMsTUFBTTtBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxJQUFxQztBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0NBQStDLE1BQU07QUFDckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULFNBQVM7QUFDVCxXQUFXO0FBQ1gsVUFBVTtBQUNWLFVBQVU7QUFDVixTQUFTO0FBQ1QsVUFBVTtBQUNWO0FBQ0EsMkNBQTJDO0FBQzNDLDhEQUE4RDtBQUM5RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdEQUFnRCw0QkFBNEI7QUFDNUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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O0FBQ0Esb0JBQW9CLGtCQUFrQjtBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0RBQWtELE9BQU87QUFDekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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QXVDO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxLQUFxQztBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsS0FBcUM7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixJQUFxQztBQUN6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLEtBQXFDO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQyxhQUFvQjtBQUN2RDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsS0FBcUM7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRTZzQiIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy92dWUvZGlzdC92dWUuZXNtLmpzPzRiMjkiXSwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBWdWUuanMgdjIuNy4xMFxuICogKGMpIDIwMTQtMjAyMiBFdmFuIFlvdVxuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuICovXG52YXIgZW1wdHlPYmplY3QgPSBPYmplY3QuZnJlZXplKHt9KTtcclxudmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xyXG4vLyBUaGVzZSBoZWxwZXJzIHByb2R1Y2UgYmV0dGVyIFZNIGNvZGUgaW4gSlMgZW5naW5lcyBkdWUgdG8gdGhlaXJcclxuLy8gZXhwbGljaXRuZXNzIGFuZCBmdW5jdGlvbiBpbmxpbmluZy5cclxuZnVuY3Rpb24gaXNVbmRlZih2KSB7XHJcbiAgICByZXR1cm4gdiA9PT0gdW5kZWZpbmVkIHx8IHYgPT09IG51bGw7XHJcbn1cclxuZnVuY3Rpb24gaXNEZWYodikge1xyXG4gICAgcmV0dXJuIHYgIT09IHVuZGVmaW5lZCAmJiB2ICE9PSBudWxsO1xyXG59XHJcbmZ1bmN0aW9uIGlzVHJ1ZSh2KSB7XHJcbiAgICByZXR1cm4gdiA9PT0gdHJ1ZTtcclxufVxyXG5mdW5jdGlvbiBpc0ZhbHNlKHYpIHtcclxuICAgIHJldHVybiB2ID09PSBmYWxzZTtcclxufVxyXG4vKipcclxuICogQ2hlY2sgaWYgdmFsdWUgaXMgcHJpbWl0aXZlLlxyXG4gKi9cclxuZnVuY3Rpb24gaXNQcmltaXRpdmUodmFsdWUpIHtcclxuICAgIHJldHVybiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyB8fFxyXG4gICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgfHxcclxuICAgICAgICAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcclxuICAgICAgICB0eXBlb2YgdmFsdWUgPT09ICdzeW1ib2wnIHx8XHJcbiAgICAgICAgdHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicpO1xyXG59XHJcbmZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsdWUpIHtcclxuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbic7XHJcbn1cclxuLyoqXHJcbiAqIFF1aWNrIG9iamVjdCBjaGVjayAtIHRoaXMgaXMgcHJpbWFyaWx5IHVzZWQgdG8gdGVsbFxyXG4gKiBvYmplY3RzIGZyb20gcHJpbWl0aXZlIHZhbHVlcyB3aGVuIHdlIGtub3cgdGhlIHZhbHVlXHJcbiAqIGlzIGEgSlNPTi1jb21wbGlhbnQgdHlwZS5cclxuICovXHJcbmZ1bmN0aW9uIGlzT2JqZWN0KG9iaikge1xyXG4gICAgcmV0dXJuIG9iaiAhPT0gbnVsbCAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0JztcclxufVxyXG4vKipcclxuICogR2V0IHRoZSByYXcgdHlwZSBzdHJpbmcgb2YgYSB2YWx1ZSwgZS5nLiwgW29iamVjdCBPYmplY3RdLlxyXG4gKi9cclxudmFyIF90b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XHJcbmZ1bmN0aW9uIHRvUmF3VHlwZSh2YWx1ZSkge1xyXG4gICAgcmV0dXJuIF90b1N0cmluZy5jYWxsKHZhbHVlKS5zbGljZSg4LCAtMSk7XHJcbn1cclxuLyoqXHJcbiAqIFN0cmljdCBvYmplY3QgdHlwZSBjaGVjay4gT25seSByZXR1cm5zIHRydWVcclxuICogZm9yIHBsYWluIEphdmFTY3JpcHQgb2JqZWN0cy5cclxuICovXHJcbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3Qob2JqKSB7XHJcbiAgICByZXR1cm4gX3RvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgT2JqZWN0XSc7XHJcbn1cclxuZnVuY3Rpb24gaXNSZWdFeHAodikge1xyXG4gICAgcmV0dXJuIF90b1N0cmluZy5jYWxsKHYpID09PSAnW29iamVjdCBSZWdFeHBdJztcclxufVxyXG4vKipcclxuICogQ2hlY2sgaWYgdmFsIGlzIGEgdmFsaWQgYXJyYXkgaW5kZXguXHJcbiAqL1xyXG5mdW5jdGlvbiBpc1ZhbGlkQXJyYXlJbmRleCh2YWwpIHtcclxuICAgIHZhciBuID0gcGFyc2VGbG9hdChTdHJpbmcodmFsKSk7XHJcbiAgICByZXR1cm4gbiA+PSAwICYmIE1hdGguZmxvb3IobikgPT09IG4gJiYgaXNGaW5pdGUodmFsKTtcclxufVxyXG5mdW5jdGlvbiBpc1Byb21pc2UodmFsKSB7XHJcbiAgICByZXR1cm4gKGlzRGVmKHZhbCkgJiZcclxuICAgICAgICB0eXBlb2YgdmFsLnRoZW4gPT09ICdmdW5jdGlvbicgJiZcclxuICAgICAgICB0eXBlb2YgdmFsLmNhdGNoID09PSAnZnVuY3Rpb24nKTtcclxufVxyXG4vKipcclxuICogQ29udmVydCBhIHZhbHVlIHRvIGEgc3RyaW5nIHRoYXQgaXMgYWN0dWFsbHkgcmVuZGVyZWQuXHJcbiAqL1xyXG5mdW5jdGlvbiB0b1N0cmluZyh2YWwpIHtcclxuICAgIHJldHVybiB2YWwgPT0gbnVsbFxyXG4gICAgICAgID8gJydcclxuICAgICAgICA6IEFycmF5LmlzQXJyYXkodmFsKSB8fCAoaXNQbGFpbk9iamVjdCh2YWwpICYmIHZhbC50b1N0cmluZyA9PT0gX3RvU3RyaW5nKVxyXG4gICAgICAgICAgICA/IEpTT04uc3RyaW5naWZ5KHZhbCwgbnVsbCwgMilcclxuICAgICAgICAgICAgOiBTdHJpbmcodmFsKTtcclxufVxyXG4vKipcclxuICogQ29udmVydCBhbiBpbnB1dCB2YWx1ZSB0byBhIG51bWJlciBmb3IgcGVyc2lzdGVuY2UuXHJcbiAqIElmIHRoZSBjb252ZXJzaW9uIGZhaWxzLCByZXR1cm4gb3JpZ2luYWwgc3RyaW5nLlxyXG4gKi9cclxuZnVuY3Rpb24gdG9OdW1iZXIodmFsKSB7XHJcbiAgICB2YXIgbiA9IHBhcnNlRmxvYXQodmFsKTtcclxuICAgIHJldHVybiBpc05hTihuKSA/IHZhbCA6IG47XHJcbn1cclxuLyoqXHJcbiAqIE1ha2UgYSBtYXAgYW5kIHJldHVybiBhIGZ1bmN0aW9uIGZvciBjaGVja2luZyBpZiBhIGtleVxyXG4gKiBpcyBpbiB0aGF0IG1hcC5cclxuICovXHJcbmZ1bmN0aW9uIG1ha2VNYXAoc3RyLCBleHBlY3RzTG93ZXJDYXNlKSB7XHJcbiAgICB2YXIgbWFwID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcclxuICAgIHZhciBsaXN0ID0gc3RyLnNwbGl0KCcsJyk7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBtYXBbbGlzdFtpXV0gPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGV4cGVjdHNMb3dlckNhc2UgPyBmdW5jdGlvbiAodmFsKSB7IHJldHVybiBtYXBbdmFsLnRvTG93ZXJDYXNlKCldOyB9IDogZnVuY3Rpb24gKHZhbCkgeyByZXR1cm4gbWFwW3ZhbF07IH07XHJcbn1cclxuLyoqXHJcbiAqIENoZWNrIGlmIGEgdGFnIGlzIGEgYnVpbHQtaW4gdGFnLlxyXG4gKi9cclxudmFyIGlzQnVpbHRJblRhZyA9IG1ha2VNYXAoJ3Nsb3QsY29tcG9uZW50JywgdHJ1ZSk7XHJcbi8qKlxyXG4gKiBDaGVjayBpZiBhbiBhdHRyaWJ1dGUgaXMgYSByZXNlcnZlZCBhdHRyaWJ1dGUuXHJcbiAqL1xyXG52YXIgaXNSZXNlcnZlZEF0dHJpYnV0ZSA9IG1ha2VNYXAoJ2tleSxyZWYsc2xvdCxzbG90LXNjb3BlLGlzJyk7XHJcbi8qKlxyXG4gKiBSZW1vdmUgYW4gaXRlbSBmcm9tIGFuIGFycmF5LlxyXG4gKi9cclxuZnVuY3Rpb24gcmVtb3ZlJDIoYXJyLCBpdGVtKSB7XHJcbiAgICBpZiAoYXJyLmxlbmd0aCkge1xyXG4gICAgICAgIHZhciBpbmRleCA9IGFyci5pbmRleE9mKGl0ZW0pO1xyXG4gICAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBhcnIuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIENoZWNrIHdoZXRoZXIgYW4gb2JqZWN0IGhhcyB0aGUgcHJvcGVydHkuXHJcbiAqL1xyXG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xyXG5mdW5jdGlvbiBoYXNPd24ob2JqLCBrZXkpIHtcclxuICAgIHJldHVybiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KTtcclxufVxyXG4vKipcclxuICogQ3JlYXRlIGEgY2FjaGVkIHZlcnNpb24gb2YgYSBwdXJlIGZ1bmN0aW9uLlxyXG4gKi9cclxuZnVuY3Rpb24gY2FjaGVkKGZuKSB7XHJcbiAgICB2YXIgY2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIGNhY2hlZEZuKHN0cikge1xyXG4gICAgICAgIHZhciBoaXQgPSBjYWNoZVtzdHJdO1xyXG4gICAgICAgIHJldHVybiBoaXQgfHwgKGNhY2hlW3N0cl0gPSBmbihzdHIpKTtcclxuICAgIH07XHJcbn1cclxuLyoqXHJcbiAqIENhbWVsaXplIGEgaHlwaGVuLWRlbGltaXRlZCBzdHJpbmcuXHJcbiAqL1xyXG52YXIgY2FtZWxpemVSRSA9IC8tKFxcdykvZztcclxudmFyIGNhbWVsaXplID0gY2FjaGVkKGZ1bmN0aW9uIChzdHIpIHtcclxuICAgIHJldHVybiBzdHIucmVwbGFjZShjYW1lbGl6ZVJFLCBmdW5jdGlvbiAoXywgYykgeyByZXR1cm4gKGMgPyBjLnRvVXBwZXJDYXNlKCkgOiAnJyk7IH0pO1xyXG59KTtcclxuLyoqXHJcbiAqIENhcGl0YWxpemUgYSBzdHJpbmcuXHJcbiAqL1xyXG52YXIgY2FwaXRhbGl6ZSA9IGNhY2hlZChmdW5jdGlvbiAoc3RyKSB7XHJcbiAgICByZXR1cm4gc3RyLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgc3RyLnNsaWNlKDEpO1xyXG59KTtcclxuLyoqXHJcbiAqIEh5cGhlbmF0ZSBhIGNhbWVsQ2FzZSBzdHJpbmcuXHJcbiAqL1xyXG52YXIgaHlwaGVuYXRlUkUgPSAvXFxCKFtBLVpdKS9nO1xyXG52YXIgaHlwaGVuYXRlID0gY2FjaGVkKGZ1bmN0aW9uIChzdHIpIHtcclxuICAgIHJldHVybiBzdHIucmVwbGFjZShoeXBoZW5hdGVSRSwgJy0kMScpLnRvTG93ZXJDYXNlKCk7XHJcbn0pO1xyXG4vKipcclxuICogU2ltcGxlIGJpbmQgcG9seWZpbGwgZm9yIGVudmlyb25tZW50cyB0aGF0IGRvIG5vdCBzdXBwb3J0IGl0LFxyXG4gKiBlLmcuLCBQaGFudG9tSlMgMS54LiBUZWNobmljYWxseSwgd2UgZG9uJ3QgbmVlZCB0aGlzIGFueW1vcmVcclxuICogc2luY2UgbmF0aXZlIGJpbmQgaXMgbm93IHBlcmZvcm1hbnQgZW5vdWdoIGluIG1vc3QgYnJvd3NlcnMuXHJcbiAqIEJ1dCByZW1vdmluZyBpdCB3b3VsZCBtZWFuIGJyZWFraW5nIGNvZGUgdGhhdCB3YXMgYWJsZSB0byBydW4gaW5cclxuICogUGhhbnRvbUpTIDEueCwgc28gdGhpcyBtdXN0IGJlIGtlcHQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuXHJcbiAqL1xyXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xyXG5mdW5jdGlvbiBwb2x5ZmlsbEJpbmQoZm4sIGN0eCkge1xyXG4gICAgZnVuY3Rpb24gYm91bmRGbihhKSB7XHJcbiAgICAgICAgdmFyIGwgPSBhcmd1bWVudHMubGVuZ3RoO1xyXG4gICAgICAgIHJldHVybiBsXHJcbiAgICAgICAgICAgID8gbCA+IDFcclxuICAgICAgICAgICAgICAgID8gZm4uYXBwbHkoY3R4LCBhcmd1bWVudHMpXHJcbiAgICAgICAgICAgICAgICA6IGZuLmNhbGwoY3R4LCBhKVxyXG4gICAgICAgICAgICA6IGZuLmNhbGwoY3R4KTtcclxuICAgIH1cclxuICAgIGJvdW5kRm4uX2xlbmd0aCA9IGZuLmxlbmd0aDtcclxuICAgIHJldHVybiBib3VuZEZuO1xyXG59XHJcbmZ1bmN0aW9uIG5hdGl2ZUJpbmQoZm4sIGN0eCkge1xyXG4gICAgcmV0dXJuIGZuLmJpbmQoY3R4KTtcclxufVxyXG4vLyBAdHMtZXhwZWN0LWVycm9yIGJpbmQgY2Fubm90IGJlIGB1bmRlZmluZWRgXHJcbnZhciBiaW5kJDEgPSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCA/IG5hdGl2ZUJpbmQgOiBwb2x5ZmlsbEJpbmQ7XHJcbi8qKlxyXG4gKiBDb252ZXJ0IGFuIEFycmF5LWxpa2Ugb2JqZWN0IHRvIGEgcmVhbCBBcnJheS5cclxuICovXHJcbmZ1bmN0aW9uIHRvQXJyYXkobGlzdCwgc3RhcnQpIHtcclxuICAgIHN0YXJ0ID0gc3RhcnQgfHwgMDtcclxuICAgIHZhciBpID0gbGlzdC5sZW5ndGggLSBzdGFydDtcclxuICAgIHZhciByZXQgPSBuZXcgQXJyYXkoaSk7XHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgICAgcmV0W2ldID0gbGlzdFtpICsgc3RhcnRdO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJldDtcclxufVxyXG4vKipcclxuICogTWl4IHByb3BlcnRpZXMgaW50byB0YXJnZXQgb2JqZWN0LlxyXG4gKi9cclxuZnVuY3Rpb24gZXh0ZW5kKHRvLCBfZnJvbSkge1xyXG4gICAgZm9yICh2YXIga2V5IGluIF9mcm9tKSB7XHJcbiAgICAgICAgdG9ba2V5XSA9IF9mcm9tW2tleV07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdG87XHJcbn1cclxuLyoqXHJcbiAqIE1lcmdlIGFuIEFycmF5IG9mIE9iamVjdHMgaW50byBhIHNpbmdsZSBPYmplY3QuXHJcbiAqL1xyXG5mdW5jdGlvbiB0b09iamVjdChhcnIpIHtcclxuICAgIHZhciByZXMgPSB7fTtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKGFycltpXSkge1xyXG4gICAgICAgICAgICBleHRlbmQocmVzLCBhcnJbaV0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiByZXM7XHJcbn1cclxuLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cclxuLyoqXHJcbiAqIFBlcmZvcm0gbm8gb3BlcmF0aW9uLlxyXG4gKiBTdHViYmluZyBhcmdzIHRvIG1ha2UgRmxvdyBoYXBweSB3aXRob3V0IGxlYXZpbmcgdXNlbGVzcyB0cmFuc3BpbGVkIGNvZGVcclxuICogd2l0aCAuLi5yZXN0IChodHRwczovL2Zsb3cub3JnL2Jsb2cvMjAxNy8wNS8wNy9TdHJpY3QtRnVuY3Rpb24tQ2FsbC1Bcml0eS8pLlxyXG4gKi9cclxuZnVuY3Rpb24gbm9vcChhLCBiLCBjKSB7IH1cclxuLyoqXHJcbiAqIEFsd2F5cyByZXR1cm4gZmFsc2UuXHJcbiAqL1xyXG52YXIgbm8gPSBmdW5jdGlvbiAoYSwgYiwgYykgeyByZXR1cm4gZmFsc2U7IH07XHJcbi8qIGVzbGludC1lbmFibGUgbm8tdW51c2VkLXZhcnMgKi9cclxuLyoqXHJcbiAqIFJldHVybiB0aGUgc2FtZSB2YWx1ZS5cclxuICovXHJcbnZhciBpZGVudGl0eSA9IGZ1bmN0aW9uIChfKSB7IHJldHVybiBfOyB9O1xyXG4vKipcclxuICogR2VuZXJhdGUgYSBzdHJpbmcgY29udGFpbmluZyBzdGF0aWMga2V5cyBmcm9tIGNvbXBpbGVyIG1vZHVsZXMuXHJcbiAqL1xyXG5mdW5jdGlvbiBnZW5TdGF0aWNLZXlzJDEobW9kdWxlcykge1xyXG4gICAgcmV0dXJuIG1vZHVsZXNcclxuICAgICAgICAucmVkdWNlKGZ1bmN0aW9uIChrZXlzLCBtKSB7XHJcbiAgICAgICAgcmV0dXJuIGtleXMuY29uY2F0KG0uc3RhdGljS2V5cyB8fCBbXSk7XHJcbiAgICB9LCBbXSlcclxuICAgICAgICAuam9pbignLCcpO1xyXG59XHJcbi8qKlxyXG4gKiBDaGVjayBpZiB0d28gdmFsdWVzIGFyZSBsb29zZWx5IGVxdWFsIC0gdGhhdCBpcyxcclxuICogaWYgdGhleSBhcmUgcGxhaW4gb2JqZWN0cywgZG8gdGhleSBoYXZlIHRoZSBzYW1lIHNoYXBlP1xyXG4gKi9cclxuZnVuY3Rpb24gbG9vc2VFcXVhbChhLCBiKSB7XHJcbiAgICBpZiAoYSA9PT0gYilcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIHZhciBpc09iamVjdEEgPSBpc09iamVjdChhKTtcclxuICAgIHZhciBpc09iamVjdEIgPSBpc09iamVjdChiKTtcclxuICAgIGlmIChpc09iamVjdEEgJiYgaXNPYmplY3RCKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgdmFyIGlzQXJyYXlBID0gQXJyYXkuaXNBcnJheShhKTtcclxuICAgICAgICAgICAgdmFyIGlzQXJyYXlCID0gQXJyYXkuaXNBcnJheShiKTtcclxuICAgICAgICAgICAgaWYgKGlzQXJyYXlBICYmIGlzQXJyYXlCKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKGEubGVuZ3RoID09PSBiLmxlbmd0aCAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGEuZXZlcnkoZnVuY3Rpb24gKGUsIGkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxvb3NlRXF1YWwoZSwgYltpXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGEgaW5zdGFuY2VvZiBEYXRlICYmIGIgaW5zdGFuY2VvZiBEYXRlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYS5nZXRUaW1lKCkgPT09IGIuZ2V0VGltZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKCFpc0FycmF5QSAmJiAhaXNBcnJheUIpIHtcclxuICAgICAgICAgICAgICAgIHZhciBrZXlzQSA9IE9iamVjdC5rZXlzKGEpO1xyXG4gICAgICAgICAgICAgICAgdmFyIGtleXNCID0gT2JqZWN0LmtleXMoYik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKGtleXNBLmxlbmd0aCA9PT0ga2V5c0IubGVuZ3RoICYmXHJcbiAgICAgICAgICAgICAgICAgICAga2V5c0EuZXZlcnkoZnVuY3Rpb24gKGtleSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbG9vc2VFcXVhbChhW2tleV0sIGJba2V5XSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoIWlzT2JqZWN0QSAmJiAhaXNPYmplY3RCKSB7XHJcbiAgICAgICAgcmV0dXJuIFN0cmluZyhhKSA9PT0gU3RyaW5nKGIpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG59XHJcbi8qKlxyXG4gKiBSZXR1cm4gdGhlIGZpcnN0IGluZGV4IGF0IHdoaWNoIGEgbG9vc2VseSBlcXVhbCB2YWx1ZSBjYW4gYmVcclxuICogZm91bmQgaW4gdGhlIGFycmF5IChpZiB2YWx1ZSBpcyBhIHBsYWluIG9iamVjdCwgdGhlIGFycmF5IG11c3RcclxuICogY29udGFpbiBhbiBvYmplY3Qgb2YgdGhlIHNhbWUgc2hhcGUpLCBvciAtMSBpZiBpdCBpcyBub3QgcHJlc2VudC5cclxuICovXHJcbmZ1bmN0aW9uIGxvb3NlSW5kZXhPZihhcnIsIHZhbCkge1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBpZiAobG9vc2VFcXVhbChhcnJbaV0sIHZhbCkpXHJcbiAgICAgICAgICAgIHJldHVybiBpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIC0xO1xyXG59XHJcbi8qKlxyXG4gKiBFbnN1cmUgYSBmdW5jdGlvbiBpcyBjYWxsZWQgb25seSBvbmNlLlxyXG4gKi9cclxuZnVuY3Rpb24gb25jZShmbikge1xyXG4gICAgdmFyIGNhbGxlZCA9IGZhbHNlO1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAoIWNhbGxlZCkge1xyXG4gICAgICAgICAgICBjYWxsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn1cclxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvT2JqZWN0L2lzI3BvbHlmaWxsXHJcbmZ1bmN0aW9uIGhhc0NoYW5nZWQoeCwgeSkge1xyXG4gICAgaWYgKHggPT09IHkpIHtcclxuICAgICAgICByZXR1cm4geCA9PT0gMCAmJiAxIC8geCAhPT0gMSAvIHk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICByZXR1cm4geCA9PT0geCB8fCB5ID09PSB5O1xyXG4gICAgfVxyXG59XG5cbnZhciBTU1JfQVRUUiA9ICdkYXRhLXNlcnZlci1yZW5kZXJlZCc7XHJcbnZhciBBU1NFVF9UWVBFUyA9IFsnY29tcG9uZW50JywgJ2RpcmVjdGl2ZScsICdmaWx0ZXInXTtcclxudmFyIExJRkVDWUNMRV9IT09LUyA9IFtcclxuICAgICdiZWZvcmVDcmVhdGUnLFxyXG4gICAgJ2NyZWF0ZWQnLFxyXG4gICAgJ2JlZm9yZU1vdW50JyxcclxuICAgICdtb3VudGVkJyxcclxuICAgICdiZWZvcmVVcGRhdGUnLFxyXG4gICAgJ3VwZGF0ZWQnLFxyXG4gICAgJ2JlZm9yZURlc3Ryb3knLFxyXG4gICAgJ2Rlc3Ryb3llZCcsXHJcbiAgICAnYWN0aXZhdGVkJyxcclxuICAgICdkZWFjdGl2YXRlZCcsXHJcbiAgICAnZXJyb3JDYXB0dXJlZCcsXHJcbiAgICAnc2VydmVyUHJlZmV0Y2gnLFxyXG4gICAgJ3JlbmRlclRyYWNrZWQnLFxyXG4gICAgJ3JlbmRlclRyaWdnZXJlZCdcclxuXTtcblxudmFyIGNvbmZpZyA9IHtcclxuICAgIC8qKlxyXG4gICAgICogT3B0aW9uIG1lcmdlIHN0cmF0ZWdpZXMgKHVzZWQgaW4gY29yZS91dGlsL29wdGlvbnMpXHJcbiAgICAgKi9cclxuICAgIC8vICRmbG93LWRpc2FibGUtbGluZVxyXG4gICAgb3B0aW9uTWVyZ2VTdHJhdGVnaWVzOiBPYmplY3QuY3JlYXRlKG51bGwpLFxyXG4gICAgLyoqXHJcbiAgICAgKiBXaGV0aGVyIHRvIHN1cHByZXNzIHdhcm5pbmdzLlxyXG4gICAgICovXHJcbiAgICBzaWxlbnQ6IGZhbHNlLFxyXG4gICAgLyoqXHJcbiAgICAgKiBTaG93IHByb2R1Y3Rpb24gbW9kZSB0aXAgbWVzc2FnZSBvbiBib290P1xyXG4gICAgICovXHJcbiAgICBwcm9kdWN0aW9uVGlwOiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nLFxyXG4gICAgLyoqXHJcbiAgICAgKiBXaGV0aGVyIHRvIGVuYWJsZSBkZXZ0b29sc1xyXG4gICAgICovXHJcbiAgICBkZXZ0b29sczogcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyxcclxuICAgIC8qKlxyXG4gICAgICogV2hldGhlciB0byByZWNvcmQgcGVyZlxyXG4gICAgICovXHJcbiAgICBwZXJmb3JtYW5jZTogZmFsc2UsXHJcbiAgICAvKipcclxuICAgICAqIEVycm9yIGhhbmRsZXIgZm9yIHdhdGNoZXIgZXJyb3JzXHJcbiAgICAgKi9cclxuICAgIGVycm9ySGFuZGxlcjogbnVsbCxcclxuICAgIC8qKlxyXG4gICAgICogV2FybiBoYW5kbGVyIGZvciB3YXRjaGVyIHdhcm5zXHJcbiAgICAgKi9cclxuICAgIHdhcm5IYW5kbGVyOiBudWxsLFxyXG4gICAgLyoqXHJcbiAgICAgKiBJZ25vcmUgY2VydGFpbiBjdXN0b20gZWxlbWVudHNcclxuICAgICAqL1xyXG4gICAgaWdub3JlZEVsZW1lbnRzOiBbXSxcclxuICAgIC8qKlxyXG4gICAgICogQ3VzdG9tIHVzZXIga2V5IGFsaWFzZXMgZm9yIHYtb25cclxuICAgICAqL1xyXG4gICAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXHJcbiAgICBrZXlDb2RlczogT2JqZWN0LmNyZWF0ZShudWxsKSxcclxuICAgIC8qKlxyXG4gICAgICogQ2hlY2sgaWYgYSB0YWcgaXMgcmVzZXJ2ZWQgc28gdGhhdCBpdCBjYW5ub3QgYmUgcmVnaXN0ZXJlZCBhcyBhXHJcbiAgICAgKiBjb21wb25lbnQuIFRoaXMgaXMgcGxhdGZvcm0tZGVwZW5kZW50IGFuZCBtYXkgYmUgb3ZlcndyaXR0ZW4uXHJcbiAgICAgKi9cclxuICAgIGlzUmVzZXJ2ZWRUYWc6IG5vLFxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVjayBpZiBhbiBhdHRyaWJ1dGUgaXMgcmVzZXJ2ZWQgc28gdGhhdCBpdCBjYW5ub3QgYmUgdXNlZCBhcyBhIGNvbXBvbmVudFxyXG4gICAgICogcHJvcC4gVGhpcyBpcyBwbGF0Zm9ybS1kZXBlbmRlbnQgYW5kIG1heSBiZSBvdmVyd3JpdHRlbi5cclxuICAgICAqL1xyXG4gICAgaXNSZXNlcnZlZEF0dHI6IG5vLFxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVjayBpZiBhIHRhZyBpcyBhbiB1bmtub3duIGVsZW1lbnQuXHJcbiAgICAgKiBQbGF0Zm9ybS1kZXBlbmRlbnQuXHJcbiAgICAgKi9cclxuICAgIGlzVW5rbm93bkVsZW1lbnQ6IG5vLFxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgdGhlIG5hbWVzcGFjZSBvZiBhbiBlbGVtZW50XHJcbiAgICAgKi9cclxuICAgIGdldFRhZ05hbWVzcGFjZTogbm9vcCxcclxuICAgIC8qKlxyXG4gICAgICogUGFyc2UgdGhlIHJlYWwgdGFnIG5hbWUgZm9yIHRoZSBzcGVjaWZpYyBwbGF0Zm9ybS5cclxuICAgICAqL1xyXG4gICAgcGFyc2VQbGF0Zm9ybVRhZ05hbWU6IGlkZW50aXR5LFxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVjayBpZiBhbiBhdHRyaWJ1dGUgbXVzdCBiZSBib3VuZCB1c2luZyBwcm9wZXJ0eSwgZS5nLiB2YWx1ZVxyXG4gICAgICogUGxhdGZvcm0tZGVwZW5kZW50LlxyXG4gICAgICovXHJcbiAgICBtdXN0VXNlUHJvcDogbm8sXHJcbiAgICAvKipcclxuICAgICAqIFBlcmZvcm0gdXBkYXRlcyBhc3luY2hyb25vdXNseS4gSW50ZW5kZWQgdG8gYmUgdXNlZCBieSBWdWUgVGVzdCBVdGlsc1xyXG4gICAgICogVGhpcyB3aWxsIHNpZ25pZmljYW50bHkgcmVkdWNlIHBlcmZvcm1hbmNlIGlmIHNldCB0byBmYWxzZS5cclxuICAgICAqL1xyXG4gICAgYXN5bmM6IHRydWUsXHJcbiAgICAvKipcclxuICAgICAqIEV4cG9zZWQgZm9yIGxlZ2FjeSByZWFzb25zXHJcbiAgICAgKi9cclxuICAgIF9saWZlY3ljbGVIb29rczogTElGRUNZQ0xFX0hPT0tTXHJcbn07XG5cbi8qKlxyXG4gKiB1bmljb2RlIGxldHRlcnMgdXNlZCBmb3IgcGFyc2luZyBodG1sIHRhZ3MsIGNvbXBvbmVudCBuYW1lcyBhbmQgcHJvcGVydHkgcGF0aHMuXHJcbiAqIHVzaW5nIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9odG1sNTMvc2VtYW50aWNzLXNjcmlwdGluZy5odG1sI3BvdGVudGlhbGN1c3RvbWVsZW1lbnRuYW1lXHJcbiAqIHNraXBwaW5nIFxcdTEwMDAwLVxcdUVGRkZGIGR1ZSB0byBpdCBmcmVlemluZyB1cCBQaGFudG9tSlNcclxuICovXHJcbnZhciB1bmljb2RlUmVnRXhwID0gL2EtekEtWlxcdTAwQjdcXHUwMEMwLVxcdTAwRDZcXHUwMEQ4LVxcdTAwRjZcXHUwMEY4LVxcdTAzN0RcXHUwMzdGLVxcdTFGRkZcXHUyMDBDLVxcdTIwMERcXHUyMDNGLVxcdTIwNDBcXHUyMDcwLVxcdTIxOEZcXHUyQzAwLVxcdTJGRUZcXHUzMDAxLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRkQvO1xyXG4vKipcclxuICogQ2hlY2sgaWYgYSBzdHJpbmcgc3RhcnRzIHdpdGggJCBvciBfXHJcbiAqL1xyXG5mdW5jdGlvbiBpc1Jlc2VydmVkKHN0cikge1xyXG4gICAgdmFyIGMgPSAoc3RyICsgJycpLmNoYXJDb2RlQXQoMCk7XHJcbiAgICByZXR1cm4gYyA9PT0gMHgyNCB8fCBjID09PSAweDVmO1xyXG59XHJcbi8qKlxyXG4gKiBEZWZpbmUgYSBwcm9wZXJ0eS5cclxuICovXHJcbmZ1bmN0aW9uIGRlZihvYmosIGtleSwgdmFsLCBlbnVtZXJhYmxlKSB7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcclxuICAgICAgICB2YWx1ZTogdmFsLFxyXG4gICAgICAgIGVudW1lcmFibGU6ICEhZW51bWVyYWJsZSxcclxuICAgICAgICB3cml0YWJsZTogdHJ1ZSxcclxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcclxuICAgIH0pO1xyXG59XHJcbi8qKlxyXG4gKiBQYXJzZSBzaW1wbGUgcGF0aC5cclxuICovXHJcbnZhciBiYWlsUkUgPSBuZXcgUmVnRXhwKFwiW15cIi5jb25jYXQodW5pY29kZVJlZ0V4cC5zb3VyY2UsIFwiLiRfXFxcXGRdXCIpKTtcclxuZnVuY3Rpb24gcGFyc2VQYXRoKHBhdGgpIHtcclxuICAgIGlmIChiYWlsUkUudGVzdChwYXRoKSkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHZhciBzZWdtZW50cyA9IHBhdGguc3BsaXQoJy4nKTtcclxuICAgIHJldHVybiBmdW5jdGlvbiAob2JqKSB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWdtZW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoIW9iailcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgb2JqID0gb2JqW3NlZ21lbnRzW2ldXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG9iajtcclxuICAgIH07XHJcbn1cblxuLy8gY2FuIHdlIHVzZSBfX3Byb3RvX18/XHJcbnZhciBoYXNQcm90byA9ICdfX3Byb3RvX18nIGluIHt9O1xyXG4vLyBCcm93c2VyIGVudmlyb25tZW50IHNuaWZmaW5nXHJcbnZhciBpbkJyb3dzZXIgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJztcclxudmFyIFVBID0gaW5Ccm93c2VyICYmIHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCk7XHJcbnZhciBpc0lFID0gVUEgJiYgL21zaWV8dHJpZGVudC8udGVzdChVQSk7XHJcbnZhciBpc0lFOSA9IFVBICYmIFVBLmluZGV4T2YoJ21zaWUgOS4wJykgPiAwO1xyXG52YXIgaXNFZGdlID0gVUEgJiYgVUEuaW5kZXhPZignZWRnZS8nKSA+IDA7XHJcblVBICYmIFVBLmluZGV4T2YoJ2FuZHJvaWQnKSA+IDA7XHJcbnZhciBpc0lPUyA9IFVBICYmIC9pcGhvbmV8aXBhZHxpcG9kfGlvcy8udGVzdChVQSk7XHJcblVBICYmIC9jaHJvbWVcXC9cXGQrLy50ZXN0KFVBKSAmJiAhaXNFZGdlO1xyXG5VQSAmJiAvcGhhbnRvbWpzLy50ZXN0KFVBKTtcclxudmFyIGlzRkYgPSBVQSAmJiBVQS5tYXRjaCgvZmlyZWZveFxcLyhcXGQrKS8pO1xyXG4vLyBGaXJlZm94IGhhcyBhIFwid2F0Y2hcIiBmdW5jdGlvbiBvbiBPYmplY3QucHJvdG90eXBlLi4uXHJcbi8vIEB0cy1leHBlY3QtZXJyb3IgZmlyZWJveCBzdXBwb3J0XHJcbnZhciBuYXRpdmVXYXRjaCA9IHt9LndhdGNoO1xyXG52YXIgc3VwcG9ydHNQYXNzaXZlID0gZmFsc2U7XHJcbmlmIChpbkJyb3dzZXIpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgdmFyIG9wdHMgPSB7fTtcclxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob3B0cywgJ3Bhc3NpdmUnLCB7XHJcbiAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cclxuICAgICAgICAgICAgICAgIHN1cHBvcnRzUGFzc2l2ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTsgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2Zsb3cvaXNzdWVzLzI4NVxyXG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd0ZXN0LXBhc3NpdmUnLCBudWxsLCBvcHRzKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChlKSB7IH1cclxufVxyXG4vLyB0aGlzIG5lZWRzIHRvIGJlIGxhenktZXZhbGVkIGJlY2F1c2UgdnVlIG1heSBiZSByZXF1aXJlZCBiZWZvcmVcclxuLy8gdnVlLXNlcnZlci1yZW5kZXJlciBjYW4gc2V0IFZVRV9FTlZcclxudmFyIF9pc1NlcnZlcjtcclxudmFyIGlzU2VydmVyUmVuZGVyaW5nID0gZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKF9pc1NlcnZlciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXHJcbiAgICAgICAgaWYgKCFpbkJyb3dzZXIgJiYgdHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgLy8gZGV0ZWN0IHByZXNlbmNlIG9mIHZ1ZS1zZXJ2ZXItcmVuZGVyZXIgYW5kIGF2b2lkXHJcbiAgICAgICAgICAgIC8vIFdlYnBhY2sgc2hpbW1pbmcgdGhlIHByb2Nlc3NcclxuICAgICAgICAgICAgX2lzU2VydmVyID1cclxuICAgICAgICAgICAgICAgIGdsb2JhbFsncHJvY2VzcyddICYmIGdsb2JhbFsncHJvY2VzcyddLmVudi5WVUVfRU5WID09PSAnc2VydmVyJztcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIF9pc1NlcnZlciA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBfaXNTZXJ2ZXI7XHJcbn07XHJcbi8vIGRldGVjdCBkZXZ0b29sc1xyXG52YXIgZGV2dG9vbHMgPSBpbkJyb3dzZXIgJiYgd2luZG93Ll9fVlVFX0RFVlRPT0xTX0dMT0JBTF9IT09LX187XHJcbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXHJcbmZ1bmN0aW9uIGlzTmF0aXZlKEN0b3IpIHtcclxuICAgIHJldHVybiB0eXBlb2YgQ3RvciA9PT0gJ2Z1bmN0aW9uJyAmJiAvbmF0aXZlIGNvZGUvLnRlc3QoQ3Rvci50b1N0cmluZygpKTtcclxufVxyXG52YXIgaGFzU3ltYm9sID0gdHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiZcclxuICAgIGlzTmF0aXZlKFN5bWJvbCkgJiZcclxuICAgIHR5cGVvZiBSZWZsZWN0ICE9PSAndW5kZWZpbmVkJyAmJlxyXG4gICAgaXNOYXRpdmUoUmVmbGVjdC5vd25LZXlzKTtcclxudmFyIF9TZXQ7IC8vICRmbG93LWRpc2FibGUtbGluZVxyXG4vKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi8gaWYgKHR5cGVvZiBTZXQgIT09ICd1bmRlZmluZWQnICYmIGlzTmF0aXZlKFNldCkpIHtcclxuICAgIC8vIHVzZSBuYXRpdmUgU2V0IHdoZW4gYXZhaWxhYmxlLlxyXG4gICAgX1NldCA9IFNldDtcclxufVxyXG5lbHNlIHtcclxuICAgIC8vIGEgbm9uLXN0YW5kYXJkIFNldCBwb2x5ZmlsbCB0aGF0IG9ubHkgd29ya3Mgd2l0aCBwcmltaXRpdmUga2V5cy5cclxuICAgIF9TZXQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgZnVuY3Rpb24gU2V0KCkge1xyXG4gICAgICAgICAgICB0aGlzLnNldCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFNldC5wcm90b3R5cGUuaGFzID0gZnVuY3Rpb24gKGtleSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZXRba2V5XSA9PT0gdHJ1ZTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIFNldC5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKGtleSkge1xyXG4gICAgICAgICAgICB0aGlzLnNldFtrZXldID0gdHJ1ZTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIFNldC5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiBTZXQ7XHJcbiAgICB9KCkpO1xyXG59XG5cbnZhciBjdXJyZW50SW5zdGFuY2UgPSBudWxsO1xyXG4vKipcclxuICogVGhpcyBpcyBleHBvc2VkIGZvciBjb21wYXRpYmlsaXR5IHdpdGggdjMgKGUuZy4gc29tZSBmdW5jdGlvbnMgaW4gVnVlVXNlXHJcbiAqIHJlbGllcyBvbiBpdCkuIERvIG5vdCB1c2UgdGhpcyBpbnRlcm5hbGx5LCBqdXN0IHVzZSBgY3VycmVudEluc3RhbmNlYC5cclxuICpcclxuICogQGludGVybmFsIHRoaXMgZnVuY3Rpb24gbmVlZHMgbWFudWFsIHR5cGUgZGVjbGFyYXRpb24gYmVjYXVzZSBpdCByZWxpZXNcclxuICogb24gcHJldmlvdXNseSBtYW51YWxseSBhdXRob3JlZCB0eXBlcyBmcm9tIFZ1ZSAyXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRDdXJyZW50SW5zdGFuY2UoKSB7XHJcbiAgICByZXR1cm4gY3VycmVudEluc3RhbmNlICYmIHsgcHJveHk6IGN1cnJlbnRJbnN0YW5jZSB9O1xyXG59XHJcbi8qKlxyXG4gKiBAaW50ZXJuYWxcclxuICovXHJcbmZ1bmN0aW9uIHNldEN1cnJlbnRJbnN0YW5jZSh2bSkge1xyXG4gICAgaWYgKHZtID09PSB2b2lkIDApIHsgdm0gPSBudWxsOyB9XHJcbiAgICBpZiAoIXZtKVxyXG4gICAgICAgIGN1cnJlbnRJbnN0YW5jZSAmJiBjdXJyZW50SW5zdGFuY2UuX3Njb3BlLm9mZigpO1xyXG4gICAgY3VycmVudEluc3RhbmNlID0gdm07XHJcbiAgICB2bSAmJiB2bS5fc2NvcGUub24oKTtcclxufVxuXG4vKipcclxuICogQGludGVybmFsXHJcbiAqL1xyXG52YXIgVk5vZGUgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBWTm9kZSh0YWcsIGRhdGEsIGNoaWxkcmVuLCB0ZXh0LCBlbG0sIGNvbnRleHQsIGNvbXBvbmVudE9wdGlvbnMsIGFzeW5jRmFjdG9yeSkge1xyXG4gICAgICAgIHRoaXMudGFnID0gdGFnO1xyXG4gICAgICAgIHRoaXMuZGF0YSA9IGRhdGE7XHJcbiAgICAgICAgdGhpcy5jaGlsZHJlbiA9IGNoaWxkcmVuO1xyXG4gICAgICAgIHRoaXMudGV4dCA9IHRleHQ7XHJcbiAgICAgICAgdGhpcy5lbG0gPSBlbG07XHJcbiAgICAgICAgdGhpcy5ucyA9IHVuZGVmaW5lZDtcclxuICAgICAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xyXG4gICAgICAgIHRoaXMuZm5Db250ZXh0ID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIHRoaXMuZm5PcHRpb25zID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIHRoaXMuZm5TY29wZUlkID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIHRoaXMua2V5ID0gZGF0YSAmJiBkYXRhLmtleTtcclxuICAgICAgICB0aGlzLmNvbXBvbmVudE9wdGlvbnMgPSBjb21wb25lbnRPcHRpb25zO1xyXG4gICAgICAgIHRoaXMuY29tcG9uZW50SW5zdGFuY2UgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgdGhpcy5wYXJlbnQgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgdGhpcy5yYXcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmlzU3RhdGljID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pc1Jvb3RJbnNlcnQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuaXNDb21tZW50ID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pc0Nsb25lZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuaXNPbmNlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5hc3luY0ZhY3RvcnkgPSBhc3luY0ZhY3Rvcnk7XHJcbiAgICAgICAgdGhpcy5hc3luY01ldGEgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgdGhpcy5pc0FzeW5jUGxhY2Vob2xkZXIgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShWTm9kZS5wcm90b3R5cGUsIFwiY2hpbGRcIiwge1xyXG4gICAgICAgIC8vIERFUFJFQ0FURUQ6IGFsaWFzIGZvciBjb21wb25lbnRJbnN0YW5jZSBmb3IgYmFja3dhcmRzIGNvbXBhdC5cclxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb21wb25lbnRJbnN0YW5jZTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxyXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gVk5vZGU7XHJcbn0oKSk7XHJcbnZhciBjcmVhdGVFbXB0eVZOb2RlID0gZnVuY3Rpb24gKHRleHQpIHtcclxuICAgIGlmICh0ZXh0ID09PSB2b2lkIDApIHsgdGV4dCA9ICcnOyB9XHJcbiAgICB2YXIgbm9kZSA9IG5ldyBWTm9kZSgpO1xyXG4gICAgbm9kZS50ZXh0ID0gdGV4dDtcclxuICAgIG5vZGUuaXNDb21tZW50ID0gdHJ1ZTtcclxuICAgIHJldHVybiBub2RlO1xyXG59O1xyXG5mdW5jdGlvbiBjcmVhdGVUZXh0Vk5vZGUodmFsKSB7XHJcbiAgICByZXR1cm4gbmV3IFZOb2RlKHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIFN0cmluZyh2YWwpKTtcclxufVxyXG4vLyBvcHRpbWl6ZWQgc2hhbGxvdyBjbG9uZVxyXG4vLyB1c2VkIGZvciBzdGF0aWMgbm9kZXMgYW5kIHNsb3Qgbm9kZXMgYmVjYXVzZSB0aGV5IG1heSBiZSByZXVzZWQgYWNyb3NzXHJcbi8vIG11bHRpcGxlIHJlbmRlcnMsIGNsb25pbmcgdGhlbSBhdm9pZHMgZXJyb3JzIHdoZW4gRE9NIG1hbmlwdWxhdGlvbnMgcmVseVxyXG4vLyBvbiB0aGVpciBlbG0gcmVmZXJlbmNlLlxyXG5mdW5jdGlvbiBjbG9uZVZOb2RlKHZub2RlKSB7XHJcbiAgICB2YXIgY2xvbmVkID0gbmV3IFZOb2RlKHZub2RlLnRhZywgdm5vZGUuZGF0YSwgXHJcbiAgICAvLyAjNzk3NVxyXG4gICAgLy8gY2xvbmUgY2hpbGRyZW4gYXJyYXkgdG8gYXZvaWQgbXV0YXRpbmcgb3JpZ2luYWwgaW4gY2FzZSBvZiBjbG9uaW5nXHJcbiAgICAvLyBhIGNoaWxkLlxyXG4gICAgdm5vZGUuY2hpbGRyZW4gJiYgdm5vZGUuY2hpbGRyZW4uc2xpY2UoKSwgdm5vZGUudGV4dCwgdm5vZGUuZWxtLCB2bm9kZS5jb250ZXh0LCB2bm9kZS5jb21wb25lbnRPcHRpb25zLCB2bm9kZS5hc3luY0ZhY3RvcnkpO1xyXG4gICAgY2xvbmVkLm5zID0gdm5vZGUubnM7XHJcbiAgICBjbG9uZWQuaXNTdGF0aWMgPSB2bm9kZS5pc1N0YXRpYztcclxuICAgIGNsb25lZC5rZXkgPSB2bm9kZS5rZXk7XHJcbiAgICBjbG9uZWQuaXNDb21tZW50ID0gdm5vZGUuaXNDb21tZW50O1xyXG4gICAgY2xvbmVkLmZuQ29udGV4dCA9IHZub2RlLmZuQ29udGV4dDtcclxuICAgIGNsb25lZC5mbk9wdGlvbnMgPSB2bm9kZS5mbk9wdGlvbnM7XHJcbiAgICBjbG9uZWQuZm5TY29wZUlkID0gdm5vZGUuZm5TY29wZUlkO1xyXG4gICAgY2xvbmVkLmFzeW5jTWV0YSA9IHZub2RlLmFzeW5jTWV0YTtcclxuICAgIGNsb25lZC5pc0Nsb25lZCA9IHRydWU7XHJcbiAgICByZXR1cm4gY2xvbmVkO1xyXG59XG5cbi8qIG5vdCB0eXBlIGNoZWNraW5nIHRoaXMgZmlsZSBiZWNhdXNlIGZsb3cgZG9lc24ndCBwbGF5IHdlbGwgd2l0aCBQcm94eSAqL1xyXG52YXIgaW5pdFByb3h5O1xyXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xyXG4gICAgdmFyIGFsbG93ZWRHbG9iYWxzXzEgPSBtYWtlTWFwKCdJbmZpbml0eSx1bmRlZmluZWQsTmFOLGlzRmluaXRlLGlzTmFOLCcgK1xyXG4gICAgICAgICdwYXJzZUZsb2F0LHBhcnNlSW50LGRlY29kZVVSSSxkZWNvZGVVUklDb21wb25lbnQsZW5jb2RlVVJJLGVuY29kZVVSSUNvbXBvbmVudCwnICtcclxuICAgICAgICAnTWF0aCxOdW1iZXIsRGF0ZSxBcnJheSxPYmplY3QsQm9vbGVhbixTdHJpbmcsUmVnRXhwLE1hcCxTZXQsSlNPTixJbnRsLEJpZ0ludCwnICtcclxuICAgICAgICAncmVxdWlyZScgLy8gZm9yIFdlYnBhY2svQnJvd3NlcmlmeVxyXG4gICAgKTtcclxuICAgIHZhciB3YXJuTm9uUHJlc2VudF8xID0gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7XHJcbiAgICAgICAgd2FybiQyKFwiUHJvcGVydHkgb3IgbWV0aG9kIFxcXCJcIi5jb25jYXQoa2V5LCBcIlxcXCIgaXMgbm90IGRlZmluZWQgb24gdGhlIGluc3RhbmNlIGJ1dCBcIikgK1xyXG4gICAgICAgICAgICAncmVmZXJlbmNlZCBkdXJpbmcgcmVuZGVyLiBNYWtlIHN1cmUgdGhhdCB0aGlzIHByb3BlcnR5IGlzIHJlYWN0aXZlLCAnICtcclxuICAgICAgICAgICAgJ2VpdGhlciBpbiB0aGUgZGF0YSBvcHRpb24sIG9yIGZvciBjbGFzcy1iYXNlZCBjb21wb25lbnRzLCBieSAnICtcclxuICAgICAgICAgICAgJ2luaXRpYWxpemluZyB0aGUgcHJvcGVydHkuICcgK1xyXG4gICAgICAgICAgICAnU2VlOiBodHRwczovL3YyLnZ1ZWpzLm9yZy92Mi9ndWlkZS9yZWFjdGl2aXR5Lmh0bWwjRGVjbGFyaW5nLVJlYWN0aXZlLVByb3BlcnRpZXMuJywgdGFyZ2V0KTtcclxuICAgIH07XHJcbiAgICB2YXIgd2FyblJlc2VydmVkUHJlZml4XzEgPSBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHtcclxuICAgICAgICB3YXJuJDIoXCJQcm9wZXJ0eSBcXFwiXCIuY29uY2F0KGtleSwgXCJcXFwiIG11c3QgYmUgYWNjZXNzZWQgd2l0aCBcXFwiJGRhdGEuXCIpLmNvbmNhdChrZXksIFwiXFxcIiBiZWNhdXNlIFwiKSArXHJcbiAgICAgICAgICAgICdwcm9wZXJ0aWVzIHN0YXJ0aW5nIHdpdGggXCIkXCIgb3IgXCJfXCIgYXJlIG5vdCBwcm94aWVkIGluIHRoZSBWdWUgaW5zdGFuY2UgdG8gJyArXHJcbiAgICAgICAgICAgICdwcmV2ZW50IGNvbmZsaWN0cyB3aXRoIFZ1ZSBpbnRlcm5hbHMuICcgK1xyXG4gICAgICAgICAgICAnU2VlOiBodHRwczovL3YyLnZ1ZWpzLm9yZy92Mi9hcGkvI2RhdGEnLCB0YXJnZXQpO1xyXG4gICAgfTtcclxuICAgIHZhciBoYXNQcm94eV8xID0gdHlwZW9mIFByb3h5ICE9PSAndW5kZWZpbmVkJyAmJiBpc05hdGl2ZShQcm94eSk7XHJcbiAgICBpZiAoaGFzUHJveHlfMSkge1xyXG4gICAgICAgIHZhciBpc0J1aWx0SW5Nb2RpZmllcl8xID0gbWFrZU1hcCgnc3RvcCxwcmV2ZW50LHNlbGYsY3RybCxzaGlmdCxhbHQsbWV0YSxleGFjdCcpO1xyXG4gICAgICAgIGNvbmZpZy5rZXlDb2RlcyA9IG5ldyBQcm94eShjb25maWcua2V5Q29kZXMsIHtcclxuICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAodGFyZ2V0LCBrZXksIHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNCdWlsdEluTW9kaWZpZXJfMShrZXkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgd2FybiQyKFwiQXZvaWQgb3ZlcndyaXRpbmcgYnVpbHQtaW4gbW9kaWZpZXIgaW4gY29uZmlnLmtleUNvZGVzOiAuXCIuY29uY2F0KGtleSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldFtrZXldID0gdmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIHZhciBoYXNIYW5kbGVyXzEgPSB7XHJcbiAgICAgICAgaGFzOiBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHtcclxuICAgICAgICAgICAgdmFyIGhhcyA9IGtleSBpbiB0YXJnZXQ7XHJcbiAgICAgICAgICAgIHZhciBpc0FsbG93ZWQgPSBhbGxvd2VkR2xvYmFsc18xKGtleSkgfHxcclxuICAgICAgICAgICAgICAgICh0eXBlb2Yga2V5ID09PSAnc3RyaW5nJyAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGtleS5jaGFyQXQoMCkgPT09ICdfJyAmJlxyXG4gICAgICAgICAgICAgICAgICAgICEoa2V5IGluIHRhcmdldC4kZGF0YSkpO1xyXG4gICAgICAgICAgICBpZiAoIWhhcyAmJiAhaXNBbGxvd2VkKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoa2V5IGluIHRhcmdldC4kZGF0YSlcclxuICAgICAgICAgICAgICAgICAgICB3YXJuUmVzZXJ2ZWRQcmVmaXhfMSh0YXJnZXQsIGtleSk7XHJcbiAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgd2Fybk5vblByZXNlbnRfMSh0YXJnZXQsIGtleSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGhhcyB8fCAhaXNBbGxvd2VkO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICB2YXIgZ2V0SGFuZGxlcl8xID0ge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2Yga2V5ID09PSAnc3RyaW5nJyAmJiAhKGtleSBpbiB0YXJnZXQpKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoa2V5IGluIHRhcmdldC4kZGF0YSlcclxuICAgICAgICAgICAgICAgICAgICB3YXJuUmVzZXJ2ZWRQcmVmaXhfMSh0YXJnZXQsIGtleSk7XHJcbiAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgd2Fybk5vblByZXNlbnRfMSh0YXJnZXQsIGtleSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHRhcmdldFtrZXldO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBpbml0UHJveHkgPSBmdW5jdGlvbiBpbml0UHJveHkodm0pIHtcclxuICAgICAgICBpZiAoaGFzUHJveHlfMSkge1xyXG4gICAgICAgICAgICAvLyBkZXRlcm1pbmUgd2hpY2ggcHJveHkgaGFuZGxlciB0byB1c2VcclxuICAgICAgICAgICAgdmFyIG9wdGlvbnMgPSB2bS4kb3B0aW9ucztcclxuICAgICAgICAgICAgdmFyIGhhbmRsZXJzID0gb3B0aW9ucy5yZW5kZXIgJiYgb3B0aW9ucy5yZW5kZXIuX3dpdGhTdHJpcHBlZCA/IGdldEhhbmRsZXJfMSA6IGhhc0hhbmRsZXJfMTtcclxuICAgICAgICAgICAgdm0uX3JlbmRlclByb3h5ID0gbmV3IFByb3h5KHZtLCBoYW5kbGVycyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB2bS5fcmVuZGVyUHJveHkgPSB2bTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG59XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXHJcblxyXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcclxucHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLlxyXG5cclxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSFxyXG5SRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFlcclxuQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULFxyXG5JTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST01cclxuTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1JcclxuT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUlxyXG5QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxyXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xyXG5cclxudmFyIF9fYXNzaWduID0gZnVuY3Rpb24oKSB7XHJcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gX19hc3NpZ24odCkge1xyXG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xyXG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdDtcclxuICAgIH07XHJcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxufTtcblxudmFyIHVpZCQyID0gMDtcclxuLyoqXHJcbiAqIEEgZGVwIGlzIGFuIG9ic2VydmFibGUgdGhhdCBjYW4gaGF2ZSBtdWx0aXBsZVxyXG4gKiBkaXJlY3RpdmVzIHN1YnNjcmliaW5nIHRvIGl0LlxyXG4gKiBAaW50ZXJuYWxcclxuICovXHJcbnZhciBEZXAgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBEZXAoKSB7XHJcbiAgICAgICAgdGhpcy5pZCA9IHVpZCQyKys7XHJcbiAgICAgICAgdGhpcy5zdWJzID0gW107XHJcbiAgICB9XHJcbiAgICBEZXAucHJvdG90eXBlLmFkZFN1YiA9IGZ1bmN0aW9uIChzdWIpIHtcclxuICAgICAgICB0aGlzLnN1YnMucHVzaChzdWIpO1xyXG4gICAgfTtcclxuICAgIERlcC5wcm90b3R5cGUucmVtb3ZlU3ViID0gZnVuY3Rpb24gKHN1Yikge1xyXG4gICAgICAgIHJlbW92ZSQyKHRoaXMuc3Vicywgc3ViKTtcclxuICAgIH07XHJcbiAgICBEZXAucHJvdG90eXBlLmRlcGVuZCA9IGZ1bmN0aW9uIChpbmZvKSB7XHJcbiAgICAgICAgaWYgKERlcC50YXJnZXQpIHtcclxuICAgICAgICAgICAgRGVwLnRhcmdldC5hZGREZXAodGhpcyk7XHJcbiAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGluZm8gJiYgRGVwLnRhcmdldC5vblRyYWNrKSB7XHJcbiAgICAgICAgICAgICAgICBEZXAudGFyZ2V0Lm9uVHJhY2soX19hc3NpZ24oeyBlZmZlY3Q6IERlcC50YXJnZXQgfSwgaW5mbykpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIERlcC5wcm90b3R5cGUubm90aWZ5ID0gZnVuY3Rpb24gKGluZm8pIHtcclxuICAgICAgICAvLyBzdGFiaWxpemUgdGhlIHN1YnNjcmliZXIgbGlzdCBmaXJzdFxyXG4gICAgICAgIHZhciBzdWJzID0gdGhpcy5zdWJzLnNsaWNlKCk7XHJcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIWNvbmZpZy5hc3luYykge1xyXG4gICAgICAgICAgICAvLyBzdWJzIGFyZW4ndCBzb3J0ZWQgaW4gc2NoZWR1bGVyIGlmIG5vdCBydW5uaW5nIGFzeW5jXHJcbiAgICAgICAgICAgIC8vIHdlIG5lZWQgdG8gc29ydCB0aGVtIG5vdyB0byBtYWtlIHN1cmUgdGhleSBmaXJlIGluIGNvcnJlY3RcclxuICAgICAgICAgICAgLy8gb3JkZXJcclxuICAgICAgICAgICAgc3Vicy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBhLmlkIC0gYi5pZDsgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gc3Vicy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgaW5mbykge1xyXG4gICAgICAgICAgICAgICAgdmFyIHN1YiA9IHN1YnNbaV07XHJcbiAgICAgICAgICAgICAgICBzdWIub25UcmlnZ2VyICYmXHJcbiAgICAgICAgICAgICAgICAgICAgc3ViLm9uVHJpZ2dlcihfX2Fzc2lnbih7IGVmZmVjdDogc3Vic1tpXSB9LCBpbmZvKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc3Vic1tpXS51cGRhdGUoKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIERlcDtcclxufSgpKTtcclxuLy8gVGhlIGN1cnJlbnQgdGFyZ2V0IHdhdGNoZXIgYmVpbmcgZXZhbHVhdGVkLlxyXG4vLyBUaGlzIGlzIGdsb2JhbGx5IHVuaXF1ZSBiZWNhdXNlIG9ubHkgb25lIHdhdGNoZXJcclxuLy8gY2FuIGJlIGV2YWx1YXRlZCBhdCBhIHRpbWUuXHJcbkRlcC50YXJnZXQgPSBudWxsO1xyXG52YXIgdGFyZ2V0U3RhY2sgPSBbXTtcclxuZnVuY3Rpb24gcHVzaFRhcmdldCh0YXJnZXQpIHtcclxuICAgIHRhcmdldFN0YWNrLnB1c2godGFyZ2V0KTtcclxuICAgIERlcC50YXJnZXQgPSB0YXJnZXQ7XHJcbn1cclxuZnVuY3Rpb24gcG9wVGFyZ2V0KCkge1xyXG4gICAgdGFyZ2V0U3RhY2sucG9wKCk7XHJcbiAgICBEZXAudGFyZ2V0ID0gdGFyZ2V0U3RhY2tbdGFyZ2V0U3RhY2subGVuZ3RoIC0gMV07XHJcbn1cblxuLypcclxuICogbm90IHR5cGUgY2hlY2tpbmcgdGhpcyBmaWxlIGJlY2F1c2UgZmxvdyBkb2Vzbid0IHBsYXkgd2VsbCB3aXRoXHJcbiAqIGR5bmFtaWNhbGx5IGFjY2Vzc2luZyBtZXRob2RzIG9uIEFycmF5IHByb3RvdHlwZVxyXG4gKi9cclxudmFyIGFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGU7XHJcbnZhciBhcnJheU1ldGhvZHMgPSBPYmplY3QuY3JlYXRlKGFycmF5UHJvdG8pO1xyXG52YXIgbWV0aG9kc1RvUGF0Y2ggPSBbXHJcbiAgICAncHVzaCcsXHJcbiAgICAncG9wJyxcclxuICAgICdzaGlmdCcsXHJcbiAgICAndW5zaGlmdCcsXHJcbiAgICAnc3BsaWNlJyxcclxuICAgICdzb3J0JyxcclxuICAgICdyZXZlcnNlJ1xyXG5dO1xyXG4vKipcclxuICogSW50ZXJjZXB0IG11dGF0aW5nIG1ldGhvZHMgYW5kIGVtaXQgZXZlbnRzXHJcbiAqL1xyXG5tZXRob2RzVG9QYXRjaC5mb3JFYWNoKGZ1bmN0aW9uIChtZXRob2QpIHtcclxuICAgIC8vIGNhY2hlIG9yaWdpbmFsIG1ldGhvZFxyXG4gICAgdmFyIG9yaWdpbmFsID0gYXJyYXlQcm90b1ttZXRob2RdO1xyXG4gICAgZGVmKGFycmF5TWV0aG9kcywgbWV0aG9kLCBmdW5jdGlvbiBtdXRhdG9yKCkge1xyXG4gICAgICAgIHZhciBhcmdzID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgcmVzdWx0ID0gb3JpZ2luYWwuYXBwbHkodGhpcywgYXJncyk7XHJcbiAgICAgICAgdmFyIG9iID0gdGhpcy5fX29iX187XHJcbiAgICAgICAgdmFyIGluc2VydGVkO1xyXG4gICAgICAgIHN3aXRjaCAobWV0aG9kKSB7XHJcbiAgICAgICAgICAgIGNhc2UgJ3B1c2gnOlxyXG4gICAgICAgICAgICBjYXNlICd1bnNoaWZ0JzpcclxuICAgICAgICAgICAgICAgIGluc2VydGVkID0gYXJncztcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdzcGxpY2UnOlxyXG4gICAgICAgICAgICAgICAgaW5zZXJ0ZWQgPSBhcmdzLnNsaWNlKDIpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpbnNlcnRlZClcclxuICAgICAgICAgICAgb2Iub2JzZXJ2ZUFycmF5KGluc2VydGVkKTtcclxuICAgICAgICAvLyBub3RpZnkgY2hhbmdlXHJcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcclxuICAgICAgICAgICAgb2IuZGVwLm5vdGlmeSh7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiBcImFycmF5IG11dGF0aW9uXCIgLyogVHJpZ2dlck9wVHlwZXMuQVJSQVlfTVVUQVRJT04gKi8sXHJcbiAgICAgICAgICAgICAgICB0YXJnZXQ6IHRoaXMsXHJcbiAgICAgICAgICAgICAgICBrZXk6IG1ldGhvZFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIG9iLmRlcC5ub3RpZnkoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH0pO1xyXG59KTtcblxudmFyIGFycmF5S2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGFycmF5TWV0aG9kcyk7XHJcbnZhciBOT19JTklJVElBTF9WQUxVRSA9IHt9O1xyXG4vKipcclxuICogSW4gc29tZSBjYXNlcyB3ZSBtYXkgd2FudCB0byBkaXNhYmxlIG9ic2VydmF0aW9uIGluc2lkZSBhIGNvbXBvbmVudCdzXHJcbiAqIHVwZGF0ZSBjb21wdXRhdGlvbi5cclxuICovXHJcbnZhciBzaG91bGRPYnNlcnZlID0gdHJ1ZTtcclxuZnVuY3Rpb24gdG9nZ2xlT2JzZXJ2aW5nKHZhbHVlKSB7XHJcbiAgICBzaG91bGRPYnNlcnZlID0gdmFsdWU7XHJcbn1cclxuLy8gc3NyIG1vY2sgZGVwXHJcbnZhciBtb2NrRGVwID0ge1xyXG4gICAgbm90aWZ5OiBub29wLFxyXG4gICAgZGVwZW5kOiBub29wLFxyXG4gICAgYWRkU3ViOiBub29wLFxyXG4gICAgcmVtb3ZlU3ViOiBub29wXHJcbn07XHJcbi8qKlxyXG4gKiBPYnNlcnZlciBjbGFzcyB0aGF0IGlzIGF0dGFjaGVkIHRvIGVhY2ggb2JzZXJ2ZWRcclxuICogb2JqZWN0LiBPbmNlIGF0dGFjaGVkLCB0aGUgb2JzZXJ2ZXIgY29udmVydHMgdGhlIHRhcmdldFxyXG4gKiBvYmplY3QncyBwcm9wZXJ0eSBrZXlzIGludG8gZ2V0dGVyL3NldHRlcnMgdGhhdFxyXG4gKiBjb2xsZWN0IGRlcGVuZGVuY2llcyBhbmQgZGlzcGF0Y2ggdXBkYXRlcy5cclxuICovXHJcbnZhciBPYnNlcnZlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIE9ic2VydmVyKHZhbHVlLCBzaGFsbG93LCBtb2NrKSB7XHJcbiAgICAgICAgaWYgKHNoYWxsb3cgPT09IHZvaWQgMCkgeyBzaGFsbG93ID0gZmFsc2U7IH1cclxuICAgICAgICBpZiAobW9jayA9PT0gdm9pZCAwKSB7IG1vY2sgPSBmYWxzZTsgfVxyXG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICB0aGlzLnNoYWxsb3cgPSBzaGFsbG93O1xyXG4gICAgICAgIHRoaXMubW9jayA9IG1vY2s7XHJcbiAgICAgICAgLy8gdGhpcy52YWx1ZSA9IHZhbHVlXHJcbiAgICAgICAgdGhpcy5kZXAgPSBtb2NrID8gbW9ja0RlcCA6IG5ldyBEZXAoKTtcclxuICAgICAgICB0aGlzLnZtQ291bnQgPSAwO1xyXG4gICAgICAgIGRlZih2YWx1ZSwgJ19fb2JfXycsIHRoaXMpO1xyXG4gICAgICAgIGlmIChpc0FycmF5KHZhbHVlKSkge1xyXG4gICAgICAgICAgICBpZiAoIW1vY2spIHtcclxuICAgICAgICAgICAgICAgIGlmIChoYXNQcm90bykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLl9fcHJvdG9fXyA9IGFycmF5TWV0aG9kcztcclxuICAgICAgICAgICAgICAgICAgICAvKiBlc2xpbnQtZW5hYmxlIG5vLXByb3RvICovXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGFycmF5S2V5cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGtleSA9IGFycmF5S2V5c1tpXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVmKHZhbHVlLCBrZXksIGFycmF5TWV0aG9kc1trZXldKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCFzaGFsbG93KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9ic2VydmVBcnJheSh2YWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICAgKiBXYWxrIHRocm91Z2ggYWxsIHByb3BlcnRpZXMgYW5kIGNvbnZlcnQgdGhlbSBpbnRvXHJcbiAgICAgICAgICAgICAqIGdldHRlci9zZXR0ZXJzLiBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgd2hlblxyXG4gICAgICAgICAgICAgKiB2YWx1ZSB0eXBlIGlzIE9iamVjdC5cclxuICAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXModmFsdWUpO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xyXG4gICAgICAgICAgICAgICAgZGVmaW5lUmVhY3RpdmUodmFsdWUsIGtleSwgTk9fSU5JSVRJQUxfVkFMVUUsIHVuZGVmaW5lZCwgc2hhbGxvdywgbW9jayk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIE9ic2VydmUgYSBsaXN0IG9mIEFycmF5IGl0ZW1zLlxyXG4gICAgICovXHJcbiAgICBPYnNlcnZlci5wcm90b3R5cGUub2JzZXJ2ZUFycmF5ID0gZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSB2YWx1ZS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICAgICAgb2JzZXJ2ZSh2YWx1ZVtpXSwgZmFsc2UsIHRoaXMubW9jayk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIHJldHVybiBPYnNlcnZlcjtcclxufSgpKTtcclxuLy8gaGVscGVyc1xyXG4vKipcclxuICogQXR0ZW1wdCB0byBjcmVhdGUgYW4gb2JzZXJ2ZXIgaW5zdGFuY2UgZm9yIGEgdmFsdWUsXHJcbiAqIHJldHVybnMgdGhlIG5ldyBvYnNlcnZlciBpZiBzdWNjZXNzZnVsbHkgb2JzZXJ2ZWQsXHJcbiAqIG9yIHRoZSBleGlzdGluZyBvYnNlcnZlciBpZiB0aGUgdmFsdWUgYWxyZWFkeSBoYXMgb25lLlxyXG4gKi9cclxuZnVuY3Rpb24gb2JzZXJ2ZSh2YWx1ZSwgc2hhbGxvdywgc3NyTW9ja1JlYWN0aXZpdHkpIHtcclxuICAgIGlmICghaXNPYmplY3QodmFsdWUpIHx8IGlzUmVmKHZhbHVlKSB8fCB2YWx1ZSBpbnN0YW5jZW9mIFZOb2RlKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdmFyIG9iO1xyXG4gICAgaWYgKGhhc093bih2YWx1ZSwgJ19fb2JfXycpICYmIHZhbHVlLl9fb2JfXyBpbnN0YW5jZW9mIE9ic2VydmVyKSB7XHJcbiAgICAgICAgb2IgPSB2YWx1ZS5fX29iX187XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChzaG91bGRPYnNlcnZlICYmXHJcbiAgICAgICAgKHNzck1vY2tSZWFjdGl2aXR5IHx8ICFpc1NlcnZlclJlbmRlcmluZygpKSAmJlxyXG4gICAgICAgIChpc0FycmF5KHZhbHVlKSB8fCBpc1BsYWluT2JqZWN0KHZhbHVlKSkgJiZcclxuICAgICAgICBPYmplY3QuaXNFeHRlbnNpYmxlKHZhbHVlKSAmJlxyXG4gICAgICAgICF2YWx1ZS5fX3Zfc2tpcCAvKiBSZWFjdGl2ZUZsYWdzLlNLSVAgKi8pIHtcclxuICAgICAgICBvYiA9IG5ldyBPYnNlcnZlcih2YWx1ZSwgc2hhbGxvdywgc3NyTW9ja1JlYWN0aXZpdHkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG9iO1xyXG59XHJcbi8qKlxyXG4gKiBEZWZpbmUgYSByZWFjdGl2ZSBwcm9wZXJ0eSBvbiBhbiBPYmplY3QuXHJcbiAqL1xyXG5mdW5jdGlvbiBkZWZpbmVSZWFjdGl2ZShvYmosIGtleSwgdmFsLCBjdXN0b21TZXR0ZXIsIHNoYWxsb3csIG1vY2spIHtcclxuICAgIHZhciBkZXAgPSBuZXcgRGVwKCk7XHJcbiAgICB2YXIgcHJvcGVydHkgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwga2V5KTtcclxuICAgIGlmIChwcm9wZXJ0eSAmJiBwcm9wZXJ0eS5jb25maWd1cmFibGUgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgLy8gY2F0ZXIgZm9yIHByZS1kZWZpbmVkIGdldHRlci9zZXR0ZXJzXHJcbiAgICB2YXIgZ2V0dGVyID0gcHJvcGVydHkgJiYgcHJvcGVydHkuZ2V0O1xyXG4gICAgdmFyIHNldHRlciA9IHByb3BlcnR5ICYmIHByb3BlcnR5LnNldDtcclxuICAgIGlmICgoIWdldHRlciB8fCBzZXR0ZXIpICYmXHJcbiAgICAgICAgKHZhbCA9PT0gTk9fSU5JSVRJQUxfVkFMVUUgfHwgYXJndW1lbnRzLmxlbmd0aCA9PT0gMikpIHtcclxuICAgICAgICB2YWwgPSBvYmpba2V5XTtcclxuICAgIH1cclxuICAgIHZhciBjaGlsZE9iID0gIXNoYWxsb3cgJiYgb2JzZXJ2ZSh2YWwsIGZhbHNlLCBtb2NrKTtcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xyXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXHJcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gcmVhY3RpdmVHZXR0ZXIoKSB7XHJcbiAgICAgICAgICAgIHZhciB2YWx1ZSA9IGdldHRlciA/IGdldHRlci5jYWxsKG9iaikgOiB2YWw7XHJcbiAgICAgICAgICAgIGlmIChEZXAudGFyZ2V0KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGRlcC5kZXBlbmQoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6IG9iaixcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJnZXRcIiAvKiBUcmFja09wVHlwZXMuR0VUICovLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGtleVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVwLmRlcGVuZCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkT2IpIHtcclxuICAgICAgICAgICAgICAgICAgICBjaGlsZE9iLmRlcC5kZXBlbmQoKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVwZW5kQXJyYXkodmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gaXNSZWYodmFsdWUpICYmICFzaGFsbG93ID8gdmFsdWUudmFsdWUgOiB2YWx1ZTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gcmVhY3RpdmVTZXR0ZXIobmV3VmFsKSB7XHJcbiAgICAgICAgICAgIHZhciB2YWx1ZSA9IGdldHRlciA/IGdldHRlci5jYWxsKG9iaikgOiB2YWw7XHJcbiAgICAgICAgICAgIGlmICghaGFzQ2hhbmdlZCh2YWx1ZSwgbmV3VmFsKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGN1c3RvbVNldHRlcikge1xyXG4gICAgICAgICAgICAgICAgY3VzdG9tU2V0dGVyKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHNldHRlcikge1xyXG4gICAgICAgICAgICAgICAgc2V0dGVyLmNhbGwob2JqLCBuZXdWYWwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGdldHRlcikge1xyXG4gICAgICAgICAgICAgICAgLy8gIzc5ODE6IGZvciBhY2Nlc3NvciBwcm9wZXJ0aWVzIHdpdGhvdXQgc2V0dGVyXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoIXNoYWxsb3cgJiYgaXNSZWYodmFsdWUpICYmICFpc1JlZihuZXdWYWwpKSB7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZS52YWx1ZSA9IG5ld1ZhbDtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHZhbCA9IG5ld1ZhbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjaGlsZE9iID0gIXNoYWxsb3cgJiYgb2JzZXJ2ZShuZXdWYWwsIGZhbHNlLCBtb2NrKTtcclxuICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcclxuICAgICAgICAgICAgICAgIGRlcC5ub3RpZnkoe1xyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwic2V0XCIgLyogVHJpZ2dlck9wVHlwZXMuU0VUICovLFxyXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldDogb2JqLFxyXG4gICAgICAgICAgICAgICAgICAgIGtleToga2V5LFxyXG4gICAgICAgICAgICAgICAgICAgIG5ld1ZhbHVlOiBuZXdWYWwsXHJcbiAgICAgICAgICAgICAgICAgICAgb2xkVmFsdWU6IHZhbHVlXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGRlcC5ub3RpZnkoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGRlcDtcclxufVxyXG5mdW5jdGlvbiBzZXQodGFyZ2V0LCBrZXksIHZhbCkge1xyXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgKGlzVW5kZWYodGFyZ2V0KSB8fCBpc1ByaW1pdGl2ZSh0YXJnZXQpKSkge1xyXG4gICAgICAgIHdhcm4kMihcIkNhbm5vdCBzZXQgcmVhY3RpdmUgcHJvcGVydHkgb24gdW5kZWZpbmVkLCBudWxsLCBvciBwcmltaXRpdmUgdmFsdWU6IFwiLmNvbmNhdCh0YXJnZXQpKTtcclxuICAgIH1cclxuICAgIGlmIChpc1JlYWRvbmx5KHRhcmdldCkpIHtcclxuICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHdhcm4kMihcIlNldCBvcGVyYXRpb24gb24ga2V5IFxcXCJcIi5jb25jYXQoa2V5LCBcIlxcXCIgZmFpbGVkOiB0YXJnZXQgaXMgcmVhZG9ubHkuXCIpKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB2YXIgb2IgPSB0YXJnZXQuX19vYl9fO1xyXG4gICAgaWYgKGlzQXJyYXkodGFyZ2V0KSAmJiBpc1ZhbGlkQXJyYXlJbmRleChrZXkpKSB7XHJcbiAgICAgICAgdGFyZ2V0Lmxlbmd0aCA9IE1hdGgubWF4KHRhcmdldC5sZW5ndGgsIGtleSk7XHJcbiAgICAgICAgdGFyZ2V0LnNwbGljZShrZXksIDEsIHZhbCk7XHJcbiAgICAgICAgLy8gd2hlbiBtb2NraW5nIGZvciBTU1IsIGFycmF5IG1ldGhvZHMgYXJlIG5vdCBoaWphY2tlZFxyXG4gICAgICAgIGlmIChvYiAmJiAhb2Iuc2hhbGxvdyAmJiBvYi5tb2NrKSB7XHJcbiAgICAgICAgICAgIG9ic2VydmUodmFsLCBmYWxzZSwgdHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB2YWw7XHJcbiAgICB9XHJcbiAgICBpZiAoa2V5IGluIHRhcmdldCAmJiAhKGtleSBpbiBPYmplY3QucHJvdG90eXBlKSkge1xyXG4gICAgICAgIHRhcmdldFtrZXldID0gdmFsO1xyXG4gICAgICAgIHJldHVybiB2YWw7XHJcbiAgICB9XHJcbiAgICBpZiAodGFyZ2V0Ll9pc1Z1ZSB8fCAob2IgJiYgb2Iudm1Db3VudCkpIHtcclxuICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXHJcbiAgICAgICAgICAgIHdhcm4kMignQXZvaWQgYWRkaW5nIHJlYWN0aXZlIHByb3BlcnRpZXMgdG8gYSBWdWUgaW5zdGFuY2Ugb3IgaXRzIHJvb3QgJGRhdGEgJyArXHJcbiAgICAgICAgICAgICAgICAnYXQgcnVudGltZSAtIGRlY2xhcmUgaXQgdXBmcm9udCBpbiB0aGUgZGF0YSBvcHRpb24uJyk7XHJcbiAgICAgICAgcmV0dXJuIHZhbDtcclxuICAgIH1cclxuICAgIGlmICghb2IpIHtcclxuICAgICAgICB0YXJnZXRba2V5XSA9IHZhbDtcclxuICAgICAgICByZXR1cm4gdmFsO1xyXG4gICAgfVxyXG4gICAgZGVmaW5lUmVhY3RpdmUob2IudmFsdWUsIGtleSwgdmFsLCB1bmRlZmluZWQsIG9iLnNoYWxsb3csIG9iLm1vY2spO1xyXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcclxuICAgICAgICBvYi5kZXAubm90aWZ5KHtcclxuICAgICAgICAgICAgdHlwZTogXCJhZGRcIiAvKiBUcmlnZ2VyT3BUeXBlcy5BREQgKi8sXHJcbiAgICAgICAgICAgIHRhcmdldDogdGFyZ2V0LFxyXG4gICAgICAgICAgICBrZXk6IGtleSxcclxuICAgICAgICAgICAgbmV3VmFsdWU6IHZhbCxcclxuICAgICAgICAgICAgb2xkVmFsdWU6IHVuZGVmaW5lZFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgb2IuZGVwLm5vdGlmeSgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHZhbDtcclxufVxyXG5mdW5jdGlvbiBkZWwodGFyZ2V0LCBrZXkpIHtcclxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIChpc1VuZGVmKHRhcmdldCkgfHwgaXNQcmltaXRpdmUodGFyZ2V0KSkpIHtcclxuICAgICAgICB3YXJuJDIoXCJDYW5ub3QgZGVsZXRlIHJlYWN0aXZlIHByb3BlcnR5IG9uIHVuZGVmaW5lZCwgbnVsbCwgb3IgcHJpbWl0aXZlIHZhbHVlOiBcIi5jb25jYXQodGFyZ2V0KSk7XHJcbiAgICB9XHJcbiAgICBpZiAoaXNBcnJheSh0YXJnZXQpICYmIGlzVmFsaWRBcnJheUluZGV4KGtleSkpIHtcclxuICAgICAgICB0YXJnZXQuc3BsaWNlKGtleSwgMSk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdmFyIG9iID0gdGFyZ2V0Ll9fb2JfXztcclxuICAgIGlmICh0YXJnZXQuX2lzVnVlIHx8IChvYiAmJiBvYi52bUNvdW50KSkge1xyXG4gICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiZcclxuICAgICAgICAgICAgd2FybiQyKCdBdm9pZCBkZWxldGluZyBwcm9wZXJ0aWVzIG9uIGEgVnVlIGluc3RhbmNlIG9yIGl0cyByb290ICRkYXRhICcgK1xyXG4gICAgICAgICAgICAgICAgJy0ganVzdCBzZXQgaXQgdG8gbnVsbC4nKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoaXNSZWFkb25seSh0YXJnZXQpKSB7XHJcbiAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJlxyXG4gICAgICAgICAgICB3YXJuJDIoXCJEZWxldGUgb3BlcmF0aW9uIG9uIGtleSBcXFwiXCIuY29uY2F0KGtleSwgXCJcXFwiIGZhaWxlZDogdGFyZ2V0IGlzIHJlYWRvbmx5LlwiKSk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKCFoYXNPd24odGFyZ2V0LCBrZXkpKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgZGVsZXRlIHRhcmdldFtrZXldO1xyXG4gICAgaWYgKCFvYikge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XHJcbiAgICAgICAgb2IuZGVwLm5vdGlmeSh7XHJcbiAgICAgICAgICAgIHR5cGU6IFwiZGVsZXRlXCIgLyogVHJpZ2dlck9wVHlwZXMuREVMRVRFICovLFxyXG4gICAgICAgICAgICB0YXJnZXQ6IHRhcmdldCxcclxuICAgICAgICAgICAga2V5OiBrZXlcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIG9iLmRlcC5ub3RpZnkoKTtcclxuICAgIH1cclxufVxyXG4vKipcclxuICogQ29sbGVjdCBkZXBlbmRlbmNpZXMgb24gYXJyYXkgZWxlbWVudHMgd2hlbiB0aGUgYXJyYXkgaXMgdG91Y2hlZCwgc2luY2VcclxuICogd2UgY2Fubm90IGludGVyY2VwdCBhcnJheSBlbGVtZW50IGFjY2VzcyBsaWtlIHByb3BlcnR5IGdldHRlcnMuXHJcbiAqL1xyXG5mdW5jdGlvbiBkZXBlbmRBcnJheSh2YWx1ZSkge1xyXG4gICAgZm9yICh2YXIgZSA9IHZvaWQgMCwgaSA9IDAsIGwgPSB2YWx1ZS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICBlID0gdmFsdWVbaV07XHJcbiAgICAgICAgaWYgKGUgJiYgZS5fX29iX18pIHtcclxuICAgICAgICAgICAgZS5fX29iX18uZGVwLmRlcGVuZCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaXNBcnJheShlKSkge1xyXG4gICAgICAgICAgICBkZXBlbmRBcnJheShlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cblxuZnVuY3Rpb24gcmVhY3RpdmUodGFyZ2V0KSB7XHJcbiAgICBtYWtlUmVhY3RpdmUodGFyZ2V0LCBmYWxzZSk7XHJcbiAgICByZXR1cm4gdGFyZ2V0O1xyXG59XHJcbi8qKlxyXG4gKiBSZXR1cm4gYSBzaGFsbG93bHktcmVhY3RpdmUgY29weSBvZiB0aGUgb3JpZ2luYWwgb2JqZWN0LCB3aGVyZSBvbmx5IHRoZSByb290XHJcbiAqIGxldmVsIHByb3BlcnRpZXMgYXJlIHJlYWN0aXZlLiBJdCBhbHNvIGRvZXMgbm90IGF1dG8tdW53cmFwIHJlZnMgKGV2ZW4gYXQgdGhlXHJcbiAqIHJvb3QgbGV2ZWwpLlxyXG4gKi9cclxuZnVuY3Rpb24gc2hhbGxvd1JlYWN0aXZlKHRhcmdldCkge1xyXG4gICAgbWFrZVJlYWN0aXZlKHRhcmdldCwgdHJ1ZSk7XHJcbiAgICBkZWYodGFyZ2V0LCBcIl9fdl9pc1NoYWxsb3dcIiAvKiBSZWFjdGl2ZUZsYWdzLklTX1NIQUxMT1cgKi8sIHRydWUpO1xyXG4gICAgcmV0dXJuIHRhcmdldDtcclxufVxyXG5mdW5jdGlvbiBtYWtlUmVhY3RpdmUodGFyZ2V0LCBzaGFsbG93KSB7XHJcbiAgICAvLyBpZiB0cnlpbmcgdG8gb2JzZXJ2ZSBhIHJlYWRvbmx5IHByb3h5LCByZXR1cm4gdGhlIHJlYWRvbmx5IHZlcnNpb24uXHJcbiAgICBpZiAoIWlzUmVhZG9ubHkodGFyZ2V0KSkge1xyXG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XHJcbiAgICAgICAgICAgIGlmIChpc0FycmF5KHRhcmdldCkpIHtcclxuICAgICAgICAgICAgICAgIHdhcm4kMihcIkF2b2lkIHVzaW5nIEFycmF5IGFzIHJvb3QgdmFsdWUgZm9yIFwiLmNvbmNhdChzaGFsbG93ID8gXCJzaGFsbG93UmVhY3RpdmUoKVwiIDogXCJyZWFjdGl2ZSgpXCIsIFwiIGFzIGl0IGNhbm5vdCBiZSB0cmFja2VkIGluIHdhdGNoKCkgb3Igd2F0Y2hFZmZlY3QoKS4gVXNlIFwiKS5jb25jYXQoc2hhbGxvdyA/IFwic2hhbGxvd1JlZigpXCIgOiBcInJlZigpXCIsIFwiIGluc3RlYWQuIFRoaXMgaXMgYSBWdWUtMi1vbmx5IGxpbWl0YXRpb24uXCIpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgZXhpc3RpbmdPYiA9IHRhcmdldCAmJiB0YXJnZXQuX19vYl9fO1xyXG4gICAgICAgICAgICBpZiAoZXhpc3RpbmdPYiAmJiBleGlzdGluZ09iLnNoYWxsb3cgIT09IHNoYWxsb3cpIHtcclxuICAgICAgICAgICAgICAgIHdhcm4kMihcIlRhcmdldCBpcyBhbHJlYWR5IGEgXCIuY29uY2F0KGV4aXN0aW5nT2Iuc2hhbGxvdyA/IFwiXCIgOiBcIm5vbi1cIiwgXCJzaGFsbG93IHJlYWN0aXZlIG9iamVjdCwgYW5kIGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gXCIpLmNvbmNhdChzaGFsbG93ID8gXCJcIiA6IFwibm9uLVwiLCBcInNoYWxsb3cuXCIpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgb2IgPSBvYnNlcnZlKHRhcmdldCwgc2hhbGxvdywgaXNTZXJ2ZXJSZW5kZXJpbmcoKSAvKiBzc3IgbW9jayByZWFjdGl2aXR5ICovKTtcclxuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhb2IpIHtcclxuICAgICAgICAgICAgaWYgKHRhcmdldCA9PSBudWxsIHx8IGlzUHJpbWl0aXZlKHRhcmdldCkpIHtcclxuICAgICAgICAgICAgICAgIHdhcm4kMihcInZhbHVlIGNhbm5vdCBiZSBtYWRlIHJlYWN0aXZlOiBcIi5jb25jYXQoU3RyaW5nKHRhcmdldCkpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoaXNDb2xsZWN0aW9uVHlwZSh0YXJnZXQpKSB7XHJcbiAgICAgICAgICAgICAgICB3YXJuJDIoXCJWdWUgMiBkb2VzIG5vdCBzdXBwb3J0IHJlYWN0aXZlIGNvbGxlY3Rpb24gdHlwZXMgc3VjaCBhcyBNYXAgb3IgU2V0LlwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBpc1JlYWN0aXZlKHZhbHVlKSB7XHJcbiAgICBpZiAoaXNSZWFkb25seSh2YWx1ZSkpIHtcclxuICAgICAgICByZXR1cm4gaXNSZWFjdGl2ZSh2YWx1ZVtcIl9fdl9yYXdcIiAvKiBSZWFjdGl2ZUZsYWdzLlJBVyAqL10pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuICEhKHZhbHVlICYmIHZhbHVlLl9fb2JfXyk7XHJcbn1cclxuZnVuY3Rpb24gaXNTaGFsbG93KHZhbHVlKSB7XHJcbiAgICByZXR1cm4gISEodmFsdWUgJiYgdmFsdWUuX192X2lzU2hhbGxvdyk7XHJcbn1cclxuZnVuY3Rpb24gaXNSZWFkb25seSh2YWx1ZSkge1xyXG4gICAgcmV0dXJuICEhKHZhbHVlICYmIHZhbHVlLl9fdl9pc1JlYWRvbmx5KTtcclxufVxyXG5mdW5jdGlvbiBpc1Byb3h5KHZhbHVlKSB7XHJcbiAgICByZXR1cm4gaXNSZWFjdGl2ZSh2YWx1ZSkgfHwgaXNSZWFkb25seSh2YWx1ZSk7XHJcbn1cclxuZnVuY3Rpb24gdG9SYXcob2JzZXJ2ZWQpIHtcclxuICAgIHZhciByYXcgPSBvYnNlcnZlZCAmJiBvYnNlcnZlZFtcIl9fdl9yYXdcIiAvKiBSZWFjdGl2ZUZsYWdzLlJBVyAqL107XHJcbiAgICByZXR1cm4gcmF3ID8gdG9SYXcocmF3KSA6IG9ic2VydmVkO1xyXG59XHJcbmZ1bmN0aW9uIG1hcmtSYXcodmFsdWUpIHtcclxuICAgIGRlZih2YWx1ZSwgXCJfX3Zfc2tpcFwiIC8qIFJlYWN0aXZlRmxhZ3MuU0tJUCAqLywgdHJ1ZSk7XHJcbiAgICByZXR1cm4gdmFsdWU7XHJcbn1cclxuLyoqXHJcbiAqIEBpbnRlcm5hbFxyXG4gKi9cclxuZnVuY3Rpb24gaXNDb2xsZWN0aW9uVHlwZSh2YWx1ZSkge1xyXG4gICAgdmFyIHR5cGUgPSB0b1Jhd1R5cGUodmFsdWUpO1xyXG4gICAgcmV0dXJuICh0eXBlID09PSAnTWFwJyB8fCB0eXBlID09PSAnV2Vha01hcCcgfHwgdHlwZSA9PT0gJ1NldCcgfHwgdHlwZSA9PT0gJ1dlYWtTZXQnKTtcclxufVxuXG4vKipcclxuICogQGludGVybmFsXHJcbiAqL1xyXG52YXIgUmVmRmxhZyA9IFwiX192X2lzUmVmXCI7XHJcbmZ1bmN0aW9uIGlzUmVmKHIpIHtcclxuICAgIHJldHVybiAhIShyICYmIHIuX192X2lzUmVmID09PSB0cnVlKTtcclxufVxyXG5mdW5jdGlvbiByZWYkMSh2YWx1ZSkge1xyXG4gICAgcmV0dXJuIGNyZWF0ZVJlZih2YWx1ZSwgZmFsc2UpO1xyXG59XHJcbmZ1bmN0aW9uIHNoYWxsb3dSZWYodmFsdWUpIHtcclxuICAgIHJldHVybiBjcmVhdGVSZWYodmFsdWUsIHRydWUpO1xyXG59XHJcbmZ1bmN0aW9uIGNyZWF0ZVJlZihyYXdWYWx1ZSwgc2hhbGxvdykge1xyXG4gICAgaWYgKGlzUmVmKHJhd1ZhbHVlKSkge1xyXG4gICAgICAgIHJldHVybiByYXdWYWx1ZTtcclxuICAgIH1cclxuICAgIHZhciByZWYgPSB7fTtcclxuICAgIGRlZihyZWYsIFJlZkZsYWcsIHRydWUpO1xyXG4gICAgZGVmKHJlZiwgXCJfX3ZfaXNTaGFsbG93XCIgLyogUmVhY3RpdmVGbGFncy5JU19TSEFMTE9XICovLCBzaGFsbG93KTtcclxuICAgIGRlZihyZWYsICdkZXAnLCBkZWZpbmVSZWFjdGl2ZShyZWYsICd2YWx1ZScsIHJhd1ZhbHVlLCBudWxsLCBzaGFsbG93LCBpc1NlcnZlclJlbmRlcmluZygpKSk7XHJcbiAgICByZXR1cm4gcmVmO1xyXG59XHJcbmZ1bmN0aW9uIHRyaWdnZXJSZWYocmVmKSB7XHJcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhcmVmLmRlcCkge1xyXG4gICAgICAgIHdhcm4kMihcInJlY2VpdmVkIG9iamVjdCBpcyBub3QgYSB0cmlnZ2VyYWJsZSByZWYuXCIpO1xyXG4gICAgfVxyXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcclxuICAgICAgICByZWYuZGVwICYmXHJcbiAgICAgICAgICAgIHJlZi5kZXAubm90aWZ5KHtcclxuICAgICAgICAgICAgICAgIHR5cGU6IFwic2V0XCIgLyogVHJpZ2dlck9wVHlwZXMuU0VUICovLFxyXG4gICAgICAgICAgICAgICAgdGFyZ2V0OiByZWYsXHJcbiAgICAgICAgICAgICAgICBrZXk6ICd2YWx1ZSdcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICByZWYuZGVwICYmIHJlZi5kZXAubm90aWZ5KCk7XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gdW5yZWYocmVmKSB7XHJcbiAgICByZXR1cm4gaXNSZWYocmVmKSA/IHJlZi52YWx1ZSA6IHJlZjtcclxufVxyXG5mdW5jdGlvbiBwcm94eVJlZnMob2JqZWN0V2l0aFJlZnMpIHtcclxuICAgIGlmIChpc1JlYWN0aXZlKG9iamVjdFdpdGhSZWZzKSkge1xyXG4gICAgICAgIHJldHVybiBvYmplY3RXaXRoUmVmcztcclxuICAgIH1cclxuICAgIHZhciBwcm94eSA9IHt9O1xyXG4gICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3RXaXRoUmVmcyk7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBwcm94eVdpdGhSZWZVbndyYXAocHJveHksIG9iamVjdFdpdGhSZWZzLCBrZXlzW2ldKTtcclxuICAgIH1cclxuICAgIHJldHVybiBwcm94eTtcclxufVxyXG5mdW5jdGlvbiBwcm94eVdpdGhSZWZVbndyYXAodGFyZ2V0LCBzb3VyY2UsIGtleSkge1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCB7XHJcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcclxuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHZhciB2YWwgPSBzb3VyY2Vba2V5XTtcclxuICAgICAgICAgICAgaWYgKGlzUmVmKHZhbCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB2YWwudmFsdWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgb2IgPSB2YWwgJiYgdmFsLl9fb2JfXztcclxuICAgICAgICAgICAgICAgIGlmIChvYilcclxuICAgICAgICAgICAgICAgICAgICBvYi5kZXAuZGVwZW5kKCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgICAgICB2YXIgb2xkVmFsdWUgPSBzb3VyY2Vba2V5XTtcclxuICAgICAgICAgICAgaWYgKGlzUmVmKG9sZFZhbHVlKSAmJiAhaXNSZWYodmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICBvbGRWYWx1ZS52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgc291cmNlW2tleV0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG59XHJcbmZ1bmN0aW9uIGN1c3RvbVJlZihmYWN0b3J5KSB7XHJcbiAgICB2YXIgZGVwID0gbmV3IERlcCgpO1xyXG4gICAgdmFyIF9hID0gZmFjdG9yeShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcclxuICAgICAgICAgICAgZGVwLmRlcGVuZCh7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXQ6IHJlZixcclxuICAgICAgICAgICAgICAgIHR5cGU6IFwiZ2V0XCIgLyogVHJhY2tPcFR5cGVzLkdFVCAqLyxcclxuICAgICAgICAgICAgICAgIGtleTogJ3ZhbHVlJ1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGRlcC5kZXBlbmQoKTtcclxuICAgICAgICB9XHJcbiAgICB9LCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcclxuICAgICAgICAgICAgZGVwLm5vdGlmeSh7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXQ6IHJlZixcclxuICAgICAgICAgICAgICAgIHR5cGU6IFwic2V0XCIgLyogVHJpZ2dlck9wVHlwZXMuU0VUICovLFxyXG4gICAgICAgICAgICAgICAga2V5OiAndmFsdWUnXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgZGVwLm5vdGlmeSgpO1xyXG4gICAgICAgIH1cclxuICAgIH0pLCBnZXQgPSBfYS5nZXQsIHNldCA9IF9hLnNldDtcclxuICAgIHZhciByZWYgPSB7XHJcbiAgICAgICAgZ2V0IHZhbHVlKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZ2V0KCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzZXQgdmFsdWUobmV3VmFsKSB7XHJcbiAgICAgICAgICAgIHNldChuZXdWYWwpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBkZWYocmVmLCBSZWZGbGFnLCB0cnVlKTtcclxuICAgIHJldHVybiByZWY7XHJcbn1cclxuZnVuY3Rpb24gdG9SZWZzKG9iamVjdCkge1xyXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIWlzUmVhY3RpdmUob2JqZWN0KSkge1xyXG4gICAgICAgIHdhcm4kMihcInRvUmVmcygpIGV4cGVjdHMgYSByZWFjdGl2ZSBvYmplY3QgYnV0IHJlY2VpdmVkIGEgcGxhaW4gb25lLlwiKTtcclxuICAgIH1cclxuICAgIHZhciByZXQgPSBpc0FycmF5KG9iamVjdCkgPyBuZXcgQXJyYXkob2JqZWN0Lmxlbmd0aCkgOiB7fTtcclxuICAgIGZvciAodmFyIGtleSBpbiBvYmplY3QpIHtcclxuICAgICAgICByZXRba2V5XSA9IHRvUmVmKG9iamVjdCwga2V5KTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXQ7XHJcbn1cclxuZnVuY3Rpb24gdG9SZWYob2JqZWN0LCBrZXksIGRlZmF1bHRWYWx1ZSkge1xyXG4gICAgdmFyIHZhbCA9IG9iamVjdFtrZXldO1xyXG4gICAgaWYgKGlzUmVmKHZhbCkpIHtcclxuICAgICAgICByZXR1cm4gdmFsO1xyXG4gICAgfVxyXG4gICAgdmFyIHJlZiA9IHtcclxuICAgICAgICBnZXQgdmFsdWUoKSB7XHJcbiAgICAgICAgICAgIHZhciB2YWwgPSBvYmplY3Rba2V5XTtcclxuICAgICAgICAgICAgcmV0dXJuIHZhbCA9PT0gdW5kZWZpbmVkID8gZGVmYXVsdFZhbHVlIDogdmFsO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc2V0IHZhbHVlKG5ld1ZhbCkge1xyXG4gICAgICAgICAgICBvYmplY3Rba2V5XSA9IG5ld1ZhbDtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgZGVmKHJlZiwgUmVmRmxhZywgdHJ1ZSk7XHJcbiAgICByZXR1cm4gcmVmO1xyXG59XG5cbnZhciByYXdUb1JlYWRvbmx5RmxhZyA9IFwiX192X3Jhd1RvUmVhZG9ubHlcIjtcclxudmFyIHJhd1RvU2hhbGxvd1JlYWRvbmx5RmxhZyA9IFwiX192X3Jhd1RvU2hhbGxvd1JlYWRvbmx5XCI7XHJcbmZ1bmN0aW9uIHJlYWRvbmx5KHRhcmdldCkge1xyXG4gICAgcmV0dXJuIGNyZWF0ZVJlYWRvbmx5KHRhcmdldCwgZmFsc2UpO1xyXG59XHJcbmZ1bmN0aW9uIGNyZWF0ZVJlYWRvbmx5KHRhcmdldCwgc2hhbGxvdykge1xyXG4gICAgaWYgKCFpc1BsYWluT2JqZWN0KHRhcmdldCkpIHtcclxuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xyXG4gICAgICAgICAgICBpZiAoaXNBcnJheSh0YXJnZXQpKSB7XHJcbiAgICAgICAgICAgICAgICB3YXJuJDIoXCJWdWUgMiBkb2VzIG5vdCBzdXBwb3J0IHJlYWRvbmx5IGFycmF5cy5cIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoaXNDb2xsZWN0aW9uVHlwZSh0YXJnZXQpKSB7XHJcbiAgICAgICAgICAgICAgICB3YXJuJDIoXCJWdWUgMiBkb2VzIG5vdCBzdXBwb3J0IHJlYWRvbmx5IGNvbGxlY3Rpb24gdHlwZXMgc3VjaCBhcyBNYXAgb3IgU2V0LlwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHdhcm4kMihcInZhbHVlIGNhbm5vdCBiZSBtYWRlIHJlYWRvbmx5OiBcIi5jb25jYXQodHlwZW9mIHRhcmdldCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0YXJnZXQ7XHJcbiAgICB9XHJcbiAgICAvLyBhbHJlYWR5IGEgcmVhZG9ubHkgb2JqZWN0XHJcbiAgICBpZiAoaXNSZWFkb25seSh0YXJnZXQpKSB7XHJcbiAgICAgICAgcmV0dXJuIHRhcmdldDtcclxuICAgIH1cclxuICAgIC8vIGFscmVhZHkgaGFzIGEgcmVhZG9ubHkgcHJveHlcclxuICAgIHZhciBleGlzdGluZ0ZsYWcgPSBzaGFsbG93ID8gcmF3VG9TaGFsbG93UmVhZG9ubHlGbGFnIDogcmF3VG9SZWFkb25seUZsYWc7XHJcbiAgICB2YXIgZXhpc3RpbmdQcm94eSA9IHRhcmdldFtleGlzdGluZ0ZsYWddO1xyXG4gICAgaWYgKGV4aXN0aW5nUHJveHkpIHtcclxuICAgICAgICByZXR1cm4gZXhpc3RpbmdQcm94eTtcclxuICAgIH1cclxuICAgIHZhciBwcm94eSA9IE9iamVjdC5jcmVhdGUoT2JqZWN0LmdldFByb3RvdHlwZU9mKHRhcmdldCkpO1xyXG4gICAgZGVmKHRhcmdldCwgZXhpc3RpbmdGbGFnLCBwcm94eSk7XHJcbiAgICBkZWYocHJveHksIFwiX192X2lzUmVhZG9ubHlcIiAvKiBSZWFjdGl2ZUZsYWdzLklTX1JFQURPTkxZICovLCB0cnVlKTtcclxuICAgIGRlZihwcm94eSwgXCJfX3ZfcmF3XCIgLyogUmVhY3RpdmVGbGFncy5SQVcgKi8sIHRhcmdldCk7XHJcbiAgICBpZiAoaXNSZWYodGFyZ2V0KSkge1xyXG4gICAgICAgIGRlZihwcm94eSwgUmVmRmxhZywgdHJ1ZSk7XHJcbiAgICB9XHJcbiAgICBpZiAoc2hhbGxvdyB8fCBpc1NoYWxsb3codGFyZ2V0KSkge1xyXG4gICAgICAgIGRlZihwcm94eSwgXCJfX3ZfaXNTaGFsbG93XCIgLyogUmVhY3RpdmVGbGFncy5JU19TSEFMTE9XICovLCB0cnVlKTtcclxuICAgIH1cclxuICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXModGFyZ2V0KTtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGRlZmluZVJlYWRvbmx5UHJvcGVydHkocHJveHksIHRhcmdldCwga2V5c1tpXSwgc2hhbGxvdyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcHJveHk7XHJcbn1cclxuZnVuY3Rpb24gZGVmaW5lUmVhZG9ubHlQcm9wZXJ0eShwcm94eSwgdGFyZ2V0LCBrZXksIHNoYWxsb3cpIHtcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm94eSwga2V5LCB7XHJcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcclxuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHZhciB2YWwgPSB0YXJnZXRba2V5XTtcclxuICAgICAgICAgICAgcmV0dXJuIHNoYWxsb3cgfHwgIWlzUGxhaW5PYmplY3QodmFsKSA/IHZhbCA6IHJlYWRvbmx5KHZhbCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJlxyXG4gICAgICAgICAgICAgICAgd2FybiQyKFwiU2V0IG9wZXJhdGlvbiBvbiBrZXkgXFxcIlwiLmNvbmNhdChrZXksIFwiXFxcIiBmYWlsZWQ6IHRhcmdldCBpcyByZWFkb25seS5cIikpO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG59XHJcbi8qKlxyXG4gKiBSZXR1cm5zIGEgcmVhY3RpdmUtY29weSBvZiB0aGUgb3JpZ2luYWwgb2JqZWN0LCB3aGVyZSBvbmx5IHRoZSByb290IGxldmVsXHJcbiAqIHByb3BlcnRpZXMgYXJlIHJlYWRvbmx5LCBhbmQgZG9lcyBOT1QgdW53cmFwIHJlZnMgbm9yIHJlY3Vyc2l2ZWx5IGNvbnZlcnRcclxuICogcmV0dXJuZWQgcHJvcGVydGllcy5cclxuICogVGhpcyBpcyB1c2VkIGZvciBjcmVhdGluZyB0aGUgcHJvcHMgcHJveHkgb2JqZWN0IGZvciBzdGF0ZWZ1bCBjb21wb25lbnRzLlxyXG4gKi9cclxuZnVuY3Rpb24gc2hhbGxvd1JlYWRvbmx5KHRhcmdldCkge1xyXG4gICAgcmV0dXJuIGNyZWF0ZVJlYWRvbmx5KHRhcmdldCwgdHJ1ZSk7XHJcbn1cblxuZnVuY3Rpb24gY29tcHV0ZWQoZ2V0dGVyT3JPcHRpb25zLCBkZWJ1Z09wdGlvbnMpIHtcclxuICAgIHZhciBnZXR0ZXI7XHJcbiAgICB2YXIgc2V0dGVyO1xyXG4gICAgdmFyIG9ubHlHZXR0ZXIgPSBpc0Z1bmN0aW9uKGdldHRlck9yT3B0aW9ucyk7XHJcbiAgICBpZiAob25seUdldHRlcikge1xyXG4gICAgICAgIGdldHRlciA9IGdldHRlck9yT3B0aW9ucztcclxuICAgICAgICBzZXR0ZXIgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nXHJcbiAgICAgICAgICAgID8gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgd2FybiQyKCdXcml0ZSBvcGVyYXRpb24gZmFpbGVkOiBjb21wdXRlZCB2YWx1ZSBpcyByZWFkb25seScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIDogbm9vcDtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGdldHRlciA9IGdldHRlck9yT3B0aW9ucy5nZXQ7XHJcbiAgICAgICAgc2V0dGVyID0gZ2V0dGVyT3JPcHRpb25zLnNldDtcclxuICAgIH1cclxuICAgIHZhciB3YXRjaGVyID0gaXNTZXJ2ZXJSZW5kZXJpbmcoKVxyXG4gICAgICAgID8gbnVsbFxyXG4gICAgICAgIDogbmV3IFdhdGNoZXIoY3VycmVudEluc3RhbmNlLCBnZXR0ZXIsIG5vb3AsIHsgbGF6eTogdHJ1ZSB9KTtcclxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHdhdGNoZXIgJiYgZGVidWdPcHRpb25zKSB7XHJcbiAgICAgICAgd2F0Y2hlci5vblRyYWNrID0gZGVidWdPcHRpb25zLm9uVHJhY2s7XHJcbiAgICAgICAgd2F0Y2hlci5vblRyaWdnZXIgPSBkZWJ1Z09wdGlvbnMub25UcmlnZ2VyO1xyXG4gICAgfVxyXG4gICAgdmFyIHJlZiA9IHtcclxuICAgICAgICAvLyBzb21lIGxpYnMgcmVseSBvbiB0aGUgcHJlc2VuY2UgZWZmZWN0IGZvciBjaGVja2luZyBjb21wdXRlZCByZWZzXHJcbiAgICAgICAgLy8gZnJvbSBub3JtYWwgcmVmcywgYnV0IHRoZSBpbXBsZW1lbnRhdGlvbiBkb2Vzbid0IG1hdHRlclxyXG4gICAgICAgIGVmZmVjdDogd2F0Y2hlcixcclxuICAgICAgICBnZXQgdmFsdWUoKSB7XHJcbiAgICAgICAgICAgIGlmICh3YXRjaGVyKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAod2F0Y2hlci5kaXJ0eSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHdhdGNoZXIuZXZhbHVhdGUoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChEZXAudGFyZ2V0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgRGVwLnRhcmdldC5vblRyYWNrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIERlcC50YXJnZXQub25UcmFjayh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZmZlY3Q6IERlcC50YXJnZXQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6IHJlZixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiZ2V0XCIgLyogVHJhY2tPcFR5cGVzLkdFVCAqLyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogJ3ZhbHVlJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgd2F0Y2hlci5kZXBlbmQoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiB3YXRjaGVyLnZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGdldHRlcigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzZXQgdmFsdWUobmV3VmFsKSB7XHJcbiAgICAgICAgICAgIHNldHRlcihuZXdWYWwpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBkZWYocmVmLCBSZWZGbGFnLCB0cnVlKTtcclxuICAgIGRlZihyZWYsIFwiX192X2lzUmVhZG9ubHlcIiAvKiBSZWFjdGl2ZUZsYWdzLklTX1JFQURPTkxZICovLCBvbmx5R2V0dGVyKTtcclxuICAgIHJldHVybiByZWY7XHJcbn1cblxudmFyIG1hcms7XHJcbnZhciBtZWFzdXJlO1xyXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xyXG4gICAgdmFyIHBlcmZfMSA9IGluQnJvd3NlciAmJiB3aW5kb3cucGVyZm9ybWFuY2U7XHJcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cclxuICAgIGlmIChwZXJmXzEgJiZcclxuICAgICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgICAgcGVyZl8xLm1hcmsgJiZcclxuICAgICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgICAgcGVyZl8xLm1lYXN1cmUgJiZcclxuICAgICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgICAgcGVyZl8xLmNsZWFyTWFya3MgJiZcclxuICAgICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgICAgcGVyZl8xLmNsZWFyTWVhc3VyZXMpIHtcclxuICAgICAgICBtYXJrID0gZnVuY3Rpb24gKHRhZykgeyByZXR1cm4gcGVyZl8xLm1hcmsodGFnKTsgfTtcclxuICAgICAgICBtZWFzdXJlID0gZnVuY3Rpb24gKG5hbWUsIHN0YXJ0VGFnLCBlbmRUYWcpIHtcclxuICAgICAgICAgICAgcGVyZl8xLm1lYXN1cmUobmFtZSwgc3RhcnRUYWcsIGVuZFRhZyk7XHJcbiAgICAgICAgICAgIHBlcmZfMS5jbGVhck1hcmtzKHN0YXJ0VGFnKTtcclxuICAgICAgICAgICAgcGVyZl8xLmNsZWFyTWFya3MoZW5kVGFnKTtcclxuICAgICAgICAgICAgLy8gcGVyZi5jbGVhck1lYXN1cmVzKG5hbWUpXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxufVxuXG52YXIgbm9ybWFsaXplRXZlbnQgPSBjYWNoZWQoZnVuY3Rpb24gKG5hbWUpIHtcclxuICAgIHZhciBwYXNzaXZlID0gbmFtZS5jaGFyQXQoMCkgPT09ICcmJztcclxuICAgIG5hbWUgPSBwYXNzaXZlID8gbmFtZS5zbGljZSgxKSA6IG5hbWU7XHJcbiAgICB2YXIgb25jZSA9IG5hbWUuY2hhckF0KDApID09PSAnfic7IC8vIFByZWZpeGVkIGxhc3QsIGNoZWNrZWQgZmlyc3RcclxuICAgIG5hbWUgPSBvbmNlID8gbmFtZS5zbGljZSgxKSA6IG5hbWU7XHJcbiAgICB2YXIgY2FwdHVyZSA9IG5hbWUuY2hhckF0KDApID09PSAnISc7XHJcbiAgICBuYW1lID0gY2FwdHVyZSA/IG5hbWUuc2xpY2UoMSkgOiBuYW1lO1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBuYW1lOiBuYW1lLFxyXG4gICAgICAgIG9uY2U6IG9uY2UsXHJcbiAgICAgICAgY2FwdHVyZTogY2FwdHVyZSxcclxuICAgICAgICBwYXNzaXZlOiBwYXNzaXZlXHJcbiAgICB9O1xyXG59KTtcclxuZnVuY3Rpb24gY3JlYXRlRm5JbnZva2VyKGZucywgdm0pIHtcclxuICAgIGZ1bmN0aW9uIGludm9rZXIoKSB7XHJcbiAgICAgICAgdmFyIGZucyA9IGludm9rZXIuZm5zO1xyXG4gICAgICAgIGlmIChpc0FycmF5KGZucykpIHtcclxuICAgICAgICAgICAgdmFyIGNsb25lZCA9IGZucy5zbGljZSgpO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNsb25lZC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgaW52b2tlV2l0aEVycm9ySGFuZGxpbmcoY2xvbmVkW2ldLCBudWxsLCBhcmd1bWVudHMsIHZtLCBcInYtb24gaGFuZGxlclwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy8gcmV0dXJuIGhhbmRsZXIgcmV0dXJuIHZhbHVlIGZvciBzaW5nbGUgaGFuZGxlcnNcclxuICAgICAgICAgICAgcmV0dXJuIGludm9rZVdpdGhFcnJvckhhbmRsaW5nKGZucywgbnVsbCwgYXJndW1lbnRzLCB2bSwgXCJ2LW9uIGhhbmRsZXJcIik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaW52b2tlci5mbnMgPSBmbnM7XHJcbiAgICByZXR1cm4gaW52b2tlcjtcclxufVxyXG5mdW5jdGlvbiB1cGRhdGVMaXN0ZW5lcnMob24sIG9sZE9uLCBhZGQsIHJlbW92ZSwgY3JlYXRlT25jZUhhbmRsZXIsIHZtKSB7XHJcbiAgICB2YXIgbmFtZSwgY3VyLCBvbGQsIGV2ZW50O1xyXG4gICAgZm9yIChuYW1lIGluIG9uKSB7XHJcbiAgICAgICAgY3VyID0gb25bbmFtZV07XHJcbiAgICAgICAgb2xkID0gb2xkT25bbmFtZV07XHJcbiAgICAgICAgZXZlbnQgPSBub3JtYWxpemVFdmVudChuYW1lKTtcclxuICAgICAgICBpZiAoaXNVbmRlZihjdXIpKSB7XHJcbiAgICAgICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiZcclxuICAgICAgICAgICAgICAgIHdhcm4kMihcIkludmFsaWQgaGFuZGxlciBmb3IgZXZlbnQgXFxcIlwiLmNvbmNhdChldmVudC5uYW1lLCBcIlxcXCI6IGdvdCBcIikgKyBTdHJpbmcoY3VyKSwgdm0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChpc1VuZGVmKG9sZCkpIHtcclxuICAgICAgICAgICAgaWYgKGlzVW5kZWYoY3VyLmZucykpIHtcclxuICAgICAgICAgICAgICAgIGN1ciA9IG9uW25hbWVdID0gY3JlYXRlRm5JbnZva2VyKGN1ciwgdm0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChpc1RydWUoZXZlbnQub25jZSkpIHtcclxuICAgICAgICAgICAgICAgIGN1ciA9IG9uW25hbWVdID0gY3JlYXRlT25jZUhhbmRsZXIoZXZlbnQubmFtZSwgY3VyLCBldmVudC5jYXB0dXJlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBhZGQoZXZlbnQubmFtZSwgY3VyLCBldmVudC5jYXB0dXJlLCBldmVudC5wYXNzaXZlLCBldmVudC5wYXJhbXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChjdXIgIT09IG9sZCkge1xyXG4gICAgICAgICAgICBvbGQuZm5zID0gY3VyO1xyXG4gICAgICAgICAgICBvbltuYW1lXSA9IG9sZDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmb3IgKG5hbWUgaW4gb2xkT24pIHtcclxuICAgICAgICBpZiAoaXNVbmRlZihvbltuYW1lXSkpIHtcclxuICAgICAgICAgICAgZXZlbnQgPSBub3JtYWxpemVFdmVudChuYW1lKTtcclxuICAgICAgICAgICAgcmVtb3ZlKGV2ZW50Lm5hbWUsIG9sZE9uW25hbWVdLCBldmVudC5jYXB0dXJlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cblxuZnVuY3Rpb24gbWVyZ2VWTm9kZUhvb2soZGVmLCBob29rS2V5LCBob29rKSB7XHJcbiAgICBpZiAoZGVmIGluc3RhbmNlb2YgVk5vZGUpIHtcclxuICAgICAgICBkZWYgPSBkZWYuZGF0YS5ob29rIHx8IChkZWYuZGF0YS5ob29rID0ge30pO1xyXG4gICAgfVxyXG4gICAgdmFyIGludm9rZXI7XHJcbiAgICB2YXIgb2xkSG9vayA9IGRlZltob29rS2V5XTtcclxuICAgIGZ1bmN0aW9uIHdyYXBwZWRIb29rKCkge1xyXG4gICAgICAgIGhvb2suYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxuICAgICAgICAvLyBpbXBvcnRhbnQ6IHJlbW92ZSBtZXJnZWQgaG9vayB0byBlbnN1cmUgaXQncyBjYWxsZWQgb25seSBvbmNlXHJcbiAgICAgICAgLy8gYW5kIHByZXZlbnQgbWVtb3J5IGxlYWtcclxuICAgICAgICByZW1vdmUkMihpbnZva2VyLmZucywgd3JhcHBlZEhvb2spO1xyXG4gICAgfVxyXG4gICAgaWYgKGlzVW5kZWYob2xkSG9vaykpIHtcclxuICAgICAgICAvLyBubyBleGlzdGluZyBob29rXHJcbiAgICAgICAgaW52b2tlciA9IGNyZWF0ZUZuSW52b2tlcihbd3JhcHBlZEhvb2tdKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xyXG4gICAgICAgIGlmIChpc0RlZihvbGRIb29rLmZucykgJiYgaXNUcnVlKG9sZEhvb2subWVyZ2VkKSkge1xyXG4gICAgICAgICAgICAvLyBhbHJlYWR5IGEgbWVyZ2VkIGludm9rZXJcclxuICAgICAgICAgICAgaW52b2tlciA9IG9sZEhvb2s7XHJcbiAgICAgICAgICAgIGludm9rZXIuZm5zLnB1c2god3JhcHBlZEhvb2spO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy8gZXhpc3RpbmcgcGxhaW4gaG9va1xyXG4gICAgICAgICAgICBpbnZva2VyID0gY3JlYXRlRm5JbnZva2VyKFtvbGRIb29rLCB3cmFwcGVkSG9va10pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGludm9rZXIubWVyZ2VkID0gdHJ1ZTtcclxuICAgIGRlZltob29rS2V5XSA9IGludm9rZXI7XHJcbn1cblxuZnVuY3Rpb24gZXh0cmFjdFByb3BzRnJvbVZOb2RlRGF0YShkYXRhLCBDdG9yLCB0YWcpIHtcclxuICAgIC8vIHdlIGFyZSBvbmx5IGV4dHJhY3RpbmcgcmF3IHZhbHVlcyBoZXJlLlxyXG4gICAgLy8gdmFsaWRhdGlvbiBhbmQgZGVmYXVsdCB2YWx1ZXMgYXJlIGhhbmRsZWQgaW4gdGhlIGNoaWxkXHJcbiAgICAvLyBjb21wb25lbnQgaXRzZWxmLlxyXG4gICAgdmFyIHByb3BPcHRpb25zID0gQ3Rvci5vcHRpb25zLnByb3BzO1xyXG4gICAgaWYgKGlzVW5kZWYocHJvcE9wdGlvbnMpKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdmFyIHJlcyA9IHt9O1xyXG4gICAgdmFyIGF0dHJzID0gZGF0YS5hdHRycywgcHJvcHMgPSBkYXRhLnByb3BzO1xyXG4gICAgaWYgKGlzRGVmKGF0dHJzKSB8fCBpc0RlZihwcm9wcykpIHtcclxuICAgICAgICBmb3IgKHZhciBrZXkgaW4gcHJvcE9wdGlvbnMpIHtcclxuICAgICAgICAgICAgdmFyIGFsdEtleSA9IGh5cGhlbmF0ZShrZXkpO1xyXG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGtleUluTG93ZXJDYXNlID0ga2V5LnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoa2V5ICE9PSBrZXlJbkxvd2VyQ2FzZSAmJiBhdHRycyAmJiBoYXNPd24oYXR0cnMsIGtleUluTG93ZXJDYXNlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRpcChcIlByb3AgXFxcIlwiLmNvbmNhdChrZXlJbkxvd2VyQ2FzZSwgXCJcXFwiIGlzIHBhc3NlZCB0byBjb21wb25lbnQgXCIpICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcIi5jb25jYXQoZm9ybWF0Q29tcG9uZW50TmFtZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciB0YWcgaXMgc3RyaW5nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhZyB8fCBDdG9yKSwgXCIsIGJ1dCB0aGUgZGVjbGFyZWQgcHJvcCBuYW1lIGlzXCIpICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCIgXFxcIlwiLmNvbmNhdChrZXksIFwiXFxcIi4gXCIpICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJOb3RlIHRoYXQgSFRNTCBhdHRyaWJ1dGVzIGFyZSBjYXNlLWluc2Vuc2l0aXZlIGFuZCBjYW1lbENhc2VkIFwiICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJwcm9wcyBuZWVkIHRvIHVzZSB0aGVpciBrZWJhYi1jYXNlIGVxdWl2YWxlbnRzIHdoZW4gdXNpbmcgaW4tRE9NIFwiICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJ0ZW1wbGF0ZXMuIFlvdSBzaG91bGQgcHJvYmFibHkgdXNlIFxcXCJcIi5jb25jYXQoYWx0S2V5LCBcIlxcXCIgaW5zdGVhZCBvZiBcXFwiXCIpLmNvbmNhdChrZXksIFwiXFxcIi5cIikpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNoZWNrUHJvcChyZXMsIHByb3BzLCBrZXksIGFsdEtleSwgdHJ1ZSkgfHxcclxuICAgICAgICAgICAgICAgIGNoZWNrUHJvcChyZXMsIGF0dHJzLCBrZXksIGFsdEtleSwgZmFsc2UpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiByZXM7XHJcbn1cclxuZnVuY3Rpb24gY2hlY2tQcm9wKHJlcywgaGFzaCwga2V5LCBhbHRLZXksIHByZXNlcnZlKSB7XHJcbiAgICBpZiAoaXNEZWYoaGFzaCkpIHtcclxuICAgICAgICBpZiAoaGFzT3duKGhhc2gsIGtleSkpIHtcclxuICAgICAgICAgICAgcmVzW2tleV0gPSBoYXNoW2tleV07XHJcbiAgICAgICAgICAgIGlmICghcHJlc2VydmUpIHtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSBoYXNoW2tleV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGhhc093bihoYXNoLCBhbHRLZXkpKSB7XHJcbiAgICAgICAgICAgIHJlc1trZXldID0gaGFzaFthbHRLZXldO1xyXG4gICAgICAgICAgICBpZiAoIXByZXNlcnZlKSB7XHJcbiAgICAgICAgICAgICAgICBkZWxldGUgaGFzaFthbHRLZXldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxufVxuXG4vLyBUaGUgdGVtcGxhdGUgY29tcGlsZXIgYXR0ZW1wdHMgdG8gbWluaW1pemUgdGhlIG5lZWQgZm9yIG5vcm1hbGl6YXRpb24gYnlcclxuLy8gc3RhdGljYWxseSBhbmFseXppbmcgdGhlIHRlbXBsYXRlIGF0IGNvbXBpbGUgdGltZS5cclxuLy9cclxuLy8gRm9yIHBsYWluIEhUTUwgbWFya3VwLCBub3JtYWxpemF0aW9uIGNhbiBiZSBjb21wbGV0ZWx5IHNraXBwZWQgYmVjYXVzZSB0aGVcclxuLy8gZ2VuZXJhdGVkIHJlbmRlciBmdW5jdGlvbiBpcyBndWFyYW50ZWVkIHRvIHJldHVybiBBcnJheTxWTm9kZT4uIFRoZXJlIGFyZVxyXG4vLyB0d28gY2FzZXMgd2hlcmUgZXh0cmEgbm9ybWFsaXphdGlvbiBpcyBuZWVkZWQ6XHJcbi8vIDEuIFdoZW4gdGhlIGNoaWxkcmVuIGNvbnRhaW5zIGNvbXBvbmVudHMgLSBiZWNhdXNlIGEgZnVuY3Rpb25hbCBjb21wb25lbnRcclxuLy8gbWF5IHJldHVybiBhbiBBcnJheSBpbnN0ZWFkIG9mIGEgc2luZ2xlIHJvb3QuIEluIHRoaXMgY2FzZSwganVzdCBhIHNpbXBsZVxyXG4vLyBub3JtYWxpemF0aW9uIGlzIG5lZWRlZCAtIGlmIGFueSBjaGlsZCBpcyBhbiBBcnJheSwgd2UgZmxhdHRlbiB0aGUgd2hvbGVcclxuLy8gdGhpbmcgd2l0aCBBcnJheS5wcm90b3R5cGUuY29uY2F0LiBJdCBpcyBndWFyYW50ZWVkIHRvIGJlIG9ubHkgMS1sZXZlbCBkZWVwXHJcbi8vIGJlY2F1c2UgZnVuY3Rpb25hbCBjb21wb25lbnRzIGFscmVhZHkgbm9ybWFsaXplIHRoZWlyIG93biBjaGlsZHJlbi5cclxuZnVuY3Rpb24gc2ltcGxlTm9ybWFsaXplQ2hpbGRyZW4oY2hpbGRyZW4pIHtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBpZiAoaXNBcnJheShjaGlsZHJlbltpXSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5jb25jYXQuYXBwbHkoW10sIGNoaWxkcmVuKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY2hpbGRyZW47XHJcbn1cclxuLy8gMi4gV2hlbiB0aGUgY2hpbGRyZW4gY29udGFpbnMgY29uc3RydWN0cyB0aGF0IGFsd2F5cyBnZW5lcmF0ZWQgbmVzdGVkIEFycmF5cyxcclxuLy8gZS5nLiA8dGVtcGxhdGU+LCA8c2xvdD4sIHYtZm9yLCBvciB3aGVuIHRoZSBjaGlsZHJlbiBpcyBwcm92aWRlZCBieSB1c2VyXHJcbi8vIHdpdGggaGFuZC13cml0dGVuIHJlbmRlciBmdW5jdGlvbnMgLyBKU1guIEluIHN1Y2ggY2FzZXMgYSBmdWxsIG5vcm1hbGl6YXRpb25cclxuLy8gaXMgbmVlZGVkIHRvIGNhdGVyIHRvIGFsbCBwb3NzaWJsZSB0eXBlcyBvZiBjaGlsZHJlbiB2YWx1ZXMuXHJcbmZ1bmN0aW9uIG5vcm1hbGl6ZUNoaWxkcmVuKGNoaWxkcmVuKSB7XHJcbiAgICByZXR1cm4gaXNQcmltaXRpdmUoY2hpbGRyZW4pXHJcbiAgICAgICAgPyBbY3JlYXRlVGV4dFZOb2RlKGNoaWxkcmVuKV1cclxuICAgICAgICA6IGlzQXJyYXkoY2hpbGRyZW4pXHJcbiAgICAgICAgICAgID8gbm9ybWFsaXplQXJyYXlDaGlsZHJlbihjaGlsZHJlbilcclxuICAgICAgICAgICAgOiB1bmRlZmluZWQ7XHJcbn1cclxuZnVuY3Rpb24gaXNUZXh0Tm9kZShub2RlKSB7XHJcbiAgICByZXR1cm4gaXNEZWYobm9kZSkgJiYgaXNEZWYobm9kZS50ZXh0KSAmJiBpc0ZhbHNlKG5vZGUuaXNDb21tZW50KTtcclxufVxyXG5mdW5jdGlvbiBub3JtYWxpemVBcnJheUNoaWxkcmVuKGNoaWxkcmVuLCBuZXN0ZWRJbmRleCkge1xyXG4gICAgdmFyIHJlcyA9IFtdO1xyXG4gICAgdmFyIGksIGMsIGxhc3RJbmRleCwgbGFzdDtcclxuICAgIGZvciAoaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGMgPSBjaGlsZHJlbltpXTtcclxuICAgICAgICBpZiAoaXNVbmRlZihjKSB8fCB0eXBlb2YgYyA9PT0gJ2Jvb2xlYW4nKVxyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICBsYXN0SW5kZXggPSByZXMubGVuZ3RoIC0gMTtcclxuICAgICAgICBsYXN0ID0gcmVzW2xhc3RJbmRleF07XHJcbiAgICAgICAgLy8gIG5lc3RlZFxyXG4gICAgICAgIGlmIChpc0FycmF5KGMpKSB7XHJcbiAgICAgICAgICAgIGlmIChjLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGMgPSBub3JtYWxpemVBcnJheUNoaWxkcmVuKGMsIFwiXCIuY29uY2F0KG5lc3RlZEluZGV4IHx8ICcnLCBcIl9cIikuY29uY2F0KGkpKTtcclxuICAgICAgICAgICAgICAgIC8vIG1lcmdlIGFkamFjZW50IHRleHQgbm9kZXNcclxuICAgICAgICAgICAgICAgIGlmIChpc1RleHROb2RlKGNbMF0pICYmIGlzVGV4dE5vZGUobGFzdCkpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXNbbGFzdEluZGV4XSA9IGNyZWF0ZVRleHRWTm9kZShsYXN0LnRleHQgKyBjWzBdLnRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGMuc2hpZnQoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJlcy5wdXNoLmFwcGx5KHJlcywgYyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoaXNQcmltaXRpdmUoYykpIHtcclxuICAgICAgICAgICAgaWYgKGlzVGV4dE5vZGUobGFzdCkpIHtcclxuICAgICAgICAgICAgICAgIC8vIG1lcmdlIGFkamFjZW50IHRleHQgbm9kZXNcclxuICAgICAgICAgICAgICAgIC8vIHRoaXMgaXMgbmVjZXNzYXJ5IGZvciBTU1IgaHlkcmF0aW9uIGJlY2F1c2UgdGV4dCBub2RlcyBhcmVcclxuICAgICAgICAgICAgICAgIC8vIGVzc2VudGlhbGx5IG1lcmdlZCB3aGVuIHJlbmRlcmVkIHRvIEhUTUwgc3RyaW5nc1xyXG4gICAgICAgICAgICAgICAgcmVzW2xhc3RJbmRleF0gPSBjcmVhdGVUZXh0Vk5vZGUobGFzdC50ZXh0ICsgYyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoYyAhPT0gJycpIHtcclxuICAgICAgICAgICAgICAgIC8vIGNvbnZlcnQgcHJpbWl0aXZlIHRvIHZub2RlXHJcbiAgICAgICAgICAgICAgICByZXMucHVzaChjcmVhdGVUZXh0Vk5vZGUoYykpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoaXNUZXh0Tm9kZShjKSAmJiBpc1RleHROb2RlKGxhc3QpKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBtZXJnZSBhZGphY2VudCB0ZXh0IG5vZGVzXHJcbiAgICAgICAgICAgICAgICByZXNbbGFzdEluZGV4XSA9IGNyZWF0ZVRleHRWTm9kZShsYXN0LnRleHQgKyBjLnRleHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gZGVmYXVsdCBrZXkgZm9yIG5lc3RlZCBhcnJheSBjaGlsZHJlbiAobGlrZWx5IGdlbmVyYXRlZCBieSB2LWZvcilcclxuICAgICAgICAgICAgICAgIGlmIChpc1RydWUoY2hpbGRyZW4uX2lzVkxpc3QpICYmXHJcbiAgICAgICAgICAgICAgICAgICAgaXNEZWYoYy50YWcpICYmXHJcbiAgICAgICAgICAgICAgICAgICAgaXNVbmRlZihjLmtleSkgJiZcclxuICAgICAgICAgICAgICAgICAgICBpc0RlZihuZXN0ZWRJbmRleCkpIHtcclxuICAgICAgICAgICAgICAgICAgICBjLmtleSA9IFwiX192bGlzdFwiLmNvbmNhdChuZXN0ZWRJbmRleCwgXCJfXCIpLmNvbmNhdChpLCBcIl9fXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmVzLnB1c2goYyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzO1xyXG59XG5cbnZhciBTSU1QTEVfTk9STUFMSVpFID0gMTtcclxudmFyIEFMV0FZU19OT1JNQUxJWkUgPSAyO1xyXG4vLyB3cmFwcGVyIGZ1bmN0aW9uIGZvciBwcm92aWRpbmcgYSBtb3JlIGZsZXhpYmxlIGludGVyZmFjZVxyXG4vLyB3aXRob3V0IGdldHRpbmcgeWVsbGVkIGF0IGJ5IGZsb3dcclxuZnVuY3Rpb24gY3JlYXRlRWxlbWVudCQxKGNvbnRleHQsIHRhZywgZGF0YSwgY2hpbGRyZW4sIG5vcm1hbGl6YXRpb25UeXBlLCBhbHdheXNOb3JtYWxpemUpIHtcclxuICAgIGlmIChpc0FycmF5KGRhdGEpIHx8IGlzUHJpbWl0aXZlKGRhdGEpKSB7XHJcbiAgICAgICAgbm9ybWFsaXphdGlvblR5cGUgPSBjaGlsZHJlbjtcclxuICAgICAgICBjaGlsZHJlbiA9IGRhdGE7XHJcbiAgICAgICAgZGF0YSA9IHVuZGVmaW5lZDtcclxuICAgIH1cclxuICAgIGlmIChpc1RydWUoYWx3YXlzTm9ybWFsaXplKSkge1xyXG4gICAgICAgIG5vcm1hbGl6YXRpb25UeXBlID0gQUxXQVlTX05PUk1BTElaRTtcclxuICAgIH1cclxuICAgIHJldHVybiBfY3JlYXRlRWxlbWVudChjb250ZXh0LCB0YWcsIGRhdGEsIGNoaWxkcmVuLCBub3JtYWxpemF0aW9uVHlwZSk7XHJcbn1cclxuZnVuY3Rpb24gX2NyZWF0ZUVsZW1lbnQoY29udGV4dCwgdGFnLCBkYXRhLCBjaGlsZHJlbiwgbm9ybWFsaXphdGlvblR5cGUpIHtcclxuICAgIGlmIChpc0RlZihkYXRhKSAmJiBpc0RlZihkYXRhLl9fb2JfXykpIHtcclxuICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXHJcbiAgICAgICAgICAgIHdhcm4kMihcIkF2b2lkIHVzaW5nIG9ic2VydmVkIGRhdGEgb2JqZWN0IGFzIHZub2RlIGRhdGE6IFwiLmNvbmNhdChKU09OLnN0cmluZ2lmeShkYXRhKSwgXCJcXG5cIikgKyAnQWx3YXlzIGNyZWF0ZSBmcmVzaCB2bm9kZSBkYXRhIG9iamVjdHMgaW4gZWFjaCByZW5kZXIhJywgY29udGV4dCk7XHJcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUVtcHR5Vk5vZGUoKTtcclxuICAgIH1cclxuICAgIC8vIG9iamVjdCBzeW50YXggaW4gdi1iaW5kXHJcbiAgICBpZiAoaXNEZWYoZGF0YSkgJiYgaXNEZWYoZGF0YS5pcykpIHtcclxuICAgICAgICB0YWcgPSBkYXRhLmlzO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0YWcpIHtcclxuICAgICAgICAvLyBpbiBjYXNlIG9mIGNvbXBvbmVudCA6aXMgc2V0IHRvIGZhbHN5IHZhbHVlXHJcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUVtcHR5Vk5vZGUoKTtcclxuICAgIH1cclxuICAgIC8vIHdhcm4gYWdhaW5zdCBub24tcHJpbWl0aXZlIGtleVxyXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgaXNEZWYoZGF0YSkgJiYgaXNEZWYoZGF0YS5rZXkpICYmICFpc1ByaW1pdGl2ZShkYXRhLmtleSkpIHtcclxuICAgICAgICB3YXJuJDIoJ0F2b2lkIHVzaW5nIG5vbi1wcmltaXRpdmUgdmFsdWUgYXMga2V5LCAnICtcclxuICAgICAgICAgICAgJ3VzZSBzdHJpbmcvbnVtYmVyIHZhbHVlIGluc3RlYWQuJywgY29udGV4dCk7XHJcbiAgICB9XHJcbiAgICAvLyBzdXBwb3J0IHNpbmdsZSBmdW5jdGlvbiBjaGlsZHJlbiBhcyBkZWZhdWx0IHNjb3BlZCBzbG90XHJcbiAgICBpZiAoaXNBcnJheShjaGlsZHJlbikgJiYgaXNGdW5jdGlvbihjaGlsZHJlblswXSkpIHtcclxuICAgICAgICBkYXRhID0gZGF0YSB8fCB7fTtcclxuICAgICAgICBkYXRhLnNjb3BlZFNsb3RzID0geyBkZWZhdWx0OiBjaGlsZHJlblswXSB9O1xyXG4gICAgICAgIGNoaWxkcmVuLmxlbmd0aCA9IDA7XHJcbiAgICB9XHJcbiAgICBpZiAobm9ybWFsaXphdGlvblR5cGUgPT09IEFMV0FZU19OT1JNQUxJWkUpIHtcclxuICAgICAgICBjaGlsZHJlbiA9IG5vcm1hbGl6ZUNoaWxkcmVuKGNoaWxkcmVuKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKG5vcm1hbGl6YXRpb25UeXBlID09PSBTSU1QTEVfTk9STUFMSVpFKSB7XHJcbiAgICAgICAgY2hpbGRyZW4gPSBzaW1wbGVOb3JtYWxpemVDaGlsZHJlbihjaGlsZHJlbik7XHJcbiAgICB9XHJcbiAgICB2YXIgdm5vZGUsIG5zO1xyXG4gICAgaWYgKHR5cGVvZiB0YWcgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgdmFyIEN0b3IgPSB2b2lkIDA7XHJcbiAgICAgICAgbnMgPSAoY29udGV4dC4kdm5vZGUgJiYgY29udGV4dC4kdm5vZGUubnMpIHx8IGNvbmZpZy5nZXRUYWdOYW1lc3BhY2UodGFnKTtcclxuICAgICAgICBpZiAoY29uZmlnLmlzUmVzZXJ2ZWRUYWcodGFnKSkge1xyXG4gICAgICAgICAgICAvLyBwbGF0Zm9ybSBidWlsdC1pbiBlbGVtZW50c1xyXG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJlxyXG4gICAgICAgICAgICAgICAgaXNEZWYoZGF0YSkgJiZcclxuICAgICAgICAgICAgICAgIGlzRGVmKGRhdGEubmF0aXZlT24pICYmXHJcbiAgICAgICAgICAgICAgICBkYXRhLnRhZyAhPT0gJ2NvbXBvbmVudCcpIHtcclxuICAgICAgICAgICAgICAgIHdhcm4kMihcIlRoZSAubmF0aXZlIG1vZGlmaWVyIGZvciB2LW9uIGlzIG9ubHkgdmFsaWQgb24gY29tcG9uZW50cyBidXQgaXQgd2FzIHVzZWQgb24gPFwiLmNvbmNhdCh0YWcsIFwiPi5cIiksIGNvbnRleHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZub2RlID0gbmV3IFZOb2RlKGNvbmZpZy5wYXJzZVBsYXRmb3JtVGFnTmFtZSh0YWcpLCBkYXRhLCBjaGlsZHJlbiwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGNvbnRleHQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICgoIWRhdGEgfHwgIWRhdGEucHJlKSAmJlxyXG4gICAgICAgICAgICBpc0RlZigoQ3RvciA9IHJlc29sdmVBc3NldChjb250ZXh0LiRvcHRpb25zLCAnY29tcG9uZW50cycsIHRhZykpKSkge1xyXG4gICAgICAgICAgICAvLyBjb21wb25lbnRcclxuICAgICAgICAgICAgdm5vZGUgPSBjcmVhdGVDb21wb25lbnQoQ3RvciwgZGF0YSwgY29udGV4dCwgY2hpbGRyZW4sIHRhZyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAvLyB1bmtub3duIG9yIHVubGlzdGVkIG5hbWVzcGFjZWQgZWxlbWVudHNcclxuICAgICAgICAgICAgLy8gY2hlY2sgYXQgcnVudGltZSBiZWNhdXNlIGl0IG1heSBnZXQgYXNzaWduZWQgYSBuYW1lc3BhY2Ugd2hlbiBpdHNcclxuICAgICAgICAgICAgLy8gcGFyZW50IG5vcm1hbGl6ZXMgY2hpbGRyZW5cclxuICAgICAgICAgICAgdm5vZGUgPSBuZXcgVk5vZGUodGFnLCBkYXRhLCBjaGlsZHJlbiwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGNvbnRleHQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIC8vIGRpcmVjdCBjb21wb25lbnQgb3B0aW9ucyAvIGNvbnN0cnVjdG9yXHJcbiAgICAgICAgdm5vZGUgPSBjcmVhdGVDb21wb25lbnQodGFnLCBkYXRhLCBjb250ZXh0LCBjaGlsZHJlbik7XHJcbiAgICB9XHJcbiAgICBpZiAoaXNBcnJheSh2bm9kZSkpIHtcclxuICAgICAgICByZXR1cm4gdm5vZGU7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChpc0RlZih2bm9kZSkpIHtcclxuICAgICAgICBpZiAoaXNEZWYobnMpKVxyXG4gICAgICAgICAgICBhcHBseU5TKHZub2RlLCBucyk7XHJcbiAgICAgICAgaWYgKGlzRGVmKGRhdGEpKVxyXG4gICAgICAgICAgICByZWdpc3RlckRlZXBCaW5kaW5ncyhkYXRhKTtcclxuICAgICAgICByZXR1cm4gdm5vZGU7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICByZXR1cm4gY3JlYXRlRW1wdHlWTm9kZSgpO1xyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIGFwcGx5TlModm5vZGUsIG5zLCBmb3JjZSkge1xyXG4gICAgdm5vZGUubnMgPSBucztcclxuICAgIGlmICh2bm9kZS50YWcgPT09ICdmb3JlaWduT2JqZWN0Jykge1xyXG4gICAgICAgIC8vIHVzZSBkZWZhdWx0IG5hbWVzcGFjZSBpbnNpZGUgZm9yZWlnbk9iamVjdFxyXG4gICAgICAgIG5zID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIGZvcmNlID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGlmIChpc0RlZih2bm9kZS5jaGlsZHJlbikpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IHZub2RlLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgY2hpbGQgPSB2bm9kZS5jaGlsZHJlbltpXTtcclxuICAgICAgICAgICAgaWYgKGlzRGVmKGNoaWxkLnRhZykgJiZcclxuICAgICAgICAgICAgICAgIChpc1VuZGVmKGNoaWxkLm5zKSB8fCAoaXNUcnVlKGZvcmNlKSAmJiBjaGlsZC50YWcgIT09ICdzdmcnKSkpIHtcclxuICAgICAgICAgICAgICAgIGFwcGx5TlMoY2hpbGQsIG5zLCBmb3JjZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuLy8gcmVmICM1MzE4XHJcbi8vIG5lY2Vzc2FyeSB0byBlbnN1cmUgcGFyZW50IHJlLXJlbmRlciB3aGVuIGRlZXAgYmluZGluZ3MgbGlrZSA6c3R5bGUgYW5kXHJcbi8vIDpjbGFzcyBhcmUgdXNlZCBvbiBzbG90IG5vZGVzXHJcbmZ1bmN0aW9uIHJlZ2lzdGVyRGVlcEJpbmRpbmdzKGRhdGEpIHtcclxuICAgIGlmIChpc09iamVjdChkYXRhLnN0eWxlKSkge1xyXG4gICAgICAgIHRyYXZlcnNlKGRhdGEuc3R5bGUpO1xyXG4gICAgfVxyXG4gICAgaWYgKGlzT2JqZWN0KGRhdGEuY2xhc3MpKSB7XHJcbiAgICAgICAgdHJhdmVyc2UoZGF0YS5jbGFzcyk7XHJcbiAgICB9XHJcbn1cblxuLyoqXHJcbiAqIFJ1bnRpbWUgaGVscGVyIGZvciByZW5kZXJpbmcgdi1mb3IgbGlzdHMuXHJcbiAqL1xyXG5mdW5jdGlvbiByZW5kZXJMaXN0KHZhbCwgcmVuZGVyKSB7XHJcbiAgICB2YXIgcmV0ID0gbnVsbCwgaSwgbCwga2V5cywga2V5O1xyXG4gICAgaWYgKGlzQXJyYXkodmFsKSB8fCB0eXBlb2YgdmFsID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIHJldCA9IG5ldyBBcnJheSh2YWwubGVuZ3RoKTtcclxuICAgICAgICBmb3IgKGkgPSAwLCBsID0gdmFsLmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgICAgICByZXRbaV0gPSByZW5kZXIodmFsW2ldLCBpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xyXG4gICAgICAgIHJldCA9IG5ldyBBcnJheSh2YWwpO1xyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB2YWw7IGkrKykge1xyXG4gICAgICAgICAgICByZXRbaV0gPSByZW5kZXIoaSArIDEsIGkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGlzT2JqZWN0KHZhbCkpIHtcclxuICAgICAgICBpZiAoaGFzU3ltYm9sICYmIHZhbFtTeW1ib2wuaXRlcmF0b3JdKSB7XHJcbiAgICAgICAgICAgIHJldCA9IFtdO1xyXG4gICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSB2YWxbU3ltYm9sLml0ZXJhdG9yXSgpO1xyXG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gaXRlcmF0b3IubmV4dCgpO1xyXG4gICAgICAgICAgICB3aGlsZSAoIXJlc3VsdC5kb25lKSB7XHJcbiAgICAgICAgICAgICAgICByZXQucHVzaChyZW5kZXIocmVzdWx0LnZhbHVlLCByZXQubGVuZ3RoKSk7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBpdGVyYXRvci5uZXh0KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGtleXMgPSBPYmplY3Qua2V5cyh2YWwpO1xyXG4gICAgICAgICAgICByZXQgPSBuZXcgQXJyYXkoa2V5cy5sZW5ndGgpO1xyXG4gICAgICAgICAgICBmb3IgKGkgPSAwLCBsID0ga2V5cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGtleSA9IGtleXNbaV07XHJcbiAgICAgICAgICAgICAgICByZXRbaV0gPSByZW5kZXIodmFsW2tleV0sIGtleSwgaSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoIWlzRGVmKHJldCkpIHtcclxuICAgICAgICByZXQgPSBbXTtcclxuICAgIH1cclxuICAgIHJldC5faXNWTGlzdCA9IHRydWU7XHJcbiAgICByZXR1cm4gcmV0O1xyXG59XG5cbi8qKlxyXG4gKiBSdW50aW1lIGhlbHBlciBmb3IgcmVuZGVyaW5nIDxzbG90PlxyXG4gKi9cclxuZnVuY3Rpb24gcmVuZGVyU2xvdChuYW1lLCBmYWxsYmFja1JlbmRlciwgcHJvcHMsIGJpbmRPYmplY3QpIHtcclxuICAgIHZhciBzY29wZWRTbG90Rm4gPSB0aGlzLiRzY29wZWRTbG90c1tuYW1lXTtcclxuICAgIHZhciBub2RlcztcclxuICAgIGlmIChzY29wZWRTbG90Rm4pIHtcclxuICAgICAgICAvLyBzY29wZWQgc2xvdFxyXG4gICAgICAgIHByb3BzID0gcHJvcHMgfHwge307XHJcbiAgICAgICAgaWYgKGJpbmRPYmplY3QpIHtcclxuICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIWlzT2JqZWN0KGJpbmRPYmplY3QpKSB7XHJcbiAgICAgICAgICAgICAgICB3YXJuJDIoJ3Nsb3Qgdi1iaW5kIHdpdGhvdXQgYXJndW1lbnQgZXhwZWN0cyBhbiBPYmplY3QnLCB0aGlzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBwcm9wcyA9IGV4dGVuZChleHRlbmQoe30sIGJpbmRPYmplY3QpLCBwcm9wcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG5vZGVzID1cclxuICAgICAgICAgICAgc2NvcGVkU2xvdEZuKHByb3BzKSB8fFxyXG4gICAgICAgICAgICAgICAgKGlzRnVuY3Rpb24oZmFsbGJhY2tSZW5kZXIpID8gZmFsbGJhY2tSZW5kZXIoKSA6IGZhbGxiYWNrUmVuZGVyKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIG5vZGVzID1cclxuICAgICAgICAgICAgdGhpcy4kc2xvdHNbbmFtZV0gfHxcclxuICAgICAgICAgICAgICAgIChpc0Z1bmN0aW9uKGZhbGxiYWNrUmVuZGVyKSA/IGZhbGxiYWNrUmVuZGVyKCkgOiBmYWxsYmFja1JlbmRlcik7XHJcbiAgICB9XHJcbiAgICB2YXIgdGFyZ2V0ID0gcHJvcHMgJiYgcHJvcHMuc2xvdDtcclxuICAgIGlmICh0YXJnZXQpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kY3JlYXRlRWxlbWVudCgndGVtcGxhdGUnLCB7IHNsb3Q6IHRhcmdldCB9LCBub2Rlcyk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICByZXR1cm4gbm9kZXM7XHJcbiAgICB9XHJcbn1cblxuLyoqXHJcbiAqIFJ1bnRpbWUgaGVscGVyIGZvciByZXNvbHZpbmcgZmlsdGVyc1xyXG4gKi9cclxuZnVuY3Rpb24gcmVzb2x2ZUZpbHRlcihpZCkge1xyXG4gICAgcmV0dXJuIHJlc29sdmVBc3NldCh0aGlzLiRvcHRpb25zLCAnZmlsdGVycycsIGlkLCB0cnVlKSB8fCBpZGVudGl0eTtcclxufVxuXG5mdW5jdGlvbiBpc0tleU5vdE1hdGNoKGV4cGVjdCwgYWN0dWFsKSB7XHJcbiAgICBpZiAoaXNBcnJheShleHBlY3QpKSB7XHJcbiAgICAgICAgcmV0dXJuIGV4cGVjdC5pbmRleE9mKGFjdHVhbCkgPT09IC0xO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIGV4cGVjdCAhPT0gYWN0dWFsO1xyXG4gICAgfVxyXG59XHJcbi8qKlxyXG4gKiBSdW50aW1lIGhlbHBlciBmb3IgY2hlY2tpbmcga2V5Q29kZXMgZnJvbSBjb25maWcuXHJcbiAqIGV4cG9zZWQgYXMgVnVlLnByb3RvdHlwZS5fa1xyXG4gKiBwYXNzaW5nIGluIGV2ZW50S2V5TmFtZSBhcyBsYXN0IGFyZ3VtZW50IHNlcGFyYXRlbHkgZm9yIGJhY2t3YXJkcyBjb21wYXRcclxuICovXHJcbmZ1bmN0aW9uIGNoZWNrS2V5Q29kZXMoZXZlbnRLZXlDb2RlLCBrZXksIGJ1aWx0SW5LZXlDb2RlLCBldmVudEtleU5hbWUsIGJ1aWx0SW5LZXlOYW1lKSB7XHJcbiAgICB2YXIgbWFwcGVkS2V5Q29kZSA9IGNvbmZpZy5rZXlDb2Rlc1trZXldIHx8IGJ1aWx0SW5LZXlDb2RlO1xyXG4gICAgaWYgKGJ1aWx0SW5LZXlOYW1lICYmIGV2ZW50S2V5TmFtZSAmJiAhY29uZmlnLmtleUNvZGVzW2tleV0pIHtcclxuICAgICAgICByZXR1cm4gaXNLZXlOb3RNYXRjaChidWlsdEluS2V5TmFtZSwgZXZlbnRLZXlOYW1lKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKG1hcHBlZEtleUNvZGUpIHtcclxuICAgICAgICByZXR1cm4gaXNLZXlOb3RNYXRjaChtYXBwZWRLZXlDb2RlLCBldmVudEtleUNvZGUpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoZXZlbnRLZXlOYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIGh5cGhlbmF0ZShldmVudEtleU5hbWUpICE9PSBrZXk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZXZlbnRLZXlDb2RlID09PSB1bmRlZmluZWQ7XHJcbn1cblxuLyoqXHJcbiAqIFJ1bnRpbWUgaGVscGVyIGZvciBtZXJnaW5nIHYtYmluZD1cIm9iamVjdFwiIGludG8gYSBWTm9kZSdzIGRhdGEuXHJcbiAqL1xyXG5mdW5jdGlvbiBiaW5kT2JqZWN0UHJvcHMoZGF0YSwgdGFnLCB2YWx1ZSwgYXNQcm9wLCBpc1N5bmMpIHtcclxuICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAgIGlmICghaXNPYmplY3QodmFsdWUpKSB7XHJcbiAgICAgICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiZcclxuICAgICAgICAgICAgICAgIHdhcm4kMigndi1iaW5kIHdpdGhvdXQgYXJndW1lbnQgZXhwZWN0cyBhbiBPYmplY3Qgb3IgQXJyYXkgdmFsdWUnLCB0aGlzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChpc0FycmF5KHZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgdmFsdWUgPSB0b09iamVjdCh2YWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIGhhc2ggPSB2b2lkIDA7XHJcbiAgICAgICAgICAgIHZhciBfbG9vcF8xID0gZnVuY3Rpb24gKGtleSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGtleSA9PT0gJ2NsYXNzJyB8fCBrZXkgPT09ICdzdHlsZScgfHwgaXNSZXNlcnZlZEF0dHJpYnV0ZShrZXkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaGFzaCA9IGRhdGE7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgdHlwZSA9IGRhdGEuYXR0cnMgJiYgZGF0YS5hdHRycy50eXBlO1xyXG4gICAgICAgICAgICAgICAgICAgIGhhc2ggPVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhc1Byb3AgfHwgY29uZmlnLm11c3RVc2VQcm9wKHRhZywgdHlwZSwga2V5KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBkYXRhLmRvbVByb3BzIHx8IChkYXRhLmRvbVByb3BzID0ge30pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGRhdGEuYXR0cnMgfHwgKGRhdGEuYXR0cnMgPSB7fSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB2YXIgY2FtZWxpemVkS2V5ID0gY2FtZWxpemUoa2V5KTtcclxuICAgICAgICAgICAgICAgIHZhciBoeXBoZW5hdGVkS2V5ID0gaHlwaGVuYXRlKGtleSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIShjYW1lbGl6ZWRLZXkgaW4gaGFzaCkgJiYgIShoeXBoZW5hdGVkS2V5IGluIGhhc2gpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaGFzaFtrZXldID0gdmFsdWVba2V5XTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNTeW5jKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvbiA9IGRhdGEub24gfHwgKGRhdGEub24gPSB7fSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uW1widXBkYXRlOlwiLmNvbmNhdChrZXkpXSA9IGZ1bmN0aW9uICgkZXZlbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlW2tleV0gPSAkZXZlbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gdmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIF9sb29wXzEoa2V5KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBkYXRhO1xyXG59XG5cbi8qKlxyXG4gKiBSdW50aW1lIGhlbHBlciBmb3IgcmVuZGVyaW5nIHN0YXRpYyB0cmVlcy5cclxuICovXHJcbmZ1bmN0aW9uIHJlbmRlclN0YXRpYyhpbmRleCwgaXNJbkZvcikge1xyXG4gICAgdmFyIGNhY2hlZCA9IHRoaXMuX3N0YXRpY1RyZWVzIHx8ICh0aGlzLl9zdGF0aWNUcmVlcyA9IFtdKTtcclxuICAgIHZhciB0cmVlID0gY2FjaGVkW2luZGV4XTtcclxuICAgIC8vIGlmIGhhcyBhbHJlYWR5LXJlbmRlcmVkIHN0YXRpYyB0cmVlIGFuZCBub3QgaW5zaWRlIHYtZm9yLFxyXG4gICAgLy8gd2UgY2FuIHJldXNlIHRoZSBzYW1lIHRyZWUuXHJcbiAgICBpZiAodHJlZSAmJiAhaXNJbkZvcikge1xyXG4gICAgICAgIHJldHVybiB0cmVlO1xyXG4gICAgfVxyXG4gICAgLy8gb3RoZXJ3aXNlLCByZW5kZXIgYSBmcmVzaCB0cmVlLlxyXG4gICAgdHJlZSA9IGNhY2hlZFtpbmRleF0gPSB0aGlzLiRvcHRpb25zLnN0YXRpY1JlbmRlckZuc1tpbmRleF0uY2FsbCh0aGlzLl9yZW5kZXJQcm94eSwgdGhpcy5fYywgdGhpcyAvLyBmb3IgcmVuZGVyIGZucyBnZW5lcmF0ZWQgZm9yIGZ1bmN0aW9uYWwgY29tcG9uZW50IHRlbXBsYXRlc1xyXG4gICAgKTtcclxuICAgIG1hcmtTdGF0aWMkMSh0cmVlLCBcIl9fc3RhdGljX19cIi5jb25jYXQoaW5kZXgpLCBmYWxzZSk7XHJcbiAgICByZXR1cm4gdHJlZTtcclxufVxyXG4vKipcclxuICogUnVudGltZSBoZWxwZXIgZm9yIHYtb25jZS5cclxuICogRWZmZWN0aXZlbHkgaXQgbWVhbnMgbWFya2luZyB0aGUgbm9kZSBhcyBzdGF0aWMgd2l0aCBhIHVuaXF1ZSBrZXkuXHJcbiAqL1xyXG5mdW5jdGlvbiBtYXJrT25jZSh0cmVlLCBpbmRleCwga2V5KSB7XHJcbiAgICBtYXJrU3RhdGljJDEodHJlZSwgXCJfX29uY2VfX1wiLmNvbmNhdChpbmRleCkuY29uY2F0KGtleSA/IFwiX1wiLmNvbmNhdChrZXkpIDogXCJcIiksIHRydWUpO1xyXG4gICAgcmV0dXJuIHRyZWU7XHJcbn1cclxuZnVuY3Rpb24gbWFya1N0YXRpYyQxKHRyZWUsIGtleSwgaXNPbmNlKSB7XHJcbiAgICBpZiAoaXNBcnJheSh0cmVlKSkge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdHJlZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAodHJlZVtpXSAmJiB0eXBlb2YgdHJlZVtpXSAhPT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICAgIG1hcmtTdGF0aWNOb2RlKHRyZWVbaV0sIFwiXCIuY29uY2F0KGtleSwgXCJfXCIpLmNvbmNhdChpKSwgaXNPbmNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIG1hcmtTdGF0aWNOb2RlKHRyZWUsIGtleSwgaXNPbmNlKTtcclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBtYXJrU3RhdGljTm9kZShub2RlLCBrZXksIGlzT25jZSkge1xyXG4gICAgbm9kZS5pc1N0YXRpYyA9IHRydWU7XHJcbiAgICBub2RlLmtleSA9IGtleTtcclxuICAgIG5vZGUuaXNPbmNlID0gaXNPbmNlO1xyXG59XG5cbmZ1bmN0aW9uIGJpbmRPYmplY3RMaXN0ZW5lcnMoZGF0YSwgdmFsdWUpIHtcclxuICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAgIGlmICghaXNQbGFpbk9iamVjdCh2YWx1ZSkpIHtcclxuICAgICAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB3YXJuJDIoJ3Ytb24gd2l0aG91dCBhcmd1bWVudCBleHBlY3RzIGFuIE9iamVjdCB2YWx1ZScsIHRoaXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdmFyIG9uID0gKGRhdGEub24gPSBkYXRhLm9uID8gZXh0ZW5kKHt9LCBkYXRhLm9uKSA6IHt9KTtcclxuICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZXhpc3RpbmcgPSBvbltrZXldO1xyXG4gICAgICAgICAgICAgICAgdmFyIG91cnMgPSB2YWx1ZVtrZXldO1xyXG4gICAgICAgICAgICAgICAgb25ba2V5XSA9IGV4aXN0aW5nID8gW10uY29uY2F0KGV4aXN0aW5nLCBvdXJzKSA6IG91cnM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZGF0YTtcclxufVxuXG5mdW5jdGlvbiByZXNvbHZlU2NvcGVkU2xvdHMoZm5zLCByZXMsIFxyXG4vLyB0aGUgZm9sbG93aW5nIGFyZSBhZGRlZCBpbiAyLjZcclxuaGFzRHluYW1pY0tleXMsIGNvbnRlbnRIYXNoS2V5KSB7XHJcbiAgICByZXMgPSByZXMgfHwgeyAkc3RhYmxlOiAhaGFzRHluYW1pY0tleXMgfTtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZm5zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdmFyIHNsb3QgPSBmbnNbaV07XHJcbiAgICAgICAgaWYgKGlzQXJyYXkoc2xvdCkpIHtcclxuICAgICAgICAgICAgcmVzb2x2ZVNjb3BlZFNsb3RzKHNsb3QsIHJlcywgaGFzRHluYW1pY0tleXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChzbG90KSB7XHJcbiAgICAgICAgICAgIC8vIG1hcmtlciBmb3IgcmV2ZXJzZSBwcm94eWluZyB2LXNsb3Qgd2l0aG91dCBzY29wZSBvbiB0aGlzLiRzbG90c1xyXG4gICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXHJcbiAgICAgICAgICAgIGlmIChzbG90LnByb3h5KSB7XHJcbiAgICAgICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXHJcbiAgICAgICAgICAgICAgICBzbG90LmZuLnByb3h5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXNbc2xvdC5rZXldID0gc2xvdC5mbjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoY29udGVudEhhc2hLZXkpIHtcclxuICAgICAgICByZXMuJGtleSA9IGNvbnRlbnRIYXNoS2V5O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlcztcclxufVxuXG4vLyBoZWxwZXIgdG8gcHJvY2VzcyBkeW5hbWljIGtleXMgZm9yIGR5bmFtaWMgYXJndW1lbnRzIGluIHYtYmluZCBhbmQgdi1vbi5cclxuZnVuY3Rpb24gYmluZER5bmFtaWNLZXlzKGJhc2VPYmosIHZhbHVlcykge1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpICs9IDIpIHtcclxuICAgICAgICB2YXIga2V5ID0gdmFsdWVzW2ldO1xyXG4gICAgICAgIGlmICh0eXBlb2Yga2V5ID09PSAnc3RyaW5nJyAmJiBrZXkpIHtcclxuICAgICAgICAgICAgYmFzZU9ialt2YWx1ZXNbaV1dID0gdmFsdWVzW2kgKyAxXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBrZXkgIT09ICcnICYmIGtleSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAvLyBudWxsIGlzIGEgc3BlY2lhbCB2YWx1ZSBmb3IgZXhwbGljaXRseSByZW1vdmluZyBhIGJpbmRpbmdcclxuICAgICAgICAgICAgd2FybiQyKFwiSW52YWxpZCB2YWx1ZSBmb3IgZHluYW1pYyBkaXJlY3RpdmUgYXJndW1lbnQgKGV4cGVjdGVkIHN0cmluZyBvciBudWxsKTogXCIuY29uY2F0KGtleSksIHRoaXMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBiYXNlT2JqO1xyXG59XHJcbi8vIGhlbHBlciB0byBkeW5hbWljYWxseSBhcHBlbmQgbW9kaWZpZXIgcnVudGltZSBtYXJrZXJzIHRvIGV2ZW50IG5hbWVzLlxyXG4vLyBlbnN1cmUgb25seSBhcHBlbmQgd2hlbiB2YWx1ZSBpcyBhbHJlYWR5IHN0cmluZywgb3RoZXJ3aXNlIGl0IHdpbGwgYmUgY2FzdFxyXG4vLyB0byBzdHJpbmcgYW5kIGNhdXNlIHRoZSB0eXBlIGNoZWNrIHRvIG1pc3MuXHJcbmZ1bmN0aW9uIHByZXBlbmRNb2RpZmllcih2YWx1ZSwgc3ltYm9sKSB7XHJcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IHN5bWJvbCArIHZhbHVlIDogdmFsdWU7XHJcbn1cblxuZnVuY3Rpb24gaW5zdGFsbFJlbmRlckhlbHBlcnModGFyZ2V0KSB7XHJcbiAgICB0YXJnZXQuX28gPSBtYXJrT25jZTtcclxuICAgIHRhcmdldC5fbiA9IHRvTnVtYmVyO1xyXG4gICAgdGFyZ2V0Ll9zID0gdG9TdHJpbmc7XHJcbiAgICB0YXJnZXQuX2wgPSByZW5kZXJMaXN0O1xyXG4gICAgdGFyZ2V0Ll90ID0gcmVuZGVyU2xvdDtcclxuICAgIHRhcmdldC5fcSA9IGxvb3NlRXF1YWw7XHJcbiAgICB0YXJnZXQuX2kgPSBsb29zZUluZGV4T2Y7XHJcbiAgICB0YXJnZXQuX20gPSByZW5kZXJTdGF0aWM7XHJcbiAgICB0YXJnZXQuX2YgPSByZXNvbHZlRmlsdGVyO1xyXG4gICAgdGFyZ2V0Ll9rID0gY2hlY2tLZXlDb2RlcztcclxuICAgIHRhcmdldC5fYiA9IGJpbmRPYmplY3RQcm9wcztcclxuICAgIHRhcmdldC5fdiA9IGNyZWF0ZVRleHRWTm9kZTtcclxuICAgIHRhcmdldC5fZSA9IGNyZWF0ZUVtcHR5Vk5vZGU7XHJcbiAgICB0YXJnZXQuX3UgPSByZXNvbHZlU2NvcGVkU2xvdHM7XHJcbiAgICB0YXJnZXQuX2cgPSBiaW5kT2JqZWN0TGlzdGVuZXJzO1xyXG4gICAgdGFyZ2V0Ll9kID0gYmluZER5bmFtaWNLZXlzO1xyXG4gICAgdGFyZ2V0Ll9wID0gcHJlcGVuZE1vZGlmaWVyO1xyXG59XG5cbi8qKlxyXG4gKiBSdW50aW1lIGhlbHBlciBmb3IgcmVzb2x2aW5nIHJhdyBjaGlsZHJlbiBWTm9kZXMgaW50byBhIHNsb3Qgb2JqZWN0LlxyXG4gKi9cclxuZnVuY3Rpb24gcmVzb2x2ZVNsb3RzKGNoaWxkcmVuLCBjb250ZXh0KSB7XHJcbiAgICBpZiAoIWNoaWxkcmVuIHx8ICFjaGlsZHJlbi5sZW5ndGgpIHtcclxuICAgICAgICByZXR1cm4ge307XHJcbiAgICB9XHJcbiAgICB2YXIgc2xvdHMgPSB7fTtcclxuICAgIGZvciAodmFyIGkgPSAwLCBsID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgdmFyIGNoaWxkID0gY2hpbGRyZW5baV07XHJcbiAgICAgICAgdmFyIGRhdGEgPSBjaGlsZC5kYXRhO1xyXG4gICAgICAgIC8vIHJlbW92ZSBzbG90IGF0dHJpYnV0ZSBpZiB0aGUgbm9kZSBpcyByZXNvbHZlZCBhcyBhIFZ1ZSBzbG90IG5vZGVcclxuICAgICAgICBpZiAoZGF0YSAmJiBkYXRhLmF0dHJzICYmIGRhdGEuYXR0cnMuc2xvdCkge1xyXG4gICAgICAgICAgICBkZWxldGUgZGF0YS5hdHRycy5zbG90O1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBuYW1lZCBzbG90cyBzaG91bGQgb25seSBiZSByZXNwZWN0ZWQgaWYgdGhlIHZub2RlIHdhcyByZW5kZXJlZCBpbiB0aGVcclxuICAgICAgICAvLyBzYW1lIGNvbnRleHQuXHJcbiAgICAgICAgaWYgKChjaGlsZC5jb250ZXh0ID09PSBjb250ZXh0IHx8IGNoaWxkLmZuQ29udGV4dCA9PT0gY29udGV4dCkgJiZcclxuICAgICAgICAgICAgZGF0YSAmJlxyXG4gICAgICAgICAgICBkYXRhLnNsb3QgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICB2YXIgbmFtZV8xID0gZGF0YS5zbG90O1xyXG4gICAgICAgICAgICB2YXIgc2xvdCA9IHNsb3RzW25hbWVfMV0gfHwgKHNsb3RzW25hbWVfMV0gPSBbXSk7XHJcbiAgICAgICAgICAgIGlmIChjaGlsZC50YWcgPT09ICd0ZW1wbGF0ZScpIHtcclxuICAgICAgICAgICAgICAgIHNsb3QucHVzaC5hcHBseShzbG90LCBjaGlsZC5jaGlsZHJlbiB8fCBbXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBzbG90LnB1c2goY2hpbGQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAoc2xvdHMuZGVmYXVsdCB8fCAoc2xvdHMuZGVmYXVsdCA9IFtdKSkucHVzaChjaGlsZCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gaWdub3JlIHNsb3RzIHRoYXQgY29udGFpbnMgb25seSB3aGl0ZXNwYWNlXHJcbiAgICBmb3IgKHZhciBuYW1lXzIgaW4gc2xvdHMpIHtcclxuICAgICAgICBpZiAoc2xvdHNbbmFtZV8yXS5ldmVyeShpc1doaXRlc3BhY2UpKSB7XHJcbiAgICAgICAgICAgIGRlbGV0ZSBzbG90c1tuYW1lXzJdO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBzbG90cztcclxufVxyXG5mdW5jdGlvbiBpc1doaXRlc3BhY2Uobm9kZSkge1xyXG4gICAgcmV0dXJuIChub2RlLmlzQ29tbWVudCAmJiAhbm9kZS5hc3luY0ZhY3RvcnkpIHx8IG5vZGUudGV4dCA9PT0gJyAnO1xyXG59XG5cbmZ1bmN0aW9uIGlzQXN5bmNQbGFjZWhvbGRlcihub2RlKSB7XHJcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIG5vdCByZWFsbHkgYm9vbGVhbiB0eXBlXHJcbiAgICByZXR1cm4gbm9kZS5pc0NvbW1lbnQgJiYgbm9kZS5hc3luY0ZhY3Rvcnk7XHJcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplU2NvcGVkU2xvdHMob3duZXJWbSwgc2NvcGVkU2xvdHMsIG5vcm1hbFNsb3RzLCBwcmV2U2NvcGVkU2xvdHMpIHtcclxuICAgIHZhciByZXM7XHJcbiAgICB2YXIgaGFzTm9ybWFsU2xvdHMgPSBPYmplY3Qua2V5cyhub3JtYWxTbG90cykubGVuZ3RoID4gMDtcclxuICAgIHZhciBpc1N0YWJsZSA9IHNjb3BlZFNsb3RzID8gISFzY29wZWRTbG90cy4kc3RhYmxlIDogIWhhc05vcm1hbFNsb3RzO1xyXG4gICAgdmFyIGtleSA9IHNjb3BlZFNsb3RzICYmIHNjb3BlZFNsb3RzLiRrZXk7XHJcbiAgICBpZiAoIXNjb3BlZFNsb3RzKSB7XHJcbiAgICAgICAgcmVzID0ge307XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChzY29wZWRTbG90cy5fbm9ybWFsaXplZCkge1xyXG4gICAgICAgIC8vIGZhc3QgcGF0aCAxOiBjaGlsZCBjb21wb25lbnQgcmUtcmVuZGVyIG9ubHksIHBhcmVudCBkaWQgbm90IGNoYW5nZVxyXG4gICAgICAgIHJldHVybiBzY29wZWRTbG90cy5fbm9ybWFsaXplZDtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGlzU3RhYmxlICYmXHJcbiAgICAgICAgcHJldlNjb3BlZFNsb3RzICYmXHJcbiAgICAgICAgcHJldlNjb3BlZFNsb3RzICE9PSBlbXB0eU9iamVjdCAmJlxyXG4gICAgICAgIGtleSA9PT0gcHJldlNjb3BlZFNsb3RzLiRrZXkgJiZcclxuICAgICAgICAhaGFzTm9ybWFsU2xvdHMgJiZcclxuICAgICAgICAhcHJldlNjb3BlZFNsb3RzLiRoYXNOb3JtYWwpIHtcclxuICAgICAgICAvLyBmYXN0IHBhdGggMjogc3RhYmxlIHNjb3BlZCBzbG90cyB3LyBubyBub3JtYWwgc2xvdHMgdG8gcHJveHksXHJcbiAgICAgICAgLy8gb25seSBuZWVkIHRvIG5vcm1hbGl6ZSBvbmNlXHJcbiAgICAgICAgcmV0dXJuIHByZXZTY29wZWRTbG90cztcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHJlcyA9IHt9O1xyXG4gICAgICAgIGZvciAodmFyIGtleV8xIGluIHNjb3BlZFNsb3RzKSB7XHJcbiAgICAgICAgICAgIGlmIChzY29wZWRTbG90c1trZXlfMV0gJiYga2V5XzFbMF0gIT09ICckJykge1xyXG4gICAgICAgICAgICAgICAgcmVzW2tleV8xXSA9IG5vcm1hbGl6ZVNjb3BlZFNsb3Qob3duZXJWbSwgbm9ybWFsU2xvdHMsIGtleV8xLCBzY29wZWRTbG90c1trZXlfMV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gZXhwb3NlIG5vcm1hbCBzbG90cyBvbiBzY29wZWRTbG90c1xyXG4gICAgZm9yICh2YXIga2V5XzIgaW4gbm9ybWFsU2xvdHMpIHtcclxuICAgICAgICBpZiAoIShrZXlfMiBpbiByZXMpKSB7XHJcbiAgICAgICAgICAgIHJlc1trZXlfMl0gPSBwcm94eU5vcm1hbFNsb3Qobm9ybWFsU2xvdHMsIGtleV8yKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBhdm9yaWF6IHNlZW1zIHRvIG1vY2sgYSBub24tZXh0ZW5zaWJsZSAkc2NvcGVkU2xvdHMgb2JqZWN0XHJcbiAgICAvLyBhbmQgd2hlbiB0aGF0IGlzIHBhc3NlZCBkb3duIHRoaXMgd291bGQgY2F1c2UgYW4gZXJyb3JcclxuICAgIGlmIChzY29wZWRTbG90cyAmJiBPYmplY3QuaXNFeHRlbnNpYmxlKHNjb3BlZFNsb3RzKSkge1xyXG4gICAgICAgIHNjb3BlZFNsb3RzLl9ub3JtYWxpemVkID0gcmVzO1xyXG4gICAgfVxyXG4gICAgZGVmKHJlcywgJyRzdGFibGUnLCBpc1N0YWJsZSk7XHJcbiAgICBkZWYocmVzLCAnJGtleScsIGtleSk7XHJcbiAgICBkZWYocmVzLCAnJGhhc05vcm1hbCcsIGhhc05vcm1hbFNsb3RzKTtcclxuICAgIHJldHVybiByZXM7XHJcbn1cclxuZnVuY3Rpb24gbm9ybWFsaXplU2NvcGVkU2xvdCh2bSwgbm9ybWFsU2xvdHMsIGtleSwgZm4pIHtcclxuICAgIHZhciBub3JtYWxpemVkID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBjdXIgPSBjdXJyZW50SW5zdGFuY2U7XHJcbiAgICAgICAgc2V0Q3VycmVudEluc3RhbmNlKHZtKTtcclxuICAgICAgICB2YXIgcmVzID0gYXJndW1lbnRzLmxlbmd0aCA/IGZuLmFwcGx5KG51bGwsIGFyZ3VtZW50cykgOiBmbih7fSk7XHJcbiAgICAgICAgcmVzID1cclxuICAgICAgICAgICAgcmVzICYmIHR5cGVvZiByZXMgPT09ICdvYmplY3QnICYmICFpc0FycmF5KHJlcylcclxuICAgICAgICAgICAgICAgID8gW3Jlc10gLy8gc2luZ2xlIHZub2RlXHJcbiAgICAgICAgICAgICAgICA6IG5vcm1hbGl6ZUNoaWxkcmVuKHJlcyk7XHJcbiAgICAgICAgdmFyIHZub2RlID0gcmVzICYmIHJlc1swXTtcclxuICAgICAgICBzZXRDdXJyZW50SW5zdGFuY2UoY3VyKTtcclxuICAgICAgICByZXR1cm4gcmVzICYmXHJcbiAgICAgICAgICAgICghdm5vZGUgfHxcclxuICAgICAgICAgICAgICAgIChyZXMubGVuZ3RoID09PSAxICYmIHZub2RlLmlzQ29tbWVudCAmJiAhaXNBc3luY1BsYWNlaG9sZGVyKHZub2RlKSkpIC8vICM5NjU4LCAjMTAzOTFcclxuICAgICAgICAgICAgPyB1bmRlZmluZWRcclxuICAgICAgICAgICAgOiByZXM7XHJcbiAgICB9O1xyXG4gICAgLy8gdGhpcyBpcyBhIHNsb3QgdXNpbmcgdGhlIG5ldyB2LXNsb3Qgc3ludGF4IHdpdGhvdXQgc2NvcGUuIGFsdGhvdWdoIGl0IGlzXHJcbiAgICAvLyBjb21waWxlZCBhcyBhIHNjb3BlZCBzbG90LCByZW5kZXIgZm4gdXNlcnMgd291bGQgZXhwZWN0IGl0IHRvIGJlIHByZXNlbnRcclxuICAgIC8vIG9uIHRoaXMuJHNsb3RzIGJlY2F1c2UgdGhlIHVzYWdlIGlzIHNlbWFudGljYWxseSBhIG5vcm1hbCBzbG90LlxyXG4gICAgaWYgKGZuLnByb3h5KSB7XHJcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG5vcm1hbFNsb3RzLCBrZXksIHtcclxuICAgICAgICAgICAgZ2V0OiBub3JtYWxpemVkLFxyXG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxyXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWVcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiBub3JtYWxpemVkO1xyXG59XHJcbmZ1bmN0aW9uIHByb3h5Tm9ybWFsU2xvdChzbG90cywga2V5KSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gc2xvdHNba2V5XTsgfTtcclxufVxuXG5mdW5jdGlvbiBpbml0U2V0dXAodm0pIHtcclxuICAgIHZhciBvcHRpb25zID0gdm0uJG9wdGlvbnM7XHJcbiAgICB2YXIgc2V0dXAgPSBvcHRpb25zLnNldHVwO1xyXG4gICAgaWYgKHNldHVwKSB7XHJcbiAgICAgICAgdmFyIGN0eCA9ICh2bS5fc2V0dXBDb250ZXh0ID0gY3JlYXRlU2V0dXBDb250ZXh0KHZtKSk7XHJcbiAgICAgICAgc2V0Q3VycmVudEluc3RhbmNlKHZtKTtcclxuICAgICAgICBwdXNoVGFyZ2V0KCk7XHJcbiAgICAgICAgdmFyIHNldHVwUmVzdWx0ID0gaW52b2tlV2l0aEVycm9ySGFuZGxpbmcoc2V0dXAsIG51bGwsIFt2bS5fcHJvcHMgfHwgc2hhbGxvd1JlYWN0aXZlKHt9KSwgY3R4XSwgdm0sIFwic2V0dXBcIik7XHJcbiAgICAgICAgcG9wVGFyZ2V0KCk7XHJcbiAgICAgICAgc2V0Q3VycmVudEluc3RhbmNlKCk7XHJcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24oc2V0dXBSZXN1bHQpKSB7XHJcbiAgICAgICAgICAgIC8vIHJlbmRlciBmdW5jdGlvblxyXG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgICAgICAgIG9wdGlvbnMucmVuZGVyID0gc2V0dXBSZXN1bHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGlzT2JqZWN0KHNldHVwUmVzdWx0KSkge1xyXG4gICAgICAgICAgICAvLyBiaW5kaW5nc1xyXG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBzZXR1cFJlc3VsdCBpbnN0YW5jZW9mIFZOb2RlKSB7XHJcbiAgICAgICAgICAgICAgICB3YXJuJDIoXCJzZXR1cCgpIHNob3VsZCBub3QgcmV0dXJuIFZOb2RlcyBkaXJlY3RseSAtIFwiICtcclxuICAgICAgICAgICAgICAgICAgICBcInJldHVybiBhIHJlbmRlciBmdW5jdGlvbiBpbnN0ZWFkLlwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2bS5fc2V0dXBTdGF0ZSA9IHNldHVwUmVzdWx0O1xyXG4gICAgICAgICAgICAvLyBfX3NmYyBpbmRpY2F0ZXMgY29tcGlsZWQgYmluZGluZ3MgZnJvbSA8c2NyaXB0IHNldHVwPlxyXG4gICAgICAgICAgICBpZiAoIXNldHVwUmVzdWx0Ll9fc2ZjKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gc2V0dXBSZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzUmVzZXJ2ZWQoa2V5KSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm94eVdpdGhSZWZVbndyYXAodm0sIHNldHVwUmVzdWx0LCBrZXkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdhcm4kMihcIkF2b2lkIHVzaW5nIHZhcmlhYmxlcyB0aGF0IHN0YXJ0IHdpdGggXyBvciAkIGluIHNldHVwKCkuXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIGV4cG9zZWQgZm9yIGNvbXBpbGVkIHJlbmRlciBmblxyXG4gICAgICAgICAgICAgICAgdmFyIHByb3h5ID0gKHZtLl9zZXR1cFByb3h5ID0ge30pO1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIHNldHVwUmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGtleSAhPT0gJ19fc2ZjJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm94eVdpdGhSZWZVbndyYXAocHJveHksIHNldHVwUmVzdWx0LCBrZXkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHNldHVwUmVzdWx0ICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgd2FybiQyKFwic2V0dXAoKSBzaG91bGQgcmV0dXJuIGFuIG9iamVjdC4gUmVjZWl2ZWQ6IFwiLmNvbmNhdChzZXR1cFJlc3VsdCA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiBzZXR1cFJlc3VsdCkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBjcmVhdGVTZXR1cENvbnRleHQodm0pIHtcclxuICAgIHZhciBleHBvc2VDYWxsZWQgPSBmYWxzZTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgZ2V0IGF0dHJzKCkge1xyXG4gICAgICAgICAgICBpZiAoIXZtLl9hdHRyc1Byb3h5KSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcHJveHkgPSAodm0uX2F0dHJzUHJveHkgPSB7fSk7XHJcbiAgICAgICAgICAgICAgICBkZWYocHJveHksICdfdl9hdHRyX3Byb3h5JywgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICBzeW5jU2V0dXBQcm94eShwcm94eSwgdm0uJGF0dHJzLCBlbXB0eU9iamVjdCwgdm0sICckYXR0cnMnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gdm0uX2F0dHJzUHJveHk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBnZXQgbGlzdGVuZXJzKCkge1xyXG4gICAgICAgICAgICBpZiAoIXZtLl9saXN0ZW5lcnNQcm94eSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHByb3h5ID0gKHZtLl9saXN0ZW5lcnNQcm94eSA9IHt9KTtcclxuICAgICAgICAgICAgICAgIHN5bmNTZXR1cFByb3h5KHByb3h5LCB2bS4kbGlzdGVuZXJzLCBlbXB0eU9iamVjdCwgdm0sICckbGlzdGVuZXJzJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHZtLl9saXN0ZW5lcnNQcm94eTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGdldCBzbG90cygpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGluaXRTbG90c1Byb3h5KHZtKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVtaXQ6IGJpbmQkMSh2bS4kZW1pdCwgdm0pLFxyXG4gICAgICAgIGV4cG9zZTogZnVuY3Rpb24gKGV4cG9zZWQpIHtcclxuICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcclxuICAgICAgICAgICAgICAgIGlmIChleHBvc2VDYWxsZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICB3YXJuJDIoXCJleHBvc2UoKSBzaG91bGQgYmUgY2FsbGVkIG9ubHkgb25jZSBwZXIgc2V0dXAoKS5cIiwgdm0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZXhwb3NlQ2FsbGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZXhwb3NlZCkge1xyXG4gICAgICAgICAgICAgICAgT2JqZWN0LmtleXMoZXhwb3NlZCkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByb3h5V2l0aFJlZlVud3JhcCh2bSwgZXhwb3NlZCwga2V5KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxufVxyXG5mdW5jdGlvbiBzeW5jU2V0dXBQcm94eSh0bywgZnJvbSwgcHJldiwgaW5zdGFuY2UsIHR5cGUpIHtcclxuICAgIHZhciBjaGFuZ2VkID0gZmFsc2U7XHJcbiAgICBmb3IgKHZhciBrZXkgaW4gZnJvbSkge1xyXG4gICAgICAgIGlmICghKGtleSBpbiB0bykpIHtcclxuICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIGRlZmluZVByb3h5QXR0cih0bywga2V5LCBpbnN0YW5jZSwgdHlwZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGZyb21ba2V5XSAhPT0gcHJldltrZXldKSB7XHJcbiAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZvciAodmFyIGtleSBpbiB0bykge1xyXG4gICAgICAgIGlmICghKGtleSBpbiBmcm9tKSkge1xyXG4gICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTtcclxuICAgICAgICAgICAgZGVsZXRlIHRvW2tleV07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNoYW5nZWQ7XHJcbn1cclxuZnVuY3Rpb24gZGVmaW5lUHJveHlBdHRyKHByb3h5LCBrZXksIGluc3RhbmNlLCB0eXBlKSB7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJveHksIGtleSwge1xyXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXHJcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gaW5zdGFuY2VbdHlwZV1ba2V5XTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufVxyXG5mdW5jdGlvbiBpbml0U2xvdHNQcm94eSh2bSkge1xyXG4gICAgaWYgKCF2bS5fc2xvdHNQcm94eSkge1xyXG4gICAgICAgIHN5bmNTZXR1cFNsb3RzKCh2bS5fc2xvdHNQcm94eSA9IHt9KSwgdm0uJHNjb3BlZFNsb3RzKTtcclxuICAgIH1cclxuICAgIHJldHVybiB2bS5fc2xvdHNQcm94eTtcclxufVxyXG5mdW5jdGlvbiBzeW5jU2V0dXBTbG90cyh0bywgZnJvbSkge1xyXG4gICAgZm9yICh2YXIga2V5IGluIGZyb20pIHtcclxuICAgICAgICB0b1trZXldID0gZnJvbVtrZXldO1xyXG4gICAgfVxyXG4gICAgZm9yICh2YXIga2V5IGluIHRvKSB7XHJcbiAgICAgICAgaWYgKCEoa2V5IGluIGZyb20pKSB7XHJcbiAgICAgICAgICAgIGRlbGV0ZSB0b1trZXldO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4vKipcclxuICogQGludGVybmFsIHVzZSBtYW51YWwgdHlwZSBkZWYgYmVjYXVzZSBwdWJsaWMgc2V0dXAgY29udGV4dCB0eXBlIHJlbGllcyBvblxyXG4gKiBsZWdhY3kgVk5vZGUgdHlwZXNcclxuICovXHJcbmZ1bmN0aW9uIHVzZVNsb3RzKCkge1xyXG4gICAgcmV0dXJuIGdldENvbnRleHQoKS5zbG90cztcclxufVxyXG4vKipcclxuICogQGludGVybmFsIHVzZSBtYW51YWwgdHlwZSBkZWYgYmVjYXVzZSBwdWJsaWMgc2V0dXAgY29udGV4dCB0eXBlIHJlbGllcyBvblxyXG4gKiBsZWdhY3kgVk5vZGUgdHlwZXNcclxuICovXHJcbmZ1bmN0aW9uIHVzZUF0dHJzKCkge1xyXG4gICAgcmV0dXJuIGdldENvbnRleHQoKS5hdHRycztcclxufVxyXG4vKipcclxuICogVnVlIDIgb25seVxyXG4gKiBAaW50ZXJuYWwgdXNlIG1hbnVhbCB0eXBlIGRlZiBiZWNhdXNlIHB1YmxpYyBzZXR1cCBjb250ZXh0IHR5cGUgcmVsaWVzIG9uXHJcbiAqIGxlZ2FjeSBWTm9kZSB0eXBlc1xyXG4gKi9cclxuZnVuY3Rpb24gdXNlTGlzdGVuZXJzKCkge1xyXG4gICAgcmV0dXJuIGdldENvbnRleHQoKS5saXN0ZW5lcnM7XHJcbn1cclxuZnVuY3Rpb24gZ2V0Q29udGV4dCgpIHtcclxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmICFjdXJyZW50SW5zdGFuY2UpIHtcclxuICAgICAgICB3YXJuJDIoXCJ1c2VDb250ZXh0KCkgY2FsbGVkIHdpdGhvdXQgYWN0aXZlIGluc3RhbmNlLlwiKTtcclxuICAgIH1cclxuICAgIHZhciB2bSA9IGN1cnJlbnRJbnN0YW5jZTtcclxuICAgIHJldHVybiB2bS5fc2V0dXBDb250ZXh0IHx8ICh2bS5fc2V0dXBDb250ZXh0ID0gY3JlYXRlU2V0dXBDb250ZXh0KHZtKSk7XHJcbn1cclxuLyoqXHJcbiAqIFJ1bnRpbWUgaGVscGVyIGZvciBtZXJnaW5nIGRlZmF1bHQgZGVjbGFyYXRpb25zLiBJbXBvcnRlZCBieSBjb21waWxlZCBjb2RlXHJcbiAqIG9ubHkuXHJcbiAqIEBpbnRlcm5hbFxyXG4gKi9cclxuZnVuY3Rpb24gbWVyZ2VEZWZhdWx0cyhyYXcsIGRlZmF1bHRzKSB7XHJcbiAgICB2YXIgcHJvcHMgPSBpc0FycmF5KHJhdylcclxuICAgICAgICA/IHJhdy5yZWR1Y2UoZnVuY3Rpb24gKG5vcm1hbGl6ZWQsIHApIHsgcmV0dXJuICgobm9ybWFsaXplZFtwXSA9IHt9KSwgbm9ybWFsaXplZCk7IH0sIHt9KVxyXG4gICAgICAgIDogcmF3O1xyXG4gICAgZm9yICh2YXIga2V5IGluIGRlZmF1bHRzKSB7XHJcbiAgICAgICAgdmFyIG9wdCA9IHByb3BzW2tleV07XHJcbiAgICAgICAgaWYgKG9wdCkge1xyXG4gICAgICAgICAgICBpZiAoaXNBcnJheShvcHQpIHx8IGlzRnVuY3Rpb24ob3B0KSkge1xyXG4gICAgICAgICAgICAgICAgcHJvcHNba2V5XSA9IHsgdHlwZTogb3B0LCBkZWZhdWx0OiBkZWZhdWx0c1trZXldIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBvcHQuZGVmYXVsdCA9IGRlZmF1bHRzW2tleV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAob3B0ID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHByb3BzW2tleV0gPSB7IGRlZmF1bHQ6IGRlZmF1bHRzW2tleV0gfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xyXG4gICAgICAgICAgICB3YXJuJDIoXCJwcm9wcyBkZWZhdWx0IGtleSBcXFwiXCIuY29uY2F0KGtleSwgXCJcXFwiIGhhcyBubyBjb3JyZXNwb25kaW5nIGRlY2xhcmF0aW9uLlwiKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHByb3BzO1xyXG59XG5cbmZ1bmN0aW9uIGluaXRSZW5kZXIodm0pIHtcclxuICAgIHZtLl92bm9kZSA9IG51bGw7IC8vIHRoZSByb290IG9mIHRoZSBjaGlsZCB0cmVlXHJcbiAgICB2bS5fc3RhdGljVHJlZXMgPSBudWxsOyAvLyB2LW9uY2UgY2FjaGVkIHRyZWVzXHJcbiAgICB2YXIgb3B0aW9ucyA9IHZtLiRvcHRpb25zO1xyXG4gICAgdmFyIHBhcmVudFZub2RlID0gKHZtLiR2bm9kZSA9IG9wdGlvbnMuX3BhcmVudFZub2RlKTsgLy8gdGhlIHBsYWNlaG9sZGVyIG5vZGUgaW4gcGFyZW50IHRyZWVcclxuICAgIHZhciByZW5kZXJDb250ZXh0ID0gcGFyZW50Vm5vZGUgJiYgcGFyZW50Vm5vZGUuY29udGV4dDtcclxuICAgIHZtLiRzbG90cyA9IHJlc29sdmVTbG90cyhvcHRpb25zLl9yZW5kZXJDaGlsZHJlbiwgcmVuZGVyQ29udGV4dCk7XHJcbiAgICB2bS4kc2NvcGVkU2xvdHMgPSBwYXJlbnRWbm9kZVxyXG4gICAgICAgID8gbm9ybWFsaXplU2NvcGVkU2xvdHModm0uJHBhcmVudCwgcGFyZW50Vm5vZGUuZGF0YS5zY29wZWRTbG90cywgdm0uJHNsb3RzKVxyXG4gICAgICAgIDogZW1wdHlPYmplY3Q7XHJcbiAgICAvLyBiaW5kIHRoZSBjcmVhdGVFbGVtZW50IGZuIHRvIHRoaXMgaW5zdGFuY2VcclxuICAgIC8vIHNvIHRoYXQgd2UgZ2V0IHByb3BlciByZW5kZXIgY29udGV4dCBpbnNpZGUgaXQuXHJcbiAgICAvLyBhcmdzIG9yZGVyOiB0YWcsIGRhdGEsIGNoaWxkcmVuLCBub3JtYWxpemF0aW9uVHlwZSwgYWx3YXlzTm9ybWFsaXplXHJcbiAgICAvLyBpbnRlcm5hbCB2ZXJzaW9uIGlzIHVzZWQgYnkgcmVuZGVyIGZ1bmN0aW9ucyBjb21waWxlZCBmcm9tIHRlbXBsYXRlc1xyXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvclxyXG4gICAgdm0uX2MgPSBmdW5jdGlvbiAoYSwgYiwgYywgZCkgeyByZXR1cm4gY3JlYXRlRWxlbWVudCQxKHZtLCBhLCBiLCBjLCBkLCBmYWxzZSk7IH07XHJcbiAgICAvLyBub3JtYWxpemF0aW9uIGlzIGFsd2F5cyBhcHBsaWVkIGZvciB0aGUgcHVibGljIHZlcnNpb24sIHVzZWQgaW5cclxuICAgIC8vIHVzZXItd3JpdHRlbiByZW5kZXIgZnVuY3Rpb25zLlxyXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvclxyXG4gICAgdm0uJGNyZWF0ZUVsZW1lbnQgPSBmdW5jdGlvbiAoYSwgYiwgYywgZCkgeyByZXR1cm4gY3JlYXRlRWxlbWVudCQxKHZtLCBhLCBiLCBjLCBkLCB0cnVlKTsgfTtcclxuICAgIC8vICRhdHRycyAmICRsaXN0ZW5lcnMgYXJlIGV4cG9zZWQgZm9yIGVhc2llciBIT0MgY3JlYXRpb24uXHJcbiAgICAvLyB0aGV5IG5lZWQgdG8gYmUgcmVhY3RpdmUgc28gdGhhdCBIT0NzIHVzaW5nIHRoZW0gYXJlIGFsd2F5cyB1cGRhdGVkXHJcbiAgICB2YXIgcGFyZW50RGF0YSA9IHBhcmVudFZub2RlICYmIHBhcmVudFZub2RlLmRhdGE7XHJcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xyXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcclxuICAgICAgICBkZWZpbmVSZWFjdGl2ZSh2bSwgJyRhdHRycycsIChwYXJlbnREYXRhICYmIHBhcmVudERhdGEuYXR0cnMpIHx8IGVtcHR5T2JqZWN0LCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICFpc1VwZGF0aW5nQ2hpbGRDb21wb25lbnQgJiYgd2FybiQyKFwiJGF0dHJzIGlzIHJlYWRvbmx5LlwiLCB2bSk7XHJcbiAgICAgICAgfSwgdHJ1ZSk7XHJcbiAgICAgICAgZGVmaW5lUmVhY3RpdmUodm0sICckbGlzdGVuZXJzJywgb3B0aW9ucy5fcGFyZW50TGlzdGVuZXJzIHx8IGVtcHR5T2JqZWN0LCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICFpc1VwZGF0aW5nQ2hpbGRDb21wb25lbnQgJiYgd2FybiQyKFwiJGxpc3RlbmVycyBpcyByZWFkb25seS5cIiwgdm0pO1xyXG4gICAgICAgIH0sIHRydWUpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgZGVmaW5lUmVhY3RpdmUodm0sICckYXR0cnMnLCAocGFyZW50RGF0YSAmJiBwYXJlbnREYXRhLmF0dHJzKSB8fCBlbXB0eU9iamVjdCwgbnVsbCwgdHJ1ZSk7XHJcbiAgICAgICAgZGVmaW5lUmVhY3RpdmUodm0sICckbGlzdGVuZXJzJywgb3B0aW9ucy5fcGFyZW50TGlzdGVuZXJzIHx8IGVtcHR5T2JqZWN0LCBudWxsLCB0cnVlKTtcclxuICAgIH1cclxufVxyXG52YXIgY3VycmVudFJlbmRlcmluZ0luc3RhbmNlID0gbnVsbDtcclxuZnVuY3Rpb24gcmVuZGVyTWl4aW4oVnVlKSB7XHJcbiAgICAvLyBpbnN0YWxsIHJ1bnRpbWUgY29udmVuaWVuY2UgaGVscGVyc1xyXG4gICAgaW5zdGFsbFJlbmRlckhlbHBlcnMoVnVlLnByb3RvdHlwZSk7XHJcbiAgICBWdWUucHJvdG90eXBlLiRuZXh0VGljayA9IGZ1bmN0aW9uIChmbikge1xyXG4gICAgICAgIHJldHVybiBuZXh0VGljayhmbiwgdGhpcyk7XHJcbiAgICB9O1xyXG4gICAgVnVlLnByb3RvdHlwZS5fcmVuZGVyID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciB2bSA9IHRoaXM7XHJcbiAgICAgICAgdmFyIF9hID0gdm0uJG9wdGlvbnMsIHJlbmRlciA9IF9hLnJlbmRlciwgX3BhcmVudFZub2RlID0gX2EuX3BhcmVudFZub2RlO1xyXG4gICAgICAgIGlmIChfcGFyZW50Vm5vZGUgJiYgdm0uX2lzTW91bnRlZCkge1xyXG4gICAgICAgICAgICB2bS4kc2NvcGVkU2xvdHMgPSBub3JtYWxpemVTY29wZWRTbG90cyh2bS4kcGFyZW50LCBfcGFyZW50Vm5vZGUuZGF0YS5zY29wZWRTbG90cywgdm0uJHNsb3RzLCB2bS4kc2NvcGVkU2xvdHMpO1xyXG4gICAgICAgICAgICBpZiAodm0uX3Nsb3RzUHJveHkpIHtcclxuICAgICAgICAgICAgICAgIHN5bmNTZXR1cFNsb3RzKHZtLl9zbG90c1Byb3h5LCB2bS4kc2NvcGVkU2xvdHMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHNldCBwYXJlbnQgdm5vZGUuIHRoaXMgYWxsb3dzIHJlbmRlciBmdW5jdGlvbnMgdG8gaGF2ZSBhY2Nlc3NcclxuICAgICAgICAvLyB0byB0aGUgZGF0YSBvbiB0aGUgcGxhY2Vob2xkZXIgbm9kZS5cclxuICAgICAgICB2bS4kdm5vZGUgPSBfcGFyZW50Vm5vZGU7XHJcbiAgICAgICAgLy8gcmVuZGVyIHNlbGZcclxuICAgICAgICB2YXIgdm5vZGU7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgLy8gVGhlcmUncyBubyBuZWVkIHRvIG1haW50YWluIGEgc3RhY2sgYmVjYXVzZSBhbGwgcmVuZGVyIGZucyBhcmUgY2FsbGVkXHJcbiAgICAgICAgICAgIC8vIHNlcGFyYXRlbHkgZnJvbSBvbmUgYW5vdGhlci4gTmVzdGVkIGNvbXBvbmVudCdzIHJlbmRlciBmbnMgYXJlIGNhbGxlZFxyXG4gICAgICAgICAgICAvLyB3aGVuIHBhcmVudCBjb21wb25lbnQgaXMgcGF0Y2hlZC5cclxuICAgICAgICAgICAgc2V0Q3VycmVudEluc3RhbmNlKHZtKTtcclxuICAgICAgICAgICAgY3VycmVudFJlbmRlcmluZ0luc3RhbmNlID0gdm07XHJcbiAgICAgICAgICAgIHZub2RlID0gcmVuZGVyLmNhbGwodm0uX3JlbmRlclByb3h5LCB2bS4kY3JlYXRlRWxlbWVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGhhbmRsZUVycm9yKGUsIHZtLCBcInJlbmRlclwiKTtcclxuICAgICAgICAgICAgLy8gcmV0dXJuIGVycm9yIHJlbmRlciByZXN1bHQsXHJcbiAgICAgICAgICAgIC8vIG9yIHByZXZpb3VzIHZub2RlIHRvIHByZXZlbnQgcmVuZGVyIGVycm9yIGNhdXNpbmcgYmxhbmsgY29tcG9uZW50XHJcbiAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXHJcbiAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHZtLiRvcHRpb25zLnJlbmRlckVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZub2RlID0gdm0uJG9wdGlvbnMucmVuZGVyRXJyb3IuY2FsbCh2bS5fcmVuZGVyUHJveHksIHZtLiRjcmVhdGVFbGVtZW50LCBlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlRXJyb3IoZSwgdm0sIFwicmVuZGVyRXJyb3JcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgdm5vZGUgPSB2bS5fdm5vZGU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB2bm9kZSA9IHZtLl92bm9kZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBmaW5hbGx5IHtcclxuICAgICAgICAgICAgY3VycmVudFJlbmRlcmluZ0luc3RhbmNlID0gbnVsbDtcclxuICAgICAgICAgICAgc2V0Q3VycmVudEluc3RhbmNlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGlmIHRoZSByZXR1cm5lZCBhcnJheSBjb250YWlucyBvbmx5IGEgc2luZ2xlIG5vZGUsIGFsbG93IGl0XHJcbiAgICAgICAgaWYgKGlzQXJyYXkodm5vZGUpICYmIHZub2RlLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgICAgICB2bm9kZSA9IHZub2RlWzBdO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyByZXR1cm4gZW1wdHkgdm5vZGUgaW4gY2FzZSB0aGUgcmVuZGVyIGZ1bmN0aW9uIGVycm9yZWQgb3V0XHJcbiAgICAgICAgaWYgKCEodm5vZGUgaW5zdGFuY2VvZiBWTm9kZSkpIHtcclxuICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgaXNBcnJheSh2bm9kZSkpIHtcclxuICAgICAgICAgICAgICAgIHdhcm4kMignTXVsdGlwbGUgcm9vdCBub2RlcyByZXR1cm5lZCBmcm9tIHJlbmRlciBmdW5jdGlvbi4gUmVuZGVyIGZ1bmN0aW9uICcgK1xyXG4gICAgICAgICAgICAgICAgICAgICdzaG91bGQgcmV0dXJuIGEgc2luZ2xlIHJvb3Qgbm9kZS4nLCB2bSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdm5vZGUgPSBjcmVhdGVFbXB0eVZOb2RlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHNldCBwYXJlbnRcclxuICAgICAgICB2bm9kZS5wYXJlbnQgPSBfcGFyZW50Vm5vZGU7XHJcbiAgICAgICAgcmV0dXJuIHZub2RlO1xyXG4gICAgfTtcclxufVxuXG5mdW5jdGlvbiBlbnN1cmVDdG9yKGNvbXAsIGJhc2UpIHtcclxuICAgIGlmIChjb21wLl9fZXNNb2R1bGUgfHwgKGhhc1N5bWJvbCAmJiBjb21wW1N5bWJvbC50b1N0cmluZ1RhZ10gPT09ICdNb2R1bGUnKSkge1xyXG4gICAgICAgIGNvbXAgPSBjb21wLmRlZmF1bHQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaXNPYmplY3QoY29tcCkgPyBiYXNlLmV4dGVuZChjb21wKSA6IGNvbXA7XHJcbn1cclxuZnVuY3Rpb24gY3JlYXRlQXN5bmNQbGFjZWhvbGRlcihmYWN0b3J5LCBkYXRhLCBjb250ZXh0LCBjaGlsZHJlbiwgdGFnKSB7XHJcbiAgICB2YXIgbm9kZSA9IGNyZWF0ZUVtcHR5Vk5vZGUoKTtcclxuICAgIG5vZGUuYXN5bmNGYWN0b3J5ID0gZmFjdG9yeTtcclxuICAgIG5vZGUuYXN5bmNNZXRhID0geyBkYXRhOiBkYXRhLCBjb250ZXh0OiBjb250ZXh0LCBjaGlsZHJlbjogY2hpbGRyZW4sIHRhZzogdGFnIH07XHJcbiAgICByZXR1cm4gbm9kZTtcclxufVxyXG5mdW5jdGlvbiByZXNvbHZlQXN5bmNDb21wb25lbnQoZmFjdG9yeSwgYmFzZUN0b3IpIHtcclxuICAgIGlmIChpc1RydWUoZmFjdG9yeS5lcnJvcikgJiYgaXNEZWYoZmFjdG9yeS5lcnJvckNvbXApKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhY3RvcnkuZXJyb3JDb21wO1xyXG4gICAgfVxyXG4gICAgaWYgKGlzRGVmKGZhY3RvcnkucmVzb2x2ZWQpKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhY3RvcnkucmVzb2x2ZWQ7XHJcbiAgICB9XHJcbiAgICB2YXIgb3duZXIgPSBjdXJyZW50UmVuZGVyaW5nSW5zdGFuY2U7XHJcbiAgICBpZiAob3duZXIgJiYgaXNEZWYoZmFjdG9yeS5vd25lcnMpICYmIGZhY3Rvcnkub3duZXJzLmluZGV4T2Yob3duZXIpID09PSAtMSkge1xyXG4gICAgICAgIC8vIGFscmVhZHkgcGVuZGluZ1xyXG4gICAgICAgIGZhY3Rvcnkub3duZXJzLnB1c2gob3duZXIpO1xyXG4gICAgfVxyXG4gICAgaWYgKGlzVHJ1ZShmYWN0b3J5LmxvYWRpbmcpICYmIGlzRGVmKGZhY3RvcnkubG9hZGluZ0NvbXApKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhY3RvcnkubG9hZGluZ0NvbXA7XHJcbiAgICB9XHJcbiAgICBpZiAob3duZXIgJiYgIWlzRGVmKGZhY3Rvcnkub3duZXJzKSkge1xyXG4gICAgICAgIHZhciBvd25lcnNfMSA9IChmYWN0b3J5Lm93bmVycyA9IFtvd25lcl0pO1xyXG4gICAgICAgIHZhciBzeW5jXzEgPSB0cnVlO1xyXG4gICAgICAgIHZhciB0aW1lckxvYWRpbmdfMSA9IG51bGw7XHJcbiAgICAgICAgdmFyIHRpbWVyVGltZW91dF8xID0gbnVsbDtcclxuICAgICAgICBvd25lci4kb24oJ2hvb2s6ZGVzdHJveWVkJywgZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVtb3ZlJDIob3duZXJzXzEsIG93bmVyKTsgfSk7XHJcbiAgICAgICAgdmFyIGZvcmNlUmVuZGVyXzEgPSBmdW5jdGlvbiAocmVuZGVyQ29tcGxldGVkKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gb3duZXJzXzEubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBvd25lcnNfMVtpXS4kZm9yY2VVcGRhdGUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAocmVuZGVyQ29tcGxldGVkKSB7XHJcbiAgICAgICAgICAgICAgICBvd25lcnNfMS5sZW5ndGggPSAwO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRpbWVyTG9hZGluZ18xICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyTG9hZGluZ18xKTtcclxuICAgICAgICAgICAgICAgICAgICB0aW1lckxvYWRpbmdfMSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAodGltZXJUaW1lb3V0XzEgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZXJUaW1lb3V0XzEpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRpbWVyVGltZW91dF8xID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdmFyIHJlc29sdmUgPSBvbmNlKGZ1bmN0aW9uIChyZXMpIHtcclxuICAgICAgICAgICAgLy8gY2FjaGUgcmVzb2x2ZWRcclxuICAgICAgICAgICAgZmFjdG9yeS5yZXNvbHZlZCA9IGVuc3VyZUN0b3IocmVzLCBiYXNlQ3Rvcik7XHJcbiAgICAgICAgICAgIC8vIGludm9rZSBjYWxsYmFja3Mgb25seSBpZiB0aGlzIGlzIG5vdCBhIHN5bmNocm9ub3VzIHJlc29sdmVcclxuICAgICAgICAgICAgLy8gKGFzeW5jIHJlc29sdmVzIGFyZSBzaGltbWVkIGFzIHN5bmNocm9ub3VzIGR1cmluZyBTU1IpXHJcbiAgICAgICAgICAgIGlmICghc3luY18xKSB7XHJcbiAgICAgICAgICAgICAgICBmb3JjZVJlbmRlcl8xKHRydWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgb3duZXJzXzEubGVuZ3RoID0gMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHZhciByZWplY3RfMSA9IG9uY2UoZnVuY3Rpb24gKHJlYXNvbikge1xyXG4gICAgICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXHJcbiAgICAgICAgICAgICAgICB3YXJuJDIoXCJGYWlsZWQgdG8gcmVzb2x2ZSBhc3luYyBjb21wb25lbnQ6IFwiLmNvbmNhdChTdHJpbmcoZmFjdG9yeSkpICtcclxuICAgICAgICAgICAgICAgICAgICAocmVhc29uID8gXCJcXG5SZWFzb246IFwiLmNvbmNhdChyZWFzb24pIDogJycpKTtcclxuICAgICAgICAgICAgaWYgKGlzRGVmKGZhY3RvcnkuZXJyb3JDb21wKSkge1xyXG4gICAgICAgICAgICAgICAgZmFjdG9yeS5lcnJvciA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBmb3JjZVJlbmRlcl8xKHRydWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdmFyIHJlc18xID0gZmFjdG9yeShyZXNvbHZlLCByZWplY3RfMSk7XHJcbiAgICAgICAgaWYgKGlzT2JqZWN0KHJlc18xKSkge1xyXG4gICAgICAgICAgICBpZiAoaXNQcm9taXNlKHJlc18xKSkge1xyXG4gICAgICAgICAgICAgICAgLy8gKCkgPT4gUHJvbWlzZVxyXG4gICAgICAgICAgICAgICAgaWYgKGlzVW5kZWYoZmFjdG9yeS5yZXNvbHZlZCkpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXNfMS50aGVuKHJlc29sdmUsIHJlamVjdF8xKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChpc1Byb21pc2UocmVzXzEuY29tcG9uZW50KSkge1xyXG4gICAgICAgICAgICAgICAgcmVzXzEuY29tcG9uZW50LnRoZW4ocmVzb2x2ZSwgcmVqZWN0XzEpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzRGVmKHJlc18xLmVycm9yKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZhY3RvcnkuZXJyb3JDb21wID0gZW5zdXJlQ3RvcihyZXNfMS5lcnJvciwgYmFzZUN0b3IpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGlzRGVmKHJlc18xLmxvYWRpbmcpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZmFjdG9yeS5sb2FkaW5nQ29tcCA9IGVuc3VyZUN0b3IocmVzXzEubG9hZGluZywgYmFzZUN0b3IpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXNfMS5kZWxheSA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmYWN0b3J5LmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBOb2RlSlMgdGltZW91dCB0eXBlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVyTG9hZGluZ18xID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lckxvYWRpbmdfMSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNVbmRlZihmYWN0b3J5LnJlc29sdmVkKSAmJiBpc1VuZGVmKGZhY3RvcnkuZXJyb3IpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjdG9yeS5sb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JjZVJlbmRlcl8xKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgcmVzXzEuZGVsYXkgfHwgMjAwKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNEZWYocmVzXzEudGltZW91dCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIE5vZGVKUyB0aW1lb3V0IHR5cGVcclxuICAgICAgICAgICAgICAgICAgICB0aW1lclRpbWVvdXRfMSA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aW1lclRpbWVvdXRfMSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc1VuZGVmKGZhY3RvcnkucmVzb2x2ZWQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3RfMShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gXCJ0aW1lb3V0IChcIi5jb25jYXQocmVzXzEudGltZW91dCwgXCJtcylcIikgOiBudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0sIHJlc18xLnRpbWVvdXQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHN5bmNfMSA9IGZhbHNlO1xyXG4gICAgICAgIC8vIHJldHVybiBpbiBjYXNlIHJlc29sdmVkIHN5bmNocm9ub3VzbHlcclxuICAgICAgICByZXR1cm4gZmFjdG9yeS5sb2FkaW5nID8gZmFjdG9yeS5sb2FkaW5nQ29tcCA6IGZhY3RvcnkucmVzb2x2ZWQ7XHJcbiAgICB9XHJcbn1cblxuZnVuY3Rpb24gZ2V0Rmlyc3RDb21wb25lbnRDaGlsZChjaGlsZHJlbikge1xyXG4gICAgaWYgKGlzQXJyYXkoY2hpbGRyZW4pKSB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgYyA9IGNoaWxkcmVuW2ldO1xyXG4gICAgICAgICAgICBpZiAoaXNEZWYoYykgJiYgKGlzRGVmKGMuY29tcG9uZW50T3B0aW9ucykgfHwgaXNBc3luY1BsYWNlaG9sZGVyKGMpKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cblxuZnVuY3Rpb24gaW5pdEV2ZW50cyh2bSkge1xyXG4gICAgdm0uX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XHJcbiAgICB2bS5faGFzSG9va0V2ZW50ID0gZmFsc2U7XHJcbiAgICAvLyBpbml0IHBhcmVudCBhdHRhY2hlZCBldmVudHNcclxuICAgIHZhciBsaXN0ZW5lcnMgPSB2bS4kb3B0aW9ucy5fcGFyZW50TGlzdGVuZXJzO1xyXG4gICAgaWYgKGxpc3RlbmVycykge1xyXG4gICAgICAgIHVwZGF0ZUNvbXBvbmVudExpc3RlbmVycyh2bSwgbGlzdGVuZXJzKTtcclxuICAgIH1cclxufVxyXG52YXIgdGFyZ2V0JDE7XHJcbmZ1bmN0aW9uIGFkZCQxKGV2ZW50LCBmbikge1xyXG4gICAgdGFyZ2V0JDEuJG9uKGV2ZW50LCBmbik7XHJcbn1cclxuZnVuY3Rpb24gcmVtb3ZlJDEoZXZlbnQsIGZuKSB7XHJcbiAgICB0YXJnZXQkMS4kb2ZmKGV2ZW50LCBmbik7XHJcbn1cclxuZnVuY3Rpb24gY3JlYXRlT25jZUhhbmRsZXIkMShldmVudCwgZm4pIHtcclxuICAgIHZhciBfdGFyZ2V0ID0gdGFyZ2V0JDE7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gb25jZUhhbmRsZXIoKSB7XHJcbiAgICAgICAgdmFyIHJlcyA9IGZuLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XHJcbiAgICAgICAgaWYgKHJlcyAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICBfdGFyZ2V0LiRvZmYoZXZlbnQsIG9uY2VIYW5kbGVyKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG59XHJcbmZ1bmN0aW9uIHVwZGF0ZUNvbXBvbmVudExpc3RlbmVycyh2bSwgbGlzdGVuZXJzLCBvbGRMaXN0ZW5lcnMpIHtcclxuICAgIHRhcmdldCQxID0gdm07XHJcbiAgICB1cGRhdGVMaXN0ZW5lcnMobGlzdGVuZXJzLCBvbGRMaXN0ZW5lcnMgfHwge30sIGFkZCQxLCByZW1vdmUkMSwgY3JlYXRlT25jZUhhbmRsZXIkMSwgdm0pO1xyXG4gICAgdGFyZ2V0JDEgPSB1bmRlZmluZWQ7XHJcbn1cclxuZnVuY3Rpb24gZXZlbnRzTWl4aW4oVnVlKSB7XHJcbiAgICB2YXIgaG9va1JFID0gL15ob29rOi87XHJcbiAgICBWdWUucHJvdG90eXBlLiRvbiA9IGZ1bmN0aW9uIChldmVudCwgZm4pIHtcclxuICAgICAgICB2YXIgdm0gPSB0aGlzO1xyXG4gICAgICAgIGlmIChpc0FycmF5KGV2ZW50KSkge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGV2ZW50Lmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdm0uJG9uKGV2ZW50W2ldLCBmbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICh2bS5fZXZlbnRzW2V2ZW50XSB8fCAodm0uX2V2ZW50c1tldmVudF0gPSBbXSkpLnB1c2goZm4pO1xyXG4gICAgICAgICAgICAvLyBvcHRpbWl6ZSBob29rOmV2ZW50IGNvc3QgYnkgdXNpbmcgYSBib29sZWFuIGZsYWcgbWFya2VkIGF0IHJlZ2lzdHJhdGlvblxyXG4gICAgICAgICAgICAvLyBpbnN0ZWFkIG9mIGEgaGFzaCBsb29rdXBcclxuICAgICAgICAgICAgaWYgKGhvb2tSRS50ZXN0KGV2ZW50KSkge1xyXG4gICAgICAgICAgICAgICAgdm0uX2hhc0hvb2tFdmVudCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHZtO1xyXG4gICAgfTtcclxuICAgIFZ1ZS5wcm90b3R5cGUuJG9uY2UgPSBmdW5jdGlvbiAoZXZlbnQsIGZuKSB7XHJcbiAgICAgICAgdmFyIHZtID0gdGhpcztcclxuICAgICAgICBmdW5jdGlvbiBvbigpIHtcclxuICAgICAgICAgICAgdm0uJG9mZihldmVudCwgb24pO1xyXG4gICAgICAgICAgICBmbi5hcHBseSh2bSwgYXJndW1lbnRzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgb24uZm4gPSBmbjtcclxuICAgICAgICB2bS4kb24oZXZlbnQsIG9uKTtcclxuICAgICAgICByZXR1cm4gdm07XHJcbiAgICB9O1xyXG4gICAgVnVlLnByb3RvdHlwZS4kb2ZmID0gZnVuY3Rpb24gKGV2ZW50LCBmbikge1xyXG4gICAgICAgIHZhciB2bSA9IHRoaXM7XHJcbiAgICAgICAgLy8gYWxsXHJcbiAgICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHZtLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xyXG4gICAgICAgICAgICByZXR1cm4gdm07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGFycmF5IG9mIGV2ZW50c1xyXG4gICAgICAgIGlmIChpc0FycmF5KGV2ZW50KSkge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpXzEgPSAwLCBsID0gZXZlbnQubGVuZ3RoOyBpXzEgPCBsOyBpXzErKykge1xyXG4gICAgICAgICAgICAgICAgdm0uJG9mZihldmVudFtpXzFdLCBmbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHZtO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBzcGVjaWZpYyBldmVudFxyXG4gICAgICAgIHZhciBjYnMgPSB2bS5fZXZlbnRzW2V2ZW50XTtcclxuICAgICAgICBpZiAoIWNicykge1xyXG4gICAgICAgICAgICByZXR1cm4gdm07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghZm4pIHtcclxuICAgICAgICAgICAgdm0uX2V2ZW50c1tldmVudF0gPSBudWxsO1xyXG4gICAgICAgICAgICByZXR1cm4gdm07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHNwZWNpZmljIGhhbmRsZXJcclxuICAgICAgICB2YXIgY2I7XHJcbiAgICAgICAgdmFyIGkgPSBjYnMubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgICAgICAgY2IgPSBjYnNbaV07XHJcbiAgICAgICAgICAgIGlmIChjYiA9PT0gZm4gfHwgY2IuZm4gPT09IGZuKSB7XHJcbiAgICAgICAgICAgICAgICBjYnMuc3BsaWNlKGksIDEpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHZtO1xyXG4gICAgfTtcclxuICAgIFZ1ZS5wcm90b3R5cGUuJGVtaXQgPSBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICB2YXIgdm0gPSB0aGlzO1xyXG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XHJcbiAgICAgICAgICAgIHZhciBsb3dlckNhc2VFdmVudCA9IGV2ZW50LnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgICAgIGlmIChsb3dlckNhc2VFdmVudCAhPT0gZXZlbnQgJiYgdm0uX2V2ZW50c1tsb3dlckNhc2VFdmVudF0pIHtcclxuICAgICAgICAgICAgICAgIHRpcChcIkV2ZW50IFxcXCJcIi5jb25jYXQobG93ZXJDYXNlRXZlbnQsIFwiXFxcIiBpcyBlbWl0dGVkIGluIGNvbXBvbmVudCBcIikgK1xyXG4gICAgICAgICAgICAgICAgICAgIFwiXCIuY29uY2F0KGZvcm1hdENvbXBvbmVudE5hbWUodm0pLCBcIiBidXQgdGhlIGhhbmRsZXIgaXMgcmVnaXN0ZXJlZCBmb3IgXFxcIlwiKS5jb25jYXQoZXZlbnQsIFwiXFxcIi4gXCIpICtcclxuICAgICAgICAgICAgICAgICAgICBcIk5vdGUgdGhhdCBIVE1MIGF0dHJpYnV0ZXMgYXJlIGNhc2UtaW5zZW5zaXRpdmUgYW5kIHlvdSBjYW5ub3QgdXNlIFwiICtcclxuICAgICAgICAgICAgICAgICAgICBcInYtb24gdG8gbGlzdGVuIHRvIGNhbWVsQ2FzZSBldmVudHMgd2hlbiB1c2luZyBpbi1ET00gdGVtcGxhdGVzLiBcIiArXHJcbiAgICAgICAgICAgICAgICAgICAgXCJZb3Ugc2hvdWxkIHByb2JhYmx5IHVzZSBcXFwiXCIuY29uY2F0KGh5cGhlbmF0ZShldmVudCksIFwiXFxcIiBpbnN0ZWFkIG9mIFxcXCJcIikuY29uY2F0KGV2ZW50LCBcIlxcXCIuXCIpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgY2JzID0gdm0uX2V2ZW50c1tldmVudF07XHJcbiAgICAgICAgaWYgKGNicykge1xyXG4gICAgICAgICAgICBjYnMgPSBjYnMubGVuZ3RoID4gMSA/IHRvQXJyYXkoY2JzKSA6IGNicztcclxuICAgICAgICAgICAgdmFyIGFyZ3MgPSB0b0FycmF5KGFyZ3VtZW50cywgMSk7XHJcbiAgICAgICAgICAgIHZhciBpbmZvID0gXCJldmVudCBoYW5kbGVyIGZvciBcXFwiXCIuY29uY2F0KGV2ZW50LCBcIlxcXCJcIik7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gY2JzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgaW52b2tlV2l0aEVycm9ySGFuZGxpbmcoY2JzW2ldLCB2bSwgYXJncywgdm0sIGluZm8pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB2bTtcclxuICAgIH07XHJcbn1cblxudmFyIGFjdGl2ZUluc3RhbmNlID0gbnVsbDtcclxudmFyIGlzVXBkYXRpbmdDaGlsZENvbXBvbmVudCA9IGZhbHNlO1xyXG5mdW5jdGlvbiBzZXRBY3RpdmVJbnN0YW5jZSh2bSkge1xyXG4gICAgdmFyIHByZXZBY3RpdmVJbnN0YW5jZSA9IGFjdGl2ZUluc3RhbmNlO1xyXG4gICAgYWN0aXZlSW5zdGFuY2UgPSB2bTtcclxuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgYWN0aXZlSW5zdGFuY2UgPSBwcmV2QWN0aXZlSW5zdGFuY2U7XHJcbiAgICB9O1xyXG59XHJcbmZ1bmN0aW9uIGluaXRMaWZlY3ljbGUodm0pIHtcclxuICAgIHZhciBvcHRpb25zID0gdm0uJG9wdGlvbnM7XHJcbiAgICAvLyBsb2NhdGUgZmlyc3Qgbm9uLWFic3RyYWN0IHBhcmVudFxyXG4gICAgdmFyIHBhcmVudCA9IG9wdGlvbnMucGFyZW50O1xyXG4gICAgaWYgKHBhcmVudCAmJiAhb3B0aW9ucy5hYnN0cmFjdCkge1xyXG4gICAgICAgIHdoaWxlIChwYXJlbnQuJG9wdGlvbnMuYWJzdHJhY3QgJiYgcGFyZW50LiRwYXJlbnQpIHtcclxuICAgICAgICAgICAgcGFyZW50ID0gcGFyZW50LiRwYXJlbnQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHBhcmVudC4kY2hpbGRyZW4ucHVzaCh2bSk7XHJcbiAgICB9XHJcbiAgICB2bS4kcGFyZW50ID0gcGFyZW50O1xyXG4gICAgdm0uJHJvb3QgPSBwYXJlbnQgPyBwYXJlbnQuJHJvb3QgOiB2bTtcclxuICAgIHZtLiRjaGlsZHJlbiA9IFtdO1xyXG4gICAgdm0uJHJlZnMgPSB7fTtcclxuICAgIHZtLl9wcm92aWRlZCA9IHBhcmVudCA/IHBhcmVudC5fcHJvdmlkZWQgOiBPYmplY3QuY3JlYXRlKG51bGwpO1xyXG4gICAgdm0uX3dhdGNoZXIgPSBudWxsO1xyXG4gICAgdm0uX2luYWN0aXZlID0gbnVsbDtcclxuICAgIHZtLl9kaXJlY3RJbmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgdm0uX2lzTW91bnRlZCA9IGZhbHNlO1xyXG4gICAgdm0uX2lzRGVzdHJveWVkID0gZmFsc2U7XHJcbiAgICB2bS5faXNCZWluZ0Rlc3Ryb3llZCA9IGZhbHNlO1xyXG59XHJcbmZ1bmN0aW9uIGxpZmVjeWNsZU1peGluKFZ1ZSkge1xyXG4gICAgVnVlLnByb3RvdHlwZS5fdXBkYXRlID0gZnVuY3Rpb24gKHZub2RlLCBoeWRyYXRpbmcpIHtcclxuICAgICAgICB2YXIgdm0gPSB0aGlzO1xyXG4gICAgICAgIHZhciBwcmV2RWwgPSB2bS4kZWw7XHJcbiAgICAgICAgdmFyIHByZXZWbm9kZSA9IHZtLl92bm9kZTtcclxuICAgICAgICB2YXIgcmVzdG9yZUFjdGl2ZUluc3RhbmNlID0gc2V0QWN0aXZlSW5zdGFuY2Uodm0pO1xyXG4gICAgICAgIHZtLl92bm9kZSA9IHZub2RlO1xyXG4gICAgICAgIC8vIFZ1ZS5wcm90b3R5cGUuX19wYXRjaF9fIGlzIGluamVjdGVkIGluIGVudHJ5IHBvaW50c1xyXG4gICAgICAgIC8vIGJhc2VkIG9uIHRoZSByZW5kZXJpbmcgYmFja2VuZCB1c2VkLlxyXG4gICAgICAgIGlmICghcHJldlZub2RlKSB7XHJcbiAgICAgICAgICAgIC8vIGluaXRpYWwgcmVuZGVyXHJcbiAgICAgICAgICAgIHZtLiRlbCA9IHZtLl9fcGF0Y2hfXyh2bS4kZWwsIHZub2RlLCBoeWRyYXRpbmcsIGZhbHNlIC8qIHJlbW92ZU9ubHkgKi8pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy8gdXBkYXRlc1xyXG4gICAgICAgICAgICB2bS4kZWwgPSB2bS5fX3BhdGNoX18ocHJldlZub2RlLCB2bm9kZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlc3RvcmVBY3RpdmVJbnN0YW5jZSgpO1xyXG4gICAgICAgIC8vIHVwZGF0ZSBfX3Z1ZV9fIHJlZmVyZW5jZVxyXG4gICAgICAgIGlmIChwcmV2RWwpIHtcclxuICAgICAgICAgICAgcHJldkVsLl9fdnVlX18gPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodm0uJGVsKSB7XHJcbiAgICAgICAgICAgIHZtLiRlbC5fX3Z1ZV9fID0gdm07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGlmIHBhcmVudCBpcyBhbiBIT0MsIHVwZGF0ZSBpdHMgJGVsIGFzIHdlbGxcclxuICAgICAgICB2YXIgd3JhcHBlciA9IHZtO1xyXG4gICAgICAgIHdoaWxlICh3cmFwcGVyICYmXHJcbiAgICAgICAgICAgIHdyYXBwZXIuJHZub2RlICYmXHJcbiAgICAgICAgICAgIHdyYXBwZXIuJHBhcmVudCAmJlxyXG4gICAgICAgICAgICB3cmFwcGVyLiR2bm9kZSA9PT0gd3JhcHBlci4kcGFyZW50Ll92bm9kZSkge1xyXG4gICAgICAgICAgICB3cmFwcGVyLiRwYXJlbnQuJGVsID0gd3JhcHBlci4kZWw7XHJcbiAgICAgICAgICAgIHdyYXBwZXIgPSB3cmFwcGVyLiRwYXJlbnQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHVwZGF0ZWQgaG9vayBpcyBjYWxsZWQgYnkgdGhlIHNjaGVkdWxlciB0byBlbnN1cmUgdGhhdCBjaGlsZHJlbiBhcmVcclxuICAgICAgICAvLyB1cGRhdGVkIGluIGEgcGFyZW50J3MgdXBkYXRlZCBob29rLlxyXG4gICAgfTtcclxuICAgIFZ1ZS5wcm90b3R5cGUuJGZvcmNlVXBkYXRlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciB2bSA9IHRoaXM7XHJcbiAgICAgICAgaWYgKHZtLl93YXRjaGVyKSB7XHJcbiAgICAgICAgICAgIHZtLl93YXRjaGVyLnVwZGF0ZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBWdWUucHJvdG90eXBlLiRkZXN0cm95ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciB2bSA9IHRoaXM7XHJcbiAgICAgICAgaWYgKHZtLl9pc0JlaW5nRGVzdHJveWVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2FsbEhvb2skMSh2bSwgJ2JlZm9yZURlc3Ryb3knKTtcclxuICAgICAgICB2bS5faXNCZWluZ0Rlc3Ryb3llZCA9IHRydWU7XHJcbiAgICAgICAgLy8gcmVtb3ZlIHNlbGYgZnJvbSBwYXJlbnRcclxuICAgICAgICB2YXIgcGFyZW50ID0gdm0uJHBhcmVudDtcclxuICAgICAgICBpZiAocGFyZW50ICYmICFwYXJlbnQuX2lzQmVpbmdEZXN0cm95ZWQgJiYgIXZtLiRvcHRpb25zLmFic3RyYWN0KSB7XHJcbiAgICAgICAgICAgIHJlbW92ZSQyKHBhcmVudC4kY2hpbGRyZW4sIHZtKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gdGVhcmRvd24gc2NvcGUuIHRoaXMgaW5jbHVkZXMgYm90aCB0aGUgcmVuZGVyIHdhdGNoZXIgYW5kIG90aGVyXHJcbiAgICAgICAgLy8gd2F0Y2hlcnMgY3JlYXRlZFxyXG4gICAgICAgIHZtLl9zY29wZS5zdG9wKCk7XHJcbiAgICAgICAgLy8gcmVtb3ZlIHJlZmVyZW5jZSBmcm9tIGRhdGEgb2JcclxuICAgICAgICAvLyBmcm96ZW4gb2JqZWN0IG1heSBub3QgaGF2ZSBvYnNlcnZlci5cclxuICAgICAgICBpZiAodm0uX2RhdGEuX19vYl9fKSB7XHJcbiAgICAgICAgICAgIHZtLl9kYXRhLl9fb2JfXy52bUNvdW50LS07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGNhbGwgdGhlIGxhc3QgaG9vay4uLlxyXG4gICAgICAgIHZtLl9pc0Rlc3Ryb3llZCA9IHRydWU7XHJcbiAgICAgICAgLy8gaW52b2tlIGRlc3Ryb3kgaG9va3Mgb24gY3VycmVudCByZW5kZXJlZCB0cmVlXHJcbiAgICAgICAgdm0uX19wYXRjaF9fKHZtLl92bm9kZSwgbnVsbCk7XHJcbiAgICAgICAgLy8gZmlyZSBkZXN0cm95ZWQgaG9va1xyXG4gICAgICAgIGNhbGxIb29rJDEodm0sICdkZXN0cm95ZWQnKTtcclxuICAgICAgICAvLyB0dXJuIG9mZiBhbGwgaW5zdGFuY2UgbGlzdGVuZXJzLlxyXG4gICAgICAgIHZtLiRvZmYoKTtcclxuICAgICAgICAvLyByZW1vdmUgX192dWVfXyByZWZlcmVuY2VcclxuICAgICAgICBpZiAodm0uJGVsKSB7XHJcbiAgICAgICAgICAgIHZtLiRlbC5fX3Z1ZV9fID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gcmVsZWFzZSBjaXJjdWxhciByZWZlcmVuY2UgKCM2NzU5KVxyXG4gICAgICAgIGlmICh2bS4kdm5vZGUpIHtcclxuICAgICAgICAgICAgdm0uJHZub2RlLnBhcmVudCA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxufVxyXG5mdW5jdGlvbiBtb3VudENvbXBvbmVudCh2bSwgZWwsIGh5ZHJhdGluZykge1xyXG4gICAgdm0uJGVsID0gZWw7XHJcbiAgICBpZiAoIXZtLiRvcHRpb25zLnJlbmRlcikge1xyXG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgaW52YWxpZCB0eXBlXHJcbiAgICAgICAgdm0uJG9wdGlvbnMucmVuZGVyID0gY3JlYXRlRW1wdHlWTm9kZTtcclxuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xyXG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cclxuICAgICAgICAgICAgaWYgKCh2bS4kb3B0aW9ucy50ZW1wbGF0ZSAmJiB2bS4kb3B0aW9ucy50ZW1wbGF0ZS5jaGFyQXQoMCkgIT09ICcjJykgfHxcclxuICAgICAgICAgICAgICAgIHZtLiRvcHRpb25zLmVsIHx8XHJcbiAgICAgICAgICAgICAgICBlbCkge1xyXG4gICAgICAgICAgICAgICAgd2FybiQyKCdZb3UgYXJlIHVzaW5nIHRoZSBydW50aW1lLW9ubHkgYnVpbGQgb2YgVnVlIHdoZXJlIHRoZSB0ZW1wbGF0ZSAnICtcclxuICAgICAgICAgICAgICAgICAgICAnY29tcGlsZXIgaXMgbm90IGF2YWlsYWJsZS4gRWl0aGVyIHByZS1jb21waWxlIHRoZSB0ZW1wbGF0ZXMgaW50byAnICtcclxuICAgICAgICAgICAgICAgICAgICAncmVuZGVyIGZ1bmN0aW9ucywgb3IgdXNlIHRoZSBjb21waWxlci1pbmNsdWRlZCBidWlsZC4nLCB2bSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB3YXJuJDIoJ0ZhaWxlZCB0byBtb3VudCBjb21wb25lbnQ6IHRlbXBsYXRlIG9yIHJlbmRlciBmdW5jdGlvbiBub3QgZGVmaW5lZC4nLCB2bSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBjYWxsSG9vayQxKHZtLCAnYmVmb3JlTW91bnQnKTtcclxuICAgIHZhciB1cGRhdGVDb21wb25lbnQ7XHJcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cclxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGNvbmZpZy5wZXJmb3JtYW5jZSAmJiBtYXJrKSB7XHJcbiAgICAgICAgdXBkYXRlQ29tcG9uZW50ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB2YXIgbmFtZSA9IHZtLl9uYW1lO1xyXG4gICAgICAgICAgICB2YXIgaWQgPSB2bS5fdWlkO1xyXG4gICAgICAgICAgICB2YXIgc3RhcnRUYWcgPSBcInZ1ZS1wZXJmLXN0YXJ0OlwiLmNvbmNhdChpZCk7XHJcbiAgICAgICAgICAgIHZhciBlbmRUYWcgPSBcInZ1ZS1wZXJmLWVuZDpcIi5jb25jYXQoaWQpO1xyXG4gICAgICAgICAgICBtYXJrKHN0YXJ0VGFnKTtcclxuICAgICAgICAgICAgdmFyIHZub2RlID0gdm0uX3JlbmRlcigpO1xyXG4gICAgICAgICAgICBtYXJrKGVuZFRhZyk7XHJcbiAgICAgICAgICAgIG1lYXN1cmUoXCJ2dWUgXCIuY29uY2F0KG5hbWUsIFwiIHJlbmRlclwiKSwgc3RhcnRUYWcsIGVuZFRhZyk7XHJcbiAgICAgICAgICAgIG1hcmsoc3RhcnRUYWcpO1xyXG4gICAgICAgICAgICB2bS5fdXBkYXRlKHZub2RlLCBoeWRyYXRpbmcpO1xyXG4gICAgICAgICAgICBtYXJrKGVuZFRhZyk7XHJcbiAgICAgICAgICAgIG1lYXN1cmUoXCJ2dWUgXCIuY29uY2F0KG5hbWUsIFwiIHBhdGNoXCIpLCBzdGFydFRhZywgZW5kVGFnKTtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdXBkYXRlQ29tcG9uZW50ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB2bS5fdXBkYXRlKHZtLl9yZW5kZXIoKSwgaHlkcmF0aW5nKTtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgdmFyIHdhdGNoZXJPcHRpb25zID0ge1xyXG4gICAgICAgIGJlZm9yZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAodm0uX2lzTW91bnRlZCAmJiAhdm0uX2lzRGVzdHJveWVkKSB7XHJcbiAgICAgICAgICAgICAgICBjYWxsSG9vayQxKHZtLCAnYmVmb3JlVXBkYXRlJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcclxuICAgICAgICB3YXRjaGVyT3B0aW9ucy5vblRyYWNrID0gZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGNhbGxIb29rJDEodm0sICdyZW5kZXJUcmFja2VkJywgW2VdKTsgfTtcclxuICAgICAgICB3YXRjaGVyT3B0aW9ucy5vblRyaWdnZXIgPSBmdW5jdGlvbiAoZSkgeyByZXR1cm4gY2FsbEhvb2skMSh2bSwgJ3JlbmRlclRyaWdnZXJlZCcsIFtlXSk7IH07XHJcbiAgICB9XHJcbiAgICAvLyB3ZSBzZXQgdGhpcyB0byB2bS5fd2F0Y2hlciBpbnNpZGUgdGhlIHdhdGNoZXIncyBjb25zdHJ1Y3RvclxyXG4gICAgLy8gc2luY2UgdGhlIHdhdGNoZXIncyBpbml0aWFsIHBhdGNoIG1heSBjYWxsICRmb3JjZVVwZGF0ZSAoZS5nLiBpbnNpZGUgY2hpbGRcclxuICAgIC8vIGNvbXBvbmVudCdzIG1vdW50ZWQgaG9vayksIHdoaWNoIHJlbGllcyBvbiB2bS5fd2F0Y2hlciBiZWluZyBhbHJlYWR5IGRlZmluZWRcclxuICAgIG5ldyBXYXRjaGVyKHZtLCB1cGRhdGVDb21wb25lbnQsIG5vb3AsIHdhdGNoZXJPcHRpb25zLCB0cnVlIC8qIGlzUmVuZGVyV2F0Y2hlciAqLyk7XHJcbiAgICBoeWRyYXRpbmcgPSBmYWxzZTtcclxuICAgIC8vIGZsdXNoIGJ1ZmZlciBmb3IgZmx1c2g6IFwicHJlXCIgd2F0Y2hlcnMgcXVldWVkIGluIHNldHVwKClcclxuICAgIHZhciBwcmVXYXRjaGVycyA9IHZtLl9wcmVXYXRjaGVycztcclxuICAgIGlmIChwcmVXYXRjaGVycykge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJlV2F0Y2hlcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgcHJlV2F0Y2hlcnNbaV0ucnVuKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gbWFudWFsbHkgbW91bnRlZCBpbnN0YW5jZSwgY2FsbCBtb3VudGVkIG9uIHNlbGZcclxuICAgIC8vIG1vdW50ZWQgaXMgY2FsbGVkIGZvciByZW5kZXItY3JlYXRlZCBjaGlsZCBjb21wb25lbnRzIGluIGl0cyBpbnNlcnRlZCBob29rXHJcbiAgICBpZiAodm0uJHZub2RlID09IG51bGwpIHtcclxuICAgICAgICB2bS5faXNNb3VudGVkID0gdHJ1ZTtcclxuICAgICAgICBjYWxsSG9vayQxKHZtLCAnbW91bnRlZCcpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHZtO1xyXG59XHJcbmZ1bmN0aW9uIHVwZGF0ZUNoaWxkQ29tcG9uZW50KHZtLCBwcm9wc0RhdGEsIGxpc3RlbmVycywgcGFyZW50Vm5vZGUsIHJlbmRlckNoaWxkcmVuKSB7XHJcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xyXG4gICAgICAgIGlzVXBkYXRpbmdDaGlsZENvbXBvbmVudCA9IHRydWU7XHJcbiAgICB9XHJcbiAgICAvLyBkZXRlcm1pbmUgd2hldGhlciBjb21wb25lbnQgaGFzIHNsb3QgY2hpbGRyZW5cclxuICAgIC8vIHdlIG5lZWQgdG8gZG8gdGhpcyBiZWZvcmUgb3ZlcndyaXRpbmcgJG9wdGlvbnMuX3JlbmRlckNoaWxkcmVuLlxyXG4gICAgLy8gY2hlY2sgaWYgdGhlcmUgYXJlIGR5bmFtaWMgc2NvcGVkU2xvdHMgKGhhbmQtd3JpdHRlbiBvciBjb21waWxlZCBidXQgd2l0aFxyXG4gICAgLy8gZHluYW1pYyBzbG90IG5hbWVzKS4gU3RhdGljIHNjb3BlZCBzbG90cyBjb21waWxlZCBmcm9tIHRlbXBsYXRlIGhhcyB0aGVcclxuICAgIC8vIFwiJHN0YWJsZVwiIG1hcmtlci5cclxuICAgIHZhciBuZXdTY29wZWRTbG90cyA9IHBhcmVudFZub2RlLmRhdGEuc2NvcGVkU2xvdHM7XHJcbiAgICB2YXIgb2xkU2NvcGVkU2xvdHMgPSB2bS4kc2NvcGVkU2xvdHM7XHJcbiAgICB2YXIgaGFzRHluYW1pY1Njb3BlZFNsb3QgPSAhISgobmV3U2NvcGVkU2xvdHMgJiYgIW5ld1Njb3BlZFNsb3RzLiRzdGFibGUpIHx8XHJcbiAgICAgICAgKG9sZFNjb3BlZFNsb3RzICE9PSBlbXB0eU9iamVjdCAmJiAhb2xkU2NvcGVkU2xvdHMuJHN0YWJsZSkgfHxcclxuICAgICAgICAobmV3U2NvcGVkU2xvdHMgJiYgdm0uJHNjb3BlZFNsb3RzLiRrZXkgIT09IG5ld1Njb3BlZFNsb3RzLiRrZXkpIHx8XHJcbiAgICAgICAgKCFuZXdTY29wZWRTbG90cyAmJiB2bS4kc2NvcGVkU2xvdHMuJGtleSkpO1xyXG4gICAgLy8gQW55IHN0YXRpYyBzbG90IGNoaWxkcmVuIGZyb20gdGhlIHBhcmVudCBtYXkgaGF2ZSBjaGFuZ2VkIGR1cmluZyBwYXJlbnQnc1xyXG4gICAgLy8gdXBkYXRlLiBEeW5hbWljIHNjb3BlZCBzbG90cyBtYXkgYWxzbyBoYXZlIGNoYW5nZWQuIEluIHN1Y2ggY2FzZXMsIGEgZm9yY2VkXHJcbiAgICAvLyB1cGRhdGUgaXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSBjb3JyZWN0bmVzcy5cclxuICAgIHZhciBuZWVkc0ZvcmNlVXBkYXRlID0gISEocmVuZGVyQ2hpbGRyZW4gfHwgLy8gaGFzIG5ldyBzdGF0aWMgc2xvdHNcclxuICAgICAgICB2bS4kb3B0aW9ucy5fcmVuZGVyQ2hpbGRyZW4gfHwgLy8gaGFzIG9sZCBzdGF0aWMgc2xvdHNcclxuICAgICAgICBoYXNEeW5hbWljU2NvcGVkU2xvdCk7XHJcbiAgICB2YXIgcHJldlZOb2RlID0gdm0uJHZub2RlO1xyXG4gICAgdm0uJG9wdGlvbnMuX3BhcmVudFZub2RlID0gcGFyZW50Vm5vZGU7XHJcbiAgICB2bS4kdm5vZGUgPSBwYXJlbnRWbm9kZTsgLy8gdXBkYXRlIHZtJ3MgcGxhY2Vob2xkZXIgbm9kZSB3aXRob3V0IHJlLXJlbmRlclxyXG4gICAgaWYgKHZtLl92bm9kZSkge1xyXG4gICAgICAgIC8vIHVwZGF0ZSBjaGlsZCB0cmVlJ3MgcGFyZW50XHJcbiAgICAgICAgdm0uX3Zub2RlLnBhcmVudCA9IHBhcmVudFZub2RlO1xyXG4gICAgfVxyXG4gICAgdm0uJG9wdGlvbnMuX3JlbmRlckNoaWxkcmVuID0gcmVuZGVyQ2hpbGRyZW47XHJcbiAgICAvLyB1cGRhdGUgJGF0dHJzIGFuZCAkbGlzdGVuZXJzIGhhc2hcclxuICAgIC8vIHRoZXNlIGFyZSBhbHNvIHJlYWN0aXZlIHNvIHRoZXkgbWF5IHRyaWdnZXIgY2hpbGQgdXBkYXRlIGlmIHRoZSBjaGlsZFxyXG4gICAgLy8gdXNlZCB0aGVtIGR1cmluZyByZW5kZXJcclxuICAgIHZhciBhdHRycyA9IHBhcmVudFZub2RlLmRhdGEuYXR0cnMgfHwgZW1wdHlPYmplY3Q7XHJcbiAgICBpZiAodm0uX2F0dHJzUHJveHkpIHtcclxuICAgICAgICAvLyBmb3JjZSB1cGRhdGUgaWYgYXR0cnMgYXJlIGFjY2Vzc2VkIGFuZCBoYXMgY2hhbmdlZCBzaW5jZSBpdCBtYXkgYmVcclxuICAgICAgICAvLyBwYXNzZWQgdG8gYSBjaGlsZCBjb21wb25lbnQuXHJcbiAgICAgICAgaWYgKHN5bmNTZXR1cFByb3h5KHZtLl9hdHRyc1Byb3h5LCBhdHRycywgKHByZXZWTm9kZS5kYXRhICYmIHByZXZWTm9kZS5kYXRhLmF0dHJzKSB8fCBlbXB0eU9iamVjdCwgdm0sICckYXR0cnMnKSkge1xyXG4gICAgICAgICAgICBuZWVkc0ZvcmNlVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICB2bS4kYXR0cnMgPSBhdHRycztcclxuICAgIC8vIHVwZGF0ZSBsaXN0ZW5lcnNcclxuICAgIGxpc3RlbmVycyA9IGxpc3RlbmVycyB8fCBlbXB0eU9iamVjdDtcclxuICAgIHZhciBwcmV2TGlzdGVuZXJzID0gdm0uJG9wdGlvbnMuX3BhcmVudExpc3RlbmVycztcclxuICAgIGlmICh2bS5fbGlzdGVuZXJzUHJveHkpIHtcclxuICAgICAgICBzeW5jU2V0dXBQcm94eSh2bS5fbGlzdGVuZXJzUHJveHksIGxpc3RlbmVycywgcHJldkxpc3RlbmVycyB8fCBlbXB0eU9iamVjdCwgdm0sICckbGlzdGVuZXJzJyk7XHJcbiAgICB9XHJcbiAgICB2bS4kbGlzdGVuZXJzID0gdm0uJG9wdGlvbnMuX3BhcmVudExpc3RlbmVycyA9IGxpc3RlbmVycztcclxuICAgIHVwZGF0ZUNvbXBvbmVudExpc3RlbmVycyh2bSwgbGlzdGVuZXJzLCBwcmV2TGlzdGVuZXJzKTtcclxuICAgIC8vIHVwZGF0ZSBwcm9wc1xyXG4gICAgaWYgKHByb3BzRGF0YSAmJiB2bS4kb3B0aW9ucy5wcm9wcykge1xyXG4gICAgICAgIHRvZ2dsZU9ic2VydmluZyhmYWxzZSk7XHJcbiAgICAgICAgdmFyIHByb3BzID0gdm0uX3Byb3BzO1xyXG4gICAgICAgIHZhciBwcm9wS2V5cyA9IHZtLiRvcHRpb25zLl9wcm9wS2V5cyB8fCBbXTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BLZXlzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBrZXkgPSBwcm9wS2V5c1tpXTtcclxuICAgICAgICAgICAgdmFyIHByb3BPcHRpb25zID0gdm0uJG9wdGlvbnMucHJvcHM7IC8vIHd0ZiBmbG93P1xyXG4gICAgICAgICAgICBwcm9wc1trZXldID0gdmFsaWRhdGVQcm9wKGtleSwgcHJvcE9wdGlvbnMsIHByb3BzRGF0YSwgdm0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0b2dnbGVPYnNlcnZpbmcodHJ1ZSk7XHJcbiAgICAgICAgLy8ga2VlcCBhIGNvcHkgb2YgcmF3IHByb3BzRGF0YVxyXG4gICAgICAgIHZtLiRvcHRpb25zLnByb3BzRGF0YSA9IHByb3BzRGF0YTtcclxuICAgIH1cclxuICAgIC8vIHJlc29sdmUgc2xvdHMgKyBmb3JjZSB1cGRhdGUgaWYgaGFzIGNoaWxkcmVuXHJcbiAgICBpZiAobmVlZHNGb3JjZVVwZGF0ZSkge1xyXG4gICAgICAgIHZtLiRzbG90cyA9IHJlc29sdmVTbG90cyhyZW5kZXJDaGlsZHJlbiwgcGFyZW50Vm5vZGUuY29udGV4dCk7XHJcbiAgICAgICAgdm0uJGZvcmNlVXBkYXRlKCk7XHJcbiAgICB9XHJcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xyXG4gICAgICAgIGlzVXBkYXRpbmdDaGlsZENvbXBvbmVudCA9IGZhbHNlO1xyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIGlzSW5JbmFjdGl2ZVRyZWUodm0pIHtcclxuICAgIHdoaWxlICh2bSAmJiAodm0gPSB2bS4kcGFyZW50KSkge1xyXG4gICAgICAgIGlmICh2bS5faW5hY3RpdmUpXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG59XHJcbmZ1bmN0aW9uIGFjdGl2YXRlQ2hpbGRDb21wb25lbnQodm0sIGRpcmVjdCkge1xyXG4gICAgaWYgKGRpcmVjdCkge1xyXG4gICAgICAgIHZtLl9kaXJlY3RJbmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgIGlmIChpc0luSW5hY3RpdmVUcmVlKHZtKSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodm0uX2RpcmVjdEluYWN0aXZlKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKHZtLl9pbmFjdGl2ZSB8fCB2bS5faW5hY3RpdmUgPT09IG51bGwpIHtcclxuICAgICAgICB2bS5faW5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZtLiRjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBhY3RpdmF0ZUNoaWxkQ29tcG9uZW50KHZtLiRjaGlsZHJlbltpXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhbGxIb29rJDEodm0sICdhY3RpdmF0ZWQnKTtcclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBkZWFjdGl2YXRlQ2hpbGRDb21wb25lbnQodm0sIGRpcmVjdCkge1xyXG4gICAgaWYgKGRpcmVjdCkge1xyXG4gICAgICAgIHZtLl9kaXJlY3RJbmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgaWYgKGlzSW5JbmFjdGl2ZVRyZWUodm0pKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoIXZtLl9pbmFjdGl2ZSkge1xyXG4gICAgICAgIHZtLl9pbmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2bS4kY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgZGVhY3RpdmF0ZUNoaWxkQ29tcG9uZW50KHZtLiRjaGlsZHJlbltpXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhbGxIb29rJDEodm0sICdkZWFjdGl2YXRlZCcpO1xyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIGNhbGxIb29rJDEodm0sIGhvb2ssIGFyZ3MsIHNldENvbnRleHQpIHtcclxuICAgIGlmIChzZXRDb250ZXh0ID09PSB2b2lkIDApIHsgc2V0Q29udGV4dCA9IHRydWU7IH1cclxuICAgIC8vICM3NTczIGRpc2FibGUgZGVwIGNvbGxlY3Rpb24gd2hlbiBpbnZva2luZyBsaWZlY3ljbGUgaG9va3NcclxuICAgIHB1c2hUYXJnZXQoKTtcclxuICAgIHZhciBwcmV2ID0gY3VycmVudEluc3RhbmNlO1xyXG4gICAgc2V0Q29udGV4dCAmJiBzZXRDdXJyZW50SW5zdGFuY2Uodm0pO1xyXG4gICAgdmFyIGhhbmRsZXJzID0gdm0uJG9wdGlvbnNbaG9va107XHJcbiAgICB2YXIgaW5mbyA9IFwiXCIuY29uY2F0KGhvb2ssIFwiIGhvb2tcIik7XHJcbiAgICBpZiAoaGFuZGxlcnMpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMCwgaiA9IGhhbmRsZXJzLmxlbmd0aDsgaSA8IGo7IGkrKykge1xyXG4gICAgICAgICAgICBpbnZva2VXaXRoRXJyb3JIYW5kbGluZyhoYW5kbGVyc1tpXSwgdm0sIGFyZ3MgfHwgbnVsbCwgdm0sIGluZm8pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh2bS5faGFzSG9va0V2ZW50KSB7XHJcbiAgICAgICAgdm0uJGVtaXQoJ2hvb2s6JyArIGhvb2spO1xyXG4gICAgfVxyXG4gICAgc2V0Q29udGV4dCAmJiBzZXRDdXJyZW50SW5zdGFuY2UocHJldik7XHJcbiAgICBwb3BUYXJnZXQoKTtcclxufVxuXG52YXIgTUFYX1VQREFURV9DT1VOVCA9IDEwMDtcclxudmFyIHF1ZXVlID0gW107XHJcbnZhciBhY3RpdmF0ZWRDaGlsZHJlbiA9IFtdO1xyXG52YXIgaGFzID0ge307XHJcbnZhciBjaXJjdWxhciA9IHt9O1xyXG52YXIgd2FpdGluZyA9IGZhbHNlO1xyXG52YXIgZmx1c2hpbmcgPSBmYWxzZTtcclxudmFyIGluZGV4JDEgPSAwO1xyXG4vKipcclxuICogUmVzZXQgdGhlIHNjaGVkdWxlcidzIHN0YXRlLlxyXG4gKi9cclxuZnVuY3Rpb24gcmVzZXRTY2hlZHVsZXJTdGF0ZSgpIHtcclxuICAgIGluZGV4JDEgPSBxdWV1ZS5sZW5ndGggPSBhY3RpdmF0ZWRDaGlsZHJlbi5sZW5ndGggPSAwO1xyXG4gICAgaGFzID0ge307XHJcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xyXG4gICAgICAgIGNpcmN1bGFyID0ge307XHJcbiAgICB9XHJcbiAgICB3YWl0aW5nID0gZmx1c2hpbmcgPSBmYWxzZTtcclxufVxyXG4vLyBBc3luYyBlZGdlIGNhc2UgIzY1NjYgcmVxdWlyZXMgc2F2aW5nIHRoZSB0aW1lc3RhbXAgd2hlbiBldmVudCBsaXN0ZW5lcnMgYXJlXHJcbi8vIGF0dGFjaGVkLiBIb3dldmVyLCBjYWxsaW5nIHBlcmZvcm1hbmNlLm5vdygpIGhhcyBhIHBlcmYgb3ZlcmhlYWQgZXNwZWNpYWxseVxyXG4vLyBpZiB0aGUgcGFnZSBoYXMgdGhvdXNhbmRzIG9mIGV2ZW50IGxpc3RlbmVycy4gSW5zdGVhZCwgd2UgdGFrZSBhIHRpbWVzdGFtcFxyXG4vLyBldmVyeSB0aW1lIHRoZSBzY2hlZHVsZXIgZmx1c2hlcyBhbmQgdXNlIHRoYXQgZm9yIGFsbCBldmVudCBsaXN0ZW5lcnNcclxuLy8gYXR0YWNoZWQgZHVyaW5nIHRoYXQgZmx1c2guXHJcbnZhciBjdXJyZW50Rmx1c2hUaW1lc3RhbXAgPSAwO1xyXG4vLyBBc3luYyBlZGdlIGNhc2UgZml4IHJlcXVpcmVzIHN0b3JpbmcgYW4gZXZlbnQgbGlzdGVuZXIncyBhdHRhY2ggdGltZXN0YW1wLlxyXG52YXIgZ2V0Tm93ID0gRGF0ZS5ub3c7XHJcbi8vIERldGVybWluZSB3aGF0IGV2ZW50IHRpbWVzdGFtcCB0aGUgYnJvd3NlciBpcyB1c2luZy4gQW5ub3lpbmdseSwgdGhlXHJcbi8vIHRpbWVzdGFtcCBjYW4gZWl0aGVyIGJlIGhpLXJlcyAocmVsYXRpdmUgdG8gcGFnZSBsb2FkKSBvciBsb3ctcmVzXHJcbi8vIChyZWxhdGl2ZSB0byBVTklYIGVwb2NoKSwgc28gaW4gb3JkZXIgdG8gY29tcGFyZSB0aW1lIHdlIGhhdmUgdG8gdXNlIHRoZVxyXG4vLyBzYW1lIHRpbWVzdGFtcCB0eXBlIHdoZW4gc2F2aW5nIHRoZSBmbHVzaCB0aW1lc3RhbXAuXHJcbi8vIEFsbCBJRSB2ZXJzaW9ucyB1c2UgbG93LXJlcyBldmVudCB0aW1lc3RhbXBzLCBhbmQgaGF2ZSBwcm9ibGVtYXRpYyBjbG9ja1xyXG4vLyBpbXBsZW1lbnRhdGlvbnMgKCM5NjMyKVxyXG5pZiAoaW5Ccm93c2VyICYmICFpc0lFKSB7XHJcbiAgICB2YXIgcGVyZm9ybWFuY2VfMSA9IHdpbmRvdy5wZXJmb3JtYW5jZTtcclxuICAgIGlmIChwZXJmb3JtYW5jZV8xICYmXHJcbiAgICAgICAgdHlwZW9mIHBlcmZvcm1hbmNlXzEubm93ID09PSAnZnVuY3Rpb24nICYmXHJcbiAgICAgICAgZ2V0Tm93KCkgPiBkb2N1bWVudC5jcmVhdGVFdmVudCgnRXZlbnQnKS50aW1lU3RhbXApIHtcclxuICAgICAgICAvLyBpZiB0aGUgZXZlbnQgdGltZXN0YW1wLCBhbHRob3VnaCBldmFsdWF0ZWQgQUZURVIgdGhlIERhdGUubm93KCksIGlzXHJcbiAgICAgICAgLy8gc21hbGxlciB0aGFuIGl0LCBpdCBtZWFucyB0aGUgZXZlbnQgaXMgdXNpbmcgYSBoaS1yZXMgdGltZXN0YW1wLFxyXG4gICAgICAgIC8vIGFuZCB3ZSBuZWVkIHRvIHVzZSB0aGUgaGktcmVzIHZlcnNpb24gZm9yIGV2ZW50IGxpc3RlbmVyIHRpbWVzdGFtcHMgYXNcclxuICAgICAgICAvLyB3ZWxsLlxyXG4gICAgICAgIGdldE5vdyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHBlcmZvcm1hbmNlXzEubm93KCk7IH07XHJcbiAgICB9XHJcbn1cclxudmFyIHNvcnRDb21wYXJlRm4gPSBmdW5jdGlvbiAoYSwgYikge1xyXG4gICAgaWYgKGEucG9zdCkge1xyXG4gICAgICAgIGlmICghYi5wb3N0KVxyXG4gICAgICAgICAgICByZXR1cm4gMTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGIucG9zdCkge1xyXG4gICAgICAgIHJldHVybiAtMTtcclxuICAgIH1cclxuICAgIHJldHVybiBhLmlkIC0gYi5pZDtcclxufTtcclxuLyoqXHJcbiAqIEZsdXNoIGJvdGggcXVldWVzIGFuZCBydW4gdGhlIHdhdGNoZXJzLlxyXG4gKi9cclxuZnVuY3Rpb24gZmx1c2hTY2hlZHVsZXJRdWV1ZSgpIHtcclxuICAgIGN1cnJlbnRGbHVzaFRpbWVzdGFtcCA9IGdldE5vdygpO1xyXG4gICAgZmx1c2hpbmcgPSB0cnVlO1xyXG4gICAgdmFyIHdhdGNoZXIsIGlkO1xyXG4gICAgLy8gU29ydCBxdWV1ZSBiZWZvcmUgZmx1c2guXHJcbiAgICAvLyBUaGlzIGVuc3VyZXMgdGhhdDpcclxuICAgIC8vIDEuIENvbXBvbmVudHMgYXJlIHVwZGF0ZWQgZnJvbSBwYXJlbnQgdG8gY2hpbGQuIChiZWNhdXNlIHBhcmVudCBpcyBhbHdheXNcclxuICAgIC8vICAgIGNyZWF0ZWQgYmVmb3JlIHRoZSBjaGlsZClcclxuICAgIC8vIDIuIEEgY29tcG9uZW50J3MgdXNlciB3YXRjaGVycyBhcmUgcnVuIGJlZm9yZSBpdHMgcmVuZGVyIHdhdGNoZXIgKGJlY2F1c2VcclxuICAgIC8vICAgIHVzZXIgd2F0Y2hlcnMgYXJlIGNyZWF0ZWQgYmVmb3JlIHRoZSByZW5kZXIgd2F0Y2hlcilcclxuICAgIC8vIDMuIElmIGEgY29tcG9uZW50IGlzIGRlc3Ryb3llZCBkdXJpbmcgYSBwYXJlbnQgY29tcG9uZW50J3Mgd2F0Y2hlciBydW4sXHJcbiAgICAvLyAgICBpdHMgd2F0Y2hlcnMgY2FuIGJlIHNraXBwZWQuXHJcbiAgICBxdWV1ZS5zb3J0KHNvcnRDb21wYXJlRm4pO1xyXG4gICAgLy8gZG8gbm90IGNhY2hlIGxlbmd0aCBiZWNhdXNlIG1vcmUgd2F0Y2hlcnMgbWlnaHQgYmUgcHVzaGVkXHJcbiAgICAvLyBhcyB3ZSBydW4gZXhpc3Rpbmcgd2F0Y2hlcnNcclxuICAgIGZvciAoaW5kZXgkMSA9IDA7IGluZGV4JDEgPCBxdWV1ZS5sZW5ndGg7IGluZGV4JDErKykge1xyXG4gICAgICAgIHdhdGNoZXIgPSBxdWV1ZVtpbmRleCQxXTtcclxuICAgICAgICBpZiAod2F0Y2hlci5iZWZvcmUpIHtcclxuICAgICAgICAgICAgd2F0Y2hlci5iZWZvcmUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWQgPSB3YXRjaGVyLmlkO1xyXG4gICAgICAgIGhhc1tpZF0gPSBudWxsO1xyXG4gICAgICAgIHdhdGNoZXIucnVuKCk7XHJcbiAgICAgICAgLy8gaW4gZGV2IGJ1aWxkLCBjaGVjayBhbmQgc3RvcCBjaXJjdWxhciB1cGRhdGVzLlxyXG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGhhc1tpZF0gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBjaXJjdWxhcltpZF0gPSAoY2lyY3VsYXJbaWRdIHx8IDApICsgMTtcclxuICAgICAgICAgICAgaWYgKGNpcmN1bGFyW2lkXSA+IE1BWF9VUERBVEVfQ09VTlQpIHtcclxuICAgICAgICAgICAgICAgIHdhcm4kMignWW91IG1heSBoYXZlIGFuIGluZmluaXRlIHVwZGF0ZSBsb29wICcgK1xyXG4gICAgICAgICAgICAgICAgICAgICh3YXRjaGVyLnVzZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyBcImluIHdhdGNoZXIgd2l0aCBleHByZXNzaW9uIFxcXCJcIi5jb25jYXQod2F0Y2hlci5leHByZXNzaW9uLCBcIlxcXCJcIilcclxuICAgICAgICAgICAgICAgICAgICAgICAgOiBcImluIGEgY29tcG9uZW50IHJlbmRlciBmdW5jdGlvbi5cIiksIHdhdGNoZXIudm0pO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBrZWVwIGNvcGllcyBvZiBwb3N0IHF1ZXVlcyBiZWZvcmUgcmVzZXR0aW5nIHN0YXRlXHJcbiAgICB2YXIgYWN0aXZhdGVkUXVldWUgPSBhY3RpdmF0ZWRDaGlsZHJlbi5zbGljZSgpO1xyXG4gICAgdmFyIHVwZGF0ZWRRdWV1ZSA9IHF1ZXVlLnNsaWNlKCk7XHJcbiAgICByZXNldFNjaGVkdWxlclN0YXRlKCk7XHJcbiAgICAvLyBjYWxsIGNvbXBvbmVudCB1cGRhdGVkIGFuZCBhY3RpdmF0ZWQgaG9va3NcclxuICAgIGNhbGxBY3RpdmF0ZWRIb29rcyhhY3RpdmF0ZWRRdWV1ZSk7XHJcbiAgICBjYWxsVXBkYXRlZEhvb2tzKHVwZGF0ZWRRdWV1ZSk7XHJcbiAgICAvLyBkZXZ0b29sIGhvb2tcclxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xyXG4gICAgaWYgKGRldnRvb2xzICYmIGNvbmZpZy5kZXZ0b29scykge1xyXG4gICAgICAgIGRldnRvb2xzLmVtaXQoJ2ZsdXNoJyk7XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gY2FsbFVwZGF0ZWRIb29rcyhxdWV1ZSkge1xyXG4gICAgdmFyIGkgPSBxdWV1ZS5sZW5ndGg7XHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgICAgdmFyIHdhdGNoZXIgPSBxdWV1ZVtpXTtcclxuICAgICAgICB2YXIgdm0gPSB3YXRjaGVyLnZtO1xyXG4gICAgICAgIGlmICh2bSAmJiB2bS5fd2F0Y2hlciA9PT0gd2F0Y2hlciAmJiB2bS5faXNNb3VudGVkICYmICF2bS5faXNEZXN0cm95ZWQpIHtcclxuICAgICAgICAgICAgY2FsbEhvb2skMSh2bSwgJ3VwZGF0ZWQnKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIFF1ZXVlIGEga2VwdC1hbGl2ZSBjb21wb25lbnQgdGhhdCB3YXMgYWN0aXZhdGVkIGR1cmluZyBwYXRjaC5cclxuICogVGhlIHF1ZXVlIHdpbGwgYmUgcHJvY2Vzc2VkIGFmdGVyIHRoZSBlbnRpcmUgdHJlZSBoYXMgYmVlbiBwYXRjaGVkLlxyXG4gKi9cclxuZnVuY3Rpb24gcXVldWVBY3RpdmF0ZWRDb21wb25lbnQodm0pIHtcclxuICAgIC8vIHNldHRpbmcgX2luYWN0aXZlIHRvIGZhbHNlIGhlcmUgc28gdGhhdCBhIHJlbmRlciBmdW5jdGlvbiBjYW5cclxuICAgIC8vIHJlbHkgb24gY2hlY2tpbmcgd2hldGhlciBpdCdzIGluIGFuIGluYWN0aXZlIHRyZWUgKGUuZy4gcm91dGVyLXZpZXcpXHJcbiAgICB2bS5faW5hY3RpdmUgPSBmYWxzZTtcclxuICAgIGFjdGl2YXRlZENoaWxkcmVuLnB1c2godm0pO1xyXG59XHJcbmZ1bmN0aW9uIGNhbGxBY3RpdmF0ZWRIb29rcyhxdWV1ZSkge1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWV1ZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHF1ZXVlW2ldLl9pbmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgYWN0aXZhdGVDaGlsZENvbXBvbmVudChxdWV1ZVtpXSwgdHJ1ZSAvKiB0cnVlICovKTtcclxuICAgIH1cclxufVxyXG4vKipcclxuICogUHVzaCBhIHdhdGNoZXIgaW50byB0aGUgd2F0Y2hlciBxdWV1ZS5cclxuICogSm9icyB3aXRoIGR1cGxpY2F0ZSBJRHMgd2lsbCBiZSBza2lwcGVkIHVubGVzcyBpdCdzXHJcbiAqIHB1c2hlZCB3aGVuIHRoZSBxdWV1ZSBpcyBiZWluZyBmbHVzaGVkLlxyXG4gKi9cclxuZnVuY3Rpb24gcXVldWVXYXRjaGVyKHdhdGNoZXIpIHtcclxuICAgIHZhciBpZCA9IHdhdGNoZXIuaWQ7XHJcbiAgICBpZiAoaGFzW2lkXSAhPSBudWxsKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKHdhdGNoZXIgPT09IERlcC50YXJnZXQgJiYgd2F0Y2hlci5ub1JlY3Vyc2UpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBoYXNbaWRdID0gdHJ1ZTtcclxuICAgIGlmICghZmx1c2hpbmcpIHtcclxuICAgICAgICBxdWV1ZS5wdXNoKHdhdGNoZXIpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgLy8gaWYgYWxyZWFkeSBmbHVzaGluZywgc3BsaWNlIHRoZSB3YXRjaGVyIGJhc2VkIG9uIGl0cyBpZFxyXG4gICAgICAgIC8vIGlmIGFscmVhZHkgcGFzdCBpdHMgaWQsIGl0IHdpbGwgYmUgcnVuIG5leHQgaW1tZWRpYXRlbHkuXHJcbiAgICAgICAgdmFyIGkgPSBxdWV1ZS5sZW5ndGggLSAxO1xyXG4gICAgICAgIHdoaWxlIChpID4gaW5kZXgkMSAmJiBxdWV1ZVtpXS5pZCA+IHdhdGNoZXIuaWQpIHtcclxuICAgICAgICAgICAgaS0tO1xyXG4gICAgICAgIH1cclxuICAgICAgICBxdWV1ZS5zcGxpY2UoaSArIDEsIDAsIHdhdGNoZXIpO1xyXG4gICAgfVxyXG4gICAgLy8gcXVldWUgdGhlIGZsdXNoXHJcbiAgICBpZiAoIXdhaXRpbmcpIHtcclxuICAgICAgICB3YWl0aW5nID0gdHJ1ZTtcclxuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhY29uZmlnLmFzeW5jKSB7XHJcbiAgICAgICAgICAgIGZsdXNoU2NoZWR1bGVyUXVldWUoKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBuZXh0VGljayhmbHVzaFNjaGVkdWxlclF1ZXVlKTtcclxuICAgIH1cclxufVxuXG52YXIgV0FUQ0hFUiA9IFwid2F0Y2hlclwiO1xyXG52YXIgV0FUQ0hFUl9DQiA9IFwiXCIuY29uY2F0KFdBVENIRVIsIFwiIGNhbGxiYWNrXCIpO1xyXG52YXIgV0FUQ0hFUl9HRVRURVIgPSBcIlwiLmNvbmNhdChXQVRDSEVSLCBcIiBnZXR0ZXJcIik7XHJcbnZhciBXQVRDSEVSX0NMRUFOVVAgPSBcIlwiLmNvbmNhdChXQVRDSEVSLCBcIiBjbGVhbnVwXCIpO1xyXG4vLyBTaW1wbGUgZWZmZWN0LlxyXG5mdW5jdGlvbiB3YXRjaEVmZmVjdChlZmZlY3QsIG9wdGlvbnMpIHtcclxuICAgIHJldHVybiBkb1dhdGNoKGVmZmVjdCwgbnVsbCwgb3B0aW9ucyk7XHJcbn1cclxuZnVuY3Rpb24gd2F0Y2hQb3N0RWZmZWN0KGVmZmVjdCwgb3B0aW9ucykge1xyXG4gICAgcmV0dXJuIGRvV2F0Y2goZWZmZWN0LCBudWxsLCAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJ1xyXG4gICAgICAgID8gX19hc3NpZ24oX19hc3NpZ24oe30sIG9wdGlvbnMpLCB7IGZsdXNoOiAncG9zdCcgfSkgOiB7IGZsdXNoOiAncG9zdCcgfSkpO1xyXG59XHJcbmZ1bmN0aW9uIHdhdGNoU3luY0VmZmVjdChlZmZlY3QsIG9wdGlvbnMpIHtcclxuICAgIHJldHVybiBkb1dhdGNoKGVmZmVjdCwgbnVsbCwgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbidcclxuICAgICAgICA/IF9fYXNzaWduKF9fYXNzaWduKHt9LCBvcHRpb25zKSwgeyBmbHVzaDogJ3N5bmMnIH0pIDogeyBmbHVzaDogJ3N5bmMnIH0pKTtcclxufVxyXG4vLyBpbml0aWFsIHZhbHVlIGZvciB3YXRjaGVycyB0byB0cmlnZ2VyIG9uIHVuZGVmaW5lZCBpbml0aWFsIHZhbHVlc1xyXG52YXIgSU5JVElBTF9XQVRDSEVSX1ZBTFVFID0ge307XHJcbi8vIGltcGxlbWVudGF0aW9uXHJcbmZ1bmN0aW9uIHdhdGNoKHNvdXJjZSwgY2IsIG9wdGlvbnMpIHtcclxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHR5cGVvZiBjYiAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIHdhcm4kMihcImB3YXRjaChmbiwgb3B0aW9ucz8pYCBzaWduYXR1cmUgaGFzIGJlZW4gbW92ZWQgdG8gYSBzZXBhcmF0ZSBBUEkuIFwiICtcclxuICAgICAgICAgICAgXCJVc2UgYHdhdGNoRWZmZWN0KGZuLCBvcHRpb25zPylgIGluc3RlYWQuIGB3YXRjaGAgbm93IG9ubHkgXCIgK1xyXG4gICAgICAgICAgICBcInN1cHBvcnRzIGB3YXRjaChzb3VyY2UsIGNiLCBvcHRpb25zPykgc2lnbmF0dXJlLlwiKTtcclxuICAgIH1cclxuICAgIHJldHVybiBkb1dhdGNoKHNvdXJjZSwgY2IsIG9wdGlvbnMpO1xyXG59XHJcbmZ1bmN0aW9uIGRvV2F0Y2goc291cmNlLCBjYiwgX2EpIHtcclxuICAgIHZhciBfYiA9IF9hID09PSB2b2lkIDAgPyBlbXB0eU9iamVjdCA6IF9hLCBpbW1lZGlhdGUgPSBfYi5pbW1lZGlhdGUsIGRlZXAgPSBfYi5kZWVwLCBfYyA9IF9iLmZsdXNoLCBmbHVzaCA9IF9jID09PSB2b2lkIDAgPyAncHJlJyA6IF9jLCBvblRyYWNrID0gX2Iub25UcmFjaywgb25UcmlnZ2VyID0gX2Iub25UcmlnZ2VyO1xyXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIWNiKSB7XHJcbiAgICAgICAgaWYgKGltbWVkaWF0ZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHdhcm4kMihcIndhdGNoKCkgXFxcImltbWVkaWF0ZVxcXCIgb3B0aW9uIGlzIG9ubHkgcmVzcGVjdGVkIHdoZW4gdXNpbmcgdGhlIFwiICtcclxuICAgICAgICAgICAgICAgIFwid2F0Y2goc291cmNlLCBjYWxsYmFjaywgb3B0aW9ucz8pIHNpZ25hdHVyZS5cIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChkZWVwICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgd2FybiQyKFwid2F0Y2goKSBcXFwiZGVlcFxcXCIgb3B0aW9uIGlzIG9ubHkgcmVzcGVjdGVkIHdoZW4gdXNpbmcgdGhlIFwiICtcclxuICAgICAgICAgICAgICAgIFwid2F0Y2goc291cmNlLCBjYWxsYmFjaywgb3B0aW9ucz8pIHNpZ25hdHVyZS5cIik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgdmFyIHdhcm5JbnZhbGlkU291cmNlID0gZnVuY3Rpb24gKHMpIHtcclxuICAgICAgICB3YXJuJDIoXCJJbnZhbGlkIHdhdGNoIHNvdXJjZTogXCIuY29uY2F0KHMsIFwiLiBBIHdhdGNoIHNvdXJjZSBjYW4gb25seSBiZSBhIGdldHRlci9lZmZlY3QgXCIpICtcclxuICAgICAgICAgICAgXCJmdW5jdGlvbiwgYSByZWYsIGEgcmVhY3RpdmUgb2JqZWN0LCBvciBhbiBhcnJheSBvZiB0aGVzZSB0eXBlcy5cIik7XHJcbiAgICB9O1xyXG4gICAgdmFyIGluc3RhbmNlID0gY3VycmVudEluc3RhbmNlO1xyXG4gICAgdmFyIGNhbGwgPSBmdW5jdGlvbiAoZm4sIHR5cGUsIGFyZ3MpIHtcclxuICAgICAgICBpZiAoYXJncyA9PT0gdm9pZCAwKSB7IGFyZ3MgPSBudWxsOyB9XHJcbiAgICAgICAgcmV0dXJuIGludm9rZVdpdGhFcnJvckhhbmRsaW5nKGZuLCBudWxsLCBhcmdzLCBpbnN0YW5jZSwgdHlwZSk7XHJcbiAgICB9O1xyXG4gICAgdmFyIGdldHRlcjtcclxuICAgIHZhciBmb3JjZVRyaWdnZXIgPSBmYWxzZTtcclxuICAgIHZhciBpc011bHRpU291cmNlID0gZmFsc2U7XHJcbiAgICBpZiAoaXNSZWYoc291cmNlKSkge1xyXG4gICAgICAgIGdldHRlciA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNvdXJjZS52YWx1ZTsgfTtcclxuICAgICAgICBmb3JjZVRyaWdnZXIgPSBpc1NoYWxsb3coc291cmNlKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGlzUmVhY3RpdmUoc291cmNlKSkge1xyXG4gICAgICAgIGdldHRlciA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgc291cmNlLl9fb2JfXy5kZXAuZGVwZW5kKCk7XHJcbiAgICAgICAgICAgIHJldHVybiBzb3VyY2U7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBkZWVwID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGlzQXJyYXkoc291cmNlKSkge1xyXG4gICAgICAgIGlzTXVsdGlTb3VyY2UgPSB0cnVlO1xyXG4gICAgICAgIGZvcmNlVHJpZ2dlciA9IHNvdXJjZS5zb21lKGZ1bmN0aW9uIChzKSB7IHJldHVybiBpc1JlYWN0aXZlKHMpIHx8IGlzU2hhbGxvdyhzKTsgfSk7XHJcbiAgICAgICAgZ2V0dGVyID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gc291cmNlLm1hcChmdW5jdGlvbiAocykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzUmVmKHMpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHMudmFsdWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChpc1JlYWN0aXZlKHMpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRyYXZlcnNlKHMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoaXNGdW5jdGlvbihzKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsKHMsIFdBVENIRVJfR0VUVEVSKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgd2FybkludmFsaWRTb3VyY2Uocyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChpc0Z1bmN0aW9uKHNvdXJjZSkpIHtcclxuICAgICAgICBpZiAoY2IpIHtcclxuICAgICAgICAgICAgLy8gZ2V0dGVyIHdpdGggY2JcclxuICAgICAgICAgICAgZ2V0dGVyID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gY2FsbChzb3VyY2UsIFdBVENIRVJfR0VUVEVSKTsgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIG5vIGNiIC0+IHNpbXBsZSBlZmZlY3RcclxuICAgICAgICAgICAgZ2V0dGVyID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGluc3RhbmNlICYmIGluc3RhbmNlLl9pc0Rlc3Ryb3llZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChjbGVhbnVwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2xlYW51cCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGwoc291cmNlLCBXQVRDSEVSLCBbb25DbGVhbnVwXSk7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgZ2V0dGVyID0gbm9vcDtcclxuICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHdhcm5JbnZhbGlkU291cmNlKHNvdXJjZSk7XHJcbiAgICB9XHJcbiAgICBpZiAoY2IgJiYgZGVlcCkge1xyXG4gICAgICAgIHZhciBiYXNlR2V0dGVyXzEgPSBnZXR0ZXI7XHJcbiAgICAgICAgZ2V0dGVyID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdHJhdmVyc2UoYmFzZUdldHRlcl8xKCkpOyB9O1xyXG4gICAgfVxyXG4gICAgdmFyIGNsZWFudXA7XHJcbiAgICB2YXIgb25DbGVhbnVwID0gZnVuY3Rpb24gKGZuKSB7XHJcbiAgICAgICAgY2xlYW51cCA9IHdhdGNoZXIub25TdG9wID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBjYWxsKGZuLCBXQVRDSEVSX0NMRUFOVVApO1xyXG4gICAgICAgIH07XHJcbiAgICB9O1xyXG4gICAgLy8gaW4gU1NSIHRoZXJlIGlzIG5vIG5lZWQgdG8gc2V0dXAgYW4gYWN0dWFsIGVmZmVjdCwgYW5kIGl0IHNob3VsZCBiZSBub29wXHJcbiAgICAvLyB1bmxlc3MgaXQncyBlYWdlclxyXG4gICAgaWYgKGlzU2VydmVyUmVuZGVyaW5nKCkpIHtcclxuICAgICAgICAvLyB3ZSB3aWxsIGFsc28gbm90IGNhbGwgdGhlIGludmFsaWRhdGUgY2FsbGJhY2sgKCsgcnVubmVyIGlzIG5vdCBzZXQgdXApXHJcbiAgICAgICAgb25DbGVhbnVwID0gbm9vcDtcclxuICAgICAgICBpZiAoIWNiKSB7XHJcbiAgICAgICAgICAgIGdldHRlcigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChpbW1lZGlhdGUpIHtcclxuICAgICAgICAgICAgY2FsbChjYiwgV0FUQ0hFUl9DQiwgW1xyXG4gICAgICAgICAgICAgICAgZ2V0dGVyKCksXHJcbiAgICAgICAgICAgICAgICBpc011bHRpU291cmNlID8gW10gOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICBvbkNsZWFudXBcclxuICAgICAgICAgICAgXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBub29wO1xyXG4gICAgfVxyXG4gICAgdmFyIHdhdGNoZXIgPSBuZXcgV2F0Y2hlcihjdXJyZW50SW5zdGFuY2UsIGdldHRlciwgbm9vcCwge1xyXG4gICAgICAgIGxhenk6IHRydWVcclxuICAgIH0pO1xyXG4gICAgd2F0Y2hlci5ub1JlY3Vyc2UgPSAhY2I7XHJcbiAgICB2YXIgb2xkVmFsdWUgPSBpc011bHRpU291cmNlID8gW10gOiBJTklUSUFMX1dBVENIRVJfVkFMVUU7XHJcbiAgICAvLyBvdmVyd3JpdGUgZGVmYXVsdCBydW5cclxuICAgIHdhdGNoZXIucnVuID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICghd2F0Y2hlci5hY3RpdmUpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY2IpIHtcclxuICAgICAgICAgICAgLy8gd2F0Y2goc291cmNlLCBjYilcclxuICAgICAgICAgICAgdmFyIG5ld1ZhbHVlID0gd2F0Y2hlci5nZXQoKTtcclxuICAgICAgICAgICAgaWYgKGRlZXAgfHxcclxuICAgICAgICAgICAgICAgIGZvcmNlVHJpZ2dlciB8fFxyXG4gICAgICAgICAgICAgICAgKGlzTXVsdGlTb3VyY2VcclxuICAgICAgICAgICAgICAgICAgICA/IG5ld1ZhbHVlLnNvbWUoZnVuY3Rpb24gKHYsIGkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhc0NoYW5nZWQodiwgb2xkVmFsdWVbaV0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgOiBoYXNDaGFuZ2VkKG5ld1ZhbHVlLCBvbGRWYWx1ZSkpKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBjbGVhbnVwIGJlZm9yZSBydW5uaW5nIGNiIGFnYWluXHJcbiAgICAgICAgICAgICAgICBpZiAoY2xlYW51cCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNsZWFudXAoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNhbGwoY2IsIFdBVENIRVJfQ0IsIFtcclxuICAgICAgICAgICAgICAgICAgICBuZXdWYWx1ZSxcclxuICAgICAgICAgICAgICAgICAgICAvLyBwYXNzIHVuZGVmaW5lZCBhcyB0aGUgb2xkIHZhbHVlIHdoZW4gaXQncyBjaGFuZ2VkIGZvciB0aGUgZmlyc3QgdGltZVxyXG4gICAgICAgICAgICAgICAgICAgIG9sZFZhbHVlID09PSBJTklUSUFMX1dBVENIRVJfVkFMVUUgPyB1bmRlZmluZWQgOiBvbGRWYWx1ZSxcclxuICAgICAgICAgICAgICAgICAgICBvbkNsZWFudXBcclxuICAgICAgICAgICAgICAgIF0pO1xyXG4gICAgICAgICAgICAgICAgb2xkVmFsdWUgPSBuZXdWYWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy8gd2F0Y2hFZmZlY3RcclxuICAgICAgICAgICAgd2F0Y2hlci5nZXQoKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgaWYgKGZsdXNoID09PSAnc3luYycpIHtcclxuICAgICAgICB3YXRjaGVyLnVwZGF0ZSA9IHdhdGNoZXIucnVuO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoZmx1c2ggPT09ICdwb3N0Jykge1xyXG4gICAgICAgIHdhdGNoZXIucG9zdCA9IHRydWU7XHJcbiAgICAgICAgd2F0Y2hlci51cGRhdGUgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBxdWV1ZVdhdGNoZXIod2F0Y2hlcik7IH07XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICAvLyBwcmVcclxuICAgICAgICB3YXRjaGVyLnVwZGF0ZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKGluc3RhbmNlICYmIGluc3RhbmNlID09PSBjdXJyZW50SW5zdGFuY2UgJiYgIWluc3RhbmNlLl9pc01vdW50ZWQpIHtcclxuICAgICAgICAgICAgICAgIC8vIHByZS13YXRjaGVyIHRyaWdnZXJlZCBiZWZvcmVcclxuICAgICAgICAgICAgICAgIHZhciBidWZmZXIgPSBpbnN0YW5jZS5fcHJlV2F0Y2hlcnMgfHwgKGluc3RhbmNlLl9wcmVXYXRjaGVycyA9IFtdKTtcclxuICAgICAgICAgICAgICAgIGlmIChidWZmZXIuaW5kZXhPZih3YXRjaGVyKSA8IDApXHJcbiAgICAgICAgICAgICAgICAgICAgYnVmZmVyLnB1c2god2F0Y2hlcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBxdWV1ZVdhdGNoZXIod2F0Y2hlcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcclxuICAgICAgICB3YXRjaGVyLm9uVHJhY2sgPSBvblRyYWNrO1xyXG4gICAgICAgIHdhdGNoZXIub25UcmlnZ2VyID0gb25UcmlnZ2VyO1xyXG4gICAgfVxyXG4gICAgLy8gaW5pdGlhbCBydW5cclxuICAgIGlmIChjYikge1xyXG4gICAgICAgIGlmIChpbW1lZGlhdGUpIHtcclxuICAgICAgICAgICAgd2F0Y2hlci5ydW4oKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIG9sZFZhbHVlID0gd2F0Y2hlci5nZXQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChmbHVzaCA9PT0gJ3Bvc3QnICYmIGluc3RhbmNlKSB7XHJcbiAgICAgICAgaW5zdGFuY2UuJG9uY2UoJ2hvb2s6bW91bnRlZCcsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHdhdGNoZXIuZ2V0KCk7IH0pO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgd2F0Y2hlci5nZXQoKTtcclxuICAgIH1cclxuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgd2F0Y2hlci50ZWFyZG93bigpO1xyXG4gICAgfTtcclxufVxuXG52YXIgYWN0aXZlRWZmZWN0U2NvcGU7XHJcbnZhciBFZmZlY3RTY29wZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIEVmZmVjdFNjb3BlKGRldGFjaGVkKSB7XHJcbiAgICAgICAgaWYgKGRldGFjaGVkID09PSB2b2lkIDApIHsgZGV0YWNoZWQgPSBmYWxzZTsgfVxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBpbnRlcm5hbFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAaW50ZXJuYWxcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmVmZmVjdHMgPSBbXTtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAaW50ZXJuYWxcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmNsZWFudXBzID0gW107XHJcbiAgICAgICAgaWYgKCFkZXRhY2hlZCAmJiBhY3RpdmVFZmZlY3RTY29wZSkge1xyXG4gICAgICAgICAgICB0aGlzLnBhcmVudCA9IGFjdGl2ZUVmZmVjdFNjb3BlO1xyXG4gICAgICAgICAgICB0aGlzLmluZGV4ID1cclxuICAgICAgICAgICAgICAgIChhY3RpdmVFZmZlY3RTY29wZS5zY29wZXMgfHwgKGFjdGl2ZUVmZmVjdFNjb3BlLnNjb3BlcyA9IFtdKSkucHVzaCh0aGlzKSAtIDE7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgRWZmZWN0U2NvcGUucHJvdG90eXBlLnJ1biA9IGZ1bmN0aW9uIChmbikge1xyXG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZSkge1xyXG4gICAgICAgICAgICB2YXIgY3VycmVudEVmZmVjdFNjb3BlID0gYWN0aXZlRWZmZWN0U2NvcGU7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBhY3RpdmVFZmZlY3RTY29wZSA9IHRoaXM7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZm4oKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmaW5hbGx5IHtcclxuICAgICAgICAgICAgICAgIGFjdGl2ZUVmZmVjdFNjb3BlID0gY3VycmVudEVmZmVjdFNjb3BlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcclxuICAgICAgICAgICAgd2FybiQyKFwiY2Fubm90IHJ1biBhbiBpbmFjdGl2ZSBlZmZlY3Qgc2NvcGUuXCIpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIG9uIG5vbi1kZXRhY2hlZCBzY29wZXNcclxuICAgICAqIEBpbnRlcm5hbFxyXG4gICAgICovXHJcbiAgICBFZmZlY3RTY29wZS5wcm90b3R5cGUub24gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgYWN0aXZlRWZmZWN0U2NvcGUgPSB0aGlzO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgb24gbm9uLWRldGFjaGVkIHNjb3Blc1xyXG4gICAgICogQGludGVybmFsXHJcbiAgICAgKi9cclxuICAgIEVmZmVjdFNjb3BlLnByb3RvdHlwZS5vZmYgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgYWN0aXZlRWZmZWN0U2NvcGUgPSB0aGlzLnBhcmVudDtcclxuICAgIH07XHJcbiAgICBFZmZlY3RTY29wZS5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uIChmcm9tUGFyZW50KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlKSB7XHJcbiAgICAgICAgICAgIHZhciBpID0gdm9pZCAwLCBsID0gdm9pZCAwO1xyXG4gICAgICAgICAgICBmb3IgKGkgPSAwLCBsID0gdGhpcy5lZmZlY3RzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lZmZlY3RzW2ldLnRlYXJkb3duKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZm9yIChpID0gMCwgbCA9IHRoaXMuY2xlYW51cHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNsZWFudXBzW2ldKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRoaXMuc2NvcGVzKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBsID0gdGhpcy5zY29wZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zY29wZXNbaV0uc3RvcCh0cnVlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBuZXN0ZWQgc2NvcGUsIGRlcmVmZXJlbmNlIGZyb20gcGFyZW50IHRvIGF2b2lkIG1lbW9yeSBsZWFrc1xyXG4gICAgICAgICAgICBpZiAodGhpcy5wYXJlbnQgJiYgIWZyb21QYXJlbnQpIHtcclxuICAgICAgICAgICAgICAgIC8vIG9wdGltaXplZCBPKDEpIHJlbW92YWxcclxuICAgICAgICAgICAgICAgIHZhciBsYXN0ID0gdGhpcy5wYXJlbnQuc2NvcGVzLnBvcCgpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGxhc3QgJiYgbGFzdCAhPT0gdGhpcykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGFyZW50LnNjb3Blc1t0aGlzLmluZGV4XSA9IGxhc3Q7XHJcbiAgICAgICAgICAgICAgICAgICAgbGFzdC5pbmRleCA9IHRoaXMuaW5kZXg7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIEVmZmVjdFNjb3BlO1xyXG59KCkpO1xyXG5mdW5jdGlvbiBlZmZlY3RTY29wZShkZXRhY2hlZCkge1xyXG4gICAgcmV0dXJuIG5ldyBFZmZlY3RTY29wZShkZXRhY2hlZCk7XHJcbn1cclxuLyoqXHJcbiAqIEBpbnRlcm5hbFxyXG4gKi9cclxuZnVuY3Rpb24gcmVjb3JkRWZmZWN0U2NvcGUoZWZmZWN0LCBzY29wZSkge1xyXG4gICAgaWYgKHNjb3BlID09PSB2b2lkIDApIHsgc2NvcGUgPSBhY3RpdmVFZmZlY3RTY29wZTsgfVxyXG4gICAgaWYgKHNjb3BlICYmIHNjb3BlLmFjdGl2ZSkge1xyXG4gICAgICAgIHNjb3BlLmVmZmVjdHMucHVzaChlZmZlY3QpO1xyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIGdldEN1cnJlbnRTY29wZSgpIHtcclxuICAgIHJldHVybiBhY3RpdmVFZmZlY3RTY29wZTtcclxufVxyXG5mdW5jdGlvbiBvblNjb3BlRGlzcG9zZShmbikge1xyXG4gICAgaWYgKGFjdGl2ZUVmZmVjdFNjb3BlKSB7XHJcbiAgICAgICAgYWN0aXZlRWZmZWN0U2NvcGUuY2xlYW51cHMucHVzaChmbik7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XHJcbiAgICAgICAgd2FybiQyKFwib25TY29wZURpc3Bvc2UoKSBpcyBjYWxsZWQgd2hlbiB0aGVyZSBpcyBubyBhY3RpdmUgZWZmZWN0IHNjb3BlXCIgK1xyXG4gICAgICAgICAgICBcIiB0byBiZSBhc3NvY2lhdGVkIHdpdGguXCIpO1xyXG4gICAgfVxyXG59XG5cbmZ1bmN0aW9uIHByb3ZpZGUoa2V5LCB2YWx1ZSkge1xyXG4gICAgaWYgKCFjdXJyZW50SW5zdGFuY2UpIHtcclxuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xyXG4gICAgICAgICAgICB3YXJuJDIoXCJwcm92aWRlKCkgY2FuIG9ubHkgYmUgdXNlZCBpbnNpZGUgc2V0dXAoKS5cIik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgLy8gVFMgZG9lc24ndCBhbGxvdyBzeW1ib2wgYXMgaW5kZXggdHlwZVxyXG4gICAgICAgIHJlc29sdmVQcm92aWRlZChjdXJyZW50SW5zdGFuY2UpW2tleV0gPSB2YWx1ZTtcclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiByZXNvbHZlUHJvdmlkZWQodm0pIHtcclxuICAgIC8vIGJ5IGRlZmF1bHQgYW4gaW5zdGFuY2UgaW5oZXJpdHMgaXRzIHBhcmVudCdzIHByb3ZpZGVzIG9iamVjdFxyXG4gICAgLy8gYnV0IHdoZW4gaXQgbmVlZHMgdG8gcHJvdmlkZSB2YWx1ZXMgb2YgaXRzIG93biwgaXQgY3JlYXRlcyBpdHNcclxuICAgIC8vIG93biBwcm92aWRlcyBvYmplY3QgdXNpbmcgcGFyZW50IHByb3ZpZGVzIG9iamVjdCBhcyBwcm90b3R5cGUuXHJcbiAgICAvLyB0aGlzIHdheSBpbiBgaW5qZWN0YCB3ZSBjYW4gc2ltcGx5IGxvb2sgdXAgaW5qZWN0aW9ucyBmcm9tIGRpcmVjdFxyXG4gICAgLy8gcGFyZW50IGFuZCBsZXQgdGhlIHByb3RvdHlwZSBjaGFpbiBkbyB0aGUgd29yay5cclxuICAgIHZhciBleGlzdGluZyA9IHZtLl9wcm92aWRlZDtcclxuICAgIHZhciBwYXJlbnRQcm92aWRlcyA9IHZtLiRwYXJlbnQgJiYgdm0uJHBhcmVudC5fcHJvdmlkZWQ7XHJcbiAgICBpZiAocGFyZW50UHJvdmlkZXMgPT09IGV4aXN0aW5nKSB7XHJcbiAgICAgICAgcmV0dXJuICh2bS5fcHJvdmlkZWQgPSBPYmplY3QuY3JlYXRlKHBhcmVudFByb3ZpZGVzKSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICByZXR1cm4gZXhpc3Rpbmc7XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gaW5qZWN0KGtleSwgZGVmYXVsdFZhbHVlLCB0cmVhdERlZmF1bHRBc0ZhY3RvcnkpIHtcclxuICAgIGlmICh0cmVhdERlZmF1bHRBc0ZhY3RvcnkgPT09IHZvaWQgMCkgeyB0cmVhdERlZmF1bHRBc0ZhY3RvcnkgPSBmYWxzZTsgfVxyXG4gICAgLy8gZmFsbGJhY2sgdG8gYGN1cnJlbnRSZW5kZXJpbmdJbnN0YW5jZWAgc28gdGhhdCB0aGlzIGNhbiBiZSBjYWxsZWQgaW5cclxuICAgIC8vIGEgZnVuY3Rpb25hbCBjb21wb25lbnRcclxuICAgIHZhciBpbnN0YW5jZSA9IGN1cnJlbnRJbnN0YW5jZTtcclxuICAgIGlmIChpbnN0YW5jZSkge1xyXG4gICAgICAgIC8vICMyNDAwXHJcbiAgICAgICAgLy8gdG8gc3VwcG9ydCBgYXBwLnVzZWAgcGx1Z2lucyxcclxuICAgICAgICAvLyBmYWxsYmFjayB0byBhcHBDb250ZXh0J3MgYHByb3ZpZGVzYCBpZiB0aGUgaW5zdGFuY2UgaXMgYXQgcm9vdFxyXG4gICAgICAgIHZhciBwcm92aWRlcyA9IGluc3RhbmNlLiRwYXJlbnQgJiYgaW5zdGFuY2UuJHBhcmVudC5fcHJvdmlkZWQ7XHJcbiAgICAgICAgaWYgKHByb3ZpZGVzICYmIGtleSBpbiBwcm92aWRlcykge1xyXG4gICAgICAgICAgICAvLyBUUyBkb2Vzbid0IGFsbG93IHN5bWJvbCBhcyBpbmRleCB0eXBlXHJcbiAgICAgICAgICAgIHJldHVybiBwcm92aWRlc1trZXldO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJlYXREZWZhdWx0QXNGYWN0b3J5ICYmIGlzRnVuY3Rpb24oZGVmYXVsdFZhbHVlKVxyXG4gICAgICAgICAgICAgICAgPyBkZWZhdWx0VmFsdWUuY2FsbChpbnN0YW5jZSlcclxuICAgICAgICAgICAgICAgIDogZGVmYXVsdFZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XHJcbiAgICAgICAgICAgIHdhcm4kMihcImluamVjdGlvbiBcXFwiXCIuY29uY2F0KFN0cmluZyhrZXkpLCBcIlxcXCIgbm90IGZvdW5kLlwiKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xyXG4gICAgICAgIHdhcm4kMihcImluamVjdCgpIGNhbiBvbmx5IGJlIHVzZWQgaW5zaWRlIHNldHVwKCkgb3IgZnVuY3Rpb25hbCBjb21wb25lbnRzLlwiKTtcclxuICAgIH1cclxufVxuXG4vKipcclxuICogQGludGVybmFsIHRoaXMgZnVuY3Rpb24gbmVlZHMgbWFudWFsIHB1YmxpYyB0eXBlIGRlY2xhcmF0aW9uIGJlY2F1c2UgaXQgcmVsaWVzXHJcbiAqIG9uIHByZXZpb3VzbHkgbWFudWFsbHkgYXV0aG9yZWQgdHlwZXMgZnJvbSBWdWUgMlxyXG4gKi9cclxuZnVuY3Rpb24gaCh0eXBlLCBwcm9wcywgY2hpbGRyZW4pIHtcclxuICAgIGlmICghY3VycmVudEluc3RhbmNlKSB7XHJcbiAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJlxyXG4gICAgICAgICAgICB3YXJuJDIoXCJnbG9iYWxseSBpbXBvcnRlZCBoKCkgY2FuIG9ubHkgYmUgaW52b2tlZCB3aGVuIHRoZXJlIGlzIGFuIGFjdGl2ZSBcIiArXHJcbiAgICAgICAgICAgICAgICBcImNvbXBvbmVudCBpbnN0YW5jZSwgZS5nLiBzeW5jaHJvbm91c2x5IGluIGEgY29tcG9uZW50J3MgcmVuZGVyIG9yIHNldHVwIGZ1bmN0aW9uLlwiKTtcclxuICAgIH1cclxuICAgIHJldHVybiBjcmVhdGVFbGVtZW50JDEoY3VycmVudEluc3RhbmNlLCB0eXBlLCBwcm9wcywgY2hpbGRyZW4sIDIsIHRydWUpO1xyXG59XG5cbmZ1bmN0aW9uIGhhbmRsZUVycm9yKGVyciwgdm0sIGluZm8pIHtcclxuICAgIC8vIERlYWN0aXZhdGUgZGVwcyB0cmFja2luZyB3aGlsZSBwcm9jZXNzaW5nIGVycm9yIGhhbmRsZXIgdG8gYXZvaWQgcG9zc2libGUgaW5maW5pdGUgcmVuZGVyaW5nLlxyXG4gICAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVleC9pc3N1ZXMvMTUwNVxyXG4gICAgcHVzaFRhcmdldCgpO1xyXG4gICAgdHJ5IHtcclxuICAgICAgICBpZiAodm0pIHtcclxuICAgICAgICAgICAgdmFyIGN1ciA9IHZtO1xyXG4gICAgICAgICAgICB3aGlsZSAoKGN1ciA9IGN1ci4kcGFyZW50KSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGhvb2tzID0gY3VyLiRvcHRpb25zLmVycm9yQ2FwdHVyZWQ7XHJcbiAgICAgICAgICAgICAgICBpZiAoaG9va3MpIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhvb2tzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2FwdHVyZSA9IGhvb2tzW2ldLmNhbGwoY3VyLCBlcnIsIHZtLCBpbmZvKSA9PT0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2FwdHVyZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsb2JhbEhhbmRsZUVycm9yKGUsIGN1ciwgJ2Vycm9yQ2FwdHVyZWQgaG9vaycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGdsb2JhbEhhbmRsZUVycm9yKGVyciwgdm0sIGluZm8pO1xyXG4gICAgfVxyXG4gICAgZmluYWxseSB7XHJcbiAgICAgICAgcG9wVGFyZ2V0KCk7XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gaW52b2tlV2l0aEVycm9ySGFuZGxpbmcoaGFuZGxlciwgY29udGV4dCwgYXJncywgdm0sIGluZm8pIHtcclxuICAgIHZhciByZXM7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIHJlcyA9IGFyZ3MgPyBoYW5kbGVyLmFwcGx5KGNvbnRleHQsIGFyZ3MpIDogaGFuZGxlci5jYWxsKGNvbnRleHQpO1xyXG4gICAgICAgIGlmIChyZXMgJiYgIXJlcy5faXNWdWUgJiYgaXNQcm9taXNlKHJlcykgJiYgIXJlcy5faGFuZGxlZCkge1xyXG4gICAgICAgICAgICByZXMuY2F0Y2goZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGhhbmRsZUVycm9yKGUsIHZtLCBpbmZvICsgXCIgKFByb21pc2UvYXN5bmMpXCIpOyB9KTtcclxuICAgICAgICAgICAgcmVzLl9oYW5kbGVkID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgIGhhbmRsZUVycm9yKGUsIHZtLCBpbmZvKTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXM7XHJcbn1cclxuZnVuY3Rpb24gZ2xvYmFsSGFuZGxlRXJyb3IoZXJyLCB2bSwgaW5mbykge1xyXG4gICAgaWYgKGNvbmZpZy5lcnJvckhhbmRsZXIpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICByZXR1cm4gY29uZmlnLmVycm9ySGFuZGxlci5jYWxsKG51bGwsIGVyciwgdm0sIGluZm8pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAvLyBpZiB0aGUgdXNlciBpbnRlbnRpb25hbGx5IHRocm93cyB0aGUgb3JpZ2luYWwgZXJyb3IgaW4gdGhlIGhhbmRsZXIsXHJcbiAgICAgICAgICAgIC8vIGRvIG5vdCBsb2cgaXQgdHdpY2VcclxuICAgICAgICAgICAgaWYgKGUgIT09IGVycikge1xyXG4gICAgICAgICAgICAgICAgbG9nRXJyb3IoZSwgbnVsbCwgJ2NvbmZpZy5lcnJvckhhbmRsZXInKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGxvZ0Vycm9yKGVyciwgdm0sIGluZm8pO1xyXG59XHJcbmZ1bmN0aW9uIGxvZ0Vycm9yKGVyciwgdm0sIGluZm8pIHtcclxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XHJcbiAgICAgICAgd2FybiQyKFwiRXJyb3IgaW4gXCIuY29uY2F0KGluZm8sIFwiOiBcXFwiXCIpLmNvbmNhdChlcnIudG9TdHJpbmcoKSwgXCJcXFwiXCIpLCB2bSk7XHJcbiAgICB9XHJcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xyXG4gICAgaWYgKGluQnJvd3NlciAmJiB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0aHJvdyBlcnI7XHJcbiAgICB9XHJcbn1cblxuLyogZ2xvYmFscyBNdXRhdGlvbk9ic2VydmVyICovXHJcbnZhciBpc1VzaW5nTWljcm9UYXNrID0gZmFsc2U7XHJcbnZhciBjYWxsYmFja3MgPSBbXTtcclxudmFyIHBlbmRpbmcgPSBmYWxzZTtcclxuZnVuY3Rpb24gZmx1c2hDYWxsYmFja3MoKSB7XHJcbiAgICBwZW5kaW5nID0gZmFsc2U7XHJcbiAgICB2YXIgY29waWVzID0gY2FsbGJhY2tzLnNsaWNlKDApO1xyXG4gICAgY2FsbGJhY2tzLmxlbmd0aCA9IDA7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvcGllcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNvcGllc1tpXSgpO1xyXG4gICAgfVxyXG59XHJcbi8vIEhlcmUgd2UgaGF2ZSBhc3luYyBkZWZlcnJpbmcgd3JhcHBlcnMgdXNpbmcgbWljcm90YXNrcy5cclxuLy8gSW4gMi41IHdlIHVzZWQgKG1hY3JvKSB0YXNrcyAoaW4gY29tYmluYXRpb24gd2l0aCBtaWNyb3Rhc2tzKS5cclxuLy8gSG93ZXZlciwgaXQgaGFzIHN1YnRsZSBwcm9ibGVtcyB3aGVuIHN0YXRlIGlzIGNoYW5nZWQgcmlnaHQgYmVmb3JlIHJlcGFpbnRcclxuLy8gKGUuZy4gIzY4MTMsIG91dC1pbiB0cmFuc2l0aW9ucykuXHJcbi8vIEFsc28sIHVzaW5nIChtYWNybykgdGFza3MgaW4gZXZlbnQgaGFuZGxlciB3b3VsZCBjYXVzZSBzb21lIHdlaXJkIGJlaGF2aW9yc1xyXG4vLyB0aGF0IGNhbm5vdCBiZSBjaXJjdW12ZW50ZWQgKGUuZy4gIzcxMDksICM3MTUzLCAjNzU0NiwgIzc4MzQsICM4MTA5KS5cclxuLy8gU28gd2Ugbm93IHVzZSBtaWNyb3Rhc2tzIGV2ZXJ5d2hlcmUsIGFnYWluLlxyXG4vLyBBIG1ham9yIGRyYXdiYWNrIG9mIHRoaXMgdHJhZGVvZmYgaXMgdGhhdCB0aGVyZSBhcmUgc29tZSBzY2VuYXJpb3NcclxuLy8gd2hlcmUgbWljcm90YXNrcyBoYXZlIHRvbyBoaWdoIGEgcHJpb3JpdHkgYW5kIGZpcmUgaW4gYmV0d2VlbiBzdXBwb3NlZGx5XHJcbi8vIHNlcXVlbnRpYWwgZXZlbnRzIChlLmcuICM0NTIxLCAjNjY5MCwgd2hpY2ggaGF2ZSB3b3JrYXJvdW5kcylcclxuLy8gb3IgZXZlbiBiZXR3ZWVuIGJ1YmJsaW5nIG9mIHRoZSBzYW1lIGV2ZW50ICgjNjU2NikuXHJcbnZhciB0aW1lckZ1bmM7XHJcbi8vIFRoZSBuZXh0VGljayBiZWhhdmlvciBsZXZlcmFnZXMgdGhlIG1pY3JvdGFzayBxdWV1ZSwgd2hpY2ggY2FuIGJlIGFjY2Vzc2VkXHJcbi8vIHZpYSBlaXRoZXIgbmF0aXZlIFByb21pc2UudGhlbiBvciBNdXRhdGlvbk9ic2VydmVyLlxyXG4vLyBNdXRhdGlvbk9ic2VydmVyIGhhcyB3aWRlciBzdXBwb3J0LCBob3dldmVyIGl0IGlzIHNlcmlvdXNseSBidWdnZWQgaW5cclxuLy8gVUlXZWJWaWV3IGluIGlPUyA+PSA5LjMuMyB3aGVuIHRyaWdnZXJlZCBpbiB0b3VjaCBldmVudCBoYW5kbGVycy4gSXRcclxuLy8gY29tcGxldGVseSBzdG9wcyB3b3JraW5nIGFmdGVyIHRyaWdnZXJpbmcgYSBmZXcgdGltZXMuLi4gc28sIGlmIG5hdGl2ZVxyXG4vLyBQcm9taXNlIGlzIGF2YWlsYWJsZSwgd2Ugd2lsbCB1c2UgaXQ6XHJcbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0LCAkZmxvdy1kaXNhYmxlLWxpbmUgKi9cclxuaWYgKHR5cGVvZiBQcm9taXNlICE9PSAndW5kZWZpbmVkJyAmJiBpc05hdGl2ZShQcm9taXNlKSkge1xyXG4gICAgdmFyIHBfMSA9IFByb21pc2UucmVzb2x2ZSgpO1xyXG4gICAgdGltZXJGdW5jID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHBfMS50aGVuKGZsdXNoQ2FsbGJhY2tzKTtcclxuICAgICAgICAvLyBJbiBwcm9ibGVtYXRpYyBVSVdlYlZpZXdzLCBQcm9taXNlLnRoZW4gZG9lc24ndCBjb21wbGV0ZWx5IGJyZWFrLCBidXRcclxuICAgICAgICAvLyBpdCBjYW4gZ2V0IHN0dWNrIGluIGEgd2VpcmQgc3RhdGUgd2hlcmUgY2FsbGJhY2tzIGFyZSBwdXNoZWQgaW50byB0aGVcclxuICAgICAgICAvLyBtaWNyb3Rhc2sgcXVldWUgYnV0IHRoZSBxdWV1ZSBpc24ndCBiZWluZyBmbHVzaGVkLCB1bnRpbCB0aGUgYnJvd3NlclxyXG4gICAgICAgIC8vIG5lZWRzIHRvIGRvIHNvbWUgb3RoZXIgd29yaywgZS5nLiBoYW5kbGUgYSB0aW1lci4gVGhlcmVmb3JlIHdlIGNhblxyXG4gICAgICAgIC8vIFwiZm9yY2VcIiB0aGUgbWljcm90YXNrIHF1ZXVlIHRvIGJlIGZsdXNoZWQgYnkgYWRkaW5nIGFuIGVtcHR5IHRpbWVyLlxyXG4gICAgICAgIGlmIChpc0lPUylcclxuICAgICAgICAgICAgc2V0VGltZW91dChub29wKTtcclxuICAgIH07XHJcbiAgICBpc1VzaW5nTWljcm9UYXNrID0gdHJ1ZTtcclxufVxyXG5lbHNlIGlmICghaXNJRSAmJlxyXG4gICAgdHlwZW9mIE11dGF0aW9uT2JzZXJ2ZXIgIT09ICd1bmRlZmluZWQnICYmXHJcbiAgICAoaXNOYXRpdmUoTXV0YXRpb25PYnNlcnZlcikgfHxcclxuICAgICAgICAvLyBQaGFudG9tSlMgYW5kIGlPUyA3LnhcclxuICAgICAgICBNdXRhdGlvbk9ic2VydmVyLnRvU3RyaW5nKCkgPT09ICdbb2JqZWN0IE11dGF0aW9uT2JzZXJ2ZXJDb25zdHJ1Y3Rvcl0nKSkge1xyXG4gICAgLy8gVXNlIE11dGF0aW9uT2JzZXJ2ZXIgd2hlcmUgbmF0aXZlIFByb21pc2UgaXMgbm90IGF2YWlsYWJsZSxcclxuICAgIC8vIGUuZy4gUGhhbnRvbUpTLCBpT1M3LCBBbmRyb2lkIDQuNFxyXG4gICAgLy8gKCM2NDY2IE11dGF0aW9uT2JzZXJ2ZXIgaXMgdW5yZWxpYWJsZSBpbiBJRTExKVxyXG4gICAgdmFyIGNvdW50ZXJfMSA9IDE7XHJcbiAgICB2YXIgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihmbHVzaENhbGxiYWNrcyk7XHJcbiAgICB2YXIgdGV4dE5vZGVfMSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKFN0cmluZyhjb3VudGVyXzEpKTtcclxuICAgIG9ic2VydmVyLm9ic2VydmUodGV4dE5vZGVfMSwge1xyXG4gICAgICAgIGNoYXJhY3RlckRhdGE6IHRydWVcclxuICAgIH0pO1xyXG4gICAgdGltZXJGdW5jID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGNvdW50ZXJfMSA9IChjb3VudGVyXzEgKyAxKSAlIDI7XHJcbiAgICAgICAgdGV4dE5vZGVfMS5kYXRhID0gU3RyaW5nKGNvdW50ZXJfMSk7XHJcbiAgICB9O1xyXG4gICAgaXNVc2luZ01pY3JvVGFzayA9IHRydWU7XHJcbn1cclxuZWxzZSBpZiAodHlwZW9mIHNldEltbWVkaWF0ZSAhPT0gJ3VuZGVmaW5lZCcgJiYgaXNOYXRpdmUoc2V0SW1tZWRpYXRlKSkge1xyXG4gICAgLy8gRmFsbGJhY2sgdG8gc2V0SW1tZWRpYXRlLlxyXG4gICAgLy8gVGVjaG5pY2FsbHkgaXQgbGV2ZXJhZ2VzIHRoZSAobWFjcm8pIHRhc2sgcXVldWUsXHJcbiAgICAvLyBidXQgaXQgaXMgc3RpbGwgYSBiZXR0ZXIgY2hvaWNlIHRoYW4gc2V0VGltZW91dC5cclxuICAgIHRpbWVyRnVuYyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBzZXRJbW1lZGlhdGUoZmx1c2hDYWxsYmFja3MpO1xyXG4gICAgfTtcclxufVxyXG5lbHNlIHtcclxuICAgIC8vIEZhbGxiYWNrIHRvIHNldFRpbWVvdXQuXHJcbiAgICB0aW1lckZ1bmMgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgc2V0VGltZW91dChmbHVzaENhbGxiYWNrcywgMCk7XHJcbiAgICB9O1xyXG59XHJcbi8qKlxyXG4gKiBAaW50ZXJuYWxcclxuICovXHJcbmZ1bmN0aW9uIG5leHRUaWNrKGNiLCBjdHgpIHtcclxuICAgIHZhciBfcmVzb2x2ZTtcclxuICAgIGNhbGxiYWNrcy5wdXNoKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAoY2IpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGNiLmNhbGwoY3R4KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgaGFuZGxlRXJyb3IoZSwgY3R4LCAnbmV4dFRpY2snKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChfcmVzb2x2ZSkge1xyXG4gICAgICAgICAgICBfcmVzb2x2ZShjdHgpO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgaWYgKCFwZW5kaW5nKSB7XHJcbiAgICAgICAgcGVuZGluZyA9IHRydWU7XHJcbiAgICAgICAgdGltZXJGdW5jKCk7XHJcbiAgICB9XHJcbiAgICAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcclxuICAgIGlmICghY2IgJiYgdHlwZW9mIFByb21pc2UgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XHJcbiAgICAgICAgICAgIF9yZXNvbHZlID0gcmVzb2x2ZTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxuXG5mdW5jdGlvbiB1c2VDc3NNb2R1bGUobmFtZSkge1xyXG4gICAgaWYgKG5hbWUgPT09IHZvaWQgMCkgeyBuYW1lID0gJyRzdHlsZSc7IH1cclxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKCFjdXJyZW50SW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB3YXJuJDIoXCJ1c2VDc3NNb2R1bGUgbXVzdCBiZSBjYWxsZWQgaW5zaWRlIHNldHVwKClcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBlbXB0eU9iamVjdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIG1vZCA9IGN1cnJlbnRJbnN0YW5jZVtuYW1lXTtcclxuICAgICAgICBpZiAoIW1vZCkge1xyXG4gICAgICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXHJcbiAgICAgICAgICAgICAgICB3YXJuJDIoXCJDdXJyZW50IGluc3RhbmNlIGRvZXMgbm90IGhhdmUgQ1NTIG1vZHVsZSBuYW1lZCBcXFwiXCIuY29uY2F0KG5hbWUsIFwiXFxcIi5cIikpO1xyXG4gICAgICAgICAgICByZXR1cm4gZW1wdHlPYmplY3Q7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBtb2Q7XHJcbiAgICB9XHJcbn1cblxuLyoqXHJcbiAqIFJ1bnRpbWUgaGVscGVyIGZvciBTRkMncyBDU1MgdmFyaWFibGUgaW5qZWN0aW9uIGZlYXR1cmUuXHJcbiAqIEBwcml2YXRlXHJcbiAqL1xyXG5mdW5jdGlvbiB1c2VDc3NWYXJzKGdldHRlcikge1xyXG4gICAgaWYgKCFpbkJyb3dzZXIgJiYgIWZhbHNlKVxyXG4gICAgICAgIHJldHVybjtcclxuICAgIHZhciBpbnN0YW5jZSA9IGN1cnJlbnRJbnN0YW5jZTtcclxuICAgIGlmICghaW5zdGFuY2UpIHtcclxuICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXHJcbiAgICAgICAgICAgIHdhcm4kMihcInVzZUNzc1ZhcnMgaXMgY2FsbGVkIHdpdGhvdXQgY3VycmVudCBhY3RpdmUgY29tcG9uZW50IGluc3RhbmNlLlwiKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB3YXRjaFBvc3RFZmZlY3QoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBlbCA9IGluc3RhbmNlLiRlbDtcclxuICAgICAgICB2YXIgdmFycyA9IGdldHRlcihpbnN0YW5jZSwgaW5zdGFuY2UuX3NldHVwUHJveHkpO1xyXG4gICAgICAgIGlmIChlbCAmJiBlbC5ub2RlVHlwZSA9PT0gMSkge1xyXG4gICAgICAgICAgICB2YXIgc3R5bGUgPSBlbC5zdHlsZTtcclxuICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIHZhcnMpIHtcclxuICAgICAgICAgICAgICAgIHN0eWxlLnNldFByb3BlcnR5KFwiLS1cIi5jb25jYXQoa2V5KSwgdmFyc1trZXldKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG59XG5cbi8qKlxyXG4gKiB2My1jb21wYXRpYmxlIGFzeW5jIGNvbXBvbmVudCBBUEkuXHJcbiAqIEBpbnRlcm5hbCB0aGUgdHlwZSBpcyBtYW51YWxseSBkZWNsYXJlZCBpbiA8cm9vdD4vdHlwZXMvdjMtZGVmaW5lLWFzeW5jLWNvbXBvbmVudC5kLnRzXHJcbiAqIGJlY2F1c2UgaXQgcmVsaWVzIG9uIGV4aXN0aW5nIG1hbnVhbCB0eXBlc1xyXG4gKi9cclxuZnVuY3Rpb24gZGVmaW5lQXN5bmNDb21wb25lbnQoc291cmNlKSB7XHJcbiAgICBpZiAoaXNGdW5jdGlvbihzb3VyY2UpKSB7XHJcbiAgICAgICAgc291cmNlID0geyBsb2FkZXI6IHNvdXJjZSB9O1xyXG4gICAgfVxyXG4gICAgdmFyIGxvYWRlciA9IHNvdXJjZS5sb2FkZXIsIGxvYWRpbmdDb21wb25lbnQgPSBzb3VyY2UubG9hZGluZ0NvbXBvbmVudCwgZXJyb3JDb21wb25lbnQgPSBzb3VyY2UuZXJyb3JDb21wb25lbnQsIF9hID0gc291cmNlLmRlbGF5LCBkZWxheSA9IF9hID09PSB2b2lkIDAgPyAyMDAgOiBfYSwgdGltZW91dCA9IHNvdXJjZS50aW1lb3V0LCAvLyB1bmRlZmluZWQgPSBuZXZlciB0aW1lcyBvdXRcclxuICAgIF9iID0gc291cmNlLnN1c3BlbnNpYmxlLCAvLyB1bmRlZmluZWQgPSBuZXZlciB0aW1lcyBvdXRcclxuICAgIHN1c3BlbnNpYmxlID0gX2IgPT09IHZvaWQgMCA/IGZhbHNlIDogX2IsIC8vIGluIFZ1ZSAzIGRlZmF1bHQgaXMgdHJ1ZVxyXG4gICAgdXNlck9uRXJyb3IgPSBzb3VyY2Uub25FcnJvcjtcclxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHN1c3BlbnNpYmxlKSB7XHJcbiAgICAgICAgd2FybiQyKFwiVGhlIHN1c3BlbnNpYmxiZSBvcHRpb24gZm9yIGFzeW5jIGNvbXBvbmVudHMgaXMgbm90IHN1cHBvcnRlZCBpbiBWdWUyLiBJdCBpcyBpZ25vcmVkLlwiKTtcclxuICAgIH1cclxuICAgIHZhciBwZW5kaW5nUmVxdWVzdCA9IG51bGw7XHJcbiAgICB2YXIgcmV0cmllcyA9IDA7XHJcbiAgICB2YXIgcmV0cnkgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0cmllcysrO1xyXG4gICAgICAgIHBlbmRpbmdSZXF1ZXN0ID0gbnVsbDtcclxuICAgICAgICByZXR1cm4gbG9hZCgpO1xyXG4gICAgfTtcclxuICAgIHZhciBsb2FkID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciB0aGlzUmVxdWVzdDtcclxuICAgICAgICByZXR1cm4gKHBlbmRpbmdSZXF1ZXN0IHx8XHJcbiAgICAgICAgICAgICh0aGlzUmVxdWVzdCA9IHBlbmRpbmdSZXF1ZXN0ID1cclxuICAgICAgICAgICAgICAgIGxvYWRlcigpXHJcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uIChlcnIpIHtcclxuICAgICAgICAgICAgICAgICAgICBlcnIgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyciA6IG5ldyBFcnJvcihTdHJpbmcoZXJyKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHVzZXJPbkVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdXNlclJldHJ5ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVzb2x2ZShyZXRyeSgpKTsgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1c2VyRmFpbCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlamVjdChlcnIpOyB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlck9uRXJyb3IoZXJyLCB1c2VyUmV0cnksIHVzZXJGYWlsLCByZXRyaWVzICsgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKGNvbXApIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpc1JlcXVlc3QgIT09IHBlbmRpbmdSZXF1ZXN0ICYmIHBlbmRpbmdSZXF1ZXN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwZW5kaW5nUmVxdWVzdDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIWNvbXApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2FybiQyKFwiQXN5bmMgY29tcG9uZW50IGxvYWRlciByZXNvbHZlZCB0byB1bmRlZmluZWQuIFwiICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiSWYgeW91IGFyZSB1c2luZyByZXRyeSgpLCBtYWtlIHN1cmUgdG8gcmV0dXJuIGl0cyByZXR1cm4gdmFsdWUuXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAvLyBpbnRlcm9wIG1vZHVsZSBkZWZhdWx0XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXAgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNvbXAuX19lc01vZHVsZSB8fCBjb21wW1N5bWJvbC50b1N0cmluZ1RhZ10gPT09ICdNb2R1bGUnKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb21wID0gY29tcC5kZWZhdWx0O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBjb21wICYmICFpc09iamVjdChjb21wKSAmJiAhaXNGdW5jdGlvbihjb21wKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGFzeW5jIGNvbXBvbmVudCBsb2FkIHJlc3VsdDogXCIuY29uY2F0KGNvbXApKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbXA7XHJcbiAgICAgICAgICAgICAgICB9KSkpO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGNvbXBvbmVudCA9IGxvYWQoKTtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBjb21wb25lbnQ6IGNvbXBvbmVudCxcclxuICAgICAgICAgICAgZGVsYXk6IGRlbGF5LFxyXG4gICAgICAgICAgICB0aW1lb3V0OiB0aW1lb3V0LFxyXG4gICAgICAgICAgICBlcnJvcjogZXJyb3JDb21wb25lbnQsXHJcbiAgICAgICAgICAgIGxvYWRpbmc6IGxvYWRpbmdDb21wb25lbnRcclxuICAgICAgICB9O1xyXG4gICAgfTtcclxufVxuXG5mdW5jdGlvbiBjcmVhdGVMaWZlQ3ljbGUoaG9va05hbWUpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbiAoZm4sIHRhcmdldCkge1xyXG4gICAgICAgIGlmICh0YXJnZXQgPT09IHZvaWQgMCkgeyB0YXJnZXQgPSBjdXJyZW50SW5zdGFuY2U7IH1cclxuICAgICAgICBpZiAoIXRhcmdldCkge1xyXG4gICAgICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXHJcbiAgICAgICAgICAgICAgICB3YXJuJDIoXCJcIi5jb25jYXQoZm9ybWF0TmFtZShob29rTmFtZSksIFwiIGlzIGNhbGxlZCB3aGVuIHRoZXJlIGlzIG5vIGFjdGl2ZSBjb21wb25lbnQgaW5zdGFuY2UgdG8gYmUgXCIpICtcclxuICAgICAgICAgICAgICAgICAgICBcImFzc29jaWF0ZWQgd2l0aC4gXCIgK1xyXG4gICAgICAgICAgICAgICAgICAgIFwiTGlmZWN5Y2xlIGluamVjdGlvbiBBUElzIGNhbiBvbmx5IGJlIHVzZWQgZHVyaW5nIGV4ZWN1dGlvbiBvZiBzZXR1cCgpLlwiKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gaW5qZWN0SG9vayh0YXJnZXQsIGhvb2tOYW1lLCBmbik7XHJcbiAgICB9O1xyXG59XHJcbmZ1bmN0aW9uIGZvcm1hdE5hbWUobmFtZSkge1xyXG4gICAgaWYgKG5hbWUgPT09ICdiZWZvcmVEZXN0cm95Jykge1xyXG4gICAgICAgIG5hbWUgPSAnYmVmb3JlVW5tb3VudCc7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChuYW1lID09PSAnZGVzdHJveWVkJykge1xyXG4gICAgICAgIG5hbWUgPSAndW5tb3VudGVkJztcclxuICAgIH1cclxuICAgIHJldHVybiBcIm9uXCIuY29uY2F0KG5hbWVbMF0udG9VcHBlckNhc2UoKSArIG5hbWUuc2xpY2UoMSkpO1xyXG59XHJcbmZ1bmN0aW9uIGluamVjdEhvb2soaW5zdGFuY2UsIGhvb2tOYW1lLCBmbikge1xyXG4gICAgdmFyIG9wdGlvbnMgPSBpbnN0YW5jZS4kb3B0aW9ucztcclxuICAgIG9wdGlvbnNbaG9va05hbWVdID0gbWVyZ2VMaWZlY3ljbGVIb29rKG9wdGlvbnNbaG9va05hbWVdLCBmbik7XHJcbn1cclxudmFyIG9uQmVmb3JlTW91bnQgPSBjcmVhdGVMaWZlQ3ljbGUoJ2JlZm9yZU1vdW50Jyk7XHJcbnZhciBvbk1vdW50ZWQgPSBjcmVhdGVMaWZlQ3ljbGUoJ21vdW50ZWQnKTtcclxudmFyIG9uQmVmb3JlVXBkYXRlID0gY3JlYXRlTGlmZUN5Y2xlKCdiZWZvcmVVcGRhdGUnKTtcclxudmFyIG9uVXBkYXRlZCA9IGNyZWF0ZUxpZmVDeWNsZSgndXBkYXRlZCcpO1xyXG52YXIgb25CZWZvcmVVbm1vdW50ID0gY3JlYXRlTGlmZUN5Y2xlKCdiZWZvcmVEZXN0cm95Jyk7XHJcbnZhciBvblVubW91bnRlZCA9IGNyZWF0ZUxpZmVDeWNsZSgnZGVzdHJveWVkJyk7XHJcbnZhciBvbkFjdGl2YXRlZCA9IGNyZWF0ZUxpZmVDeWNsZSgnYWN0aXZhdGVkJyk7XHJcbnZhciBvbkRlYWN0aXZhdGVkID0gY3JlYXRlTGlmZUN5Y2xlKCdkZWFjdGl2YXRlZCcpO1xyXG52YXIgb25TZXJ2ZXJQcmVmZXRjaCA9IGNyZWF0ZUxpZmVDeWNsZSgnc2VydmVyUHJlZmV0Y2gnKTtcclxudmFyIG9uUmVuZGVyVHJhY2tlZCA9IGNyZWF0ZUxpZmVDeWNsZSgncmVuZGVyVHJhY2tlZCcpO1xyXG52YXIgb25SZW5kZXJUcmlnZ2VyZWQgPSBjcmVhdGVMaWZlQ3ljbGUoJ3JlbmRlclRyaWdnZXJlZCcpO1xyXG52YXIgaW5qZWN0RXJyb3JDYXB0dXJlZEhvb2sgPSBjcmVhdGVMaWZlQ3ljbGUoJ2Vycm9yQ2FwdHVyZWQnKTtcclxuZnVuY3Rpb24gb25FcnJvckNhcHR1cmVkKGhvb2ssIHRhcmdldCkge1xyXG4gICAgaWYgKHRhcmdldCA9PT0gdm9pZCAwKSB7IHRhcmdldCA9IGN1cnJlbnRJbnN0YW5jZTsgfVxyXG4gICAgaW5qZWN0RXJyb3JDYXB0dXJlZEhvb2soaG9vaywgdGFyZ2V0KTtcclxufVxuXG4vKipcclxuICogTm90ZTogYWxzbyB1cGRhdGUgZGlzdC92dWUucnVudGltZS5tanMgd2hlbiBhZGRpbmcgbmV3IGV4cG9ydHMgdG8gdGhpcyBmaWxlLlxyXG4gKi9cclxudmFyIHZlcnNpb24gPSAnMi43LjEwJztcclxuLyoqXHJcbiAqIEBpbnRlcm5hbCB0eXBlIGlzIG1hbnVhbGx5IGRlY2xhcmVkIGluIDxyb290Pi90eXBlcy92My1kZWZpbmUtY29tcG9uZW50LmQudHNcclxuICovXHJcbmZ1bmN0aW9uIGRlZmluZUNvbXBvbmVudChvcHRpb25zKSB7XHJcbiAgICByZXR1cm4gb3B0aW9ucztcclxufVxuXG52YXIgc2Vlbk9iamVjdHMgPSBuZXcgX1NldCgpO1xyXG4vKipcclxuICogUmVjdXJzaXZlbHkgdHJhdmVyc2UgYW4gb2JqZWN0IHRvIGV2b2tlIGFsbCBjb252ZXJ0ZWRcclxuICogZ2V0dGVycywgc28gdGhhdCBldmVyeSBuZXN0ZWQgcHJvcGVydHkgaW5zaWRlIHRoZSBvYmplY3RcclxuICogaXMgY29sbGVjdGVkIGFzIGEgXCJkZWVwXCIgZGVwZW5kZW5jeS5cclxuICovXHJcbmZ1bmN0aW9uIHRyYXZlcnNlKHZhbCkge1xyXG4gICAgX3RyYXZlcnNlKHZhbCwgc2Vlbk9iamVjdHMpO1xyXG4gICAgc2Vlbk9iamVjdHMuY2xlYXIoKTtcclxuICAgIHJldHVybiB2YWw7XHJcbn1cclxuZnVuY3Rpb24gX3RyYXZlcnNlKHZhbCwgc2Vlbikge1xyXG4gICAgdmFyIGksIGtleXM7XHJcbiAgICB2YXIgaXNBID0gaXNBcnJheSh2YWwpO1xyXG4gICAgaWYgKCghaXNBICYmICFpc09iamVjdCh2YWwpKSB8fFxyXG4gICAgICAgIE9iamVjdC5pc0Zyb3plbih2YWwpIHx8XHJcbiAgICAgICAgdmFsIGluc3RhbmNlb2YgVk5vZGUpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAodmFsLl9fb2JfXykge1xyXG4gICAgICAgIHZhciBkZXBJZCA9IHZhbC5fX29iX18uZGVwLmlkO1xyXG4gICAgICAgIGlmIChzZWVuLmhhcyhkZXBJZCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzZWVuLmFkZChkZXBJZCk7XHJcbiAgICB9XHJcbiAgICBpZiAoaXNBKSB7XHJcbiAgICAgICAgaSA9IHZhbC5sZW5ndGg7XHJcbiAgICAgICAgd2hpbGUgKGktLSlcclxuICAgICAgICAgICAgX3RyYXZlcnNlKHZhbFtpXSwgc2Vlbik7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChpc1JlZih2YWwpKSB7XHJcbiAgICAgICAgX3RyYXZlcnNlKHZhbC52YWx1ZSwgc2Vlbik7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBrZXlzID0gT2JqZWN0LmtleXModmFsKTtcclxuICAgICAgICBpID0ga2V5cy5sZW5ndGg7XHJcbiAgICAgICAgd2hpbGUgKGktLSlcclxuICAgICAgICAgICAgX3RyYXZlcnNlKHZhbFtrZXlzW2ldXSwgc2Vlbik7XHJcbiAgICB9XHJcbn1cblxudmFyIHVpZCQxID0gMDtcclxuLyoqXHJcbiAqIEEgd2F0Y2hlciBwYXJzZXMgYW4gZXhwcmVzc2lvbiwgY29sbGVjdHMgZGVwZW5kZW5jaWVzLFxyXG4gKiBhbmQgZmlyZXMgY2FsbGJhY2sgd2hlbiB0aGUgZXhwcmVzc2lvbiB2YWx1ZSBjaGFuZ2VzLlxyXG4gKiBUaGlzIGlzIHVzZWQgZm9yIGJvdGggdGhlICR3YXRjaCgpIGFwaSBhbmQgZGlyZWN0aXZlcy5cclxuICogQGludGVybmFsXHJcbiAqL1xyXG52YXIgV2F0Y2hlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIFdhdGNoZXIodm0sIGV4cE9yRm4sIGNiLCBvcHRpb25zLCBpc1JlbmRlcldhdGNoZXIpIHtcclxuICAgICAgICByZWNvcmRFZmZlY3RTY29wZSh0aGlzLCBcclxuICAgICAgICAvLyBpZiB0aGUgYWN0aXZlIGVmZmVjdCBzY29wZSBpcyBtYW51YWxseSBjcmVhdGVkIChub3QgYSBjb21wb25lbnQgc2NvcGUpLFxyXG4gICAgICAgIC8vIHByaW9yaXRpemUgaXRcclxuICAgICAgICBhY3RpdmVFZmZlY3RTY29wZSAmJiAhYWN0aXZlRWZmZWN0U2NvcGUuX3ZtXHJcbiAgICAgICAgICAgID8gYWN0aXZlRWZmZWN0U2NvcGVcclxuICAgICAgICAgICAgOiB2bVxyXG4gICAgICAgICAgICAgICAgPyB2bS5fc2NvcGVcclxuICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkKTtcclxuICAgICAgICBpZiAoKHRoaXMudm0gPSB2bSkgJiYgaXNSZW5kZXJXYXRjaGVyKSB7XHJcbiAgICAgICAgICAgIHZtLl93YXRjaGVyID0gdGhpcztcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gb3B0aW9uc1xyXG4gICAgICAgIGlmIChvcHRpb25zKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGVlcCA9ICEhb3B0aW9ucy5kZWVwO1xyXG4gICAgICAgICAgICB0aGlzLnVzZXIgPSAhIW9wdGlvbnMudXNlcjtcclxuICAgICAgICAgICAgdGhpcy5sYXp5ID0gISFvcHRpb25zLmxhenk7XHJcbiAgICAgICAgICAgIHRoaXMuc3luYyA9ICEhb3B0aW9ucy5zeW5jO1xyXG4gICAgICAgICAgICB0aGlzLmJlZm9yZSA9IG9wdGlvbnMuYmVmb3JlO1xyXG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vblRyYWNrID0gb3B0aW9ucy5vblRyYWNrO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vblRyaWdnZXIgPSBvcHRpb25zLm9uVHJpZ2dlcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5kZWVwID0gdGhpcy51c2VyID0gdGhpcy5sYXp5ID0gdGhpcy5zeW5jID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY2IgPSBjYjtcclxuICAgICAgICB0aGlzLmlkID0gKyt1aWQkMTsgLy8gdWlkIGZvciBiYXRjaGluZ1xyXG4gICAgICAgIHRoaXMuYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnBvc3QgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmRpcnR5ID0gdGhpcy5sYXp5OyAvLyBmb3IgbGF6eSB3YXRjaGVyc1xyXG4gICAgICAgIHRoaXMuZGVwcyA9IFtdO1xyXG4gICAgICAgIHRoaXMubmV3RGVwcyA9IFtdO1xyXG4gICAgICAgIHRoaXMuZGVwSWRzID0gbmV3IF9TZXQoKTtcclxuICAgICAgICB0aGlzLm5ld0RlcElkcyA9IG5ldyBfU2V0KCk7XHJcbiAgICAgICAgdGhpcy5leHByZXNzaW9uID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IGV4cE9yRm4udG9TdHJpbmcoKSA6ICcnO1xyXG4gICAgICAgIC8vIHBhcnNlIGV4cHJlc3Npb24gZm9yIGdldHRlclxyXG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKGV4cE9yRm4pKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0dGVyID0gZXhwT3JGbjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0dGVyID0gcGFyc2VQYXRoKGV4cE9yRm4pO1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuZ2V0dGVyKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdldHRlciA9IG5vb3A7XHJcbiAgICAgICAgICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXHJcbiAgICAgICAgICAgICAgICAgICAgd2FybiQyKFwiRmFpbGVkIHdhdGNoaW5nIHBhdGg6IFxcXCJcIi5jb25jYXQoZXhwT3JGbiwgXCJcXFwiIFwiKSArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICdXYXRjaGVyIG9ubHkgYWNjZXB0cyBzaW1wbGUgZG90LWRlbGltaXRlZCBwYXRocy4gJyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICdGb3IgZnVsbCBjb250cm9sLCB1c2UgYSBmdW5jdGlvbiBpbnN0ZWFkLicsIHZtKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5sYXp5ID8gdW5kZWZpbmVkIDogdGhpcy5nZXQoKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogRXZhbHVhdGUgdGhlIGdldHRlciwgYW5kIHJlLWNvbGxlY3QgZGVwZW5kZW5jaWVzLlxyXG4gICAgICovXHJcbiAgICBXYXRjaGVyLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcHVzaFRhcmdldCh0aGlzKTtcclxuICAgICAgICB2YXIgdmFsdWU7XHJcbiAgICAgICAgdmFyIHZtID0gdGhpcy52bTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IHRoaXMuZ2V0dGVyLmNhbGwodm0sIHZtKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMudXNlcikge1xyXG4gICAgICAgICAgICAgICAgaGFuZGxlRXJyb3IoZSwgdm0sIFwiZ2V0dGVyIGZvciB3YXRjaGVyIFxcXCJcIi5jb25jYXQodGhpcy5leHByZXNzaW9uLCBcIlxcXCJcIikpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBmaW5hbGx5IHtcclxuICAgICAgICAgICAgLy8gXCJ0b3VjaFwiIGV2ZXJ5IHByb3BlcnR5IHNvIHRoZXkgYXJlIGFsbCB0cmFja2VkIGFzXHJcbiAgICAgICAgICAgIC8vIGRlcGVuZGVuY2llcyBmb3IgZGVlcCB3YXRjaGluZ1xyXG4gICAgICAgICAgICBpZiAodGhpcy5kZWVwKSB7XHJcbiAgICAgICAgICAgICAgICB0cmF2ZXJzZSh2YWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcG9wVGFyZ2V0KCk7XHJcbiAgICAgICAgICAgIHRoaXMuY2xlYW51cERlcHMoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogQWRkIGEgZGVwZW5kZW5jeSB0byB0aGlzIGRpcmVjdGl2ZS5cclxuICAgICAqL1xyXG4gICAgV2F0Y2hlci5wcm90b3R5cGUuYWRkRGVwID0gZnVuY3Rpb24gKGRlcCkge1xyXG4gICAgICAgIHZhciBpZCA9IGRlcC5pZDtcclxuICAgICAgICBpZiAoIXRoaXMubmV3RGVwSWRzLmhhcyhpZCkpIHtcclxuICAgICAgICAgICAgdGhpcy5uZXdEZXBJZHMuYWRkKGlkKTtcclxuICAgICAgICAgICAgdGhpcy5uZXdEZXBzLnB1c2goZGVwKTtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmRlcElkcy5oYXMoaWQpKSB7XHJcbiAgICAgICAgICAgICAgICBkZXAuYWRkU3ViKHRoaXMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogQ2xlYW4gdXAgZm9yIGRlcGVuZGVuY3kgY29sbGVjdGlvbi5cclxuICAgICAqL1xyXG4gICAgV2F0Y2hlci5wcm90b3R5cGUuY2xlYW51cERlcHMgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGkgPSB0aGlzLmRlcHMubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgICAgICAgdmFyIGRlcCA9IHRoaXMuZGVwc1tpXTtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLm5ld0RlcElkcy5oYXMoZGVwLmlkKSkge1xyXG4gICAgICAgICAgICAgICAgZGVwLnJlbW92ZVN1Yih0aGlzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgdG1wID0gdGhpcy5kZXBJZHM7XHJcbiAgICAgICAgdGhpcy5kZXBJZHMgPSB0aGlzLm5ld0RlcElkcztcclxuICAgICAgICB0aGlzLm5ld0RlcElkcyA9IHRtcDtcclxuICAgICAgICB0aGlzLm5ld0RlcElkcy5jbGVhcigpO1xyXG4gICAgICAgIHRtcCA9IHRoaXMuZGVwcztcclxuICAgICAgICB0aGlzLmRlcHMgPSB0aGlzLm5ld0RlcHM7XHJcbiAgICAgICAgdGhpcy5uZXdEZXBzID0gdG1wO1xyXG4gICAgICAgIHRoaXMubmV3RGVwcy5sZW5ndGggPSAwO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogU3Vic2NyaWJlciBpbnRlcmZhY2UuXHJcbiAgICAgKiBXaWxsIGJlIGNhbGxlZCB3aGVuIGEgZGVwZW5kZW5jeSBjaGFuZ2VzLlxyXG4gICAgICovXHJcbiAgICBXYXRjaGVyLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cclxuICAgICAgICBpZiAodGhpcy5sYXp5KSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0aGlzLnN5bmMpIHtcclxuICAgICAgICAgICAgdGhpcy5ydW4oKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHF1ZXVlV2F0Y2hlcih0aGlzKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBTY2hlZHVsZXIgam9iIGludGVyZmFjZS5cclxuICAgICAqIFdpbGwgYmUgY2FsbGVkIGJ5IHRoZSBzY2hlZHVsZXIuXHJcbiAgICAgKi9cclxuICAgIFdhdGNoZXIucHJvdG90eXBlLnJ1biA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAodGhpcy5hY3RpdmUpIHtcclxuICAgICAgICAgICAgdmFyIHZhbHVlID0gdGhpcy5nZXQoKTtcclxuICAgICAgICAgICAgaWYgKHZhbHVlICE9PSB0aGlzLnZhbHVlIHx8XHJcbiAgICAgICAgICAgICAgICAvLyBEZWVwIHdhdGNoZXJzIGFuZCB3YXRjaGVycyBvbiBPYmplY3QvQXJyYXlzIHNob3VsZCBmaXJlIGV2ZW5cclxuICAgICAgICAgICAgICAgIC8vIHdoZW4gdGhlIHZhbHVlIGlzIHRoZSBzYW1lLCBiZWNhdXNlIHRoZSB2YWx1ZSBtYXlcclxuICAgICAgICAgICAgICAgIC8vIGhhdmUgbXV0YXRlZC5cclxuICAgICAgICAgICAgICAgIGlzT2JqZWN0KHZhbHVlKSB8fFxyXG4gICAgICAgICAgICAgICAgdGhpcy5kZWVwKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBzZXQgbmV3IHZhbHVlXHJcbiAgICAgICAgICAgICAgICB2YXIgb2xkVmFsdWUgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudXNlcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBpbmZvID0gXCJjYWxsYmFjayBmb3Igd2F0Y2hlciBcXFwiXCIuY29uY2F0KHRoaXMuZXhwcmVzc2lvbiwgXCJcXFwiXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGludm9rZVdpdGhFcnJvckhhbmRsaW5nKHRoaXMuY2IsIHRoaXMudm0sIFt2YWx1ZSwgb2xkVmFsdWVdLCB0aGlzLnZtLCBpbmZvKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2IuY2FsbCh0aGlzLnZtLCB2YWx1ZSwgb2xkVmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogRXZhbHVhdGUgdGhlIHZhbHVlIG9mIHRoZSB3YXRjaGVyLlxyXG4gICAgICogVGhpcyBvbmx5IGdldHMgY2FsbGVkIGZvciBsYXp5IHdhdGNoZXJzLlxyXG4gICAgICovXHJcbiAgICBXYXRjaGVyLnByb3RvdHlwZS5ldmFsdWF0ZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5nZXQoKTtcclxuICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBEZXBlbmQgb24gYWxsIGRlcHMgY29sbGVjdGVkIGJ5IHRoaXMgd2F0Y2hlci5cclxuICAgICAqL1xyXG4gICAgV2F0Y2hlci5wcm90b3R5cGUuZGVwZW5kID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBpID0gdGhpcy5kZXBzLmxlbmd0aDtcclxuICAgICAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGVwc1tpXS5kZXBlbmQoKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmUgc2VsZiBmcm9tIGFsbCBkZXBlbmRlbmNpZXMnIHN1YnNjcmliZXIgbGlzdC5cclxuICAgICAqL1xyXG4gICAgV2F0Y2hlci5wcm90b3R5cGUudGVhcmRvd24gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMudm0gJiYgIXRoaXMudm0uX2lzQmVpbmdEZXN0cm95ZWQpIHtcclxuICAgICAgICAgICAgcmVtb3ZlJDIodGhpcy52bS5fc2NvcGUuZWZmZWN0cywgdGhpcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZSkge1xyXG4gICAgICAgICAgICB2YXIgaSA9IHRoaXMuZGVwcy5sZW5ndGg7XHJcbiAgICAgICAgICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGVwc1tpXS5yZW1vdmVTdWIodGhpcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgaWYgKHRoaXMub25TdG9wKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9uU3RvcCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIHJldHVybiBXYXRjaGVyO1xyXG59KCkpO1xuXG52YXIgc2hhcmVkUHJvcGVydHlEZWZpbml0aW9uID0ge1xyXG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcclxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcclxuICAgIGdldDogbm9vcCxcclxuICAgIHNldDogbm9vcFxyXG59O1xyXG5mdW5jdGlvbiBwcm94eSh0YXJnZXQsIHNvdXJjZUtleSwga2V5KSB7XHJcbiAgICBzaGFyZWRQcm9wZXJ0eURlZmluaXRpb24uZ2V0ID0gZnVuY3Rpb24gcHJveHlHZXR0ZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXNbc291cmNlS2V5XVtrZXldO1xyXG4gICAgfTtcclxuICAgIHNoYXJlZFByb3BlcnR5RGVmaW5pdGlvbi5zZXQgPSBmdW5jdGlvbiBwcm94eVNldHRlcih2YWwpIHtcclxuICAgICAgICB0aGlzW3NvdXJjZUtleV1ba2V5XSA9IHZhbDtcclxuICAgIH07XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNoYXJlZFByb3BlcnR5RGVmaW5pdGlvbik7XHJcbn1cclxuZnVuY3Rpb24gaW5pdFN0YXRlKHZtKSB7XHJcbiAgICB2YXIgb3B0cyA9IHZtLiRvcHRpb25zO1xyXG4gICAgaWYgKG9wdHMucHJvcHMpXHJcbiAgICAgICAgaW5pdFByb3BzJDEodm0sIG9wdHMucHJvcHMpO1xyXG4gICAgLy8gQ29tcG9zaXRpb24gQVBJXHJcbiAgICBpbml0U2V0dXAodm0pO1xyXG4gICAgaWYgKG9wdHMubWV0aG9kcylcclxuICAgICAgICBpbml0TWV0aG9kcyh2bSwgb3B0cy5tZXRob2RzKTtcclxuICAgIGlmIChvcHRzLmRhdGEpIHtcclxuICAgICAgICBpbml0RGF0YSh2bSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICB2YXIgb2IgPSBvYnNlcnZlKCh2bS5fZGF0YSA9IHt9KSk7XHJcbiAgICAgICAgb2IgJiYgb2Iudm1Db3VudCsrO1xyXG4gICAgfVxyXG4gICAgaWYgKG9wdHMuY29tcHV0ZWQpXHJcbiAgICAgICAgaW5pdENvbXB1dGVkJDEodm0sIG9wdHMuY29tcHV0ZWQpO1xyXG4gICAgaWYgKG9wdHMud2F0Y2ggJiYgb3B0cy53YXRjaCAhPT0gbmF0aXZlV2F0Y2gpIHtcclxuICAgICAgICBpbml0V2F0Y2godm0sIG9wdHMud2F0Y2gpO1xyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIGluaXRQcm9wcyQxKHZtLCBwcm9wc09wdGlvbnMpIHtcclxuICAgIHZhciBwcm9wc0RhdGEgPSB2bS4kb3B0aW9ucy5wcm9wc0RhdGEgfHwge307XHJcbiAgICB2YXIgcHJvcHMgPSAodm0uX3Byb3BzID0gc2hhbGxvd1JlYWN0aXZlKHt9KSk7XHJcbiAgICAvLyBjYWNoZSBwcm9wIGtleXMgc28gdGhhdCBmdXR1cmUgcHJvcHMgdXBkYXRlcyBjYW4gaXRlcmF0ZSB1c2luZyBBcnJheVxyXG4gICAgLy8gaW5zdGVhZCBvZiBkeW5hbWljIG9iamVjdCBrZXkgZW51bWVyYXRpb24uXHJcbiAgICB2YXIga2V5cyA9ICh2bS4kb3B0aW9ucy5fcHJvcEtleXMgPSBbXSk7XHJcbiAgICB2YXIgaXNSb290ID0gIXZtLiRwYXJlbnQ7XHJcbiAgICAvLyByb290IGluc3RhbmNlIHByb3BzIHNob3VsZCBiZSBjb252ZXJ0ZWRcclxuICAgIGlmICghaXNSb290KSB7XHJcbiAgICAgICAgdG9nZ2xlT2JzZXJ2aW5nKGZhbHNlKTtcclxuICAgIH1cclxuICAgIHZhciBfbG9vcF8xID0gZnVuY3Rpb24gKGtleSkge1xyXG4gICAgICAgIGtleXMucHVzaChrZXkpO1xyXG4gICAgICAgIHZhciB2YWx1ZSA9IHZhbGlkYXRlUHJvcChrZXksIHByb3BzT3B0aW9ucywgcHJvcHNEYXRhLCB2bSk7XHJcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cclxuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xyXG4gICAgICAgICAgICB2YXIgaHlwaGVuYXRlZEtleSA9IGh5cGhlbmF0ZShrZXkpO1xyXG4gICAgICAgICAgICBpZiAoaXNSZXNlcnZlZEF0dHJpYnV0ZShoeXBoZW5hdGVkS2V5KSB8fFxyXG4gICAgICAgICAgICAgICAgY29uZmlnLmlzUmVzZXJ2ZWRBdHRyKGh5cGhlbmF0ZWRLZXkpKSB7XHJcbiAgICAgICAgICAgICAgICB3YXJuJDIoXCJcXFwiXCIuY29uY2F0KGh5cGhlbmF0ZWRLZXksIFwiXFxcIiBpcyBhIHJlc2VydmVkIGF0dHJpYnV0ZSBhbmQgY2Fubm90IGJlIHVzZWQgYXMgY29tcG9uZW50IHByb3AuXCIpLCB2bSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZGVmaW5lUmVhY3RpdmUocHJvcHMsIGtleSwgdmFsdWUsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGlmICghaXNSb290ICYmICFpc1VwZGF0aW5nQ2hpbGRDb21wb25lbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICB3YXJuJDIoXCJBdm9pZCBtdXRhdGluZyBhIHByb3AgZGlyZWN0bHkgc2luY2UgdGhlIHZhbHVlIHdpbGwgYmUgXCIgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIm92ZXJ3cml0dGVuIHdoZW5ldmVyIHRoZSBwYXJlbnQgY29tcG9uZW50IHJlLXJlbmRlcnMuIFwiICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJJbnN0ZWFkLCB1c2UgYSBkYXRhIG9yIGNvbXB1dGVkIHByb3BlcnR5IGJhc2VkIG9uIHRoZSBwcm9wJ3MgXCIgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBcInZhbHVlLiBQcm9wIGJlaW5nIG11dGF0ZWQ6IFxcXCJcIi5jb25jYXQoa2V5LCBcIlxcXCJcIiksIHZtKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBkZWZpbmVSZWFjdGl2ZShwcm9wcywga2V5LCB2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHN0YXRpYyBwcm9wcyBhcmUgYWxyZWFkeSBwcm94aWVkIG9uIHRoZSBjb21wb25lbnQncyBwcm90b3R5cGVcclxuICAgICAgICAvLyBkdXJpbmcgVnVlLmV4dGVuZCgpLiBXZSBvbmx5IG5lZWQgdG8gcHJveHkgcHJvcHMgZGVmaW5lZCBhdFxyXG4gICAgICAgIC8vIGluc3RhbnRpYXRpb24gaGVyZS5cclxuICAgICAgICBpZiAoIShrZXkgaW4gdm0pKSB7XHJcbiAgICAgICAgICAgIHByb3h5KHZtLCBcIl9wcm9wc1wiLCBrZXkpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBmb3IgKHZhciBrZXkgaW4gcHJvcHNPcHRpb25zKSB7XHJcbiAgICAgICAgX2xvb3BfMShrZXkpO1xyXG4gICAgfVxyXG4gICAgdG9nZ2xlT2JzZXJ2aW5nKHRydWUpO1xyXG59XHJcbmZ1bmN0aW9uIGluaXREYXRhKHZtKSB7XHJcbiAgICB2YXIgZGF0YSA9IHZtLiRvcHRpb25zLmRhdGE7XHJcbiAgICBkYXRhID0gdm0uX2RhdGEgPSBpc0Z1bmN0aW9uKGRhdGEpID8gZ2V0RGF0YShkYXRhLCB2bSkgOiBkYXRhIHx8IHt9O1xyXG4gICAgaWYgKCFpc1BsYWluT2JqZWN0KGRhdGEpKSB7XHJcbiAgICAgICAgZGF0YSA9IHt9O1xyXG4gICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiZcclxuICAgICAgICAgICAgd2FybiQyKCdkYXRhIGZ1bmN0aW9ucyBzaG91bGQgcmV0dXJuIGFuIG9iamVjdDpcXG4nICtcclxuICAgICAgICAgICAgICAgICdodHRwczovL3YyLnZ1ZWpzLm9yZy92Mi9ndWlkZS9jb21wb25lbnRzLmh0bWwjZGF0YS1NdXN0LUJlLWEtRnVuY3Rpb24nLCB2bSk7XHJcbiAgICB9XHJcbiAgICAvLyBwcm94eSBkYXRhIG9uIGluc3RhbmNlXHJcbiAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKGRhdGEpO1xyXG4gICAgdmFyIHByb3BzID0gdm0uJG9wdGlvbnMucHJvcHM7XHJcbiAgICB2YXIgbWV0aG9kcyA9IHZtLiRvcHRpb25zLm1ldGhvZHM7XHJcbiAgICB2YXIgaSA9IGtleXMubGVuZ3RoO1xyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xyXG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XHJcbiAgICAgICAgICAgIGlmIChtZXRob2RzICYmIGhhc093bihtZXRob2RzLCBrZXkpKSB7XHJcbiAgICAgICAgICAgICAgICB3YXJuJDIoXCJNZXRob2QgXFxcIlwiLmNvbmNhdChrZXksIFwiXFxcIiBoYXMgYWxyZWFkeSBiZWVuIGRlZmluZWQgYXMgYSBkYXRhIHByb3BlcnR5LlwiKSwgdm0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChwcm9wcyAmJiBoYXNPd24ocHJvcHMsIGtleSkpIHtcclxuICAgICAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJlxyXG4gICAgICAgICAgICAgICAgd2FybiQyKFwiVGhlIGRhdGEgcHJvcGVydHkgXFxcIlwiLmNvbmNhdChrZXksIFwiXFxcIiBpcyBhbHJlYWR5IGRlY2xhcmVkIGFzIGEgcHJvcC4gXCIpICtcclxuICAgICAgICAgICAgICAgICAgICBcIlVzZSBwcm9wIGRlZmF1bHQgdmFsdWUgaW5zdGVhZC5cIiwgdm0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICghaXNSZXNlcnZlZChrZXkpKSB7XHJcbiAgICAgICAgICAgIHByb3h5KHZtLCBcIl9kYXRhXCIsIGtleSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gb2JzZXJ2ZSBkYXRhXHJcbiAgICB2YXIgb2IgPSBvYnNlcnZlKGRhdGEpO1xyXG4gICAgb2IgJiYgb2Iudm1Db3VudCsrO1xyXG59XHJcbmZ1bmN0aW9uIGdldERhdGEoZGF0YSwgdm0pIHtcclxuICAgIC8vICM3NTczIGRpc2FibGUgZGVwIGNvbGxlY3Rpb24gd2hlbiBpbnZva2luZyBkYXRhIGdldHRlcnNcclxuICAgIHB1c2hUYXJnZXQoKTtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgcmV0dXJuIGRhdGEuY2FsbCh2bSwgdm0pO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICBoYW5kbGVFcnJvcihlLCB2bSwgXCJkYXRhKClcIik7XHJcbiAgICAgICAgcmV0dXJuIHt9O1xyXG4gICAgfVxyXG4gICAgZmluYWxseSB7XHJcbiAgICAgICAgcG9wVGFyZ2V0KCk7XHJcbiAgICB9XHJcbn1cclxudmFyIGNvbXB1dGVkV2F0Y2hlck9wdGlvbnMgPSB7IGxhenk6IHRydWUgfTtcclxuZnVuY3Rpb24gaW5pdENvbXB1dGVkJDEodm0sIGNvbXB1dGVkKSB7XHJcbiAgICAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcclxuICAgIHZhciB3YXRjaGVycyA9ICh2bS5fY29tcHV0ZWRXYXRjaGVycyA9IE9iamVjdC5jcmVhdGUobnVsbCkpO1xyXG4gICAgLy8gY29tcHV0ZWQgcHJvcGVydGllcyBhcmUganVzdCBnZXR0ZXJzIGR1cmluZyBTU1JcclxuICAgIHZhciBpc1NTUiA9IGlzU2VydmVyUmVuZGVyaW5nKCk7XHJcbiAgICBmb3IgKHZhciBrZXkgaW4gY29tcHV0ZWQpIHtcclxuICAgICAgICB2YXIgdXNlckRlZiA9IGNvbXB1dGVkW2tleV07XHJcbiAgICAgICAgdmFyIGdldHRlciA9IGlzRnVuY3Rpb24odXNlckRlZikgPyB1c2VyRGVmIDogdXNlckRlZi5nZXQ7XHJcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgZ2V0dGVyID09IG51bGwpIHtcclxuICAgICAgICAgICAgd2FybiQyKFwiR2V0dGVyIGlzIG1pc3NpbmcgZm9yIGNvbXB1dGVkIHByb3BlcnR5IFxcXCJcIi5jb25jYXQoa2V5LCBcIlxcXCIuXCIpLCB2bSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghaXNTU1IpIHtcclxuICAgICAgICAgICAgLy8gY3JlYXRlIGludGVybmFsIHdhdGNoZXIgZm9yIHRoZSBjb21wdXRlZCBwcm9wZXJ0eS5cclxuICAgICAgICAgICAgd2F0Y2hlcnNba2V5XSA9IG5ldyBXYXRjaGVyKHZtLCBnZXR0ZXIgfHwgbm9vcCwgbm9vcCwgY29tcHV0ZWRXYXRjaGVyT3B0aW9ucyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGNvbXBvbmVudC1kZWZpbmVkIGNvbXB1dGVkIHByb3BlcnRpZXMgYXJlIGFscmVhZHkgZGVmaW5lZCBvbiB0aGVcclxuICAgICAgICAvLyBjb21wb25lbnQgcHJvdG90eXBlLiBXZSBvbmx5IG5lZWQgdG8gZGVmaW5lIGNvbXB1dGVkIHByb3BlcnRpZXMgZGVmaW5lZFxyXG4gICAgICAgIC8vIGF0IGluc3RhbnRpYXRpb24gaGVyZS5cclxuICAgICAgICBpZiAoIShrZXkgaW4gdm0pKSB7XHJcbiAgICAgICAgICAgIGRlZmluZUNvbXB1dGVkKHZtLCBrZXksIHVzZXJEZWYpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XHJcbiAgICAgICAgICAgIGlmIChrZXkgaW4gdm0uJGRhdGEpIHtcclxuICAgICAgICAgICAgICAgIHdhcm4kMihcIlRoZSBjb21wdXRlZCBwcm9wZXJ0eSBcXFwiXCIuY29uY2F0KGtleSwgXCJcXFwiIGlzIGFscmVhZHkgZGVmaW5lZCBpbiBkYXRhLlwiKSwgdm0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHZtLiRvcHRpb25zLnByb3BzICYmIGtleSBpbiB2bS4kb3B0aW9ucy5wcm9wcykge1xyXG4gICAgICAgICAgICAgICAgd2FybiQyKFwiVGhlIGNvbXB1dGVkIHByb3BlcnR5IFxcXCJcIi5jb25jYXQoa2V5LCBcIlxcXCIgaXMgYWxyZWFkeSBkZWZpbmVkIGFzIGEgcHJvcC5cIiksIHZtKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICh2bS4kb3B0aW9ucy5tZXRob2RzICYmIGtleSBpbiB2bS4kb3B0aW9ucy5tZXRob2RzKSB7XHJcbiAgICAgICAgICAgICAgICB3YXJuJDIoXCJUaGUgY29tcHV0ZWQgcHJvcGVydHkgXFxcIlwiLmNvbmNhdChrZXksIFwiXFxcIiBpcyBhbHJlYWR5IGRlZmluZWQgYXMgYSBtZXRob2QuXCIpLCB2bSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gZGVmaW5lQ29tcHV0ZWQodGFyZ2V0LCBrZXksIHVzZXJEZWYpIHtcclxuICAgIHZhciBzaG91bGRDYWNoZSA9ICFpc1NlcnZlclJlbmRlcmluZygpO1xyXG4gICAgaWYgKGlzRnVuY3Rpb24odXNlckRlZikpIHtcclxuICAgICAgICBzaGFyZWRQcm9wZXJ0eURlZmluaXRpb24uZ2V0ID0gc2hvdWxkQ2FjaGVcclxuICAgICAgICAgICAgPyBjcmVhdGVDb21wdXRlZEdldHRlcihrZXkpXHJcbiAgICAgICAgICAgIDogY3JlYXRlR2V0dGVySW52b2tlcih1c2VyRGVmKTtcclxuICAgICAgICBzaGFyZWRQcm9wZXJ0eURlZmluaXRpb24uc2V0ID0gbm9vcDtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHNoYXJlZFByb3BlcnR5RGVmaW5pdGlvbi5nZXQgPSB1c2VyRGVmLmdldFxyXG4gICAgICAgICAgICA/IHNob3VsZENhY2hlICYmIHVzZXJEZWYuY2FjaGUgIT09IGZhbHNlXHJcbiAgICAgICAgICAgICAgICA/IGNyZWF0ZUNvbXB1dGVkR2V0dGVyKGtleSlcclxuICAgICAgICAgICAgICAgIDogY3JlYXRlR2V0dGVySW52b2tlcih1c2VyRGVmLmdldClcclxuICAgICAgICAgICAgOiBub29wO1xyXG4gICAgICAgIHNoYXJlZFByb3BlcnR5RGVmaW5pdGlvbi5zZXQgPSB1c2VyRGVmLnNldCB8fCBub29wO1xyXG4gICAgfVxyXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgc2hhcmVkUHJvcGVydHlEZWZpbml0aW9uLnNldCA9PT0gbm9vcCkge1xyXG4gICAgICAgIHNoYXJlZFByb3BlcnR5RGVmaW5pdGlvbi5zZXQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHdhcm4kMihcIkNvbXB1dGVkIHByb3BlcnR5IFxcXCJcIi5jb25jYXQoa2V5LCBcIlxcXCIgd2FzIGFzc2lnbmVkIHRvIGJ1dCBpdCBoYXMgbm8gc2V0dGVyLlwiKSwgdGhpcyk7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc2hhcmVkUHJvcGVydHlEZWZpbml0aW9uKTtcclxufVxyXG5mdW5jdGlvbiBjcmVhdGVDb21wdXRlZEdldHRlcihrZXkpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbiBjb21wdXRlZEdldHRlcigpIHtcclxuICAgICAgICB2YXIgd2F0Y2hlciA9IHRoaXMuX2NvbXB1dGVkV2F0Y2hlcnMgJiYgdGhpcy5fY29tcHV0ZWRXYXRjaGVyc1trZXldO1xyXG4gICAgICAgIGlmICh3YXRjaGVyKSB7XHJcbiAgICAgICAgICAgIGlmICh3YXRjaGVyLmRpcnR5KSB7XHJcbiAgICAgICAgICAgICAgICB3YXRjaGVyLmV2YWx1YXRlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKERlcC50YXJnZXQpIHtcclxuICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIERlcC50YXJnZXQub25UcmFjaykge1xyXG4gICAgICAgICAgICAgICAgICAgIERlcC50YXJnZXQub25UcmFjayh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVmZmVjdDogRGVwLnRhcmdldCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0OiB0aGlzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImdldFwiIC8qIFRyYWNrT3BUeXBlcy5HRVQgKi8sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleToga2V5XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB3YXRjaGVyLmRlcGVuZCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB3YXRjaGVyLnZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn1cclxuZnVuY3Rpb24gY3JlYXRlR2V0dGVySW52b2tlcihmbikge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIGNvbXB1dGVkR2V0dGVyKCkge1xyXG4gICAgICAgIHJldHVybiBmbi5jYWxsKHRoaXMsIHRoaXMpO1xyXG4gICAgfTtcclxufVxyXG5mdW5jdGlvbiBpbml0TWV0aG9kcyh2bSwgbWV0aG9kcykge1xyXG4gICAgdmFyIHByb3BzID0gdm0uJG9wdGlvbnMucHJvcHM7XHJcbiAgICBmb3IgKHZhciBrZXkgaW4gbWV0aG9kcykge1xyXG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgbWV0aG9kc1trZXldICE9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICB3YXJuJDIoXCJNZXRob2QgXFxcIlwiLmNvbmNhdChrZXksIFwiXFxcIiBoYXMgdHlwZSBcXFwiXCIpLmNvbmNhdCh0eXBlb2YgbWV0aG9kc1trZXldLCBcIlxcXCIgaW4gdGhlIGNvbXBvbmVudCBkZWZpbml0aW9uLiBcIikgK1xyXG4gICAgICAgICAgICAgICAgICAgIFwiRGlkIHlvdSByZWZlcmVuY2UgdGhlIGZ1bmN0aW9uIGNvcnJlY3RseT9cIiwgdm0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChwcm9wcyAmJiBoYXNPd24ocHJvcHMsIGtleSkpIHtcclxuICAgICAgICAgICAgICAgIHdhcm4kMihcIk1ldGhvZCBcXFwiXCIuY29uY2F0KGtleSwgXCJcXFwiIGhhcyBhbHJlYWR5IGJlZW4gZGVmaW5lZCBhcyBhIHByb3AuXCIpLCB2bSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGtleSBpbiB2bSAmJiBpc1Jlc2VydmVkKGtleSkpIHtcclxuICAgICAgICAgICAgICAgIHdhcm4kMihcIk1ldGhvZCBcXFwiXCIuY29uY2F0KGtleSwgXCJcXFwiIGNvbmZsaWN0cyB3aXRoIGFuIGV4aXN0aW5nIFZ1ZSBpbnN0YW5jZSBtZXRob2QuIFwiKSArXHJcbiAgICAgICAgICAgICAgICAgICAgXCJBdm9pZCBkZWZpbmluZyBjb21wb25lbnQgbWV0aG9kcyB0aGF0IHN0YXJ0IHdpdGggXyBvciAkLlwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB2bVtrZXldID0gdHlwZW9mIG1ldGhvZHNba2V5XSAhPT0gJ2Z1bmN0aW9uJyA/IG5vb3AgOiBiaW5kJDEobWV0aG9kc1trZXldLCB2bSk7XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gaW5pdFdhdGNoKHZtLCB3YXRjaCkge1xyXG4gICAgZm9yICh2YXIga2V5IGluIHdhdGNoKSB7XHJcbiAgICAgICAgdmFyIGhhbmRsZXIgPSB3YXRjaFtrZXldO1xyXG4gICAgICAgIGlmIChpc0FycmF5KGhhbmRsZXIpKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaGFuZGxlci5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgY3JlYXRlV2F0Y2hlcih2bSwga2V5LCBoYW5kbGVyW2ldKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgY3JlYXRlV2F0Y2hlcih2bSwga2V5LCBoYW5kbGVyKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gY3JlYXRlV2F0Y2hlcih2bSwgZXhwT3JGbiwgaGFuZGxlciwgb3B0aW9ucykge1xyXG4gICAgaWYgKGlzUGxhaW5PYmplY3QoaGFuZGxlcikpIHtcclxuICAgICAgICBvcHRpb25zID0gaGFuZGxlcjtcclxuICAgICAgICBoYW5kbGVyID0gaGFuZGxlci5oYW5kbGVyO1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiBoYW5kbGVyID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIGhhbmRsZXIgPSB2bVtoYW5kbGVyXTtcclxuICAgIH1cclxuICAgIHJldHVybiB2bS4kd2F0Y2goZXhwT3JGbiwgaGFuZGxlciwgb3B0aW9ucyk7XHJcbn1cclxuZnVuY3Rpb24gc3RhdGVNaXhpbihWdWUpIHtcclxuICAgIC8vIGZsb3cgc29tZWhvdyBoYXMgcHJvYmxlbXMgd2l0aCBkaXJlY3RseSBkZWNsYXJlZCBkZWZpbml0aW9uIG9iamVjdFxyXG4gICAgLy8gd2hlbiB1c2luZyBPYmplY3QuZGVmaW5lUHJvcGVydHksIHNvIHdlIGhhdmUgdG8gcHJvY2VkdXJhbGx5IGJ1aWxkIHVwXHJcbiAgICAvLyB0aGUgb2JqZWN0IGhlcmUuXHJcbiAgICB2YXIgZGF0YURlZiA9IHt9O1xyXG4gICAgZGF0YURlZi5nZXQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGE7XHJcbiAgICB9O1xyXG4gICAgdmFyIHByb3BzRGVmID0ge307XHJcbiAgICBwcm9wc0RlZi5nZXQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Byb3BzO1xyXG4gICAgfTtcclxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XHJcbiAgICAgICAgZGF0YURlZi5zZXQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHdhcm4kMignQXZvaWQgcmVwbGFjaW5nIGluc3RhbmNlIHJvb3QgJGRhdGEuICcgK1xyXG4gICAgICAgICAgICAgICAgJ1VzZSBuZXN0ZWQgZGF0YSBwcm9wZXJ0aWVzIGluc3RlYWQuJywgdGhpcyk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBwcm9wc0RlZi5zZXQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHdhcm4kMihcIiRwcm9wcyBpcyByZWFkb25seS5cIiwgdGhpcyk7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShWdWUucHJvdG90eXBlLCAnJGRhdGEnLCBkYXRhRGVmKTtcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShWdWUucHJvdG90eXBlLCAnJHByb3BzJywgcHJvcHNEZWYpO1xyXG4gICAgVnVlLnByb3RvdHlwZS4kc2V0ID0gc2V0O1xyXG4gICAgVnVlLnByb3RvdHlwZS4kZGVsZXRlID0gZGVsO1xyXG4gICAgVnVlLnByb3RvdHlwZS4kd2F0Y2ggPSBmdW5jdGlvbiAoZXhwT3JGbiwgY2IsIG9wdGlvbnMpIHtcclxuICAgICAgICB2YXIgdm0gPSB0aGlzO1xyXG4gICAgICAgIGlmIChpc1BsYWluT2JqZWN0KGNiKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlV2F0Y2hlcih2bSwgZXhwT3JGbiwgY2IsIG9wdGlvbnMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcclxuICAgICAgICBvcHRpb25zLnVzZXIgPSB0cnVlO1xyXG4gICAgICAgIHZhciB3YXRjaGVyID0gbmV3IFdhdGNoZXIodm0sIGV4cE9yRm4sIGNiLCBvcHRpb25zKTtcclxuICAgICAgICBpZiAob3B0aW9ucy5pbW1lZGlhdGUpIHtcclxuICAgICAgICAgICAgdmFyIGluZm8gPSBcImNhbGxiYWNrIGZvciBpbW1lZGlhdGUgd2F0Y2hlciBcXFwiXCIuY29uY2F0KHdhdGNoZXIuZXhwcmVzc2lvbiwgXCJcXFwiXCIpO1xyXG4gICAgICAgICAgICBwdXNoVGFyZ2V0KCk7XHJcbiAgICAgICAgICAgIGludm9rZVdpdGhFcnJvckhhbmRsaW5nKGNiLCB2bSwgW3dhdGNoZXIudmFsdWVdLCB2bSwgaW5mbyk7XHJcbiAgICAgICAgICAgIHBvcFRhcmdldCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gdW53YXRjaEZuKCkge1xyXG4gICAgICAgICAgICB3YXRjaGVyLnRlYXJkb3duKCk7XHJcbiAgICAgICAgfTtcclxuICAgIH07XHJcbn1cblxuZnVuY3Rpb24gaW5pdFByb3ZpZGUodm0pIHtcclxuICAgIHZhciBwcm92aWRlT3B0aW9uID0gdm0uJG9wdGlvbnMucHJvdmlkZTtcclxuICAgIGlmIChwcm92aWRlT3B0aW9uKSB7XHJcbiAgICAgICAgdmFyIHByb3ZpZGVkID0gaXNGdW5jdGlvbihwcm92aWRlT3B0aW9uKVxyXG4gICAgICAgICAgICA/IHByb3ZpZGVPcHRpb24uY2FsbCh2bSlcclxuICAgICAgICAgICAgOiBwcm92aWRlT3B0aW9uO1xyXG4gICAgICAgIGlmICghaXNPYmplY3QocHJvdmlkZWQpKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHNvdXJjZSA9IHJlc29sdmVQcm92aWRlZCh2bSk7XHJcbiAgICAgICAgLy8gSUU5IGRvZXNuJ3Qgc3VwcG9ydCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyBzbyB3ZSBoYXZlIHRvXHJcbiAgICAgICAgLy8gaXRlcmF0ZSB0aGUga2V5cyBvdXJzZWx2ZXMuXHJcbiAgICAgICAgdmFyIGtleXMgPSBoYXNTeW1ib2wgPyBSZWZsZWN0Lm93bktleXMocHJvdmlkZWQpIDogT2JqZWN0LmtleXMocHJvdmlkZWQpO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIga2V5ID0ga2V5c1tpXTtcclxuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHNvdXJjZSwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHByb3ZpZGVkLCBrZXkpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gaW5pdEluamVjdGlvbnModm0pIHtcclxuICAgIHZhciByZXN1bHQgPSByZXNvbHZlSW5qZWN0KHZtLiRvcHRpb25zLmluamVjdCwgdm0pO1xyXG4gICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgIHRvZ2dsZU9ic2VydmluZyhmYWxzZSk7XHJcbiAgICAgICAgT2JqZWN0LmtleXMocmVzdWx0KS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcclxuICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cclxuICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcclxuICAgICAgICAgICAgICAgIGRlZmluZVJlYWN0aXZlKHZtLCBrZXksIHJlc3VsdFtrZXldLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgd2FybiQyKFwiQXZvaWQgbXV0YXRpbmcgYW4gaW5qZWN0ZWQgdmFsdWUgZGlyZWN0bHkgc2luY2UgdGhlIGNoYW5nZXMgd2lsbCBiZSBcIiArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwib3ZlcndyaXR0ZW4gd2hlbmV2ZXIgdGhlIHByb3ZpZGVkIGNvbXBvbmVudCByZS1yZW5kZXJzLiBcIiArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiaW5qZWN0aW9uIGJlaW5nIG11dGF0ZWQ6IFxcXCJcIi5jb25jYXQoa2V5LCBcIlxcXCJcIiksIHZtKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZGVmaW5lUmVhY3RpdmUodm0sIGtleSwgcmVzdWx0W2tleV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdG9nZ2xlT2JzZXJ2aW5nKHRydWUpO1xyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIHJlc29sdmVJbmplY3QoaW5qZWN0LCB2bSkge1xyXG4gICAgaWYgKGluamVjdCkge1xyXG4gICAgICAgIC8vIGluamVjdCBpcyA6YW55IGJlY2F1c2UgZmxvdyBpcyBub3Qgc21hcnQgZW5vdWdoIHRvIGZpZ3VyZSBvdXQgY2FjaGVkXHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XHJcbiAgICAgICAgdmFyIGtleXMgPSBoYXNTeW1ib2wgPyBSZWZsZWN0Lm93bktleXMoaW5qZWN0KSA6IE9iamVjdC5rZXlzKGluamVjdCk7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xyXG4gICAgICAgICAgICAvLyAjNjU3NCBpbiBjYXNlIHRoZSBpbmplY3Qgb2JqZWN0IGlzIG9ic2VydmVkLi4uXHJcbiAgICAgICAgICAgIGlmIChrZXkgPT09ICdfX29iX18nKVxyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIHZhciBwcm92aWRlS2V5ID0gaW5qZWN0W2tleV0uZnJvbTtcclxuICAgICAgICAgICAgaWYgKHByb3ZpZGVLZXkgaW4gdm0uX3Byb3ZpZGVkKSB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHRba2V5XSA9IHZtLl9wcm92aWRlZFtwcm92aWRlS2V5XTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICgnZGVmYXVsdCcgaW4gaW5qZWN0W2tleV0pIHtcclxuICAgICAgICAgICAgICAgIHZhciBwcm92aWRlRGVmYXVsdCA9IGluamVjdFtrZXldLmRlZmF1bHQ7XHJcbiAgICAgICAgICAgICAgICByZXN1bHRba2V5XSA9IGlzRnVuY3Rpb24ocHJvdmlkZURlZmF1bHQpXHJcbiAgICAgICAgICAgICAgICAgICAgPyBwcm92aWRlRGVmYXVsdC5jYWxsKHZtKVxyXG4gICAgICAgICAgICAgICAgICAgIDogcHJvdmlkZURlZmF1bHQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgd2FybiQyKFwiSW5qZWN0aW9uIFxcXCJcIi5jb25jYXQoa2V5LCBcIlxcXCIgbm90IGZvdW5kXCIpLCB2bSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxufVxuXG52YXIgdWlkID0gMDtcclxuZnVuY3Rpb24gaW5pdE1peGluJDEoVnVlKSB7XHJcbiAgICBWdWUucHJvdG90eXBlLl9pbml0ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcclxuICAgICAgICB2YXIgdm0gPSB0aGlzO1xyXG4gICAgICAgIC8vIGEgdWlkXHJcbiAgICAgICAgdm0uX3VpZCA9IHVpZCsrO1xyXG4gICAgICAgIHZhciBzdGFydFRhZywgZW5kVGFnO1xyXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xyXG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGNvbmZpZy5wZXJmb3JtYW5jZSAmJiBtYXJrKSB7XHJcbiAgICAgICAgICAgIHN0YXJ0VGFnID0gXCJ2dWUtcGVyZi1zdGFydDpcIi5jb25jYXQodm0uX3VpZCk7XHJcbiAgICAgICAgICAgIGVuZFRhZyA9IFwidnVlLXBlcmYtZW5kOlwiLmNvbmNhdCh2bS5fdWlkKTtcclxuICAgICAgICAgICAgbWFyayhzdGFydFRhZyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGEgZmxhZyB0byBtYXJrIHRoaXMgYXMgYSBWdWUgaW5zdGFuY2Ugd2l0aG91dCBoYXZpbmcgdG8gZG8gaW5zdGFuY2VvZlxyXG4gICAgICAgIC8vIGNoZWNrXHJcbiAgICAgICAgdm0uX2lzVnVlID0gdHJ1ZTtcclxuICAgICAgICAvLyBhdm9pZCBpbnN0YW5jZXMgZnJvbSBiZWluZyBvYnNlcnZlZFxyXG4gICAgICAgIHZtLl9fdl9za2lwID0gdHJ1ZTtcclxuICAgICAgICAvLyBlZmZlY3Qgc2NvcGVcclxuICAgICAgICB2bS5fc2NvcGUgPSBuZXcgRWZmZWN0U2NvcGUodHJ1ZSAvKiBkZXRhY2hlZCAqLyk7XHJcbiAgICAgICAgdm0uX3Njb3BlLl92bSA9IHRydWU7XHJcbiAgICAgICAgLy8gbWVyZ2Ugb3B0aW9uc1xyXG4gICAgICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMuX2lzQ29tcG9uZW50KSB7XHJcbiAgICAgICAgICAgIC8vIG9wdGltaXplIGludGVybmFsIGNvbXBvbmVudCBpbnN0YW50aWF0aW9uXHJcbiAgICAgICAgICAgIC8vIHNpbmNlIGR5bmFtaWMgb3B0aW9ucyBtZXJnaW5nIGlzIHByZXR0eSBzbG93LCBhbmQgbm9uZSBvZiB0aGVcclxuICAgICAgICAgICAgLy8gaW50ZXJuYWwgY29tcG9uZW50IG9wdGlvbnMgbmVlZHMgc3BlY2lhbCB0cmVhdG1lbnQuXHJcbiAgICAgICAgICAgIGluaXRJbnRlcm5hbENvbXBvbmVudCh2bSwgb3B0aW9ucyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB2bS4kb3B0aW9ucyA9IG1lcmdlT3B0aW9ucyhyZXNvbHZlQ29uc3RydWN0b3JPcHRpb25zKHZtLmNvbnN0cnVjdG9yKSwgb3B0aW9ucyB8fCB7fSwgdm0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xyXG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XHJcbiAgICAgICAgICAgIGluaXRQcm94eSh2bSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB2bS5fcmVuZGVyUHJveHkgPSB2bTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gZXhwb3NlIHJlYWwgc2VsZlxyXG4gICAgICAgIHZtLl9zZWxmID0gdm07XHJcbiAgICAgICAgaW5pdExpZmVjeWNsZSh2bSk7XHJcbiAgICAgICAgaW5pdEV2ZW50cyh2bSk7XHJcbiAgICAgICAgaW5pdFJlbmRlcih2bSk7XHJcbiAgICAgICAgY2FsbEhvb2skMSh2bSwgJ2JlZm9yZUNyZWF0ZScsIHVuZGVmaW5lZCwgZmFsc2UgLyogc2V0Q29udGV4dCAqLyk7XHJcbiAgICAgICAgaW5pdEluamVjdGlvbnModm0pOyAvLyByZXNvbHZlIGluamVjdGlvbnMgYmVmb3JlIGRhdGEvcHJvcHNcclxuICAgICAgICBpbml0U3RhdGUodm0pO1xyXG4gICAgICAgIGluaXRQcm92aWRlKHZtKTsgLy8gcmVzb2x2ZSBwcm92aWRlIGFmdGVyIGRhdGEvcHJvcHNcclxuICAgICAgICBjYWxsSG9vayQxKHZtLCAnY3JlYXRlZCcpO1xyXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xyXG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGNvbmZpZy5wZXJmb3JtYW5jZSAmJiBtYXJrKSB7XHJcbiAgICAgICAgICAgIHZtLl9uYW1lID0gZm9ybWF0Q29tcG9uZW50TmFtZSh2bSwgZmFsc2UpO1xyXG4gICAgICAgICAgICBtYXJrKGVuZFRhZyk7XHJcbiAgICAgICAgICAgIG1lYXN1cmUoXCJ2dWUgXCIuY29uY2F0KHZtLl9uYW1lLCBcIiBpbml0XCIpLCBzdGFydFRhZywgZW5kVGFnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHZtLiRvcHRpb25zLmVsKSB7XHJcbiAgICAgICAgICAgIHZtLiRtb3VudCh2bS4kb3B0aW9ucy5lbCk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxufVxyXG5mdW5jdGlvbiBpbml0SW50ZXJuYWxDb21wb25lbnQodm0sIG9wdGlvbnMpIHtcclxuICAgIHZhciBvcHRzID0gKHZtLiRvcHRpb25zID0gT2JqZWN0LmNyZWF0ZSh2bS5jb25zdHJ1Y3Rvci5vcHRpb25zKSk7XHJcbiAgICAvLyBkb2luZyB0aGlzIGJlY2F1c2UgaXQncyBmYXN0ZXIgdGhhbiBkeW5hbWljIGVudW1lcmF0aW9uLlxyXG4gICAgdmFyIHBhcmVudFZub2RlID0gb3B0aW9ucy5fcGFyZW50Vm5vZGU7XHJcbiAgICBvcHRzLnBhcmVudCA9IG9wdGlvbnMucGFyZW50O1xyXG4gICAgb3B0cy5fcGFyZW50Vm5vZGUgPSBwYXJlbnRWbm9kZTtcclxuICAgIHZhciB2bm9kZUNvbXBvbmVudE9wdGlvbnMgPSBwYXJlbnRWbm9kZS5jb21wb25lbnRPcHRpb25zO1xyXG4gICAgb3B0cy5wcm9wc0RhdGEgPSB2bm9kZUNvbXBvbmVudE9wdGlvbnMucHJvcHNEYXRhO1xyXG4gICAgb3B0cy5fcGFyZW50TGlzdGVuZXJzID0gdm5vZGVDb21wb25lbnRPcHRpb25zLmxpc3RlbmVycztcclxuICAgIG9wdHMuX3JlbmRlckNoaWxkcmVuID0gdm5vZGVDb21wb25lbnRPcHRpb25zLmNoaWxkcmVuO1xyXG4gICAgb3B0cy5fY29tcG9uZW50VGFnID0gdm5vZGVDb21wb25lbnRPcHRpb25zLnRhZztcclxuICAgIGlmIChvcHRpb25zLnJlbmRlcikge1xyXG4gICAgICAgIG9wdHMucmVuZGVyID0gb3B0aW9ucy5yZW5kZXI7XHJcbiAgICAgICAgb3B0cy5zdGF0aWNSZW5kZXJGbnMgPSBvcHRpb25zLnN0YXRpY1JlbmRlckZucztcclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiByZXNvbHZlQ29uc3RydWN0b3JPcHRpb25zKEN0b3IpIHtcclxuICAgIHZhciBvcHRpb25zID0gQ3Rvci5vcHRpb25zO1xyXG4gICAgaWYgKEN0b3Iuc3VwZXIpIHtcclxuICAgICAgICB2YXIgc3VwZXJPcHRpb25zID0gcmVzb2x2ZUNvbnN0cnVjdG9yT3B0aW9ucyhDdG9yLnN1cGVyKTtcclxuICAgICAgICB2YXIgY2FjaGVkU3VwZXJPcHRpb25zID0gQ3Rvci5zdXBlck9wdGlvbnM7XHJcbiAgICAgICAgaWYgKHN1cGVyT3B0aW9ucyAhPT0gY2FjaGVkU3VwZXJPcHRpb25zKSB7XHJcbiAgICAgICAgICAgIC8vIHN1cGVyIG9wdGlvbiBjaGFuZ2VkLFxyXG4gICAgICAgICAgICAvLyBuZWVkIHRvIHJlc29sdmUgbmV3IG9wdGlvbnMuXHJcbiAgICAgICAgICAgIEN0b3Iuc3VwZXJPcHRpb25zID0gc3VwZXJPcHRpb25zO1xyXG4gICAgICAgICAgICAvLyBjaGVjayBpZiB0aGVyZSBhcmUgYW55IGxhdGUtbW9kaWZpZWQvYXR0YWNoZWQgb3B0aW9ucyAoIzQ5NzYpXHJcbiAgICAgICAgICAgIHZhciBtb2RpZmllZE9wdGlvbnMgPSByZXNvbHZlTW9kaWZpZWRPcHRpb25zKEN0b3IpO1xyXG4gICAgICAgICAgICAvLyB1cGRhdGUgYmFzZSBleHRlbmQgb3B0aW9uc1xyXG4gICAgICAgICAgICBpZiAobW9kaWZpZWRPcHRpb25zKSB7XHJcbiAgICAgICAgICAgICAgICBleHRlbmQoQ3Rvci5leHRlbmRPcHRpb25zLCBtb2RpZmllZE9wdGlvbnMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG9wdGlvbnMgPSBDdG9yLm9wdGlvbnMgPSBtZXJnZU9wdGlvbnMoc3VwZXJPcHRpb25zLCBDdG9yLmV4dGVuZE9wdGlvbnMpO1xyXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5uYW1lKSB7XHJcbiAgICAgICAgICAgICAgICBvcHRpb25zLmNvbXBvbmVudHNbb3B0aW9ucy5uYW1lXSA9IEN0b3I7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gb3B0aW9ucztcclxufVxyXG5mdW5jdGlvbiByZXNvbHZlTW9kaWZpZWRPcHRpb25zKEN0b3IpIHtcclxuICAgIHZhciBtb2RpZmllZDtcclxuICAgIHZhciBsYXRlc3QgPSBDdG9yLm9wdGlvbnM7XHJcbiAgICB2YXIgc2VhbGVkID0gQ3Rvci5zZWFsZWRPcHRpb25zO1xyXG4gICAgZm9yICh2YXIga2V5IGluIGxhdGVzdCkge1xyXG4gICAgICAgIGlmIChsYXRlc3Rba2V5XSAhPT0gc2VhbGVkW2tleV0pIHtcclxuICAgICAgICAgICAgaWYgKCFtb2RpZmllZClcclxuICAgICAgICAgICAgICAgIG1vZGlmaWVkID0ge307XHJcbiAgICAgICAgICAgIG1vZGlmaWVkW2tleV0gPSBsYXRlc3Rba2V5XTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbW9kaWZpZWQ7XHJcbn1cblxuZnVuY3Rpb24gRnVuY3Rpb25hbFJlbmRlckNvbnRleHQoZGF0YSwgcHJvcHMsIGNoaWxkcmVuLCBwYXJlbnQsIEN0b3IpIHtcclxuICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICB2YXIgb3B0aW9ucyA9IEN0b3Iub3B0aW9ucztcclxuICAgIC8vIGVuc3VyZSB0aGUgY3JlYXRlRWxlbWVudCBmdW5jdGlvbiBpbiBmdW5jdGlvbmFsIGNvbXBvbmVudHNcclxuICAgIC8vIGdldHMgYSB1bmlxdWUgY29udGV4dCAtIHRoaXMgaXMgbmVjZXNzYXJ5IGZvciBjb3JyZWN0IG5hbWVkIHNsb3QgY2hlY2tcclxuICAgIHZhciBjb250ZXh0Vm07XHJcbiAgICBpZiAoaGFzT3duKHBhcmVudCwgJ191aWQnKSkge1xyXG4gICAgICAgIGNvbnRleHRWbSA9IE9iamVjdC5jcmVhdGUocGFyZW50KTtcclxuICAgICAgICBjb250ZXh0Vm0uX29yaWdpbmFsID0gcGFyZW50O1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgLy8gdGhlIGNvbnRleHQgdm0gcGFzc2VkIGluIGlzIGEgZnVuY3Rpb25hbCBjb250ZXh0IGFzIHdlbGwuXHJcbiAgICAgICAgLy8gaW4gdGhpcyBjYXNlIHdlIHdhbnQgdG8gbWFrZSBzdXJlIHdlIGFyZSBhYmxlIHRvIGdldCBhIGhvbGQgdG8gdGhlXHJcbiAgICAgICAgLy8gcmVhbCBjb250ZXh0IGluc3RhbmNlLlxyXG4gICAgICAgIGNvbnRleHRWbSA9IHBhcmVudDtcclxuICAgICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgICAgcGFyZW50ID0gcGFyZW50Ll9vcmlnaW5hbDtcclxuICAgIH1cclxuICAgIHZhciBpc0NvbXBpbGVkID0gaXNUcnVlKG9wdGlvbnMuX2NvbXBpbGVkKTtcclxuICAgIHZhciBuZWVkTm9ybWFsaXphdGlvbiA9ICFpc0NvbXBpbGVkO1xyXG4gICAgdGhpcy5kYXRhID0gZGF0YTtcclxuICAgIHRoaXMucHJvcHMgPSBwcm9wcztcclxuICAgIHRoaXMuY2hpbGRyZW4gPSBjaGlsZHJlbjtcclxuICAgIHRoaXMucGFyZW50ID0gcGFyZW50O1xyXG4gICAgdGhpcy5saXN0ZW5lcnMgPSBkYXRhLm9uIHx8IGVtcHR5T2JqZWN0O1xyXG4gICAgdGhpcy5pbmplY3Rpb25zID0gcmVzb2x2ZUluamVjdChvcHRpb25zLmluamVjdCwgcGFyZW50KTtcclxuICAgIHRoaXMuc2xvdHMgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKCFfdGhpcy4kc2xvdHMpIHtcclxuICAgICAgICAgICAgbm9ybWFsaXplU2NvcGVkU2xvdHMocGFyZW50LCBkYXRhLnNjb3BlZFNsb3RzLCAoX3RoaXMuJHNsb3RzID0gcmVzb2x2ZVNsb3RzKGNoaWxkcmVuLCBwYXJlbnQpKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBfdGhpcy4kc2xvdHM7XHJcbiAgICB9O1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdzY29wZWRTbG90cycsIHtcclxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbm9ybWFsaXplU2NvcGVkU2xvdHMocGFyZW50LCBkYXRhLnNjb3BlZFNsb3RzLCB0aGlzLnNsb3RzKCkpO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgLy8gc3VwcG9ydCBmb3IgY29tcGlsZWQgZnVuY3Rpb25hbCB0ZW1wbGF0ZVxyXG4gICAgaWYgKGlzQ29tcGlsZWQpIHtcclxuICAgICAgICAvLyBleHBvc2luZyAkb3B0aW9ucyBmb3IgcmVuZGVyU3RhdGljKClcclxuICAgICAgICB0aGlzLiRvcHRpb25zID0gb3B0aW9ucztcclxuICAgICAgICAvLyBwcmUtcmVzb2x2ZSBzbG90cyBmb3IgcmVuZGVyU2xvdCgpXHJcbiAgICAgICAgdGhpcy4kc2xvdHMgPSB0aGlzLnNsb3RzKCk7XHJcbiAgICAgICAgdGhpcy4kc2NvcGVkU2xvdHMgPSBub3JtYWxpemVTY29wZWRTbG90cyhwYXJlbnQsIGRhdGEuc2NvcGVkU2xvdHMsIHRoaXMuJHNsb3RzKTtcclxuICAgIH1cclxuICAgIGlmIChvcHRpb25zLl9zY29wZUlkKSB7XHJcbiAgICAgICAgdGhpcy5fYyA9IGZ1bmN0aW9uIChhLCBiLCBjLCBkKSB7XHJcbiAgICAgICAgICAgIHZhciB2bm9kZSA9IGNyZWF0ZUVsZW1lbnQkMShjb250ZXh0Vm0sIGEsIGIsIGMsIGQsIG5lZWROb3JtYWxpemF0aW9uKTtcclxuICAgICAgICAgICAgaWYgKHZub2RlICYmICFpc0FycmF5KHZub2RlKSkge1xyXG4gICAgICAgICAgICAgICAgdm5vZGUuZm5TY29wZUlkID0gb3B0aW9ucy5fc2NvcGVJZDtcclxuICAgICAgICAgICAgICAgIHZub2RlLmZuQ29udGV4dCA9IHBhcmVudDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gdm5vZGU7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX2MgPSBmdW5jdGlvbiAoYSwgYiwgYywgZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlRWxlbWVudCQxKGNvbnRleHRWbSwgYSwgYiwgYywgZCwgbmVlZE5vcm1hbGl6YXRpb24pO1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbn1cclxuaW5zdGFsbFJlbmRlckhlbHBlcnMoRnVuY3Rpb25hbFJlbmRlckNvbnRleHQucHJvdG90eXBlKTtcclxuZnVuY3Rpb24gY3JlYXRlRnVuY3Rpb25hbENvbXBvbmVudChDdG9yLCBwcm9wc0RhdGEsIGRhdGEsIGNvbnRleHRWbSwgY2hpbGRyZW4pIHtcclxuICAgIHZhciBvcHRpb25zID0gQ3Rvci5vcHRpb25zO1xyXG4gICAgdmFyIHByb3BzID0ge307XHJcbiAgICB2YXIgcHJvcE9wdGlvbnMgPSBvcHRpb25zLnByb3BzO1xyXG4gICAgaWYgKGlzRGVmKHByb3BPcHRpb25zKSkge1xyXG4gICAgICAgIGZvciAodmFyIGtleSBpbiBwcm9wT3B0aW9ucykge1xyXG4gICAgICAgICAgICBwcm9wc1trZXldID0gdmFsaWRhdGVQcm9wKGtleSwgcHJvcE9wdGlvbnMsIHByb3BzRGF0YSB8fCBlbXB0eU9iamVjdCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgaWYgKGlzRGVmKGRhdGEuYXR0cnMpKVxyXG4gICAgICAgICAgICBtZXJnZVByb3BzKHByb3BzLCBkYXRhLmF0dHJzKTtcclxuICAgICAgICBpZiAoaXNEZWYoZGF0YS5wcm9wcykpXHJcbiAgICAgICAgICAgIG1lcmdlUHJvcHMocHJvcHMsIGRhdGEucHJvcHMpO1xyXG4gICAgfVxyXG4gICAgdmFyIHJlbmRlckNvbnRleHQgPSBuZXcgRnVuY3Rpb25hbFJlbmRlckNvbnRleHQoZGF0YSwgcHJvcHMsIGNoaWxkcmVuLCBjb250ZXh0Vm0sIEN0b3IpO1xyXG4gICAgdmFyIHZub2RlID0gb3B0aW9ucy5yZW5kZXIuY2FsbChudWxsLCByZW5kZXJDb250ZXh0Ll9jLCByZW5kZXJDb250ZXh0KTtcclxuICAgIGlmICh2bm9kZSBpbnN0YW5jZW9mIFZOb2RlKSB7XHJcbiAgICAgICAgcmV0dXJuIGNsb25lQW5kTWFya0Z1bmN0aW9uYWxSZXN1bHQodm5vZGUsIGRhdGEsIHJlbmRlckNvbnRleHQucGFyZW50LCBvcHRpb25zLCByZW5kZXJDb250ZXh0KTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGlzQXJyYXkodm5vZGUpKSB7XHJcbiAgICAgICAgdmFyIHZub2RlcyA9IG5vcm1hbGl6ZUNoaWxkcmVuKHZub2RlKSB8fCBbXTtcclxuICAgICAgICB2YXIgcmVzID0gbmV3IEFycmF5KHZub2Rlcy5sZW5ndGgpO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdm5vZGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHJlc1tpXSA9IGNsb25lQW5kTWFya0Z1bmN0aW9uYWxSZXN1bHQodm5vZGVzW2ldLCBkYXRhLCByZW5kZXJDb250ZXh0LnBhcmVudCwgb3B0aW9ucywgcmVuZGVyQ29udGV4dCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXM7XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gY2xvbmVBbmRNYXJrRnVuY3Rpb25hbFJlc3VsdCh2bm9kZSwgZGF0YSwgY29udGV4dFZtLCBvcHRpb25zLCByZW5kZXJDb250ZXh0KSB7XHJcbiAgICAvLyAjNzgxNyBjbG9uZSBub2RlIGJlZm9yZSBzZXR0aW5nIGZuQ29udGV4dCwgb3RoZXJ3aXNlIGlmIHRoZSBub2RlIGlzIHJldXNlZFxyXG4gICAgLy8gKGUuZy4gaXQgd2FzIGZyb20gYSBjYWNoZWQgbm9ybWFsIHNsb3QpIHRoZSBmbkNvbnRleHQgY2F1c2VzIG5hbWVkIHNsb3RzXHJcbiAgICAvLyB0aGF0IHNob3VsZCBub3QgYmUgbWF0Y2hlZCB0byBtYXRjaC5cclxuICAgIHZhciBjbG9uZSA9IGNsb25lVk5vZGUodm5vZGUpO1xyXG4gICAgY2xvbmUuZm5Db250ZXh0ID0gY29udGV4dFZtO1xyXG4gICAgY2xvbmUuZm5PcHRpb25zID0gb3B0aW9ucztcclxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XHJcbiAgICAgICAgKGNsb25lLmRldnRvb2xzTWV0YSA9IGNsb25lLmRldnRvb2xzTWV0YSB8fCB7fSkucmVuZGVyQ29udGV4dCA9XHJcbiAgICAgICAgICAgIHJlbmRlckNvbnRleHQ7XHJcbiAgICB9XHJcbiAgICBpZiAoZGF0YS5zbG90KSB7XHJcbiAgICAgICAgKGNsb25lLmRhdGEgfHwgKGNsb25lLmRhdGEgPSB7fSkpLnNsb3QgPSBkYXRhLnNsb3Q7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY2xvbmU7XHJcbn1cclxuZnVuY3Rpb24gbWVyZ2VQcm9wcyh0bywgZnJvbSkge1xyXG4gICAgZm9yICh2YXIga2V5IGluIGZyb20pIHtcclxuICAgICAgICB0b1tjYW1lbGl6ZShrZXkpXSA9IGZyb21ba2V5XTtcclxuICAgIH1cclxufVxuXG5mdW5jdGlvbiBnZXRDb21wb25lbnROYW1lKG9wdGlvbnMpIHtcclxuICAgIHJldHVybiBvcHRpb25zLm5hbWUgfHwgb3B0aW9ucy5fX25hbWUgfHwgb3B0aW9ucy5fY29tcG9uZW50VGFnO1xyXG59XHJcbi8vIGlubGluZSBob29rcyB0byBiZSBpbnZva2VkIG9uIGNvbXBvbmVudCBWTm9kZXMgZHVyaW5nIHBhdGNoXHJcbnZhciBjb21wb25lbnRWTm9kZUhvb2tzID0ge1xyXG4gICAgaW5pdDogZnVuY3Rpb24gKHZub2RlLCBoeWRyYXRpbmcpIHtcclxuICAgICAgICBpZiAodm5vZGUuY29tcG9uZW50SW5zdGFuY2UgJiZcclxuICAgICAgICAgICAgIXZub2RlLmNvbXBvbmVudEluc3RhbmNlLl9pc0Rlc3Ryb3llZCAmJlxyXG4gICAgICAgICAgICB2bm9kZS5kYXRhLmtlZXBBbGl2ZSkge1xyXG4gICAgICAgICAgICAvLyBrZXB0LWFsaXZlIGNvbXBvbmVudHMsIHRyZWF0IGFzIGEgcGF0Y2hcclxuICAgICAgICAgICAgdmFyIG1vdW50ZWROb2RlID0gdm5vZGU7IC8vIHdvcmsgYXJvdW5kIGZsb3dcclxuICAgICAgICAgICAgY29tcG9uZW50Vk5vZGVIb29rcy5wcmVwYXRjaChtb3VudGVkTm9kZSwgbW91bnRlZE5vZGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdmFyIGNoaWxkID0gKHZub2RlLmNvbXBvbmVudEluc3RhbmNlID0gY3JlYXRlQ29tcG9uZW50SW5zdGFuY2VGb3JWbm9kZSh2bm9kZSwgYWN0aXZlSW5zdGFuY2UpKTtcclxuICAgICAgICAgICAgY2hpbGQuJG1vdW50KGh5ZHJhdGluZyA/IHZub2RlLmVsbSA6IHVuZGVmaW5lZCwgaHlkcmF0aW5nKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgcHJlcGF0Y2g6IGZ1bmN0aW9uIChvbGRWbm9kZSwgdm5vZGUpIHtcclxuICAgICAgICB2YXIgb3B0aW9ucyA9IHZub2RlLmNvbXBvbmVudE9wdGlvbnM7XHJcbiAgICAgICAgdmFyIGNoaWxkID0gKHZub2RlLmNvbXBvbmVudEluc3RhbmNlID0gb2xkVm5vZGUuY29tcG9uZW50SW5zdGFuY2UpO1xyXG4gICAgICAgIHVwZGF0ZUNoaWxkQ29tcG9uZW50KGNoaWxkLCBvcHRpb25zLnByb3BzRGF0YSwgLy8gdXBkYXRlZCBwcm9wc1xyXG4gICAgICAgIG9wdGlvbnMubGlzdGVuZXJzLCAvLyB1cGRhdGVkIGxpc3RlbmVyc1xyXG4gICAgICAgIHZub2RlLCAvLyBuZXcgcGFyZW50IHZub2RlXHJcbiAgICAgICAgb3B0aW9ucy5jaGlsZHJlbiAvLyBuZXcgY2hpbGRyZW5cclxuICAgICAgICApO1xyXG4gICAgfSxcclxuICAgIGluc2VydDogZnVuY3Rpb24gKHZub2RlKSB7XHJcbiAgICAgICAgdmFyIGNvbnRleHQgPSB2bm9kZS5jb250ZXh0LCBjb21wb25lbnRJbnN0YW5jZSA9IHZub2RlLmNvbXBvbmVudEluc3RhbmNlO1xyXG4gICAgICAgIGlmICghY29tcG9uZW50SW5zdGFuY2UuX2lzTW91bnRlZCkge1xyXG4gICAgICAgICAgICBjb21wb25lbnRJbnN0YW5jZS5faXNNb3VudGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgY2FsbEhvb2skMShjb21wb25lbnRJbnN0YW5jZSwgJ21vdW50ZWQnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHZub2RlLmRhdGEua2VlcEFsaXZlKSB7XHJcbiAgICAgICAgICAgIGlmIChjb250ZXh0Ll9pc01vdW50ZWQpIHtcclxuICAgICAgICAgICAgICAgIC8vIHZ1ZS1yb3V0ZXIjMTIxMlxyXG4gICAgICAgICAgICAgICAgLy8gRHVyaW5nIHVwZGF0ZXMsIGEga2VwdC1hbGl2ZSBjb21wb25lbnQncyBjaGlsZCBjb21wb25lbnRzIG1heVxyXG4gICAgICAgICAgICAgICAgLy8gY2hhbmdlLCBzbyBkaXJlY3RseSB3YWxraW5nIHRoZSB0cmVlIGhlcmUgbWF5IGNhbGwgYWN0aXZhdGVkIGhvb2tzXHJcbiAgICAgICAgICAgICAgICAvLyBvbiBpbmNvcnJlY3QgY2hpbGRyZW4uIEluc3RlYWQgd2UgcHVzaCB0aGVtIGludG8gYSBxdWV1ZSB3aGljaCB3aWxsXHJcbiAgICAgICAgICAgICAgICAvLyBiZSBwcm9jZXNzZWQgYWZ0ZXIgdGhlIHdob2xlIHBhdGNoIHByb2Nlc3MgZW5kZWQuXHJcbiAgICAgICAgICAgICAgICBxdWV1ZUFjdGl2YXRlZENvbXBvbmVudChjb21wb25lbnRJbnN0YW5jZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBhY3RpdmF0ZUNoaWxkQ29tcG9uZW50KGNvbXBvbmVudEluc3RhbmNlLCB0cnVlIC8qIGRpcmVjdCAqLyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgZGVzdHJveTogZnVuY3Rpb24gKHZub2RlKSB7XHJcbiAgICAgICAgdmFyIGNvbXBvbmVudEluc3RhbmNlID0gdm5vZGUuY29tcG9uZW50SW5zdGFuY2U7XHJcbiAgICAgICAgaWYgKCFjb21wb25lbnRJbnN0YW5jZS5faXNEZXN0cm95ZWQpIHtcclxuICAgICAgICAgICAgaWYgKCF2bm9kZS5kYXRhLmtlZXBBbGl2ZSkge1xyXG4gICAgICAgICAgICAgICAgY29tcG9uZW50SW5zdGFuY2UuJGRlc3Ryb3koKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGRlYWN0aXZhdGVDaGlsZENvbXBvbmVudChjb21wb25lbnRJbnN0YW5jZSwgdHJ1ZSAvKiBkaXJlY3QgKi8pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59O1xyXG52YXIgaG9va3NUb01lcmdlID0gT2JqZWN0LmtleXMoY29tcG9uZW50Vk5vZGVIb29rcyk7XHJcbmZ1bmN0aW9uIGNyZWF0ZUNvbXBvbmVudChDdG9yLCBkYXRhLCBjb250ZXh0LCBjaGlsZHJlbiwgdGFnKSB7XHJcbiAgICBpZiAoaXNVbmRlZihDdG9yKSkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHZhciBiYXNlQ3RvciA9IGNvbnRleHQuJG9wdGlvbnMuX2Jhc2U7XHJcbiAgICAvLyBwbGFpbiBvcHRpb25zIG9iamVjdDogdHVybiBpdCBpbnRvIGEgY29uc3RydWN0b3JcclxuICAgIGlmIChpc09iamVjdChDdG9yKSkge1xyXG4gICAgICAgIEN0b3IgPSBiYXNlQ3Rvci5leHRlbmQoQ3Rvcik7XHJcbiAgICB9XHJcbiAgICAvLyBpZiBhdCB0aGlzIHN0YWdlIGl0J3Mgbm90IGEgY29uc3RydWN0b3Igb3IgYW4gYXN5bmMgY29tcG9uZW50IGZhY3RvcnksXHJcbiAgICAvLyByZWplY3QuXHJcbiAgICBpZiAodHlwZW9mIEN0b3IgIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xyXG4gICAgICAgICAgICB3YXJuJDIoXCJJbnZhbGlkIENvbXBvbmVudCBkZWZpbml0aW9uOiBcIi5jb25jYXQoU3RyaW5nKEN0b3IpKSwgY29udGV4dCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIC8vIGFzeW5jIGNvbXBvbmVudFxyXG4gICAgdmFyIGFzeW5jRmFjdG9yeTtcclxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcclxuICAgIGlmIChpc1VuZGVmKEN0b3IuY2lkKSkge1xyXG4gICAgICAgIGFzeW5jRmFjdG9yeSA9IEN0b3I7XHJcbiAgICAgICAgQ3RvciA9IHJlc29sdmVBc3luY0NvbXBvbmVudChhc3luY0ZhY3RvcnksIGJhc2VDdG9yKTtcclxuICAgICAgICBpZiAoQ3RvciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIC8vIHJldHVybiBhIHBsYWNlaG9sZGVyIG5vZGUgZm9yIGFzeW5jIGNvbXBvbmVudCwgd2hpY2ggaXMgcmVuZGVyZWRcclxuICAgICAgICAgICAgLy8gYXMgYSBjb21tZW50IG5vZGUgYnV0IHByZXNlcnZlcyBhbGwgdGhlIHJhdyBpbmZvcm1hdGlvbiBmb3IgdGhlIG5vZGUuXHJcbiAgICAgICAgICAgIC8vIHRoZSBpbmZvcm1hdGlvbiB3aWxsIGJlIHVzZWQgZm9yIGFzeW5jIHNlcnZlci1yZW5kZXJpbmcgYW5kIGh5ZHJhdGlvbi5cclxuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUFzeW5jUGxhY2Vob2xkZXIoYXN5bmNGYWN0b3J5LCBkYXRhLCBjb250ZXh0LCBjaGlsZHJlbiwgdGFnKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBkYXRhID0gZGF0YSB8fCB7fTtcclxuICAgIC8vIHJlc29sdmUgY29uc3RydWN0b3Igb3B0aW9ucyBpbiBjYXNlIGdsb2JhbCBtaXhpbnMgYXJlIGFwcGxpZWQgYWZ0ZXJcclxuICAgIC8vIGNvbXBvbmVudCBjb25zdHJ1Y3RvciBjcmVhdGlvblxyXG4gICAgcmVzb2x2ZUNvbnN0cnVjdG9yT3B0aW9ucyhDdG9yKTtcclxuICAgIC8vIHRyYW5zZm9ybSBjb21wb25lbnQgdi1tb2RlbCBkYXRhIGludG8gcHJvcHMgJiBldmVudHNcclxuICAgIGlmIChpc0RlZihkYXRhLm1vZGVsKSkge1xyXG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcclxuICAgICAgICB0cmFuc2Zvcm1Nb2RlbChDdG9yLm9wdGlvbnMsIGRhdGEpO1xyXG4gICAgfVxyXG4gICAgLy8gZXh0cmFjdCBwcm9wc1xyXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvclxyXG4gICAgdmFyIHByb3BzRGF0YSA9IGV4dHJhY3RQcm9wc0Zyb21WTm9kZURhdGEoZGF0YSwgQ3RvciwgdGFnKTtcclxuICAgIC8vIGZ1bmN0aW9uYWwgY29tcG9uZW50XHJcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yXHJcbiAgICBpZiAoaXNUcnVlKEN0b3Iub3B0aW9ucy5mdW5jdGlvbmFsKSkge1xyXG4gICAgICAgIHJldHVybiBjcmVhdGVGdW5jdGlvbmFsQ29tcG9uZW50KEN0b3IsIHByb3BzRGF0YSwgZGF0YSwgY29udGV4dCwgY2hpbGRyZW4pO1xyXG4gICAgfVxyXG4gICAgLy8gZXh0cmFjdCBsaXN0ZW5lcnMsIHNpbmNlIHRoZXNlIG5lZWRzIHRvIGJlIHRyZWF0ZWQgYXNcclxuICAgIC8vIGNoaWxkIGNvbXBvbmVudCBsaXN0ZW5lcnMgaW5zdGVhZCBvZiBET00gbGlzdGVuZXJzXHJcbiAgICB2YXIgbGlzdGVuZXJzID0gZGF0YS5vbjtcclxuICAgIC8vIHJlcGxhY2Ugd2l0aCBsaXN0ZW5lcnMgd2l0aCAubmF0aXZlIG1vZGlmaWVyXHJcbiAgICAvLyBzbyBpdCBnZXRzIHByb2Nlc3NlZCBkdXJpbmcgcGFyZW50IGNvbXBvbmVudCBwYXRjaC5cclxuICAgIGRhdGEub24gPSBkYXRhLm5hdGl2ZU9uO1xyXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvclxyXG4gICAgaWYgKGlzVHJ1ZShDdG9yLm9wdGlvbnMuYWJzdHJhY3QpKSB7XHJcbiAgICAgICAgLy8gYWJzdHJhY3QgY29tcG9uZW50cyBkbyBub3Qga2VlcCBhbnl0aGluZ1xyXG4gICAgICAgIC8vIG90aGVyIHRoYW4gcHJvcHMgJiBsaXN0ZW5lcnMgJiBzbG90XHJcbiAgICAgICAgLy8gd29yayBhcm91bmQgZmxvd1xyXG4gICAgICAgIHZhciBzbG90ID0gZGF0YS5zbG90O1xyXG4gICAgICAgIGRhdGEgPSB7fTtcclxuICAgICAgICBpZiAoc2xvdCkge1xyXG4gICAgICAgICAgICBkYXRhLnNsb3QgPSBzbG90O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIGluc3RhbGwgY29tcG9uZW50IG1hbmFnZW1lbnQgaG9va3Mgb250byB0aGUgcGxhY2Vob2xkZXIgbm9kZVxyXG4gICAgaW5zdGFsbENvbXBvbmVudEhvb2tzKGRhdGEpO1xyXG4gICAgLy8gcmV0dXJuIGEgcGxhY2Vob2xkZXIgdm5vZGVcclxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcclxuICAgIHZhciBuYW1lID0gZ2V0Q29tcG9uZW50TmFtZShDdG9yLm9wdGlvbnMpIHx8IHRhZztcclxuICAgIHZhciB2bm9kZSA9IG5ldyBWTm9kZShcclxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcclxuICAgIFwidnVlLWNvbXBvbmVudC1cIi5jb25jYXQoQ3Rvci5jaWQpLmNvbmNhdChuYW1lID8gXCItXCIuY29uY2F0KG5hbWUpIDogJycpLCBkYXRhLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBjb250ZXh0LCBcclxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcclxuICAgIHsgQ3RvcjogQ3RvciwgcHJvcHNEYXRhOiBwcm9wc0RhdGEsIGxpc3RlbmVyczogbGlzdGVuZXJzLCB0YWc6IHRhZywgY2hpbGRyZW46IGNoaWxkcmVuIH0sIGFzeW5jRmFjdG9yeSk7XHJcbiAgICByZXR1cm4gdm5vZGU7XHJcbn1cclxuZnVuY3Rpb24gY3JlYXRlQ29tcG9uZW50SW5zdGFuY2VGb3JWbm9kZShcclxuLy8gd2Uga25vdyBpdCdzIE1vdW50ZWRDb21wb25lbnRWTm9kZSBidXQgZmxvdyBkb2Vzbid0XHJcbnZub2RlLCBcclxuLy8gYWN0aXZlSW5zdGFuY2UgaW4gbGlmZWN5Y2xlIHN0YXRlXHJcbnBhcmVudCkge1xyXG4gICAgdmFyIG9wdGlvbnMgPSB7XHJcbiAgICAgICAgX2lzQ29tcG9uZW50OiB0cnVlLFxyXG4gICAgICAgIF9wYXJlbnRWbm9kZTogdm5vZGUsXHJcbiAgICAgICAgcGFyZW50OiBwYXJlbnRcclxuICAgIH07XHJcbiAgICAvLyBjaGVjayBpbmxpbmUtdGVtcGxhdGUgcmVuZGVyIGZ1bmN0aW9uc1xyXG4gICAgdmFyIGlubGluZVRlbXBsYXRlID0gdm5vZGUuZGF0YS5pbmxpbmVUZW1wbGF0ZTtcclxuICAgIGlmIChpc0RlZihpbmxpbmVUZW1wbGF0ZSkpIHtcclxuICAgICAgICBvcHRpb25zLnJlbmRlciA9IGlubGluZVRlbXBsYXRlLnJlbmRlcjtcclxuICAgICAgICBvcHRpb25zLnN0YXRpY1JlbmRlckZucyA9IGlubGluZVRlbXBsYXRlLnN0YXRpY1JlbmRlckZucztcclxuICAgIH1cclxuICAgIHJldHVybiBuZXcgdm5vZGUuY29tcG9uZW50T3B0aW9ucy5DdG9yKG9wdGlvbnMpO1xyXG59XHJcbmZ1bmN0aW9uIGluc3RhbGxDb21wb25lbnRIb29rcyhkYXRhKSB7XHJcbiAgICB2YXIgaG9va3MgPSBkYXRhLmhvb2sgfHwgKGRhdGEuaG9vayA9IHt9KTtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaG9va3NUb01lcmdlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdmFyIGtleSA9IGhvb2tzVG9NZXJnZVtpXTtcclxuICAgICAgICB2YXIgZXhpc3RpbmcgPSBob29rc1trZXldO1xyXG4gICAgICAgIHZhciB0b01lcmdlID0gY29tcG9uZW50Vk5vZGVIb29rc1trZXldO1xyXG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcclxuICAgICAgICBpZiAoZXhpc3RpbmcgIT09IHRvTWVyZ2UgJiYgIShleGlzdGluZyAmJiBleGlzdGluZy5fbWVyZ2VkKSkge1xyXG4gICAgICAgICAgICBob29rc1trZXldID0gZXhpc3RpbmcgPyBtZXJnZUhvb2sodG9NZXJnZSwgZXhpc3RpbmcpIDogdG9NZXJnZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gbWVyZ2VIb29rKGYxLCBmMikge1xyXG4gICAgdmFyIG1lcmdlZCA9IGZ1bmN0aW9uIChhLCBiKSB7XHJcbiAgICAgICAgLy8gZmxvdyBjb21wbGFpbnMgYWJvdXQgZXh0cmEgYXJncyB3aGljaCBpcyB3aHkgd2UgdXNlIGFueVxyXG4gICAgICAgIGYxKGEsIGIpO1xyXG4gICAgICAgIGYyKGEsIGIpO1xyXG4gICAgfTtcclxuICAgIG1lcmdlZC5fbWVyZ2VkID0gdHJ1ZTtcclxuICAgIHJldHVybiBtZXJnZWQ7XHJcbn1cclxuLy8gdHJhbnNmb3JtIGNvbXBvbmVudCB2LW1vZGVsIGluZm8gKHZhbHVlIGFuZCBjYWxsYmFjaykgaW50b1xyXG4vLyBwcm9wIGFuZCBldmVudCBoYW5kbGVyIHJlc3BlY3RpdmVseS5cclxuZnVuY3Rpb24gdHJhbnNmb3JtTW9kZWwob3B0aW9ucywgZGF0YSkge1xyXG4gICAgdmFyIHByb3AgPSAob3B0aW9ucy5tb2RlbCAmJiBvcHRpb25zLm1vZGVsLnByb3ApIHx8ICd2YWx1ZSc7XHJcbiAgICB2YXIgZXZlbnQgPSAob3B0aW9ucy5tb2RlbCAmJiBvcHRpb25zLm1vZGVsLmV2ZW50KSB8fCAnaW5wdXQnO1xyXG4gICAgKGRhdGEuYXR0cnMgfHwgKGRhdGEuYXR0cnMgPSB7fSkpW3Byb3BdID0gZGF0YS5tb2RlbC52YWx1ZTtcclxuICAgIHZhciBvbiA9IGRhdGEub24gfHwgKGRhdGEub24gPSB7fSk7XHJcbiAgICB2YXIgZXhpc3RpbmcgPSBvbltldmVudF07XHJcbiAgICB2YXIgY2FsbGJhY2sgPSBkYXRhLm1vZGVsLmNhbGxiYWNrO1xyXG4gICAgaWYgKGlzRGVmKGV4aXN0aW5nKSkge1xyXG4gICAgICAgIGlmIChpc0FycmF5KGV4aXN0aW5nKVxyXG4gICAgICAgICAgICA/IGV4aXN0aW5nLmluZGV4T2YoY2FsbGJhY2spID09PSAtMVxyXG4gICAgICAgICAgICA6IGV4aXN0aW5nICE9PSBjYWxsYmFjaykge1xyXG4gICAgICAgICAgICBvbltldmVudF0gPSBbY2FsbGJhY2tdLmNvbmNhdChleGlzdGluZyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgb25bZXZlbnRdID0gY2FsbGJhY2s7XHJcbiAgICB9XHJcbn1cblxudmFyIHdhcm4kMiA9IG5vb3A7XHJcbnZhciB0aXAgPSBub29wO1xyXG52YXIgZ2VuZXJhdGVDb21wb25lbnRUcmFjZTsgLy8gd29yayBhcm91bmQgZmxvdyBjaGVja1xyXG52YXIgZm9ybWF0Q29tcG9uZW50TmFtZTtcclxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcclxuICAgIHZhciBoYXNDb25zb2xlXzEgPSB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCc7XHJcbiAgICB2YXIgY2xhc3NpZnlSRV8xID0gLyg/Ol58Wy1fXSkoXFx3KS9nO1xyXG4gICAgdmFyIGNsYXNzaWZ5XzEgPSBmdW5jdGlvbiAoc3RyKSB7XHJcbiAgICAgICAgcmV0dXJuIHN0ci5yZXBsYWNlKGNsYXNzaWZ5UkVfMSwgZnVuY3Rpb24gKGMpIHsgcmV0dXJuIGMudG9VcHBlckNhc2UoKTsgfSkucmVwbGFjZSgvWy1fXS9nLCAnJyk7XHJcbiAgICB9O1xyXG4gICAgd2FybiQyID0gZnVuY3Rpb24gKG1zZywgdm0pIHtcclxuICAgICAgICBpZiAodm0gPT09IHZvaWQgMCkgeyB2bSA9IGN1cnJlbnRJbnN0YW5jZTsgfVxyXG4gICAgICAgIHZhciB0cmFjZSA9IHZtID8gZ2VuZXJhdGVDb21wb25lbnRUcmFjZSh2bSkgOiAnJztcclxuICAgICAgICBpZiAoY29uZmlnLndhcm5IYW5kbGVyKSB7XHJcbiAgICAgICAgICAgIGNvbmZpZy53YXJuSGFuZGxlci5jYWxsKG51bGwsIG1zZywgdm0sIHRyYWNlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoaGFzQ29uc29sZV8xICYmICFjb25maWcuc2lsZW50KSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJbVnVlIHdhcm5dOiBcIi5jb25jYXQobXNnKS5jb25jYXQodHJhY2UpKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgdGlwID0gZnVuY3Rpb24gKG1zZywgdm0pIHtcclxuICAgICAgICBpZiAoaGFzQ29uc29sZV8xICYmICFjb25maWcuc2lsZW50KSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihcIltWdWUgdGlwXTogXCIuY29uY2F0KG1zZykgKyAodm0gPyBnZW5lcmF0ZUNvbXBvbmVudFRyYWNlKHZtKSA6ICcnKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIGZvcm1hdENvbXBvbmVudE5hbWUgPSBmdW5jdGlvbiAodm0sIGluY2x1ZGVGaWxlKSB7XHJcbiAgICAgICAgaWYgKHZtLiRyb290ID09PSB2bSkge1xyXG4gICAgICAgICAgICByZXR1cm4gJzxSb290Pic7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBvcHRpb25zID0gaXNGdW5jdGlvbih2bSkgJiYgdm0uY2lkICE9IG51bGxcclxuICAgICAgICAgICAgPyB2bS5vcHRpb25zXHJcbiAgICAgICAgICAgIDogdm0uX2lzVnVlXHJcbiAgICAgICAgICAgICAgICA/IHZtLiRvcHRpb25zIHx8IHZtLmNvbnN0cnVjdG9yLm9wdGlvbnNcclxuICAgICAgICAgICAgICAgIDogdm07XHJcbiAgICAgICAgdmFyIG5hbWUgPSBnZXRDb21wb25lbnROYW1lKG9wdGlvbnMpO1xyXG4gICAgICAgIHZhciBmaWxlID0gb3B0aW9ucy5fX2ZpbGU7XHJcbiAgICAgICAgaWYgKCFuYW1lICYmIGZpbGUpIHtcclxuICAgICAgICAgICAgdmFyIG1hdGNoID0gZmlsZS5tYXRjaCgvKFteL1xcXFxdKylcXC52dWUkLyk7XHJcbiAgICAgICAgICAgIG5hbWUgPSBtYXRjaCAmJiBtYXRjaFsxXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuICgobmFtZSA/IFwiPFwiLmNvbmNhdChjbGFzc2lmeV8xKG5hbWUpLCBcIj5cIikgOiBcIjxBbm9ueW1vdXM+XCIpICtcclxuICAgICAgICAgICAgKGZpbGUgJiYgaW5jbHVkZUZpbGUgIT09IGZhbHNlID8gXCIgYXQgXCIuY29uY2F0KGZpbGUpIDogJycpKTtcclxuICAgIH07XHJcbiAgICB2YXIgcmVwZWF0XzEgPSBmdW5jdGlvbiAoc3RyLCBuKSB7XHJcbiAgICAgICAgdmFyIHJlcyA9ICcnO1xyXG4gICAgICAgIHdoaWxlIChuKSB7XHJcbiAgICAgICAgICAgIGlmIChuICUgMiA9PT0gMSlcclxuICAgICAgICAgICAgICAgIHJlcyArPSBzdHI7XHJcbiAgICAgICAgICAgIGlmIChuID4gMSlcclxuICAgICAgICAgICAgICAgIHN0ciArPSBzdHI7XHJcbiAgICAgICAgICAgIG4gPj49IDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXM7XHJcbiAgICB9O1xyXG4gICAgZ2VuZXJhdGVDb21wb25lbnRUcmFjZSA9IGZ1bmN0aW9uICh2bSkge1xyXG4gICAgICAgIGlmICh2bS5faXNWdWUgJiYgdm0uJHBhcmVudCkge1xyXG4gICAgICAgICAgICB2YXIgdHJlZSA9IFtdO1xyXG4gICAgICAgICAgICB2YXIgY3VycmVudFJlY3Vyc2l2ZVNlcXVlbmNlID0gMDtcclxuICAgICAgICAgICAgd2hpbGUgKHZtKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodHJlZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxhc3QgPSB0cmVlW3RyZWUubGVuZ3RoIC0gMV07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxhc3QuY29uc3RydWN0b3IgPT09IHZtLmNvbnN0cnVjdG9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRSZWN1cnNpdmVTZXF1ZW5jZSsrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2bSA9IHZtLiRwYXJlbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjdXJyZW50UmVjdXJzaXZlU2VxdWVuY2UgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyZWVbdHJlZS5sZW5ndGggLSAxXSA9IFtsYXN0LCBjdXJyZW50UmVjdXJzaXZlU2VxdWVuY2VdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50UmVjdXJzaXZlU2VxdWVuY2UgPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRyZWUucHVzaCh2bSk7XHJcbiAgICAgICAgICAgICAgICB2bSA9IHZtLiRwYXJlbnQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuICgnXFxuXFxuZm91bmQgaW5cXG5cXG4nICtcclxuICAgICAgICAgICAgICAgIHRyZWVcclxuICAgICAgICAgICAgICAgICAgICAubWFwKGZ1bmN0aW9uICh2bSwgaSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcIlwiLmNvbmNhdChpID09PSAwID8gJy0tLT4gJyA6IHJlcGVhdF8xKCcgJywgNSArIGkgKiAyKSkuY29uY2F0KGlzQXJyYXkodm0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gXCJcIi5jb25jYXQoZm9ybWF0Q29tcG9uZW50TmFtZSh2bVswXSksIFwiLi4uIChcIikuY29uY2F0KHZtWzFdLCBcIiByZWN1cnNpdmUgY2FsbHMpXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogZm9ybWF0Q29tcG9uZW50TmFtZSh2bSkpO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAuam9pbignXFxuJykpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIFwiXFxuXFxuKGZvdW5kIGluIFwiLmNvbmNhdChmb3JtYXRDb21wb25lbnROYW1lKHZtKSwgXCIpXCIpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn1cblxuLyoqXHJcbiAqIE9wdGlvbiBvdmVyd3JpdGluZyBzdHJhdGVnaWVzIGFyZSBmdW5jdGlvbnMgdGhhdCBoYW5kbGVcclxuICogaG93IHRvIG1lcmdlIGEgcGFyZW50IG9wdGlvbiB2YWx1ZSBhbmQgYSBjaGlsZCBvcHRpb25cclxuICogdmFsdWUgaW50byB0aGUgZmluYWwgdmFsdWUuXHJcbiAqL1xyXG52YXIgc3RyYXRzID0gY29uZmlnLm9wdGlvbk1lcmdlU3RyYXRlZ2llcztcclxuLyoqXHJcbiAqIE9wdGlvbnMgd2l0aCByZXN0cmljdGlvbnNcclxuICovXHJcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XHJcbiAgICBzdHJhdHMuZWwgPSBzdHJhdHMucHJvcHNEYXRhID0gZnVuY3Rpb24gKHBhcmVudCwgY2hpbGQsIHZtLCBrZXkpIHtcclxuICAgICAgICBpZiAoIXZtKSB7XHJcbiAgICAgICAgICAgIHdhcm4kMihcIm9wdGlvbiBcXFwiXCIuY29uY2F0KGtleSwgXCJcXFwiIGNhbiBvbmx5IGJlIHVzZWQgZHVyaW5nIGluc3RhbmNlIFwiKSArXHJcbiAgICAgICAgICAgICAgICAnY3JlYXRpb24gd2l0aCB0aGUgYG5ld2Aga2V5d29yZC4nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRTdHJhdChwYXJlbnQsIGNoaWxkKTtcclxuICAgIH07XHJcbn1cclxuLyoqXHJcbiAqIEhlbHBlciB0aGF0IHJlY3Vyc2l2ZWx5IG1lcmdlcyB0d28gZGF0YSBvYmplY3RzIHRvZ2V0aGVyLlxyXG4gKi9cclxuZnVuY3Rpb24gbWVyZ2VEYXRhKHRvLCBmcm9tKSB7XHJcbiAgICBpZiAoIWZyb20pXHJcbiAgICAgICAgcmV0dXJuIHRvO1xyXG4gICAgdmFyIGtleSwgdG9WYWwsIGZyb21WYWw7XHJcbiAgICB2YXIga2V5cyA9IGhhc1N5bWJvbFxyXG4gICAgICAgID8gUmVmbGVjdC5vd25LZXlzKGZyb20pXHJcbiAgICAgICAgOiBPYmplY3Qua2V5cyhmcm9tKTtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGtleSA9IGtleXNbaV07XHJcbiAgICAgICAgLy8gaW4gY2FzZSB0aGUgb2JqZWN0IGlzIGFscmVhZHkgb2JzZXJ2ZWQuLi5cclxuICAgICAgICBpZiAoa2V5ID09PSAnX19vYl9fJylcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgdG9WYWwgPSB0b1trZXldO1xyXG4gICAgICAgIGZyb21WYWwgPSBmcm9tW2tleV07XHJcbiAgICAgICAgaWYgKCFoYXNPd24odG8sIGtleSkpIHtcclxuICAgICAgICAgICAgc2V0KHRvLCBrZXksIGZyb21WYWwpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0b1ZhbCAhPT0gZnJvbVZhbCAmJlxyXG4gICAgICAgICAgICBpc1BsYWluT2JqZWN0KHRvVmFsKSAmJlxyXG4gICAgICAgICAgICBpc1BsYWluT2JqZWN0KGZyb21WYWwpKSB7XHJcbiAgICAgICAgICAgIG1lcmdlRGF0YSh0b1ZhbCwgZnJvbVZhbCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRvO1xyXG59XHJcbi8qKlxyXG4gKiBEYXRhXHJcbiAqL1xyXG5mdW5jdGlvbiBtZXJnZURhdGFPckZuKHBhcmVudFZhbCwgY2hpbGRWYWwsIHZtKSB7XHJcbiAgICBpZiAoIXZtKSB7XHJcbiAgICAgICAgLy8gaW4gYSBWdWUuZXh0ZW5kIG1lcmdlLCBib3RoIHNob3VsZCBiZSBmdW5jdGlvbnNcclxuICAgICAgICBpZiAoIWNoaWxkVmFsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBwYXJlbnRWYWw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghcGFyZW50VmFsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBjaGlsZFZhbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gd2hlbiBwYXJlbnRWYWwgJiBjaGlsZFZhbCBhcmUgYm90aCBwcmVzZW50LFxyXG4gICAgICAgIC8vIHdlIG5lZWQgdG8gcmV0dXJuIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZVxyXG4gICAgICAgIC8vIG1lcmdlZCByZXN1bHQgb2YgYm90aCBmdW5jdGlvbnMuLi4gbm8gbmVlZCB0b1xyXG4gICAgICAgIC8vIGNoZWNrIGlmIHBhcmVudFZhbCBpcyBhIGZ1bmN0aW9uIGhlcmUgYmVjYXVzZVxyXG4gICAgICAgIC8vIGl0IGhhcyB0byBiZSBhIGZ1bmN0aW9uIHRvIHBhc3MgcHJldmlvdXMgbWVyZ2VzLlxyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiBtZXJnZWREYXRhRm4oKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBtZXJnZURhdGEoaXNGdW5jdGlvbihjaGlsZFZhbCkgPyBjaGlsZFZhbC5jYWxsKHRoaXMsIHRoaXMpIDogY2hpbGRWYWwsIGlzRnVuY3Rpb24ocGFyZW50VmFsKSA/IHBhcmVudFZhbC5jYWxsKHRoaXMsIHRoaXMpIDogcGFyZW50VmFsKTtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIG1lcmdlZEluc3RhbmNlRGF0YUZuKCkge1xyXG4gICAgICAgICAgICAvLyBpbnN0YW5jZSBtZXJnZVxyXG4gICAgICAgICAgICB2YXIgaW5zdGFuY2VEYXRhID0gaXNGdW5jdGlvbihjaGlsZFZhbClcclxuICAgICAgICAgICAgICAgID8gY2hpbGRWYWwuY2FsbCh2bSwgdm0pXHJcbiAgICAgICAgICAgICAgICA6IGNoaWxkVmFsO1xyXG4gICAgICAgICAgICB2YXIgZGVmYXVsdERhdGEgPSBpc0Z1bmN0aW9uKHBhcmVudFZhbClcclxuICAgICAgICAgICAgICAgID8gcGFyZW50VmFsLmNhbGwodm0sIHZtKVxyXG4gICAgICAgICAgICAgICAgOiBwYXJlbnRWYWw7XHJcbiAgICAgICAgICAgIGlmIChpbnN0YW5jZURhdGEpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBtZXJnZURhdGEoaW5zdGFuY2VEYXRhLCBkZWZhdWx0RGF0YSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZGVmYXVsdERhdGE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG59XHJcbnN0cmF0cy5kYXRhID0gZnVuY3Rpb24gKHBhcmVudFZhbCwgY2hpbGRWYWwsIHZtKSB7XHJcbiAgICBpZiAoIXZtKSB7XHJcbiAgICAgICAgaWYgKGNoaWxkVmFsICYmIHR5cGVvZiBjaGlsZFZhbCAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXHJcbiAgICAgICAgICAgICAgICB3YXJuJDIoJ1RoZSBcImRhdGFcIiBvcHRpb24gc2hvdWxkIGJlIGEgZnVuY3Rpb24gJyArXHJcbiAgICAgICAgICAgICAgICAgICAgJ3RoYXQgcmV0dXJucyBhIHBlci1pbnN0YW5jZSB2YWx1ZSBpbiBjb21wb25lbnQgJyArXHJcbiAgICAgICAgICAgICAgICAgICAgJ2RlZmluaXRpb25zLicsIHZtKTtcclxuICAgICAgICAgICAgcmV0dXJuIHBhcmVudFZhbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG1lcmdlRGF0YU9yRm4ocGFyZW50VmFsLCBjaGlsZFZhbCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbWVyZ2VEYXRhT3JGbihwYXJlbnRWYWwsIGNoaWxkVmFsLCB2bSk7XHJcbn07XHJcbi8qKlxyXG4gKiBIb29rcyBhbmQgcHJvcHMgYXJlIG1lcmdlZCBhcyBhcnJheXMuXHJcbiAqL1xyXG5mdW5jdGlvbiBtZXJnZUxpZmVjeWNsZUhvb2socGFyZW50VmFsLCBjaGlsZFZhbCkge1xyXG4gICAgdmFyIHJlcyA9IGNoaWxkVmFsXHJcbiAgICAgICAgPyBwYXJlbnRWYWxcclxuICAgICAgICAgICAgPyBwYXJlbnRWYWwuY29uY2F0KGNoaWxkVmFsKVxyXG4gICAgICAgICAgICA6IGlzQXJyYXkoY2hpbGRWYWwpXHJcbiAgICAgICAgICAgICAgICA/IGNoaWxkVmFsXHJcbiAgICAgICAgICAgICAgICA6IFtjaGlsZFZhbF1cclxuICAgICAgICA6IHBhcmVudFZhbDtcclxuICAgIHJldHVybiByZXMgPyBkZWR1cGVIb29rcyhyZXMpIDogcmVzO1xyXG59XHJcbmZ1bmN0aW9uIGRlZHVwZUhvb2tzKGhvb2tzKSB7XHJcbiAgICB2YXIgcmVzID0gW107XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhvb2tzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKHJlcy5pbmRleE9mKGhvb2tzW2ldKSA9PT0gLTEpIHtcclxuICAgICAgICAgICAgcmVzLnB1c2goaG9va3NbaV0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiByZXM7XHJcbn1cclxuTElGRUNZQ0xFX0hPT0tTLmZvckVhY2goZnVuY3Rpb24gKGhvb2spIHtcclxuICAgIHN0cmF0c1tob29rXSA9IG1lcmdlTGlmZWN5Y2xlSG9vaztcclxufSk7XHJcbi8qKlxyXG4gKiBBc3NldHNcclxuICpcclxuICogV2hlbiBhIHZtIGlzIHByZXNlbnQgKGluc3RhbmNlIGNyZWF0aW9uKSwgd2UgbmVlZCB0byBkb1xyXG4gKiBhIHRocmVlLXdheSBtZXJnZSBiZXR3ZWVuIGNvbnN0cnVjdG9yIG9wdGlvbnMsIGluc3RhbmNlXHJcbiAqIG9wdGlvbnMgYW5kIHBhcmVudCBvcHRpb25zLlxyXG4gKi9cclxuZnVuY3Rpb24gbWVyZ2VBc3NldHMocGFyZW50VmFsLCBjaGlsZFZhbCwgdm0sIGtleSkge1xyXG4gICAgdmFyIHJlcyA9IE9iamVjdC5jcmVhdGUocGFyZW50VmFsIHx8IG51bGwpO1xyXG4gICAgaWYgKGNoaWxkVmFsKSB7XHJcbiAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBhc3NlcnRPYmplY3RUeXBlKGtleSwgY2hpbGRWYWwsIHZtKTtcclxuICAgICAgICByZXR1cm4gZXh0ZW5kKHJlcywgY2hpbGRWYWwpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHJlcztcclxuICAgIH1cclxufVxyXG5BU1NFVF9UWVBFUy5mb3JFYWNoKGZ1bmN0aW9uICh0eXBlKSB7XHJcbiAgICBzdHJhdHNbdHlwZSArICdzJ10gPSBtZXJnZUFzc2V0cztcclxufSk7XHJcbi8qKlxyXG4gKiBXYXRjaGVycy5cclxuICpcclxuICogV2F0Y2hlcnMgaGFzaGVzIHNob3VsZCBub3Qgb3ZlcndyaXRlIG9uZVxyXG4gKiBhbm90aGVyLCBzbyB3ZSBtZXJnZSB0aGVtIGFzIGFycmF5cy5cclxuICovXHJcbnN0cmF0cy53YXRjaCA9IGZ1bmN0aW9uIChwYXJlbnRWYWwsIGNoaWxkVmFsLCB2bSwga2V5KSB7XHJcbiAgICAvLyB3b3JrIGFyb3VuZCBGaXJlZm94J3MgT2JqZWN0LnByb3RvdHlwZS53YXRjaC4uLlxyXG4gICAgLy9AdHMtZXhwZWN0LWVycm9yIHdvcmsgYXJvdW5kXHJcbiAgICBpZiAocGFyZW50VmFsID09PSBuYXRpdmVXYXRjaClcclxuICAgICAgICBwYXJlbnRWYWwgPSB1bmRlZmluZWQ7XHJcbiAgICAvL0B0cy1leHBlY3QtZXJyb3Igd29yayBhcm91bmRcclxuICAgIGlmIChjaGlsZFZhbCA9PT0gbmF0aXZlV2F0Y2gpXHJcbiAgICAgICAgY2hpbGRWYWwgPSB1bmRlZmluZWQ7XHJcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cclxuICAgIGlmICghY2hpbGRWYWwpXHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5jcmVhdGUocGFyZW50VmFsIHx8IG51bGwpO1xyXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcclxuICAgICAgICBhc3NlcnRPYmplY3RUeXBlKGtleSwgY2hpbGRWYWwsIHZtKTtcclxuICAgIH1cclxuICAgIGlmICghcGFyZW50VmFsKVxyXG4gICAgICAgIHJldHVybiBjaGlsZFZhbDtcclxuICAgIHZhciByZXQgPSB7fTtcclxuICAgIGV4dGVuZChyZXQsIHBhcmVudFZhbCk7XHJcbiAgICBmb3IgKHZhciBrZXlfMSBpbiBjaGlsZFZhbCkge1xyXG4gICAgICAgIHZhciBwYXJlbnRfMSA9IHJldFtrZXlfMV07XHJcbiAgICAgICAgdmFyIGNoaWxkID0gY2hpbGRWYWxba2V5XzFdO1xyXG4gICAgICAgIGlmIChwYXJlbnRfMSAmJiAhaXNBcnJheShwYXJlbnRfMSkpIHtcclxuICAgICAgICAgICAgcGFyZW50XzEgPSBbcGFyZW50XzFdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXRba2V5XzFdID0gcGFyZW50XzEgPyBwYXJlbnRfMS5jb25jYXQoY2hpbGQpIDogaXNBcnJheShjaGlsZCkgPyBjaGlsZCA6IFtjaGlsZF07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmV0O1xyXG59O1xyXG4vKipcclxuICogT3RoZXIgb2JqZWN0IGhhc2hlcy5cclxuICovXHJcbnN0cmF0cy5wcm9wcyA9XHJcbiAgICBzdHJhdHMubWV0aG9kcyA9XHJcbiAgICAgICAgc3RyYXRzLmluamVjdCA9XHJcbiAgICAgICAgICAgIHN0cmF0cy5jb21wdXRlZCA9XHJcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiAocGFyZW50VmFsLCBjaGlsZFZhbCwgdm0sIGtleSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZFZhbCAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydE9iamVjdFR5cGUoa2V5LCBjaGlsZFZhbCwgdm0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXBhcmVudFZhbClcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkVmFsO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciByZXQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgIGV4dGVuZChyZXQsIHBhcmVudFZhbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkVmFsKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRlbmQocmV0LCBjaGlsZFZhbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldDtcclxuICAgICAgICAgICAgICAgIH07XHJcbnN0cmF0cy5wcm92aWRlID0gbWVyZ2VEYXRhT3JGbjtcclxuLyoqXHJcbiAqIERlZmF1bHQgc3RyYXRlZ3kuXHJcbiAqL1xyXG52YXIgZGVmYXVsdFN0cmF0ID0gZnVuY3Rpb24gKHBhcmVudFZhbCwgY2hpbGRWYWwpIHtcclxuICAgIHJldHVybiBjaGlsZFZhbCA9PT0gdW5kZWZpbmVkID8gcGFyZW50VmFsIDogY2hpbGRWYWw7XHJcbn07XHJcbi8qKlxyXG4gKiBWYWxpZGF0ZSBjb21wb25lbnQgbmFtZXNcclxuICovXHJcbmZ1bmN0aW9uIGNoZWNrQ29tcG9uZW50cyhvcHRpb25zKSB7XHJcbiAgICBmb3IgKHZhciBrZXkgaW4gb3B0aW9ucy5jb21wb25lbnRzKSB7XHJcbiAgICAgICAgdmFsaWRhdGVDb21wb25lbnROYW1lKGtleSk7XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gdmFsaWRhdGVDb21wb25lbnROYW1lKG5hbWUpIHtcclxuICAgIGlmICghbmV3IFJlZ0V4cChcIl5bYS16QS1aXVtcXFxcLVxcXFwuMC05X1wiLmNvbmNhdCh1bmljb2RlUmVnRXhwLnNvdXJjZSwgXCJdKiRcIikpLnRlc3QobmFtZSkpIHtcclxuICAgICAgICB3YXJuJDIoJ0ludmFsaWQgY29tcG9uZW50IG5hbWU6IFwiJyArXHJcbiAgICAgICAgICAgIG5hbWUgK1xyXG4gICAgICAgICAgICAnXCIuIENvbXBvbmVudCBuYW1lcyAnICtcclxuICAgICAgICAgICAgJ3Nob3VsZCBjb25mb3JtIHRvIHZhbGlkIGN1c3RvbSBlbGVtZW50IG5hbWUgaW4gaHRtbDUgc3BlY2lmaWNhdGlvbi4nKTtcclxuICAgIH1cclxuICAgIGlmIChpc0J1aWx0SW5UYWcobmFtZSkgfHwgY29uZmlnLmlzUmVzZXJ2ZWRUYWcobmFtZSkpIHtcclxuICAgICAgICB3YXJuJDIoJ0RvIG5vdCB1c2UgYnVpbHQtaW4gb3IgcmVzZXJ2ZWQgSFRNTCBlbGVtZW50cyBhcyBjb21wb25lbnQgJyArXHJcbiAgICAgICAgICAgICdpZDogJyArXHJcbiAgICAgICAgICAgIG5hbWUpO1xyXG4gICAgfVxyXG59XHJcbi8qKlxyXG4gKiBFbnN1cmUgYWxsIHByb3BzIG9wdGlvbiBzeW50YXggYXJlIG5vcm1hbGl6ZWQgaW50byB0aGVcclxuICogT2JqZWN0LWJhc2VkIGZvcm1hdC5cclxuICovXHJcbmZ1bmN0aW9uIG5vcm1hbGl6ZVByb3BzKG9wdGlvbnMsIHZtKSB7XHJcbiAgICB2YXIgcHJvcHMgPSBvcHRpb25zLnByb3BzO1xyXG4gICAgaWYgKCFwcm9wcylcclxuICAgICAgICByZXR1cm47XHJcbiAgICB2YXIgcmVzID0ge307XHJcbiAgICB2YXIgaSwgdmFsLCBuYW1lO1xyXG4gICAgaWYgKGlzQXJyYXkocHJvcHMpKSB7XHJcbiAgICAgICAgaSA9IHByb3BzLmxlbmd0aDtcclxuICAgICAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgICAgICAgIHZhbCA9IHByb3BzW2ldO1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICAgIG5hbWUgPSBjYW1lbGl6ZSh2YWwpO1xyXG4gICAgICAgICAgICAgICAgcmVzW25hbWVdID0geyB0eXBlOiBudWxsIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgd2FybiQyKCdwcm9wcyBtdXN0IGJlIHN0cmluZ3Mgd2hlbiB1c2luZyBhcnJheSBzeW50YXguJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChpc1BsYWluT2JqZWN0KHByb3BzKSkge1xyXG4gICAgICAgIGZvciAodmFyIGtleSBpbiBwcm9wcykge1xyXG4gICAgICAgICAgICB2YWwgPSBwcm9wc1trZXldO1xyXG4gICAgICAgICAgICBuYW1lID0gY2FtZWxpemUoa2V5KTtcclxuICAgICAgICAgICAgcmVzW25hbWVdID0gaXNQbGFpbk9iamVjdCh2YWwpID8gdmFsIDogeyB0eXBlOiB2YWwgfTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XHJcbiAgICAgICAgd2FybiQyKFwiSW52YWxpZCB2YWx1ZSBmb3Igb3B0aW9uIFxcXCJwcm9wc1xcXCI6IGV4cGVjdGVkIGFuIEFycmF5IG9yIGFuIE9iamVjdCwgXCIgK1xyXG4gICAgICAgICAgICBcImJ1dCBnb3QgXCIuY29uY2F0KHRvUmF3VHlwZShwcm9wcyksIFwiLlwiKSwgdm0pO1xyXG4gICAgfVxyXG4gICAgb3B0aW9ucy5wcm9wcyA9IHJlcztcclxufVxyXG4vKipcclxuICogTm9ybWFsaXplIGFsbCBpbmplY3Rpb25zIGludG8gT2JqZWN0LWJhc2VkIGZvcm1hdFxyXG4gKi9cclxuZnVuY3Rpb24gbm9ybWFsaXplSW5qZWN0KG9wdGlvbnMsIHZtKSB7XHJcbiAgICB2YXIgaW5qZWN0ID0gb3B0aW9ucy5pbmplY3Q7XHJcbiAgICBpZiAoIWluamVjdClcclxuICAgICAgICByZXR1cm47XHJcbiAgICB2YXIgbm9ybWFsaXplZCA9IChvcHRpb25zLmluamVjdCA9IHt9KTtcclxuICAgIGlmIChpc0FycmF5KGluamVjdCkpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGluamVjdC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBub3JtYWxpemVkW2luamVjdFtpXV0gPSB7IGZyb206IGluamVjdFtpXSB9O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGlzUGxhaW5PYmplY3QoaW5qZWN0KSkge1xyXG4gICAgICAgIGZvciAodmFyIGtleSBpbiBpbmplY3QpIHtcclxuICAgICAgICAgICAgdmFyIHZhbCA9IGluamVjdFtrZXldO1xyXG4gICAgICAgICAgICBub3JtYWxpemVkW2tleV0gPSBpc1BsYWluT2JqZWN0KHZhbClcclxuICAgICAgICAgICAgICAgID8gZXh0ZW5kKHsgZnJvbToga2V5IH0sIHZhbClcclxuICAgICAgICAgICAgICAgIDogeyBmcm9tOiB2YWwgfTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XHJcbiAgICAgICAgd2FybiQyKFwiSW52YWxpZCB2YWx1ZSBmb3Igb3B0aW9uIFxcXCJpbmplY3RcXFwiOiBleHBlY3RlZCBhbiBBcnJheSBvciBhbiBPYmplY3QsIFwiICtcclxuICAgICAgICAgICAgXCJidXQgZ290IFwiLmNvbmNhdCh0b1Jhd1R5cGUoaW5qZWN0KSwgXCIuXCIpLCB2bSk7XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIE5vcm1hbGl6ZSByYXcgZnVuY3Rpb24gZGlyZWN0aXZlcyBpbnRvIG9iamVjdCBmb3JtYXQuXHJcbiAqL1xyXG5mdW5jdGlvbiBub3JtYWxpemVEaXJlY3RpdmVzJDEob3B0aW9ucykge1xyXG4gICAgdmFyIGRpcnMgPSBvcHRpb25zLmRpcmVjdGl2ZXM7XHJcbiAgICBpZiAoZGlycykge1xyXG4gICAgICAgIGZvciAodmFyIGtleSBpbiBkaXJzKSB7XHJcbiAgICAgICAgICAgIHZhciBkZWYgPSBkaXJzW2tleV07XHJcbiAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKGRlZikpIHtcclxuICAgICAgICAgICAgICAgIGRpcnNba2V5XSA9IHsgYmluZDogZGVmLCB1cGRhdGU6IGRlZiB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIGFzc2VydE9iamVjdFR5cGUobmFtZSwgdmFsdWUsIHZtKSB7XHJcbiAgICBpZiAoIWlzUGxhaW5PYmplY3QodmFsdWUpKSB7XHJcbiAgICAgICAgd2FybiQyKFwiSW52YWxpZCB2YWx1ZSBmb3Igb3B0aW9uIFxcXCJcIi5jb25jYXQobmFtZSwgXCJcXFwiOiBleHBlY3RlZCBhbiBPYmplY3QsIFwiKSArXHJcbiAgICAgICAgICAgIFwiYnV0IGdvdCBcIi5jb25jYXQodG9SYXdUeXBlKHZhbHVlKSwgXCIuXCIpLCB2bSk7XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIE1lcmdlIHR3byBvcHRpb24gb2JqZWN0cyBpbnRvIGEgbmV3IG9uZS5cclxuICogQ29yZSB1dGlsaXR5IHVzZWQgaW4gYm90aCBpbnN0YW50aWF0aW9uIGFuZCBpbmhlcml0YW5jZS5cclxuICovXHJcbmZ1bmN0aW9uIG1lcmdlT3B0aW9ucyhwYXJlbnQsIGNoaWxkLCB2bSkge1xyXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcclxuICAgICAgICBjaGVja0NvbXBvbmVudHMoY2hpbGQpO1xyXG4gICAgfVxyXG4gICAgaWYgKGlzRnVuY3Rpb24oY2hpbGQpKSB7XHJcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxyXG4gICAgICAgIGNoaWxkID0gY2hpbGQub3B0aW9ucztcclxuICAgIH1cclxuICAgIG5vcm1hbGl6ZVByb3BzKGNoaWxkLCB2bSk7XHJcbiAgICBub3JtYWxpemVJbmplY3QoY2hpbGQsIHZtKTtcclxuICAgIG5vcm1hbGl6ZURpcmVjdGl2ZXMkMShjaGlsZCk7XHJcbiAgICAvLyBBcHBseSBleHRlbmRzIGFuZCBtaXhpbnMgb24gdGhlIGNoaWxkIG9wdGlvbnMsXHJcbiAgICAvLyBidXQgb25seSBpZiBpdCBpcyBhIHJhdyBvcHRpb25zIG9iamVjdCB0aGF0IGlzbid0XHJcbiAgICAvLyB0aGUgcmVzdWx0IG9mIGFub3RoZXIgbWVyZ2VPcHRpb25zIGNhbGwuXHJcbiAgICAvLyBPbmx5IG1lcmdlZCBvcHRpb25zIGhhcyB0aGUgX2Jhc2UgcHJvcGVydHkuXHJcbiAgICBpZiAoIWNoaWxkLl9iYXNlKSB7XHJcbiAgICAgICAgaWYgKGNoaWxkLmV4dGVuZHMpIHtcclxuICAgICAgICAgICAgcGFyZW50ID0gbWVyZ2VPcHRpb25zKHBhcmVudCwgY2hpbGQuZXh0ZW5kcywgdm0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY2hpbGQubWl4aW5zKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gY2hpbGQubWl4aW5zLmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgcGFyZW50ID0gbWVyZ2VPcHRpb25zKHBhcmVudCwgY2hpbGQubWl4aW5zW2ldLCB2bSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICB2YXIgb3B0aW9ucyA9IHt9O1xyXG4gICAgdmFyIGtleTtcclxuICAgIGZvciAoa2V5IGluIHBhcmVudCkge1xyXG4gICAgICAgIG1lcmdlRmllbGQoa2V5KTtcclxuICAgIH1cclxuICAgIGZvciAoa2V5IGluIGNoaWxkKSB7XHJcbiAgICAgICAgaWYgKCFoYXNPd24ocGFyZW50LCBrZXkpKSB7XHJcbiAgICAgICAgICAgIG1lcmdlRmllbGQoa2V5KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBtZXJnZUZpZWxkKGtleSkge1xyXG4gICAgICAgIHZhciBzdHJhdCA9IHN0cmF0c1trZXldIHx8IGRlZmF1bHRTdHJhdDtcclxuICAgICAgICBvcHRpb25zW2tleV0gPSBzdHJhdChwYXJlbnRba2V5XSwgY2hpbGRba2V5XSwgdm0sIGtleSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gb3B0aW9ucztcclxufVxyXG4vKipcclxuICogUmVzb2x2ZSBhbiBhc3NldC5cclxuICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGJlY2F1c2UgY2hpbGQgaW5zdGFuY2VzIG5lZWQgYWNjZXNzXHJcbiAqIHRvIGFzc2V0cyBkZWZpbmVkIGluIGl0cyBhbmNlc3RvciBjaGFpbi5cclxuICovXHJcbmZ1bmN0aW9uIHJlc29sdmVBc3NldChvcHRpb25zLCB0eXBlLCBpZCwgd2Fybk1pc3NpbmcpIHtcclxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xyXG4gICAgaWYgKHR5cGVvZiBpZCAhPT0gJ3N0cmluZycpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB2YXIgYXNzZXRzID0gb3B0aW9uc1t0eXBlXTtcclxuICAgIC8vIGNoZWNrIGxvY2FsIHJlZ2lzdHJhdGlvbiB2YXJpYXRpb25zIGZpcnN0XHJcbiAgICBpZiAoaGFzT3duKGFzc2V0cywgaWQpKVxyXG4gICAgICAgIHJldHVybiBhc3NldHNbaWRdO1xyXG4gICAgdmFyIGNhbWVsaXplZElkID0gY2FtZWxpemUoaWQpO1xyXG4gICAgaWYgKGhhc093bihhc3NldHMsIGNhbWVsaXplZElkKSlcclxuICAgICAgICByZXR1cm4gYXNzZXRzW2NhbWVsaXplZElkXTtcclxuICAgIHZhciBQYXNjYWxDYXNlSWQgPSBjYXBpdGFsaXplKGNhbWVsaXplZElkKTtcclxuICAgIGlmIChoYXNPd24oYXNzZXRzLCBQYXNjYWxDYXNlSWQpKVxyXG4gICAgICAgIHJldHVybiBhc3NldHNbUGFzY2FsQ2FzZUlkXTtcclxuICAgIC8vIGZhbGxiYWNrIHRvIHByb3RvdHlwZSBjaGFpblxyXG4gICAgdmFyIHJlcyA9IGFzc2V0c1tpZF0gfHwgYXNzZXRzW2NhbWVsaXplZElkXSB8fCBhc3NldHNbUGFzY2FsQ2FzZUlkXTtcclxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHdhcm5NaXNzaW5nICYmICFyZXMpIHtcclxuICAgICAgICB3YXJuJDIoJ0ZhaWxlZCB0byByZXNvbHZlICcgKyB0eXBlLnNsaWNlKDAsIC0xKSArICc6ICcgKyBpZCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzO1xyXG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlUHJvcChrZXksIHByb3BPcHRpb25zLCBwcm9wc0RhdGEsIHZtKSB7XHJcbiAgICB2YXIgcHJvcCA9IHByb3BPcHRpb25zW2tleV07XHJcbiAgICB2YXIgYWJzZW50ID0gIWhhc093bihwcm9wc0RhdGEsIGtleSk7XHJcbiAgICB2YXIgdmFsdWUgPSBwcm9wc0RhdGFba2V5XTtcclxuICAgIC8vIGJvb2xlYW4gY2FzdGluZ1xyXG4gICAgdmFyIGJvb2xlYW5JbmRleCA9IGdldFR5cGVJbmRleChCb29sZWFuLCBwcm9wLnR5cGUpO1xyXG4gICAgaWYgKGJvb2xlYW5JbmRleCA+IC0xKSB7XHJcbiAgICAgICAgaWYgKGFic2VudCAmJiAhaGFzT3duKHByb3AsICdkZWZhdWx0JykpIHtcclxuICAgICAgICAgICAgdmFsdWUgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodmFsdWUgPT09ICcnIHx8IHZhbHVlID09PSBoeXBoZW5hdGUoa2V5KSkge1xyXG4gICAgICAgICAgICAvLyBvbmx5IGNhc3QgZW1wdHkgc3RyaW5nIC8gc2FtZSBuYW1lIHRvIGJvb2xlYW4gaWZcclxuICAgICAgICAgICAgLy8gYm9vbGVhbiBoYXMgaGlnaGVyIHByaW9yaXR5XHJcbiAgICAgICAgICAgIHZhciBzdHJpbmdJbmRleCA9IGdldFR5cGVJbmRleChTdHJpbmcsIHByb3AudHlwZSk7XHJcbiAgICAgICAgICAgIGlmIChzdHJpbmdJbmRleCA8IDAgfHwgYm9vbGVhbkluZGV4IDwgc3RyaW5nSW5kZXgpIHtcclxuICAgICAgICAgICAgICAgIHZhbHVlID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIGNoZWNrIGRlZmF1bHQgdmFsdWVcclxuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgdmFsdWUgPSBnZXRQcm9wRGVmYXVsdFZhbHVlKHZtLCBwcm9wLCBrZXkpO1xyXG4gICAgICAgIC8vIHNpbmNlIHRoZSBkZWZhdWx0IHZhbHVlIGlzIGEgZnJlc2ggY29weSxcclxuICAgICAgICAvLyBtYWtlIHN1cmUgdG8gb2JzZXJ2ZSBpdC5cclxuICAgICAgICB2YXIgcHJldlNob3VsZE9ic2VydmUgPSBzaG91bGRPYnNlcnZlO1xyXG4gICAgICAgIHRvZ2dsZU9ic2VydmluZyh0cnVlKTtcclxuICAgICAgICBvYnNlcnZlKHZhbHVlKTtcclxuICAgICAgICB0b2dnbGVPYnNlcnZpbmcocHJldlNob3VsZE9ic2VydmUpO1xyXG4gICAgfVxyXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcclxuICAgICAgICBhc3NlcnRQcm9wKHByb3AsIGtleSwgdmFsdWUsIHZtLCBhYnNlbnQpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHZhbHVlO1xyXG59XHJcbi8qKlxyXG4gKiBHZXQgdGhlIGRlZmF1bHQgdmFsdWUgb2YgYSBwcm9wLlxyXG4gKi9cclxuZnVuY3Rpb24gZ2V0UHJvcERlZmF1bHRWYWx1ZSh2bSwgcHJvcCwga2V5KSB7XHJcbiAgICAvLyBubyBkZWZhdWx0LCByZXR1cm4gdW5kZWZpbmVkXHJcbiAgICBpZiAoIWhhc093bihwcm9wLCAnZGVmYXVsdCcpKSB7XHJcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIH1cclxuICAgIHZhciBkZWYgPSBwcm9wLmRlZmF1bHQ7XHJcbiAgICAvLyB3YXJuIGFnYWluc3Qgbm9uLWZhY3RvcnkgZGVmYXVsdHMgZm9yIE9iamVjdCAmIEFycmF5XHJcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBpc09iamVjdChkZWYpKSB7XHJcbiAgICAgICAgd2FybiQyKCdJbnZhbGlkIGRlZmF1bHQgdmFsdWUgZm9yIHByb3AgXCInICtcclxuICAgICAgICAgICAga2V5ICtcclxuICAgICAgICAgICAgJ1wiOiAnICtcclxuICAgICAgICAgICAgJ1Byb3BzIHdpdGggdHlwZSBPYmplY3QvQXJyYXkgbXVzdCB1c2UgYSBmYWN0b3J5IGZ1bmN0aW9uICcgK1xyXG4gICAgICAgICAgICAndG8gcmV0dXJuIHRoZSBkZWZhdWx0IHZhbHVlLicsIHZtKTtcclxuICAgIH1cclxuICAgIC8vIHRoZSByYXcgcHJvcCB2YWx1ZSB3YXMgYWxzbyB1bmRlZmluZWQgZnJvbSBwcmV2aW91cyByZW5kZXIsXHJcbiAgICAvLyByZXR1cm4gcHJldmlvdXMgZGVmYXVsdCB2YWx1ZSB0byBhdm9pZCB1bm5lY2Vzc2FyeSB3YXRjaGVyIHRyaWdnZXJcclxuICAgIGlmICh2bSAmJlxyXG4gICAgICAgIHZtLiRvcHRpb25zLnByb3BzRGF0YSAmJlxyXG4gICAgICAgIHZtLiRvcHRpb25zLnByb3BzRGF0YVtrZXldID09PSB1bmRlZmluZWQgJiZcclxuICAgICAgICB2bS5fcHJvcHNba2V5XSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgcmV0dXJuIHZtLl9wcm9wc1trZXldO1xyXG4gICAgfVxyXG4gICAgLy8gY2FsbCBmYWN0b3J5IGZ1bmN0aW9uIGZvciBub24tRnVuY3Rpb24gdHlwZXNcclxuICAgIC8vIGEgdmFsdWUgaXMgRnVuY3Rpb24gaWYgaXRzIHByb3RvdHlwZSBpcyBmdW5jdGlvbiBldmVuIGFjcm9zcyBkaWZmZXJlbnQgZXhlY3V0aW9uIGNvbnRleHRcclxuICAgIHJldHVybiBpc0Z1bmN0aW9uKGRlZikgJiYgZ2V0VHlwZShwcm9wLnR5cGUpICE9PSAnRnVuY3Rpb24nXHJcbiAgICAgICAgPyBkZWYuY2FsbCh2bSlcclxuICAgICAgICA6IGRlZjtcclxufVxyXG4vKipcclxuICogQXNzZXJ0IHdoZXRoZXIgYSBwcm9wIGlzIHZhbGlkLlxyXG4gKi9cclxuZnVuY3Rpb24gYXNzZXJ0UHJvcChwcm9wLCBuYW1lLCB2YWx1ZSwgdm0sIGFic2VudCkge1xyXG4gICAgaWYgKHByb3AucmVxdWlyZWQgJiYgYWJzZW50KSB7XHJcbiAgICAgICAgd2FybiQyKCdNaXNzaW5nIHJlcXVpcmVkIHByb3A6IFwiJyArIG5hbWUgKyAnXCInLCB2bSk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKHZhbHVlID09IG51bGwgJiYgIXByb3AucmVxdWlyZWQpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB2YXIgdHlwZSA9IHByb3AudHlwZTtcclxuICAgIHZhciB2YWxpZCA9ICF0eXBlIHx8IHR5cGUgPT09IHRydWU7XHJcbiAgICB2YXIgZXhwZWN0ZWRUeXBlcyA9IFtdO1xyXG4gICAgaWYgKHR5cGUpIHtcclxuICAgICAgICBpZiAoIWlzQXJyYXkodHlwZSkpIHtcclxuICAgICAgICAgICAgdHlwZSA9IFt0eXBlXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0eXBlLmxlbmd0aCAmJiAhdmFsaWQ7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgYXNzZXJ0ZWRUeXBlID0gYXNzZXJ0VHlwZSh2YWx1ZSwgdHlwZVtpXSwgdm0pO1xyXG4gICAgICAgICAgICBleHBlY3RlZFR5cGVzLnB1c2goYXNzZXJ0ZWRUeXBlLmV4cGVjdGVkVHlwZSB8fCAnJyk7XHJcbiAgICAgICAgICAgIHZhbGlkID0gYXNzZXJ0ZWRUeXBlLnZhbGlkO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHZhciBoYXZlRXhwZWN0ZWRUeXBlcyA9IGV4cGVjdGVkVHlwZXMuc29tZShmdW5jdGlvbiAodCkgeyByZXR1cm4gdDsgfSk7XHJcbiAgICBpZiAoIXZhbGlkICYmIGhhdmVFeHBlY3RlZFR5cGVzKSB7XHJcbiAgICAgICAgd2FybiQyKGdldEludmFsaWRUeXBlTWVzc2FnZShuYW1lLCB2YWx1ZSwgZXhwZWN0ZWRUeXBlcyksIHZtKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB2YXIgdmFsaWRhdG9yID0gcHJvcC52YWxpZGF0b3I7XHJcbiAgICBpZiAodmFsaWRhdG9yKSB7XHJcbiAgICAgICAgaWYgKCF2YWxpZGF0b3IodmFsdWUpKSB7XHJcbiAgICAgICAgICAgIHdhcm4kMignSW52YWxpZCBwcm9wOiBjdXN0b20gdmFsaWRhdG9yIGNoZWNrIGZhaWxlZCBmb3IgcHJvcCBcIicgKyBuYW1lICsgJ1wiLicsIHZtKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxudmFyIHNpbXBsZUNoZWNrUkUgPSAvXihTdHJpbmd8TnVtYmVyfEJvb2xlYW58RnVuY3Rpb258U3ltYm9sfEJpZ0ludCkkLztcclxuZnVuY3Rpb24gYXNzZXJ0VHlwZSh2YWx1ZSwgdHlwZSwgdm0pIHtcclxuICAgIHZhciB2YWxpZDtcclxuICAgIHZhciBleHBlY3RlZFR5cGUgPSBnZXRUeXBlKHR5cGUpO1xyXG4gICAgaWYgKHNpbXBsZUNoZWNrUkUudGVzdChleHBlY3RlZFR5cGUpKSB7XHJcbiAgICAgICAgdmFyIHQgPSB0eXBlb2YgdmFsdWU7XHJcbiAgICAgICAgdmFsaWQgPSB0ID09PSBleHBlY3RlZFR5cGUudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAvLyBmb3IgcHJpbWl0aXZlIHdyYXBwZXIgb2JqZWN0c1xyXG4gICAgICAgIGlmICghdmFsaWQgJiYgdCA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgICAgdmFsaWQgPSB2YWx1ZSBpbnN0YW5jZW9mIHR5cGU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoZXhwZWN0ZWRUeXBlID09PSAnT2JqZWN0Jykge1xyXG4gICAgICAgIHZhbGlkID0gaXNQbGFpbk9iamVjdCh2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChleHBlY3RlZFR5cGUgPT09ICdBcnJheScpIHtcclxuICAgICAgICB2YWxpZCA9IGlzQXJyYXkodmFsdWUpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgdmFsaWQgPSB2YWx1ZSBpbnN0YW5jZW9mIHR5cGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHdhcm4kMignSW52YWxpZCBwcm9wIHR5cGU6IFwiJyArIFN0cmluZyh0eXBlKSArICdcIiBpcyBub3QgYSBjb25zdHJ1Y3RvcicsIHZtKTtcclxuICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHZhbGlkOiB2YWxpZCxcclxuICAgICAgICBleHBlY3RlZFR5cGU6IGV4cGVjdGVkVHlwZVxyXG4gICAgfTtcclxufVxyXG52YXIgZnVuY3Rpb25UeXBlQ2hlY2tSRSA9IC9eXFxzKmZ1bmN0aW9uIChcXHcrKS87XHJcbi8qKlxyXG4gKiBVc2UgZnVuY3Rpb24gc3RyaW5nIG5hbWUgdG8gY2hlY2sgYnVpbHQtaW4gdHlwZXMsXHJcbiAqIGJlY2F1c2UgYSBzaW1wbGUgZXF1YWxpdHkgY2hlY2sgd2lsbCBmYWlsIHdoZW4gcnVubmluZ1xyXG4gKiBhY3Jvc3MgZGlmZmVyZW50IHZtcyAvIGlmcmFtZXMuXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRUeXBlKGZuKSB7XHJcbiAgICB2YXIgbWF0Y2ggPSBmbiAmJiBmbi50b1N0cmluZygpLm1hdGNoKGZ1bmN0aW9uVHlwZUNoZWNrUkUpO1xyXG4gICAgcmV0dXJuIG1hdGNoID8gbWF0Y2hbMV0gOiAnJztcclxufVxyXG5mdW5jdGlvbiBpc1NhbWVUeXBlKGEsIGIpIHtcclxuICAgIHJldHVybiBnZXRUeXBlKGEpID09PSBnZXRUeXBlKGIpO1xyXG59XHJcbmZ1bmN0aW9uIGdldFR5cGVJbmRleCh0eXBlLCBleHBlY3RlZFR5cGVzKSB7XHJcbiAgICBpZiAoIWlzQXJyYXkoZXhwZWN0ZWRUeXBlcykpIHtcclxuICAgICAgICByZXR1cm4gaXNTYW1lVHlwZShleHBlY3RlZFR5cGVzLCB0eXBlKSA/IDAgOiAtMTtcclxuICAgIH1cclxuICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBleHBlY3RlZFR5cGVzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgaWYgKGlzU2FtZVR5cGUoZXhwZWN0ZWRUeXBlc1tpXSwgdHlwZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIC0xO1xyXG59XHJcbmZ1bmN0aW9uIGdldEludmFsaWRUeXBlTWVzc2FnZShuYW1lLCB2YWx1ZSwgZXhwZWN0ZWRUeXBlcykge1xyXG4gICAgdmFyIG1lc3NhZ2UgPSBcIkludmFsaWQgcHJvcDogdHlwZSBjaGVjayBmYWlsZWQgZm9yIHByb3AgXFxcIlwiLmNvbmNhdChuYW1lLCBcIlxcXCIuXCIpICtcclxuICAgICAgICBcIiBFeHBlY3RlZCBcIi5jb25jYXQoZXhwZWN0ZWRUeXBlcy5tYXAoY2FwaXRhbGl6ZSkuam9pbignLCAnKSk7XHJcbiAgICB2YXIgZXhwZWN0ZWRUeXBlID0gZXhwZWN0ZWRUeXBlc1swXTtcclxuICAgIHZhciByZWNlaXZlZFR5cGUgPSB0b1Jhd1R5cGUodmFsdWUpO1xyXG4gICAgLy8gY2hlY2sgaWYgd2UgbmVlZCB0byBzcGVjaWZ5IGV4cGVjdGVkIHZhbHVlXHJcbiAgICBpZiAoZXhwZWN0ZWRUeXBlcy5sZW5ndGggPT09IDEgJiZcclxuICAgICAgICBpc0V4cGxpY2FibGUoZXhwZWN0ZWRUeXBlKSAmJlxyXG4gICAgICAgIGlzRXhwbGljYWJsZSh0eXBlb2YgdmFsdWUpICYmXHJcbiAgICAgICAgIWlzQm9vbGVhbihleHBlY3RlZFR5cGUsIHJlY2VpdmVkVHlwZSkpIHtcclxuICAgICAgICBtZXNzYWdlICs9IFwiIHdpdGggdmFsdWUgXCIuY29uY2F0KHN0eWxlVmFsdWUodmFsdWUsIGV4cGVjdGVkVHlwZSkpO1xyXG4gICAgfVxyXG4gICAgbWVzc2FnZSArPSBcIiwgZ290IFwiLmNvbmNhdChyZWNlaXZlZFR5cGUsIFwiIFwiKTtcclxuICAgIC8vIGNoZWNrIGlmIHdlIG5lZWQgdG8gc3BlY2lmeSByZWNlaXZlZCB2YWx1ZVxyXG4gICAgaWYgKGlzRXhwbGljYWJsZShyZWNlaXZlZFR5cGUpKSB7XHJcbiAgICAgICAgbWVzc2FnZSArPSBcIndpdGggdmFsdWUgXCIuY29uY2F0KHN0eWxlVmFsdWUodmFsdWUsIHJlY2VpdmVkVHlwZSksIFwiLlwiKTtcclxuICAgIH1cclxuICAgIHJldHVybiBtZXNzYWdlO1xyXG59XHJcbmZ1bmN0aW9uIHN0eWxlVmFsdWUodmFsdWUsIHR5cGUpIHtcclxuICAgIGlmICh0eXBlID09PSAnU3RyaW5nJykge1xyXG4gICAgICAgIHJldHVybiBcIlxcXCJcIi5jb25jYXQodmFsdWUsIFwiXFxcIlwiKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHR5cGUgPT09ICdOdW1iZXInKSB7XHJcbiAgICAgICAgcmV0dXJuIFwiXCIuY29uY2F0KE51bWJlcih2YWx1ZSkpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIFwiXCIuY29uY2F0KHZhbHVlKTtcclxuICAgIH1cclxufVxyXG52YXIgRVhQTElDQUJMRV9UWVBFUyA9IFsnc3RyaW5nJywgJ251bWJlcicsICdib29sZWFuJ107XHJcbmZ1bmN0aW9uIGlzRXhwbGljYWJsZSh2YWx1ZSkge1xyXG4gICAgcmV0dXJuIEVYUExJQ0FCTEVfVFlQRVMuc29tZShmdW5jdGlvbiAoZWxlbSkgeyByZXR1cm4gdmFsdWUudG9Mb3dlckNhc2UoKSA9PT0gZWxlbTsgfSk7XHJcbn1cclxuZnVuY3Rpb24gaXNCb29sZWFuKCkge1xyXG4gICAgdmFyIGFyZ3MgPSBbXTtcclxuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFyZ3Muc29tZShmdW5jdGlvbiAoZWxlbSkgeyByZXR1cm4gZWxlbS50b0xvd2VyQ2FzZSgpID09PSAnYm9vbGVhbic7IH0pO1xyXG59XG5cbmZ1bmN0aW9uIFZ1ZShvcHRpb25zKSB7XHJcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhKHRoaXMgaW5zdGFuY2VvZiBWdWUpKSB7XHJcbiAgICAgICAgd2FybiQyKCdWdWUgaXMgYSBjb25zdHJ1Y3RvciBhbmQgc2hvdWxkIGJlIGNhbGxlZCB3aXRoIHRoZSBgbmV3YCBrZXl3b3JkJyk7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9pbml0KG9wdGlvbnMpO1xyXG59XHJcbi8vQHRzLWV4cGVjdC1lcnJvciBWdWUgaGFzIGZ1bmN0aW9uIHR5cGVcclxuaW5pdE1peGluJDEoVnVlKTtcclxuLy9AdHMtZXhwZWN0LWVycm9yIFZ1ZSBoYXMgZnVuY3Rpb24gdHlwZVxyXG5zdGF0ZU1peGluKFZ1ZSk7XHJcbi8vQHRzLWV4cGVjdC1lcnJvciBWdWUgaGFzIGZ1bmN0aW9uIHR5cGVcclxuZXZlbnRzTWl4aW4oVnVlKTtcclxuLy9AdHMtZXhwZWN0LWVycm9yIFZ1ZSBoYXMgZnVuY3Rpb24gdHlwZVxyXG5saWZlY3ljbGVNaXhpbihWdWUpO1xyXG4vL0B0cy1leHBlY3QtZXJyb3IgVnVlIGhhcyBmdW5jdGlvbiB0eXBlXHJcbnJlbmRlck1peGluKFZ1ZSk7XG5cbmZ1bmN0aW9uIGluaXRVc2UoVnVlKSB7XHJcbiAgICBWdWUudXNlID0gZnVuY3Rpb24gKHBsdWdpbikge1xyXG4gICAgICAgIHZhciBpbnN0YWxsZWRQbHVnaW5zID0gdGhpcy5faW5zdGFsbGVkUGx1Z2lucyB8fCAodGhpcy5faW5zdGFsbGVkUGx1Z2lucyA9IFtdKTtcclxuICAgICAgICBpZiAoaW5zdGFsbGVkUGx1Z2lucy5pbmRleE9mKHBsdWdpbikgPiAtMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gYWRkaXRpb25hbCBwYXJhbWV0ZXJzXHJcbiAgICAgICAgdmFyIGFyZ3MgPSB0b0FycmF5KGFyZ3VtZW50cywgMSk7XHJcbiAgICAgICAgYXJncy51bnNoaWZ0KHRoaXMpO1xyXG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKHBsdWdpbi5pbnN0YWxsKSkge1xyXG4gICAgICAgICAgICBwbHVnaW4uaW5zdGFsbC5hcHBseShwbHVnaW4sIGFyZ3MpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChpc0Z1bmN0aW9uKHBsdWdpbikpIHtcclxuICAgICAgICAgICAgcGx1Z2luLmFwcGx5KG51bGwsIGFyZ3MpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpbnN0YWxsZWRQbHVnaW5zLnB1c2gocGx1Z2luKTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH07XHJcbn1cblxuZnVuY3Rpb24gaW5pdE1peGluKFZ1ZSkge1xyXG4gICAgVnVlLm1peGluID0gZnVuY3Rpb24gKG1peGluKSB7XHJcbiAgICAgICAgdGhpcy5vcHRpb25zID0gbWVyZ2VPcHRpb25zKHRoaXMub3B0aW9ucywgbWl4aW4pO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfTtcclxufVxuXG5mdW5jdGlvbiBpbml0RXh0ZW5kKFZ1ZSkge1xyXG4gICAgLyoqXHJcbiAgICAgKiBFYWNoIGluc3RhbmNlIGNvbnN0cnVjdG9yLCBpbmNsdWRpbmcgVnVlLCBoYXMgYSB1bmlxdWVcclxuICAgICAqIGNpZC4gVGhpcyBlbmFibGVzIHVzIHRvIGNyZWF0ZSB3cmFwcGVkIFwiY2hpbGRcclxuICAgICAqIGNvbnN0cnVjdG9yc1wiIGZvciBwcm90b3R5cGFsIGluaGVyaXRhbmNlIGFuZCBjYWNoZSB0aGVtLlxyXG4gICAgICovXHJcbiAgICBWdWUuY2lkID0gMDtcclxuICAgIHZhciBjaWQgPSAxO1xyXG4gICAgLyoqXHJcbiAgICAgKiBDbGFzcyBpbmhlcml0YW5jZVxyXG4gICAgICovXHJcbiAgICBWdWUuZXh0ZW5kID0gZnVuY3Rpb24gKGV4dGVuZE9wdGlvbnMpIHtcclxuICAgICAgICBleHRlbmRPcHRpb25zID0gZXh0ZW5kT3B0aW9ucyB8fCB7fTtcclxuICAgICAgICB2YXIgU3VwZXIgPSB0aGlzO1xyXG4gICAgICAgIHZhciBTdXBlcklkID0gU3VwZXIuY2lkO1xyXG4gICAgICAgIHZhciBjYWNoZWRDdG9ycyA9IGV4dGVuZE9wdGlvbnMuX0N0b3IgfHwgKGV4dGVuZE9wdGlvbnMuX0N0b3IgPSB7fSk7XHJcbiAgICAgICAgaWYgKGNhY2hlZEN0b3JzW1N1cGVySWRdKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDdG9yc1tTdXBlcklkXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIG5hbWUgPSBnZXRDb21wb25lbnROYW1lKGV4dGVuZE9wdGlvbnMpIHx8IGdldENvbXBvbmVudE5hbWUoU3VwZXIub3B0aW9ucyk7XHJcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgbmFtZSkge1xyXG4gICAgICAgICAgICB2YWxpZGF0ZUNvbXBvbmVudE5hbWUobmFtZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBTdWIgPSBmdW5jdGlvbiBWdWVDb21wb25lbnQob3B0aW9ucykge1xyXG4gICAgICAgICAgICB0aGlzLl9pbml0KG9wdGlvbnMpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgU3ViLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU3VwZXIucHJvdG90eXBlKTtcclxuICAgICAgICBTdWIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU3ViO1xyXG4gICAgICAgIFN1Yi5jaWQgPSBjaWQrKztcclxuICAgICAgICBTdWIub3B0aW9ucyA9IG1lcmdlT3B0aW9ucyhTdXBlci5vcHRpb25zLCBleHRlbmRPcHRpb25zKTtcclxuICAgICAgICBTdWJbJ3N1cGVyJ10gPSBTdXBlcjtcclxuICAgICAgICAvLyBGb3IgcHJvcHMgYW5kIGNvbXB1dGVkIHByb3BlcnRpZXMsIHdlIGRlZmluZSB0aGUgcHJveHkgZ2V0dGVycyBvblxyXG4gICAgICAgIC8vIHRoZSBWdWUgaW5zdGFuY2VzIGF0IGV4dGVuc2lvbiB0aW1lLCBvbiB0aGUgZXh0ZW5kZWQgcHJvdG90eXBlLiBUaGlzXHJcbiAgICAgICAgLy8gYXZvaWRzIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSBjYWxscyBmb3IgZWFjaCBpbnN0YW5jZSBjcmVhdGVkLlxyXG4gICAgICAgIGlmIChTdWIub3B0aW9ucy5wcm9wcykge1xyXG4gICAgICAgICAgICBpbml0UHJvcHMoU3ViKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKFN1Yi5vcHRpb25zLmNvbXB1dGVkKSB7XHJcbiAgICAgICAgICAgIGluaXRDb21wdXRlZChTdWIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBhbGxvdyBmdXJ0aGVyIGV4dGVuc2lvbi9taXhpbi9wbHVnaW4gdXNhZ2VcclxuICAgICAgICBTdWIuZXh0ZW5kID0gU3VwZXIuZXh0ZW5kO1xyXG4gICAgICAgIFN1Yi5taXhpbiA9IFN1cGVyLm1peGluO1xyXG4gICAgICAgIFN1Yi51c2UgPSBTdXBlci51c2U7XHJcbiAgICAgICAgLy8gY3JlYXRlIGFzc2V0IHJlZ2lzdGVycywgc28gZXh0ZW5kZWQgY2xhc3Nlc1xyXG4gICAgICAgIC8vIGNhbiBoYXZlIHRoZWlyIHByaXZhdGUgYXNzZXRzIHRvby5cclxuICAgICAgICBBU1NFVF9UWVBFUy5mb3JFYWNoKGZ1bmN0aW9uICh0eXBlKSB7XHJcbiAgICAgICAgICAgIFN1Ylt0eXBlXSA9IFN1cGVyW3R5cGVdO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIC8vIGVuYWJsZSByZWN1cnNpdmUgc2VsZi1sb29rdXBcclxuICAgICAgICBpZiAobmFtZSkge1xyXG4gICAgICAgICAgICBTdWIub3B0aW9ucy5jb21wb25lbnRzW25hbWVdID0gU3ViO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBrZWVwIGEgcmVmZXJlbmNlIHRvIHRoZSBzdXBlciBvcHRpb25zIGF0IGV4dGVuc2lvbiB0aW1lLlxyXG4gICAgICAgIC8vIGxhdGVyIGF0IGluc3RhbnRpYXRpb24gd2UgY2FuIGNoZWNrIGlmIFN1cGVyJ3Mgb3B0aW9ucyBoYXZlXHJcbiAgICAgICAgLy8gYmVlbiB1cGRhdGVkLlxyXG4gICAgICAgIFN1Yi5zdXBlck9wdGlvbnMgPSBTdXBlci5vcHRpb25zO1xyXG4gICAgICAgIFN1Yi5leHRlbmRPcHRpb25zID0gZXh0ZW5kT3B0aW9ucztcclxuICAgICAgICBTdWIuc2VhbGVkT3B0aW9ucyA9IGV4dGVuZCh7fSwgU3ViLm9wdGlvbnMpO1xyXG4gICAgICAgIC8vIGNhY2hlIGNvbnN0cnVjdG9yXHJcbiAgICAgICAgY2FjaGVkQ3RvcnNbU3VwZXJJZF0gPSBTdWI7XHJcbiAgICAgICAgcmV0dXJuIFN1YjtcclxuICAgIH07XHJcbn1cclxuZnVuY3Rpb24gaW5pdFByb3BzKENvbXApIHtcclxuICAgIHZhciBwcm9wcyA9IENvbXAub3B0aW9ucy5wcm9wcztcclxuICAgIGZvciAodmFyIGtleSBpbiBwcm9wcykge1xyXG4gICAgICAgIHByb3h5KENvbXAucHJvdG90eXBlLCBcIl9wcm9wc1wiLCBrZXkpO1xyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIGluaXRDb21wdXRlZChDb21wKSB7XHJcbiAgICB2YXIgY29tcHV0ZWQgPSBDb21wLm9wdGlvbnMuY29tcHV0ZWQ7XHJcbiAgICBmb3IgKHZhciBrZXkgaW4gY29tcHV0ZWQpIHtcclxuICAgICAgICBkZWZpbmVDb21wdXRlZChDb21wLnByb3RvdHlwZSwga2V5LCBjb21wdXRlZFtrZXldKTtcclxuICAgIH1cclxufVxuXG5mdW5jdGlvbiBpbml0QXNzZXRSZWdpc3RlcnMoVnVlKSB7XHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZSBhc3NldCByZWdpc3RyYXRpb24gbWV0aG9kcy5cclxuICAgICAqL1xyXG4gICAgQVNTRVRfVFlQRVMuZm9yRWFjaChmdW5jdGlvbiAodHlwZSkge1xyXG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgZnVuY3Rpb24gaXMgbm90IGV4YWN0IHNhbWUgdHlwZVxyXG4gICAgICAgIFZ1ZVt0eXBlXSA9IGZ1bmN0aW9uIChpZCwgZGVmaW5pdGlvbikge1xyXG4gICAgICAgICAgICBpZiAoIWRlZmluaXRpb24pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9wdGlvbnNbdHlwZSArICdzJ11baWRdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXHJcbiAgICAgICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB0eXBlID09PSAnY29tcG9uZW50Jykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlQ29tcG9uZW50TmFtZShpZCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZSA9PT0gJ2NvbXBvbmVudCcgJiYgaXNQbGFpbk9iamVjdChkZWZpbml0aW9uKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcclxuICAgICAgICAgICAgICAgICAgICBkZWZpbml0aW9uLm5hbWUgPSBkZWZpbml0aW9uLm5hbWUgfHwgaWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVmaW5pdGlvbiA9IHRoaXMub3B0aW9ucy5fYmFzZS5leHRlbmQoZGVmaW5pdGlvbik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZSA9PT0gJ2RpcmVjdGl2ZScgJiYgaXNGdW5jdGlvbihkZWZpbml0aW9uKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGRlZmluaXRpb24gPSB7IGJpbmQ6IGRlZmluaXRpb24sIHVwZGF0ZTogZGVmaW5pdGlvbiB9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zW3R5cGUgKyAncyddW2lkXSA9IGRlZmluaXRpb247XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZGVmaW5pdGlvbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICB9KTtcclxufVxuXG5mdW5jdGlvbiBfZ2V0Q29tcG9uZW50TmFtZShvcHRzKSB7XHJcbiAgICByZXR1cm4gb3B0cyAmJiAoZ2V0Q29tcG9uZW50TmFtZShvcHRzLkN0b3Iub3B0aW9ucykgfHwgb3B0cy50YWcpO1xyXG59XHJcbmZ1bmN0aW9uIG1hdGNoZXMocGF0dGVybiwgbmFtZSkge1xyXG4gICAgaWYgKGlzQXJyYXkocGF0dGVybikpIHtcclxuICAgICAgICByZXR1cm4gcGF0dGVybi5pbmRleE9mKG5hbWUpID4gLTE7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0eXBlb2YgcGF0dGVybiA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICByZXR1cm4gcGF0dGVybi5zcGxpdCgnLCcpLmluZGV4T2YobmFtZSkgPiAtMTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGlzUmVnRXhwKHBhdHRlcm4pKSB7XHJcbiAgICAgICAgcmV0dXJuIHBhdHRlcm4udGVzdChuYW1lKTtcclxuICAgIH1cclxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbn1cclxuZnVuY3Rpb24gcHJ1bmVDYWNoZShrZWVwQWxpdmVJbnN0YW5jZSwgZmlsdGVyKSB7XHJcbiAgICB2YXIgY2FjaGUgPSBrZWVwQWxpdmVJbnN0YW5jZS5jYWNoZSwga2V5cyA9IGtlZXBBbGl2ZUluc3RhbmNlLmtleXMsIF92bm9kZSA9IGtlZXBBbGl2ZUluc3RhbmNlLl92bm9kZTtcclxuICAgIGZvciAodmFyIGtleSBpbiBjYWNoZSkge1xyXG4gICAgICAgIHZhciBlbnRyeSA9IGNhY2hlW2tleV07XHJcbiAgICAgICAgaWYgKGVudHJ5KSB7XHJcbiAgICAgICAgICAgIHZhciBuYW1lXzEgPSBlbnRyeS5uYW1lO1xyXG4gICAgICAgICAgICBpZiAobmFtZV8xICYmICFmaWx0ZXIobmFtZV8xKSkge1xyXG4gICAgICAgICAgICAgICAgcHJ1bmVDYWNoZUVudHJ5KGNhY2hlLCBrZXksIGtleXMsIF92bm9kZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gcHJ1bmVDYWNoZUVudHJ5KGNhY2hlLCBrZXksIGtleXMsIGN1cnJlbnQpIHtcclxuICAgIHZhciBlbnRyeSA9IGNhY2hlW2tleV07XHJcbiAgICBpZiAoZW50cnkgJiYgKCFjdXJyZW50IHx8IGVudHJ5LnRhZyAhPT0gY3VycmVudC50YWcpKSB7XHJcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBjYW4gYmUgdW5kZWZpbmVkXHJcbiAgICAgICAgZW50cnkuY29tcG9uZW50SW5zdGFuY2UuJGRlc3Ryb3koKTtcclxuICAgIH1cclxuICAgIGNhY2hlW2tleV0gPSBudWxsO1xyXG4gICAgcmVtb3ZlJDIoa2V5cywga2V5KTtcclxufVxyXG52YXIgcGF0dGVyblR5cGVzID0gW1N0cmluZywgUmVnRXhwLCBBcnJheV07XHJcbi8vIFRPRE8gZGVmaW5lQ29tcG9uZW50XHJcbnZhciBLZWVwQWxpdmUgPSB7XHJcbiAgICBuYW1lOiAna2VlcC1hbGl2ZScsXHJcbiAgICBhYnN0cmFjdDogdHJ1ZSxcclxuICAgIHByb3BzOiB7XHJcbiAgICAgICAgaW5jbHVkZTogcGF0dGVyblR5cGVzLFxyXG4gICAgICAgIGV4Y2x1ZGU6IHBhdHRlcm5UeXBlcyxcclxuICAgICAgICBtYXg6IFtTdHJpbmcsIE51bWJlcl1cclxuICAgIH0sXHJcbiAgICBtZXRob2RzOiB7XHJcbiAgICAgICAgY2FjaGVWTm9kZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB2YXIgX2EgPSB0aGlzLCBjYWNoZSA9IF9hLmNhY2hlLCBrZXlzID0gX2Eua2V5cywgdm5vZGVUb0NhY2hlID0gX2Eudm5vZGVUb0NhY2hlLCBrZXlUb0NhY2hlID0gX2Eua2V5VG9DYWNoZTtcclxuICAgICAgICAgICAgaWYgKHZub2RlVG9DYWNoZSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHRhZyA9IHZub2RlVG9DYWNoZS50YWcsIGNvbXBvbmVudEluc3RhbmNlID0gdm5vZGVUb0NhY2hlLmNvbXBvbmVudEluc3RhbmNlLCBjb21wb25lbnRPcHRpb25zID0gdm5vZGVUb0NhY2hlLmNvbXBvbmVudE9wdGlvbnM7XHJcbiAgICAgICAgICAgICAgICBjYWNoZVtrZXlUb0NhY2hlXSA9IHtcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBfZ2V0Q29tcG9uZW50TmFtZShjb21wb25lbnRPcHRpb25zKSxcclxuICAgICAgICAgICAgICAgICAgICB0YWc6IHRhZyxcclxuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRJbnN0YW5jZTogY29tcG9uZW50SW5zdGFuY2VcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICBrZXlzLnB1c2goa2V5VG9DYWNoZSk7XHJcbiAgICAgICAgICAgICAgICAvLyBwcnVuZSBvbGRlc3QgZW50cnlcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLm1heCAmJiBrZXlzLmxlbmd0aCA+IHBhcnNlSW50KHRoaXMubWF4KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHBydW5lQ2FjaGVFbnRyeShjYWNoZSwga2V5c1swXSwga2V5cywgdGhpcy5fdm5vZGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy52bm9kZVRvQ2FjaGUgPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIGNyZWF0ZWQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLmNhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcclxuICAgICAgICB0aGlzLmtleXMgPSBbXTtcclxuICAgIH0sXHJcbiAgICBkZXN0cm95ZWQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5jYWNoZSkge1xyXG4gICAgICAgICAgICBwcnVuZUNhY2hlRW50cnkodGhpcy5jYWNoZSwga2V5LCB0aGlzLmtleXMpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICBtb3VudGVkOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICB0aGlzLmNhY2hlVk5vZGUoKTtcclxuICAgICAgICB0aGlzLiR3YXRjaCgnaW5jbHVkZScsIGZ1bmN0aW9uICh2YWwpIHtcclxuICAgICAgICAgICAgcHJ1bmVDYWNoZShfdGhpcywgZnVuY3Rpb24gKG5hbWUpIHsgcmV0dXJuIG1hdGNoZXModmFsLCBuYW1lKTsgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy4kd2F0Y2goJ2V4Y2x1ZGUnLCBmdW5jdGlvbiAodmFsKSB7XHJcbiAgICAgICAgICAgIHBydW5lQ2FjaGUoX3RoaXMsIGZ1bmN0aW9uIChuYW1lKSB7IHJldHVybiAhbWF0Y2hlcyh2YWwsIG5hbWUpOyB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH0sXHJcbiAgICB1cGRhdGVkOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5jYWNoZVZOb2RlKCk7XHJcbiAgICB9LFxyXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIHNsb3QgPSB0aGlzLiRzbG90cy5kZWZhdWx0O1xyXG4gICAgICAgIHZhciB2bm9kZSA9IGdldEZpcnN0Q29tcG9uZW50Q2hpbGQoc2xvdCk7XHJcbiAgICAgICAgdmFyIGNvbXBvbmVudE9wdGlvbnMgPSB2bm9kZSAmJiB2bm9kZS5jb21wb25lbnRPcHRpb25zO1xyXG4gICAgICAgIGlmIChjb21wb25lbnRPcHRpb25zKSB7XHJcbiAgICAgICAgICAgIC8vIGNoZWNrIHBhdHRlcm5cclxuICAgICAgICAgICAgdmFyIG5hbWVfMiA9IF9nZXRDb21wb25lbnROYW1lKGNvbXBvbmVudE9wdGlvbnMpO1xyXG4gICAgICAgICAgICB2YXIgX2EgPSB0aGlzLCBpbmNsdWRlID0gX2EuaW5jbHVkZSwgZXhjbHVkZSA9IF9hLmV4Y2x1ZGU7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgLy8gbm90IGluY2x1ZGVkXHJcbiAgICAgICAgICAgIChpbmNsdWRlICYmICghbmFtZV8yIHx8ICFtYXRjaGVzKGluY2x1ZGUsIG5hbWVfMikpKSB8fFxyXG4gICAgICAgICAgICAgICAgLy8gZXhjbHVkZWRcclxuICAgICAgICAgICAgICAgIChleGNsdWRlICYmIG5hbWVfMiAmJiBtYXRjaGVzKGV4Y2x1ZGUsIG5hbWVfMikpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdm5vZGU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIF9iID0gdGhpcywgY2FjaGUgPSBfYi5jYWNoZSwga2V5cyA9IF9iLmtleXM7XHJcbiAgICAgICAgICAgIHZhciBrZXkgPSB2bm9kZS5rZXkgPT0gbnVsbFxyXG4gICAgICAgICAgICAgICAgPyAvLyBzYW1lIGNvbnN0cnVjdG9yIG1heSBnZXQgcmVnaXN0ZXJlZCBhcyBkaWZmZXJlbnQgbG9jYWwgY29tcG9uZW50c1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIHNvIGNpZCBhbG9uZSBpcyBub3QgZW5vdWdoICgjMzI2OSlcclxuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRPcHRpb25zLkN0b3IuY2lkICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNvbXBvbmVudE9wdGlvbnMudGFnID8gXCI6OlwiLmNvbmNhdChjb21wb25lbnRPcHRpb25zLnRhZykgOiAnJylcclxuICAgICAgICAgICAgICAgIDogdm5vZGUua2V5O1xyXG4gICAgICAgICAgICBpZiAoY2FjaGVba2V5XSkge1xyXG4gICAgICAgICAgICAgICAgdm5vZGUuY29tcG9uZW50SW5zdGFuY2UgPSBjYWNoZVtrZXldLmNvbXBvbmVudEluc3RhbmNlO1xyXG4gICAgICAgICAgICAgICAgLy8gbWFrZSBjdXJyZW50IGtleSBmcmVzaGVzdFxyXG4gICAgICAgICAgICAgICAgcmVtb3ZlJDIoa2V5cywga2V5KTtcclxuICAgICAgICAgICAgICAgIGtleXMucHVzaChrZXkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gZGVsYXkgc2V0dGluZyB0aGUgY2FjaGUgdW50aWwgdXBkYXRlXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZub2RlVG9DYWNoZSA9IHZub2RlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5rZXlUb0NhY2hlID0ga2V5O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgY2FuIHZub2RlLmRhdGEgY2FuIGJlIHVuZGVmaW5lZFxyXG4gICAgICAgICAgICB2bm9kZS5kYXRhLmtlZXBBbGl2ZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB2bm9kZSB8fCAoc2xvdCAmJiBzbG90WzBdKTtcclxuICAgIH1cclxufTtcblxudmFyIGJ1aWx0SW5Db21wb25lbnRzID0ge1xyXG4gICAgS2VlcEFsaXZlOiBLZWVwQWxpdmVcclxufTtcblxuZnVuY3Rpb24gaW5pdEdsb2JhbEFQSShWdWUpIHtcclxuICAgIC8vIGNvbmZpZ1xyXG4gICAgdmFyIGNvbmZpZ0RlZiA9IHt9O1xyXG4gICAgY29uZmlnRGVmLmdldCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvbmZpZzsgfTtcclxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XHJcbiAgICAgICAgY29uZmlnRGVmLnNldCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgd2FybiQyKCdEbyBub3QgcmVwbGFjZSB0aGUgVnVlLmNvbmZpZyBvYmplY3QsIHNldCBpbmRpdmlkdWFsIGZpZWxkcyBpbnN0ZWFkLicpO1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVnVlLCAnY29uZmlnJywgY29uZmlnRGVmKTtcclxuICAgIC8vIGV4cG9zZWQgdXRpbCBtZXRob2RzLlxyXG4gICAgLy8gTk9URTogdGhlc2UgYXJlIG5vdCBjb25zaWRlcmVkIHBhcnQgb2YgdGhlIHB1YmxpYyBBUEkgLSBhdm9pZCByZWx5aW5nIG9uXHJcbiAgICAvLyB0aGVtIHVubGVzcyB5b3UgYXJlIGF3YXJlIG9mIHRoZSByaXNrLlxyXG4gICAgVnVlLnV0aWwgPSB7XHJcbiAgICAgICAgd2Fybjogd2FybiQyLFxyXG4gICAgICAgIGV4dGVuZDogZXh0ZW5kLFxyXG4gICAgICAgIG1lcmdlT3B0aW9uczogbWVyZ2VPcHRpb25zLFxyXG4gICAgICAgIGRlZmluZVJlYWN0aXZlOiBkZWZpbmVSZWFjdGl2ZVxyXG4gICAgfTtcclxuICAgIFZ1ZS5zZXQgPSBzZXQ7XHJcbiAgICBWdWUuZGVsZXRlID0gZGVsO1xyXG4gICAgVnVlLm5leHRUaWNrID0gbmV4dFRpY2s7XHJcbiAgICAvLyAyLjYgZXhwbGljaXQgb2JzZXJ2YWJsZSBBUElcclxuICAgIFZ1ZS5vYnNlcnZhYmxlID0gZnVuY3Rpb24gKG9iaikge1xyXG4gICAgICAgIG9ic2VydmUob2JqKTtcclxuICAgICAgICByZXR1cm4gb2JqO1xyXG4gICAgfTtcclxuICAgIFZ1ZS5vcHRpb25zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcclxuICAgIEFTU0VUX1RZUEVTLmZvckVhY2goZnVuY3Rpb24gKHR5cGUpIHtcclxuICAgICAgICBWdWUub3B0aW9uc1t0eXBlICsgJ3MnXSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XHJcbiAgICB9KTtcclxuICAgIC8vIHRoaXMgaXMgdXNlZCB0byBpZGVudGlmeSB0aGUgXCJiYXNlXCIgY29uc3RydWN0b3IgdG8gZXh0ZW5kIGFsbCBwbGFpbi1vYmplY3RcclxuICAgIC8vIGNvbXBvbmVudHMgd2l0aCBpbiBXZWV4J3MgbXVsdGktaW5zdGFuY2Ugc2NlbmFyaW9zLlxyXG4gICAgVnVlLm9wdGlvbnMuX2Jhc2UgPSBWdWU7XHJcbiAgICBleHRlbmQoVnVlLm9wdGlvbnMuY29tcG9uZW50cywgYnVpbHRJbkNvbXBvbmVudHMpO1xyXG4gICAgaW5pdFVzZShWdWUpO1xyXG4gICAgaW5pdE1peGluKFZ1ZSk7XHJcbiAgICBpbml0RXh0ZW5kKFZ1ZSk7XHJcbiAgICBpbml0QXNzZXRSZWdpc3RlcnMoVnVlKTtcclxufVxuXG5pbml0R2xvYmFsQVBJKFZ1ZSk7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShWdWUucHJvdG90eXBlLCAnJGlzU2VydmVyJywge1xyXG4gICAgZ2V0OiBpc1NlcnZlclJlbmRlcmluZ1xyXG59KTtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFZ1ZS5wcm90b3R5cGUsICckc3NyQ29udGV4dCcsIHtcclxuICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJHZub2RlICYmIHRoaXMuJHZub2RlLnNzckNvbnRleHQ7XHJcbiAgICB9XHJcbn0pO1xyXG4vLyBleHBvc2UgRnVuY3Rpb25hbFJlbmRlckNvbnRleHQgZm9yIHNzciBydW50aW1lIGhlbHBlciBpbnN0YWxsYXRpb25cclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFZ1ZSwgJ0Z1bmN0aW9uYWxSZW5kZXJDb250ZXh0Jywge1xyXG4gICAgdmFsdWU6IEZ1bmN0aW9uYWxSZW5kZXJDb250ZXh0XHJcbn0pO1xyXG5WdWUudmVyc2lvbiA9IHZlcnNpb247XG5cbi8vIHRoZXNlIGFyZSByZXNlcnZlZCBmb3Igd2ViIGJlY2F1c2UgdGhleSBhcmUgZGlyZWN0bHkgY29tcGlsZWQgYXdheVxyXG4vLyBkdXJpbmcgdGVtcGxhdGUgY29tcGlsYXRpb25cclxudmFyIGlzUmVzZXJ2ZWRBdHRyID0gbWFrZU1hcCgnc3R5bGUsY2xhc3MnKTtcclxuLy8gYXR0cmlidXRlcyB0aGF0IHNob3VsZCBiZSB1c2luZyBwcm9wcyBmb3IgYmluZGluZ1xyXG52YXIgYWNjZXB0VmFsdWUgPSBtYWtlTWFwKCdpbnB1dCx0ZXh0YXJlYSxvcHRpb24sc2VsZWN0LHByb2dyZXNzJyk7XHJcbnZhciBtdXN0VXNlUHJvcCA9IGZ1bmN0aW9uICh0YWcsIHR5cGUsIGF0dHIpIHtcclxuICAgIHJldHVybiAoKGF0dHIgPT09ICd2YWx1ZScgJiYgYWNjZXB0VmFsdWUodGFnKSAmJiB0eXBlICE9PSAnYnV0dG9uJykgfHxcclxuICAgICAgICAoYXR0ciA9PT0gJ3NlbGVjdGVkJyAmJiB0YWcgPT09ICdvcHRpb24nKSB8fFxyXG4gICAgICAgIChhdHRyID09PSAnY2hlY2tlZCcgJiYgdGFnID09PSAnaW5wdXQnKSB8fFxyXG4gICAgICAgIChhdHRyID09PSAnbXV0ZWQnICYmIHRhZyA9PT0gJ3ZpZGVvJykpO1xyXG59O1xyXG52YXIgaXNFbnVtZXJhdGVkQXR0ciA9IG1ha2VNYXAoJ2NvbnRlbnRlZGl0YWJsZSxkcmFnZ2FibGUsc3BlbGxjaGVjaycpO1xyXG52YXIgaXNWYWxpZENvbnRlbnRFZGl0YWJsZVZhbHVlID0gbWFrZU1hcCgnZXZlbnRzLGNhcmV0LHR5cGluZyxwbGFpbnRleHQtb25seScpO1xyXG52YXIgY29udmVydEVudW1lcmF0ZWRWYWx1ZSA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XHJcbiAgICByZXR1cm4gaXNGYWxzeUF0dHJWYWx1ZSh2YWx1ZSkgfHwgdmFsdWUgPT09ICdmYWxzZSdcclxuICAgICAgICA/ICdmYWxzZSdcclxuICAgICAgICA6IC8vIGFsbG93IGFyYml0cmFyeSBzdHJpbmcgdmFsdWUgZm9yIGNvbnRlbnRlZGl0YWJsZVxyXG4gICAgICAgICAgICBrZXkgPT09ICdjb250ZW50ZWRpdGFibGUnICYmIGlzVmFsaWRDb250ZW50RWRpdGFibGVWYWx1ZSh2YWx1ZSlcclxuICAgICAgICAgICAgICAgID8gdmFsdWVcclxuICAgICAgICAgICAgICAgIDogJ3RydWUnO1xyXG59O1xyXG52YXIgaXNCb29sZWFuQXR0ciA9IG1ha2VNYXAoJ2FsbG93ZnVsbHNjcmVlbixhc3luYyxhdXRvZm9jdXMsYXV0b3BsYXksY2hlY2tlZCxjb21wYWN0LGNvbnRyb2xzLGRlY2xhcmUsJyArXHJcbiAgICAnZGVmYXVsdCxkZWZhdWx0Y2hlY2tlZCxkZWZhdWx0bXV0ZWQsZGVmYXVsdHNlbGVjdGVkLGRlZmVyLGRpc2FibGVkLCcgK1xyXG4gICAgJ2VuYWJsZWQsZm9ybW5vdmFsaWRhdGUsaGlkZGVuLGluZGV0ZXJtaW5hdGUsaW5lcnQsaXNtYXAsaXRlbXNjb3BlLGxvb3AsbXVsdGlwbGUsJyArXHJcbiAgICAnbXV0ZWQsbm9ocmVmLG5vcmVzaXplLG5vc2hhZGUsbm92YWxpZGF0ZSxub3dyYXAsb3BlbixwYXVzZW9uZXhpdCxyZWFkb25seSwnICtcclxuICAgICdyZXF1aXJlZCxyZXZlcnNlZCxzY29wZWQsc2VhbWxlc3Msc2VsZWN0ZWQsc29ydGFibGUsJyArXHJcbiAgICAndHJ1ZXNwZWVkLHR5cGVtdXN0bWF0Y2gsdmlzaWJsZScpO1xyXG52YXIgeGxpbmtOUyA9ICdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rJztcclxudmFyIGlzWGxpbmsgPSBmdW5jdGlvbiAobmFtZSkge1xyXG4gICAgcmV0dXJuIG5hbWUuY2hhckF0KDUpID09PSAnOicgJiYgbmFtZS5zbGljZSgwLCA1KSA9PT0gJ3hsaW5rJztcclxufTtcclxudmFyIGdldFhsaW5rUHJvcCA9IGZ1bmN0aW9uIChuYW1lKSB7XHJcbiAgICByZXR1cm4gaXNYbGluayhuYW1lKSA/IG5hbWUuc2xpY2UoNiwgbmFtZS5sZW5ndGgpIDogJyc7XHJcbn07XHJcbnZhciBpc0ZhbHN5QXR0clZhbHVlID0gZnVuY3Rpb24gKHZhbCkge1xyXG4gICAgcmV0dXJuIHZhbCA9PSBudWxsIHx8IHZhbCA9PT0gZmFsc2U7XHJcbn07XG5cbmZ1bmN0aW9uIGdlbkNsYXNzRm9yVm5vZGUodm5vZGUpIHtcclxuICAgIHZhciBkYXRhID0gdm5vZGUuZGF0YTtcclxuICAgIHZhciBwYXJlbnROb2RlID0gdm5vZGU7XHJcbiAgICB2YXIgY2hpbGROb2RlID0gdm5vZGU7XHJcbiAgICB3aGlsZSAoaXNEZWYoY2hpbGROb2RlLmNvbXBvbmVudEluc3RhbmNlKSkge1xyXG4gICAgICAgIGNoaWxkTm9kZSA9IGNoaWxkTm9kZS5jb21wb25lbnRJbnN0YW5jZS5fdm5vZGU7XHJcbiAgICAgICAgaWYgKGNoaWxkTm9kZSAmJiBjaGlsZE5vZGUuZGF0YSkge1xyXG4gICAgICAgICAgICBkYXRhID0gbWVyZ2VDbGFzc0RhdGEoY2hpbGROb2RlLmRhdGEsIGRhdGEpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgcGFyZW50Tm9kZS5wYXJlbnQgbm90IFZOb2RlV2l0aERhdGFcclxuICAgIHdoaWxlIChpc0RlZigocGFyZW50Tm9kZSA9IHBhcmVudE5vZGUucGFyZW50KSkpIHtcclxuICAgICAgICBpZiAocGFyZW50Tm9kZSAmJiBwYXJlbnROb2RlLmRhdGEpIHtcclxuICAgICAgICAgICAgZGF0YSA9IG1lcmdlQ2xhc3NEYXRhKGRhdGEsIHBhcmVudE5vZGUuZGF0YSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlbmRlckNsYXNzKGRhdGEuc3RhdGljQ2xhc3MsIGRhdGEuY2xhc3MpO1xyXG59XHJcbmZ1bmN0aW9uIG1lcmdlQ2xhc3NEYXRhKGNoaWxkLCBwYXJlbnQpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgc3RhdGljQ2xhc3M6IGNvbmNhdChjaGlsZC5zdGF0aWNDbGFzcywgcGFyZW50LnN0YXRpY0NsYXNzKSxcclxuICAgICAgICBjbGFzczogaXNEZWYoY2hpbGQuY2xhc3MpID8gW2NoaWxkLmNsYXNzLCBwYXJlbnQuY2xhc3NdIDogcGFyZW50LmNsYXNzXHJcbiAgICB9O1xyXG59XHJcbmZ1bmN0aW9uIHJlbmRlckNsYXNzKHN0YXRpY0NsYXNzLCBkeW5hbWljQ2xhc3MpIHtcclxuICAgIGlmIChpc0RlZihzdGF0aWNDbGFzcykgfHwgaXNEZWYoZHluYW1pY0NsYXNzKSkge1xyXG4gICAgICAgIHJldHVybiBjb25jYXQoc3RhdGljQ2xhc3MsIHN0cmluZ2lmeUNsYXNzKGR5bmFtaWNDbGFzcykpO1xyXG4gICAgfVxyXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cclxuICAgIHJldHVybiAnJztcclxufVxyXG5mdW5jdGlvbiBjb25jYXQoYSwgYikge1xyXG4gICAgcmV0dXJuIGEgPyAoYiA/IGEgKyAnICcgKyBiIDogYSkgOiBiIHx8ICcnO1xyXG59XHJcbmZ1bmN0aW9uIHN0cmluZ2lmeUNsYXNzKHZhbHVlKSB7XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcclxuICAgICAgICByZXR1cm4gc3RyaW5naWZ5QXJyYXkodmFsdWUpO1xyXG4gICAgfVxyXG4gICAgaWYgKGlzT2JqZWN0KHZhbHVlKSkge1xyXG4gICAgICAgIHJldHVybiBzdHJpbmdpZnlPYmplY3QodmFsdWUpO1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICB9XHJcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xyXG4gICAgcmV0dXJuICcnO1xyXG59XHJcbmZ1bmN0aW9uIHN0cmluZ2lmeUFycmF5KHZhbHVlKSB7XHJcbiAgICB2YXIgcmVzID0gJyc7XHJcbiAgICB2YXIgc3RyaW5naWZpZWQ7XHJcbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IHZhbHVlLmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgIGlmIChpc0RlZigoc3RyaW5naWZpZWQgPSBzdHJpbmdpZnlDbGFzcyh2YWx1ZVtpXSkpKSAmJiBzdHJpbmdpZmllZCAhPT0gJycpIHtcclxuICAgICAgICAgICAgaWYgKHJlcylcclxuICAgICAgICAgICAgICAgIHJlcyArPSAnICc7XHJcbiAgICAgICAgICAgIHJlcyArPSBzdHJpbmdpZmllZDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzO1xyXG59XHJcbmZ1bmN0aW9uIHN0cmluZ2lmeU9iamVjdCh2YWx1ZSkge1xyXG4gICAgdmFyIHJlcyA9ICcnO1xyXG4gICAgZm9yICh2YXIga2V5IGluIHZhbHVlKSB7XHJcbiAgICAgICAgaWYgKHZhbHVlW2tleV0pIHtcclxuICAgICAgICAgICAgaWYgKHJlcylcclxuICAgICAgICAgICAgICAgIHJlcyArPSAnICc7XHJcbiAgICAgICAgICAgIHJlcyArPSBrZXk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlcztcclxufVxuXG52YXIgbmFtZXNwYWNlTWFwID0ge1xyXG4gICAgc3ZnOiAnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLFxyXG4gICAgbWF0aDogJ2h0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUwnXHJcbn07XHJcbnZhciBpc0hUTUxUYWcgPSBtYWtlTWFwKCdodG1sLGJvZHksYmFzZSxoZWFkLGxpbmssbWV0YSxzdHlsZSx0aXRsZSwnICtcclxuICAgICdhZGRyZXNzLGFydGljbGUsYXNpZGUsZm9vdGVyLGhlYWRlcixoMSxoMixoMyxoNCxoNSxoNixoZ3JvdXAsbmF2LHNlY3Rpb24sJyArXHJcbiAgICAnZGl2LGRkLGRsLGR0LGZpZ2NhcHRpb24sZmlndXJlLHBpY3R1cmUsaHIsaW1nLGxpLG1haW4sb2wscCxwcmUsdWwsJyArXHJcbiAgICAnYSxiLGFiYnIsYmRpLGJkbyxicixjaXRlLGNvZGUsZGF0YSxkZm4sZW0saSxrYmQsbWFyayxxLHJwLHJ0LHJ0YyxydWJ5LCcgK1xyXG4gICAgJ3Msc2FtcCxzbWFsbCxzcGFuLHN0cm9uZyxzdWIsc3VwLHRpbWUsdSx2YXIsd2JyLGFyZWEsYXVkaW8sbWFwLHRyYWNrLHZpZGVvLCcgK1xyXG4gICAgJ2VtYmVkLG9iamVjdCxwYXJhbSxzb3VyY2UsY2FudmFzLHNjcmlwdCxub3NjcmlwdCxkZWwsaW5zLCcgK1xyXG4gICAgJ2NhcHRpb24sY29sLGNvbGdyb3VwLHRhYmxlLHRoZWFkLHRib2R5LHRkLHRoLHRyLCcgK1xyXG4gICAgJ2J1dHRvbixkYXRhbGlzdCxmaWVsZHNldCxmb3JtLGlucHV0LGxhYmVsLGxlZ2VuZCxtZXRlcixvcHRncm91cCxvcHRpb24sJyArXHJcbiAgICAnb3V0cHV0LHByb2dyZXNzLHNlbGVjdCx0ZXh0YXJlYSwnICtcclxuICAgICdkZXRhaWxzLGRpYWxvZyxtZW51LG1lbnVpdGVtLHN1bW1hcnksJyArXHJcbiAgICAnY29udGVudCxlbGVtZW50LHNoYWRvdyx0ZW1wbGF0ZSxibG9ja3F1b3RlLGlmcmFtZSx0Zm9vdCcpO1xyXG4vLyB0aGlzIG1hcCBpcyBpbnRlbnRpb25hbGx5IHNlbGVjdGl2ZSwgb25seSBjb3ZlcmluZyBTVkcgZWxlbWVudHMgdGhhdCBtYXlcclxuLy8gY29udGFpbiBjaGlsZCBlbGVtZW50cy5cclxudmFyIGlzU1ZHID0gbWFrZU1hcCgnc3ZnLGFuaW1hdGUsY2lyY2xlLGNsaXBwYXRoLGN1cnNvcixkZWZzLGRlc2MsZWxsaXBzZSxmaWx0ZXIsZm9udC1mYWNlLCcgK1xyXG4gICAgJ2ZvcmVpZ25vYmplY3QsZyxnbHlwaCxpbWFnZSxsaW5lLG1hcmtlcixtYXNrLG1pc3NpbmctZ2x5cGgscGF0aCxwYXR0ZXJuLCcgK1xyXG4gICAgJ3BvbHlnb24scG9seWxpbmUscmVjdCxzd2l0Y2gsc3ltYm9sLHRleHQsdGV4dHBhdGgsdHNwYW4sdXNlLHZpZXcnLCB0cnVlKTtcclxudmFyIGlzUHJlVGFnID0gZnVuY3Rpb24gKHRhZykgeyByZXR1cm4gdGFnID09PSAncHJlJzsgfTtcclxudmFyIGlzUmVzZXJ2ZWRUYWcgPSBmdW5jdGlvbiAodGFnKSB7XHJcbiAgICByZXR1cm4gaXNIVE1MVGFnKHRhZykgfHwgaXNTVkcodGFnKTtcclxufTtcclxuZnVuY3Rpb24gZ2V0VGFnTmFtZXNwYWNlKHRhZykge1xyXG4gICAgaWYgKGlzU1ZHKHRhZykpIHtcclxuICAgICAgICByZXR1cm4gJ3N2Zyc7XHJcbiAgICB9XHJcbiAgICAvLyBiYXNpYyBzdXBwb3J0IGZvciBNYXRoTUxcclxuICAgIC8vIG5vdGUgaXQgZG9lc24ndCBzdXBwb3J0IG90aGVyIE1hdGhNTCBlbGVtZW50cyBiZWluZyBjb21wb25lbnQgcm9vdHNcclxuICAgIGlmICh0YWcgPT09ICdtYXRoJykge1xyXG4gICAgICAgIHJldHVybiAnbWF0aCc7XHJcbiAgICB9XHJcbn1cclxudmFyIHVua25vd25FbGVtZW50Q2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xyXG5mdW5jdGlvbiBpc1Vua25vd25FbGVtZW50KHRhZykge1xyXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXHJcbiAgICBpZiAoIWluQnJvd3Nlcikge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgaWYgKGlzUmVzZXJ2ZWRUYWcodGFnKSkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHRhZyA9IHRhZy50b0xvd2VyQ2FzZSgpO1xyXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXHJcbiAgICBpZiAodW5rbm93bkVsZW1lbnRDYWNoZVt0YWddICE9IG51bGwpIHtcclxuICAgICAgICByZXR1cm4gdW5rbm93bkVsZW1lbnRDYWNoZVt0YWddO1xyXG4gICAgfVxyXG4gICAgdmFyIGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWcpO1xyXG4gICAgaWYgKHRhZy5pbmRleE9mKCctJykgPiAtMSkge1xyXG4gICAgICAgIC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzI4MjEwMzY0LzEwNzAyNDRcclxuICAgICAgICByZXR1cm4gKHVua25vd25FbGVtZW50Q2FjaGVbdGFnXSA9XHJcbiAgICAgICAgICAgIGVsLmNvbnN0cnVjdG9yID09PSB3aW5kb3cuSFRNTFVua25vd25FbGVtZW50IHx8XHJcbiAgICAgICAgICAgICAgICBlbC5jb25zdHJ1Y3RvciA9PT0gd2luZG93LkhUTUxFbGVtZW50KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHJldHVybiAodW5rbm93bkVsZW1lbnRDYWNoZVt0YWddID0gL0hUTUxVbmtub3duRWxlbWVudC8udGVzdChlbC50b1N0cmluZygpKSk7XHJcbiAgICB9XHJcbn1cclxudmFyIGlzVGV4dElucHV0VHlwZSA9IG1ha2VNYXAoJ3RleHQsbnVtYmVyLHBhc3N3b3JkLHNlYXJjaCxlbWFpbCx0ZWwsdXJsJyk7XG5cbi8qKlxyXG4gKiBRdWVyeSBhbiBlbGVtZW50IHNlbGVjdG9yIGlmIGl0J3Mgbm90IGFuIGVsZW1lbnQgYWxyZWFkeS5cclxuICovXHJcbmZ1bmN0aW9uIHF1ZXJ5KGVsKSB7XHJcbiAgICBpZiAodHlwZW9mIGVsID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIHZhciBzZWxlY3RlZCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZWwpO1xyXG4gICAgICAgIGlmICghc2VsZWN0ZWQpIHtcclxuICAgICAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB3YXJuJDIoJ0Nhbm5vdCBmaW5kIGVsZW1lbnQ6ICcgKyBlbCk7XHJcbiAgICAgICAgICAgIHJldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHNlbGVjdGVkO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIGVsO1xyXG4gICAgfVxyXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnQodGFnTmFtZSwgdm5vZGUpIHtcclxuICAgIHZhciBlbG0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpO1xyXG4gICAgaWYgKHRhZ05hbWUgIT09ICdzZWxlY3QnKSB7XHJcbiAgICAgICAgcmV0dXJuIGVsbTtcclxuICAgIH1cclxuICAgIC8vIGZhbHNlIG9yIG51bGwgd2lsbCByZW1vdmUgdGhlIGF0dHJpYnV0ZSBidXQgdW5kZWZpbmVkIHdpbGwgbm90XHJcbiAgICBpZiAodm5vZGUuZGF0YSAmJlxyXG4gICAgICAgIHZub2RlLmRhdGEuYXR0cnMgJiZcclxuICAgICAgICB2bm9kZS5kYXRhLmF0dHJzLm11bHRpcGxlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBlbG0uc2V0QXR0cmlidXRlKCdtdWx0aXBsZScsICdtdWx0aXBsZScpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGVsbTtcclxufVxyXG5mdW5jdGlvbiBjcmVhdGVFbGVtZW50TlMobmFtZXNwYWNlLCB0YWdOYW1lKSB7XHJcbiAgICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKG5hbWVzcGFjZU1hcFtuYW1lc3BhY2VdLCB0YWdOYW1lKTtcclxufVxyXG5mdW5jdGlvbiBjcmVhdGVUZXh0Tm9kZSh0ZXh0KSB7XHJcbiAgICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGV4dCk7XHJcbn1cclxuZnVuY3Rpb24gY3JlYXRlQ29tbWVudCh0ZXh0KSB7XHJcbiAgICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlQ29tbWVudCh0ZXh0KTtcclxufVxyXG5mdW5jdGlvbiBpbnNlcnRCZWZvcmUocGFyZW50Tm9kZSwgbmV3Tm9kZSwgcmVmZXJlbmNlTm9kZSkge1xyXG4gICAgcGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobmV3Tm9kZSwgcmVmZXJlbmNlTm9kZSk7XHJcbn1cclxuZnVuY3Rpb24gcmVtb3ZlQ2hpbGQobm9kZSwgY2hpbGQpIHtcclxuICAgIG5vZGUucmVtb3ZlQ2hpbGQoY2hpbGQpO1xyXG59XHJcbmZ1bmN0aW9uIGFwcGVuZENoaWxkKG5vZGUsIGNoaWxkKSB7XHJcbiAgICBub2RlLmFwcGVuZENoaWxkKGNoaWxkKTtcclxufVxyXG5mdW5jdGlvbiBwYXJlbnROb2RlKG5vZGUpIHtcclxuICAgIHJldHVybiBub2RlLnBhcmVudE5vZGU7XHJcbn1cclxuZnVuY3Rpb24gbmV4dFNpYmxpbmcobm9kZSkge1xyXG4gICAgcmV0dXJuIG5vZGUubmV4dFNpYmxpbmc7XHJcbn1cclxuZnVuY3Rpb24gdGFnTmFtZShub2RlKSB7XHJcbiAgICByZXR1cm4gbm9kZS50YWdOYW1lO1xyXG59XHJcbmZ1bmN0aW9uIHNldFRleHRDb250ZW50KG5vZGUsIHRleHQpIHtcclxuICAgIG5vZGUudGV4dENvbnRlbnQgPSB0ZXh0O1xyXG59XHJcbmZ1bmN0aW9uIHNldFN0eWxlU2NvcGUobm9kZSwgc2NvcGVJZCkge1xyXG4gICAgbm9kZS5zZXRBdHRyaWJ1dGUoc2NvcGVJZCwgJycpO1xyXG59XG5cbnZhciBub2RlT3BzID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICBfX3Byb3RvX186IG51bGwsXG4gIGNyZWF0ZUVsZW1lbnQ6IGNyZWF0ZUVsZW1lbnQsXG4gIGNyZWF0ZUVsZW1lbnROUzogY3JlYXRlRWxlbWVudE5TLFxuICBjcmVhdGVUZXh0Tm9kZTogY3JlYXRlVGV4dE5vZGUsXG4gIGNyZWF0ZUNvbW1lbnQ6IGNyZWF0ZUNvbW1lbnQsXG4gIGluc2VydEJlZm9yZTogaW5zZXJ0QmVmb3JlLFxuICByZW1vdmVDaGlsZDogcmVtb3ZlQ2hpbGQsXG4gIGFwcGVuZENoaWxkOiBhcHBlbmRDaGlsZCxcbiAgcGFyZW50Tm9kZTogcGFyZW50Tm9kZSxcbiAgbmV4dFNpYmxpbmc6IG5leHRTaWJsaW5nLFxuICB0YWdOYW1lOiB0YWdOYW1lLFxuICBzZXRUZXh0Q29udGVudDogc2V0VGV4dENvbnRlbnQsXG4gIHNldFN0eWxlU2NvcGU6IHNldFN0eWxlU2NvcGVcbn0pO1xuXG52YXIgcmVmID0ge1xyXG4gICAgY3JlYXRlOiBmdW5jdGlvbiAoXywgdm5vZGUpIHtcclxuICAgICAgICByZWdpc3RlclJlZih2bm9kZSk7XHJcbiAgICB9LFxyXG4gICAgdXBkYXRlOiBmdW5jdGlvbiAob2xkVm5vZGUsIHZub2RlKSB7XHJcbiAgICAgICAgaWYgKG9sZFZub2RlLmRhdGEucmVmICE9PSB2bm9kZS5kYXRhLnJlZikge1xyXG4gICAgICAgICAgICByZWdpc3RlclJlZihvbGRWbm9kZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIHJlZ2lzdGVyUmVmKHZub2RlKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgZGVzdHJveTogZnVuY3Rpb24gKHZub2RlKSB7XHJcbiAgICAgICAgcmVnaXN0ZXJSZWYodm5vZGUsIHRydWUpO1xyXG4gICAgfVxyXG59O1xyXG5mdW5jdGlvbiByZWdpc3RlclJlZih2bm9kZSwgaXNSZW1vdmFsKSB7XHJcbiAgICB2YXIgcmVmID0gdm5vZGUuZGF0YS5yZWY7XHJcbiAgICBpZiAoIWlzRGVmKHJlZikpXHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgdmFyIHZtID0gdm5vZGUuY29udGV4dDtcclxuICAgIHZhciByZWZWYWx1ZSA9IHZub2RlLmNvbXBvbmVudEluc3RhbmNlIHx8IHZub2RlLmVsbTtcclxuICAgIHZhciB2YWx1ZSA9IGlzUmVtb3ZhbCA/IG51bGwgOiByZWZWYWx1ZTtcclxuICAgIHZhciAkcmVmc1ZhbHVlID0gaXNSZW1vdmFsID8gdW5kZWZpbmVkIDogcmVmVmFsdWU7XHJcbiAgICBpZiAoaXNGdW5jdGlvbihyZWYpKSB7XHJcbiAgICAgICAgaW52b2tlV2l0aEVycm9ySGFuZGxpbmcocmVmLCB2bSwgW3ZhbHVlXSwgdm0sIFwidGVtcGxhdGUgcmVmIGZ1bmN0aW9uXCIpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHZhciBpc0ZvciA9IHZub2RlLmRhdGEucmVmSW5Gb3I7XHJcbiAgICB2YXIgX2lzU3RyaW5nID0gdHlwZW9mIHJlZiA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHJlZiA9PT0gJ251bWJlcic7XHJcbiAgICB2YXIgX2lzUmVmID0gaXNSZWYocmVmKTtcclxuICAgIHZhciByZWZzID0gdm0uJHJlZnM7XHJcbiAgICBpZiAoX2lzU3RyaW5nIHx8IF9pc1JlZikge1xyXG4gICAgICAgIGlmIChpc0Zvcikge1xyXG4gICAgICAgICAgICB2YXIgZXhpc3RpbmcgPSBfaXNTdHJpbmcgPyByZWZzW3JlZl0gOiByZWYudmFsdWU7XHJcbiAgICAgICAgICAgIGlmIChpc1JlbW92YWwpIHtcclxuICAgICAgICAgICAgICAgIGlzQXJyYXkoZXhpc3RpbmcpICYmIHJlbW92ZSQyKGV4aXN0aW5nLCByZWZWYWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWlzQXJyYXkoZXhpc3RpbmcpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9pc1N0cmluZykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZzW3JlZl0gPSBbcmVmVmFsdWVdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRTZXR1cFJlZih2bSwgcmVmLCByZWZzW3JlZl0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmLnZhbHVlID0gW3JlZlZhbHVlXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmICghZXhpc3RpbmcuaW5jbHVkZXMocmVmVmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmcucHVzaChyZWZWYWx1ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoX2lzU3RyaW5nKSB7XHJcbiAgICAgICAgICAgIGlmIChpc1JlbW92YWwgJiYgcmVmc1tyZWZdICE9PSByZWZWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJlZnNbcmVmXSA9ICRyZWZzVmFsdWU7XHJcbiAgICAgICAgICAgIHNldFNldHVwUmVmKHZtLCByZWYsIHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoX2lzUmVmKSB7XHJcbiAgICAgICAgICAgIGlmIChpc1JlbW92YWwgJiYgcmVmLnZhbHVlICE9PSByZWZWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJlZi52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XHJcbiAgICAgICAgICAgIHdhcm4kMihcIkludmFsaWQgdGVtcGxhdGUgcmVmIHR5cGU6IFwiLmNvbmNhdCh0eXBlb2YgcmVmKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIHNldFNldHVwUmVmKF9hLCBrZXksIHZhbCkge1xyXG4gICAgdmFyIF9zZXR1cFN0YXRlID0gX2EuX3NldHVwU3RhdGU7XHJcbiAgICBpZiAoX3NldHVwU3RhdGUgJiYgaGFzT3duKF9zZXR1cFN0YXRlLCBrZXkpKSB7XHJcbiAgICAgICAgaWYgKGlzUmVmKF9zZXR1cFN0YXRlW2tleV0pKSB7XHJcbiAgICAgICAgICAgIF9zZXR1cFN0YXRlW2tleV0udmFsdWUgPSB2YWw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBfc2V0dXBTdGF0ZVtrZXldID0gdmFsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxuXG4vKipcclxuICogVmlydHVhbCBET00gcGF0Y2hpbmcgYWxnb3JpdGhtIGJhc2VkIG9uIFNuYWJiZG9tIGJ5XHJcbiAqIFNpbW9uIEZyaWlzIFZpbmR1bSAoQHBhbGRlcGluZClcclxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlXHJcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9wYWxkZXBpbmQvc25hYmJkb20vYmxvYi9tYXN0ZXIvTElDRU5TRVxyXG4gKlxyXG4gKiBtb2RpZmllZCBieSBFdmFuIFlvdSAoQHl5eDk5MDgwMylcclxuICpcclxuICogTm90IHR5cGUtY2hlY2tpbmcgdGhpcyBiZWNhdXNlIHRoaXMgZmlsZSBpcyBwZXJmLWNyaXRpY2FsIGFuZCB0aGUgY29zdFxyXG4gKiBvZiBtYWtpbmcgZmxvdyB1bmRlcnN0YW5kIGl0IGlzIG5vdCB3b3J0aCBpdC5cclxuICovXHJcbnZhciBlbXB0eU5vZGUgPSBuZXcgVk5vZGUoJycsIHt9LCBbXSk7XHJcbnZhciBob29rcyA9IFsnY3JlYXRlJywgJ2FjdGl2YXRlJywgJ3VwZGF0ZScsICdyZW1vdmUnLCAnZGVzdHJveSddO1xyXG5mdW5jdGlvbiBzYW1lVm5vZGUoYSwgYikge1xyXG4gICAgcmV0dXJuIChhLmtleSA9PT0gYi5rZXkgJiZcclxuICAgICAgICBhLmFzeW5jRmFjdG9yeSA9PT0gYi5hc3luY0ZhY3RvcnkgJiZcclxuICAgICAgICAoKGEudGFnID09PSBiLnRhZyAmJlxyXG4gICAgICAgICAgICBhLmlzQ29tbWVudCA9PT0gYi5pc0NvbW1lbnQgJiZcclxuICAgICAgICAgICAgaXNEZWYoYS5kYXRhKSA9PT0gaXNEZWYoYi5kYXRhKSAmJlxyXG4gICAgICAgICAgICBzYW1lSW5wdXRUeXBlKGEsIGIpKSB8fFxyXG4gICAgICAgICAgICAoaXNUcnVlKGEuaXNBc3luY1BsYWNlaG9sZGVyKSAmJiBpc1VuZGVmKGIuYXN5bmNGYWN0b3J5LmVycm9yKSkpKTtcclxufVxyXG5mdW5jdGlvbiBzYW1lSW5wdXRUeXBlKGEsIGIpIHtcclxuICAgIGlmIChhLnRhZyAhPT0gJ2lucHV0JylcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIHZhciBpO1xyXG4gICAgdmFyIHR5cGVBID0gaXNEZWYoKGkgPSBhLmRhdGEpKSAmJiBpc0RlZigoaSA9IGkuYXR0cnMpKSAmJiBpLnR5cGU7XHJcbiAgICB2YXIgdHlwZUIgPSBpc0RlZigoaSA9IGIuZGF0YSkpICYmIGlzRGVmKChpID0gaS5hdHRycykpICYmIGkudHlwZTtcclxuICAgIHJldHVybiB0eXBlQSA9PT0gdHlwZUIgfHwgKGlzVGV4dElucHV0VHlwZSh0eXBlQSkgJiYgaXNUZXh0SW5wdXRUeXBlKHR5cGVCKSk7XHJcbn1cclxuZnVuY3Rpb24gY3JlYXRlS2V5VG9PbGRJZHgoY2hpbGRyZW4sIGJlZ2luSWR4LCBlbmRJZHgpIHtcclxuICAgIHZhciBpLCBrZXk7XHJcbiAgICB2YXIgbWFwID0ge307XHJcbiAgICBmb3IgKGkgPSBiZWdpbklkeDsgaSA8PSBlbmRJZHg7ICsraSkge1xyXG4gICAgICAgIGtleSA9IGNoaWxkcmVuW2ldLmtleTtcclxuICAgICAgICBpZiAoaXNEZWYoa2V5KSlcclxuICAgICAgICAgICAgbWFwW2tleV0gPSBpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG1hcDtcclxufVxyXG5mdW5jdGlvbiBjcmVhdGVQYXRjaEZ1bmN0aW9uKGJhY2tlbmQpIHtcclxuICAgIHZhciBpLCBqO1xyXG4gICAgdmFyIGNicyA9IHt9O1xyXG4gICAgdmFyIG1vZHVsZXMgPSBiYWNrZW5kLm1vZHVsZXMsIG5vZGVPcHMgPSBiYWNrZW5kLm5vZGVPcHM7XHJcbiAgICBmb3IgKGkgPSAwOyBpIDwgaG9va3MubGVuZ3RoOyArK2kpIHtcclxuICAgICAgICBjYnNbaG9va3NbaV1dID0gW107XHJcbiAgICAgICAgZm9yIChqID0gMDsgaiA8IG1vZHVsZXMubGVuZ3RoOyArK2opIHtcclxuICAgICAgICAgICAgaWYgKGlzRGVmKG1vZHVsZXNbal1baG9va3NbaV1dKSkge1xyXG4gICAgICAgICAgICAgICAgY2JzW2hvb2tzW2ldXS5wdXNoKG1vZHVsZXNbal1baG9va3NbaV1dKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGVtcHR5Tm9kZUF0KGVsbSkge1xyXG4gICAgICAgIHJldHVybiBuZXcgVk5vZGUobm9kZU9wcy50YWdOYW1lKGVsbSkudG9Mb3dlckNhc2UoKSwge30sIFtdLCB1bmRlZmluZWQsIGVsbSk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBjcmVhdGVSbUNiKGNoaWxkRWxtLCBsaXN0ZW5lcnMpIHtcclxuICAgICAgICBmdW5jdGlvbiByZW1vdmUoKSB7XHJcbiAgICAgICAgICAgIGlmICgtLXJlbW92ZS5saXN0ZW5lcnMgPT09IDApIHtcclxuICAgICAgICAgICAgICAgIHJlbW92ZU5vZGUoY2hpbGRFbG0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlbW92ZS5saXN0ZW5lcnMgPSBsaXN0ZW5lcnM7XHJcbiAgICAgICAgcmV0dXJuIHJlbW92ZTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHJlbW92ZU5vZGUoZWwpIHtcclxuICAgICAgICB2YXIgcGFyZW50ID0gbm9kZU9wcy5wYXJlbnROb2RlKGVsKTtcclxuICAgICAgICAvLyBlbGVtZW50IG1heSBoYXZlIGFscmVhZHkgYmVlbiByZW1vdmVkIGR1ZSB0byB2LWh0bWwgLyB2LXRleHRcclxuICAgICAgICBpZiAoaXNEZWYocGFyZW50KSkge1xyXG4gICAgICAgICAgICBub2RlT3BzLnJlbW92ZUNoaWxkKHBhcmVudCwgZWwpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGlzVW5rbm93bkVsZW1lbnQodm5vZGUsIGluVlByZSkge1xyXG4gICAgICAgIHJldHVybiAoIWluVlByZSAmJlxyXG4gICAgICAgICAgICAhdm5vZGUubnMgJiZcclxuICAgICAgICAgICAgIShjb25maWcuaWdub3JlZEVsZW1lbnRzLmxlbmd0aCAmJlxyXG4gICAgICAgICAgICAgICAgY29uZmlnLmlnbm9yZWRFbGVtZW50cy5zb21lKGZ1bmN0aW9uIChpZ25vcmUpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXNSZWdFeHAoaWdub3JlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGlnbm9yZS50ZXN0KHZub2RlLnRhZylcclxuICAgICAgICAgICAgICAgICAgICAgICAgOiBpZ25vcmUgPT09IHZub2RlLnRhZztcclxuICAgICAgICAgICAgICAgIH0pKSAmJlxyXG4gICAgICAgICAgICBjb25maWcuaXNVbmtub3duRWxlbWVudCh2bm9kZS50YWcpKTtcclxuICAgIH1cclxuICAgIHZhciBjcmVhdGluZ0VsbUluVlByZSA9IDA7XHJcbiAgICBmdW5jdGlvbiBjcmVhdGVFbG0odm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgcGFyZW50RWxtLCByZWZFbG0sIG5lc3RlZCwgb3duZXJBcnJheSwgaW5kZXgpIHtcclxuICAgICAgICBpZiAoaXNEZWYodm5vZGUuZWxtKSAmJiBpc0RlZihvd25lckFycmF5KSkge1xyXG4gICAgICAgICAgICAvLyBUaGlzIHZub2RlIHdhcyB1c2VkIGluIGEgcHJldmlvdXMgcmVuZGVyIVxyXG4gICAgICAgICAgICAvLyBub3cgaXQncyB1c2VkIGFzIGEgbmV3IG5vZGUsIG92ZXJ3cml0aW5nIGl0cyBlbG0gd291bGQgY2F1c2VcclxuICAgICAgICAgICAgLy8gcG90ZW50aWFsIHBhdGNoIGVycm9ycyBkb3duIHRoZSByb2FkIHdoZW4gaXQncyB1c2VkIGFzIGFuIGluc2VydGlvblxyXG4gICAgICAgICAgICAvLyByZWZlcmVuY2Ugbm9kZS4gSW5zdGVhZCwgd2UgY2xvbmUgdGhlIG5vZGUgb24tZGVtYW5kIGJlZm9yZSBjcmVhdGluZ1xyXG4gICAgICAgICAgICAvLyBhc3NvY2lhdGVkIERPTSBlbGVtZW50IGZvciBpdC5cclxuICAgICAgICAgICAgdm5vZGUgPSBvd25lckFycmF5W2luZGV4XSA9IGNsb25lVk5vZGUodm5vZGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2bm9kZS5pc1Jvb3RJbnNlcnQgPSAhbmVzdGVkOyAvLyBmb3IgdHJhbnNpdGlvbiBlbnRlciBjaGVja1xyXG4gICAgICAgIGlmIChjcmVhdGVDb21wb25lbnQodm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgcGFyZW50RWxtLCByZWZFbG0pKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGRhdGEgPSB2bm9kZS5kYXRhO1xyXG4gICAgICAgIHZhciBjaGlsZHJlbiA9IHZub2RlLmNoaWxkcmVuO1xyXG4gICAgICAgIHZhciB0YWcgPSB2bm9kZS50YWc7XHJcbiAgICAgICAgaWYgKGlzRGVmKHRhZykpIHtcclxuICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcclxuICAgICAgICAgICAgICAgIGlmIChkYXRhICYmIGRhdGEucHJlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY3JlYXRpbmdFbG1JblZQcmUrKztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChpc1Vua25vd25FbGVtZW50KHZub2RlLCBjcmVhdGluZ0VsbUluVlByZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICB3YXJuJDIoJ1Vua25vd24gY3VzdG9tIGVsZW1lbnQ6IDwnICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFnICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJz4gLSBkaWQgeW91ICcgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAncmVnaXN0ZXIgdGhlIGNvbXBvbmVudCBjb3JyZWN0bHk/IEZvciByZWN1cnNpdmUgY29tcG9uZW50cywgJyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICdtYWtlIHN1cmUgdG8gcHJvdmlkZSB0aGUgXCJuYW1lXCIgb3B0aW9uLicsIHZub2RlLmNvbnRleHQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZub2RlLmVsbSA9IHZub2RlLm5zXHJcbiAgICAgICAgICAgICAgICA/IG5vZGVPcHMuY3JlYXRlRWxlbWVudE5TKHZub2RlLm5zLCB0YWcpXHJcbiAgICAgICAgICAgICAgICA6IG5vZGVPcHMuY3JlYXRlRWxlbWVudCh0YWcsIHZub2RlKTtcclxuICAgICAgICAgICAgc2V0U2NvcGUodm5vZGUpO1xyXG4gICAgICAgICAgICBjcmVhdGVDaGlsZHJlbih2bm9kZSwgY2hpbGRyZW4sIGluc2VydGVkVm5vZGVRdWV1ZSk7XHJcbiAgICAgICAgICAgIGlmIChpc0RlZihkYXRhKSkge1xyXG4gICAgICAgICAgICAgICAgaW52b2tlQ3JlYXRlSG9va3Modm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaW5zZXJ0KHBhcmVudEVsbSwgdm5vZGUuZWxtLCByZWZFbG0pO1xyXG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBkYXRhICYmIGRhdGEucHJlKSB7XHJcbiAgICAgICAgICAgICAgICBjcmVhdGluZ0VsbUluVlByZS0tO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGlzVHJ1ZSh2bm9kZS5pc0NvbW1lbnQpKSB7XHJcbiAgICAgICAgICAgIHZub2RlLmVsbSA9IG5vZGVPcHMuY3JlYXRlQ29tbWVudCh2bm9kZS50ZXh0KTtcclxuICAgICAgICAgICAgaW5zZXJ0KHBhcmVudEVsbSwgdm5vZGUuZWxtLCByZWZFbG0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdm5vZGUuZWxtID0gbm9kZU9wcy5jcmVhdGVUZXh0Tm9kZSh2bm9kZS50ZXh0KTtcclxuICAgICAgICAgICAgaW5zZXJ0KHBhcmVudEVsbSwgdm5vZGUuZWxtLCByZWZFbG0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGNyZWF0ZUNvbXBvbmVudCh2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBwYXJlbnRFbG0sIHJlZkVsbSkge1xyXG4gICAgICAgIHZhciBpID0gdm5vZGUuZGF0YTtcclxuICAgICAgICBpZiAoaXNEZWYoaSkpIHtcclxuICAgICAgICAgICAgdmFyIGlzUmVhY3RpdmF0ZWQgPSBpc0RlZih2bm9kZS5jb21wb25lbnRJbnN0YW5jZSkgJiYgaS5rZWVwQWxpdmU7XHJcbiAgICAgICAgICAgIGlmIChpc0RlZigoaSA9IGkuaG9vaykpICYmIGlzRGVmKChpID0gaS5pbml0KSkpIHtcclxuICAgICAgICAgICAgICAgIGkodm5vZGUsIGZhbHNlIC8qIGh5ZHJhdGluZyAqLyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gYWZ0ZXIgY2FsbGluZyB0aGUgaW5pdCBob29rLCBpZiB0aGUgdm5vZGUgaXMgYSBjaGlsZCBjb21wb25lbnRcclxuICAgICAgICAgICAgLy8gaXQgc2hvdWxkJ3ZlIGNyZWF0ZWQgYSBjaGlsZCBpbnN0YW5jZSBhbmQgbW91bnRlZCBpdC4gdGhlIGNoaWxkXHJcbiAgICAgICAgICAgIC8vIGNvbXBvbmVudCBhbHNvIGhhcyBzZXQgdGhlIHBsYWNlaG9sZGVyIHZub2RlJ3MgZWxtLlxyXG4gICAgICAgICAgICAvLyBpbiB0aGF0IGNhc2Ugd2UgY2FuIGp1c3QgcmV0dXJuIHRoZSBlbGVtZW50IGFuZCBiZSBkb25lLlxyXG4gICAgICAgICAgICBpZiAoaXNEZWYodm5vZGUuY29tcG9uZW50SW5zdGFuY2UpKSB7XHJcbiAgICAgICAgICAgICAgICBpbml0Q29tcG9uZW50KHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUpO1xyXG4gICAgICAgICAgICAgICAgaW5zZXJ0KHBhcmVudEVsbSwgdm5vZGUuZWxtLCByZWZFbG0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzVHJ1ZShpc1JlYWN0aXZhdGVkKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlYWN0aXZhdGVDb21wb25lbnQodm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgcGFyZW50RWxtLCByZWZFbG0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBpbml0Q29tcG9uZW50KHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUpIHtcclxuICAgICAgICBpZiAoaXNEZWYodm5vZGUuZGF0YS5wZW5kaW5nSW5zZXJ0KSkge1xyXG4gICAgICAgICAgICBpbnNlcnRlZFZub2RlUXVldWUucHVzaC5hcHBseShpbnNlcnRlZFZub2RlUXVldWUsIHZub2RlLmRhdGEucGVuZGluZ0luc2VydCk7XHJcbiAgICAgICAgICAgIHZub2RlLmRhdGEucGVuZGluZ0luc2VydCA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZub2RlLmVsbSA9IHZub2RlLmNvbXBvbmVudEluc3RhbmNlLiRlbDtcclxuICAgICAgICBpZiAoaXNQYXRjaGFibGUodm5vZGUpKSB7XHJcbiAgICAgICAgICAgIGludm9rZUNyZWF0ZUhvb2tzKHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUpO1xyXG4gICAgICAgICAgICBzZXRTY29wZSh2bm9kZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBlbXB0eSBjb21wb25lbnQgcm9vdC5cclxuICAgICAgICAgICAgLy8gc2tpcCBhbGwgZWxlbWVudC1yZWxhdGVkIG1vZHVsZXMgZXhjZXB0IGZvciByZWYgKCMzNDU1KVxyXG4gICAgICAgICAgICByZWdpc3RlclJlZih2bm9kZSk7XHJcbiAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSB0byBpbnZva2UgdGhlIGluc2VydCBob29rXHJcbiAgICAgICAgICAgIGluc2VydGVkVm5vZGVRdWV1ZS5wdXNoKHZub2RlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiByZWFjdGl2YXRlQ29tcG9uZW50KHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIHBhcmVudEVsbSwgcmVmRWxtKSB7XHJcbiAgICAgICAgdmFyIGk7XHJcbiAgICAgICAgLy8gaGFjayBmb3IgIzQzMzk6IGEgcmVhY3RpdmF0ZWQgY29tcG9uZW50IHdpdGggaW5uZXIgdHJhbnNpdGlvblxyXG4gICAgICAgIC8vIGRvZXMgbm90IHRyaWdnZXIgYmVjYXVzZSB0aGUgaW5uZXIgbm9kZSdzIGNyZWF0ZWQgaG9va3MgYXJlIG5vdCBjYWxsZWRcclxuICAgICAgICAvLyBhZ2Fpbi4gSXQncyBub3QgaWRlYWwgdG8gaW52b2x2ZSBtb2R1bGUtc3BlY2lmaWMgbG9naWMgaW4gaGVyZSBidXRcclxuICAgICAgICAvLyB0aGVyZSBkb2Vzbid0IHNlZW0gdG8gYmUgYSBiZXR0ZXIgd2F5IHRvIGRvIGl0LlxyXG4gICAgICAgIHZhciBpbm5lck5vZGUgPSB2bm9kZTtcclxuICAgICAgICB3aGlsZSAoaW5uZXJOb2RlLmNvbXBvbmVudEluc3RhbmNlKSB7XHJcbiAgICAgICAgICAgIGlubmVyTm9kZSA9IGlubmVyTm9kZS5jb21wb25lbnRJbnN0YW5jZS5fdm5vZGU7XHJcbiAgICAgICAgICAgIGlmIChpc0RlZigoaSA9IGlubmVyTm9kZS5kYXRhKSkgJiYgaXNEZWYoKGkgPSBpLnRyYW5zaXRpb24pKSkge1xyXG4gICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGNicy5hY3RpdmF0ZS5sZW5ndGg7ICsraSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNicy5hY3RpdmF0ZVtpXShlbXB0eU5vZGUsIGlubmVyTm9kZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpbnNlcnRlZFZub2RlUXVldWUucHVzaChpbm5lck5vZGUpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gdW5saWtlIGEgbmV3bHkgY3JlYXRlZCBjb21wb25lbnQsXHJcbiAgICAgICAgLy8gYSByZWFjdGl2YXRlZCBrZWVwLWFsaXZlIGNvbXBvbmVudCBkb2Vzbid0IGluc2VydCBpdHNlbGZcclxuICAgICAgICBpbnNlcnQocGFyZW50RWxtLCB2bm9kZS5lbG0sIHJlZkVsbSk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBpbnNlcnQocGFyZW50LCBlbG0sIHJlZikge1xyXG4gICAgICAgIGlmIChpc0RlZihwYXJlbnQpKSB7XHJcbiAgICAgICAgICAgIGlmIChpc0RlZihyZWYpKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobm9kZU9wcy5wYXJlbnROb2RlKHJlZikgPT09IHBhcmVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgIG5vZGVPcHMuaW5zZXJ0QmVmb3JlKHBhcmVudCwgZWxtLCByZWYpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbm9kZU9wcy5hcHBlbmRDaGlsZChwYXJlbnQsIGVsbSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBjcmVhdGVDaGlsZHJlbih2bm9kZSwgY2hpbGRyZW4sIGluc2VydGVkVm5vZGVRdWV1ZSkge1xyXG4gICAgICAgIGlmIChpc0FycmF5KGNoaWxkcmVuKSkge1xyXG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgY2hlY2tEdXBsaWNhdGVLZXlzKGNoaWxkcmVuKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmb3IgKHZhciBpXzEgPSAwOyBpXzEgPCBjaGlsZHJlbi5sZW5ndGg7ICsraV8xKSB7XHJcbiAgICAgICAgICAgICAgICBjcmVhdGVFbG0oY2hpbGRyZW5baV8xXSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCB2bm9kZS5lbG0sIG51bGwsIHRydWUsIGNoaWxkcmVuLCBpXzEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGlzUHJpbWl0aXZlKHZub2RlLnRleHQpKSB7XHJcbiAgICAgICAgICAgIG5vZGVPcHMuYXBwZW5kQ2hpbGQodm5vZGUuZWxtLCBub2RlT3BzLmNyZWF0ZVRleHROb2RlKFN0cmluZyh2bm9kZS50ZXh0KSkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGlzUGF0Y2hhYmxlKHZub2RlKSB7XHJcbiAgICAgICAgd2hpbGUgKHZub2RlLmNvbXBvbmVudEluc3RhbmNlKSB7XHJcbiAgICAgICAgICAgIHZub2RlID0gdm5vZGUuY29tcG9uZW50SW5zdGFuY2UuX3Zub2RlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gaXNEZWYodm5vZGUudGFnKTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGludm9rZUNyZWF0ZUhvb2tzKHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUpIHtcclxuICAgICAgICBmb3IgKHZhciBpXzIgPSAwOyBpXzIgPCBjYnMuY3JlYXRlLmxlbmd0aDsgKytpXzIpIHtcclxuICAgICAgICAgICAgY2JzLmNyZWF0ZVtpXzJdKGVtcHR5Tm9kZSwgdm5vZGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpID0gdm5vZGUuZGF0YS5ob29rOyAvLyBSZXVzZSB2YXJpYWJsZVxyXG4gICAgICAgIGlmIChpc0RlZihpKSkge1xyXG4gICAgICAgICAgICBpZiAoaXNEZWYoaS5jcmVhdGUpKVxyXG4gICAgICAgICAgICAgICAgaS5jcmVhdGUoZW1wdHlOb2RlLCB2bm9kZSk7XHJcbiAgICAgICAgICAgIGlmIChpc0RlZihpLmluc2VydCkpXHJcbiAgICAgICAgICAgICAgICBpbnNlcnRlZFZub2RlUXVldWUucHVzaCh2bm9kZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gc2V0IHNjb3BlIGlkIGF0dHJpYnV0ZSBmb3Igc2NvcGVkIENTUy5cclxuICAgIC8vIHRoaXMgaXMgaW1wbGVtZW50ZWQgYXMgYSBzcGVjaWFsIGNhc2UgdG8gYXZvaWQgdGhlIG92ZXJoZWFkXHJcbiAgICAvLyBvZiBnb2luZyB0aHJvdWdoIHRoZSBub3JtYWwgYXR0cmlidXRlIHBhdGNoaW5nIHByb2Nlc3MuXHJcbiAgICBmdW5jdGlvbiBzZXRTY29wZSh2bm9kZSkge1xyXG4gICAgICAgIHZhciBpO1xyXG4gICAgICAgIGlmIChpc0RlZigoaSA9IHZub2RlLmZuU2NvcGVJZCkpKSB7XHJcbiAgICAgICAgICAgIG5vZGVPcHMuc2V0U3R5bGVTY29wZSh2bm9kZS5lbG0sIGkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdmFyIGFuY2VzdG9yID0gdm5vZGU7XHJcbiAgICAgICAgICAgIHdoaWxlIChhbmNlc3Rvcikge1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzRGVmKChpID0gYW5jZXN0b3IuY29udGV4dCkpICYmIGlzRGVmKChpID0gaS4kb3B0aW9ucy5fc2NvcGVJZCkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbm9kZU9wcy5zZXRTdHlsZVNjb3BlKHZub2RlLmVsbSwgaSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBhbmNlc3RvciA9IGFuY2VzdG9yLnBhcmVudDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBmb3Igc2xvdCBjb250ZW50IHRoZXkgc2hvdWxkIGFsc28gZ2V0IHRoZSBzY29wZUlkIGZyb20gdGhlIGhvc3QgaW5zdGFuY2UuXHJcbiAgICAgICAgaWYgKGlzRGVmKChpID0gYWN0aXZlSW5zdGFuY2UpKSAmJlxyXG4gICAgICAgICAgICBpICE9PSB2bm9kZS5jb250ZXh0ICYmXHJcbiAgICAgICAgICAgIGkgIT09IHZub2RlLmZuQ29udGV4dCAmJlxyXG4gICAgICAgICAgICBpc0RlZigoaSA9IGkuJG9wdGlvbnMuX3Njb3BlSWQpKSkge1xyXG4gICAgICAgICAgICBub2RlT3BzLnNldFN0eWxlU2NvcGUodm5vZGUuZWxtLCBpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBhZGRWbm9kZXMocGFyZW50RWxtLCByZWZFbG0sIHZub2Rlcywgc3RhcnRJZHgsIGVuZElkeCwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKSB7XHJcbiAgICAgICAgZm9yICg7IHN0YXJ0SWR4IDw9IGVuZElkeDsgKytzdGFydElkeCkge1xyXG4gICAgICAgICAgICBjcmVhdGVFbG0odm5vZGVzW3N0YXJ0SWR4XSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBwYXJlbnRFbG0sIHJlZkVsbSwgZmFsc2UsIHZub2Rlcywgc3RhcnRJZHgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGludm9rZURlc3Ryb3lIb29rKHZub2RlKSB7XHJcbiAgICAgICAgdmFyIGksIGo7XHJcbiAgICAgICAgdmFyIGRhdGEgPSB2bm9kZS5kYXRhO1xyXG4gICAgICAgIGlmIChpc0RlZihkYXRhKSkge1xyXG4gICAgICAgICAgICBpZiAoaXNEZWYoKGkgPSBkYXRhLmhvb2spKSAmJiBpc0RlZigoaSA9IGkuZGVzdHJveSkpKVxyXG4gICAgICAgICAgICAgICAgaSh2bm9kZSk7XHJcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjYnMuZGVzdHJveS5sZW5ndGg7ICsraSlcclxuICAgICAgICAgICAgICAgIGNicy5kZXN0cm95W2ldKHZub2RlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlzRGVmKChpID0gdm5vZGUuY2hpbGRyZW4pKSkge1xyXG4gICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgdm5vZGUuY2hpbGRyZW4ubGVuZ3RoOyArK2opIHtcclxuICAgICAgICAgICAgICAgIGludm9rZURlc3Ryb3lIb29rKHZub2RlLmNoaWxkcmVuW2pdKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHJlbW92ZVZub2Rlcyh2bm9kZXMsIHN0YXJ0SWR4LCBlbmRJZHgpIHtcclxuICAgICAgICBmb3IgKDsgc3RhcnRJZHggPD0gZW5kSWR4OyArK3N0YXJ0SWR4KSB7XHJcbiAgICAgICAgICAgIHZhciBjaCA9IHZub2Rlc1tzdGFydElkeF07XHJcbiAgICAgICAgICAgIGlmIChpc0RlZihjaCkpIHtcclxuICAgICAgICAgICAgICAgIGlmIChpc0RlZihjaC50YWcpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQW5kSW52b2tlUmVtb3ZlSG9vayhjaCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaW52b2tlRGVzdHJveUhvb2soY2gpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gVGV4dCBub2RlXHJcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlTm9kZShjaC5lbG0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gcmVtb3ZlQW5kSW52b2tlUmVtb3ZlSG9vayh2bm9kZSwgcm0pIHtcclxuICAgICAgICBpZiAoaXNEZWYocm0pIHx8IGlzRGVmKHZub2RlLmRhdGEpKSB7XHJcbiAgICAgICAgICAgIHZhciBpXzM7XHJcbiAgICAgICAgICAgIHZhciBsaXN0ZW5lcnMgPSBjYnMucmVtb3ZlLmxlbmd0aCArIDE7XHJcbiAgICAgICAgICAgIGlmIChpc0RlZihybSkpIHtcclxuICAgICAgICAgICAgICAgIC8vIHdlIGhhdmUgYSByZWN1cnNpdmVseSBwYXNzZWQgZG93biBybSBjYWxsYmFja1xyXG4gICAgICAgICAgICAgICAgLy8gaW5jcmVhc2UgdGhlIGxpc3RlbmVycyBjb3VudFxyXG4gICAgICAgICAgICAgICAgcm0ubGlzdGVuZXJzICs9IGxpc3RlbmVycztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIGRpcmVjdGx5IHJlbW92aW5nXHJcbiAgICAgICAgICAgICAgICBybSA9IGNyZWF0ZVJtQ2Iodm5vZGUuZWxtLCBsaXN0ZW5lcnMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIHJlY3Vyc2l2ZWx5IGludm9rZSBob29rcyBvbiBjaGlsZCBjb21wb25lbnQgcm9vdCBub2RlXHJcbiAgICAgICAgICAgIGlmIChpc0RlZigoaV8zID0gdm5vZGUuY29tcG9uZW50SW5zdGFuY2UpKSAmJlxyXG4gICAgICAgICAgICAgICAgaXNEZWYoKGlfMyA9IGlfMy5fdm5vZGUpKSAmJlxyXG4gICAgICAgICAgICAgICAgaXNEZWYoaV8zLmRhdGEpKSB7XHJcbiAgICAgICAgICAgICAgICByZW1vdmVBbmRJbnZva2VSZW1vdmVIb29rKGlfMywgcm0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZvciAoaV8zID0gMDsgaV8zIDwgY2JzLnJlbW92ZS5sZW5ndGg7ICsraV8zKSB7XHJcbiAgICAgICAgICAgICAgICBjYnMucmVtb3ZlW2lfM10odm5vZGUsIHJtKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoaXNEZWYoKGlfMyA9IHZub2RlLmRhdGEuaG9vaykpICYmIGlzRGVmKChpXzMgPSBpXzMucmVtb3ZlKSkpIHtcclxuICAgICAgICAgICAgICAgIGlfMyh2bm9kZSwgcm0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcm0oKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmVtb3ZlTm9kZSh2bm9kZS5lbG0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHVwZGF0ZUNoaWxkcmVuKHBhcmVudEVsbSwgb2xkQ2gsIG5ld0NoLCBpbnNlcnRlZFZub2RlUXVldWUsIHJlbW92ZU9ubHkpIHtcclxuICAgICAgICB2YXIgb2xkU3RhcnRJZHggPSAwO1xyXG4gICAgICAgIHZhciBuZXdTdGFydElkeCA9IDA7XHJcbiAgICAgICAgdmFyIG9sZEVuZElkeCA9IG9sZENoLmxlbmd0aCAtIDE7XHJcbiAgICAgICAgdmFyIG9sZFN0YXJ0Vm5vZGUgPSBvbGRDaFswXTtcclxuICAgICAgICB2YXIgb2xkRW5kVm5vZGUgPSBvbGRDaFtvbGRFbmRJZHhdO1xyXG4gICAgICAgIHZhciBuZXdFbmRJZHggPSBuZXdDaC5sZW5ndGggLSAxO1xyXG4gICAgICAgIHZhciBuZXdTdGFydFZub2RlID0gbmV3Q2hbMF07XHJcbiAgICAgICAgdmFyIG5ld0VuZFZub2RlID0gbmV3Q2hbbmV3RW5kSWR4XTtcclxuICAgICAgICB2YXIgb2xkS2V5VG9JZHgsIGlkeEluT2xkLCB2bm9kZVRvTW92ZSwgcmVmRWxtO1xyXG4gICAgICAgIC8vIHJlbW92ZU9ubHkgaXMgYSBzcGVjaWFsIGZsYWcgdXNlZCBvbmx5IGJ5IDx0cmFuc2l0aW9uLWdyb3VwPlxyXG4gICAgICAgIC8vIHRvIGVuc3VyZSByZW1vdmVkIGVsZW1lbnRzIHN0YXkgaW4gY29ycmVjdCByZWxhdGl2ZSBwb3NpdGlvbnNcclxuICAgICAgICAvLyBkdXJpbmcgbGVhdmluZyB0cmFuc2l0aW9uc1xyXG4gICAgICAgIHZhciBjYW5Nb3ZlID0gIXJlbW92ZU9ubHk7XHJcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcclxuICAgICAgICAgICAgY2hlY2tEdXBsaWNhdGVLZXlzKG5ld0NoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgd2hpbGUgKG9sZFN0YXJ0SWR4IDw9IG9sZEVuZElkeCAmJiBuZXdTdGFydElkeCA8PSBuZXdFbmRJZHgpIHtcclxuICAgICAgICAgICAgaWYgKGlzVW5kZWYob2xkU3RhcnRWbm9kZSkpIHtcclxuICAgICAgICAgICAgICAgIG9sZFN0YXJ0Vm5vZGUgPSBvbGRDaFsrK29sZFN0YXJ0SWR4XTsgLy8gVm5vZGUgaGFzIGJlZW4gbW92ZWQgbGVmdFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGlzVW5kZWYob2xkRW5kVm5vZGUpKSB7XHJcbiAgICAgICAgICAgICAgICBvbGRFbmRWbm9kZSA9IG9sZENoWy0tb2xkRW5kSWR4XTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChzYW1lVm5vZGUob2xkU3RhcnRWbm9kZSwgbmV3U3RhcnRWbm9kZSkpIHtcclxuICAgICAgICAgICAgICAgIHBhdGNoVm5vZGUob2xkU3RhcnRWbm9kZSwgbmV3U3RhcnRWbm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBuZXdDaCwgbmV3U3RhcnRJZHgpO1xyXG4gICAgICAgICAgICAgICAgb2xkU3RhcnRWbm9kZSA9IG9sZENoWysrb2xkU3RhcnRJZHhdO1xyXG4gICAgICAgICAgICAgICAgbmV3U3RhcnRWbm9kZSA9IG5ld0NoWysrbmV3U3RhcnRJZHhdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHNhbWVWbm9kZShvbGRFbmRWbm9kZSwgbmV3RW5kVm5vZGUpKSB7XHJcbiAgICAgICAgICAgICAgICBwYXRjaFZub2RlKG9sZEVuZFZub2RlLCBuZXdFbmRWbm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBuZXdDaCwgbmV3RW5kSWR4KTtcclxuICAgICAgICAgICAgICAgIG9sZEVuZFZub2RlID0gb2xkQ2hbLS1vbGRFbmRJZHhdO1xyXG4gICAgICAgICAgICAgICAgbmV3RW5kVm5vZGUgPSBuZXdDaFstLW5ld0VuZElkeF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoc2FtZVZub2RlKG9sZFN0YXJ0Vm5vZGUsIG5ld0VuZFZub2RlKSkge1xyXG4gICAgICAgICAgICAgICAgLy8gVm5vZGUgbW92ZWQgcmlnaHRcclxuICAgICAgICAgICAgICAgIHBhdGNoVm5vZGUob2xkU3RhcnRWbm9kZSwgbmV3RW5kVm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgbmV3Q2gsIG5ld0VuZElkeCk7XHJcbiAgICAgICAgICAgICAgICBjYW5Nb3ZlICYmXHJcbiAgICAgICAgICAgICAgICAgICAgbm9kZU9wcy5pbnNlcnRCZWZvcmUocGFyZW50RWxtLCBvbGRTdGFydFZub2RlLmVsbSwgbm9kZU9wcy5uZXh0U2libGluZyhvbGRFbmRWbm9kZS5lbG0pKTtcclxuICAgICAgICAgICAgICAgIG9sZFN0YXJ0Vm5vZGUgPSBvbGRDaFsrK29sZFN0YXJ0SWR4XTtcclxuICAgICAgICAgICAgICAgIG5ld0VuZFZub2RlID0gbmV3Q2hbLS1uZXdFbmRJZHhdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHNhbWVWbm9kZShvbGRFbmRWbm9kZSwgbmV3U3RhcnRWbm9kZSkpIHtcclxuICAgICAgICAgICAgICAgIC8vIFZub2RlIG1vdmVkIGxlZnRcclxuICAgICAgICAgICAgICAgIHBhdGNoVm5vZGUob2xkRW5kVm5vZGUsIG5ld1N0YXJ0Vm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgbmV3Q2gsIG5ld1N0YXJ0SWR4KTtcclxuICAgICAgICAgICAgICAgIGNhbk1vdmUgJiZcclxuICAgICAgICAgICAgICAgICAgICBub2RlT3BzLmluc2VydEJlZm9yZShwYXJlbnRFbG0sIG9sZEVuZFZub2RlLmVsbSwgb2xkU3RhcnRWbm9kZS5lbG0pO1xyXG4gICAgICAgICAgICAgICAgb2xkRW5kVm5vZGUgPSBvbGRDaFstLW9sZEVuZElkeF07XHJcbiAgICAgICAgICAgICAgICBuZXdTdGFydFZub2RlID0gbmV3Q2hbKytuZXdTdGFydElkeF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNVbmRlZihvbGRLZXlUb0lkeCkpXHJcbiAgICAgICAgICAgICAgICAgICAgb2xkS2V5VG9JZHggPSBjcmVhdGVLZXlUb09sZElkeChvbGRDaCwgb2xkU3RhcnRJZHgsIG9sZEVuZElkeCk7XHJcbiAgICAgICAgICAgICAgICBpZHhJbk9sZCA9IGlzRGVmKG5ld1N0YXJ0Vm5vZGUua2V5KVxyXG4gICAgICAgICAgICAgICAgICAgID8gb2xkS2V5VG9JZHhbbmV3U3RhcnRWbm9kZS5rZXldXHJcbiAgICAgICAgICAgICAgICAgICAgOiBmaW5kSWR4SW5PbGQobmV3U3RhcnRWbm9kZSwgb2xkQ2gsIG9sZFN0YXJ0SWR4LCBvbGRFbmRJZHgpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzVW5kZWYoaWR4SW5PbGQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gTmV3IGVsZW1lbnRcclxuICAgICAgICAgICAgICAgICAgICBjcmVhdGVFbG0obmV3U3RhcnRWbm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBwYXJlbnRFbG0sIG9sZFN0YXJ0Vm5vZGUuZWxtLCBmYWxzZSwgbmV3Q2gsIG5ld1N0YXJ0SWR4KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHZub2RlVG9Nb3ZlID0gb2xkQ2hbaWR4SW5PbGRdO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzYW1lVm5vZGUodm5vZGVUb01vdmUsIG5ld1N0YXJ0Vm5vZGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGNoVm5vZGUodm5vZGVUb01vdmUsIG5ld1N0YXJ0Vm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgbmV3Q2gsIG5ld1N0YXJ0SWR4KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb2xkQ2hbaWR4SW5PbGRdID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYW5Nb3ZlICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlT3BzLmluc2VydEJlZm9yZShwYXJlbnRFbG0sIHZub2RlVG9Nb3ZlLmVsbSwgb2xkU3RhcnRWbm9kZS5lbG0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2FtZSBrZXkgYnV0IGRpZmZlcmVudCBlbGVtZW50LiB0cmVhdCBhcyBuZXcgZWxlbWVudFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVFbG0obmV3U3RhcnRWbm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBwYXJlbnRFbG0sIG9sZFN0YXJ0Vm5vZGUuZWxtLCBmYWxzZSwgbmV3Q2gsIG5ld1N0YXJ0SWR4KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBuZXdTdGFydFZub2RlID0gbmV3Q2hbKytuZXdTdGFydElkeF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9sZFN0YXJ0SWR4ID4gb2xkRW5kSWR4KSB7XHJcbiAgICAgICAgICAgIHJlZkVsbSA9IGlzVW5kZWYobmV3Q2hbbmV3RW5kSWR4ICsgMV0pID8gbnVsbCA6IG5ld0NoW25ld0VuZElkeCArIDFdLmVsbTtcclxuICAgICAgICAgICAgYWRkVm5vZGVzKHBhcmVudEVsbSwgcmVmRWxtLCBuZXdDaCwgbmV3U3RhcnRJZHgsIG5ld0VuZElkeCwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAobmV3U3RhcnRJZHggPiBuZXdFbmRJZHgpIHtcclxuICAgICAgICAgICAgcmVtb3ZlVm5vZGVzKG9sZENoLCBvbGRTdGFydElkeCwgb2xkRW5kSWR4KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBjaGVja0R1cGxpY2F0ZUtleXMoY2hpbGRyZW4pIHtcclxuICAgICAgICB2YXIgc2VlbktleXMgPSB7fTtcclxuICAgICAgICBmb3IgKHZhciBpXzQgPSAwOyBpXzQgPCBjaGlsZHJlbi5sZW5ndGg7IGlfNCsrKSB7XHJcbiAgICAgICAgICAgIHZhciB2bm9kZSA9IGNoaWxkcmVuW2lfNF07XHJcbiAgICAgICAgICAgIHZhciBrZXkgPSB2bm9kZS5rZXk7XHJcbiAgICAgICAgICAgIGlmIChpc0RlZihrZXkpKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2VlbktleXNba2V5XSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHdhcm4kMihcIkR1cGxpY2F0ZSBrZXlzIGRldGVjdGVkOiAnXCIuY29uY2F0KGtleSwgXCInLiBUaGlzIG1heSBjYXVzZSBhbiB1cGRhdGUgZXJyb3IuXCIpLCB2bm9kZS5jb250ZXh0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHNlZW5LZXlzW2tleV0gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gZmluZElkeEluT2xkKG5vZGUsIG9sZENoLCBzdGFydCwgZW5kKSB7XHJcbiAgICAgICAgZm9yICh2YXIgaV81ID0gc3RhcnQ7IGlfNSA8IGVuZDsgaV81KyspIHtcclxuICAgICAgICAgICAgdmFyIGMgPSBvbGRDaFtpXzVdO1xyXG4gICAgICAgICAgICBpZiAoaXNEZWYoYykgJiYgc2FtZVZub2RlKG5vZGUsIGMpKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGlfNTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBwYXRjaFZub2RlKG9sZFZub2RlLCB2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBvd25lckFycmF5LCBpbmRleCwgcmVtb3ZlT25seSkge1xyXG4gICAgICAgIGlmIChvbGRWbm9kZSA9PT0gdm5vZGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaXNEZWYodm5vZGUuZWxtKSAmJiBpc0RlZihvd25lckFycmF5KSkge1xyXG4gICAgICAgICAgICAvLyBjbG9uZSByZXVzZWQgdm5vZGVcclxuICAgICAgICAgICAgdm5vZGUgPSBvd25lckFycmF5W2luZGV4XSA9IGNsb25lVk5vZGUodm5vZGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgZWxtID0gKHZub2RlLmVsbSA9IG9sZFZub2RlLmVsbSk7XHJcbiAgICAgICAgaWYgKGlzVHJ1ZShvbGRWbm9kZS5pc0FzeW5jUGxhY2Vob2xkZXIpKSB7XHJcbiAgICAgICAgICAgIGlmIChpc0RlZih2bm9kZS5hc3luY0ZhY3RvcnkucmVzb2x2ZWQpKSB7XHJcbiAgICAgICAgICAgICAgICBoeWRyYXRlKG9sZFZub2RlLmVsbSwgdm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB2bm9kZS5pc0FzeW5jUGxhY2Vob2xkZXIgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gcmV1c2UgZWxlbWVudCBmb3Igc3RhdGljIHRyZWVzLlxyXG4gICAgICAgIC8vIG5vdGUgd2Ugb25seSBkbyB0aGlzIGlmIHRoZSB2bm9kZSBpcyBjbG9uZWQgLVxyXG4gICAgICAgIC8vIGlmIHRoZSBuZXcgbm9kZSBpcyBub3QgY2xvbmVkIGl0IG1lYW5zIHRoZSByZW5kZXIgZnVuY3Rpb25zIGhhdmUgYmVlblxyXG4gICAgICAgIC8vIHJlc2V0IGJ5IHRoZSBob3QtcmVsb2FkLWFwaSBhbmQgd2UgbmVlZCB0byBkbyBhIHByb3BlciByZS1yZW5kZXIuXHJcbiAgICAgICAgaWYgKGlzVHJ1ZSh2bm9kZS5pc1N0YXRpYykgJiZcclxuICAgICAgICAgICAgaXNUcnVlKG9sZFZub2RlLmlzU3RhdGljKSAmJlxyXG4gICAgICAgICAgICB2bm9kZS5rZXkgPT09IG9sZFZub2RlLmtleSAmJlxyXG4gICAgICAgICAgICAoaXNUcnVlKHZub2RlLmlzQ2xvbmVkKSB8fCBpc1RydWUodm5vZGUuaXNPbmNlKSkpIHtcclxuICAgICAgICAgICAgdm5vZGUuY29tcG9uZW50SW5zdGFuY2UgPSBvbGRWbm9kZS5jb21wb25lbnRJbnN0YW5jZTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgaTtcclxuICAgICAgICB2YXIgZGF0YSA9IHZub2RlLmRhdGE7XHJcbiAgICAgICAgaWYgKGlzRGVmKGRhdGEpICYmIGlzRGVmKChpID0gZGF0YS5ob29rKSkgJiYgaXNEZWYoKGkgPSBpLnByZXBhdGNoKSkpIHtcclxuICAgICAgICAgICAgaShvbGRWbm9kZSwgdm5vZGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgb2xkQ2ggPSBvbGRWbm9kZS5jaGlsZHJlbjtcclxuICAgICAgICB2YXIgY2ggPSB2bm9kZS5jaGlsZHJlbjtcclxuICAgICAgICBpZiAoaXNEZWYoZGF0YSkgJiYgaXNQYXRjaGFibGUodm5vZGUpKSB7XHJcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjYnMudXBkYXRlLmxlbmd0aDsgKytpKVxyXG4gICAgICAgICAgICAgICAgY2JzLnVwZGF0ZVtpXShvbGRWbm9kZSwgdm5vZGUpO1xyXG4gICAgICAgICAgICBpZiAoaXNEZWYoKGkgPSBkYXRhLmhvb2spKSAmJiBpc0RlZigoaSA9IGkudXBkYXRlKSkpXHJcbiAgICAgICAgICAgICAgICBpKG9sZFZub2RlLCB2bm9kZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpc1VuZGVmKHZub2RlLnRleHQpKSB7XHJcbiAgICAgICAgICAgIGlmIChpc0RlZihvbGRDaCkgJiYgaXNEZWYoY2gpKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAob2xkQ2ggIT09IGNoKVxyXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZUNoaWxkcmVuKGVsbSwgb2xkQ2gsIGNoLCBpbnNlcnRlZFZub2RlUXVldWUsIHJlbW92ZU9ubHkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGlzRGVmKGNoKSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcclxuICAgICAgICAgICAgICAgICAgICBjaGVja0R1cGxpY2F0ZUtleXMoY2gpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGlzRGVmKG9sZFZub2RlLnRleHQpKVxyXG4gICAgICAgICAgICAgICAgICAgIG5vZGVPcHMuc2V0VGV4dENvbnRlbnQoZWxtLCAnJyk7XHJcbiAgICAgICAgICAgICAgICBhZGRWbm9kZXMoZWxtLCBudWxsLCBjaCwgMCwgY2gubGVuZ3RoIC0gMSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChpc0RlZihvbGRDaCkpIHtcclxuICAgICAgICAgICAgICAgIHJlbW92ZVZub2RlcyhvbGRDaCwgMCwgb2xkQ2gubGVuZ3RoIC0gMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoaXNEZWYob2xkVm5vZGUudGV4dCkpIHtcclxuICAgICAgICAgICAgICAgIG5vZGVPcHMuc2V0VGV4dENvbnRlbnQoZWxtLCAnJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAob2xkVm5vZGUudGV4dCAhPT0gdm5vZGUudGV4dCkge1xyXG4gICAgICAgICAgICBub2RlT3BzLnNldFRleHRDb250ZW50KGVsbSwgdm5vZGUudGV4dCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpc0RlZihkYXRhKSkge1xyXG4gICAgICAgICAgICBpZiAoaXNEZWYoKGkgPSBkYXRhLmhvb2spKSAmJiBpc0RlZigoaSA9IGkucG9zdHBhdGNoKSkpXHJcbiAgICAgICAgICAgICAgICBpKG9sZFZub2RlLCB2bm9kZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gaW52b2tlSW5zZXJ0SG9vayh2bm9kZSwgcXVldWUsIGluaXRpYWwpIHtcclxuICAgICAgICAvLyBkZWxheSBpbnNlcnQgaG9va3MgZm9yIGNvbXBvbmVudCByb290IG5vZGVzLCBpbnZva2UgdGhlbSBhZnRlciB0aGVcclxuICAgICAgICAvLyBlbGVtZW50IGlzIHJlYWxseSBpbnNlcnRlZFxyXG4gICAgICAgIGlmIChpc1RydWUoaW5pdGlhbCkgJiYgaXNEZWYodm5vZGUucGFyZW50KSkge1xyXG4gICAgICAgICAgICB2bm9kZS5wYXJlbnQuZGF0YS5wZW5kaW5nSW5zZXJ0ID0gcXVldWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpXzYgPSAwOyBpXzYgPCBxdWV1ZS5sZW5ndGg7ICsraV82KSB7XHJcbiAgICAgICAgICAgICAgICBxdWV1ZVtpXzZdLmRhdGEuaG9vay5pbnNlcnQocXVldWVbaV82XSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICB2YXIgaHlkcmF0aW9uQmFpbGVkID0gZmFsc2U7XHJcbiAgICAvLyBsaXN0IG9mIG1vZHVsZXMgdGhhdCBjYW4gc2tpcCBjcmVhdGUgaG9vayBkdXJpbmcgaHlkcmF0aW9uIGJlY2F1c2UgdGhleVxyXG4gICAgLy8gYXJlIGFscmVhZHkgcmVuZGVyZWQgb24gdGhlIGNsaWVudCBvciBoYXMgbm8gbmVlZCBmb3IgaW5pdGlhbGl6YXRpb25cclxuICAgIC8vIE5vdGU6IHN0eWxlIGlzIGV4Y2x1ZGVkIGJlY2F1c2UgaXQgcmVsaWVzIG9uIGluaXRpYWwgY2xvbmUgZm9yIGZ1dHVyZVxyXG4gICAgLy8gZGVlcCB1cGRhdGVzICgjNzA2MykuXHJcbiAgICB2YXIgaXNSZW5kZXJlZE1vZHVsZSA9IG1ha2VNYXAoJ2F0dHJzLGNsYXNzLHN0YXRpY0NsYXNzLHN0YXRpY1N0eWxlLGtleScpO1xyXG4gICAgLy8gTm90ZTogdGhpcyBpcyBhIGJyb3dzZXItb25seSBmdW5jdGlvbiBzbyB3ZSBjYW4gYXNzdW1lIGVsbXMgYXJlIERPTSBub2Rlcy5cclxuICAgIGZ1bmN0aW9uIGh5ZHJhdGUoZWxtLCB2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBpblZQcmUpIHtcclxuICAgICAgICB2YXIgaTtcclxuICAgICAgICB2YXIgdGFnID0gdm5vZGUudGFnLCBkYXRhID0gdm5vZGUuZGF0YSwgY2hpbGRyZW4gPSB2bm9kZS5jaGlsZHJlbjtcclxuICAgICAgICBpblZQcmUgPSBpblZQcmUgfHwgKGRhdGEgJiYgZGF0YS5wcmUpO1xyXG4gICAgICAgIHZub2RlLmVsbSA9IGVsbTtcclxuICAgICAgICBpZiAoaXNUcnVlKHZub2RlLmlzQ29tbWVudCkgJiYgaXNEZWYodm5vZGUuYXN5bmNGYWN0b3J5KSkge1xyXG4gICAgICAgICAgICB2bm9kZS5pc0FzeW5jUGxhY2Vob2xkZXIgPSB0cnVlO1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gYXNzZXJ0IG5vZGUgbWF0Y2hcclxuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xyXG4gICAgICAgICAgICBpZiAoIWFzc2VydE5vZGVNYXRjaChlbG0sIHZub2RlLCBpblZQcmUpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlzRGVmKGRhdGEpKSB7XHJcbiAgICAgICAgICAgIGlmIChpc0RlZigoaSA9IGRhdGEuaG9vaykpICYmIGlzRGVmKChpID0gaS5pbml0KSkpXHJcbiAgICAgICAgICAgICAgICBpKHZub2RlLCB0cnVlIC8qIGh5ZHJhdGluZyAqLyk7XHJcbiAgICAgICAgICAgIGlmIChpc0RlZigoaSA9IHZub2RlLmNvbXBvbmVudEluc3RhbmNlKSkpIHtcclxuICAgICAgICAgICAgICAgIC8vIGNoaWxkIGNvbXBvbmVudC4gaXQgc2hvdWxkIGhhdmUgaHlkcmF0ZWQgaXRzIG93biB0cmVlLlxyXG4gICAgICAgICAgICAgICAgaW5pdENvbXBvbmVudCh2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpc0RlZih0YWcpKSB7XHJcbiAgICAgICAgICAgIGlmIChpc0RlZihjaGlsZHJlbikpIHtcclxuICAgICAgICAgICAgICAgIC8vIGVtcHR5IGVsZW1lbnQsIGFsbG93IGNsaWVudCB0byBwaWNrIHVwIGFuZCBwb3B1bGF0ZSBjaGlsZHJlblxyXG4gICAgICAgICAgICAgICAgaWYgKCFlbG0uaGFzQ2hpbGROb2RlcygpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY3JlYXRlQ2hpbGRyZW4odm5vZGUsIGNoaWxkcmVuLCBpbnNlcnRlZFZub2RlUXVldWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gdi1odG1sIGFuZCBkb21Qcm9wczogaW5uZXJIVE1MXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzRGVmKChpID0gZGF0YSkpICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzRGVmKChpID0gaS5kb21Qcm9wcykpICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzRGVmKChpID0gaS5pbm5lckhUTUwpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSAhPT0gZWxtLmlubmVySFRNTCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFoeWRyYXRpb25CYWlsZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoeWRyYXRpb25CYWlsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignUGFyZW50OiAnLCBlbG0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2Fybignc2VydmVyIGlubmVySFRNTDogJywgaSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdjbGllbnQgaW5uZXJIVE1MOiAnLCBlbG0uaW5uZXJIVE1MKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaXRlcmF0ZSBhbmQgY29tcGFyZSBjaGlsZHJlbiBsaXN0c1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2hpbGRyZW5NYXRjaCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaGlsZE5vZGUgPSBlbG0uZmlyc3RDaGlsZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaV83ID0gMDsgaV83IDwgY2hpbGRyZW4ubGVuZ3RoOyBpXzcrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjaGlsZE5vZGUgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhaHlkcmF0ZShjaGlsZE5vZGUsIGNoaWxkcmVuW2lfN10sIGluc2VydGVkVm5vZGVRdWV1ZSwgaW5WUHJlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuTWF0Y2ggPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkTm9kZSA9IGNoaWxkTm9kZS5uZXh0U2libGluZztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiBjaGlsZE5vZGUgaXMgbm90IG51bGwsIGl0IG1lYW5zIHRoZSBhY3R1YWwgY2hpbGROb2RlcyBsaXN0IGlzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxvbmdlciB0aGFuIHRoZSB2aXJ0dWFsIGNoaWxkcmVuIGxpc3QuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY2hpbGRyZW5NYXRjaCB8fCBjaGlsZE5vZGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhaHlkcmF0aW9uQmFpbGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHlkcmF0aW9uQmFpbGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ1BhcmVudDogJywgZWxtKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ01pc21hdGNoaW5nIGNoaWxkTm9kZXMgdnMuIFZOb2RlczogJywgZWxtLmNoaWxkTm9kZXMsIGNoaWxkcmVuKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoaXNEZWYoZGF0YSkpIHtcclxuICAgICAgICAgICAgICAgIHZhciBmdWxsSW52b2tlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghaXNSZW5kZXJlZE1vZHVsZShrZXkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGxJbnZva2UgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnZva2VDcmVhdGVIb29rcyh2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKCFmdWxsSW52b2tlICYmIGRhdGFbJ2NsYXNzJ10pIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBlbnN1cmUgY29sbGVjdGluZyBkZXBzIGZvciBkZWVwIGNsYXNzIGJpbmRpbmdzIGZvciBmdXR1cmUgdXBkYXRlc1xyXG4gICAgICAgICAgICAgICAgICAgIHRyYXZlcnNlKGRhdGFbJ2NsYXNzJ10pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGVsbS5kYXRhICE9PSB2bm9kZS50ZXh0KSB7XHJcbiAgICAgICAgICAgIGVsbS5kYXRhID0gdm5vZGUudGV4dDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBhc3NlcnROb2RlTWF0Y2gobm9kZSwgdm5vZGUsIGluVlByZSkge1xyXG4gICAgICAgIGlmIChpc0RlZih2bm9kZS50YWcpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAodm5vZGUudGFnLmluZGV4T2YoJ3Z1ZS1jb21wb25lbnQnKSA9PT0gMCB8fFxyXG4gICAgICAgICAgICAgICAgKCFpc1Vua25vd25FbGVtZW50KHZub2RlLCBpblZQcmUpICYmXHJcbiAgICAgICAgICAgICAgICAgICAgdm5vZGUudGFnLnRvTG93ZXJDYXNlKCkgPT09XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChub2RlLnRhZ05hbWUgJiYgbm9kZS50YWdOYW1lLnRvTG93ZXJDYXNlKCkpKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gbm9kZS5ub2RlVHlwZSA9PT0gKHZub2RlLmlzQ29tbWVudCA/IDggOiAzKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gcGF0Y2gob2xkVm5vZGUsIHZub2RlLCBoeWRyYXRpbmcsIHJlbW92ZU9ubHkpIHtcclxuICAgICAgICBpZiAoaXNVbmRlZih2bm9kZSkpIHtcclxuICAgICAgICAgICAgaWYgKGlzRGVmKG9sZFZub2RlKSlcclxuICAgICAgICAgICAgICAgIGludm9rZURlc3Ryb3lIb29rKG9sZFZub2RlKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgaXNJbml0aWFsUGF0Y2ggPSBmYWxzZTtcclxuICAgICAgICB2YXIgaW5zZXJ0ZWRWbm9kZVF1ZXVlID0gW107XHJcbiAgICAgICAgaWYgKGlzVW5kZWYob2xkVm5vZGUpKSB7XHJcbiAgICAgICAgICAgIC8vIGVtcHR5IG1vdW50IChsaWtlbHkgYXMgY29tcG9uZW50KSwgY3JlYXRlIG5ldyByb290IGVsZW1lbnRcclxuICAgICAgICAgICAgaXNJbml0aWFsUGF0Y2ggPSB0cnVlO1xyXG4gICAgICAgICAgICBjcmVhdGVFbG0odm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB2YXIgaXNSZWFsRWxlbWVudCA9IGlzRGVmKG9sZFZub2RlLm5vZGVUeXBlKTtcclxuICAgICAgICAgICAgaWYgKCFpc1JlYWxFbGVtZW50ICYmIHNhbWVWbm9kZShvbGRWbm9kZSwgdm5vZGUpKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBwYXRjaCBleGlzdGluZyByb290IG5vZGVcclxuICAgICAgICAgICAgICAgIHBhdGNoVm5vZGUob2xkVm5vZGUsIHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIG51bGwsIG51bGwsIHJlbW92ZU9ubHkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzUmVhbEVsZW1lbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBtb3VudGluZyB0byBhIHJlYWwgZWxlbWVudFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGNoZWNrIGlmIHRoaXMgaXMgc2VydmVyLXJlbmRlcmVkIGNvbnRlbnQgYW5kIGlmIHdlIGNhbiBwZXJmb3JtXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gYSBzdWNjZXNzZnVsIGh5ZHJhdGlvbi5cclxuICAgICAgICAgICAgICAgICAgICBpZiAob2xkVm5vZGUubm9kZVR5cGUgPT09IDEgJiYgb2xkVm5vZGUuaGFzQXR0cmlidXRlKFNTUl9BVFRSKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvbGRWbm9kZS5yZW1vdmVBdHRyaWJ1dGUoU1NSX0FUVFIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBoeWRyYXRpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNUcnVlKGh5ZHJhdGluZykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGh5ZHJhdGUob2xkVm5vZGUsIHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnZva2VJbnNlcnRIb29rKHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9sZFZub2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm4kMignVGhlIGNsaWVudC1zaWRlIHJlbmRlcmVkIHZpcnR1YWwgRE9NIHRyZWUgaXMgbm90IG1hdGNoaW5nICcgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzZXJ2ZXItcmVuZGVyZWQgY29udGVudC4gVGhpcyBpcyBsaWtlbHkgY2F1c2VkIGJ5IGluY29ycmVjdCAnICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnSFRNTCBtYXJrdXAsIGZvciBleGFtcGxlIG5lc3RpbmcgYmxvY2stbGV2ZWwgZWxlbWVudHMgaW5zaWRlICcgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8cD4sIG9yIG1pc3NpbmcgPHRib2R5Pi4gQmFpbGluZyBoeWRyYXRpb24gYW5kIHBlcmZvcm1pbmcgJyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Z1bGwgY2xpZW50LXNpZGUgcmVuZGVyLicpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGVpdGhlciBub3Qgc2VydmVyLXJlbmRlcmVkLCBvciBoeWRyYXRpb24gZmFpbGVkLlxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGNyZWF0ZSBhbiBlbXB0eSBub2RlIGFuZCByZXBsYWNlIGl0XHJcbiAgICAgICAgICAgICAgICAgICAgb2xkVm5vZGUgPSBlbXB0eU5vZGVBdChvbGRWbm9kZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvLyByZXBsYWNpbmcgZXhpc3RpbmcgZWxlbWVudFxyXG4gICAgICAgICAgICAgICAgdmFyIG9sZEVsbSA9IG9sZFZub2RlLmVsbTtcclxuICAgICAgICAgICAgICAgIHZhciBwYXJlbnRFbG0gPSBub2RlT3BzLnBhcmVudE5vZGUob2xkRWxtKTtcclxuICAgICAgICAgICAgICAgIC8vIGNyZWF0ZSBuZXcgbm9kZVxyXG4gICAgICAgICAgICAgICAgY3JlYXRlRWxtKHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIFxyXG4gICAgICAgICAgICAgICAgLy8gZXh0cmVtZWx5IHJhcmUgZWRnZSBjYXNlOiBkbyBub3QgaW5zZXJ0IGlmIG9sZCBlbGVtZW50IGlzIGluIGFcclxuICAgICAgICAgICAgICAgIC8vIGxlYXZpbmcgdHJhbnNpdGlvbi4gT25seSBoYXBwZW5zIHdoZW4gY29tYmluaW5nIHRyYW5zaXRpb24gK1xyXG4gICAgICAgICAgICAgICAgLy8ga2VlcC1hbGl2ZSArIEhPQ3MuICgjNDU5MClcclxuICAgICAgICAgICAgICAgIG9sZEVsbS5fbGVhdmVDYiA/IG51bGwgOiBwYXJlbnRFbG0sIG5vZGVPcHMubmV4dFNpYmxpbmcob2xkRWxtKSk7XHJcbiAgICAgICAgICAgICAgICAvLyB1cGRhdGUgcGFyZW50IHBsYWNlaG9sZGVyIG5vZGUgZWxlbWVudCwgcmVjdXJzaXZlbHlcclxuICAgICAgICAgICAgICAgIGlmIChpc0RlZih2bm9kZS5wYXJlbnQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFuY2VzdG9yID0gdm5vZGUucGFyZW50O1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBwYXRjaGFibGUgPSBpc1BhdGNoYWJsZSh2bm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGFuY2VzdG9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGlfOCA9IDA7IGlfOCA8IGNicy5kZXN0cm95Lmxlbmd0aDsgKytpXzgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNicy5kZXN0cm95W2lfOF0oYW5jZXN0b3IpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFuY2VzdG9yLmVsbSA9IHZub2RlLmVsbTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhdGNoYWJsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaV85ID0gMDsgaV85IDwgY2JzLmNyZWF0ZS5sZW5ndGg7ICsraV85KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2JzLmNyZWF0ZVtpXzldKGVtcHR5Tm9kZSwgYW5jZXN0b3IpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gIzY1MTNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGludm9rZSBpbnNlcnQgaG9va3MgdGhhdCBtYXkgaGF2ZSBiZWVuIG1lcmdlZCBieSBjcmVhdGUgaG9va3MuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBlLmcuIGZvciBkaXJlY3RpdmVzIHRoYXQgdXNlcyB0aGUgXCJpbnNlcnRlZFwiIGhvb2suXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW5zZXJ0XzEgPSBhbmNlc3Rvci5kYXRhLmhvb2suaW5zZXJ0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluc2VydF8xLm1lcmdlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN0YXJ0IGF0IGluZGV4IDEgdG8gYXZvaWQgcmUtaW52b2tpbmcgY29tcG9uZW50IG1vdW50ZWQgaG9va1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGlfMTAgPSAxOyBpXzEwIDwgaW5zZXJ0XzEuZm5zLmxlbmd0aDsgaV8xMCsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydF8xLmZuc1tpXzEwXSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyUmVmKGFuY2VzdG9yKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhbmNlc3RvciA9IGFuY2VzdG9yLnBhcmVudDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvLyBkZXN0cm95IG9sZCBub2RlXHJcbiAgICAgICAgICAgICAgICBpZiAoaXNEZWYocGFyZW50RWxtKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZVZub2Rlcyhbb2xkVm5vZGVdLCAwLCAwKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlzRGVmKG9sZFZub2RlLnRhZykpIHtcclxuICAgICAgICAgICAgICAgICAgICBpbnZva2VEZXN0cm95SG9vayhvbGRWbm9kZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaW52b2tlSW5zZXJ0SG9vayh2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBpc0luaXRpYWxQYXRjaCk7XHJcbiAgICAgICAgcmV0dXJuIHZub2RlLmVsbTtcclxuICAgIH07XHJcbn1cblxudmFyIGRpcmVjdGl2ZXMkMSA9IHtcclxuICAgIGNyZWF0ZTogdXBkYXRlRGlyZWN0aXZlcyxcclxuICAgIHVwZGF0ZTogdXBkYXRlRGlyZWN0aXZlcyxcclxuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uIHVuYmluZERpcmVjdGl2ZXModm5vZGUpIHtcclxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGVtcHR5Tm9kZSBpcyBub3QgVk5vZGVXaXRoRGF0YVxyXG4gICAgICAgIHVwZGF0ZURpcmVjdGl2ZXModm5vZGUsIGVtcHR5Tm9kZSk7XHJcbiAgICB9XHJcbn07XHJcbmZ1bmN0aW9uIHVwZGF0ZURpcmVjdGl2ZXMob2xkVm5vZGUsIHZub2RlKSB7XHJcbiAgICBpZiAob2xkVm5vZGUuZGF0YS5kaXJlY3RpdmVzIHx8IHZub2RlLmRhdGEuZGlyZWN0aXZlcykge1xyXG4gICAgICAgIF91cGRhdGUob2xkVm5vZGUsIHZub2RlKTtcclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBfdXBkYXRlKG9sZFZub2RlLCB2bm9kZSkge1xyXG4gICAgdmFyIGlzQ3JlYXRlID0gb2xkVm5vZGUgPT09IGVtcHR5Tm9kZTtcclxuICAgIHZhciBpc0Rlc3Ryb3kgPSB2bm9kZSA9PT0gZW1wdHlOb2RlO1xyXG4gICAgdmFyIG9sZERpcnMgPSBub3JtYWxpemVEaXJlY3RpdmVzKG9sZFZub2RlLmRhdGEuZGlyZWN0aXZlcywgb2xkVm5vZGUuY29udGV4dCk7XHJcbiAgICB2YXIgbmV3RGlycyA9IG5vcm1hbGl6ZURpcmVjdGl2ZXModm5vZGUuZGF0YS5kaXJlY3RpdmVzLCB2bm9kZS5jb250ZXh0KTtcclxuICAgIHZhciBkaXJzV2l0aEluc2VydCA9IFtdO1xyXG4gICAgdmFyIGRpcnNXaXRoUG9zdHBhdGNoID0gW107XHJcbiAgICB2YXIga2V5LCBvbGREaXIsIGRpcjtcclxuICAgIGZvciAoa2V5IGluIG5ld0RpcnMpIHtcclxuICAgICAgICBvbGREaXIgPSBvbGREaXJzW2tleV07XHJcbiAgICAgICAgZGlyID0gbmV3RGlyc1trZXldO1xyXG4gICAgICAgIGlmICghb2xkRGlyKSB7XHJcbiAgICAgICAgICAgIC8vIG5ldyBkaXJlY3RpdmUsIGJpbmRcclxuICAgICAgICAgICAgY2FsbEhvb2soZGlyLCAnYmluZCcsIHZub2RlLCBvbGRWbm9kZSk7XHJcbiAgICAgICAgICAgIGlmIChkaXIuZGVmICYmIGRpci5kZWYuaW5zZXJ0ZWQpIHtcclxuICAgICAgICAgICAgICAgIGRpcnNXaXRoSW5zZXJ0LnB1c2goZGlyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy8gZXhpc3RpbmcgZGlyZWN0aXZlLCB1cGRhdGVcclxuICAgICAgICAgICAgZGlyLm9sZFZhbHVlID0gb2xkRGlyLnZhbHVlO1xyXG4gICAgICAgICAgICBkaXIub2xkQXJnID0gb2xkRGlyLmFyZztcclxuICAgICAgICAgICAgY2FsbEhvb2soZGlyLCAndXBkYXRlJywgdm5vZGUsIG9sZFZub2RlKTtcclxuICAgICAgICAgICAgaWYgKGRpci5kZWYgJiYgZGlyLmRlZi5jb21wb25lbnRVcGRhdGVkKSB7XHJcbiAgICAgICAgICAgICAgICBkaXJzV2l0aFBvc3RwYXRjaC5wdXNoKGRpcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoZGlyc1dpdGhJbnNlcnQubGVuZ3RoKSB7XHJcbiAgICAgICAgdmFyIGNhbGxJbnNlcnQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGlyc1dpdGhJbnNlcnQubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGNhbGxIb29rKGRpcnNXaXRoSW5zZXJ0W2ldLCAnaW5zZXJ0ZWQnLCB2bm9kZSwgb2xkVm5vZGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAoaXNDcmVhdGUpIHtcclxuICAgICAgICAgICAgbWVyZ2VWTm9kZUhvb2sodm5vZGUsICdpbnNlcnQnLCBjYWxsSW5zZXJ0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNhbGxJbnNlcnQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoZGlyc1dpdGhQb3N0cGF0Y2gubGVuZ3RoKSB7XHJcbiAgICAgICAgbWVyZ2VWTm9kZUhvb2sodm5vZGUsICdwb3N0cGF0Y2gnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGlyc1dpdGhQb3N0cGF0Y2gubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGNhbGxIb29rKGRpcnNXaXRoUG9zdHBhdGNoW2ldLCAnY29tcG9uZW50VXBkYXRlZCcsIHZub2RlLCBvbGRWbm9kZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIGlmICghaXNDcmVhdGUpIHtcclxuICAgICAgICBmb3IgKGtleSBpbiBvbGREaXJzKSB7XHJcbiAgICAgICAgICAgIGlmICghbmV3RGlyc1trZXldKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBubyBsb25nZXIgcHJlc2VudCwgdW5iaW5kXHJcbiAgICAgICAgICAgICAgICBjYWxsSG9vayhvbGREaXJzW2tleV0sICd1bmJpbmQnLCBvbGRWbm9kZSwgb2xkVm5vZGUsIGlzRGVzdHJveSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxudmFyIGVtcHR5TW9kaWZpZXJzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcclxuZnVuY3Rpb24gbm9ybWFsaXplRGlyZWN0aXZlcyhkaXJzLCB2bSkge1xyXG4gICAgdmFyIHJlcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XHJcbiAgICBpZiAoIWRpcnMpIHtcclxuICAgICAgICAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcclxuICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgfVxyXG4gICAgdmFyIGksIGRpcjtcclxuICAgIGZvciAoaSA9IDA7IGkgPCBkaXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgZGlyID0gZGlyc1tpXTtcclxuICAgICAgICBpZiAoIWRpci5tb2RpZmllcnMpIHtcclxuICAgICAgICAgICAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXHJcbiAgICAgICAgICAgIGRpci5tb2RpZmllcnMgPSBlbXB0eU1vZGlmaWVycztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVzW2dldFJhd0Rpck5hbWUoZGlyKV0gPSBkaXI7XHJcbiAgICAgICAgaWYgKHZtLl9zZXR1cFN0YXRlICYmIHZtLl9zZXR1cFN0YXRlLl9fc2ZjKSB7XHJcbiAgICAgICAgICAgIHZhciBzZXR1cERlZiA9IGRpci5kZWYgfHwgcmVzb2x2ZUFzc2V0KHZtLCAnX3NldHVwU3RhdGUnLCAndi0nICsgZGlyLm5hbWUpO1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHNldHVwRGVmID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICBkaXIuZGVmID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIGJpbmQ6IHNldHVwRGVmLFxyXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZTogc2V0dXBEZWYsXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZGlyLmRlZiA9IHNldHVwRGVmO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRpci5kZWYgPSBkaXIuZGVmIHx8IHJlc29sdmVBc3NldCh2bS4kb3B0aW9ucywgJ2RpcmVjdGl2ZXMnLCBkaXIubmFtZSwgdHJ1ZSk7XHJcbiAgICB9XHJcbiAgICAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcclxuICAgIHJldHVybiByZXM7XHJcbn1cclxuZnVuY3Rpb24gZ2V0UmF3RGlyTmFtZShkaXIpIHtcclxuICAgIHJldHVybiAoZGlyLnJhd05hbWUgfHwgXCJcIi5jb25jYXQoZGlyLm5hbWUsIFwiLlwiKS5jb25jYXQoT2JqZWN0LmtleXMoZGlyLm1vZGlmaWVycyB8fCB7fSkuam9pbignLicpKSk7XHJcbn1cclxuZnVuY3Rpb24gY2FsbEhvb2soZGlyLCBob29rLCB2bm9kZSwgb2xkVm5vZGUsIGlzRGVzdHJveSkge1xyXG4gICAgdmFyIGZuID0gZGlyLmRlZiAmJiBkaXIuZGVmW2hvb2tdO1xyXG4gICAgaWYgKGZuKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgZm4odm5vZGUuZWxtLCBkaXIsIHZub2RlLCBvbGRWbm9kZSwgaXNEZXN0cm95KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgaGFuZGxlRXJyb3IoZSwgdm5vZGUuY29udGV4dCwgXCJkaXJlY3RpdmUgXCIuY29uY2F0KGRpci5uYW1lLCBcIiBcIikuY29uY2F0KGhvb2ssIFwiIGhvb2tcIikpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxuXG52YXIgYmFzZU1vZHVsZXMgPSBbcmVmLCBkaXJlY3RpdmVzJDFdO1xuXG5mdW5jdGlvbiB1cGRhdGVBdHRycyhvbGRWbm9kZSwgdm5vZGUpIHtcclxuICAgIHZhciBvcHRzID0gdm5vZGUuY29tcG9uZW50T3B0aW9ucztcclxuICAgIGlmIChpc0RlZihvcHRzKSAmJiBvcHRzLkN0b3Iub3B0aW9ucy5pbmhlcml0QXR0cnMgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKGlzVW5kZWYob2xkVm5vZGUuZGF0YS5hdHRycykgJiYgaXNVbmRlZih2bm9kZS5kYXRhLmF0dHJzKSkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHZhciBrZXksIGN1ciwgb2xkO1xyXG4gICAgdmFyIGVsbSA9IHZub2RlLmVsbTtcclxuICAgIHZhciBvbGRBdHRycyA9IG9sZFZub2RlLmRhdGEuYXR0cnMgfHwge307XHJcbiAgICB2YXIgYXR0cnMgPSB2bm9kZS5kYXRhLmF0dHJzIHx8IHt9O1xyXG4gICAgLy8gY2xvbmUgb2JzZXJ2ZWQgb2JqZWN0cywgYXMgdGhlIHVzZXIgcHJvYmFibHkgd2FudHMgdG8gbXV0YXRlIGl0XHJcbiAgICBpZiAoaXNEZWYoYXR0cnMuX19vYl9fKSB8fCBpc1RydWUoYXR0cnMuX3ZfYXR0cl9wcm94eSkpIHtcclxuICAgICAgICBhdHRycyA9IHZub2RlLmRhdGEuYXR0cnMgPSBleHRlbmQoe30sIGF0dHJzKTtcclxuICAgIH1cclxuICAgIGZvciAoa2V5IGluIGF0dHJzKSB7XHJcbiAgICAgICAgY3VyID0gYXR0cnNba2V5XTtcclxuICAgICAgICBvbGQgPSBvbGRBdHRyc1trZXldO1xyXG4gICAgICAgIGlmIChvbGQgIT09IGN1cikge1xyXG4gICAgICAgICAgICBzZXRBdHRyKGVsbSwga2V5LCBjdXIsIHZub2RlLmRhdGEucHJlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyAjNDM5MTogaW4gSUU5LCBzZXR0aW5nIHR5cGUgY2FuIHJlc2V0IHZhbHVlIGZvciBpbnB1dFt0eXBlPXJhZGlvXVxyXG4gICAgLy8gIzY2NjY6IElFL0VkZ2UgZm9yY2VzIHByb2dyZXNzIHZhbHVlIGRvd24gdG8gMSBiZWZvcmUgc2V0dGluZyBhIG1heFxyXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXHJcbiAgICBpZiAoKGlzSUUgfHwgaXNFZGdlKSAmJiBhdHRycy52YWx1ZSAhPT0gb2xkQXR0cnMudmFsdWUpIHtcclxuICAgICAgICBzZXRBdHRyKGVsbSwgJ3ZhbHVlJywgYXR0cnMudmFsdWUpO1xyXG4gICAgfVxyXG4gICAgZm9yIChrZXkgaW4gb2xkQXR0cnMpIHtcclxuICAgICAgICBpZiAoaXNVbmRlZihhdHRyc1trZXldKSkge1xyXG4gICAgICAgICAgICBpZiAoaXNYbGluayhrZXkpKSB7XHJcbiAgICAgICAgICAgICAgICBlbG0ucmVtb3ZlQXR0cmlidXRlTlMoeGxpbmtOUywgZ2V0WGxpbmtQcm9wKGtleSkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKCFpc0VudW1lcmF0ZWRBdHRyKGtleSkpIHtcclxuICAgICAgICAgICAgICAgIGVsbS5yZW1vdmVBdHRyaWJ1dGUoa2V5KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBzZXRBdHRyKGVsLCBrZXksIHZhbHVlLCBpc0luUHJlKSB7XHJcbiAgICBpZiAoaXNJblByZSB8fCBlbC50YWdOYW1lLmluZGV4T2YoJy0nKSA+IC0xKSB7XHJcbiAgICAgICAgYmFzZVNldEF0dHIoZWwsIGtleSwgdmFsdWUpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoaXNCb29sZWFuQXR0cihrZXkpKSB7XHJcbiAgICAgICAgLy8gc2V0IGF0dHJpYnV0ZSBmb3IgYmxhbmsgdmFsdWVcclxuICAgICAgICAvLyBlLmcuIDxvcHRpb24gZGlzYWJsZWQ+U2VsZWN0IG9uZTwvb3B0aW9uPlxyXG4gICAgICAgIGlmIChpc0ZhbHN5QXR0clZhbHVlKHZhbHVlKSkge1xyXG4gICAgICAgICAgICBlbC5yZW1vdmVBdHRyaWJ1dGUoa2V5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIHRlY2huaWNhbGx5IGFsbG93ZnVsbHNjcmVlbiBpcyBhIGJvb2xlYW4gYXR0cmlidXRlIGZvciA8aWZyYW1lPixcclxuICAgICAgICAgICAgLy8gYnV0IEZsYXNoIGV4cGVjdHMgYSB2YWx1ZSBvZiBcInRydWVcIiB3aGVuIHVzZWQgb24gPGVtYmVkPiB0YWdcclxuICAgICAgICAgICAgdmFsdWUgPSBrZXkgPT09ICdhbGxvd2Z1bGxzY3JlZW4nICYmIGVsLnRhZ05hbWUgPT09ICdFTUJFRCcgPyAndHJ1ZScgOiBrZXk7XHJcbiAgICAgICAgICAgIGVsLnNldEF0dHJpYnV0ZShrZXksIHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChpc0VudW1lcmF0ZWRBdHRyKGtleSkpIHtcclxuICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoa2V5LCBjb252ZXJ0RW51bWVyYXRlZFZhbHVlKGtleSwgdmFsdWUpKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGlzWGxpbmsoa2V5KSkge1xyXG4gICAgICAgIGlmIChpc0ZhbHN5QXR0clZhbHVlKHZhbHVlKSkge1xyXG4gICAgICAgICAgICBlbC5yZW1vdmVBdHRyaWJ1dGVOUyh4bGlua05TLCBnZXRYbGlua1Byb3Aoa2V5KSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBlbC5zZXRBdHRyaWJ1dGVOUyh4bGlua05TLCBrZXksIHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBiYXNlU2V0QXR0cihlbCwga2V5LCB2YWx1ZSk7XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gYmFzZVNldEF0dHIoZWwsIGtleSwgdmFsdWUpIHtcclxuICAgIGlmIChpc0ZhbHN5QXR0clZhbHVlKHZhbHVlKSkge1xyXG4gICAgICAgIGVsLnJlbW92ZUF0dHJpYnV0ZShrZXkpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgLy8gIzcxMzg6IElFMTAgJiAxMSBmaXJlcyBpbnB1dCBldmVudCB3aGVuIHNldHRpbmcgcGxhY2Vob2xkZXIgb25cclxuICAgICAgICAvLyA8dGV4dGFyZWE+Li4uIGJsb2NrIHRoZSBmaXJzdCBpbnB1dCBldmVudCBhbmQgcmVtb3ZlIHRoZSBibG9ja2VyXHJcbiAgICAgICAgLy8gaW1tZWRpYXRlbHkuXHJcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXHJcbiAgICAgICAgaWYgKGlzSUUgJiZcclxuICAgICAgICAgICAgIWlzSUU5ICYmXHJcbiAgICAgICAgICAgIGVsLnRhZ05hbWUgPT09ICdURVhUQVJFQScgJiZcclxuICAgICAgICAgICAga2V5ID09PSAncGxhY2Vob2xkZXInICYmXHJcbiAgICAgICAgICAgIHZhbHVlICE9PSAnJyAmJlxyXG4gICAgICAgICAgICAhZWwuX19pZXBoKSB7XHJcbiAgICAgICAgICAgIHZhciBibG9ja2VyXzEgPSBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICAgICAgZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgICAgIGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2lucHV0JywgYmxvY2tlcl8xKTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCBibG9ja2VyXzEpO1xyXG4gICAgICAgICAgICAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcclxuICAgICAgICAgICAgZWwuX19pZXBoID0gdHJ1ZTsgLyogSUUgcGxhY2Vob2xkZXIgcGF0Y2hlZCAqL1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoa2V5LCB2YWx1ZSk7XHJcbiAgICB9XHJcbn1cclxudmFyIGF0dHJzID0ge1xyXG4gICAgY3JlYXRlOiB1cGRhdGVBdHRycyxcclxuICAgIHVwZGF0ZTogdXBkYXRlQXR0cnNcclxufTtcblxuZnVuY3Rpb24gdXBkYXRlQ2xhc3Mob2xkVm5vZGUsIHZub2RlKSB7XHJcbiAgICB2YXIgZWwgPSB2bm9kZS5lbG07XHJcbiAgICB2YXIgZGF0YSA9IHZub2RlLmRhdGE7XHJcbiAgICB2YXIgb2xkRGF0YSA9IG9sZFZub2RlLmRhdGE7XHJcbiAgICBpZiAoaXNVbmRlZihkYXRhLnN0YXRpY0NsYXNzKSAmJlxyXG4gICAgICAgIGlzVW5kZWYoZGF0YS5jbGFzcykgJiZcclxuICAgICAgICAoaXNVbmRlZihvbGREYXRhKSB8fFxyXG4gICAgICAgICAgICAoaXNVbmRlZihvbGREYXRhLnN0YXRpY0NsYXNzKSAmJiBpc1VuZGVmKG9sZERhdGEuY2xhc3MpKSkpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB2YXIgY2xzID0gZ2VuQ2xhc3NGb3JWbm9kZSh2bm9kZSk7XHJcbiAgICAvLyBoYW5kbGUgdHJhbnNpdGlvbiBjbGFzc2VzXHJcbiAgICB2YXIgdHJhbnNpdGlvbkNsYXNzID0gZWwuX3RyYW5zaXRpb25DbGFzc2VzO1xyXG4gICAgaWYgKGlzRGVmKHRyYW5zaXRpb25DbGFzcykpIHtcclxuICAgICAgICBjbHMgPSBjb25jYXQoY2xzLCBzdHJpbmdpZnlDbGFzcyh0cmFuc2l0aW9uQ2xhc3MpKTtcclxuICAgIH1cclxuICAgIC8vIHNldCB0aGUgY2xhc3NcclxuICAgIGlmIChjbHMgIT09IGVsLl9wcmV2Q2xhc3MpIHtcclxuICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgY2xzKTtcclxuICAgICAgICBlbC5fcHJldkNsYXNzID0gY2xzO1xyXG4gICAgfVxyXG59XHJcbnZhciBrbGFzcyQxID0ge1xyXG4gICAgY3JlYXRlOiB1cGRhdGVDbGFzcyxcclxuICAgIHVwZGF0ZTogdXBkYXRlQ2xhc3NcclxufTtcblxudmFyIHZhbGlkRGl2aXNpb25DaGFyUkUgPSAvW1xcdykuK1xcLV8kXFxdXS87XHJcbmZ1bmN0aW9uIHBhcnNlRmlsdGVycyhleHApIHtcclxuICAgIHZhciBpblNpbmdsZSA9IGZhbHNlO1xyXG4gICAgdmFyIGluRG91YmxlID0gZmFsc2U7XHJcbiAgICB2YXIgaW5UZW1wbGF0ZVN0cmluZyA9IGZhbHNlO1xyXG4gICAgdmFyIGluUmVnZXggPSBmYWxzZTtcclxuICAgIHZhciBjdXJseSA9IDA7XHJcbiAgICB2YXIgc3F1YXJlID0gMDtcclxuICAgIHZhciBwYXJlbiA9IDA7XHJcbiAgICB2YXIgbGFzdEZpbHRlckluZGV4ID0gMDtcclxuICAgIHZhciBjLCBwcmV2LCBpLCBleHByZXNzaW9uLCBmaWx0ZXJzO1xyXG4gICAgZm9yIChpID0gMDsgaSA8IGV4cC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHByZXYgPSBjO1xyXG4gICAgICAgIGMgPSBleHAuY2hhckNvZGVBdChpKTtcclxuICAgICAgICBpZiAoaW5TaW5nbGUpIHtcclxuICAgICAgICAgICAgaWYgKGMgPT09IDB4MjcgJiYgcHJldiAhPT0gMHg1YylcclxuICAgICAgICAgICAgICAgIGluU2luZ2xlID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGluRG91YmxlKSB7XHJcbiAgICAgICAgICAgIGlmIChjID09PSAweDIyICYmIHByZXYgIT09IDB4NWMpXHJcbiAgICAgICAgICAgICAgICBpbkRvdWJsZSA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChpblRlbXBsYXRlU3RyaW5nKSB7XHJcbiAgICAgICAgICAgIGlmIChjID09PSAweDYwICYmIHByZXYgIT09IDB4NWMpXHJcbiAgICAgICAgICAgICAgICBpblRlbXBsYXRlU3RyaW5nID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGluUmVnZXgpIHtcclxuICAgICAgICAgICAgaWYgKGMgPT09IDB4MmYgJiYgcHJldiAhPT0gMHg1YylcclxuICAgICAgICAgICAgICAgIGluUmVnZXggPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoYyA9PT0gMHg3YyAmJiAvLyBwaXBlXHJcbiAgICAgICAgICAgIGV4cC5jaGFyQ29kZUF0KGkgKyAxKSAhPT0gMHg3YyAmJlxyXG4gICAgICAgICAgICBleHAuY2hhckNvZGVBdChpIC0gMSkgIT09IDB4N2MgJiZcclxuICAgICAgICAgICAgIWN1cmx5ICYmXHJcbiAgICAgICAgICAgICFzcXVhcmUgJiZcclxuICAgICAgICAgICAgIXBhcmVuKSB7XHJcbiAgICAgICAgICAgIGlmIChleHByZXNzaW9uID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIC8vIGZpcnN0IGZpbHRlciwgZW5kIG9mIGV4cHJlc3Npb25cclxuICAgICAgICAgICAgICAgIGxhc3RGaWx0ZXJJbmRleCA9IGkgKyAxO1xyXG4gICAgICAgICAgICAgICAgZXhwcmVzc2lvbiA9IGV4cC5zbGljZSgwLCBpKS50cmltKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBwdXNoRmlsdGVyKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAoYykge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAweDIyOlxyXG4gICAgICAgICAgICAgICAgICAgIGluRG91YmxlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhazsgLy8gXCJcclxuICAgICAgICAgICAgICAgIGNhc2UgMHgyNzpcclxuICAgICAgICAgICAgICAgICAgICBpblNpbmdsZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7IC8vICdcclxuICAgICAgICAgICAgICAgIGNhc2UgMHg2MDpcclxuICAgICAgICAgICAgICAgICAgICBpblRlbXBsYXRlU3RyaW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhazsgLy8gYFxyXG4gICAgICAgICAgICAgICAgY2FzZSAweDI4OlxyXG4gICAgICAgICAgICAgICAgICAgIHBhcmVuKys7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7IC8vIChcclxuICAgICAgICAgICAgICAgIGNhc2UgMHgyOTpcclxuICAgICAgICAgICAgICAgICAgICBwYXJlbi0tO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrOyAvLyApXHJcbiAgICAgICAgICAgICAgICBjYXNlIDB4NWI6XHJcbiAgICAgICAgICAgICAgICAgICAgc3F1YXJlKys7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7IC8vIFtcclxuICAgICAgICAgICAgICAgIGNhc2UgMHg1ZDpcclxuICAgICAgICAgICAgICAgICAgICBzcXVhcmUtLTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhazsgLy8gXVxyXG4gICAgICAgICAgICAgICAgY2FzZSAweDdiOlxyXG4gICAgICAgICAgICAgICAgICAgIGN1cmx5Kys7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7IC8vIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgMHg3ZDpcclxuICAgICAgICAgICAgICAgICAgICBjdXJseS0tO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrOyAvLyB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGMgPT09IDB4MmYpIHtcclxuICAgICAgICAgICAgICAgIC8vIC9cclxuICAgICAgICAgICAgICAgIHZhciBqID0gaSAtIDE7XHJcbiAgICAgICAgICAgICAgICB2YXIgcCBcclxuICAgICAgICAgICAgICAgIC8vIGZpbmQgZmlyc3Qgbm9uLXdoaXRlc3BhY2UgcHJldiBjaGFyXHJcbiAgICAgICAgICAgICAgICA9IHZvaWQgMDtcclxuICAgICAgICAgICAgICAgIC8vIGZpbmQgZmlyc3Qgbm9uLXdoaXRlc3BhY2UgcHJldiBjaGFyXHJcbiAgICAgICAgICAgICAgICBmb3IgKDsgaiA+PSAwOyBqLS0pIHtcclxuICAgICAgICAgICAgICAgICAgICBwID0gZXhwLmNoYXJBdChqKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocCAhPT0gJyAnKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICghcCB8fCAhdmFsaWREaXZpc2lvbkNoYXJSRS50ZXN0KHApKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaW5SZWdleCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoZXhwcmVzc2lvbiA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgZXhwcmVzc2lvbiA9IGV4cC5zbGljZSgwLCBpKS50cmltKCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChsYXN0RmlsdGVySW5kZXggIT09IDApIHtcclxuICAgICAgICBwdXNoRmlsdGVyKCk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBwdXNoRmlsdGVyKCkge1xyXG4gICAgICAgIChmaWx0ZXJzIHx8IChmaWx0ZXJzID0gW10pKS5wdXNoKGV4cC5zbGljZShsYXN0RmlsdGVySW5kZXgsIGkpLnRyaW0oKSk7XHJcbiAgICAgICAgbGFzdEZpbHRlckluZGV4ID0gaSArIDE7XHJcbiAgICB9XHJcbiAgICBpZiAoZmlsdGVycykge1xyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBmaWx0ZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGV4cHJlc3Npb24gPSB3cmFwRmlsdGVyKGV4cHJlc3Npb24sIGZpbHRlcnNbaV0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBleHByZXNzaW9uO1xyXG59XHJcbmZ1bmN0aW9uIHdyYXBGaWx0ZXIoZXhwLCBmaWx0ZXIpIHtcclxuICAgIHZhciBpID0gZmlsdGVyLmluZGV4T2YoJygnKTtcclxuICAgIGlmIChpIDwgMCkge1xyXG4gICAgICAgIC8vIF9mOiByZXNvbHZlRmlsdGVyXHJcbiAgICAgICAgcmV0dXJuIFwiX2YoXFxcIlwiLmNvbmNhdChmaWx0ZXIsIFwiXFxcIikoXCIpLmNvbmNhdChleHAsIFwiKVwiKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHZhciBuYW1lXzEgPSBmaWx0ZXIuc2xpY2UoMCwgaSk7XHJcbiAgICAgICAgdmFyIGFyZ3MgPSBmaWx0ZXIuc2xpY2UoaSArIDEpO1xyXG4gICAgICAgIHJldHVybiBcIl9mKFxcXCJcIi5jb25jYXQobmFtZV8xLCBcIlxcXCIpKFwiKS5jb25jYXQoZXhwKS5jb25jYXQoYXJncyAhPT0gJyknID8gJywnICsgYXJncyA6IGFyZ3MpO1xyXG4gICAgfVxyXG59XG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXHJcbmZ1bmN0aW9uIGJhc2VXYXJuKG1zZywgcmFuZ2UpIHtcclxuICAgIGNvbnNvbGUuZXJyb3IoXCJbVnVlIGNvbXBpbGVyXTogXCIuY29uY2F0KG1zZykpO1xyXG59XHJcbi8qIGVzbGludC1lbmFibGUgbm8tdW51c2VkLXZhcnMgKi9cclxuZnVuY3Rpb24gcGx1Y2tNb2R1bGVGdW5jdGlvbihtb2R1bGVzLCBrZXkpIHtcclxuICAgIHJldHVybiBtb2R1bGVzID8gbW9kdWxlcy5tYXAoZnVuY3Rpb24gKG0pIHsgcmV0dXJuIG1ba2V5XTsgfSkuZmlsdGVyKGZ1bmN0aW9uIChfKSB7IHJldHVybiBfOyB9KSA6IFtdO1xyXG59XHJcbmZ1bmN0aW9uIGFkZFByb3AoZWwsIG5hbWUsIHZhbHVlLCByYW5nZSwgZHluYW1pYykge1xyXG4gICAgKGVsLnByb3BzIHx8IChlbC5wcm9wcyA9IFtdKSkucHVzaChyYW5nZVNldEl0ZW0oeyBuYW1lOiBuYW1lLCB2YWx1ZTogdmFsdWUsIGR5bmFtaWM6IGR5bmFtaWMgfSwgcmFuZ2UpKTtcclxuICAgIGVsLnBsYWluID0gZmFsc2U7XHJcbn1cclxuZnVuY3Rpb24gYWRkQXR0cihlbCwgbmFtZSwgdmFsdWUsIHJhbmdlLCBkeW5hbWljKSB7XHJcbiAgICB2YXIgYXR0cnMgPSBkeW5hbWljXHJcbiAgICAgICAgPyBlbC5keW5hbWljQXR0cnMgfHwgKGVsLmR5bmFtaWNBdHRycyA9IFtdKVxyXG4gICAgICAgIDogZWwuYXR0cnMgfHwgKGVsLmF0dHJzID0gW10pO1xyXG4gICAgYXR0cnMucHVzaChyYW5nZVNldEl0ZW0oeyBuYW1lOiBuYW1lLCB2YWx1ZTogdmFsdWUsIGR5bmFtaWM6IGR5bmFtaWMgfSwgcmFuZ2UpKTtcclxuICAgIGVsLnBsYWluID0gZmFsc2U7XHJcbn1cclxuLy8gYWRkIGEgcmF3IGF0dHIgKHVzZSB0aGlzIGluIHByZVRyYW5zZm9ybXMpXHJcbmZ1bmN0aW9uIGFkZFJhd0F0dHIoZWwsIG5hbWUsIHZhbHVlLCByYW5nZSkge1xyXG4gICAgZWwuYXR0cnNNYXBbbmFtZV0gPSB2YWx1ZTtcclxuICAgIGVsLmF0dHJzTGlzdC5wdXNoKHJhbmdlU2V0SXRlbSh7IG5hbWU6IG5hbWUsIHZhbHVlOiB2YWx1ZSB9LCByYW5nZSkpO1xyXG59XHJcbmZ1bmN0aW9uIGFkZERpcmVjdGl2ZShlbCwgbmFtZSwgcmF3TmFtZSwgdmFsdWUsIGFyZywgaXNEeW5hbWljQXJnLCBtb2RpZmllcnMsIHJhbmdlKSB7XHJcbiAgICAoZWwuZGlyZWN0aXZlcyB8fCAoZWwuZGlyZWN0aXZlcyA9IFtdKSkucHVzaChyYW5nZVNldEl0ZW0oe1xyXG4gICAgICAgIG5hbWU6IG5hbWUsXHJcbiAgICAgICAgcmF3TmFtZTogcmF3TmFtZSxcclxuICAgICAgICB2YWx1ZTogdmFsdWUsXHJcbiAgICAgICAgYXJnOiBhcmcsXHJcbiAgICAgICAgaXNEeW5hbWljQXJnOiBpc0R5bmFtaWNBcmcsXHJcbiAgICAgICAgbW9kaWZpZXJzOiBtb2RpZmllcnNcclxuICAgIH0sIHJhbmdlKSk7XHJcbiAgICBlbC5wbGFpbiA9IGZhbHNlO1xyXG59XHJcbmZ1bmN0aW9uIHByZXBlbmRNb2RpZmllck1hcmtlcihzeW1ib2wsIG5hbWUsIGR5bmFtaWMpIHtcclxuICAgIHJldHVybiBkeW5hbWljID8gXCJfcChcIi5jb25jYXQobmFtZSwgXCIsXFxcIlwiKS5jb25jYXQoc3ltYm9sLCBcIlxcXCIpXCIpIDogc3ltYm9sICsgbmFtZTsgLy8gbWFyayB0aGUgZXZlbnQgYXMgY2FwdHVyZWRcclxufVxyXG5mdW5jdGlvbiBhZGRIYW5kbGVyKGVsLCBuYW1lLCB2YWx1ZSwgbW9kaWZpZXJzLCBpbXBvcnRhbnQsIHdhcm4sIHJhbmdlLCBkeW5hbWljKSB7XHJcbiAgICBtb2RpZmllcnMgPSBtb2RpZmllcnMgfHwgZW1wdHlPYmplY3Q7XHJcbiAgICAvLyB3YXJuIHByZXZlbnQgYW5kIHBhc3NpdmUgbW9kaWZpZXJcclxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xyXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgd2FybiAmJiBtb2RpZmllcnMucHJldmVudCAmJiBtb2RpZmllcnMucGFzc2l2ZSkge1xyXG4gICAgICAgIHdhcm4oXCJwYXNzaXZlIGFuZCBwcmV2ZW50IGNhbid0IGJlIHVzZWQgdG9nZXRoZXIuIFwiICtcclxuICAgICAgICAgICAgXCJQYXNzaXZlIGhhbmRsZXIgY2FuJ3QgcHJldmVudCBkZWZhdWx0IGV2ZW50LlwiLCByYW5nZSk7XHJcbiAgICB9XHJcbiAgICAvLyBub3JtYWxpemUgY2xpY2sucmlnaHQgYW5kIGNsaWNrLm1pZGRsZSBzaW5jZSB0aGV5IGRvbid0IGFjdHVhbGx5IGZpcmVcclxuICAgIC8vIHRoaXMgaXMgdGVjaG5pY2FsbHkgYnJvd3Nlci1zcGVjaWZpYywgYnV0IGF0IGxlYXN0IGZvciBub3cgYnJvd3NlcnMgYXJlXHJcbiAgICAvLyB0aGUgb25seSB0YXJnZXQgZW52cyB0aGF0IGhhdmUgcmlnaHQvbWlkZGxlIGNsaWNrcy5cclxuICAgIGlmIChtb2RpZmllcnMucmlnaHQpIHtcclxuICAgICAgICBpZiAoZHluYW1pYykge1xyXG4gICAgICAgICAgICBuYW1lID0gXCIoXCIuY29uY2F0KG5hbWUsIFwiKT09PSdjbGljayc/J2NvbnRleHRtZW51JzooXCIpLmNvbmNhdChuYW1lLCBcIilcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKG5hbWUgPT09ICdjbGljaycpIHtcclxuICAgICAgICAgICAgbmFtZSA9ICdjb250ZXh0bWVudSc7XHJcbiAgICAgICAgICAgIGRlbGV0ZSBtb2RpZmllcnMucmlnaHQ7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAobW9kaWZpZXJzLm1pZGRsZSkge1xyXG4gICAgICAgIGlmIChkeW5hbWljKSB7XHJcbiAgICAgICAgICAgIG5hbWUgPSBcIihcIi5jb25jYXQobmFtZSwgXCIpPT09J2NsaWNrJz8nbW91c2V1cCc6KFwiKS5jb25jYXQobmFtZSwgXCIpXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChuYW1lID09PSAnY2xpY2snKSB7XHJcbiAgICAgICAgICAgIG5hbWUgPSAnbW91c2V1cCc7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gY2hlY2sgY2FwdHVyZSBtb2RpZmllclxyXG4gICAgaWYgKG1vZGlmaWVycy5jYXB0dXJlKSB7XHJcbiAgICAgICAgZGVsZXRlIG1vZGlmaWVycy5jYXB0dXJlO1xyXG4gICAgICAgIG5hbWUgPSBwcmVwZW5kTW9kaWZpZXJNYXJrZXIoJyEnLCBuYW1lLCBkeW5hbWljKTtcclxuICAgIH1cclxuICAgIGlmIChtb2RpZmllcnMub25jZSkge1xyXG4gICAgICAgIGRlbGV0ZSBtb2RpZmllcnMub25jZTtcclxuICAgICAgICBuYW1lID0gcHJlcGVuZE1vZGlmaWVyTWFya2VyKCd+JywgbmFtZSwgZHluYW1pYyk7XHJcbiAgICB9XHJcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cclxuICAgIGlmIChtb2RpZmllcnMucGFzc2l2ZSkge1xyXG4gICAgICAgIGRlbGV0ZSBtb2RpZmllcnMucGFzc2l2ZTtcclxuICAgICAgICBuYW1lID0gcHJlcGVuZE1vZGlmaWVyTWFya2VyKCcmJywgbmFtZSwgZHluYW1pYyk7XHJcbiAgICB9XHJcbiAgICB2YXIgZXZlbnRzO1xyXG4gICAgaWYgKG1vZGlmaWVycy5uYXRpdmUpIHtcclxuICAgICAgICBkZWxldGUgbW9kaWZpZXJzLm5hdGl2ZTtcclxuICAgICAgICBldmVudHMgPSBlbC5uYXRpdmVFdmVudHMgfHwgKGVsLm5hdGl2ZUV2ZW50cyA9IHt9KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGV2ZW50cyA9IGVsLmV2ZW50cyB8fCAoZWwuZXZlbnRzID0ge30pO1xyXG4gICAgfVxyXG4gICAgdmFyIG5ld0hhbmRsZXIgPSByYW5nZVNldEl0ZW0oeyB2YWx1ZTogdmFsdWUudHJpbSgpLCBkeW5hbWljOiBkeW5hbWljIH0sIHJhbmdlKTtcclxuICAgIGlmIChtb2RpZmllcnMgIT09IGVtcHR5T2JqZWN0KSB7XHJcbiAgICAgICAgbmV3SGFuZGxlci5tb2RpZmllcnMgPSBtb2RpZmllcnM7XHJcbiAgICB9XHJcbiAgICB2YXIgaGFuZGxlcnMgPSBldmVudHNbbmFtZV07XHJcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cclxuICAgIGlmIChBcnJheS5pc0FycmF5KGhhbmRsZXJzKSkge1xyXG4gICAgICAgIGltcG9ydGFudCA/IGhhbmRsZXJzLnVuc2hpZnQobmV3SGFuZGxlcikgOiBoYW5kbGVycy5wdXNoKG5ld0hhbmRsZXIpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoaGFuZGxlcnMpIHtcclxuICAgICAgICBldmVudHNbbmFtZV0gPSBpbXBvcnRhbnQgPyBbbmV3SGFuZGxlciwgaGFuZGxlcnNdIDogW2hhbmRsZXJzLCBuZXdIYW5kbGVyXTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGV2ZW50c1tuYW1lXSA9IG5ld0hhbmRsZXI7XHJcbiAgICB9XHJcbiAgICBlbC5wbGFpbiA9IGZhbHNlO1xyXG59XHJcbmZ1bmN0aW9uIGdldFJhd0JpbmRpbmdBdHRyKGVsLCBuYW1lKSB7XHJcbiAgICByZXR1cm4gKGVsLnJhd0F0dHJzTWFwWyc6JyArIG5hbWVdIHx8XHJcbiAgICAgICAgZWwucmF3QXR0cnNNYXBbJ3YtYmluZDonICsgbmFtZV0gfHxcclxuICAgICAgICBlbC5yYXdBdHRyc01hcFtuYW1lXSk7XHJcbn1cclxuZnVuY3Rpb24gZ2V0QmluZGluZ0F0dHIoZWwsIG5hbWUsIGdldFN0YXRpYykge1xyXG4gICAgdmFyIGR5bmFtaWNWYWx1ZSA9IGdldEFuZFJlbW92ZUF0dHIoZWwsICc6JyArIG5hbWUpIHx8IGdldEFuZFJlbW92ZUF0dHIoZWwsICd2LWJpbmQ6JyArIG5hbWUpO1xyXG4gICAgaWYgKGR5bmFtaWNWYWx1ZSAhPSBudWxsKSB7XHJcbiAgICAgICAgcmV0dXJuIHBhcnNlRmlsdGVycyhkeW5hbWljVmFsdWUpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoZ2V0U3RhdGljICE9PSBmYWxzZSkge1xyXG4gICAgICAgIHZhciBzdGF0aWNWYWx1ZSA9IGdldEFuZFJlbW92ZUF0dHIoZWwsIG5hbWUpO1xyXG4gICAgICAgIGlmIChzdGF0aWNWYWx1ZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShzdGF0aWNWYWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbi8vIG5vdGU6IHRoaXMgb25seSByZW1vdmVzIHRoZSBhdHRyIGZyb20gdGhlIEFycmF5IChhdHRyc0xpc3QpIHNvIHRoYXQgaXRcclxuLy8gZG9lc24ndCBnZXQgcHJvY2Vzc2VkIGJ5IHByb2Nlc3NBdHRycy5cclxuLy8gQnkgZGVmYXVsdCBpdCBkb2VzIE5PVCByZW1vdmUgaXQgZnJvbSB0aGUgbWFwIChhdHRyc01hcCkgYmVjYXVzZSB0aGUgbWFwIGlzXHJcbi8vIG5lZWRlZCBkdXJpbmcgY29kZWdlbi5cclxuZnVuY3Rpb24gZ2V0QW5kUmVtb3ZlQXR0cihlbCwgbmFtZSwgcmVtb3ZlRnJvbU1hcCkge1xyXG4gICAgdmFyIHZhbDtcclxuICAgIGlmICgodmFsID0gZWwuYXR0cnNNYXBbbmFtZV0pICE9IG51bGwpIHtcclxuICAgICAgICB2YXIgbGlzdCA9IGVsLmF0dHJzTGlzdDtcclxuICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGxpc3QubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChsaXN0W2ldLm5hbWUgPT09IG5hbWUpIHtcclxuICAgICAgICAgICAgICAgIGxpc3Quc3BsaWNlKGksIDEpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAocmVtb3ZlRnJvbU1hcCkge1xyXG4gICAgICAgIGRlbGV0ZSBlbC5hdHRyc01hcFtuYW1lXTtcclxuICAgIH1cclxuICAgIHJldHVybiB2YWw7XHJcbn1cclxuZnVuY3Rpb24gZ2V0QW5kUmVtb3ZlQXR0ckJ5UmVnZXgoZWwsIG5hbWUpIHtcclxuICAgIHZhciBsaXN0ID0gZWwuYXR0cnNMaXN0O1xyXG4gICAgZm9yICh2YXIgaSA9IDAsIGwgPSBsaXN0Lmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgIHZhciBhdHRyID0gbGlzdFtpXTtcclxuICAgICAgICBpZiAobmFtZS50ZXN0KGF0dHIubmFtZSkpIHtcclxuICAgICAgICAgICAgbGlzdC5zcGxpY2UoaSwgMSk7XHJcbiAgICAgICAgICAgIHJldHVybiBhdHRyO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiByYW5nZVNldEl0ZW0oaXRlbSwgcmFuZ2UpIHtcclxuICAgIGlmIChyYW5nZSkge1xyXG4gICAgICAgIGlmIChyYW5nZS5zdGFydCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGl0ZW0uc3RhcnQgPSByYW5nZS5zdGFydDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJhbmdlLmVuZCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGl0ZW0uZW5kID0gcmFuZ2UuZW5kO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBpdGVtO1xyXG59XG5cbi8qKlxyXG4gKiBDcm9zcy1wbGF0Zm9ybSBjb2RlIGdlbmVyYXRpb24gZm9yIGNvbXBvbmVudCB2LW1vZGVsXHJcbiAqL1xyXG5mdW5jdGlvbiBnZW5Db21wb25lbnRNb2RlbChlbCwgdmFsdWUsIG1vZGlmaWVycykge1xyXG4gICAgdmFyIF9hID0gbW9kaWZpZXJzIHx8IHt9LCBudW1iZXIgPSBfYS5udW1iZXIsIHRyaW0gPSBfYS50cmltO1xyXG4gICAgdmFyIGJhc2VWYWx1ZUV4cHJlc3Npb24gPSAnJCR2JztcclxuICAgIHZhciB2YWx1ZUV4cHJlc3Npb24gPSBiYXNlVmFsdWVFeHByZXNzaW9uO1xyXG4gICAgaWYgKHRyaW0pIHtcclxuICAgICAgICB2YWx1ZUV4cHJlc3Npb24gPVxyXG4gICAgICAgICAgICBcIih0eXBlb2YgXCIuY29uY2F0KGJhc2VWYWx1ZUV4cHJlc3Npb24sIFwiID09PSAnc3RyaW5nJ1wiKSArXHJcbiAgICAgICAgICAgICAgICBcIj8gXCIuY29uY2F0KGJhc2VWYWx1ZUV4cHJlc3Npb24sIFwiLnRyaW0oKVwiKSArXHJcbiAgICAgICAgICAgICAgICBcIjogXCIuY29uY2F0KGJhc2VWYWx1ZUV4cHJlc3Npb24sIFwiKVwiKTtcclxuICAgIH1cclxuICAgIGlmIChudW1iZXIpIHtcclxuICAgICAgICB2YWx1ZUV4cHJlc3Npb24gPSBcIl9uKFwiLmNvbmNhdCh2YWx1ZUV4cHJlc3Npb24sIFwiKVwiKTtcclxuICAgIH1cclxuICAgIHZhciBhc3NpZ25tZW50ID0gZ2VuQXNzaWdubWVudENvZGUodmFsdWUsIHZhbHVlRXhwcmVzc2lvbik7XHJcbiAgICBlbC5tb2RlbCA9IHtcclxuICAgICAgICB2YWx1ZTogXCIoXCIuY29uY2F0KHZhbHVlLCBcIilcIiksXHJcbiAgICAgICAgZXhwcmVzc2lvbjogSlNPTi5zdHJpbmdpZnkodmFsdWUpLFxyXG4gICAgICAgIGNhbGxiYWNrOiBcImZ1bmN0aW9uIChcIi5jb25jYXQoYmFzZVZhbHVlRXhwcmVzc2lvbiwgXCIpIHtcIikuY29uY2F0KGFzc2lnbm1lbnQsIFwifVwiKVxyXG4gICAgfTtcclxufVxyXG4vKipcclxuICogQ3Jvc3MtcGxhdGZvcm0gY29kZWdlbiBoZWxwZXIgZm9yIGdlbmVyYXRpbmcgdi1tb2RlbCB2YWx1ZSBhc3NpZ25tZW50IGNvZGUuXHJcbiAqL1xyXG5mdW5jdGlvbiBnZW5Bc3NpZ25tZW50Q29kZSh2YWx1ZSwgYXNzaWdubWVudCkge1xyXG4gICAgdmFyIHJlcyA9IHBhcnNlTW9kZWwodmFsdWUpO1xyXG4gICAgaWYgKHJlcy5rZXkgPT09IG51bGwpIHtcclxuICAgICAgICByZXR1cm4gXCJcIi5jb25jYXQodmFsdWUsIFwiPVwiKS5jb25jYXQoYXNzaWdubWVudCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICByZXR1cm4gXCIkc2V0KFwiLmNvbmNhdChyZXMuZXhwLCBcIiwgXCIpLmNvbmNhdChyZXMua2V5LCBcIiwgXCIpLmNvbmNhdChhc3NpZ25tZW50LCBcIilcIik7XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIFBhcnNlIGEgdi1tb2RlbCBleHByZXNzaW9uIGludG8gYSBiYXNlIHBhdGggYW5kIGEgZmluYWwga2V5IHNlZ21lbnQuXHJcbiAqIEhhbmRsZXMgYm90aCBkb3QtcGF0aCBhbmQgcG9zc2libGUgc3F1YXJlIGJyYWNrZXRzLlxyXG4gKlxyXG4gKiBQb3NzaWJsZSBjYXNlczpcclxuICpcclxuICogLSB0ZXN0XHJcbiAqIC0gdGVzdFtrZXldXHJcbiAqIC0gdGVzdFt0ZXN0MVtrZXldXVxyXG4gKiAtIHRlc3RbXCJhXCJdW2tleV1cclxuICogLSB4eHgudGVzdFthW2FdLnRlc3QxW2tleV1dXHJcbiAqIC0gdGVzdC54eHguYVtcImFzYVwiXVt0ZXN0MVtrZXldXVxyXG4gKlxyXG4gKi9cclxudmFyIGxlbiwgc3RyLCBjaHIsIGluZGV4LCBleHByZXNzaW9uUG9zLCBleHByZXNzaW9uRW5kUG9zO1xyXG5mdW5jdGlvbiBwYXJzZU1vZGVsKHZhbCkge1xyXG4gICAgLy8gRml4IGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWUvcHVsbC83NzMwXHJcbiAgICAvLyBhbGxvdyB2LW1vZGVsPVwib2JqLnZhbCBcIiAodHJhaWxpbmcgd2hpdGVzcGFjZSlcclxuICAgIHZhbCA9IHZhbC50cmltKCk7XHJcbiAgICBsZW4gPSB2YWwubGVuZ3RoO1xyXG4gICAgaWYgKHZhbC5pbmRleE9mKCdbJykgPCAwIHx8IHZhbC5sYXN0SW5kZXhPZignXScpIDwgbGVuIC0gMSkge1xyXG4gICAgICAgIGluZGV4ID0gdmFsLmxhc3RJbmRleE9mKCcuJyk7XHJcbiAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIGV4cDogdmFsLnNsaWNlKDAsIGluZGV4KSxcclxuICAgICAgICAgICAgICAgIGtleTogJ1wiJyArIHZhbC5zbGljZShpbmRleCArIDEpICsgJ1wiJ1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIGV4cDogdmFsLFxyXG4gICAgICAgICAgICAgICAga2V5OiBudWxsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgc3RyID0gdmFsO1xyXG4gICAgaW5kZXggPSBleHByZXNzaW9uUG9zID0gZXhwcmVzc2lvbkVuZFBvcyA9IDA7XHJcbiAgICB3aGlsZSAoIWVvZigpKSB7XHJcbiAgICAgICAgY2hyID0gbmV4dCgpO1xyXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xyXG4gICAgICAgIGlmIChpc1N0cmluZ1N0YXJ0KGNocikpIHtcclxuICAgICAgICAgICAgcGFyc2VTdHJpbmcoY2hyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoY2hyID09PSAweDViKSB7XHJcbiAgICAgICAgICAgIHBhcnNlQnJhY2tldChjaHIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgZXhwOiB2YWwuc2xpY2UoMCwgZXhwcmVzc2lvblBvcyksXHJcbiAgICAgICAga2V5OiB2YWwuc2xpY2UoZXhwcmVzc2lvblBvcyArIDEsIGV4cHJlc3Npb25FbmRQb3MpXHJcbiAgICB9O1xyXG59XHJcbmZ1bmN0aW9uIG5leHQoKSB7XHJcbiAgICByZXR1cm4gc3RyLmNoYXJDb2RlQXQoKytpbmRleCk7XHJcbn1cclxuZnVuY3Rpb24gZW9mKCkge1xyXG4gICAgcmV0dXJuIGluZGV4ID49IGxlbjtcclxufVxyXG5mdW5jdGlvbiBpc1N0cmluZ1N0YXJ0KGNocikge1xyXG4gICAgcmV0dXJuIGNociA9PT0gMHgyMiB8fCBjaHIgPT09IDB4Mjc7XHJcbn1cclxuZnVuY3Rpb24gcGFyc2VCcmFja2V0KGNocikge1xyXG4gICAgdmFyIGluQnJhY2tldCA9IDE7XHJcbiAgICBleHByZXNzaW9uUG9zID0gaW5kZXg7XHJcbiAgICB3aGlsZSAoIWVvZigpKSB7XHJcbiAgICAgICAgY2hyID0gbmV4dCgpO1xyXG4gICAgICAgIGlmIChpc1N0cmluZ1N0YXJ0KGNocikpIHtcclxuICAgICAgICAgICAgcGFyc2VTdHJpbmcoY2hyKTtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjaHIgPT09IDB4NWIpXHJcbiAgICAgICAgICAgIGluQnJhY2tldCsrO1xyXG4gICAgICAgIGlmIChjaHIgPT09IDB4NWQpXHJcbiAgICAgICAgICAgIGluQnJhY2tldC0tO1xyXG4gICAgICAgIGlmIChpbkJyYWNrZXQgPT09IDApIHtcclxuICAgICAgICAgICAgZXhwcmVzc2lvbkVuZFBvcyA9IGluZGV4O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gcGFyc2VTdHJpbmcoY2hyKSB7XHJcbiAgICB2YXIgc3RyaW5nUXVvdGUgPSBjaHI7XHJcbiAgICB3aGlsZSAoIWVvZigpKSB7XHJcbiAgICAgICAgY2hyID0gbmV4dCgpO1xyXG4gICAgICAgIGlmIChjaHIgPT09IHN0cmluZ1F1b3RlKSB7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxuXG52YXIgd2FybiQxO1xyXG4vLyBpbiBzb21lIGNhc2VzLCB0aGUgZXZlbnQgdXNlZCBoYXMgdG8gYmUgZGV0ZXJtaW5lZCBhdCBydW50aW1lXHJcbi8vIHNvIHdlIHVzZWQgc29tZSByZXNlcnZlZCB0b2tlbnMgZHVyaW5nIGNvbXBpbGUuXHJcbnZhciBSQU5HRV9UT0tFTiA9ICdfX3InO1xyXG52YXIgQ0hFQ0tCT1hfUkFESU9fVE9LRU4gPSAnX19jJztcclxuZnVuY3Rpb24gbW9kZWwkMShlbCwgZGlyLCBfd2Fybikge1xyXG4gICAgd2FybiQxID0gX3dhcm47XHJcbiAgICB2YXIgdmFsdWUgPSBkaXIudmFsdWU7XHJcbiAgICB2YXIgbW9kaWZpZXJzID0gZGlyLm1vZGlmaWVycztcclxuICAgIHZhciB0YWcgPSBlbC50YWc7XHJcbiAgICB2YXIgdHlwZSA9IGVsLmF0dHJzTWFwLnR5cGU7XHJcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xyXG4gICAgICAgIC8vIGlucHV0cyB3aXRoIHR5cGU9XCJmaWxlXCIgYXJlIHJlYWQgb25seSBhbmQgc2V0dGluZyB0aGUgaW5wdXQnc1xyXG4gICAgICAgIC8vIHZhbHVlIHdpbGwgdGhyb3cgYW4gZXJyb3IuXHJcbiAgICAgICAgaWYgKHRhZyA9PT0gJ2lucHV0JyAmJiB0eXBlID09PSAnZmlsZScpIHtcclxuICAgICAgICAgICAgd2FybiQxKFwiPFwiLmNvbmNhdChlbC50YWcsIFwiIHYtbW9kZWw9XFxcIlwiKS5jb25jYXQodmFsdWUsIFwiXFxcIiB0eXBlPVxcXCJmaWxlXFxcIj46XFxuXCIpICtcclxuICAgICAgICAgICAgICAgIFwiRmlsZSBpbnB1dHMgYXJlIHJlYWQgb25seS4gVXNlIGEgdi1vbjpjaGFuZ2UgbGlzdGVuZXIgaW5zdGVhZC5cIiwgZWwucmF3QXR0cnNNYXBbJ3YtbW9kZWwnXSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKGVsLmNvbXBvbmVudCkge1xyXG4gICAgICAgIGdlbkNvbXBvbmVudE1vZGVsKGVsLCB2YWx1ZSwgbW9kaWZpZXJzKTtcclxuICAgICAgICAvLyBjb21wb25lbnQgdi1tb2RlbCBkb2Vzbid0IG5lZWQgZXh0cmEgcnVudGltZVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRhZyA9PT0gJ3NlbGVjdCcpIHtcclxuICAgICAgICBnZW5TZWxlY3QoZWwsIHZhbHVlLCBtb2RpZmllcnMpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodGFnID09PSAnaW5wdXQnICYmIHR5cGUgPT09ICdjaGVja2JveCcpIHtcclxuICAgICAgICBnZW5DaGVja2JveE1vZGVsKGVsLCB2YWx1ZSwgbW9kaWZpZXJzKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRhZyA9PT0gJ2lucHV0JyAmJiB0eXBlID09PSAncmFkaW8nKSB7XHJcbiAgICAgICAgZ2VuUmFkaW9Nb2RlbChlbCwgdmFsdWUsIG1vZGlmaWVycyk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0YWcgPT09ICdpbnB1dCcgfHwgdGFnID09PSAndGV4dGFyZWEnKSB7XHJcbiAgICAgICAgZ2VuRGVmYXVsdE1vZGVsKGVsLCB2YWx1ZSwgbW9kaWZpZXJzKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKCFjb25maWcuaXNSZXNlcnZlZFRhZyh0YWcpKSB7XHJcbiAgICAgICAgZ2VuQ29tcG9uZW50TW9kZWwoZWwsIHZhbHVlLCBtb2RpZmllcnMpO1xyXG4gICAgICAgIC8vIGNvbXBvbmVudCB2LW1vZGVsIGRvZXNuJ3QgbmVlZCBleHRyYSBydW50aW1lXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xyXG4gICAgICAgIHdhcm4kMShcIjxcIi5jb25jYXQoZWwudGFnLCBcIiB2LW1vZGVsPVxcXCJcIikuY29uY2F0KHZhbHVlLCBcIlxcXCI+OiBcIikgK1xyXG4gICAgICAgICAgICBcInYtbW9kZWwgaXMgbm90IHN1cHBvcnRlZCBvbiB0aGlzIGVsZW1lbnQgdHlwZS4gXCIgK1xyXG4gICAgICAgICAgICBcIklmIHlvdSBhcmUgd29ya2luZyB3aXRoIGNvbnRlbnRlZGl0YWJsZSwgaXQncyByZWNvbW1lbmRlZCB0byBcIiArXHJcbiAgICAgICAgICAgICd3cmFwIGEgbGlicmFyeSBkZWRpY2F0ZWQgZm9yIHRoYXQgcHVycG9zZSBpbnNpZGUgYSBjdXN0b20gY29tcG9uZW50LicsIGVsLnJhd0F0dHJzTWFwWyd2LW1vZGVsJ10pO1xyXG4gICAgfVxyXG4gICAgLy8gZW5zdXJlIHJ1bnRpbWUgZGlyZWN0aXZlIG1ldGFkYXRhXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxufVxyXG5mdW5jdGlvbiBnZW5DaGVja2JveE1vZGVsKGVsLCB2YWx1ZSwgbW9kaWZpZXJzKSB7XHJcbiAgICB2YXIgbnVtYmVyID0gbW9kaWZpZXJzICYmIG1vZGlmaWVycy5udW1iZXI7XHJcbiAgICB2YXIgdmFsdWVCaW5kaW5nID0gZ2V0QmluZGluZ0F0dHIoZWwsICd2YWx1ZScpIHx8ICdudWxsJztcclxuICAgIHZhciB0cnVlVmFsdWVCaW5kaW5nID0gZ2V0QmluZGluZ0F0dHIoZWwsICd0cnVlLXZhbHVlJykgfHwgJ3RydWUnO1xyXG4gICAgdmFyIGZhbHNlVmFsdWVCaW5kaW5nID0gZ2V0QmluZGluZ0F0dHIoZWwsICdmYWxzZS12YWx1ZScpIHx8ICdmYWxzZSc7XHJcbiAgICBhZGRQcm9wKGVsLCAnY2hlY2tlZCcsIFwiQXJyYXkuaXNBcnJheShcIi5jb25jYXQodmFsdWUsIFwiKVwiKSArXHJcbiAgICAgICAgXCI/X2koXCIuY29uY2F0KHZhbHVlLCBcIixcIikuY29uY2F0KHZhbHVlQmluZGluZywgXCIpPi0xXCIpICtcclxuICAgICAgICAodHJ1ZVZhbHVlQmluZGluZyA9PT0gJ3RydWUnXHJcbiAgICAgICAgICAgID8gXCI6KFwiLmNvbmNhdCh2YWx1ZSwgXCIpXCIpXHJcbiAgICAgICAgICAgIDogXCI6X3EoXCIuY29uY2F0KHZhbHVlLCBcIixcIikuY29uY2F0KHRydWVWYWx1ZUJpbmRpbmcsIFwiKVwiKSkpO1xyXG4gICAgYWRkSGFuZGxlcihlbCwgJ2NoYW5nZScsIFwidmFyICQkYT1cIi5jb25jYXQodmFsdWUsIFwiLFwiKSArXHJcbiAgICAgICAgJyQkZWw9JGV2ZW50LnRhcmdldCwnICtcclxuICAgICAgICBcIiQkYz0kJGVsLmNoZWNrZWQ/KFwiLmNvbmNhdCh0cnVlVmFsdWVCaW5kaW5nLCBcIik6KFwiKS5jb25jYXQoZmFsc2VWYWx1ZUJpbmRpbmcsIFwiKTtcIikgK1xyXG4gICAgICAgICdpZihBcnJheS5pc0FycmF5KCQkYSkpeycgK1xyXG4gICAgICAgIFwidmFyICQkdj1cIi5jb25jYXQobnVtYmVyID8gJ19uKCcgKyB2YWx1ZUJpbmRpbmcgKyAnKScgOiB2YWx1ZUJpbmRpbmcsIFwiLFwiKSArXHJcbiAgICAgICAgJyQkaT1faSgkJGEsJCR2KTsnICtcclxuICAgICAgICBcImlmKCQkZWwuY2hlY2tlZCl7JCRpPDAmJihcIi5jb25jYXQoZ2VuQXNzaWdubWVudENvZGUodmFsdWUsICckJGEuY29uY2F0KFskJHZdKScpLCBcIil9XCIpICtcclxuICAgICAgICBcImVsc2V7JCRpPi0xJiYoXCIuY29uY2F0KGdlbkFzc2lnbm1lbnRDb2RlKHZhbHVlLCAnJCRhLnNsaWNlKDAsJCRpKS5jb25jYXQoJCRhLnNsaWNlKCQkaSsxKSknKSwgXCIpfVwiKSArXHJcbiAgICAgICAgXCJ9ZWxzZXtcIi5jb25jYXQoZ2VuQXNzaWdubWVudENvZGUodmFsdWUsICckJGMnKSwgXCJ9XCIpLCBudWxsLCB0cnVlKTtcclxufVxyXG5mdW5jdGlvbiBnZW5SYWRpb01vZGVsKGVsLCB2YWx1ZSwgbW9kaWZpZXJzKSB7XHJcbiAgICB2YXIgbnVtYmVyID0gbW9kaWZpZXJzICYmIG1vZGlmaWVycy5udW1iZXI7XHJcbiAgICB2YXIgdmFsdWVCaW5kaW5nID0gZ2V0QmluZGluZ0F0dHIoZWwsICd2YWx1ZScpIHx8ICdudWxsJztcclxuICAgIHZhbHVlQmluZGluZyA9IG51bWJlciA/IFwiX24oXCIuY29uY2F0KHZhbHVlQmluZGluZywgXCIpXCIpIDogdmFsdWVCaW5kaW5nO1xyXG4gICAgYWRkUHJvcChlbCwgJ2NoZWNrZWQnLCBcIl9xKFwiLmNvbmNhdCh2YWx1ZSwgXCIsXCIpLmNvbmNhdCh2YWx1ZUJpbmRpbmcsIFwiKVwiKSk7XHJcbiAgICBhZGRIYW5kbGVyKGVsLCAnY2hhbmdlJywgZ2VuQXNzaWdubWVudENvZGUodmFsdWUsIHZhbHVlQmluZGluZyksIG51bGwsIHRydWUpO1xyXG59XHJcbmZ1bmN0aW9uIGdlblNlbGVjdChlbCwgdmFsdWUsIG1vZGlmaWVycykge1xyXG4gICAgdmFyIG51bWJlciA9IG1vZGlmaWVycyAmJiBtb2RpZmllcnMubnVtYmVyO1xyXG4gICAgdmFyIHNlbGVjdGVkVmFsID0gXCJBcnJheS5wcm90b3R5cGUuZmlsdGVyXCIgK1xyXG4gICAgICAgIFwiLmNhbGwoJGV2ZW50LnRhcmdldC5vcHRpb25zLGZ1bmN0aW9uKG8pe3JldHVybiBvLnNlbGVjdGVkfSlcIiArXHJcbiAgICAgICAgXCIubWFwKGZ1bmN0aW9uKG8pe3ZhciB2YWwgPSBcXFwiX3ZhbHVlXFxcIiBpbiBvID8gby5fdmFsdWUgOiBvLnZhbHVlO1wiICtcclxuICAgICAgICBcInJldHVybiBcIi5jb25jYXQobnVtYmVyID8gJ19uKHZhbCknIDogJ3ZhbCcsIFwifSlcIik7XHJcbiAgICB2YXIgYXNzaWdubWVudCA9ICckZXZlbnQudGFyZ2V0Lm11bHRpcGxlID8gJCRzZWxlY3RlZFZhbCA6ICQkc2VsZWN0ZWRWYWxbMF0nO1xyXG4gICAgdmFyIGNvZGUgPSBcInZhciAkJHNlbGVjdGVkVmFsID0gXCIuY29uY2F0KHNlbGVjdGVkVmFsLCBcIjtcIik7XHJcbiAgICBjb2RlID0gXCJcIi5jb25jYXQoY29kZSwgXCIgXCIpLmNvbmNhdChnZW5Bc3NpZ25tZW50Q29kZSh2YWx1ZSwgYXNzaWdubWVudCkpO1xyXG4gICAgYWRkSGFuZGxlcihlbCwgJ2NoYW5nZScsIGNvZGUsIG51bGwsIHRydWUpO1xyXG59XHJcbmZ1bmN0aW9uIGdlbkRlZmF1bHRNb2RlbChlbCwgdmFsdWUsIG1vZGlmaWVycykge1xyXG4gICAgdmFyIHR5cGUgPSBlbC5hdHRyc01hcC50eXBlO1xyXG4gICAgLy8gd2FybiBpZiB2LWJpbmQ6dmFsdWUgY29uZmxpY3RzIHdpdGggdi1tb2RlbFxyXG4gICAgLy8gZXhjZXB0IGZvciBpbnB1dHMgd2l0aCB2LWJpbmQ6dHlwZVxyXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcclxuICAgICAgICB2YXIgdmFsdWVfMSA9IGVsLmF0dHJzTWFwWyd2LWJpbmQ6dmFsdWUnXSB8fCBlbC5hdHRyc01hcFsnOnZhbHVlJ107XHJcbiAgICAgICAgdmFyIHR5cGVCaW5kaW5nID0gZWwuYXR0cnNNYXBbJ3YtYmluZDp0eXBlJ10gfHwgZWwuYXR0cnNNYXBbJzp0eXBlJ107XHJcbiAgICAgICAgaWYgKHZhbHVlXzEgJiYgIXR5cGVCaW5kaW5nKSB7XHJcbiAgICAgICAgICAgIHZhciBiaW5kaW5nID0gZWwuYXR0cnNNYXBbJ3YtYmluZDp2YWx1ZSddID8gJ3YtYmluZDp2YWx1ZScgOiAnOnZhbHVlJztcclxuICAgICAgICAgICAgd2FybiQxKFwiXCIuY29uY2F0KGJpbmRpbmcsIFwiPVxcXCJcIikuY29uY2F0KHZhbHVlXzEsIFwiXFxcIiBjb25mbGljdHMgd2l0aCB2LW1vZGVsIG9uIHRoZSBzYW1lIGVsZW1lbnQgXCIpICtcclxuICAgICAgICAgICAgICAgICdiZWNhdXNlIHRoZSBsYXR0ZXIgYWxyZWFkeSBleHBhbmRzIHRvIGEgdmFsdWUgYmluZGluZyBpbnRlcm5hbGx5JywgZWwucmF3QXR0cnNNYXBbYmluZGluZ10pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHZhciBfYSA9IG1vZGlmaWVycyB8fCB7fSwgbGF6eSA9IF9hLmxhenksIG51bWJlciA9IF9hLm51bWJlciwgdHJpbSA9IF9hLnRyaW07XHJcbiAgICB2YXIgbmVlZENvbXBvc2l0aW9uR3VhcmQgPSAhbGF6eSAmJiB0eXBlICE9PSAncmFuZ2UnO1xyXG4gICAgdmFyIGV2ZW50ID0gbGF6eSA/ICdjaGFuZ2UnIDogdHlwZSA9PT0gJ3JhbmdlJyA/IFJBTkdFX1RPS0VOIDogJ2lucHV0JztcclxuICAgIHZhciB2YWx1ZUV4cHJlc3Npb24gPSAnJGV2ZW50LnRhcmdldC52YWx1ZSc7XHJcbiAgICBpZiAodHJpbSkge1xyXG4gICAgICAgIHZhbHVlRXhwcmVzc2lvbiA9IFwiJGV2ZW50LnRhcmdldC52YWx1ZS50cmltKClcIjtcclxuICAgIH1cclxuICAgIGlmIChudW1iZXIpIHtcclxuICAgICAgICB2YWx1ZUV4cHJlc3Npb24gPSBcIl9uKFwiLmNvbmNhdCh2YWx1ZUV4cHJlc3Npb24sIFwiKVwiKTtcclxuICAgIH1cclxuICAgIHZhciBjb2RlID0gZ2VuQXNzaWdubWVudENvZGUodmFsdWUsIHZhbHVlRXhwcmVzc2lvbik7XHJcbiAgICBpZiAobmVlZENvbXBvc2l0aW9uR3VhcmQpIHtcclxuICAgICAgICBjb2RlID0gXCJpZigkZXZlbnQudGFyZ2V0LmNvbXBvc2luZylyZXR1cm47XCIuY29uY2F0KGNvZGUpO1xyXG4gICAgfVxyXG4gICAgYWRkUHJvcChlbCwgJ3ZhbHVlJywgXCIoXCIuY29uY2F0KHZhbHVlLCBcIilcIikpO1xyXG4gICAgYWRkSGFuZGxlcihlbCwgZXZlbnQsIGNvZGUsIG51bGwsIHRydWUpO1xyXG4gICAgaWYgKHRyaW0gfHwgbnVtYmVyKSB7XHJcbiAgICAgICAgYWRkSGFuZGxlcihlbCwgJ2JsdXInLCAnJGZvcmNlVXBkYXRlKCknKTtcclxuICAgIH1cclxufVxuXG4vLyBub3JtYWxpemUgdi1tb2RlbCBldmVudCB0b2tlbnMgdGhhdCBjYW4gb25seSBiZSBkZXRlcm1pbmVkIGF0IHJ1bnRpbWUuXHJcbi8vIGl0J3MgaW1wb3J0YW50IHRvIHBsYWNlIHRoZSBldmVudCBhcyB0aGUgZmlyc3QgaW4gdGhlIGFycmF5IGJlY2F1c2VcclxuLy8gdGhlIHdob2xlIHBvaW50IGlzIGVuc3VyaW5nIHRoZSB2LW1vZGVsIGNhbGxiYWNrIGdldHMgY2FsbGVkIGJlZm9yZVxyXG4vLyB1c2VyLWF0dGFjaGVkIGhhbmRsZXJzLlxyXG5mdW5jdGlvbiBub3JtYWxpemVFdmVudHMob24pIHtcclxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xyXG4gICAgaWYgKGlzRGVmKG9uW1JBTkdFX1RPS0VOXSkpIHtcclxuICAgICAgICAvLyBJRSBpbnB1dFt0eXBlPXJhbmdlXSBvbmx5IHN1cHBvcnRzIGBjaGFuZ2VgIGV2ZW50XHJcbiAgICAgICAgdmFyIGV2ZW50XzEgPSBpc0lFID8gJ2NoYW5nZScgOiAnaW5wdXQnO1xyXG4gICAgICAgIG9uW2V2ZW50XzFdID0gW10uY29uY2F0KG9uW1JBTkdFX1RPS0VOXSwgb25bZXZlbnRfMV0gfHwgW10pO1xyXG4gICAgICAgIGRlbGV0ZSBvbltSQU5HRV9UT0tFTl07XHJcbiAgICB9XHJcbiAgICAvLyBUaGlzIHdhcyBvcmlnaW5hbGx5IGludGVuZGVkIHRvIGZpeCAjNDUyMSBidXQgbm8gbG9uZ2VyIG5lY2Vzc2FyeVxyXG4gICAgLy8gYWZ0ZXIgMi41LiBLZWVwaW5nIGl0IGZvciBiYWNrd2FyZHMgY29tcGF0IHdpdGggZ2VuZXJhdGVkIGNvZGUgZnJvbSA8IDIuNFxyXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXHJcbiAgICBpZiAoaXNEZWYob25bQ0hFQ0tCT1hfUkFESU9fVE9LRU5dKSkge1xyXG4gICAgICAgIG9uLmNoYW5nZSA9IFtdLmNvbmNhdChvbltDSEVDS0JPWF9SQURJT19UT0tFTl0sIG9uLmNoYW5nZSB8fCBbXSk7XHJcbiAgICAgICAgZGVsZXRlIG9uW0NIRUNLQk9YX1JBRElPX1RPS0VOXTtcclxuICAgIH1cclxufVxyXG52YXIgdGFyZ2V0O1xyXG5mdW5jdGlvbiBjcmVhdGVPbmNlSGFuZGxlcihldmVudCwgaGFuZGxlciwgY2FwdHVyZSkge1xyXG4gICAgdmFyIF90YXJnZXQgPSB0YXJnZXQ7IC8vIHNhdmUgY3VycmVudCB0YXJnZXQgZWxlbWVudCBpbiBjbG9zdXJlXHJcbiAgICByZXR1cm4gZnVuY3Rpb24gb25jZUhhbmRsZXIoKSB7XHJcbiAgICAgICAgdmFyIHJlcyA9IGhhbmRsZXIuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcclxuICAgICAgICBpZiAocmVzICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJlbW92ZShldmVudCwgb25jZUhhbmRsZXIsIGNhcHR1cmUsIF90YXJnZXQpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn1cclxuLy8gIzk0NDY6IEZpcmVmb3ggPD0gNTMgKGluIHBhcnRpY3VsYXIsIEVTUiA1MikgaGFzIGluY29ycmVjdCBFdmVudC50aW1lU3RhbXBcclxuLy8gaW1wbGVtZW50YXRpb24gYW5kIGRvZXMgbm90IGZpcmUgbWljcm90YXNrcyBpbiBiZXR3ZWVuIGV2ZW50IHByb3BhZ2F0aW9uLCBzb1xyXG4vLyBzYWZlIHRvIGV4Y2x1ZGUuXHJcbnZhciB1c2VNaWNyb3Rhc2tGaXggPSBpc1VzaW5nTWljcm9UYXNrICYmICEoaXNGRiAmJiBOdW1iZXIoaXNGRlsxXSkgPD0gNTMpO1xyXG5mdW5jdGlvbiBhZGQobmFtZSwgaGFuZGxlciwgY2FwdHVyZSwgcGFzc2l2ZSkge1xyXG4gICAgLy8gYXN5bmMgZWRnZSBjYXNlICM2NTY2OiBpbm5lciBjbGljayBldmVudCB0cmlnZ2VycyBwYXRjaCwgZXZlbnQgaGFuZGxlclxyXG4gICAgLy8gYXR0YWNoZWQgdG8gb3V0ZXIgZWxlbWVudCBkdXJpbmcgcGF0Y2gsIGFuZCB0cmlnZ2VyZWQgYWdhaW4uIFRoaXNcclxuICAgIC8vIGhhcHBlbnMgYmVjYXVzZSBicm93c2VycyBmaXJlIG1pY3JvdGFzayB0aWNrcyBiZXR3ZWVuIGV2ZW50IHByb3BhZ2F0aW9uLlxyXG4gICAgLy8gdGhlIHNvbHV0aW9uIGlzIHNpbXBsZTogd2Ugc2F2ZSB0aGUgdGltZXN0YW1wIHdoZW4gYSBoYW5kbGVyIGlzIGF0dGFjaGVkLFxyXG4gICAgLy8gYW5kIHRoZSBoYW5kbGVyIHdvdWxkIG9ubHkgZmlyZSBpZiB0aGUgZXZlbnQgcGFzc2VkIHRvIGl0IHdhcyBmaXJlZFxyXG4gICAgLy8gQUZURVIgaXQgd2FzIGF0dGFjaGVkLlxyXG4gICAgaWYgKHVzZU1pY3JvdGFza0ZpeCkge1xyXG4gICAgICAgIHZhciBhdHRhY2hlZFRpbWVzdGFtcF8xID0gY3VycmVudEZsdXNoVGltZXN0YW1wO1xyXG4gICAgICAgIHZhciBvcmlnaW5hbF8xID0gaGFuZGxlcjtcclxuICAgICAgICAvL0B0cy1leHBlY3QtZXJyb3JcclxuICAgICAgICBoYW5kbGVyID0gb3JpZ2luYWxfMS5fd3JhcHBlciA9IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgLy8gbm8gYnViYmxpbmcsIHNob3VsZCBhbHdheXMgZmlyZS5cclxuICAgICAgICAgICAgLy8gdGhpcyBpcyBqdXN0IGEgc2FmZXR5IG5ldCBpbiBjYXNlIGV2ZW50LnRpbWVTdGFtcCBpcyB1bnJlbGlhYmxlIGluXHJcbiAgICAgICAgICAgIC8vIGNlcnRhaW4gd2VpcmQgZW52aXJvbm1lbnRzLi4uXHJcbiAgICAgICAgICAgIGUudGFyZ2V0ID09PSBlLmN1cnJlbnRUYXJnZXQgfHxcclxuICAgICAgICAgICAgICAgIC8vIGV2ZW50IGlzIGZpcmVkIGFmdGVyIGhhbmRsZXIgYXR0YWNobWVudFxyXG4gICAgICAgICAgICAgICAgZS50aW1lU3RhbXAgPj0gYXR0YWNoZWRUaW1lc3RhbXBfMSB8fFxyXG4gICAgICAgICAgICAgICAgLy8gYmFpbCBmb3IgZW52aXJvbm1lbnRzIHRoYXQgaGF2ZSBidWdneSBldmVudC50aW1lU3RhbXAgaW1wbGVtZW50YXRpb25zXHJcbiAgICAgICAgICAgICAgICAvLyAjOTQ2MiBpT1MgOSBidWc6IGV2ZW50LnRpbWVTdGFtcCBpcyAwIGFmdGVyIGhpc3RvcnkucHVzaFN0YXRlXHJcbiAgICAgICAgICAgICAgICAvLyAjOTY4MSBRdFdlYkVuZ2luZSBldmVudC50aW1lU3RhbXAgaXMgbmVnYXRpdmUgdmFsdWVcclxuICAgICAgICAgICAgICAgIGUudGltZVN0YW1wIDw9IDAgfHxcclxuICAgICAgICAgICAgICAgIC8vICM5NDQ4IGJhaWwgaWYgZXZlbnQgaXMgZmlyZWQgaW4gYW5vdGhlciBkb2N1bWVudCBpbiBhIG11bHRpLXBhZ2VcclxuICAgICAgICAgICAgICAgIC8vIGVsZWN0cm9uL253LmpzIGFwcCwgc2luY2UgZXZlbnQudGltZVN0YW1wIHdpbGwgYmUgdXNpbmcgYSBkaWZmZXJlbnRcclxuICAgICAgICAgICAgICAgIC8vIHN0YXJ0aW5nIHJlZmVyZW5jZVxyXG4gICAgICAgICAgICAgICAgZS50YXJnZXQub3duZXJEb2N1bWVudCAhPT0gZG9jdW1lbnQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbF8xLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIobmFtZSwgaGFuZGxlciwgc3VwcG9ydHNQYXNzaXZlID8geyBjYXB0dXJlOiBjYXB0dXJlLCBwYXNzaXZlOiBwYXNzaXZlIH0gOiBjYXB0dXJlKTtcclxufVxyXG5mdW5jdGlvbiByZW1vdmUobmFtZSwgaGFuZGxlciwgY2FwdHVyZSwgX3RhcmdldCkge1xyXG4gICAgKF90YXJnZXQgfHwgdGFyZ2V0KS5yZW1vdmVFdmVudExpc3RlbmVyKG5hbWUsIFxyXG4gICAgLy9AdHMtZXhwZWN0LWVycm9yXHJcbiAgICBoYW5kbGVyLl93cmFwcGVyIHx8IGhhbmRsZXIsIGNhcHR1cmUpO1xyXG59XHJcbmZ1bmN0aW9uIHVwZGF0ZURPTUxpc3RlbmVycyhvbGRWbm9kZSwgdm5vZGUpIHtcclxuICAgIGlmIChpc1VuZGVmKG9sZFZub2RlLmRhdGEub24pICYmIGlzVW5kZWYodm5vZGUuZGF0YS5vbikpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB2YXIgb24gPSB2bm9kZS5kYXRhLm9uIHx8IHt9O1xyXG4gICAgdmFyIG9sZE9uID0gb2xkVm5vZGUuZGF0YS5vbiB8fCB7fTtcclxuICAgIC8vIHZub2RlIGlzIGVtcHR5IHdoZW4gcmVtb3ZpbmcgYWxsIGxpc3RlbmVycyxcclxuICAgIC8vIGFuZCB1c2Ugb2xkIHZub2RlIGRvbSBlbGVtZW50XHJcbiAgICB0YXJnZXQgPSB2bm9kZS5lbG0gfHwgb2xkVm5vZGUuZWxtO1xyXG4gICAgbm9ybWFsaXplRXZlbnRzKG9uKTtcclxuICAgIHVwZGF0ZUxpc3RlbmVycyhvbiwgb2xkT24sIGFkZCwgcmVtb3ZlLCBjcmVhdGVPbmNlSGFuZGxlciwgdm5vZGUuY29udGV4dCk7XHJcbiAgICB0YXJnZXQgPSB1bmRlZmluZWQ7XHJcbn1cclxudmFyIGV2ZW50cyA9IHtcclxuICAgIGNyZWF0ZTogdXBkYXRlRE9NTGlzdGVuZXJzLFxyXG4gICAgdXBkYXRlOiB1cGRhdGVET01MaXN0ZW5lcnMsXHJcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGVtcHR5Tm9kZSBoYXMgYWN0dWFsbHkgZGF0YVxyXG4gICAgZGVzdHJveTogZnVuY3Rpb24gKHZub2RlKSB7IHJldHVybiB1cGRhdGVET01MaXN0ZW5lcnModm5vZGUsIGVtcHR5Tm9kZSk7IH1cclxufTtcblxudmFyIHN2Z0NvbnRhaW5lcjtcclxuZnVuY3Rpb24gdXBkYXRlRE9NUHJvcHMob2xkVm5vZGUsIHZub2RlKSB7XHJcbiAgICBpZiAoaXNVbmRlZihvbGRWbm9kZS5kYXRhLmRvbVByb3BzKSAmJiBpc1VuZGVmKHZub2RlLmRhdGEuZG9tUHJvcHMpKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdmFyIGtleSwgY3VyO1xyXG4gICAgdmFyIGVsbSA9IHZub2RlLmVsbTtcclxuICAgIHZhciBvbGRQcm9wcyA9IG9sZFZub2RlLmRhdGEuZG9tUHJvcHMgfHwge307XHJcbiAgICB2YXIgcHJvcHMgPSB2bm9kZS5kYXRhLmRvbVByb3BzIHx8IHt9O1xyXG4gICAgLy8gY2xvbmUgb2JzZXJ2ZWQgb2JqZWN0cywgYXMgdGhlIHVzZXIgcHJvYmFibHkgd2FudHMgdG8gbXV0YXRlIGl0XHJcbiAgICBpZiAoaXNEZWYocHJvcHMuX19vYl9fKSB8fCBpc1RydWUocHJvcHMuX3ZfYXR0cl9wcm94eSkpIHtcclxuICAgICAgICBwcm9wcyA9IHZub2RlLmRhdGEuZG9tUHJvcHMgPSBleHRlbmQoe30sIHByb3BzKTtcclxuICAgIH1cclxuICAgIGZvciAoa2V5IGluIG9sZFByb3BzKSB7XHJcbiAgICAgICAgaWYgKCEoa2V5IGluIHByb3BzKSkge1xyXG4gICAgICAgICAgICBlbG1ba2V5XSA9ICcnO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZvciAoa2V5IGluIHByb3BzKSB7XHJcbiAgICAgICAgY3VyID0gcHJvcHNba2V5XTtcclxuICAgICAgICAvLyBpZ25vcmUgY2hpbGRyZW4gaWYgdGhlIG5vZGUgaGFzIHRleHRDb250ZW50IG9yIGlubmVySFRNTCxcclxuICAgICAgICAvLyBhcyB0aGVzZSB3aWxsIHRocm93IGF3YXkgZXhpc3RpbmcgRE9NIG5vZGVzIGFuZCBjYXVzZSByZW1vdmFsIGVycm9yc1xyXG4gICAgICAgIC8vIG9uIHN1YnNlcXVlbnQgcGF0Y2hlcyAoIzMzNjApXHJcbiAgICAgICAgaWYgKGtleSA9PT0gJ3RleHRDb250ZW50JyB8fCBrZXkgPT09ICdpbm5lckhUTUwnKSB7XHJcbiAgICAgICAgICAgIGlmICh2bm9kZS5jaGlsZHJlbilcclxuICAgICAgICAgICAgICAgIHZub2RlLmNoaWxkcmVuLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgICAgIGlmIChjdXIgPT09IG9sZFByb3BzW2tleV0pXHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgLy8gIzY2MDEgd29yayBhcm91bmQgQ2hyb21lIHZlcnNpb24gPD0gNTUgYnVnIHdoZXJlIHNpbmdsZSB0ZXh0Tm9kZVxyXG4gICAgICAgICAgICAvLyByZXBsYWNlZCBieSBpbm5lckhUTUwvdGV4dENvbnRlbnQgcmV0YWlucyBpdHMgcGFyZW50Tm9kZSBwcm9wZXJ0eVxyXG4gICAgICAgICAgICBpZiAoZWxtLmNoaWxkTm9kZXMubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgICBlbG0ucmVtb3ZlQ2hpbGQoZWxtLmNoaWxkTm9kZXNbMF0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChrZXkgPT09ICd2YWx1ZScgJiYgZWxtLnRhZ05hbWUgIT09ICdQUk9HUkVTUycpIHtcclxuICAgICAgICAgICAgLy8gc3RvcmUgdmFsdWUgYXMgX3ZhbHVlIGFzIHdlbGwgc2luY2VcclxuICAgICAgICAgICAgLy8gbm9uLXN0cmluZyB2YWx1ZXMgd2lsbCBiZSBzdHJpbmdpZmllZFxyXG4gICAgICAgICAgICBlbG0uX3ZhbHVlID0gY3VyO1xyXG4gICAgICAgICAgICAvLyBhdm9pZCByZXNldHRpbmcgY3Vyc29yIHBvc2l0aW9uIHdoZW4gdmFsdWUgaXMgdGhlIHNhbWVcclxuICAgICAgICAgICAgdmFyIHN0ckN1ciA9IGlzVW5kZWYoY3VyKSA/ICcnIDogU3RyaW5nKGN1cik7XHJcbiAgICAgICAgICAgIGlmIChzaG91bGRVcGRhdGVWYWx1ZShlbG0sIHN0ckN1cikpIHtcclxuICAgICAgICAgICAgICAgIGVsbS52YWx1ZSA9IHN0ckN1cjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChrZXkgPT09ICdpbm5lckhUTUwnICYmXHJcbiAgICAgICAgICAgIGlzU1ZHKGVsbS50YWdOYW1lKSAmJlxyXG4gICAgICAgICAgICBpc1VuZGVmKGVsbS5pbm5lckhUTUwpKSB7XHJcbiAgICAgICAgICAgIC8vIElFIGRvZXNuJ3Qgc3VwcG9ydCBpbm5lckhUTUwgZm9yIFNWRyBlbGVtZW50c1xyXG4gICAgICAgICAgICBzdmdDb250YWluZXIgPSBzdmdDb250YWluZXIgfHwgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICAgICAgICAgIHN2Z0NvbnRhaW5lci5pbm5lckhUTUwgPSBcIjxzdmc+XCIuY29uY2F0KGN1ciwgXCI8L3N2Zz5cIik7XHJcbiAgICAgICAgICAgIHZhciBzdmcgPSBzdmdDb250YWluZXIuZmlyc3RDaGlsZDtcclxuICAgICAgICAgICAgd2hpbGUgKGVsbS5maXJzdENoaWxkKSB7XHJcbiAgICAgICAgICAgICAgICBlbG0ucmVtb3ZlQ2hpbGQoZWxtLmZpcnN0Q2hpbGQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHdoaWxlIChzdmcuZmlyc3RDaGlsZCkge1xyXG4gICAgICAgICAgICAgICAgZWxtLmFwcGVuZENoaWxkKHN2Zy5maXJzdENoaWxkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChcclxuICAgICAgICAvLyBza2lwIHRoZSB1cGRhdGUgaWYgb2xkIGFuZCBuZXcgVkRPTSBzdGF0ZSBpcyB0aGUgc2FtZS5cclxuICAgICAgICAvLyBgdmFsdWVgIGlzIGhhbmRsZWQgc2VwYXJhdGVseSBiZWNhdXNlIHRoZSBET00gdmFsdWUgbWF5IGJlIHRlbXBvcmFyaWx5XHJcbiAgICAgICAgLy8gb3V0IG9mIHN5bmMgd2l0aCBWRE9NIHN0YXRlIGR1ZSB0byBmb2N1cywgY29tcG9zaXRpb24gYW5kIG1vZGlmaWVycy5cclxuICAgICAgICAvLyBUaGlzICAjNDUyMSBieSBza2lwcGluZyB0aGUgdW5uZWNlc3NhcnkgYGNoZWNrZWRgIHVwZGF0ZS5cclxuICAgICAgICBjdXIgIT09IG9sZFByb3BzW2tleV0pIHtcclxuICAgICAgICAgICAgLy8gc29tZSBwcm9wZXJ0eSB1cGRhdGVzIGNhbiB0aHJvd1xyXG4gICAgICAgICAgICAvLyBlLmcuIGB2YWx1ZWAgb24gPHByb2dyZXNzPiB3LyBub24tZmluaXRlIHZhbHVlXHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBlbG1ba2V5XSA9IGN1cjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZSkgeyB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIHNob3VsZFVwZGF0ZVZhbHVlKGVsbSwgY2hlY2tWYWwpIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAvL0B0cy1leHBlY3QtZXJyb3JcclxuICAgICFlbG0uY29tcG9zaW5nICYmXHJcbiAgICAgICAgKGVsbS50YWdOYW1lID09PSAnT1BUSU9OJyB8fFxyXG4gICAgICAgICAgICBpc05vdEluRm9jdXNBbmREaXJ0eShlbG0sIGNoZWNrVmFsKSB8fFxyXG4gICAgICAgICAgICBpc0RpcnR5V2l0aE1vZGlmaWVycyhlbG0sIGNoZWNrVmFsKSkpO1xyXG59XHJcbmZ1bmN0aW9uIGlzTm90SW5Gb2N1c0FuZERpcnR5KGVsbSwgY2hlY2tWYWwpIHtcclxuICAgIC8vIHJldHVybiB0cnVlIHdoZW4gdGV4dGJveCAoLm51bWJlciBhbmQgLnRyaW0pIGxvc2VzIGZvY3VzIGFuZCBpdHMgdmFsdWUgaXNcclxuICAgIC8vIG5vdCBlcXVhbCB0byB0aGUgdXBkYXRlZCB2YWx1ZVxyXG4gICAgdmFyIG5vdEluRm9jdXMgPSB0cnVlO1xyXG4gICAgLy8gIzYxNTdcclxuICAgIC8vIHdvcmsgYXJvdW5kIElFIGJ1ZyB3aGVuIGFjY2Vzc2luZyBkb2N1bWVudC5hY3RpdmVFbGVtZW50IGluIGFuIGlmcmFtZVxyXG4gICAgdHJ5IHtcclxuICAgICAgICBub3RJbkZvY3VzID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAhPT0gZWxtO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGUpIHsgfVxyXG4gICAgcmV0dXJuIG5vdEluRm9jdXMgJiYgZWxtLnZhbHVlICE9PSBjaGVja1ZhbDtcclxufVxyXG5mdW5jdGlvbiBpc0RpcnR5V2l0aE1vZGlmaWVycyhlbG0sIG5ld1ZhbCkge1xyXG4gICAgdmFyIHZhbHVlID0gZWxtLnZhbHVlO1xyXG4gICAgdmFyIG1vZGlmaWVycyA9IGVsbS5fdk1vZGlmaWVyczsgLy8gaW5qZWN0ZWQgYnkgdi1tb2RlbCBydW50aW1lXHJcbiAgICBpZiAoaXNEZWYobW9kaWZpZXJzKSkge1xyXG4gICAgICAgIGlmIChtb2RpZmllcnMubnVtYmVyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0b051bWJlcih2YWx1ZSkgIT09IHRvTnVtYmVyKG5ld1ZhbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChtb2RpZmllcnMudHJpbSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdmFsdWUudHJpbSgpICE9PSBuZXdWYWwudHJpbSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB2YWx1ZSAhPT0gbmV3VmFsO1xyXG59XHJcbnZhciBkb21Qcm9wcyA9IHtcclxuICAgIGNyZWF0ZTogdXBkYXRlRE9NUHJvcHMsXHJcbiAgICB1cGRhdGU6IHVwZGF0ZURPTVByb3BzXHJcbn07XG5cbnZhciBwYXJzZVN0eWxlVGV4dCA9IGNhY2hlZChmdW5jdGlvbiAoY3NzVGV4dCkge1xyXG4gICAgdmFyIHJlcyA9IHt9O1xyXG4gICAgdmFyIGxpc3REZWxpbWl0ZXIgPSAvOyg/IVteKF0qXFwpKS9nO1xyXG4gICAgdmFyIHByb3BlcnR5RGVsaW1pdGVyID0gLzooLispLztcclxuICAgIGNzc1RleHQuc3BsaXQobGlzdERlbGltaXRlcikuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkge1xyXG4gICAgICAgIGlmIChpdGVtKSB7XHJcbiAgICAgICAgICAgIHZhciB0bXAgPSBpdGVtLnNwbGl0KHByb3BlcnR5RGVsaW1pdGVyKTtcclxuICAgICAgICAgICAgdG1wLmxlbmd0aCA+IDEgJiYgKHJlc1t0bXBbMF0udHJpbSgpXSA9IHRtcFsxXS50cmltKCkpO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHJlcztcclxufSk7XHJcbi8vIG1lcmdlIHN0YXRpYyBhbmQgZHluYW1pYyBzdHlsZSBkYXRhIG9uIHRoZSBzYW1lIHZub2RlXHJcbmZ1bmN0aW9uIG5vcm1hbGl6ZVN0eWxlRGF0YShkYXRhKSB7XHJcbiAgICB2YXIgc3R5bGUgPSBub3JtYWxpemVTdHlsZUJpbmRpbmcoZGF0YS5zdHlsZSk7XHJcbiAgICAvLyBzdGF0aWMgc3R5bGUgaXMgcHJlLXByb2Nlc3NlZCBpbnRvIGFuIG9iamVjdCBkdXJpbmcgY29tcGlsYXRpb25cclxuICAgIC8vIGFuZCBpcyBhbHdheXMgYSBmcmVzaCBvYmplY3QsIHNvIGl0J3Mgc2FmZSB0byBtZXJnZSBpbnRvIGl0XHJcbiAgICByZXR1cm4gZGF0YS5zdGF0aWNTdHlsZSA/IGV4dGVuZChkYXRhLnN0YXRpY1N0eWxlLCBzdHlsZSkgOiBzdHlsZTtcclxufVxyXG4vLyBub3JtYWxpemUgcG9zc2libGUgYXJyYXkgLyBzdHJpbmcgdmFsdWVzIGludG8gT2JqZWN0XHJcbmZ1bmN0aW9uIG5vcm1hbGl6ZVN0eWxlQmluZGluZyhiaW5kaW5nU3R5bGUpIHtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KGJpbmRpbmdTdHlsZSkpIHtcclxuICAgICAgICByZXR1cm4gdG9PYmplY3QoYmluZGluZ1N0eWxlKTtcclxuICAgIH1cclxuICAgIGlmICh0eXBlb2YgYmluZGluZ1N0eWxlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIHJldHVybiBwYXJzZVN0eWxlVGV4dChiaW5kaW5nU3R5bGUpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGJpbmRpbmdTdHlsZTtcclxufVxyXG4vKipcclxuICogcGFyZW50IGNvbXBvbmVudCBzdHlsZSBzaG91bGQgYmUgYWZ0ZXIgY2hpbGQnc1xyXG4gKiBzbyB0aGF0IHBhcmVudCBjb21wb25lbnQncyBzdHlsZSBjb3VsZCBvdmVycmlkZSBpdFxyXG4gKi9cclxuZnVuY3Rpb24gZ2V0U3R5bGUodm5vZGUsIGNoZWNrQ2hpbGQpIHtcclxuICAgIHZhciByZXMgPSB7fTtcclxuICAgIHZhciBzdHlsZURhdGE7XHJcbiAgICBpZiAoY2hlY2tDaGlsZCkge1xyXG4gICAgICAgIHZhciBjaGlsZE5vZGUgPSB2bm9kZTtcclxuICAgICAgICB3aGlsZSAoY2hpbGROb2RlLmNvbXBvbmVudEluc3RhbmNlKSB7XHJcbiAgICAgICAgICAgIGNoaWxkTm9kZSA9IGNoaWxkTm9kZS5jb21wb25lbnRJbnN0YW5jZS5fdm5vZGU7XHJcbiAgICAgICAgICAgIGlmIChjaGlsZE5vZGUgJiZcclxuICAgICAgICAgICAgICAgIGNoaWxkTm9kZS5kYXRhICYmXHJcbiAgICAgICAgICAgICAgICAoc3R5bGVEYXRhID0gbm9ybWFsaXplU3R5bGVEYXRhKGNoaWxkTm9kZS5kYXRhKSkpIHtcclxuICAgICAgICAgICAgICAgIGV4dGVuZChyZXMsIHN0eWxlRGF0YSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoKHN0eWxlRGF0YSA9IG5vcm1hbGl6ZVN0eWxlRGF0YSh2bm9kZS5kYXRhKSkpIHtcclxuICAgICAgICBleHRlbmQocmVzLCBzdHlsZURhdGEpO1xyXG4gICAgfVxyXG4gICAgdmFyIHBhcmVudE5vZGUgPSB2bm9kZTtcclxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgcGFyZW50Tm9kZS5wYXJlbnQgbm90IFZOb2RlV2l0aERhdGFcclxuICAgIHdoaWxlICgocGFyZW50Tm9kZSA9IHBhcmVudE5vZGUucGFyZW50KSkge1xyXG4gICAgICAgIGlmIChwYXJlbnROb2RlLmRhdGEgJiYgKHN0eWxlRGF0YSA9IG5vcm1hbGl6ZVN0eWxlRGF0YShwYXJlbnROb2RlLmRhdGEpKSkge1xyXG4gICAgICAgICAgICBleHRlbmQocmVzLCBzdHlsZURhdGEpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiByZXM7XHJcbn1cblxudmFyIGNzc1ZhclJFID0gL14tLS87XHJcbnZhciBpbXBvcnRhbnRSRSA9IC9cXHMqIWltcG9ydGFudCQvO1xyXG52YXIgc2V0UHJvcCA9IGZ1bmN0aW9uIChlbCwgbmFtZSwgdmFsKSB7XHJcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cclxuICAgIGlmIChjc3NWYXJSRS50ZXN0KG5hbWUpKSB7XHJcbiAgICAgICAgZWwuc3R5bGUuc2V0UHJvcGVydHkobmFtZSwgdmFsKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGltcG9ydGFudFJFLnRlc3QodmFsKSkge1xyXG4gICAgICAgIGVsLnN0eWxlLnNldFByb3BlcnR5KGh5cGhlbmF0ZShuYW1lKSwgdmFsLnJlcGxhY2UoaW1wb3J0YW50UkUsICcnKSwgJ2ltcG9ydGFudCcpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdmFyIG5vcm1hbGl6ZWROYW1lID0gbm9ybWFsaXplKG5hbWUpO1xyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHtcclxuICAgICAgICAgICAgLy8gU3VwcG9ydCB2YWx1ZXMgYXJyYXkgY3JlYXRlZCBieSBhdXRvcHJlZml4ZXIsIGUuZy5cclxuICAgICAgICAgICAgLy8ge2Rpc3BsYXk6IFtcIi13ZWJraXQtYm94XCIsIFwiLW1zLWZsZXhib3hcIiwgXCJmbGV4XCJdfVxyXG4gICAgICAgICAgICAvLyBTZXQgdGhlbSBvbmUgYnkgb25lLCBhbmQgdGhlIGJyb3dzZXIgd2lsbCBvbmx5IHNldCB0aG9zZSBpdCBjYW4gcmVjb2duaXplXHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSB2YWwubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGVsLnN0eWxlW25vcm1hbGl6ZWROYW1lXSA9IHZhbFtpXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgZWwuc3R5bGVbbm9ybWFsaXplZE5hbWVdID0gdmFsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxudmFyIHZlbmRvck5hbWVzID0gWydXZWJraXQnLCAnTW96JywgJ21zJ107XHJcbnZhciBlbXB0eVN0eWxlO1xyXG52YXIgbm9ybWFsaXplID0gY2FjaGVkKGZ1bmN0aW9uIChwcm9wKSB7XHJcbiAgICBlbXB0eVN0eWxlID0gZW1wdHlTdHlsZSB8fCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKS5zdHlsZTtcclxuICAgIHByb3AgPSBjYW1lbGl6ZShwcm9wKTtcclxuICAgIGlmIChwcm9wICE9PSAnZmlsdGVyJyAmJiBwcm9wIGluIGVtcHR5U3R5bGUpIHtcclxuICAgICAgICByZXR1cm4gcHJvcDtcclxuICAgIH1cclxuICAgIHZhciBjYXBOYW1lID0gcHJvcC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHByb3Auc2xpY2UoMSk7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZlbmRvck5hbWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdmFyIG5hbWVfMSA9IHZlbmRvck5hbWVzW2ldICsgY2FwTmFtZTtcclxuICAgICAgICBpZiAobmFtZV8xIGluIGVtcHR5U3R5bGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5hbWVfMTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0pO1xyXG5mdW5jdGlvbiB1cGRhdGVTdHlsZShvbGRWbm9kZSwgdm5vZGUpIHtcclxuICAgIHZhciBkYXRhID0gdm5vZGUuZGF0YTtcclxuICAgIHZhciBvbGREYXRhID0gb2xkVm5vZGUuZGF0YTtcclxuICAgIGlmIChpc1VuZGVmKGRhdGEuc3RhdGljU3R5bGUpICYmXHJcbiAgICAgICAgaXNVbmRlZihkYXRhLnN0eWxlKSAmJlxyXG4gICAgICAgIGlzVW5kZWYob2xkRGF0YS5zdGF0aWNTdHlsZSkgJiZcclxuICAgICAgICBpc1VuZGVmKG9sZERhdGEuc3R5bGUpKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdmFyIGN1ciwgbmFtZTtcclxuICAgIHZhciBlbCA9IHZub2RlLmVsbTtcclxuICAgIHZhciBvbGRTdGF0aWNTdHlsZSA9IG9sZERhdGEuc3RhdGljU3R5bGU7XHJcbiAgICB2YXIgb2xkU3R5bGVCaW5kaW5nID0gb2xkRGF0YS5ub3JtYWxpemVkU3R5bGUgfHwgb2xkRGF0YS5zdHlsZSB8fCB7fTtcclxuICAgIC8vIGlmIHN0YXRpYyBzdHlsZSBleGlzdHMsIHN0eWxlYmluZGluZyBhbHJlYWR5IG1lcmdlZCBpbnRvIGl0IHdoZW4gZG9pbmcgbm9ybWFsaXplU3R5bGVEYXRhXHJcbiAgICB2YXIgb2xkU3R5bGUgPSBvbGRTdGF0aWNTdHlsZSB8fCBvbGRTdHlsZUJpbmRpbmc7XHJcbiAgICB2YXIgc3R5bGUgPSBub3JtYWxpemVTdHlsZUJpbmRpbmcodm5vZGUuZGF0YS5zdHlsZSkgfHwge307XHJcbiAgICAvLyBzdG9yZSBub3JtYWxpemVkIHN0eWxlIHVuZGVyIGEgZGlmZmVyZW50IGtleSBmb3IgbmV4dCBkaWZmXHJcbiAgICAvLyBtYWtlIHN1cmUgdG8gY2xvbmUgaXQgaWYgaXQncyByZWFjdGl2ZSwgc2luY2UgdGhlIHVzZXIgbGlrZWx5IHdhbnRzXHJcbiAgICAvLyB0byBtdXRhdGUgaXQuXHJcbiAgICB2bm9kZS5kYXRhLm5vcm1hbGl6ZWRTdHlsZSA9IGlzRGVmKHN0eWxlLl9fb2JfXykgPyBleHRlbmQoe30sIHN0eWxlKSA6IHN0eWxlO1xyXG4gICAgdmFyIG5ld1N0eWxlID0gZ2V0U3R5bGUodm5vZGUsIHRydWUpO1xyXG4gICAgZm9yIChuYW1lIGluIG9sZFN0eWxlKSB7XHJcbiAgICAgICAgaWYgKGlzVW5kZWYobmV3U3R5bGVbbmFtZV0pKSB7XHJcbiAgICAgICAgICAgIHNldFByb3AoZWwsIG5hbWUsICcnKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmb3IgKG5hbWUgaW4gbmV3U3R5bGUpIHtcclxuICAgICAgICBjdXIgPSBuZXdTdHlsZVtuYW1lXTtcclxuICAgICAgICBpZiAoY3VyICE9PSBvbGRTdHlsZVtuYW1lXSkge1xyXG4gICAgICAgICAgICAvLyBpZTkgc2V0dGluZyB0byBudWxsIGhhcyBubyBlZmZlY3QsIG11c3QgdXNlIGVtcHR5IHN0cmluZ1xyXG4gICAgICAgICAgICBzZXRQcm9wKGVsLCBuYW1lLCBjdXIgPT0gbnVsbCA/ICcnIDogY3VyKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxudmFyIHN0eWxlJDEgPSB7XHJcbiAgICBjcmVhdGU6IHVwZGF0ZVN0eWxlLFxyXG4gICAgdXBkYXRlOiB1cGRhdGVTdHlsZVxyXG59O1xuXG52YXIgd2hpdGVzcGFjZVJFJDEgPSAvXFxzKy87XHJcbi8qKlxyXG4gKiBBZGQgY2xhc3Mgd2l0aCBjb21wYXRpYmlsaXR5IGZvciBTVkcgc2luY2UgY2xhc3NMaXN0IGlzIG5vdCBzdXBwb3J0ZWQgb25cclxuICogU1ZHIGVsZW1lbnRzIGluIElFXHJcbiAqL1xyXG5mdW5jdGlvbiBhZGRDbGFzcyhlbCwgY2xzKSB7XHJcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cclxuICAgIGlmICghY2xzIHx8ICEoY2xzID0gY2xzLnRyaW0oKSkpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xyXG4gICAgaWYgKGVsLmNsYXNzTGlzdCkge1xyXG4gICAgICAgIGlmIChjbHMuaW5kZXhPZignICcpID4gLTEpIHtcclxuICAgICAgICAgICAgY2xzLnNwbGl0KHdoaXRlc3BhY2VSRSQxKS5mb3JFYWNoKGZ1bmN0aW9uIChjKSB7IHJldHVybiBlbC5jbGFzc0xpc3QuYWRkKGMpOyB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGVsLmNsYXNzTGlzdC5hZGQoY2xzKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICB2YXIgY3VyID0gXCIgXCIuY29uY2F0KGVsLmdldEF0dHJpYnV0ZSgnY2xhc3MnKSB8fCAnJywgXCIgXCIpO1xyXG4gICAgICAgIGlmIChjdXIuaW5kZXhPZignICcgKyBjbHMgKyAnICcpIDwgMCkge1xyXG4gICAgICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgKGN1ciArIGNscykudHJpbSgpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIFJlbW92ZSBjbGFzcyB3aXRoIGNvbXBhdGliaWxpdHkgZm9yIFNWRyBzaW5jZSBjbGFzc0xpc3QgaXMgbm90IHN1cHBvcnRlZCBvblxyXG4gKiBTVkcgZWxlbWVudHMgaW4gSUVcclxuICovXHJcbmZ1bmN0aW9uIHJlbW92ZUNsYXNzKGVsLCBjbHMpIHtcclxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xyXG4gICAgaWYgKCFjbHMgfHwgIShjbHMgPSBjbHMudHJpbSgpKSkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXHJcbiAgICBpZiAoZWwuY2xhc3NMaXN0KSB7XHJcbiAgICAgICAgaWYgKGNscy5pbmRleE9mKCcgJykgPiAtMSkge1xyXG4gICAgICAgICAgICBjbHMuc3BsaXQod2hpdGVzcGFjZVJFJDEpLmZvckVhY2goZnVuY3Rpb24gKGMpIHsgcmV0dXJuIGVsLmNsYXNzTGlzdC5yZW1vdmUoYyk7IH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgZWwuY2xhc3NMaXN0LnJlbW92ZShjbHMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWVsLmNsYXNzTGlzdC5sZW5ndGgpIHtcclxuICAgICAgICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKCdjbGFzcycpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHZhciBjdXIgPSBcIiBcIi5jb25jYXQoZWwuZ2V0QXR0cmlidXRlKCdjbGFzcycpIHx8ICcnLCBcIiBcIik7XHJcbiAgICAgICAgdmFyIHRhciA9ICcgJyArIGNscyArICcgJztcclxuICAgICAgICB3aGlsZSAoY3VyLmluZGV4T2YodGFyKSA+PSAwKSB7XHJcbiAgICAgICAgICAgIGN1ciA9IGN1ci5yZXBsYWNlKHRhciwgJyAnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY3VyID0gY3VyLnRyaW0oKTtcclxuICAgICAgICBpZiAoY3VyKSB7XHJcbiAgICAgICAgICAgIGVsLnNldEF0dHJpYnV0ZSgnY2xhc3MnLCBjdXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKCdjbGFzcycpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxuXG5mdW5jdGlvbiByZXNvbHZlVHJhbnNpdGlvbihkZWYpIHtcclxuICAgIGlmICghZGVmKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cclxuICAgIGlmICh0eXBlb2YgZGVmID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgIHZhciByZXMgPSB7fTtcclxuICAgICAgICBpZiAoZGVmLmNzcyAhPT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgZXh0ZW5kKHJlcywgYXV0b0Nzc1RyYW5zaXRpb24oZGVmLm5hbWUgfHwgJ3YnKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGV4dGVuZChyZXMsIGRlZik7XHJcbiAgICAgICAgcmV0dXJuIHJlcztcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHR5cGVvZiBkZWYgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgcmV0dXJuIGF1dG9Dc3NUcmFuc2l0aW9uKGRlZik7XHJcbiAgICB9XHJcbn1cclxudmFyIGF1dG9Dc3NUcmFuc2l0aW9uID0gY2FjaGVkKGZ1bmN0aW9uIChuYW1lKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIGVudGVyQ2xhc3M6IFwiXCIuY29uY2F0KG5hbWUsIFwiLWVudGVyXCIpLFxyXG4gICAgICAgIGVudGVyVG9DbGFzczogXCJcIi5jb25jYXQobmFtZSwgXCItZW50ZXItdG9cIiksXHJcbiAgICAgICAgZW50ZXJBY3RpdmVDbGFzczogXCJcIi5jb25jYXQobmFtZSwgXCItZW50ZXItYWN0aXZlXCIpLFxyXG4gICAgICAgIGxlYXZlQ2xhc3M6IFwiXCIuY29uY2F0KG5hbWUsIFwiLWxlYXZlXCIpLFxyXG4gICAgICAgIGxlYXZlVG9DbGFzczogXCJcIi5jb25jYXQobmFtZSwgXCItbGVhdmUtdG9cIiksXHJcbiAgICAgICAgbGVhdmVBY3RpdmVDbGFzczogXCJcIi5jb25jYXQobmFtZSwgXCItbGVhdmUtYWN0aXZlXCIpXHJcbiAgICB9O1xyXG59KTtcclxudmFyIGhhc1RyYW5zaXRpb24gPSBpbkJyb3dzZXIgJiYgIWlzSUU5O1xyXG52YXIgVFJBTlNJVElPTiA9ICd0cmFuc2l0aW9uJztcclxudmFyIEFOSU1BVElPTiA9ICdhbmltYXRpb24nO1xyXG4vLyBUcmFuc2l0aW9uIHByb3BlcnR5L2V2ZW50IHNuaWZmaW5nXHJcbnZhciB0cmFuc2l0aW9uUHJvcCA9ICd0cmFuc2l0aW9uJztcclxudmFyIHRyYW5zaXRpb25FbmRFdmVudCA9ICd0cmFuc2l0aW9uZW5kJztcclxudmFyIGFuaW1hdGlvblByb3AgPSAnYW5pbWF0aW9uJztcclxudmFyIGFuaW1hdGlvbkVuZEV2ZW50ID0gJ2FuaW1hdGlvbmVuZCc7XHJcbmlmIChoYXNUcmFuc2l0aW9uKSB7XHJcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cclxuICAgIGlmICh3aW5kb3cub250cmFuc2l0aW9uZW5kID09PSB1bmRlZmluZWQgJiZcclxuICAgICAgICB3aW5kb3cub253ZWJraXR0cmFuc2l0aW9uZW5kICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICB0cmFuc2l0aW9uUHJvcCA9ICdXZWJraXRUcmFuc2l0aW9uJztcclxuICAgICAgICB0cmFuc2l0aW9uRW5kRXZlbnQgPSAnd2Via2l0VHJhbnNpdGlvbkVuZCc7XHJcbiAgICB9XHJcbiAgICBpZiAod2luZG93Lm9uYW5pbWF0aW9uZW5kID09PSB1bmRlZmluZWQgJiZcclxuICAgICAgICB3aW5kb3cub253ZWJraXRhbmltYXRpb25lbmQgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGFuaW1hdGlvblByb3AgPSAnV2Via2l0QW5pbWF0aW9uJztcclxuICAgICAgICBhbmltYXRpb25FbmRFdmVudCA9ICd3ZWJraXRBbmltYXRpb25FbmQnO1xyXG4gICAgfVxyXG59XHJcbi8vIGJpbmRpbmcgdG8gd2luZG93IGlzIG5lY2Vzc2FyeSB0byBtYWtlIGhvdCByZWxvYWQgd29yayBpbiBJRSBpbiBzdHJpY3QgbW9kZVxyXG52YXIgcmFmID0gaW5Ccm93c2VyXHJcbiAgICA/IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWVcclxuICAgICAgICA/IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuYmluZCh3aW5kb3cpXHJcbiAgICAgICAgOiBzZXRUaW1lb3V0XHJcbiAgICA6IC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovIGZ1bmN0aW9uICgvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqLyBmbikgeyByZXR1cm4gZm4oKTsgfTtcclxuZnVuY3Rpb24gbmV4dEZyYW1lKGZuKSB7XHJcbiAgICByYWYoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcclxuICAgICAgICByYWYoZm4pO1xyXG4gICAgfSk7XHJcbn1cclxuZnVuY3Rpb24gYWRkVHJhbnNpdGlvbkNsYXNzKGVsLCBjbHMpIHtcclxuICAgIHZhciB0cmFuc2l0aW9uQ2xhc3NlcyA9IGVsLl90cmFuc2l0aW9uQ2xhc3NlcyB8fCAoZWwuX3RyYW5zaXRpb25DbGFzc2VzID0gW10pO1xyXG4gICAgaWYgKHRyYW5zaXRpb25DbGFzc2VzLmluZGV4T2YoY2xzKSA8IDApIHtcclxuICAgICAgICB0cmFuc2l0aW9uQ2xhc3Nlcy5wdXNoKGNscyk7XHJcbiAgICAgICAgYWRkQ2xhc3MoZWwsIGNscyk7XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gcmVtb3ZlVHJhbnNpdGlvbkNsYXNzKGVsLCBjbHMpIHtcclxuICAgIGlmIChlbC5fdHJhbnNpdGlvbkNsYXNzZXMpIHtcclxuICAgICAgICByZW1vdmUkMihlbC5fdHJhbnNpdGlvbkNsYXNzZXMsIGNscyk7XHJcbiAgICB9XHJcbiAgICByZW1vdmVDbGFzcyhlbCwgY2xzKTtcclxufVxyXG5mdW5jdGlvbiB3aGVuVHJhbnNpdGlvbkVuZHMoZWwsIGV4cGVjdGVkVHlwZSwgY2IpIHtcclxuICAgIHZhciBfYSA9IGdldFRyYW5zaXRpb25JbmZvKGVsLCBleHBlY3RlZFR5cGUpLCB0eXBlID0gX2EudHlwZSwgdGltZW91dCA9IF9hLnRpbWVvdXQsIHByb3BDb3VudCA9IF9hLnByb3BDb3VudDtcclxuICAgIGlmICghdHlwZSlcclxuICAgICAgICByZXR1cm4gY2IoKTtcclxuICAgIHZhciBldmVudCA9IHR5cGUgPT09IFRSQU5TSVRJT04gPyB0cmFuc2l0aW9uRW5kRXZlbnQgOiBhbmltYXRpb25FbmRFdmVudDtcclxuICAgIHZhciBlbmRlZCA9IDA7XHJcbiAgICB2YXIgZW5kID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnQsIG9uRW5kKTtcclxuICAgICAgICBjYigpO1xyXG4gICAgfTtcclxuICAgIHZhciBvbkVuZCA9IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgaWYgKGUudGFyZ2V0ID09PSBlbCkge1xyXG4gICAgICAgICAgICBpZiAoKytlbmRlZCA+PSBwcm9wQ291bnQpIHtcclxuICAgICAgICAgICAgICAgIGVuZCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmIChlbmRlZCA8IHByb3BDb3VudCkge1xyXG4gICAgICAgICAgICBlbmQoKTtcclxuICAgICAgICB9XHJcbiAgICB9LCB0aW1lb3V0ICsgMSk7XHJcbiAgICBlbC5hZGRFdmVudExpc3RlbmVyKGV2ZW50LCBvbkVuZCk7XHJcbn1cclxudmFyIHRyYW5zZm9ybVJFID0gL1xcYih0cmFuc2Zvcm18YWxsKSgsfCQpLztcclxuZnVuY3Rpb24gZ2V0VHJhbnNpdGlvbkluZm8oZWwsIGV4cGVjdGVkVHlwZSkge1xyXG4gICAgdmFyIHN0eWxlcyA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsKTtcclxuICAgIC8vIEpTRE9NIG1heSByZXR1cm4gdW5kZWZpbmVkIGZvciB0cmFuc2l0aW9uIHByb3BlcnRpZXNcclxuICAgIHZhciB0cmFuc2l0aW9uRGVsYXlzID0gKHN0eWxlc1t0cmFuc2l0aW9uUHJvcCArICdEZWxheSddIHx8ICcnKS5zcGxpdCgnLCAnKTtcclxuICAgIHZhciB0cmFuc2l0aW9uRHVyYXRpb25zID0gKHN0eWxlc1t0cmFuc2l0aW9uUHJvcCArICdEdXJhdGlvbiddIHx8ICcnKS5zcGxpdCgnLCAnKTtcclxuICAgIHZhciB0cmFuc2l0aW9uVGltZW91dCA9IGdldFRpbWVvdXQodHJhbnNpdGlvbkRlbGF5cywgdHJhbnNpdGlvbkR1cmF0aW9ucyk7XHJcbiAgICB2YXIgYW5pbWF0aW9uRGVsYXlzID0gKHN0eWxlc1thbmltYXRpb25Qcm9wICsgJ0RlbGF5J10gfHwgJycpLnNwbGl0KCcsICcpO1xyXG4gICAgdmFyIGFuaW1hdGlvbkR1cmF0aW9ucyA9IChzdHlsZXNbYW5pbWF0aW9uUHJvcCArICdEdXJhdGlvbiddIHx8ICcnKS5zcGxpdCgnLCAnKTtcclxuICAgIHZhciBhbmltYXRpb25UaW1lb3V0ID0gZ2V0VGltZW91dChhbmltYXRpb25EZWxheXMsIGFuaW1hdGlvbkR1cmF0aW9ucyk7XHJcbiAgICB2YXIgdHlwZTtcclxuICAgIHZhciB0aW1lb3V0ID0gMDtcclxuICAgIHZhciBwcm9wQ291bnQgPSAwO1xyXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXHJcbiAgICBpZiAoZXhwZWN0ZWRUeXBlID09PSBUUkFOU0lUSU9OKSB7XHJcbiAgICAgICAgaWYgKHRyYW5zaXRpb25UaW1lb3V0ID4gMCkge1xyXG4gICAgICAgICAgICB0eXBlID0gVFJBTlNJVElPTjtcclxuICAgICAgICAgICAgdGltZW91dCA9IHRyYW5zaXRpb25UaW1lb3V0O1xyXG4gICAgICAgICAgICBwcm9wQ291bnQgPSB0cmFuc2l0aW9uRHVyYXRpb25zLmxlbmd0aDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChleHBlY3RlZFR5cGUgPT09IEFOSU1BVElPTikge1xyXG4gICAgICAgIGlmIChhbmltYXRpb25UaW1lb3V0ID4gMCkge1xyXG4gICAgICAgICAgICB0eXBlID0gQU5JTUFUSU9OO1xyXG4gICAgICAgICAgICB0aW1lb3V0ID0gYW5pbWF0aW9uVGltZW91dDtcclxuICAgICAgICAgICAgcHJvcENvdW50ID0gYW5pbWF0aW9uRHVyYXRpb25zLmxlbmd0aDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0aW1lb3V0ID0gTWF0aC5tYXgodHJhbnNpdGlvblRpbWVvdXQsIGFuaW1hdGlvblRpbWVvdXQpO1xyXG4gICAgICAgIHR5cGUgPVxyXG4gICAgICAgICAgICB0aW1lb3V0ID4gMFxyXG4gICAgICAgICAgICAgICAgPyB0cmFuc2l0aW9uVGltZW91dCA+IGFuaW1hdGlvblRpbWVvdXRcclxuICAgICAgICAgICAgICAgICAgICA/IFRSQU5TSVRJT05cclxuICAgICAgICAgICAgICAgICAgICA6IEFOSU1BVElPTlxyXG4gICAgICAgICAgICAgICAgOiBudWxsO1xyXG4gICAgICAgIHByb3BDb3VudCA9IHR5cGVcclxuICAgICAgICAgICAgPyB0eXBlID09PSBUUkFOU0lUSU9OXHJcbiAgICAgICAgICAgICAgICA/IHRyYW5zaXRpb25EdXJhdGlvbnMubGVuZ3RoXHJcbiAgICAgICAgICAgICAgICA6IGFuaW1hdGlvbkR1cmF0aW9ucy5sZW5ndGhcclxuICAgICAgICAgICAgOiAwO1xyXG4gICAgfVxyXG4gICAgdmFyIGhhc1RyYW5zZm9ybSA9IHR5cGUgPT09IFRSQU5TSVRJT04gJiYgdHJhbnNmb3JtUkUudGVzdChzdHlsZXNbdHJhbnNpdGlvblByb3AgKyAnUHJvcGVydHknXSk7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHR5cGU6IHR5cGUsXHJcbiAgICAgICAgdGltZW91dDogdGltZW91dCxcclxuICAgICAgICBwcm9wQ291bnQ6IHByb3BDb3VudCxcclxuICAgICAgICBoYXNUcmFuc2Zvcm06IGhhc1RyYW5zZm9ybVxyXG4gICAgfTtcclxufVxyXG5mdW5jdGlvbiBnZXRUaW1lb3V0KGRlbGF5cywgZHVyYXRpb25zKSB7XHJcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xyXG4gICAgd2hpbGUgKGRlbGF5cy5sZW5ndGggPCBkdXJhdGlvbnMubGVuZ3RoKSB7XHJcbiAgICAgICAgZGVsYXlzID0gZGVsYXlzLmNvbmNhdChkZWxheXMpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIE1hdGgubWF4LmFwcGx5KG51bGwsIGR1cmF0aW9ucy5tYXAoZnVuY3Rpb24gKGQsIGkpIHtcclxuICAgICAgICByZXR1cm4gdG9NcyhkKSArIHRvTXMoZGVsYXlzW2ldKTtcclxuICAgIH0pKTtcclxufVxyXG4vLyBPbGQgdmVyc2lvbnMgb2YgQ2hyb21pdW0gKGJlbG93IDYxLjAuMzE2My4xMDApIGZvcm1hdHMgZmxvYXRpbmcgcG9pbnRlciBudW1iZXJzXHJcbi8vIGluIGEgbG9jYWxlLWRlcGVuZGVudCB3YXksIHVzaW5nIGEgY29tbWEgaW5zdGVhZCBvZiBhIGRvdC5cclxuLy8gSWYgY29tbWEgaXMgbm90IHJlcGxhY2VkIHdpdGggYSBkb3QsIHRoZSBpbnB1dCB3aWxsIGJlIHJvdW5kZWQgZG93biAoaS5lLiBhY3RpbmdcclxuLy8gYXMgYSBmbG9vciBmdW5jdGlvbikgY2F1c2luZyB1bmV4cGVjdGVkIGJlaGF2aW9yc1xyXG5mdW5jdGlvbiB0b01zKHMpIHtcclxuICAgIHJldHVybiBOdW1iZXIocy5zbGljZSgwLCAtMSkucmVwbGFjZSgnLCcsICcuJykpICogMTAwMDtcclxufVxuXG5mdW5jdGlvbiBlbnRlcih2bm9kZSwgdG9nZ2xlRGlzcGxheSkge1xyXG4gICAgdmFyIGVsID0gdm5vZGUuZWxtO1xyXG4gICAgLy8gY2FsbCBsZWF2ZSBjYWxsYmFjayBub3dcclxuICAgIGlmIChpc0RlZihlbC5fbGVhdmVDYikpIHtcclxuICAgICAgICBlbC5fbGVhdmVDYi5jYW5jZWxsZWQgPSB0cnVlO1xyXG4gICAgICAgIGVsLl9sZWF2ZUNiKCk7XHJcbiAgICB9XHJcbiAgICB2YXIgZGF0YSA9IHJlc29sdmVUcmFuc2l0aW9uKHZub2RlLmRhdGEudHJhbnNpdGlvbik7XHJcbiAgICBpZiAoaXNVbmRlZihkYXRhKSkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xyXG4gICAgaWYgKGlzRGVmKGVsLl9lbnRlckNiKSB8fCBlbC5ub2RlVHlwZSAhPT0gMSkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHZhciBjc3MgPSBkYXRhLmNzcywgdHlwZSA9IGRhdGEudHlwZSwgZW50ZXJDbGFzcyA9IGRhdGEuZW50ZXJDbGFzcywgZW50ZXJUb0NsYXNzID0gZGF0YS5lbnRlclRvQ2xhc3MsIGVudGVyQWN0aXZlQ2xhc3MgPSBkYXRhLmVudGVyQWN0aXZlQ2xhc3MsIGFwcGVhckNsYXNzID0gZGF0YS5hcHBlYXJDbGFzcywgYXBwZWFyVG9DbGFzcyA9IGRhdGEuYXBwZWFyVG9DbGFzcywgYXBwZWFyQWN0aXZlQ2xhc3MgPSBkYXRhLmFwcGVhckFjdGl2ZUNsYXNzLCBiZWZvcmVFbnRlciA9IGRhdGEuYmVmb3JlRW50ZXIsIGVudGVyID0gZGF0YS5lbnRlciwgYWZ0ZXJFbnRlciA9IGRhdGEuYWZ0ZXJFbnRlciwgZW50ZXJDYW5jZWxsZWQgPSBkYXRhLmVudGVyQ2FuY2VsbGVkLCBiZWZvcmVBcHBlYXIgPSBkYXRhLmJlZm9yZUFwcGVhciwgYXBwZWFyID0gZGF0YS5hcHBlYXIsIGFmdGVyQXBwZWFyID0gZGF0YS5hZnRlckFwcGVhciwgYXBwZWFyQ2FuY2VsbGVkID0gZGF0YS5hcHBlYXJDYW5jZWxsZWQsIGR1cmF0aW9uID0gZGF0YS5kdXJhdGlvbjtcclxuICAgIC8vIGFjdGl2ZUluc3RhbmNlIHdpbGwgYWx3YXlzIGJlIHRoZSA8dHJhbnNpdGlvbj4gY29tcG9uZW50IG1hbmFnaW5nIHRoaXNcclxuICAgIC8vIHRyYW5zaXRpb24uIE9uZSBlZGdlIGNhc2UgdG8gY2hlY2sgaXMgd2hlbiB0aGUgPHRyYW5zaXRpb24+IGlzIHBsYWNlZFxyXG4gICAgLy8gYXMgdGhlIHJvb3Qgbm9kZSBvZiBhIGNoaWxkIGNvbXBvbmVudC4gSW4gdGhhdCBjYXNlIHdlIG5lZWQgdG8gY2hlY2tcclxuICAgIC8vIDx0cmFuc2l0aW9uPidzIHBhcmVudCBmb3IgYXBwZWFyIGNoZWNrLlxyXG4gICAgdmFyIGNvbnRleHQgPSBhY3RpdmVJbnN0YW5jZTtcclxuICAgIHZhciB0cmFuc2l0aW9uTm9kZSA9IGFjdGl2ZUluc3RhbmNlLiR2bm9kZTtcclxuICAgIHdoaWxlICh0cmFuc2l0aW9uTm9kZSAmJiB0cmFuc2l0aW9uTm9kZS5wYXJlbnQpIHtcclxuICAgICAgICBjb250ZXh0ID0gdHJhbnNpdGlvbk5vZGUuY29udGV4dDtcclxuICAgICAgICB0cmFuc2l0aW9uTm9kZSA9IHRyYW5zaXRpb25Ob2RlLnBhcmVudDtcclxuICAgIH1cclxuICAgIHZhciBpc0FwcGVhciA9ICFjb250ZXh0Ll9pc01vdW50ZWQgfHwgIXZub2RlLmlzUm9vdEluc2VydDtcclxuICAgIGlmIChpc0FwcGVhciAmJiAhYXBwZWFyICYmIGFwcGVhciAhPT0gJycpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB2YXIgc3RhcnRDbGFzcyA9IGlzQXBwZWFyICYmIGFwcGVhckNsYXNzID8gYXBwZWFyQ2xhc3MgOiBlbnRlckNsYXNzO1xyXG4gICAgdmFyIGFjdGl2ZUNsYXNzID0gaXNBcHBlYXIgJiYgYXBwZWFyQWN0aXZlQ2xhc3MgPyBhcHBlYXJBY3RpdmVDbGFzcyA6IGVudGVyQWN0aXZlQ2xhc3M7XHJcbiAgICB2YXIgdG9DbGFzcyA9IGlzQXBwZWFyICYmIGFwcGVhclRvQ2xhc3MgPyBhcHBlYXJUb0NsYXNzIDogZW50ZXJUb0NsYXNzO1xyXG4gICAgdmFyIGJlZm9yZUVudGVySG9vayA9IGlzQXBwZWFyID8gYmVmb3JlQXBwZWFyIHx8IGJlZm9yZUVudGVyIDogYmVmb3JlRW50ZXI7XHJcbiAgICB2YXIgZW50ZXJIb29rID0gaXNBcHBlYXIgPyAoaXNGdW5jdGlvbihhcHBlYXIpID8gYXBwZWFyIDogZW50ZXIpIDogZW50ZXI7XHJcbiAgICB2YXIgYWZ0ZXJFbnRlckhvb2sgPSBpc0FwcGVhciA/IGFmdGVyQXBwZWFyIHx8IGFmdGVyRW50ZXIgOiBhZnRlckVudGVyO1xyXG4gICAgdmFyIGVudGVyQ2FuY2VsbGVkSG9vayA9IGlzQXBwZWFyXHJcbiAgICAgICAgPyBhcHBlYXJDYW5jZWxsZWQgfHwgZW50ZXJDYW5jZWxsZWRcclxuICAgICAgICA6IGVudGVyQ2FuY2VsbGVkO1xyXG4gICAgdmFyIGV4cGxpY2l0RW50ZXJEdXJhdGlvbiA9IHRvTnVtYmVyKGlzT2JqZWN0KGR1cmF0aW9uKSA/IGR1cmF0aW9uLmVudGVyIDogZHVyYXRpb24pO1xyXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgZXhwbGljaXRFbnRlckR1cmF0aW9uICE9IG51bGwpIHtcclxuICAgICAgICBjaGVja0R1cmF0aW9uKGV4cGxpY2l0RW50ZXJEdXJhdGlvbiwgJ2VudGVyJywgdm5vZGUpO1xyXG4gICAgfVxyXG4gICAgdmFyIGV4cGVjdHNDU1MgPSBjc3MgIT09IGZhbHNlICYmICFpc0lFOTtcclxuICAgIHZhciB1c2VyV2FudHNDb250cm9sID0gZ2V0SG9va0FyZ3VtZW50c0xlbmd0aChlbnRlckhvb2spO1xyXG4gICAgdmFyIGNiID0gKGVsLl9lbnRlckNiID0gb25jZShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKGV4cGVjdHNDU1MpIHtcclxuICAgICAgICAgICAgcmVtb3ZlVHJhbnNpdGlvbkNsYXNzKGVsLCB0b0NsYXNzKTtcclxuICAgICAgICAgICAgcmVtb3ZlVHJhbnNpdGlvbkNsYXNzKGVsLCBhY3RpdmVDbGFzcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcclxuICAgICAgICBpZiAoY2IuY2FuY2VsbGVkKSB7XHJcbiAgICAgICAgICAgIGlmIChleHBlY3RzQ1NTKSB7XHJcbiAgICAgICAgICAgICAgICByZW1vdmVUcmFuc2l0aW9uQ2xhc3MoZWwsIHN0YXJ0Q2xhc3MpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVudGVyQ2FuY2VsbGVkSG9vayAmJiBlbnRlckNhbmNlbGxlZEhvb2soZWwpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgYWZ0ZXJFbnRlckhvb2sgJiYgYWZ0ZXJFbnRlckhvb2soZWwpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbC5fZW50ZXJDYiA9IG51bGw7XHJcbiAgICB9KSk7XHJcbiAgICBpZiAoIXZub2RlLmRhdGEuc2hvdykge1xyXG4gICAgICAgIC8vIHJlbW92ZSBwZW5kaW5nIGxlYXZlIGVsZW1lbnQgb24gZW50ZXIgYnkgaW5qZWN0aW5nIGFuIGluc2VydCBob29rXHJcbiAgICAgICAgbWVyZ2VWTm9kZUhvb2sodm5vZGUsICdpbnNlcnQnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHZhciBwYXJlbnQgPSBlbC5wYXJlbnROb2RlO1xyXG4gICAgICAgICAgICB2YXIgcGVuZGluZ05vZGUgPSBwYXJlbnQgJiYgcGFyZW50Ll9wZW5kaW5nICYmIHBhcmVudC5fcGVuZGluZ1t2bm9kZS5rZXldO1xyXG4gICAgICAgICAgICBpZiAocGVuZGluZ05vZGUgJiZcclxuICAgICAgICAgICAgICAgIHBlbmRpbmdOb2RlLnRhZyA9PT0gdm5vZGUudGFnICYmXHJcbiAgICAgICAgICAgICAgICBwZW5kaW5nTm9kZS5lbG0uX2xlYXZlQ2IpIHtcclxuICAgICAgICAgICAgICAgIHBlbmRpbmdOb2RlLmVsbS5fbGVhdmVDYigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVudGVySG9vayAmJiBlbnRlckhvb2soZWwsIGNiKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIC8vIHN0YXJ0IGVudGVyIHRyYW5zaXRpb25cclxuICAgIGJlZm9yZUVudGVySG9vayAmJiBiZWZvcmVFbnRlckhvb2soZWwpO1xyXG4gICAgaWYgKGV4cGVjdHNDU1MpIHtcclxuICAgICAgICBhZGRUcmFuc2l0aW9uQ2xhc3MoZWwsIHN0YXJ0Q2xhc3MpO1xyXG4gICAgICAgIGFkZFRyYW5zaXRpb25DbGFzcyhlbCwgYWN0aXZlQ2xhc3MpO1xyXG4gICAgICAgIG5leHRGcmFtZShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJlbW92ZVRyYW5zaXRpb25DbGFzcyhlbCwgc3RhcnRDbGFzcyk7XHJcbiAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcclxuICAgICAgICAgICAgaWYgKCFjYi5jYW5jZWxsZWQpIHtcclxuICAgICAgICAgICAgICAgIGFkZFRyYW5zaXRpb25DbGFzcyhlbCwgdG9DbGFzcyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXVzZXJXYW50c0NvbnRyb2wpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNWYWxpZER1cmF0aW9uKGV4cGxpY2l0RW50ZXJEdXJhdGlvbikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChjYiwgZXhwbGljaXRFbnRlckR1cmF0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoZW5UcmFuc2l0aW9uRW5kcyhlbCwgdHlwZSwgY2IpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgaWYgKHZub2RlLmRhdGEuc2hvdykge1xyXG4gICAgICAgIHRvZ2dsZURpc3BsYXkgJiYgdG9nZ2xlRGlzcGxheSgpO1xyXG4gICAgICAgIGVudGVySG9vayAmJiBlbnRlckhvb2soZWwsIGNiKTtcclxuICAgIH1cclxuICAgIGlmICghZXhwZWN0c0NTUyAmJiAhdXNlcldhbnRzQ29udHJvbCkge1xyXG4gICAgICAgIGNiKCk7XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gbGVhdmUodm5vZGUsIHJtKSB7XHJcbiAgICB2YXIgZWwgPSB2bm9kZS5lbG07XHJcbiAgICAvLyBjYWxsIGVudGVyIGNhbGxiYWNrIG5vd1xyXG4gICAgaWYgKGlzRGVmKGVsLl9lbnRlckNiKSkge1xyXG4gICAgICAgIGVsLl9lbnRlckNiLmNhbmNlbGxlZCA9IHRydWU7XHJcbiAgICAgICAgZWwuX2VudGVyQ2IoKTtcclxuICAgIH1cclxuICAgIHZhciBkYXRhID0gcmVzb2x2ZVRyYW5zaXRpb24odm5vZGUuZGF0YS50cmFuc2l0aW9uKTtcclxuICAgIGlmIChpc1VuZGVmKGRhdGEpIHx8IGVsLm5vZGVUeXBlICE9PSAxKSB7XHJcbiAgICAgICAgcmV0dXJuIHJtKCk7XHJcbiAgICB9XHJcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cclxuICAgIGlmIChpc0RlZihlbC5fbGVhdmVDYikpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB2YXIgY3NzID0gZGF0YS5jc3MsIHR5cGUgPSBkYXRhLnR5cGUsIGxlYXZlQ2xhc3MgPSBkYXRhLmxlYXZlQ2xhc3MsIGxlYXZlVG9DbGFzcyA9IGRhdGEubGVhdmVUb0NsYXNzLCBsZWF2ZUFjdGl2ZUNsYXNzID0gZGF0YS5sZWF2ZUFjdGl2ZUNsYXNzLCBiZWZvcmVMZWF2ZSA9IGRhdGEuYmVmb3JlTGVhdmUsIGxlYXZlID0gZGF0YS5sZWF2ZSwgYWZ0ZXJMZWF2ZSA9IGRhdGEuYWZ0ZXJMZWF2ZSwgbGVhdmVDYW5jZWxsZWQgPSBkYXRhLmxlYXZlQ2FuY2VsbGVkLCBkZWxheUxlYXZlID0gZGF0YS5kZWxheUxlYXZlLCBkdXJhdGlvbiA9IGRhdGEuZHVyYXRpb247XHJcbiAgICB2YXIgZXhwZWN0c0NTUyA9IGNzcyAhPT0gZmFsc2UgJiYgIWlzSUU5O1xyXG4gICAgdmFyIHVzZXJXYW50c0NvbnRyb2wgPSBnZXRIb29rQXJndW1lbnRzTGVuZ3RoKGxlYXZlKTtcclxuICAgIHZhciBleHBsaWNpdExlYXZlRHVyYXRpb24gPSB0b051bWJlcihpc09iamVjdChkdXJhdGlvbikgPyBkdXJhdGlvbi5sZWF2ZSA6IGR1cmF0aW9uKTtcclxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGlzRGVmKGV4cGxpY2l0TGVhdmVEdXJhdGlvbikpIHtcclxuICAgICAgICBjaGVja0R1cmF0aW9uKGV4cGxpY2l0TGVhdmVEdXJhdGlvbiwgJ2xlYXZlJywgdm5vZGUpO1xyXG4gICAgfVxyXG4gICAgdmFyIGNiID0gKGVsLl9sZWF2ZUNiID0gb25jZShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKGVsLnBhcmVudE5vZGUgJiYgZWwucGFyZW50Tm9kZS5fcGVuZGluZykge1xyXG4gICAgICAgICAgICBlbC5wYXJlbnROb2RlLl9wZW5kaW5nW3Zub2RlLmtleV0gPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZXhwZWN0c0NTUykge1xyXG4gICAgICAgICAgICByZW1vdmVUcmFuc2l0aW9uQ2xhc3MoZWwsIGxlYXZlVG9DbGFzcyk7XHJcbiAgICAgICAgICAgIHJlbW92ZVRyYW5zaXRpb25DbGFzcyhlbCwgbGVhdmVBY3RpdmVDbGFzcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcclxuICAgICAgICBpZiAoY2IuY2FuY2VsbGVkKSB7XHJcbiAgICAgICAgICAgIGlmIChleHBlY3RzQ1NTKSB7XHJcbiAgICAgICAgICAgICAgICByZW1vdmVUcmFuc2l0aW9uQ2xhc3MoZWwsIGxlYXZlQ2xhc3MpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGxlYXZlQ2FuY2VsbGVkICYmIGxlYXZlQ2FuY2VsbGVkKGVsKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJtKCk7XHJcbiAgICAgICAgICAgIGFmdGVyTGVhdmUgJiYgYWZ0ZXJMZWF2ZShlbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsLl9sZWF2ZUNiID0gbnVsbDtcclxuICAgIH0pKTtcclxuICAgIGlmIChkZWxheUxlYXZlKSB7XHJcbiAgICAgICAgZGVsYXlMZWF2ZShwZXJmb3JtTGVhdmUpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgcGVyZm9ybUxlYXZlKCk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBwZXJmb3JtTGVhdmUoKSB7XHJcbiAgICAgICAgLy8gdGhlIGRlbGF5ZWQgbGVhdmUgbWF5IGhhdmUgYWxyZWFkeSBiZWVuIGNhbmNlbGxlZFxyXG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcclxuICAgICAgICBpZiAoY2IuY2FuY2VsbGVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gcmVjb3JkIGxlYXZpbmcgZWxlbWVudFxyXG4gICAgICAgIGlmICghdm5vZGUuZGF0YS5zaG93ICYmIGVsLnBhcmVudE5vZGUpIHtcclxuICAgICAgICAgICAgKGVsLnBhcmVudE5vZGUuX3BlbmRpbmcgfHwgKGVsLnBhcmVudE5vZGUuX3BlbmRpbmcgPSB7fSkpW3Zub2RlLmtleV0gPVxyXG4gICAgICAgICAgICAgICAgdm5vZGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJlZm9yZUxlYXZlICYmIGJlZm9yZUxlYXZlKGVsKTtcclxuICAgICAgICBpZiAoZXhwZWN0c0NTUykge1xyXG4gICAgICAgICAgICBhZGRUcmFuc2l0aW9uQ2xhc3MoZWwsIGxlYXZlQ2xhc3MpO1xyXG4gICAgICAgICAgICBhZGRUcmFuc2l0aW9uQ2xhc3MoZWwsIGxlYXZlQWN0aXZlQ2xhc3MpO1xyXG4gICAgICAgICAgICBuZXh0RnJhbWUoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgcmVtb3ZlVHJhbnNpdGlvbkNsYXNzKGVsLCBsZWF2ZUNsYXNzKTtcclxuICAgICAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcclxuICAgICAgICAgICAgICAgIGlmICghY2IuY2FuY2VsbGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYWRkVHJhbnNpdGlvbkNsYXNzKGVsLCBsZWF2ZVRvQ2xhc3MpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdXNlcldhbnRzQ29udHJvbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNWYWxpZER1cmF0aW9uKGV4cGxpY2l0TGVhdmVEdXJhdGlvbikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoY2IsIGV4cGxpY2l0TGVhdmVEdXJhdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuVHJhbnNpdGlvbkVuZHMoZWwsIHR5cGUsIGNiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxlYXZlICYmIGxlYXZlKGVsLCBjYik7XHJcbiAgICAgICAgaWYgKCFleHBlY3RzQ1NTICYmICF1c2VyV2FudHNDb250cm9sKSB7XHJcbiAgICAgICAgICAgIGNiKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbi8vIG9ubHkgdXNlZCBpbiBkZXYgbW9kZVxyXG5mdW5jdGlvbiBjaGVja0R1cmF0aW9uKHZhbCwgbmFtZSwgdm5vZGUpIHtcclxuICAgIGlmICh0eXBlb2YgdmFsICE9PSAnbnVtYmVyJykge1xyXG4gICAgICAgIHdhcm4kMihcIjx0cmFuc2l0aW9uPiBleHBsaWNpdCBcIi5jb25jYXQobmFtZSwgXCIgZHVyYXRpb24gaXMgbm90IGEgdmFsaWQgbnVtYmVyIC0gXCIpICtcclxuICAgICAgICAgICAgXCJnb3QgXCIuY29uY2F0KEpTT04uc3RyaW5naWZ5KHZhbCksIFwiLlwiKSwgdm5vZGUuY29udGV4dCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChpc05hTih2YWwpKSB7XHJcbiAgICAgICAgd2FybiQyKFwiPHRyYW5zaXRpb24+IGV4cGxpY2l0IFwiLmNvbmNhdChuYW1lLCBcIiBkdXJhdGlvbiBpcyBOYU4gLSBcIikgK1xyXG4gICAgICAgICAgICAndGhlIGR1cmF0aW9uIGV4cHJlc3Npb24gbWlnaHQgYmUgaW5jb3JyZWN0LicsIHZub2RlLmNvbnRleHQpO1xyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIGlzVmFsaWREdXJhdGlvbih2YWwpIHtcclxuICAgIHJldHVybiB0eXBlb2YgdmFsID09PSAnbnVtYmVyJyAmJiAhaXNOYU4odmFsKTtcclxufVxyXG4vKipcclxuICogTm9ybWFsaXplIGEgdHJhbnNpdGlvbiBob29rJ3MgYXJndW1lbnQgbGVuZ3RoLiBUaGUgaG9vayBtYXkgYmU6XHJcbiAqIC0gYSBtZXJnZWQgaG9vayAoaW52b2tlcikgd2l0aCB0aGUgb3JpZ2luYWwgaW4gLmZuc1xyXG4gKiAtIGEgd3JhcHBlZCBjb21wb25lbnQgbWV0aG9kIChjaGVjayAuX2xlbmd0aClcclxuICogLSBhIHBsYWluIGZ1bmN0aW9uICgubGVuZ3RoKVxyXG4gKi9cclxuZnVuY3Rpb24gZ2V0SG9va0FyZ3VtZW50c0xlbmd0aChmbikge1xyXG4gICAgaWYgKGlzVW5kZWYoZm4pKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvclxyXG4gICAgdmFyIGludm9rZXJGbnMgPSBmbi5mbnM7XHJcbiAgICBpZiAoaXNEZWYoaW52b2tlckZucykpIHtcclxuICAgICAgICAvLyBpbnZva2VyXHJcbiAgICAgICAgcmV0dXJuIGdldEhvb2tBcmd1bWVudHNMZW5ndGgoQXJyYXkuaXNBcnJheShpbnZva2VyRm5zKSA/IGludm9rZXJGbnNbMF0gOiBpbnZva2VyRm5zKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcclxuICAgICAgICByZXR1cm4gKGZuLl9sZW5ndGggfHwgZm4ubGVuZ3RoKSA+IDE7XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gX2VudGVyKF8sIHZub2RlKSB7XHJcbiAgICBpZiAodm5vZGUuZGF0YS5zaG93ICE9PSB0cnVlKSB7XHJcbiAgICAgICAgZW50ZXIodm5vZGUpO1xyXG4gICAgfVxyXG59XHJcbnZhciB0cmFuc2l0aW9uID0gaW5Ccm93c2VyXHJcbiAgICA/IHtcclxuICAgICAgICBjcmVhdGU6IF9lbnRlcixcclxuICAgICAgICBhY3RpdmF0ZTogX2VudGVyLFxyXG4gICAgICAgIHJlbW92ZTogZnVuY3Rpb24gKHZub2RlLCBybSkge1xyXG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xyXG4gICAgICAgICAgICBpZiAodm5vZGUuZGF0YS5zaG93ICE9PSB0cnVlKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXHJcbiAgICAgICAgICAgICAgICBsZWF2ZSh2bm9kZSwgcm0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcm0oKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIDoge307XG5cbnZhciBwbGF0Zm9ybU1vZHVsZXMgPSBbYXR0cnMsIGtsYXNzJDEsIGV2ZW50cywgZG9tUHJvcHMsIHN0eWxlJDEsIHRyYW5zaXRpb25dO1xuXG4vLyB0aGUgZGlyZWN0aXZlIG1vZHVsZSBzaG91bGQgYmUgYXBwbGllZCBsYXN0LCBhZnRlciBhbGxcclxuLy8gYnVpbHQtaW4gbW9kdWxlcyBoYXZlIGJlZW4gYXBwbGllZC5cclxudmFyIG1vZHVsZXMkMSA9IHBsYXRmb3JtTW9kdWxlcy5jb25jYXQoYmFzZU1vZHVsZXMpO1xyXG52YXIgcGF0Y2ggPSBjcmVhdGVQYXRjaEZ1bmN0aW9uKHsgbm9kZU9wczogbm9kZU9wcywgbW9kdWxlczogbW9kdWxlcyQxIH0pO1xuXG4vKipcclxuICogTm90IHR5cGUgY2hlY2tpbmcgdGhpcyBmaWxlIGJlY2F1c2UgZmxvdyBkb2Vzbid0IGxpa2UgYXR0YWNoaW5nXHJcbiAqIHByb3BlcnRpZXMgdG8gRWxlbWVudHMuXHJcbiAqL1xyXG4vKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cclxuaWYgKGlzSUU5KSB7XHJcbiAgICAvLyBodHRwOi8vd3d3Lm1hdHRzNDExLmNvbS9wb3N0L2ludGVybmV0LWV4cGxvcmVyLTktb25pbnB1dC9cclxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3NlbGVjdGlvbmNoYW5nZScsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgZWwgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xyXG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcclxuICAgICAgICBpZiAoZWwgJiYgZWwudm1vZGVsKSB7XHJcbiAgICAgICAgICAgIHRyaWdnZXIoZWwsICdpbnB1dCcpO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG59XHJcbnZhciBkaXJlY3RpdmUgPSB7XHJcbiAgICBpbnNlcnRlZDogZnVuY3Rpb24gKGVsLCBiaW5kaW5nLCB2bm9kZSwgb2xkVm5vZGUpIHtcclxuICAgICAgICBpZiAodm5vZGUudGFnID09PSAnc2VsZWN0Jykge1xyXG4gICAgICAgICAgICAvLyAjNjkwM1xyXG4gICAgICAgICAgICBpZiAob2xkVm5vZGUuZWxtICYmICFvbGRWbm9kZS5lbG0uX3ZPcHRpb25zKSB7XHJcbiAgICAgICAgICAgICAgICBtZXJnZVZOb2RlSG9vayh2bm9kZSwgJ3Bvc3RwYXRjaCcsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICBkaXJlY3RpdmUuY29tcG9uZW50VXBkYXRlZChlbCwgYmluZGluZywgdm5vZGUpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBzZXRTZWxlY3RlZChlbCwgYmluZGluZywgdm5vZGUuY29udGV4dCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWwuX3ZPcHRpb25zID0gW10ubWFwLmNhbGwoZWwub3B0aW9ucywgZ2V0VmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh2bm9kZS50YWcgPT09ICd0ZXh0YXJlYScgfHwgaXNUZXh0SW5wdXRUeXBlKGVsLnR5cGUpKSB7XHJcbiAgICAgICAgICAgIGVsLl92TW9kaWZpZXJzID0gYmluZGluZy5tb2RpZmllcnM7XHJcbiAgICAgICAgICAgIGlmICghYmluZGluZy5tb2RpZmllcnMubGF6eSkge1xyXG4gICAgICAgICAgICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcignY29tcG9zaXRpb25zdGFydCcsIG9uQ29tcG9zaXRpb25TdGFydCk7XHJcbiAgICAgICAgICAgICAgICBlbC5hZGRFdmVudExpc3RlbmVyKCdjb21wb3NpdGlvbmVuZCcsIG9uQ29tcG9zaXRpb25FbmQpO1xyXG4gICAgICAgICAgICAgICAgLy8gU2FmYXJpIDwgMTAuMiAmIFVJV2ViVmlldyBkb2Vzbid0IGZpcmUgY29tcG9zaXRpb25lbmQgd2hlblxyXG4gICAgICAgICAgICAgICAgLy8gc3dpdGNoaW5nIGZvY3VzIGJlZm9yZSBjb25maXJtaW5nIGNvbXBvc2l0aW9uIGNob2ljZVxyXG4gICAgICAgICAgICAgICAgLy8gdGhpcyBhbHNvIGZpeGVzIHRoZSBpc3N1ZSB3aGVyZSBzb21lIGJyb3dzZXJzIGUuZy4gaU9TIENocm9tZVxyXG4gICAgICAgICAgICAgICAgLy8gZmlyZXMgXCJjaGFuZ2VcIiBpbnN0ZWFkIG9mIFwiaW5wdXRcIiBvbiBhdXRvY29tcGxldGUuXHJcbiAgICAgICAgICAgICAgICBlbC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBvbkNvbXBvc2l0aW9uRW5kKTtcclxuICAgICAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzSUU5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZWwudm1vZGVsID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICBjb21wb25lbnRVcGRhdGVkOiBmdW5jdGlvbiAoZWwsIGJpbmRpbmcsIHZub2RlKSB7XHJcbiAgICAgICAgaWYgKHZub2RlLnRhZyA9PT0gJ3NlbGVjdCcpIHtcclxuICAgICAgICAgICAgc2V0U2VsZWN0ZWQoZWwsIGJpbmRpbmcsIHZub2RlLmNvbnRleHQpO1xyXG4gICAgICAgICAgICAvLyBpbiBjYXNlIHRoZSBvcHRpb25zIHJlbmRlcmVkIGJ5IHYtZm9yIGhhdmUgY2hhbmdlZCxcclxuICAgICAgICAgICAgLy8gaXQncyBwb3NzaWJsZSB0aGF0IHRoZSB2YWx1ZSBpcyBvdXQtb2Ytc3luYyB3aXRoIHRoZSByZW5kZXJlZCBvcHRpb25zLlxyXG4gICAgICAgICAgICAvLyBkZXRlY3Qgc3VjaCBjYXNlcyBhbmQgZmlsdGVyIG91dCB2YWx1ZXMgdGhhdCBubyBsb25nZXIgaGFzIGEgbWF0Y2hpbmdcclxuICAgICAgICAgICAgLy8gb3B0aW9uIGluIHRoZSBET00uXHJcbiAgICAgICAgICAgIHZhciBwcmV2T3B0aW9uc18xID0gZWwuX3ZPcHRpb25zO1xyXG4gICAgICAgICAgICB2YXIgY3VyT3B0aW9uc18xID0gKGVsLl92T3B0aW9ucyA9IFtdLm1hcC5jYWxsKGVsLm9wdGlvbnMsIGdldFZhbHVlKSk7XHJcbiAgICAgICAgICAgIGlmIChjdXJPcHRpb25zXzEuc29tZShmdW5jdGlvbiAobywgaSkgeyByZXR1cm4gIWxvb3NlRXF1YWwobywgcHJldk9wdGlvbnNfMVtpXSk7IH0pKSB7XHJcbiAgICAgICAgICAgICAgICAvLyB0cmlnZ2VyIGNoYW5nZSBldmVudCBpZlxyXG4gICAgICAgICAgICAgICAgLy8gbm8gbWF0Y2hpbmcgb3B0aW9uIGZvdW5kIGZvciBhdCBsZWFzdCBvbmUgdmFsdWVcclxuICAgICAgICAgICAgICAgIHZhciBuZWVkUmVzZXQgPSBlbC5tdWx0aXBsZVxyXG4gICAgICAgICAgICAgICAgICAgID8gYmluZGluZy52YWx1ZS5zb21lKGZ1bmN0aW9uICh2KSB7IHJldHVybiBoYXNOb01hdGNoaW5nT3B0aW9uKHYsIGN1ck9wdGlvbnNfMSk7IH0pXHJcbiAgICAgICAgICAgICAgICAgICAgOiBiaW5kaW5nLnZhbHVlICE9PSBiaW5kaW5nLm9sZFZhbHVlICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhc05vTWF0Y2hpbmdPcHRpb24oYmluZGluZy52YWx1ZSwgY3VyT3B0aW9uc18xKTtcclxuICAgICAgICAgICAgICAgIGlmIChuZWVkUmVzZXQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyKGVsLCAnY2hhbmdlJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07XHJcbmZ1bmN0aW9uIHNldFNlbGVjdGVkKGVsLCBiaW5kaW5nLCB2bSkge1xyXG4gICAgYWN0dWFsbHlTZXRTZWxlY3RlZChlbCwgYmluZGluZywgdm0pO1xyXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXHJcbiAgICBpZiAoaXNJRSB8fCBpc0VkZ2UpIHtcclxuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgYWN0dWFsbHlTZXRTZWxlY3RlZChlbCwgYmluZGluZywgdm0pO1xyXG4gICAgICAgIH0sIDApO1xyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIGFjdHVhbGx5U2V0U2VsZWN0ZWQoZWwsIGJpbmRpbmcsIHZtKSB7XHJcbiAgICB2YXIgdmFsdWUgPSBiaW5kaW5nLnZhbHVlO1xyXG4gICAgdmFyIGlzTXVsdGlwbGUgPSBlbC5tdWx0aXBsZTtcclxuICAgIGlmIChpc011bHRpcGxlICYmICFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xyXG4gICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiZcclxuICAgICAgICAgICAgd2FybiQyKFwiPHNlbGVjdCBtdWx0aXBsZSB2LW1vZGVsPVxcXCJcIi5jb25jYXQoYmluZGluZy5leHByZXNzaW9uLCBcIlxcXCI+IFwiKSArXHJcbiAgICAgICAgICAgICAgICBcImV4cGVjdHMgYW4gQXJyYXkgdmFsdWUgZm9yIGl0cyBiaW5kaW5nLCBidXQgZ290IFwiLmNvbmNhdChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nXHJcbiAgICAgICAgICAgICAgICAgICAgLmNhbGwodmFsdWUpXHJcbiAgICAgICAgICAgICAgICAgICAgLnNsaWNlKDgsIC0xKSksIHZtKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB2YXIgc2VsZWN0ZWQsIG9wdGlvbjtcclxuICAgIGZvciAodmFyIGkgPSAwLCBsID0gZWwub3B0aW9ucy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICBvcHRpb24gPSBlbC5vcHRpb25zW2ldO1xyXG4gICAgICAgIGlmIChpc011bHRpcGxlKSB7XHJcbiAgICAgICAgICAgIHNlbGVjdGVkID0gbG9vc2VJbmRleE9mKHZhbHVlLCBnZXRWYWx1ZShvcHRpb24pKSA+IC0xO1xyXG4gICAgICAgICAgICBpZiAob3B0aW9uLnNlbGVjdGVkICE9PSBzZWxlY3RlZCkge1xyXG4gICAgICAgICAgICAgICAgb3B0aW9uLnNlbGVjdGVkID0gc2VsZWN0ZWQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChsb29zZUVxdWFsKGdldFZhbHVlKG9wdGlvbiksIHZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGVsLnNlbGVjdGVkSW5kZXggIT09IGkpIHtcclxuICAgICAgICAgICAgICAgICAgICBlbC5zZWxlY3RlZEluZGV4ID0gaTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICghaXNNdWx0aXBsZSkge1xyXG4gICAgICAgIGVsLnNlbGVjdGVkSW5kZXggPSAtMTtcclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBoYXNOb01hdGNoaW5nT3B0aW9uKHZhbHVlLCBvcHRpb25zKSB7XHJcbiAgICByZXR1cm4gb3B0aW9ucy5ldmVyeShmdW5jdGlvbiAobykgeyByZXR1cm4gIWxvb3NlRXF1YWwobywgdmFsdWUpOyB9KTtcclxufVxyXG5mdW5jdGlvbiBnZXRWYWx1ZShvcHRpb24pIHtcclxuICAgIHJldHVybiAnX3ZhbHVlJyBpbiBvcHRpb24gPyBvcHRpb24uX3ZhbHVlIDogb3B0aW9uLnZhbHVlO1xyXG59XHJcbmZ1bmN0aW9uIG9uQ29tcG9zaXRpb25TdGFydChlKSB7XHJcbiAgICBlLnRhcmdldC5jb21wb3NpbmcgPSB0cnVlO1xyXG59XHJcbmZ1bmN0aW9uIG9uQ29tcG9zaXRpb25FbmQoZSkge1xyXG4gICAgLy8gcHJldmVudCB0cmlnZ2VyaW5nIGFuIGlucHV0IGV2ZW50IGZvciBubyByZWFzb25cclxuICAgIGlmICghZS50YXJnZXQuY29tcG9zaW5nKVxyXG4gICAgICAgIHJldHVybjtcclxuICAgIGUudGFyZ2V0LmNvbXBvc2luZyA9IGZhbHNlO1xyXG4gICAgdHJpZ2dlcihlLnRhcmdldCwgJ2lucHV0Jyk7XHJcbn1cclxuZnVuY3Rpb24gdHJpZ2dlcihlbCwgdHlwZSkge1xyXG4gICAgdmFyIGUgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnSFRNTEV2ZW50cycpO1xyXG4gICAgZS5pbml0RXZlbnQodHlwZSwgdHJ1ZSwgdHJ1ZSk7XHJcbiAgICBlbC5kaXNwYXRjaEV2ZW50KGUpO1xyXG59XG5cbi8vIHJlY3Vyc2l2ZWx5IHNlYXJjaCBmb3IgcG9zc2libGUgdHJhbnNpdGlvbiBkZWZpbmVkIGluc2lkZSB0aGUgY29tcG9uZW50IHJvb3RcclxuZnVuY3Rpb24gbG9jYXRlTm9kZSh2bm9kZSkge1xyXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvclxyXG4gICAgcmV0dXJuIHZub2RlLmNvbXBvbmVudEluc3RhbmNlICYmICghdm5vZGUuZGF0YSB8fCAhdm5vZGUuZGF0YS50cmFuc2l0aW9uKVxyXG4gICAgICAgID8gbG9jYXRlTm9kZSh2bm9kZS5jb21wb25lbnRJbnN0YW5jZS5fdm5vZGUpXHJcbiAgICAgICAgOiB2bm9kZTtcclxufVxyXG52YXIgc2hvdyA9IHtcclxuICAgIGJpbmQ6IGZ1bmN0aW9uIChlbCwgX2EsIHZub2RlKSB7XHJcbiAgICAgICAgdmFyIHZhbHVlID0gX2EudmFsdWU7XHJcbiAgICAgICAgdm5vZGUgPSBsb2NhdGVOb2RlKHZub2RlKTtcclxuICAgICAgICB2YXIgdHJhbnNpdGlvbiA9IHZub2RlLmRhdGEgJiYgdm5vZGUuZGF0YS50cmFuc2l0aW9uO1xyXG4gICAgICAgIHZhciBvcmlnaW5hbERpc3BsYXkgPSAoZWwuX192T3JpZ2luYWxEaXNwbGF5ID1cclxuICAgICAgICAgICAgZWwuc3R5bGUuZGlzcGxheSA9PT0gJ25vbmUnID8gJycgOiBlbC5zdHlsZS5kaXNwbGF5KTtcclxuICAgICAgICBpZiAodmFsdWUgJiYgdHJhbnNpdGlvbikge1xyXG4gICAgICAgICAgICB2bm9kZS5kYXRhLnNob3cgPSB0cnVlO1xyXG4gICAgICAgICAgICBlbnRlcih2bm9kZSwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgZWwuc3R5bGUuZGlzcGxheSA9IG9yaWdpbmFsRGlzcGxheTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBlbC5zdHlsZS5kaXNwbGF5ID0gdmFsdWUgPyBvcmlnaW5hbERpc3BsYXkgOiAnbm9uZSc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHVwZGF0ZTogZnVuY3Rpb24gKGVsLCBfYSwgdm5vZGUpIHtcclxuICAgICAgICB2YXIgdmFsdWUgPSBfYS52YWx1ZSwgb2xkVmFsdWUgPSBfYS5vbGRWYWx1ZTtcclxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cclxuICAgICAgICBpZiAoIXZhbHVlID09PSAhb2xkVmFsdWUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB2bm9kZSA9IGxvY2F0ZU5vZGUodm5vZGUpO1xyXG4gICAgICAgIHZhciB0cmFuc2l0aW9uID0gdm5vZGUuZGF0YSAmJiB2bm9kZS5kYXRhLnRyYW5zaXRpb247XHJcbiAgICAgICAgaWYgKHRyYW5zaXRpb24pIHtcclxuICAgICAgICAgICAgdm5vZGUuZGF0YS5zaG93ID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICBlbnRlcih2bm9kZSwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGVsLnN0eWxlLmRpc3BsYXkgPSBlbC5fX3ZPcmlnaW5hbERpc3BsYXk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGxlYXZlKHZub2RlLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZWwuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBlbC5zdHlsZS5kaXNwbGF5ID0gdmFsdWUgPyBlbC5fX3ZPcmlnaW5hbERpc3BsYXkgOiAnbm9uZSc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHVuYmluZDogZnVuY3Rpb24gKGVsLCBiaW5kaW5nLCB2bm9kZSwgb2xkVm5vZGUsIGlzRGVzdHJveSkge1xyXG4gICAgICAgIGlmICghaXNEZXN0cm95KSB7XHJcbiAgICAgICAgICAgIGVsLnN0eWxlLmRpc3BsYXkgPSBlbC5fX3ZPcmlnaW5hbERpc3BsYXk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59O1xuXG52YXIgcGxhdGZvcm1EaXJlY3RpdmVzID0ge1xyXG4gICAgbW9kZWw6IGRpcmVjdGl2ZSxcclxuICAgIHNob3c6IHNob3dcclxufTtcblxuLy8gUHJvdmlkZXMgdHJhbnNpdGlvbiBzdXBwb3J0IGZvciBhIHNpbmdsZSBlbGVtZW50L2NvbXBvbmVudC5cclxudmFyIHRyYW5zaXRpb25Qcm9wcyA9IHtcclxuICAgIG5hbWU6IFN0cmluZyxcclxuICAgIGFwcGVhcjogQm9vbGVhbixcclxuICAgIGNzczogQm9vbGVhbixcclxuICAgIG1vZGU6IFN0cmluZyxcclxuICAgIHR5cGU6IFN0cmluZyxcclxuICAgIGVudGVyQ2xhc3M6IFN0cmluZyxcclxuICAgIGxlYXZlQ2xhc3M6IFN0cmluZyxcclxuICAgIGVudGVyVG9DbGFzczogU3RyaW5nLFxyXG4gICAgbGVhdmVUb0NsYXNzOiBTdHJpbmcsXHJcbiAgICBlbnRlckFjdGl2ZUNsYXNzOiBTdHJpbmcsXHJcbiAgICBsZWF2ZUFjdGl2ZUNsYXNzOiBTdHJpbmcsXHJcbiAgICBhcHBlYXJDbGFzczogU3RyaW5nLFxyXG4gICAgYXBwZWFyQWN0aXZlQ2xhc3M6IFN0cmluZyxcclxuICAgIGFwcGVhclRvQ2xhc3M6IFN0cmluZyxcclxuICAgIGR1cmF0aW9uOiBbTnVtYmVyLCBTdHJpbmcsIE9iamVjdF1cclxufTtcclxuLy8gaW4gY2FzZSB0aGUgY2hpbGQgaXMgYWxzbyBhbiBhYnN0cmFjdCBjb21wb25lbnQsIGUuZy4gPGtlZXAtYWxpdmU+XHJcbi8vIHdlIHdhbnQgdG8gcmVjdXJzaXZlbHkgcmV0cmlldmUgdGhlIHJlYWwgY29tcG9uZW50IHRvIGJlIHJlbmRlcmVkXHJcbmZ1bmN0aW9uIGdldFJlYWxDaGlsZCh2bm9kZSkge1xyXG4gICAgdmFyIGNvbXBPcHRpb25zID0gdm5vZGUgJiYgdm5vZGUuY29tcG9uZW50T3B0aW9ucztcclxuICAgIGlmIChjb21wT3B0aW9ucyAmJiBjb21wT3B0aW9ucy5DdG9yLm9wdGlvbnMuYWJzdHJhY3QpIHtcclxuICAgICAgICByZXR1cm4gZ2V0UmVhbENoaWxkKGdldEZpcnN0Q29tcG9uZW50Q2hpbGQoY29tcE9wdGlvbnMuY2hpbGRyZW4pKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHJldHVybiB2bm9kZTtcclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBleHRyYWN0VHJhbnNpdGlvbkRhdGEoY29tcCkge1xyXG4gICAgdmFyIGRhdGEgPSB7fTtcclxuICAgIHZhciBvcHRpb25zID0gY29tcC4kb3B0aW9ucztcclxuICAgIC8vIHByb3BzXHJcbiAgICBmb3IgKHZhciBrZXkgaW4gb3B0aW9ucy5wcm9wc0RhdGEpIHtcclxuICAgICAgICBkYXRhW2tleV0gPSBjb21wW2tleV07XHJcbiAgICB9XHJcbiAgICAvLyBldmVudHMuXHJcbiAgICAvLyBleHRyYWN0IGxpc3RlbmVycyBhbmQgcGFzcyB0aGVtIGRpcmVjdGx5IHRvIHRoZSB0cmFuc2l0aW9uIG1ldGhvZHNcclxuICAgIHZhciBsaXN0ZW5lcnMgPSBvcHRpb25zLl9wYXJlbnRMaXN0ZW5lcnM7XHJcbiAgICBmb3IgKHZhciBrZXkgaW4gbGlzdGVuZXJzKSB7XHJcbiAgICAgICAgZGF0YVtjYW1lbGl6ZShrZXkpXSA9IGxpc3RlbmVyc1trZXldO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRhdGE7XHJcbn1cclxuZnVuY3Rpb24gcGxhY2Vob2xkZXIoaCwgcmF3Q2hpbGQpIHtcclxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcclxuICAgIGlmICgvXFxkLWtlZXAtYWxpdmUkLy50ZXN0KHJhd0NoaWxkLnRhZykpIHtcclxuICAgICAgICByZXR1cm4gaCgna2VlcC1hbGl2ZScsIHtcclxuICAgICAgICAgICAgcHJvcHM6IHJhd0NoaWxkLmNvbXBvbmVudE9wdGlvbnMucHJvcHNEYXRhXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gaGFzUGFyZW50VHJhbnNpdGlvbih2bm9kZSkge1xyXG4gICAgd2hpbGUgKCh2bm9kZSA9IHZub2RlLnBhcmVudCkpIHtcclxuICAgICAgICBpZiAodm5vZGUuZGF0YS50cmFuc2l0aW9uKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBpc1NhbWVDaGlsZChjaGlsZCwgb2xkQ2hpbGQpIHtcclxuICAgIHJldHVybiBvbGRDaGlsZC5rZXkgPT09IGNoaWxkLmtleSAmJiBvbGRDaGlsZC50YWcgPT09IGNoaWxkLnRhZztcclxufVxyXG52YXIgaXNOb3RUZXh0Tm9kZSA9IGZ1bmN0aW9uIChjKSB7IHJldHVybiBjLnRhZyB8fCBpc0FzeW5jUGxhY2Vob2xkZXIoYyk7IH07XHJcbnZhciBpc1ZTaG93RGlyZWN0aXZlID0gZnVuY3Rpb24gKGQpIHsgcmV0dXJuIGQubmFtZSA9PT0gJ3Nob3cnOyB9O1xyXG52YXIgVHJhbnNpdGlvbiA9IHtcclxuICAgIG5hbWU6ICd0cmFuc2l0aW9uJyxcclxuICAgIHByb3BzOiB0cmFuc2l0aW9uUHJvcHMsXHJcbiAgICBhYnN0cmFjdDogdHJ1ZSxcclxuICAgIHJlbmRlcjogZnVuY3Rpb24gKGgpIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIHZhciBjaGlsZHJlbiA9IHRoaXMuJHNsb3RzLmRlZmF1bHQ7XHJcbiAgICAgICAgaWYgKCFjaGlsZHJlbikge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGZpbHRlciBvdXQgdGV4dCBub2RlcyAocG9zc2libGUgd2hpdGVzcGFjZXMpXHJcbiAgICAgICAgY2hpbGRyZW4gPSBjaGlsZHJlbi5maWx0ZXIoaXNOb3RUZXh0Tm9kZSk7XHJcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXHJcbiAgICAgICAgaWYgKCFjaGlsZHJlbi5sZW5ndGgpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyB3YXJuIG11bHRpcGxlIGVsZW1lbnRzXHJcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgY2hpbGRyZW4ubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgICB3YXJuJDIoJzx0cmFuc2l0aW9uPiBjYW4gb25seSBiZSB1c2VkIG9uIGEgc2luZ2xlIGVsZW1lbnQuIFVzZSAnICtcclxuICAgICAgICAgICAgICAgICc8dHJhbnNpdGlvbi1ncm91cD4gZm9yIGxpc3RzLicsIHRoaXMuJHBhcmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBtb2RlID0gdGhpcy5tb2RlO1xyXG4gICAgICAgIC8vIHdhcm4gaW52YWxpZCBtb2RlXHJcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgbW9kZSAmJiBtb2RlICE9PSAnaW4tb3V0JyAmJiBtb2RlICE9PSAnb3V0LWluJykge1xyXG4gICAgICAgICAgICB3YXJuJDIoJ2ludmFsaWQgPHRyYW5zaXRpb24+IG1vZGU6ICcgKyBtb2RlLCB0aGlzLiRwYXJlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgcmF3Q2hpbGQgPSBjaGlsZHJlblswXTtcclxuICAgICAgICAvLyBpZiB0aGlzIGlzIGEgY29tcG9uZW50IHJvb3Qgbm9kZSBhbmQgdGhlIGNvbXBvbmVudCdzXHJcbiAgICAgICAgLy8gcGFyZW50IGNvbnRhaW5lciBub2RlIGFsc28gaGFzIHRyYW5zaXRpb24sIHNraXAuXHJcbiAgICAgICAgaWYgKGhhc1BhcmVudFRyYW5zaXRpb24odGhpcy4kdm5vZGUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiByYXdDaGlsZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gYXBwbHkgdHJhbnNpdGlvbiBkYXRhIHRvIGNoaWxkXHJcbiAgICAgICAgLy8gdXNlIGdldFJlYWxDaGlsZCgpIHRvIGlnbm9yZSBhYnN0cmFjdCBjb21wb25lbnRzIGUuZy4ga2VlcC1hbGl2ZVxyXG4gICAgICAgIHZhciBjaGlsZCA9IGdldFJlYWxDaGlsZChyYXdDaGlsZCk7XHJcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXHJcbiAgICAgICAgaWYgKCFjaGlsZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gcmF3Q2hpbGQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLl9sZWF2aW5nKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBwbGFjZWhvbGRlcihoLCByYXdDaGlsZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGVuc3VyZSBhIGtleSB0aGF0IGlzIHVuaXF1ZSB0byB0aGUgdm5vZGUgdHlwZSBhbmQgdG8gdGhpcyB0cmFuc2l0aW9uXHJcbiAgICAgICAgLy8gY29tcG9uZW50IGluc3RhbmNlLiBUaGlzIGtleSB3aWxsIGJlIHVzZWQgdG8gcmVtb3ZlIHBlbmRpbmcgbGVhdmluZyBub2Rlc1xyXG4gICAgICAgIC8vIGR1cmluZyBlbnRlcmluZy5cclxuICAgICAgICB2YXIgaWQgPSBcIl9fdHJhbnNpdGlvbi1cIi5jb25jYXQodGhpcy5fdWlkLCBcIi1cIik7XHJcbiAgICAgICAgY2hpbGQua2V5ID1cclxuICAgICAgICAgICAgY2hpbGQua2V5ID09IG51bGxcclxuICAgICAgICAgICAgICAgID8gY2hpbGQuaXNDb21tZW50XHJcbiAgICAgICAgICAgICAgICAgICAgPyBpZCArICdjb21tZW50J1xyXG4gICAgICAgICAgICAgICAgICAgIDogaWQgKyBjaGlsZC50YWdcclxuICAgICAgICAgICAgICAgIDogaXNQcmltaXRpdmUoY2hpbGQua2V5KVxyXG4gICAgICAgICAgICAgICAgICAgID8gU3RyaW5nKGNoaWxkLmtleSkuaW5kZXhPZihpZCkgPT09IDBcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyBjaGlsZC5rZXlcclxuICAgICAgICAgICAgICAgICAgICAgICAgOiBpZCArIGNoaWxkLmtleVxyXG4gICAgICAgICAgICAgICAgICAgIDogY2hpbGQua2V5O1xyXG4gICAgICAgIHZhciBkYXRhID0gKChjaGlsZC5kYXRhIHx8IChjaGlsZC5kYXRhID0ge30pKS50cmFuc2l0aW9uID1cclxuICAgICAgICAgICAgZXh0cmFjdFRyYW5zaXRpb25EYXRhKHRoaXMpKTtcclxuICAgICAgICB2YXIgb2xkUmF3Q2hpbGQgPSB0aGlzLl92bm9kZTtcclxuICAgICAgICB2YXIgb2xkQ2hpbGQgPSBnZXRSZWFsQ2hpbGQob2xkUmF3Q2hpbGQpO1xyXG4gICAgICAgIC8vIG1hcmsgdi1zaG93XHJcbiAgICAgICAgLy8gc28gdGhhdCB0aGUgdHJhbnNpdGlvbiBtb2R1bGUgY2FuIGhhbmQgb3ZlciB0aGUgY29udHJvbCB0byB0aGUgZGlyZWN0aXZlXHJcbiAgICAgICAgaWYgKGNoaWxkLmRhdGEuZGlyZWN0aXZlcyAmJiBjaGlsZC5kYXRhLmRpcmVjdGl2ZXMuc29tZShpc1ZTaG93RGlyZWN0aXZlKSkge1xyXG4gICAgICAgICAgICBjaGlsZC5kYXRhLnNob3cgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAob2xkQ2hpbGQgJiZcclxuICAgICAgICAgICAgb2xkQ2hpbGQuZGF0YSAmJlxyXG4gICAgICAgICAgICAhaXNTYW1lQ2hpbGQoY2hpbGQsIG9sZENoaWxkKSAmJlxyXG4gICAgICAgICAgICAhaXNBc3luY1BsYWNlaG9sZGVyKG9sZENoaWxkKSAmJlxyXG4gICAgICAgICAgICAvLyAjNjY4NyBjb21wb25lbnQgcm9vdCBpcyBhIGNvbW1lbnQgbm9kZVxyXG4gICAgICAgICAgICAhKG9sZENoaWxkLmNvbXBvbmVudEluc3RhbmNlICYmXHJcbiAgICAgICAgICAgICAgICBvbGRDaGlsZC5jb21wb25lbnRJbnN0YW5jZS5fdm5vZGUuaXNDb21tZW50KSkge1xyXG4gICAgICAgICAgICAvLyByZXBsYWNlIG9sZCBjaGlsZCB0cmFuc2l0aW9uIGRhdGEgd2l0aCBmcmVzaCBvbmVcclxuICAgICAgICAgICAgLy8gaW1wb3J0YW50IGZvciBkeW5hbWljIHRyYW5zaXRpb25zIVxyXG4gICAgICAgICAgICB2YXIgb2xkRGF0YSA9IChvbGRDaGlsZC5kYXRhLnRyYW5zaXRpb24gPSBleHRlbmQoe30sIGRhdGEpKTtcclxuICAgICAgICAgICAgLy8gaGFuZGxlIHRyYW5zaXRpb24gbW9kZVxyXG4gICAgICAgICAgICBpZiAobW9kZSA9PT0gJ291dC1pbicpIHtcclxuICAgICAgICAgICAgICAgIC8vIHJldHVybiBwbGFjZWhvbGRlciBub2RlIGFuZCBxdWV1ZSB1cGRhdGUgd2hlbiBsZWF2ZSBmaW5pc2hlc1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbGVhdmluZyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBtZXJnZVZOb2RlSG9vayhvbGREYXRhLCAnYWZ0ZXJMZWF2ZScsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICBfdGhpcy5fbGVhdmluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIF90aGlzLiRmb3JjZVVwZGF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcGxhY2Vob2xkZXIoaCwgcmF3Q2hpbGQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKG1vZGUgPT09ICdpbi1vdXQnKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNBc3luY1BsYWNlaG9sZGVyKGNoaWxkKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvbGRSYXdDaGlsZDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHZhciBkZWxheWVkTGVhdmVfMTtcclxuICAgICAgICAgICAgICAgIHZhciBwZXJmb3JtTGVhdmUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVsYXllZExlYXZlXzEoKTtcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICBtZXJnZVZOb2RlSG9vayhkYXRhLCAnYWZ0ZXJFbnRlcicsIHBlcmZvcm1MZWF2ZSk7XHJcbiAgICAgICAgICAgICAgICBtZXJnZVZOb2RlSG9vayhkYXRhLCAnZW50ZXJDYW5jZWxsZWQnLCBwZXJmb3JtTGVhdmUpO1xyXG4gICAgICAgICAgICAgICAgbWVyZ2VWTm9kZUhvb2sob2xkRGF0YSwgJ2RlbGF5TGVhdmUnLCBmdW5jdGlvbiAobGVhdmUpIHtcclxuICAgICAgICAgICAgICAgICAgICBkZWxheWVkTGVhdmVfMSA9IGxlYXZlO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJhd0NoaWxkO1xyXG4gICAgfVxyXG59O1xuXG4vLyBQcm92aWRlcyB0cmFuc2l0aW9uIHN1cHBvcnQgZm9yIGxpc3QgaXRlbXMuXHJcbnZhciBwcm9wcyA9IGV4dGVuZCh7XHJcbiAgICB0YWc6IFN0cmluZyxcclxuICAgIG1vdmVDbGFzczogU3RyaW5nXHJcbn0sIHRyYW5zaXRpb25Qcm9wcyk7XHJcbmRlbGV0ZSBwcm9wcy5tb2RlO1xyXG52YXIgVHJhbnNpdGlvbkdyb3VwID0ge1xyXG4gICAgcHJvcHM6IHByb3BzLFxyXG4gICAgYmVmb3JlTW91bnQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIHZhciB1cGRhdGUgPSB0aGlzLl91cGRhdGU7XHJcbiAgICAgICAgdGhpcy5fdXBkYXRlID0gZnVuY3Rpb24gKHZub2RlLCBoeWRyYXRpbmcpIHtcclxuICAgICAgICAgICAgdmFyIHJlc3RvcmVBY3RpdmVJbnN0YW5jZSA9IHNldEFjdGl2ZUluc3RhbmNlKF90aGlzKTtcclxuICAgICAgICAgICAgLy8gZm9yY2UgcmVtb3ZpbmcgcGFzc1xyXG4gICAgICAgICAgICBfdGhpcy5fX3BhdGNoX18oX3RoaXMuX3Zub2RlLCBfdGhpcy5rZXB0LCBmYWxzZSwgLy8gaHlkcmF0aW5nXHJcbiAgICAgICAgICAgIHRydWUgLy8gcmVtb3ZlT25seSAoIWltcG9ydGFudCwgYXZvaWRzIHVubmVjZXNzYXJ5IG1vdmVzKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBfdGhpcy5fdm5vZGUgPSBfdGhpcy5rZXB0O1xyXG4gICAgICAgICAgICByZXN0b3JlQWN0aXZlSW5zdGFuY2UoKTtcclxuICAgICAgICAgICAgdXBkYXRlLmNhbGwoX3RoaXMsIHZub2RlLCBoeWRyYXRpbmcpO1xyXG4gICAgICAgIH07XHJcbiAgICB9LFxyXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAoaCkge1xyXG4gICAgICAgIHZhciB0YWcgPSB0aGlzLnRhZyB8fCB0aGlzLiR2bm9kZS5kYXRhLnRhZyB8fCAnc3Bhbic7XHJcbiAgICAgICAgdmFyIG1hcCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XHJcbiAgICAgICAgdmFyIHByZXZDaGlsZHJlbiA9ICh0aGlzLnByZXZDaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW4pO1xyXG4gICAgICAgIHZhciByYXdDaGlsZHJlbiA9IHRoaXMuJHNsb3RzLmRlZmF1bHQgfHwgW107XHJcbiAgICAgICAgdmFyIGNoaWxkcmVuID0gKHRoaXMuY2hpbGRyZW4gPSBbXSk7XHJcbiAgICAgICAgdmFyIHRyYW5zaXRpb25EYXRhID0gZXh0cmFjdFRyYW5zaXRpb25EYXRhKHRoaXMpO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmF3Q2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIGMgPSByYXdDaGlsZHJlbltpXTtcclxuICAgICAgICAgICAgaWYgKGMudGFnKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYy5rZXkgIT0gbnVsbCAmJiBTdHJpbmcoYy5rZXkpLmluZGV4T2YoJ19fdmxpc3QnKSAhPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goYyk7XHJcbiAgICAgICAgICAgICAgICAgICAgbWFwW2Mua2V5XSA9IGM7XHJcbiAgICAgICAgICAgICAgICAgICAgKGMuZGF0YSB8fCAoYy5kYXRhID0ge30pKS50cmFuc2l0aW9uID0gdHJhbnNpdGlvbkRhdGE7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIG9wdHMgPSBjLmNvbXBvbmVudE9wdGlvbnM7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5hbWVfMSA9IG9wdHNcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyBnZXRDb21wb25lbnROYW1lKG9wdHMuQ3Rvci5vcHRpb25zKSB8fCBvcHRzLnRhZyB8fCAnJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGMudGFnO1xyXG4gICAgICAgICAgICAgICAgICAgIHdhcm4kMihcIjx0cmFuc2l0aW9uLWdyb3VwPiBjaGlsZHJlbiBtdXN0IGJlIGtleWVkOiA8XCIuY29uY2F0KG5hbWVfMSwgXCI+XCIpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocHJldkNoaWxkcmVuKSB7XHJcbiAgICAgICAgICAgIHZhciBrZXB0ID0gW107XHJcbiAgICAgICAgICAgIHZhciByZW1vdmVkID0gW107XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJldkNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgYyA9IHByZXZDaGlsZHJlbltpXTtcclxuICAgICAgICAgICAgICAgIGMuZGF0YS50cmFuc2l0aW9uID0gdHJhbnNpdGlvbkRhdGE7XHJcbiAgICAgICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC5nZXRCb3VuZGluZ0NsaWVudFJlY3QgaXMgbm90IHR5cGVkIGluIE5vZGVcclxuICAgICAgICAgICAgICAgIGMuZGF0YS5wb3MgPSBjLmVsbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgICAgICAgICAgICAgIGlmIChtYXBbYy5rZXldKSB7XHJcbiAgICAgICAgICAgICAgICAgICAga2VwdC5wdXNoKGMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZC5wdXNoKGMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMua2VwdCA9IGgodGFnLCBudWxsLCBrZXB0KTtcclxuICAgICAgICAgICAgdGhpcy5yZW1vdmVkID0gcmVtb3ZlZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGgodGFnLCBudWxsLCBjaGlsZHJlbik7XHJcbiAgICB9LFxyXG4gICAgdXBkYXRlZDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBjaGlsZHJlbiA9IHRoaXMucHJldkNoaWxkcmVuO1xyXG4gICAgICAgIHZhciBtb3ZlQ2xhc3MgPSB0aGlzLm1vdmVDbGFzcyB8fCAodGhpcy5uYW1lIHx8ICd2JykgKyAnLW1vdmUnO1xyXG4gICAgICAgIGlmICghY2hpbGRyZW4ubGVuZ3RoIHx8ICF0aGlzLmhhc01vdmUoY2hpbGRyZW5bMF0uZWxtLCBtb3ZlQ2xhc3MpKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gd2UgZGl2aWRlIHRoZSB3b3JrIGludG8gdGhyZWUgbG9vcHMgdG8gYXZvaWQgbWl4aW5nIERPTSByZWFkcyBhbmQgd3JpdGVzXHJcbiAgICAgICAgLy8gaW4gZWFjaCBpdGVyYXRpb24gLSB3aGljaCBoZWxwcyBwcmV2ZW50IGxheW91dCB0aHJhc2hpbmcuXHJcbiAgICAgICAgY2hpbGRyZW4uZm9yRWFjaChjYWxsUGVuZGluZ0Nicyk7XHJcbiAgICAgICAgY2hpbGRyZW4uZm9yRWFjaChyZWNvcmRQb3NpdGlvbik7XHJcbiAgICAgICAgY2hpbGRyZW4uZm9yRWFjaChhcHBseVRyYW5zbGF0aW9uKTtcclxuICAgICAgICAvLyBmb3JjZSByZWZsb3cgdG8gcHV0IGV2ZXJ5dGhpbmcgaW4gcG9zaXRpb25cclxuICAgICAgICAvLyBhc3NpZ24gdG8gdGhpcyB0byBhdm9pZCBiZWluZyByZW1vdmVkIGluIHRyZWUtc2hha2luZ1xyXG4gICAgICAgIC8vICRmbG93LWRpc2FibGUtbGluZVxyXG4gICAgICAgIHRoaXMuX3JlZmxvdyA9IGRvY3VtZW50LmJvZHkub2Zmc2V0SGVpZ2h0O1xyXG4gICAgICAgIGNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24gKGMpIHtcclxuICAgICAgICAgICAgaWYgKGMuZGF0YS5tb3ZlZCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGVsXzEgPSBjLmVsbTtcclxuICAgICAgICAgICAgICAgIHZhciBzID0gZWxfMS5zdHlsZTtcclxuICAgICAgICAgICAgICAgIGFkZFRyYW5zaXRpb25DbGFzcyhlbF8xLCBtb3ZlQ2xhc3MpO1xyXG4gICAgICAgICAgICAgICAgcy50cmFuc2Zvcm0gPSBzLldlYmtpdFRyYW5zZm9ybSA9IHMudHJhbnNpdGlvbkR1cmF0aW9uID0gJyc7XHJcbiAgICAgICAgICAgICAgICBlbF8xLmFkZEV2ZW50TGlzdGVuZXIodHJhbnNpdGlvbkVuZEV2ZW50LCAoZWxfMS5fbW92ZUNiID0gZnVuY3Rpb24gY2IoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlICYmIGUudGFyZ2V0ICE9PSBlbF8xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFlIHx8IC90cmFuc2Zvcm0kLy50ZXN0KGUucHJvcGVydHlOYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbF8xLnJlbW92ZUV2ZW50TGlzdGVuZXIodHJhbnNpdGlvbkVuZEV2ZW50LCBjYik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsXzEuX21vdmVDYiA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZVRyYW5zaXRpb25DbGFzcyhlbF8xLCBtb3ZlQ2xhc3MpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfSxcclxuICAgIG1ldGhvZHM6IHtcclxuICAgICAgICBoYXNNb3ZlOiBmdW5jdGlvbiAoZWwsIG1vdmVDbGFzcykge1xyXG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cclxuICAgICAgICAgICAgaWYgKCFoYXNUcmFuc2l0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9oYXNNb3ZlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5faGFzTW92ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBEZXRlY3Qgd2hldGhlciBhbiBlbGVtZW50IHdpdGggdGhlIG1vdmUgY2xhc3MgYXBwbGllZCBoYXNcclxuICAgICAgICAgICAgLy8gQ1NTIHRyYW5zaXRpb25zLiBTaW5jZSB0aGUgZWxlbWVudCBtYXkgYmUgaW5zaWRlIGFuIGVudGVyaW5nXHJcbiAgICAgICAgICAgIC8vIHRyYW5zaXRpb24gYXQgdGhpcyB2ZXJ5IG1vbWVudCwgd2UgbWFrZSBhIGNsb25lIG9mIGl0IGFuZCByZW1vdmVcclxuICAgICAgICAgICAgLy8gYWxsIG90aGVyIHRyYW5zaXRpb24gY2xhc3NlcyBhcHBsaWVkIHRvIGVuc3VyZSBvbmx5IHRoZSBtb3ZlIGNsYXNzXHJcbiAgICAgICAgICAgIC8vIGlzIGFwcGxpZWQuXHJcbiAgICAgICAgICAgIHZhciBjbG9uZSA9IGVsLmNsb25lTm9kZSgpO1xyXG4gICAgICAgICAgICBpZiAoZWwuX3RyYW5zaXRpb25DbGFzc2VzKSB7XHJcbiAgICAgICAgICAgICAgICBlbC5fdHJhbnNpdGlvbkNsYXNzZXMuZm9yRWFjaChmdW5jdGlvbiAoY2xzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQ2xhc3MoY2xvbmUsIGNscyk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBhZGRDbGFzcyhjbG9uZSwgbW92ZUNsYXNzKTtcclxuICAgICAgICAgICAgY2xvbmUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgdGhpcy4kZWwuYXBwZW5kQ2hpbGQoY2xvbmUpO1xyXG4gICAgICAgICAgICB2YXIgaW5mbyA9IGdldFRyYW5zaXRpb25JbmZvKGNsb25lKTtcclxuICAgICAgICAgICAgdGhpcy4kZWwucmVtb3ZlQ2hpbGQoY2xvbmUpO1xyXG4gICAgICAgICAgICByZXR1cm4gKHRoaXMuX2hhc01vdmUgPSBpbmZvLmhhc1RyYW5zZm9ybSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59O1xyXG5mdW5jdGlvbiBjYWxsUGVuZGluZ0NicyhjKSB7XHJcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cclxuICAgIGlmIChjLmVsbS5fbW92ZUNiKSB7XHJcbiAgICAgICAgYy5lbG0uX21vdmVDYigpO1xyXG4gICAgfVxyXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXHJcbiAgICBpZiAoYy5lbG0uX2VudGVyQ2IpIHtcclxuICAgICAgICBjLmVsbS5fZW50ZXJDYigpO1xyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIHJlY29yZFBvc2l0aW9uKGMpIHtcclxuICAgIGMuZGF0YS5uZXdQb3MgPSBjLmVsbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxufVxyXG5mdW5jdGlvbiBhcHBseVRyYW5zbGF0aW9uKGMpIHtcclxuICAgIHZhciBvbGRQb3MgPSBjLmRhdGEucG9zO1xyXG4gICAgdmFyIG5ld1BvcyA9IGMuZGF0YS5uZXdQb3M7XHJcbiAgICB2YXIgZHggPSBvbGRQb3MubGVmdCAtIG5ld1Bvcy5sZWZ0O1xyXG4gICAgdmFyIGR5ID0gb2xkUG9zLnRvcCAtIG5ld1Bvcy50b3A7XHJcbiAgICBpZiAoZHggfHwgZHkpIHtcclxuICAgICAgICBjLmRhdGEubW92ZWQgPSB0cnVlO1xyXG4gICAgICAgIHZhciBzID0gYy5lbG0uc3R5bGU7XHJcbiAgICAgICAgcy50cmFuc2Zvcm0gPSBzLldlYmtpdFRyYW5zZm9ybSA9IFwidHJhbnNsYXRlKFwiLmNvbmNhdChkeCwgXCJweCxcIikuY29uY2F0KGR5LCBcInB4KVwiKTtcclxuICAgICAgICBzLnRyYW5zaXRpb25EdXJhdGlvbiA9ICcwcyc7XHJcbiAgICB9XHJcbn1cblxudmFyIHBsYXRmb3JtQ29tcG9uZW50cyA9IHtcclxuICAgIFRyYW5zaXRpb246IFRyYW5zaXRpb24sXHJcbiAgICBUcmFuc2l0aW9uR3JvdXA6IFRyYW5zaXRpb25Hcm91cFxyXG59O1xuXG4vLyBpbnN0YWxsIHBsYXRmb3JtIHNwZWNpZmljIHV0aWxzXHJcblZ1ZS5jb25maWcubXVzdFVzZVByb3AgPSBtdXN0VXNlUHJvcDtcclxuVnVlLmNvbmZpZy5pc1Jlc2VydmVkVGFnID0gaXNSZXNlcnZlZFRhZztcclxuVnVlLmNvbmZpZy5pc1Jlc2VydmVkQXR0ciA9IGlzUmVzZXJ2ZWRBdHRyO1xyXG5WdWUuY29uZmlnLmdldFRhZ05hbWVzcGFjZSA9IGdldFRhZ05hbWVzcGFjZTtcclxuVnVlLmNvbmZpZy5pc1Vua25vd25FbGVtZW50ID0gaXNVbmtub3duRWxlbWVudDtcclxuLy8gaW5zdGFsbCBwbGF0Zm9ybSBydW50aW1lIGRpcmVjdGl2ZXMgJiBjb21wb25lbnRzXHJcbmV4dGVuZChWdWUub3B0aW9ucy5kaXJlY3RpdmVzLCBwbGF0Zm9ybURpcmVjdGl2ZXMpO1xyXG5leHRlbmQoVnVlLm9wdGlvbnMuY29tcG9uZW50cywgcGxhdGZvcm1Db21wb25lbnRzKTtcclxuLy8gaW5zdGFsbCBwbGF0Zm9ybSBwYXRjaCBmdW5jdGlvblxyXG5WdWUucHJvdG90eXBlLl9fcGF0Y2hfXyA9IGluQnJvd3NlciA/IHBhdGNoIDogbm9vcDtcclxuLy8gcHVibGljIG1vdW50IG1ldGhvZFxyXG5WdWUucHJvdG90eXBlLiRtb3VudCA9IGZ1bmN0aW9uIChlbCwgaHlkcmF0aW5nKSB7XHJcbiAgICBlbCA9IGVsICYmIGluQnJvd3NlciA/IHF1ZXJ5KGVsKSA6IHVuZGVmaW5lZDtcclxuICAgIHJldHVybiBtb3VudENvbXBvbmVudCh0aGlzLCBlbCwgaHlkcmF0aW5nKTtcclxufTtcclxuLy8gZGV2dG9vbHMgZ2xvYmFsIGhvb2tcclxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cclxuaWYgKGluQnJvd3Nlcikge1xyXG4gICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKGNvbmZpZy5kZXZ0b29scykge1xyXG4gICAgICAgICAgICBpZiAoZGV2dG9vbHMpIHtcclxuICAgICAgICAgICAgICAgIGRldnRvb2xzLmVtaXQoJ2luaXQnLCBWdWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICd0ZXN0Jykge1xyXG4gICAgICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxyXG4gICAgICAgICAgICAgICAgY29uc29sZVtjb25zb2xlLmluZm8gPyAnaW5mbycgOiAnbG9nJ10oJ0Rvd25sb2FkIHRoZSBWdWUgRGV2dG9vbHMgZXh0ZW5zaW9uIGZvciBhIGJldHRlciBkZXZlbG9wbWVudCBleHBlcmllbmNlOlxcbicgK1xyXG4gICAgICAgICAgICAgICAgICAgICdodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlLWRldnRvb2xzJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiZcclxuICAgICAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICd0ZXN0JyAmJlxyXG4gICAgICAgICAgICBjb25maWcucHJvZHVjdGlvblRpcCAhPT0gZmFsc2UgJiZcclxuICAgICAgICAgICAgdHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcclxuICAgICAgICAgICAgY29uc29sZVtjb25zb2xlLmluZm8gPyAnaW5mbycgOiAnbG9nJ10oXCJZb3UgYXJlIHJ1bm5pbmcgVnVlIGluIGRldmVsb3BtZW50IG1vZGUuXFxuXCIgK1xyXG4gICAgICAgICAgICAgICAgXCJNYWtlIHN1cmUgdG8gdHVybiBvbiBwcm9kdWN0aW9uIG1vZGUgd2hlbiBkZXBsb3lpbmcgZm9yIHByb2R1Y3Rpb24uXFxuXCIgK1xyXG4gICAgICAgICAgICAgICAgXCJTZWUgbW9yZSB0aXBzIGF0IGh0dHBzOi8vdnVlanMub3JnL2d1aWRlL2RlcGxveW1lbnQuaHRtbFwiKTtcclxuICAgICAgICB9XHJcbiAgICB9LCAwKTtcclxufVxuXG52YXIgZGVmYXVsdFRhZ1JFID0gL1xce1xceygoPzoufFxccj9cXG4pKz8pXFx9XFx9L2c7XHJcbnZhciByZWdleEVzY2FwZVJFID0gL1stLiorP14ke30oKXxbXFxdXFwvXFxcXF0vZztcclxudmFyIGJ1aWxkUmVnZXggPSBjYWNoZWQoZnVuY3Rpb24gKGRlbGltaXRlcnMpIHtcclxuICAgIHZhciBvcGVuID0gZGVsaW1pdGVyc1swXS5yZXBsYWNlKHJlZ2V4RXNjYXBlUkUsICdcXFxcJCYnKTtcclxuICAgIHZhciBjbG9zZSA9IGRlbGltaXRlcnNbMV0ucmVwbGFjZShyZWdleEVzY2FwZVJFLCAnXFxcXCQmJyk7XHJcbiAgICByZXR1cm4gbmV3IFJlZ0V4cChvcGVuICsgJygoPzoufFxcXFxuKSs/KScgKyBjbG9zZSwgJ2cnKTtcclxufSk7XHJcbmZ1bmN0aW9uIHBhcnNlVGV4dCh0ZXh0LCBkZWxpbWl0ZXJzKSB7XHJcbiAgICAvL0B0cy1leHBlY3QtZXJyb3JcclxuICAgIHZhciB0YWdSRSA9IGRlbGltaXRlcnMgPyBidWlsZFJlZ2V4KGRlbGltaXRlcnMpIDogZGVmYXVsdFRhZ1JFO1xyXG4gICAgaWYgKCF0YWdSRS50ZXN0KHRleHQpKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdmFyIHRva2VucyA9IFtdO1xyXG4gICAgdmFyIHJhd1Rva2VucyA9IFtdO1xyXG4gICAgdmFyIGxhc3RJbmRleCA9ICh0YWdSRS5sYXN0SW5kZXggPSAwKTtcclxuICAgIHZhciBtYXRjaCwgaW5kZXgsIHRva2VuVmFsdWU7XHJcbiAgICB3aGlsZSAoKG1hdGNoID0gdGFnUkUuZXhlYyh0ZXh0KSkpIHtcclxuICAgICAgICBpbmRleCA9IG1hdGNoLmluZGV4O1xyXG4gICAgICAgIC8vIHB1c2ggdGV4dCB0b2tlblxyXG4gICAgICAgIGlmIChpbmRleCA+IGxhc3RJbmRleCkge1xyXG4gICAgICAgICAgICByYXdUb2tlbnMucHVzaCgodG9rZW5WYWx1ZSA9IHRleHQuc2xpY2UobGFzdEluZGV4LCBpbmRleCkpKTtcclxuICAgICAgICAgICAgdG9rZW5zLnB1c2goSlNPTi5zdHJpbmdpZnkodG9rZW5WYWx1ZSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyB0YWcgdG9rZW5cclxuICAgICAgICB2YXIgZXhwID0gcGFyc2VGaWx0ZXJzKG1hdGNoWzFdLnRyaW0oKSk7XHJcbiAgICAgICAgdG9rZW5zLnB1c2goXCJfcyhcIi5jb25jYXQoZXhwLCBcIilcIikpO1xyXG4gICAgICAgIHJhd1Rva2Vucy5wdXNoKHsgJ0BiaW5kaW5nJzogZXhwIH0pO1xyXG4gICAgICAgIGxhc3RJbmRleCA9IGluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoO1xyXG4gICAgfVxyXG4gICAgaWYgKGxhc3RJbmRleCA8IHRleHQubGVuZ3RoKSB7XHJcbiAgICAgICAgcmF3VG9rZW5zLnB1c2goKHRva2VuVmFsdWUgPSB0ZXh0LnNsaWNlKGxhc3RJbmRleCkpKTtcclxuICAgICAgICB0b2tlbnMucHVzaChKU09OLnN0cmluZ2lmeSh0b2tlblZhbHVlKSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIGV4cHJlc3Npb246IHRva2Vucy5qb2luKCcrJyksXHJcbiAgICAgICAgdG9rZW5zOiByYXdUb2tlbnNcclxuICAgIH07XHJcbn1cblxuZnVuY3Rpb24gdHJhbnNmb3JtTm9kZSQxKGVsLCBvcHRpb25zKSB7XHJcbiAgICB2YXIgd2FybiA9IG9wdGlvbnMud2FybiB8fCBiYXNlV2FybjtcclxuICAgIHZhciBzdGF0aWNDbGFzcyA9IGdldEFuZFJlbW92ZUF0dHIoZWwsICdjbGFzcycpO1xyXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgc3RhdGljQ2xhc3MpIHtcclxuICAgICAgICB2YXIgcmVzID0gcGFyc2VUZXh0KHN0YXRpY0NsYXNzLCBvcHRpb25zLmRlbGltaXRlcnMpO1xyXG4gICAgICAgIGlmIChyZXMpIHtcclxuICAgICAgICAgICAgd2FybihcImNsYXNzPVxcXCJcIi5jb25jYXQoc3RhdGljQ2xhc3MsIFwiXFxcIjogXCIpICtcclxuICAgICAgICAgICAgICAgICdJbnRlcnBvbGF0aW9uIGluc2lkZSBhdHRyaWJ1dGVzIGhhcyBiZWVuIHJlbW92ZWQuICcgK1xyXG4gICAgICAgICAgICAgICAgJ1VzZSB2LWJpbmQgb3IgdGhlIGNvbG9uIHNob3J0aGFuZCBpbnN0ZWFkLiBGb3IgZXhhbXBsZSwgJyArXHJcbiAgICAgICAgICAgICAgICAnaW5zdGVhZCBvZiA8ZGl2IGNsYXNzPVwie3sgdmFsIH19XCI+LCB1c2UgPGRpdiA6Y2xhc3M9XCJ2YWxcIj4uJywgZWwucmF3QXR0cnNNYXBbJ2NsYXNzJ10pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChzdGF0aWNDbGFzcykge1xyXG4gICAgICAgIGVsLnN0YXRpY0NsYXNzID0gSlNPTi5zdHJpbmdpZnkoc3RhdGljQ2xhc3MucmVwbGFjZSgvXFxzKy9nLCAnICcpLnRyaW0oKSk7XHJcbiAgICB9XHJcbiAgICB2YXIgY2xhc3NCaW5kaW5nID0gZ2V0QmluZGluZ0F0dHIoZWwsICdjbGFzcycsIGZhbHNlIC8qIGdldFN0YXRpYyAqLyk7XHJcbiAgICBpZiAoY2xhc3NCaW5kaW5nKSB7XHJcbiAgICAgICAgZWwuY2xhc3NCaW5kaW5nID0gY2xhc3NCaW5kaW5nO1xyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIGdlbkRhdGEkMihlbCkge1xyXG4gICAgdmFyIGRhdGEgPSAnJztcclxuICAgIGlmIChlbC5zdGF0aWNDbGFzcykge1xyXG4gICAgICAgIGRhdGEgKz0gXCJzdGF0aWNDbGFzczpcIi5jb25jYXQoZWwuc3RhdGljQ2xhc3MsIFwiLFwiKTtcclxuICAgIH1cclxuICAgIGlmIChlbC5jbGFzc0JpbmRpbmcpIHtcclxuICAgICAgICBkYXRhICs9IFwiY2xhc3M6XCIuY29uY2F0KGVsLmNsYXNzQmluZGluZywgXCIsXCIpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRhdGE7XHJcbn1cclxudmFyIGtsYXNzID0ge1xyXG4gICAgc3RhdGljS2V5czogWydzdGF0aWNDbGFzcyddLFxyXG4gICAgdHJhbnNmb3JtTm9kZTogdHJhbnNmb3JtTm9kZSQxLFxyXG4gICAgZ2VuRGF0YTogZ2VuRGF0YSQyXHJcbn07XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybU5vZGUoZWwsIG9wdGlvbnMpIHtcclxuICAgIHZhciB3YXJuID0gb3B0aW9ucy53YXJuIHx8IGJhc2VXYXJuO1xyXG4gICAgdmFyIHN0YXRpY1N0eWxlID0gZ2V0QW5kUmVtb3ZlQXR0cihlbCwgJ3N0eWxlJyk7XHJcbiAgICBpZiAoc3RhdGljU3R5bGUpIHtcclxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cclxuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xyXG4gICAgICAgICAgICB2YXIgcmVzID0gcGFyc2VUZXh0KHN0YXRpY1N0eWxlLCBvcHRpb25zLmRlbGltaXRlcnMpO1xyXG4gICAgICAgICAgICBpZiAocmVzKSB7XHJcbiAgICAgICAgICAgICAgICB3YXJuKFwic3R5bGU9XFxcIlwiLmNvbmNhdChzdGF0aWNTdHlsZSwgXCJcXFwiOiBcIikgK1xyXG4gICAgICAgICAgICAgICAgICAgICdJbnRlcnBvbGF0aW9uIGluc2lkZSBhdHRyaWJ1dGVzIGhhcyBiZWVuIHJlbW92ZWQuICcgK1xyXG4gICAgICAgICAgICAgICAgICAgICdVc2Ugdi1iaW5kIG9yIHRoZSBjb2xvbiBzaG9ydGhhbmQgaW5zdGVhZC4gRm9yIGV4YW1wbGUsICcgK1xyXG4gICAgICAgICAgICAgICAgICAgICdpbnN0ZWFkIG9mIDxkaXYgc3R5bGU9XCJ7eyB2YWwgfX1cIj4sIHVzZSA8ZGl2IDpzdHlsZT1cInZhbFwiPi4nLCBlbC5yYXdBdHRyc01hcFsnc3R5bGUnXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWwuc3RhdGljU3R5bGUgPSBKU09OLnN0cmluZ2lmeShwYXJzZVN0eWxlVGV4dChzdGF0aWNTdHlsZSkpO1xyXG4gICAgfVxyXG4gICAgdmFyIHN0eWxlQmluZGluZyA9IGdldEJpbmRpbmdBdHRyKGVsLCAnc3R5bGUnLCBmYWxzZSAvKiBnZXRTdGF0aWMgKi8pO1xyXG4gICAgaWYgKHN0eWxlQmluZGluZykge1xyXG4gICAgICAgIGVsLnN0eWxlQmluZGluZyA9IHN0eWxlQmluZGluZztcclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBnZW5EYXRhJDEoZWwpIHtcclxuICAgIHZhciBkYXRhID0gJyc7XHJcbiAgICBpZiAoZWwuc3RhdGljU3R5bGUpIHtcclxuICAgICAgICBkYXRhICs9IFwic3RhdGljU3R5bGU6XCIuY29uY2F0KGVsLnN0YXRpY1N0eWxlLCBcIixcIik7XHJcbiAgICB9XHJcbiAgICBpZiAoZWwuc3R5bGVCaW5kaW5nKSB7XHJcbiAgICAgICAgZGF0YSArPSBcInN0eWxlOihcIi5jb25jYXQoZWwuc3R5bGVCaW5kaW5nLCBcIiksXCIpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRhdGE7XHJcbn1cclxudmFyIHN0eWxlID0ge1xyXG4gICAgc3RhdGljS2V5czogWydzdGF0aWNTdHlsZSddLFxyXG4gICAgdHJhbnNmb3JtTm9kZTogdHJhbnNmb3JtTm9kZSxcclxuICAgIGdlbkRhdGE6IGdlbkRhdGEkMVxyXG59O1xuXG52YXIgZGVjb2RlcjtcclxudmFyIGhlID0ge1xyXG4gICAgZGVjb2RlOiBmdW5jdGlvbiAoaHRtbCkge1xyXG4gICAgICAgIGRlY29kZXIgPSBkZWNvZGVyIHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgICAgIGRlY29kZXIuaW5uZXJIVE1MID0gaHRtbDtcclxuICAgICAgICByZXR1cm4gZGVjb2Rlci50ZXh0Q29udGVudDtcclxuICAgIH1cclxufTtcblxudmFyIGlzVW5hcnlUYWcgPSBtYWtlTWFwKCdhcmVhLGJhc2UsYnIsY29sLGVtYmVkLGZyYW1lLGhyLGltZyxpbnB1dCxpc2luZGV4LGtleWdlbiwnICtcclxuICAgICdsaW5rLG1ldGEscGFyYW0sc291cmNlLHRyYWNrLHdicicpO1xyXG4vLyBFbGVtZW50cyB0aGF0IHlvdSBjYW4sIGludGVudGlvbmFsbHksIGxlYXZlIG9wZW5cclxuLy8gKGFuZCB3aGljaCBjbG9zZSB0aGVtc2VsdmVzKVxyXG52YXIgY2FuQmVMZWZ0T3BlblRhZyA9IG1ha2VNYXAoJ2NvbGdyb3VwLGRkLGR0LGxpLG9wdGlvbnMscCx0ZCx0Zm9vdCx0aCx0aGVhZCx0cixzb3VyY2UnKTtcclxuLy8gSFRNTDUgdGFncyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9pbmRpY2VzLmh0bWwjZWxlbWVudHMtM1xyXG4vLyBQaHJhc2luZyBDb250ZW50IGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2RvbS5odG1sI3BocmFzaW5nLWNvbnRlbnRcclxudmFyIGlzTm9uUGhyYXNpbmdUYWcgPSBtYWtlTWFwKCdhZGRyZXNzLGFydGljbGUsYXNpZGUsYmFzZSxibG9ja3F1b3RlLGJvZHksY2FwdGlvbixjb2wsY29sZ3JvdXAsZGQsJyArXHJcbiAgICAnZGV0YWlscyxkaWFsb2csZGl2LGRsLGR0LGZpZWxkc2V0LGZpZ2NhcHRpb24sZmlndXJlLGZvb3Rlcixmb3JtLCcgK1xyXG4gICAgJ2gxLGgyLGgzLGg0LGg1LGg2LGhlYWQsaGVhZGVyLGhncm91cCxocixodG1sLGxlZ2VuZCxsaSxtZW51aXRlbSxtZXRhLCcgK1xyXG4gICAgJ29wdGdyb3VwLG9wdGlvbixwYXJhbSxycCxydCxzb3VyY2Usc3R5bGUsc3VtbWFyeSx0Ym9keSx0ZCx0Zm9vdCx0aCx0aGVhZCwnICtcclxuICAgICd0aXRsZSx0cix0cmFjaycpO1xuXG4vKipcclxuICogTm90IHR5cGUtY2hlY2tpbmcgdGhpcyBmaWxlIGJlY2F1c2UgaXQncyBtb3N0bHkgdmVuZG9yIGNvZGUuXHJcbiAqL1xyXG4vLyBSZWd1bGFyIEV4cHJlc3Npb25zIGZvciBwYXJzaW5nIHRhZ3MgYW5kIGF0dHJpYnV0ZXNcclxudmFyIGF0dHJpYnV0ZSA9IC9eXFxzKihbXlxcc1wiJzw+XFwvPV0rKSg/OlxccyooPSlcXHMqKD86XCIoW15cIl0qKVwiK3wnKFteJ10qKScrfChbXlxcc1wiJz08PmBdKykpKT8vO1xyXG52YXIgZHluYW1pY0FyZ0F0dHJpYnV0ZSA9IC9eXFxzKigoPzp2LVtcXHctXSs6fEB8OnwjKVxcW1tePV0rP1xcXVteXFxzXCInPD5cXC89XSopKD86XFxzKig9KVxccyooPzpcIihbXlwiXSopXCIrfCcoW14nXSopJyt8KFteXFxzXCInPTw+YF0rKSkpPy87XHJcbnZhciBuY25hbWUgPSBcIlthLXpBLVpfXVtcXFxcLVxcXFwuMC05X2EtekEtWlwiLmNvbmNhdCh1bmljb2RlUmVnRXhwLnNvdXJjZSwgXCJdKlwiKTtcclxudmFyIHFuYW1lQ2FwdHVyZSA9IFwiKCg/OlwiLmNvbmNhdChuY25hbWUsIFwiXFxcXDopP1wiKS5jb25jYXQobmNuYW1lLCBcIilcIik7XHJcbnZhciBzdGFydFRhZ09wZW4gPSBuZXcgUmVnRXhwKFwiXjxcIi5jb25jYXQocW5hbWVDYXB0dXJlKSk7XHJcbnZhciBzdGFydFRhZ0Nsb3NlID0gL15cXHMqKFxcLz8pPi87XHJcbnZhciBlbmRUYWcgPSBuZXcgUmVnRXhwKFwiXjxcXFxcL1wiLmNvbmNhdChxbmFtZUNhcHR1cmUsIFwiW14+XSo+XCIpKTtcclxudmFyIGRvY3R5cGUgPSAvXjwhRE9DVFlQRSBbXj5dKz4vaTtcclxuLy8gIzcyOTg6IGVzY2FwZSAtIHRvIGF2b2lkIGJlaW5nIHBhc3NlZCBhcyBIVE1MIGNvbW1lbnQgd2hlbiBpbmxpbmVkIGluIHBhZ2VcclxudmFyIGNvbW1lbnQgPSAvXjwhXFwtLS87XHJcbnZhciBjb25kaXRpb25hbENvbW1lbnQgPSAvXjwhXFxbLztcclxuLy8gU3BlY2lhbCBFbGVtZW50cyAoY2FuIGNvbnRhaW4gYW55dGhpbmcpXHJcbnZhciBpc1BsYWluVGV4dEVsZW1lbnQgPSBtYWtlTWFwKCdzY3JpcHQsc3R5bGUsdGV4dGFyZWEnLCB0cnVlKTtcclxudmFyIHJlQ2FjaGUgPSB7fTtcclxudmFyIGRlY29kaW5nTWFwID0ge1xyXG4gICAgJyZsdDsnOiAnPCcsXHJcbiAgICAnJmd0Oyc6ICc+JyxcclxuICAgICcmcXVvdDsnOiAnXCInLFxyXG4gICAgJyZhbXA7JzogJyYnLFxyXG4gICAgJyYjMTA7JzogJ1xcbicsXHJcbiAgICAnJiM5Oyc6ICdcXHQnLFxyXG4gICAgJyYjMzk7JzogXCInXCJcclxufTtcclxudmFyIGVuY29kZWRBdHRyID0gLyYoPzpsdHxndHxxdW90fGFtcHwjMzkpOy9nO1xyXG52YXIgZW5jb2RlZEF0dHJXaXRoTmV3TGluZXMgPSAvJig/Omx0fGd0fHF1b3R8YW1wfCMzOXwjMTB8IzkpOy9nO1xyXG4vLyAjNTk5MlxyXG52YXIgaXNJZ25vcmVOZXdsaW5lVGFnID0gbWFrZU1hcCgncHJlLHRleHRhcmVhJywgdHJ1ZSk7XHJcbnZhciBzaG91bGRJZ25vcmVGaXJzdE5ld2xpbmUgPSBmdW5jdGlvbiAodGFnLCBodG1sKSB7XHJcbiAgICByZXR1cm4gdGFnICYmIGlzSWdub3JlTmV3bGluZVRhZyh0YWcpICYmIGh0bWxbMF0gPT09ICdcXG4nO1xyXG59O1xyXG5mdW5jdGlvbiBkZWNvZGVBdHRyKHZhbHVlLCBzaG91bGREZWNvZGVOZXdsaW5lcykge1xyXG4gICAgdmFyIHJlID0gc2hvdWxkRGVjb2RlTmV3bGluZXMgPyBlbmNvZGVkQXR0cldpdGhOZXdMaW5lcyA6IGVuY29kZWRBdHRyO1xyXG4gICAgcmV0dXJuIHZhbHVlLnJlcGxhY2UocmUsIGZ1bmN0aW9uIChtYXRjaCkgeyByZXR1cm4gZGVjb2RpbmdNYXBbbWF0Y2hdOyB9KTtcclxufVxyXG5mdW5jdGlvbiBwYXJzZUhUTUwoaHRtbCwgb3B0aW9ucykge1xyXG4gICAgdmFyIHN0YWNrID0gW107XHJcbiAgICB2YXIgZXhwZWN0SFRNTCA9IG9wdGlvbnMuZXhwZWN0SFRNTDtcclxuICAgIHZhciBpc1VuYXJ5VGFnID0gb3B0aW9ucy5pc1VuYXJ5VGFnIHx8IG5vO1xyXG4gICAgdmFyIGNhbkJlTGVmdE9wZW5UYWcgPSBvcHRpb25zLmNhbkJlTGVmdE9wZW5UYWcgfHwgbm87XHJcbiAgICB2YXIgaW5kZXggPSAwO1xyXG4gICAgdmFyIGxhc3QsIGxhc3RUYWc7XHJcbiAgICB2YXIgX2xvb3BfMSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBsYXN0ID0gaHRtbDtcclxuICAgICAgICAvLyBNYWtlIHN1cmUgd2UncmUgbm90IGluIGEgcGxhaW50ZXh0IGNvbnRlbnQgZWxlbWVudCBsaWtlIHNjcmlwdC9zdHlsZVxyXG4gICAgICAgIGlmICghbGFzdFRhZyB8fCAhaXNQbGFpblRleHRFbGVtZW50KGxhc3RUYWcpKSB7XHJcbiAgICAgICAgICAgIHZhciB0ZXh0RW5kID0gaHRtbC5pbmRleE9mKCc8Jyk7XHJcbiAgICAgICAgICAgIGlmICh0ZXh0RW5kID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBDb21tZW50OlxyXG4gICAgICAgICAgICAgICAgaWYgKGNvbW1lbnQudGVzdChodG1sKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBjb21tZW50RW5kID0gaHRtbC5pbmRleE9mKCctLT4nKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY29tbWVudEVuZCA+PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLnNob3VsZEtlZXBDb21tZW50ICYmIG9wdGlvbnMuY29tbWVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5jb21tZW50KGh0bWwuc3Vic3RyaW5nKDQsIGNvbW1lbnRFbmQpLCBpbmRleCwgaW5kZXggKyBjb21tZW50RW5kICsgMyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgYWR2YW5jZShjb21tZW50RW5kICsgMyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcImNvbnRpbnVlXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Db25kaXRpb25hbF9jb21tZW50I0Rvd25sZXZlbC1yZXZlYWxlZF9jb25kaXRpb25hbF9jb21tZW50XHJcbiAgICAgICAgICAgICAgICBpZiAoY29uZGl0aW9uYWxDb21tZW50LnRlc3QoaHRtbCkpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgY29uZGl0aW9uYWxFbmQgPSBodG1sLmluZGV4T2YoJ10+Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbmRpdGlvbmFsRW5kID49IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWR2YW5jZShjb25kaXRpb25hbEVuZCArIDIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJjb250aW51ZVwiO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIERvY3R5cGU6XHJcbiAgICAgICAgICAgICAgICB2YXIgZG9jdHlwZU1hdGNoID0gaHRtbC5tYXRjaChkb2N0eXBlKTtcclxuICAgICAgICAgICAgICAgIGlmIChkb2N0eXBlTWF0Y2gpIHtcclxuICAgICAgICAgICAgICAgICAgICBhZHZhbmNlKGRvY3R5cGVNYXRjaFswXS5sZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcImNvbnRpbnVlXCI7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvLyBFbmQgdGFnOlxyXG4gICAgICAgICAgICAgICAgdmFyIGVuZFRhZ01hdGNoID0gaHRtbC5tYXRjaChlbmRUYWcpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGVuZFRhZ01hdGNoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGN1ckluZGV4ID0gaW5kZXg7XHJcbiAgICAgICAgICAgICAgICAgICAgYWR2YW5jZShlbmRUYWdNYXRjaFswXS5sZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlRW5kVGFnKGVuZFRhZ01hdGNoWzFdLCBjdXJJbmRleCwgaW5kZXgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcImNvbnRpbnVlXCI7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvLyBTdGFydCB0YWc6XHJcbiAgICAgICAgICAgICAgICB2YXIgc3RhcnRUYWdNYXRjaCA9IHBhcnNlU3RhcnRUYWcoKTtcclxuICAgICAgICAgICAgICAgIGlmIChzdGFydFRhZ01hdGNoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlU3RhcnRUYWcoc3RhcnRUYWdNYXRjaCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZElnbm9yZUZpcnN0TmV3bGluZShzdGFydFRhZ01hdGNoLnRhZ05hbWUsIGh0bWwpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFkdmFuY2UoMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcImNvbnRpbnVlXCI7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIHRleHQgPSB2b2lkIDAsIHJlc3QgPSB2b2lkIDAsIG5leHQgPSB2b2lkIDA7XHJcbiAgICAgICAgICAgIGlmICh0ZXh0RW5kID49IDApIHtcclxuICAgICAgICAgICAgICAgIHJlc3QgPSBodG1sLnNsaWNlKHRleHRFbmQpO1xyXG4gICAgICAgICAgICAgICAgd2hpbGUgKCFlbmRUYWcudGVzdChyZXN0KSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICFzdGFydFRhZ09wZW4udGVzdChyZXN0KSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICFjb21tZW50LnRlc3QocmVzdCkgJiZcclxuICAgICAgICAgICAgICAgICAgICAhY29uZGl0aW9uYWxDb21tZW50LnRlc3QocmVzdCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyA8IGluIHBsYWluIHRleHQsIGJlIGZvcmdpdmluZyBhbmQgdHJlYXQgaXQgYXMgdGV4dFxyXG4gICAgICAgICAgICAgICAgICAgIG5leHQgPSByZXN0LmluZGV4T2YoJzwnLCAxKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCA8IDApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIHRleHRFbmQgKz0gbmV4dDtcclxuICAgICAgICAgICAgICAgICAgICByZXN0ID0gaHRtbC5zbGljZSh0ZXh0RW5kKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRleHQgPSBodG1sLnN1YnN0cmluZygwLCB0ZXh0RW5kKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGV4dEVuZCA8IDApIHtcclxuICAgICAgICAgICAgICAgIHRleHQgPSBodG1sO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0ZXh0KSB7XHJcbiAgICAgICAgICAgICAgICBhZHZhbmNlKHRleHQubGVuZ3RoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5jaGFycyAmJiB0ZXh0KSB7XHJcbiAgICAgICAgICAgICAgICBvcHRpb25zLmNoYXJzKHRleHQsIGluZGV4IC0gdGV4dC5sZW5ndGgsIGluZGV4KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdmFyIGVuZFRhZ0xlbmd0aF8xID0gMDtcclxuICAgICAgICAgICAgdmFyIHN0YWNrZWRUYWdfMSA9IGxhc3RUYWcudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgICAgdmFyIHJlU3RhY2tlZFRhZyA9IHJlQ2FjaGVbc3RhY2tlZFRhZ18xXSB8fFxyXG4gICAgICAgICAgICAgICAgKHJlQ2FjaGVbc3RhY2tlZFRhZ18xXSA9IG5ldyBSZWdFeHAoJyhbXFxcXHNcXFxcU10qPykoPC8nICsgc3RhY2tlZFRhZ18xICsgJ1tePl0qPiknLCAnaScpKTtcclxuICAgICAgICAgICAgdmFyIHJlc3QgPSBodG1sLnJlcGxhY2UocmVTdGFja2VkVGFnLCBmdW5jdGlvbiAoYWxsLCB0ZXh0LCBlbmRUYWcpIHtcclxuICAgICAgICAgICAgICAgIGVuZFRhZ0xlbmd0aF8xID0gZW5kVGFnLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgIGlmICghaXNQbGFpblRleHRFbGVtZW50KHN0YWNrZWRUYWdfMSkgJiYgc3RhY2tlZFRhZ18xICE9PSAnbm9zY3JpcHQnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGV4dCA9IHRleHRcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoLzwhXFwtLShbXFxzXFxTXSo/KS0tPi9nLCAnJDEnKSAvLyAjNzI5OFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvPCFcXFtDREFUQVxcWyhbXFxzXFxTXSo/KV1dPi9nLCAnJDEnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChzaG91bGRJZ25vcmVGaXJzdE5ld2xpbmUoc3RhY2tlZFRhZ18xLCB0ZXh0KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRleHQgPSB0ZXh0LnNsaWNlKDEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuY2hhcnMpIHtcclxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmNoYXJzKHRleHQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgaW5kZXggKz0gaHRtbC5sZW5ndGggLSByZXN0Lmxlbmd0aDtcclxuICAgICAgICAgICAgaHRtbCA9IHJlc3Q7XHJcbiAgICAgICAgICAgIHBhcnNlRW5kVGFnKHN0YWNrZWRUYWdfMSwgaW5kZXggLSBlbmRUYWdMZW5ndGhfMSwgaW5kZXgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaHRtbCA9PT0gbGFzdCkge1xyXG4gICAgICAgICAgICBvcHRpb25zLmNoYXJzICYmIG9wdGlvbnMuY2hhcnMoaHRtbCk7XHJcbiAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmICFzdGFjay5sZW5ndGggJiYgb3B0aW9ucy53YXJuKSB7XHJcbiAgICAgICAgICAgICAgICBvcHRpb25zLndhcm4oXCJNYWwtZm9ybWF0dGVkIHRhZyBhdCBlbmQgb2YgdGVtcGxhdGU6IFxcXCJcIi5jb25jYXQoaHRtbCwgXCJcXFwiXCIpLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IGluZGV4ICsgaHRtbC5sZW5ndGhcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBcImJyZWFrXCI7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIHdoaWxlIChodG1sKSB7XHJcbiAgICAgICAgdmFyIHN0YXRlXzEgPSBfbG9vcF8xKCk7XHJcbiAgICAgICAgaWYgKHN0YXRlXzEgPT09IFwiYnJlYWtcIilcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICAvLyBDbGVhbiB1cCBhbnkgcmVtYWluaW5nIHRhZ3NcclxuICAgIHBhcnNlRW5kVGFnKCk7XHJcbiAgICBmdW5jdGlvbiBhZHZhbmNlKG4pIHtcclxuICAgICAgICBpbmRleCArPSBuO1xyXG4gICAgICAgIGh0bWwgPSBodG1sLnN1YnN0cmluZyhuKTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHBhcnNlU3RhcnRUYWcoKSB7XHJcbiAgICAgICAgdmFyIHN0YXJ0ID0gaHRtbC5tYXRjaChzdGFydFRhZ09wZW4pO1xyXG4gICAgICAgIGlmIChzdGFydCkge1xyXG4gICAgICAgICAgICB2YXIgbWF0Y2ggPSB7XHJcbiAgICAgICAgICAgICAgICB0YWdOYW1lOiBzdGFydFsxXSxcclxuICAgICAgICAgICAgICAgIGF0dHJzOiBbXSxcclxuICAgICAgICAgICAgICAgIHN0YXJ0OiBpbmRleFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBhZHZhbmNlKHN0YXJ0WzBdLmxlbmd0aCk7XHJcbiAgICAgICAgICAgIHZhciBlbmQgPSB2b2lkIDAsIGF0dHIgPSB2b2lkIDA7XHJcbiAgICAgICAgICAgIHdoaWxlICghKGVuZCA9IGh0bWwubWF0Y2goc3RhcnRUYWdDbG9zZSkpICYmXHJcbiAgICAgICAgICAgICAgICAoYXR0ciA9IGh0bWwubWF0Y2goZHluYW1pY0FyZ0F0dHJpYnV0ZSkgfHwgaHRtbC5tYXRjaChhdHRyaWJ1dGUpKSkge1xyXG4gICAgICAgICAgICAgICAgYXR0ci5zdGFydCA9IGluZGV4O1xyXG4gICAgICAgICAgICAgICAgYWR2YW5jZShhdHRyWzBdLmxlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICBhdHRyLmVuZCA9IGluZGV4O1xyXG4gICAgICAgICAgICAgICAgbWF0Y2guYXR0cnMucHVzaChhdHRyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZW5kKSB7XHJcbiAgICAgICAgICAgICAgICBtYXRjaC51bmFyeVNsYXNoID0gZW5kWzFdO1xyXG4gICAgICAgICAgICAgICAgYWR2YW5jZShlbmRbMF0ubGVuZ3RoKTtcclxuICAgICAgICAgICAgICAgIG1hdGNoLmVuZCA9IGluZGV4O1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gaGFuZGxlU3RhcnRUYWcobWF0Y2gpIHtcclxuICAgICAgICB2YXIgdGFnTmFtZSA9IG1hdGNoLnRhZ05hbWU7XHJcbiAgICAgICAgdmFyIHVuYXJ5U2xhc2ggPSBtYXRjaC51bmFyeVNsYXNoO1xyXG4gICAgICAgIGlmIChleHBlY3RIVE1MKSB7XHJcbiAgICAgICAgICAgIGlmIChsYXN0VGFnID09PSAncCcgJiYgaXNOb25QaHJhc2luZ1RhZyh0YWdOYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgcGFyc2VFbmRUYWcobGFzdFRhZyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGNhbkJlTGVmdE9wZW5UYWcodGFnTmFtZSkgJiYgbGFzdFRhZyA9PT0gdGFnTmFtZSkge1xyXG4gICAgICAgICAgICAgICAgcGFyc2VFbmRUYWcodGFnTmFtZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHVuYXJ5ID0gaXNVbmFyeVRhZyh0YWdOYW1lKSB8fCAhIXVuYXJ5U2xhc2g7XHJcbiAgICAgICAgdmFyIGwgPSBtYXRjaC5hdHRycy5sZW5ndGg7XHJcbiAgICAgICAgdmFyIGF0dHJzID0gbmV3IEFycmF5KGwpO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBhcmdzID0gbWF0Y2guYXR0cnNbaV07XHJcbiAgICAgICAgICAgIHZhciB2YWx1ZSA9IGFyZ3NbM10gfHwgYXJnc1s0XSB8fCBhcmdzWzVdIHx8ICcnO1xyXG4gICAgICAgICAgICB2YXIgc2hvdWxkRGVjb2RlTmV3bGluZXMgPSB0YWdOYW1lID09PSAnYScgJiYgYXJnc1sxXSA9PT0gJ2hyZWYnXHJcbiAgICAgICAgICAgICAgICA/IG9wdGlvbnMuc2hvdWxkRGVjb2RlTmV3bGluZXNGb3JIcmVmXHJcbiAgICAgICAgICAgICAgICA6IG9wdGlvbnMuc2hvdWxkRGVjb2RlTmV3bGluZXM7XHJcbiAgICAgICAgICAgIGF0dHJzW2ldID0ge1xyXG4gICAgICAgICAgICAgICAgbmFtZTogYXJnc1sxXSxcclxuICAgICAgICAgICAgICAgIHZhbHVlOiBkZWNvZGVBdHRyKHZhbHVlLCBzaG91bGREZWNvZGVOZXdsaW5lcylcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgb3B0aW9ucy5vdXRwdXRTb3VyY2VSYW5nZSkge1xyXG4gICAgICAgICAgICAgICAgYXR0cnNbaV0uc3RhcnQgPSBhcmdzLnN0YXJ0ICsgYXJnc1swXS5tYXRjaCgvXlxccyovKS5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICBhdHRyc1tpXS5lbmQgPSBhcmdzLmVuZDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXVuYXJ5KSB7XHJcbiAgICAgICAgICAgIHN0YWNrLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgdGFnOiB0YWdOYW1lLFxyXG4gICAgICAgICAgICAgICAgbG93ZXJDYXNlZFRhZzogdGFnTmFtZS50b0xvd2VyQ2FzZSgpLFxyXG4gICAgICAgICAgICAgICAgYXR0cnM6IGF0dHJzLFxyXG4gICAgICAgICAgICAgICAgc3RhcnQ6IG1hdGNoLnN0YXJ0LFxyXG4gICAgICAgICAgICAgICAgZW5kOiBtYXRjaC5lbmRcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGxhc3RUYWcgPSB0YWdOYW1lO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAob3B0aW9ucy5zdGFydCkge1xyXG4gICAgICAgICAgICBvcHRpb25zLnN0YXJ0KHRhZ05hbWUsIGF0dHJzLCB1bmFyeSwgbWF0Y2guc3RhcnQsIG1hdGNoLmVuZCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gcGFyc2VFbmRUYWcodGFnTmFtZSwgc3RhcnQsIGVuZCkge1xyXG4gICAgICAgIHZhciBwb3MsIGxvd2VyQ2FzZWRUYWdOYW1lO1xyXG4gICAgICAgIGlmIChzdGFydCA9PSBudWxsKVxyXG4gICAgICAgICAgICBzdGFydCA9IGluZGV4O1xyXG4gICAgICAgIGlmIChlbmQgPT0gbnVsbClcclxuICAgICAgICAgICAgZW5kID0gaW5kZXg7XHJcbiAgICAgICAgLy8gRmluZCB0aGUgY2xvc2VzdCBvcGVuZWQgdGFnIG9mIHRoZSBzYW1lIHR5cGVcclxuICAgICAgICBpZiAodGFnTmFtZSkge1xyXG4gICAgICAgICAgICBsb3dlckNhc2VkVGFnTmFtZSA9IHRhZ05hbWUudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgICAgZm9yIChwb3MgPSBzdGFjay5sZW5ndGggLSAxOyBwb3MgPj0gMDsgcG9zLS0pIHtcclxuICAgICAgICAgICAgICAgIGlmIChzdGFja1twb3NdLmxvd2VyQ2FzZWRUYWcgPT09IGxvd2VyQ2FzZWRUYWdOYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIElmIG5vIHRhZyBuYW1lIGlzIHByb3ZpZGVkLCBjbGVhbiBzaG9wXHJcbiAgICAgICAgICAgIHBvcyA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChwb3MgPj0gMCkge1xyXG4gICAgICAgICAgICAvLyBDbG9zZSBhbGwgdGhlIG9wZW4gZWxlbWVudHMsIHVwIHRoZSBzdGFja1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gc3RhY2subGVuZ3RoIC0gMTsgaSA+PSBwb3M7IGktLSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgKGkgPiBwb3MgfHwgIXRhZ05hbWUpICYmIG9wdGlvbnMud2Fybikge1xyXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMud2FybihcInRhZyA8XCIuY29uY2F0KHN0YWNrW2ldLnRhZywgXCI+IGhhcyBubyBtYXRjaGluZyBlbmQgdGFnLlwiKSwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFydDogc3RhY2tbaV0uc3RhcnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuZDogc3RhY2tbaV0uZW5kXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5lbmQpIHtcclxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmVuZChzdGFja1tpXS50YWcsIHN0YXJ0LCBlbmQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgb3BlbiBlbGVtZW50cyBmcm9tIHRoZSBzdGFja1xyXG4gICAgICAgICAgICBzdGFjay5sZW5ndGggPSBwb3M7XHJcbiAgICAgICAgICAgIGxhc3RUYWcgPSBwb3MgJiYgc3RhY2tbcG9zIC0gMV0udGFnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChsb3dlckNhc2VkVGFnTmFtZSA9PT0gJ2JyJykge1xyXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5zdGFydCkge1xyXG4gICAgICAgICAgICAgICAgb3B0aW9ucy5zdGFydCh0YWdOYW1lLCBbXSwgdHJ1ZSwgc3RhcnQsIGVuZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAobG93ZXJDYXNlZFRhZ05hbWUgPT09ICdwJykge1xyXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5zdGFydCkge1xyXG4gICAgICAgICAgICAgICAgb3B0aW9ucy5zdGFydCh0YWdOYW1lLCBbXSwgZmFsc2UsIHN0YXJ0LCBlbmQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmVuZCkge1xyXG4gICAgICAgICAgICAgICAgb3B0aW9ucy5lbmQodGFnTmFtZSwgc3RhcnQsIGVuZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cblxudmFyIG9uUkUgPSAvXkB8XnYtb246LztcclxudmFyIGRpclJFID0gL152LXxeQHxeOnxeIy87XHJcbnZhciBmb3JBbGlhc1JFID0gLyhbXFxzXFxTXSo/KVxccysoPzppbnxvZilcXHMrKFtcXHNcXFNdKikvO1xyXG52YXIgZm9ySXRlcmF0b3JSRSA9IC8sKFteLFxcfVxcXV0qKSg/OiwoW14sXFx9XFxdXSopKT8kLztcclxudmFyIHN0cmlwUGFyZW5zUkUgPSAvXlxcKHxcXCkkL2c7XHJcbnZhciBkeW5hbWljQXJnUkUgPSAvXlxcWy4qXFxdJC87XHJcbnZhciBhcmdSRSA9IC86KC4qKSQvO1xyXG52YXIgYmluZFJFID0gL146fF5cXC58XnYtYmluZDovO1xyXG52YXIgbW9kaWZpZXJSRSA9IC9cXC5bXi5cXF1dKyg/PVteXFxdXSokKS9nO1xyXG52YXIgc2xvdFJFID0gL152LXNsb3QoOnwkKXxeIy87XHJcbnZhciBsaW5lQnJlYWtSRSA9IC9bXFxyXFxuXS87XHJcbnZhciB3aGl0ZXNwYWNlUkUgPSAvWyBcXGZcXHRcXHJcXG5dKy9nO1xyXG52YXIgaW52YWxpZEF0dHJpYnV0ZVJFID0gL1tcXHNcIic8PlxcLz1dLztcclxudmFyIGRlY29kZUhUTUxDYWNoZWQgPSBjYWNoZWQoaGUuZGVjb2RlKTtcclxudmFyIGVtcHR5U2xvdFNjb3BlVG9rZW4gPSBcIl9lbXB0eV9cIjtcclxuLy8gY29uZmlndXJhYmxlIHN0YXRlXHJcbnZhciB3YXJuO1xyXG52YXIgZGVsaW1pdGVycztcclxudmFyIHRyYW5zZm9ybXM7XHJcbnZhciBwcmVUcmFuc2Zvcm1zO1xyXG52YXIgcG9zdFRyYW5zZm9ybXM7XHJcbnZhciBwbGF0Zm9ybUlzUHJlVGFnO1xyXG52YXIgcGxhdGZvcm1NdXN0VXNlUHJvcDtcclxudmFyIHBsYXRmb3JtR2V0VGFnTmFtZXNwYWNlO1xyXG52YXIgbWF5YmVDb21wb25lbnQ7XHJcbmZ1bmN0aW9uIGNyZWF0ZUFTVEVsZW1lbnQodGFnLCBhdHRycywgcGFyZW50KSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHR5cGU6IDEsXHJcbiAgICAgICAgdGFnOiB0YWcsXHJcbiAgICAgICAgYXR0cnNMaXN0OiBhdHRycyxcclxuICAgICAgICBhdHRyc01hcDogbWFrZUF0dHJzTWFwKGF0dHJzKSxcclxuICAgICAgICByYXdBdHRyc01hcDoge30sXHJcbiAgICAgICAgcGFyZW50OiBwYXJlbnQsXHJcbiAgICAgICAgY2hpbGRyZW46IFtdXHJcbiAgICB9O1xyXG59XHJcbi8qKlxyXG4gKiBDb252ZXJ0IEhUTUwgc3RyaW5nIHRvIEFTVC5cclxuICovXHJcbmZ1bmN0aW9uIHBhcnNlKHRlbXBsYXRlLCBvcHRpb25zKSB7XHJcbiAgICB3YXJuID0gb3B0aW9ucy53YXJuIHx8IGJhc2VXYXJuO1xyXG4gICAgcGxhdGZvcm1Jc1ByZVRhZyA9IG9wdGlvbnMuaXNQcmVUYWcgfHwgbm87XHJcbiAgICBwbGF0Zm9ybU11c3RVc2VQcm9wID0gb3B0aW9ucy5tdXN0VXNlUHJvcCB8fCBubztcclxuICAgIHBsYXRmb3JtR2V0VGFnTmFtZXNwYWNlID0gb3B0aW9ucy5nZXRUYWdOYW1lc3BhY2UgfHwgbm87XHJcbiAgICB2YXIgaXNSZXNlcnZlZFRhZyA9IG9wdGlvbnMuaXNSZXNlcnZlZFRhZyB8fCBubztcclxuICAgIG1heWJlQ29tcG9uZW50ID0gZnVuY3Rpb24gKGVsKSB7XHJcbiAgICAgICAgcmV0dXJuICEhKGVsLmNvbXBvbmVudCB8fFxyXG4gICAgICAgICAgICBlbC5hdHRyc01hcFsnOmlzJ10gfHxcclxuICAgICAgICAgICAgZWwuYXR0cnNNYXBbJ3YtYmluZDppcyddIHx8XHJcbiAgICAgICAgICAgICEoZWwuYXR0cnNNYXAuaXMgPyBpc1Jlc2VydmVkVGFnKGVsLmF0dHJzTWFwLmlzKSA6IGlzUmVzZXJ2ZWRUYWcoZWwudGFnKSkpO1xyXG4gICAgfTtcclxuICAgIHRyYW5zZm9ybXMgPSBwbHVja01vZHVsZUZ1bmN0aW9uKG9wdGlvbnMubW9kdWxlcywgJ3RyYW5zZm9ybU5vZGUnKTtcclxuICAgIHByZVRyYW5zZm9ybXMgPSBwbHVja01vZHVsZUZ1bmN0aW9uKG9wdGlvbnMubW9kdWxlcywgJ3ByZVRyYW5zZm9ybU5vZGUnKTtcclxuICAgIHBvc3RUcmFuc2Zvcm1zID0gcGx1Y2tNb2R1bGVGdW5jdGlvbihvcHRpb25zLm1vZHVsZXMsICdwb3N0VHJhbnNmb3JtTm9kZScpO1xyXG4gICAgZGVsaW1pdGVycyA9IG9wdGlvbnMuZGVsaW1pdGVycztcclxuICAgIHZhciBzdGFjayA9IFtdO1xyXG4gICAgdmFyIHByZXNlcnZlV2hpdGVzcGFjZSA9IG9wdGlvbnMucHJlc2VydmVXaGl0ZXNwYWNlICE9PSBmYWxzZTtcclxuICAgIHZhciB3aGl0ZXNwYWNlT3B0aW9uID0gb3B0aW9ucy53aGl0ZXNwYWNlO1xyXG4gICAgdmFyIHJvb3Q7XHJcbiAgICB2YXIgY3VycmVudFBhcmVudDtcclxuICAgIHZhciBpblZQcmUgPSBmYWxzZTtcclxuICAgIHZhciBpblByZSA9IGZhbHNlO1xyXG4gICAgdmFyIHdhcm5lZCA9IGZhbHNlO1xyXG4gICAgZnVuY3Rpb24gd2Fybk9uY2UobXNnLCByYW5nZSkge1xyXG4gICAgICAgIGlmICghd2FybmVkKSB7XHJcbiAgICAgICAgICAgIHdhcm5lZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHdhcm4obXNnLCByYW5nZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gY2xvc2VFbGVtZW50KGVsZW1lbnQpIHtcclxuICAgICAgICB0cmltRW5kaW5nV2hpdGVzcGFjZShlbGVtZW50KTtcclxuICAgICAgICBpZiAoIWluVlByZSAmJiAhZWxlbWVudC5wcm9jZXNzZWQpIHtcclxuICAgICAgICAgICAgZWxlbWVudCA9IHByb2Nlc3NFbGVtZW50KGVsZW1lbnQsIG9wdGlvbnMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyB0cmVlIG1hbmFnZW1lbnRcclxuICAgICAgICBpZiAoIXN0YWNrLmxlbmd0aCAmJiBlbGVtZW50ICE9PSByb290KSB7XHJcbiAgICAgICAgICAgIC8vIGFsbG93IHJvb3QgZWxlbWVudHMgd2l0aCB2LWlmLCB2LWVsc2UtaWYgYW5kIHYtZWxzZVxyXG4gICAgICAgICAgICBpZiAocm9vdC5pZiAmJiAoZWxlbWVudC5lbHNlaWYgfHwgZWxlbWVudC5lbHNlKSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcclxuICAgICAgICAgICAgICAgICAgICBjaGVja1Jvb3RDb25zdHJhaW50cyhlbGVtZW50KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGFkZElmQ29uZGl0aW9uKHJvb3QsIHtcclxuICAgICAgICAgICAgICAgICAgICBleHA6IGVsZW1lbnQuZWxzZWlmLFxyXG4gICAgICAgICAgICAgICAgICAgIGJsb2NrOiBlbGVtZW50XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICB3YXJuT25jZShcIkNvbXBvbmVudCB0ZW1wbGF0ZSBzaG91bGQgY29udGFpbiBleGFjdGx5IG9uZSByb290IGVsZW1lbnQuIFwiICtcclxuICAgICAgICAgICAgICAgICAgICBcIklmIHlvdSBhcmUgdXNpbmcgdi1pZiBvbiBtdWx0aXBsZSBlbGVtZW50cywgXCIgK1xyXG4gICAgICAgICAgICAgICAgICAgIFwidXNlIHYtZWxzZS1pZiB0byBjaGFpbiB0aGVtIGluc3RlYWQuXCIsIHsgc3RhcnQ6IGVsZW1lbnQuc3RhcnQgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGN1cnJlbnRQYXJlbnQgJiYgIWVsZW1lbnQuZm9yYmlkZGVuKSB7XHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50LmVsc2VpZiB8fCBlbGVtZW50LmVsc2UpIHtcclxuICAgICAgICAgICAgICAgIHByb2Nlc3NJZkNvbmRpdGlvbnMoZWxlbWVudCwgY3VycmVudFBhcmVudCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5zbG90U2NvcGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBzY29wZWQgc2xvdFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGtlZXAgaXQgaW4gdGhlIGNoaWxkcmVuIGxpc3Qgc28gdGhhdCB2LWVsc2UoLWlmKSBjb25kaXRpb25zIGNhblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGZpbmQgaXQgYXMgdGhlIHByZXYgbm9kZS5cclxuICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZV8xID0gZWxlbWVudC5zbG90VGFyZ2V0IHx8ICdcImRlZmF1bHRcIic7XHJcbiAgICAgICAgICAgICAgICAgICAgKGN1cnJlbnRQYXJlbnQuc2NvcGVkU2xvdHMgfHwgKGN1cnJlbnRQYXJlbnQuc2NvcGVkU2xvdHMgPSB7fSkpW25hbWVfMV0gPSBlbGVtZW50O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY3VycmVudFBhcmVudC5jaGlsZHJlbi5wdXNoKGVsZW1lbnQpO1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudC5wYXJlbnQgPSBjdXJyZW50UGFyZW50O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGZpbmFsIGNoaWxkcmVuIGNsZWFudXBcclxuICAgICAgICAvLyBmaWx0ZXIgb3V0IHNjb3BlZCBzbG90c1xyXG4gICAgICAgIGVsZW1lbnQuY2hpbGRyZW4gPSBlbGVtZW50LmNoaWxkcmVuLmZpbHRlcihmdW5jdGlvbiAoYykgeyByZXR1cm4gIWMuc2xvdFNjb3BlOyB9KTtcclxuICAgICAgICAvLyByZW1vdmUgdHJhaWxpbmcgd2hpdGVzcGFjZSBub2RlIGFnYWluXHJcbiAgICAgICAgdHJpbUVuZGluZ1doaXRlc3BhY2UoZWxlbWVudCk7XHJcbiAgICAgICAgLy8gY2hlY2sgcHJlIHN0YXRlXHJcbiAgICAgICAgaWYgKGVsZW1lbnQucHJlKSB7XHJcbiAgICAgICAgICAgIGluVlByZSA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocGxhdGZvcm1Jc1ByZVRhZyhlbGVtZW50LnRhZykpIHtcclxuICAgICAgICAgICAgaW5QcmUgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gYXBwbHkgcG9zdC10cmFuc2Zvcm1zXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwb3N0VHJhbnNmb3Jtcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBwb3N0VHJhbnNmb3Jtc1tpXShlbGVtZW50LCBvcHRpb25zKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiB0cmltRW5kaW5nV2hpdGVzcGFjZShlbCkge1xyXG4gICAgICAgIC8vIHJlbW92ZSB0cmFpbGluZyB3aGl0ZXNwYWNlIG5vZGVcclxuICAgICAgICBpZiAoIWluUHJlKSB7XHJcbiAgICAgICAgICAgIHZhciBsYXN0Tm9kZSA9IHZvaWQgMDtcclxuICAgICAgICAgICAgd2hpbGUgKChsYXN0Tm9kZSA9IGVsLmNoaWxkcmVuW2VsLmNoaWxkcmVuLmxlbmd0aCAtIDFdKSAmJlxyXG4gICAgICAgICAgICAgICAgbGFzdE5vZGUudHlwZSA9PT0gMyAmJlxyXG4gICAgICAgICAgICAgICAgbGFzdE5vZGUudGV4dCA9PT0gJyAnKSB7XHJcbiAgICAgICAgICAgICAgICBlbC5jaGlsZHJlbi5wb3AoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGNoZWNrUm9vdENvbnN0cmFpbnRzKGVsKSB7XHJcbiAgICAgICAgaWYgKGVsLnRhZyA9PT0gJ3Nsb3QnIHx8IGVsLnRhZyA9PT0gJ3RlbXBsYXRlJykge1xyXG4gICAgICAgICAgICB3YXJuT25jZShcIkNhbm5vdCB1c2UgPFwiLmNvbmNhdChlbC50YWcsIFwiPiBhcyBjb21wb25lbnQgcm9vdCBlbGVtZW50IGJlY2F1c2UgaXQgbWF5IFwiKSArXHJcbiAgICAgICAgICAgICAgICAnY29udGFpbiBtdWx0aXBsZSBub2Rlcy4nLCB7IHN0YXJ0OiBlbC5zdGFydCB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGVsLmF0dHJzTWFwLmhhc093blByb3BlcnR5KCd2LWZvcicpKSB7XHJcbiAgICAgICAgICAgIHdhcm5PbmNlKCdDYW5ub3QgdXNlIHYtZm9yIG9uIHN0YXRlZnVsIGNvbXBvbmVudCByb290IGVsZW1lbnQgYmVjYXVzZSAnICtcclxuICAgICAgICAgICAgICAgICdpdCByZW5kZXJzIG11bHRpcGxlIGVsZW1lbnRzLicsIGVsLnJhd0F0dHJzTWFwWyd2LWZvciddKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwYXJzZUhUTUwodGVtcGxhdGUsIHtcclxuICAgICAgICB3YXJuOiB3YXJuLFxyXG4gICAgICAgIGV4cGVjdEhUTUw6IG9wdGlvbnMuZXhwZWN0SFRNTCxcclxuICAgICAgICBpc1VuYXJ5VGFnOiBvcHRpb25zLmlzVW5hcnlUYWcsXHJcbiAgICAgICAgY2FuQmVMZWZ0T3BlblRhZzogb3B0aW9ucy5jYW5CZUxlZnRPcGVuVGFnLFxyXG4gICAgICAgIHNob3VsZERlY29kZU5ld2xpbmVzOiBvcHRpb25zLnNob3VsZERlY29kZU5ld2xpbmVzLFxyXG4gICAgICAgIHNob3VsZERlY29kZU5ld2xpbmVzRm9ySHJlZjogb3B0aW9ucy5zaG91bGREZWNvZGVOZXdsaW5lc0ZvckhyZWYsXHJcbiAgICAgICAgc2hvdWxkS2VlcENvbW1lbnQ6IG9wdGlvbnMuY29tbWVudHMsXHJcbiAgICAgICAgb3V0cHV0U291cmNlUmFuZ2U6IG9wdGlvbnMub3V0cHV0U291cmNlUmFuZ2UsXHJcbiAgICAgICAgc3RhcnQ6IGZ1bmN0aW9uICh0YWcsIGF0dHJzLCB1bmFyeSwgc3RhcnQsIGVuZCkge1xyXG4gICAgICAgICAgICAvLyBjaGVjayBuYW1lc3BhY2UuXHJcbiAgICAgICAgICAgIC8vIGluaGVyaXQgcGFyZW50IG5zIGlmIHRoZXJlIGlzIG9uZVxyXG4gICAgICAgICAgICB2YXIgbnMgPSAoY3VycmVudFBhcmVudCAmJiBjdXJyZW50UGFyZW50Lm5zKSB8fCBwbGF0Zm9ybUdldFRhZ05hbWVzcGFjZSh0YWcpO1xyXG4gICAgICAgICAgICAvLyBoYW5kbGUgSUUgc3ZnIGJ1Z1xyXG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cclxuICAgICAgICAgICAgaWYgKGlzSUUgJiYgbnMgPT09ICdzdmcnKSB7XHJcbiAgICAgICAgICAgICAgICBhdHRycyA9IGd1YXJkSUVTVkdCdWcoYXR0cnMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBlbGVtZW50ID0gY3JlYXRlQVNURWxlbWVudCh0YWcsIGF0dHJzLCBjdXJyZW50UGFyZW50KTtcclxuICAgICAgICAgICAgaWYgKG5zKSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50Lm5zID0gbnM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcclxuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLm91dHB1dFNvdXJjZVJhbmdlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5zdGFydCA9IHN0YXJ0O1xyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuZW5kID0gZW5kO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQucmF3QXR0cnNNYXAgPSBlbGVtZW50LmF0dHJzTGlzdC5yZWR1Y2UoZnVuY3Rpb24gKGN1bXVsYXRlZCwgYXR0cikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjdW11bGF0ZWRbYXR0ci5uYW1lXSA9IGF0dHI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjdW11bGF0ZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfSwge30pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYXR0cnMuZm9yRWFjaChmdW5jdGlvbiAoYXR0cikge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpbnZhbGlkQXR0cmlidXRlUkUudGVzdChhdHRyLm5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdhcm4oXCJJbnZhbGlkIGR5bmFtaWMgYXJndW1lbnQgZXhwcmVzc2lvbjogYXR0cmlidXRlIG5hbWVzIGNhbm5vdCBjb250YWluIFwiICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic3BhY2VzLCBxdW90ZXMsIDwsID4sIC8gb3IgPS5cIiwgb3B0aW9ucy5vdXRwdXRTb3VyY2VSYW5nZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IGF0dHIuc3RhcnQgKyBhdHRyLm5hbWUuaW5kZXhPZihcIltcIiksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kOiBhdHRyLnN0YXJ0ICsgYXR0ci5uYW1lLmxlbmd0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChpc0ZvcmJpZGRlblRhZyhlbGVtZW50KSAmJiAhaXNTZXJ2ZXJSZW5kZXJpbmcoKSkge1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudC5mb3JiaWRkZW4gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJlxyXG4gICAgICAgICAgICAgICAgICAgIHdhcm4oJ1RlbXBsYXRlcyBzaG91bGQgb25seSBiZSByZXNwb25zaWJsZSBmb3IgbWFwcGluZyB0aGUgc3RhdGUgdG8gdGhlICcgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAnVUkuIEF2b2lkIHBsYWNpbmcgdGFncyB3aXRoIHNpZGUtZWZmZWN0cyBpbiB5b3VyIHRlbXBsYXRlcywgc3VjaCBhcyAnICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCI8XCIuY29uY2F0KHRhZywgXCI+XCIpICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJywgYXMgdGhleSB3aWxsIG5vdCBiZSBwYXJzZWQuJywgeyBzdGFydDogZWxlbWVudC5zdGFydCB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBhcHBseSBwcmUtdHJhbnNmb3Jtc1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByZVRyYW5zZm9ybXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBwcmVUcmFuc2Zvcm1zW2ldKGVsZW1lbnQsIG9wdGlvbnMpIHx8IGVsZW1lbnQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCFpblZQcmUpIHtcclxuICAgICAgICAgICAgICAgIHByb2Nlc3NQcmUoZWxlbWVudCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5wcmUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpblZQcmUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChwbGF0Zm9ybUlzUHJlVGFnKGVsZW1lbnQudGFnKSkge1xyXG4gICAgICAgICAgICAgICAgaW5QcmUgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChpblZQcmUpIHtcclxuICAgICAgICAgICAgICAgIHByb2Nlc3NSYXdBdHRycyhlbGVtZW50KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICghZWxlbWVudC5wcm9jZXNzZWQpIHtcclxuICAgICAgICAgICAgICAgIC8vIHN0cnVjdHVyYWwgZGlyZWN0aXZlc1xyXG4gICAgICAgICAgICAgICAgcHJvY2Vzc0ZvcihlbGVtZW50KTtcclxuICAgICAgICAgICAgICAgIHByb2Nlc3NJZihlbGVtZW50KTtcclxuICAgICAgICAgICAgICAgIHByb2Nlc3NPbmNlKGVsZW1lbnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghcm9vdCkge1xyXG4gICAgICAgICAgICAgICAgcm9vdCA9IGVsZW1lbnQ7XHJcbiAgICAgICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNoZWNrUm9vdENvbnN0cmFpbnRzKHJvb3QpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghdW5hcnkpIHtcclxuICAgICAgICAgICAgICAgIGN1cnJlbnRQYXJlbnQgPSBlbGVtZW50O1xyXG4gICAgICAgICAgICAgICAgc3RhY2sucHVzaChlbGVtZW50KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNsb3NlRWxlbWVudChlbGVtZW50KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZW5kOiBmdW5jdGlvbiAodGFnLCBzdGFydCwgZW5kKSB7XHJcbiAgICAgICAgICAgIHZhciBlbGVtZW50ID0gc3RhY2tbc3RhY2subGVuZ3RoIC0gMV07XHJcbiAgICAgICAgICAgIC8vIHBvcCBzdGFja1xyXG4gICAgICAgICAgICBzdGFjay5sZW5ndGggLT0gMTtcclxuICAgICAgICAgICAgY3VycmVudFBhcmVudCA9IHN0YWNrW3N0YWNrLmxlbmd0aCAtIDFdO1xyXG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBvcHRpb25zLm91dHB1dFNvdXJjZVJhbmdlKSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50LmVuZCA9IGVuZDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjbG9zZUVsZW1lbnQoZWxlbWVudCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBjaGFyczogZnVuY3Rpb24gKHRleHQsIHN0YXJ0LCBlbmQpIHtcclxuICAgICAgICAgICAgaWYgKCFjdXJyZW50UGFyZW50KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0ZXh0ID09PSB0ZW1wbGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB3YXJuT25jZSgnQ29tcG9uZW50IHRlbXBsYXRlIHJlcXVpcmVzIGEgcm9vdCBlbGVtZW50LCByYXRoZXIgdGhhbiBqdXN0IHRleHQuJywgeyBzdGFydDogc3RhcnQgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCh0ZXh0ID0gdGV4dC50cmltKCkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5PbmNlKFwidGV4dCBcXFwiXCIuY29uY2F0KHRleHQsIFwiXFxcIiBvdXRzaWRlIHJvb3QgZWxlbWVudCB3aWxsIGJlIGlnbm9yZWQuXCIpLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydDogc3RhcnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIElFIHRleHRhcmVhIHBsYWNlaG9sZGVyIGJ1Z1xyXG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cclxuICAgICAgICAgICAgaWYgKGlzSUUgJiZcclxuICAgICAgICAgICAgICAgIGN1cnJlbnRQYXJlbnQudGFnID09PSAndGV4dGFyZWEnICYmXHJcbiAgICAgICAgICAgICAgICBjdXJyZW50UGFyZW50LmF0dHJzTWFwLnBsYWNlaG9sZGVyID09PSB0ZXh0KSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIGNoaWxkcmVuID0gY3VycmVudFBhcmVudC5jaGlsZHJlbjtcclxuICAgICAgICAgICAgaWYgKGluUHJlIHx8IHRleHQudHJpbSgpKSB7XHJcbiAgICAgICAgICAgICAgICB0ZXh0ID0gaXNUZXh0VGFnKGN1cnJlbnRQYXJlbnQpXHJcbiAgICAgICAgICAgICAgICAgICAgPyB0ZXh0XHJcbiAgICAgICAgICAgICAgICAgICAgOiBkZWNvZGVIVE1MQ2FjaGVkKHRleHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKCFjaGlsZHJlbi5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIC8vIHJlbW92ZSB0aGUgd2hpdGVzcGFjZS1vbmx5IG5vZGUgcmlnaHQgYWZ0ZXIgYW4gb3BlbmluZyB0YWdcclxuICAgICAgICAgICAgICAgIHRleHQgPSAnJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICh3aGl0ZXNwYWNlT3B0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAod2hpdGVzcGFjZU9wdGlvbiA9PT0gJ2NvbmRlbnNlJykge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGluIGNvbmRlbnNlIG1vZGUsIHJlbW92ZSB0aGUgd2hpdGVzcGFjZSBub2RlIGlmIGl0IGNvbnRhaW5zXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gbGluZSBicmVhaywgb3RoZXJ3aXNlIGNvbmRlbnNlIHRvIGEgc2luZ2xlIHNwYWNlXHJcbiAgICAgICAgICAgICAgICAgICAgdGV4dCA9IGxpbmVCcmVha1JFLnRlc3QodGV4dCkgPyAnJyA6ICcgJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRleHQgPSAnICc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0ZXh0ID0gcHJlc2VydmVXaGl0ZXNwYWNlID8gJyAnIDogJyc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRleHQpIHtcclxuICAgICAgICAgICAgICAgIGlmICghaW5QcmUgJiYgd2hpdGVzcGFjZU9wdGlvbiA9PT0gJ2NvbmRlbnNlJykge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbmRlbnNlIGNvbnNlY3V0aXZlIHdoaXRlc3BhY2VzIGludG8gc2luZ2xlIHNwYWNlXHJcbiAgICAgICAgICAgICAgICAgICAgdGV4dCA9IHRleHQucmVwbGFjZSh3aGl0ZXNwYWNlUkUsICcgJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB2YXIgcmVzID0gdm9pZCAwO1xyXG4gICAgICAgICAgICAgICAgdmFyIGNoaWxkID0gdm9pZCAwO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFpblZQcmUgJiYgdGV4dCAhPT0gJyAnICYmIChyZXMgPSBwYXJzZVRleHQodGV4dCwgZGVsaW1pdGVycykpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2hpbGQgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IDIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IHJlcy5leHByZXNzaW9uLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0b2tlbnM6IHJlcy50b2tlbnMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IHRleHRcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodGV4dCAhPT0gJyAnIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgIWNoaWxkcmVuLmxlbmd0aCB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuW2NoaWxkcmVuLmxlbmd0aCAtIDFdLnRleHQgIT09ICcgJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiB0ZXh0XHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChjaGlsZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIG9wdGlvbnMub3V0cHV0U291cmNlUmFuZ2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQuc3RhcnQgPSBzdGFydDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQuZW5kID0gZW5kO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbi5wdXNoKGNoaWxkKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY29tbWVudDogZnVuY3Rpb24gKHRleHQsIHN0YXJ0LCBlbmQpIHtcclxuICAgICAgICAgICAgLy8gYWRkaW5nIGFueXRoaW5nIGFzIGEgc2libGluZyB0byB0aGUgcm9vdCBub2RlIGlzIGZvcmJpZGRlblxyXG4gICAgICAgICAgICAvLyBjb21tZW50cyBzaG91bGQgc3RpbGwgYmUgYWxsb3dlZCwgYnV0IGlnbm9yZWRcclxuICAgICAgICAgICAgaWYgKGN1cnJlbnRQYXJlbnQpIHtcclxuICAgICAgICAgICAgICAgIHZhciBjaGlsZCA9IHtcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAzLFxyXG4gICAgICAgICAgICAgICAgICAgIHRleHQ6IHRleHQsXHJcbiAgICAgICAgICAgICAgICAgICAgaXNDb21tZW50OiB0cnVlXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgb3B0aW9ucy5vdXRwdXRTb3VyY2VSYW5nZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkLnN0YXJ0ID0gc3RhcnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgY2hpbGQuZW5kID0gZW5kO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY3VycmVudFBhcmVudC5jaGlsZHJlbi5wdXNoKGNoaWxkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHJvb3Q7XHJcbn1cclxuZnVuY3Rpb24gcHJvY2Vzc1ByZShlbCkge1xyXG4gICAgaWYgKGdldEFuZFJlbW92ZUF0dHIoZWwsICd2LXByZScpICE9IG51bGwpIHtcclxuICAgICAgICBlbC5wcmUgPSB0cnVlO1xyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIHByb2Nlc3NSYXdBdHRycyhlbCkge1xyXG4gICAgdmFyIGxpc3QgPSBlbC5hdHRyc0xpc3Q7XHJcbiAgICB2YXIgbGVuID0gbGlzdC5sZW5ndGg7XHJcbiAgICBpZiAobGVuKSB7XHJcbiAgICAgICAgdmFyIGF0dHJzID0gKGVsLmF0dHJzID0gbmV3IEFycmF5KGxlbikpO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgYXR0cnNbaV0gPSB7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiBsaXN0W2ldLm5hbWUsXHJcbiAgICAgICAgICAgICAgICB2YWx1ZTogSlNPTi5zdHJpbmdpZnkobGlzdFtpXS52YWx1ZSlcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgaWYgKGxpc3RbaV0uc3RhcnQgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgYXR0cnNbaV0uc3RhcnQgPSBsaXN0W2ldLnN0YXJ0O1xyXG4gICAgICAgICAgICAgICAgYXR0cnNbaV0uZW5kID0gbGlzdFtpXS5lbmQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICghZWwucHJlKSB7XHJcbiAgICAgICAgLy8gbm9uIHJvb3Qgbm9kZSBpbiBwcmUgYmxvY2tzIHdpdGggbm8gYXR0cmlidXRlc1xyXG4gICAgICAgIGVsLnBsYWluID0gdHJ1ZTtcclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBwcm9jZXNzRWxlbWVudChlbGVtZW50LCBvcHRpb25zKSB7XHJcbiAgICBwcm9jZXNzS2V5KGVsZW1lbnQpO1xyXG4gICAgLy8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhpcyBpcyBhIHBsYWluIGVsZW1lbnQgYWZ0ZXJcclxuICAgIC8vIHJlbW92aW5nIHN0cnVjdHVyYWwgYXR0cmlidXRlc1xyXG4gICAgZWxlbWVudC5wbGFpbiA9XHJcbiAgICAgICAgIWVsZW1lbnQua2V5ICYmICFlbGVtZW50LnNjb3BlZFNsb3RzICYmICFlbGVtZW50LmF0dHJzTGlzdC5sZW5ndGg7XHJcbiAgICBwcm9jZXNzUmVmKGVsZW1lbnQpO1xyXG4gICAgcHJvY2Vzc1Nsb3RDb250ZW50KGVsZW1lbnQpO1xyXG4gICAgcHJvY2Vzc1Nsb3RPdXRsZXQoZWxlbWVudCk7XHJcbiAgICBwcm9jZXNzQ29tcG9uZW50KGVsZW1lbnQpO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0cmFuc2Zvcm1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgZWxlbWVudCA9IHRyYW5zZm9ybXNbaV0oZWxlbWVudCwgb3B0aW9ucykgfHwgZWxlbWVudDtcclxuICAgIH1cclxuICAgIHByb2Nlc3NBdHRycyhlbGVtZW50KTtcclxuICAgIHJldHVybiBlbGVtZW50O1xyXG59XHJcbmZ1bmN0aW9uIHByb2Nlc3NLZXkoZWwpIHtcclxuICAgIHZhciBleHAgPSBnZXRCaW5kaW5nQXR0cihlbCwgJ2tleScpO1xyXG4gICAgaWYgKGV4cCkge1xyXG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XHJcbiAgICAgICAgICAgIGlmIChlbC50YWcgPT09ICd0ZW1wbGF0ZScpIHtcclxuICAgICAgICAgICAgICAgIHdhcm4oXCI8dGVtcGxhdGU+IGNhbm5vdCBiZSBrZXllZC4gUGxhY2UgdGhlIGtleSBvbiByZWFsIGVsZW1lbnRzIGluc3RlYWQuXCIsIGdldFJhd0JpbmRpbmdBdHRyKGVsLCAna2V5JykpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChlbC5mb3IpIHtcclxuICAgICAgICAgICAgICAgIHZhciBpdGVyYXRvciA9IGVsLml0ZXJhdG9yMiB8fCBlbC5pdGVyYXRvcjE7XHJcbiAgICAgICAgICAgICAgICB2YXIgcGFyZW50XzEgPSBlbC5wYXJlbnQ7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXRlcmF0b3IgJiZcclxuICAgICAgICAgICAgICAgICAgICBpdGVyYXRvciA9PT0gZXhwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50XzEgJiZcclxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRfMS50YWcgPT09ICd0cmFuc2l0aW9uLWdyb3VwJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHdhcm4oXCJEbyBub3QgdXNlIHYtZm9yIGluZGV4IGFzIGtleSBvbiA8dHJhbnNpdGlvbi1ncm91cD4gY2hpbGRyZW4sIFwiICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJ0aGlzIGlzIHRoZSBzYW1lIGFzIG5vdCB1c2luZyBrZXlzLlwiLCBnZXRSYXdCaW5kaW5nQXR0cihlbCwgJ2tleScpLCB0cnVlIC8qIHRpcCAqLyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWwua2V5ID0gZXhwO1xyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIHByb2Nlc3NSZWYoZWwpIHtcclxuICAgIHZhciByZWYgPSBnZXRCaW5kaW5nQXR0cihlbCwgJ3JlZicpO1xyXG4gICAgaWYgKHJlZikge1xyXG4gICAgICAgIGVsLnJlZiA9IHJlZjtcclxuICAgICAgICBlbC5yZWZJbkZvciA9IGNoZWNrSW5Gb3IoZWwpO1xyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIHByb2Nlc3NGb3IoZWwpIHtcclxuICAgIHZhciBleHA7XHJcbiAgICBpZiAoKGV4cCA9IGdldEFuZFJlbW92ZUF0dHIoZWwsICd2LWZvcicpKSkge1xyXG4gICAgICAgIHZhciByZXMgPSBwYXJzZUZvcihleHApO1xyXG4gICAgICAgIGlmIChyZXMpIHtcclxuICAgICAgICAgICAgZXh0ZW5kKGVsLCByZXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XHJcbiAgICAgICAgICAgIHdhcm4oXCJJbnZhbGlkIHYtZm9yIGV4cHJlc3Npb246IFwiLmNvbmNhdChleHApLCBlbC5yYXdBdHRyc01hcFsndi1mb3InXSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIHBhcnNlRm9yKGV4cCkge1xyXG4gICAgdmFyIGluTWF0Y2ggPSBleHAubWF0Y2goZm9yQWxpYXNSRSk7XHJcbiAgICBpZiAoIWluTWF0Y2gpXHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgdmFyIHJlcyA9IHt9O1xyXG4gICAgcmVzLmZvciA9IGluTWF0Y2hbMl0udHJpbSgpO1xyXG4gICAgdmFyIGFsaWFzID0gaW5NYXRjaFsxXS50cmltKCkucmVwbGFjZShzdHJpcFBhcmVuc1JFLCAnJyk7XHJcbiAgICB2YXIgaXRlcmF0b3JNYXRjaCA9IGFsaWFzLm1hdGNoKGZvckl0ZXJhdG9yUkUpO1xyXG4gICAgaWYgKGl0ZXJhdG9yTWF0Y2gpIHtcclxuICAgICAgICByZXMuYWxpYXMgPSBhbGlhcy5yZXBsYWNlKGZvckl0ZXJhdG9yUkUsICcnKS50cmltKCk7XHJcbiAgICAgICAgcmVzLml0ZXJhdG9yMSA9IGl0ZXJhdG9yTWF0Y2hbMV0udHJpbSgpO1xyXG4gICAgICAgIGlmIChpdGVyYXRvck1hdGNoWzJdKSB7XHJcbiAgICAgICAgICAgIHJlcy5pdGVyYXRvcjIgPSBpdGVyYXRvck1hdGNoWzJdLnRyaW0oKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICByZXMuYWxpYXMgPSBhbGlhcztcclxuICAgIH1cclxuICAgIHJldHVybiByZXM7XHJcbn1cclxuZnVuY3Rpb24gcHJvY2Vzc0lmKGVsKSB7XHJcbiAgICB2YXIgZXhwID0gZ2V0QW5kUmVtb3ZlQXR0cihlbCwgJ3YtaWYnKTtcclxuICAgIGlmIChleHApIHtcclxuICAgICAgICBlbC5pZiA9IGV4cDtcclxuICAgICAgICBhZGRJZkNvbmRpdGlvbihlbCwge1xyXG4gICAgICAgICAgICBleHA6IGV4cCxcclxuICAgICAgICAgICAgYmxvY2s6IGVsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBpZiAoZ2V0QW5kUmVtb3ZlQXR0cihlbCwgJ3YtZWxzZScpICE9IG51bGwpIHtcclxuICAgICAgICAgICAgZWwuZWxzZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBlbHNlaWYgPSBnZXRBbmRSZW1vdmVBdHRyKGVsLCAndi1lbHNlLWlmJyk7XHJcbiAgICAgICAgaWYgKGVsc2VpZikge1xyXG4gICAgICAgICAgICBlbC5lbHNlaWYgPSBlbHNlaWY7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIHByb2Nlc3NJZkNvbmRpdGlvbnMoZWwsIHBhcmVudCkge1xyXG4gICAgdmFyIHByZXYgPSBmaW5kUHJldkVsZW1lbnQocGFyZW50LmNoaWxkcmVuKTtcclxuICAgIGlmIChwcmV2ICYmIHByZXYuaWYpIHtcclxuICAgICAgICBhZGRJZkNvbmRpdGlvbihwcmV2LCB7XHJcbiAgICAgICAgICAgIGV4cDogZWwuZWxzZWlmLFxyXG4gICAgICAgICAgICBibG9jazogZWxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcclxuICAgICAgICB3YXJuKFwidi1cIi5jb25jYXQoZWwuZWxzZWlmID8gJ2Vsc2UtaWY9XCInICsgZWwuZWxzZWlmICsgJ1wiJyA6ICdlbHNlJywgXCIgXCIpICtcclxuICAgICAgICAgICAgXCJ1c2VkIG9uIGVsZW1lbnQgPFwiLmNvbmNhdChlbC50YWcsIFwiPiB3aXRob3V0IGNvcnJlc3BvbmRpbmcgdi1pZi5cIiksIGVsLnJhd0F0dHJzTWFwW2VsLmVsc2VpZiA/ICd2LWVsc2UtaWYnIDogJ3YtZWxzZSddKTtcclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBmaW5kUHJldkVsZW1lbnQoY2hpbGRyZW4pIHtcclxuICAgIHZhciBpID0gY2hpbGRyZW4ubGVuZ3RoO1xyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICAgIGlmIChjaGlsZHJlbltpXS50eXBlID09PSAxKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBjaGlsZHJlbltpXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGNoaWxkcmVuW2ldLnRleHQgIT09ICcgJykge1xyXG4gICAgICAgICAgICAgICAgd2FybihcInRleHQgXFxcIlwiLmNvbmNhdChjaGlsZHJlbltpXS50ZXh0LnRyaW0oKSwgXCJcXFwiIGJldHdlZW4gdi1pZiBhbmQgdi1lbHNlKC1pZikgXCIpICtcclxuICAgICAgICAgICAgICAgICAgICBcIndpbGwgYmUgaWdub3JlZC5cIiwgY2hpbGRyZW5baV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNoaWxkcmVuLnBvcCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBhZGRJZkNvbmRpdGlvbihlbCwgY29uZGl0aW9uKSB7XHJcbiAgICBpZiAoIWVsLmlmQ29uZGl0aW9ucykge1xyXG4gICAgICAgIGVsLmlmQ29uZGl0aW9ucyA9IFtdO1xyXG4gICAgfVxyXG4gICAgZWwuaWZDb25kaXRpb25zLnB1c2goY29uZGl0aW9uKTtcclxufVxyXG5mdW5jdGlvbiBwcm9jZXNzT25jZShlbCkge1xyXG4gICAgdmFyIG9uY2UgPSBnZXRBbmRSZW1vdmVBdHRyKGVsLCAndi1vbmNlJyk7XHJcbiAgICBpZiAob25jZSAhPSBudWxsKSB7XHJcbiAgICAgICAgZWwub25jZSA9IHRydWU7XHJcbiAgICB9XHJcbn1cclxuLy8gaGFuZGxlIGNvbnRlbnQgYmVpbmcgcGFzc2VkIHRvIGEgY29tcG9uZW50IGFzIHNsb3QsXHJcbi8vIGUuZy4gPHRlbXBsYXRlIHNsb3Q9XCJ4eHhcIj4sIDxkaXYgc2xvdC1zY29wZT1cInh4eFwiPlxyXG5mdW5jdGlvbiBwcm9jZXNzU2xvdENvbnRlbnQoZWwpIHtcclxuICAgIHZhciBzbG90U2NvcGU7XHJcbiAgICBpZiAoZWwudGFnID09PSAndGVtcGxhdGUnKSB7XHJcbiAgICAgICAgc2xvdFNjb3BlID0gZ2V0QW5kUmVtb3ZlQXR0cihlbCwgJ3Njb3BlJyk7XHJcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXHJcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgc2xvdFNjb3BlKSB7XHJcbiAgICAgICAgICAgIHdhcm4oXCJ0aGUgXFxcInNjb3BlXFxcIiBhdHRyaWJ1dGUgZm9yIHNjb3BlZCBzbG90cyBoYXZlIGJlZW4gZGVwcmVjYXRlZCBhbmQgXCIgK1xyXG4gICAgICAgICAgICAgICAgXCJyZXBsYWNlZCBieSBcXFwic2xvdC1zY29wZVxcXCIgc2luY2UgMi41LiBUaGUgbmV3IFxcXCJzbG90LXNjb3BlXFxcIiBhdHRyaWJ1dGUgXCIgK1xyXG4gICAgICAgICAgICAgICAgXCJjYW4gYWxzbyBiZSB1c2VkIG9uIHBsYWluIGVsZW1lbnRzIGluIGFkZGl0aW9uIHRvIDx0ZW1wbGF0ZT4gdG8gXCIgK1xyXG4gICAgICAgICAgICAgICAgXCJkZW5vdGUgc2NvcGVkIHNsb3RzLlwiLCBlbC5yYXdBdHRyc01hcFsnc2NvcGUnXSwgdHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsLnNsb3RTY29wZSA9IHNsb3RTY29wZSB8fCBnZXRBbmRSZW1vdmVBdHRyKGVsLCAnc2xvdC1zY29wZScpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoKHNsb3RTY29wZSA9IGdldEFuZFJlbW92ZUF0dHIoZWwsICdzbG90LXNjb3BlJykpKSB7XHJcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXHJcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgZWwuYXR0cnNNYXBbJ3YtZm9yJ10pIHtcclxuICAgICAgICAgICAgd2FybihcIkFtYmlndW91cyBjb21iaW5lZCB1c2FnZSBvZiBzbG90LXNjb3BlIGFuZCB2LWZvciBvbiA8XCIuY29uY2F0KGVsLnRhZywgXCI+IFwiKSArXHJcbiAgICAgICAgICAgICAgICBcIih2LWZvciB0YWtlcyBoaWdoZXIgcHJpb3JpdHkpLiBVc2UgYSB3cmFwcGVyIDx0ZW1wbGF0ZT4gZm9yIHRoZSBcIiArXHJcbiAgICAgICAgICAgICAgICBcInNjb3BlZCBzbG90IHRvIG1ha2UgaXQgY2xlYXJlci5cIiwgZWwucmF3QXR0cnNNYXBbJ3Nsb3Qtc2NvcGUnXSwgdHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsLnNsb3RTY29wZSA9IHNsb3RTY29wZTtcclxuICAgIH1cclxuICAgIC8vIHNsb3Q9XCJ4eHhcIlxyXG4gICAgdmFyIHNsb3RUYXJnZXQgPSBnZXRCaW5kaW5nQXR0cihlbCwgJ3Nsb3QnKTtcclxuICAgIGlmIChzbG90VGFyZ2V0KSB7XHJcbiAgICAgICAgZWwuc2xvdFRhcmdldCA9IHNsb3RUYXJnZXQgPT09ICdcIlwiJyA/ICdcImRlZmF1bHRcIicgOiBzbG90VGFyZ2V0O1xyXG4gICAgICAgIGVsLnNsb3RUYXJnZXREeW5hbWljID0gISEoZWwuYXR0cnNNYXBbJzpzbG90J10gfHwgZWwuYXR0cnNNYXBbJ3YtYmluZDpzbG90J10pO1xyXG4gICAgICAgIC8vIHByZXNlcnZlIHNsb3QgYXMgYW4gYXR0cmlidXRlIGZvciBuYXRpdmUgc2hhZG93IERPTSBjb21wYXRcclxuICAgICAgICAvLyBvbmx5IGZvciBub24tc2NvcGVkIHNsb3RzLlxyXG4gICAgICAgIGlmIChlbC50YWcgIT09ICd0ZW1wbGF0ZScgJiYgIWVsLnNsb3RTY29wZSkge1xyXG4gICAgICAgICAgICBhZGRBdHRyKGVsLCAnc2xvdCcsIHNsb3RUYXJnZXQsIGdldFJhd0JpbmRpbmdBdHRyKGVsLCAnc2xvdCcpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyAyLjYgdi1zbG90IHN5bnRheFxyXG4gICAge1xyXG4gICAgICAgIGlmIChlbC50YWcgPT09ICd0ZW1wbGF0ZScpIHtcclxuICAgICAgICAgICAgLy8gdi1zbG90IG9uIDx0ZW1wbGF0ZT5cclxuICAgICAgICAgICAgdmFyIHNsb3RCaW5kaW5nID0gZ2V0QW5kUmVtb3ZlQXR0ckJ5UmVnZXgoZWwsIHNsb3RSRSk7XHJcbiAgICAgICAgICAgIGlmIChzbG90QmluZGluZykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZWwuc2xvdFRhcmdldCB8fCBlbC5zbG90U2NvcGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2FybihcIlVuZXhwZWN0ZWQgbWl4ZWQgdXNhZ2Ugb2YgZGlmZmVyZW50IHNsb3Qgc3ludGF4ZXMuXCIsIGVsKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVsLnBhcmVudCAmJiAhbWF5YmVDb21wb25lbnQoZWwucGFyZW50KSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB3YXJuKFwiPHRlbXBsYXRlIHYtc2xvdD4gY2FuIG9ubHkgYXBwZWFyIGF0IHRoZSByb290IGxldmVsIGluc2lkZSBcIiArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInRoZSByZWNlaXZpbmcgY29tcG9uZW50XCIsIGVsKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB2YXIgX2EgPSBnZXRTbG90TmFtZShzbG90QmluZGluZyksIG5hbWVfMiA9IF9hLm5hbWUsIGR5bmFtaWMgPSBfYS5keW5hbWljO1xyXG4gICAgICAgICAgICAgICAgZWwuc2xvdFRhcmdldCA9IG5hbWVfMjtcclxuICAgICAgICAgICAgICAgIGVsLnNsb3RUYXJnZXREeW5hbWljID0gZHluYW1pYztcclxuICAgICAgICAgICAgICAgIGVsLnNsb3RTY29wZSA9IHNsb3RCaW5kaW5nLnZhbHVlIHx8IGVtcHR5U2xvdFNjb3BlVG9rZW47IC8vIGZvcmNlIGl0IGludG8gYSBzY29wZWQgc2xvdCBmb3IgcGVyZlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAvLyB2LXNsb3Qgb24gY29tcG9uZW50LCBkZW5vdGVzIGRlZmF1bHQgc2xvdFxyXG4gICAgICAgICAgICB2YXIgc2xvdEJpbmRpbmcgPSBnZXRBbmRSZW1vdmVBdHRyQnlSZWdleChlbCwgc2xvdFJFKTtcclxuICAgICAgICAgICAgaWYgKHNsb3RCaW5kaW5nKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghbWF5YmVDb21wb25lbnQoZWwpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdhcm4oXCJ2LXNsb3QgY2FuIG9ubHkgYmUgdXNlZCBvbiBjb21wb25lbnRzIG9yIDx0ZW1wbGF0ZT4uXCIsIHNsb3RCaW5kaW5nKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVsLnNsb3RTY29wZSB8fCBlbC5zbG90VGFyZ2V0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdhcm4oXCJVbmV4cGVjdGVkIG1peGVkIHVzYWdlIG9mIGRpZmZlcmVudCBzbG90IHN5bnRheGVzLlwiLCBlbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlbC5zY29wZWRTbG90cykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB3YXJuKFwiVG8gYXZvaWQgc2NvcGUgYW1iaWd1aXR5LCB0aGUgZGVmYXVsdCBzbG90IHNob3VsZCBhbHNvIHVzZSBcIiArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIjx0ZW1wbGF0ZT4gc3ludGF4IHdoZW4gdGhlcmUgYXJlIG90aGVyIG5hbWVkIHNsb3RzLlwiLCBzbG90QmluZGluZyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gYWRkIHRoZSBjb21wb25lbnQncyBjaGlsZHJlbiB0byBpdHMgZGVmYXVsdCBzbG90XHJcbiAgICAgICAgICAgICAgICB2YXIgc2xvdHMgPSBlbC5zY29wZWRTbG90cyB8fCAoZWwuc2NvcGVkU2xvdHMgPSB7fSk7XHJcbiAgICAgICAgICAgICAgICB2YXIgX2IgPSBnZXRTbG90TmFtZShzbG90QmluZGluZyksIG5hbWVfMyA9IF9iLm5hbWUsIGR5bmFtaWMgPSBfYi5keW5hbWljO1xyXG4gICAgICAgICAgICAgICAgdmFyIHNsb3RDb250YWluZXJfMSA9IChzbG90c1tuYW1lXzNdID0gY3JlYXRlQVNURWxlbWVudCgndGVtcGxhdGUnLCBbXSwgZWwpKTtcclxuICAgICAgICAgICAgICAgIHNsb3RDb250YWluZXJfMS5zbG90VGFyZ2V0ID0gbmFtZV8zO1xyXG4gICAgICAgICAgICAgICAgc2xvdENvbnRhaW5lcl8xLnNsb3RUYXJnZXREeW5hbWljID0gZHluYW1pYztcclxuICAgICAgICAgICAgICAgIHNsb3RDb250YWluZXJfMS5jaGlsZHJlbiA9IGVsLmNoaWxkcmVuLmZpbHRlcihmdW5jdGlvbiAoYykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghYy5zbG90U2NvcGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYy5wYXJlbnQgPSBzbG90Q29udGFpbmVyXzE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgc2xvdENvbnRhaW5lcl8xLnNsb3RTY29wZSA9IHNsb3RCaW5kaW5nLnZhbHVlIHx8IGVtcHR5U2xvdFNjb3BlVG9rZW47XHJcbiAgICAgICAgICAgICAgICAvLyByZW1vdmUgY2hpbGRyZW4gYXMgdGhleSBhcmUgcmV0dXJuZWQgZnJvbSBzY29wZWRTbG90cyBub3dcclxuICAgICAgICAgICAgICAgIGVsLmNoaWxkcmVuID0gW107XHJcbiAgICAgICAgICAgICAgICAvLyBtYXJrIGVsIG5vbi1wbGFpbiBzbyBkYXRhIGdldHMgZ2VuZXJhdGVkXHJcbiAgICAgICAgICAgICAgICBlbC5wbGFpbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIGdldFNsb3ROYW1lKGJpbmRpbmcpIHtcclxuICAgIHZhciBuYW1lID0gYmluZGluZy5uYW1lLnJlcGxhY2Uoc2xvdFJFLCAnJyk7XHJcbiAgICBpZiAoIW5hbWUpIHtcclxuICAgICAgICBpZiAoYmluZGluZy5uYW1lWzBdICE9PSAnIycpIHtcclxuICAgICAgICAgICAgbmFtZSA9ICdkZWZhdWx0JztcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xyXG4gICAgICAgICAgICB3YXJuKFwidi1zbG90IHNob3J0aGFuZCBzeW50YXggcmVxdWlyZXMgYSBzbG90IG5hbWUuXCIsIGJpbmRpbmcpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBkeW5hbWljQXJnUkUudGVzdChuYW1lKVxyXG4gICAgICAgID8gLy8gZHluYW1pYyBbbmFtZV1cclxuICAgICAgICAgICAgeyBuYW1lOiBuYW1lLnNsaWNlKDEsIC0xKSwgZHluYW1pYzogdHJ1ZSB9XHJcbiAgICAgICAgOiAvLyBzdGF0aWMgbmFtZVxyXG4gICAgICAgICAgICB7IG5hbWU6IFwiXFxcIlwiLmNvbmNhdChuYW1lLCBcIlxcXCJcIiksIGR5bmFtaWM6IGZhbHNlIH07XHJcbn1cclxuLy8gaGFuZGxlIDxzbG90Lz4gb3V0bGV0c1xyXG5mdW5jdGlvbiBwcm9jZXNzU2xvdE91dGxldChlbCkge1xyXG4gICAgaWYgKGVsLnRhZyA9PT0gJ3Nsb3QnKSB7XHJcbiAgICAgICAgZWwuc2xvdE5hbWUgPSBnZXRCaW5kaW5nQXR0cihlbCwgJ25hbWUnKTtcclxuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBlbC5rZXkpIHtcclxuICAgICAgICAgICAgd2FybihcImBrZXlgIGRvZXMgbm90IHdvcmsgb24gPHNsb3Q+IGJlY2F1c2Ugc2xvdHMgYXJlIGFic3RyYWN0IG91dGxldHMgXCIgK1xyXG4gICAgICAgICAgICAgICAgXCJhbmQgY2FuIHBvc3NpYmx5IGV4cGFuZCBpbnRvIG11bHRpcGxlIGVsZW1lbnRzLiBcIiArXHJcbiAgICAgICAgICAgICAgICBcIlVzZSB0aGUga2V5IG9uIGEgd3JhcHBpbmcgZWxlbWVudCBpbnN0ZWFkLlwiLCBnZXRSYXdCaW5kaW5nQXR0cihlbCwgJ2tleScpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gcHJvY2Vzc0NvbXBvbmVudChlbCkge1xyXG4gICAgdmFyIGJpbmRpbmc7XHJcbiAgICBpZiAoKGJpbmRpbmcgPSBnZXRCaW5kaW5nQXR0cihlbCwgJ2lzJykpKSB7XHJcbiAgICAgICAgZWwuY29tcG9uZW50ID0gYmluZGluZztcclxuICAgIH1cclxuICAgIGlmIChnZXRBbmRSZW1vdmVBdHRyKGVsLCAnaW5saW5lLXRlbXBsYXRlJykgIT0gbnVsbCkge1xyXG4gICAgICAgIGVsLmlubGluZVRlbXBsYXRlID0gdHJ1ZTtcclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBwcm9jZXNzQXR0cnMoZWwpIHtcclxuICAgIHZhciBsaXN0ID0gZWwuYXR0cnNMaXN0O1xyXG4gICAgdmFyIGksIGwsIG5hbWUsIHJhd05hbWUsIHZhbHVlLCBtb2RpZmllcnMsIHN5bmNHZW4sIGlzRHluYW1pYztcclxuICAgIGZvciAoaSA9IDAsIGwgPSBsaXN0Lmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgIG5hbWUgPSByYXdOYW1lID0gbGlzdFtpXS5uYW1lO1xyXG4gICAgICAgIHZhbHVlID0gbGlzdFtpXS52YWx1ZTtcclxuICAgICAgICBpZiAoZGlyUkUudGVzdChuYW1lKSkge1xyXG4gICAgICAgICAgICAvLyBtYXJrIGVsZW1lbnQgYXMgZHluYW1pY1xyXG4gICAgICAgICAgICBlbC5oYXNCaW5kaW5ncyA9IHRydWU7XHJcbiAgICAgICAgICAgIC8vIG1vZGlmaWVyc1xyXG4gICAgICAgICAgICBtb2RpZmllcnMgPSBwYXJzZU1vZGlmaWVycyhuYW1lLnJlcGxhY2UoZGlyUkUsICcnKSk7XHJcbiAgICAgICAgICAgIC8vIHN1cHBvcnQgLmZvbyBzaG9ydGhhbmQgc3ludGF4IGZvciB0aGUgLnByb3AgbW9kaWZpZXJcclxuICAgICAgICAgICAgaWYgKG1vZGlmaWVycykge1xyXG4gICAgICAgICAgICAgICAgbmFtZSA9IG5hbWUucmVwbGFjZShtb2RpZmllclJFLCAnJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGJpbmRSRS50ZXN0KG5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICAvLyB2LWJpbmRcclxuICAgICAgICAgICAgICAgIG5hbWUgPSBuYW1lLnJlcGxhY2UoYmluZFJFLCAnJyk7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHBhcnNlRmlsdGVycyh2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICBpc0R5bmFtaWMgPSBkeW5hbWljQXJnUkUudGVzdChuYW1lKTtcclxuICAgICAgICAgICAgICAgIGlmIChpc0R5bmFtaWMpIHtcclxuICAgICAgICAgICAgICAgICAgICBuYW1lID0gbmFtZS5zbGljZSgxLCAtMSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB2YWx1ZS50cmltKCkubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgd2FybihcIlRoZSB2YWx1ZSBmb3IgYSB2LWJpbmQgZXhwcmVzc2lvbiBjYW5ub3QgYmUgZW1wdHkuIEZvdW5kIGluIFxcXCJ2LWJpbmQ6XCIuY29uY2F0KG5hbWUsIFwiXFxcIlwiKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAobW9kaWZpZXJzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1vZGlmaWVycy5wcm9wICYmICFpc0R5bmFtaWMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IGNhbWVsaXplKG5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobmFtZSA9PT0gJ2lubmVySHRtbCcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gJ2lubmVySFRNTCc7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChtb2RpZmllcnMuY2FtZWwgJiYgIWlzRHluYW1pYykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gY2FtZWxpemUobmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChtb2RpZmllcnMuc3luYykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzeW5jR2VuID0gZ2VuQXNzaWdubWVudENvZGUodmFsdWUsIFwiJGV2ZW50XCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzRHluYW1pYykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkSGFuZGxlcihlbCwgXCJ1cGRhdGU6XCIuY29uY2F0KGNhbWVsaXplKG5hbWUpKSwgc3luY0dlbiwgbnVsbCwgZmFsc2UsIHdhcm4sIGxpc3RbaV0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGh5cGhlbmF0ZShuYW1lKSAhPT0gY2FtZWxpemUobmFtZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRIYW5kbGVyKGVsLCBcInVwZGF0ZTpcIi5jb25jYXQoaHlwaGVuYXRlKG5hbWUpKSwgc3luY0dlbiwgbnVsbCwgZmFsc2UsIHdhcm4sIGxpc3RbaV0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGFuZGxlciB3LyBkeW5hbWljIGV2ZW50IG5hbWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEhhbmRsZXIoZWwsIFwiXFxcInVwZGF0ZTpcXFwiKyhcIi5jb25jYXQobmFtZSwgXCIpXCIpLCBzeW5jR2VuLCBudWxsLCBmYWxzZSwgd2FybiwgbGlzdFtpXSwgdHJ1ZSAvLyBkeW5hbWljXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKChtb2RpZmllcnMgJiYgbW9kaWZpZXJzLnByb3ApIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgKCFlbC5jb21wb25lbnQgJiYgcGxhdGZvcm1NdXN0VXNlUHJvcChlbC50YWcsIGVsLmF0dHJzTWFwLnR5cGUsIG5hbWUpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGFkZFByb3AoZWwsIG5hbWUsIHZhbHVlLCBsaXN0W2ldLCBpc0R5bmFtaWMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYWRkQXR0cihlbCwgbmFtZSwgdmFsdWUsIGxpc3RbaV0sIGlzRHluYW1pYyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAob25SRS50ZXN0KG5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICAvLyB2LW9uXHJcbiAgICAgICAgICAgICAgICBuYW1lID0gbmFtZS5yZXBsYWNlKG9uUkUsICcnKTtcclxuICAgICAgICAgICAgICAgIGlzRHluYW1pYyA9IGR5bmFtaWNBcmdSRS50ZXN0KG5hbWUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzRHluYW1pYykge1xyXG4gICAgICAgICAgICAgICAgICAgIG5hbWUgPSBuYW1lLnNsaWNlKDEsIC0xKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGFkZEhhbmRsZXIoZWwsIG5hbWUsIHZhbHVlLCBtb2RpZmllcnMsIGZhbHNlLCB3YXJuLCBsaXN0W2ldLCBpc0R5bmFtaWMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gbm9ybWFsIGRpcmVjdGl2ZXNcclxuICAgICAgICAgICAgICAgIG5hbWUgPSBuYW1lLnJlcGxhY2UoZGlyUkUsICcnKTtcclxuICAgICAgICAgICAgICAgIC8vIHBhcnNlIGFyZ1xyXG4gICAgICAgICAgICAgICAgdmFyIGFyZ01hdGNoID0gbmFtZS5tYXRjaChhcmdSRSk7XHJcbiAgICAgICAgICAgICAgICB2YXIgYXJnID0gYXJnTWF0Y2ggJiYgYXJnTWF0Y2hbMV07XHJcbiAgICAgICAgICAgICAgICBpc0R5bmFtaWMgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGlmIChhcmcpIHtcclxuICAgICAgICAgICAgICAgICAgICBuYW1lID0gbmFtZS5zbGljZSgwLCAtKGFyZy5sZW5ndGggKyAxKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGR5bmFtaWNBcmdSRS50ZXN0KGFyZykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gYXJnLnNsaWNlKDEsIC0xKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXNEeW5hbWljID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBhZGREaXJlY3RpdmUoZWwsIG5hbWUsIHJhd05hbWUsIHZhbHVlLCBhcmcsIGlzRHluYW1pYywgbW9kaWZpZXJzLCBsaXN0W2ldKTtcclxuICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIG5hbWUgPT09ICdtb2RlbCcpIHtcclxuICAgICAgICAgICAgICAgICAgICBjaGVja0ZvckFsaWFzTW9kZWwoZWwsIHZhbHVlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy8gbGl0ZXJhbCBhdHRyaWJ1dGVcclxuICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcclxuICAgICAgICAgICAgICAgIHZhciByZXMgPSBwYXJzZVRleHQodmFsdWUsIGRlbGltaXRlcnMpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlcykge1xyXG4gICAgICAgICAgICAgICAgICAgIHdhcm4oXCJcIi5jb25jYXQobmFtZSwgXCI9XFxcIlwiKS5jb25jYXQodmFsdWUsIFwiXFxcIjogXCIpICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ0ludGVycG9sYXRpb24gaW5zaWRlIGF0dHJpYnV0ZXMgaGFzIGJlZW4gcmVtb3ZlZC4gJyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICdVc2Ugdi1iaW5kIG9yIHRoZSBjb2xvbiBzaG9ydGhhbmQgaW5zdGVhZC4gRm9yIGV4YW1wbGUsICcgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAnaW5zdGVhZCBvZiA8ZGl2IGlkPVwie3sgdmFsIH19XCI+LCB1c2UgPGRpdiA6aWQ9XCJ2YWxcIj4uJywgbGlzdFtpXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYWRkQXR0cihlbCwgbmFtZSwgSlNPTi5zdHJpbmdpZnkodmFsdWUpLCBsaXN0W2ldKTtcclxuICAgICAgICAgICAgLy8gIzY4ODcgZmlyZWZveCBkb2Vzbid0IHVwZGF0ZSBtdXRlZCBzdGF0ZSBpZiBzZXQgdmlhIGF0dHJpYnV0ZVxyXG4gICAgICAgICAgICAvLyBldmVuIGltbWVkaWF0ZWx5IGFmdGVyIGVsZW1lbnQgY3JlYXRpb25cclxuICAgICAgICAgICAgaWYgKCFlbC5jb21wb25lbnQgJiZcclxuICAgICAgICAgICAgICAgIG5hbWUgPT09ICdtdXRlZCcgJiZcclxuICAgICAgICAgICAgICAgIHBsYXRmb3JtTXVzdFVzZVByb3AoZWwudGFnLCBlbC5hdHRyc01hcC50eXBlLCBuYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgYWRkUHJvcChlbCwgbmFtZSwgJ3RydWUnLCBsaXN0W2ldKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBjaGVja0luRm9yKGVsKSB7XHJcbiAgICB2YXIgcGFyZW50ID0gZWw7XHJcbiAgICB3aGlsZSAocGFyZW50KSB7XHJcbiAgICAgICAgaWYgKHBhcmVudC5mb3IgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcGFyZW50ID0gcGFyZW50LnBhcmVudDtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxufVxyXG5mdW5jdGlvbiBwYXJzZU1vZGlmaWVycyhuYW1lKSB7XHJcbiAgICB2YXIgbWF0Y2ggPSBuYW1lLm1hdGNoKG1vZGlmaWVyUkUpO1xyXG4gICAgaWYgKG1hdGNoKSB7XHJcbiAgICAgICAgdmFyIHJldF8xID0ge307XHJcbiAgICAgICAgbWF0Y2guZm9yRWFjaChmdW5jdGlvbiAobSkge1xyXG4gICAgICAgICAgICByZXRfMVttLnNsaWNlKDEpXSA9IHRydWU7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHJldF8xO1xyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIG1ha2VBdHRyc01hcChhdHRycykge1xyXG4gICAgdmFyIG1hcCA9IHt9O1xyXG4gICAgZm9yICh2YXIgaSA9IDAsIGwgPSBhdHRycy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBtYXBbYXR0cnNbaV0ubmFtZV0gJiYgIWlzSUUgJiYgIWlzRWRnZSkge1xyXG4gICAgICAgICAgICB3YXJuKCdkdXBsaWNhdGUgYXR0cmlidXRlOiAnICsgYXR0cnNbaV0ubmFtZSwgYXR0cnNbaV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBtYXBbYXR0cnNbaV0ubmFtZV0gPSBhdHRyc1tpXS52YWx1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBtYXA7XHJcbn1cclxuLy8gZm9yIHNjcmlwdCAoZS5nLiB0eXBlPVwieC90ZW1wbGF0ZVwiKSBvciBzdHlsZSwgZG8gbm90IGRlY29kZSBjb250ZW50XHJcbmZ1bmN0aW9uIGlzVGV4dFRhZyhlbCkge1xyXG4gICAgcmV0dXJuIGVsLnRhZyA9PT0gJ3NjcmlwdCcgfHwgZWwudGFnID09PSAnc3R5bGUnO1xyXG59XHJcbmZ1bmN0aW9uIGlzRm9yYmlkZGVuVGFnKGVsKSB7XHJcbiAgICByZXR1cm4gKGVsLnRhZyA9PT0gJ3N0eWxlJyB8fFxyXG4gICAgICAgIChlbC50YWcgPT09ICdzY3JpcHQnICYmXHJcbiAgICAgICAgICAgICghZWwuYXR0cnNNYXAudHlwZSB8fCBlbC5hdHRyc01hcC50eXBlID09PSAndGV4dC9qYXZhc2NyaXB0JykpKTtcclxufVxyXG52YXIgaWVOU0J1ZyA9IC9eeG1sbnM6TlNcXGQrLztcclxudmFyIGllTlNQcmVmaXggPSAvXk5TXFxkKzovO1xyXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xyXG5mdW5jdGlvbiBndWFyZElFU1ZHQnVnKGF0dHJzKSB7XHJcbiAgICB2YXIgcmVzID0gW107XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdmFyIGF0dHIgPSBhdHRyc1tpXTtcclxuICAgICAgICBpZiAoIWllTlNCdWcudGVzdChhdHRyLm5hbWUpKSB7XHJcbiAgICAgICAgICAgIGF0dHIubmFtZSA9IGF0dHIubmFtZS5yZXBsYWNlKGllTlNQcmVmaXgsICcnKTtcclxuICAgICAgICAgICAgcmVzLnB1c2goYXR0cik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlcztcclxufVxyXG5mdW5jdGlvbiBjaGVja0ZvckFsaWFzTW9kZWwoZWwsIHZhbHVlKSB7XHJcbiAgICB2YXIgX2VsID0gZWw7XHJcbiAgICB3aGlsZSAoX2VsKSB7XHJcbiAgICAgICAgaWYgKF9lbC5mb3IgJiYgX2VsLmFsaWFzID09PSB2YWx1ZSkge1xyXG4gICAgICAgICAgICB3YXJuKFwiPFwiLmNvbmNhdChlbC50YWcsIFwiIHYtbW9kZWw9XFxcIlwiKS5jb25jYXQodmFsdWUsIFwiXFxcIj46IFwiKSArXHJcbiAgICAgICAgICAgICAgICBcIllvdSBhcmUgYmluZGluZyB2LW1vZGVsIGRpcmVjdGx5IHRvIGEgdi1mb3IgaXRlcmF0aW9uIGFsaWFzLiBcIiArXHJcbiAgICAgICAgICAgICAgICBcIlRoaXMgd2lsbCBub3QgYmUgYWJsZSB0byBtb2RpZnkgdGhlIHYtZm9yIHNvdXJjZSBhcnJheSBiZWNhdXNlIFwiICtcclxuICAgICAgICAgICAgICAgIFwid3JpdGluZyB0byB0aGUgYWxpYXMgaXMgbGlrZSBtb2RpZnlpbmcgYSBmdW5jdGlvbiBsb2NhbCB2YXJpYWJsZS4gXCIgK1xyXG4gICAgICAgICAgICAgICAgXCJDb25zaWRlciB1c2luZyBhbiBhcnJheSBvZiBvYmplY3RzIGFuZCB1c2Ugdi1tb2RlbCBvbiBhbiBvYmplY3QgcHJvcGVydHkgaW5zdGVhZC5cIiwgZWwucmF3QXR0cnNNYXBbJ3YtbW9kZWwnXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIF9lbCA9IF9lbC5wYXJlbnQ7XHJcbiAgICB9XHJcbn1cblxuLyoqXHJcbiAqIEV4cGFuZCBpbnB1dFt2LW1vZGVsXSB3aXRoIGR5bmFtaWMgdHlwZSBiaW5kaW5ncyBpbnRvIHYtaWYtZWxzZSBjaGFpbnNcclxuICogVHVybiB0aGlzOlxyXG4gKiAgIDxpbnB1dCB2LW1vZGVsPVwiZGF0YVt0eXBlXVwiIDp0eXBlPVwidHlwZVwiPlxyXG4gKiBpbnRvIHRoaXM6XHJcbiAqICAgPGlucHV0IHYtaWY9XCJ0eXBlID09PSAnY2hlY2tib3gnXCIgdHlwZT1cImNoZWNrYm94XCIgdi1tb2RlbD1cImRhdGFbdHlwZV1cIj5cclxuICogICA8aW5wdXQgdi1lbHNlLWlmPVwidHlwZSA9PT0gJ3JhZGlvJ1wiIHR5cGU9XCJyYWRpb1wiIHYtbW9kZWw9XCJkYXRhW3R5cGVdXCI+XHJcbiAqICAgPGlucHV0IHYtZWxzZSA6dHlwZT1cInR5cGVcIiB2LW1vZGVsPVwiZGF0YVt0eXBlXVwiPlxyXG4gKi9cclxuZnVuY3Rpb24gcHJlVHJhbnNmb3JtTm9kZShlbCwgb3B0aW9ucykge1xyXG4gICAgaWYgKGVsLnRhZyA9PT0gJ2lucHV0Jykge1xyXG4gICAgICAgIHZhciBtYXAgPSBlbC5hdHRyc01hcDtcclxuICAgICAgICBpZiAoIW1hcFsndi1tb2RlbCddKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHR5cGVCaW5kaW5nID0gdm9pZCAwO1xyXG4gICAgICAgIGlmIChtYXBbJzp0eXBlJ10gfHwgbWFwWyd2LWJpbmQ6dHlwZSddKSB7XHJcbiAgICAgICAgICAgIHR5cGVCaW5kaW5nID0gZ2V0QmluZGluZ0F0dHIoZWwsICd0eXBlJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghbWFwLnR5cGUgJiYgIXR5cGVCaW5kaW5nICYmIG1hcFsndi1iaW5kJ10pIHtcclxuICAgICAgICAgICAgdHlwZUJpbmRpbmcgPSBcIihcIi5jb25jYXQobWFwWyd2LWJpbmQnXSwgXCIpLnR5cGVcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0eXBlQmluZGluZykge1xyXG4gICAgICAgICAgICB2YXIgaWZDb25kaXRpb24gPSBnZXRBbmRSZW1vdmVBdHRyKGVsLCAndi1pZicsIHRydWUpO1xyXG4gICAgICAgICAgICB2YXIgaWZDb25kaXRpb25FeHRyYSA9IGlmQ29uZGl0aW9uID8gXCImJihcIi5jb25jYXQoaWZDb25kaXRpb24sIFwiKVwiKSA6IFwiXCI7XHJcbiAgICAgICAgICAgIHZhciBoYXNFbHNlID0gZ2V0QW5kUmVtb3ZlQXR0cihlbCwgJ3YtZWxzZScsIHRydWUpICE9IG51bGw7XHJcbiAgICAgICAgICAgIHZhciBlbHNlSWZDb25kaXRpb24gPSBnZXRBbmRSZW1vdmVBdHRyKGVsLCAndi1lbHNlLWlmJywgdHJ1ZSk7XHJcbiAgICAgICAgICAgIC8vIDEuIGNoZWNrYm94XHJcbiAgICAgICAgICAgIHZhciBicmFuY2gwID0gY2xvbmVBU1RFbGVtZW50KGVsKTtcclxuICAgICAgICAgICAgLy8gcHJvY2VzcyBmb3Igb24gdGhlIG1haW4gbm9kZVxyXG4gICAgICAgICAgICBwcm9jZXNzRm9yKGJyYW5jaDApO1xyXG4gICAgICAgICAgICBhZGRSYXdBdHRyKGJyYW5jaDAsICd0eXBlJywgJ2NoZWNrYm94Jyk7XHJcbiAgICAgICAgICAgIHByb2Nlc3NFbGVtZW50KGJyYW5jaDAsIG9wdGlvbnMpO1xyXG4gICAgICAgICAgICBicmFuY2gwLnByb2Nlc3NlZCA9IHRydWU7IC8vIHByZXZlbnQgaXQgZnJvbSBkb3VibGUtcHJvY2Vzc2VkXHJcbiAgICAgICAgICAgIGJyYW5jaDAuaWYgPSBcIihcIi5jb25jYXQodHlwZUJpbmRpbmcsIFwiKT09PSdjaGVja2JveCdcIikgKyBpZkNvbmRpdGlvbkV4dHJhO1xyXG4gICAgICAgICAgICBhZGRJZkNvbmRpdGlvbihicmFuY2gwLCB7XHJcbiAgICAgICAgICAgICAgICBleHA6IGJyYW5jaDAuaWYsXHJcbiAgICAgICAgICAgICAgICBibG9jazogYnJhbmNoMFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgLy8gMi4gYWRkIHJhZGlvIGVsc2UtaWYgY29uZGl0aW9uXHJcbiAgICAgICAgICAgIHZhciBicmFuY2gxID0gY2xvbmVBU1RFbGVtZW50KGVsKTtcclxuICAgICAgICAgICAgZ2V0QW5kUmVtb3ZlQXR0cihicmFuY2gxLCAndi1mb3InLCB0cnVlKTtcclxuICAgICAgICAgICAgYWRkUmF3QXR0cihicmFuY2gxLCAndHlwZScsICdyYWRpbycpO1xyXG4gICAgICAgICAgICBwcm9jZXNzRWxlbWVudChicmFuY2gxLCBvcHRpb25zKTtcclxuICAgICAgICAgICAgYWRkSWZDb25kaXRpb24oYnJhbmNoMCwge1xyXG4gICAgICAgICAgICAgICAgZXhwOiBcIihcIi5jb25jYXQodHlwZUJpbmRpbmcsIFwiKT09PSdyYWRpbydcIikgKyBpZkNvbmRpdGlvbkV4dHJhLFxyXG4gICAgICAgICAgICAgICAgYmxvY2s6IGJyYW5jaDFcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIC8vIDMuIG90aGVyXHJcbiAgICAgICAgICAgIHZhciBicmFuY2gyID0gY2xvbmVBU1RFbGVtZW50KGVsKTtcclxuICAgICAgICAgICAgZ2V0QW5kUmVtb3ZlQXR0cihicmFuY2gyLCAndi1mb3InLCB0cnVlKTtcclxuICAgICAgICAgICAgYWRkUmF3QXR0cihicmFuY2gyLCAnOnR5cGUnLCB0eXBlQmluZGluZyk7XHJcbiAgICAgICAgICAgIHByb2Nlc3NFbGVtZW50KGJyYW5jaDIsIG9wdGlvbnMpO1xyXG4gICAgICAgICAgICBhZGRJZkNvbmRpdGlvbihicmFuY2gwLCB7XHJcbiAgICAgICAgICAgICAgICBleHA6IGlmQ29uZGl0aW9uLFxyXG4gICAgICAgICAgICAgICAgYmxvY2s6IGJyYW5jaDJcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGlmIChoYXNFbHNlKSB7XHJcbiAgICAgICAgICAgICAgICBicmFuY2gwLmVsc2UgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGVsc2VJZkNvbmRpdGlvbikge1xyXG4gICAgICAgICAgICAgICAgYnJhbmNoMC5lbHNlaWYgPSBlbHNlSWZDb25kaXRpb247XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGJyYW5jaDA7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIGNsb25lQVNURWxlbWVudChlbCkge1xyXG4gICAgcmV0dXJuIGNyZWF0ZUFTVEVsZW1lbnQoZWwudGFnLCBlbC5hdHRyc0xpc3Quc2xpY2UoKSwgZWwucGFyZW50KTtcclxufVxyXG52YXIgbW9kZWwgPSB7XHJcbiAgICBwcmVUcmFuc2Zvcm1Ob2RlOiBwcmVUcmFuc2Zvcm1Ob2RlXHJcbn07XG5cbnZhciBtb2R1bGVzID0gW2tsYXNzLCBzdHlsZSwgbW9kZWxdO1xuXG5mdW5jdGlvbiB0ZXh0KGVsLCBkaXIpIHtcclxuICAgIGlmIChkaXIudmFsdWUpIHtcclxuICAgICAgICBhZGRQcm9wKGVsLCAndGV4dENvbnRlbnQnLCBcIl9zKFwiLmNvbmNhdChkaXIudmFsdWUsIFwiKVwiKSwgZGlyKTtcclxuICAgIH1cclxufVxuXG5mdW5jdGlvbiBodG1sKGVsLCBkaXIpIHtcclxuICAgIGlmIChkaXIudmFsdWUpIHtcclxuICAgICAgICBhZGRQcm9wKGVsLCAnaW5uZXJIVE1MJywgXCJfcyhcIi5jb25jYXQoZGlyLnZhbHVlLCBcIilcIiksIGRpcik7XHJcbiAgICB9XHJcbn1cblxudmFyIGRpcmVjdGl2ZXMgPSB7XHJcbiAgICBtb2RlbDogbW9kZWwkMSxcclxuICAgIHRleHQ6IHRleHQsXHJcbiAgICBodG1sOiBodG1sXHJcbn07XG5cbnZhciBiYXNlT3B0aW9ucyA9IHtcclxuICAgIGV4cGVjdEhUTUw6IHRydWUsXHJcbiAgICBtb2R1bGVzOiBtb2R1bGVzLFxyXG4gICAgZGlyZWN0aXZlczogZGlyZWN0aXZlcyxcclxuICAgIGlzUHJlVGFnOiBpc1ByZVRhZyxcclxuICAgIGlzVW5hcnlUYWc6IGlzVW5hcnlUYWcsXHJcbiAgICBtdXN0VXNlUHJvcDogbXVzdFVzZVByb3AsXHJcbiAgICBjYW5CZUxlZnRPcGVuVGFnOiBjYW5CZUxlZnRPcGVuVGFnLFxyXG4gICAgaXNSZXNlcnZlZFRhZzogaXNSZXNlcnZlZFRhZyxcclxuICAgIGdldFRhZ05hbWVzcGFjZTogZ2V0VGFnTmFtZXNwYWNlLFxyXG4gICAgc3RhdGljS2V5czogZ2VuU3RhdGljS2V5cyQxKG1vZHVsZXMpXHJcbn07XG5cbnZhciBpc1N0YXRpY0tleTtcclxudmFyIGlzUGxhdGZvcm1SZXNlcnZlZFRhZztcclxudmFyIGdlblN0YXRpY0tleXNDYWNoZWQgPSBjYWNoZWQoZ2VuU3RhdGljS2V5cyk7XHJcbi8qKlxyXG4gKiBHb2FsIG9mIHRoZSBvcHRpbWl6ZXI6IHdhbGsgdGhlIGdlbmVyYXRlZCB0ZW1wbGF0ZSBBU1QgdHJlZVxyXG4gKiBhbmQgZGV0ZWN0IHN1Yi10cmVlcyB0aGF0IGFyZSBwdXJlbHkgc3RhdGljLCBpLmUuIHBhcnRzIG9mXHJcbiAqIHRoZSBET00gdGhhdCBuZXZlciBuZWVkcyB0byBjaGFuZ2UuXHJcbiAqXHJcbiAqIE9uY2Ugd2UgZGV0ZWN0IHRoZXNlIHN1Yi10cmVlcywgd2UgY2FuOlxyXG4gKlxyXG4gKiAxLiBIb2lzdCB0aGVtIGludG8gY29uc3RhbnRzLCBzbyB0aGF0IHdlIG5vIGxvbmdlciBuZWVkIHRvXHJcbiAqICAgIGNyZWF0ZSBmcmVzaCBub2RlcyBmb3IgdGhlbSBvbiBlYWNoIHJlLXJlbmRlcjtcclxuICogMi4gQ29tcGxldGVseSBza2lwIHRoZW0gaW4gdGhlIHBhdGNoaW5nIHByb2Nlc3MuXHJcbiAqL1xyXG5mdW5jdGlvbiBvcHRpbWl6ZShyb290LCBvcHRpb25zKSB7XHJcbiAgICBpZiAoIXJvb3QpXHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgaXNTdGF0aWNLZXkgPSBnZW5TdGF0aWNLZXlzQ2FjaGVkKG9wdGlvbnMuc3RhdGljS2V5cyB8fCAnJyk7XHJcbiAgICBpc1BsYXRmb3JtUmVzZXJ2ZWRUYWcgPSBvcHRpb25zLmlzUmVzZXJ2ZWRUYWcgfHwgbm87XHJcbiAgICAvLyBmaXJzdCBwYXNzOiBtYXJrIGFsbCBub24tc3RhdGljIG5vZGVzLlxyXG4gICAgbWFya1N0YXRpYyhyb290KTtcclxuICAgIC8vIHNlY29uZCBwYXNzOiBtYXJrIHN0YXRpYyByb290cy5cclxuICAgIG1hcmtTdGF0aWNSb290cyhyb290LCBmYWxzZSk7XHJcbn1cclxuZnVuY3Rpb24gZ2VuU3RhdGljS2V5cyhrZXlzKSB7XHJcbiAgICByZXR1cm4gbWFrZU1hcCgndHlwZSx0YWcsYXR0cnNMaXN0LGF0dHJzTWFwLHBsYWluLHBhcmVudCxjaGlsZHJlbixhdHRycyxzdGFydCxlbmQscmF3QXR0cnNNYXAnICtcclxuICAgICAgICAoa2V5cyA/ICcsJyArIGtleXMgOiAnJykpO1xyXG59XHJcbmZ1bmN0aW9uIG1hcmtTdGF0aWMobm9kZSkge1xyXG4gICAgbm9kZS5zdGF0aWMgPSBpc1N0YXRpYyhub2RlKTtcclxuICAgIGlmIChub2RlLnR5cGUgPT09IDEpIHtcclxuICAgICAgICAvLyBkbyBub3QgbWFrZSBjb21wb25lbnQgc2xvdCBjb250ZW50IHN0YXRpYy4gdGhpcyBhdm9pZHNcclxuICAgICAgICAvLyAxLiBjb21wb25lbnRzIG5vdCBhYmxlIHRvIG11dGF0ZSBzbG90IG5vZGVzXHJcbiAgICAgICAgLy8gMi4gc3RhdGljIHNsb3QgY29udGVudCBmYWlscyBmb3IgaG90LXJlbG9hZGluZ1xyXG4gICAgICAgIGlmICghaXNQbGF0Zm9ybVJlc2VydmVkVGFnKG5vZGUudGFnKSAmJlxyXG4gICAgICAgICAgICBub2RlLnRhZyAhPT0gJ3Nsb3QnICYmXHJcbiAgICAgICAgICAgIG5vZGUuYXR0cnNNYXBbJ2lubGluZS10ZW1wbGF0ZSddID09IG51bGwpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IG5vZGUuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBjaGlsZCA9IG5vZGUuY2hpbGRyZW5baV07XHJcbiAgICAgICAgICAgIG1hcmtTdGF0aWMoY2hpbGQpO1xyXG4gICAgICAgICAgICBpZiAoIWNoaWxkLnN0YXRpYykge1xyXG4gICAgICAgICAgICAgICAgbm9kZS5zdGF0aWMgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobm9kZS5pZkNvbmRpdGlvbnMpIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDEsIGwgPSBub2RlLmlmQ29uZGl0aW9ucy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBibG9jayA9IG5vZGUuaWZDb25kaXRpb25zW2ldLmJsb2NrO1xyXG4gICAgICAgICAgICAgICAgbWFya1N0YXRpYyhibG9jayk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWJsb2NrLnN0YXRpYykge1xyXG4gICAgICAgICAgICAgICAgICAgIG5vZGUuc3RhdGljID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gbWFya1N0YXRpY1Jvb3RzKG5vZGUsIGlzSW5Gb3IpIHtcclxuICAgIGlmIChub2RlLnR5cGUgPT09IDEpIHtcclxuICAgICAgICBpZiAobm9kZS5zdGF0aWMgfHwgbm9kZS5vbmNlKSB7XHJcbiAgICAgICAgICAgIG5vZGUuc3RhdGljSW5Gb3IgPSBpc0luRm9yO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBGb3IgYSBub2RlIHRvIHF1YWxpZnkgYXMgYSBzdGF0aWMgcm9vdCwgaXQgc2hvdWxkIGhhdmUgY2hpbGRyZW4gdGhhdFxyXG4gICAgICAgIC8vIGFyZSBub3QganVzdCBzdGF0aWMgdGV4dC4gT3RoZXJ3aXNlIHRoZSBjb3N0IG9mIGhvaXN0aW5nIG91dCB3aWxsXHJcbiAgICAgICAgLy8gb3V0d2VpZ2ggdGhlIGJlbmVmaXRzIGFuZCBpdCdzIGJldHRlciBvZmYgdG8ganVzdCBhbHdheXMgcmVuZGVyIGl0IGZyZXNoLlxyXG4gICAgICAgIGlmIChub2RlLnN0YXRpYyAmJlxyXG4gICAgICAgICAgICBub2RlLmNoaWxkcmVuLmxlbmd0aCAmJlxyXG4gICAgICAgICAgICAhKG5vZGUuY2hpbGRyZW4ubGVuZ3RoID09PSAxICYmIG5vZGUuY2hpbGRyZW5bMF0udHlwZSA9PT0gMykpIHtcclxuICAgICAgICAgICAgbm9kZS5zdGF0aWNSb290ID0gdHJ1ZTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbm9kZS5zdGF0aWNSb290ID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gbm9kZS5jaGlsZHJlbi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIG1hcmtTdGF0aWNSb290cyhub2RlLmNoaWxkcmVuW2ldLCBpc0luRm9yIHx8ICEhbm9kZS5mb3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChub2RlLmlmQ29uZGl0aW9ucykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMSwgbCA9IG5vZGUuaWZDb25kaXRpb25zLmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgbWFya1N0YXRpY1Jvb3RzKG5vZGUuaWZDb25kaXRpb25zW2ldLmJsb2NrLCBpc0luRm9yKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBpc1N0YXRpYyhub2RlKSB7XHJcbiAgICBpZiAobm9kZS50eXBlID09PSAyKSB7XHJcbiAgICAgICAgLy8gZXhwcmVzc2lvblxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGlmIChub2RlLnR5cGUgPT09IDMpIHtcclxuICAgICAgICAvLyB0ZXh0XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gISEobm9kZS5wcmUgfHxcclxuICAgICAgICAoIW5vZGUuaGFzQmluZGluZ3MgJiYgLy8gbm8gZHluYW1pYyBiaW5kaW5nc1xyXG4gICAgICAgICAgICAhbm9kZS5pZiAmJlxyXG4gICAgICAgICAgICAhbm9kZS5mb3IgJiYgLy8gbm90IHYtaWYgb3Igdi1mb3Igb3Igdi1lbHNlXHJcbiAgICAgICAgICAgICFpc0J1aWx0SW5UYWcobm9kZS50YWcpICYmIC8vIG5vdCBhIGJ1aWx0LWluXHJcbiAgICAgICAgICAgIGlzUGxhdGZvcm1SZXNlcnZlZFRhZyhub2RlLnRhZykgJiYgLy8gbm90IGEgY29tcG9uZW50XHJcbiAgICAgICAgICAgICFpc0RpcmVjdENoaWxkT2ZUZW1wbGF0ZUZvcihub2RlKSAmJlxyXG4gICAgICAgICAgICBPYmplY3Qua2V5cyhub2RlKS5ldmVyeShpc1N0YXRpY0tleSkpKTtcclxufVxyXG5mdW5jdGlvbiBpc0RpcmVjdENoaWxkT2ZUZW1wbGF0ZUZvcihub2RlKSB7XHJcbiAgICB3aGlsZSAobm9kZS5wYXJlbnQpIHtcclxuICAgICAgICBub2RlID0gbm9kZS5wYXJlbnQ7XHJcbiAgICAgICAgaWYgKG5vZGUudGFnICE9PSAndGVtcGxhdGUnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG5vZGUuZm9yKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxufVxuXG52YXIgZm5FeHBSRSA9IC9eKFtcXHckX10rfFxcKFteKV0qP1xcKSlcXHMqPT58XmZ1bmN0aW9uKD86XFxzK1tcXHckXSspP1xccypcXCgvO1xyXG52YXIgZm5JbnZva2VSRSA9IC9cXChbXildKj9cXCk7KiQvO1xyXG52YXIgc2ltcGxlUGF0aFJFID0gL15bQS1aYS16XyRdW1xcdyRdKig/OlxcLltBLVphLXpfJF1bXFx3JF0qfFxcWydbXiddKj8nXXxcXFtcIlteXCJdKj9cIl18XFxbXFxkK118XFxbW0EtWmEtel8kXVtcXHckXSpdKSokLztcclxuLy8gS2V5Ym9hcmRFdmVudC5rZXlDb2RlIGFsaWFzZXNcclxudmFyIGtleUNvZGVzID0ge1xyXG4gICAgZXNjOiAyNyxcclxuICAgIHRhYjogOSxcclxuICAgIGVudGVyOiAxMyxcclxuICAgIHNwYWNlOiAzMixcclxuICAgIHVwOiAzOCxcclxuICAgIGxlZnQ6IDM3LFxyXG4gICAgcmlnaHQ6IDM5LFxyXG4gICAgZG93bjogNDAsXHJcbiAgICBkZWxldGU6IFs4LCA0Nl1cclxufTtcclxuLy8gS2V5Ym9hcmRFdmVudC5rZXkgYWxpYXNlc1xyXG52YXIga2V5TmFtZXMgPSB7XHJcbiAgICAvLyAjNzg4MDogSUUxMSBhbmQgRWRnZSB1c2UgYEVzY2AgZm9yIEVzY2FwZSBrZXkgbmFtZS5cclxuICAgIGVzYzogWydFc2MnLCAnRXNjYXBlJ10sXHJcbiAgICB0YWI6ICdUYWInLFxyXG4gICAgZW50ZXI6ICdFbnRlcicsXHJcbiAgICAvLyAjOTExMjogSUUxMSB1c2VzIGBTcGFjZWJhcmAgZm9yIFNwYWNlIGtleSBuYW1lLlxyXG4gICAgc3BhY2U6IFsnICcsICdTcGFjZWJhciddLFxyXG4gICAgLy8gIzc4MDY6IElFMTEgdXNlcyBrZXkgbmFtZXMgd2l0aG91dCBgQXJyb3dgIHByZWZpeCBmb3IgYXJyb3cga2V5cy5cclxuICAgIHVwOiBbJ1VwJywgJ0Fycm93VXAnXSxcclxuICAgIGxlZnQ6IFsnTGVmdCcsICdBcnJvd0xlZnQnXSxcclxuICAgIHJpZ2h0OiBbJ1JpZ2h0JywgJ0Fycm93UmlnaHQnXSxcclxuICAgIGRvd246IFsnRG93bicsICdBcnJvd0Rvd24nXSxcclxuICAgIC8vICM5MTEyOiBJRTExIHVzZXMgYERlbGAgZm9yIERlbGV0ZSBrZXkgbmFtZS5cclxuICAgIGRlbGV0ZTogWydCYWNrc3BhY2UnLCAnRGVsZXRlJywgJ0RlbCddXHJcbn07XHJcbi8vICM0ODY4OiBtb2RpZmllcnMgdGhhdCBwcmV2ZW50IHRoZSBleGVjdXRpb24gb2YgdGhlIGxpc3RlbmVyXHJcbi8vIG5lZWQgdG8gZXhwbGljaXRseSByZXR1cm4gbnVsbCBzbyB0aGF0IHdlIGNhbiBkZXRlcm1pbmUgd2hldGhlciB0byByZW1vdmVcclxuLy8gdGhlIGxpc3RlbmVyIGZvciAub25jZVxyXG52YXIgZ2VuR3VhcmQgPSBmdW5jdGlvbiAoY29uZGl0aW9uKSB7IHJldHVybiBcImlmKFwiLmNvbmNhdChjb25kaXRpb24sIFwiKXJldHVybiBudWxsO1wiKTsgfTtcclxudmFyIG1vZGlmaWVyQ29kZSA9IHtcclxuICAgIHN0b3A6ICckZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7JyxcclxuICAgIHByZXZlbnQ6ICckZXZlbnQucHJldmVudERlZmF1bHQoKTsnLFxyXG4gICAgc2VsZjogZ2VuR3VhcmQoXCIkZXZlbnQudGFyZ2V0ICE9PSAkZXZlbnQuY3VycmVudFRhcmdldFwiKSxcclxuICAgIGN0cmw6IGdlbkd1YXJkKFwiISRldmVudC5jdHJsS2V5XCIpLFxyXG4gICAgc2hpZnQ6IGdlbkd1YXJkKFwiISRldmVudC5zaGlmdEtleVwiKSxcclxuICAgIGFsdDogZ2VuR3VhcmQoXCIhJGV2ZW50LmFsdEtleVwiKSxcclxuICAgIG1ldGE6IGdlbkd1YXJkKFwiISRldmVudC5tZXRhS2V5XCIpLFxyXG4gICAgbGVmdDogZ2VuR3VhcmQoXCInYnV0dG9uJyBpbiAkZXZlbnQgJiYgJGV2ZW50LmJ1dHRvbiAhPT0gMFwiKSxcclxuICAgIG1pZGRsZTogZ2VuR3VhcmQoXCInYnV0dG9uJyBpbiAkZXZlbnQgJiYgJGV2ZW50LmJ1dHRvbiAhPT0gMVwiKSxcclxuICAgIHJpZ2h0OiBnZW5HdWFyZChcIididXR0b24nIGluICRldmVudCAmJiAkZXZlbnQuYnV0dG9uICE9PSAyXCIpXHJcbn07XHJcbmZ1bmN0aW9uIGdlbkhhbmRsZXJzKGV2ZW50cywgaXNOYXRpdmUpIHtcclxuICAgIHZhciBwcmVmaXggPSBpc05hdGl2ZSA/ICduYXRpdmVPbjonIDogJ29uOic7XHJcbiAgICB2YXIgc3RhdGljSGFuZGxlcnMgPSBcIlwiO1xyXG4gICAgdmFyIGR5bmFtaWNIYW5kbGVycyA9IFwiXCI7XHJcbiAgICBmb3IgKHZhciBuYW1lXzEgaW4gZXZlbnRzKSB7XHJcbiAgICAgICAgdmFyIGhhbmRsZXJDb2RlID0gZ2VuSGFuZGxlcihldmVudHNbbmFtZV8xXSk7XHJcbiAgICAgICAgLy9AdHMtZXhwZWN0LWVycm9yXHJcbiAgICAgICAgaWYgKGV2ZW50c1tuYW1lXzFdICYmIGV2ZW50c1tuYW1lXzFdLmR5bmFtaWMpIHtcclxuICAgICAgICAgICAgZHluYW1pY0hhbmRsZXJzICs9IFwiXCIuY29uY2F0KG5hbWVfMSwgXCIsXCIpLmNvbmNhdChoYW5kbGVyQ29kZSwgXCIsXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgc3RhdGljSGFuZGxlcnMgKz0gXCJcXFwiXCIuY29uY2F0KG5hbWVfMSwgXCJcXFwiOlwiKS5jb25jYXQoaGFuZGxlckNvZGUsIFwiLFwiKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBzdGF0aWNIYW5kbGVycyA9IFwie1wiLmNvbmNhdChzdGF0aWNIYW5kbGVycy5zbGljZSgwLCAtMSksIFwifVwiKTtcclxuICAgIGlmIChkeW5hbWljSGFuZGxlcnMpIHtcclxuICAgICAgICByZXR1cm4gcHJlZml4ICsgXCJfZChcIi5jb25jYXQoc3RhdGljSGFuZGxlcnMsIFwiLFtcIikuY29uY2F0KGR5bmFtaWNIYW5kbGVycy5zbGljZSgwLCAtMSksIFwiXSlcIik7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICByZXR1cm4gcHJlZml4ICsgc3RhdGljSGFuZGxlcnM7XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gZ2VuSGFuZGxlcihoYW5kbGVyKSB7XHJcbiAgICBpZiAoIWhhbmRsZXIpIHtcclxuICAgICAgICByZXR1cm4gJ2Z1bmN0aW9uKCl7fSc7XHJcbiAgICB9XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShoYW5kbGVyKSkge1xyXG4gICAgICAgIHJldHVybiBcIltcIi5jb25jYXQoaGFuZGxlci5tYXAoZnVuY3Rpb24gKGhhbmRsZXIpIHsgcmV0dXJuIGdlbkhhbmRsZXIoaGFuZGxlcik7IH0pLmpvaW4oJywnKSwgXCJdXCIpO1xyXG4gICAgfVxyXG4gICAgdmFyIGlzTWV0aG9kUGF0aCA9IHNpbXBsZVBhdGhSRS50ZXN0KGhhbmRsZXIudmFsdWUpO1xyXG4gICAgdmFyIGlzRnVuY3Rpb25FeHByZXNzaW9uID0gZm5FeHBSRS50ZXN0KGhhbmRsZXIudmFsdWUpO1xyXG4gICAgdmFyIGlzRnVuY3Rpb25JbnZvY2F0aW9uID0gc2ltcGxlUGF0aFJFLnRlc3QoaGFuZGxlci52YWx1ZS5yZXBsYWNlKGZuSW52b2tlUkUsICcnKSk7XHJcbiAgICBpZiAoIWhhbmRsZXIubW9kaWZpZXJzKSB7XHJcbiAgICAgICAgaWYgKGlzTWV0aG9kUGF0aCB8fCBpc0Z1bmN0aW9uRXhwcmVzc2lvbikge1xyXG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlci52YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIFwiZnVuY3Rpb24oJGV2ZW50KXtcIi5jb25jYXQoaXNGdW5jdGlvbkludm9jYXRpb24gPyBcInJldHVybiBcIi5jb25jYXQoaGFuZGxlci52YWx1ZSkgOiBoYW5kbGVyLnZhbHVlLCBcIn1cIik7IC8vIGlubGluZSBzdGF0ZW1lbnRcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHZhciBjb2RlID0gJyc7XHJcbiAgICAgICAgdmFyIGdlbk1vZGlmaWVyQ29kZSA9ICcnO1xyXG4gICAgICAgIHZhciBrZXlzID0gW107XHJcbiAgICAgICAgdmFyIF9sb29wXzEgPSBmdW5jdGlvbiAoa2V5KSB7XHJcbiAgICAgICAgICAgIGlmIChtb2RpZmllckNvZGVba2V5XSkge1xyXG4gICAgICAgICAgICAgICAgZ2VuTW9kaWZpZXJDb2RlICs9IG1vZGlmaWVyQ29kZVtrZXldO1xyXG4gICAgICAgICAgICAgICAgLy8gbGVmdC9yaWdodFxyXG4gICAgICAgICAgICAgICAgaWYgKGtleUNvZGVzW2tleV0pIHtcclxuICAgICAgICAgICAgICAgICAgICBrZXlzLnB1c2goa2V5KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChrZXkgPT09ICdleGFjdCcpIHtcclxuICAgICAgICAgICAgICAgIHZhciBtb2RpZmllcnNfMSA9IGhhbmRsZXIubW9kaWZpZXJzO1xyXG4gICAgICAgICAgICAgICAgZ2VuTW9kaWZpZXJDb2RlICs9IGdlbkd1YXJkKFsnY3RybCcsICdzaGlmdCcsICdhbHQnLCAnbWV0YSddXHJcbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihmdW5jdGlvbiAoa2V5TW9kaWZpZXIpIHsgcmV0dXJuICFtb2RpZmllcnNfMVtrZXlNb2RpZmllcl07IH0pXHJcbiAgICAgICAgICAgICAgICAgICAgLm1hcChmdW5jdGlvbiAoa2V5TW9kaWZpZXIpIHsgcmV0dXJuIFwiJGV2ZW50LlwiLmNvbmNhdChrZXlNb2RpZmllciwgXCJLZXlcIik7IH0pXHJcbiAgICAgICAgICAgICAgICAgICAgLmpvaW4oJ3x8JykpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAga2V5cy5wdXNoKGtleSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIGZvciAodmFyIGtleSBpbiBoYW5kbGVyLm1vZGlmaWVycykge1xyXG4gICAgICAgICAgICBfbG9vcF8xKGtleSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChrZXlzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBjb2RlICs9IGdlbktleUZpbHRlcihrZXlzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gTWFrZSBzdXJlIG1vZGlmaWVycyBsaWtlIHByZXZlbnQgYW5kIHN0b3AgZ2V0IGV4ZWN1dGVkIGFmdGVyIGtleSBmaWx0ZXJpbmdcclxuICAgICAgICBpZiAoZ2VuTW9kaWZpZXJDb2RlKSB7XHJcbiAgICAgICAgICAgIGNvZGUgKz0gZ2VuTW9kaWZpZXJDb2RlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgaGFuZGxlckNvZGUgPSBpc01ldGhvZFBhdGhcclxuICAgICAgICAgICAgPyBcInJldHVybiBcIi5jb25jYXQoaGFuZGxlci52YWx1ZSwgXCIuYXBwbHkobnVsbCwgYXJndW1lbnRzKVwiKVxyXG4gICAgICAgICAgICA6IGlzRnVuY3Rpb25FeHByZXNzaW9uXHJcbiAgICAgICAgICAgICAgICA/IFwicmV0dXJuIChcIi5jb25jYXQoaGFuZGxlci52YWx1ZSwgXCIpLmFwcGx5KG51bGwsIGFyZ3VtZW50cylcIilcclxuICAgICAgICAgICAgICAgIDogaXNGdW5jdGlvbkludm9jYXRpb25cclxuICAgICAgICAgICAgICAgICAgICA/IFwicmV0dXJuIFwiLmNvbmNhdChoYW5kbGVyLnZhbHVlKVxyXG4gICAgICAgICAgICAgICAgICAgIDogaGFuZGxlci52YWx1ZTtcclxuICAgICAgICByZXR1cm4gXCJmdW5jdGlvbigkZXZlbnQpe1wiLmNvbmNhdChjb2RlKS5jb25jYXQoaGFuZGxlckNvZGUsIFwifVwiKTtcclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBnZW5LZXlGaWx0ZXIoa2V5cykge1xyXG4gICAgcmV0dXJuIChcclxuICAgIC8vIG1ha2Ugc3VyZSB0aGUga2V5IGZpbHRlcnMgb25seSBhcHBseSB0byBLZXlib2FyZEV2ZW50c1xyXG4gICAgLy8gIzk0NDE6IGNhbid0IHVzZSAna2V5Q29kZScgaW4gJGV2ZW50IGJlY2F1c2UgQ2hyb21lIGF1dG9maWxsIGZpcmVzIGZha2VcclxuICAgIC8vIGtleSBldmVudHMgdGhhdCBkbyBub3QgaGF2ZSBrZXlDb2RlIHByb3BlcnR5Li4uXHJcbiAgICBcImlmKCEkZXZlbnQudHlwZS5pbmRleE9mKCdrZXknKSYmXCIgK1xyXG4gICAgICAgIFwiXCIuY29uY2F0KGtleXMubWFwKGdlbkZpbHRlckNvZGUpLmpvaW4oJyYmJyksIFwiKXJldHVybiBudWxsO1wiKSk7XHJcbn1cclxuZnVuY3Rpb24gZ2VuRmlsdGVyQ29kZShrZXkpIHtcclxuICAgIHZhciBrZXlWYWwgPSBwYXJzZUludChrZXksIDEwKTtcclxuICAgIGlmIChrZXlWYWwpIHtcclxuICAgICAgICByZXR1cm4gXCIkZXZlbnQua2V5Q29kZSE9PVwiLmNvbmNhdChrZXlWYWwpO1xyXG4gICAgfVxyXG4gICAgdmFyIGtleUNvZGUgPSBrZXlDb2Rlc1trZXldO1xyXG4gICAgdmFyIGtleU5hbWUgPSBrZXlOYW1lc1trZXldO1xyXG4gICAgcmV0dXJuIChcIl9rKCRldmVudC5rZXlDb2RlLFwiICtcclxuICAgICAgICBcIlwiLmNvbmNhdChKU09OLnN0cmluZ2lmeShrZXkpLCBcIixcIikgK1xyXG4gICAgICAgIFwiXCIuY29uY2F0KEpTT04uc3RyaW5naWZ5KGtleUNvZGUpLCBcIixcIikgK1xyXG4gICAgICAgIFwiJGV2ZW50LmtleSxcIiArXHJcbiAgICAgICAgXCJcIi5jb25jYXQoSlNPTi5zdHJpbmdpZnkoa2V5TmFtZSkpICtcclxuICAgICAgICBcIilcIik7XHJcbn1cblxuZnVuY3Rpb24gb24oZWwsIGRpcikge1xyXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgZGlyLm1vZGlmaWVycykge1xyXG4gICAgICAgIHdhcm4kMihcInYtb24gd2l0aG91dCBhcmd1bWVudCBkb2VzIG5vdCBzdXBwb3J0IG1vZGlmaWVycy5cIik7XHJcbiAgICB9XHJcbiAgICBlbC53cmFwTGlzdGVuZXJzID0gZnVuY3Rpb24gKGNvZGUpIHsgcmV0dXJuIFwiX2coXCIuY29uY2F0KGNvZGUsIFwiLFwiKS5jb25jYXQoZGlyLnZhbHVlLCBcIilcIik7IH07XHJcbn1cblxuZnVuY3Rpb24gYmluZChlbCwgZGlyKSB7XHJcbiAgICBlbC53cmFwRGF0YSA9IGZ1bmN0aW9uIChjb2RlKSB7XHJcbiAgICAgICAgcmV0dXJuIFwiX2IoXCIuY29uY2F0KGNvZGUsIFwiLCdcIikuY29uY2F0KGVsLnRhZywgXCInLFwiKS5jb25jYXQoZGlyLnZhbHVlLCBcIixcIikuY29uY2F0KGRpci5tb2RpZmllcnMgJiYgZGlyLm1vZGlmaWVycy5wcm9wID8gJ3RydWUnIDogJ2ZhbHNlJykuY29uY2F0KGRpci5tb2RpZmllcnMgJiYgZGlyLm1vZGlmaWVycy5zeW5jID8gJyx0cnVlJyA6ICcnLCBcIilcIik7XHJcbiAgICB9O1xyXG59XG5cbnZhciBiYXNlRGlyZWN0aXZlcyA9IHtcclxuICAgIG9uOiBvbixcclxuICAgIGJpbmQ6IGJpbmQsXHJcbiAgICBjbG9hazogbm9vcFxyXG59O1xuXG52YXIgQ29kZWdlblN0YXRlID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gQ29kZWdlblN0YXRlKG9wdGlvbnMpIHtcclxuICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xyXG4gICAgICAgIHRoaXMud2FybiA9IG9wdGlvbnMud2FybiB8fCBiYXNlV2FybjtcclxuICAgICAgICB0aGlzLnRyYW5zZm9ybXMgPSBwbHVja01vZHVsZUZ1bmN0aW9uKG9wdGlvbnMubW9kdWxlcywgJ3RyYW5zZm9ybUNvZGUnKTtcclxuICAgICAgICB0aGlzLmRhdGFHZW5GbnMgPSBwbHVja01vZHVsZUZ1bmN0aW9uKG9wdGlvbnMubW9kdWxlcywgJ2dlbkRhdGEnKTtcclxuICAgICAgICB0aGlzLmRpcmVjdGl2ZXMgPSBleHRlbmQoZXh0ZW5kKHt9LCBiYXNlRGlyZWN0aXZlcyksIG9wdGlvbnMuZGlyZWN0aXZlcyk7XHJcbiAgICAgICAgdmFyIGlzUmVzZXJ2ZWRUYWcgPSBvcHRpb25zLmlzUmVzZXJ2ZWRUYWcgfHwgbm87XHJcbiAgICAgICAgdGhpcy5tYXliZUNvbXBvbmVudCA9IGZ1bmN0aW9uIChlbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gISFlbC5jb21wb25lbnQgfHwgIWlzUmVzZXJ2ZWRUYWcoZWwudGFnKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMub25jZUlkID0gMDtcclxuICAgICAgICB0aGlzLnN0YXRpY1JlbmRlckZucyA9IFtdO1xyXG4gICAgICAgIHRoaXMucHJlID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gQ29kZWdlblN0YXRlO1xyXG59KCkpO1xyXG5mdW5jdGlvbiBnZW5lcmF0ZShhc3QsIG9wdGlvbnMpIHtcclxuICAgIHZhciBzdGF0ZSA9IG5ldyBDb2RlZ2VuU3RhdGUob3B0aW9ucyk7XHJcbiAgICAvLyBmaXggIzExNDgzLCBSb290IGxldmVsIDxzY3JpcHQ+IHRhZ3Mgc2hvdWxkIG5vdCBiZSByZW5kZXJlZC5cclxuICAgIHZhciBjb2RlID0gYXN0XHJcbiAgICAgICAgPyBhc3QudGFnID09PSAnc2NyaXB0J1xyXG4gICAgICAgICAgICA/ICdudWxsJ1xyXG4gICAgICAgICAgICA6IGdlbkVsZW1lbnQoYXN0LCBzdGF0ZSlcclxuICAgICAgICA6ICdfYyhcImRpdlwiKSc7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHJlbmRlcjogXCJ3aXRoKHRoaXMpe3JldHVybiBcIi5jb25jYXQoY29kZSwgXCJ9XCIpLFxyXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGUuc3RhdGljUmVuZGVyRm5zXHJcbiAgICB9O1xyXG59XHJcbmZ1bmN0aW9uIGdlbkVsZW1lbnQoZWwsIHN0YXRlKSB7XHJcbiAgICBpZiAoZWwucGFyZW50KSB7XHJcbiAgICAgICAgZWwucHJlID0gZWwucHJlIHx8IGVsLnBhcmVudC5wcmU7XHJcbiAgICB9XHJcbiAgICBpZiAoZWwuc3RhdGljUm9vdCAmJiAhZWwuc3RhdGljUHJvY2Vzc2VkKSB7XHJcbiAgICAgICAgcmV0dXJuIGdlblN0YXRpYyhlbCwgc3RhdGUpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoZWwub25jZSAmJiAhZWwub25jZVByb2Nlc3NlZCkge1xyXG4gICAgICAgIHJldHVybiBnZW5PbmNlKGVsLCBzdGF0ZSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChlbC5mb3IgJiYgIWVsLmZvclByb2Nlc3NlZCkge1xyXG4gICAgICAgIHJldHVybiBnZW5Gb3IoZWwsIHN0YXRlKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGVsLmlmICYmICFlbC5pZlByb2Nlc3NlZCkge1xyXG4gICAgICAgIHJldHVybiBnZW5JZihlbCwgc3RhdGUpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoZWwudGFnID09PSAndGVtcGxhdGUnICYmICFlbC5zbG90VGFyZ2V0ICYmICFzdGF0ZS5wcmUpIHtcclxuICAgICAgICByZXR1cm4gZ2VuQ2hpbGRyZW4oZWwsIHN0YXRlKSB8fCAndm9pZCAwJztcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGVsLnRhZyA9PT0gJ3Nsb3QnKSB7XHJcbiAgICAgICAgcmV0dXJuIGdlblNsb3QoZWwsIHN0YXRlKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIC8vIGNvbXBvbmVudCBvciBlbGVtZW50XHJcbiAgICAgICAgdmFyIGNvZGUgPSB2b2lkIDA7XHJcbiAgICAgICAgaWYgKGVsLmNvbXBvbmVudCkge1xyXG4gICAgICAgICAgICBjb2RlID0gZ2VuQ29tcG9uZW50KGVsLmNvbXBvbmVudCwgZWwsIHN0YXRlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHZhciBkYXRhID0gdm9pZCAwO1xyXG4gICAgICAgICAgICB2YXIgbWF5YmVDb21wb25lbnQgPSBzdGF0ZS5tYXliZUNvbXBvbmVudChlbCk7XHJcbiAgICAgICAgICAgIGlmICghZWwucGxhaW4gfHwgKGVsLnByZSAmJiBtYXliZUNvbXBvbmVudCkpIHtcclxuICAgICAgICAgICAgICAgIGRhdGEgPSBnZW5EYXRhKGVsLCBzdGF0ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIHRhZyBcclxuICAgICAgICAgICAgLy8gY2hlY2sgaWYgdGhpcyBpcyBhIGNvbXBvbmVudCBpbiA8c2NyaXB0IHNldHVwPlxyXG4gICAgICAgICAgICA9IHZvaWQgMDtcclxuICAgICAgICAgICAgLy8gY2hlY2sgaWYgdGhpcyBpcyBhIGNvbXBvbmVudCBpbiA8c2NyaXB0IHNldHVwPlxyXG4gICAgICAgICAgICB2YXIgYmluZGluZ3MgPSBzdGF0ZS5vcHRpb25zLmJpbmRpbmdzO1xyXG4gICAgICAgICAgICBpZiAobWF5YmVDb21wb25lbnQgJiYgYmluZGluZ3MgJiYgYmluZGluZ3MuX19pc1NjcmlwdFNldHVwICE9PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgdGFnID0gY2hlY2tCaW5kaW5nVHlwZShiaW5kaW5ncywgZWwudGFnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoIXRhZylcclxuICAgICAgICAgICAgICAgIHRhZyA9IFwiJ1wiLmNvbmNhdChlbC50YWcsIFwiJ1wiKTtcclxuICAgICAgICAgICAgdmFyIGNoaWxkcmVuID0gZWwuaW5saW5lVGVtcGxhdGUgPyBudWxsIDogZ2VuQ2hpbGRyZW4oZWwsIHN0YXRlLCB0cnVlKTtcclxuICAgICAgICAgICAgY29kZSA9IFwiX2MoXCIuY29uY2F0KHRhZykuY29uY2F0KGRhdGEgPyBcIixcIi5jb25jYXQoZGF0YSkgOiAnJyAvLyBkYXRhXHJcbiAgICAgICAgICAgICkuY29uY2F0KGNoaWxkcmVuID8gXCIsXCIuY29uY2F0KGNoaWxkcmVuKSA6ICcnIC8vIGNoaWxkcmVuXHJcbiAgICAgICAgICAgICwgXCIpXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBtb2R1bGUgdHJhbnNmb3Jtc1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RhdGUudHJhbnNmb3Jtcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBjb2RlID0gc3RhdGUudHJhbnNmb3Jtc1tpXShlbCwgY29kZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjb2RlO1xyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIGNoZWNrQmluZGluZ1R5cGUoYmluZGluZ3MsIGtleSkge1xyXG4gICAgdmFyIGNhbWVsTmFtZSA9IGNhbWVsaXplKGtleSk7XHJcbiAgICB2YXIgUGFzY2FsTmFtZSA9IGNhcGl0YWxpemUoY2FtZWxOYW1lKTtcclxuICAgIHZhciBjaGVja1R5cGUgPSBmdW5jdGlvbiAodHlwZSkge1xyXG4gICAgICAgIGlmIChiaW5kaW5nc1trZXldID09PSB0eXBlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBrZXk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChiaW5kaW5nc1tjYW1lbE5hbWVdID09PSB0eXBlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBjYW1lbE5hbWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChiaW5kaW5nc1tQYXNjYWxOYW1lXSA9PT0gdHlwZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gUGFzY2FsTmFtZTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgdmFyIGZyb21Db25zdCA9IGNoZWNrVHlwZShcInNldHVwLWNvbnN0XCIgLyogQmluZGluZ1R5cGVzLlNFVFVQX0NPTlNUICovKSB8fFxyXG4gICAgICAgIGNoZWNrVHlwZShcInNldHVwLXJlYWN0aXZlLWNvbnN0XCIgLyogQmluZGluZ1R5cGVzLlNFVFVQX1JFQUNUSVZFX0NPTlNUICovKTtcclxuICAgIGlmIChmcm9tQ29uc3QpIHtcclxuICAgICAgICByZXR1cm4gZnJvbUNvbnN0O1xyXG4gICAgfVxyXG4gICAgdmFyIGZyb21NYXliZVJlZiA9IGNoZWNrVHlwZShcInNldHVwLWxldFwiIC8qIEJpbmRpbmdUeXBlcy5TRVRVUF9MRVQgKi8pIHx8XHJcbiAgICAgICAgY2hlY2tUeXBlKFwic2V0dXAtcmVmXCIgLyogQmluZGluZ1R5cGVzLlNFVFVQX1JFRiAqLykgfHxcclxuICAgICAgICBjaGVja1R5cGUoXCJzZXR1cC1tYXliZS1yZWZcIiAvKiBCaW5kaW5nVHlwZXMuU0VUVVBfTUFZQkVfUkVGICovKTtcclxuICAgIGlmIChmcm9tTWF5YmVSZWYpIHtcclxuICAgICAgICByZXR1cm4gZnJvbU1heWJlUmVmO1xyXG4gICAgfVxyXG59XHJcbi8vIGhvaXN0IHN0YXRpYyBzdWItdHJlZXMgb3V0XHJcbmZ1bmN0aW9uIGdlblN0YXRpYyhlbCwgc3RhdGUpIHtcclxuICAgIGVsLnN0YXRpY1Byb2Nlc3NlZCA9IHRydWU7XHJcbiAgICAvLyBTb21lIGVsZW1lbnRzICh0ZW1wbGF0ZXMpIG5lZWQgdG8gYmVoYXZlIGRpZmZlcmVudGx5IGluc2lkZSBvZiBhIHYtcHJlXHJcbiAgICAvLyBub2RlLiAgQWxsIHByZSBub2RlcyBhcmUgc3RhdGljIHJvb3RzLCBzbyB3ZSBjYW4gdXNlIHRoaXMgYXMgYSBsb2NhdGlvbiB0b1xyXG4gICAgLy8gd3JhcCBhIHN0YXRlIGNoYW5nZSBhbmQgcmVzZXQgaXQgdXBvbiBleGl0aW5nIHRoZSBwcmUgbm9kZS5cclxuICAgIHZhciBvcmlnaW5hbFByZVN0YXRlID0gc3RhdGUucHJlO1xyXG4gICAgaWYgKGVsLnByZSkge1xyXG4gICAgICAgIHN0YXRlLnByZSA9IGVsLnByZTtcclxuICAgIH1cclxuICAgIHN0YXRlLnN0YXRpY1JlbmRlckZucy5wdXNoKFwid2l0aCh0aGlzKXtyZXR1cm4gXCIuY29uY2F0KGdlbkVsZW1lbnQoZWwsIHN0YXRlKSwgXCJ9XCIpKTtcclxuICAgIHN0YXRlLnByZSA9IG9yaWdpbmFsUHJlU3RhdGU7XHJcbiAgICByZXR1cm4gXCJfbShcIi5jb25jYXQoc3RhdGUuc3RhdGljUmVuZGVyRm5zLmxlbmd0aCAtIDEpLmNvbmNhdChlbC5zdGF0aWNJbkZvciA/ICcsdHJ1ZScgOiAnJywgXCIpXCIpO1xyXG59XHJcbi8vIHYtb25jZVxyXG5mdW5jdGlvbiBnZW5PbmNlKGVsLCBzdGF0ZSkge1xyXG4gICAgZWwub25jZVByb2Nlc3NlZCA9IHRydWU7XHJcbiAgICBpZiAoZWwuaWYgJiYgIWVsLmlmUHJvY2Vzc2VkKSB7XHJcbiAgICAgICAgcmV0dXJuIGdlbklmKGVsLCBzdGF0ZSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChlbC5zdGF0aWNJbkZvcikge1xyXG4gICAgICAgIHZhciBrZXkgPSAnJztcclxuICAgICAgICB2YXIgcGFyZW50XzEgPSBlbC5wYXJlbnQ7XHJcbiAgICAgICAgd2hpbGUgKHBhcmVudF8xKSB7XHJcbiAgICAgICAgICAgIGlmIChwYXJlbnRfMS5mb3IpIHtcclxuICAgICAgICAgICAgICAgIGtleSA9IHBhcmVudF8xLmtleTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHBhcmVudF8xID0gcGFyZW50XzEucGFyZW50O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWtleSkge1xyXG4gICAgICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXHJcbiAgICAgICAgICAgICAgICBzdGF0ZS53YXJuKFwidi1vbmNlIGNhbiBvbmx5IGJlIHVzZWQgaW5zaWRlIHYtZm9yIHRoYXQgaXMga2V5ZWQuIFwiLCBlbC5yYXdBdHRyc01hcFsndi1vbmNlJ10pO1xyXG4gICAgICAgICAgICByZXR1cm4gZ2VuRWxlbWVudChlbCwgc3RhdGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gXCJfbyhcIi5jb25jYXQoZ2VuRWxlbWVudChlbCwgc3RhdGUpLCBcIixcIikuY29uY2F0KHN0YXRlLm9uY2VJZCsrLCBcIixcIikuY29uY2F0KGtleSwgXCIpXCIpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIGdlblN0YXRpYyhlbCwgc3RhdGUpO1xyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIGdlbklmKGVsLCBzdGF0ZSwgYWx0R2VuLCBhbHRFbXB0eSkge1xyXG4gICAgZWwuaWZQcm9jZXNzZWQgPSB0cnVlOyAvLyBhdm9pZCByZWN1cnNpb25cclxuICAgIHJldHVybiBnZW5JZkNvbmRpdGlvbnMoZWwuaWZDb25kaXRpb25zLnNsaWNlKCksIHN0YXRlLCBhbHRHZW4sIGFsdEVtcHR5KTtcclxufVxyXG5mdW5jdGlvbiBnZW5JZkNvbmRpdGlvbnMoY29uZGl0aW9ucywgc3RhdGUsIGFsdEdlbiwgYWx0RW1wdHkpIHtcclxuICAgIGlmICghY29uZGl0aW9ucy5sZW5ndGgpIHtcclxuICAgICAgICByZXR1cm4gYWx0RW1wdHkgfHwgJ19lKCknO1xyXG4gICAgfVxyXG4gICAgdmFyIGNvbmRpdGlvbiA9IGNvbmRpdGlvbnMuc2hpZnQoKTtcclxuICAgIGlmIChjb25kaXRpb24uZXhwKSB7XHJcbiAgICAgICAgcmV0dXJuIFwiKFwiLmNvbmNhdChjb25kaXRpb24uZXhwLCBcIik/XCIpLmNvbmNhdChnZW5UZXJuYXJ5RXhwKGNvbmRpdGlvbi5ibG9jayksIFwiOlwiKS5jb25jYXQoZ2VuSWZDb25kaXRpb25zKGNvbmRpdGlvbnMsIHN0YXRlLCBhbHRHZW4sIGFsdEVtcHR5KSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICByZXR1cm4gXCJcIi5jb25jYXQoZ2VuVGVybmFyeUV4cChjb25kaXRpb24uYmxvY2spKTtcclxuICAgIH1cclxuICAgIC8vIHYtaWYgd2l0aCB2LW9uY2Ugc2hvdWxkIGdlbmVyYXRlIGNvZGUgbGlrZSAoYSk/X20oMCk6X20oMSlcclxuICAgIGZ1bmN0aW9uIGdlblRlcm5hcnlFeHAoZWwpIHtcclxuICAgICAgICByZXR1cm4gYWx0R2VuXHJcbiAgICAgICAgICAgID8gYWx0R2VuKGVsLCBzdGF0ZSlcclxuICAgICAgICAgICAgOiBlbC5vbmNlXHJcbiAgICAgICAgICAgICAgICA/IGdlbk9uY2UoZWwsIHN0YXRlKVxyXG4gICAgICAgICAgICAgICAgOiBnZW5FbGVtZW50KGVsLCBzdGF0ZSk7XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gZ2VuRm9yKGVsLCBzdGF0ZSwgYWx0R2VuLCBhbHRIZWxwZXIpIHtcclxuICAgIHZhciBleHAgPSBlbC5mb3I7XHJcbiAgICB2YXIgYWxpYXMgPSBlbC5hbGlhcztcclxuICAgIHZhciBpdGVyYXRvcjEgPSBlbC5pdGVyYXRvcjEgPyBcIixcIi5jb25jYXQoZWwuaXRlcmF0b3IxKSA6ICcnO1xyXG4gICAgdmFyIGl0ZXJhdG9yMiA9IGVsLml0ZXJhdG9yMiA/IFwiLFwiLmNvbmNhdChlbC5pdGVyYXRvcjIpIDogJyc7XHJcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJlxyXG4gICAgICAgIHN0YXRlLm1heWJlQ29tcG9uZW50KGVsKSAmJlxyXG4gICAgICAgIGVsLnRhZyAhPT0gJ3Nsb3QnICYmXHJcbiAgICAgICAgZWwudGFnICE9PSAndGVtcGxhdGUnICYmXHJcbiAgICAgICAgIWVsLmtleSkge1xyXG4gICAgICAgIHN0YXRlLndhcm4oXCI8XCIuY29uY2F0KGVsLnRhZywgXCIgdi1mb3I9XFxcIlwiKS5jb25jYXQoYWxpYXMsIFwiIGluIFwiKS5jb25jYXQoZXhwLCBcIlxcXCI+OiBjb21wb25lbnQgbGlzdHMgcmVuZGVyZWQgd2l0aCBcIikgK1xyXG4gICAgICAgICAgICBcInYtZm9yIHNob3VsZCBoYXZlIGV4cGxpY2l0IGtleXMuIFwiICtcclxuICAgICAgICAgICAgXCJTZWUgaHR0cHM6Ly92dWVqcy5vcmcvZ3VpZGUvbGlzdC5odG1sI2tleSBmb3IgbW9yZSBpbmZvLlwiLCBlbC5yYXdBdHRyc01hcFsndi1mb3InXSwgdHJ1ZSAvKiB0aXAgKi8pO1xyXG4gICAgfVxyXG4gICAgZWwuZm9yUHJvY2Vzc2VkID0gdHJ1ZTsgLy8gYXZvaWQgcmVjdXJzaW9uXHJcbiAgICByZXR1cm4gKFwiXCIuY29uY2F0KGFsdEhlbHBlciB8fCAnX2wnLCBcIigoXCIpLmNvbmNhdChleHAsIFwiKSxcIikgK1xyXG4gICAgICAgIFwiZnVuY3Rpb24oXCIuY29uY2F0KGFsaWFzKS5jb25jYXQoaXRlcmF0b3IxKS5jb25jYXQoaXRlcmF0b3IyLCBcIil7XCIpICtcclxuICAgICAgICBcInJldHVybiBcIi5jb25jYXQoKGFsdEdlbiB8fCBnZW5FbGVtZW50KShlbCwgc3RhdGUpKSArXHJcbiAgICAgICAgJ30pJyk7XHJcbn1cclxuZnVuY3Rpb24gZ2VuRGF0YShlbCwgc3RhdGUpIHtcclxuICAgIHZhciBkYXRhID0gJ3snO1xyXG4gICAgLy8gZGlyZWN0aXZlcyBmaXJzdC5cclxuICAgIC8vIGRpcmVjdGl2ZXMgbWF5IG11dGF0ZSB0aGUgZWwncyBvdGhlciBwcm9wZXJ0aWVzIGJlZm9yZSB0aGV5IGFyZSBnZW5lcmF0ZWQuXHJcbiAgICB2YXIgZGlycyA9IGdlbkRpcmVjdGl2ZXMoZWwsIHN0YXRlKTtcclxuICAgIGlmIChkaXJzKVxyXG4gICAgICAgIGRhdGEgKz0gZGlycyArICcsJztcclxuICAgIC8vIGtleVxyXG4gICAgaWYgKGVsLmtleSkge1xyXG4gICAgICAgIGRhdGEgKz0gXCJrZXk6XCIuY29uY2F0KGVsLmtleSwgXCIsXCIpO1xyXG4gICAgfVxyXG4gICAgLy8gcmVmXHJcbiAgICBpZiAoZWwucmVmKSB7XHJcbiAgICAgICAgZGF0YSArPSBcInJlZjpcIi5jb25jYXQoZWwucmVmLCBcIixcIik7XHJcbiAgICB9XHJcbiAgICBpZiAoZWwucmVmSW5Gb3IpIHtcclxuICAgICAgICBkYXRhICs9IFwicmVmSW5Gb3I6dHJ1ZSxcIjtcclxuICAgIH1cclxuICAgIC8vIHByZVxyXG4gICAgaWYgKGVsLnByZSkge1xyXG4gICAgICAgIGRhdGEgKz0gXCJwcmU6dHJ1ZSxcIjtcclxuICAgIH1cclxuICAgIC8vIHJlY29yZCBvcmlnaW5hbCB0YWcgbmFtZSBmb3IgY29tcG9uZW50cyB1c2luZyBcImlzXCIgYXR0cmlidXRlXHJcbiAgICBpZiAoZWwuY29tcG9uZW50KSB7XHJcbiAgICAgICAgZGF0YSArPSBcInRhZzpcXFwiXCIuY29uY2F0KGVsLnRhZywgXCJcXFwiLFwiKTtcclxuICAgIH1cclxuICAgIC8vIG1vZHVsZSBkYXRhIGdlbmVyYXRpb24gZnVuY3Rpb25zXHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0YXRlLmRhdGFHZW5GbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBkYXRhICs9IHN0YXRlLmRhdGFHZW5GbnNbaV0oZWwpO1xyXG4gICAgfVxyXG4gICAgLy8gYXR0cmlidXRlc1xyXG4gICAgaWYgKGVsLmF0dHJzKSB7XHJcbiAgICAgICAgZGF0YSArPSBcImF0dHJzOlwiLmNvbmNhdChnZW5Qcm9wcyhlbC5hdHRycyksIFwiLFwiKTtcclxuICAgIH1cclxuICAgIC8vIERPTSBwcm9wc1xyXG4gICAgaWYgKGVsLnByb3BzKSB7XHJcbiAgICAgICAgZGF0YSArPSBcImRvbVByb3BzOlwiLmNvbmNhdChnZW5Qcm9wcyhlbC5wcm9wcyksIFwiLFwiKTtcclxuICAgIH1cclxuICAgIC8vIGV2ZW50IGhhbmRsZXJzXHJcbiAgICBpZiAoZWwuZXZlbnRzKSB7XHJcbiAgICAgICAgZGF0YSArPSBcIlwiLmNvbmNhdChnZW5IYW5kbGVycyhlbC5ldmVudHMsIGZhbHNlKSwgXCIsXCIpO1xyXG4gICAgfVxyXG4gICAgaWYgKGVsLm5hdGl2ZUV2ZW50cykge1xyXG4gICAgICAgIGRhdGEgKz0gXCJcIi5jb25jYXQoZ2VuSGFuZGxlcnMoZWwubmF0aXZlRXZlbnRzLCB0cnVlKSwgXCIsXCIpO1xyXG4gICAgfVxyXG4gICAgLy8gc2xvdCB0YXJnZXRcclxuICAgIC8vIG9ubHkgZm9yIG5vbi1zY29wZWQgc2xvdHNcclxuICAgIGlmIChlbC5zbG90VGFyZ2V0ICYmICFlbC5zbG90U2NvcGUpIHtcclxuICAgICAgICBkYXRhICs9IFwic2xvdDpcIi5jb25jYXQoZWwuc2xvdFRhcmdldCwgXCIsXCIpO1xyXG4gICAgfVxyXG4gICAgLy8gc2NvcGVkIHNsb3RzXHJcbiAgICBpZiAoZWwuc2NvcGVkU2xvdHMpIHtcclxuICAgICAgICBkYXRhICs9IFwiXCIuY29uY2F0KGdlblNjb3BlZFNsb3RzKGVsLCBlbC5zY29wZWRTbG90cywgc3RhdGUpLCBcIixcIik7XHJcbiAgICB9XHJcbiAgICAvLyBjb21wb25lbnQgdi1tb2RlbFxyXG4gICAgaWYgKGVsLm1vZGVsKSB7XHJcbiAgICAgICAgZGF0YSArPSBcIm1vZGVsOnt2YWx1ZTpcIi5jb25jYXQoZWwubW9kZWwudmFsdWUsIFwiLGNhbGxiYWNrOlwiKS5jb25jYXQoZWwubW9kZWwuY2FsbGJhY2ssIFwiLGV4cHJlc3Npb246XCIpLmNvbmNhdChlbC5tb2RlbC5leHByZXNzaW9uLCBcIn0sXCIpO1xyXG4gICAgfVxyXG4gICAgLy8gaW5saW5lLXRlbXBsYXRlXHJcbiAgICBpZiAoZWwuaW5saW5lVGVtcGxhdGUpIHtcclxuICAgICAgICB2YXIgaW5saW5lVGVtcGxhdGUgPSBnZW5JbmxpbmVUZW1wbGF0ZShlbCwgc3RhdGUpO1xyXG4gICAgICAgIGlmIChpbmxpbmVUZW1wbGF0ZSkge1xyXG4gICAgICAgICAgICBkYXRhICs9IFwiXCIuY29uY2F0KGlubGluZVRlbXBsYXRlLCBcIixcIik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZGF0YSA9IGRhdGEucmVwbGFjZSgvLCQvLCAnJykgKyAnfSc7XHJcbiAgICAvLyB2LWJpbmQgZHluYW1pYyBhcmd1bWVudCB3cmFwXHJcbiAgICAvLyB2LWJpbmQgd2l0aCBkeW5hbWljIGFyZ3VtZW50cyBtdXN0IGJlIGFwcGxpZWQgdXNpbmcgdGhlIHNhbWUgdi1iaW5kIG9iamVjdFxyXG4gICAgLy8gbWVyZ2UgaGVscGVyIHNvIHRoYXQgY2xhc3Mvc3R5bGUvbXVzdFVzZVByb3AgYXR0cnMgYXJlIGhhbmRsZWQgY29ycmVjdGx5LlxyXG4gICAgaWYgKGVsLmR5bmFtaWNBdHRycykge1xyXG4gICAgICAgIGRhdGEgPSBcIl9iKFwiLmNvbmNhdChkYXRhLCBcIixcXFwiXCIpLmNvbmNhdChlbC50YWcsIFwiXFxcIixcIikuY29uY2F0KGdlblByb3BzKGVsLmR5bmFtaWNBdHRycyksIFwiKVwiKTtcclxuICAgIH1cclxuICAgIC8vIHYtYmluZCBkYXRhIHdyYXBcclxuICAgIGlmIChlbC53cmFwRGF0YSkge1xyXG4gICAgICAgIGRhdGEgPSBlbC53cmFwRGF0YShkYXRhKTtcclxuICAgIH1cclxuICAgIC8vIHYtb24gZGF0YSB3cmFwXHJcbiAgICBpZiAoZWwud3JhcExpc3RlbmVycykge1xyXG4gICAgICAgIGRhdGEgPSBlbC53cmFwTGlzdGVuZXJzKGRhdGEpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRhdGE7XHJcbn1cclxuZnVuY3Rpb24gZ2VuRGlyZWN0aXZlcyhlbCwgc3RhdGUpIHtcclxuICAgIHZhciBkaXJzID0gZWwuZGlyZWN0aXZlcztcclxuICAgIGlmICghZGlycylcclxuICAgICAgICByZXR1cm47XHJcbiAgICB2YXIgcmVzID0gJ2RpcmVjdGl2ZXM6Wyc7XHJcbiAgICB2YXIgaGFzUnVudGltZSA9IGZhbHNlO1xyXG4gICAgdmFyIGksIGwsIGRpciwgbmVlZFJ1bnRpbWU7XHJcbiAgICBmb3IgKGkgPSAwLCBsID0gZGlycy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICBkaXIgPSBkaXJzW2ldO1xyXG4gICAgICAgIG5lZWRSdW50aW1lID0gdHJ1ZTtcclxuICAgICAgICB2YXIgZ2VuID0gc3RhdGUuZGlyZWN0aXZlc1tkaXIubmFtZV07XHJcbiAgICAgICAgaWYgKGdlbikge1xyXG4gICAgICAgICAgICAvLyBjb21waWxlLXRpbWUgZGlyZWN0aXZlIHRoYXQgbWFuaXB1bGF0ZXMgQVNULlxyXG4gICAgICAgICAgICAvLyByZXR1cm5zIHRydWUgaWYgaXQgYWxzbyBuZWVkcyBhIHJ1bnRpbWUgY291bnRlcnBhcnQuXHJcbiAgICAgICAgICAgIG5lZWRSdW50aW1lID0gISFnZW4oZWwsIGRpciwgc3RhdGUud2Fybik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChuZWVkUnVudGltZSkge1xyXG4gICAgICAgICAgICBoYXNSdW50aW1lID0gdHJ1ZTtcclxuICAgICAgICAgICAgcmVzICs9IFwie25hbWU6XFxcIlwiLmNvbmNhdChkaXIubmFtZSwgXCJcXFwiLHJhd05hbWU6XFxcIlwiKS5jb25jYXQoZGlyLnJhd05hbWUsIFwiXFxcIlwiKS5jb25jYXQoZGlyLnZhbHVlXHJcbiAgICAgICAgICAgICAgICA/IFwiLHZhbHVlOihcIi5jb25jYXQoZGlyLnZhbHVlLCBcIiksZXhwcmVzc2lvbjpcIikuY29uY2F0KEpTT04uc3RyaW5naWZ5KGRpci52YWx1ZSkpXHJcbiAgICAgICAgICAgICAgICA6ICcnKS5jb25jYXQoZGlyLmFyZyA/IFwiLGFyZzpcIi5jb25jYXQoZGlyLmlzRHluYW1pY0FyZyA/IGRpci5hcmcgOiBcIlxcXCJcIi5jb25jYXQoZGlyLmFyZywgXCJcXFwiXCIpKSA6ICcnKS5jb25jYXQoZGlyLm1vZGlmaWVycyA/IFwiLG1vZGlmaWVyczpcIi5jb25jYXQoSlNPTi5zdHJpbmdpZnkoZGlyLm1vZGlmaWVycykpIDogJycsIFwifSxcIik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKGhhc1J1bnRpbWUpIHtcclxuICAgICAgICByZXR1cm4gcmVzLnNsaWNlKDAsIC0xKSArICddJztcclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBnZW5JbmxpbmVUZW1wbGF0ZShlbCwgc3RhdGUpIHtcclxuICAgIHZhciBhc3QgPSBlbC5jaGlsZHJlblswXTtcclxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIChlbC5jaGlsZHJlbi5sZW5ndGggIT09IDEgfHwgYXN0LnR5cGUgIT09IDEpKSB7XHJcbiAgICAgICAgc3RhdGUud2FybignSW5saW5lLXRlbXBsYXRlIGNvbXBvbmVudHMgbXVzdCBoYXZlIGV4YWN0bHkgb25lIGNoaWxkIGVsZW1lbnQuJywgeyBzdGFydDogZWwuc3RhcnQgfSk7XHJcbiAgICB9XHJcbiAgICBpZiAoYXN0ICYmIGFzdC50eXBlID09PSAxKSB7XHJcbiAgICAgICAgdmFyIGlubGluZVJlbmRlckZucyA9IGdlbmVyYXRlKGFzdCwgc3RhdGUub3B0aW9ucyk7XHJcbiAgICAgICAgcmV0dXJuIFwiaW5saW5lVGVtcGxhdGU6e3JlbmRlcjpmdW5jdGlvbigpe1wiLmNvbmNhdChpbmxpbmVSZW5kZXJGbnMucmVuZGVyLCBcIn0sc3RhdGljUmVuZGVyRm5zOltcIikuY29uY2F0KGlubGluZVJlbmRlckZucy5zdGF0aWNSZW5kZXJGbnNcclxuICAgICAgICAgICAgLm1hcChmdW5jdGlvbiAoY29kZSkgeyByZXR1cm4gXCJmdW5jdGlvbigpe1wiLmNvbmNhdChjb2RlLCBcIn1cIik7IH0pXHJcbiAgICAgICAgICAgIC5qb2luKCcsJyksIFwiXX1cIik7XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gZ2VuU2NvcGVkU2xvdHMoZWwsIHNsb3RzLCBzdGF0ZSkge1xyXG4gICAgLy8gYnkgZGVmYXVsdCBzY29wZWQgc2xvdHMgYXJlIGNvbnNpZGVyZWQgXCJzdGFibGVcIiwgdGhpcyBhbGxvd3MgY2hpbGRcclxuICAgIC8vIGNvbXBvbmVudHMgd2l0aCBvbmx5IHNjb3BlZCBzbG90cyB0byBza2lwIGZvcmNlZCB1cGRhdGVzIGZyb20gcGFyZW50LlxyXG4gICAgLy8gYnV0IGluIHNvbWUgY2FzZXMgd2UgaGF2ZSB0byBiYWlsLW91dCBvZiB0aGlzIG9wdGltaXphdGlvblxyXG4gICAgLy8gZm9yIGV4YW1wbGUgaWYgdGhlIHNsb3QgY29udGFpbnMgZHluYW1pYyBuYW1lcywgaGFzIHYtaWYgb3Igdi1mb3Igb24gdGhlbS4uLlxyXG4gICAgdmFyIG5lZWRzRm9yY2VVcGRhdGUgPSBlbC5mb3IgfHxcclxuICAgICAgICBPYmplY3Qua2V5cyhzbG90cykuc29tZShmdW5jdGlvbiAoa2V5KSB7XHJcbiAgICAgICAgICAgIHZhciBzbG90ID0gc2xvdHNba2V5XTtcclxuICAgICAgICAgICAgcmV0dXJuIChzbG90LnNsb3RUYXJnZXREeW5hbWljIHx8IHNsb3QuaWYgfHwgc2xvdC5mb3IgfHwgY29udGFpbnNTbG90Q2hpbGQoc2xvdCkgLy8gaXMgcGFzc2luZyBkb3duIHNsb3QgZnJvbSBwYXJlbnQgd2hpY2ggbWF5IGJlIGR5bmFtaWNcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9KTtcclxuICAgIC8vICM5NTM0OiBpZiBhIGNvbXBvbmVudCB3aXRoIHNjb3BlZCBzbG90cyBpcyBpbnNpZGUgYSBjb25kaXRpb25hbCBicmFuY2gsXHJcbiAgICAvLyBpdCdzIHBvc3NpYmxlIGZvciB0aGUgc2FtZSBjb21wb25lbnQgdG8gYmUgcmV1c2VkIGJ1dCB3aXRoIGRpZmZlcmVudFxyXG4gICAgLy8gY29tcGlsZWQgc2xvdCBjb250ZW50LiBUbyBhdm9pZCB0aGF0LCB3ZSBnZW5lcmF0ZSBhIHVuaXF1ZSBrZXkgYmFzZWQgb25cclxuICAgIC8vIHRoZSBnZW5lcmF0ZWQgY29kZSBvZiBhbGwgdGhlIHNsb3QgY29udGVudHMuXHJcbiAgICB2YXIgbmVlZHNLZXkgPSAhIWVsLmlmO1xyXG4gICAgLy8gT1Igd2hlbiBpdCBpcyBpbnNpZGUgYW5vdGhlciBzY29wZWQgc2xvdCBvciB2LWZvciAodGhlIHJlYWN0aXZpdHkgbWF5IGJlXHJcbiAgICAvLyBkaXNjb25uZWN0ZWQgZHVlIHRvIHRoZSBpbnRlcm1lZGlhdGUgc2NvcGUgdmFyaWFibGUpXHJcbiAgICAvLyAjOTQzOCwgIzk1MDZcclxuICAgIC8vIFRPRE86IHRoaXMgY2FuIGJlIGZ1cnRoZXIgb3B0aW1pemVkIGJ5IHByb3Blcmx5IGFuYWx5emluZyBpbi1zY29wZSBiaW5kaW5nc1xyXG4gICAgLy8gYW5kIHNraXAgZm9yY2UgdXBkYXRpbmcgb25lcyB0aGF0IGRvIG5vdCBhY3R1YWxseSB1c2Ugc2NvcGUgdmFyaWFibGVzLlxyXG4gICAgaWYgKCFuZWVkc0ZvcmNlVXBkYXRlKSB7XHJcbiAgICAgICAgdmFyIHBhcmVudF8yID0gZWwucGFyZW50O1xyXG4gICAgICAgIHdoaWxlIChwYXJlbnRfMikge1xyXG4gICAgICAgICAgICBpZiAoKHBhcmVudF8yLnNsb3RTY29wZSAmJiBwYXJlbnRfMi5zbG90U2NvcGUgIT09IGVtcHR5U2xvdFNjb3BlVG9rZW4pIHx8XHJcbiAgICAgICAgICAgICAgICBwYXJlbnRfMi5mb3IpIHtcclxuICAgICAgICAgICAgICAgIG5lZWRzRm9yY2VVcGRhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHBhcmVudF8yLmlmKSB7XHJcbiAgICAgICAgICAgICAgICBuZWVkc0tleSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcGFyZW50XzIgPSBwYXJlbnRfMi5wYXJlbnQ7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgdmFyIGdlbmVyYXRlZFNsb3RzID0gT2JqZWN0LmtleXMoc2xvdHMpXHJcbiAgICAgICAgLm1hcChmdW5jdGlvbiAoa2V5KSB7IHJldHVybiBnZW5TY29wZWRTbG90KHNsb3RzW2tleV0sIHN0YXRlKTsgfSlcclxuICAgICAgICAuam9pbignLCcpO1xyXG4gICAgcmV0dXJuIFwic2NvcGVkU2xvdHM6X3UoW1wiLmNvbmNhdChnZW5lcmF0ZWRTbG90cywgXCJdXCIpLmNvbmNhdChuZWVkc0ZvcmNlVXBkYXRlID8gXCIsbnVsbCx0cnVlXCIgOiBcIlwiKS5jb25jYXQoIW5lZWRzRm9yY2VVcGRhdGUgJiYgbmVlZHNLZXkgPyBcIixudWxsLGZhbHNlLFwiLmNvbmNhdChoYXNoKGdlbmVyYXRlZFNsb3RzKSkgOiBcIlwiLCBcIilcIik7XHJcbn1cclxuZnVuY3Rpb24gaGFzaChzdHIpIHtcclxuICAgIHZhciBoYXNoID0gNTM4MTtcclxuICAgIHZhciBpID0gc3RyLmxlbmd0aDtcclxuICAgIHdoaWxlIChpKSB7XHJcbiAgICAgICAgaGFzaCA9IChoYXNoICogMzMpIF4gc3RyLmNoYXJDb2RlQXQoLS1pKTtcclxuICAgIH1cclxuICAgIHJldHVybiBoYXNoID4+PiAwO1xyXG59XHJcbmZ1bmN0aW9uIGNvbnRhaW5zU2xvdENoaWxkKGVsKSB7XHJcbiAgICBpZiAoZWwudHlwZSA9PT0gMSkge1xyXG4gICAgICAgIGlmIChlbC50YWcgPT09ICdzbG90Jykge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGVsLmNoaWxkcmVuLnNvbWUoY29udGFpbnNTbG90Q2hpbGQpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG59XHJcbmZ1bmN0aW9uIGdlblNjb3BlZFNsb3QoZWwsIHN0YXRlKSB7XHJcbiAgICB2YXIgaXNMZWdhY3lTeW50YXggPSBlbC5hdHRyc01hcFsnc2xvdC1zY29wZSddO1xyXG4gICAgaWYgKGVsLmlmICYmICFlbC5pZlByb2Nlc3NlZCAmJiAhaXNMZWdhY3lTeW50YXgpIHtcclxuICAgICAgICByZXR1cm4gZ2VuSWYoZWwsIHN0YXRlLCBnZW5TY29wZWRTbG90LCBcIm51bGxcIik7XHJcbiAgICB9XHJcbiAgICBpZiAoZWwuZm9yICYmICFlbC5mb3JQcm9jZXNzZWQpIHtcclxuICAgICAgICByZXR1cm4gZ2VuRm9yKGVsLCBzdGF0ZSwgZ2VuU2NvcGVkU2xvdCk7XHJcbiAgICB9XHJcbiAgICB2YXIgc2xvdFNjb3BlID0gZWwuc2xvdFNjb3BlID09PSBlbXB0eVNsb3RTY29wZVRva2VuID8gXCJcIiA6IFN0cmluZyhlbC5zbG90U2NvcGUpO1xyXG4gICAgdmFyIGZuID0gXCJmdW5jdGlvbihcIi5jb25jYXQoc2xvdFNjb3BlLCBcIil7XCIpICtcclxuICAgICAgICBcInJldHVybiBcIi5jb25jYXQoZWwudGFnID09PSAndGVtcGxhdGUnXHJcbiAgICAgICAgICAgID8gZWwuaWYgJiYgaXNMZWdhY3lTeW50YXhcclxuICAgICAgICAgICAgICAgID8gXCIoXCIuY29uY2F0KGVsLmlmLCBcIik/XCIpLmNvbmNhdChnZW5DaGlsZHJlbihlbCwgc3RhdGUpIHx8ICd1bmRlZmluZWQnLCBcIjp1bmRlZmluZWRcIilcclxuICAgICAgICAgICAgICAgIDogZ2VuQ2hpbGRyZW4oZWwsIHN0YXRlKSB8fCAndW5kZWZpbmVkJ1xyXG4gICAgICAgICAgICA6IGdlbkVsZW1lbnQoZWwsIHN0YXRlKSwgXCJ9XCIpO1xyXG4gICAgLy8gcmV2ZXJzZSBwcm94eSB2LXNsb3Qgd2l0aG91dCBzY29wZSBvbiB0aGlzLiRzbG90c1xyXG4gICAgdmFyIHJldmVyc2VQcm94eSA9IHNsb3RTY29wZSA/IFwiXCIgOiBcIixwcm94eTp0cnVlXCI7XHJcbiAgICByZXR1cm4gXCJ7a2V5OlwiLmNvbmNhdChlbC5zbG90VGFyZ2V0IHx8IFwiXFxcImRlZmF1bHRcXFwiXCIsIFwiLGZuOlwiKS5jb25jYXQoZm4pLmNvbmNhdChyZXZlcnNlUHJveHksIFwifVwiKTtcclxufVxyXG5mdW5jdGlvbiBnZW5DaGlsZHJlbihlbCwgc3RhdGUsIGNoZWNrU2tpcCwgYWx0R2VuRWxlbWVudCwgYWx0R2VuTm9kZSkge1xyXG4gICAgdmFyIGNoaWxkcmVuID0gZWwuY2hpbGRyZW47XHJcbiAgICBpZiAoY2hpbGRyZW4ubGVuZ3RoKSB7XHJcbiAgICAgICAgdmFyIGVsXzEgPSBjaGlsZHJlblswXTtcclxuICAgICAgICAvLyBvcHRpbWl6ZSBzaW5nbGUgdi1mb3JcclxuICAgICAgICBpZiAoY2hpbGRyZW4ubGVuZ3RoID09PSAxICYmXHJcbiAgICAgICAgICAgIGVsXzEuZm9yICYmXHJcbiAgICAgICAgICAgIGVsXzEudGFnICE9PSAndGVtcGxhdGUnICYmXHJcbiAgICAgICAgICAgIGVsXzEudGFnICE9PSAnc2xvdCcpIHtcclxuICAgICAgICAgICAgdmFyIG5vcm1hbGl6YXRpb25UeXBlXzEgPSBjaGVja1NraXBcclxuICAgICAgICAgICAgICAgID8gc3RhdGUubWF5YmVDb21wb25lbnQoZWxfMSlcclxuICAgICAgICAgICAgICAgICAgICA/IFwiLDFcIlxyXG4gICAgICAgICAgICAgICAgICAgIDogXCIsMFwiXHJcbiAgICAgICAgICAgICAgICA6IFwiXCI7XHJcbiAgICAgICAgICAgIHJldHVybiBcIlwiLmNvbmNhdCgoYWx0R2VuRWxlbWVudCB8fCBnZW5FbGVtZW50KShlbF8xLCBzdGF0ZSkpLmNvbmNhdChub3JtYWxpemF0aW9uVHlwZV8xKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIG5vcm1hbGl6YXRpb25UeXBlID0gY2hlY2tTa2lwXHJcbiAgICAgICAgICAgID8gZ2V0Tm9ybWFsaXphdGlvblR5cGUoY2hpbGRyZW4sIHN0YXRlLm1heWJlQ29tcG9uZW50KVxyXG4gICAgICAgICAgICA6IDA7XHJcbiAgICAgICAgdmFyIGdlbl8xID0gYWx0R2VuTm9kZSB8fCBnZW5Ob2RlO1xyXG4gICAgICAgIHJldHVybiBcIltcIi5jb25jYXQoY2hpbGRyZW4ubWFwKGZ1bmN0aW9uIChjKSB7IHJldHVybiBnZW5fMShjLCBzdGF0ZSk7IH0pLmpvaW4oJywnKSwgXCJdXCIpLmNvbmNhdChub3JtYWxpemF0aW9uVHlwZSA/IFwiLFwiLmNvbmNhdChub3JtYWxpemF0aW9uVHlwZSkgOiAnJyk7XHJcbiAgICB9XHJcbn1cclxuLy8gZGV0ZXJtaW5lIHRoZSBub3JtYWxpemF0aW9uIG5lZWRlZCBmb3IgdGhlIGNoaWxkcmVuIGFycmF5LlxyXG4vLyAwOiBubyBub3JtYWxpemF0aW9uIG5lZWRlZFxyXG4vLyAxOiBzaW1wbGUgbm9ybWFsaXphdGlvbiBuZWVkZWQgKHBvc3NpYmxlIDEtbGV2ZWwgZGVlcCBuZXN0ZWQgYXJyYXkpXHJcbi8vIDI6IGZ1bGwgbm9ybWFsaXphdGlvbiBuZWVkZWRcclxuZnVuY3Rpb24gZ2V0Tm9ybWFsaXphdGlvblR5cGUoY2hpbGRyZW4sIG1heWJlQ29tcG9uZW50KSB7XHJcbiAgICB2YXIgcmVzID0gMDtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB2YXIgZWwgPSBjaGlsZHJlbltpXTtcclxuICAgICAgICBpZiAoZWwudHlwZSAhPT0gMSkge1xyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG5lZWRzTm9ybWFsaXphdGlvbihlbCkgfHxcclxuICAgICAgICAgICAgKGVsLmlmQ29uZGl0aW9ucyAmJlxyXG4gICAgICAgICAgICAgICAgZWwuaWZDb25kaXRpb25zLnNvbWUoZnVuY3Rpb24gKGMpIHsgcmV0dXJuIG5lZWRzTm9ybWFsaXphdGlvbihjLmJsb2NrKTsgfSkpKSB7XHJcbiAgICAgICAgICAgIHJlcyA9IDI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobWF5YmVDb21wb25lbnQoZWwpIHx8XHJcbiAgICAgICAgICAgIChlbC5pZkNvbmRpdGlvbnMgJiYgZWwuaWZDb25kaXRpb25zLnNvbWUoZnVuY3Rpb24gKGMpIHsgcmV0dXJuIG1heWJlQ29tcG9uZW50KGMuYmxvY2spOyB9KSkpIHtcclxuICAgICAgICAgICAgcmVzID0gMTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzO1xyXG59XHJcbmZ1bmN0aW9uIG5lZWRzTm9ybWFsaXphdGlvbihlbCkge1xyXG4gICAgcmV0dXJuIGVsLmZvciAhPT0gdW5kZWZpbmVkIHx8IGVsLnRhZyA9PT0gJ3RlbXBsYXRlJyB8fCBlbC50YWcgPT09ICdzbG90JztcclxufVxyXG5mdW5jdGlvbiBnZW5Ob2RlKG5vZGUsIHN0YXRlKSB7XHJcbiAgICBpZiAobm9kZS50eXBlID09PSAxKSB7XHJcbiAgICAgICAgcmV0dXJuIGdlbkVsZW1lbnQobm9kZSwgc3RhdGUpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAobm9kZS50eXBlID09PSAzICYmIG5vZGUuaXNDb21tZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIGdlbkNvbW1lbnQobm9kZSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICByZXR1cm4gZ2VuVGV4dChub2RlKTtcclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBnZW5UZXh0KHRleHQpIHtcclxuICAgIHJldHVybiBcIl92KFwiLmNvbmNhdCh0ZXh0LnR5cGUgPT09IDJcclxuICAgICAgICA/IHRleHQuZXhwcmVzc2lvbiAvLyBubyBuZWVkIGZvciAoKSBiZWNhdXNlIGFscmVhZHkgd3JhcHBlZCBpbiBfcygpXHJcbiAgICAgICAgOiB0cmFuc2Zvcm1TcGVjaWFsTmV3bGluZXMoSlNPTi5zdHJpbmdpZnkodGV4dC50ZXh0KSksIFwiKVwiKTtcclxufVxyXG5mdW5jdGlvbiBnZW5Db21tZW50KGNvbW1lbnQpIHtcclxuICAgIHJldHVybiBcIl9lKFwiLmNvbmNhdChKU09OLnN0cmluZ2lmeShjb21tZW50LnRleHQpLCBcIilcIik7XHJcbn1cclxuZnVuY3Rpb24gZ2VuU2xvdChlbCwgc3RhdGUpIHtcclxuICAgIHZhciBzbG90TmFtZSA9IGVsLnNsb3ROYW1lIHx8ICdcImRlZmF1bHRcIic7XHJcbiAgICB2YXIgY2hpbGRyZW4gPSBnZW5DaGlsZHJlbihlbCwgc3RhdGUpO1xyXG4gICAgdmFyIHJlcyA9IFwiX3QoXCIuY29uY2F0KHNsb3ROYW1lKS5jb25jYXQoY2hpbGRyZW4gPyBcIixmdW5jdGlvbigpe3JldHVybiBcIi5jb25jYXQoY2hpbGRyZW4sIFwifVwiKSA6ICcnKTtcclxuICAgIHZhciBhdHRycyA9IGVsLmF0dHJzIHx8IGVsLmR5bmFtaWNBdHRyc1xyXG4gICAgICAgID8gZ2VuUHJvcHMoKGVsLmF0dHJzIHx8IFtdKS5jb25jYXQoZWwuZHluYW1pY0F0dHJzIHx8IFtdKS5tYXAoZnVuY3Rpb24gKGF0dHIpIHsgcmV0dXJuICh7XHJcbiAgICAgICAgICAgIC8vIHNsb3QgcHJvcHMgYXJlIGNhbWVsaXplZFxyXG4gICAgICAgICAgICBuYW1lOiBjYW1lbGl6ZShhdHRyLm5hbWUpLFxyXG4gICAgICAgICAgICB2YWx1ZTogYXR0ci52YWx1ZSxcclxuICAgICAgICAgICAgZHluYW1pYzogYXR0ci5keW5hbWljXHJcbiAgICAgICAgfSk7IH0pKVxyXG4gICAgICAgIDogbnVsbDtcclxuICAgIHZhciBiaW5kID0gZWwuYXR0cnNNYXBbJ3YtYmluZCddO1xyXG4gICAgaWYgKChhdHRycyB8fCBiaW5kKSAmJiAhY2hpbGRyZW4pIHtcclxuICAgICAgICByZXMgKz0gXCIsbnVsbFwiO1xyXG4gICAgfVxyXG4gICAgaWYgKGF0dHJzKSB7XHJcbiAgICAgICAgcmVzICs9IFwiLFwiLmNvbmNhdChhdHRycyk7XHJcbiAgICB9XHJcbiAgICBpZiAoYmluZCkge1xyXG4gICAgICAgIHJlcyArPSBcIlwiLmNvbmNhdChhdHRycyA/ICcnIDogJyxudWxsJywgXCIsXCIpLmNvbmNhdChiaW5kKTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXMgKyAnKSc7XHJcbn1cclxuLy8gY29tcG9uZW50TmFtZSBpcyBlbC5jb21wb25lbnQsIHRha2UgaXQgYXMgYXJndW1lbnQgdG8gc2h1biBmbG93J3MgcGVzc2ltaXN0aWMgcmVmaW5lbWVudFxyXG5mdW5jdGlvbiBnZW5Db21wb25lbnQoY29tcG9uZW50TmFtZSwgZWwsIHN0YXRlKSB7XHJcbiAgICB2YXIgY2hpbGRyZW4gPSBlbC5pbmxpbmVUZW1wbGF0ZSA/IG51bGwgOiBnZW5DaGlsZHJlbihlbCwgc3RhdGUsIHRydWUpO1xyXG4gICAgcmV0dXJuIFwiX2MoXCIuY29uY2F0KGNvbXBvbmVudE5hbWUsIFwiLFwiKS5jb25jYXQoZ2VuRGF0YShlbCwgc3RhdGUpKS5jb25jYXQoY2hpbGRyZW4gPyBcIixcIi5jb25jYXQoY2hpbGRyZW4pIDogJycsIFwiKVwiKTtcclxufVxyXG5mdW5jdGlvbiBnZW5Qcm9wcyhwcm9wcykge1xyXG4gICAgdmFyIHN0YXRpY1Byb3BzID0gXCJcIjtcclxuICAgIHZhciBkeW5hbWljUHJvcHMgPSBcIlwiO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHZhciBwcm9wID0gcHJvcHNbaV07XHJcbiAgICAgICAgdmFyIHZhbHVlID0gdHJhbnNmb3JtU3BlY2lhbE5ld2xpbmVzKHByb3AudmFsdWUpO1xyXG4gICAgICAgIGlmIChwcm9wLmR5bmFtaWMpIHtcclxuICAgICAgICAgICAgZHluYW1pY1Byb3BzICs9IFwiXCIuY29uY2F0KHByb3AubmFtZSwgXCIsXCIpLmNvbmNhdCh2YWx1ZSwgXCIsXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgc3RhdGljUHJvcHMgKz0gXCJcXFwiXCIuY29uY2F0KHByb3AubmFtZSwgXCJcXFwiOlwiKS5jb25jYXQodmFsdWUsIFwiLFwiKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBzdGF0aWNQcm9wcyA9IFwie1wiLmNvbmNhdChzdGF0aWNQcm9wcy5zbGljZSgwLCAtMSksIFwifVwiKTtcclxuICAgIGlmIChkeW5hbWljUHJvcHMpIHtcclxuICAgICAgICByZXR1cm4gXCJfZChcIi5jb25jYXQoc3RhdGljUHJvcHMsIFwiLFtcIikuY29uY2F0KGR5bmFtaWNQcm9wcy5zbGljZSgwLCAtMSksIFwiXSlcIik7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICByZXR1cm4gc3RhdGljUHJvcHM7XHJcbiAgICB9XHJcbn1cclxuLy8gIzM4OTUsICM0MjY4XHJcbmZ1bmN0aW9uIHRyYW5zZm9ybVNwZWNpYWxOZXdsaW5lcyh0ZXh0KSB7XHJcbiAgICByZXR1cm4gdGV4dC5yZXBsYWNlKC9cXHUyMDI4L2csICdcXFxcdTIwMjgnKS5yZXBsYWNlKC9cXHUyMDI5L2csICdcXFxcdTIwMjknKTtcclxufVxuXG4vLyB0aGVzZSBrZXl3b3JkcyBzaG91bGQgbm90IGFwcGVhciBpbnNpZGUgZXhwcmVzc2lvbnMsIGJ1dCBvcGVyYXRvcnMgbGlrZVxyXG4vLyB0eXBlb2YsIGluc3RhbmNlb2YgYW5kIGluIGFyZSBhbGxvd2VkXHJcbnZhciBwcm9oaWJpdGVkS2V5d29yZFJFID0gbmV3IFJlZ0V4cCgnXFxcXGInICtcclxuICAgICgnZG8saWYsZm9yLGxldCxuZXcsdHJ5LHZhcixjYXNlLGVsc2Usd2l0aCxhd2FpdCxicmVhayxjYXRjaCxjbGFzcyxjb25zdCwnICtcclxuICAgICAgICAnc3VwZXIsdGhyb3csd2hpbGUseWllbGQsZGVsZXRlLGV4cG9ydCxpbXBvcnQscmV0dXJuLHN3aXRjaCxkZWZhdWx0LCcgK1xyXG4gICAgICAgICdleHRlbmRzLGZpbmFsbHksY29udGludWUsZGVidWdnZXIsZnVuY3Rpb24sYXJndW1lbnRzJylcclxuICAgICAgICAuc3BsaXQoJywnKVxyXG4gICAgICAgIC5qb2luKCdcXFxcYnxcXFxcYicpICtcclxuICAgICdcXFxcYicpO1xyXG4vLyB0aGVzZSB1bmFyeSBvcGVyYXRvcnMgc2hvdWxkIG5vdCBiZSB1c2VkIGFzIHByb3BlcnR5L21ldGhvZCBuYW1lc1xyXG52YXIgdW5hcnlPcGVyYXRvcnNSRSA9IG5ldyBSZWdFeHAoJ1xcXFxiJyArXHJcbiAgICAnZGVsZXRlLHR5cGVvZix2b2lkJy5zcGxpdCgnLCcpLmpvaW4oJ1xcXFxzKlxcXFwoW15cXFxcKV0qXFxcXCl8XFxcXGInKSArXHJcbiAgICAnXFxcXHMqXFxcXChbXlxcXFwpXSpcXFxcKScpO1xyXG4vLyBzdHJpcCBzdHJpbmdzIGluIGV4cHJlc3Npb25zXHJcbnZhciBzdHJpcFN0cmluZ1JFID0gLycoPzpbXidcXFxcXXxcXFxcLikqJ3xcIig/OlteXCJcXFxcXXxcXFxcLikqXCJ8YCg/OlteYFxcXFxdfFxcXFwuKSpcXCRcXHt8XFx9KD86W15gXFxcXF18XFxcXC4pKmB8YCg/OlteYFxcXFxdfFxcXFwuKSpgL2c7XHJcbi8vIGRldGVjdCBwcm9ibGVtYXRpYyBleHByZXNzaW9ucyBpbiBhIHRlbXBsYXRlXHJcbmZ1bmN0aW9uIGRldGVjdEVycm9ycyhhc3QsIHdhcm4pIHtcclxuICAgIGlmIChhc3QpIHtcclxuICAgICAgICBjaGVja05vZGUoYXN0LCB3YXJuKTtcclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBjaGVja05vZGUobm9kZSwgd2Fybikge1xyXG4gICAgaWYgKG5vZGUudHlwZSA9PT0gMSkge1xyXG4gICAgICAgIGZvciAodmFyIG5hbWVfMSBpbiBub2RlLmF0dHJzTWFwKSB7XHJcbiAgICAgICAgICAgIGlmIChkaXJSRS50ZXN0KG5hbWVfMSkpIHtcclxuICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IG5vZGUuYXR0cnNNYXBbbmFtZV8xXTtcclxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciByYW5nZSA9IG5vZGUucmF3QXR0cnNNYXBbbmFtZV8xXTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAobmFtZV8xID09PSAndi1mb3InKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrRm9yKG5vZGUsIFwidi1mb3I9XFxcIlwiLmNvbmNhdCh2YWx1ZSwgXCJcXFwiXCIpLCB3YXJuLCByYW5nZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5hbWVfMSA9PT0gJ3Ytc2xvdCcgfHwgbmFtZV8xWzBdID09PSAnIycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tGdW5jdGlvblBhcmFtZXRlckV4cHJlc3Npb24odmFsdWUsIFwiXCIuY29uY2F0KG5hbWVfMSwgXCI9XFxcIlwiKS5jb25jYXQodmFsdWUsIFwiXFxcIlwiKSwgd2FybiwgcmFuZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChvblJFLnRlc3QobmFtZV8xKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGVja0V2ZW50KHZhbHVlLCBcIlwiLmNvbmNhdChuYW1lXzEsIFwiPVxcXCJcIikuY29uY2F0KHZhbHVlLCBcIlxcXCJcIiksIHdhcm4sIHJhbmdlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrRXhwcmVzc2lvbih2YWx1ZSwgXCJcIi5jb25jYXQobmFtZV8xLCBcIj1cXFwiXCIpLmNvbmNhdCh2YWx1ZSwgXCJcXFwiXCIpLCB3YXJuLCByYW5nZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZS5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgY2hlY2tOb2RlKG5vZGUuY2hpbGRyZW5baV0sIHdhcm4pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAobm9kZS50eXBlID09PSAyKSB7XHJcbiAgICAgICAgY2hlY2tFeHByZXNzaW9uKG5vZGUuZXhwcmVzc2lvbiwgbm9kZS50ZXh0LCB3YXJuLCBub2RlKTtcclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBjaGVja0V2ZW50KGV4cCwgdGV4dCwgd2FybiwgcmFuZ2UpIHtcclxuICAgIHZhciBzdHJpcHBlZCA9IGV4cC5yZXBsYWNlKHN0cmlwU3RyaW5nUkUsICcnKTtcclxuICAgIHZhciBrZXl3b3JkTWF0Y2ggPSBzdHJpcHBlZC5tYXRjaCh1bmFyeU9wZXJhdG9yc1JFKTtcclxuICAgIGlmIChrZXl3b3JkTWF0Y2ggJiYgc3RyaXBwZWQuY2hhckF0KGtleXdvcmRNYXRjaC5pbmRleCAtIDEpICE9PSAnJCcpIHtcclxuICAgICAgICB3YXJuKFwiYXZvaWQgdXNpbmcgSmF2YVNjcmlwdCB1bmFyeSBvcGVyYXRvciBhcyBwcm9wZXJ0eSBuYW1lOiBcIiArXHJcbiAgICAgICAgICAgIFwiXFxcIlwiLmNvbmNhdChrZXl3b3JkTWF0Y2hbMF0sIFwiXFxcIiBpbiBleHByZXNzaW9uIFwiKS5jb25jYXQodGV4dC50cmltKCkpLCByYW5nZSk7XHJcbiAgICB9XHJcbiAgICBjaGVja0V4cHJlc3Npb24oZXhwLCB0ZXh0LCB3YXJuLCByYW5nZSk7XHJcbn1cclxuZnVuY3Rpb24gY2hlY2tGb3Iobm9kZSwgdGV4dCwgd2FybiwgcmFuZ2UpIHtcclxuICAgIGNoZWNrRXhwcmVzc2lvbihub2RlLmZvciB8fCAnJywgdGV4dCwgd2FybiwgcmFuZ2UpO1xyXG4gICAgY2hlY2tJZGVudGlmaWVyKG5vZGUuYWxpYXMsICd2LWZvciBhbGlhcycsIHRleHQsIHdhcm4sIHJhbmdlKTtcclxuICAgIGNoZWNrSWRlbnRpZmllcihub2RlLml0ZXJhdG9yMSwgJ3YtZm9yIGl0ZXJhdG9yJywgdGV4dCwgd2FybiwgcmFuZ2UpO1xyXG4gICAgY2hlY2tJZGVudGlmaWVyKG5vZGUuaXRlcmF0b3IyLCAndi1mb3IgaXRlcmF0b3InLCB0ZXh0LCB3YXJuLCByYW5nZSk7XHJcbn1cclxuZnVuY3Rpb24gY2hlY2tJZGVudGlmaWVyKGlkZW50LCB0eXBlLCB0ZXh0LCB3YXJuLCByYW5nZSkge1xyXG4gICAgaWYgKHR5cGVvZiBpZGVudCA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBuZXcgRnVuY3Rpb24oXCJ2YXIgXCIuY29uY2F0KGlkZW50LCBcIj1fXCIpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgd2FybihcImludmFsaWQgXCIuY29uY2F0KHR5cGUsIFwiIFxcXCJcIikuY29uY2F0KGlkZW50LCBcIlxcXCIgaW4gZXhwcmVzc2lvbjogXCIpLmNvbmNhdCh0ZXh0LnRyaW0oKSksIHJhbmdlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gY2hlY2tFeHByZXNzaW9uKGV4cCwgdGV4dCwgd2FybiwgcmFuZ2UpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgbmV3IEZ1bmN0aW9uKFwicmV0dXJuIFwiLmNvbmNhdChleHApKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgdmFyIGtleXdvcmRNYXRjaCA9IGV4cFxyXG4gICAgICAgICAgICAucmVwbGFjZShzdHJpcFN0cmluZ1JFLCAnJylcclxuICAgICAgICAgICAgLm1hdGNoKHByb2hpYml0ZWRLZXl3b3JkUkUpO1xyXG4gICAgICAgIGlmIChrZXl3b3JkTWF0Y2gpIHtcclxuICAgICAgICAgICAgd2FybihcImF2b2lkIHVzaW5nIEphdmFTY3JpcHQga2V5d29yZCBhcyBwcm9wZXJ0eSBuYW1lOiBcIiArXHJcbiAgICAgICAgICAgICAgICBcIlxcXCJcIi5jb25jYXQoa2V5d29yZE1hdGNoWzBdLCBcIlxcXCJcXG4gIFJhdyBleHByZXNzaW9uOiBcIikuY29uY2F0KHRleHQudHJpbSgpKSwgcmFuZ2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgd2FybihcImludmFsaWQgZXhwcmVzc2lvbjogXCIuY29uY2F0KGUubWVzc2FnZSwgXCIgaW5cXG5cXG5cIikgK1xyXG4gICAgICAgICAgICAgICAgXCIgICAgXCIuY29uY2F0KGV4cCwgXCJcXG5cXG5cIikgK1xyXG4gICAgICAgICAgICAgICAgXCIgIFJhdyBleHByZXNzaW9uOiBcIi5jb25jYXQodGV4dC50cmltKCksIFwiXFxuXCIpLCByYW5nZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIGNoZWNrRnVuY3Rpb25QYXJhbWV0ZXJFeHByZXNzaW9uKGV4cCwgdGV4dCwgd2FybiwgcmFuZ2UpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgbmV3IEZ1bmN0aW9uKGV4cCwgJycpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICB3YXJuKFwiaW52YWxpZCBmdW5jdGlvbiBwYXJhbWV0ZXIgZXhwcmVzc2lvbjogXCIuY29uY2F0KGUubWVzc2FnZSwgXCIgaW5cXG5cXG5cIikgK1xyXG4gICAgICAgICAgICBcIiAgICBcIi5jb25jYXQoZXhwLCBcIlxcblxcblwiKSArXHJcbiAgICAgICAgICAgIFwiICBSYXcgZXhwcmVzc2lvbjogXCIuY29uY2F0KHRleHQudHJpbSgpLCBcIlxcblwiKSwgcmFuZ2UpO1xyXG4gICAgfVxyXG59XG5cbnZhciByYW5nZSA9IDI7XHJcbmZ1bmN0aW9uIGdlbmVyYXRlQ29kZUZyYW1lKHNvdXJjZSwgc3RhcnQsIGVuZCkge1xyXG4gICAgaWYgKHN0YXJ0ID09PSB2b2lkIDApIHsgc3RhcnQgPSAwOyB9XHJcbiAgICBpZiAoZW5kID09PSB2b2lkIDApIHsgZW5kID0gc291cmNlLmxlbmd0aDsgfVxyXG4gICAgdmFyIGxpbmVzID0gc291cmNlLnNwbGl0KC9cXHI/XFxuLyk7XHJcbiAgICB2YXIgY291bnQgPSAwO1xyXG4gICAgdmFyIHJlcyA9IFtdO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNvdW50ICs9IGxpbmVzW2ldLmxlbmd0aCArIDE7XHJcbiAgICAgICAgaWYgKGNvdW50ID49IHN0YXJ0KSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGogPSBpIC0gcmFuZ2U7IGogPD0gaSArIHJhbmdlIHx8IGVuZCA+IGNvdW50OyBqKyspIHtcclxuICAgICAgICAgICAgICAgIGlmIChqIDwgMCB8fCBqID49IGxpbmVzLmxlbmd0aClcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIHJlcy5wdXNoKFwiXCIuY29uY2F0KGogKyAxKS5jb25jYXQocmVwZWF0KFwiIFwiLCAzIC0gU3RyaW5nKGogKyAxKS5sZW5ndGgpLCBcInwgIFwiKS5jb25jYXQobGluZXNbal0pKTtcclxuICAgICAgICAgICAgICAgIHZhciBsaW5lTGVuZ3RoID0gbGluZXNbal0ubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgaWYgKGogPT09IGkpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBwdXNoIHVuZGVybGluZVxyXG4gICAgICAgICAgICAgICAgICAgIHZhciBwYWQgPSBzdGFydCAtIChjb3VudCAtIGxpbmVMZW5ndGgpICsgMTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgbGVuZ3RoXzEgPSBlbmQgPiBjb3VudCA/IGxpbmVMZW5ndGggLSBwYWQgOiBlbmQgLSBzdGFydDtcclxuICAgICAgICAgICAgICAgICAgICByZXMucHVzaChcIiAgIHwgIFwiICsgcmVwZWF0KFwiIFwiLCBwYWQpICsgcmVwZWF0KFwiXlwiLCBsZW5ndGhfMSkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoaiA+IGkpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZW5kID4gY291bnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxlbmd0aF8yID0gTWF0aC5taW4oZW5kIC0gY291bnQsIGxpbmVMZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXMucHVzaChcIiAgIHwgIFwiICsgcmVwZWF0KFwiXlwiLCBsZW5ndGhfMikpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjb3VudCArPSBsaW5lTGVuZ3RoICsgMTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzLmpvaW4oJ1xcbicpO1xyXG59XHJcbmZ1bmN0aW9uIHJlcGVhdChzdHIsIG4pIHtcclxuICAgIHZhciByZXN1bHQgPSAnJztcclxuICAgIGlmIChuID4gMCkge1xyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zdGFudC1jb25kaXRpb25cclxuICAgICAgICB3aGlsZSAodHJ1ZSkge1xyXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXHJcbiAgICAgICAgICAgIGlmIChuICYgMSlcclxuICAgICAgICAgICAgICAgIHJlc3VsdCArPSBzdHI7XHJcbiAgICAgICAgICAgIG4gPj4+PSAxO1xyXG4gICAgICAgICAgICBpZiAobiA8PSAwKVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIHN0ciArPSBzdHI7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxufVxuXG5mdW5jdGlvbiBjcmVhdGVGdW5jdGlvbihjb2RlLCBlcnJvcnMpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBGdW5jdGlvbihjb2RlKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChlcnIpIHtcclxuICAgICAgICBlcnJvcnMucHVzaCh7IGVycjogZXJyLCBjb2RlOiBjb2RlIH0pO1xyXG4gICAgICAgIHJldHVybiBub29wO1xyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIGNyZWF0ZUNvbXBpbGVUb0Z1bmN0aW9uRm4oY29tcGlsZSkge1xyXG4gICAgdmFyIGNhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcclxuICAgIHJldHVybiBmdW5jdGlvbiBjb21waWxlVG9GdW5jdGlvbnModGVtcGxhdGUsIG9wdGlvbnMsIHZtKSB7XHJcbiAgICAgICAgb3B0aW9ucyA9IGV4dGVuZCh7fSwgb3B0aW9ucyk7XHJcbiAgICAgICAgdmFyIHdhcm4gPSBvcHRpb25zLndhcm4gfHwgd2FybiQyO1xyXG4gICAgICAgIGRlbGV0ZSBvcHRpb25zLndhcm47XHJcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXHJcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcclxuICAgICAgICAgICAgLy8gZGV0ZWN0IHBvc3NpYmxlIENTUCByZXN0cmljdGlvblxyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgbmV3IEZ1bmN0aW9uKCdyZXR1cm4gMScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZS50b1N0cmluZygpLm1hdGNoKC91bnNhZmUtZXZhbHxDU1AvKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHdhcm4oJ0l0IHNlZW1zIHlvdSBhcmUgdXNpbmcgdGhlIHN0YW5kYWxvbmUgYnVpbGQgb2YgVnVlLmpzIGluIGFuICcgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAnZW52aXJvbm1lbnQgd2l0aCBDb250ZW50IFNlY3VyaXR5IFBvbGljeSB0aGF0IHByb2hpYml0cyB1bnNhZmUtZXZhbC4gJyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICdUaGUgdGVtcGxhdGUgY29tcGlsZXIgY2Fubm90IHdvcmsgaW4gdGhpcyBlbnZpcm9ubWVudC4gQ29uc2lkZXIgJyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICdyZWxheGluZyB0aGUgcG9saWN5IHRvIGFsbG93IHVuc2FmZS1ldmFsIG9yIHByZS1jb21waWxpbmcgeW91ciAnICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ3RlbXBsYXRlcyBpbnRvIHJlbmRlciBmdW5jdGlvbnMuJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gY2hlY2sgY2FjaGVcclxuICAgICAgICB2YXIga2V5ID0gb3B0aW9ucy5kZWxpbWl0ZXJzXHJcbiAgICAgICAgICAgID8gU3RyaW5nKG9wdGlvbnMuZGVsaW1pdGVycykgKyB0ZW1wbGF0ZVxyXG4gICAgICAgICAgICA6IHRlbXBsYXRlO1xyXG4gICAgICAgIGlmIChjYWNoZVtrZXldKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBjYWNoZVtrZXldO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBjb21waWxlXHJcbiAgICAgICAgdmFyIGNvbXBpbGVkID0gY29tcGlsZSh0ZW1wbGF0ZSwgb3B0aW9ucyk7XHJcbiAgICAgICAgLy8gY2hlY2sgY29tcGlsYXRpb24gZXJyb3JzL3RpcHNcclxuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xyXG4gICAgICAgICAgICBpZiAoY29tcGlsZWQuZXJyb3JzICYmIGNvbXBpbGVkLmVycm9ycy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLm91dHB1dFNvdXJjZVJhbmdlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29tcGlsZWQuZXJyb3JzLmZvckVhY2goZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2FybihcIkVycm9yIGNvbXBpbGluZyB0ZW1wbGF0ZTpcXG5cXG5cIi5jb25jYXQoZS5tc2csIFwiXFxuXFxuXCIpICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlQ29kZUZyYW1lKHRlbXBsYXRlLCBlLnN0YXJ0LCBlLmVuZCksIHZtKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHdhcm4oXCJFcnJvciBjb21waWxpbmcgdGVtcGxhdGU6XFxuXFxuXCIuY29uY2F0KHRlbXBsYXRlLCBcIlxcblxcblwiKSArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVkLmVycm9ycy5tYXAoZnVuY3Rpb24gKGUpIHsgcmV0dXJuIFwiLSBcIi5jb25jYXQoZSk7IH0pLmpvaW4oJ1xcbicpICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ1xcbicsIHZtKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoY29tcGlsZWQudGlwcyAmJiBjb21waWxlZC50aXBzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMub3V0cHV0U291cmNlUmFuZ2UpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb21waWxlZC50aXBzLmZvckVhY2goZnVuY3Rpb24gKGUpIHsgcmV0dXJuIHRpcChlLm1zZywgdm0pOyB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbXBpbGVkLnRpcHMuZm9yRWFjaChmdW5jdGlvbiAobXNnKSB7IHJldHVybiB0aXAobXNnLCB2bSk7IH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHR1cm4gY29kZSBpbnRvIGZ1bmN0aW9uc1xyXG4gICAgICAgIHZhciByZXMgPSB7fTtcclxuICAgICAgICB2YXIgZm5HZW5FcnJvcnMgPSBbXTtcclxuICAgICAgICByZXMucmVuZGVyID0gY3JlYXRlRnVuY3Rpb24oY29tcGlsZWQucmVuZGVyLCBmbkdlbkVycm9ycyk7XHJcbiAgICAgICAgcmVzLnN0YXRpY1JlbmRlckZucyA9IGNvbXBpbGVkLnN0YXRpY1JlbmRlckZucy5tYXAoZnVuY3Rpb24gKGNvZGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUZ1bmN0aW9uKGNvZGUsIGZuR2VuRXJyb3JzKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICAvLyBjaGVjayBmdW5jdGlvbiBnZW5lcmF0aW9uIGVycm9ycy5cclxuICAgICAgICAvLyB0aGlzIHNob3VsZCBvbmx5IGhhcHBlbiBpZiB0aGVyZSBpcyBhIGJ1ZyBpbiB0aGUgY29tcGlsZXIgaXRzZWxmLlxyXG4gICAgICAgIC8vIG1vc3RseSBmb3IgY29kZWdlbiBkZXZlbG9wbWVudCB1c2VcclxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cclxuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xyXG4gICAgICAgICAgICBpZiAoKCFjb21waWxlZC5lcnJvcnMgfHwgIWNvbXBpbGVkLmVycm9ycy5sZW5ndGgpICYmIGZuR2VuRXJyb3JzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgd2FybihcIkZhaWxlZCB0byBnZW5lcmF0ZSByZW5kZXIgZnVuY3Rpb246XFxuXFxuXCIgK1xyXG4gICAgICAgICAgICAgICAgICAgIGZuR2VuRXJyb3JzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24gKF9hKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlcnIgPSBfYS5lcnIsIGNvZGUgPSBfYS5jb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJcIi5jb25jYXQoZXJyLnRvU3RyaW5nKCksIFwiIGluXFxuXFxuXCIpLmNvbmNhdChjb2RlLCBcIlxcblwiKTtcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuam9pbignXFxuJyksIHZtKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gKGNhY2hlW2tleV0gPSByZXMpO1xyXG4gICAgfTtcclxufVxuXG5mdW5jdGlvbiBjcmVhdGVDb21waWxlckNyZWF0b3IoYmFzZUNvbXBpbGUpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbiBjcmVhdGVDb21waWxlcihiYXNlT3B0aW9ucykge1xyXG4gICAgICAgIGZ1bmN0aW9uIGNvbXBpbGUodGVtcGxhdGUsIG9wdGlvbnMpIHtcclxuICAgICAgICAgICAgdmFyIGZpbmFsT3B0aW9ucyA9IE9iamVjdC5jcmVhdGUoYmFzZU9wdGlvbnMpO1xyXG4gICAgICAgICAgICB2YXIgZXJyb3JzID0gW107XHJcbiAgICAgICAgICAgIHZhciB0aXBzID0gW107XHJcbiAgICAgICAgICAgIHZhciB3YXJuID0gZnVuY3Rpb24gKG1zZywgcmFuZ2UsIHRpcCkge1xyXG4gICAgICAgICAgICAgICAgKHRpcCA/IHRpcHMgOiBlcnJvcnMpLnB1c2gobXNnKTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgaWYgKG9wdGlvbnMpIHtcclxuICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIG9wdGlvbnMub3V0cHV0U291cmNlUmFuZ2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcclxuICAgICAgICAgICAgICAgICAgICB2YXIgbGVhZGluZ1NwYWNlTGVuZ3RoXzEgPSB0ZW1wbGF0ZS5tYXRjaCgvXlxccyovKVswXS5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgICAgd2FybiA9IGZ1bmN0aW9uIChtc2csIHJhbmdlLCB0aXApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGEgPSB0eXBlb2YgbXNnID09PSAnc3RyaW5nJyA/IHsgbXNnOiBtc2cgfSA6IG1zZztcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJhbmdlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmFuZ2Uuc3RhcnQgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuc3RhcnQgPSByYW5nZS5zdGFydCArIGxlYWRpbmdTcGFjZUxlbmd0aF8xO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJhbmdlLmVuZCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5lbmQgPSByYW5nZS5lbmQgKyBsZWFkaW5nU3BhY2VMZW5ndGhfMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAodGlwID8gdGlwcyA6IGVycm9ycykucHVzaChkYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gbWVyZ2UgY3VzdG9tIG1vZHVsZXNcclxuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLm1vZHVsZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICBmaW5hbE9wdGlvbnMubW9kdWxlcyA9IChiYXNlT3B0aW9ucy5tb2R1bGVzIHx8IFtdKS5jb25jYXQob3B0aW9ucy5tb2R1bGVzKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIG1lcmdlIGN1c3RvbSBkaXJlY3RpdmVzXHJcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5kaXJlY3RpdmVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZmluYWxPcHRpb25zLmRpcmVjdGl2ZXMgPSBleHRlbmQoT2JqZWN0LmNyZWF0ZShiYXNlT3B0aW9ucy5kaXJlY3RpdmVzIHx8IG51bGwpLCBvcHRpb25zLmRpcmVjdGl2ZXMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gY29weSBvdGhlciBvcHRpb25zXHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gb3B0aW9ucykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChrZXkgIT09ICdtb2R1bGVzJyAmJiBrZXkgIT09ICdkaXJlY3RpdmVzJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbE9wdGlvbnNba2V5XSA9IG9wdGlvbnNba2V5XTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZmluYWxPcHRpb25zLndhcm4gPSB3YXJuO1xyXG4gICAgICAgICAgICB2YXIgY29tcGlsZWQgPSBiYXNlQ29tcGlsZSh0ZW1wbGF0ZS50cmltKCksIGZpbmFsT3B0aW9ucyk7XHJcbiAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICBkZXRlY3RFcnJvcnMoY29tcGlsZWQuYXN0LCB3YXJuKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb21waWxlZC5lcnJvcnMgPSBlcnJvcnM7XHJcbiAgICAgICAgICAgIGNvbXBpbGVkLnRpcHMgPSB0aXBzO1xyXG4gICAgICAgICAgICByZXR1cm4gY29tcGlsZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGNvbXBpbGU6IGNvbXBpbGUsXHJcbiAgICAgICAgICAgIGNvbXBpbGVUb0Z1bmN0aW9uczogY3JlYXRlQ29tcGlsZVRvRnVuY3Rpb25Gbihjb21waWxlKVxyXG4gICAgICAgIH07XHJcbiAgICB9O1xyXG59XG5cbi8vIGBjcmVhdGVDb21waWxlckNyZWF0b3JgIGFsbG93cyBjcmVhdGluZyBjb21waWxlcnMgdGhhdCB1c2UgYWx0ZXJuYXRpdmVcclxuLy8gcGFyc2VyL29wdGltaXplci9jb2RlZ2VuLCBlLmcgdGhlIFNTUiBvcHRpbWl6aW5nIGNvbXBpbGVyLlxyXG4vLyBIZXJlIHdlIGp1c3QgZXhwb3J0IGEgZGVmYXVsdCBjb21waWxlciB1c2luZyB0aGUgZGVmYXVsdCBwYXJ0cy5cclxudmFyIGNyZWF0ZUNvbXBpbGVyID0gY3JlYXRlQ29tcGlsZXJDcmVhdG9yKGZ1bmN0aW9uIGJhc2VDb21waWxlKHRlbXBsYXRlLCBvcHRpb25zKSB7XHJcbiAgICB2YXIgYXN0ID0gcGFyc2UodGVtcGxhdGUudHJpbSgpLCBvcHRpb25zKTtcclxuICAgIGlmIChvcHRpb25zLm9wdGltaXplICE9PSBmYWxzZSkge1xyXG4gICAgICAgIG9wdGltaXplKGFzdCwgb3B0aW9ucyk7XHJcbiAgICB9XHJcbiAgICB2YXIgY29kZSA9IGdlbmVyYXRlKGFzdCwgb3B0aW9ucyk7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIGFzdDogYXN0LFxyXG4gICAgICAgIHJlbmRlcjogY29kZS5yZW5kZXIsXHJcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBjb2RlLnN0YXRpY1JlbmRlckZuc1xyXG4gICAgfTtcclxufSk7XG5cbnZhciBfYSA9IGNyZWF0ZUNvbXBpbGVyKGJhc2VPcHRpb25zKSwgY29tcGlsZVRvRnVuY3Rpb25zID0gX2EuY29tcGlsZVRvRnVuY3Rpb25zO1xuXG4vLyBjaGVjayB3aGV0aGVyIGN1cnJlbnQgYnJvd3NlciBlbmNvZGVzIGEgY2hhciBpbnNpZGUgYXR0cmlidXRlIHZhbHVlc1xyXG52YXIgZGl2O1xyXG5mdW5jdGlvbiBnZXRTaG91bGREZWNvZGUoaHJlZikge1xyXG4gICAgZGl2ID0gZGl2IHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgZGl2LmlubmVySFRNTCA9IGhyZWYgPyBcIjxhIGhyZWY9XFxcIlxcblxcXCIvPlwiIDogXCI8ZGl2IGE9XFxcIlxcblxcXCIvPlwiO1xyXG4gICAgcmV0dXJuIGRpdi5pbm5lckhUTUwuaW5kZXhPZignJiMxMDsnKSA+IDA7XHJcbn1cclxuLy8gIzM2NjM6IElFIGVuY29kZXMgbmV3bGluZXMgaW5zaWRlIGF0dHJpYnV0ZSB2YWx1ZXMgd2hpbGUgb3RoZXIgYnJvd3NlcnMgZG9uJ3RcclxudmFyIHNob3VsZERlY29kZU5ld2xpbmVzID0gaW5Ccm93c2VyID8gZ2V0U2hvdWxkRGVjb2RlKGZhbHNlKSA6IGZhbHNlO1xyXG4vLyAjNjgyODogY2hyb21lIGVuY29kZXMgY29udGVudCBpbiBhW2hyZWZdXHJcbnZhciBzaG91bGREZWNvZGVOZXdsaW5lc0ZvckhyZWYgPSBpbkJyb3dzZXJcclxuICAgID8gZ2V0U2hvdWxkRGVjb2RlKHRydWUpXHJcbiAgICA6IGZhbHNlO1xuXG52YXIgaWRUb1RlbXBsYXRlID0gY2FjaGVkKGZ1bmN0aW9uIChpZCkge1xyXG4gICAgdmFyIGVsID0gcXVlcnkoaWQpO1xyXG4gICAgcmV0dXJuIGVsICYmIGVsLmlubmVySFRNTDtcclxufSk7XHJcbnZhciBtb3VudCA9IFZ1ZS5wcm90b3R5cGUuJG1vdW50O1xyXG5WdWUucHJvdG90eXBlLiRtb3VudCA9IGZ1bmN0aW9uIChlbCwgaHlkcmF0aW5nKSB7XHJcbiAgICBlbCA9IGVsICYmIHF1ZXJ5KGVsKTtcclxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xyXG4gICAgaWYgKGVsID09PSBkb2N1bWVudC5ib2R5IHx8IGVsID09PSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpIHtcclxuICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXHJcbiAgICAgICAgICAgIHdhcm4kMihcIkRvIG5vdCBtb3VudCBWdWUgdG8gPGh0bWw+IG9yIDxib2R5PiAtIG1vdW50IHRvIG5vcm1hbCBlbGVtZW50cyBpbnN0ZWFkLlwiKTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIHZhciBvcHRpb25zID0gdGhpcy4kb3B0aW9ucztcclxuICAgIC8vIHJlc29sdmUgdGVtcGxhdGUvZWwgYW5kIGNvbnZlcnQgdG8gcmVuZGVyIGZ1bmN0aW9uXHJcbiAgICBpZiAoIW9wdGlvbnMucmVuZGVyKSB7XHJcbiAgICAgICAgdmFyIHRlbXBsYXRlID0gb3B0aW9ucy50ZW1wbGF0ZTtcclxuICAgICAgICBpZiAodGVtcGxhdGUpIHtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiB0ZW1wbGF0ZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0ZW1wbGF0ZS5jaGFyQXQoMCkgPT09ICcjJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlID0gaWRUb1RlbXBsYXRlKHRlbXBsYXRlKTtcclxuICAgICAgICAgICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cclxuICAgICAgICAgICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhdGVtcGxhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2FybiQyKFwiVGVtcGxhdGUgZWxlbWVudCBub3QgZm91bmQgb3IgaXMgZW1wdHk6IFwiLmNvbmNhdChvcHRpb25zLnRlbXBsYXRlKSwgdGhpcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRlbXBsYXRlLm5vZGVUeXBlKSB7XHJcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZSA9IHRlbXBsYXRlLmlubmVySFRNTDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgd2FybiQyKCdpbnZhbGlkIHRlbXBsYXRlIG9wdGlvbjonICsgdGVtcGxhdGUsIHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoZWwpIHtcclxuICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxyXG4gICAgICAgICAgICB0ZW1wbGF0ZSA9IGdldE91dGVySFRNTChlbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0ZW1wbGF0ZSkge1xyXG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cclxuICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgY29uZmlnLnBlcmZvcm1hbmNlICYmIG1hcmspIHtcclxuICAgICAgICAgICAgICAgIG1hcmsoJ2NvbXBpbGUnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgX2EgPSBjb21waWxlVG9GdW5jdGlvbnModGVtcGxhdGUsIHtcclxuICAgICAgICAgICAgICAgIG91dHB1dFNvdXJjZVJhbmdlOiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nLFxyXG4gICAgICAgICAgICAgICAgc2hvdWxkRGVjb2RlTmV3bGluZXM6IHNob3VsZERlY29kZU5ld2xpbmVzLFxyXG4gICAgICAgICAgICAgICAgc2hvdWxkRGVjb2RlTmV3bGluZXNGb3JIcmVmOiBzaG91bGREZWNvZGVOZXdsaW5lc0ZvckhyZWYsXHJcbiAgICAgICAgICAgICAgICBkZWxpbWl0ZXJzOiBvcHRpb25zLmRlbGltaXRlcnMsXHJcbiAgICAgICAgICAgICAgICBjb21tZW50czogb3B0aW9ucy5jb21tZW50c1xyXG4gICAgICAgICAgICB9LCB0aGlzKSwgcmVuZGVyID0gX2EucmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgPSBfYS5zdGF0aWNSZW5kZXJGbnM7XHJcbiAgICAgICAgICAgIG9wdGlvbnMucmVuZGVyID0gcmVuZGVyO1xyXG4gICAgICAgICAgICBvcHRpb25zLnN0YXRpY1JlbmRlckZucyA9IHN0YXRpY1JlbmRlckZucztcclxuICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXHJcbiAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGNvbmZpZy5wZXJmb3JtYW5jZSAmJiBtYXJrKSB7XHJcbiAgICAgICAgICAgICAgICBtYXJrKCdjb21waWxlIGVuZCcpO1xyXG4gICAgICAgICAgICAgICAgbWVhc3VyZShcInZ1ZSBcIi5jb25jYXQodGhpcy5fbmFtZSwgXCIgY29tcGlsZVwiKSwgJ2NvbXBpbGUnLCAnY29tcGlsZSBlbmQnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBtb3VudC5jYWxsKHRoaXMsIGVsLCBoeWRyYXRpbmcpO1xyXG59O1xyXG4vKipcclxuICogR2V0IG91dGVySFRNTCBvZiBlbGVtZW50cywgdGFraW5nIGNhcmVcclxuICogb2YgU1ZHIGVsZW1lbnRzIGluIElFIGFzIHdlbGwuXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRPdXRlckhUTUwoZWwpIHtcclxuICAgIGlmIChlbC5vdXRlckhUTUwpIHtcclxuICAgICAgICByZXR1cm4gZWwub3V0ZXJIVE1MO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdmFyIGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChlbC5jbG9uZU5vZGUodHJ1ZSkpO1xyXG4gICAgICAgIHJldHVybiBjb250YWluZXIuaW5uZXJIVE1MO1xyXG4gICAgfVxyXG59XHJcblZ1ZS5jb21waWxlID0gY29tcGlsZVRvRnVuY3Rpb25zO1xuXG5leHBvcnQgeyBFZmZlY3RTY29wZSwgY29tcHV0ZWQsIGN1c3RvbVJlZiwgVnVlIGFzIGRlZmF1bHQsIGRlZmluZUFzeW5jQ29tcG9uZW50LCBkZWZpbmVDb21wb25lbnQsIGRlbCwgZWZmZWN0U2NvcGUsIGdldEN1cnJlbnRJbnN0YW5jZSwgZ2V0Q3VycmVudFNjb3BlLCBoLCBpbmplY3QsIGlzUHJveHksIGlzUmVhY3RpdmUsIGlzUmVhZG9ubHksIGlzUmVmLCBpc1NoYWxsb3csIG1hcmtSYXcsIG1lcmdlRGVmYXVsdHMsIG5leHRUaWNrLCBvbkFjdGl2YXRlZCwgb25CZWZvcmVNb3VudCwgb25CZWZvcmVVbm1vdW50LCBvbkJlZm9yZVVwZGF0ZSwgb25EZWFjdGl2YXRlZCwgb25FcnJvckNhcHR1cmVkLCBvbk1vdW50ZWQsIG9uUmVuZGVyVHJhY2tlZCwgb25SZW5kZXJUcmlnZ2VyZWQsIG9uU2NvcGVEaXNwb3NlLCBvblNlcnZlclByZWZldGNoLCBvblVubW91bnRlZCwgb25VcGRhdGVkLCBwcm92aWRlLCBwcm94eVJlZnMsIHJlYWN0aXZlLCByZWFkb25seSwgcmVmJDEgYXMgcmVmLCBzZXQsIHNoYWxsb3dSZWFjdGl2ZSwgc2hhbGxvd1JlYWRvbmx5LCBzaGFsbG93UmVmLCB0b1JhdywgdG9SZWYsIHRvUmVmcywgdHJpZ2dlclJlZiwgdW5yZWYsIHVzZUF0dHJzLCB1c2VDc3NNb2R1bGUsIHVzZUNzc1ZhcnMsIHVzZUxpc3RlbmVycywgdXNlU2xvdHMsIHZlcnNpb24sIHdhdGNoLCB3YXRjaEVmZmVjdCwgd2F0Y2hQb3N0RWZmZWN0LCB3YXRjaFN5bmNFZmZlY3QgfTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/vue/dist/vue.esm.js\n");
/***/ })
/******/ });
/************************************************************************/
/******/ // The module cache
/******/ var __webpack_module_cache__ = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/ // Check if module is in cache
/******/ var cachedModule = __webpack_module_cache__[moduleId];
/******/ if (cachedModule !== undefined) {
/******/ return cachedModule.exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = __webpack_module_cache__[moduleId] = {
/******/ id: moduleId,
/******/ // no module.loaded needed
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/******/ // expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = __webpack_modules__;
/******/
/************************************************************************/
/******/ /* webpack/runtime/chunk loaded */
/******/ (() => {
/******/ var deferred = [];
/******/ __webpack_require__.O = (result, chunkIds, fn, priority) => {
/******/ if(chunkIds) {
/******/ priority = priority || 0;
/******/ for(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];
/******/ deferred[i] = [chunkIds, fn, priority];
/******/ return;
/******/ }
/******/ var notFulfilled = Infinity;
/******/ for (var i = 0; i < deferred.length; i++) {
/******/ var [chunkIds, fn, priority] = deferred[i];
/******/ var fulfilled = true;
/******/ for (var j = 0; j < chunkIds.length; j++) {
/******/ if ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {
/******/ chunkIds.splice(j--, 1);
/******/ } else {
/******/ fulfilled = false;
/******/ if(priority < notFulfilled) notFulfilled = priority;
/******/ }
/******/ }
/******/ if(fulfilled) {
/******/ deferred.splice(i--, 1)
/******/ var r = fn();
/******/ if (r !== undefined) result = r;
/******/ }
/******/ }
/******/ return result;
/******/ };
/******/ })();
/******/
/******/ /* webpack/runtime/compat get default export */
/******/ (() => {
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = (module) => {
/******/ var getter = module && module.__esModule ?
/******/ () => (module['default']) :
/******/ () => (module);
/******/ __webpack_require__.d(getter, { a: getter });
/******/ return getter;
/******/ };
/******/ })();
/******/
/******/ /* webpack/runtime/define property getters */
/******/ (() => {
/******/ // define getter functions for harmony exports
/******/ __webpack_require__.d = (exports, definition) => {
/******/ for(var key in definition) {
/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
/******/ }
/******/ }
/******/ };
/******/ })();
/******/
/******/ /* webpack/runtime/global */
/******/ (() => {
/******/ __webpack_require__.g = (function() {
/******/ if (typeof globalThis === 'object') return globalThis;
/******/ try {
/******/ return this || new Function('return this')();
/******/ } catch (e) {
/******/ if (typeof window === 'object') return window;
/******/ }
/******/ })();
/******/ })();
/******/
/******/ /* webpack/runtime/hasOwnProperty shorthand */
/******/ (() => {
/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
/******/ })();
/******/
/******/ /* webpack/runtime/make namespace object */
/******/ (() => {
/******/ // define __esModule on exports
/******/ __webpack_require__.r = (exports) => {
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ }
/******/ Object.defineProperty(exports, '__esModule', { value: true });
/******/ };
/******/ })();
/******/
/******/ /* webpack/runtime/jsonp chunk loading */
/******/ (() => {
/******/ // no baseURI
/******/
/******/ // object to store loaded and loading chunks
/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched
/******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded
/******/ var installedChunks = {
/******/ "/js/app": 0,
/******/ "css/theme": 0,
/******/ "css/app": 0
/******/ };
/******/
/******/ // no chunk on demand loading
/******/
/******/ // no prefetching
/******/
/******/ // no preloaded
/******/
/******/ // no HMR
/******/
/******/ // no HMR manifest
/******/
/******/ __webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);
/******/
/******/ // install a JSONP callback for chunk loading
/******/ var webpackJsonpCallback = (parentChunkLoadingFunction, data) => {
/******/ var [chunkIds, moreModules, runtime] = data;
/******/ // add "moreModules" to the modules object,
/******/ // then flag all "chunkIds" as loaded and fire callback
/******/ var moduleId, chunkId, i = 0;
/******/ if(chunkIds.some((id) => (installedChunks[id] !== 0))) {
/******/ for(moduleId in moreModules) {
/******/ if(__webpack_require__.o(moreModules, moduleId)) {
/******/ __webpack_require__.m[moduleId] = moreModules[moduleId];
/******/ }
/******/ }
/******/ if(runtime) var result = runtime(__webpack_require__);
/******/ }
/******/ if(parentChunkLoadingFunction) parentChunkLoadingFunction(data);
/******/ for(;i < chunkIds.length; i++) {
/******/ chunkId = chunkIds[i];
/******/ if(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {
/******/ installedChunks[chunkId][0]();
/******/ }
/******/ installedChunks[chunkId] = 0;
/******/ }
/******/ return __webpack_require__.O(result);
/******/ }
/******/
/******/ var chunkLoadingGlobal = self["webpackChunk"] = self["webpackChunk"] || [];
/******/ chunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));
/******/ chunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));
/******/ })();
/******/
/******/ /* webpack/runtime/nonce */
/******/ (() => {
/******/ __webpack_require__.nc = undefined;
/******/ })();
/******/
/************************************************************************/
/******/
/******/ // startup
/******/ // Load entry module and return exports
/******/ // This entry module depends on other loaded chunks and execution need to be delayed
/******/ __webpack_require__.O(undefined, ["css/theme","css/app"], () => (__webpack_require__("./resources/js/app.js")))
/******/ __webpack_require__.O(undefined, ["css/theme","css/app"], () => (__webpack_require__("./resources/sass/app.scss")))
/******/ var __webpack_exports__ = __webpack_require__.O(undefined, ["css/theme","css/app"], () => (__webpack_require__("./resources/theme/theme.scss")))
/******/ __webpack_exports__ = __webpack_require__.O(__webpack_exports__);
/******/
/******/ })()
;