element-ui-wbi 1.0.3 → 1.0.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -19,11 +19,11 @@
19
19
  return /******/ (function() { // webpackBootstrap
20
20
  /******/ var __webpack_modules__ = ({
21
21
 
22
- /***/ 9600:
22
+ /***/ 964:
23
23
  /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
24
24
 
25
25
  "use strict";
26
- eval("// ESM COMPAT FLAG\n__webpack_require__.r(__webpack_exports__);\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n Http: function() { return /* reexport */ Http; },\n \"default\": function() { return /* binding */ entry_lib; }\n});\n\n// NAMESPACE OBJECT: ./node_modules/axios/lib/platform/common/utils.js\nvar common_utils_namespaceObject = {};\n__webpack_require__.r(common_utils_namespaceObject);\n__webpack_require__.d(common_utils_namespaceObject, {\n hasBrowserEnv: function() { return hasBrowserEnv; },\n hasStandardBrowserEnv: function() { return hasStandardBrowserEnv; },\n hasStandardBrowserWebWorkerEnv: function() { return hasStandardBrowserWebWorkerEnv; }\n});\n\n;// CONCATENATED MODULE: ./node_modules/@vue/cli-service/lib/commands/build/setPublicPath.js\n/* eslint-disable no-var */\n// This file is imported into lib/wc client bundles.\n\nif (typeof window !== 'undefined') {\n var currentScript = window.document.currentScript\n if (false) { var getCurrentScript; }\n\n var src = currentScript && currentScript.src.match(/(.+\\/)[^/]+\\.js(\\?.*)?$/)\n if (src) {\n __webpack_require__.p = src[1] // eslint-disable-line\n }\n}\n\n// Indicate to webpack that this file can be concatenated\n/* harmony default export */ var setPublicPath = (null);\n\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-82.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/pagination/Index.vue?vue&type=template&id=26b70fb4&scoped=true\nvar render = function render() {\n var _vm = this,\n _c = _vm._self._c;\n return _vm.total > 0 ? _c('div', [_c('el-pagination', _vm._b({\n attrs: {\n \"background\": \"\",\n \"current-page\": _vm.currentPage,\n \"page-size\": _vm.pageSize,\n \"page-sizes\": _vm.pageSizes,\n \"total\": _vm.total,\n \"layout\": \"prev, pager, next\"\n },\n on: {\n \"size-change\": _vm.handleSizeChange,\n \"current-change\": _vm.handleCurrentChange\n }\n }, 'el-pagination', _vm.$attrs, false))], 1) : _vm._e();\n};\nvar staticRenderFns = [];\n\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-82.use[1]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/pagination/Index.vue?vue&type=script&lang=js\n/* harmony default export */ var Indexvue_type_script_lang_js = ({\n name: 'Pagination',\n props: {\n total: {\n required: true,\n type: Number,\n default: 0\n },\n page: {\n type: Number,\n default: 1\n },\n limit: {\n type: Number,\n default: 20\n },\n pageSizes: {\n type: Array,\n default() {\n return [10, 15, 20, 30, 50];\n }\n }\n },\n computed: {\n currentPage: {\n get() {\n return this.page;\n },\n set(val) {\n this.$emit('update:page', val);\n }\n },\n pageSize: {\n get() {\n return this.limit;\n },\n set(val) {\n this.$emit('update:limit', val);\n }\n },\n totalCount: {\n get() {\n return this.total;\n },\n set(val) {\n this.$emit('update:total', val);\n }\n }\n },\n methods: {\n handleSizeChange(val) {\n this.$emit('pagination', {\n page: this.currentPage,\n limit: val\n });\n },\n handleCurrentChange(val) {\n this.$emit('pagination', {\n page: val,\n limit: this.pageSize\n });\n }\n }\n});\n;// CONCATENATED MODULE: ./src/components/pagination/Index.vue?vue&type=script&lang=js\n /* harmony default export */ var pagination_Indexvue_type_script_lang_js = (Indexvue_type_script_lang_js); \n;// CONCATENATED MODULE: ./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-64.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-64.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-64.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-64.use[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/pagination/Index.vue?vue&type=style&index=0&id=26b70fb4&prod&lang=scss&scoped=true\n// extracted by mini-css-extract-plugin\n\n;// CONCATENATED MODULE: ./src/components/pagination/Index.vue?vue&type=style&index=0&id=26b70fb4&prod&lang=scss&scoped=true\n\n;// CONCATENATED MODULE: ./node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\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 =\n typeof scriptExports === 'function' ? scriptExports.options : 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) {\n // 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 ? [].concat(existing, hook) : [hook]\n }\n }\n\n return {\n exports: scriptExports,\n options: options\n }\n}\n\n;// CONCATENATED MODULE: ./src/components/pagination/Index.vue\n\n\n\n;\n\n\n/* normalize component */\n\nvar component = normalizeComponent(\n pagination_Indexvue_type_script_lang_js,\n render,\n staticRenderFns,\n false,\n null,\n \"26b70fb4\",\n null\n \n)\n\n/* harmony default export */ var Index = (component.exports);\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-82.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/page-table/Index.vue?vue&type=template&id=2da92c81&scoped=true\nvar Indexvue_type_template_id_2da92c81_scoped_true_render = function render() {\n var _vm = this,\n _c = _vm._self._c;\n return _c('div', {\n staticClass: \"page-table\",\n attrs: {\n \"id\": this.tableId\n }\n }, [_c('div', {\n staticClass: \"table\"\n }, [_c('el-scrollbar', {\n staticStyle: {\n \"height\": \"100%\"\n }\n }, [_c('el-table', _vm._b({\n ref: _vm.tableId,\n attrs: {\n \"stripe\": \"\",\n \"data\": _vm.list,\n \"row-key\": _vm.rowKey,\n \"load\": _vm.load,\n \"highlight-current-row\": _vm.hlightCurrentRow,\n \"default-expand-all\": _vm.defaultExpandAll\n },\n on: {\n \"select\": _vm.handelSelectionChange,\n \"select-all\": _vm.selectAll,\n \"row-click\": _vm.handleRowClick,\n \"expand-change\": val => _vm.$emit('expand-change', val)\n }\n }, 'el-table', _vm.$attrs, false), [_vm.showCheckBox ? _c('el-table-column', {\n attrs: {\n \"type\": \"selection\",\n \"width\": \"60px\",\n \"align\": \"center\"\n }\n }) : _vm._e(), _vm.sortNum ? _c('el-table-column', {\n attrs: {\n \"type\": \"index\",\n \"width\": \"60px\",\n \"label\": \"序号\",\n \"align\": \"center\"\n },\n scopedSlots: _vm._u([{\n key: \"default\",\n fn: function (scope) {\n return [_vm.page ? _c('span', [_vm._v(_vm._s((_vm.params.page - 1) * _vm.params.limit + scope.$index + 1))]) : _c('span', [_vm._v(_vm._s(scope.$index + 1))])];\n }\n }], null, false, 2786008021)\n }) : _vm._e(), _vm._t(\"default\")], 2)], 1)], 1), _vm.page ? _c('Pagination', {\n attrs: {\n \"total\": _vm.total,\n \"page\": _vm.params.page,\n \"limit\": _vm.params.limit\n },\n on: {\n \"update:page\": function ($event) {\n return _vm.$set(_vm.params, \"page\", $event);\n },\n \"pagination\": _vm.getList\n }\n }) : _vm._e()], 1);\n};\nvar Indexvue_type_template_id_2da92c81_scoped_true_staticRenderFns = [];\n\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-82.use[1]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/page-table/Index.vue?vue&type=script&lang=js\n/* harmony default export */ var page_table_Indexvue_type_script_lang_js = ({\n name: 'PageTable',\n props: {\n // 自定义数据\n data: {\n type: Array,\n default: null\n },\n // 请求地址\n url: {\n type: String,\n default: ''\n },\n // 请求方式\n method: {\n type: String,\n default: 'get'\n },\n // 是否显示序号\n sortNum: {\n type: Boolean,\n default: true\n },\n // 是否分页\n page: {\n type: Boolean,\n default: true\n },\n // 树形表格时,是否全部展开\n defaultExpandAll: {\n type: Boolean,\n default: false\n },\n // 初始请求参数\n defaultParams: {\n type: Object,\n default: () => ({})\n },\n // 默认选中数据\n defaultSelect: {\n type: Array,\n default: () => []\n },\n rowKey: {\n type: String,\n default: 'id'\n },\n hlightCurrentRow: {\n ype: Boolean,\n default: false\n }\n },\n watch: {\n data(newVal) {\n this.list = newVal;\n },\n defaultSelect: {\n handler() {\n this.setChecked();\n },\n deep: true\n },\n defaultParams(newVal, oldVal) {\n for (const key in newVal) {\n if (newVal[key] != oldVal[key]) {\n this.params = {\n page: 1,\n limit: 15,\n param: {\n ...newVal\n }\n };\n this.getList();\n break;\n }\n }\n }\n },\n data() {\n return {\n showCheckBox: false,\n params: {\n page: 1,\n limit: 15,\n param: {\n ...this.defaultParams\n }\n },\n total: 0,\n list: [],\n tableId: `table_${Math.random().toString(36).substring(2, 16)}`,\n selectData: {},\n selectIds: []\n };\n },\n mounted() {\n if (this.$listeners['selection-change']) {\n this.showCheckBox = true;\n }\n if (this.data) {\n this.list = this.data;\n return;\n }\n for (const item of this.defaultSelect) {\n this.selectData[item[this.rowKey]] = item;\n }\n this.getList();\n },\n methods: {\n // 获取数据\n getList(pageOption) {\n if (!this.url) {\n return;\n }\n if (pageOption) {\n this.params.page = pageOption.page;\n this.params.limit = pageOption.limit;\n }\n if (!this.page) {\n delete this.params.page;\n delete this.params.limit;\n }\n const storageParams = sessionStorage.getItem(this.$route.path);\n if (storageParams) {\n sessionStorage.setItem(this.$route.path, JSON.stringify(this.params));\n }\n switch (this.method) {\n case 'get':\n http.get(this.url, this.params, res => {\n this._setData(res);\n });\n break;\n case 'post':\n http.post(this.url, this.params, res => {\n this._setData(res);\n });\n break;\n default:\n break;\n }\n },\n _setData(res) {\n if (this.page) {\n this.list = res.data.records;\n this.total = res.data.total;\n } else {\n this.list = res.data;\n }\n this.setChecked();\n },\n // 设置默认选中\n setChecked() {\n if (this.defaultSelect.length > 0) {\n this.selectIds = this.defaultSelect.map(item => item[this.rowKey]);\n if (this.showCheckBox && this.list) {\n this.$nextTick(() => {\n // 默认选中数据\n if (this.$refs[this.tableId]) {\n for (const item of this.list) {\n if (this.selectIds.includes(item[this.rowKey])) {\n this.$refs[this.tableId].toggleRowSelection(item, true);\n this.selectData[item[this.rowKey]] = item;\n } else {\n this.$refs[this.tableId].toggleRowSelection(item, false);\n delete this.selectData[item[this.rowKey]];\n }\n }\n }\n });\n }\n } else {\n this.selectIds = [];\n this.selectData = {};\n if (this.$refs[this.tableId]) {\n for (const item of this.list) {\n this.$refs[this.tableId].toggleRowSelection(item, false);\n }\n }\n }\n },\n // 条件查询\n query(params = {}) {\n if (Object.keys(params).length > 0) {\n const param = {\n ...this.params.param,\n ...params\n };\n this.params = {\n ...this.params,\n param\n };\n this.params.page = 1;\n }\n this.getList();\n },\n // 点击行\n handleRowClick(row, column, event) {\n this.$emit('row-click', row, column, event);\n },\n handelSelectionChange(_, row) {\n if (this.selectData[row[this.rowKey]]) {\n delete this.selectData[row[this.rowKey]];\n } else {\n this.selectData[row[this.rowKey]] = row;\n }\n const selectionList = Object.values(this.selectData);\n this.selectIds = selectionList.map(item => item[this.rowKey]);\n this.$emit('selection-change', selectionList);\n },\n // 全选/全不选\n selectAll(selection) {\n if (selection.length > 0) {\n for (const item of selection) {\n this.selectData[item[this.rowKey]] = item;\n }\n } else {\n for (const item of this.list) {\n delete this.selectData[item[this.rowKey]];\n }\n }\n const selectionList = Object.values(this.selectData);\n this.selectIds = selectionList.map(item => item[this.rowKey]);\n this.$emit('selection-change', selectionList);\n },\n setCurrent(index) {\n this.$refs[this.tableId].setCurrentRow(this.list[index]);\n },\n getData() {\n return this.list;\n },\n load(tree, treeNode, resolve) {\n this.$emit('load', tree, treeNode, resolve);\n }\n }\n});\n;// CONCATENATED MODULE: ./src/components/page-table/Index.vue?vue&type=script&lang=js\n /* harmony default export */ var components_page_table_Indexvue_type_script_lang_js = (page_table_Indexvue_type_script_lang_js); \n;// CONCATENATED MODULE: ./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-64.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-64.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-64.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-64.use[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/page-table/Index.vue?vue&type=style&index=0&id=2da92c81&prod&lang=scss&scoped=true\n// extracted by mini-css-extract-plugin\n\n;// CONCATENATED MODULE: ./src/components/page-table/Index.vue?vue&type=style&index=0&id=2da92c81&prod&lang=scss&scoped=true\n\n;// CONCATENATED MODULE: ./src/components/page-table/Index.vue\n\n\n\n;\n\n\n/* normalize component */\n\nvar Index_component = normalizeComponent(\n components_page_table_Indexvue_type_script_lang_js,\n Indexvue_type_template_id_2da92c81_scoped_true_render,\n Indexvue_type_template_id_2da92c81_scoped_true_staticRenderFns,\n false,\n null,\n \"2da92c81\",\n null\n \n)\n\n/* harmony default export */ var page_table_Index = (Index_component.exports);\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-82.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/dialog/Index.vue?vue&type=template&id=4148762e&scoped=true\nvar Indexvue_type_template_id_4148762e_scoped_true_render = function render() {\n var _vm = this,\n _c = _vm._self._c;\n return _c('el-dialog', _vm._b({\n directives: [{\n name: \"dialogDrag\",\n rawName: \"v-dialogDrag\"\n }],\n staticStyle: {\n \"margin-top\": \"0\"\n },\n attrs: {\n \"title\": _vm.title,\n \"visible\": _vm.dialogVisible,\n \"before-close\": _vm.handleClose,\n \"center\": \"\",\n \"close-on-click-modal\": false,\n \"show-close\": _vm.showClose,\n \"append-to-body\": \"\"\n }\n }, 'el-dialog', _vm.$attrs, false), [_c('div', {\n staticStyle: {\n \"overflow-y\": \"auto\",\n \"overflow-x\": \"hidden\",\n \"position\": \"relative\"\n },\n style: {\n maxHeight: _vm.maxHeight,\n minHeight: _vm.minHeight\n }\n }, [_vm._t(\"default\")], 2), _c('div', {\n staticStyle: {\n \"text-align\": \"center\"\n },\n attrs: {\n \"slot\": \"footer\"\n },\n slot: \"footer\"\n }, [_vm._t(\"footer\")], 2)]);\n};\nvar Indexvue_type_template_id_4148762e_scoped_true_staticRenderFns = [];\n\n// EXTERNAL MODULE: external {\"commonjs\":\"vue\",\"commonjs2\":\"vue\",\"root\":\"Vue\"}\nvar external_commonjs_vue_commonjs2_vue_root_Vue_ = __webpack_require__(9274);\nvar external_commonjs_vue_commonjs2_vue_root_Vue_default = /*#__PURE__*/__webpack_require__.n(external_commonjs_vue_commonjs2_vue_root_Vue_);\n;// CONCATENATED MODULE: ./src/components/dialog/dialog-drag.js\n// v-dialogDrag: 弹窗拖拽\n\nexternal_commonjs_vue_commonjs2_vue_root_Vue_default().directive('dialogDrag', {\n bind(el) {\n const dialogHeaderEl = el.querySelector('.el-dialog__header');\n const dragDom = el.querySelector('.el-dialog');\n dialogHeaderEl.style.cursor = 'move';\n\n // 获取原有属性 ie dom元素.currentStyle 火狐谷歌 window.getComputedStyle(dom元素, null);\n const sty = dragDom.currentStyle || window.getComputedStyle(dragDom, null);\n dialogHeaderEl.onmousedown = event => {\n // 鼠标按下,计算当前元素距离可视区的距离\n const disX = event.clientX - dialogHeaderEl.offsetLeft;\n const disY = event.clientY - dialogHeaderEl.offsetTop;\n\n // 获取到的值带px 正则匹配替换\n let styL = null;\n let styT = null;\n\n // 注意在ie中 第一次获取到的值为组件自带50% 移动之后赋值为px\n if (sty.left.includes('\\%')) {\n styL = +document.body.clientWidth * (+sty.left.replace(/\\%/g, '') / 100);\n styT = +document.body.clientHeight * (+sty.top.replace(/\\%/g, '') / 100);\n } else {\n styL = +sty.left.replace(/\\px/g, '');\n styT = +sty.top.replace(/\\px/g, '');\n }\n document.onmousemove = function (e) {\n // 通过事件委托,计算移动的距离\n const l = e.clientX - disX;\n const t = e.clientY - disY;\n\n // 移动当前元素\n dragDom.style.left = `${l + styL}px`;\n dragDom.style.top = `${t + styT}px`;\n };\n document.onmouseup = function () {\n document.onmousemove = null;\n document.onmouseup = null;\n };\n };\n }\n});\nexternal_commonjs_vue_commonjs2_vue_root_Vue_default().directive('removeAriaHidden', {\n bind(el) {\n let ariaEls = el.querySelectorAll('.el-radio__original');\n ariaEls.forEach(item => {\n item.removeAttribute('aria-hidden');\n });\n }\n});\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-82.use[1]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/dialog/Index.vue?vue&type=script&lang=js\n\n/* harmony default export */ var dialog_Indexvue_type_script_lang_js = ({\n name: 'Dialog',\n props: {\n title: {\n type: String,\n default: '提示'\n },\n maxHeight: {\n type: String,\n default: '60vh'\n },\n minHeight: {\n type: String,\n default: '150px'\n }\n },\n data() {\n return {\n dialogVisible: true,\n showClose: false\n };\n },\n mounted() {\n if (this.$listeners['close']) {\n this.showClose = true;\n }\n },\n methods: {\n handleClose() {\n this.$emit('close');\n }\n }\n});\n;// CONCATENATED MODULE: ./src/components/dialog/Index.vue?vue&type=script&lang=js\n /* harmony default export */ var components_dialog_Indexvue_type_script_lang_js = (dialog_Indexvue_type_script_lang_js); \n;// CONCATENATED MODULE: ./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-64.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-64.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-64.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-64.use[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/dialog/Index.vue?vue&type=style&index=0&id=4148762e&prod&lang=scss&scoped=true\n// extracted by mini-css-extract-plugin\n\n;// CONCATENATED MODULE: ./src/components/dialog/Index.vue?vue&type=style&index=0&id=4148762e&prod&lang=scss&scoped=true\n\n;// CONCATENATED MODULE: ./src/components/dialog/Index.vue\n\n\n\n;\n\n\n/* normalize component */\n\nvar dialog_Index_component = normalizeComponent(\n components_dialog_Indexvue_type_script_lang_js,\n Indexvue_type_template_id_4148762e_scoped_true_render,\n Indexvue_type_template_id_4148762e_scoped_true_staticRenderFns,\n false,\n null,\n \"4148762e\",\n null\n \n)\n\n/* harmony default export */ var dialog_Index = (dialog_Index_component.exports);\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-82.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/card/Index.vue?vue&type=template&id=0c5de06e&scoped=true\nvar Indexvue_type_template_id_0c5de06e_scoped_true_render = function render() {\n var _vm = this,\n _c = _vm._self._c;\n return _c('el-card', {\n staticStyle: {\n \"height\": \"calc(100% - 2px)\",\n \"overflow\": \"auto\"\n },\n attrs: {\n \"shadow\": _vm.shadow\n }\n }, [_c('div', {\n staticClass: \"clearfix\",\n attrs: {\n \"slot\": \"header\"\n },\n slot: \"header\"\n }, [_c('div', {\n staticStyle: {\n \"font-size\": \"16px\"\n }\n }, [_vm.$slots['card-title'] ? [_vm._t(\"card-title\")] : [_vm._v(\" \" + _vm._s(_vm.title) + \" \")]], 2), _c('div', {\n staticStyle: {\n \"flex\": \"1\",\n \"position\": \"relative\"\n }\n }, [_c('div', {\n staticStyle: {\n \"position\": \"absolute\",\n \"right\": \"0px\",\n \"top\": \"-14px\",\n \"width\": \"100%\",\n \"text-align\": \"right\"\n }\n }, [_vm._t(\"card-tools\")], 2)])]), _vm._t(\"default\")], 2);\n};\nvar Indexvue_type_template_id_0c5de06e_scoped_true_staticRenderFns = [];\n\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-82.use[1]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/card/Index.vue?vue&type=script&lang=js\n/* harmony default export */ var card_Indexvue_type_script_lang_js = ({\n name: 'Card',\n props: {\n title: {\n type: String,\n default: ''\n },\n shadow: {\n type: String,\n default: ''\n }\n }\n});\n;// CONCATENATED MODULE: ./src/components/card/Index.vue?vue&type=script&lang=js\n /* harmony default export */ var components_card_Indexvue_type_script_lang_js = (card_Indexvue_type_script_lang_js); \n;// CONCATENATED MODULE: ./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-64.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-64.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-64.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-64.use[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/card/Index.vue?vue&type=style&index=0&id=0c5de06e&prod&lang=scss&scoped=true\n// extracted by mini-css-extract-plugin\n\n;// CONCATENATED MODULE: ./src/components/card/Index.vue?vue&type=style&index=0&id=0c5de06e&prod&lang=scss&scoped=true\n\n;// CONCATENATED MODULE: ./src/components/card/Index.vue\n\n\n\n;\n\n\n/* normalize component */\n\nvar card_Index_component = normalizeComponent(\n components_card_Indexvue_type_script_lang_js,\n Indexvue_type_template_id_0c5de06e_scoped_true_render,\n Indexvue_type_template_id_0c5de06e_scoped_true_staticRenderFns,\n false,\n null,\n \"0c5de06e\",\n null\n \n)\n\n/* harmony default export */ var card_Index = (card_Index_component.exports);\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-82.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/tree/Index.vue?vue&type=template&id=5e81e05e&scoped=true\nvar Indexvue_type_template_id_5e81e05e_scoped_true_render = function render() {\n var _vm = this,\n _c = _vm._self._c;\n return _vm.show ? _c('div', [_vm.data.length > 0 ? _vm._l(_vm.data, function (item) {\n return _c('auth-tree', {\n key: item.id,\n attrs: {\n \"data\": item,\n \"props\": _vm.props\n },\n on: {\n \"on-node-expand\": data => _vm.onExpand(data),\n \"on-node-checked\": data => _vm.onChecked(data)\n }\n });\n }) : _vm._e()], 2) : _vm._e();\n};\nvar Indexvue_type_template_id_5e81e05e_scoped_true_staticRenderFns = [];\n\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.array.push.js\nvar es_array_push = __webpack_require__(4114);\n;// CONCATENATED MODULE: ./src/components/tree/tree.js\n\n// 是否有子节点\nconst hasChildren = data => {\n return Array.isArray(data.children) && data.children.length > 0;\n};\n\n// 创建节点\nconst renderLabel = (h, data, context) => {\n const {\n props,\n listeners\n } = context;\n const clickHandler = listeners['on-node-expand'];\n const checkedHandler = listeners['on-node-checked'];\n const label = data[props.props.label];\n const childNodes = [];\n childNodes.push(label);\n const icoClass = [];\n if (hasChildren(data)) {\n if (data.expand) {\n icoClass.push('icon-icon-dwon');\n } else {\n icoClass.push('icon-icon_right');\n }\n }\n return h('li', {}, [h('i', {\n domProps: {\n className: `iconfont ${icoClass.join(' ')}`\n },\n style: {\n marginLeft: `${14 * data._leve}px`,\n fontSize: '12px',\n transform: 'translateY(-2px)',\n color: '#666'\n },\n on: {\n click: () => {\n clickHandler(data);\n }\n }\n }, ''), h('i', {\n domProps: {\n className: data.checked ? 'iconfont icon-fangxingxuanzhongfil' : 'iconfont icon-fangxingweixuanzhong'\n },\n style: {\n color: '#666'\n },\n on: {\n click: () => {\n checkedHandler(data);\n }\n }\n }, ''), h('span', {}, childNodes)]);\n};\n\n// 创建 node 子节点\nconst renderChildren = (h, list, expand, context) => {\n if (Array.isArray(list) && list.length) {\n const children = list.map(item => {\n return renderNode(h, item, context);\n });\n let cls = ['tree-node-children'];\n if (!expand) {\n cls.push('expand');\n }\n return h('div', {\n domProps: {\n className: cls.join(' ')\n }\n }, children);\n }\n return '';\n};\nconst renderNode = (h, data, context) => {\n const childNodes = [];\n childNodes.push(renderLabel(h, data, context));\n const children = data.children;\n if (hasChildren(data)) {\n childNodes.push(renderChildren(h, children, data.expand, context));\n }\n return h('ul', {\n domProps: {\n className: 'node'\n }\n }, childNodes);\n};\nconst tree_render = (h, context) => {\n const {\n props\n } = context;\n return renderNode(h, props.data, context);\n};\n/* harmony default export */ var tree = (tree_render);\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-82.use[1]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/tree/Index.vue?vue&type=script&lang=js\n\n\n/* harmony default export */ var tree_Indexvue_type_script_lang_js = ({\n name: 'Tree',\n components: {\n AuthTree: {\n render: tree,\n functional: true\n }\n },\n props: {\n data: {\n type: Array,\n default: () => {\n return [];\n }\n },\n props: {\n type: Object,\n default: () => {\n return {\n label: 'name'\n };\n }\n }\n },\n data() {\n return {\n name: 1,\n show: false,\n list: [],\n checked: false\n };\n },\n methods: {\n init(data, leve) {\n data._leve = leve;\n if (data.children && data.children.length > 0) {\n leve++;\n for (const i in data.children) {\n this.init(data.children[i], leve);\n }\n }\n },\n // 刷新\n refresh() {\n this.show = false;\n this.$nextTick(() => {\n this.show = true;\n });\n },\n // 展开/隐藏\n onExpand(data) {\n data.expand = !data.expand;\n this.refresh();\n },\n // 选中/取消选中\n onChecked(data) {\n data.checked = !data.checked;\n this.toolerChecked(this.data, data);\n this.setParentChecked(this.data);\n this.refresh();\n },\n toolerChecked(list, node) {\n for (const i in list) {\n if (list[i].id === node.id) {\n this.setChildChecked(list[i].children, list[i].checked);\n } else {\n this.toolerChecked(list[i].children, node);\n }\n }\n },\n // 选中节点时,设置子节点全选\n setChildChecked(children, checked) {\n for (const i in children) {\n children[i].checked = checked;\n this.setChildChecked(children[i].children, checked);\n }\n },\n // 设置父节点选中\n setParentChecked(data) {\n for (const i in data) {\n this.checked = false;\n if (data[i].children && data[i].children.length > 0) {\n this.childIsChecked(data[i].children);\n if (this.checked) {\n data[i].checked = this.checked;\n }\n this.setParentChecked(data[i].children);\n }\n }\n this.refresh();\n },\n // 判断节点的子节点是否有选中\n childIsChecked(children) {\n for (const i in children) {\n if (children[i].checked) {\n this.checked = true;\n } else {\n this.childIsChecked(children[i].children);\n }\n }\n },\n // 设置默认选中\n setDefaultChecked(defaultIds) {\n for (const i in defaultIds) {\n this.setChecked(this.data, defaultIds[i]);\n }\n this.setParentChecked(this.data);\n },\n // 根据所给的id,设置改项选中\n setChecked(data, id) {\n for (const i in data) {\n if (data[i].id === id) {\n data[i].checked = true;\n break;\n } else {\n if (data[i].children && data[i].children.length > 0) {\n this.setChecked(data[i].children, id);\n }\n }\n }\n },\n // 获取选中选的key\n getCheckedKeys() {\n const keys = [];\n this._getCheckedKeys(this.data, keys);\n return keys;\n },\n // 遍历出选中选的key\n _getCheckedKeys(data, keys) {\n for (const i in data) {\n if (data[i].checked) {\n keys.push(data[i].id);\n }\n if (data[i].children && data[i].children.length > 0) {\n this._getCheckedKeys(data[i].children, keys);\n }\n }\n },\n // 获取选中选的节点\n getCheckedNodes() {\n const nodes = [];\n this._getCheckedNodes(this.data, nodes);\n return nodes;\n },\n // 遍历出选中选的节点\n _getCheckedNodes(data, nodes) {\n for (const i in data) {\n if (data[i].checked) {\n nodes.push(data[i]);\n }\n if (data[i].children && data[i].children.length > 0) {\n this._getCheckedNodes(data[i].children, nodes);\n }\n }\n }\n },\n watch: {\n data: {\n handler() {\n for (const i in this.data) {\n this.init(this.data[i], 0);\n }\n this.refresh();\n },\n immediate: true,\n deep: true\n }\n }\n});\n;// CONCATENATED MODULE: ./src/components/tree/Index.vue?vue&type=script&lang=js\n /* harmony default export */ var components_tree_Indexvue_type_script_lang_js = (tree_Indexvue_type_script_lang_js); \n;// CONCATENATED MODULE: ./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-64.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-64.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-64.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-64.use[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/tree/Index.vue?vue&type=style&index=0&id=5e81e05e&prod&lang=scss&scoped=true\n// extracted by mini-css-extract-plugin\n\n;// CONCATENATED MODULE: ./src/components/tree/Index.vue?vue&type=style&index=0&id=5e81e05e&prod&lang=scss&scoped=true\n\n;// CONCATENATED MODULE: ./src/components/tree/Index.vue\n\n\n\n;\n\n\n/* normalize component */\n\nvar tree_Index_component = normalizeComponent(\n components_tree_Indexvue_type_script_lang_js,\n Indexvue_type_template_id_5e81e05e_scoped_true_render,\n Indexvue_type_template_id_5e81e05e_scoped_true_staticRenderFns,\n false,\n null,\n \"5e81e05e\",\n null\n \n)\n\n/* harmony default export */ var tree_Index = (tree_Index_component.exports);\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/checkPrivateRedeclaration.js\nfunction _checkPrivateRedeclaration(obj, privateCollection) {\n if (privateCollection.has(obj)) {\n throw new TypeError(\"Cannot initialize the same private elements twice on an object\");\n }\n}\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/classPrivateFieldInitSpec.js\n\nfunction _classPrivateFieldInitSpec(obj, privateMap, value) {\n _checkPrivateRedeclaration(obj, privateMap);\n privateMap.set(obj, value);\n}\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/assertClassBrand.js\nfunction _assertClassBrand(e, t, n) {\n if (\"function\" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n;\n throw new TypeError(\"Private element is not present on this object\");\n}\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/classPrivateFieldSet2.js\n\nfunction _classPrivateFieldSet2(s, a, r) {\n return s.set(_assertClassBrand(s, a), r), r;\n}\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/classPrivateFieldGet2.js\n\nfunction _classPrivateFieldGet2(s, a) {\n return s.get(_assertClassBrand(s, a));\n}\n// EXTERNAL MODULE: ./node_modules/core-js/modules/web.url-search-params.delete.js\nvar web_url_search_params_delete = __webpack_require__(4603);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/web.url-search-params.has.js\nvar web_url_search_params_has = __webpack_require__(7566);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/web.url-search-params.size.js\nvar web_url_search_params_size = __webpack_require__(8721);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.to-reversed.js\nvar es_typed_array_to_reversed = __webpack_require__(7467);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.to-sorted.js\nvar es_typed_array_to_sorted = __webpack_require__(4732);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.with.js\nvar es_typed_array_with = __webpack_require__(9577);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/esnext.array-buffer.detached.js\nvar esnext_array_buffer_detached = __webpack_require__(6280);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/esnext.array-buffer.transfer.js\nvar esnext_array_buffer_transfer = __webpack_require__(7913);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/esnext.array-buffer.transfer-to-fixed-length.js\nvar esnext_array_buffer_transfer_to_fixed_length = __webpack_require__(7801);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/bind.js\n\n\nfunction bind(fn, thisArg) {\n return function wrap() {\n return fn.apply(thisArg, arguments);\n };\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/utils.js\n\n\n\n\n\n\n\n\n\n\n\n// utils is a library of generic helper functions non-specific to axios\n\nconst {\n toString: utils_toString\n} = Object.prototype;\nconst {\n getPrototypeOf\n} = Object;\nconst kindOf = (cache => thing => {\n const str = utils_toString.call(thing);\n return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());\n})(Object.create(null));\nconst kindOfTest = type => {\n type = type.toLowerCase();\n return thing => kindOf(thing) === type;\n};\nconst typeOfTest = type => thing => typeof thing === type;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n *\n * @returns {boolean} True if value is an Array, otherwise false\n */\nconst {\n isArray\n} = Array;\n\n/**\n * Determine if a value is undefined\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nconst isUndefined = typeOfTest('undefined');\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor) && isFunction(val.constructor.isBuffer) && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nconst isArrayBuffer = kindOfTest('ArrayBuffer');\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n let result;\n if (typeof ArrayBuffer !== 'undefined' && ArrayBuffer.isView) {\n result = ArrayBuffer.isView(val);\n } else {\n result = val && val.buffer && isArrayBuffer(val.buffer);\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a String, otherwise false\n */\nconst isString = typeOfTest('string');\n\n/**\n * Determine if a value is a Function\n *\n * @param {*} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nconst isFunction = typeOfTest('function');\n\n/**\n * Determine if a value is a Number\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Number, otherwise false\n */\nconst isNumber = typeOfTest('number');\n\n/**\n * Determine if a value is an Object\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an Object, otherwise false\n */\nconst isObject = thing => thing !== null && typeof thing === 'object';\n\n/**\n * Determine if a value is a Boolean\n *\n * @param {*} thing The value to test\n * @returns {boolean} True if value is a Boolean, otherwise false\n */\nconst isBoolean = thing => thing === true || thing === false;\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a plain Object, otherwise false\n */\nconst isPlainObject = val => {\n if (kindOf(val) !== 'object') {\n return false;\n }\n const prototype = getPrototypeOf(val);\n return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in val) && !(Symbol.iterator in val);\n};\n\n/**\n * Determine if a value is a Date\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Date, otherwise false\n */\nconst isDate = kindOfTest('Date');\n\n/**\n * Determine if a value is a File\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFile = kindOfTest('File');\n\n/**\n * Determine if a value is a Blob\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nconst isBlob = kindOfTest('Blob');\n\n/**\n * Determine if a value is a FileList\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFileList = kindOfTest('FileList');\n\n/**\n * Determine if a value is a Stream\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nconst isStream = val => isObject(val) && isFunction(val.pipe);\n\n/**\n * Determine if a value is a FormData\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nconst isFormData = thing => {\n let kind;\n return thing && (typeof FormData === 'function' && thing instanceof FormData || isFunction(thing.append) && ((kind = kindOf(thing)) === 'formdata' ||\n // detect form-data instance\n kind === 'object' && isFunction(thing.toString) && thing.toString() === '[object FormData]'));\n};\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nconst isURLSearchParams = kindOfTest('URLSearchParams');\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n *\n * @returns {String} The String freed of excess whitespace\n */\nconst trim = str => str.trim ? str.trim() : str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n *\n * @param {Boolean} [allOwnKeys = false]\n * @returns {any}\n */\nfunction forEach(obj, fn, {\n allOwnKeys = false\n} = {}) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n let i;\n let l;\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n if (isArray(obj)) {\n // Iterate over array values\n for (i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Iterate over object keys\n const keys = allOwnKeys ? Object.getOwnPropertyNames(obj) : Object.keys(obj);\n const len = keys.length;\n let key;\n for (i = 0; i < len; i++) {\n key = keys[i];\n fn.call(null, obj[key], key, obj);\n }\n }\n}\nfunction findKey(obj, key) {\n key = key.toLowerCase();\n const keys = Object.keys(obj);\n let i = keys.length;\n let _key;\n while (i-- > 0) {\n _key = keys[i];\n if (key === _key.toLowerCase()) {\n return _key;\n }\n }\n return null;\n}\nconst _global = (() => {\n /*eslint no-undef:0*/\n if (typeof globalThis !== \"undefined\") return globalThis;\n return typeof self !== \"undefined\" ? self : typeof window !== 'undefined' ? window : global;\n})();\nconst isContextDefined = context => !isUndefined(context) && context !== _global;\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n *\n * @returns {Object} Result of all merge properties\n */\nfunction merge( /* obj1, obj2, obj3, ... */\n) {\n const {\n caseless\n } = isContextDefined(this) && this || {};\n const result = {};\n const assignValue = (val, key) => {\n const targetKey = caseless && findKey(result, key) || key;\n if (isPlainObject(result[targetKey]) && isPlainObject(val)) {\n result[targetKey] = merge(result[targetKey], val);\n } else if (isPlainObject(val)) {\n result[targetKey] = merge({}, val);\n } else if (isArray(val)) {\n result[targetKey] = val.slice();\n } else {\n result[targetKey] = val;\n }\n };\n for (let i = 0, l = arguments.length; i < l; i++) {\n arguments[i] && forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n *\n * @param {Boolean} [allOwnKeys]\n * @returns {Object} The resulting value of object a\n */\nconst extend = (a, b, thisArg, {\n allOwnKeys\n} = {}) => {\n forEach(b, (val, key) => {\n if (thisArg && isFunction(val)) {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n }, {\n allOwnKeys\n });\n return a;\n};\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n *\n * @returns {string} content value without BOM\n */\nconst stripBOM = content => {\n if (content.charCodeAt(0) === 0xFEFF) {\n content = content.slice(1);\n }\n return content;\n};\n\n/**\n * Inherit the prototype methods from one constructor into another\n * @param {function} constructor\n * @param {function} superConstructor\n * @param {object} [props]\n * @param {object} [descriptors]\n *\n * @returns {void}\n */\nconst inherits = (constructor, superConstructor, props, descriptors) => {\n constructor.prototype = Object.create(superConstructor.prototype, descriptors);\n constructor.prototype.constructor = constructor;\n Object.defineProperty(constructor, 'super', {\n value: superConstructor.prototype\n });\n props && Object.assign(constructor.prototype, props);\n};\n\n/**\n * Resolve object with deep prototype chain to a flat object\n * @param {Object} sourceObj source object\n * @param {Object} [destObj]\n * @param {Function|Boolean} [filter]\n * @param {Function} [propFilter]\n *\n * @returns {Object}\n */\nconst toFlatObject = (sourceObj, destObj, filter, propFilter) => {\n let props;\n let i;\n let prop;\n const merged = {};\n destObj = destObj || {};\n // eslint-disable-next-line no-eq-null,eqeqeq\n if (sourceObj == null) return destObj;\n do {\n props = Object.getOwnPropertyNames(sourceObj);\n i = props.length;\n while (i-- > 0) {\n prop = props[i];\n if ((!propFilter || propFilter(prop, sourceObj, destObj)) && !merged[prop]) {\n destObj[prop] = sourceObj[prop];\n merged[prop] = true;\n }\n }\n sourceObj = filter !== false && getPrototypeOf(sourceObj);\n } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype);\n return destObj;\n};\n\n/**\n * Determines whether a string ends with the characters of a specified string\n *\n * @param {String} str\n * @param {String} searchString\n * @param {Number} [position= 0]\n *\n * @returns {boolean}\n */\nconst endsWith = (str, searchString, position) => {\n str = String(str);\n if (position === undefined || position > str.length) {\n position = str.length;\n }\n position -= searchString.length;\n const lastIndex = str.indexOf(searchString, position);\n return lastIndex !== -1 && lastIndex === position;\n};\n\n/**\n * Returns new array from array like object or null if failed\n *\n * @param {*} [thing]\n *\n * @returns {?Array}\n */\nconst toArray = thing => {\n if (!thing) return null;\n if (isArray(thing)) return thing;\n let i = thing.length;\n if (!isNumber(i)) return null;\n const arr = new Array(i);\n while (i-- > 0) {\n arr[i] = thing[i];\n }\n return arr;\n};\n\n/**\n * Checking if the Uint8Array exists and if it does, it returns a function that checks if the\n * thing passed in is an instance of Uint8Array\n *\n * @param {TypedArray}\n *\n * @returns {Array}\n */\n// eslint-disable-next-line func-names\nconst isTypedArray = (TypedArray => {\n // eslint-disable-next-line func-names\n return thing => {\n return TypedArray && thing instanceof TypedArray;\n };\n})(typeof Uint8Array !== 'undefined' && getPrototypeOf(Uint8Array));\n\n/**\n * For each entry in the object, call the function with the key and value.\n *\n * @param {Object<any, any>} obj - The object to iterate over.\n * @param {Function} fn - The function to call for each entry.\n *\n * @returns {void}\n */\nconst forEachEntry = (obj, fn) => {\n const generator = obj && obj[Symbol.iterator];\n const iterator = generator.call(obj);\n let result;\n while ((result = iterator.next()) && !result.done) {\n const pair = result.value;\n fn.call(obj, pair[0], pair[1]);\n }\n};\n\n/**\n * It takes a regular expression and a string, and returns an array of all the matches\n *\n * @param {string} regExp - The regular expression to match against.\n * @param {string} str - The string to search.\n *\n * @returns {Array<boolean>}\n */\nconst matchAll = (regExp, str) => {\n let matches;\n const arr = [];\n while ((matches = regExp.exec(str)) !== null) {\n arr.push(matches);\n }\n return arr;\n};\n\n/* Checking if the kindOfTest function returns true when passed an HTMLFormElement. */\nconst isHTMLForm = kindOfTest('HTMLFormElement');\nconst toCamelCase = str => {\n return str.toLowerCase().replace(/[-_\\s]([a-z\\d])(\\w*)/g, function replacer(m, p1, p2) {\n return p1.toUpperCase() + p2;\n });\n};\n\n/* Creating a function that will check if an object has a property. */\nconst utils_hasOwnProperty = (({\n hasOwnProperty\n}) => (obj, prop) => hasOwnProperty.call(obj, prop))(Object.prototype);\n\n/**\n * Determine if a value is a RegExp object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a RegExp object, otherwise false\n */\nconst isRegExp = kindOfTest('RegExp');\nconst reduceDescriptors = (obj, reducer) => {\n const descriptors = Object.getOwnPropertyDescriptors(obj);\n const reducedDescriptors = {};\n forEach(descriptors, (descriptor, name) => {\n let ret;\n if ((ret = reducer(descriptor, name, obj)) !== false) {\n reducedDescriptors[name] = ret || descriptor;\n }\n });\n Object.defineProperties(obj, reducedDescriptors);\n};\n\n/**\n * Makes all methods read-only\n * @param {Object} obj\n */\n\nconst freezeMethods = obj => {\n reduceDescriptors(obj, (descriptor, name) => {\n // skip restricted props in strict mode\n if (isFunction(obj) && ['arguments', 'caller', 'callee'].indexOf(name) !== -1) {\n return false;\n }\n const value = obj[name];\n if (!isFunction(value)) return;\n descriptor.enumerable = false;\n if ('writable' in descriptor) {\n descriptor.writable = false;\n return;\n }\n if (!descriptor.set) {\n descriptor.set = () => {\n throw Error('Can not rewrite read-only method \\'' + name + '\\'');\n };\n }\n });\n};\nconst toObjectSet = (arrayOrString, delimiter) => {\n const obj = {};\n const define = arr => {\n arr.forEach(value => {\n obj[value] = true;\n });\n };\n isArray(arrayOrString) ? define(arrayOrString) : define(String(arrayOrString).split(delimiter));\n return obj;\n};\nconst noop = () => {};\nconst toFiniteNumber = (value, defaultValue) => {\n value = +value;\n return Number.isFinite(value) ? value : defaultValue;\n};\nconst ALPHA = 'abcdefghijklmnopqrstuvwxyz';\nconst DIGIT = '0123456789';\nconst ALPHABET = {\n DIGIT,\n ALPHA,\n ALPHA_DIGIT: ALPHA + ALPHA.toUpperCase() + DIGIT\n};\nconst generateString = (size = 16, alphabet = ALPHABET.ALPHA_DIGIT) => {\n let str = '';\n const {\n length\n } = alphabet;\n while (size--) {\n str += alphabet[Math.random() * length | 0];\n }\n return str;\n};\n\n/**\n * If the thing is a FormData object, return true, otherwise return false.\n *\n * @param {unknown} thing - The thing to check.\n *\n * @returns {boolean}\n */\nfunction isSpecCompliantForm(thing) {\n return !!(thing && isFunction(thing.append) && thing[Symbol.toStringTag] === 'FormData' && thing[Symbol.iterator]);\n}\nconst toJSONObject = obj => {\n const stack = new Array(10);\n const visit = (source, i) => {\n if (isObject(source)) {\n if (stack.indexOf(source) >= 0) {\n return;\n }\n if (!('toJSON' in source)) {\n stack[i] = source;\n const target = isArray(source) ? [] : {};\n forEach(source, (value, key) => {\n const reducedValue = visit(value, i + 1);\n !isUndefined(reducedValue) && (target[key] = reducedValue);\n });\n stack[i] = undefined;\n return target;\n }\n }\n return source;\n };\n return visit(obj, 0);\n};\nconst isAsyncFn = kindOfTest('AsyncFunction');\nconst isThenable = thing => thing && (isObject(thing) || isFunction(thing)) && isFunction(thing.then) && isFunction(thing.catch);\n/* harmony default export */ var utils = ({\n isArray,\n isArrayBuffer,\n isBuffer,\n isFormData,\n isArrayBufferView,\n isString,\n isNumber,\n isBoolean,\n isObject,\n isPlainObject,\n isUndefined,\n isDate,\n isFile,\n isBlob,\n isRegExp,\n isFunction,\n isStream,\n isURLSearchParams,\n isTypedArray,\n isFileList,\n forEach,\n merge,\n extend,\n trim,\n stripBOM,\n inherits,\n toFlatObject,\n kindOf,\n kindOfTest,\n endsWith,\n toArray,\n forEachEntry,\n matchAll,\n isHTMLForm,\n hasOwnProperty: utils_hasOwnProperty,\n hasOwnProp: utils_hasOwnProperty,\n // an alias to avoid ESLint no-prototype-builtins detection\n reduceDescriptors,\n freezeMethods,\n toObjectSet,\n toCamelCase,\n noop,\n toFiniteNumber,\n findKey,\n global: _global,\n isContextDefined,\n ALPHABET,\n generateString,\n isSpecCompliantForm,\n toJSONObject,\n isAsyncFn,\n isThenable\n});\n;// CONCATENATED MODULE: ./node_modules/axios/lib/core/AxiosError.js\n\n\n\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [config] The config.\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n *\n * @returns {Error} The created error.\n */\nfunction AxiosError(message, code, config, request, response) {\n Error.call(this);\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n } else {\n this.stack = new Error().stack;\n }\n this.message = message;\n this.name = 'AxiosError';\n code && (this.code = code);\n config && (this.config = config);\n request && (this.request = request);\n response && (this.response = response);\n}\nutils.inherits(AxiosError, Error, {\n toJSON: function toJSON() {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: utils.toJSONObject(this.config),\n code: this.code,\n status: this.response && this.response.status ? this.response.status : null\n };\n }\n});\nconst AxiosError_prototype = AxiosError.prototype;\nconst descriptors = {};\n['ERR_BAD_OPTION_VALUE', 'ERR_BAD_OPTION', 'ECONNABORTED', 'ETIMEDOUT', 'ERR_NETWORK', 'ERR_FR_TOO_MANY_REDIRECTS', 'ERR_DEPRECATED', 'ERR_BAD_RESPONSE', 'ERR_BAD_REQUEST', 'ERR_CANCELED', 'ERR_NOT_SUPPORT', 'ERR_INVALID_URL'\n// eslint-disable-next-line func-names\n].forEach(code => {\n descriptors[code] = {\n value: code\n };\n});\nObject.defineProperties(AxiosError, descriptors);\nObject.defineProperty(AxiosError_prototype, 'isAxiosError', {\n value: true\n});\n\n// eslint-disable-next-line func-names\nAxiosError.from = (error, code, config, request, response, customProps) => {\n const axiosError = Object.create(AxiosError_prototype);\n utils.toFlatObject(error, axiosError, function filter(obj) {\n return obj !== Error.prototype;\n }, prop => {\n return prop !== 'isAxiosError';\n });\n AxiosError.call(axiosError, error.message, code, config, request, response);\n axiosError.cause = error;\n axiosError.name = error.name;\n customProps && Object.assign(axiosError, customProps);\n return axiosError;\n};\n/* harmony default export */ var core_AxiosError = (AxiosError);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/null.js\n// eslint-disable-next-line strict\n/* harmony default export */ var helpers_null = (null);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/toFormData.js\n\n\n\n\n\n// temporary hotfix to avoid circular references until AxiosURLSearchParams is refactored\n\n\n/**\n * Determines if the given thing is a array or js object.\n *\n * @param {string} thing - The object or array to be visited.\n *\n * @returns {boolean}\n */\nfunction isVisitable(thing) {\n return utils.isPlainObject(thing) || utils.isArray(thing);\n}\n\n/**\n * It removes the brackets from the end of a string\n *\n * @param {string} key - The key of the parameter.\n *\n * @returns {string} the key without the brackets.\n */\nfunction removeBrackets(key) {\n return utils.endsWith(key, '[]') ? key.slice(0, -2) : key;\n}\n\n/**\n * It takes a path, a key, and a boolean, and returns a string\n *\n * @param {string} path - The path to the current key.\n * @param {string} key - The key of the current object being iterated over.\n * @param {string} dots - If true, the key will be rendered with dots instead of brackets.\n *\n * @returns {string} The path to the current key.\n */\nfunction renderKey(path, key, dots) {\n if (!path) return key;\n return path.concat(key).map(function each(token, i) {\n // eslint-disable-next-line no-param-reassign\n token = removeBrackets(token);\n return !dots && i ? '[' + token + ']' : token;\n }).join(dots ? '.' : '');\n}\n\n/**\n * If the array is an array and none of its elements are visitable, then it's a flat array.\n *\n * @param {Array<any>} arr - The array to check\n *\n * @returns {boolean}\n */\nfunction isFlatArray(arr) {\n return utils.isArray(arr) && !arr.some(isVisitable);\n}\nconst predicates = utils.toFlatObject(utils, {}, null, function filter(prop) {\n return /^is[A-Z]/.test(prop);\n});\n\n/**\n * Convert a data object to FormData\n *\n * @param {Object} obj\n * @param {?Object} [formData]\n * @param {?Object} [options]\n * @param {Function} [options.visitor]\n * @param {Boolean} [options.metaTokens = true]\n * @param {Boolean} [options.dots = false]\n * @param {?Boolean} [options.indexes = false]\n *\n * @returns {Object}\n **/\n\n/**\n * It converts an object into a FormData object\n *\n * @param {Object<any, any>} obj - The object to convert to form data.\n * @param {string} formData - The FormData object to append to.\n * @param {Object<string, any>} options\n *\n * @returns\n */\nfunction toFormData(obj, formData, options) {\n if (!utils.isObject(obj)) {\n throw new TypeError('target must be an object');\n }\n\n // eslint-disable-next-line no-param-reassign\n formData = formData || new (helpers_null || FormData)();\n\n // eslint-disable-next-line no-param-reassign\n options = utils.toFlatObject(options, {\n metaTokens: true,\n dots: false,\n indexes: false\n }, false, function defined(option, source) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n return !utils.isUndefined(source[option]);\n });\n const metaTokens = options.metaTokens;\n // eslint-disable-next-line no-use-before-define\n const visitor = options.visitor || defaultVisitor;\n const dots = options.dots;\n const indexes = options.indexes;\n const _Blob = options.Blob || typeof Blob !== 'undefined' && Blob;\n const useBlob = _Blob && utils.isSpecCompliantForm(formData);\n if (!utils.isFunction(visitor)) {\n throw new TypeError('visitor must be a function');\n }\n function convertValue(value) {\n if (value === null) return '';\n if (utils.isDate(value)) {\n return value.toISOString();\n }\n if (!useBlob && utils.isBlob(value)) {\n throw new core_AxiosError('Blob is not supported. Use a Buffer instead.');\n }\n if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) {\n return useBlob && typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);\n }\n return value;\n }\n\n /**\n * Default visitor.\n *\n * @param {*} value\n * @param {String|Number} key\n * @param {Array<String|Number>} path\n * @this {FormData}\n *\n * @returns {boolean} return true to visit the each prop of the value recursively\n */\n function defaultVisitor(value, key, path) {\n let arr = value;\n if (value && !path && typeof value === 'object') {\n if (utils.endsWith(key, '{}')) {\n // eslint-disable-next-line no-param-reassign\n key = metaTokens ? key : key.slice(0, -2);\n // eslint-disable-next-line no-param-reassign\n value = JSON.stringify(value);\n } else if (utils.isArray(value) && isFlatArray(value) || (utils.isFileList(value) || utils.endsWith(key, '[]')) && (arr = utils.toArray(value))) {\n // eslint-disable-next-line no-param-reassign\n key = removeBrackets(key);\n arr.forEach(function each(el, index) {\n !(utils.isUndefined(el) || el === null) && formData.append(\n // eslint-disable-next-line no-nested-ternary\n indexes === true ? renderKey([key], index, dots) : indexes === null ? key : key + '[]', convertValue(el));\n });\n return false;\n }\n }\n if (isVisitable(value)) {\n return true;\n }\n formData.append(renderKey(path, key, dots), convertValue(value));\n return false;\n }\n const stack = [];\n const exposedHelpers = Object.assign(predicates, {\n defaultVisitor,\n convertValue,\n isVisitable\n });\n function build(value, path) {\n if (utils.isUndefined(value)) return;\n if (stack.indexOf(value) !== -1) {\n throw Error('Circular reference detected in ' + path.join('.'));\n }\n stack.push(value);\n utils.forEach(value, function each(el, key) {\n const result = !(utils.isUndefined(el) || el === null) && visitor.call(formData, el, utils.isString(key) ? key.trim() : key, path, exposedHelpers);\n if (result === true) {\n build(el, path ? path.concat(key) : [key]);\n }\n });\n stack.pop();\n }\n if (!utils.isObject(obj)) {\n throw new TypeError('data must be an object');\n }\n build(obj);\n return formData;\n}\n/* harmony default export */ var helpers_toFormData = (toFormData);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/AxiosURLSearchParams.js\n\n\n\n\n\n/**\n * It encodes a string by replacing all characters that are not in the unreserved set with\n * their percent-encoded equivalents\n *\n * @param {string} str - The string to encode.\n *\n * @returns {string} The encoded string.\n */\nfunction encode(str) {\n const charMap = {\n '!': '%21',\n \"'\": '%27',\n '(': '%28',\n ')': '%29',\n '~': '%7E',\n '%20': '+',\n '%00': '\\x00'\n };\n return encodeURIComponent(str).replace(/[!'()~]|%20|%00/g, function replacer(match) {\n return charMap[match];\n });\n}\n\n/**\n * It takes a params object and converts it to a FormData object\n *\n * @param {Object<string, any>} params - The parameters to be converted to a FormData object.\n * @param {Object<string, any>} options - The options object passed to the Axios constructor.\n *\n * @returns {void}\n */\nfunction AxiosURLSearchParams(params, options) {\n this._pairs = [];\n params && helpers_toFormData(params, this, options);\n}\nconst AxiosURLSearchParams_prototype = AxiosURLSearchParams.prototype;\nAxiosURLSearchParams_prototype.append = function append(name, value) {\n this._pairs.push([name, value]);\n};\nAxiosURLSearchParams_prototype.toString = function toString(encoder) {\n const _encode = encoder ? function (value) {\n return encoder.call(this, value, encode);\n } : encode;\n return this._pairs.map(function each(pair) {\n return _encode(pair[0]) + '=' + _encode(pair[1]);\n }, '').join('&');\n};\n/* harmony default export */ var helpers_AxiosURLSearchParams = (AxiosURLSearchParams);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/buildURL.js\n\n\n\n\n\n/**\n * It replaces all instances of the characters `:`, `$`, `,`, `+`, `[`, and `]` with their\n * URI encoded counterparts\n *\n * @param {string} val The value to be encoded.\n *\n * @returns {string} The encoded value.\n */\nfunction buildURL_encode(val) {\n return encodeURIComponent(val).replace(/%3A/gi, ':').replace(/%24/g, '$').replace(/%2C/gi, ',').replace(/%20/g, '+').replace(/%5B/gi, '[').replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @param {?object} options\n *\n * @returns {string} The formatted url\n */\nfunction buildURL(url, params, options) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n const _encode = options && options.encode || buildURL_encode;\n const serializeFn = options && options.serialize;\n let serializedParams;\n if (serializeFn) {\n serializedParams = serializeFn(params, options);\n } else {\n serializedParams = utils.isURLSearchParams(params) ? params.toString() : new helpers_AxiosURLSearchParams(params, options).toString(_encode);\n }\n if (serializedParams) {\n const hashmarkIndex = url.indexOf(\"#\");\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n return url;\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/core/InterceptorManager.js\n\n\n\n\nclass InterceptorManager {\n constructor() {\n this.handlers = [];\n }\n\n /**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\n use(fulfilled, rejected, options) {\n this.handlers.push({\n fulfilled,\n rejected,\n synchronous: options ? options.synchronous : false,\n runWhen: options ? options.runWhen : null\n });\n return this.handlers.length - 1;\n }\n\n /**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n *\n * @returns {Boolean} `true` if the interceptor was removed, `false` otherwise\n */\n eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n }\n\n /**\n * Clear all interceptors from the stack\n *\n * @returns {void}\n */\n clear() {\n if (this.handlers) {\n this.handlers = [];\n }\n }\n\n /**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n *\n * @returns {void}\n */\n forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n }\n}\n/* harmony default export */ var core_InterceptorManager = (InterceptorManager);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/defaults/transitional.js\n\n\n/* harmony default export */ var defaults_transitional = ({\n silentJSONParsing: true,\n forcedJSONParsing: true,\n clarifyTimeoutError: false\n});\n;// CONCATENATED MODULE: ./node_modules/axios/lib/platform/browser/classes/URLSearchParams.js\n\n\n\n\n\n\n/* harmony default export */ var classes_URLSearchParams = (typeof URLSearchParams !== 'undefined' ? URLSearchParams : helpers_AxiosURLSearchParams);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/platform/browser/classes/FormData.js\n\n\n/* harmony default export */ var classes_FormData = (typeof FormData !== 'undefined' ? FormData : null);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/platform/browser/classes/Blob.js\n\n\n/* harmony default export */ var classes_Blob = (typeof Blob !== 'undefined' ? Blob : null);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/platform/browser/index.js\n\n\n\n/* harmony default export */ var browser = ({\n isBrowser: true,\n classes: {\n URLSearchParams: classes_URLSearchParams,\n FormData: classes_FormData,\n Blob: classes_Blob\n },\n protocols: ['http', 'https', 'file', 'blob', 'url', 'data']\n});\n;// CONCATENATED MODULE: ./node_modules/axios/lib/platform/common/utils.js\nconst hasBrowserEnv = typeof window !== 'undefined' && typeof document !== 'undefined';\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n *\n * @returns {boolean}\n */\nconst hasStandardBrowserEnv = (product => {\n return hasBrowserEnv && ['ReactNative', 'NativeScript', 'NS'].indexOf(product) < 0;\n})(typeof navigator !== 'undefined' && navigator.product);\n\n/**\n * Determine if we're running in a standard browser webWorker environment\n *\n * Although the `isStandardBrowserEnv` method indicates that\n * `allows axios to run in a web worker`, the WebWorker will still be\n * filtered out due to its judgment standard\n * `typeof window !== 'undefined' && typeof document !== 'undefined'`.\n * This leads to a problem when axios post `FormData` in webWorker\n */\nconst hasStandardBrowserWebWorkerEnv = (() => {\n return typeof WorkerGlobalScope !== 'undefined' &&\n // eslint-disable-next-line no-undef\n self instanceof WorkerGlobalScope && typeof self.importScripts === 'function';\n})();\n\n;// CONCATENATED MODULE: ./node_modules/axios/lib/platform/index.js\n\n\n/* harmony default export */ var platform = ({\n ...common_utils_namespaceObject,\n ...browser\n});\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/toURLEncodedForm.js\n\n\n\n\n\nfunction toURLEncodedForm(data, options) {\n return helpers_toFormData(data, new platform.classes.URLSearchParams(), Object.assign({\n visitor: function (value, key, path, helpers) {\n if (platform.isNode && utils.isBuffer(value)) {\n this.append(key, value.toString('base64'));\n return false;\n }\n return helpers.defaultVisitor.apply(this, arguments);\n }\n }, options));\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/formDataToJSON.js\n\n\n\n\n/**\n * It takes a string like `foo[x][y][z]` and returns an array like `['foo', 'x', 'y', 'z']\n *\n * @param {string} name - The name of the property to get.\n *\n * @returns An array of strings.\n */\nfunction parsePropPath(name) {\n // foo[x][y][z]\n // foo.x.y.z\n // foo-x-y-z\n // foo x y z\n return utils.matchAll(/\\w+|\\[(\\w*)]/g, name).map(match => {\n return match[0] === '[]' ? '' : match[1] || match[0];\n });\n}\n\n/**\n * Convert an array to an object.\n *\n * @param {Array<any>} arr - The array to convert to an object.\n *\n * @returns An object with the same keys and values as the array.\n */\nfunction arrayToObject(arr) {\n const obj = {};\n const keys = Object.keys(arr);\n let i;\n const len = keys.length;\n let key;\n for (i = 0; i < len; i++) {\n key = keys[i];\n obj[key] = arr[key];\n }\n return obj;\n}\n\n/**\n * It takes a FormData object and returns a JavaScript object\n *\n * @param {string} formData The FormData object to convert to JSON.\n *\n * @returns {Object<string, any> | null} The converted object.\n */\nfunction formDataToJSON(formData) {\n function buildPath(path, value, target, index) {\n let name = path[index++];\n if (name === '__proto__') return true;\n const isNumericKey = Number.isFinite(+name);\n const isLast = index >= path.length;\n name = !name && utils.isArray(target) ? target.length : name;\n if (isLast) {\n if (utils.hasOwnProp(target, name)) {\n target[name] = [target[name], value];\n } else {\n target[name] = value;\n }\n return !isNumericKey;\n }\n if (!target[name] || !utils.isObject(target[name])) {\n target[name] = [];\n }\n const result = buildPath(path, value, target[name], index);\n if (result && utils.isArray(target[name])) {\n target[name] = arrayToObject(target[name]);\n }\n return !isNumericKey;\n }\n if (utils.isFormData(formData) && utils.isFunction(formData.entries)) {\n const obj = {};\n utils.forEachEntry(formData, (name, value) => {\n buildPath(parsePropPath(name), value, obj, 0);\n });\n return obj;\n }\n return null;\n}\n/* harmony default export */ var helpers_formDataToJSON = (formDataToJSON);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/defaults/index.js\n\n\n\n\n\n\n\n\n\n\n/**\n * It takes a string, tries to parse it, and if it fails, it returns the stringified version\n * of the input\n *\n * @param {any} rawValue - The value to be stringified.\n * @param {Function} parser - A function that parses a string into a JavaScript object.\n * @param {Function} encoder - A function that takes a value and returns a string.\n *\n * @returns {string} A stringified version of the rawValue.\n */\nfunction stringifySafely(rawValue, parser, encoder) {\n if (utils.isString(rawValue)) {\n try {\n (parser || JSON.parse)(rawValue);\n return utils.trim(rawValue);\n } catch (e) {\n if (e.name !== 'SyntaxError') {\n throw e;\n }\n }\n }\n return (encoder || JSON.stringify)(rawValue);\n}\nconst defaults = {\n transitional: defaults_transitional,\n adapter: ['xhr', 'http'],\n transformRequest: [function transformRequest(data, headers) {\n const contentType = headers.getContentType() || '';\n const hasJSONContentType = contentType.indexOf('application/json') > -1;\n const isObjectPayload = utils.isObject(data);\n if (isObjectPayload && utils.isHTMLForm(data)) {\n data = new FormData(data);\n }\n const isFormData = utils.isFormData(data);\n if (isFormData) {\n return hasJSONContentType ? JSON.stringify(helpers_formDataToJSON(data)) : data;\n }\n if (utils.isArrayBuffer(data) || utils.isBuffer(data) || utils.isStream(data) || utils.isFile(data) || utils.isBlob(data)) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n headers.setContentType('application/x-www-form-urlencoded;charset=utf-8', false);\n return data.toString();\n }\n let isFileList;\n if (isObjectPayload) {\n if (contentType.indexOf('application/x-www-form-urlencoded') > -1) {\n return toURLEncodedForm(data, this.formSerializer).toString();\n }\n if ((isFileList = utils.isFileList(data)) || contentType.indexOf('multipart/form-data') > -1) {\n const _FormData = this.env && this.env.FormData;\n return helpers_toFormData(isFileList ? {\n 'files[]': data\n } : data, _FormData && new _FormData(), this.formSerializer);\n }\n }\n if (isObjectPayload || hasJSONContentType) {\n headers.setContentType('application/json', false);\n return stringifySafely(data);\n }\n return data;\n }],\n transformResponse: [function transformResponse(data) {\n const transitional = this.transitional || defaults.transitional;\n const forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n const JSONRequested = this.responseType === 'json';\n if (data && utils.isString(data) && (forcedJSONParsing && !this.responseType || JSONRequested)) {\n const silentJSONParsing = transitional && transitional.silentJSONParsing;\n const strictJSONParsing = !silentJSONParsing && JSONRequested;\n try {\n return JSON.parse(data);\n } catch (e) {\n if (strictJSONParsing) {\n if (e.name === 'SyntaxError') {\n throw core_AxiosError.from(e, core_AxiosError.ERR_BAD_RESPONSE, this, null, this.response);\n }\n throw e;\n }\n }\n }\n return data;\n }],\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n maxContentLength: -1,\n maxBodyLength: -1,\n env: {\n FormData: platform.classes.FormData,\n Blob: platform.classes.Blob\n },\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n },\n headers: {\n common: {\n 'Accept': 'application/json, text/plain, */*',\n 'Content-Type': undefined\n }\n }\n};\nutils.forEach(['delete', 'get', 'head', 'post', 'put', 'patch'], method => {\n defaults.headers[method] = {};\n});\n/* harmony default export */ var lib_defaults = (defaults);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/parseHeaders.js\n\n\n\n\n\n// RawAxiosHeaders whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nconst ignoreDuplicateOf = utils.toObjectSet(['age', 'authorization', 'content-length', 'content-type', 'etag', 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since', 'last-modified', 'location', 'max-forwards', 'proxy-authorization', 'referer', 'retry-after', 'user-agent']);\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} rawHeaders Headers needing to be parsed\n *\n * @returns {Object} Headers parsed into an object\n */\n/* harmony default export */ var parseHeaders = (rawHeaders => {\n const parsed = {};\n let key;\n let val;\n let i;\n rawHeaders && rawHeaders.split('\\n').forEach(function parser(line) {\n i = line.indexOf(':');\n key = line.substring(0, i).trim().toLowerCase();\n val = line.substring(i + 1).trim();\n if (!key || parsed[key] && ignoreDuplicateOf[key]) {\n return;\n }\n if (key === 'set-cookie') {\n if (parsed[key]) {\n parsed[key].push(val);\n } else {\n parsed[key] = [val];\n }\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n });\n return parsed;\n});\n;// CONCATENATED MODULE: ./node_modules/axios/lib/core/AxiosHeaders.js\n\n\n\n\nconst $internals = Symbol('internals');\nfunction normalizeHeader(header) {\n return header && String(header).trim().toLowerCase();\n}\nfunction normalizeValue(value) {\n if (value === false || value == null) {\n return value;\n }\n return utils.isArray(value) ? value.map(normalizeValue) : String(value);\n}\nfunction parseTokens(str) {\n const tokens = Object.create(null);\n const tokensRE = /([^\\s,;=]+)\\s*(?:=\\s*([^,;]+))?/g;\n let match;\n while (match = tokensRE.exec(str)) {\n tokens[match[1]] = match[2];\n }\n return tokens;\n}\nconst isValidHeaderName = str => /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(str.trim());\nfunction matchHeaderValue(context, value, header, filter, isHeaderNameFilter) {\n if (utils.isFunction(filter)) {\n return filter.call(this, value, header);\n }\n if (isHeaderNameFilter) {\n value = header;\n }\n if (!utils.isString(value)) return;\n if (utils.isString(filter)) {\n return value.indexOf(filter) !== -1;\n }\n if (utils.isRegExp(filter)) {\n return filter.test(value);\n }\n}\nfunction formatHeader(header) {\n return header.trim().toLowerCase().replace(/([a-z\\d])(\\w*)/g, (w, char, str) => {\n return char.toUpperCase() + str;\n });\n}\nfunction buildAccessors(obj, header) {\n const accessorName = utils.toCamelCase(' ' + header);\n ['get', 'set', 'has'].forEach(methodName => {\n Object.defineProperty(obj, methodName + accessorName, {\n value: function (arg1, arg2, arg3) {\n return this[methodName].call(this, header, arg1, arg2, arg3);\n },\n configurable: true\n });\n });\n}\nclass AxiosHeaders {\n constructor(headers) {\n headers && this.set(headers);\n }\n set(header, valueOrRewrite, rewrite) {\n const self = this;\n function setHeader(_value, _header, _rewrite) {\n const lHeader = normalizeHeader(_header);\n if (!lHeader) {\n throw new Error('header name must be a non-empty string');\n }\n const key = utils.findKey(self, lHeader);\n if (!key || self[key] === undefined || _rewrite === true || _rewrite === undefined && self[key] !== false) {\n self[key || _header] = normalizeValue(_value);\n }\n }\n const setHeaders = (headers, _rewrite) => utils.forEach(headers, (_value, _header) => setHeader(_value, _header, _rewrite));\n if (utils.isPlainObject(header) || header instanceof this.constructor) {\n setHeaders(header, valueOrRewrite);\n } else if (utils.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) {\n setHeaders(parseHeaders(header), valueOrRewrite);\n } else {\n header != null && setHeader(valueOrRewrite, header, rewrite);\n }\n return this;\n }\n get(header, parser) {\n header = normalizeHeader(header);\n if (header) {\n const key = utils.findKey(this, header);\n if (key) {\n const value = this[key];\n if (!parser) {\n return value;\n }\n if (parser === true) {\n return parseTokens(value);\n }\n if (utils.isFunction(parser)) {\n return parser.call(this, value, key);\n }\n if (utils.isRegExp(parser)) {\n return parser.exec(value);\n }\n throw new TypeError('parser must be boolean|regexp|function');\n }\n }\n }\n has(header, matcher) {\n header = normalizeHeader(header);\n if (header) {\n const key = utils.findKey(this, header);\n return !!(key && this[key] !== undefined && (!matcher || matchHeaderValue(this, this[key], key, matcher)));\n }\n return false;\n }\n delete(header, matcher) {\n const self = this;\n let deleted = false;\n function deleteHeader(_header) {\n _header = normalizeHeader(_header);\n if (_header) {\n const key = utils.findKey(self, _header);\n if (key && (!matcher || matchHeaderValue(self, self[key], key, matcher))) {\n delete self[key];\n deleted = true;\n }\n }\n }\n if (utils.isArray(header)) {\n header.forEach(deleteHeader);\n } else {\n deleteHeader(header);\n }\n return deleted;\n }\n clear(matcher) {\n const keys = Object.keys(this);\n let i = keys.length;\n let deleted = false;\n while (i--) {\n const key = keys[i];\n if (!matcher || matchHeaderValue(this, this[key], key, matcher, true)) {\n delete this[key];\n deleted = true;\n }\n }\n return deleted;\n }\n normalize(format) {\n const self = this;\n const headers = {};\n utils.forEach(this, (value, header) => {\n const key = utils.findKey(headers, header);\n if (key) {\n self[key] = normalizeValue(value);\n delete self[header];\n return;\n }\n const normalized = format ? formatHeader(header) : String(header).trim();\n if (normalized !== header) {\n delete self[header];\n }\n self[normalized] = normalizeValue(value);\n headers[normalized] = true;\n });\n return this;\n }\n concat(...targets) {\n return this.constructor.concat(this, ...targets);\n }\n toJSON(asStrings) {\n const obj = Object.create(null);\n utils.forEach(this, (value, header) => {\n value != null && value !== false && (obj[header] = asStrings && utils.isArray(value) ? value.join(', ') : value);\n });\n return obj;\n }\n [Symbol.iterator]() {\n return Object.entries(this.toJSON())[Symbol.iterator]();\n }\n toString() {\n return Object.entries(this.toJSON()).map(([header, value]) => header + ': ' + value).join('\\n');\n }\n get [Symbol.toStringTag]() {\n return 'AxiosHeaders';\n }\n static from(thing) {\n return thing instanceof this ? thing : new this(thing);\n }\n static concat(first, ...targets) {\n const computed = new this(first);\n targets.forEach(target => computed.set(target));\n return computed;\n }\n static accessor(header) {\n const internals = this[$internals] = this[$internals] = {\n accessors: {}\n };\n const accessors = internals.accessors;\n const prototype = this.prototype;\n function defineAccessor(_header) {\n const lHeader = normalizeHeader(_header);\n if (!accessors[lHeader]) {\n buildAccessors(prototype, _header);\n accessors[lHeader] = true;\n }\n }\n utils.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header);\n return this;\n }\n}\nAxiosHeaders.accessor(['Content-Type', 'Content-Length', 'Accept', 'Accept-Encoding', 'User-Agent', 'Authorization']);\n\n// reserved names hotfix\nutils.reduceDescriptors(AxiosHeaders.prototype, ({\n value\n}, key) => {\n let mapped = key[0].toUpperCase() + key.slice(1); // map `set` => `Set`\n return {\n get: () => value,\n set(headerValue) {\n this[mapped] = headerValue;\n }\n };\n});\nutils.freezeMethods(AxiosHeaders);\n/* harmony default export */ var core_AxiosHeaders = (AxiosHeaders);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/core/transformData.js\n\n\n\n\n\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Array|Function} fns A single function or Array of functions\n * @param {?Object} response The response object\n *\n * @returns {*} The resulting transformed data\n */\nfunction transformData(fns, response) {\n const config = this || lib_defaults;\n const context = response || config;\n const headers = core_AxiosHeaders.from(context.headers);\n let data = context.data;\n utils.forEach(fns, function transform(fn) {\n data = fn.call(config, data, headers.normalize(), response ? response.status : undefined);\n });\n headers.normalize();\n return data;\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/cancel/isCancel.js\n\n\nfunction isCancel(value) {\n return !!(value && value.__CANCEL__);\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/cancel/CanceledError.js\n\n\n\n\n\n/**\n * A `CanceledError` is an object that is thrown when an operation is canceled.\n *\n * @param {string=} message The message.\n * @param {Object=} config The config.\n * @param {Object=} request The request.\n *\n * @returns {CanceledError} The created error.\n */\nfunction CanceledError(message, config, request) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n core_AxiosError.call(this, message == null ? 'canceled' : message, core_AxiosError.ERR_CANCELED, config, request);\n this.name = 'CanceledError';\n}\nutils.inherits(CanceledError, core_AxiosError, {\n __CANCEL__: true\n});\n/* harmony default export */ var cancel_CanceledError = (CanceledError);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/web.dom-exception.stack.js\nvar web_dom_exception_stack = __webpack_require__(4979);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/core/settle.js\n\n\n\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n *\n * @returns {object} The response.\n */\nfunction settle(resolve, reject, response) {\n const validateStatus = response.config.validateStatus;\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(new core_AxiosError('Request failed with status code ' + response.status, [core_AxiosError.ERR_BAD_REQUEST, core_AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4], response.config, response.request, response));\n }\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/cookies.js\n\n\n\n/* harmony default export */ var cookies = (platform.hasStandardBrowserEnv ?\n// Standard browser envs support document.cookie\n{\n write(name, value, expires, path, domain, secure) {\n const cookie = [name + '=' + encodeURIComponent(value)];\n utils.isNumber(expires) && cookie.push('expires=' + new Date(expires).toGMTString());\n utils.isString(path) && cookie.push('path=' + path);\n utils.isString(domain) && cookie.push('domain=' + domain);\n secure === true && cookie.push('secure');\n document.cookie = cookie.join('; ');\n },\n read(name) {\n const match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return match ? decodeURIComponent(match[3]) : null;\n },\n remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n} :\n// Non-standard browser env (web workers, react-native) lack needed support.\n{\n write() {},\n read() {\n return null;\n },\n remove() {}\n});\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/isAbsoluteURL.js\n\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n *\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nfunction isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"<scheme>://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/combineURLs.js\n\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n *\n * @returns {string} The combined URL\n */\nfunction combineURLs(baseURL, relativeURL) {\n return relativeURL ? baseURL.replace(/\\/?\\/$/, '') + '/' + relativeURL.replace(/^\\/+/, '') : baseURL;\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/core/buildFullPath.js\n\n\n\n\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n *\n * @returns {string} The combined full path\n */\nfunction buildFullPath(baseURL, requestedURL) {\n if (baseURL && !isAbsoluteURL(requestedURL)) {\n return combineURLs(baseURL, requestedURL);\n }\n return requestedURL;\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/isURLSameOrigin.js\n\n\n\n\n/* harmony default export */ var isURLSameOrigin = (platform.hasStandardBrowserEnv ?\n// Standard browser envs have full support of the APIs needed to test\n// whether the request URL is of the same origin as current location.\nfunction standardBrowserEnv() {\n const msie = /(msie|trident)/i.test(navigator.userAgent);\n const urlParsingNode = document.createElement('a');\n let originURL;\n\n /**\n * Parse a URL to discover its components\n *\n * @param {String} url The URL to be parsed\n * @returns {Object}\n */\n function resolveURL(url) {\n let href = url;\n if (msie) {\n // IE needs attribute set twice to normalize properties\n urlParsingNode.setAttribute('href', href);\n href = urlParsingNode.href;\n }\n urlParsingNode.setAttribute('href', href);\n\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n return {\n href: urlParsingNode.href,\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n host: urlParsingNode.host,\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n hostname: urlParsingNode.hostname,\n port: urlParsingNode.port,\n pathname: urlParsingNode.pathname.charAt(0) === '/' ? urlParsingNode.pathname : '/' + urlParsingNode.pathname\n };\n }\n originURL = resolveURL(window.location.href);\n\n /**\n * Determine if a URL shares the same origin as the current location\n *\n * @param {String} requestURL The URL to test\n * @returns {boolean} True if URL shares the same origin, otherwise false\n */\n return function isURLSameOrigin(requestURL) {\n const parsed = utils.isString(requestURL) ? resolveURL(requestURL) : requestURL;\n return parsed.protocol === originURL.protocol && parsed.host === originURL.host;\n };\n}() :\n// Non standard browser envs (web workers, react-native) lack needed support.\nfunction nonStandardBrowserEnv() {\n return function isURLSameOrigin() {\n return true;\n };\n}());\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/parseProtocol.js\n\n\nfunction parseProtocol(url) {\n const match = /^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(url);\n return match && match[1] || '';\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/speedometer.js\n\n\n/**\n * Calculate data maxRate\n * @param {Number} [samplesCount= 10]\n * @param {Number} [min= 1000]\n * @returns {Function}\n */\nfunction speedometer(samplesCount, min) {\n samplesCount = samplesCount || 10;\n const bytes = new Array(samplesCount);\n const timestamps = new Array(samplesCount);\n let head = 0;\n let tail = 0;\n let firstSampleTS;\n min = min !== undefined ? min : 1000;\n return function push(chunkLength) {\n const now = Date.now();\n const startedAt = timestamps[tail];\n if (!firstSampleTS) {\n firstSampleTS = now;\n }\n bytes[head] = chunkLength;\n timestamps[head] = now;\n let i = tail;\n let bytesCount = 0;\n while (i !== head) {\n bytesCount += bytes[i++];\n i = i % samplesCount;\n }\n head = (head + 1) % samplesCount;\n if (head === tail) {\n tail = (tail + 1) % samplesCount;\n }\n if (now - firstSampleTS < min) {\n return;\n }\n const passed = startedAt && now - startedAt;\n return passed ? Math.round(bytesCount * 1000 / passed) : undefined;\n };\n}\n/* harmony default export */ var helpers_speedometer = (speedometer);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/adapters/xhr.js\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction progressEventReducer(listener, isDownloadStream) {\n let bytesNotified = 0;\n const _speedometer = helpers_speedometer(50, 250);\n return e => {\n const loaded = e.loaded;\n const total = e.lengthComputable ? e.total : undefined;\n const progressBytes = loaded - bytesNotified;\n const rate = _speedometer(progressBytes);\n const inRange = loaded <= total;\n bytesNotified = loaded;\n const data = {\n loaded,\n total,\n progress: total ? loaded / total : undefined,\n bytes: progressBytes,\n rate: rate ? rate : undefined,\n estimated: rate && total && inRange ? (total - loaded) / rate : undefined,\n event: e\n };\n data[isDownloadStream ? 'download' : 'upload'] = true;\n listener(data);\n };\n}\nconst isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined';\n/* harmony default export */ var xhr = (isXHRAdapterSupported && function (config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n let requestData = config.data;\n const requestHeaders = core_AxiosHeaders.from(config.headers).normalize();\n let {\n responseType,\n withXSRFToken\n } = config;\n let onCanceled;\n function done() {\n if (config.cancelToken) {\n config.cancelToken.unsubscribe(onCanceled);\n }\n if (config.signal) {\n config.signal.removeEventListener('abort', onCanceled);\n }\n }\n let contentType;\n if (utils.isFormData(requestData)) {\n if (platform.hasStandardBrowserEnv || platform.hasStandardBrowserWebWorkerEnv) {\n requestHeaders.setContentType(false); // Let the browser set it\n } else if ((contentType = requestHeaders.getContentType()) !== false) {\n // fix semicolon duplication issue for ReactNative FormData implementation\n const [type, ...tokens] = contentType ? contentType.split(';').map(token => token.trim()).filter(Boolean) : [];\n requestHeaders.setContentType([type || 'multipart/form-data', ...tokens].join('; '));\n }\n }\n let request = new XMLHttpRequest();\n\n // HTTP basic authentication\n if (config.auth) {\n const username = config.auth.username || '';\n const password = config.auth.password ? unescape(encodeURIComponent(config.auth.password)) : '';\n requestHeaders.set('Authorization', 'Basic ' + btoa(username + ':' + password));\n }\n const fullPath = buildFullPath(config.baseURL, config.url);\n request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true);\n\n // Set the request timeout in MS\n request.timeout = config.timeout;\n function onloadend() {\n if (!request) {\n return;\n }\n // Prepare the response\n const responseHeaders = core_AxiosHeaders.from('getAllResponseHeaders' in request && request.getAllResponseHeaders());\n const responseData = !responseType || responseType === 'text' || responseType === 'json' ? request.responseText : request.response;\n const response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config,\n request\n };\n settle(function _resolve(value) {\n resolve(value);\n done();\n }, function _reject(err) {\n reject(err);\n done();\n }, response);\n\n // Clean up request\n request = null;\n }\n if ('onloadend' in request) {\n // Use onloadend if available\n request.onloadend = onloadend;\n } else {\n // Listen for ready state to emulate onloadend\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n // readystate handler is calling before onerror or ontimeout handlers,\n // so we should call onloadend on the next 'tick'\n setTimeout(onloadend);\n };\n }\n\n // Handle browser request cancellation (as opposed to a manual cancellation)\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n reject(new core_AxiosError('Request aborted', core_AxiosError.ECONNABORTED, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(new core_AxiosError('Network Error', core_AxiosError.ERR_NETWORK, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n let timeoutErrorMessage = config.timeout ? 'timeout of ' + config.timeout + 'ms exceeded' : 'timeout exceeded';\n const transitional = config.transitional || defaults_transitional;\n if (config.timeoutErrorMessage) {\n timeoutErrorMessage = config.timeoutErrorMessage;\n }\n reject(new core_AxiosError(timeoutErrorMessage, transitional.clarifyTimeoutError ? core_AxiosError.ETIMEDOUT : core_AxiosError.ECONNABORTED, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n if (platform.hasStandardBrowserEnv) {\n withXSRFToken && utils.isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(config));\n if (withXSRFToken || withXSRFToken !== false && isURLSameOrigin(fullPath)) {\n // Add xsrf header\n const xsrfValue = config.xsrfHeaderName && config.xsrfCookieName && cookies.read(config.xsrfCookieName);\n if (xsrfValue) {\n requestHeaders.set(config.xsrfHeaderName, xsrfValue);\n }\n }\n }\n\n // Remove Content-Type if data is undefined\n requestData === undefined && requestHeaders.setContentType(null);\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders.toJSON(), function setRequestHeader(val, key) {\n request.setRequestHeader(key, val);\n });\n }\n\n // Add withCredentials to request if needed\n if (!utils.isUndefined(config.withCredentials)) {\n request.withCredentials = !!config.withCredentials;\n }\n\n // Add responseType to request if needed\n if (responseType && responseType !== 'json') {\n request.responseType = config.responseType;\n }\n\n // Handle progress if needed\n if (typeof config.onDownloadProgress === 'function') {\n request.addEventListener('progress', progressEventReducer(config.onDownloadProgress, true));\n }\n\n // Not all browsers support upload events\n if (typeof config.onUploadProgress === 'function' && request.upload) {\n request.upload.addEventListener('progress', progressEventReducer(config.onUploadProgress));\n }\n if (config.cancelToken || config.signal) {\n // Handle cancellation\n // eslint-disable-next-line func-names\n onCanceled = cancel => {\n if (!request) {\n return;\n }\n reject(!cancel || cancel.type ? new cancel_CanceledError(null, config, request) : cancel);\n request.abort();\n request = null;\n };\n config.cancelToken && config.cancelToken.subscribe(onCanceled);\n if (config.signal) {\n config.signal.aborted ? onCanceled() : config.signal.addEventListener('abort', onCanceled);\n }\n }\n const protocol = parseProtocol(fullPath);\n if (protocol && platform.protocols.indexOf(protocol) === -1) {\n reject(new core_AxiosError('Unsupported protocol ' + protocol + ':', core_AxiosError.ERR_BAD_REQUEST, config));\n return;\n }\n\n // Send the request\n request.send(requestData || null);\n });\n});\n;// CONCATENATED MODULE: ./node_modules/axios/lib/adapters/adapters.js\n\n\n\n\nconst knownAdapters = {\n http: helpers_null,\n xhr: xhr\n};\nutils.forEach(knownAdapters, (fn, value) => {\n if (fn) {\n try {\n Object.defineProperty(fn, 'name', {\n value\n });\n } catch (e) {\n // eslint-disable-next-line no-empty\n }\n Object.defineProperty(fn, 'adapterName', {\n value\n });\n }\n});\nconst renderReason = reason => `- ${reason}`;\nconst isResolvedHandle = adapter => utils.isFunction(adapter) || adapter === null || adapter === false;\n/* harmony default export */ var adapters = ({\n getAdapter: adapters => {\n adapters = utils.isArray(adapters) ? adapters : [adapters];\n const {\n length\n } = adapters;\n let nameOrAdapter;\n let adapter;\n const rejectedReasons = {};\n for (let i = 0; i < length; i++) {\n nameOrAdapter = adapters[i];\n let id;\n adapter = nameOrAdapter;\n if (!isResolvedHandle(nameOrAdapter)) {\n adapter = knownAdapters[(id = String(nameOrAdapter)).toLowerCase()];\n if (adapter === undefined) {\n throw new core_AxiosError(`Unknown adapter '${id}'`);\n }\n }\n if (adapter) {\n break;\n }\n rejectedReasons[id || '#' + i] = adapter;\n }\n if (!adapter) {\n const reasons = Object.entries(rejectedReasons).map(([id, state]) => `adapter ${id} ` + (state === false ? 'is not supported by the environment' : 'is not available in the build'));\n let s = length ? reasons.length > 1 ? 'since :\\n' + reasons.map(renderReason).join('\\n') : ' ' + renderReason(reasons[0]) : 'as no adapter specified';\n throw new core_AxiosError(`There is no suitable adapter to dispatch the request ` + s, 'ERR_NOT_SUPPORT');\n }\n return adapter;\n },\n adapters: knownAdapters\n});\n;// CONCATENATED MODULE: ./node_modules/axios/lib/core/dispatchRequest.js\n\n\n\n\n\n\n\n\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n *\n * @param {Object} config The config that is to be used for the request\n *\n * @returns {void}\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n if (config.signal && config.signal.aborted) {\n throw new cancel_CanceledError(null, config);\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n *\n * @returns {Promise} The Promise to be fulfilled\n */\nfunction dispatchRequest(config) {\n throwIfCancellationRequested(config);\n config.headers = core_AxiosHeaders.from(config.headers);\n\n // Transform request data\n config.data = transformData.call(config, config.transformRequest);\n if (['post', 'put', 'patch'].indexOf(config.method) !== -1) {\n config.headers.setContentType('application/x-www-form-urlencoded', false);\n }\n const adapter = adapters.getAdapter(config.adapter || lib_defaults.adapter);\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData.call(config, config.transformResponse, response);\n response.headers = core_AxiosHeaders.from(response.headers);\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData.call(config, config.transformResponse, reason.response);\n reason.response.headers = core_AxiosHeaders.from(reason.response.headers);\n }\n }\n return Promise.reject(reason);\n });\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/core/mergeConfig.js\n\n\n\n\nconst headersToObject = thing => thing instanceof core_AxiosHeaders ? thing.toJSON() : thing;\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n *\n * @returns {Object} New object resulting from merging config2 to config1\n */\nfunction mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n const config = {};\n function getMergedValue(target, source, caseless) {\n if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n return utils.merge.call({\n caseless\n }, target, source);\n } else if (utils.isPlainObject(source)) {\n return utils.merge({}, source);\n } else if (utils.isArray(source)) {\n return source.slice();\n }\n return source;\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDeepProperties(a, b, caseless) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(a, b, caseless);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a, caseless);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function valueFromConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function defaultToConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDirectKeys(a, b, prop) {\n if (prop in config2) {\n return getMergedValue(a, b);\n } else if (prop in config1) {\n return getMergedValue(undefined, a);\n }\n }\n const mergeMap = {\n url: valueFromConfig2,\n method: valueFromConfig2,\n data: valueFromConfig2,\n baseURL: defaultToConfig2,\n transformRequest: defaultToConfig2,\n transformResponse: defaultToConfig2,\n paramsSerializer: defaultToConfig2,\n timeout: defaultToConfig2,\n timeoutMessage: defaultToConfig2,\n withCredentials: defaultToConfig2,\n withXSRFToken: defaultToConfig2,\n adapter: defaultToConfig2,\n responseType: defaultToConfig2,\n xsrfCookieName: defaultToConfig2,\n xsrfHeaderName: defaultToConfig2,\n onUploadProgress: defaultToConfig2,\n onDownloadProgress: defaultToConfig2,\n decompress: defaultToConfig2,\n maxContentLength: defaultToConfig2,\n maxBodyLength: defaultToConfig2,\n beforeRedirect: defaultToConfig2,\n transport: defaultToConfig2,\n httpAgent: defaultToConfig2,\n httpsAgent: defaultToConfig2,\n cancelToken: defaultToConfig2,\n socketPath: defaultToConfig2,\n responseEncoding: defaultToConfig2,\n validateStatus: mergeDirectKeys,\n headers: (a, b) => mergeDeepProperties(headersToObject(a), headersToObject(b), true)\n };\n utils.forEach(Object.keys(Object.assign({}, config1, config2)), function computeConfigValue(prop) {\n const merge = mergeMap[prop] || mergeDeepProperties;\n const configValue = merge(config1[prop], config2[prop], prop);\n utils.isUndefined(configValue) && merge !== mergeDirectKeys || (config[prop] = configValue);\n });\n return config;\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/env/data.js\nconst VERSION = \"1.6.7\";\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/validator.js\n\n\n\n\nconst validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach((type, i) => {\n validators[type] = function validator(thing) {\n return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n };\n});\nconst deprecatedWarnings = {};\n\n/**\n * Transitional option validator\n *\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\n * @param {string?} version - deprecated version / removed since version\n * @param {string?} message - some message with additional info\n *\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n function formatMessage(opt, desc) {\n return '[Axios v' + VERSION + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\n }\n\n // eslint-disable-next-line func-names\n return (value, opt, opts) => {\n if (validator === false) {\n throw new core_AxiosError(formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')), core_AxiosError.ERR_DEPRECATED);\n }\n if (version && !deprecatedWarnings[opt]) {\n deprecatedWarnings[opt] = true;\n // eslint-disable-next-line no-console\n console.warn(formatMessage(opt, ' has been deprecated since v' + version + ' and will be removed in the near future'));\n }\n return validator ? validator(value, opt, opts) : true;\n };\n};\n\n/**\n * Assert object's properties type\n *\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n *\n * @returns {object}\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n if (typeof options !== 'object') {\n throw new core_AxiosError('options must be an object', core_AxiosError.ERR_BAD_OPTION_VALUE);\n }\n const keys = Object.keys(options);\n let i = keys.length;\n while (i-- > 0) {\n const opt = keys[i];\n const validator = schema[opt];\n if (validator) {\n const value = options[opt];\n const result = value === undefined || validator(value, opt, options);\n if (result !== true) {\n throw new core_AxiosError('option ' + opt + ' must be ' + result, core_AxiosError.ERR_BAD_OPTION_VALUE);\n }\n continue;\n }\n if (allowUnknown !== true) {\n throw new core_AxiosError('Unknown option ' + opt, core_AxiosError.ERR_BAD_OPTION);\n }\n }\n}\n/* harmony default export */ var validator = ({\n assertOptions,\n validators\n});\n;// CONCATENATED MODULE: ./node_modules/axios/lib/core/Axios.js\n\n\n\n\n\n\n\n\n\n\n\nconst Axios_validators = validator.validators;\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n *\n * @return {Axios} A new instance of Axios\n */\nclass Axios {\n constructor(instanceConfig) {\n this.defaults = instanceConfig;\n this.interceptors = {\n request: new core_InterceptorManager(),\n response: new core_InterceptorManager()\n };\n }\n\n /**\n * Dispatch a request\n *\n * @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults)\n * @param {?Object} config\n *\n * @returns {Promise} The Promise to be fulfilled\n */\n async request(configOrUrl, config) {\n try {\n return await this._request(configOrUrl, config);\n } catch (err) {\n if (err instanceof Error) {\n let dummy;\n Error.captureStackTrace ? Error.captureStackTrace(dummy = {}) : dummy = new Error();\n\n // slice off the Error: ... line\n const stack = dummy.stack ? dummy.stack.replace(/^.+\\n/, '') : '';\n if (!err.stack) {\n err.stack = stack;\n // match without the 2 top stack lines\n } else if (stack && !String(err.stack).endsWith(stack.replace(/^.+\\n.+\\n/, ''))) {\n err.stack += '\\n' + stack;\n }\n }\n throw err;\n }\n }\n _request(configOrUrl, config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof configOrUrl === 'string') {\n config = config || {};\n config.url = configOrUrl;\n } else {\n config = configOrUrl || {};\n }\n config = mergeConfig(this.defaults, config);\n const {\n transitional,\n paramsSerializer,\n headers\n } = config;\n if (transitional !== undefined) {\n validator.assertOptions(transitional, {\n silentJSONParsing: Axios_validators.transitional(Axios_validators.boolean),\n forcedJSONParsing: Axios_validators.transitional(Axios_validators.boolean),\n clarifyTimeoutError: Axios_validators.transitional(Axios_validators.boolean)\n }, false);\n }\n if (paramsSerializer != null) {\n if (utils.isFunction(paramsSerializer)) {\n config.paramsSerializer = {\n serialize: paramsSerializer\n };\n } else {\n validator.assertOptions(paramsSerializer, {\n encode: Axios_validators.function,\n serialize: Axios_validators.function\n }, true);\n }\n }\n\n // Set config.method\n config.method = (config.method || this.defaults.method || 'get').toLowerCase();\n\n // Flatten headers\n let contextHeaders = headers && utils.merge(headers.common, headers[config.method]);\n headers && utils.forEach(['delete', 'get', 'head', 'post', 'put', 'patch', 'common'], method => {\n delete headers[method];\n });\n config.headers = core_AxiosHeaders.concat(contextHeaders, headers);\n\n // filter out skipped interceptors\n const requestInterceptorChain = [];\n let synchronousRequestInterceptors = true;\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n return;\n }\n synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n const responseInterceptorChain = [];\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n });\n let promise;\n let i = 0;\n let len;\n if (!synchronousRequestInterceptors) {\n const chain = [dispatchRequest.bind(this), undefined];\n chain.unshift.apply(chain, requestInterceptorChain);\n chain.push.apply(chain, responseInterceptorChain);\n len = chain.length;\n promise = Promise.resolve(config);\n while (i < len) {\n promise = promise.then(chain[i++], chain[i++]);\n }\n return promise;\n }\n len = requestInterceptorChain.length;\n let newConfig = config;\n i = 0;\n while (i < len) {\n const onFulfilled = requestInterceptorChain[i++];\n const onRejected = requestInterceptorChain[i++];\n try {\n newConfig = onFulfilled(newConfig);\n } catch (error) {\n onRejected.call(this, error);\n break;\n }\n }\n try {\n promise = dispatchRequest.call(this, newConfig);\n } catch (error) {\n return Promise.reject(error);\n }\n i = 0;\n len = responseInterceptorChain.length;\n while (i < len) {\n promise = promise.then(responseInterceptorChain[i++], responseInterceptorChain[i++]);\n }\n return promise;\n }\n getUri(config) {\n config = mergeConfig(this.defaults, config);\n const fullPath = buildFullPath(config.baseURL, config.url);\n return buildURL(fullPath, config.params, config.paramsSerializer);\n }\n}\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function (url, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n url,\n data: (config || {}).data\n }));\n };\n});\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n\n function generateHTTPMethod(isForm) {\n return function httpMethod(url, data, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n headers: isForm ? {\n 'Content-Type': 'multipart/form-data'\n } : {},\n url,\n data\n }));\n };\n }\n Axios.prototype[method] = generateHTTPMethod();\n Axios.prototype[method + 'Form'] = generateHTTPMethod(true);\n});\n/* harmony default export */ var core_Axios = (Axios);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/cancel/CancelToken.js\n\n\n\n\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @param {Function} executor The executor function.\n *\n * @returns {CancelToken}\n */\nclass CancelToken {\n constructor(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n let resolvePromise;\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n const token = this;\n\n // eslint-disable-next-line func-names\n this.promise.then(cancel => {\n if (!token._listeners) return;\n let i = token._listeners.length;\n while (i-- > 0) {\n token._listeners[i](cancel);\n }\n token._listeners = null;\n });\n\n // eslint-disable-next-line func-names\n this.promise.then = onfulfilled => {\n let _resolve;\n // eslint-disable-next-line func-names\n const promise = new Promise(resolve => {\n token.subscribe(resolve);\n _resolve = resolve;\n }).then(onfulfilled);\n promise.cancel = function reject() {\n token.unsubscribe(_resolve);\n };\n return promise;\n };\n executor(function cancel(message, config, request) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n token.reason = new cancel_CanceledError(message, config, request);\n resolvePromise(token.reason);\n });\n }\n\n /**\n * Throws a `CanceledError` if cancellation has been requested.\n */\n throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n }\n\n /**\n * Subscribe to the cancel signal\n */\n\n subscribe(listener) {\n if (this.reason) {\n listener(this.reason);\n return;\n }\n if (this._listeners) {\n this._listeners.push(listener);\n } else {\n this._listeners = [listener];\n }\n }\n\n /**\n * Unsubscribe from the cancel signal\n */\n\n unsubscribe(listener) {\n if (!this._listeners) {\n return;\n }\n const index = this._listeners.indexOf(listener);\n if (index !== -1) {\n this._listeners.splice(index, 1);\n }\n }\n\n /**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\n static source() {\n let cancel;\n const token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token,\n cancel\n };\n }\n}\n/* harmony default export */ var cancel_CancelToken = (CancelToken);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/spread.js\n\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n *\n * @returns {Function}\n */\nfunction spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/isAxiosError.js\n\n\n\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n *\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nfunction isAxiosError(payload) {\n return utils.isObject(payload) && payload.isAxiosError === true;\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/HttpStatusCode.js\nconst HttpStatusCode = {\n Continue: 100,\n SwitchingProtocols: 101,\n Processing: 102,\n EarlyHints: 103,\n Ok: 200,\n Created: 201,\n Accepted: 202,\n NonAuthoritativeInformation: 203,\n NoContent: 204,\n ResetContent: 205,\n PartialContent: 206,\n MultiStatus: 207,\n AlreadyReported: 208,\n ImUsed: 226,\n MultipleChoices: 300,\n MovedPermanently: 301,\n Found: 302,\n SeeOther: 303,\n NotModified: 304,\n UseProxy: 305,\n Unused: 306,\n TemporaryRedirect: 307,\n PermanentRedirect: 308,\n BadRequest: 400,\n Unauthorized: 401,\n PaymentRequired: 402,\n Forbidden: 403,\n NotFound: 404,\n MethodNotAllowed: 405,\n NotAcceptable: 406,\n ProxyAuthenticationRequired: 407,\n RequestTimeout: 408,\n Conflict: 409,\n Gone: 410,\n LengthRequired: 411,\n PreconditionFailed: 412,\n PayloadTooLarge: 413,\n UriTooLong: 414,\n UnsupportedMediaType: 415,\n RangeNotSatisfiable: 416,\n ExpectationFailed: 417,\n ImATeapot: 418,\n MisdirectedRequest: 421,\n UnprocessableEntity: 422,\n Locked: 423,\n FailedDependency: 424,\n TooEarly: 425,\n UpgradeRequired: 426,\n PreconditionRequired: 428,\n TooManyRequests: 429,\n RequestHeaderFieldsTooLarge: 431,\n UnavailableForLegalReasons: 451,\n InternalServerError: 500,\n NotImplemented: 501,\n BadGateway: 502,\n ServiceUnavailable: 503,\n GatewayTimeout: 504,\n HttpVersionNotSupported: 505,\n VariantAlsoNegotiates: 506,\n InsufficientStorage: 507,\n LoopDetected: 508,\n NotExtended: 510,\n NetworkAuthenticationRequired: 511\n};\nObject.entries(HttpStatusCode).forEach(([key, value]) => {\n HttpStatusCode[value] = key;\n});\n/* harmony default export */ var helpers_HttpStatusCode = (HttpStatusCode);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/axios.js\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n *\n * @returns {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n const context = new core_Axios(defaultConfig);\n const instance = bind(core_Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, core_Axios.prototype, context, {\n allOwnKeys: true\n });\n\n // Copy context to instance\n utils.extend(instance, context, null, {\n allOwnKeys: true\n });\n\n // Factory for creating new instances\n instance.create = function create(instanceConfig) {\n return createInstance(mergeConfig(defaultConfig, instanceConfig));\n };\n return instance;\n}\n\n// Create the default instance to be exported\nconst axios = createInstance(lib_defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = core_Axios;\n\n// Expose Cancel & CancelToken\naxios.CanceledError = cancel_CanceledError;\naxios.CancelToken = cancel_CancelToken;\naxios.isCancel = isCancel;\naxios.VERSION = VERSION;\naxios.toFormData = helpers_toFormData;\n\n// Expose AxiosError class\naxios.AxiosError = core_AxiosError;\n\n// alias for CanceledError for backward compatibility\naxios.Cancel = axios.CanceledError;\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\naxios.spread = spread;\n\n// Expose isAxiosError\naxios.isAxiosError = isAxiosError;\n\n// Expose mergeConfig\naxios.mergeConfig = mergeConfig;\naxios.AxiosHeaders = core_AxiosHeaders;\naxios.formToJSON = thing => helpers_formDataToJSON(utils.isHTMLForm(thing) ? new FormData(thing) : thing);\naxios.getAdapter = adapters.getAdapter;\naxios.HttpStatusCode = helpers_HttpStatusCode;\naxios.default = axios;\n\n// this module should only have a default export\n/* harmony default export */ var lib_axios = (axios);\n;// CONCATENATED MODULE: ./src/components/http/index.js\n\n\n\n\n\n\n\n\n\nvar _axios = /*#__PURE__*/new WeakMap();\nvar _requestCount = /*#__PURE__*/new WeakMap();\nvar _errorTipsCount = /*#__PURE__*/new WeakMap();\nvar _loadingInstance = /*#__PURE__*/new WeakMap();\nvar _config = /*#__PURE__*/new WeakMap();\nclass http_Http {\n constructor(options) {\n _classPrivateFieldInitSpec(this, _axios, void 0);\n _classPrivateFieldInitSpec(this, _requestCount, 0);\n // 请求次数\n _classPrivateFieldInitSpec(this, _errorTipsCount, 0);\n _classPrivateFieldInitSpec(this, _loadingInstance, null);\n _classPrivateFieldInitSpec(this, _config, {\n baseURL: '',\n timeout: 60 * 1000,\n withCredentials: false,\n successCode: 200,\n errorCode: 500\n });\n for (const k in _classPrivateFieldGet2(_config, this)) {\n if (options[k]) {\n _classPrivateFieldGet2(_config, this)[k] = options[k];\n }\n }\n lib_axios.defaults.headers['Content-Type'] = 'application/json;charset=UTF-8';\n lib_axios.defaults.headers['Accept'] = 'application/json';\n _classPrivateFieldSet2(_axios, this, lib_axios.create(_classPrivateFieldGet2(_config, this)));\n _classPrivateFieldGet2(_axios, this).interceptors.request.use(config => {\n var _this$requestCount, _this$requestCount2;\n if (!config.params) {\n config.params = {};\n }\n if (_classPrivateFieldGet2(_requestCount, this) == 0) {\n _classPrivateFieldSet2(_loadingInstance, this, loading());\n }\n _classPrivateFieldSet2(_requestCount, this, (_this$requestCount = _classPrivateFieldGet2(_requestCount, this), _this$requestCount2 = _this$requestCount++, _this$requestCount)), _this$requestCount2;\n config.headers.authorization = localStorage.getItem('token');\n return config;\n }, error => {\n return Promise.reject(error);\n });\n _classPrivateFieldGet2(_axios, this).interceptors.response.use(response => {\n var _this$requestCount3, _this$requestCount4;\n _classPrivateFieldSet2(_requestCount, this, (_this$requestCount3 = _classPrivateFieldGet2(_requestCount, this), _this$requestCount4 = _this$requestCount3--, _this$requestCount3)), _this$requestCount4;\n if (_classPrivateFieldGet2(_requestCount, this) === 0) {\n _classPrivateFieldSet2(_errorTipsCount, this, 0);\n _classPrivateFieldGet2(_loadingInstance, this).close();\n }\n return response.data;\n }, error => {\n var _this$requestCount5, _this$requestCount6;\n _classPrivateFieldSet2(_requestCount, this, (_this$requestCount5 = _classPrivateFieldGet2(_requestCount, this), _this$requestCount6 = _this$requestCount5--, _this$requestCount5)), _this$requestCount6;\n if (_classPrivateFieldGet2(_requestCount, this) === 0) {\n _classPrivateFieldGet2(_loadingInstance, this).close();\n }\n return Promise.reject(error);\n });\n }\n _handleResult(success, err, res) {\n if (!res) {\n return;\n }\n if (res.code === _classPrivateFieldGet2(_config, this).successCode) {\n if (typeof success === 'function') {\n success(res);\n }\n } else {\n if (_classPrivateFieldGet2(_errorTipsCount, this) === 0) {\n var _this$errorTipsCount, _this$errorTipsCount2;\n _classPrivateFieldSet2(_errorTipsCount, this, (_this$errorTipsCount = _classPrivateFieldGet2(_errorTipsCount, this), _this$errorTipsCount2 = _this$errorTipsCount++, _this$errorTipsCount)), _this$errorTipsCount2;\n }\n if (res.code === 401) {\n sessionStorage.clear();\n } else if (res.code === _classPrivateFieldGet2(_config, this).errorCode) {\n if (typeof err === 'function') {\n err(res);\n } else {\n error(res.msg);\n }\n } else {\n if (typeof err === 'function') {\n err(res);\n }\n }\n }\n }\n post(url, params, success, err) {\n _classPrivateFieldGet2(_axios, this).post(url, params).then(res => {\n this._handleResult(success, err, res);\n });\n }\n update(url, params, success, err) {\n _classPrivateFieldGet2(_axios, this).update(url, params).then(res => {\n this._handleResult(success, err, res);\n });\n }\n get(url, params, success, err) {\n _classPrivateFieldGet2(_axios, this).get(url, {\n params: params\n }).then(res => {\n this._handleResult(success, err, res);\n });\n }\n delete(url, params, success, err) {\n _classPrivateFieldGet2(_axios, this).delete(url, {\n params: params\n }).then(res => {\n this._handleResult(success, err, res);\n });\n }\n downLoad(url, params = {}) {\n _classPrivateFieldGet2(_axios, this).post(url, params, {\n 'responseType': 'blob'\n }).then(res => {\n if (res) {\n let fileName = params.fileName;\n if (!fileName) {\n fileName = res.headers['content-disposition'].split('filename=')[1].replace(/\"/g, '');\n }\n const blob = new Blob([res.data], {\n type: 'application/octet-stream;charset=UTF-8'\n });\n const link = document.createElement('a');\n link.style.display = 'none';\n link.href = window.URL.createObjectURL(blob);\n link.download = decodeURIComponent(fileName);\n link.click();\n window.URL.revokeObjectURL(link.href);\n }\n });\n }\n}\n;// CONCATENATED MODULE: ./src/components/index.js\n__webpack_require__(5506);\n\n\n\n\n\n\nconst coms = [Index, page_table_Index, dialog_Index, card_Index, tree_Index];\nconst install = function (Vue) {\n coms.forEach(com => {\n Vue.component(com.name, com);\n });\n};\n\n// 导出组件\n/* harmony default export */ var components = (install);\nclass Http extends http_Http {\n constructor(options) {\n super(options);\n }\n}\n;// CONCATENATED MODULE: ./node_modules/@vue/cli-service/lib/commands/build/entry-lib.js\n\n\n/* harmony default export */ var entry_lib = (components);\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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RUFDbEI7QUFDSixDOztBQ3JCd0I7QUFDQTtBQUN4Qiw4Q0FBZSxVQUFHO0FBQ0kiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL25vZGVfbW9kdWxlcy9AdnVlL2NsaS1zZXJ2aWNlL2xpYi9jb21tYW5kcy9idWlsZC9zZXRQdWJsaWNQYXRoLmpzPzY5Y2IiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9zcmMvY29tcG9uZW50cy9wYWdpbmF0aW9uL0luZGV4LnZ1ZT8yNzMzIiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpL3NyYy9jb21wb25lbnRzL3BhZ2luYXRpb24vSW5kZXgudnVlPzNjNWUiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9zcmMvY29tcG9uZW50cy9wYWdpbmF0aW9uL0luZGV4LnZ1ZT9mOTZlIiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vc3JjL2NvbXBvbmVudHMvcGFnaW5hdGlvbi9JbmRleC52dWU/ZjE1YiIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL3NyYy9jb21wb25lbnRzL3BhZ2luYXRpb24vSW5kZXgudnVlP2MxNWUiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9ub2RlX21vZHVsZXMvQHZ1ZS92dWUtbG9hZGVyLXYxNS9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzPzJmODUiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9zcmMvY29tcG9uZW50cy9wYWdpbmF0aW9uL0luZGV4LnZ1ZT9mYjFkIiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vc3JjL2NvbXBvbmVudHMvcGFnZS10YWJsZS9JbmRleC52dWU/MDhiYSIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS9zcmMvY29tcG9uZW50cy9wYWdlLXRhYmxlL0luZGV4LnZ1ZT81ZDAzIiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vc3JjL2NvbXBvbmVudHMvcGFnZS10YWJsZS9JbmRleC52dWU/Y2VlOSIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL3NyYy9jb21wb25lbnRzL3BhZ2UtdGFibGUvSW5kZXgudnVlP2JjOGIiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9zcmMvY29tcG9uZW50cy9wYWdlLXRhYmxlL0luZGV4LnZ1ZT9lM2RjIiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vc3JjL2NvbXBvbmVudHMvcGFnZS10YWJsZS9JbmRleC52dWU/MzhhMCIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL3NyYy9jb21wb25lbnRzL2RpYWxvZy9JbmRleC52dWU/MGU3MSIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL3NyYy9jb21wb25lbnRzL2RpYWxvZy9kaWFsb2ctZHJhZy5qcz81ZWJkIiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpL3NyYy9jb21wb25lbnRzL2RpYWxvZy9JbmRleC52dWU/NGRiNiIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL3NyYy9jb21wb25lbnRzL2RpYWxvZy9JbmRleC52dWU/ZmZjOSIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL3NyYy9jb21wb25lbnRzL2RpYWxvZy9JbmRleC52dWU/MTQwZCIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL3NyYy9jb21wb25lbnRzL2RpYWxvZy9JbmRleC52dWU/ZTg2NyIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL3NyYy9jb21wb25lbnRzL2RpYWxvZy9JbmRleC52dWU/NjExOCIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL3NyYy9jb21wb25lbnRzL2NhcmQvSW5kZXgudnVlP2U3ZmEiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13Ymkvc3JjL2NvbXBvbmVudHMvY2FyZC9JbmRleC52dWU/YzFmYiIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL3NyYy9jb21wb25lbnRzL2NhcmQvSW5kZXgudnVlP2RhMjEiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9zcmMvY29tcG9uZW50cy9jYXJkL0luZGV4LnZ1ZT81NzI1Iiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vc3JjL2NvbXBvbmVudHMvY2FyZC9JbmRleC52dWU/YjRhYiIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL3NyYy9jb21wb25lbnRzL2NhcmQvSW5kZXgudnVlP2YzMzUiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9zcmMvY29tcG9uZW50cy90cmVlL0luZGV4LnZ1ZT85MDljIiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vc3JjL2NvbXBvbmVudHMvdHJlZS90cmVlLmpzPzQyYzYiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13Ymkvc3JjL2NvbXBvbmVudHMvdHJlZS9JbmRleC52dWU/YmY2NiIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL3NyYy9jb21wb25lbnRzL3RyZWUvSW5kZXgudnVlP2JkZWIiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9zcmMvY29tcG9uZW50cy90cmVlL0luZGV4LnZ1ZT9hNjU4Iiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vc3JjL2NvbXBvbmVudHMvdHJlZS9JbmRleC52dWU/OTEwYSIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL3NyYy9jb21wb25lbnRzL3RyZWUvSW5kZXgudnVlPzdhMDEiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY2hlY2tQcml2YXRlUmVkZWNsYXJhdGlvbi5qcz9iODVmIiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWMuanM/Y2ZkYSIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hc3NlcnRDbGFzc0JyYW5kLmpzPzE5ZjgiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY2xhc3NQcml2YXRlRmllbGRTZXQyLmpzPzQ0YmYiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY2xhc3NQcml2YXRlRmllbGRHZXQyLmpzPzkyOWUiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvYmluZC5qcz80YmVhIiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi91dGlscy5qcz9jOWViIiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL0F4aW9zRXJyb3IuanM/MjAyNyIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9udWxsLmpzPzFhOTQiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvdG9Gb3JtRGF0YS5qcz85YmEzIiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL0F4aW9zVVJMU2VhcmNoUGFyYW1zLmpzPzkzZTIiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvYnVpbGRVUkwuanM/YzE3OCIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9JbnRlcmNlcHRvck1hbmFnZXIuanM/Yzc5MiIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvZGVmYXVsdHMvdHJhbnNpdGlvbmFsLmpzPzI3YTQiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3BsYXRmb3JtL2Jyb3dzZXIvY2xhc3Nlcy9VUkxTZWFyY2hQYXJhbXMuanM/YTBlZCIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvcGxhdGZvcm0vYnJvd3Nlci9jbGFzc2VzL0Zvcm1EYXRhLmpzPzFkYjkiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3BsYXRmb3JtL2Jyb3dzZXIvY2xhc3Nlcy9CbG9iLmpzPzZkNzgiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3BsYXRmb3JtL2Jyb3dzZXIvaW5kZXguanM/YjJlNCIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvcGxhdGZvcm0vY29tbW9uL3V0aWxzLmpzP2JmOGMiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3BsYXRmb3JtL2luZGV4LmpzPzc4ZjEiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvdG9VUkxFbmNvZGVkRm9ybS5qcz84ZmU5Iiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2Zvcm1EYXRhVG9KU09OLmpzP2Y0MzciLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2RlZmF1bHRzL2luZGV4LmpzP2ZmMTAiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvcGFyc2VIZWFkZXJzLmpzPzU0ZTkiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvQXhpb3NIZWFkZXJzLmpzPzk1OTciLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvdHJhbnNmb3JtRGF0YS5qcz83NjYyIiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jYW5jZWwvaXNDYW5jZWwuanM/YzE3YSIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY2FuY2VsL0NhbmNlbGVkRXJyb3IuanM/NjhhNCIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9zZXR0bGUuanM/ODc2OCIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9jb29raWVzLmpzPzFkM2YiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvaXNBYnNvbHV0ZVVSTC5qcz9hMjI3Iiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2NvbWJpbmVVUkxzLmpzPzZiYzYiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvYnVpbGRGdWxsUGF0aC5qcz9mMDJkIiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2lzVVJMU2FtZU9yaWdpbi5qcz84Nzk1Iiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3BhcnNlUHJvdG9jb2wuanM/OWZhYyIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9zcGVlZG9tZXRlci5qcz81OWMwIiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9hZGFwdGVycy94aHIuanM/MWE1YyIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvYWRhcHRlcnMvYWRhcHRlcnMuanM/NzgyNSIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9kaXNwYXRjaFJlcXVlc3QuanM/NGRjOSIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9tZXJnZUNvbmZpZy5qcz9iZDEzIiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9lbnYvZGF0YS5qcz8xMTBmIiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3ZhbGlkYXRvci5qcz8wMTMyIiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL0F4aW9zLmpzPzI5ZmIiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NhbmNlbC9DYW5jZWxUb2tlbi5qcz83MmM4Iiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3NwcmVhZC5qcz8yNzI5Iiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2lzQXhpb3NFcnJvci5qcz9iZDlkIiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL0h0dHBTdGF0dXNDb2RlLmpzP2M2ZjMiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2F4aW9zLmpzP2ZhZDYiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9zcmMvY29tcG9uZW50cy9odHRwL2luZGV4LmpzP2NjNmEiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9zcmMvY29tcG9uZW50cy9pbmRleC5qcz8xNTY4Iiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vbm9kZV9tb2R1bGVzL0B2dWUvY2xpLXNlcnZpY2UvbGliL2NvbW1hbmRzL2J1aWxkL2VudHJ5LWxpYi5qcz84YTk3Il0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLXZhciAqL1xuLy8gVGhpcyBmaWxlIGlzIGltcG9ydGVkIGludG8gbGliL3djIGNsaWVudCBidW5kbGVzLlxuXG5pZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgdmFyIGN1cnJlbnRTY3JpcHQgPSB3aW5kb3cuZG9jdW1lbnQuY3VycmVudFNjcmlwdFxuICBpZiAocHJvY2Vzcy5lbnYuTkVFRF9DVVJSRU5UU0NSSVBUX1BPTFlGSUxMKSB7XG4gICAgdmFyIGdldEN1cnJlbnRTY3JpcHQgPSByZXF1aXJlKCdAc29kYS9nZXQtY3VycmVudC1zY3JpcHQnKVxuICAgIGN1cnJlbnRTY3JpcHQgPSBnZXRDdXJyZW50U2NyaXB0KClcblxuICAgIC8vIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCBiZWNhdXNlIHByZXZpb3VzbHkgd2UgZGlyZWN0bHkgaW5jbHVkZWQgdGhlIHBvbHlmaWxsXG4gICAgaWYgKCEoJ2N1cnJlbnRTY3JpcHQnIGluIGRvY3VtZW50KSkge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGRvY3VtZW50LCAnY3VycmVudFNjcmlwdCcsIHsgZ2V0OiBnZXRDdXJyZW50U2NyaXB0IH0pXG4gICAgfVxuICB9XG5cbiAgdmFyIHNyYyA9IGN1cnJlbnRTY3JpcHQgJiYgY3VycmVudFNjcmlwdC5zcmMubWF0Y2goLyguK1xcLylbXi9dK1xcLmpzKFxcPy4qKT8kLylcbiAgaWYgKHNyYykge1xuICAgIF9fd2VicGFja19wdWJsaWNfcGF0aF9fID0gc3JjWzFdIC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgfVxufVxuXG4vLyBJbmRpY2F0ZSB0byB3ZWJwYWNrIHRoYXQgdGhpcyBmaWxlIGNhbiBiZSBjb25jYXRlbmF0ZWRcbmV4cG9ydCBkZWZhdWx0IG51bGxcbiIsInZhciByZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKXt2YXIgX3ZtPXRoaXMsX2M9X3ZtLl9zZWxmLl9jO3JldHVybiAoX3ZtLnRvdGFsPjApP19jKCdkaXYnLFtfYygnZWwtcGFnaW5hdGlvbicsX3ZtLl9iKHthdHRyczp7XCJiYWNrZ3JvdW5kXCI6XCJcIixcImN1cnJlbnQtcGFnZVwiOl92bS5jdXJyZW50UGFnZSxcInBhZ2Utc2l6ZVwiOl92bS5wYWdlU2l6ZSxcInBhZ2Utc2l6ZXNcIjpfdm0ucGFnZVNpemVzLFwidG90YWxcIjpfdm0udG90YWwsXCJsYXlvdXRcIjpcInByZXYsIHBhZ2VyLCBuZXh0XCJ9LG9uOntcInNpemUtY2hhbmdlXCI6X3ZtLmhhbmRsZVNpemVDaGFuZ2UsXCJjdXJyZW50LWNoYW5nZVwiOl92bS5oYW5kbGVDdXJyZW50Q2hhbmdlfX0sJ2VsLXBhZ2luYXRpb24nLF92bS4kYXR0cnMsZmFsc2UpKV0sMSk6X3ZtLl9lKClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwiPHRlbXBsYXRlPlxyXG4gICAgPGRpdiB2LWlmPVwidG90YWw+MFwiPlxyXG4gICAgICAgIDxlbC1wYWdpbmF0aW9uXHJcbiAgICAgICAgICAgIGJhY2tncm91bmQgXHJcbiAgICAgICAgICAgIDpjdXJyZW50LXBhZ2U9XCJjdXJyZW50UGFnZVwiXHJcbiAgICAgICAgICAgIDpwYWdlLXNpemU9XCJwYWdlU2l6ZVwiXHJcbiAgICAgICAgICAgIDpwYWdlLXNpemVzPVwicGFnZVNpemVzXCJcclxuICAgICAgICAgICAgOnRvdGFsPVwidG90YWxcIlxyXG4gICAgICAgICAgICBsYXlvdXQ9XCJwcmV2LCBwYWdlciwgbmV4dFwiXHJcbiAgICAgICAgICAgIHYtYmluZD1cIiRhdHRyc1wiXHJcbiAgICAgICAgICAgIEBzaXplLWNoYW5nZT1cImhhbmRsZVNpemVDaGFuZ2VcIlxyXG4gICAgICAgICAgICBAY3VycmVudC1jaGFuZ2U9XCJoYW5kbGVDdXJyZW50Q2hhbmdlXCJcclxuICAgICAgICAvPlxyXG4gICAgPC9kaXY+XHJcbjwvdGVtcGxhdGU+XHJcblxyXG48c2NyaXB0PlxyXG4gICAgZXhwb3J0IGRlZmF1bHQge1xyXG4gICAgICAgIG5hbWU6ICdQYWdpbmF0aW9uJyxcclxuICAgICAgICBwcm9wczoge1xyXG4gICAgICAgICAgICB0b3RhbDoge1xyXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXHJcbiAgICAgICAgICAgICAgICB0eXBlOiBOdW1iZXIsXHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiAwXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHBhZ2U6IHtcclxuICAgICAgICAgICAgICAgIHR5cGU6IE51bWJlcixcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IDFcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgbGltaXQ6IHtcclxuICAgICAgICAgICAgICAgIHR5cGU6IE51bWJlcixcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IDIwXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHBhZ2VTaXplczoge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogQXJyYXksXHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0KCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMTAsIDE1LCAyMCwgMzAsIDUwXVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY29tcHV0ZWQ6IHtcclxuICAgICAgICAgICAgY3VycmVudFBhZ2U6IHtcclxuICAgICAgICAgICAgICAgIGdldCgpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wYWdlXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgc2V0KHZhbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTpwYWdlJywgdmFsKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBwYWdlU2l6ZToge1xyXG4gICAgICAgICAgICAgICAgZ2V0KCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxpbWl0XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgc2V0KHZhbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTpsaW1pdCcsIHZhbClcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgdG90YWxDb3VudDoge1xyXG4gICAgICAgICAgICAgICAgZ2V0KCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRvdGFsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgc2V0KHZhbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTp0b3RhbCcsIHZhbClcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgbWV0aG9kczoge1xyXG4gICAgICAgICAgICBoYW5kbGVTaXplQ2hhbmdlKHZhbCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy4kZW1pdCgncGFnaW5hdGlvbicsIHsgcGFnZTogdGhpcy5jdXJyZW50UGFnZSwgbGltaXQ6IHZhbCB9KVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBoYW5kbGVDdXJyZW50Q2hhbmdlKHZhbCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy4kZW1pdCgncGFnaW5hdGlvbicsIHsgcGFnZTogdmFsLCBsaW1pdDogdGhpcy5wYWdlU2l6ZSB9KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG48L3NjcmlwdD5cclxuXHJcbjxzdHlsZSBsYW5nPVwic2Nzc1wiIHNjb3BlZD5cclxuLmVsLXBhZ2luYXRpb257XHJcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgICBtYXJnaW4tdG9wOiAyMHB4O1xyXG59XHJcbjwvc3R5bGU+IiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdGhyZWFkLWxvYWRlci9kaXN0L2Nqcy5qcyEuLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC04Mi51c2VbMV0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0B2dWUvdnVlLWxvYWRlci12MTUvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9JbmRleC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anNcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdGhyZWFkLWxvYWRlci9kaXN0L2Nqcy5qcyEuLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC04Mi51c2VbMV0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0B2dWUvdnVlLWxvYWRlci12MTUvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9JbmRleC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anNcIiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IHt9OyIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9taW5pLWNzcy1leHRyYWN0LXBsdWdpbi9kaXN0L2xvYWRlci5qcz8/Y2xvbmVkUnVsZVNldC02NC51c2VbMF0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanM/P2Nsb25lZFJ1bGVTZXQtNjQudXNlWzFdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9AdnVlL3Z1ZS1sb2FkZXItdjE1L2xpYi9sb2FkZXJzL3N0eWxlUG9zdExvYWRlci5qcyEuLi8uLi8uLi9ub2RlX21vZHVsZXMvcG9zdGNzcy1sb2FkZXIvZGlzdC9janMuanM/P2Nsb25lZFJ1bGVTZXQtNjQudXNlWzJdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcz8/Y2xvbmVkUnVsZVNldC02NC51c2VbM10hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0B2dWUvdnVlLWxvYWRlci12MTUvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9JbmRleC52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZpZD0yNmI3MGZiNCZwcm9kJmxhbmc9c2NzcyZzY29wZWQ9dHJ1ZVwiIiwiLyogZ2xvYmFscyBfX1ZVRV9TU1JfQ09OVEVYVF9fICovXG5cbi8vIElNUE9SVEFOVDogRG8gTk9UIHVzZSBFUzIwMTUgZmVhdHVyZXMgaW4gdGhpcyBmaWxlIChleGNlcHQgZm9yIG1vZHVsZXMpLlxuLy8gVGhpcyBtb2R1bGUgaXMgYSBydW50aW1lIHV0aWxpdHkgZm9yIGNsZWFuZXIgY29tcG9uZW50IG1vZHVsZSBvdXRwdXQgYW5kIHdpbGxcbi8vIGJlIGluY2x1ZGVkIGluIHRoZSBmaW5hbCB3ZWJwYWNrIHVzZXIgYnVuZGxlLlxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBub3JtYWxpemVDb21wb25lbnQoXG4gIHNjcmlwdEV4cG9ydHMsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmdW5jdGlvbmFsVGVtcGxhdGUsXG4gIGluamVjdFN0eWxlcyxcbiAgc2NvcGVJZCxcbiAgbW9kdWxlSWRlbnRpZmllciAvKiBzZXJ2ZXIgb25seSAqLyxcbiAgc2hhZG93TW9kZSAvKiB2dWUtY2xpIG9ubHkgKi9cbikge1xuICAvLyBWdWUuZXh0ZW5kIGNvbnN0cnVjdG9yIGV4cG9ydCBpbnRlcm9wXG4gIHZhciBvcHRpb25zID1cbiAgICB0eXBlb2Ygc2NyaXB0RXhwb3J0cyA9PT0gJ2Z1bmN0aW9uJyA/IHNjcmlwdEV4cG9ydHMub3B0aW9ucyA6IHNjcmlwdEV4cG9ydHNcblxuICAvLyByZW5kZXIgZnVuY3Rpb25zXG4gIGlmIChyZW5kZXIpIHtcbiAgICBvcHRpb25zLnJlbmRlciA9IHJlbmRlclxuICAgIG9wdGlvbnMuc3RhdGljUmVuZGVyRm5zID0gc3RhdGljUmVuZGVyRm5zXG4gICAgb3B0aW9ucy5fY29tcGlsZWQgPSB0cnVlXG4gIH1cblxuICAvLyBmdW5jdGlvbmFsIHRlbXBsYXRlXG4gIGlmIChmdW5jdGlvbmFsVGVtcGxhdGUpIHtcbiAgICBvcHRpb25zLmZ1bmN0aW9uYWwgPSB0cnVlXG4gIH1cblxuICAvLyBzY29wZWRJZFxuICBpZiAoc2NvcGVJZCkge1xuICAgIG9wdGlvbnMuX3Njb3BlSWQgPSAnZGF0YS12LScgKyBzY29wZUlkXG4gIH1cblxuICB2YXIgaG9va1xuICBpZiAobW9kdWxlSWRlbnRpZmllcikge1xuICAgIC8vIHNlcnZlciBidWlsZFxuICAgIGhvb2sgPSBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgICAgLy8gMi4zIGluamVjdGlvblxuICAgICAgY29udGV4dCA9XG4gICAgICAgIGNvbnRleHQgfHwgLy8gY2FjaGVkIGNhbGxcbiAgICAgICAgKHRoaXMuJHZub2RlICYmIHRoaXMuJHZub2RlLnNzckNvbnRleHQpIHx8IC8vIHN0YXRlZnVsXG4gICAgICAgICh0aGlzLnBhcmVudCAmJiB0aGlzLnBhcmVudC4kdm5vZGUgJiYgdGhpcy5wYXJlbnQuJHZub2RlLnNzckNvbnRleHQpIC8vIGZ1bmN0aW9uYWxcbiAgICAgIC8vIDIuMiB3aXRoIHJ1bkluTmV3Q29udGV4dDogdHJ1ZVxuICAgICAgaWYgKCFjb250ZXh0ICYmIHR5cGVvZiBfX1ZVRV9TU1JfQ09OVEVYVF9fICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBjb250ZXh0ID0gX19WVUVfU1NSX0NPTlRFWFRfX1xuICAgICAgfVxuICAgICAgLy8gaW5qZWN0IGNvbXBvbmVudCBzdHlsZXNcbiAgICAgIGlmIChpbmplY3RTdHlsZXMpIHtcbiAgICAgICAgaW5qZWN0U3R5bGVzLmNhbGwodGhpcywgY29udGV4dClcbiAgICAgIH1cbiAgICAgIC8vIHJlZ2lzdGVyIGNvbXBvbmVudCBtb2R1bGUgaWRlbnRpZmllciBmb3IgYXN5bmMgY2h1bmsgaW5mZXJyZW5jZVxuICAgICAgaWYgKGNvbnRleHQgJiYgY29udGV4dC5fcmVnaXN0ZXJlZENvbXBvbmVudHMpIHtcbiAgICAgICAgY29udGV4dC5fcmVnaXN0ZXJlZENvbXBvbmVudHMuYWRkKG1vZHVsZUlkZW50aWZpZXIpXG4gICAgICB9XG4gICAgfVxuICAgIC8vIHVzZWQgYnkgc3NyIGluIGNhc2UgY29tcG9uZW50IGlzIGNhY2hlZCBhbmQgYmVmb3JlQ3JlYXRlXG4gICAgLy8gbmV2ZXIgZ2V0cyBjYWxsZWRcbiAgICBvcHRpb25zLl9zc3JSZWdpc3RlciA9IGhvb2tcbiAgfSBlbHNlIGlmIChpbmplY3RTdHlsZXMpIHtcbiAgICBob29rID0gc2hhZG93TW9kZVxuICAgICAgPyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaW5qZWN0U3R5bGVzLmNhbGwoXG4gICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgKG9wdGlvbnMuZnVuY3Rpb25hbCA/IHRoaXMucGFyZW50IDogdGhpcykuJHJvb3QuJG9wdGlvbnMuc2hhZG93Um9vdFxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgOiBpbmplY3RTdHlsZXNcbiAgfVxuXG4gIGlmIChob29rKSB7XG4gICAgaWYgKG9wdGlvbnMuZnVuY3Rpb25hbCkge1xuICAgICAgLy8gZm9yIHRlbXBsYXRlLW9ubHkgaG90LXJlbG9hZCBiZWNhdXNlIGluIHRoYXQgY2FzZSB0aGUgcmVuZGVyIGZuIGRvZXNuJ3RcbiAgICAgIC8vIGdvIHRocm91Z2ggdGhlIG5vcm1hbGl6ZXJcbiAgICAgIG9wdGlvbnMuX2luamVjdFN0eWxlcyA9IGhvb2tcbiAgICAgIC8vIHJlZ2lzdGVyIGZvciBmdW5jdGlvbmFsIGNvbXBvbmVudCBpbiB2dWUgZmlsZVxuICAgICAgdmFyIG9yaWdpbmFsUmVuZGVyID0gb3B0aW9ucy5yZW5kZXJcbiAgICAgIG9wdGlvbnMucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyV2l0aFN0eWxlSW5qZWN0aW9uKGgsIGNvbnRleHQpIHtcbiAgICAgICAgaG9vay5jYWxsKGNvbnRleHQpXG4gICAgICAgIHJldHVybiBvcmlnaW5hbFJlbmRlcihoLCBjb250ZXh0KVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBpbmplY3QgY29tcG9uZW50IHJlZ2lzdHJhdGlvbiBhcyBiZWZvcmVDcmVhdGUgaG9va1xuICAgICAgdmFyIGV4aXN0aW5nID0gb3B0aW9ucy5iZWZvcmVDcmVhdGVcbiAgICAgIG9wdGlvbnMuYmVmb3JlQ3JlYXRlID0gZXhpc3RpbmcgPyBbXS5jb25jYXQoZXhpc3RpbmcsIGhvb2spIDogW2hvb2tdXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBleHBvcnRzOiBzY3JpcHRFeHBvcnRzLFxuICAgIG9wdGlvbnM6IG9wdGlvbnNcbiAgfVxufVxuIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9JbmRleC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MjZiNzBmYjQmc2NvcGVkPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9JbmRleC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anNcIlxuZXhwb3J0ICogZnJvbSBcIi4vSW5kZXgudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzXCJcbmltcG9ydCBzdHlsZTAgZnJvbSBcIi4vSW5kZXgudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9MjZiNzBmYjQmcHJvZCZsYW5nPXNjc3Mmc2NvcGVkPXRydWVcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0B2dWUvdnVlLWxvYWRlci12MTUvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIFwiMjZiNzBmYjRcIixcbiAgbnVsbFxuICBcbilcblxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCl7dmFyIF92bT10aGlzLF9jPV92bS5fc2VsZi5fYztyZXR1cm4gX2MoJ2Rpdicse3N0YXRpY0NsYXNzOlwicGFnZS10YWJsZVwiLGF0dHJzOntcImlkXCI6dGhpcy50YWJsZUlkfX0sW19jKCdkaXYnLHtzdGF0aWNDbGFzczpcInRhYmxlXCJ9LFtfYygnZWwtc2Nyb2xsYmFyJyx7c3RhdGljU3R5bGU6e1wiaGVpZ2h0XCI6XCIxMDAlXCJ9fSxbX2MoJ2VsLXRhYmxlJyxfdm0uX2Ioe3JlZjpfdm0udGFibGVJZCxhdHRyczp7XCJzdHJpcGVcIjpcIlwiLFwiZGF0YVwiOl92bS5saXN0LFwicm93LWtleVwiOl92bS5yb3dLZXksXCJsb2FkXCI6X3ZtLmxvYWQsXCJoaWdobGlnaHQtY3VycmVudC1yb3dcIjpfdm0uaGxpZ2h0Q3VycmVudFJvdyxcImRlZmF1bHQtZXhwYW5kLWFsbFwiOl92bS5kZWZhdWx0RXhwYW5kQWxsfSxvbjp7XCJzZWxlY3RcIjpfdm0uaGFuZGVsU2VsZWN0aW9uQ2hhbmdlLFwic2VsZWN0LWFsbFwiOl92bS5zZWxlY3RBbGwsXCJyb3ctY2xpY2tcIjpfdm0uaGFuZGxlUm93Q2xpY2ssXCJleHBhbmQtY2hhbmdlXCI6dmFsPT5fdm0uJGVtaXQoJ2V4cGFuZC1jaGFuZ2UnLCB2YWwpfX0sJ2VsLXRhYmxlJyxfdm0uJGF0dHJzLGZhbHNlKSxbKF92bS5zaG93Q2hlY2tCb3gpP19jKCdlbC10YWJsZS1jb2x1bW4nLHthdHRyczp7XCJ0eXBlXCI6XCJzZWxlY3Rpb25cIixcIndpZHRoXCI6XCI2MHB4XCIsXCJhbGlnblwiOlwiY2VudGVyXCJ9fSk6X3ZtLl9lKCksKF92bS5zb3J0TnVtKT9fYygnZWwtdGFibGUtY29sdW1uJyx7YXR0cnM6e1widHlwZVwiOlwiaW5kZXhcIixcIndpZHRoXCI6XCI2MHB4XCIsXCJsYWJlbFwiOlwi5bqP5Y+3XCIsXCJhbGlnblwiOlwiY2VudGVyXCJ9LHNjb3BlZFNsb3RzOl92bS5fdShbe2tleTpcImRlZmF1bHRcIixmbjpmdW5jdGlvbihzY29wZSl7cmV0dXJuIFsoX3ZtLnBhZ2UpP19jKCdzcGFuJyxbX3ZtLl92KF92bS5fcygoX3ZtLnBhcmFtcy5wYWdlLTEpKl92bS5wYXJhbXMubGltaXQrc2NvcGUuJGluZGV4KzEpKV0pOl9jKCdzcGFuJyxbX3ZtLl92KF92bS5fcyhzY29wZS4kaW5kZXgrMSkpXSldfX1dLG51bGwsZmFsc2UsMjc4NjAwODAyMSl9KTpfdm0uX2UoKSxfdm0uX3QoXCJkZWZhdWx0XCIpXSwyKV0sMSldLDEpLChfdm0ucGFnZSk/X2MoJ1BhZ2luYXRpb24nLHthdHRyczp7XCJ0b3RhbFwiOl92bS50b3RhbCxcInBhZ2VcIjpfdm0ucGFyYW1zLnBhZ2UsXCJsaW1pdFwiOl92bS5wYXJhbXMubGltaXR9LG9uOntcInVwZGF0ZTpwYWdlXCI6ZnVuY3Rpb24oJGV2ZW50KXtyZXR1cm4gX3ZtLiRzZXQoX3ZtLnBhcmFtcywgXCJwYWdlXCIsICRldmVudCl9LFwicGFnaW5hdGlvblwiOl92bS5nZXRMaXN0fX0pOl92bS5fZSgpXSwxKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCI8dGVtcGxhdGU+XHJcbiAgICA8ZGl2IGNsYXNzPVwicGFnZS10YWJsZVwiIDppZD1cInRoaXMudGFibGVJZFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZVwiPlxyXG4gICAgICAgICAgICA8ZWwtc2Nyb2xsYmFyIHN0eWxlPVwiaGVpZ2h0OiAxMDAlXCI+XHJcbiAgICAgICAgICAgICAgICA8ZWwtdGFibGVcclxuICAgICAgICAgICAgICAgICAgICB2LWJpbmQ9XCIkYXR0cnNcIlxyXG4gICAgICAgICAgICAgICAgICAgIHN0cmlwZVxyXG4gICAgICAgICAgICAgICAgICAgIDpyZWY9XCJ0YWJsZUlkXCJcclxuICAgICAgICAgICAgICAgICAgICA6ZGF0YT1cImxpc3RcIlxyXG4gICAgICAgICAgICAgICAgICAgIDpyb3cta2V5PVwicm93S2V5XCJcclxuICAgICAgICAgICAgICAgICAgICA6bG9hZD1cImxvYWRcIlxyXG4gICAgICAgICAgICAgICAgICAgIDpoaWdobGlnaHQtY3VycmVudC1yb3c9XCJobGlnaHRDdXJyZW50Um93XCJcclxuICAgICAgICAgICAgICAgICAgICBAc2VsZWN0PVwiaGFuZGVsU2VsZWN0aW9uQ2hhbmdlXCJcclxuICAgICAgICAgICAgICAgICAgICBAc2VsZWN0LWFsbD1cInNlbGVjdEFsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgOmRlZmF1bHQtZXhwYW5kLWFsbD1cImRlZmF1bHRFeHBhbmRBbGxcIlxyXG4gICAgICAgICAgICAgICAgICAgIEByb3ctY2xpY2s9XCJoYW5kbGVSb3dDbGlja1wiXHJcbiAgICAgICAgICAgICAgICAgICAgQGV4cGFuZC1jaGFuZ2U9XCJ2YWw9PiRlbWl0KCdleHBhbmQtY2hhbmdlJywgdmFsKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIDxlbC10YWJsZS1jb2x1bW4gdi1pZj1cInNob3dDaGVja0JveFwiIHR5cGU9XCJzZWxlY3Rpb25cIiB3aWR0aD1cIjYwcHhcIiBhbGlnbj1cImNlbnRlclwiPjwvZWwtdGFibGUtY29sdW1uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxlbC10YWJsZS1jb2x1bW4gdi1pZj1cInNvcnROdW1cIiB0eXBlPVwiaW5kZXhcIiB3aWR0aD1cIjYwcHhcIiBsYWJlbD1cIuW6j+WPt1wiIGFsaWduPVwiY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBzbG90LXNjb3BlPVwic2NvcGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHYtaWY9XCJwYWdlXCI+e3socGFyYW1zLnBhZ2UtMSkqcGFyYW1zLmxpbWl0K3Njb3BlLiRpbmRleCsxfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiB2LWVsc2U+e3tzY29wZS4kaW5kZXgrMX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZWwtdGFibGUtY29sdW1uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzbG90Pjwvc2xvdD5cclxuICAgICAgICAgICAgICAgIDwvZWwtdGFibGU+XHJcbiAgICAgICAgICAgIDwvZWwtc2Nyb2xsYmFyPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxQYWdpbmF0aW9uIHYtaWY9XCJwYWdlXCIgOnRvdGFsPVwidG90YWxcIiA6cGFnZS5zeW5jPVwicGFyYW1zLnBhZ2VcIiA6bGltaXQ9XCJwYXJhbXMubGltaXRcIiBAcGFnaW5hdGlvbj1cImdldExpc3RcIiAvPlxyXG4gICAgPC9kaXY+XHJcbjwvdGVtcGxhdGU+XHJcbjxzY3JpcHQ+XHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICAgIG5hbWU6ICdQYWdlVGFibGUnLFxyXG4gICAgcHJvcHM6IHtcclxuICAgICAgICAvLyDoh6rlrprkuYnmlbDmja5cclxuICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgIHR5cGU6IEFycmF5LFxyXG4gICAgICAgICAgICBkZWZhdWx0OiBudWxsXHJcbiAgICAgICAgfSxcclxuICAgICAgICAvLyDor7fmsYLlnLDlnYBcclxuICAgICAgICB1cmw6IHtcclxuICAgICAgICAgICAgdHlwZTogU3RyaW5nLFxyXG4gICAgICAgICAgICBkZWZhdWx0OiAnJ1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLy8g6K+35rGC5pa55byPXHJcbiAgICAgICAgbWV0aG9kOiB7XHJcbiAgICAgICAgICAgIHR5cGU6IFN0cmluZyxcclxuICAgICAgICAgICAgZGVmYXVsdDogJ2dldCdcclxuICAgICAgICB9LFxyXG4gICAgICAgIC8vIOaYr+WQpuaYvuekuuW6j+WPt1xyXG4gICAgICAgIHNvcnROdW06IHtcclxuICAgICAgICAgICAgdHlwZTogQm9vbGVhbixcclxuICAgICAgICAgICAgZGVmYXVsdDogdHJ1ZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLy8g5piv5ZCm5YiG6aG1XHJcbiAgICAgICAgcGFnZToge1xyXG4gICAgICAgICAgICB0eXBlOiBCb29sZWFuLFxyXG4gICAgICAgICAgICBkZWZhdWx0OiB0cnVlXHJcbiAgICAgICAgfSxcclxuICAgICAgICAvLyDmoJHlvaLooajmoLzml7bvvIzmmK/lkKblhajpg6jlsZXlvIBcclxuICAgICAgICBkZWZhdWx0RXhwYW5kQWxsOiB7XHJcbiAgICAgICAgICAgIHR5cGU6IEJvb2xlYW4sXHJcbiAgICAgICAgICAgIGRlZmF1bHQ6IGZhbHNlXHJcbiAgICAgICAgfSxcclxuICAgICAgICAvLyDliJ3lp4vor7fmsYLlj4LmlbBcclxuICAgICAgICBkZWZhdWx0UGFyYW1zOiB7XHJcbiAgICAgICAgICAgIHR5cGU6IE9iamVjdCxcclxuICAgICAgICAgICAgZGVmYXVsdDogKCk9Pih7fSlcclxuICAgICAgICB9LFxyXG4gICAgICAgIC8vIOm7mOiupOmAieS4reaVsOaNrlxyXG4gICAgICAgIGRlZmF1bHRTZWxlY3Q6IHtcclxuICAgICAgICAgICAgdHlwZTogQXJyYXksXHJcbiAgICAgICAgICAgIGRlZmF1bHQ6ICgpPT5bXVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcm93S2V5OiB7XHJcbiAgICAgICAgICAgIHR5cGU6IFN0cmluZyxcclxuICAgICAgICAgICAgZGVmYXVsdDogJ2lkJ1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgaGxpZ2h0Q3VycmVudFJvdzoge1xyXG4gICAgICAgICAgICB5cGU6IEJvb2xlYW4sXHJcbiAgICAgICAgICAgIGRlZmF1bHQ6IGZhbHNlXHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHdhdGNoOiB7XHJcbiAgICAgICAgZGF0YShuZXdWYWwpe1xyXG4gICAgICAgICAgICB0aGlzLmxpc3QgPSBuZXdWYWw7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBkZWZhdWx0U2VsZWN0OiB7XHJcbiAgICAgICAgICAgIGhhbmRsZXIoKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0Q2hlY2tlZCgpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBkZWVwOiB0cnVlXHJcbiAgICAgICAgfSxcclxuICAgICAgICBkZWZhdWx0UGFyYW1zKG5ld1ZhbCwgb2xkVmFsKXtcclxuICAgICAgICAgICAgZm9yKGNvbnN0IGtleSBpbiBuZXdWYWwpe1xyXG4gICAgICAgICAgICAgICAgaWYobmV3VmFsW2tleV0gIT0gb2xkVmFsW2tleV0pe1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGFyYW1zID0ge3BhZ2U6IDEsIGxpbWl0OiAxNSwgcGFyYW06IHsuLi5uZXdWYWx9fTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldExpc3QoKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICBkYXRhKCl7XHJcbiAgICAgICAgcmV0dXJue1xyXG4gICAgICAgICAgICBzaG93Q2hlY2tCb3g6IGZhbHNlLFxyXG4gICAgICAgICAgICBwYXJhbXM6IHtcclxuICAgICAgICAgICAgICAgIHBhZ2U6IDEsXHJcbiAgICAgICAgICAgICAgICBsaW1pdDogMTUsXHJcbiAgICAgICAgICAgICAgICBwYXJhbTogey4uLnRoaXMuZGVmYXVsdFBhcmFtc31cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgdG90YWw6IDAsXHJcbiAgICAgICAgICAgIGxpc3Q6IFtdLFxyXG4gICAgICAgICAgICB0YWJsZUlkOiBgdGFibGVfJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMiwgMTYpfWAsXHJcbiAgICAgICAgICAgIHNlbGVjdERhdGE6IHt9LFxyXG4gICAgICAgICAgICBzZWxlY3RJZHM6IFtdXHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcbiAgICBtb3VudGVkKCl7XHJcbiAgICAgICAgaWYodGhpcy4kbGlzdGVuZXJzWydzZWxlY3Rpb24tY2hhbmdlJ10pe1xyXG4gICAgICAgICAgICB0aGlzLnNob3dDaGVja0JveCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKHRoaXMuZGF0YSl7XHJcbiAgICAgICAgICAgIHRoaXMubGlzdCA9IHRoaXMuZGF0YTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IoY29uc3QgaXRlbSBvZiB0aGlzLmRlZmF1bHRTZWxlY3Qpe1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdERhdGFbaXRlbVt0aGlzLnJvd0tleV1dID0gaXRlbTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5nZXRMaXN0KCk7XHJcbiAgICB9LFxyXG4gICAgbWV0aG9kczoge1xyXG4gICAgICAgIC8vIOiOt+WPluaVsOaNrlxyXG4gICAgICAgIGdldExpc3QocGFnZU9wdGlvbil7XHJcbiAgICAgICAgICAgIGlmKCF0aGlzLnVybCl7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYocGFnZU9wdGlvbil7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBhcmFtcy5wYWdlID0gcGFnZU9wdGlvbi5wYWdlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wYXJhbXMubGltaXQgPSBwYWdlT3B0aW9uLmxpbWl0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKCF0aGlzLnBhZ2Upe1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMucGFyYW1zLnBhZ2U7XHJcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5wYXJhbXMubGltaXQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3Qgc3RvcmFnZVBhcmFtcyA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0odGhpcy4kcm91dGUucGF0aCk7XHJcbiAgICAgICAgICAgIGlmKHN0b3JhZ2VQYXJhbXMpe1xyXG4gICAgICAgICAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSh0aGlzLiRyb3V0ZS5wYXRoLCBKU09OLnN0cmluZ2lmeSh0aGlzLnBhcmFtcykpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHN3aXRjaCh0aGlzLm1ldGhvZCl7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdnZXQnOlxyXG4gICAgICAgICAgICAgICAgICAgIGh0dHAuZ2V0KHRoaXMudXJsLCB0aGlzLnBhcmFtcywgKHJlcyk9PntcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2V0RGF0YShyZXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAncG9zdCc6XHJcbiAgICAgICAgICAgICAgICAgICAgaHR0cC5wb3N0KHRoaXMudXJsLCB0aGlzLnBhcmFtcywgKHJlcyk9PntcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2V0RGF0YShyZXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgX3NldERhdGEocmVzKXtcclxuICAgICAgICAgICAgaWYodGhpcy5wYWdlKXtcclxuICAgICAgICAgICAgICAgIHRoaXMubGlzdCA9IHJlcy5kYXRhLnJlY29yZHM7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvdGFsID0gcmVzLmRhdGEudG90YWw7XHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgdGhpcy5saXN0ID0gcmVzLmRhdGE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5zZXRDaGVja2VkKCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAvLyDorr7nva7pu5jorqTpgInkuK1cclxuICAgICAgICBzZXRDaGVja2VkKCl7XHJcbiAgICAgICAgICAgIGlmKHRoaXMuZGVmYXVsdFNlbGVjdC5sZW5ndGg+MCl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdElkcyA9IHRoaXMuZGVmYXVsdFNlbGVjdC5tYXAoKGl0ZW0pPT5pdGVtW3RoaXMucm93S2V5XSk7XHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLnNob3dDaGVja0JveCAmJiB0aGlzLmxpc3Qpe1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJG5leHRUaWNrKCgpPT57XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIOm7mOiupOmAieS4reaVsOaNrlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZih0aGlzLiRyZWZzW3RoaXMudGFibGVJZF0pe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGNvbnN0IGl0ZW0gb2YgdGhpcy5saXN0KXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih0aGlzLnNlbGVjdElkcy5pbmNsdWRlcyhpdGVtW3RoaXMucm93S2V5XSkpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiRyZWZzW3RoaXMudGFibGVJZF0udG9nZ2xlUm93U2VsZWN0aW9uKGl0ZW0sIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdERhdGFbaXRlbVt0aGlzLnJvd0tleV1dID0gaXRlbTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kcmVmc1t0aGlzLnRhYmxlSWRdLnRvZ2dsZVJvd1NlbGVjdGlvbihpdGVtLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnNlbGVjdERhdGFbaXRlbVt0aGlzLnJvd0tleV1dO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0SWRzID0gW107XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdERhdGEgPSB7fTtcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMuJHJlZnNbdGhpcy50YWJsZUlkXSl7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yKGNvbnN0IGl0ZW0gb2YgdGhpcy5saXN0KXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kcmVmc1t0aGlzLnRhYmxlSWRdLnRvZ2dsZVJvd1NlbGVjdGlvbihpdGVtLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICAvLyDmnaHku7bmn6Xor6JcclxuICAgICAgICBxdWVyeShwYXJhbXM9e30pe1xyXG4gICAgICAgICAgICBpZihPYmplY3Qua2V5cyhwYXJhbXMpLmxlbmd0aD4wKXtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmFtID0gey4uLnRoaXMucGFyYW1zLnBhcmFtLCAuLi5wYXJhbXN9O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wYXJhbXMgPSB7Li4udGhpcy5wYXJhbXMsIHBhcmFtfTtcclxuICAgICAgICAgICAgICAgIHRoaXMucGFyYW1zLnBhZ2UgPSAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0TGlzdCgpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLy8g54K55Ye76KGMXHJcbiAgICAgICAgaGFuZGxlUm93Q2xpY2socm93LCBjb2x1bW4sIGV2ZW50KXtcclxuICAgICAgICAgICAgdGhpcy4kZW1pdCgncm93LWNsaWNrJywgcm93LCBjb2x1bW4sIGV2ZW50KTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGhhbmRlbFNlbGVjdGlvbkNoYW5nZShfLCByb3cpe1xyXG4gICAgICAgICAgICBpZih0aGlzLnNlbGVjdERhdGFbcm93W3RoaXMucm93S2V5XV0pe1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuc2VsZWN0RGF0YVtyb3dbdGhpcy5yb3dLZXldXTtcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdERhdGFbcm93W3RoaXMucm93S2V5XV0gPSByb3c7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3Qgc2VsZWN0aW9uTGlzdCA9IE9iamVjdC52YWx1ZXModGhpcy5zZWxlY3REYXRhKTtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RJZHMgPSBzZWxlY3Rpb25MaXN0Lm1hcCgoaXRlbSk9Pml0ZW1bdGhpcy5yb3dLZXldKTtcclxuICAgICAgICAgICAgdGhpcy4kZW1pdCgnc2VsZWN0aW9uLWNoYW5nZScsIHNlbGVjdGlvbkxpc3QpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLy8g5YWo6YCJL+WFqOS4jemAiVxyXG4gICAgICAgIHNlbGVjdEFsbChzZWxlY3Rpb24pe1xyXG4gICAgICAgICAgICBpZihzZWxlY3Rpb24ubGVuZ3RoPjApe1xyXG4gICAgICAgICAgICAgICAgZm9yKGNvbnN0IGl0ZW0gb2Ygc2VsZWN0aW9uKXtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdERhdGFbaXRlbVt0aGlzLnJvd0tleV1dID0gaXRlbTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICBmb3IoY29uc3QgaXRlbSBvZiB0aGlzLmxpc3Qpe1xyXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnNlbGVjdERhdGFbaXRlbVt0aGlzLnJvd0tleV1dO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGlvbkxpc3QgPSBPYmplY3QudmFsdWVzKHRoaXMuc2VsZWN0RGF0YSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0SWRzID0gc2VsZWN0aW9uTGlzdC5tYXAoKGl0ZW0pPT5pdGVtW3RoaXMucm93S2V5XSk7XHJcbiAgICAgICAgICAgIHRoaXMuJGVtaXQoJ3NlbGVjdGlvbi1jaGFuZ2UnLCBzZWxlY3Rpb25MaXN0KTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHNldEN1cnJlbnQoaW5kZXgpIHtcclxuICAgICAgICAgICAgdGhpcy4kcmVmc1t0aGlzLnRhYmxlSWRdLnNldEN1cnJlbnRSb3codGhpcy5saXN0W2luZGV4XSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBnZXREYXRhKCl7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxpc3Q7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBsb2FkKHRyZWUsIHRyZWVOb2RlLCByZXNvbHZlKXtcclxuICAgICAgICAgICAgdGhpcy4kZW1pdCgnbG9hZCcsIHRyZWUsIHRyZWVOb2RlLCByZXNvbHZlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07XHJcbjwvc2NyaXB0PlxyXG48c3R5bGUgbGFuZz1cInNjc3NcIiBzY29wZWQ+XHJcbiAgICAucGFnZS10YWJsZXtcclxuICAgICAgICBoZWlnaHQ6IDEwMCU7XHJcbiAgICAgICAgZmxleDogMSAxIGF1dG87XHJcbiAgICAgICAgb3ZlcmZsb3cteTogYXV0bztcclxuICAgICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XHJcbiAgICAgICAgLnRhYmxle1xyXG4gICAgICAgICAgICBmbGV4OiBhdXRvIDEgMTtcclxuICAgICAgICAgICAgb3ZlcmZsb3c6IGF1dG87XHJcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgL2RlZXAvLmVsLXRhYmxlIHRoZWFke1xyXG4gICAgICAgIGNvbG9yOiAjMzMzMzMzO1xyXG4gICAgfVxyXG4gICAgL2RlZXAvLmVsLXRhYmxlIHRoLmVsLXRhYmxlX19jZWxse1xyXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNGNUY3RkE7XHJcbiAgICB9XHJcbiAgICAvZGVlcC8uZWwtdGFibGUtLW1pbmkgLmVsLXRhYmxlX19jZWxse1xyXG4gICAgICAgIHBhZGRpbmc6IDNweCAwO1xyXG4gICAgfVxyXG48L3N0eWxlPiIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RocmVhZC1sb2FkZXIvZGlzdC9janMuanMhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtODIudXNlWzFdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9AdnVlL3Z1ZS1sb2FkZXItdjE1L2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vSW5kZXgudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RocmVhZC1sb2FkZXIvZGlzdC9janMuanMhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtODIudXNlWzFdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9AdnVlL3Z1ZS1sb2FkZXItdjE1L2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vSW5kZXgudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzXCIiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCB7fTsiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvbWluaS1jc3MtZXh0cmFjdC1wbHVnaW4vZGlzdC9sb2FkZXIuanM/P2Nsb25lZFJ1bGVTZXQtNjQudXNlWzBdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9jbG9uZWRSdWxlU2V0LTY0LnVzZVsxXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvQHZ1ZS92dWUtbG9hZGVyLXYxNS9saWIvbG9hZGVycy9zdHlsZVBvc3RMb2FkZXIuanMhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9jbG9uZWRSdWxlU2V0LTY0LnVzZVsyXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanM/P2Nsb25lZFJ1bGVTZXQtNjQudXNlWzNdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9AdnVlL3Z1ZS1sb2FkZXItdjE1L2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vSW5kZXgudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9MmRhOTJjODEmcHJvZCZsYW5nPXNjc3Mmc2NvcGVkPXRydWVcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vSW5kZXgudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTJkYTkyYzgxJnNjb3BlZD10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vSW5kZXgudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzXCJcbmV4cG9ydCAqIGZyb20gXCIuL0luZGV4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qc1wiXG5pbXBvcnQgc3R5bGUwIGZyb20gXCIuL0luZGV4LnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPTJkYTkyYzgxJnByb2QmbGFuZz1zY3NzJnNjb3BlZD10cnVlXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9AdnVlL3Z1ZS1sb2FkZXItdjE1L2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBcIjJkYTkyYzgxXCIsXG4gIG51bGxcbiAgXG4pXG5cbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpe3ZhciBfdm09dGhpcyxfYz1fdm0uX3NlbGYuX2M7cmV0dXJuIF9jKCdlbC1kaWFsb2cnLF92bS5fYih7ZGlyZWN0aXZlczpbe25hbWU6XCJkaWFsb2dEcmFnXCIscmF3TmFtZTpcInYtZGlhbG9nRHJhZ1wifV0sc3RhdGljU3R5bGU6e1wibWFyZ2luLXRvcFwiOlwiMFwifSxhdHRyczp7XCJ0aXRsZVwiOl92bS50aXRsZSxcInZpc2libGVcIjpfdm0uZGlhbG9nVmlzaWJsZSxcImJlZm9yZS1jbG9zZVwiOl92bS5oYW5kbGVDbG9zZSxcImNlbnRlclwiOlwiXCIsXCJjbG9zZS1vbi1jbGljay1tb2RhbFwiOmZhbHNlLFwic2hvdy1jbG9zZVwiOl92bS5zaG93Q2xvc2UsXCJhcHBlbmQtdG8tYm9keVwiOlwiXCJ9fSwnZWwtZGlhbG9nJyxfdm0uJGF0dHJzLGZhbHNlKSxbX2MoJ2Rpdicse3N0YXRpY1N0eWxlOntcIm92ZXJmbG93LXlcIjpcImF1dG9cIixcIm92ZXJmbG93LXhcIjpcImhpZGRlblwiLFwicG9zaXRpb25cIjpcInJlbGF0aXZlXCJ9LHN0eWxlOih7bWF4SGVpZ2h0OiBfdm0ubWF4SGVpZ2h0LCBtaW5IZWlnaHQ6IF92bS5taW5IZWlnaHR9KX0sW192bS5fdChcImRlZmF1bHRcIildLDIpLF9jKCdkaXYnLHtzdGF0aWNTdHlsZTp7XCJ0ZXh0LWFsaWduXCI6XCJjZW50ZXJcIn0sYXR0cnM6e1wic2xvdFwiOlwiZm9vdGVyXCJ9LHNsb3Q6XCJmb290ZXJcIn0sW192bS5fdChcImZvb3RlclwiKV0sMildKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCIvLyB2LWRpYWxvZ0RyYWc6IOW8ueeql+aLluaLvVxyXG5pbXBvcnQgVnVlIGZyb20gJ3Z1ZSc7XHJcblZ1ZS5kaXJlY3RpdmUoJ2RpYWxvZ0RyYWcnLCB7XHJcbiAgICBiaW5kKGVsKSB7XHJcblx0XHRjb25zdCBkaWFsb2dIZWFkZXJFbCA9IGVsLnF1ZXJ5U2VsZWN0b3IoJy5lbC1kaWFsb2dfX2hlYWRlcicpO1xyXG5cdFx0Y29uc3QgZHJhZ0RvbSA9IGVsLnF1ZXJ5U2VsZWN0b3IoJy5lbC1kaWFsb2cnKTtcclxuXHRcdGRpYWxvZ0hlYWRlckVsLnN0eWxlLmN1cnNvciA9ICdtb3ZlJztcclxuXHJcblx0XHQvLyDojrflj5bljp/mnInlsZ7mgKcgaWUgZG9t5YWD57SgLmN1cnJlbnRTdHlsZSDngavni5DosLfmrYwgd2luZG93LmdldENvbXB1dGVkU3R5bGUoZG9t5YWD57SgLCBudWxsKTtcclxuXHRcdGNvbnN0IHN0eSA9IGRyYWdEb20uY3VycmVudFN0eWxlIHx8IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGRyYWdEb20sIG51bGwpO1xyXG5cclxuXHRcdGRpYWxvZ0hlYWRlckVsLm9ubW91c2Vkb3duID0gKGV2ZW50KT0+e1xyXG5cdFx0XHQvLyDpvKDmoIfmjInkuIvvvIzorqHnrpflvZPliY3lhYPntKDot53nprvlj6/op4bljLrnmoTot53nprtcclxuXHRcdFx0Y29uc3QgZGlzWCA9IGV2ZW50LmNsaWVudFggLSBkaWFsb2dIZWFkZXJFbC5vZmZzZXRMZWZ0O1xyXG5cdFx0XHRjb25zdCBkaXNZID0gZXZlbnQuY2xpZW50WSAtIGRpYWxvZ0hlYWRlckVsLm9mZnNldFRvcDtcclxuXHJcblx0XHRcdC8vIOiOt+WPluWIsOeahOWAvOW4pnB4IOato+WImeWMuemFjeabv+aNolxyXG5cdFx0XHRsZXQgc3R5TD1udWxsO1xyXG5cdFx0XHRsZXQgc3R5VD1udWxsO1xyXG5cclxuXHRcdFx0Ly8g5rOo5oSP5ZyoaWXkuK0g56ys5LiA5qyh6I635Y+W5Yiw55qE5YC85Li657uE5Lu26Ieq5bimNTAlIOenu+WKqOS5i+WQjui1i+WAvOS4unB4XHJcblx0XHRcdGlmIChzdHkubGVmdC5pbmNsdWRlcygnXFwlJykpIHtcclxuXHRcdFx0XHRzdHlMID0gK2RvY3VtZW50LmJvZHkuY2xpZW50V2lkdGggKiAoK3N0eS5sZWZ0LnJlcGxhY2UoL1xcJS9nLCAnJykgLyAxMDApO1xyXG5cdFx0XHRcdHN0eVQgPSArZG9jdW1lbnQuYm9keS5jbGllbnRIZWlnaHQgKiAoK3N0eS50b3AucmVwbGFjZSgvXFwlL2csICcnKSAvIDEwMCk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0c3R5TCA9ICtzdHkubGVmdC5yZXBsYWNlKC9cXHB4L2csICcnKTtcclxuXHRcdFx0XHRzdHlUID0gK3N0eS50b3AucmVwbGFjZSgvXFxweC9nLCAnJyk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGRvY3VtZW50Lm9ubW91c2Vtb3ZlID0gZnVuY3Rpb24oZSkge1xyXG5cdFx0XHRcdC8vIOmAmui/h+S6i+S7tuWnlOaJmO+8jOiuoeeul+enu+WKqOeahOi3neemu1xyXG5cdFx0XHRcdGNvbnN0IGwgPSBlLmNsaWVudFggLSBkaXNYO1xyXG5cdFx0XHRcdGNvbnN0IHQgPSBlLmNsaWVudFkgLSBkaXNZO1xyXG5cclxuXHRcdFx0XHQvLyDnp7vliqjlvZPliY3lhYPntKBcclxuXHRcdFx0XHRkcmFnRG9tLnN0eWxlLmxlZnQgPSBgJHtsICsgc3R5TH1weGA7XHJcblx0XHRcdFx0ZHJhZ0RvbS5zdHlsZS50b3AgPSBgJHt0ICsgc3R5VH1weGA7XHJcblx0XHRcdH07XHJcblxyXG5cdFx0XHRkb2N1bWVudC5vbm1vdXNldXAgPSBmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRkb2N1bWVudC5vbm1vdXNlbW92ZSA9IG51bGw7XHJcblx0XHRcdFx0ZG9jdW1lbnQub25tb3VzZXVwID0gbnVsbDtcclxuXHRcdFx0fTtcclxuXHRcdH07XHJcblx0fVxyXG59KTtcclxuXHJcblZ1ZS5kaXJlY3RpdmUoJ3JlbW92ZUFyaWFIaWRkZW4nLCB7XHJcblx0YmluZChlbCkge1xyXG5cdFx0bGV0IGFyaWFFbHMgPSBlbC5xdWVyeVNlbGVjdG9yQWxsKCcuZWwtcmFkaW9fX29yaWdpbmFsJyk7XHJcblx0XHRhcmlhRWxzLmZvckVhY2goKGl0ZW0pPT57XHJcblx0XHRcdGl0ZW0ucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWhpZGRlbicpO1xyXG5cdFx0fSk7XHJcblx0fVxyXG59KTsiLCI8dGVtcGxhdGU+XHJcbiAgICA8ZWwtZGlhbG9nIHYtYmluZD1cIiRhdHRyc1wiIDp0aXRsZT1cInRpdGxlXCIgOnZpc2libGU9XCJkaWFsb2dWaXNpYmxlXCIgdi1kaWFsb2dEcmFnIDpiZWZvcmUtY2xvc2U9XCJoYW5kbGVDbG9zZVwiIGNlbnRlciA6Y2xvc2Utb24tY2xpY2stbW9kYWw9XCJmYWxzZVwiIDpzaG93LWNsb3NlPVwic2hvd0Nsb3NlXCIgYXBwZW5kLXRvLWJvZHkgc3R5bGU9XCJtYXJnaW4tdG9wOiAwO1wiPlxyXG4gICAgICAgIDxkaXYgc3R5bGU9XCJvdmVyZmxvdy15OiBhdXRvO292ZXJmbG93LXg6IGhpZGRlbjtwb3NpdGlvbjogcmVsYXRpdmU7XCIgOnN0eWxlPVwie21heEhlaWdodCwgbWluSGVpZ2h0fVwiPlxyXG4gICAgICAgICAgICA8c2xvdD48L3Nsb3Q+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBzbG90PVwiZm9vdGVyXCIgc3R5bGU9XCJ0ZXh0LWFsaWduOiBjZW50ZXI7XCI+XHJcbiAgICAgICAgICAgIDxzbG90IG5hbWU9XCJmb290ZXJcIj48L3Nsb3Q+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2VsLWRpYWxvZz5cclxuPC90ZW1wbGF0ZT5cclxuXHJcbjxzY3JpcHQ+XHJcbmltcG9ydCAnLi9kaWFsb2ctZHJhZyc7XHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICAgIG5hbWU6ICdEaWFsb2cnLFxyXG4gICAgcHJvcHM6IHtcclxuICAgICAgICB0aXRsZToge1xyXG4gICAgICAgICAgICB0eXBlOiBTdHJpbmcsXHJcbiAgICAgICAgICAgIGRlZmF1bHQ6ICfmj5DnpLonXHJcbiAgICAgICAgfSxcclxuICAgICAgICBtYXhIZWlnaHQ6IHtcclxuICAgICAgICAgICAgdHlwZTogU3RyaW5nLFxyXG4gICAgICAgICAgICBkZWZhdWx0OiAnNjB2aCdcclxuICAgICAgICB9LFxyXG4gICAgICAgIG1pbkhlaWdodDoge1xyXG4gICAgICAgICAgICB0eXBlOiBTdHJpbmcsXHJcbiAgICAgICAgICAgIGRlZmF1bHQ6ICcxNTBweCdcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgZGF0YSgpe1xyXG4gICAgICAgIHJldHVybntcclxuICAgICAgICAgICAgZGlhbG9nVmlzaWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgc2hvd0Nsb3NlOiBmYWxzZVxyXG4gICAgICAgIH07XHJcbiAgICB9LFxyXG4gICAgbW91bnRlZCgpe1xyXG4gICAgICAgIGlmKHRoaXMuJGxpc3RlbmVyc1snY2xvc2UnXSl7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd0Nsb3NlID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgbWV0aG9kczoge1xyXG4gICAgICAgIGhhbmRsZUNsb3NlKCl7XHJcbiAgICAgICAgICAgIHRoaXMuJGVtaXQoJ2Nsb3NlJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59O1xyXG48L3NjcmlwdD5cclxuXHJcbjxzdHlsZSBsYW5nPVwic2Nzc1wiIHNjb3BlZD5cclxuL2RlZXAvLmVsLWRpYWxvZ19faGVhZGVye1xyXG4gICAgcGFkZGluZzogMTVweCAyMHB4O1xyXG59XHJcbi9kZWVwLy5lbC1kaWFsb2ctLWNlbnRlciAuZWwtZGlhbG9nX19ib2R5e1xyXG4gICAgcGFkZGluZzogMjBweDtcclxufVxyXG48L3N0eWxlPiIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RocmVhZC1sb2FkZXIvZGlzdC9janMuanMhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtODIudXNlWzFdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9AdnVlL3Z1ZS1sb2FkZXItdjE1L2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vSW5kZXgudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RocmVhZC1sb2FkZXIvZGlzdC9janMuanMhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtODIudXNlWzFdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9AdnVlL3Z1ZS1sb2FkZXItdjE1L2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vSW5kZXgudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzXCIiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCB7fTsiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvbWluaS1jc3MtZXh0cmFjdC1wbHVnaW4vZGlzdC9sb2FkZXIuanM/P2Nsb25lZFJ1bGVTZXQtNjQudXNlWzBdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9jbG9uZWRSdWxlU2V0LTY0LnVzZVsxXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvQHZ1ZS92dWUtbG9hZGVyLXYxNS9saWIvbG9hZGVycy9zdHlsZVBvc3RMb2FkZXIuanMhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9jbG9uZWRSdWxlU2V0LTY0LnVzZVsyXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanM/P2Nsb25lZFJ1bGVTZXQtNjQudXNlWzNdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9AdnVlL3Z1ZS1sb2FkZXItdjE1L2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vSW5kZXgudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9NDE0ODc2MmUmcHJvZCZsYW5nPXNjc3Mmc2NvcGVkPXRydWVcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vSW5kZXgudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTQxNDg3NjJlJnNjb3BlZD10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vSW5kZXgudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzXCJcbmV4cG9ydCAqIGZyb20gXCIuL0luZGV4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qc1wiXG5pbXBvcnQgc3R5bGUwIGZyb20gXCIuL0luZGV4LnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPTQxNDg3NjJlJnByb2QmbGFuZz1zY3NzJnNjb3BlZD10cnVlXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9AdnVlL3Z1ZS1sb2FkZXItdjE1L2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBcIjQxNDg3NjJlXCIsXG4gIG51bGxcbiAgXG4pXG5cbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpe3ZhciBfdm09dGhpcyxfYz1fdm0uX3NlbGYuX2M7cmV0dXJuIF9jKCdlbC1jYXJkJyx7c3RhdGljU3R5bGU6e1wiaGVpZ2h0XCI6XCJjYWxjKDEwMCUgLSAycHgpXCIsXCJvdmVyZmxvd1wiOlwiYXV0b1wifSxhdHRyczp7XCJzaGFkb3dcIjpfdm0uc2hhZG93fX0sW19jKCdkaXYnLHtzdGF0aWNDbGFzczpcImNsZWFyZml4XCIsYXR0cnM6e1wic2xvdFwiOlwiaGVhZGVyXCJ9LHNsb3Q6XCJoZWFkZXJcIn0sW19jKCdkaXYnLHtzdGF0aWNTdHlsZTp7XCJmb250LXNpemVcIjpcIjE2cHhcIn19LFsoX3ZtLiRzbG90c1snY2FyZC10aXRsZSddKT9bX3ZtLl90KFwiY2FyZC10aXRsZVwiKV06W192bS5fdihcIiBcIitfdm0uX3MoX3ZtLnRpdGxlKStcIiBcIildXSwyKSxfYygnZGl2Jyx7c3RhdGljU3R5bGU6e1wiZmxleFwiOlwiMVwiLFwicG9zaXRpb25cIjpcInJlbGF0aXZlXCJ9fSxbX2MoJ2Rpdicse3N0YXRpY1N0eWxlOntcInBvc2l0aW9uXCI6XCJhYnNvbHV0ZVwiLFwicmlnaHRcIjpcIjBweFwiLFwidG9wXCI6XCItMTRweFwiLFwid2lkdGhcIjpcIjEwMCVcIixcInRleHQtYWxpZ25cIjpcInJpZ2h0XCJ9fSxbX3ZtLl90KFwiY2FyZC10b29sc1wiKV0sMildKV0pLF92bS5fdChcImRlZmF1bHRcIildLDIpXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsIjx0ZW1wbGF0ZT5cclxuICAgIDxlbC1jYXJkIDpzaGFkb3c9XCJzaGFkb3dcIiBzdHlsZT1cImhlaWdodDogY2FsYygxMDAlIC0gMnB4KTtvdmVyZmxvdzogYXV0bztcIj5cclxuICAgICAgICA8ZGl2IHNsb3Q9XCJoZWFkZXJcIiBjbGFzcz1cImNsZWFyZml4XCI+XHJcbiAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJmb250LXNpemU6IDE2cHg7XCI+XHJcbiAgICAgICAgICAgICAgICA8dGVtcGxhdGUgdi1pZj1cIiRzbG90c1snY2FyZC10aXRsZSddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNsb3QgbmFtZT1cImNhcmQtdGl0bGVcIj48L3Nsb3Q+XHJcbiAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgPHRlbXBsYXRlIHYtZWxzZT5cclxuICAgICAgICAgICAgICAgICAgICB7eyB0aXRsZSB9fVxyXG4gICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJmbGV4OiAxO3Bvc2l0aW9uOiByZWxhdGl2ZTtcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJwb3NpdGlvbjogYWJzb2x1dGU7cmlnaHQ6IDBweDt0b3A6IC0xNHB4O3dpZHRoOiAxMDAlO3RleHQtYWxpZ246IHJpZ2h0O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzbG90IG5hbWU9XCJjYXJkLXRvb2xzXCI+PC9zbG90PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxzbG90Pjwvc2xvdD5cclxuICAgIDwvZWwtY2FyZD5cclxuPC90ZW1wbGF0ZT5cclxuXHJcbjxzY3JpcHQ+XHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICAgIG5hbWU6ICdDYXJkJyxcclxuICAgIHByb3BzOiB7XHJcbiAgICAgICAgdGl0bGU6IHtcclxuICAgICAgICAgICAgdHlwZTogU3RyaW5nLFxyXG4gICAgICAgICAgICBkZWZhdWx0OiAnJ1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc2hhZG93OiB7XHJcbiAgICAgICAgICAgIHR5cGU6IFN0cmluZyxcclxuICAgICAgICAgICAgZGVmYXVsdDogJydcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07XHJcbjwvc2NyaXB0PlxyXG5cclxuPHN0eWxlIGxhbmc9XCJzY3NzXCIgc2NvcGVkPlxyXG4uY2xlYXJmaXh7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxufVxyXG48L3N0eWxlPiIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RocmVhZC1sb2FkZXIvZGlzdC9janMuanMhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtODIudXNlWzFdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9AdnVlL3Z1ZS1sb2FkZXItdjE1L2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vSW5kZXgudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RocmVhZC1sb2FkZXIvZGlzdC9janMuanMhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtODIudXNlWzFdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9AdnVlL3Z1ZS1sb2FkZXItdjE1L2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vSW5kZXgudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzXCIiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCB7fTsiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvbWluaS1jc3MtZXh0cmFjdC1wbHVnaW4vZGlzdC9sb2FkZXIuanM/P2Nsb25lZFJ1bGVTZXQtNjQudXNlWzBdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9jbG9uZWRSdWxlU2V0LTY0LnVzZVsxXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvQHZ1ZS92dWUtbG9hZGVyLXYxNS9saWIvbG9hZGVycy9zdHlsZVBvc3RMb2FkZXIuanMhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9jbG9uZWRSdWxlU2V0LTY0LnVzZVsyXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanM/P2Nsb25lZFJ1bGVTZXQtNjQudXNlWzNdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9AdnVlL3Z1ZS1sb2FkZXItdjE1L2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vSW5kZXgudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9MGM1ZGUwNmUmcHJvZCZsYW5nPXNjc3Mmc2NvcGVkPXRydWVcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vSW5kZXgudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTBjNWRlMDZlJnNjb3BlZD10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vSW5kZXgudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzXCJcbmV4cG9ydCAqIGZyb20gXCIuL0luZGV4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qc1wiXG5pbXBvcnQgc3R5bGUwIGZyb20gXCIuL0luZGV4LnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPTBjNWRlMDZlJnByb2QmbGFuZz1zY3NzJnNjb3BlZD10cnVlXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9AdnVlL3Z1ZS1sb2FkZXItdjE1L2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBcIjBjNWRlMDZlXCIsXG4gIG51bGxcbiAgXG4pXG5cbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpe3ZhciBfdm09dGhpcyxfYz1fdm0uX3NlbGYuX2M7cmV0dXJuIChfdm0uc2hvdyk/X2MoJ2RpdicsWyhfdm0uZGF0YS5sZW5ndGggPiAwKT9fdm0uX2woKF92bS5kYXRhKSxmdW5jdGlvbihpdGVtKXtyZXR1cm4gX2MoJ2F1dGgtdHJlZScse2tleTppdGVtLmlkLGF0dHJzOntcImRhdGFcIjppdGVtLFwicHJvcHNcIjpfdm0ucHJvcHN9LG9uOntcIm9uLW5vZGUtZXhwYW5kXCI6KGRhdGEpPT5fdm0ub25FeHBhbmQoZGF0YSksXCJvbi1ub2RlLWNoZWNrZWRcIjooZGF0YSk9Pl92bS5vbkNoZWNrZWQoZGF0YSl9fSl9KTpfdm0uX2UoKV0sMik6X3ZtLl9lKClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwiLy8g5piv5ZCm5pyJ5a2Q6IqC54K5XG5jb25zdCBoYXNDaGlsZHJlbiA9IChkYXRhKT0+e1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KGRhdGEuY2hpbGRyZW4pICYmIGRhdGEuY2hpbGRyZW4ubGVuZ3RoID4gMDtcbn07XG5cbi8vIOWIm+W7uuiKgueCuVxuZXhwb3J0IGNvbnN0IHJlbmRlckxhYmVsID0gKGgsIGRhdGEsIGNvbnRleHQpPT57XG4gICAgY29uc3Qge3Byb3BzLCBsaXN0ZW5lcnN9ID0gY29udGV4dDtcbiAgICBjb25zdCBjbGlja0hhbmRsZXIgPSBsaXN0ZW5lcnNbJ29uLW5vZGUtZXhwYW5kJ107XG4gICAgY29uc3QgY2hlY2tlZEhhbmRsZXIgPSBsaXN0ZW5lcnNbJ29uLW5vZGUtY2hlY2tlZCddO1xuICAgIGNvbnN0IGxhYmVsID0gZGF0YVtwcm9wcy5wcm9wcy5sYWJlbF07XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IFtdO1xuICAgIGNoaWxkTm9kZXMucHVzaChsYWJlbCk7XG5cbiAgICBjb25zdCBpY29DbGFzcyA9IFtdO1xuICAgIGlmKGhhc0NoaWxkcmVuKGRhdGEpKXtcbiAgICAgICAgaWYoZGF0YS5leHBhbmQpe1xuICAgICAgICAgICAgaWNvQ2xhc3MucHVzaCgnaWNvbi1pY29uLWR3b24nKTtcbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICBpY29DbGFzcy5wdXNoKCdpY29uLWljb25fcmlnaHQnKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaCgnbGknLCB7XG4gICAgfSwgW1xuICAgICAgICBoKCdpJywge1xuICAgICAgICAgICAgZG9tUHJvcHM6IHtcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU6IGBpY29uZm9udCAke2ljb0NsYXNzLmpvaW4oJyAnKX1gXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAgICAgICBtYXJnaW5MZWZ0OiBgJHsxNCpkYXRhLl9sZXZlfXB4YCxcbiAgICAgICAgICAgICAgICBmb250U2l6ZTogJzEycHgnLFxuICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoLTJweCknLFxuICAgICAgICAgICAgICAgIGNvbG9yOiAnIzY2NidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgIGNsaWNrOiAoKT0+e1xuICAgICAgICAgICAgICAgICAgICBjbGlja0hhbmRsZXIoZGF0YSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LCAnJyksXG4gICAgICAgIGgoJ2knLCB7XG4gICAgICAgICAgICBkb21Qcm9wczoge1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogZGF0YS5jaGVja2VkPydpY29uZm9udCBpY29uLWZhbmd4aW5neHVhbnpob25nZmlsJzonaWNvbmZvbnQgaWNvbi1mYW5neGluZ3dlaXh1YW56aG9uZydcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgICAgIGNvbG9yOiAnIzY2NidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgIGNsaWNrOiAoKT0+e1xuICAgICAgICAgICAgICAgICAgICBjaGVja2VkSGFuZGxlcihkYXRhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sICcnKSxcbiAgICAgICAgaCgnc3BhbicsIHtcblxuICAgICAgICB9LCBjaGlsZE5vZGVzKVxuICAgIF0pO1xufTtcblxuLy8g5Yib5bu6IG5vZGUg5a2Q6IqC54K5XG5leHBvcnQgY29uc3QgcmVuZGVyQ2hpbGRyZW4gPSAoaCwgbGlzdCwgZXhwYW5kLCBjb250ZXh0KT0+e1xuICAgIGlmIChBcnJheS5pc0FycmF5KGxpc3QpICYmIGxpc3QubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gbGlzdC5tYXAoaXRlbT0+e1xuICAgICAgICAgICAgcmV0dXJuIHJlbmRlck5vZGUoaCwgaXRlbSwgY29udGV4dCk7XG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgY2xzID0gWyd0cmVlLW5vZGUtY2hpbGRyZW4nXTtcbiAgICAgICAgaWYoIWV4cGFuZCl7XG4gICAgICAgICAgICBjbHMucHVzaCgnZXhwYW5kJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGgoJ2RpdicsIHtcbiAgICAgICAgICAgIGRvbVByb3BzOiB7XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBjbHMuam9pbignICcpXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIGNoaWxkcmVuKTtcbiAgICB9XG4gICAgcmV0dXJuICcnO1xufTtcblxuZXhwb3J0IGNvbnN0IHJlbmRlck5vZGUgPSAoaCwgZGF0YSwgY29udGV4dCk9PntcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gW107XG4gICAgY2hpbGROb2Rlcy5wdXNoKHJlbmRlckxhYmVsKGgsIGRhdGEsIGNvbnRleHQpKTtcbiAgICBjb25zdCBjaGlsZHJlbiA9IGRhdGEuY2hpbGRyZW47XG4gICAgaWYoaGFzQ2hpbGRyZW4oZGF0YSkpe1xuICAgICAgICBjaGlsZE5vZGVzLnB1c2gocmVuZGVyQ2hpbGRyZW4oaCwgY2hpbGRyZW4sIGRhdGEuZXhwYW5kLCBjb250ZXh0KSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGgoJ3VsJywge1xuICAgICAgICBkb21Qcm9wczoge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAnbm9kZSdcbiAgICAgICAgfVxuICAgIH0sIGNoaWxkTm9kZXMpO1xufTtcblxuZXhwb3J0IGNvbnN0IHJlbmRlciA9IChoLCBjb250ZXh0KT0+e1xuICAgIGNvbnN0IHtwcm9wc30gPSBjb250ZXh0O1xuICAgIHJldHVybiByZW5kZXJOb2RlKGgsIHByb3BzLmRhdGEsIGNvbnRleHQpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgcmVuZGVyOyIsIjx0ZW1wbGF0ZT5cbiAgICA8ZGl2IHYtaWY9XCJzaG93XCI+XG4gICAgICAgIDx0ZW1wbGF0ZSB2LWlmPVwiZGF0YS5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgICA8YXV0aC10cmVlIHYtZm9yPVwiaXRlbSBpbiBkYXRhXCJcbiAgICAgICAgICAgICAgICA6a2V5PVwiaXRlbS5pZFwiXG4gICAgICAgICAgICAgICAgOmRhdGE9XCJpdGVtXCJcbiAgICAgICAgICAgICAgICA6cHJvcHM9XCJwcm9wc1wiXG4gICAgICAgICAgICAgICAgQG9uLW5vZGUtZXhwYW5kPVwiKGRhdGEpPT5vbkV4cGFuZChkYXRhKVwiXG4gICAgICAgICAgICAgICAgQG9uLW5vZGUtY2hlY2tlZD1cIihkYXRhKT0+b25DaGVja2VkKGRhdGEpXCJcbiAgICAgICAgICAgID48L2F1dGgtdHJlZT5cbiAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgcmVuZGVyIGZyb20gJy4vdHJlZSc7XG5leHBvcnQgZGVmYXVsdCB7XG4gICAgbmFtZTogJ1RyZWUnLFxuICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgQXV0aFRyZWU6IHtcbiAgICAgICAgICAgIHJlbmRlcixcbiAgICAgICAgICAgIGZ1bmN0aW9uYWw6IHRydWVcbiAgICAgICAgfVxuICAgIH0sXG4gICAgcHJvcHM6IHtcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgdHlwZTogQXJyYXksXG4gICAgICAgICAgICBkZWZhdWx0OiAoKT0+e1xuICAgICAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgICAgIGRlZmF1bHQ6ICgpPT57XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICduYW1lJ1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGRhdGEoKXtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5hbWU6IDEsXG4gICAgICAgICAgICBzaG93OiBmYWxzZSxcbiAgICAgICAgICAgIGxpc3Q6IFtdLFxuICAgICAgICAgICAgY2hlY2tlZDogZmFsc2VcbiAgICAgICAgfTtcbiAgICB9LFxuICAgIG1ldGhvZHM6IHtcbiAgICAgICAgaW5pdChkYXRhLCBsZXZlKXtcbiAgICAgICAgICAgIGRhdGEuX2xldmUgPSBsZXZlO1xuICAgICAgICAgICAgaWYoZGF0YS5jaGlsZHJlbiAmJiBkYXRhLmNoaWxkcmVuLmxlbmd0aCA+IDApe1xuICAgICAgICAgICAgICAgIGxldmUrKztcbiAgICAgICAgICAgICAgICBmb3IoY29uc3QgaSBpbiBkYXRhLmNoaWxkcmVuKXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbml0KGRhdGEuY2hpbGRyZW5baV0sIGxldmUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgLy8g5Yi35pawXG4gICAgICAgIHJlZnJlc2goKXtcbiAgICAgICAgICAgIHRoaXMuc2hvdyA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy4kbmV4dFRpY2soKCk9PntcbiAgICAgICAgICAgICAgICB0aGlzLnNob3cgPSB0cnVlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIC8vIOWxleW8gC/pmpDol49cbiAgICAgICAgb25FeHBhbmQoZGF0YSl7XG4gICAgICAgICAgICBkYXRhLmV4cGFuZCA9ICFkYXRhLmV4cGFuZDtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgICAgICB9LFxuICAgICAgICAvLyDpgInkuK0v5Y+W5raI6YCJ5LitXG4gICAgICAgIG9uQ2hlY2tlZChkYXRhKXtcbiAgICAgICAgICAgIGRhdGEuY2hlY2tlZCA9ICFkYXRhLmNoZWNrZWQ7XG4gICAgICAgICAgICB0aGlzLnRvb2xlckNoZWNrZWQodGhpcy5kYXRhLCBkYXRhKTtcbiAgICAgICAgICAgIHRoaXMuc2V0UGFyZW50Q2hlY2tlZCh0aGlzLmRhdGEpO1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgICAgIH0sXG4gICAgICAgIHRvb2xlckNoZWNrZWQobGlzdCwgbm9kZSl7XG4gICAgICAgICAgICBmb3IoY29uc3QgaSBpbiBsaXN0KXtcbiAgICAgICAgICAgICAgICBpZihsaXN0W2ldLmlkID09PSBub2RlLmlkKXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRDaGlsZENoZWNrZWQobGlzdFtpXS5jaGlsZHJlbiwgbGlzdFtpXS5jaGVja2VkKTtcbiAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b29sZXJDaGVja2VkKGxpc3RbaV0uY2hpbGRyZW4sIG5vZGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgLy8g6YCJ5Lit6IqC54K55pe277yM6K6+572u5a2Q6IqC54K55YWo6YCJXG4gICAgICAgIHNldENoaWxkQ2hlY2tlZChjaGlsZHJlbiwgY2hlY2tlZCl7XG4gICAgICAgICAgICBmb3IoY29uc3QgaSBpbiBjaGlsZHJlbil7XG4gICAgICAgICAgICAgICAgY2hpbGRyZW5baV0uY2hlY2tlZCA9IGNoZWNrZWQ7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRDaGlsZENoZWNrZWQoY2hpbGRyZW5baV0uY2hpbGRyZW4sIGNoZWNrZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAvLyDorr7nva7niLboioLngrnpgInkuK1cbiAgICAgICAgc2V0UGFyZW50Q2hlY2tlZChkYXRhKXtcbiAgICAgICAgICAgIGZvcihjb25zdCBpIGluIGRhdGEpe1xuICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGlmKGRhdGFbaV0uY2hpbGRyZW4gJiYgZGF0YVtpXS5jaGlsZHJlbi5sZW5ndGggPiAwKXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGlsZElzQ2hlY2tlZChkYXRhW2ldLmNoaWxkcmVuKTtcbiAgICAgICAgICAgICAgICAgICAgaWYodGhpcy5jaGVja2VkKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbaV0uY2hlY2tlZCA9IHRoaXMuY2hlY2tlZDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFBhcmVudENoZWNrZWQoZGF0YVtpXS5jaGlsZHJlbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgICAgIH0sXG4gICAgICAgIC8vIOWIpOaWreiKgueCueeahOWtkOiKgueCueaYr+WQpuaciemAieS4rVxuICAgICAgICBjaGlsZElzQ2hlY2tlZChjaGlsZHJlbil7XG4gICAgICAgICAgICBmb3IoY29uc3QgaSBpbiBjaGlsZHJlbil7XG4gICAgICAgICAgICAgICAgaWYoY2hpbGRyZW5baV0uY2hlY2tlZCl7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hpbGRJc0NoZWNrZWQoY2hpbGRyZW5baV0uY2hpbGRyZW4pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgLy8g6K6+572u6buY6K6k6YCJ5LitXG4gICAgICAgIHNldERlZmF1bHRDaGVja2VkKGRlZmF1bHRJZHMpe1xuICAgICAgICAgICAgZm9yKGNvbnN0IGkgaW4gZGVmYXVsdElkcyl7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRDaGVja2VkKHRoaXMuZGF0YSwgZGVmYXVsdElkc1tpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNldFBhcmVudENoZWNrZWQodGhpcy5kYXRhKTtcbiAgICAgICAgfSxcbiAgICAgICAgLy8g5qC55o2u5omA57uZ55qEaWTvvIzorr7nva7mlLnpobnpgInkuK1cbiAgICAgICAgc2V0Q2hlY2tlZChkYXRhLCBpZCl7XG4gICAgICAgICAgICBmb3IoY29uc3QgaSBpbiBkYXRhKXtcbiAgICAgICAgICAgICAgICBpZihkYXRhW2ldLmlkID09PSBpZCl7XG4gICAgICAgICAgICAgICAgICAgIGRhdGFbaV0uY2hlY2tlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICAgICBpZihkYXRhW2ldLmNoaWxkcmVuICYmIGRhdGFbaV0uY2hpbGRyZW4ubGVuZ3RoID4gMCl7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldENoZWNrZWQoZGF0YVtpXS5jaGlsZHJlbiwgaWQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAvLyDojrflj5bpgInkuK3pgInnmoRrZXlcbiAgICAgICAgZ2V0Q2hlY2tlZEtleXMoKXtcbiAgICAgICAgICAgIGNvbnN0IGtleXMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX2dldENoZWNrZWRLZXlzKHRoaXMuZGF0YSwga2V5cyk7XG4gICAgICAgICAgICByZXR1cm4ga2V5cztcbiAgICAgICAgfSxcbiAgICAgICAgLy8g6YGN5Y6G5Ye66YCJ5Lit6YCJ55qEa2V5XG4gICAgICAgIF9nZXRDaGVja2VkS2V5cyhkYXRhLCBrZXlzKXtcbiAgICAgICAgICAgIGZvcihjb25zdCBpIGluIGRhdGEpe1xuICAgICAgICAgICAgICAgIGlmKGRhdGFbaV0uY2hlY2tlZCl7XG4gICAgICAgICAgICAgICAgICAgIGtleXMucHVzaChkYXRhW2ldLmlkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYoZGF0YVtpXS5jaGlsZHJlbiAmJiBkYXRhW2ldLmNoaWxkcmVuLmxlbmd0aCA+IDApe1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9nZXRDaGVja2VkS2V5cyhkYXRhW2ldLmNoaWxkcmVuLCBrZXlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIC8vIOiOt+WPlumAieS4remAieeahOiKgueCuVxuICAgICAgICBnZXRDaGVja2VkTm9kZXMoKXtcbiAgICAgICAgICAgIGNvbnN0IG5vZGVzID0gW107XG4gICAgICAgICAgICB0aGlzLl9nZXRDaGVja2VkTm9kZXModGhpcy5kYXRhLCBub2Rlcyk7XG4gICAgICAgICAgICByZXR1cm4gbm9kZXM7XG4gICAgICAgIH0sXG4gICAgICAgIC8vIOmBjeWOhuWHuumAieS4remAieeahOiKgueCuVxuICAgICAgICBfZ2V0Q2hlY2tlZE5vZGVzKGRhdGEsIG5vZGVzKXtcbiAgICAgICAgICAgIGZvcihjb25zdCBpIGluIGRhdGEpe1xuICAgICAgICAgICAgICAgIGlmKGRhdGFbaV0uY2hlY2tlZCl7XG4gICAgICAgICAgICAgICAgICAgIG5vZGVzLnB1c2goZGF0YVtpXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmKGRhdGFbaV0uY2hpbGRyZW4gJiYgZGF0YVtpXS5jaGlsZHJlbi5sZW5ndGggPiAwKXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZ2V0Q2hlY2tlZE5vZGVzKGRhdGFbaV0uY2hpbGRyZW4sIG5vZGVzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuICAgIHdhdGNoOiB7XG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIGhhbmRsZXIoKSB7XG4gICAgICAgICAgICAgICAgZm9yKGNvbnN0IGkgaW4gdGhpcy5kYXRhKXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbml0KHRoaXMuZGF0YVtpXSwgMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGltbWVkaWF0ZTogdHJ1ZSxcbiAgICAgICAgICAgIGRlZXA6IHRydWVcbiAgICAgICAgfVxuICAgIH1cbn07XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCIgc2NvcGVkPlxuQGltcG9ydCB1cmwoLi9pY29uL2ljb25mb250LmNzcyk7XG51bHtcbiAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgIG1hcmdpbjogMDtcbiAgICBwYWRkaW5nOiAwO1xuICAgIHRleHQtYWxpZ246IGxlZnQ7XG5cbiAgICBsaXtcbiAgICAgICAgcGFkZGluZzogNXB4IDA7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcblxuICAgICAgICAuY2hlY2staWNve1xuICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICAgICAgaGVpZ2h0OiA1cHg7XG4gICAgICAgICAgICB3aWR0aDogNXB4O1xuICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBsaTpob3ZlcntcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgkY29sb3I6ICMwMDAwMDAsICRhbHBoYTogMC4xKTtcbiAgICB9XG5cbiAgICAuZXhwYW5ke1xuICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cbn1cbjwvc3R5bGU+IiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdGhyZWFkLWxvYWRlci9kaXN0L2Nqcy5qcyEuLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC04Mi51c2VbMV0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0B2dWUvdnVlLWxvYWRlci12MTUvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9JbmRleC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anNcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdGhyZWFkLWxvYWRlci9kaXN0L2Nqcy5qcyEuLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC04Mi51c2VbMV0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0B2dWUvdnVlLWxvYWRlci12MTUvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9JbmRleC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anNcIiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IHt9OyIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9taW5pLWNzcy1leHRyYWN0LXBsdWdpbi9kaXN0L2xvYWRlci5qcz8/Y2xvbmVkUnVsZVNldC02NC51c2VbMF0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanM/P2Nsb25lZFJ1bGVTZXQtNjQudXNlWzFdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9AdnVlL3Z1ZS1sb2FkZXItdjE1L2xpYi9sb2FkZXJzL3N0eWxlUG9zdExvYWRlci5qcyEuLi8uLi8uLi9ub2RlX21vZHVsZXMvcG9zdGNzcy1sb2FkZXIvZGlzdC9janMuanM/P2Nsb25lZFJ1bGVTZXQtNjQudXNlWzJdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcz8/Y2xvbmVkUnVsZVNldC02NC51c2VbM10hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0B2dWUvdnVlLWxvYWRlci12MTUvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9JbmRleC52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZpZD01ZTgxZTA1ZSZwcm9kJmxhbmc9c2NzcyZzY29wZWQ9dHJ1ZVwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9JbmRleC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NWU4MWUwNWUmc2NvcGVkPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9JbmRleC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anNcIlxuZXhwb3J0ICogZnJvbSBcIi4vSW5kZXgudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzXCJcbmltcG9ydCBzdHlsZTAgZnJvbSBcIi4vSW5kZXgudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9NWU4MWUwNWUmcHJvZCZsYW5nPXNjc3Mmc2NvcGVkPXRydWVcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0B2dWUvdnVlLWxvYWRlci12MTUvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIFwiNWU4MWUwNWVcIixcbiAgbnVsbFxuICBcbilcblxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfY2hlY2tQcml2YXRlUmVkZWNsYXJhdGlvbihvYmosIHByaXZhdGVDb2xsZWN0aW9uKSB7XG4gIGlmIChwcml2YXRlQ29sbGVjdGlvbi5oYXMob2JqKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdFwiKTtcbiAgfVxufSIsImltcG9ydCBjaGVja1ByaXZhdGVSZWRlY2xhcmF0aW9uIGZyb20gXCIuL2NoZWNrUHJpdmF0ZVJlZGVjbGFyYXRpb24uanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKG9iaiwgcHJpdmF0ZU1hcCwgdmFsdWUpIHtcbiAgY2hlY2tQcml2YXRlUmVkZWNsYXJhdGlvbihvYmosIHByaXZhdGVNYXApO1xuICBwcml2YXRlTWFwLnNldChvYmosIHZhbHVlKTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfYXNzZXJ0Q2xhc3NCcmFuZChlLCB0LCBuKSB7XG4gIGlmIChcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUgPyBlID09PSB0IDogZS5oYXModCkpIHJldHVybiBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHQgOiBuO1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0XCIpO1xufSIsImltcG9ydCBhc3NlcnRDbGFzc0JyYW5kIGZyb20gXCIuL2Fzc2VydENsYXNzQnJhbmQuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9jbGFzc1ByaXZhdGVGaWVsZFNldDIocywgYSwgcikge1xuICByZXR1cm4gcy5zZXQoYXNzZXJ0Q2xhc3NCcmFuZChzLCBhKSwgciksIHI7XG59IiwiaW1wb3J0IGFzc2VydENsYXNzQnJhbmQgZnJvbSBcIi4vYXNzZXJ0Q2xhc3NCcmFuZC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0MihzLCBhKSB7XG4gIHJldHVybiBzLmdldChhc3NlcnRDbGFzc0JyYW5kKHMsIGEpKTtcbn0iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJpbmQoZm4sIHRoaXNBcmcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHdyYXAoKSB7XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoaXNBcmcsIGFyZ3VtZW50cyk7XG4gIH07XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCBiaW5kIGZyb20gJy4vaGVscGVycy9iaW5kLmpzJztcblxuLy8gdXRpbHMgaXMgYSBsaWJyYXJ5IG9mIGdlbmVyaWMgaGVscGVyIGZ1bmN0aW9ucyBub24tc3BlY2lmaWMgdG8gYXhpb3NcblxuY29uc3Qge3RvU3RyaW5nfSA9IE9iamVjdC5wcm90b3R5cGU7XG5jb25zdCB7Z2V0UHJvdG90eXBlT2Z9ID0gT2JqZWN0O1xuXG5jb25zdCBraW5kT2YgPSAoY2FjaGUgPT4gdGhpbmcgPT4ge1xuICAgIGNvbnN0IHN0ciA9IHRvU3RyaW5nLmNhbGwodGhpbmcpO1xuICAgIHJldHVybiBjYWNoZVtzdHJdIHx8IChjYWNoZVtzdHJdID0gc3RyLnNsaWNlKDgsIC0xKS50b0xvd2VyQ2FzZSgpKTtcbn0pKE9iamVjdC5jcmVhdGUobnVsbCkpO1xuXG5jb25zdCBraW5kT2ZUZXN0ID0gKHR5cGUpID0+IHtcbiAgdHlwZSA9IHR5cGUudG9Mb3dlckNhc2UoKTtcbiAgcmV0dXJuICh0aGluZykgPT4ga2luZE9mKHRoaW5nKSA9PT0gdHlwZVxufVxuXG5jb25zdCB0eXBlT2ZUZXN0ID0gdHlwZSA9PiB0aGluZyA9PiB0eXBlb2YgdGhpbmcgPT09IHR5cGU7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYW4gQXJyYXlcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gQXJyYXksIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCB7aXNBcnJheX0gPSBBcnJheTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyB1bmRlZmluZWRcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSB2YWx1ZSBpcyB1bmRlZmluZWQsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc1VuZGVmaW5lZCA9IHR5cGVPZlRlc3QoJ3VuZGVmaW5lZCcpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgQnVmZmVyXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEJ1ZmZlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQnVmZmVyKHZhbCkge1xuICByZXR1cm4gdmFsICE9PSBudWxsICYmICFpc1VuZGVmaW5lZCh2YWwpICYmIHZhbC5jb25zdHJ1Y3RvciAhPT0gbnVsbCAmJiAhaXNVbmRlZmluZWQodmFsLmNvbnN0cnVjdG9yKVxuICAgICYmIGlzRnVuY3Rpb24odmFsLmNvbnN0cnVjdG9yLmlzQnVmZmVyKSAmJiB2YWwuY29uc3RydWN0b3IuaXNCdWZmZXIodmFsKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBBcnJheUJ1ZmZlclxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gQXJyYXlCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0FycmF5QnVmZmVyID0ga2luZE9mVGVzdCgnQXJyYXlCdWZmZXInKTtcblxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgdmlldyBvbiBhbiBBcnJheUJ1ZmZlclxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSB2aWV3IG9uIGFuIEFycmF5QnVmZmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBcnJheUJ1ZmZlclZpZXcodmFsKSB7XG4gIGxldCByZXN1bHQ7XG4gIGlmICgodHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJykgJiYgKEFycmF5QnVmZmVyLmlzVmlldykpIHtcbiAgICByZXN1bHQgPSBBcnJheUJ1ZmZlci5pc1ZpZXcodmFsKTtcbiAgfSBlbHNlIHtcbiAgICByZXN1bHQgPSAodmFsKSAmJiAodmFsLmJ1ZmZlcikgJiYgKGlzQXJyYXlCdWZmZXIodmFsLmJ1ZmZlcikpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBTdHJpbmdcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgU3RyaW5nLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNTdHJpbmcgPSB0eXBlT2ZUZXN0KCdzdHJpbmcnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZ1bmN0aW9uXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRnVuY3Rpb24sIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0Z1bmN0aW9uID0gdHlwZU9mVGVzdCgnZnVuY3Rpb24nKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIE51bWJlclxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBOdW1iZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc051bWJlciA9IHR5cGVPZlRlc3QoJ251bWJlcicpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIE9iamVjdFxuICpcbiAqIEBwYXJhbSB7Kn0gdGhpbmcgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBPYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc09iamVjdCA9ICh0aGluZykgPT4gdGhpbmcgIT09IG51bGwgJiYgdHlwZW9mIHRoaW5nID09PSAnb2JqZWN0JztcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEJvb2xlYW5cbiAqXG4gKiBAcGFyYW0geyp9IHRoaW5nIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEJvb2xlYW4sIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0Jvb2xlYW4gPSB0aGluZyA9PiB0aGluZyA9PT0gdHJ1ZSB8fCB0aGluZyA9PT0gZmFsc2U7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBwbGFpbiBPYmplY3RcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgcGxhaW4gT2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNQbGFpbk9iamVjdCA9ICh2YWwpID0+IHtcbiAgaWYgKGtpbmRPZih2YWwpICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IHByb3RvdHlwZSA9IGdldFByb3RvdHlwZU9mKHZhbCk7XG4gIHJldHVybiAocHJvdG90eXBlID09PSBudWxsIHx8IHByb3RvdHlwZSA9PT0gT2JqZWN0LnByb3RvdHlwZSB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YocHJvdG90eXBlKSA9PT0gbnVsbCkgJiYgIShTeW1ib2wudG9TdHJpbmdUYWcgaW4gdmFsKSAmJiAhKFN5bWJvbC5pdGVyYXRvciBpbiB2YWwpO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRGF0ZVxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBEYXRlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNEYXRlID0ga2luZE9mVGVzdCgnRGF0ZScpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRmlsZVxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBGaWxlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNGaWxlID0ga2luZE9mVGVzdCgnRmlsZScpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgQmxvYlxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBCbG9iLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNCbG9iID0ga2luZE9mVGVzdCgnQmxvYicpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRmlsZUxpc3RcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRmlsZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzRmlsZUxpc3QgPSBraW5kT2ZUZXN0KCdGaWxlTGlzdCcpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgU3RyZWFtXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFN0cmVhbSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzU3RyZWFtID0gKHZhbCkgPT4gaXNPYmplY3QodmFsKSAmJiBpc0Z1bmN0aW9uKHZhbC5waXBlKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZvcm1EYXRhXG4gKlxuICogQHBhcmFtIHsqfSB0aGluZyBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIEZvcm1EYXRhLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNGb3JtRGF0YSA9ICh0aGluZykgPT4ge1xuICBsZXQga2luZDtcbiAgcmV0dXJuIHRoaW5nICYmIChcbiAgICAodHlwZW9mIEZvcm1EYXRhID09PSAnZnVuY3Rpb24nICYmIHRoaW5nIGluc3RhbmNlb2YgRm9ybURhdGEpIHx8IChcbiAgICAgIGlzRnVuY3Rpb24odGhpbmcuYXBwZW5kKSAmJiAoXG4gICAgICAgIChraW5kID0ga2luZE9mKHRoaW5nKSkgPT09ICdmb3JtZGF0YScgfHxcbiAgICAgICAgLy8gZGV0ZWN0IGZvcm0tZGF0YSBpbnN0YW5jZVxuICAgICAgICAoa2luZCA9PT0gJ29iamVjdCcgJiYgaXNGdW5jdGlvbih0aGluZy50b1N0cmluZykgJiYgdGhpbmcudG9TdHJpbmcoKSA9PT0gJ1tvYmplY3QgRm9ybURhdGFdJylcbiAgICAgIClcbiAgICApXG4gIClcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFVSTFNlYXJjaFBhcmFtcyBvYmplY3RcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgVVJMU2VhcmNoUGFyYW1zIG9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzVVJMU2VhcmNoUGFyYW1zID0ga2luZE9mVGVzdCgnVVJMU2VhcmNoUGFyYW1zJyk7XG5cbi8qKlxuICogVHJpbSBleGNlc3Mgd2hpdGVzcGFjZSBvZmYgdGhlIGJlZ2lubmluZyBhbmQgZW5kIG9mIGEgc3RyaW5nXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0ciBUaGUgU3RyaW5nIHRvIHRyaW1cbiAqXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgU3RyaW5nIGZyZWVkIG9mIGV4Y2VzcyB3aGl0ZXNwYWNlXG4gKi9cbmNvbnN0IHRyaW0gPSAoc3RyKSA9PiBzdHIudHJpbSA/XG4gIHN0ci50cmltKCkgOiBzdHIucmVwbGFjZSgvXltcXHNcXHVGRUZGXFx4QTBdK3xbXFxzXFx1RkVGRlxceEEwXSskL2csICcnKTtcblxuLyoqXG4gKiBJdGVyYXRlIG92ZXIgYW4gQXJyYXkgb3IgYW4gT2JqZWN0IGludm9raW5nIGEgZnVuY3Rpb24gZm9yIGVhY2ggaXRlbS5cbiAqXG4gKiBJZiBgb2JqYCBpcyBhbiBBcnJheSBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBwYXNzaW5nXG4gKiB0aGUgdmFsdWUsIGluZGV4LCBhbmQgY29tcGxldGUgYXJyYXkgZm9yIGVhY2ggaXRlbS5cbiAqXG4gKiBJZiAnb2JqJyBpcyBhbiBPYmplY3QgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgcGFzc2luZ1xuICogdGhlIHZhbHVlLCBrZXksIGFuZCBjb21wbGV0ZSBvYmplY3QgZm9yIGVhY2ggcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIHtPYmplY3R8QXJyYXl9IG9iaiBUaGUgb2JqZWN0IHRvIGl0ZXJhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBjYWxsYmFjayB0byBpbnZva2UgZm9yIGVhY2ggaXRlbVxuICpcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW2FsbE93bktleXMgPSBmYWxzZV1cbiAqIEByZXR1cm5zIHthbnl9XG4gKi9cbmZ1bmN0aW9uIGZvckVhY2gob2JqLCBmbiwge2FsbE93bktleXMgPSBmYWxzZX0gPSB7fSkge1xuICAvLyBEb24ndCBib3RoZXIgaWYgbm8gdmFsdWUgcHJvdmlkZWRcbiAgaWYgKG9iaiA9PT0gbnVsbCB8fCB0eXBlb2Ygb2JqID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxldCBpO1xuICBsZXQgbDtcblxuICAvLyBGb3JjZSBhbiBhcnJheSBpZiBub3QgYWxyZWFkeSBzb21ldGhpbmcgaXRlcmFibGVcbiAgaWYgKHR5cGVvZiBvYmogIT09ICdvYmplY3QnKSB7XG4gICAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gICAgb2JqID0gW29ial07XG4gIH1cblxuICBpZiAoaXNBcnJheShvYmopKSB7XG4gICAgLy8gSXRlcmF0ZSBvdmVyIGFycmF5IHZhbHVlc1xuICAgIGZvciAoaSA9IDAsIGwgPSBvYmoubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICBmbi5jYWxsKG51bGwsIG9ialtpXSwgaSwgb2JqKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gSXRlcmF0ZSBvdmVyIG9iamVjdCBrZXlzXG4gICAgY29uc3Qga2V5cyA9IGFsbE93bktleXMgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmopIDogT2JqZWN0LmtleXMob2JqKTtcbiAgICBjb25zdCBsZW4gPSBrZXlzLmxlbmd0aDtcbiAgICBsZXQga2V5O1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBrZXkgPSBrZXlzW2ldO1xuICAgICAgZm4uY2FsbChudWxsLCBvYmpba2V5XSwga2V5LCBvYmopO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBmaW5kS2V5KG9iaiwga2V5KSB7XG4gIGtleSA9IGtleS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMob2JqKTtcbiAgbGV0IGkgPSBrZXlzLmxlbmd0aDtcbiAgbGV0IF9rZXk7XG4gIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgX2tleSA9IGtleXNbaV07XG4gICAgaWYgKGtleSA9PT0gX2tleS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICByZXR1cm4gX2tleTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbmNvbnN0IF9nbG9iYWwgPSAoKCkgPT4ge1xuICAvKmVzbGludCBuby11bmRlZjowKi9cbiAgaWYgKHR5cGVvZiBnbG9iYWxUaGlzICE9PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gZ2xvYmFsVGhpcztcbiAgcmV0dXJuIHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiID8gc2VsZiA6ICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IGdsb2JhbClcbn0pKCk7XG5cbmNvbnN0IGlzQ29udGV4dERlZmluZWQgPSAoY29udGV4dCkgPT4gIWlzVW5kZWZpbmVkKGNvbnRleHQpICYmIGNvbnRleHQgIT09IF9nbG9iYWw7XG5cbi8qKlxuICogQWNjZXB0cyB2YXJhcmdzIGV4cGVjdGluZyBlYWNoIGFyZ3VtZW50IHRvIGJlIGFuIG9iamVjdCwgdGhlblxuICogaW1tdXRhYmx5IG1lcmdlcyB0aGUgcHJvcGVydGllcyBvZiBlYWNoIG9iamVjdCBhbmQgcmV0dXJucyByZXN1bHQuXG4gKlxuICogV2hlbiBtdWx0aXBsZSBvYmplY3RzIGNvbnRhaW4gdGhlIHNhbWUga2V5IHRoZSBsYXRlciBvYmplY3QgaW5cbiAqIHRoZSBhcmd1bWVudHMgbGlzdCB3aWxsIHRha2UgcHJlY2VkZW5jZS5cbiAqXG4gKiBFeGFtcGxlOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgcmVzdWx0ID0gbWVyZ2Uoe2ZvbzogMTIzfSwge2ZvbzogNDU2fSk7XG4gKiBjb25zb2xlLmxvZyhyZXN1bHQuZm9vKTsgLy8gb3V0cHV0cyA0NTZcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmoxIE9iamVjdCB0byBtZXJnZVxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJlc3VsdCBvZiBhbGwgbWVyZ2UgcHJvcGVydGllc1xuICovXG5mdW5jdGlvbiBtZXJnZSgvKiBvYmoxLCBvYmoyLCBvYmozLCAuLi4gKi8pIHtcbiAgY29uc3Qge2Nhc2VsZXNzfSA9IGlzQ29udGV4dERlZmluZWQodGhpcykgJiYgdGhpcyB8fCB7fTtcbiAgY29uc3QgcmVzdWx0ID0ge307XG4gIGNvbnN0IGFzc2lnblZhbHVlID0gKHZhbCwga2V5KSA9PiB7XG4gICAgY29uc3QgdGFyZ2V0S2V5ID0gY2FzZWxlc3MgJiYgZmluZEtleShyZXN1bHQsIGtleSkgfHwga2V5O1xuICAgIGlmIChpc1BsYWluT2JqZWN0KHJlc3VsdFt0YXJnZXRLZXldKSAmJiBpc1BsYWluT2JqZWN0KHZhbCkpIHtcbiAgICAgIHJlc3VsdFt0YXJnZXRLZXldID0gbWVyZ2UocmVzdWx0W3RhcmdldEtleV0sIHZhbCk7XG4gICAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KHZhbCkpIHtcbiAgICAgIHJlc3VsdFt0YXJnZXRLZXldID0gbWVyZ2Uoe30sIHZhbCk7XG4gICAgfSBlbHNlIGlmIChpc0FycmF5KHZhbCkpIHtcbiAgICAgIHJlc3VsdFt0YXJnZXRLZXldID0gdmFsLnNsaWNlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdFt0YXJnZXRLZXldID0gdmFsO1xuICAgIH1cbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGFyZ3VtZW50c1tpXSAmJiBmb3JFYWNoKGFyZ3VtZW50c1tpXSwgYXNzaWduVmFsdWUpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogRXh0ZW5kcyBvYmplY3QgYSBieSBtdXRhYmx5IGFkZGluZyB0byBpdCB0aGUgcHJvcGVydGllcyBvZiBvYmplY3QgYi5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gYSBUaGUgb2JqZWN0IHRvIGJlIGV4dGVuZGVkXG4gKiBAcGFyYW0ge09iamVjdH0gYiBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyBmcm9tXG4gKiBAcGFyYW0ge09iamVjdH0gdGhpc0FyZyBUaGUgb2JqZWN0IHRvIGJpbmQgZnVuY3Rpb24gdG9cbiAqXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFthbGxPd25LZXlzXVxuICogQHJldHVybnMge09iamVjdH0gVGhlIHJlc3VsdGluZyB2YWx1ZSBvZiBvYmplY3QgYVxuICovXG5jb25zdCBleHRlbmQgPSAoYSwgYiwgdGhpc0FyZywge2FsbE93bktleXN9PSB7fSkgPT4ge1xuICBmb3JFYWNoKGIsICh2YWwsIGtleSkgPT4ge1xuICAgIGlmICh0aGlzQXJnICYmIGlzRnVuY3Rpb24odmFsKSkge1xuICAgICAgYVtrZXldID0gYmluZCh2YWwsIHRoaXNBcmcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhW2tleV0gPSB2YWw7XG4gICAgfVxuICB9LCB7YWxsT3duS2V5c30pO1xuICByZXR1cm4gYTtcbn1cblxuLyoqXG4gKiBSZW1vdmUgYnl0ZSBvcmRlciBtYXJrZXIuIFRoaXMgY2F0Y2hlcyBFRiBCQiBCRiAodGhlIFVURi04IEJPTSlcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gY29udGVudCB3aXRoIEJPTVxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IGNvbnRlbnQgdmFsdWUgd2l0aG91dCBCT01cbiAqL1xuY29uc3Qgc3RyaXBCT00gPSAoY29udGVudCkgPT4ge1xuICBpZiAoY29udGVudC5jaGFyQ29kZUF0KDApID09PSAweEZFRkYpIHtcbiAgICBjb250ZW50ID0gY29udGVudC5zbGljZSgxKTtcbiAgfVxuICByZXR1cm4gY29udGVudDtcbn1cblxuLyoqXG4gKiBJbmhlcml0IHRoZSBwcm90b3R5cGUgbWV0aG9kcyBmcm9tIG9uZSBjb25zdHJ1Y3RvciBpbnRvIGFub3RoZXJcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBzdXBlckNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge29iamVjdH0gW3Byb3BzXVxuICogQHBhcmFtIHtvYmplY3R9IFtkZXNjcmlwdG9yc11cbiAqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuY29uc3QgaW5oZXJpdHMgPSAoY29uc3RydWN0b3IsIHN1cGVyQ29uc3RydWN0b3IsIHByb3BzLCBkZXNjcmlwdG9ycykgPT4ge1xuICBjb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ29uc3RydWN0b3IucHJvdG90eXBlLCBkZXNjcmlwdG9ycyk7XG4gIGNvbnN0cnVjdG9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGNvbnN0cnVjdG9yO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29uc3RydWN0b3IsICdzdXBlcicsIHtcbiAgICB2YWx1ZTogc3VwZXJDb25zdHJ1Y3Rvci5wcm90b3R5cGVcbiAgfSk7XG4gIHByb3BzICYmIE9iamVjdC5hc3NpZ24oY29uc3RydWN0b3IucHJvdG90eXBlLCBwcm9wcyk7XG59XG5cbi8qKlxuICogUmVzb2x2ZSBvYmplY3Qgd2l0aCBkZWVwIHByb3RvdHlwZSBjaGFpbiB0byBhIGZsYXQgb2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlT2JqIHNvdXJjZSBvYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBbZGVzdE9ial1cbiAqIEBwYXJhbSB7RnVuY3Rpb258Qm9vbGVhbn0gW2ZpbHRlcl1cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtwcm9wRmlsdGVyXVxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9XG4gKi9cbmNvbnN0IHRvRmxhdE9iamVjdCA9IChzb3VyY2VPYmosIGRlc3RPYmosIGZpbHRlciwgcHJvcEZpbHRlcikgPT4ge1xuICBsZXQgcHJvcHM7XG4gIGxldCBpO1xuICBsZXQgcHJvcDtcbiAgY29uc3QgbWVyZ2VkID0ge307XG5cbiAgZGVzdE9iaiA9IGRlc3RPYmogfHwge307XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lcS1udWxsLGVxZXFlcVxuICBpZiAoc291cmNlT2JqID09IG51bGwpIHJldHVybiBkZXN0T2JqO1xuXG4gIGRvIHtcbiAgICBwcm9wcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHNvdXJjZU9iaik7XG4gICAgaSA9IHByb3BzLmxlbmd0aDtcbiAgICB3aGlsZSAoaS0tID4gMCkge1xuICAgICAgcHJvcCA9IHByb3BzW2ldO1xuICAgICAgaWYgKCghcHJvcEZpbHRlciB8fCBwcm9wRmlsdGVyKHByb3AsIHNvdXJjZU9iaiwgZGVzdE9iaikpICYmICFtZXJnZWRbcHJvcF0pIHtcbiAgICAgICAgZGVzdE9ialtwcm9wXSA9IHNvdXJjZU9ialtwcm9wXTtcbiAgICAgICAgbWVyZ2VkW3Byb3BdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgc291cmNlT2JqID0gZmlsdGVyICE9PSBmYWxzZSAmJiBnZXRQcm90b3R5cGVPZihzb3VyY2VPYmopO1xuICB9IHdoaWxlIChzb3VyY2VPYmogJiYgKCFmaWx0ZXIgfHwgZmlsdGVyKHNvdXJjZU9iaiwgZGVzdE9iaikpICYmIHNvdXJjZU9iaiAhPT0gT2JqZWN0LnByb3RvdHlwZSk7XG5cbiAgcmV0dXJuIGRlc3RPYmo7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIGEgc3RyaW5nIGVuZHMgd2l0aCB0aGUgY2hhcmFjdGVycyBvZiBhIHNwZWNpZmllZCBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKiBAcGFyYW0ge1N0cmluZ30gc2VhcmNoU3RyaW5nXG4gKiBAcGFyYW0ge051bWJlcn0gW3Bvc2l0aW9uPSAwXVxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5jb25zdCBlbmRzV2l0aCA9IChzdHIsIHNlYXJjaFN0cmluZywgcG9zaXRpb24pID0+IHtcbiAgc3RyID0gU3RyaW5nKHN0cik7XG4gIGlmIChwb3NpdGlvbiA9PT0gdW5kZWZpbmVkIHx8IHBvc2l0aW9uID4gc3RyLmxlbmd0aCkge1xuICAgIHBvc2l0aW9uID0gc3RyLmxlbmd0aDtcbiAgfVxuICBwb3NpdGlvbiAtPSBzZWFyY2hTdHJpbmcubGVuZ3RoO1xuICBjb25zdCBsYXN0SW5kZXggPSBzdHIuaW5kZXhPZihzZWFyY2hTdHJpbmcsIHBvc2l0aW9uKTtcbiAgcmV0dXJuIGxhc3RJbmRleCAhPT0gLTEgJiYgbGFzdEluZGV4ID09PSBwb3NpdGlvbjtcbn1cblxuXG4vKipcbiAqIFJldHVybnMgbmV3IGFycmF5IGZyb20gYXJyYXkgbGlrZSBvYmplY3Qgb3IgbnVsbCBpZiBmYWlsZWRcbiAqXG4gKiBAcGFyYW0geyp9IFt0aGluZ11cbiAqXG4gKiBAcmV0dXJucyB7P0FycmF5fVxuICovXG5jb25zdCB0b0FycmF5ID0gKHRoaW5nKSA9PiB7XG4gIGlmICghdGhpbmcpIHJldHVybiBudWxsO1xuICBpZiAoaXNBcnJheSh0aGluZykpIHJldHVybiB0aGluZztcbiAgbGV0IGkgPSB0aGluZy5sZW5ndGg7XG4gIGlmICghaXNOdW1iZXIoaSkpIHJldHVybiBudWxsO1xuICBjb25zdCBhcnIgPSBuZXcgQXJyYXkoaSk7XG4gIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgYXJyW2ldID0gdGhpbmdbaV07XG4gIH1cbiAgcmV0dXJuIGFycjtcbn1cblxuLyoqXG4gKiBDaGVja2luZyBpZiB0aGUgVWludDhBcnJheSBleGlzdHMgYW5kIGlmIGl0IGRvZXMsIGl0IHJldHVybnMgYSBmdW5jdGlvbiB0aGF0IGNoZWNrcyBpZiB0aGVcbiAqIHRoaW5nIHBhc3NlZCBpbiBpcyBhbiBpbnN0YW5jZSBvZiBVaW50OEFycmF5XG4gKlxuICogQHBhcmFtIHtUeXBlZEFycmF5fVxuICpcbiAqIEByZXR1cm5zIHtBcnJheX1cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbmNvbnN0IGlzVHlwZWRBcnJheSA9IChUeXBlZEFycmF5ID0+IHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgcmV0dXJuIHRoaW5nID0+IHtcbiAgICByZXR1cm4gVHlwZWRBcnJheSAmJiB0aGluZyBpbnN0YW5jZW9mIFR5cGVkQXJyYXk7XG4gIH07XG59KSh0eXBlb2YgVWludDhBcnJheSAhPT0gJ3VuZGVmaW5lZCcgJiYgZ2V0UHJvdG90eXBlT2YoVWludDhBcnJheSkpO1xuXG4vKipcbiAqIEZvciBlYWNoIGVudHJ5IGluIHRoZSBvYmplY3QsIGNhbGwgdGhlIGZ1bmN0aW9uIHdpdGggdGhlIGtleSBhbmQgdmFsdWUuXG4gKlxuICogQHBhcmFtIHtPYmplY3Q8YW55LCBhbnk+fSBvYmogLSBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIC0gVGhlIGZ1bmN0aW9uIHRvIGNhbGwgZm9yIGVhY2ggZW50cnkuXG4gKlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmNvbnN0IGZvckVhY2hFbnRyeSA9IChvYmosIGZuKSA9PiB7XG4gIGNvbnN0IGdlbmVyYXRvciA9IG9iaiAmJiBvYmpbU3ltYm9sLml0ZXJhdG9yXTtcblxuICBjb25zdCBpdGVyYXRvciA9IGdlbmVyYXRvci5jYWxsKG9iaik7XG5cbiAgbGV0IHJlc3VsdDtcblxuICB3aGlsZSAoKHJlc3VsdCA9IGl0ZXJhdG9yLm5leHQoKSkgJiYgIXJlc3VsdC5kb25lKSB7XG4gICAgY29uc3QgcGFpciA9IHJlc3VsdC52YWx1ZTtcbiAgICBmbi5jYWxsKG9iaiwgcGFpclswXSwgcGFpclsxXSk7XG4gIH1cbn1cblxuLyoqXG4gKiBJdCB0YWtlcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBhbmQgYSBzdHJpbmcsIGFuZCByZXR1cm5zIGFuIGFycmF5IG9mIGFsbCB0aGUgbWF0Y2hlc1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWdFeHAgLSBUaGUgcmVndWxhciBleHByZXNzaW9uIHRvIG1hdGNoIGFnYWluc3QuXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyIC0gVGhlIHN0cmluZyB0byBzZWFyY2guXG4gKlxuICogQHJldHVybnMge0FycmF5PGJvb2xlYW4+fVxuICovXG5jb25zdCBtYXRjaEFsbCA9IChyZWdFeHAsIHN0cikgPT4ge1xuICBsZXQgbWF0Y2hlcztcbiAgY29uc3QgYXJyID0gW107XG5cbiAgd2hpbGUgKChtYXRjaGVzID0gcmVnRXhwLmV4ZWMoc3RyKSkgIT09IG51bGwpIHtcbiAgICBhcnIucHVzaChtYXRjaGVzKTtcbiAgfVxuXG4gIHJldHVybiBhcnI7XG59XG5cbi8qIENoZWNraW5nIGlmIHRoZSBraW5kT2ZUZXN0IGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIHBhc3NlZCBhbiBIVE1MRm9ybUVsZW1lbnQuICovXG5jb25zdCBpc0hUTUxGb3JtID0ga2luZE9mVGVzdCgnSFRNTEZvcm1FbGVtZW50Jyk7XG5cbmNvbnN0IHRvQ2FtZWxDYXNlID0gc3RyID0+IHtcbiAgcmV0dXJuIHN0ci50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1stX1xcc10oW2EtelxcZF0pKFxcdyopL2csXG4gICAgZnVuY3Rpb24gcmVwbGFjZXIobSwgcDEsIHAyKSB7XG4gICAgICByZXR1cm4gcDEudG9VcHBlckNhc2UoKSArIHAyO1xuICAgIH1cbiAgKTtcbn07XG5cbi8qIENyZWF0aW5nIGEgZnVuY3Rpb24gdGhhdCB3aWxsIGNoZWNrIGlmIGFuIG9iamVjdCBoYXMgYSBwcm9wZXJ0eS4gKi9cbmNvbnN0IGhhc093blByb3BlcnR5ID0gKCh7aGFzT3duUHJvcGVydHl9KSA9PiAob2JqLCBwcm9wKSA9PiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkpKE9iamVjdC5wcm90b3R5cGUpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgUmVnRXhwIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBSZWdFeHAgb2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNSZWdFeHAgPSBraW5kT2ZUZXN0KCdSZWdFeHAnKTtcblxuY29uc3QgcmVkdWNlRGVzY3JpcHRvcnMgPSAob2JqLCByZWR1Y2VyKSA9PiB7XG4gIGNvbnN0IGRlc2NyaXB0b3JzID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMob2JqKTtcbiAgY29uc3QgcmVkdWNlZERlc2NyaXB0b3JzID0ge307XG5cbiAgZm9yRWFjaChkZXNjcmlwdG9ycywgKGRlc2NyaXB0b3IsIG5hbWUpID0+IHtcbiAgICBsZXQgcmV0O1xuICAgIGlmICgocmV0ID0gcmVkdWNlcihkZXNjcmlwdG9yLCBuYW1lLCBvYmopKSAhPT0gZmFsc2UpIHtcbiAgICAgIHJlZHVjZWREZXNjcmlwdG9yc1tuYW1lXSA9IHJldCB8fCBkZXNjcmlwdG9yO1xuICAgIH1cbiAgfSk7XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMob2JqLCByZWR1Y2VkRGVzY3JpcHRvcnMpO1xufVxuXG4vKipcbiAqIE1ha2VzIGFsbCBtZXRob2RzIHJlYWQtb25seVxuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICovXG5cbmNvbnN0IGZyZWV6ZU1ldGhvZHMgPSAob2JqKSA9PiB7XG4gIHJlZHVjZURlc2NyaXB0b3JzKG9iaiwgKGRlc2NyaXB0b3IsIG5hbWUpID0+IHtcbiAgICAvLyBza2lwIHJlc3RyaWN0ZWQgcHJvcHMgaW4gc3RyaWN0IG1vZGVcbiAgICBpZiAoaXNGdW5jdGlvbihvYmopICYmIFsnYXJndW1lbnRzJywgJ2NhbGxlcicsICdjYWxsZWUnXS5pbmRleE9mKG5hbWUpICE9PSAtMSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlID0gb2JqW25hbWVdO1xuXG4gICAgaWYgKCFpc0Z1bmN0aW9uKHZhbHVlKSkgcmV0dXJuO1xuXG4gICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZmFsc2U7XG5cbiAgICBpZiAoJ3dyaXRhYmxlJyBpbiBkZXNjcmlwdG9yKSB7XG4gICAgICBkZXNjcmlwdG9yLndyaXRhYmxlID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFkZXNjcmlwdG9yLnNldCkge1xuICAgICAgZGVzY3JpcHRvci5zZXQgPSAoKSA9PiB7XG4gICAgICAgIHRocm93IEVycm9yKCdDYW4gbm90IHJld3JpdGUgcmVhZC1vbmx5IG1ldGhvZCBcXCcnICsgbmFtZSArICdcXCcnKTtcbiAgICAgIH07XG4gICAgfVxuICB9KTtcbn1cblxuY29uc3QgdG9PYmplY3RTZXQgPSAoYXJyYXlPclN0cmluZywgZGVsaW1pdGVyKSA9PiB7XG4gIGNvbnN0IG9iaiA9IHt9O1xuXG4gIGNvbnN0IGRlZmluZSA9IChhcnIpID0+IHtcbiAgICBhcnIuZm9yRWFjaCh2YWx1ZSA9PiB7XG4gICAgICBvYmpbdmFsdWVdID0gdHJ1ZTtcbiAgICB9KTtcbiAgfVxuXG4gIGlzQXJyYXkoYXJyYXlPclN0cmluZykgPyBkZWZpbmUoYXJyYXlPclN0cmluZykgOiBkZWZpbmUoU3RyaW5nKGFycmF5T3JTdHJpbmcpLnNwbGl0KGRlbGltaXRlcikpO1xuXG4gIHJldHVybiBvYmo7XG59XG5cbmNvbnN0IG5vb3AgPSAoKSA9PiB7fVxuXG5jb25zdCB0b0Zpbml0ZU51bWJlciA9ICh2YWx1ZSwgZGVmYXVsdFZhbHVlKSA9PiB7XG4gIHZhbHVlID0gK3ZhbHVlO1xuICByZXR1cm4gTnVtYmVyLmlzRmluaXRlKHZhbHVlKSA/IHZhbHVlIDogZGVmYXVsdFZhbHVlO1xufVxuXG5jb25zdCBBTFBIQSA9ICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eidcblxuY29uc3QgRElHSVQgPSAnMDEyMzQ1Njc4OSc7XG5cbmNvbnN0IEFMUEhBQkVUID0ge1xuICBESUdJVCxcbiAgQUxQSEEsXG4gIEFMUEhBX0RJR0lUOiBBTFBIQSArIEFMUEhBLnRvVXBwZXJDYXNlKCkgKyBESUdJVFxufVxuXG5jb25zdCBnZW5lcmF0ZVN0cmluZyA9IChzaXplID0gMTYsIGFscGhhYmV0ID0gQUxQSEFCRVQuQUxQSEFfRElHSVQpID0+IHtcbiAgbGV0IHN0ciA9ICcnO1xuICBjb25zdCB7bGVuZ3RofSA9IGFscGhhYmV0O1xuICB3aGlsZSAoc2l6ZS0tKSB7XG4gICAgc3RyICs9IGFscGhhYmV0W01hdGgucmFuZG9tKCkgKiBsZW5ndGh8MF1cbiAgfVxuXG4gIHJldHVybiBzdHI7XG59XG5cbi8qKlxuICogSWYgdGhlIHRoaW5nIGlzIGEgRm9ybURhdGEgb2JqZWN0LCByZXR1cm4gdHJ1ZSwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cbiAqXG4gKiBAcGFyYW0ge3Vua25vd259IHRoaW5nIC0gVGhlIHRoaW5nIHRvIGNoZWNrLlxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc1NwZWNDb21wbGlhbnRGb3JtKHRoaW5nKSB7XG4gIHJldHVybiAhISh0aGluZyAmJiBpc0Z1bmN0aW9uKHRoaW5nLmFwcGVuZCkgJiYgdGhpbmdbU3ltYm9sLnRvU3RyaW5nVGFnXSA9PT0gJ0Zvcm1EYXRhJyAmJiB0aGluZ1tTeW1ib2wuaXRlcmF0b3JdKTtcbn1cblxuY29uc3QgdG9KU09OT2JqZWN0ID0gKG9iaikgPT4ge1xuICBjb25zdCBzdGFjayA9IG5ldyBBcnJheSgxMCk7XG5cbiAgY29uc3QgdmlzaXQgPSAoc291cmNlLCBpKSA9PiB7XG5cbiAgICBpZiAoaXNPYmplY3Qoc291cmNlKSkge1xuICAgICAgaWYgKHN0YWNrLmluZGV4T2Yoc291cmNlKSA+PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYoISgndG9KU09OJyBpbiBzb3VyY2UpKSB7XG4gICAgICAgIHN0YWNrW2ldID0gc291cmNlO1xuICAgICAgICBjb25zdCB0YXJnZXQgPSBpc0FycmF5KHNvdXJjZSkgPyBbXSA6IHt9O1xuXG4gICAgICAgIGZvckVhY2goc291cmNlLCAodmFsdWUsIGtleSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHJlZHVjZWRWYWx1ZSA9IHZpc2l0KHZhbHVlLCBpICsgMSk7XG4gICAgICAgICAgIWlzVW5kZWZpbmVkKHJlZHVjZWRWYWx1ZSkgJiYgKHRhcmdldFtrZXldID0gcmVkdWNlZFZhbHVlKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgc3RhY2tbaV0gPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc291cmNlO1xuICB9XG5cbiAgcmV0dXJuIHZpc2l0KG9iaiwgMCk7XG59XG5cbmNvbnN0IGlzQXN5bmNGbiA9IGtpbmRPZlRlc3QoJ0FzeW5jRnVuY3Rpb24nKTtcblxuY29uc3QgaXNUaGVuYWJsZSA9ICh0aGluZykgPT5cbiAgdGhpbmcgJiYgKGlzT2JqZWN0KHRoaW5nKSB8fCBpc0Z1bmN0aW9uKHRoaW5nKSkgJiYgaXNGdW5jdGlvbih0aGluZy50aGVuKSAmJiBpc0Z1bmN0aW9uKHRoaW5nLmNhdGNoKTtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBpc0FycmF5LFxuICBpc0FycmF5QnVmZmVyLFxuICBpc0J1ZmZlcixcbiAgaXNGb3JtRGF0YSxcbiAgaXNBcnJheUJ1ZmZlclZpZXcsXG4gIGlzU3RyaW5nLFxuICBpc051bWJlcixcbiAgaXNCb29sZWFuLFxuICBpc09iamVjdCxcbiAgaXNQbGFpbk9iamVjdCxcbiAgaXNVbmRlZmluZWQsXG4gIGlzRGF0ZSxcbiAgaXNGaWxlLFxuICBpc0Jsb2IsXG4gIGlzUmVnRXhwLFxuICBpc0Z1bmN0aW9uLFxuICBpc1N0cmVhbSxcbiAgaXNVUkxTZWFyY2hQYXJhbXMsXG4gIGlzVHlwZWRBcnJheSxcbiAgaXNGaWxlTGlzdCxcbiAgZm9yRWFjaCxcbiAgbWVyZ2UsXG4gIGV4dGVuZCxcbiAgdHJpbSxcbiAgc3RyaXBCT00sXG4gIGluaGVyaXRzLFxuICB0b0ZsYXRPYmplY3QsXG4gIGtpbmRPZixcbiAga2luZE9mVGVzdCxcbiAgZW5kc1dpdGgsXG4gIHRvQXJyYXksXG4gIGZvckVhY2hFbnRyeSxcbiAgbWF0Y2hBbGwsXG4gIGlzSFRNTEZvcm0sXG4gIGhhc093blByb3BlcnR5LFxuICBoYXNPd25Qcm9wOiBoYXNPd25Qcm9wZXJ0eSwgLy8gYW4gYWxpYXMgdG8gYXZvaWQgRVNMaW50IG5vLXByb3RvdHlwZS1idWlsdGlucyBkZXRlY3Rpb25cbiAgcmVkdWNlRGVzY3JpcHRvcnMsXG4gIGZyZWV6ZU1ldGhvZHMsXG4gIHRvT2JqZWN0U2V0LFxuICB0b0NhbWVsQ2FzZSxcbiAgbm9vcCxcbiAgdG9GaW5pdGVOdW1iZXIsXG4gIGZpbmRLZXksXG4gIGdsb2JhbDogX2dsb2JhbCxcbiAgaXNDb250ZXh0RGVmaW5lZCxcbiAgQUxQSEFCRVQsXG4gIGdlbmVyYXRlU3RyaW5nLFxuICBpc1NwZWNDb21wbGlhbnRGb3JtLFxuICB0b0pTT05PYmplY3QsXG4gIGlzQXN5bmNGbixcbiAgaXNUaGVuYWJsZVxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcblxuLyoqXG4gKiBDcmVhdGUgYW4gRXJyb3Igd2l0aCB0aGUgc3BlY2lmaWVkIG1lc3NhZ2UsIGNvbmZpZywgZXJyb3IgY29kZSwgcmVxdWVzdCBhbmQgcmVzcG9uc2UuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gW2NvZGVdIFRoZSBlcnJvciBjb2RlIChmb3IgZXhhbXBsZSwgJ0VDT05OQUJPUlRFRCcpLlxuICogQHBhcmFtIHtPYmplY3R9IFtjb25maWddIFRoZSBjb25maWcuXG4gKiBAcGFyYW0ge09iamVjdH0gW3JlcXVlc3RdIFRoZSByZXF1ZXN0LlxuICogQHBhcmFtIHtPYmplY3R9IFtyZXNwb25zZV0gVGhlIHJlc3BvbnNlLlxuICpcbiAqIEByZXR1cm5zIHtFcnJvcn0gVGhlIGNyZWF0ZWQgZXJyb3IuXG4gKi9cbmZ1bmN0aW9uIEF4aW9zRXJyb3IobWVzc2FnZSwgY29kZSwgY29uZmlnLCByZXF1ZXN0LCByZXNwb25zZSkge1xuICBFcnJvci5jYWxsKHRoaXMpO1xuXG4gIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSkge1xuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHRoaXMuY29uc3RydWN0b3IpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuc3RhY2sgPSAobmV3IEVycm9yKCkpLnN0YWNrO1xuICB9XG5cbiAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcbiAgdGhpcy5uYW1lID0gJ0F4aW9zRXJyb3InO1xuICBjb2RlICYmICh0aGlzLmNvZGUgPSBjb2RlKTtcbiAgY29uZmlnICYmICh0aGlzLmNvbmZpZyA9IGNvbmZpZyk7XG4gIHJlcXVlc3QgJiYgKHRoaXMucmVxdWVzdCA9IHJlcXVlc3QpO1xuICByZXNwb25zZSAmJiAodGhpcy5yZXNwb25zZSA9IHJlc3BvbnNlKTtcbn1cblxudXRpbHMuaW5oZXJpdHMoQXhpb3NFcnJvciwgRXJyb3IsIHtcbiAgdG9KU09OOiBmdW5jdGlvbiB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIFN0YW5kYXJkXG4gICAgICBtZXNzYWdlOiB0aGlzLm1lc3NhZ2UsXG4gICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAvLyBNaWNyb3NvZnRcbiAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLmRlc2NyaXB0aW9uLFxuICAgICAgbnVtYmVyOiB0aGlzLm51bWJlcixcbiAgICAgIC8vIE1vemlsbGFcbiAgICAgIGZpbGVOYW1lOiB0aGlzLmZpbGVOYW1lLFxuICAgICAgbGluZU51bWJlcjogdGhpcy5saW5lTnVtYmVyLFxuICAgICAgY29sdW1uTnVtYmVyOiB0aGlzLmNvbHVtbk51bWJlcixcbiAgICAgIHN0YWNrOiB0aGlzLnN0YWNrLFxuICAgICAgLy8gQXhpb3NcbiAgICAgIGNvbmZpZzogdXRpbHMudG9KU09OT2JqZWN0KHRoaXMuY29uZmlnKSxcbiAgICAgIGNvZGU6IHRoaXMuY29kZSxcbiAgICAgIHN0YXR1czogdGhpcy5yZXNwb25zZSAmJiB0aGlzLnJlc3BvbnNlLnN0YXR1cyA/IHRoaXMucmVzcG9uc2Uuc3RhdHVzIDogbnVsbFxuICAgIH07XG4gIH1cbn0pO1xuXG5jb25zdCBwcm90b3R5cGUgPSBBeGlvc0Vycm9yLnByb3RvdHlwZTtcbmNvbnN0IGRlc2NyaXB0b3JzID0ge307XG5cbltcbiAgJ0VSUl9CQURfT1BUSU9OX1ZBTFVFJyxcbiAgJ0VSUl9CQURfT1BUSU9OJyxcbiAgJ0VDT05OQUJPUlRFRCcsXG4gICdFVElNRURPVVQnLFxuICAnRVJSX05FVFdPUksnLFxuICAnRVJSX0ZSX1RPT19NQU5ZX1JFRElSRUNUUycsXG4gICdFUlJfREVQUkVDQVRFRCcsXG4gICdFUlJfQkFEX1JFU1BPTlNFJyxcbiAgJ0VSUl9CQURfUkVRVUVTVCcsXG4gICdFUlJfQ0FOQ0VMRUQnLFxuICAnRVJSX05PVF9TVVBQT1JUJyxcbiAgJ0VSUl9JTlZBTElEX1VSTCdcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5dLmZvckVhY2goY29kZSA9PiB7XG4gIGRlc2NyaXB0b3JzW2NvZGVdID0ge3ZhbHVlOiBjb2RlfTtcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhBeGlvc0Vycm9yLCBkZXNjcmlwdG9ycyk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkocHJvdG90eXBlLCAnaXNBeGlvc0Vycm9yJywge3ZhbHVlOiB0cnVlfSk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5BeGlvc0Vycm9yLmZyb20gPSAoZXJyb3IsIGNvZGUsIGNvbmZpZywgcmVxdWVzdCwgcmVzcG9uc2UsIGN1c3RvbVByb3BzKSA9PiB7XG4gIGNvbnN0IGF4aW9zRXJyb3IgPSBPYmplY3QuY3JlYXRlKHByb3RvdHlwZSk7XG5cbiAgdXRpbHMudG9GbGF0T2JqZWN0KGVycm9yLCBheGlvc0Vycm9yLCBmdW5jdGlvbiBmaWx0ZXIob2JqKSB7XG4gICAgcmV0dXJuIG9iaiAhPT0gRXJyb3IucHJvdG90eXBlO1xuICB9LCBwcm9wID0+IHtcbiAgICByZXR1cm4gcHJvcCAhPT0gJ2lzQXhpb3NFcnJvcic7XG4gIH0pO1xuXG4gIEF4aW9zRXJyb3IuY2FsbChheGlvc0Vycm9yLCBlcnJvci5tZXNzYWdlLCBjb2RlLCBjb25maWcsIHJlcXVlc3QsIHJlc3BvbnNlKTtcblxuICBheGlvc0Vycm9yLmNhdXNlID0gZXJyb3I7XG5cbiAgYXhpb3NFcnJvci5uYW1lID0gZXJyb3IubmFtZTtcblxuICBjdXN0b21Qcm9wcyAmJiBPYmplY3QuYXNzaWduKGF4aW9zRXJyb3IsIGN1c3RvbVByb3BzKTtcblxuICByZXR1cm4gYXhpb3NFcnJvcjtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEF4aW9zRXJyb3I7XG4iLCIvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgc3RyaWN0XG5leHBvcnQgZGVmYXVsdCBudWxsO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IEF4aW9zRXJyb3IgZnJvbSAnLi4vY29yZS9BeGlvc0Vycm9yLmpzJztcbi8vIHRlbXBvcmFyeSBob3RmaXggdG8gYXZvaWQgY2lyY3VsYXIgcmVmZXJlbmNlcyB1bnRpbCBBeGlvc1VSTFNlYXJjaFBhcmFtcyBpcyByZWZhY3RvcmVkXG5pbXBvcnQgUGxhdGZvcm1Gb3JtRGF0YSBmcm9tICcuLi9wbGF0Zm9ybS9ub2RlL2NsYXNzZXMvRm9ybURhdGEuanMnO1xuXG4vKipcbiAqIERldGVybWluZXMgaWYgdGhlIGdpdmVuIHRoaW5nIGlzIGEgYXJyYXkgb3IganMgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0aGluZyAtIFRoZSBvYmplY3Qgb3IgYXJyYXkgdG8gYmUgdmlzaXRlZC5cbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNWaXNpdGFibGUodGhpbmcpIHtcbiAgcmV0dXJuIHV0aWxzLmlzUGxhaW5PYmplY3QodGhpbmcpIHx8IHV0aWxzLmlzQXJyYXkodGhpbmcpO1xufVxuXG4vKipcbiAqIEl0IHJlbW92ZXMgdGhlIGJyYWNrZXRzIGZyb20gdGhlIGVuZCBvZiBhIHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUga2V5IG9mIHRoZSBwYXJhbWV0ZXIuXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gdGhlIGtleSB3aXRob3V0IHRoZSBicmFja2V0cy5cbiAqL1xuZnVuY3Rpb24gcmVtb3ZlQnJhY2tldHMoa2V5KSB7XG4gIHJldHVybiB1dGlscy5lbmRzV2l0aChrZXksICdbXScpID8ga2V5LnNsaWNlKDAsIC0yKSA6IGtleTtcbn1cblxuLyoqXG4gKiBJdCB0YWtlcyBhIHBhdGgsIGEga2V5LCBhbmQgYSBib29sZWFuLCBhbmQgcmV0dXJucyBhIHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIC0gVGhlIHBhdGggdG8gdGhlIGN1cnJlbnQga2V5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBrZXkgb2YgdGhlIGN1cnJlbnQgb2JqZWN0IGJlaW5nIGl0ZXJhdGVkIG92ZXIuXG4gKiBAcGFyYW0ge3N0cmluZ30gZG90cyAtIElmIHRydWUsIHRoZSBrZXkgd2lsbCBiZSByZW5kZXJlZCB3aXRoIGRvdHMgaW5zdGVhZCBvZiBicmFja2V0cy5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgcGF0aCB0byB0aGUgY3VycmVudCBrZXkuXG4gKi9cbmZ1bmN0aW9uIHJlbmRlcktleShwYXRoLCBrZXksIGRvdHMpIHtcbiAgaWYgKCFwYXRoKSByZXR1cm4ga2V5O1xuICByZXR1cm4gcGF0aC5jb25jYXQoa2V5KS5tYXAoZnVuY3Rpb24gZWFjaCh0b2tlbiwgaSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgIHRva2VuID0gcmVtb3ZlQnJhY2tldHModG9rZW4pO1xuICAgIHJldHVybiAhZG90cyAmJiBpID8gJ1snICsgdG9rZW4gKyAnXScgOiB0b2tlbjtcbiAgfSkuam9pbihkb3RzID8gJy4nIDogJycpO1xufVxuXG4vKipcbiAqIElmIHRoZSBhcnJheSBpcyBhbiBhcnJheSBhbmQgbm9uZSBvZiBpdHMgZWxlbWVudHMgYXJlIHZpc2l0YWJsZSwgdGhlbiBpdCdzIGEgZmxhdCBhcnJheS5cbiAqXG4gKiBAcGFyYW0ge0FycmF5PGFueT59IGFyciAtIFRoZSBhcnJheSB0byBjaGVja1xuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc0ZsYXRBcnJheShhcnIpIHtcbiAgcmV0dXJuIHV0aWxzLmlzQXJyYXkoYXJyKSAmJiAhYXJyLnNvbWUoaXNWaXNpdGFibGUpO1xufVxuXG5jb25zdCBwcmVkaWNhdGVzID0gdXRpbHMudG9GbGF0T2JqZWN0KHV0aWxzLCB7fSwgbnVsbCwgZnVuY3Rpb24gZmlsdGVyKHByb3ApIHtcbiAgcmV0dXJuIC9eaXNbQS1aXS8udGVzdChwcm9wKTtcbn0pO1xuXG4vKipcbiAqIENvbnZlcnQgYSBkYXRhIG9iamVjdCB0byBGb3JtRGF0YVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAqIEBwYXJhbSB7P09iamVjdH0gW2Zvcm1EYXRhXVxuICogQHBhcmFtIHs/T2JqZWN0fSBbb3B0aW9uc11cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRpb25zLnZpc2l0b3JdXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLm1ldGFUb2tlbnMgPSB0cnVlXVxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy5kb3RzID0gZmFsc2VdXG4gKiBAcGFyYW0gez9Cb29sZWFufSBbb3B0aW9ucy5pbmRleGVzID0gZmFsc2VdXG4gKlxuICogQHJldHVybnMge09iamVjdH1cbiAqKi9cblxuLyoqXG4gKiBJdCBjb252ZXJ0cyBhbiBvYmplY3QgaW50byBhIEZvcm1EYXRhIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0PGFueSwgYW55Pn0gb2JqIC0gVGhlIG9iamVjdCB0byBjb252ZXJ0IHRvIGZvcm0gZGF0YS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmb3JtRGF0YSAtIFRoZSBGb3JtRGF0YSBvYmplY3QgdG8gYXBwZW5kIHRvLlxuICogQHBhcmFtIHtPYmplY3Q8c3RyaW5nLCBhbnk+fSBvcHRpb25zXG4gKlxuICogQHJldHVybnNcbiAqL1xuZnVuY3Rpb24gdG9Gb3JtRGF0YShvYmosIGZvcm1EYXRhLCBvcHRpb25zKSB7XG4gIGlmICghdXRpbHMuaXNPYmplY3Qob2JqKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3RhcmdldCBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gIGZvcm1EYXRhID0gZm9ybURhdGEgfHwgbmV3IChQbGF0Zm9ybUZvcm1EYXRhIHx8IEZvcm1EYXRhKSgpO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICBvcHRpb25zID0gdXRpbHMudG9GbGF0T2JqZWN0KG9wdGlvbnMsIHtcbiAgICBtZXRhVG9rZW5zOiB0cnVlLFxuICAgIGRvdHM6IGZhbHNlLFxuICAgIGluZGV4ZXM6IGZhbHNlXG4gIH0sIGZhbHNlLCBmdW5jdGlvbiBkZWZpbmVkKG9wdGlvbiwgc291cmNlKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVxLW51bGwsZXFlcWVxXG4gICAgcmV0dXJuICF1dGlscy5pc1VuZGVmaW5lZChzb3VyY2Vbb3B0aW9uXSk7XG4gIH0pO1xuXG4gIGNvbnN0IG1ldGFUb2tlbnMgPSBvcHRpb25zLm1ldGFUb2tlbnM7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2UtYmVmb3JlLWRlZmluZVxuICBjb25zdCB2aXNpdG9yID0gb3B0aW9ucy52aXNpdG9yIHx8IGRlZmF1bHRWaXNpdG9yO1xuICBjb25zdCBkb3RzID0gb3B0aW9ucy5kb3RzO1xuICBjb25zdCBpbmRleGVzID0gb3B0aW9ucy5pbmRleGVzO1xuICBjb25zdCBfQmxvYiA9IG9wdGlvbnMuQmxvYiB8fCB0eXBlb2YgQmxvYiAhPT0gJ3VuZGVmaW5lZCcgJiYgQmxvYjtcbiAgY29uc3QgdXNlQmxvYiA9IF9CbG9iICYmIHV0aWxzLmlzU3BlY0NvbXBsaWFudEZvcm0oZm9ybURhdGEpO1xuXG4gIGlmICghdXRpbHMuaXNGdW5jdGlvbih2aXNpdG9yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3Zpc2l0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gIH1cblxuICBmdW5jdGlvbiBjb252ZXJ0VmFsdWUodmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT09IG51bGwpIHJldHVybiAnJztcblxuICAgIGlmICh1dGlscy5pc0RhdGUodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdmFsdWUudG9JU09TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBpZiAoIXVzZUJsb2IgJiYgdXRpbHMuaXNCbG9iKHZhbHVlKSkge1xuICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoJ0Jsb2IgaXMgbm90IHN1cHBvcnRlZC4gVXNlIGEgQnVmZmVyIGluc3RlYWQuJyk7XG4gICAgfVxuXG4gICAgaWYgKHV0aWxzLmlzQXJyYXlCdWZmZXIodmFsdWUpIHx8IHV0aWxzLmlzVHlwZWRBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB1c2VCbG9iICYmIHR5cGVvZiBCbG9iID09PSAnZnVuY3Rpb24nID8gbmV3IEJsb2IoW3ZhbHVlXSkgOiBCdWZmZXIuZnJvbSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmF1bHQgdmlzaXRvci5cbiAgICpcbiAgICogQHBhcmFtIHsqfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ3xOdW1iZXJ9IGtleVxuICAgKiBAcGFyYW0ge0FycmF5PFN0cmluZ3xOdW1iZXI+fSBwYXRoXG4gICAqIEB0aGlzIHtGb3JtRGF0YX1cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59IHJldHVybiB0cnVlIHRvIHZpc2l0IHRoZSBlYWNoIHByb3Agb2YgdGhlIHZhbHVlIHJlY3Vyc2l2ZWx5XG4gICAqL1xuICBmdW5jdGlvbiBkZWZhdWx0VmlzaXRvcih2YWx1ZSwga2V5LCBwYXRoKSB7XG4gICAgbGV0IGFyciA9IHZhbHVlO1xuXG4gICAgaWYgKHZhbHVlICYmICFwYXRoICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGlmICh1dGlscy5lbmRzV2l0aChrZXksICd7fScpKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICBrZXkgPSBtZXRhVG9rZW5zID8ga2V5IDoga2V5LnNsaWNlKDAsIC0yKTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgIHZhbHVlID0gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgKHV0aWxzLmlzQXJyYXkodmFsdWUpICYmIGlzRmxhdEFycmF5KHZhbHVlKSkgfHxcbiAgICAgICAgKCh1dGlscy5pc0ZpbGVMaXN0KHZhbHVlKSB8fCB1dGlscy5lbmRzV2l0aChrZXksICdbXScpKSAmJiAoYXJyID0gdXRpbHMudG9BcnJheSh2YWx1ZSkpXG4gICAgICAgICkpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgIGtleSA9IHJlbW92ZUJyYWNrZXRzKGtleSk7XG5cbiAgICAgICAgYXJyLmZvckVhY2goZnVuY3Rpb24gZWFjaChlbCwgaW5kZXgpIHtcbiAgICAgICAgICAhKHV0aWxzLmlzVW5kZWZpbmVkKGVsKSB8fCBlbCA9PT0gbnVsbCkgJiYgZm9ybURhdGEuYXBwZW5kKFxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5lc3RlZC10ZXJuYXJ5XG4gICAgICAgICAgICBpbmRleGVzID09PSB0cnVlID8gcmVuZGVyS2V5KFtrZXldLCBpbmRleCwgZG90cykgOiAoaW5kZXhlcyA9PT0gbnVsbCA/IGtleSA6IGtleSArICdbXScpLFxuICAgICAgICAgICAgY29udmVydFZhbHVlKGVsKVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGlzVmlzaXRhYmxlKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZm9ybURhdGEuYXBwZW5kKHJlbmRlcktleShwYXRoLCBrZXksIGRvdHMpLCBjb252ZXJ0VmFsdWUodmFsdWUpKTtcblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IHN0YWNrID0gW107XG5cbiAgY29uc3QgZXhwb3NlZEhlbHBlcnMgPSBPYmplY3QuYXNzaWduKHByZWRpY2F0ZXMsIHtcbiAgICBkZWZhdWx0VmlzaXRvcixcbiAgICBjb252ZXJ0VmFsdWUsXG4gICAgaXNWaXNpdGFibGVcbiAgfSk7XG5cbiAgZnVuY3Rpb24gYnVpbGQodmFsdWUsIHBhdGgpIHtcbiAgICBpZiAodXRpbHMuaXNVbmRlZmluZWQodmFsdWUpKSByZXR1cm47XG5cbiAgICBpZiAoc3RhY2suaW5kZXhPZih2YWx1ZSkgIT09IC0xKSB7XG4gICAgICB0aHJvdyBFcnJvcignQ2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGVkIGluICcgKyBwYXRoLmpvaW4oJy4nKSk7XG4gICAgfVxuXG4gICAgc3RhY2sucHVzaCh2YWx1ZSk7XG5cbiAgICB1dGlscy5mb3JFYWNoKHZhbHVlLCBmdW5jdGlvbiBlYWNoKGVsLCBrZXkpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9ICEodXRpbHMuaXNVbmRlZmluZWQoZWwpIHx8IGVsID09PSBudWxsKSAmJiB2aXNpdG9yLmNhbGwoXG4gICAgICAgIGZvcm1EYXRhLCBlbCwgdXRpbHMuaXNTdHJpbmcoa2V5KSA/IGtleS50cmltKCkgOiBrZXksIHBhdGgsIGV4cG9zZWRIZWxwZXJzXG4gICAgICApO1xuXG4gICAgICBpZiAocmVzdWx0ID09PSB0cnVlKSB7XG4gICAgICAgIGJ1aWxkKGVsLCBwYXRoID8gcGF0aC5jb25jYXQoa2V5KSA6IFtrZXldKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHN0YWNrLnBvcCgpO1xuICB9XG5cbiAgaWYgKCF1dGlscy5pc09iamVjdChvYmopKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZGF0YSBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICB9XG5cbiAgYnVpbGQob2JqKTtcblxuICByZXR1cm4gZm9ybURhdGE7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHRvRm9ybURhdGE7XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB0b0Zvcm1EYXRhIGZyb20gJy4vdG9Gb3JtRGF0YS5qcyc7XG5cbi8qKlxuICogSXQgZW5jb2RlcyBhIHN0cmluZyBieSByZXBsYWNpbmcgYWxsIGNoYXJhY3RlcnMgdGhhdCBhcmUgbm90IGluIHRoZSB1bnJlc2VydmVkIHNldCB3aXRoXG4gKiB0aGVpciBwZXJjZW50LWVuY29kZWQgZXF1aXZhbGVudHNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyIC0gVGhlIHN0cmluZyB0byBlbmNvZGUuXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGVuY29kZWQgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBlbmNvZGUoc3RyKSB7XG4gIGNvbnN0IGNoYXJNYXAgPSB7XG4gICAgJyEnOiAnJTIxJyxcbiAgICBcIidcIjogJyUyNycsXG4gICAgJygnOiAnJTI4JyxcbiAgICAnKSc6ICclMjknLFxuICAgICd+JzogJyU3RScsXG4gICAgJyUyMCc6ICcrJyxcbiAgICAnJTAwJzogJ1xceDAwJ1xuICB9O1xuICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHN0cikucmVwbGFjZSgvWyEnKCl+XXwlMjB8JTAwL2csIGZ1bmN0aW9uIHJlcGxhY2VyKG1hdGNoKSB7XG4gICAgcmV0dXJuIGNoYXJNYXBbbWF0Y2hdO1xuICB9KTtcbn1cblxuLyoqXG4gKiBJdCB0YWtlcyBhIHBhcmFtcyBvYmplY3QgYW5kIGNvbnZlcnRzIGl0IHRvIGEgRm9ybURhdGEgb2JqZWN0XG4gKlxuICogQHBhcmFtIHtPYmplY3Q8c3RyaW5nLCBhbnk+fSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyB0byBiZSBjb252ZXJ0ZWQgdG8gYSBGb3JtRGF0YSBvYmplY3QuXG4gKiBAcGFyYW0ge09iamVjdDxzdHJpbmcsIGFueT59IG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBvYmplY3QgcGFzc2VkIHRvIHRoZSBBeGlvcyBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gQXhpb3NVUkxTZWFyY2hQYXJhbXMocGFyYW1zLCBvcHRpb25zKSB7XG4gIHRoaXMuX3BhaXJzID0gW107XG5cbiAgcGFyYW1zICYmIHRvRm9ybURhdGEocGFyYW1zLCB0aGlzLCBvcHRpb25zKTtcbn1cblxuY29uc3QgcHJvdG90eXBlID0gQXhpb3NVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlO1xuXG5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24gYXBwZW5kKG5hbWUsIHZhbHVlKSB7XG4gIHRoaXMuX3BhaXJzLnB1c2goW25hbWUsIHZhbHVlXSk7XG59O1xuXG5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZyhlbmNvZGVyKSB7XG4gIGNvbnN0IF9lbmNvZGUgPSBlbmNvZGVyID8gZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gZW5jb2Rlci5jYWxsKHRoaXMsIHZhbHVlLCBlbmNvZGUpO1xuICB9IDogZW5jb2RlO1xuXG4gIHJldHVybiB0aGlzLl9wYWlycy5tYXAoZnVuY3Rpb24gZWFjaChwYWlyKSB7XG4gICAgcmV0dXJuIF9lbmNvZGUocGFpclswXSkgKyAnPScgKyBfZW5jb2RlKHBhaXJbMV0pO1xuICB9LCAnJykuam9pbignJicpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgQXhpb3NVUkxTZWFyY2hQYXJhbXM7XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5pbXBvcnQgQXhpb3NVUkxTZWFyY2hQYXJhbXMgZnJvbSAnLi4vaGVscGVycy9BeGlvc1VSTFNlYXJjaFBhcmFtcy5qcyc7XG5cbi8qKlxuICogSXQgcmVwbGFjZXMgYWxsIGluc3RhbmNlcyBvZiB0aGUgY2hhcmFjdGVycyBgOmAsIGAkYCwgYCxgLCBgK2AsIGBbYCwgYW5kIGBdYCB3aXRoIHRoZWlyXG4gKiBVUkkgZW5jb2RlZCBjb3VudGVycGFydHNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsIFRoZSB2YWx1ZSB0byBiZSBlbmNvZGVkLlxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBlbmNvZGVkIHZhbHVlLlxuICovXG5mdW5jdGlvbiBlbmNvZGUodmFsKSB7XG4gIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQodmFsKS5cbiAgICByZXBsYWNlKC8lM0EvZ2ksICc6JykuXG4gICAgcmVwbGFjZSgvJTI0L2csICckJykuXG4gICAgcmVwbGFjZSgvJTJDL2dpLCAnLCcpLlxuICAgIHJlcGxhY2UoLyUyMC9nLCAnKycpLlxuICAgIHJlcGxhY2UoLyU1Qi9naSwgJ1snKS5cbiAgICByZXBsYWNlKC8lNUQvZ2ksICddJyk7XG59XG5cbi8qKlxuICogQnVpbGQgYSBVUkwgYnkgYXBwZW5kaW5nIHBhcmFtcyB0byB0aGUgZW5kXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHVybCBUaGUgYmFzZSBvZiB0aGUgdXJsIChlLmcuLCBodHRwOi8vd3d3Lmdvb2dsZS5jb20pXG4gKiBAcGFyYW0ge29iamVjdH0gW3BhcmFtc10gVGhlIHBhcmFtcyB0byBiZSBhcHBlbmRlZFxuICogQHBhcmFtIHs/b2JqZWN0fSBvcHRpb25zXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGZvcm1hdHRlZCB1cmxcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYnVpbGRVUkwodXJsLCBwYXJhbXMsIG9wdGlvbnMpIHtcbiAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gIGlmICghcGFyYW1zKSB7XG4gICAgcmV0dXJuIHVybDtcbiAgfVxuICBcbiAgY29uc3QgX2VuY29kZSA9IG9wdGlvbnMgJiYgb3B0aW9ucy5lbmNvZGUgfHwgZW5jb2RlO1xuXG4gIGNvbnN0IHNlcmlhbGl6ZUZuID0gb3B0aW9ucyAmJiBvcHRpb25zLnNlcmlhbGl6ZTtcblxuICBsZXQgc2VyaWFsaXplZFBhcmFtcztcblxuICBpZiAoc2VyaWFsaXplRm4pIHtcbiAgICBzZXJpYWxpemVkUGFyYW1zID0gc2VyaWFsaXplRm4ocGFyYW1zLCBvcHRpb25zKTtcbiAgfSBlbHNlIHtcbiAgICBzZXJpYWxpemVkUGFyYW1zID0gdXRpbHMuaXNVUkxTZWFyY2hQYXJhbXMocGFyYW1zKSA/XG4gICAgICBwYXJhbXMudG9TdHJpbmcoKSA6XG4gICAgICBuZXcgQXhpb3NVUkxTZWFyY2hQYXJhbXMocGFyYW1zLCBvcHRpb25zKS50b1N0cmluZyhfZW5jb2RlKTtcbiAgfVxuXG4gIGlmIChzZXJpYWxpemVkUGFyYW1zKSB7XG4gICAgY29uc3QgaGFzaG1hcmtJbmRleCA9IHVybC5pbmRleE9mKFwiI1wiKTtcblxuICAgIGlmIChoYXNobWFya0luZGV4ICE9PSAtMSkge1xuICAgICAgdXJsID0gdXJsLnNsaWNlKDAsIGhhc2htYXJrSW5kZXgpO1xuICAgIH1cbiAgICB1cmwgKz0gKHVybC5pbmRleE9mKCc/JykgPT09IC0xID8gJz8nIDogJyYnKSArIHNlcmlhbGl6ZWRQYXJhbXM7XG4gIH1cblxuICByZXR1cm4gdXJsO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi8uLi91dGlscy5qcyc7XG5cbmNsYXNzIEludGVyY2VwdG9yTWFuYWdlciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuaGFuZGxlcnMgPSBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBuZXcgaW50ZXJjZXB0b3IgdG8gdGhlIHN0YWNrXG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bGZpbGxlZCBUaGUgZnVuY3Rpb24gdG8gaGFuZGxlIGB0aGVuYCBmb3IgYSBgUHJvbWlzZWBcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gcmVqZWN0ZWQgVGhlIGZ1bmN0aW9uIHRvIGhhbmRsZSBgcmVqZWN0YCBmb3IgYSBgUHJvbWlzZWBcbiAgICpcbiAgICogQHJldHVybiB7TnVtYmVyfSBBbiBJRCB1c2VkIHRvIHJlbW92ZSBpbnRlcmNlcHRvciBsYXRlclxuICAgKi9cbiAgdXNlKGZ1bGZpbGxlZCwgcmVqZWN0ZWQsIG9wdGlvbnMpIHtcbiAgICB0aGlzLmhhbmRsZXJzLnB1c2goe1xuICAgICAgZnVsZmlsbGVkLFxuICAgICAgcmVqZWN0ZWQsXG4gICAgICBzeW5jaHJvbm91czogb3B0aW9ucyA/IG9wdGlvbnMuc3luY2hyb25vdXMgOiBmYWxzZSxcbiAgICAgIHJ1bldoZW46IG9wdGlvbnMgPyBvcHRpb25zLnJ1bldoZW4gOiBudWxsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlcnMubGVuZ3RoIC0gMTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYW4gaW50ZXJjZXB0b3IgZnJvbSB0aGUgc3RhY2tcbiAgICpcbiAgICogQHBhcmFtIHtOdW1iZXJ9IGlkIFRoZSBJRCB0aGF0IHdhcyByZXR1cm5lZCBieSBgdXNlYFxuICAgKlxuICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gYHRydWVgIGlmIHRoZSBpbnRlcmNlcHRvciB3YXMgcmVtb3ZlZCwgYGZhbHNlYCBvdGhlcndpc2VcbiAgICovXG4gIGVqZWN0KGlkKSB7XG4gICAgaWYgKHRoaXMuaGFuZGxlcnNbaWRdKSB7XG4gICAgICB0aGlzLmhhbmRsZXJzW2lkXSA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENsZWFyIGFsbCBpbnRlcmNlcHRvcnMgZnJvbSB0aGUgc3RhY2tcbiAgICpcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBjbGVhcigpIHtcbiAgICBpZiAodGhpcy5oYW5kbGVycykge1xuICAgICAgdGhpcy5oYW5kbGVycyA9IFtdO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJdGVyYXRlIG92ZXIgYWxsIHRoZSByZWdpc3RlcmVkIGludGVyY2VwdG9yc1xuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIGZvciBza2lwcGluZyBvdmVyIGFueVxuICAgKiBpbnRlcmNlcHRvcnMgdGhhdCBtYXkgaGF2ZSBiZWNvbWUgYG51bGxgIGNhbGxpbmcgYGVqZWN0YC5cbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGZ1bmN0aW9uIHRvIGNhbGwgZm9yIGVhY2ggaW50ZXJjZXB0b3JcbiAgICpcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBmb3JFYWNoKGZuKSB7XG4gICAgdXRpbHMuZm9yRWFjaCh0aGlzLmhhbmRsZXJzLCBmdW5jdGlvbiBmb3JFYWNoSGFuZGxlcihoKSB7XG4gICAgICBpZiAoaCAhPT0gbnVsbCkge1xuICAgICAgICBmbihoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBJbnRlcmNlcHRvck1hbmFnZXI7XG4iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgc2lsZW50SlNPTlBhcnNpbmc6IHRydWUsXG4gIGZvcmNlZEpTT05QYXJzaW5nOiB0cnVlLFxuICBjbGFyaWZ5VGltZW91dEVycm9yOiBmYWxzZVxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IEF4aW9zVVJMU2VhcmNoUGFyYW1zIGZyb20gJy4uLy4uLy4uL2hlbHBlcnMvQXhpb3NVUkxTZWFyY2hQYXJhbXMuanMnO1xuZXhwb3J0IGRlZmF1bHQgdHlwZW9mIFVSTFNlYXJjaFBhcmFtcyAhPT0gJ3VuZGVmaW5lZCcgPyBVUkxTZWFyY2hQYXJhbXMgOiBBeGlvc1VSTFNlYXJjaFBhcmFtcztcbiIsIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0IGRlZmF1bHQgdHlwZW9mIEZvcm1EYXRhICE9PSAndW5kZWZpbmVkJyA/IEZvcm1EYXRhIDogbnVsbDtcbiIsIid1c2Ugc3RyaWN0J1xuXG5leHBvcnQgZGVmYXVsdCB0eXBlb2YgQmxvYiAhPT0gJ3VuZGVmaW5lZCcgPyBCbG9iIDogbnVsbFxuIiwiaW1wb3J0IFVSTFNlYXJjaFBhcmFtcyBmcm9tICcuL2NsYXNzZXMvVVJMU2VhcmNoUGFyYW1zLmpzJ1xuaW1wb3J0IEZvcm1EYXRhIGZyb20gJy4vY2xhc3Nlcy9Gb3JtRGF0YS5qcydcbmltcG9ydCBCbG9iIGZyb20gJy4vY2xhc3Nlcy9CbG9iLmpzJ1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGlzQnJvd3NlcjogdHJ1ZSxcbiAgY2xhc3Nlczoge1xuICAgIFVSTFNlYXJjaFBhcmFtcyxcbiAgICBGb3JtRGF0YSxcbiAgICBCbG9iXG4gIH0sXG4gIHByb3RvY29sczogWydodHRwJywgJ2h0dHBzJywgJ2ZpbGUnLCAnYmxvYicsICd1cmwnLCAnZGF0YSddXG59O1xuIiwiY29uc3QgaGFzQnJvd3NlckVudiA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCc7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gYSBzdGFuZGFyZCBicm93c2VyIGVudmlyb25tZW50XG4gKlxuICogVGhpcyBhbGxvd3MgYXhpb3MgdG8gcnVuIGluIGEgd2ViIHdvcmtlciwgYW5kIHJlYWN0LW5hdGl2ZS5cbiAqIEJvdGggZW52aXJvbm1lbnRzIHN1cHBvcnQgWE1MSHR0cFJlcXVlc3QsIGJ1dCBub3QgZnVsbHkgc3RhbmRhcmQgZ2xvYmFscy5cbiAqXG4gKiB3ZWIgd29ya2VyczpcbiAqICB0eXBlb2Ygd2luZG93IC0+IHVuZGVmaW5lZFxuICogIHR5cGVvZiBkb2N1bWVudCAtPiB1bmRlZmluZWRcbiAqXG4gKiByZWFjdC1uYXRpdmU6XG4gKiAgbmF2aWdhdG9yLnByb2R1Y3QgLT4gJ1JlYWN0TmF0aXZlJ1xuICogbmF0aXZlc2NyaXB0XG4gKiAgbmF2aWdhdG9yLnByb2R1Y3QgLT4gJ05hdGl2ZVNjcmlwdCcgb3IgJ05TJ1xuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5jb25zdCBoYXNTdGFuZGFyZEJyb3dzZXJFbnYgPSAoXG4gIChwcm9kdWN0KSA9PiB7XG4gICAgcmV0dXJuIGhhc0Jyb3dzZXJFbnYgJiYgWydSZWFjdE5hdGl2ZScsICdOYXRpdmVTY3JpcHQnLCAnTlMnXS5pbmRleE9mKHByb2R1Y3QpIDwgMFxuICB9KSh0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiBuYXZpZ2F0b3IucHJvZHVjdCk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gYSBzdGFuZGFyZCBicm93c2VyIHdlYldvcmtlciBlbnZpcm9ubWVudFxuICpcbiAqIEFsdGhvdWdoIHRoZSBgaXNTdGFuZGFyZEJyb3dzZXJFbnZgIG1ldGhvZCBpbmRpY2F0ZXMgdGhhdFxuICogYGFsbG93cyBheGlvcyB0byBydW4gaW4gYSB3ZWIgd29ya2VyYCwgdGhlIFdlYldvcmtlciB3aWxsIHN0aWxsIGJlXG4gKiBmaWx0ZXJlZCBvdXQgZHVlIHRvIGl0cyBqdWRnbWVudCBzdGFuZGFyZFxuICogYHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCdgLlxuICogVGhpcyBsZWFkcyB0byBhIHByb2JsZW0gd2hlbiBheGlvcyBwb3N0IGBGb3JtRGF0YWAgaW4gd2ViV29ya2VyXG4gKi9cbmNvbnN0IGhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudiA9ICgoKSA9PiB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlICE9PSAndW5kZWZpbmVkJyAmJlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICAgIHNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZSAmJlxuICAgIHR5cGVvZiBzZWxmLmltcG9ydFNjcmlwdHMgPT09ICdmdW5jdGlvbidcbiAgKTtcbn0pKCk7XG5cbmV4cG9ydCB7XG4gIGhhc0Jyb3dzZXJFbnYsXG4gIGhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudixcbiAgaGFzU3RhbmRhcmRCcm93c2VyRW52XG59XG4iLCJpbXBvcnQgcGxhdGZvcm0gZnJvbSAnLi9ub2RlL2luZGV4LmpzJztcbmltcG9ydCAqIGFzIHV0aWxzIGZyb20gJy4vY29tbW9uL3V0aWxzLmpzJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICAuLi51dGlscyxcbiAgLi4ucGxhdGZvcm1cbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcbmltcG9ydCB0b0Zvcm1EYXRhIGZyb20gJy4vdG9Gb3JtRGF0YS5qcyc7XG5pbXBvcnQgcGxhdGZvcm0gZnJvbSAnLi4vcGxhdGZvcm0vaW5kZXguanMnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0b1VSTEVuY29kZWRGb3JtKGRhdGEsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIHRvRm9ybURhdGEoZGF0YSwgbmV3IHBsYXRmb3JtLmNsYXNzZXMuVVJMU2VhcmNoUGFyYW1zKCksIE9iamVjdC5hc3NpZ24oe1xuICAgIHZpc2l0b3I6IGZ1bmN0aW9uKHZhbHVlLCBrZXksIHBhdGgsIGhlbHBlcnMpIHtcbiAgICAgIGlmIChwbGF0Zm9ybS5pc05vZGUgJiYgdXRpbHMuaXNCdWZmZXIodmFsdWUpKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKGtleSwgdmFsdWUudG9TdHJpbmcoJ2Jhc2U2NCcpKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gaGVscGVycy5kZWZhdWx0VmlzaXRvci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH1cbiAgfSwgb3B0aW9ucykpO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuXG4vKipcbiAqIEl0IHRha2VzIGEgc3RyaW5nIGxpa2UgYGZvb1t4XVt5XVt6XWAgYW5kIHJldHVybnMgYW4gYXJyYXkgbGlrZSBgWydmb28nLCAneCcsICd5JywgJ3onXVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqXG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiBzdHJpbmdzLlxuICovXG5mdW5jdGlvbiBwYXJzZVByb3BQYXRoKG5hbWUpIHtcbiAgLy8gZm9vW3hdW3ldW3pdXG4gIC8vIGZvby54LnkuelxuICAvLyBmb28teC15LXpcbiAgLy8gZm9vIHggeSB6XG4gIHJldHVybiB1dGlscy5tYXRjaEFsbCgvXFx3K3xcXFsoXFx3KildL2csIG5hbWUpLm1hcChtYXRjaCA9PiB7XG4gICAgcmV0dXJuIG1hdGNoWzBdID09PSAnW10nID8gJycgOiBtYXRjaFsxXSB8fCBtYXRjaFswXTtcbiAgfSk7XG59XG5cbi8qKlxuICogQ29udmVydCBhbiBhcnJheSB0byBhbiBvYmplY3QuXG4gKlxuICogQHBhcmFtIHtBcnJheTxhbnk+fSBhcnIgLSBUaGUgYXJyYXkgdG8gY29udmVydCB0byBhbiBvYmplY3QuXG4gKlxuICogQHJldHVybnMgQW4gb2JqZWN0IHdpdGggdGhlIHNhbWUga2V5cyBhbmQgdmFsdWVzIGFzIHRoZSBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYXJyYXlUb09iamVjdChhcnIpIHtcbiAgY29uc3Qgb2JqID0ge307XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhhcnIpO1xuICBsZXQgaTtcbiAgY29uc3QgbGVuID0ga2V5cy5sZW5ndGg7XG4gIGxldCBrZXk7XG4gIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIGtleSA9IGtleXNbaV07XG4gICAgb2JqW2tleV0gPSBhcnJba2V5XTtcbiAgfVxuICByZXR1cm4gb2JqO1xufVxuXG4vKipcbiAqIEl0IHRha2VzIGEgRm9ybURhdGEgb2JqZWN0IGFuZCByZXR1cm5zIGEgSmF2YVNjcmlwdCBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZm9ybURhdGEgVGhlIEZvcm1EYXRhIG9iamVjdCB0byBjb252ZXJ0IHRvIEpTT04uXG4gKlxuICogQHJldHVybnMge09iamVjdDxzdHJpbmcsIGFueT4gfCBudWxsfSBUaGUgY29udmVydGVkIG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gZm9ybURhdGFUb0pTT04oZm9ybURhdGEpIHtcbiAgZnVuY3Rpb24gYnVpbGRQYXRoKHBhdGgsIHZhbHVlLCB0YXJnZXQsIGluZGV4KSB7XG4gICAgbGV0IG5hbWUgPSBwYXRoW2luZGV4KytdO1xuXG4gICAgaWYgKG5hbWUgPT09ICdfX3Byb3RvX18nKSByZXR1cm4gdHJ1ZTtcblxuICAgIGNvbnN0IGlzTnVtZXJpY0tleSA9IE51bWJlci5pc0Zpbml0ZSgrbmFtZSk7XG4gICAgY29uc3QgaXNMYXN0ID0gaW5kZXggPj0gcGF0aC5sZW5ndGg7XG4gICAgbmFtZSA9ICFuYW1lICYmIHV0aWxzLmlzQXJyYXkodGFyZ2V0KSA/IHRhcmdldC5sZW5ndGggOiBuYW1lO1xuXG4gICAgaWYgKGlzTGFzdCkge1xuICAgICAgaWYgKHV0aWxzLmhhc093blByb3AodGFyZ2V0LCBuYW1lKSkge1xuICAgICAgICB0YXJnZXRbbmFtZV0gPSBbdGFyZ2V0W25hbWVdLCB2YWx1ZV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0YXJnZXRbbmFtZV0gPSB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuICFpc051bWVyaWNLZXk7XG4gICAgfVxuXG4gICAgaWYgKCF0YXJnZXRbbmFtZV0gfHwgIXV0aWxzLmlzT2JqZWN0KHRhcmdldFtuYW1lXSkpIHtcbiAgICAgIHRhcmdldFtuYW1lXSA9IFtdO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGJ1aWxkUGF0aChwYXRoLCB2YWx1ZSwgdGFyZ2V0W25hbWVdLCBpbmRleCk7XG5cbiAgICBpZiAocmVzdWx0ICYmIHV0aWxzLmlzQXJyYXkodGFyZ2V0W25hbWVdKSkge1xuICAgICAgdGFyZ2V0W25hbWVdID0gYXJyYXlUb09iamVjdCh0YXJnZXRbbmFtZV0pO1xuICAgIH1cblxuICAgIHJldHVybiAhaXNOdW1lcmljS2V5O1xuICB9XG5cbiAgaWYgKHV0aWxzLmlzRm9ybURhdGEoZm9ybURhdGEpICYmIHV0aWxzLmlzRnVuY3Rpb24oZm9ybURhdGEuZW50cmllcykpIHtcbiAgICBjb25zdCBvYmogPSB7fTtcblxuICAgIHV0aWxzLmZvckVhY2hFbnRyeShmb3JtRGF0YSwgKG5hbWUsIHZhbHVlKSA9PiB7XG4gICAgICBidWlsZFBhdGgocGFyc2VQcm9wUGF0aChuYW1lKSwgdmFsdWUsIG9iaiwgMCk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gb2JqO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZvcm1EYXRhVG9KU09OO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IEF4aW9zRXJyb3IgZnJvbSAnLi4vY29yZS9BeGlvc0Vycm9yLmpzJztcbmltcG9ydCB0cmFuc2l0aW9uYWxEZWZhdWx0cyBmcm9tICcuL3RyYW5zaXRpb25hbC5qcyc7XG5pbXBvcnQgdG9Gb3JtRGF0YSBmcm9tICcuLi9oZWxwZXJzL3RvRm9ybURhdGEuanMnO1xuaW1wb3J0IHRvVVJMRW5jb2RlZEZvcm0gZnJvbSAnLi4vaGVscGVycy90b1VSTEVuY29kZWRGb3JtLmpzJztcbmltcG9ydCBwbGF0Zm9ybSBmcm9tICcuLi9wbGF0Zm9ybS9pbmRleC5qcyc7XG5pbXBvcnQgZm9ybURhdGFUb0pTT04gZnJvbSAnLi4vaGVscGVycy9mb3JtRGF0YVRvSlNPTi5qcyc7XG5cbi8qKlxuICogSXQgdGFrZXMgYSBzdHJpbmcsIHRyaWVzIHRvIHBhcnNlIGl0LCBhbmQgaWYgaXQgZmFpbHMsIGl0IHJldHVybnMgdGhlIHN0cmluZ2lmaWVkIHZlcnNpb25cbiAqIG9mIHRoZSBpbnB1dFxuICpcbiAqIEBwYXJhbSB7YW55fSByYXdWYWx1ZSAtIFRoZSB2YWx1ZSB0byBiZSBzdHJpbmdpZmllZC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHBhcnNlciAtIEEgZnVuY3Rpb24gdGhhdCBwYXJzZXMgYSBzdHJpbmcgaW50byBhIEphdmFTY3JpcHQgb2JqZWN0LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZW5jb2RlciAtIEEgZnVuY3Rpb24gdGhhdCB0YWtlcyBhIHZhbHVlIGFuZCByZXR1cm5zIGEgc3RyaW5nLlxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IEEgc3RyaW5naWZpZWQgdmVyc2lvbiBvZiB0aGUgcmF3VmFsdWUuXG4gKi9cbmZ1bmN0aW9uIHN0cmluZ2lmeVNhZmVseShyYXdWYWx1ZSwgcGFyc2VyLCBlbmNvZGVyKSB7XG4gIGlmICh1dGlscy5pc1N0cmluZyhyYXdWYWx1ZSkpIHtcbiAgICB0cnkge1xuICAgICAgKHBhcnNlciB8fCBKU09OLnBhcnNlKShyYXdWYWx1ZSk7XG4gICAgICByZXR1cm4gdXRpbHMudHJpbShyYXdWYWx1ZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKGUubmFtZSAhPT0gJ1N5bnRheEVycm9yJykge1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAoZW5jb2RlciB8fCBKU09OLnN0cmluZ2lmeSkocmF3VmFsdWUpO1xufVxuXG5jb25zdCBkZWZhdWx0cyA9IHtcblxuICB0cmFuc2l0aW9uYWw6IHRyYW5zaXRpb25hbERlZmF1bHRzLFxuXG4gIGFkYXB0ZXI6IFsneGhyJywgJ2h0dHAnXSxcblxuICB0cmFuc2Zvcm1SZXF1ZXN0OiBbZnVuY3Rpb24gdHJhbnNmb3JtUmVxdWVzdChkYXRhLCBoZWFkZXJzKSB7XG4gICAgY29uc3QgY29udGVudFR5cGUgPSBoZWFkZXJzLmdldENvbnRlbnRUeXBlKCkgfHwgJyc7XG4gICAgY29uc3QgaGFzSlNPTkNvbnRlbnRUeXBlID0gY29udGVudFR5cGUuaW5kZXhPZignYXBwbGljYXRpb24vanNvbicpID4gLTE7XG4gICAgY29uc3QgaXNPYmplY3RQYXlsb2FkID0gdXRpbHMuaXNPYmplY3QoZGF0YSk7XG5cbiAgICBpZiAoaXNPYmplY3RQYXlsb2FkICYmIHV0aWxzLmlzSFRNTEZvcm0oZGF0YSkpIHtcbiAgICAgIGRhdGEgPSBuZXcgRm9ybURhdGEoZGF0YSk7XG4gICAgfVxuXG4gICAgY29uc3QgaXNGb3JtRGF0YSA9IHV0aWxzLmlzRm9ybURhdGEoZGF0YSk7XG5cbiAgICBpZiAoaXNGb3JtRGF0YSkge1xuICAgICAgcmV0dXJuIGhhc0pTT05Db250ZW50VHlwZSA/IEpTT04uc3RyaW5naWZ5KGZvcm1EYXRhVG9KU09OKGRhdGEpKSA6IGRhdGE7XG4gICAgfVxuXG4gICAgaWYgKHV0aWxzLmlzQXJyYXlCdWZmZXIoZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzQnVmZmVyKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc1N0cmVhbShkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNGaWxlKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc0Jsb2IoZGF0YSlcbiAgICApIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cbiAgICBpZiAodXRpbHMuaXNBcnJheUJ1ZmZlclZpZXcoZGF0YSkpIHtcbiAgICAgIHJldHVybiBkYXRhLmJ1ZmZlcjtcbiAgICB9XG4gICAgaWYgKHV0aWxzLmlzVVJMU2VhcmNoUGFyYW1zKGRhdGEpKSB7XG4gICAgICBoZWFkZXJzLnNldENvbnRlbnRUeXBlKCdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtOCcsIGZhbHNlKTtcbiAgICAgIHJldHVybiBkYXRhLnRvU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgbGV0IGlzRmlsZUxpc3Q7XG5cbiAgICBpZiAoaXNPYmplY3RQYXlsb2FkKSB7XG4gICAgICBpZiAoY29udGVudFR5cGUuaW5kZXhPZignYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJykgPiAtMSkge1xuICAgICAgICByZXR1cm4gdG9VUkxFbmNvZGVkRm9ybShkYXRhLCB0aGlzLmZvcm1TZXJpYWxpemVyKS50b1N0cmluZygpO1xuICAgICAgfVxuXG4gICAgICBpZiAoKGlzRmlsZUxpc3QgPSB1dGlscy5pc0ZpbGVMaXN0KGRhdGEpKSB8fCBjb250ZW50VHlwZS5pbmRleE9mKCdtdWx0aXBhcnQvZm9ybS1kYXRhJykgPiAtMSkge1xuICAgICAgICBjb25zdCBfRm9ybURhdGEgPSB0aGlzLmVudiAmJiB0aGlzLmVudi5Gb3JtRGF0YTtcblxuICAgICAgICByZXR1cm4gdG9Gb3JtRGF0YShcbiAgICAgICAgICBpc0ZpbGVMaXN0ID8geydmaWxlc1tdJzogZGF0YX0gOiBkYXRhLFxuICAgICAgICAgIF9Gb3JtRGF0YSAmJiBuZXcgX0Zvcm1EYXRhKCksXG4gICAgICAgICAgdGhpcy5mb3JtU2VyaWFsaXplclxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc09iamVjdFBheWxvYWQgfHwgaGFzSlNPTkNvbnRlbnRUeXBlICkge1xuICAgICAgaGVhZGVycy5zZXRDb250ZW50VHlwZSgnYXBwbGljYXRpb24vanNvbicsIGZhbHNlKTtcbiAgICAgIHJldHVybiBzdHJpbmdpZnlTYWZlbHkoZGF0YSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1dLFxuXG4gIHRyYW5zZm9ybVJlc3BvbnNlOiBbZnVuY3Rpb24gdHJhbnNmb3JtUmVzcG9uc2UoZGF0YSkge1xuICAgIGNvbnN0IHRyYW5zaXRpb25hbCA9IHRoaXMudHJhbnNpdGlvbmFsIHx8IGRlZmF1bHRzLnRyYW5zaXRpb25hbDtcbiAgICBjb25zdCBmb3JjZWRKU09OUGFyc2luZyA9IHRyYW5zaXRpb25hbCAmJiB0cmFuc2l0aW9uYWwuZm9yY2VkSlNPTlBhcnNpbmc7XG4gICAgY29uc3QgSlNPTlJlcXVlc3RlZCA9IHRoaXMucmVzcG9uc2VUeXBlID09PSAnanNvbic7XG5cbiAgICBpZiAoZGF0YSAmJiB1dGlscy5pc1N0cmluZyhkYXRhKSAmJiAoKGZvcmNlZEpTT05QYXJzaW5nICYmICF0aGlzLnJlc3BvbnNlVHlwZSkgfHwgSlNPTlJlcXVlc3RlZCkpIHtcbiAgICAgIGNvbnN0IHNpbGVudEpTT05QYXJzaW5nID0gdHJhbnNpdGlvbmFsICYmIHRyYW5zaXRpb25hbC5zaWxlbnRKU09OUGFyc2luZztcbiAgICAgIGNvbnN0IHN0cmljdEpTT05QYXJzaW5nID0gIXNpbGVudEpTT05QYXJzaW5nICYmIEpTT05SZXF1ZXN0ZWQ7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKGRhdGEpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAoc3RyaWN0SlNPTlBhcnNpbmcpIHtcbiAgICAgICAgICBpZiAoZS5uYW1lID09PSAnU3ludGF4RXJyb3InKSB7XG4gICAgICAgICAgICB0aHJvdyBBeGlvc0Vycm9yLmZyb20oZSwgQXhpb3NFcnJvci5FUlJfQkFEX1JFU1BPTlNFLCB0aGlzLCBudWxsLCB0aGlzLnJlc3BvbnNlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkYXRhO1xuICB9XSxcblxuICAvKipcbiAgICogQSB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyB0byBhYm9ydCBhIHJlcXVlc3QuIElmIHNldCB0byAwIChkZWZhdWx0KSBhXG4gICAqIHRpbWVvdXQgaXMgbm90IGNyZWF0ZWQuXG4gICAqL1xuICB0aW1lb3V0OiAwLFxuXG4gIHhzcmZDb29raWVOYW1lOiAnWFNSRi1UT0tFTicsXG4gIHhzcmZIZWFkZXJOYW1lOiAnWC1YU1JGLVRPS0VOJyxcblxuICBtYXhDb250ZW50TGVuZ3RoOiAtMSxcbiAgbWF4Qm9keUxlbmd0aDogLTEsXG5cbiAgZW52OiB7XG4gICAgRm9ybURhdGE6IHBsYXRmb3JtLmNsYXNzZXMuRm9ybURhdGEsXG4gICAgQmxvYjogcGxhdGZvcm0uY2xhc3Nlcy5CbG9iXG4gIH0sXG5cbiAgdmFsaWRhdGVTdGF0dXM6IGZ1bmN0aW9uIHZhbGlkYXRlU3RhdHVzKHN0YXR1cykge1xuICAgIHJldHVybiBzdGF0dXMgPj0gMjAwICYmIHN0YXR1cyA8IDMwMDtcbiAgfSxcblxuICBoZWFkZXJzOiB7XG4gICAgY29tbW9uOiB7XG4gICAgICAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKicsXG4gICAgICAnQ29udGVudC1UeXBlJzogdW5kZWZpbmVkXG4gICAgfVxuICB9XG59O1xuXG51dGlscy5mb3JFYWNoKFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJywgJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJ10sIChtZXRob2QpID0+IHtcbiAgZGVmYXVsdHMuaGVhZGVyc1ttZXRob2RdID0ge307XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgZGVmYXVsdHM7XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLy4uL3V0aWxzLmpzJztcblxuLy8gUmF3QXhpb3NIZWFkZXJzIHdob3NlIGR1cGxpY2F0ZXMgYXJlIGlnbm9yZWQgYnkgbm9kZVxuLy8gYy5mLiBodHRwczovL25vZGVqcy5vcmcvYXBpL2h0dHAuaHRtbCNodHRwX21lc3NhZ2VfaGVhZGVyc1xuY29uc3QgaWdub3JlRHVwbGljYXRlT2YgPSB1dGlscy50b09iamVjdFNldChbXG4gICdhZ2UnLCAnYXV0aG9yaXphdGlvbicsICdjb250ZW50LWxlbmd0aCcsICdjb250ZW50LXR5cGUnLCAnZXRhZycsXG4gICdleHBpcmVzJywgJ2Zyb20nLCAnaG9zdCcsICdpZi1tb2RpZmllZC1zaW5jZScsICdpZi11bm1vZGlmaWVkLXNpbmNlJyxcbiAgJ2xhc3QtbW9kaWZpZWQnLCAnbG9jYXRpb24nLCAnbWF4LWZvcndhcmRzJywgJ3Byb3h5LWF1dGhvcml6YXRpb24nLFxuICAncmVmZXJlcicsICdyZXRyeS1hZnRlcicsICd1c2VyLWFnZW50J1xuXSk7XG5cbi8qKlxuICogUGFyc2UgaGVhZGVycyBpbnRvIGFuIG9iamVjdFxuICpcbiAqIGBgYFxuICogRGF0ZTogV2VkLCAyNyBBdWcgMjAxNCAwODo1ODo0OSBHTVRcbiAqIENvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvblxuICogQ29ubmVjdGlvbjoga2VlcC1hbGl2ZVxuICogVHJhbnNmZXItRW5jb2Rpbmc6IGNodW5rZWRcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSByYXdIZWFkZXJzIEhlYWRlcnMgbmVlZGluZyB0byBiZSBwYXJzZWRcbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBIZWFkZXJzIHBhcnNlZCBpbnRvIGFuIG9iamVjdFxuICovXG5leHBvcnQgZGVmYXVsdCByYXdIZWFkZXJzID0+IHtcbiAgY29uc3QgcGFyc2VkID0ge307XG4gIGxldCBrZXk7XG4gIGxldCB2YWw7XG4gIGxldCBpO1xuXG4gIHJhd0hlYWRlcnMgJiYgcmF3SGVhZGVycy5zcGxpdCgnXFxuJykuZm9yRWFjaChmdW5jdGlvbiBwYXJzZXIobGluZSkge1xuICAgIGkgPSBsaW5lLmluZGV4T2YoJzonKTtcbiAgICBrZXkgPSBsaW5lLnN1YnN0cmluZygwLCBpKS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgICB2YWwgPSBsaW5lLnN1YnN0cmluZyhpICsgMSkudHJpbSgpO1xuXG4gICAgaWYgKCFrZXkgfHwgKHBhcnNlZFtrZXldICYmIGlnbm9yZUR1cGxpY2F0ZU9mW2tleV0pKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gJ3NldC1jb29raWUnKSB7XG4gICAgICBpZiAocGFyc2VkW2tleV0pIHtcbiAgICAgICAgcGFyc2VkW2tleV0ucHVzaCh2YWwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFyc2VkW2tleV0gPSBbdmFsXTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGFyc2VkW2tleV0gPSBwYXJzZWRba2V5XSA/IHBhcnNlZFtrZXldICsgJywgJyArIHZhbCA6IHZhbDtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBwYXJzZWQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IHBhcnNlSGVhZGVycyBmcm9tICcuLi9oZWxwZXJzL3BhcnNlSGVhZGVycy5qcyc7XG5cbmNvbnN0ICRpbnRlcm5hbHMgPSBTeW1ib2woJ2ludGVybmFscycpO1xuXG5mdW5jdGlvbiBub3JtYWxpemVIZWFkZXIoaGVhZGVyKSB7XG4gIHJldHVybiBoZWFkZXIgJiYgU3RyaW5nKGhlYWRlcikudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVZhbHVlKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PT0gZmFsc2UgfHwgdmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiB1dGlscy5pc0FycmF5KHZhbHVlKSA/IHZhbHVlLm1hcChub3JtYWxpemVWYWx1ZSkgOiBTdHJpbmcodmFsdWUpO1xufVxuXG5mdW5jdGlvbiBwYXJzZVRva2VucyhzdHIpIHtcbiAgY29uc3QgdG9rZW5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgY29uc3QgdG9rZW5zUkUgPSAvKFteXFxzLDs9XSspXFxzKig/Oj1cXHMqKFteLDtdKykpPy9nO1xuICBsZXQgbWF0Y2g7XG5cbiAgd2hpbGUgKChtYXRjaCA9IHRva2Vuc1JFLmV4ZWMoc3RyKSkpIHtcbiAgICB0b2tlbnNbbWF0Y2hbMV1dID0gbWF0Y2hbMl07XG4gIH1cblxuICByZXR1cm4gdG9rZW5zO1xufVxuXG5jb25zdCBpc1ZhbGlkSGVhZGVyTmFtZSA9IChzdHIpID0+IC9eWy1fYS16QS1aMC05XmB8fiwhIyQlJicqKy5dKyQvLnRlc3Qoc3RyLnRyaW0oKSk7XG5cbmZ1bmN0aW9uIG1hdGNoSGVhZGVyVmFsdWUoY29udGV4dCwgdmFsdWUsIGhlYWRlciwgZmlsdGVyLCBpc0hlYWRlck5hbWVGaWx0ZXIpIHtcbiAgaWYgKHV0aWxzLmlzRnVuY3Rpb24oZmlsdGVyKSkge1xuICAgIHJldHVybiBmaWx0ZXIuY2FsbCh0aGlzLCB2YWx1ZSwgaGVhZGVyKTtcbiAgfVxuXG4gIGlmIChpc0hlYWRlck5hbWVGaWx0ZXIpIHtcbiAgICB2YWx1ZSA9IGhlYWRlcjtcbiAgfVxuXG4gIGlmICghdXRpbHMuaXNTdHJpbmcodmFsdWUpKSByZXR1cm47XG5cbiAgaWYgKHV0aWxzLmlzU3RyaW5nKGZpbHRlcikpIHtcbiAgICByZXR1cm4gdmFsdWUuaW5kZXhPZihmaWx0ZXIpICE9PSAtMTtcbiAgfVxuXG4gIGlmICh1dGlscy5pc1JlZ0V4cChmaWx0ZXIpKSB7XG4gICAgcmV0dXJuIGZpbHRlci50ZXN0KHZhbHVlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBmb3JtYXRIZWFkZXIoaGVhZGVyKSB7XG4gIHJldHVybiBoZWFkZXIudHJpbSgpXG4gICAgLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvKFthLXpcXGRdKShcXHcqKS9nLCAodywgY2hhciwgc3RyKSA9PiB7XG4gICAgICByZXR1cm4gY2hhci50b1VwcGVyQ2FzZSgpICsgc3RyO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBidWlsZEFjY2Vzc29ycyhvYmosIGhlYWRlcikge1xuICBjb25zdCBhY2Nlc3Nvck5hbWUgPSB1dGlscy50b0NhbWVsQ2FzZSgnICcgKyBoZWFkZXIpO1xuXG4gIFsnZ2V0JywgJ3NldCcsICdoYXMnXS5mb3JFYWNoKG1ldGhvZE5hbWUgPT4ge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIG1ldGhvZE5hbWUgKyBhY2Nlc3Nvck5hbWUsIHtcbiAgICAgIHZhbHVlOiBmdW5jdGlvbihhcmcxLCBhcmcyLCBhcmczKSB7XG4gICAgICAgIHJldHVybiB0aGlzW21ldGhvZE5hbWVdLmNhbGwodGhpcywgaGVhZGVyLCBhcmcxLCBhcmcyLCBhcmczKTtcbiAgICAgIH0sXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgfSk7XG59XG5cbmNsYXNzIEF4aW9zSGVhZGVycyB7XG4gIGNvbnN0cnVjdG9yKGhlYWRlcnMpIHtcbiAgICBoZWFkZXJzICYmIHRoaXMuc2V0KGhlYWRlcnMpO1xuICB9XG5cbiAgc2V0KGhlYWRlciwgdmFsdWVPclJld3JpdGUsIHJld3JpdGUpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcblxuICAgIGZ1bmN0aW9uIHNldEhlYWRlcihfdmFsdWUsIF9oZWFkZXIsIF9yZXdyaXRlKSB7XG4gICAgICBjb25zdCBsSGVhZGVyID0gbm9ybWFsaXplSGVhZGVyKF9oZWFkZXIpO1xuXG4gICAgICBpZiAoIWxIZWFkZXIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdoZWFkZXIgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZycpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBrZXkgPSB1dGlscy5maW5kS2V5KHNlbGYsIGxIZWFkZXIpO1xuXG4gICAgICBpZigha2V5IHx8IHNlbGZba2V5XSA9PT0gdW5kZWZpbmVkIHx8IF9yZXdyaXRlID09PSB0cnVlIHx8IChfcmV3cml0ZSA9PT0gdW5kZWZpbmVkICYmIHNlbGZba2V5XSAhPT0gZmFsc2UpKSB7XG4gICAgICAgIHNlbGZba2V5IHx8IF9oZWFkZXJdID0gbm9ybWFsaXplVmFsdWUoX3ZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBzZXRIZWFkZXJzID0gKGhlYWRlcnMsIF9yZXdyaXRlKSA9PlxuICAgICAgdXRpbHMuZm9yRWFjaChoZWFkZXJzLCAoX3ZhbHVlLCBfaGVhZGVyKSA9PiBzZXRIZWFkZXIoX3ZhbHVlLCBfaGVhZGVyLCBfcmV3cml0ZSkpO1xuXG4gICAgaWYgKHV0aWxzLmlzUGxhaW5PYmplY3QoaGVhZGVyKSB8fCBoZWFkZXIgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yKSB7XG4gICAgICBzZXRIZWFkZXJzKGhlYWRlciwgdmFsdWVPclJld3JpdGUpXG4gICAgfSBlbHNlIGlmKHV0aWxzLmlzU3RyaW5nKGhlYWRlcikgJiYgKGhlYWRlciA9IGhlYWRlci50cmltKCkpICYmICFpc1ZhbGlkSGVhZGVyTmFtZShoZWFkZXIpKSB7XG4gICAgICBzZXRIZWFkZXJzKHBhcnNlSGVhZGVycyhoZWFkZXIpLCB2YWx1ZU9yUmV3cml0ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhlYWRlciAhPSBudWxsICYmIHNldEhlYWRlcih2YWx1ZU9yUmV3cml0ZSwgaGVhZGVyLCByZXdyaXRlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGdldChoZWFkZXIsIHBhcnNlcikge1xuICAgIGhlYWRlciA9IG5vcm1hbGl6ZUhlYWRlcihoZWFkZXIpO1xuXG4gICAgaWYgKGhlYWRlcikge1xuICAgICAgY29uc3Qga2V5ID0gdXRpbHMuZmluZEtleSh0aGlzLCBoZWFkZXIpO1xuXG4gICAgICBpZiAoa2V5KSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpc1trZXldO1xuXG4gICAgICAgIGlmICghcGFyc2VyKSB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhcnNlciA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHJldHVybiBwYXJzZVRva2Vucyh2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodXRpbHMuaXNGdW5jdGlvbihwYXJzZXIpKSB7XG4gICAgICAgICAgcmV0dXJuIHBhcnNlci5jYWxsKHRoaXMsIHZhbHVlLCBrZXkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHV0aWxzLmlzUmVnRXhwKHBhcnNlcikpIHtcbiAgICAgICAgICByZXR1cm4gcGFyc2VyLmV4ZWModmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigncGFyc2VyIG11c3QgYmUgYm9vbGVhbnxyZWdleHB8ZnVuY3Rpb24nKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBoYXMoaGVhZGVyLCBtYXRjaGVyKSB7XG4gICAgaGVhZGVyID0gbm9ybWFsaXplSGVhZGVyKGhlYWRlcik7XG5cbiAgICBpZiAoaGVhZGVyKSB7XG4gICAgICBjb25zdCBrZXkgPSB1dGlscy5maW5kS2V5KHRoaXMsIGhlYWRlcik7XG5cbiAgICAgIHJldHVybiAhIShrZXkgJiYgdGhpc1trZXldICE9PSB1bmRlZmluZWQgJiYgKCFtYXRjaGVyIHx8IG1hdGNoSGVhZGVyVmFsdWUodGhpcywgdGhpc1trZXldLCBrZXksIG1hdGNoZXIpKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZGVsZXRlKGhlYWRlciwgbWF0Y2hlcikge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIGxldCBkZWxldGVkID0gZmFsc2U7XG5cbiAgICBmdW5jdGlvbiBkZWxldGVIZWFkZXIoX2hlYWRlcikge1xuICAgICAgX2hlYWRlciA9IG5vcm1hbGl6ZUhlYWRlcihfaGVhZGVyKTtcblxuICAgICAgaWYgKF9oZWFkZXIpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gdXRpbHMuZmluZEtleShzZWxmLCBfaGVhZGVyKTtcblxuICAgICAgICBpZiAoa2V5ICYmICghbWF0Y2hlciB8fCBtYXRjaEhlYWRlclZhbHVlKHNlbGYsIHNlbGZba2V5XSwga2V5LCBtYXRjaGVyKSkpIHtcbiAgICAgICAgICBkZWxldGUgc2VsZltrZXldO1xuXG4gICAgICAgICAgZGVsZXRlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodXRpbHMuaXNBcnJheShoZWFkZXIpKSB7XG4gICAgICBoZWFkZXIuZm9yRWFjaChkZWxldGVIZWFkZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGVIZWFkZXIoaGVhZGVyKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGVsZXRlZDtcbiAgfVxuXG4gIGNsZWFyKG1hdGNoZXIpIHtcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXModGhpcyk7XG4gICAgbGV0IGkgPSBrZXlzLmxlbmd0aDtcbiAgICBsZXQgZGVsZXRlZCA9IGZhbHNlO1xuXG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgY29uc3Qga2V5ID0ga2V5c1tpXTtcbiAgICAgIGlmKCFtYXRjaGVyIHx8IG1hdGNoSGVhZGVyVmFsdWUodGhpcywgdGhpc1trZXldLCBrZXksIG1hdGNoZXIsIHRydWUpKSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzW2tleV07XG4gICAgICAgIGRlbGV0ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkZWxldGVkO1xuICB9XG5cbiAgbm9ybWFsaXplKGZvcm1hdCkge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIGNvbnN0IGhlYWRlcnMgPSB7fTtcblxuICAgIHV0aWxzLmZvckVhY2godGhpcywgKHZhbHVlLCBoZWFkZXIpID0+IHtcbiAgICAgIGNvbnN0IGtleSA9IHV0aWxzLmZpbmRLZXkoaGVhZGVycywgaGVhZGVyKTtcblxuICAgICAgaWYgKGtleSkge1xuICAgICAgICBzZWxmW2tleV0gPSBub3JtYWxpemVWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIGRlbGV0ZSBzZWxmW2hlYWRlcl07XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgbm9ybWFsaXplZCA9IGZvcm1hdCA/IGZvcm1hdEhlYWRlcihoZWFkZXIpIDogU3RyaW5nKGhlYWRlcikudHJpbSgpO1xuXG4gICAgICBpZiAobm9ybWFsaXplZCAhPT0gaGVhZGVyKSB7XG4gICAgICAgIGRlbGV0ZSBzZWxmW2hlYWRlcl07XG4gICAgICB9XG5cbiAgICAgIHNlbGZbbm9ybWFsaXplZF0gPSBub3JtYWxpemVWYWx1ZSh2YWx1ZSk7XG5cbiAgICAgIGhlYWRlcnNbbm9ybWFsaXplZF0gPSB0cnVlO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBjb25jYXQoLi4udGFyZ2V0cykge1xuICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLmNvbmNhdCh0aGlzLCAuLi50YXJnZXRzKTtcbiAgfVxuXG4gIHRvSlNPTihhc1N0cmluZ3MpIHtcbiAgICBjb25zdCBvYmogPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gICAgdXRpbHMuZm9yRWFjaCh0aGlzLCAodmFsdWUsIGhlYWRlcikgPT4ge1xuICAgICAgdmFsdWUgIT0gbnVsbCAmJiB2YWx1ZSAhPT0gZmFsc2UgJiYgKG9ialtoZWFkZXJdID0gYXNTdHJpbmdzICYmIHV0aWxzLmlzQXJyYXkodmFsdWUpID8gdmFsdWUuam9pbignLCAnKSA6IHZhbHVlKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICBbU3ltYm9sLml0ZXJhdG9yXSgpIHtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy50b0pTT04oKSlbU3ltYm9sLml0ZXJhdG9yXSgpO1xuICB9XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpLm1hcCgoW2hlYWRlciwgdmFsdWVdKSA9PiBoZWFkZXIgKyAnOiAnICsgdmFsdWUpLmpvaW4oJ1xcbicpO1xuICB9XG5cbiAgZ2V0IFtTeW1ib2wudG9TdHJpbmdUYWddKCkge1xuICAgIHJldHVybiAnQXhpb3NIZWFkZXJzJztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tKHRoaW5nKSB7XG4gICAgcmV0dXJuIHRoaW5nIGluc3RhbmNlb2YgdGhpcyA/IHRoaW5nIDogbmV3IHRoaXModGhpbmcpO1xuICB9XG5cbiAgc3RhdGljIGNvbmNhdChmaXJzdCwgLi4udGFyZ2V0cykge1xuICAgIGNvbnN0IGNvbXB1dGVkID0gbmV3IHRoaXMoZmlyc3QpO1xuXG4gICAgdGFyZ2V0cy5mb3JFYWNoKCh0YXJnZXQpID0+IGNvbXB1dGVkLnNldCh0YXJnZXQpKTtcblxuICAgIHJldHVybiBjb21wdXRlZDtcbiAgfVxuXG4gIHN0YXRpYyBhY2Nlc3NvcihoZWFkZXIpIHtcbiAgICBjb25zdCBpbnRlcm5hbHMgPSB0aGlzWyRpbnRlcm5hbHNdID0gKHRoaXNbJGludGVybmFsc10gPSB7XG4gICAgICBhY2Nlc3NvcnM6IHt9XG4gICAgfSk7XG5cbiAgICBjb25zdCBhY2Nlc3NvcnMgPSBpbnRlcm5hbHMuYWNjZXNzb3JzO1xuICAgIGNvbnN0IHByb3RvdHlwZSA9IHRoaXMucHJvdG90eXBlO1xuXG4gICAgZnVuY3Rpb24gZGVmaW5lQWNjZXNzb3IoX2hlYWRlcikge1xuICAgICAgY29uc3QgbEhlYWRlciA9IG5vcm1hbGl6ZUhlYWRlcihfaGVhZGVyKTtcblxuICAgICAgaWYgKCFhY2Nlc3NvcnNbbEhlYWRlcl0pIHtcbiAgICAgICAgYnVpbGRBY2Nlc3NvcnMocHJvdG90eXBlLCBfaGVhZGVyKTtcbiAgICAgICAgYWNjZXNzb3JzW2xIZWFkZXJdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB1dGlscy5pc0FycmF5KGhlYWRlcikgPyBoZWFkZXIuZm9yRWFjaChkZWZpbmVBY2Nlc3NvcikgOiBkZWZpbmVBY2Nlc3NvcihoZWFkZXIpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbn1cblxuQXhpb3NIZWFkZXJzLmFjY2Vzc29yKFsnQ29udGVudC1UeXBlJywgJ0NvbnRlbnQtTGVuZ3RoJywgJ0FjY2VwdCcsICdBY2NlcHQtRW5jb2RpbmcnLCAnVXNlci1BZ2VudCcsICdBdXRob3JpemF0aW9uJ10pO1xuXG4vLyByZXNlcnZlZCBuYW1lcyBob3RmaXhcbnV0aWxzLnJlZHVjZURlc2NyaXB0b3JzKEF4aW9zSGVhZGVycy5wcm90b3R5cGUsICh7dmFsdWV9LCBrZXkpID0+IHtcbiAgbGV0IG1hcHBlZCA9IGtleVswXS50b1VwcGVyQ2FzZSgpICsga2V5LnNsaWNlKDEpOyAvLyBtYXAgYHNldGAgPT4gYFNldGBcbiAgcmV0dXJuIHtcbiAgICBnZXQ6ICgpID0+IHZhbHVlLFxuICAgIHNldChoZWFkZXJWYWx1ZSkge1xuICAgICAgdGhpc1ttYXBwZWRdID0gaGVhZGVyVmFsdWU7XG4gICAgfVxuICB9XG59KTtcblxudXRpbHMuZnJlZXplTWV0aG9kcyhBeGlvc0hlYWRlcnMpO1xuXG5leHBvcnQgZGVmYXVsdCBBeGlvc0hlYWRlcnM7XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLy4uL3V0aWxzLmpzJztcbmltcG9ydCBkZWZhdWx0cyBmcm9tICcuLi9kZWZhdWx0cy9pbmRleC5qcyc7XG5pbXBvcnQgQXhpb3NIZWFkZXJzIGZyb20gJy4uL2NvcmUvQXhpb3NIZWFkZXJzLmpzJztcblxuLyoqXG4gKiBUcmFuc2Zvcm0gdGhlIGRhdGEgZm9yIGEgcmVxdWVzdCBvciBhIHJlc3BvbnNlXG4gKlxuICogQHBhcmFtIHtBcnJheXxGdW5jdGlvbn0gZm5zIEEgc2luZ2xlIGZ1bmN0aW9uIG9yIEFycmF5IG9mIGZ1bmN0aW9uc1xuICogQHBhcmFtIHs/T2JqZWN0fSByZXNwb25zZSBUaGUgcmVzcG9uc2Ugb2JqZWN0XG4gKlxuICogQHJldHVybnMgeyp9IFRoZSByZXN1bHRpbmcgdHJhbnNmb3JtZWQgZGF0YVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0cmFuc2Zvcm1EYXRhKGZucywgcmVzcG9uc2UpIHtcbiAgY29uc3QgY29uZmlnID0gdGhpcyB8fCBkZWZhdWx0cztcbiAgY29uc3QgY29udGV4dCA9IHJlc3BvbnNlIHx8IGNvbmZpZztcbiAgY29uc3QgaGVhZGVycyA9IEF4aW9zSGVhZGVycy5mcm9tKGNvbnRleHQuaGVhZGVycyk7XG4gIGxldCBkYXRhID0gY29udGV4dC5kYXRhO1xuXG4gIHV0aWxzLmZvckVhY2goZm5zLCBmdW5jdGlvbiB0cmFuc2Zvcm0oZm4pIHtcbiAgICBkYXRhID0gZm4uY2FsbChjb25maWcsIGRhdGEsIGhlYWRlcnMubm9ybWFsaXplKCksIHJlc3BvbnNlID8gcmVzcG9uc2Uuc3RhdHVzIDogdW5kZWZpbmVkKTtcbiAgfSk7XG5cbiAgaGVhZGVycy5ub3JtYWxpemUoKTtcblxuICByZXR1cm4gZGF0YTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNDYW5jZWwodmFsdWUpIHtcbiAgcmV0dXJuICEhKHZhbHVlICYmIHZhbHVlLl9fQ0FOQ0VMX18pO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tICcuLi9jb3JlL0F4aW9zRXJyb3IuanMnO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcblxuLyoqXG4gKiBBIGBDYW5jZWxlZEVycm9yYCBpcyBhbiBvYmplY3QgdGhhdCBpcyB0aHJvd24gd2hlbiBhbiBvcGVyYXRpb24gaXMgY2FuY2VsZWQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmc9fSBtZXNzYWdlIFRoZSBtZXNzYWdlLlxuICogQHBhcmFtIHtPYmplY3Q9fSBjb25maWcgVGhlIGNvbmZpZy5cbiAqIEBwYXJhbSB7T2JqZWN0PX0gcmVxdWVzdCBUaGUgcmVxdWVzdC5cbiAqXG4gKiBAcmV0dXJucyB7Q2FuY2VsZWRFcnJvcn0gVGhlIGNyZWF0ZWQgZXJyb3IuXG4gKi9cbmZ1bmN0aW9uIENhbmNlbGVkRXJyb3IobWVzc2FnZSwgY29uZmlnLCByZXF1ZXN0KSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lcS1udWxsLGVxZXFlcVxuICBBeGlvc0Vycm9yLmNhbGwodGhpcywgbWVzc2FnZSA9PSBudWxsID8gJ2NhbmNlbGVkJyA6IG1lc3NhZ2UsIEF4aW9zRXJyb3IuRVJSX0NBTkNFTEVELCBjb25maWcsIHJlcXVlc3QpO1xuICB0aGlzLm5hbWUgPSAnQ2FuY2VsZWRFcnJvcic7XG59XG5cbnV0aWxzLmluaGVyaXRzKENhbmNlbGVkRXJyb3IsIEF4aW9zRXJyb3IsIHtcbiAgX19DQU5DRUxfXzogdHJ1ZVxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IENhbmNlbGVkRXJyb3I7XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCBBeGlvc0Vycm9yIGZyb20gJy4vQXhpb3NFcnJvci5qcyc7XG5cbi8qKlxuICogUmVzb2x2ZSBvciByZWplY3QgYSBQcm9taXNlIGJhc2VkIG9uIHJlc3BvbnNlIHN0YXR1cy5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSByZXNvbHZlIEEgZnVuY3Rpb24gdGhhdCByZXNvbHZlcyB0aGUgcHJvbWlzZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlamVjdCBBIGZ1bmN0aW9uIHRoYXQgcmVqZWN0cyB0aGUgcHJvbWlzZS5cbiAqIEBwYXJhbSB7b2JqZWN0fSByZXNwb25zZSBUaGUgcmVzcG9uc2UuXG4gKlxuICogQHJldHVybnMge29iamVjdH0gVGhlIHJlc3BvbnNlLlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCByZXNwb25zZSkge1xuICBjb25zdCB2YWxpZGF0ZVN0YXR1cyA9IHJlc3BvbnNlLmNvbmZpZy52YWxpZGF0ZVN0YXR1cztcbiAgaWYgKCFyZXNwb25zZS5zdGF0dXMgfHwgIXZhbGlkYXRlU3RhdHVzIHx8IHZhbGlkYXRlU3RhdHVzKHJlc3BvbnNlLnN0YXR1cykpIHtcbiAgICByZXNvbHZlKHJlc3BvbnNlKTtcbiAgfSBlbHNlIHtcbiAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoXG4gICAgICAnUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZSAnICsgcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgW0F4aW9zRXJyb3IuRVJSX0JBRF9SRVFVRVNULCBBeGlvc0Vycm9yLkVSUl9CQURfUkVTUE9OU0VdW01hdGguZmxvb3IocmVzcG9uc2Uuc3RhdHVzIC8gMTAwKSAtIDRdLFxuICAgICAgcmVzcG9uc2UuY29uZmlnLFxuICAgICAgcmVzcG9uc2UucmVxdWVzdCxcbiAgICAgIHJlc3BvbnNlXG4gICAgKSk7XG4gIH1cbn1cbiIsImltcG9ydCB1dGlscyBmcm9tICcuLy4uL3V0aWxzLmpzJztcbmltcG9ydCBwbGF0Zm9ybSBmcm9tICcuLi9wbGF0Zm9ybS9pbmRleC5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IHBsYXRmb3JtLmhhc1N0YW5kYXJkQnJvd3NlckVudiA/XG5cbiAgLy8gU3RhbmRhcmQgYnJvd3NlciBlbnZzIHN1cHBvcnQgZG9jdW1lbnQuY29va2llXG4gIHtcbiAgICB3cml0ZShuYW1lLCB2YWx1ZSwgZXhwaXJlcywgcGF0aCwgZG9tYWluLCBzZWN1cmUpIHtcbiAgICAgIGNvbnN0IGNvb2tpZSA9IFtuYW1lICsgJz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKV07XG5cbiAgICAgIHV0aWxzLmlzTnVtYmVyKGV4cGlyZXMpICYmIGNvb2tpZS5wdXNoKCdleHBpcmVzPScgKyBuZXcgRGF0ZShleHBpcmVzKS50b0dNVFN0cmluZygpKTtcblxuICAgICAgdXRpbHMuaXNTdHJpbmcocGF0aCkgJiYgY29va2llLnB1c2goJ3BhdGg9JyArIHBhdGgpO1xuXG4gICAgICB1dGlscy5pc1N0cmluZyhkb21haW4pICYmIGNvb2tpZS5wdXNoKCdkb21haW49JyArIGRvbWFpbik7XG5cbiAgICAgIHNlY3VyZSA9PT0gdHJ1ZSAmJiBjb29raWUucHVzaCgnc2VjdXJlJyk7XG5cbiAgICAgIGRvY3VtZW50LmNvb2tpZSA9IGNvb2tpZS5qb2luKCc7ICcpO1xuICAgIH0sXG5cbiAgICByZWFkKG5hbWUpIHtcbiAgICAgIGNvbnN0IG1hdGNoID0gZG9jdW1lbnQuY29va2llLm1hdGNoKG5ldyBSZWdFeHAoJyhefDtcXFxccyopKCcgKyBuYW1lICsgJyk9KFteO10qKScpKTtcbiAgICAgIHJldHVybiAobWF0Y2ggPyBkZWNvZGVVUklDb21wb25lbnQobWF0Y2hbM10pIDogbnVsbCk7XG4gICAgfSxcblxuICAgIHJlbW92ZShuYW1lKSB7XG4gICAgICB0aGlzLndyaXRlKG5hbWUsICcnLCBEYXRlLm5vdygpIC0gODY0MDAwMDApO1xuICAgIH1cbiAgfVxuXG4gIDpcblxuICAvLyBOb24tc3RhbmRhcmQgYnJvd3NlciBlbnYgKHdlYiB3b3JrZXJzLCByZWFjdC1uYXRpdmUpIGxhY2sgbmVlZGVkIHN1cHBvcnQuXG4gIHtcbiAgICB3cml0ZSgpIHt9LFxuICAgIHJlYWQoKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9LFxuICAgIHJlbW92ZSgpIHt9XG4gIH07XG5cbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBVUkwgaXMgYWJzb2x1dGVcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJsIFRoZSBVUkwgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBzcGVjaWZpZWQgVVJMIGlzIGFic29sdXRlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNBYnNvbHV0ZVVSTCh1cmwpIHtcbiAgLy8gQSBVUkwgaXMgY29uc2lkZXJlZCBhYnNvbHV0ZSBpZiBpdCBiZWdpbnMgd2l0aCBcIjxzY2hlbWU+Oi8vXCIgb3IgXCIvL1wiIChwcm90b2NvbC1yZWxhdGl2ZSBVUkwpLlxuICAvLyBSRkMgMzk4NiBkZWZpbmVzIHNjaGVtZSBuYW1lIGFzIGEgc2VxdWVuY2Ugb2YgY2hhcmFjdGVycyBiZWdpbm5pbmcgd2l0aCBhIGxldHRlciBhbmQgZm9sbG93ZWRcbiAgLy8gYnkgYW55IGNvbWJpbmF0aW9uIG9mIGxldHRlcnMsIGRpZ2l0cywgcGx1cywgcGVyaW9kLCBvciBoeXBoZW4uXG4gIHJldHVybiAvXihbYS16XVthLXpcXGQrXFwtLl0qOik/XFwvXFwvL2kudGVzdCh1cmwpO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgVVJMIGJ5IGNvbWJpbmluZyB0aGUgc3BlY2lmaWVkIFVSTHNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYmFzZVVSTCBUaGUgYmFzZSBVUkxcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWxhdGl2ZVVSTCBUaGUgcmVsYXRpdmUgVVJMXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGNvbWJpbmVkIFVSTFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjb21iaW5lVVJMcyhiYXNlVVJMLCByZWxhdGl2ZVVSTCkge1xuICByZXR1cm4gcmVsYXRpdmVVUkxcbiAgICA/IGJhc2VVUkwucmVwbGFjZSgvXFwvP1xcLyQvLCAnJykgKyAnLycgKyByZWxhdGl2ZVVSTC5yZXBsYWNlKC9eXFwvKy8sICcnKVxuICAgIDogYmFzZVVSTDtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IGlzQWJzb2x1dGVVUkwgZnJvbSAnLi4vaGVscGVycy9pc0Fic29sdXRlVVJMLmpzJztcbmltcG9ydCBjb21iaW5lVVJMcyBmcm9tICcuLi9oZWxwZXJzL2NvbWJpbmVVUkxzLmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IFVSTCBieSBjb21iaW5pbmcgdGhlIGJhc2VVUkwgd2l0aCB0aGUgcmVxdWVzdGVkVVJMLFxuICogb25seSB3aGVuIHRoZSByZXF1ZXN0ZWRVUkwgaXMgbm90IGFscmVhZHkgYW4gYWJzb2x1dGUgVVJMLlxuICogSWYgdGhlIHJlcXVlc3RVUkwgaXMgYWJzb2x1dGUsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgcmVxdWVzdGVkVVJMIHVudG91Y2hlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYmFzZVVSTCBUaGUgYmFzZSBVUkxcbiAqIEBwYXJhbSB7c3RyaW5nfSByZXF1ZXN0ZWRVUkwgQWJzb2x1dGUgb3IgcmVsYXRpdmUgVVJMIHRvIGNvbWJpbmVcbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgY29tYmluZWQgZnVsbCBwYXRoXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJ1aWxkRnVsbFBhdGgoYmFzZVVSTCwgcmVxdWVzdGVkVVJMKSB7XG4gIGlmIChiYXNlVVJMICYmICFpc0Fic29sdXRlVVJMKHJlcXVlc3RlZFVSTCkpIHtcbiAgICByZXR1cm4gY29tYmluZVVSTHMoYmFzZVVSTCwgcmVxdWVzdGVkVVJMKTtcbiAgfVxuICByZXR1cm4gcmVxdWVzdGVkVVJMO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi8uLi91dGlscy5qcyc7XG5pbXBvcnQgcGxhdGZvcm0gZnJvbSAnLi4vcGxhdGZvcm0vaW5kZXguanMnO1xuXG5leHBvcnQgZGVmYXVsdCBwbGF0Zm9ybS5oYXNTdGFuZGFyZEJyb3dzZXJFbnYgP1xuXG4vLyBTdGFuZGFyZCBicm93c2VyIGVudnMgaGF2ZSBmdWxsIHN1cHBvcnQgb2YgdGhlIEFQSXMgbmVlZGVkIHRvIHRlc3Rcbi8vIHdoZXRoZXIgdGhlIHJlcXVlc3QgVVJMIGlzIG9mIHRoZSBzYW1lIG9yaWdpbiBhcyBjdXJyZW50IGxvY2F0aW9uLlxuICAoZnVuY3Rpb24gc3RhbmRhcmRCcm93c2VyRW52KCkge1xuICAgIGNvbnN0IG1zaWUgPSAvKG1zaWV8dHJpZGVudCkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xuICAgIGNvbnN0IHVybFBhcnNpbmdOb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgIGxldCBvcmlnaW5VUkw7XG5cbiAgICAvKipcbiAgICAqIFBhcnNlIGEgVVJMIHRvIGRpc2NvdmVyIGl0cyBjb21wb25lbnRzXG4gICAgKlxuICAgICogQHBhcmFtIHtTdHJpbmd9IHVybCBUaGUgVVJMIHRvIGJlIHBhcnNlZFxuICAgICogQHJldHVybnMge09iamVjdH1cbiAgICAqL1xuICAgIGZ1bmN0aW9uIHJlc29sdmVVUkwodXJsKSB7XG4gICAgICBsZXQgaHJlZiA9IHVybDtcblxuICAgICAgaWYgKG1zaWUpIHtcbiAgICAgICAgLy8gSUUgbmVlZHMgYXR0cmlidXRlIHNldCB0d2ljZSB0byBub3JtYWxpemUgcHJvcGVydGllc1xuICAgICAgICB1cmxQYXJzaW5nTm9kZS5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBocmVmKTtcbiAgICAgICAgaHJlZiA9IHVybFBhcnNpbmdOb2RlLmhyZWY7XG4gICAgICB9XG5cbiAgICAgIHVybFBhcnNpbmdOb2RlLnNldEF0dHJpYnV0ZSgnaHJlZicsIGhyZWYpO1xuXG4gICAgICAvLyB1cmxQYXJzaW5nTm9kZSBwcm92aWRlcyB0aGUgVXJsVXRpbHMgaW50ZXJmYWNlIC0gaHR0cDovL3VybC5zcGVjLndoYXR3Zy5vcmcvI3VybHV0aWxzXG4gICAgICByZXR1cm4ge1xuICAgICAgICBocmVmOiB1cmxQYXJzaW5nTm9kZS5ocmVmLFxuICAgICAgICBwcm90b2NvbDogdXJsUGFyc2luZ05vZGUucHJvdG9jb2wgPyB1cmxQYXJzaW5nTm9kZS5wcm90b2NvbC5yZXBsYWNlKC86JC8sICcnKSA6ICcnLFxuICAgICAgICBob3N0OiB1cmxQYXJzaW5nTm9kZS5ob3N0LFxuICAgICAgICBzZWFyY2g6IHVybFBhcnNpbmdOb2RlLnNlYXJjaCA/IHVybFBhcnNpbmdOb2RlLnNlYXJjaC5yZXBsYWNlKC9eXFw/LywgJycpIDogJycsXG4gICAgICAgIGhhc2g6IHVybFBhcnNpbmdOb2RlLmhhc2ggPyB1cmxQYXJzaW5nTm9kZS5oYXNoLnJlcGxhY2UoL14jLywgJycpIDogJycsXG4gICAgICAgIGhvc3RuYW1lOiB1cmxQYXJzaW5nTm9kZS5ob3N0bmFtZSxcbiAgICAgICAgcG9ydDogdXJsUGFyc2luZ05vZGUucG9ydCxcbiAgICAgICAgcGF0aG5hbWU6ICh1cmxQYXJzaW5nTm9kZS5wYXRobmFtZS5jaGFyQXQoMCkgPT09ICcvJykgP1xuICAgICAgICAgIHVybFBhcnNpbmdOb2RlLnBhdGhuYW1lIDpcbiAgICAgICAgICAnLycgKyB1cmxQYXJzaW5nTm9kZS5wYXRobmFtZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBvcmlnaW5VUkwgPSByZXNvbHZlVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcblxuICAgIC8qKlxuICAgICogRGV0ZXJtaW5lIGlmIGEgVVJMIHNoYXJlcyB0aGUgc2FtZSBvcmlnaW4gYXMgdGhlIGN1cnJlbnQgbG9jYXRpb25cbiAgICAqXG4gICAgKiBAcGFyYW0ge1N0cmluZ30gcmVxdWVzdFVSTCBUaGUgVVJMIHRvIHRlc3RcbiAgICAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIFVSTCBzaGFyZXMgdGhlIHNhbWUgb3JpZ2luLCBvdGhlcndpc2UgZmFsc2VcbiAgICAqL1xuICAgIHJldHVybiBmdW5jdGlvbiBpc1VSTFNhbWVPcmlnaW4ocmVxdWVzdFVSTCkge1xuICAgICAgY29uc3QgcGFyc2VkID0gKHV0aWxzLmlzU3RyaW5nKHJlcXVlc3RVUkwpKSA/IHJlc29sdmVVUkwocmVxdWVzdFVSTCkgOiByZXF1ZXN0VVJMO1xuICAgICAgcmV0dXJuIChwYXJzZWQucHJvdG9jb2wgPT09IG9yaWdpblVSTC5wcm90b2NvbCAmJlxuICAgICAgICAgIHBhcnNlZC5ob3N0ID09PSBvcmlnaW5VUkwuaG9zdCk7XG4gICAgfTtcbiAgfSkoKSA6XG5cbiAgLy8gTm9uIHN0YW5kYXJkIGJyb3dzZXIgZW52cyAod2ViIHdvcmtlcnMsIHJlYWN0LW5hdGl2ZSkgbGFjayBuZWVkZWQgc3VwcG9ydC5cbiAgKGZ1bmN0aW9uIG5vblN0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gaXNVUkxTYW1lT3JpZ2luKCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcbiAgfSkoKTtcbiIsIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcGFyc2VQcm90b2NvbCh1cmwpIHtcbiAgY29uc3QgbWF0Y2ggPSAvXihbLStcXHddezEsMjV9KSg6P1xcL1xcL3w6KS8uZXhlYyh1cmwpO1xuICByZXR1cm4gbWF0Y2ggJiYgbWF0Y2hbMV0gfHwgJyc7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQ2FsY3VsYXRlIGRhdGEgbWF4UmF0ZVxuICogQHBhcmFtIHtOdW1iZXJ9IFtzYW1wbGVzQ291bnQ9IDEwXVxuICogQHBhcmFtIHtOdW1iZXJ9IFttaW49IDEwMDBdXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gKi9cbmZ1bmN0aW9uIHNwZWVkb21ldGVyKHNhbXBsZXNDb3VudCwgbWluKSB7XG4gIHNhbXBsZXNDb3VudCA9IHNhbXBsZXNDb3VudCB8fCAxMDtcbiAgY29uc3QgYnl0ZXMgPSBuZXcgQXJyYXkoc2FtcGxlc0NvdW50KTtcbiAgY29uc3QgdGltZXN0YW1wcyA9IG5ldyBBcnJheShzYW1wbGVzQ291bnQpO1xuICBsZXQgaGVhZCA9IDA7XG4gIGxldCB0YWlsID0gMDtcbiAgbGV0IGZpcnN0U2FtcGxlVFM7XG5cbiAgbWluID0gbWluICE9PSB1bmRlZmluZWQgPyBtaW4gOiAxMDAwO1xuXG4gIHJldHVybiBmdW5jdGlvbiBwdXNoKGNodW5rTGVuZ3RoKSB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblxuICAgIGNvbnN0IHN0YXJ0ZWRBdCA9IHRpbWVzdGFtcHNbdGFpbF07XG5cbiAgICBpZiAoIWZpcnN0U2FtcGxlVFMpIHtcbiAgICAgIGZpcnN0U2FtcGxlVFMgPSBub3c7XG4gICAgfVxuXG4gICAgYnl0ZXNbaGVhZF0gPSBjaHVua0xlbmd0aDtcbiAgICB0aW1lc3RhbXBzW2hlYWRdID0gbm93O1xuXG4gICAgbGV0IGkgPSB0YWlsO1xuICAgIGxldCBieXRlc0NvdW50ID0gMDtcblxuICAgIHdoaWxlIChpICE9PSBoZWFkKSB7XG4gICAgICBieXRlc0NvdW50ICs9IGJ5dGVzW2krK107XG4gICAgICBpID0gaSAlIHNhbXBsZXNDb3VudDtcbiAgICB9XG5cbiAgICBoZWFkID0gKGhlYWQgKyAxKSAlIHNhbXBsZXNDb3VudDtcblxuICAgIGlmIChoZWFkID09PSB0YWlsKSB7XG4gICAgICB0YWlsID0gKHRhaWwgKyAxKSAlIHNhbXBsZXNDb3VudDtcbiAgICB9XG5cbiAgICBpZiAobm93IC0gZmlyc3RTYW1wbGVUUyA8IG1pbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHBhc3NlZCA9IHN0YXJ0ZWRBdCAmJiBub3cgLSBzdGFydGVkQXQ7XG5cbiAgICByZXR1cm4gcGFzc2VkID8gTWF0aC5yb3VuZChieXRlc0NvdW50ICogMTAwMCAvIHBhc3NlZCkgOiB1bmRlZmluZWQ7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IHNwZWVkb21ldGVyO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi8uLi91dGlscy5qcyc7XG5pbXBvcnQgc2V0dGxlIGZyb20gJy4vLi4vY29yZS9zZXR0bGUuanMnO1xuaW1wb3J0IGNvb2tpZXMgZnJvbSAnLi8uLi9oZWxwZXJzL2Nvb2tpZXMuanMnO1xuaW1wb3J0IGJ1aWxkVVJMIGZyb20gJy4vLi4vaGVscGVycy9idWlsZFVSTC5qcyc7XG5pbXBvcnQgYnVpbGRGdWxsUGF0aCBmcm9tICcuLi9jb3JlL2J1aWxkRnVsbFBhdGguanMnO1xuaW1wb3J0IGlzVVJMU2FtZU9yaWdpbiBmcm9tICcuLy4uL2hlbHBlcnMvaXNVUkxTYW1lT3JpZ2luLmpzJztcbmltcG9ydCB0cmFuc2l0aW9uYWxEZWZhdWx0cyBmcm9tICcuLi9kZWZhdWx0cy90cmFuc2l0aW9uYWwuanMnO1xuaW1wb3J0IEF4aW9zRXJyb3IgZnJvbSAnLi4vY29yZS9BeGlvc0Vycm9yLmpzJztcbmltcG9ydCBDYW5jZWxlZEVycm9yIGZyb20gJy4uL2NhbmNlbC9DYW5jZWxlZEVycm9yLmpzJztcbmltcG9ydCBwYXJzZVByb3RvY29sIGZyb20gJy4uL2hlbHBlcnMvcGFyc2VQcm90b2NvbC5qcyc7XG5pbXBvcnQgcGxhdGZvcm0gZnJvbSAnLi4vcGxhdGZvcm0vaW5kZXguanMnO1xuaW1wb3J0IEF4aW9zSGVhZGVycyBmcm9tICcuLi9jb3JlL0F4aW9zSGVhZGVycy5qcyc7XG5pbXBvcnQgc3BlZWRvbWV0ZXIgZnJvbSAnLi4vaGVscGVycy9zcGVlZG9tZXRlci5qcyc7XG5cbmZ1bmN0aW9uIHByb2dyZXNzRXZlbnRSZWR1Y2VyKGxpc3RlbmVyLCBpc0Rvd25sb2FkU3RyZWFtKSB7XG4gIGxldCBieXRlc05vdGlmaWVkID0gMDtcbiAgY29uc3QgX3NwZWVkb21ldGVyID0gc3BlZWRvbWV0ZXIoNTAsIDI1MCk7XG5cbiAgcmV0dXJuIGUgPT4ge1xuICAgIGNvbnN0IGxvYWRlZCA9IGUubG9hZGVkO1xuICAgIGNvbnN0IHRvdGFsID0gZS5sZW5ndGhDb21wdXRhYmxlID8gZS50b3RhbCA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBwcm9ncmVzc0J5dGVzID0gbG9hZGVkIC0gYnl0ZXNOb3RpZmllZDtcbiAgICBjb25zdCByYXRlID0gX3NwZWVkb21ldGVyKHByb2dyZXNzQnl0ZXMpO1xuICAgIGNvbnN0IGluUmFuZ2UgPSBsb2FkZWQgPD0gdG90YWw7XG5cbiAgICBieXRlc05vdGlmaWVkID0gbG9hZGVkO1xuXG4gICAgY29uc3QgZGF0YSA9IHtcbiAgICAgIGxvYWRlZCxcbiAgICAgIHRvdGFsLFxuICAgICAgcHJvZ3Jlc3M6IHRvdGFsID8gKGxvYWRlZCAvIHRvdGFsKSA6IHVuZGVmaW5lZCxcbiAgICAgIGJ5dGVzOiBwcm9ncmVzc0J5dGVzLFxuICAgICAgcmF0ZTogcmF0ZSA/IHJhdGUgOiB1bmRlZmluZWQsXG4gICAgICBlc3RpbWF0ZWQ6IHJhdGUgJiYgdG90YWwgJiYgaW5SYW5nZSA/ICh0b3RhbCAtIGxvYWRlZCkgLyByYXRlIDogdW5kZWZpbmVkLFxuICAgICAgZXZlbnQ6IGVcbiAgICB9O1xuXG4gICAgZGF0YVtpc0Rvd25sb2FkU3RyZWFtID8gJ2Rvd25sb2FkJyA6ICd1cGxvYWQnXSA9IHRydWU7XG5cbiAgICBsaXN0ZW5lcihkYXRhKTtcbiAgfTtcbn1cblxuY29uc3QgaXNYSFJBZGFwdGVyU3VwcG9ydGVkID0gdHlwZW9mIFhNTEh0dHBSZXF1ZXN0ICE9PSAndW5kZWZpbmVkJztcblxuZXhwb3J0IGRlZmF1bHQgaXNYSFJBZGFwdGVyU3VwcG9ydGVkICYmIGZ1bmN0aW9uIChjb25maWcpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIGRpc3BhdGNoWGhyUmVxdWVzdChyZXNvbHZlLCByZWplY3QpIHtcbiAgICBsZXQgcmVxdWVzdERhdGEgPSBjb25maWcuZGF0YTtcbiAgICBjb25zdCByZXF1ZXN0SGVhZGVycyA9IEF4aW9zSGVhZGVycy5mcm9tKGNvbmZpZy5oZWFkZXJzKS5ub3JtYWxpemUoKTtcbiAgICBsZXQge3Jlc3BvbnNlVHlwZSwgd2l0aFhTUkZUb2tlbn0gPSBjb25maWc7XG4gICAgbGV0IG9uQ2FuY2VsZWQ7XG4gICAgZnVuY3Rpb24gZG9uZSgpIHtcbiAgICAgIGlmIChjb25maWcuY2FuY2VsVG9rZW4pIHtcbiAgICAgICAgY29uZmlnLmNhbmNlbFRva2VuLnVuc3Vic2NyaWJlKG9uQ2FuY2VsZWQpO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29uZmlnLnNpZ25hbCkge1xuICAgICAgICBjb25maWcuc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25DYW5jZWxlZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGNvbnRlbnRUeXBlO1xuXG4gICAgaWYgKHV0aWxzLmlzRm9ybURhdGEocmVxdWVzdERhdGEpKSB7XG4gICAgICBpZiAocGxhdGZvcm0uaGFzU3RhbmRhcmRCcm93c2VyRW52IHx8IHBsYXRmb3JtLmhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudikge1xuICAgICAgICByZXF1ZXN0SGVhZGVycy5zZXRDb250ZW50VHlwZShmYWxzZSk7IC8vIExldCB0aGUgYnJvd3NlciBzZXQgaXRcbiAgICAgIH0gZWxzZSBpZiAoKGNvbnRlbnRUeXBlID0gcmVxdWVzdEhlYWRlcnMuZ2V0Q29udGVudFR5cGUoKSkgIT09IGZhbHNlKSB7XG4gICAgICAgIC8vIGZpeCBzZW1pY29sb24gZHVwbGljYXRpb24gaXNzdWUgZm9yIFJlYWN0TmF0aXZlIEZvcm1EYXRhIGltcGxlbWVudGF0aW9uXG4gICAgICAgIGNvbnN0IFt0eXBlLCAuLi50b2tlbnNdID0gY29udGVudFR5cGUgPyBjb250ZW50VHlwZS5zcGxpdCgnOycpLm1hcCh0b2tlbiA9PiB0b2tlbi50cmltKCkpLmZpbHRlcihCb29sZWFuKSA6IFtdO1xuICAgICAgICByZXF1ZXN0SGVhZGVycy5zZXRDb250ZW50VHlwZShbdHlwZSB8fCAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScsIC4uLnRva2Vuc10uam9pbignOyAnKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IHJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblxuICAgIC8vIEhUVFAgYmFzaWMgYXV0aGVudGljYXRpb25cbiAgICBpZiAoY29uZmlnLmF1dGgpIHtcbiAgICAgIGNvbnN0IHVzZXJuYW1lID0gY29uZmlnLmF1dGgudXNlcm5hbWUgfHwgJyc7XG4gICAgICBjb25zdCBwYXNzd29yZCA9IGNvbmZpZy5hdXRoLnBhc3N3b3JkID8gdW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KGNvbmZpZy5hdXRoLnBhc3N3b3JkKSkgOiAnJztcbiAgICAgIHJlcXVlc3RIZWFkZXJzLnNldCgnQXV0aG9yaXphdGlvbicsICdCYXNpYyAnICsgYnRvYSh1c2VybmFtZSArICc6JyArIHBhc3N3b3JkKSk7XG4gICAgfVxuXG4gICAgY29uc3QgZnVsbFBhdGggPSBidWlsZEZ1bGxQYXRoKGNvbmZpZy5iYXNlVVJMLCBjb25maWcudXJsKTtcblxuICAgIHJlcXVlc3Qub3Blbihjb25maWcubWV0aG9kLnRvVXBwZXJDYXNlKCksIGJ1aWxkVVJMKGZ1bGxQYXRoLCBjb25maWcucGFyYW1zLCBjb25maWcucGFyYW1zU2VyaWFsaXplciksIHRydWUpO1xuXG4gICAgLy8gU2V0IHRoZSByZXF1ZXN0IHRpbWVvdXQgaW4gTVNcbiAgICByZXF1ZXN0LnRpbWVvdXQgPSBjb25maWcudGltZW91dDtcblxuICAgIGZ1bmN0aW9uIG9ubG9hZGVuZCgpIHtcbiAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAvLyBQcmVwYXJlIHRoZSByZXNwb25zZVxuICAgICAgY29uc3QgcmVzcG9uc2VIZWFkZXJzID0gQXhpb3NIZWFkZXJzLmZyb20oXG4gICAgICAgICdnZXRBbGxSZXNwb25zZUhlYWRlcnMnIGluIHJlcXVlc3QgJiYgcmVxdWVzdC5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKVxuICAgICAgKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlRGF0YSA9ICFyZXNwb25zZVR5cGUgfHwgcmVzcG9uc2VUeXBlID09PSAndGV4dCcgfHwgcmVzcG9uc2VUeXBlID09PSAnanNvbicgP1xuICAgICAgICByZXF1ZXN0LnJlc3BvbnNlVGV4dCA6IHJlcXVlc3QucmVzcG9uc2U7XG4gICAgICBjb25zdCByZXNwb25zZSA9IHtcbiAgICAgICAgZGF0YTogcmVzcG9uc2VEYXRhLFxuICAgICAgICBzdGF0dXM6IHJlcXVlc3Quc3RhdHVzLFxuICAgICAgICBzdGF0dXNUZXh0OiByZXF1ZXN0LnN0YXR1c1RleHQsXG4gICAgICAgIGhlYWRlcnM6IHJlc3BvbnNlSGVhZGVycyxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICByZXF1ZXN0XG4gICAgICB9O1xuXG4gICAgICBzZXR0bGUoZnVuY3Rpb24gX3Jlc29sdmUodmFsdWUpIHtcbiAgICAgICAgcmVzb2x2ZSh2YWx1ZSk7XG4gICAgICAgIGRvbmUoKTtcbiAgICAgIH0sIGZ1bmN0aW9uIF9yZWplY3QoZXJyKSB7XG4gICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICBkb25lKCk7XG4gICAgICB9LCByZXNwb25zZSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH1cblxuICAgIGlmICgnb25sb2FkZW5kJyBpbiByZXF1ZXN0KSB7XG4gICAgICAvLyBVc2Ugb25sb2FkZW5kIGlmIGF2YWlsYWJsZVxuICAgICAgcmVxdWVzdC5vbmxvYWRlbmQgPSBvbmxvYWRlbmQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIExpc3RlbiBmb3IgcmVhZHkgc3RhdGUgdG8gZW11bGF0ZSBvbmxvYWRlbmRcbiAgICAgIHJlcXVlc3Qub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24gaGFuZGxlTG9hZCgpIHtcbiAgICAgICAgaWYgKCFyZXF1ZXN0IHx8IHJlcXVlc3QucmVhZHlTdGF0ZSAhPT0gNCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoZSByZXF1ZXN0IGVycm9yZWQgb3V0IGFuZCB3ZSBkaWRuJ3QgZ2V0IGEgcmVzcG9uc2UsIHRoaXMgd2lsbCBiZVxuICAgICAgICAvLyBoYW5kbGVkIGJ5IG9uZXJyb3IgaW5zdGVhZFxuICAgICAgICAvLyBXaXRoIG9uZSBleGNlcHRpb246IHJlcXVlc3QgdGhhdCB1c2luZyBmaWxlOiBwcm90b2NvbCwgbW9zdCBicm93c2Vyc1xuICAgICAgICAvLyB3aWxsIHJldHVybiBzdGF0dXMgYXMgMCBldmVuIHRob3VnaCBpdCdzIGEgc3VjY2Vzc2Z1bCByZXF1ZXN0XG4gICAgICAgIGlmIChyZXF1ZXN0LnN0YXR1cyA9PT0gMCAmJiAhKHJlcXVlc3QucmVzcG9uc2VVUkwgJiYgcmVxdWVzdC5yZXNwb25zZVVSTC5pbmRleE9mKCdmaWxlOicpID09PSAwKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyByZWFkeXN0YXRlIGhhbmRsZXIgaXMgY2FsbGluZyBiZWZvcmUgb25lcnJvciBvciBvbnRpbWVvdXQgaGFuZGxlcnMsXG4gICAgICAgIC8vIHNvIHdlIHNob3VsZCBjYWxsIG9ubG9hZGVuZCBvbiB0aGUgbmV4dCAndGljaydcbiAgICAgICAgc2V0VGltZW91dChvbmxvYWRlbmQpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgYnJvd3NlciByZXF1ZXN0IGNhbmNlbGxhdGlvbiAoYXMgb3Bwb3NlZCB0byBhIG1hbnVhbCBjYW5jZWxsYXRpb24pXG4gICAgcmVxdWVzdC5vbmFib3J0ID0gZnVuY3Rpb24gaGFuZGxlQWJvcnQoKSB7XG4gICAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoJ1JlcXVlc3QgYWJvcnRlZCcsIEF4aW9zRXJyb3IuRUNPTk5BQk9SVEVELCBjb25maWcsIHJlcXVlc3QpKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIEhhbmRsZSBsb3cgbGV2ZWwgbmV0d29yayBlcnJvcnNcbiAgICByZXF1ZXN0Lm9uZXJyb3IgPSBmdW5jdGlvbiBoYW5kbGVFcnJvcigpIHtcbiAgICAgIC8vIFJlYWwgZXJyb3JzIGFyZSBoaWRkZW4gZnJvbSB1cyBieSB0aGUgYnJvd3NlclxuICAgICAgLy8gb25lcnJvciBzaG91bGQgb25seSBmaXJlIGlmIGl0J3MgYSBuZXR3b3JrIGVycm9yXG4gICAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoJ05ldHdvcmsgRXJyb3InLCBBeGlvc0Vycm9yLkVSUl9ORVRXT1JLLCBjb25maWcsIHJlcXVlc3QpKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIEhhbmRsZSB0aW1lb3V0XG4gICAgcmVxdWVzdC5vbnRpbWVvdXQgPSBmdW5jdGlvbiBoYW5kbGVUaW1lb3V0KCkge1xuICAgICAgbGV0IHRpbWVvdXRFcnJvck1lc3NhZ2UgPSBjb25maWcudGltZW91dCA/ICd0aW1lb3V0IG9mICcgKyBjb25maWcudGltZW91dCArICdtcyBleGNlZWRlZCcgOiAndGltZW91dCBleGNlZWRlZCc7XG4gICAgICBjb25zdCB0cmFuc2l0aW9uYWwgPSBjb25maWcudHJhbnNpdGlvbmFsIHx8IHRyYW5zaXRpb25hbERlZmF1bHRzO1xuICAgICAgaWYgKGNvbmZpZy50aW1lb3V0RXJyb3JNZXNzYWdlKSB7XG4gICAgICAgIHRpbWVvdXRFcnJvck1lc3NhZ2UgPSBjb25maWcudGltZW91dEVycm9yTWVzc2FnZTtcbiAgICAgIH1cbiAgICAgIHJlamVjdChuZXcgQXhpb3NFcnJvcihcbiAgICAgICAgdGltZW91dEVycm9yTWVzc2FnZSxcbiAgICAgICAgdHJhbnNpdGlvbmFsLmNsYXJpZnlUaW1lb3V0RXJyb3IgPyBBeGlvc0Vycm9yLkVUSU1FRE9VVCA6IEF4aW9zRXJyb3IuRUNPTk5BQk9SVEVELFxuICAgICAgICBjb25maWcsXG4gICAgICAgIHJlcXVlc3QpKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIEFkZCB4c3JmIGhlYWRlclxuICAgIC8vIFRoaXMgaXMgb25seSBkb25lIGlmIHJ1bm5pbmcgaW4gYSBzdGFuZGFyZCBicm93c2VyIGVudmlyb25tZW50LlxuICAgIC8vIFNwZWNpZmljYWxseSBub3QgaWYgd2UncmUgaW4gYSB3ZWIgd29ya2VyLCBvciByZWFjdC1uYXRpdmUuXG4gICAgaWYocGxhdGZvcm0uaGFzU3RhbmRhcmRCcm93c2VyRW52KSB7XG4gICAgICB3aXRoWFNSRlRva2VuICYmIHV0aWxzLmlzRnVuY3Rpb24od2l0aFhTUkZUb2tlbikgJiYgKHdpdGhYU1JGVG9rZW4gPSB3aXRoWFNSRlRva2VuKGNvbmZpZykpO1xuXG4gICAgICBpZiAod2l0aFhTUkZUb2tlbiB8fCAod2l0aFhTUkZUb2tlbiAhPT0gZmFsc2UgJiYgaXNVUkxTYW1lT3JpZ2luKGZ1bGxQYXRoKSkpIHtcbiAgICAgICAgLy8gQWRkIHhzcmYgaGVhZGVyXG4gICAgICAgIGNvbnN0IHhzcmZWYWx1ZSA9IGNvbmZpZy54c3JmSGVhZGVyTmFtZSAmJiBjb25maWcueHNyZkNvb2tpZU5hbWUgJiYgY29va2llcy5yZWFkKGNvbmZpZy54c3JmQ29va2llTmFtZSk7XG5cbiAgICAgICAgaWYgKHhzcmZWYWx1ZSkge1xuICAgICAgICAgIHJlcXVlc3RIZWFkZXJzLnNldChjb25maWcueHNyZkhlYWRlck5hbWUsIHhzcmZWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBSZW1vdmUgQ29udGVudC1UeXBlIGlmIGRhdGEgaXMgdW5kZWZpbmVkXG4gICAgcmVxdWVzdERhdGEgPT09IHVuZGVmaW5lZCAmJiByZXF1ZXN0SGVhZGVycy5zZXRDb250ZW50VHlwZShudWxsKTtcblxuICAgIC8vIEFkZCBoZWFkZXJzIHRvIHRoZSByZXF1ZXN0XG4gICAgaWYgKCdzZXRSZXF1ZXN0SGVhZGVyJyBpbiByZXF1ZXN0KSB7XG4gICAgICB1dGlscy5mb3JFYWNoKHJlcXVlc3RIZWFkZXJzLnRvSlNPTigpLCBmdW5jdGlvbiBzZXRSZXF1ZXN0SGVhZGVyKHZhbCwga2V5KSB7XG4gICAgICAgIHJlcXVlc3Quc2V0UmVxdWVzdEhlYWRlcihrZXksIHZhbCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBBZGQgd2l0aENyZWRlbnRpYWxzIHRvIHJlcXVlc3QgaWYgbmVlZGVkXG4gICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChjb25maWcud2l0aENyZWRlbnRpYWxzKSkge1xuICAgICAgcmVxdWVzdC53aXRoQ3JlZGVudGlhbHMgPSAhIWNvbmZpZy53aXRoQ3JlZGVudGlhbHM7XG4gICAgfVxuXG4gICAgLy8gQWRkIHJlc3BvbnNlVHlwZSB0byByZXF1ZXN0IGlmIG5lZWRlZFxuICAgIGlmIChyZXNwb25zZVR5cGUgJiYgcmVzcG9uc2VUeXBlICE9PSAnanNvbicpIHtcbiAgICAgIHJlcXVlc3QucmVzcG9uc2VUeXBlID0gY29uZmlnLnJlc3BvbnNlVHlwZTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgcHJvZ3Jlc3MgaWYgbmVlZGVkXG4gICAgaWYgKHR5cGVvZiBjb25maWcub25Eb3dubG9hZFByb2dyZXNzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXF1ZXN0LmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgcHJvZ3Jlc3NFdmVudFJlZHVjZXIoY29uZmlnLm9uRG93bmxvYWRQcm9ncmVzcywgdHJ1ZSkpO1xuICAgIH1cblxuICAgIC8vIE5vdCBhbGwgYnJvd3NlcnMgc3VwcG9ydCB1cGxvYWQgZXZlbnRzXG4gICAgaWYgKHR5cGVvZiBjb25maWcub25VcGxvYWRQcm9ncmVzcyA9PT0gJ2Z1bmN0aW9uJyAmJiByZXF1ZXN0LnVwbG9hZCkge1xuICAgICAgcmVxdWVzdC51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCBwcm9ncmVzc0V2ZW50UmVkdWNlcihjb25maWcub25VcGxvYWRQcm9ncmVzcykpO1xuICAgIH1cblxuICAgIGlmIChjb25maWcuY2FuY2VsVG9rZW4gfHwgY29uZmlnLnNpZ25hbCkge1xuICAgICAgLy8gSGFuZGxlIGNhbmNlbGxhdGlvblxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgICAgIG9uQ2FuY2VsZWQgPSBjYW5jZWwgPT4ge1xuICAgICAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KCFjYW5jZWwgfHwgY2FuY2VsLnR5cGUgPyBuZXcgQ2FuY2VsZWRFcnJvcihudWxsLCBjb25maWcsIHJlcXVlc3QpIDogY2FuY2VsKTtcbiAgICAgICAgcmVxdWVzdC5hYm9ydCgpO1xuICAgICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICAgIH07XG5cbiAgICAgIGNvbmZpZy5jYW5jZWxUb2tlbiAmJiBjb25maWcuY2FuY2VsVG9rZW4uc3Vic2NyaWJlKG9uQ2FuY2VsZWQpO1xuICAgICAgaWYgKGNvbmZpZy5zaWduYWwpIHtcbiAgICAgICAgY29uZmlnLnNpZ25hbC5hYm9ydGVkID8gb25DYW5jZWxlZCgpIDogY29uZmlnLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIG9uQ2FuY2VsZWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHByb3RvY29sID0gcGFyc2VQcm90b2NvbChmdWxsUGF0aCk7XG5cbiAgICBpZiAocHJvdG9jb2wgJiYgcGxhdGZvcm0ucHJvdG9jb2xzLmluZGV4T2YocHJvdG9jb2wpID09PSAtMSkge1xuICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKCdVbnN1cHBvcnRlZCBwcm90b2NvbCAnICsgcHJvdG9jb2wgKyAnOicsIEF4aW9zRXJyb3IuRVJSX0JBRF9SRVFVRVNULCBjb25maWcpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cblxuICAgIC8vIFNlbmQgdGhlIHJlcXVlc3RcbiAgICByZXF1ZXN0LnNlbmQocmVxdWVzdERhdGEgfHwgbnVsbCk7XG4gIH0pO1xufVxuIiwiaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcbmltcG9ydCBodHRwQWRhcHRlciBmcm9tICcuL2h0dHAuanMnO1xuaW1wb3J0IHhockFkYXB0ZXIgZnJvbSAnLi94aHIuanMnO1xuaW1wb3J0IEF4aW9zRXJyb3IgZnJvbSBcIi4uL2NvcmUvQXhpb3NFcnJvci5qc1wiO1xuXG5jb25zdCBrbm93bkFkYXB0ZXJzID0ge1xuICBodHRwOiBodHRwQWRhcHRlcixcbiAgeGhyOiB4aHJBZGFwdGVyXG59XG5cbnV0aWxzLmZvckVhY2goa25vd25BZGFwdGVycywgKGZuLCB2YWx1ZSkgPT4ge1xuICBpZiAoZm4pIHtcbiAgICB0cnkge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGZuLCAnbmFtZScsIHt2YWx1ZX0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lbXB0eVxuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZm4sICdhZGFwdGVyTmFtZScsIHt2YWx1ZX0pO1xuICB9XG59KTtcblxuY29uc3QgcmVuZGVyUmVhc29uID0gKHJlYXNvbikgPT4gYC0gJHtyZWFzb259YDtcblxuY29uc3QgaXNSZXNvbHZlZEhhbmRsZSA9IChhZGFwdGVyKSA9PiB1dGlscy5pc0Z1bmN0aW9uKGFkYXB0ZXIpIHx8IGFkYXB0ZXIgPT09IG51bGwgfHwgYWRhcHRlciA9PT0gZmFsc2U7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZ2V0QWRhcHRlcjogKGFkYXB0ZXJzKSA9PiB7XG4gICAgYWRhcHRlcnMgPSB1dGlscy5pc0FycmF5KGFkYXB0ZXJzKSA/IGFkYXB0ZXJzIDogW2FkYXB0ZXJzXTtcblxuICAgIGNvbnN0IHtsZW5ndGh9ID0gYWRhcHRlcnM7XG4gICAgbGV0IG5hbWVPckFkYXB0ZXI7XG4gICAgbGV0IGFkYXB0ZXI7XG5cbiAgICBjb25zdCByZWplY3RlZFJlYXNvbnMgPSB7fTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIG5hbWVPckFkYXB0ZXIgPSBhZGFwdGVyc1tpXTtcbiAgICAgIGxldCBpZDtcblxuICAgICAgYWRhcHRlciA9IG5hbWVPckFkYXB0ZXI7XG5cbiAgICAgIGlmICghaXNSZXNvbHZlZEhhbmRsZShuYW1lT3JBZGFwdGVyKSkge1xuICAgICAgICBhZGFwdGVyID0ga25vd25BZGFwdGVyc1soaWQgPSBTdHJpbmcobmFtZU9yQWRhcHRlcikpLnRvTG93ZXJDYXNlKCldO1xuXG4gICAgICAgIGlmIChhZGFwdGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcihgVW5rbm93biBhZGFwdGVyICcke2lkfSdgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoYWRhcHRlcikge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgcmVqZWN0ZWRSZWFzb25zW2lkIHx8ICcjJyArIGldID0gYWRhcHRlcjtcbiAgICB9XG5cbiAgICBpZiAoIWFkYXB0ZXIpIHtcblxuICAgICAgY29uc3QgcmVhc29ucyA9IE9iamVjdC5lbnRyaWVzKHJlamVjdGVkUmVhc29ucylcbiAgICAgICAgLm1hcCgoW2lkLCBzdGF0ZV0pID0+IGBhZGFwdGVyICR7aWR9IGAgK1xuICAgICAgICAgIChzdGF0ZSA9PT0gZmFsc2UgPyAnaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgZW52aXJvbm1lbnQnIDogJ2lzIG5vdCBhdmFpbGFibGUgaW4gdGhlIGJ1aWxkJylcbiAgICAgICAgKTtcblxuICAgICAgbGV0IHMgPSBsZW5ndGggP1xuICAgICAgICAocmVhc29ucy5sZW5ndGggPiAxID8gJ3NpbmNlIDpcXG4nICsgcmVhc29ucy5tYXAocmVuZGVyUmVhc29uKS5qb2luKCdcXG4nKSA6ICcgJyArIHJlbmRlclJlYXNvbihyZWFzb25zWzBdKSkgOlxuICAgICAgICAnYXMgbm8gYWRhcHRlciBzcGVjaWZpZWQnO1xuXG4gICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcihcbiAgICAgICAgYFRoZXJlIGlzIG5vIHN1aXRhYmxlIGFkYXB0ZXIgdG8gZGlzcGF0Y2ggdGhlIHJlcXVlc3QgYCArIHMsXG4gICAgICAgICdFUlJfTk9UX1NVUFBPUlQnXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBhZGFwdGVyO1xuICB9LFxuICBhZGFwdGVyczoga25vd25BZGFwdGVyc1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdHJhbnNmb3JtRGF0YSBmcm9tICcuL3RyYW5zZm9ybURhdGEuanMnO1xuaW1wb3J0IGlzQ2FuY2VsIGZyb20gJy4uL2NhbmNlbC9pc0NhbmNlbC5qcyc7XG5pbXBvcnQgZGVmYXVsdHMgZnJvbSAnLi4vZGVmYXVsdHMvaW5kZXguanMnO1xuaW1wb3J0IENhbmNlbGVkRXJyb3IgZnJvbSAnLi4vY2FuY2VsL0NhbmNlbGVkRXJyb3IuanMnO1xuaW1wb3J0IEF4aW9zSGVhZGVycyBmcm9tICcuLi9jb3JlL0F4aW9zSGVhZGVycy5qcyc7XG5pbXBvcnQgYWRhcHRlcnMgZnJvbSBcIi4uL2FkYXB0ZXJzL2FkYXB0ZXJzLmpzXCI7XG5cbi8qKlxuICogVGhyb3dzIGEgYENhbmNlbGVkRXJyb3JgIGlmIGNhbmNlbGxhdGlvbiBoYXMgYmVlbiByZXF1ZXN0ZWQuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyBUaGUgY29uZmlnIHRoYXQgaXMgdG8gYmUgdXNlZCBmb3IgdGhlIHJlcXVlc3RcbiAqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpIHtcbiAgaWYgKGNvbmZpZy5jYW5jZWxUb2tlbikge1xuICAgIGNvbmZpZy5jYW5jZWxUb2tlbi50aHJvd0lmUmVxdWVzdGVkKCk7XG4gIH1cblxuICBpZiAoY29uZmlnLnNpZ25hbCAmJiBjb25maWcuc2lnbmFsLmFib3J0ZWQpIHtcbiAgICB0aHJvdyBuZXcgQ2FuY2VsZWRFcnJvcihudWxsLCBjb25maWcpO1xuICB9XG59XG5cbi8qKlxuICogRGlzcGF0Y2ggYSByZXF1ZXN0IHRvIHRoZSBzZXJ2ZXIgdXNpbmcgdGhlIGNvbmZpZ3VyZWQgYWRhcHRlci5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gY29uZmlnIFRoZSBjb25maWcgdGhhdCBpcyB0byBiZSB1c2VkIGZvciB0aGUgcmVxdWVzdFxuICpcbiAqIEByZXR1cm5zIHtQcm9taXNlfSBUaGUgUHJvbWlzZSB0byBiZSBmdWxmaWxsZWRcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZGlzcGF0Y2hSZXF1ZXN0KGNvbmZpZykge1xuICB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZyk7XG5cbiAgY29uZmlnLmhlYWRlcnMgPSBBeGlvc0hlYWRlcnMuZnJvbShjb25maWcuaGVhZGVycyk7XG5cbiAgLy8gVHJhbnNmb3JtIHJlcXVlc3QgZGF0YVxuICBjb25maWcuZGF0YSA9IHRyYW5zZm9ybURhdGEuY2FsbChcbiAgICBjb25maWcsXG4gICAgY29uZmlnLnRyYW5zZm9ybVJlcXVlc3RcbiAgKTtcblxuICBpZiAoWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLmluZGV4T2YoY29uZmlnLm1ldGhvZCkgIT09IC0xKSB7XG4gICAgY29uZmlnLmhlYWRlcnMuc2V0Q29udGVudFR5cGUoJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsIGZhbHNlKTtcbiAgfVxuXG4gIGNvbnN0IGFkYXB0ZXIgPSBhZGFwdGVycy5nZXRBZGFwdGVyKGNvbmZpZy5hZGFwdGVyIHx8IGRlZmF1bHRzLmFkYXB0ZXIpO1xuXG4gIHJldHVybiBhZGFwdGVyKGNvbmZpZykudGhlbihmdW5jdGlvbiBvbkFkYXB0ZXJSZXNvbHV0aW9uKHJlc3BvbnNlKSB7XG4gICAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gICAgLy8gVHJhbnNmb3JtIHJlc3BvbnNlIGRhdGFcbiAgICByZXNwb25zZS5kYXRhID0gdHJhbnNmb3JtRGF0YS5jYWxsKFxuICAgICAgY29uZmlnLFxuICAgICAgY29uZmlnLnRyYW5zZm9ybVJlc3BvbnNlLFxuICAgICAgcmVzcG9uc2VcbiAgICApO1xuXG4gICAgcmVzcG9uc2UuaGVhZGVycyA9IEF4aW9zSGVhZGVycy5mcm9tKHJlc3BvbnNlLmhlYWRlcnMpO1xuXG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICB9LCBmdW5jdGlvbiBvbkFkYXB0ZXJSZWplY3Rpb24ocmVhc29uKSB7XG4gICAgaWYgKCFpc0NhbmNlbChyZWFzb24pKSB7XG4gICAgICB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZyk7XG5cbiAgICAgIC8vIFRyYW5zZm9ybSByZXNwb25zZSBkYXRhXG4gICAgICBpZiAocmVhc29uICYmIHJlYXNvbi5yZXNwb25zZSkge1xuICAgICAgICByZWFzb24ucmVzcG9uc2UuZGF0YSA9IHRyYW5zZm9ybURhdGEuY2FsbChcbiAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgY29uZmlnLnRyYW5zZm9ybVJlc3BvbnNlLFxuICAgICAgICAgIHJlYXNvbi5yZXNwb25zZVxuICAgICAgICApO1xuICAgICAgICByZWFzb24ucmVzcG9uc2UuaGVhZGVycyA9IEF4aW9zSGVhZGVycy5mcm9tKHJlYXNvbi5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QocmVhc29uKTtcbiAgfSk7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5pbXBvcnQgQXhpb3NIZWFkZXJzIGZyb20gXCIuL0F4aW9zSGVhZGVycy5qc1wiO1xuXG5jb25zdCBoZWFkZXJzVG9PYmplY3QgPSAodGhpbmcpID0+IHRoaW5nIGluc3RhbmNlb2YgQXhpb3NIZWFkZXJzID8gdGhpbmcudG9KU09OKCkgOiB0aGluZztcblxuLyoqXG4gKiBDb25maWctc3BlY2lmaWMgbWVyZ2UtZnVuY3Rpb24gd2hpY2ggY3JlYXRlcyBhIG5ldyBjb25maWctb2JqZWN0XG4gKiBieSBtZXJnaW5nIHR3byBjb25maWd1cmF0aW9uIG9iamVjdHMgdG9nZXRoZXIuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZzFcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcyXG4gKlxuICogQHJldHVybnMge09iamVjdH0gTmV3IG9iamVjdCByZXN1bHRpbmcgZnJvbSBtZXJnaW5nIGNvbmZpZzIgdG8gY29uZmlnMVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtZXJnZUNvbmZpZyhjb25maWcxLCBjb25maWcyKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICBjb25maWcyID0gY29uZmlnMiB8fCB7fTtcbiAgY29uc3QgY29uZmlnID0ge307XG5cbiAgZnVuY3Rpb24gZ2V0TWVyZ2VkVmFsdWUodGFyZ2V0LCBzb3VyY2UsIGNhc2VsZXNzKSB7XG4gICAgaWYgKHV0aWxzLmlzUGxhaW5PYmplY3QodGFyZ2V0KSAmJiB1dGlscy5pc1BsYWluT2JqZWN0KHNvdXJjZSkpIHtcbiAgICAgIHJldHVybiB1dGlscy5tZXJnZS5jYWxsKHtjYXNlbGVzc30sIHRhcmdldCwgc291cmNlKTtcbiAgICB9IGVsc2UgaWYgKHV0aWxzLmlzUGxhaW5PYmplY3Qoc291cmNlKSkge1xuICAgICAgcmV0dXJuIHV0aWxzLm1lcmdlKHt9LCBzb3VyY2UpO1xuICAgIH0gZWxzZSBpZiAodXRpbHMuaXNBcnJheShzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gc291cmNlLnNsaWNlKCk7XG4gICAgfVxuICAgIHJldHVybiBzb3VyY2U7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgZnVuY3Rpb24gbWVyZ2VEZWVwUHJvcGVydGllcyhhLCBiLCBjYXNlbGVzcykge1xuICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQoYikpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZShhLCBiLCBjYXNlbGVzcyk7XG4gICAgfSBlbHNlIGlmICghdXRpbHMuaXNVbmRlZmluZWQoYSkpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGEsIGNhc2VsZXNzKTtcbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgZnVuY3Rpb24gdmFsdWVGcm9tQ29uZmlnMihhLCBiKSB7XG4gICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChiKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgYik7XG4gICAgfVxuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gIGZ1bmN0aW9uIGRlZmF1bHRUb0NvbmZpZzIoYSwgYikge1xuICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQoYikpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGIpO1xuICAgIH0gZWxzZSBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGEpKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBhKTtcbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgZnVuY3Rpb24gbWVyZ2VEaXJlY3RLZXlzKGEsIGIsIHByb3ApIHtcbiAgICBpZiAocHJvcCBpbiBjb25maWcyKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUoYSwgYik7XG4gICAgfSBlbHNlIGlmIChwcm9wIGluIGNvbmZpZzEpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGEpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IG1lcmdlTWFwID0ge1xuICAgIHVybDogdmFsdWVGcm9tQ29uZmlnMixcbiAgICBtZXRob2Q6IHZhbHVlRnJvbUNvbmZpZzIsXG4gICAgZGF0YTogdmFsdWVGcm9tQ29uZmlnMixcbiAgICBiYXNlVVJMOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHRyYW5zZm9ybVJlcXVlc3Q6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdHJhbnNmb3JtUmVzcG9uc2U6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgcGFyYW1zU2VyaWFsaXplcjogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB0aW1lb3V0OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHRpbWVvdXRNZXNzYWdlOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHdpdGhDcmVkZW50aWFsczogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB3aXRoWFNSRlRva2VuOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGFkYXB0ZXI6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgcmVzcG9uc2VUeXBlOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHhzcmZDb29raWVOYW1lOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHhzcmZIZWFkZXJOYW1lOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIG9uVXBsb2FkUHJvZ3Jlc3M6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgb25Eb3dubG9hZFByb2dyZXNzOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGRlY29tcHJlc3M6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgbWF4Q29udGVudExlbmd0aDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBtYXhCb2R5TGVuZ3RoOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGJlZm9yZVJlZGlyZWN0OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHRyYW5zcG9ydDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBodHRwQWdlbnQ6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgaHR0cHNBZ2VudDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBjYW5jZWxUb2tlbjogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBzb2NrZXRQYXRoOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHJlc3BvbnNlRW5jb2Rpbmc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdmFsaWRhdGVTdGF0dXM6IG1lcmdlRGlyZWN0S2V5cyxcbiAgICBoZWFkZXJzOiAoYSwgYikgPT4gbWVyZ2VEZWVwUHJvcGVydGllcyhoZWFkZXJzVG9PYmplY3QoYSksIGhlYWRlcnNUb09iamVjdChiKSwgdHJ1ZSlcbiAgfTtcblxuICB1dGlscy5mb3JFYWNoKE9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30sIGNvbmZpZzEsIGNvbmZpZzIpKSwgZnVuY3Rpb24gY29tcHV0ZUNvbmZpZ1ZhbHVlKHByb3ApIHtcbiAgICBjb25zdCBtZXJnZSA9IG1lcmdlTWFwW3Byb3BdIHx8IG1lcmdlRGVlcFByb3BlcnRpZXM7XG4gICAgY29uc3QgY29uZmlnVmFsdWUgPSBtZXJnZShjb25maWcxW3Byb3BdLCBjb25maWcyW3Byb3BdLCBwcm9wKTtcbiAgICAodXRpbHMuaXNVbmRlZmluZWQoY29uZmlnVmFsdWUpICYmIG1lcmdlICE9PSBtZXJnZURpcmVjdEtleXMpIHx8IChjb25maWdbcHJvcF0gPSBjb25maWdWYWx1ZSk7XG4gIH0pO1xuXG4gIHJldHVybiBjb25maWc7XG59XG4iLCJleHBvcnQgY29uc3QgVkVSU0lPTiA9IFwiMS42LjdcIjsiLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB7VkVSU0lPTn0gZnJvbSAnLi4vZW52L2RhdGEuanMnO1xuaW1wb3J0IEF4aW9zRXJyb3IgZnJvbSAnLi4vY29yZS9BeGlvc0Vycm9yLmpzJztcblxuY29uc3QgdmFsaWRhdG9ycyA9IHt9O1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuWydvYmplY3QnLCAnYm9vbGVhbicsICdudW1iZXInLCAnZnVuY3Rpb24nLCAnc3RyaW5nJywgJ3N5bWJvbCddLmZvckVhY2goKHR5cGUsIGkpID0+IHtcbiAgdmFsaWRhdG9yc1t0eXBlXSA9IGZ1bmN0aW9uIHZhbGlkYXRvcih0aGluZykge1xuICAgIHJldHVybiB0eXBlb2YgdGhpbmcgPT09IHR5cGUgfHwgJ2EnICsgKGkgPCAxID8gJ24gJyA6ICcgJykgKyB0eXBlO1xuICB9O1xufSk7XG5cbmNvbnN0IGRlcHJlY2F0ZWRXYXJuaW5ncyA9IHt9O1xuXG4vKipcbiAqIFRyYW5zaXRpb25hbCBvcHRpb24gdmFsaWRhdG9yXG4gKlxuICogQHBhcmFtIHtmdW5jdGlvbnxib29sZWFuP30gdmFsaWRhdG9yIC0gc2V0IHRvIGZhbHNlIGlmIHRoZSB0cmFuc2l0aW9uYWwgb3B0aW9uIGhhcyBiZWVuIHJlbW92ZWRcbiAqIEBwYXJhbSB7c3RyaW5nP30gdmVyc2lvbiAtIGRlcHJlY2F0ZWQgdmVyc2lvbiAvIHJlbW92ZWQgc2luY2UgdmVyc2lvblxuICogQHBhcmFtIHtzdHJpbmc/fSBtZXNzYWdlIC0gc29tZSBtZXNzYWdlIHdpdGggYWRkaXRpb25hbCBpbmZvXG4gKlxuICogQHJldHVybnMge2Z1bmN0aW9ufVxuICovXG52YWxpZGF0b3JzLnRyYW5zaXRpb25hbCA9IGZ1bmN0aW9uIHRyYW5zaXRpb25hbCh2YWxpZGF0b3IsIHZlcnNpb24sIG1lc3NhZ2UpIHtcbiAgZnVuY3Rpb24gZm9ybWF0TWVzc2FnZShvcHQsIGRlc2MpIHtcbiAgICByZXR1cm4gJ1tBeGlvcyB2JyArIFZFUlNJT04gKyAnXSBUcmFuc2l0aW9uYWwgb3B0aW9uIFxcJycgKyBvcHQgKyAnXFwnJyArIGRlc2MgKyAobWVzc2FnZSA/ICcuICcgKyBtZXNzYWdlIDogJycpO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgcmV0dXJuICh2YWx1ZSwgb3B0LCBvcHRzKSA9PiB7XG4gICAgaWYgKHZhbGlkYXRvciA9PT0gZmFsc2UpIHtcbiAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICBmb3JtYXRNZXNzYWdlKG9wdCwgJyBoYXMgYmVlbiByZW1vdmVkJyArICh2ZXJzaW9uID8gJyBpbiAnICsgdmVyc2lvbiA6ICcnKSksXG4gICAgICAgIEF4aW9zRXJyb3IuRVJSX0RFUFJFQ0FURURcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHZlcnNpb24gJiYgIWRlcHJlY2F0ZWRXYXJuaW5nc1tvcHRdKSB7XG4gICAgICBkZXByZWNhdGVkV2FybmluZ3Nbb3B0XSA9IHRydWU7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBmb3JtYXRNZXNzYWdlKFxuICAgICAgICAgIG9wdCxcbiAgICAgICAgICAnIGhhcyBiZWVuIGRlcHJlY2F0ZWQgc2luY2UgdicgKyB2ZXJzaW9uICsgJyBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZWFyIGZ1dHVyZSdcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsaWRhdG9yID8gdmFsaWRhdG9yKHZhbHVlLCBvcHQsIG9wdHMpIDogdHJ1ZTtcbiAgfTtcbn07XG5cbi8qKlxuICogQXNzZXJ0IG9iamVjdCdzIHByb3BlcnRpZXMgdHlwZVxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gKiBAcGFyYW0ge29iamVjdH0gc2NoZW1hXG4gKiBAcGFyYW0ge2Jvb2xlYW4/fSBhbGxvd1Vua25vd25cbiAqXG4gKiBAcmV0dXJucyB7b2JqZWN0fVxuICovXG5cbmZ1bmN0aW9uIGFzc2VydE9wdGlvbnMob3B0aW9ucywgc2NoZW1hLCBhbGxvd1Vua25vd24pIHtcbiAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKCdvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0JywgQXhpb3NFcnJvci5FUlJfQkFEX09QVElPTl9WQUxVRSk7XG4gIH1cbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9wdGlvbnMpO1xuICBsZXQgaSA9IGtleXMubGVuZ3RoO1xuICB3aGlsZSAoaS0tID4gMCkge1xuICAgIGNvbnN0IG9wdCA9IGtleXNbaV07XG4gICAgY29uc3QgdmFsaWRhdG9yID0gc2NoZW1hW29wdF07XG4gICAgaWYgKHZhbGlkYXRvcikge1xuICAgICAgY29uc3QgdmFsdWUgPSBvcHRpb25zW29wdF07XG4gICAgICBjb25zdCByZXN1bHQgPSB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbGlkYXRvcih2YWx1ZSwgb3B0LCBvcHRpb25zKTtcbiAgICAgIGlmIChyZXN1bHQgIT09IHRydWUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoJ29wdGlvbiAnICsgb3B0ICsgJyBtdXN0IGJlICcgKyByZXN1bHQsIEF4aW9zRXJyb3IuRVJSX0JBRF9PUFRJT05fVkFMVUUpO1xuICAgICAgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChhbGxvd1Vua25vd24gIT09IHRydWUpIHtcbiAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKCdVbmtub3duIG9wdGlvbiAnICsgb3B0LCBBeGlvc0Vycm9yLkVSUl9CQURfT1BUSU9OKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBhc3NlcnRPcHRpb25zLFxuICB2YWxpZGF0b3JzXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi8uLi91dGlscy5qcyc7XG5pbXBvcnQgYnVpbGRVUkwgZnJvbSAnLi4vaGVscGVycy9idWlsZFVSTC5qcyc7XG5pbXBvcnQgSW50ZXJjZXB0b3JNYW5hZ2VyIGZyb20gJy4vSW50ZXJjZXB0b3JNYW5hZ2VyLmpzJztcbmltcG9ydCBkaXNwYXRjaFJlcXVlc3QgZnJvbSAnLi9kaXNwYXRjaFJlcXVlc3QuanMnO1xuaW1wb3J0IG1lcmdlQ29uZmlnIGZyb20gJy4vbWVyZ2VDb25maWcuanMnO1xuaW1wb3J0IGJ1aWxkRnVsbFBhdGggZnJvbSAnLi9idWlsZEZ1bGxQYXRoLmpzJztcbmltcG9ydCB2YWxpZGF0b3IgZnJvbSAnLi4vaGVscGVycy92YWxpZGF0b3IuanMnO1xuaW1wb3J0IEF4aW9zSGVhZGVycyBmcm9tICcuL0F4aW9zSGVhZGVycy5qcyc7XG5cbmNvbnN0IHZhbGlkYXRvcnMgPSB2YWxpZGF0b3IudmFsaWRhdG9ycztcblxuLyoqXG4gKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgQXhpb3NcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VDb25maWcgVGhlIGRlZmF1bHQgY29uZmlnIGZvciB0aGUgaW5zdGFuY2VcbiAqXG4gKiBAcmV0dXJuIHtBeGlvc30gQSBuZXcgaW5zdGFuY2Ugb2YgQXhpb3NcbiAqL1xuY2xhc3MgQXhpb3Mge1xuICBjb25zdHJ1Y3RvcihpbnN0YW5jZUNvbmZpZykge1xuICAgIHRoaXMuZGVmYXVsdHMgPSBpbnN0YW5jZUNvbmZpZztcbiAgICB0aGlzLmludGVyY2VwdG9ycyA9IHtcbiAgICAgIHJlcXVlc3Q6IG5ldyBJbnRlcmNlcHRvck1hbmFnZXIoKSxcbiAgICAgIHJlc3BvbnNlOiBuZXcgSW50ZXJjZXB0b3JNYW5hZ2VyKClcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERpc3BhdGNoIGEgcmVxdWVzdFxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ3xPYmplY3R9IGNvbmZpZ09yVXJsIFRoZSBjb25maWcgc3BlY2lmaWMgZm9yIHRoaXMgcmVxdWVzdCAobWVyZ2VkIHdpdGggdGhpcy5kZWZhdWx0cylcbiAgICogQHBhcmFtIHs/T2JqZWN0fSBjb25maWdcbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2V9IFRoZSBQcm9taXNlIHRvIGJlIGZ1bGZpbGxlZFxuICAgKi9cbiAgYXN5bmMgcmVxdWVzdChjb25maWdPclVybCwgY29uZmlnKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLl9yZXF1ZXN0KGNvbmZpZ09yVXJsLCBjb25maWcpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgIGxldCBkdW1teTtcblxuICAgICAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSA/IEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKGR1bW15ID0ge30pIDogKGR1bW15ID0gbmV3IEVycm9yKCkpO1xuXG4gICAgICAgIC8vIHNsaWNlIG9mZiB0aGUgRXJyb3I6IC4uLiBsaW5lXG4gICAgICAgIGNvbnN0IHN0YWNrID0gZHVtbXkuc3RhY2sgPyBkdW1teS5zdGFjay5yZXBsYWNlKC9eLitcXG4vLCAnJykgOiAnJztcblxuICAgICAgICBpZiAoIWVyci5zdGFjaykge1xuICAgICAgICAgIGVyci5zdGFjayA9IHN0YWNrO1xuICAgICAgICAgIC8vIG1hdGNoIHdpdGhvdXQgdGhlIDIgdG9wIHN0YWNrIGxpbmVzXG4gICAgICAgIH0gZWxzZSBpZiAoc3RhY2sgJiYgIVN0cmluZyhlcnIuc3RhY2spLmVuZHNXaXRoKHN0YWNrLnJlcGxhY2UoL14uK1xcbi4rXFxuLywgJycpKSkge1xuICAgICAgICAgIGVyci5zdGFjayArPSAnXFxuJyArIHN0YWNrXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgfVxuXG4gIF9yZXF1ZXN0KGNvbmZpZ09yVXJsLCBjb25maWcpIHtcbiAgICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgICAvLyBBbGxvdyBmb3IgYXhpb3MoJ2V4YW1wbGUvdXJsJ1ssIGNvbmZpZ10pIGEgbGEgZmV0Y2ggQVBJXG4gICAgaWYgKHR5cGVvZiBjb25maWdPclVybCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbmZpZyA9IGNvbmZpZyB8fCB7fTtcbiAgICAgIGNvbmZpZy51cmwgPSBjb25maWdPclVybDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uZmlnID0gY29uZmlnT3JVcmwgfHwge307XG4gICAgfVxuXG4gICAgY29uZmlnID0gbWVyZ2VDb25maWcodGhpcy5kZWZhdWx0cywgY29uZmlnKTtcblxuICAgIGNvbnN0IHt0cmFuc2l0aW9uYWwsIHBhcmFtc1NlcmlhbGl6ZXIsIGhlYWRlcnN9ID0gY29uZmlnO1xuXG4gICAgaWYgKHRyYW5zaXRpb25hbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YWxpZGF0b3IuYXNzZXJ0T3B0aW9ucyh0cmFuc2l0aW9uYWwsIHtcbiAgICAgICAgc2lsZW50SlNPTlBhcnNpbmc6IHZhbGlkYXRvcnMudHJhbnNpdGlvbmFsKHZhbGlkYXRvcnMuYm9vbGVhbiksXG4gICAgICAgIGZvcmNlZEpTT05QYXJzaW5nOiB2YWxpZGF0b3JzLnRyYW5zaXRpb25hbCh2YWxpZGF0b3JzLmJvb2xlYW4pLFxuICAgICAgICBjbGFyaWZ5VGltZW91dEVycm9yOiB2YWxpZGF0b3JzLnRyYW5zaXRpb25hbCh2YWxpZGF0b3JzLmJvb2xlYW4pXG4gICAgICB9LCBmYWxzZSk7XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtc1NlcmlhbGl6ZXIgIT0gbnVsbCkge1xuICAgICAgaWYgKHV0aWxzLmlzRnVuY3Rpb24ocGFyYW1zU2VyaWFsaXplcikpIHtcbiAgICAgICAgY29uZmlnLnBhcmFtc1NlcmlhbGl6ZXIgPSB7XG4gICAgICAgICAgc2VyaWFsaXplOiBwYXJhbXNTZXJpYWxpemVyXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbGlkYXRvci5hc3NlcnRPcHRpb25zKHBhcmFtc1NlcmlhbGl6ZXIsIHtcbiAgICAgICAgICBlbmNvZGU6IHZhbGlkYXRvcnMuZnVuY3Rpb24sXG4gICAgICAgICAgc2VyaWFsaXplOiB2YWxpZGF0b3JzLmZ1bmN0aW9uXG4gICAgICAgIH0sIHRydWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNldCBjb25maWcubWV0aG9kXG4gICAgY29uZmlnLm1ldGhvZCA9IChjb25maWcubWV0aG9kIHx8IHRoaXMuZGVmYXVsdHMubWV0aG9kIHx8ICdnZXQnKS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgLy8gRmxhdHRlbiBoZWFkZXJzXG4gICAgbGV0IGNvbnRleHRIZWFkZXJzID0gaGVhZGVycyAmJiB1dGlscy5tZXJnZShcbiAgICAgIGhlYWRlcnMuY29tbW9uLFxuICAgICAgaGVhZGVyc1tjb25maWcubWV0aG9kXVxuICAgICk7XG5cbiAgICBoZWFkZXJzICYmIHV0aWxzLmZvckVhY2goXG4gICAgICBbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCcsICdwb3N0JywgJ3B1dCcsICdwYXRjaCcsICdjb21tb24nXSxcbiAgICAgIChtZXRob2QpID0+IHtcbiAgICAgICAgZGVsZXRlIGhlYWRlcnNbbWV0aG9kXTtcbiAgICAgIH1cbiAgICApO1xuXG4gICAgY29uZmlnLmhlYWRlcnMgPSBBeGlvc0hlYWRlcnMuY29uY2F0KGNvbnRleHRIZWFkZXJzLCBoZWFkZXJzKTtcblxuICAgIC8vIGZpbHRlciBvdXQgc2tpcHBlZCBpbnRlcmNlcHRvcnNcbiAgICBjb25zdCByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbiA9IFtdO1xuICAgIGxldCBzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMgPSB0cnVlO1xuICAgIHRoaXMuaW50ZXJjZXB0b3JzLnJlcXVlc3QuZm9yRWFjaChmdW5jdGlvbiB1bnNoaWZ0UmVxdWVzdEludGVyY2VwdG9ycyhpbnRlcmNlcHRvcikge1xuICAgICAgaWYgKHR5cGVvZiBpbnRlcmNlcHRvci5ydW5XaGVuID09PSAnZnVuY3Rpb24nICYmIGludGVyY2VwdG9yLnJ1bldoZW4oY29uZmlnKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMgPSBzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMgJiYgaW50ZXJjZXB0b3Iuc3luY2hyb25vdXM7XG5cbiAgICAgIHJlcXVlc3RJbnRlcmNlcHRvckNoYWluLnVuc2hpZnQoaW50ZXJjZXB0b3IuZnVsZmlsbGVkLCBpbnRlcmNlcHRvci5yZWplY3RlZCk7XG4gICAgfSk7XG5cbiAgICBjb25zdCByZXNwb25zZUludGVyY2VwdG9yQ2hhaW4gPSBbXTtcbiAgICB0aGlzLmludGVyY2VwdG9ycy5yZXNwb25zZS5mb3JFYWNoKGZ1bmN0aW9uIHB1c2hSZXNwb25zZUludGVyY2VwdG9ycyhpbnRlcmNlcHRvcikge1xuICAgICAgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluLnB1c2goaW50ZXJjZXB0b3IuZnVsZmlsbGVkLCBpbnRlcmNlcHRvci5yZWplY3RlZCk7XG4gICAgfSk7XG5cbiAgICBsZXQgcHJvbWlzZTtcbiAgICBsZXQgaSA9IDA7XG4gICAgbGV0IGxlbjtcblxuICAgIGlmICghc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzKSB7XG4gICAgICBjb25zdCBjaGFpbiA9IFtkaXNwYXRjaFJlcXVlc3QuYmluZCh0aGlzKSwgdW5kZWZpbmVkXTtcbiAgICAgIGNoYWluLnVuc2hpZnQuYXBwbHkoY2hhaW4sIHJlcXVlc3RJbnRlcmNlcHRvckNoYWluKTtcbiAgICAgIGNoYWluLnB1c2guYXBwbHkoY2hhaW4sIHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbik7XG4gICAgICBsZW4gPSBjaGFpbi5sZW5ndGg7XG5cbiAgICAgIHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoY29uZmlnKTtcblxuICAgICAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICAgICAgcHJvbWlzZSA9IHByb21pc2UudGhlbihjaGFpbltpKytdLCBjaGFpbltpKytdKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfVxuXG4gICAgbGVuID0gcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4ubGVuZ3RoO1xuXG4gICAgbGV0IG5ld0NvbmZpZyA9IGNvbmZpZztcblxuICAgIGkgPSAwO1xuXG4gICAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICAgIGNvbnN0IG9uRnVsZmlsbGVkID0gcmVxdWVzdEludGVyY2VwdG9yQ2hhaW5baSsrXTtcbiAgICAgIGNvbnN0IG9uUmVqZWN0ZWQgPSByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbltpKytdO1xuICAgICAgdHJ5IHtcbiAgICAgICAgbmV3Q29uZmlnID0gb25GdWxmaWxsZWQobmV3Q29uZmlnKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIG9uUmVqZWN0ZWQuY2FsbCh0aGlzLCBlcnJvcik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBwcm9taXNlID0gZGlzcGF0Y2hSZXF1ZXN0LmNhbGwodGhpcywgbmV3Q29uZmlnKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKTtcbiAgICB9XG5cbiAgICBpID0gMDtcbiAgICBsZW4gPSByZXNwb25zZUludGVyY2VwdG9yQ2hhaW4ubGVuZ3RoO1xuXG4gICAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICAgIHByb21pc2UgPSBwcm9taXNlLnRoZW4ocmVzcG9uc2VJbnRlcmNlcHRvckNoYWluW2krK10sIHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbltpKytdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvbWlzZTtcbiAgfVxuXG4gIGdldFVyaShjb25maWcpIHtcbiAgICBjb25maWcgPSBtZXJnZUNvbmZpZyh0aGlzLmRlZmF1bHRzLCBjb25maWcpO1xuICAgIGNvbnN0IGZ1bGxQYXRoID0gYnVpbGRGdWxsUGF0aChjb25maWcuYmFzZVVSTCwgY29uZmlnLnVybCk7XG4gICAgcmV0dXJuIGJ1aWxkVVJMKGZ1bGxQYXRoLCBjb25maWcucGFyYW1zLCBjb25maWcucGFyYW1zU2VyaWFsaXplcik7XG4gIH1cbn1cblxuLy8gUHJvdmlkZSBhbGlhc2VzIGZvciBzdXBwb3J0ZWQgcmVxdWVzdCBtZXRob2RzXG51dGlscy5mb3JFYWNoKFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJywgJ29wdGlvbnMnXSwgZnVuY3Rpb24gZm9yRWFjaE1ldGhvZE5vRGF0YShtZXRob2QpIHtcbiAgLyplc2xpbnQgZnVuYy1uYW1lczowKi9cbiAgQXhpb3MucHJvdG90eXBlW21ldGhvZF0gPSBmdW5jdGlvbih1cmwsIGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QobWVyZ2VDb25maWcoY29uZmlnIHx8IHt9LCB7XG4gICAgICBtZXRob2QsXG4gICAgICB1cmwsXG4gICAgICBkYXRhOiAoY29uZmlnIHx8IHt9KS5kYXRhXG4gICAgfSkpO1xuICB9O1xufSk7XG5cbnV0aWxzLmZvckVhY2goWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kV2l0aERhdGEobWV0aG9kKSB7XG4gIC8qZXNsaW50IGZ1bmMtbmFtZXM6MCovXG5cbiAgZnVuY3Rpb24gZ2VuZXJhdGVIVFRQTWV0aG9kKGlzRm9ybSkge1xuICAgIHJldHVybiBmdW5jdGlvbiBodHRwTWV0aG9kKHVybCwgZGF0YSwgY29uZmlnKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KG1lcmdlQ29uZmlnKGNvbmZpZyB8fCB7fSwge1xuICAgICAgICBtZXRob2QsXG4gICAgICAgIGhlYWRlcnM6IGlzRm9ybSA/IHtcbiAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ211bHRpcGFydC9mb3JtLWRhdGEnXG4gICAgICAgIH0gOiB7fSxcbiAgICAgICAgdXJsLFxuICAgICAgICBkYXRhXG4gICAgICB9KSk7XG4gICAgfTtcbiAgfVxuXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2RdID0gZ2VuZXJhdGVIVFRQTWV0aG9kKCk7XG5cbiAgQXhpb3MucHJvdG90eXBlW21ldGhvZCArICdGb3JtJ10gPSBnZW5lcmF0ZUhUVFBNZXRob2QodHJ1ZSk7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgQXhpb3M7XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCBDYW5jZWxlZEVycm9yIGZyb20gJy4vQ2FuY2VsZWRFcnJvci5qcyc7XG5cbi8qKlxuICogQSBgQ2FuY2VsVG9rZW5gIGlzIGFuIG9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIHRvIHJlcXVlc3QgY2FuY2VsbGF0aW9uIG9mIGFuIG9wZXJhdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBleGVjdXRvciBUaGUgZXhlY3V0b3IgZnVuY3Rpb24uXG4gKlxuICogQHJldHVybnMge0NhbmNlbFRva2VufVxuICovXG5jbGFzcyBDYW5jZWxUb2tlbiB7XG4gIGNvbnN0cnVjdG9yKGV4ZWN1dG9yKSB7XG4gICAgaWYgKHR5cGVvZiBleGVjdXRvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZXhlY3V0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uLicpO1xuICAgIH1cblxuICAgIGxldCByZXNvbHZlUHJvbWlzZTtcblxuICAgIHRoaXMucHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIHByb21pc2VFeGVjdXRvcihyZXNvbHZlKSB7XG4gICAgICByZXNvbHZlUHJvbWlzZSA9IHJlc29sdmU7XG4gICAgfSk7XG5cbiAgICBjb25zdCB0b2tlbiA9IHRoaXM7XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICAgIHRoaXMucHJvbWlzZS50aGVuKGNhbmNlbCA9PiB7XG4gICAgICBpZiAoIXRva2VuLl9saXN0ZW5lcnMpIHJldHVybjtcblxuICAgICAgbGV0IGkgPSB0b2tlbi5fbGlzdGVuZXJzLmxlbmd0aDtcblxuICAgICAgd2hpbGUgKGktLSA+IDApIHtcbiAgICAgICAgdG9rZW4uX2xpc3RlbmVyc1tpXShjYW5jZWwpO1xuICAgICAgfVxuICAgICAgdG9rZW4uX2xpc3RlbmVycyA9IG51bGw7XG4gICAgfSk7XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICAgIHRoaXMucHJvbWlzZS50aGVuID0gb25mdWxmaWxsZWQgPT4ge1xuICAgICAgbGV0IF9yZXNvbHZlO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgICAgIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgdG9rZW4uc3Vic2NyaWJlKHJlc29sdmUpO1xuICAgICAgICBfcmVzb2x2ZSA9IHJlc29sdmU7XG4gICAgICB9KS50aGVuKG9uZnVsZmlsbGVkKTtcblxuICAgICAgcHJvbWlzZS5jYW5jZWwgPSBmdW5jdGlvbiByZWplY3QoKSB7XG4gICAgICAgIHRva2VuLnVuc3Vic2NyaWJlKF9yZXNvbHZlKTtcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBwcm9taXNlO1xuICAgIH07XG5cbiAgICBleGVjdXRvcihmdW5jdGlvbiBjYW5jZWwobWVzc2FnZSwgY29uZmlnLCByZXF1ZXN0KSB7XG4gICAgICBpZiAodG9rZW4ucmVhc29uKSB7XG4gICAgICAgIC8vIENhbmNlbGxhdGlvbiBoYXMgYWxyZWFkeSBiZWVuIHJlcXVlc3RlZFxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRva2VuLnJlYXNvbiA9IG5ldyBDYW5jZWxlZEVycm9yKG1lc3NhZ2UsIGNvbmZpZywgcmVxdWVzdCk7XG4gICAgICByZXNvbHZlUHJvbWlzZSh0b2tlbi5yZWFzb24pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRocm93cyBhIGBDYW5jZWxlZEVycm9yYCBpZiBjYW5jZWxsYXRpb24gaGFzIGJlZW4gcmVxdWVzdGVkLlxuICAgKi9cbiAgdGhyb3dJZlJlcXVlc3RlZCgpIHtcbiAgICBpZiAodGhpcy5yZWFzb24pIHtcbiAgICAgIHRocm93IHRoaXMucmVhc29uO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTdWJzY3JpYmUgdG8gdGhlIGNhbmNlbCBzaWduYWxcbiAgICovXG5cbiAgc3Vic2NyaWJlKGxpc3RlbmVyKSB7XG4gICAgaWYgKHRoaXMucmVhc29uKSB7XG4gICAgICBsaXN0ZW5lcih0aGlzLnJlYXNvbik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2xpc3RlbmVycykge1xuICAgICAgdGhpcy5fbGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9saXN0ZW5lcnMgPSBbbGlzdGVuZXJdO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVbnN1YnNjcmliZSBmcm9tIHRoZSBjYW5jZWwgc2lnbmFsXG4gICAqL1xuXG4gIHVuc3Vic2NyaWJlKGxpc3RlbmVyKSB7XG4gICAgaWYgKCF0aGlzLl9saXN0ZW5lcnMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLl9saXN0ZW5lcnMuaW5kZXhPZihsaXN0ZW5lcik7XG4gICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgdGhpcy5fbGlzdGVuZXJzLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gb2JqZWN0IHRoYXQgY29udGFpbnMgYSBuZXcgYENhbmNlbFRva2VuYCBhbmQgYSBmdW5jdGlvbiB0aGF0LCB3aGVuIGNhbGxlZCxcbiAgICogY2FuY2VscyB0aGUgYENhbmNlbFRva2VuYC5cbiAgICovXG4gIHN0YXRpYyBzb3VyY2UoKSB7XG4gICAgbGV0IGNhbmNlbDtcbiAgICBjb25zdCB0b2tlbiA9IG5ldyBDYW5jZWxUb2tlbihmdW5jdGlvbiBleGVjdXRvcihjKSB7XG4gICAgICBjYW5jZWwgPSBjO1xuICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICB0b2tlbixcbiAgICAgIGNhbmNlbFxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ2FuY2VsVG9rZW47XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogU3ludGFjdGljIHN1Z2FyIGZvciBpbnZva2luZyBhIGZ1bmN0aW9uIGFuZCBleHBhbmRpbmcgYW4gYXJyYXkgZm9yIGFyZ3VtZW50cy5cbiAqXG4gKiBDb21tb24gdXNlIGNhc2Ugd291bGQgYmUgdG8gdXNlIGBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHlgLlxuICpcbiAqICBgYGBqc1xuICogIGZ1bmN0aW9uIGYoeCwgeSwgeikge31cbiAqICB2YXIgYXJncyA9IFsxLCAyLCAzXTtcbiAqICBmLmFwcGx5KG51bGwsIGFyZ3MpO1xuICogIGBgYFxuICpcbiAqIFdpdGggYHNwcmVhZGAgdGhpcyBleGFtcGxlIGNhbiBiZSByZS13cml0dGVuLlxuICpcbiAqICBgYGBqc1xuICogIHNwcmVhZChmdW5jdGlvbih4LCB5LCB6KSB7fSkoWzEsIDIsIDNdKTtcbiAqICBgYGBcbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICpcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc3ByZWFkKGNhbGxiYWNrKSB7XG4gIHJldHVybiBmdW5jdGlvbiB3cmFwKGFycikge1xuICAgIHJldHVybiBjYWxsYmFjay5hcHBseShudWxsLCBhcnIpO1xuICB9O1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi8uLi91dGlscy5qcyc7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBwYXlsb2FkIGlzIGFuIGVycm9yIHRocm93biBieSBBeGlvc1xuICpcbiAqIEBwYXJhbSB7Kn0gcGF5bG9hZCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBwYXlsb2FkIGlzIGFuIGVycm9yIHRocm93biBieSBBeGlvcywgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzQXhpb3NFcnJvcihwYXlsb2FkKSB7XG4gIHJldHVybiB1dGlscy5pc09iamVjdChwYXlsb2FkKSAmJiAocGF5bG9hZC5pc0F4aW9zRXJyb3IgPT09IHRydWUpO1xufVxuIiwiY29uc3QgSHR0cFN0YXR1c0NvZGUgPSB7XG4gIENvbnRpbnVlOiAxMDAsXG4gIFN3aXRjaGluZ1Byb3RvY29sczogMTAxLFxuICBQcm9jZXNzaW5nOiAxMDIsXG4gIEVhcmx5SGludHM6IDEwMyxcbiAgT2s6IDIwMCxcbiAgQ3JlYXRlZDogMjAxLFxuICBBY2NlcHRlZDogMjAyLFxuICBOb25BdXRob3JpdGF0aXZlSW5mb3JtYXRpb246IDIwMyxcbiAgTm9Db250ZW50OiAyMDQsXG4gIFJlc2V0Q29udGVudDogMjA1LFxuICBQYXJ0aWFsQ29udGVudDogMjA2LFxuICBNdWx0aVN0YXR1czogMjA3LFxuICBBbHJlYWR5UmVwb3J0ZWQ6IDIwOCxcbiAgSW1Vc2VkOiAyMjYsXG4gIE11bHRpcGxlQ2hvaWNlczogMzAwLFxuICBNb3ZlZFBlcm1hbmVudGx5OiAzMDEsXG4gIEZvdW5kOiAzMDIsXG4gIFNlZU90aGVyOiAzMDMsXG4gIE5vdE1vZGlmaWVkOiAzMDQsXG4gIFVzZVByb3h5OiAzMDUsXG4gIFVudXNlZDogMzA2LFxuICBUZW1wb3JhcnlSZWRpcmVjdDogMzA3LFxuICBQZXJtYW5lbnRSZWRpcmVjdDogMzA4LFxuICBCYWRSZXF1ZXN0OiA0MDAsXG4gIFVuYXV0aG9yaXplZDogNDAxLFxuICBQYXltZW50UmVxdWlyZWQ6IDQwMixcbiAgRm9yYmlkZGVuOiA0MDMsXG4gIE5vdEZvdW5kOiA0MDQsXG4gIE1ldGhvZE5vdEFsbG93ZWQ6IDQwNSxcbiAgTm90QWNjZXB0YWJsZTogNDA2LFxuICBQcm94eUF1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6IDQwNyxcbiAgUmVxdWVzdFRpbWVvdXQ6IDQwOCxcbiAgQ29uZmxpY3Q6IDQwOSxcbiAgR29uZTogNDEwLFxuICBMZW5ndGhSZXF1aXJlZDogNDExLFxuICBQcmVjb25kaXRpb25GYWlsZWQ6IDQxMixcbiAgUGF5bG9hZFRvb0xhcmdlOiA0MTMsXG4gIFVyaVRvb0xvbmc6IDQxNCxcbiAgVW5zdXBwb3J0ZWRNZWRpYVR5cGU6IDQxNSxcbiAgUmFuZ2VOb3RTYXRpc2ZpYWJsZTogNDE2LFxuICBFeHBlY3RhdGlvbkZhaWxlZDogNDE3LFxuICBJbUFUZWFwb3Q6IDQxOCxcbiAgTWlzZGlyZWN0ZWRSZXF1ZXN0OiA0MjEsXG4gIFVucHJvY2Vzc2FibGVFbnRpdHk6IDQyMixcbiAgTG9ja2VkOiA0MjMsXG4gIEZhaWxlZERlcGVuZGVuY3k6IDQyNCxcbiAgVG9vRWFybHk6IDQyNSxcbiAgVXBncmFkZVJlcXVpcmVkOiA0MjYsXG4gIFByZWNvbmRpdGlvblJlcXVpcmVkOiA0MjgsXG4gIFRvb01hbnlSZXF1ZXN0czogNDI5LFxuICBSZXF1ZXN0SGVhZGVyRmllbGRzVG9vTGFyZ2U6IDQzMSxcbiAgVW5hdmFpbGFibGVGb3JMZWdhbFJlYXNvbnM6IDQ1MSxcbiAgSW50ZXJuYWxTZXJ2ZXJFcnJvcjogNTAwLFxuICBOb3RJbXBsZW1lbnRlZDogNTAxLFxuICBCYWRHYXRld2F5OiA1MDIsXG4gIFNlcnZpY2VVbmF2YWlsYWJsZTogNTAzLFxuICBHYXRld2F5VGltZW91dDogNTA0LFxuICBIdHRwVmVyc2lvbk5vdFN1cHBvcnRlZDogNTA1LFxuICBWYXJpYW50QWxzb05lZ290aWF0ZXM6IDUwNixcbiAgSW5zdWZmaWNpZW50U3RvcmFnZTogNTA3LFxuICBMb29wRGV0ZWN0ZWQ6IDUwOCxcbiAgTm90RXh0ZW5kZWQ6IDUxMCxcbiAgTmV0d29ya0F1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6IDUxMSxcbn07XG5cbk9iamVjdC5lbnRyaWVzKEh0dHBTdGF0dXNDb2RlKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgSHR0cFN0YXR1c0NvZGVbdmFsdWVdID0ga2V5O1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IEh0dHBTdGF0dXNDb2RlO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi91dGlscy5qcyc7XG5pbXBvcnQgYmluZCBmcm9tICcuL2hlbHBlcnMvYmluZC5qcyc7XG5pbXBvcnQgQXhpb3MgZnJvbSAnLi9jb3JlL0F4aW9zLmpzJztcbmltcG9ydCBtZXJnZUNvbmZpZyBmcm9tICcuL2NvcmUvbWVyZ2VDb25maWcuanMnO1xuaW1wb3J0IGRlZmF1bHRzIGZyb20gJy4vZGVmYXVsdHMvaW5kZXguanMnO1xuaW1wb3J0IGZvcm1EYXRhVG9KU09OIGZyb20gJy4vaGVscGVycy9mb3JtRGF0YVRvSlNPTi5qcyc7XG5pbXBvcnQgQ2FuY2VsZWRFcnJvciBmcm9tICcuL2NhbmNlbC9DYW5jZWxlZEVycm9yLmpzJztcbmltcG9ydCBDYW5jZWxUb2tlbiBmcm9tICcuL2NhbmNlbC9DYW5jZWxUb2tlbi5qcyc7XG5pbXBvcnQgaXNDYW5jZWwgZnJvbSAnLi9jYW5jZWwvaXNDYW5jZWwuanMnO1xuaW1wb3J0IHtWRVJTSU9OfSBmcm9tICcuL2Vudi9kYXRhLmpzJztcbmltcG9ydCB0b0Zvcm1EYXRhIGZyb20gJy4vaGVscGVycy90b0Zvcm1EYXRhLmpzJztcbmltcG9ydCBBeGlvc0Vycm9yIGZyb20gJy4vY29yZS9BeGlvc0Vycm9yLmpzJztcbmltcG9ydCBzcHJlYWQgZnJvbSAnLi9oZWxwZXJzL3NwcmVhZC5qcyc7XG5pbXBvcnQgaXNBeGlvc0Vycm9yIGZyb20gJy4vaGVscGVycy9pc0F4aW9zRXJyb3IuanMnO1xuaW1wb3J0IEF4aW9zSGVhZGVycyBmcm9tIFwiLi9jb3JlL0F4aW9zSGVhZGVycy5qc1wiO1xuaW1wb3J0IGFkYXB0ZXJzIGZyb20gJy4vYWRhcHRlcnMvYWRhcHRlcnMuanMnO1xuaW1wb3J0IEh0dHBTdGF0dXNDb2RlIGZyb20gJy4vaGVscGVycy9IdHRwU3RhdHVzQ29kZS5qcyc7XG5cbi8qKlxuICogQ3JlYXRlIGFuIGluc3RhbmNlIG9mIEF4aW9zXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGRlZmF1bHRDb25maWcgVGhlIGRlZmF1bHQgY29uZmlnIGZvciB0aGUgaW5zdGFuY2VcbiAqXG4gKiBAcmV0dXJucyB7QXhpb3N9IEEgbmV3IGluc3RhbmNlIG9mIEF4aW9zXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUluc3RhbmNlKGRlZmF1bHRDb25maWcpIHtcbiAgY29uc3QgY29udGV4dCA9IG5ldyBBeGlvcyhkZWZhdWx0Q29uZmlnKTtcbiAgY29uc3QgaW5zdGFuY2UgPSBiaW5kKEF4aW9zLnByb3RvdHlwZS5yZXF1ZXN0LCBjb250ZXh0KTtcblxuICAvLyBDb3B5IGF4aW9zLnByb3RvdHlwZSB0byBpbnN0YW5jZVxuICB1dGlscy5leHRlbmQoaW5zdGFuY2UsIEF4aW9zLnByb3RvdHlwZSwgY29udGV4dCwge2FsbE93bktleXM6IHRydWV9KTtcblxuICAvLyBDb3B5IGNvbnRleHQgdG8gaW5zdGFuY2VcbiAgdXRpbHMuZXh0ZW5kKGluc3RhbmNlLCBjb250ZXh0LCBudWxsLCB7YWxsT3duS2V5czogdHJ1ZX0pO1xuXG4gIC8vIEZhY3RvcnkgZm9yIGNyZWF0aW5nIG5ldyBpbnN0YW5jZXNcbiAgaW5zdGFuY2UuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKGluc3RhbmNlQ29uZmlnKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUluc3RhbmNlKG1lcmdlQ29uZmlnKGRlZmF1bHRDb25maWcsIGluc3RhbmNlQ29uZmlnKSk7XG4gIH07XG5cbiAgcmV0dXJuIGluc3RhbmNlO1xufVxuXG4vLyBDcmVhdGUgdGhlIGRlZmF1bHQgaW5zdGFuY2UgdG8gYmUgZXhwb3J0ZWRcbmNvbnN0IGF4aW9zID0gY3JlYXRlSW5zdGFuY2UoZGVmYXVsdHMpO1xuXG4vLyBFeHBvc2UgQXhpb3MgY2xhc3MgdG8gYWxsb3cgY2xhc3MgaW5oZXJpdGFuY2VcbmF4aW9zLkF4aW9zID0gQXhpb3M7XG5cbi8vIEV4cG9zZSBDYW5jZWwgJiBDYW5jZWxUb2tlblxuYXhpb3MuQ2FuY2VsZWRFcnJvciA9IENhbmNlbGVkRXJyb3I7XG5heGlvcy5DYW5jZWxUb2tlbiA9IENhbmNlbFRva2VuO1xuYXhpb3MuaXNDYW5jZWwgPSBpc0NhbmNlbDtcbmF4aW9zLlZFUlNJT04gPSBWRVJTSU9OO1xuYXhpb3MudG9Gb3JtRGF0YSA9IHRvRm9ybURhdGE7XG5cbi8vIEV4cG9zZSBBeGlvc0Vycm9yIGNsYXNzXG5heGlvcy5BeGlvc0Vycm9yID0gQXhpb3NFcnJvcjtcblxuLy8gYWxpYXMgZm9yIENhbmNlbGVkRXJyb3IgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHlcbmF4aW9zLkNhbmNlbCA9IGF4aW9zLkNhbmNlbGVkRXJyb3I7XG5cbi8vIEV4cG9zZSBhbGwvc3ByZWFkXG5heGlvcy5hbGwgPSBmdW5jdGlvbiBhbGwocHJvbWlzZXMpIHtcbiAgcmV0dXJuIFByb21pc2UuYWxsKHByb21pc2VzKTtcbn07XG5cbmF4aW9zLnNwcmVhZCA9IHNwcmVhZDtcblxuLy8gRXhwb3NlIGlzQXhpb3NFcnJvclxuYXhpb3MuaXNBeGlvc0Vycm9yID0gaXNBeGlvc0Vycm9yO1xuXG4vLyBFeHBvc2UgbWVyZ2VDb25maWdcbmF4aW9zLm1lcmdlQ29uZmlnID0gbWVyZ2VDb25maWc7XG5cbmF4aW9zLkF4aW9zSGVhZGVycyA9IEF4aW9zSGVhZGVycztcblxuYXhpb3MuZm9ybVRvSlNPTiA9IHRoaW5nID0+IGZvcm1EYXRhVG9KU09OKHV0aWxzLmlzSFRNTEZvcm0odGhpbmcpID8gbmV3IEZvcm1EYXRhKHRoaW5nKSA6IHRoaW5nKTtcblxuYXhpb3MuZ2V0QWRhcHRlciA9IGFkYXB0ZXJzLmdldEFkYXB0ZXI7XG5cbmF4aW9zLkh0dHBTdGF0dXNDb2RlID0gSHR0cFN0YXR1c0NvZGU7XG5cbmF4aW9zLmRlZmF1bHQgPSBheGlvcztcblxuLy8gdGhpcyBtb2R1bGUgc2hvdWxkIG9ubHkgaGF2ZSBhIGRlZmF1bHQgZXhwb3J0XG5leHBvcnQgZGVmYXVsdCBheGlvc1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbmltcG9ydCBheGlvcyBmcm9tIFwiYXhpb3NcIjtcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSHR0cHtcclxuICAgICNheGlvcztcclxuICAgICNyZXF1ZXN0Q291bnQgPSAwOyAvLyDor7fmsYLmrKHmlbBcclxuICAgICNlcnJvclRpcHNDb3VudCA9IDA7XHJcbiAgICAjbG9hZGluZ0luc3RhbmNlID0gbnVsbDtcclxuICAgICNjb25maWcgPSB7XHJcbiAgICAgICAgYmFzZVVSTDogJycsXHJcbiAgICAgICAgdGltZW91dDogNjAgKiAxMDAwLFxyXG4gICAgICAgIHdpdGhDcmVkZW50aWFsczogZmFsc2UsXHJcbiAgICAgICAgc3VjY2Vzc0NvZGU6IDIwMCxcclxuICAgICAgICBlcnJvckNvZGU6IDUwMFxyXG4gICAgfVxyXG4gICAgY29uc3RydWN0b3Iob3B0aW9ucyl7XHJcbiAgICAgICAgZm9yKGNvbnN0IGsgaW4gdGhpcy4jY29uZmlnKXtcclxuICAgICAgICAgICAgaWYob3B0aW9uc1trXSl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLiNjb25maWdba10gPSBvcHRpb25zW2tdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGF4aW9zLmRlZmF1bHRzLmhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gJ2FwcGxpY2F0aW9uL2pzb247Y2hhcnNldD1VVEYtOCc7XHJcbiAgICAgICAgYXhpb3MuZGVmYXVsdHMuaGVhZGVyc1snQWNjZXB0J10gPSAnYXBwbGljYXRpb24vanNvbic7XHJcbiAgICAgICAgdGhpcy4jYXhpb3MgPSBheGlvcy5jcmVhdGUodGhpcy4jY29uZmlnKTtcclxuXHJcbiAgICAgICAgdGhpcy4jYXhpb3MuaW50ZXJjZXB0b3JzLnJlcXVlc3QudXNlKFxyXG4gICAgICAgICAgICBjb25maWc9PntcclxuICAgICAgICAgICAgICAgIGlmKCFjb25maWcucGFyYW1zKXtcclxuICAgICAgICAgICAgICAgICAgICBjb25maWcucGFyYW1zID0ge307XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLiNyZXF1ZXN0Q291bnQgPT0gMCl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jbG9hZGluZ0luc3RhbmNlID0gbG9hZGluZygpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy4jcmVxdWVzdENvdW50Kys7XHJcbiAgICAgICAgICAgICAgICBjb25maWcuaGVhZGVycy5hdXRob3JpemF0aW9uID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3Rva2VuJyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY29uZmlnO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnJvcj0+e1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy4jYXhpb3MuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLnVzZShcclxuICAgICAgICAgICAgcmVzcG9uc2U9PntcclxuICAgICAgICAgICAgICAgIHRoaXMuI3JlcXVlc3RDb3VudC0tO1xyXG4gICAgICAgICAgICAgICAgaWYodGhpcy4jcmVxdWVzdENvdW50ID09PSAwKXtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLiNlcnJvclRpcHNDb3VudCA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jbG9hZGluZ0luc3RhbmNlLmNsb3NlKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyb3I9PntcclxuICAgICAgICAgICAgICAgIHRoaXMuI3JlcXVlc3RDb3VudC0tO1xyXG4gICAgICAgICAgICAgICAgaWYodGhpcy4jcmVxdWVzdENvdW50ID09PSAwKXtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLiNsb2FkaW5nSW5zdGFuY2UuY2xvc2UoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIF9oYW5kbGVSZXN1bHQoc3VjY2VzcyxlcnIscmVzKXtcclxuICAgICAgICBpZighcmVzKXtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZihyZXMuY29kZSA9PT0gdGhpcy4jY29uZmlnLnN1Y2Nlc3NDb2RlKXtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBzdWNjZXNzID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICBzdWNjZXNzKHJlcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9ZWxzZSB7XHJcbiAgICAgICAgICAgIGlmKHRoaXMuI2Vycm9yVGlwc0NvdW50PT09MCl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLiNlcnJvclRpcHNDb3VudCsrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKHJlcy5jb2RlID09PSA0MDEpe1xyXG4gICAgICAgICAgICAgICAgc2Vzc2lvblN0b3JhZ2UuY2xlYXIoKTtcclxuICAgICAgICAgICAgfWVsc2UgaWYocmVzLmNvZGUgPT09IHRoaXMuI2NvbmZpZy5lcnJvckNvZGUpe1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBlcnIgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgICAgICBlcnIocmVzKTtcclxuICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgIGVycm9yKHJlcy5tc2cpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZXJyID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZXJyKHJlcyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcG9zdCh1cmwscGFyYW1zLHN1Y2Nlc3MsZXJyKXtcclxuICAgICAgICB0aGlzLiNheGlvcy5wb3N0KHVybCxwYXJhbXMpLnRoZW4ocmVzPT57XHJcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZVJlc3VsdChzdWNjZXNzLGVycixyZXMpO1xyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlKHVybCxwYXJhbXMsc3VjY2VzcyxlcnIpe1xyXG4gICAgICAgIHRoaXMuI2F4aW9zLnVwZGF0ZSh1cmwscGFyYW1zKS50aGVuKHJlcz0+e1xyXG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVSZXN1bHQoc3VjY2VzcyxlcnIscmVzKTtcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIGdldCh1cmwsIHBhcmFtcywgc3VjY2VzcywgZXJyKXtcclxuICAgICAgICB0aGlzLiNheGlvcy5nZXQodXJsLCB7IHBhcmFtczogcGFyYW1zfSkudGhlbihyZXMgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVSZXN1bHQoc3VjY2VzcyxlcnIscmVzKTtcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIGRlbGV0ZSh1cmwsIHBhcmFtcywgc3VjY2VzcywgZXJyKXtcclxuXHRcdHRoaXMuI2F4aW9zLmRlbGV0ZSh1cmwsIHsgcGFyYW1zOiBwYXJhbXN9KS50aGVuKHJlcyA9PiB7XHJcblx0XHRcdHRoaXMuX2hhbmRsZVJlc3VsdChzdWNjZXNzLGVycixyZXMpO1xyXG5cdFx0fSlcclxuXHR9XHJcblxyXG4gICAgZG93bkxvYWQodXJsLCBwYXJhbXM9e30pe1xyXG4gICAgICAgIHRoaXMuI2F4aW9zLnBvc3QodXJsLCBwYXJhbXMsIHsncmVzcG9uc2VUeXBlJzogJ2Jsb2InfSkudGhlbihyZXM9PntcclxuXHRcdFx0aWYocmVzKXtcclxuXHRcdFx0XHRsZXQgZmlsZU5hbWUgPSBwYXJhbXMuZmlsZU5hbWU7XHJcblx0XHRcdFx0aWYoIWZpbGVOYW1lKXtcclxuXHRcdFx0XHRcdGZpbGVOYW1lID0gcmVzLmhlYWRlcnNbJ2NvbnRlbnQtZGlzcG9zaXRpb24nXS5zcGxpdCgnZmlsZW5hbWU9JylbMV0ucmVwbGFjZSgvXCIvZywgJycpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRjb25zdCBibG9iID0gbmV3IEJsb2IoW3Jlcy5kYXRhXSwge3R5cGU6ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW07Y2hhcnNldD1VVEYtOCd9KTtcclxuXHRcdFx0XHRjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xyXG5cdFx0XHRcdGxpbmsuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuXHRcdFx0XHRsaW5rLmhyZWYgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcclxuXHRcdFx0XHRsaW5rLmRvd25sb2FkID0gZGVjb2RlVVJJQ29tcG9uZW50KGZpbGVOYW1lKTtcclxuXHRcdFx0XHRsaW5rLmNsaWNrKCk7XHJcblx0XHRcdFx0d2luZG93LlVSTC5yZXZva2VPYmplY3RVUkwobGluay5ocmVmKTtcclxuXHRcdFx0fVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59IiwicmVxdWlyZSgnLi9tZXNzYWdlL2luZGV4LmpzJyk7XHJcbmltcG9ydCBQYWdpbmF0aW9uIGZyb20gJy4vcGFnaW5hdGlvbi9JbmRleC52dWUnO1xyXG5pbXBvcnQgUGFnZVRhYmxlIGZyb20gJy4vcGFnZS10YWJsZS9JbmRleC52dWUnO1xyXG5pbXBvcnQgRGlhbG9nIGZyb20gJy4vZGlhbG9nL0luZGV4LnZ1ZSc7XHJcbmltcG9ydCBDYXJkIGZyb20gJy4vY2FyZC9JbmRleC52dWUnO1xyXG5pbXBvcnQgVHJlZSBmcm9tICcuL3RyZWUvSW5kZXgudnVlJztcclxuaW1wb3J0IF9IdHRwIGZyb20gJy4vaHR0cC9pbmRleC5qcyc7XHJcbmNvbnN0IGNvbXMgPSBbUGFnaW5hdGlvbiwgUGFnZVRhYmxlLCBEaWFsb2csIENhcmQsIFRyZWVdO1xyXG5jb25zdCBpbnN0YWxsID0gZnVuY3Rpb24oVnVlKXtcclxuICAgIGNvbXMuZm9yRWFjaChjb20gPT4ge1xyXG4gICAgICAgIFZ1ZS5jb21wb25lbnQoY29tLm5hbWUsIGNvbSk7XHJcbiAgICB9KVxyXG59XHJcblxyXG4vLyDlr7zlh7rnu4Tku7ZcclxuZXhwb3J0IGRlZmF1bHQgaW5zdGFsbDtcclxuXHJcbmV4cG9ydCBjbGFzcyBIdHRwIGV4dGVuZHMgX0h0dHB7XHJcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKXtcclxuICAgICAgICBzdXBlcihvcHRpb25zKTtcclxuICAgIH1cclxufSIsImltcG9ydCAnLi9zZXRQdWJsaWNQYXRoJ1xuaW1wb3J0IG1vZCBmcm9tICd+ZW50cnknXG5leHBvcnQgZGVmYXVsdCBtb2RcbmV4cG9ydCAqIGZyb20gJ35lbnRyeSdcbiJdLCJuYW1lcyI6WyJyZW5kZXIiLCJfdm0iLCJfYyIsIl9zZWxmIiwidG90YWwiLCJfYiIsImF0dHJzIiwiY3VycmVudFBhZ2UiLCJwYWdlU2l6ZSIsInBhZ2VTaXplcyIsIm9uIiwiaGFuZGxlU2l6ZUNoYW5nZSIsImhhbmRsZUN1cnJlbnRDaGFuZ2UiLCIkYXR0cnMiLCJfZSIsInN0YXRpY1JlbmRlckZucyIsIm5hbWUiLCJwcm9wcyIsInJlcXVpcmVkIiwidHlwZSIsIk51bWJlciIsImRlZmF1bHQiLCJwYWdlIiwibGltaXQiLCJBcnJheSIsImNvbXB1dGVkIiwiZ2V0Iiwic2V0IiwidmFsIiwiJGVtaXQiLCJ0b3RhbENvdW50IiwibWV0aG9kcyIsInN0YXRpY0NsYXNzIiwidGFibGVJZCIsInN0YXRpY1N0eWxlIiwicmVmIiwibGlzdCIsInJvd0tleSIsImxvYWQiLCJobGlnaHRDdXJyZW50Um93IiwiZGVmYXVsdEV4cGFuZEFsbCIsImhhbmRlbFNlbGVjdGlvbkNoYW5nZSIsInNlbGVjdEFsbCIsImhhbmRsZVJvd0NsaWNrIiwic2hvd0NoZWNrQm94Iiwic29ydE51bSIsInNjb3BlZFNsb3RzIiwiX3UiLCJrZXkiLCJmbiIsInNjb3BlIiwiX3YiLCJfcyIsInBhcmFtcyIsIiRpbmRleCIsIl90IiwidXBkYXRlOnBhZ2UiLCIkZXZlbnQiLCIkc2V0IiwiZ2V0TGlzdCIsImRhdGEiLCJ1cmwiLCJTdHJpbmciLCJtZXRob2QiLCJCb29sZWFuIiwiZGVmYXVsdFBhcmFtcyIsIk9iamVjdCIsImRlZmF1bHRTZWxlY3QiLCJ5cGUiLCJ3YXRjaCIsIm5ld1ZhbCIsImhhbmRsZXIiLCJzZXRDaGVja2VkIiwiZGVlcCIsIm9sZFZhbCIsInBhcmFtIiwiTWF0aCIsInJhbmRvbSIsInRvU3RyaW5nIiwic3Vic3RyaW5nIiwic2VsZWN0RGF0YSIsInNlbGVjdElkcyIsIm1vdW50ZWQiLCIkbGlzdGVuZXJzIiwiaXRlbSIsInBhZ2VPcHRpb24iLCJzdG9yYWdlUGFyYW1zIiwic2Vzc2lvblN0b3JhZ2UiLCJnZXRJdGVtIiwiJHJvdXRlIiwicGF0aCIsInNldEl0ZW0iLCJKU09OIiwic3RyaW5naWZ5IiwiaHR0cCIsInJlcyIsIl9zZXREYXRhIiwicG9zdCIsInJlY29yZHMiLCJsZW5ndGgiLCJtYXAiLCIkbmV4dFRpY2siLCIkcmVmcyIsImluY2x1ZGVzIiwidG9nZ2xlUm93U2VsZWN0aW9uIiwicXVlcnkiLCJrZXlzIiwicm93IiwiY29sdW1uIiwiZXZlbnQiLCJfIiwic2VsZWN0aW9uTGlzdCIsInZhbHVlcyIsInNlbGVjdGlvbiIsInNldEN1cnJlbnQiLCJpbmRleCIsInNldEN1cnJlbnRSb3ciLCJnZXREYXRhIiwidHJlZSIsInRyZWVOb2RlIiwicmVzb2x2ZSIsImRpcmVjdGl2ZXMiLCJyYXdOYW1lIiwidGl0bGUiLCJkaWFsb2dWaXNpYmxlIiwiaGFuZGxlQ2xvc2UiLCJzaG93Q2xvc2UiLCJzdHlsZSIsIm1heEhlaWdodCIsIm1pbkhlaWdodCIsInNsb3QiLCJWdWUiLCJkaXJlY3RpdmUiLCJiaW5kIiwiZWwiLCJkaWFsb2dIZWFkZXJFbCIsInF1ZXJ5U2VsZWN0b3IiLCJkcmFnRG9tIiwiY3Vyc29yIiwic3R5IiwiY3VycmVudFN0eWxlIiwid2luZG93IiwiZ2V0Q29tcHV0ZWRTdHlsZSIsIm9ubW91c2Vkb3duIiwiZGlzWCIsImNsaWVudFgiLCJvZmZzZXRMZWZ0IiwiZGlzWSIsImNsaWVudFkiLCJvZmZzZXRUb3AiLCJzdHlMIiwic3R5VCIsImxlZnQiLCJkb2N1bWVudCIsImJvZHkiLCJjbGllbnRXaWR0aCIsInJlcGxhY2UiLCJjbGllbnRIZWlnaHQiLCJ0b3AiLCJvbm1vdXNlbW92ZSIsImUiLCJsIiwidCIsIm9ubW91c2V1cCIsImFyaWFFbHMiLCJxdWVyeVNlbGVjdG9yQWxsIiwiZm9yRWFjaCIsInJlbW92ZUF0dHJpYnV0ZSIsInNoYWRvdyIsIiRzbG90cyIsInNob3ciLCJfbCIsImlkIiwib25FeHBhbmQiLCJvbkNoZWNrZWQiLCJoYXNDaGlsZHJlbiIsImlzQXJyYXkiLCJjaGlsZHJlbiIsInJlbmRlckxhYmVsIiwiaCIsImNvbnRleHQiLCJsaXN0ZW5lcnMiLCJjbGlja0hhbmRsZXIiLCJjaGVja2VkSGFuZGxlciIsImxhYmVsIiwiY2hpbGROb2RlcyIsInB1c2giLCJpY29DbGFzcyIsImV4cGFuZCIsImRvbVByb3BzIiwiY2xhc3NOYW1lIiwiam9pbiIsIm1hcmdpbkxlZnQiLCJfbGV2ZSIsImZvbnRTaXplIiwidHJhbnNmb3JtIiwiY29sb3IiLCJjbGljayIsImNoZWNrZWQiLCJyZW5kZXJDaGlsZHJlbiIsInJlbmRlck5vZGUiLCJjbHMiLCJjb21wb25lbnRzIiwiQXV0aFRyZWUiLCJmdW5jdGlvbmFsIiwiaW5pdCIsImxldmUiLCJpIiwicmVmcmVzaCIsInRvb2xlckNoZWNrZWQiLCJzZXRQYXJlbnRDaGVja2VkIiwibm9kZSIsInNldENoaWxkQ2hlY2tlZCIsImNoaWxkSXNDaGVja2VkIiwic2V0RGVmYXVsdENoZWNrZWQiLCJkZWZhdWx0SWRzIiwiZ2V0Q2hlY2tlZEtleXMiLCJfZ2V0Q2hlY2tlZEtleXMiLCJnZXRDaGVja2VkTm9kZXMiLCJub2RlcyIsIl9nZXRDaGVja2VkTm9kZXMiLCJpbW1lZGlhdGUiLCJfY2hlY2tQcml2YXRlUmVkZWNsYXJhdGlvbiIsIm9iaiIsInByaXZhdGVDb2xsZWN0aW9uIiwiaGFzIiwiVHlwZUVycm9yIiwiY2hlY2tQcml2YXRlUmVkZWNsYXJhdGlvbiIsIl9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjIiwicHJpdmF0ZU1hcCIsInZhbHVlIiwiX2Fzc2VydENsYXNzQnJhbmQiLCJuIiwiYXJndW1lbnRzIiwiYXNzZXJ0Q2xhc3NCcmFuZCIsIl9jbGFzc1ByaXZhdGVGaWVsZFNldDIiLCJzIiwiYSIsInIiLCJfY2xhc3NQcml2YXRlRmllbGRHZXQyIiwidGhpc0FyZyIsIndyYXAiLCJhcHBseSIsInByb3RvdHlwZSIsImdldFByb3RvdHlwZU9mIiwia2luZE9mIiwiY2FjaGUiLCJ0aGluZyIsInN0ciIsImNhbGwiLCJzbGljZSIsInRvTG93ZXJDYXNlIiwiY3JlYXRlIiwia2luZE9mVGVzdCIsInR5cGVPZlRlc3QiLCJpc1VuZGVmaW5lZCIsImlzQnVmZmVyIiwiY29uc3RydWN0b3IiLCJpc0Z1bmN0aW9uIiwiaXNBcnJheUJ1ZmZlciIsImlzQXJyYXlCdWZmZXJWaWV3IiwicmVzdWx0IiwiQXJyYXlCdWZmZXIiLCJpc1ZpZXciLCJidWZmZXIiLCJpc1N0cmluZyIsImlzTnVtYmVyIiwiaXNPYmplY3QiLCJpc0Jvb2xlYW4iLCJpc1BsYWluT2JqZWN0IiwiU3ltYm9sIiwidG9TdHJpbmdUYWciLCJpdGVyYXRvciIsImlzRGF0ZSIsImlzRmlsZSIsImlzQmxvYiIsImlzRmlsZUxpc3QiLCJpc1N0cmVhbSIsInBpcGUiLCJpc0Zvcm1EYXRhIiwia2luZCIsIkZvcm1EYXRhIiwiYXBwZW5kIiwiaXNVUkxTZWFyY2hQYXJhbXMiLCJ0cmltIiwiYWxsT3duS2V5cyIsImdldE93blByb3BlcnR5TmFtZXMiLCJsZW4iLCJmaW5kS2V5IiwiX2tleSIsIl9nbG9iYWwiLCJnbG9iYWxUaGlzIiwic2VsZiIsImdsb2JhbCIsImlzQ29udGV4dERlZmluZWQiLCJtZXJnZSIsImNhc2VsZXNzIiwiYXNzaWduVmFsdWUiLCJ0YXJnZXRLZXkiLCJleHRlbmQiLCJiIiwic3RyaXBCT00iLCJjb250ZW50IiwiY2hhckNvZGVBdCIsImluaGVyaXRzIiwic3VwZXJDb25zdHJ1Y3RvciIsImRlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydHkiLCJhc3NpZ24iLCJ0b0ZsYXRPYmplY3QiLCJzb3VyY2VPYmoiLCJkZXN0T2JqIiwiZmlsdGVyIiwicHJvcEZpbHRlciIsInByb3AiLCJtZXJnZWQiLCJlbmRzV2l0aCIsInNlYXJjaFN0cmluZyIsInBvc2l0aW9uIiwidW5kZWZpbmVkIiwibGFzdEluZGV4IiwiaW5kZXhPZiIsInRvQXJyYXkiLCJhcnIiLCJpc1R5cGVkQXJyYXkiLCJUeXBlZEFycmF5IiwiVWludDhBcnJheSIsImZvckVhY2hFbnRyeSIsImdlbmVyYXRvciIsIm5leHQiLCJkb25lIiwicGFpciIsIm1hdGNoQWxsIiwicmVnRXhwIiwibWF0Y2hlcyIsImV4ZWMiLCJpc0hUTUxGb3JtIiwidG9DYW1lbENhc2UiLCJyZXBsYWNlciIsIm0iLCJwMSIsInAyIiwidG9VcHBlckNhc2UiLCJoYXNPd25Qcm9wZXJ0eSIsImlzUmVnRXhwIiwicmVkdWNlRGVzY3JpcHRvcnMiLCJyZWR1Y2VyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsInJlZHVjZWREZXNjcmlwdG9ycyIsImRlc2NyaXB0b3IiLCJyZXQiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZnJlZXplTWV0aG9kcyIsImVudW1lcmFibGUiLCJ3cml0YWJsZSIsIkVycm9yIiwidG9PYmplY3RTZXQiLCJhcnJheU9yU3RyaW5nIiwiZGVsaW1pdGVyIiwiZGVmaW5lIiwic3BsaXQiLCJub29wIiwidG9GaW5pdGVOdW1iZXIiLCJkZWZhdWx0VmFsdWUiLCJpc0Zpbml0ZSIsIkFMUEhBIiwiRElHSVQiLCJBTFBIQUJFVCIsIkFMUEhBX0RJR0lUIiwiZ2VuZXJhdGVTdHJpbmciLCJzaXplIiwiYWxwaGFiZXQiLCJpc1NwZWNDb21wbGlhbnRGb3JtIiwidG9KU09OT2JqZWN0Iiwic3RhY2siLCJ2aXNpdCIsInNvdXJjZSIsInRhcmdldCIsInJlZHVjZWRWYWx1ZSIsImlzQXN5bmNGbiIsImlzVGhlbmFibGUiLCJ0aGVuIiwiY2F0Y2giLCJoYXNPd25Qcm9wIiwidXRpbHMiLCJBeGlvc0Vycm9yIiwibWVzc2FnZSIsImNvZGUiLCJjb25maWciLCJyZXF1ZXN0IiwicmVzcG9uc2UiLCJjYXB0dXJlU3RhY2tUcmFjZSIsInRvSlNPTiIsImRlc2NyaXB0aW9uIiwibnVtYmVyIiwiZmlsZU5hbWUiLCJsaW5lTnVtYmVyIiwiY29sdW1uTnVtYmVyIiwic3RhdHVzIiwiZnJvbSIsImVycm9yIiwiY3VzdG9tUHJvcHMiLCJheGlvc0Vycm9yIiwiY2F1c2UiLCJQbGF0Zm9ybUZvcm1EYXRhIiwiaXNWaXNpdGFibGUiLCJyZW1vdmVCcmFja2V0cyIsInJlbmRlcktleSIsImRvdHMiLCJjb25jYXQiLCJlYWNoIiwidG9rZW4iLCJpc0ZsYXRBcnJheSIsInNvbWUiLCJwcmVkaWNhdGVzIiwidGVzdCIsInRvRm9ybURhdGEiLCJmb3JtRGF0YSIsIm9wdGlvbnMiLCJtZXRhVG9rZW5zIiwiaW5kZXhlcyIsImRlZmluZWQiLCJvcHRpb24iLCJ2aXNpdG9yIiwiZGVmYXVsdFZpc2l0b3IiLCJfQmxvYiIsIkJsb2IiLCJ1c2VCbG9iIiwiY29udmVydFZhbHVlIiwidG9JU09TdHJpbmciLCJCdWZmZXIiLCJleHBvc2VkSGVscGVycyIsImJ1aWxkIiwicG9wIiwiZW5jb2RlIiwiY2hhck1hcCIsImVuY29kZVVSSUNvbXBvbmVudCIsIm1hdGNoIiwiQXhpb3NVUkxTZWFyY2hQYXJhbXMiLCJfcGFpcnMiLCJlbmNvZGVyIiwiX2VuY29kZSIsImJ1aWxkVVJMIiwic2VyaWFsaXplRm4iLCJzZXJpYWxpemUiLCJzZXJpYWxpemVkUGFyYW1zIiwiaGFzaG1hcmtJbmRleCIsIkludGVyY2VwdG9yTWFuYWdlciIsImhhbmRsZXJzIiwidXNlIiwiZnVsZmlsbGVkIiwicmVqZWN0ZWQiLCJzeW5jaHJvbm91cyIsInJ1bldoZW4iLCJlamVjdCIsImNsZWFyIiwiZm9yRWFjaEhhbmRsZXIiLCJzaWxlbnRKU09OUGFyc2luZyIsImZvcmNlZEpTT05QYXJzaW5nIiwiY2xhcmlmeVRpbWVvdXRFcnJvciIsIlVSTFNlYXJjaFBhcmFtcyIsImlzQnJvd3NlciIsImNsYXNzZXMiLCJwcm90b2NvbHMiLCJoYXNCcm93c2VyRW52IiwiaGFzU3RhbmRhcmRCcm93c2VyRW52IiwicHJvZHVjdCIsIm5hdmlnYXRvciIsImhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudiIsIldvcmtlckdsb2JhbFNjb3BlIiwiaW1wb3J0U2NyaXB0cyIsInBsYXRmb3JtIiwidG9VUkxFbmNvZGVkRm9ybSIsImhlbHBlcnMiLCJpc05vZGUiLCJwYXJzZVByb3BQYXRoIiwiYXJyYXlUb09iamVjdCIsImZvcm1EYXRhVG9KU09OIiwiYnVpbGRQYXRoIiwiaXNOdW1lcmljS2V5IiwiaXNMYXN0IiwiZW50cmllcyIsInRyYW5zaXRpb25hbERlZmF1bHRzIiwic3RyaW5naWZ5U2FmZWx5IiwicmF3VmFsdWUiLCJwYXJzZXIiLCJwYXJzZSIsImRlZmF1bHRzIiwidHJhbnNpdGlvbmFsIiwiYWRhcHRlciIsInRyYW5zZm9ybVJlcXVlc3QiLCJoZWFkZXJzIiwiY29udGVudFR5cGUiLCJnZXRDb250ZW50VHlwZSIsImhhc0pTT05Db250ZW50VHlwZSIsImlzT2JqZWN0UGF5bG9hZCIsInNldENvbnRlbnRUeXBlIiwiZm9ybVNlcmlhbGl6ZXIiLCJfRm9ybURhdGEiLCJlbnYiLCJ0cmFuc2Zvcm1SZXNwb25zZSIsIkpTT05SZXF1ZXN0ZWQiLCJyZXNwb25zZVR5cGUiLCJzdHJpY3RKU09OUGFyc2luZyIsIkVSUl9CQURfUkVTUE9OU0UiLCJ0aW1lb3V0IiwieHNyZkNvb2tpZU5hbWUiLCJ4c3JmSGVhZGVyTmFtZSIsIm1heENvbnRlbnRMZW5ndGgiLCJtYXhCb2R5TGVuZ3RoIiwidmFsaWRhdGVTdGF0dXMiLCJjb21tb24iLCJpZ25vcmVEdXBsaWNhdGVPZiIsInJhd0hlYWRlcnMiLCJwYXJzZWQiLCJsaW5lIiwicGFyc2VIZWFkZXJzIiwiJGludGVybmFscyIsIm5vcm1hbGl6ZUhlYWRlciIsImhlYWRlciIsIm5vcm1hbGl6ZVZhbHVlIiwicGFyc2VUb2tlbnMiLCJ0b2tlbnMiLCJ0b2tlbnNSRSIsImlzVmFsaWRIZWFkZXJOYW1lIiwibWF0Y2hIZWFkZXJWYWx1ZSIsImlzSGVhZGVyTmFtZUZpbHRlciIsImZvcm1hdEhlYWRlciIsInciLCJjaGFyIiwiYnVpbGRBY2Nlc3NvcnMiLCJhY2Nlc3Nvck5hbWUiLCJtZXRob2ROYW1lIiwiYXJnMSIsImFyZzIiLCJhcmczIiwiY29uZmlndXJhYmxlIiwiQXhpb3NIZWFkZXJzIiwidmFsdWVPclJld3JpdGUiLCJyZXdyaXRlIiwic2V0SGVhZGVyIiwiX3ZhbHVlIiwiX2hlYWRlciIsIl9yZXdyaXRlIiwibEhlYWRlciIsInNldEhlYWRlcnMiLCJtYXRjaGVyIiwiZGVsZXRlIiwiZGVsZXRlZCIsImRlbGV0ZUhlYWRlciIsIm5vcm1hbGl6ZSIsImZvcm1hdCIsIm5vcm1hbGl6ZWQiLCJ0YXJnZXRzIiwiYXNTdHJpbmdzIiwiZmlyc3QiLCJhY2Nlc3NvciIsImludGVybmFscyIsImFjY2Vzc29ycyIsImRlZmluZUFjY2Vzc29yIiwibWFwcGVkIiwiaGVhZGVyVmFsdWUiLCJ0cmFuc2Zvcm1EYXRhIiwiZm5zIiwiaXNDYW5jZWwiLCJfX0NBTkNFTF9fIiwiQ2FuY2VsZWRFcnJvciIsIkVSUl9DQU5DRUxFRCIsInNldHRsZSIsInJlamVjdCIsIkVSUl9CQURfUkVRVUVTVCIsImZsb29yIiwid3JpdGUiLCJleHBpcmVzIiwiZG9tYWluIiwic2VjdXJlIiwiY29va2llIiwiRGF0ZSIsInRvR01UU3RyaW5nIiwicmVhZCIsIlJlZ0V4cCIsImRlY29kZVVSSUNvbXBvbmVudCIsInJlbW92ZSIsIm5vdyIsImlzQWJzb2x1dGVVUkwiLCJjb21iaW5lVVJMcyIsImJhc2VVUkwiLCJyZWxhdGl2ZVVSTCIsImJ1aWxkRnVsbFBhdGgiLCJyZXF1ZXN0ZWRVUkwiLCJzdGFuZGFyZEJyb3dzZXJFbnYiLCJtc2llIiwidXNlckFnZW50IiwidXJsUGFyc2luZ05vZGUiLCJjcmVhdGVFbGVtZW50Iiwib3JpZ2luVVJMIiwicmVzb2x2ZVVSTCIsImhyZWYiLCJzZXRBdHRyaWJ1dGUiLCJwcm90b2NvbCIsImhvc3QiLCJzZWFyY2giLCJoYXNoIiwiaG9zdG5hbWUiLCJwb3J0IiwicGF0aG5hbWUiLCJjaGFyQXQiLCJsb2NhdGlvbiIsImlzVVJMU2FtZU9yaWdpbiIsInJlcXVlc3RVUkwiLCJub25TdGFuZGFyZEJyb3dzZXJFbnYiLCJwYXJzZVByb3RvY29sIiwic3BlZWRvbWV0ZXIiLCJzYW1wbGVzQ291bnQiLCJtaW4iLCJieXRlcyIsInRpbWVzdGFtcHMiLCJoZWFkIiwidGFpbCIsImZpcnN0U2FtcGxlVFMiLCJjaHVua0xlbmd0aCIsInN0YXJ0ZWRBdCIsImJ5dGVzQ291bnQiLCJwYXNzZWQiLCJyb3VuZCIsImNvb2tpZXMiLCJwcm9ncmVzc0V2ZW50UmVkdWNlciIsImxpc3RlbmVyIiwiaXNEb3dubG9hZFN0cmVhbSIsImJ5dGVzTm90aWZpZWQiLCJfc3BlZWRvbWV0ZXIiLCJsb2FkZWQiLCJsZW5ndGhDb21wdXRhYmxlIiwicHJvZ3Jlc3NCeXRlcyIsInJhdGUiLCJpblJhbmdlIiwicHJvZ3Jlc3MiLCJlc3RpbWF0ZWQiLCJpc1hIUkFkYXB0ZXJTdXBwb3J0ZWQiLCJYTUxIdHRwUmVxdWVzdCIsIlByb21pc2UiLCJkaXNwYXRjaFhoclJlcXVlc3QiLCJyZXF1ZXN0RGF0YSIsInJlcXVlc3RIZWFkZXJzIiwid2l0aFhTUkZUb2tlbiIsIm9uQ2FuY2VsZWQiLCJjYW5jZWxUb2tlbiIsInVuc3Vic2NyaWJlIiwic2lnbmFsIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImF1dGgiLCJ1c2VybmFtZSIsInBhc3N3b3JkIiwidW5lc2NhcGUiLCJidG9hIiwiZnVsbFBhdGgiLCJvcGVuIiwicGFyYW1zU2VyaWFsaXplciIsIm9ubG9hZGVuZCIsInJlc3BvbnNlSGVhZGVycyIsImdldEFsbFJlc3BvbnNlSGVhZGVycyIsInJlc3BvbnNlRGF0YSIsInJlc3BvbnNlVGV4dCIsInN0YXR1c1RleHQiLCJfcmVzb2x2ZSIsIl9yZWplY3QiLCJlcnIiLCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCJoYW5kbGVMb2FkIiwicmVhZHlTdGF0ZSIsInJlc3BvbnNlVVJMIiwic2V0VGltZW91dCIsIm9uYWJvcnQiLCJoYW5kbGVBYm9ydCIsIkVDT05OQUJPUlRFRCIsIm9uZXJyb3IiLCJoYW5kbGVFcnJvciIsIkVSUl9ORVRXT1JLIiwib250aW1lb3V0IiwiaGFuZGxlVGltZW91dCIsInRpbWVvdXRFcnJvck1lc3NhZ2UiLCJFVElNRURPVVQiLCJ4c3JmVmFsdWUiLCJzZXRSZXF1ZXN0SGVhZGVyIiwid2l0aENyZWRlbnRpYWxzIiwib25Eb3dubG9hZFByb2dyZXNzIiwiYWRkRXZlbnRMaXN0ZW5lciIsIm9uVXBsb2FkUHJvZ3Jlc3MiLCJ1cGxvYWQiLCJjYW5jZWwiLCJhYm9ydCIsInN1YnNjcmliZSIsImFib3J0ZWQiLCJzZW5kIiwiaHR0cEFkYXB0ZXIiLCJ4aHJBZGFwdGVyIiwia25vd25BZGFwdGVycyIsInhociIsInJlbmRlclJlYXNvbiIsInJlYXNvbiIsImlzUmVzb2x2ZWRIYW5kbGUiLCJnZXRBZGFwdGVyIiwiYWRhcHRlcnMiLCJuYW1lT3JBZGFwdGVyIiwicmVqZWN0ZWRSZWFzb25zIiwicmVhc29ucyIsInN0YXRlIiwidGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZCIsInRocm93SWZSZXF1ZXN0ZWQiLCJkaXNwYXRjaFJlcXVlc3QiLCJvbkFkYXB0ZXJSZXNvbHV0aW9uIiwib25BZGFwdGVyUmVqZWN0aW9uIiwiaGVhZGVyc1RvT2JqZWN0IiwibWVyZ2VDb25maWciLCJjb25maWcxIiwiY29uZmlnMiIsImdldE1lcmdlZFZhbHVlIiwibWVyZ2VEZWVwUHJvcGVydGllcyIsInZhbHVlRnJvbUNvbmZpZzIiLCJkZWZhdWx0VG9Db25maWcyIiwibWVyZ2VEaXJlY3RLZXlzIiwibWVyZ2VNYXAiLCJ0aW1lb3V0TWVzc2FnZSIsImRlY29tcHJlc3MiLCJiZWZvcmVSZWRpcmVjdCIsInRyYW5zcG9ydCIsImh0dHBBZ2VudCIsImh0dHBzQWdlbnQiLCJzb2NrZXRQYXRoIiwicmVzcG9uc2VFbmNvZGluZyIsImNvbXB1dGVDb25maWdWYWx1ZSIsImNvbmZpZ1ZhbHVlIiwiVkVSU0lPTiIsInZhbGlkYXRvcnMiLCJ2YWxpZGF0b3IiLCJkZXByZWNhdGVkV2FybmluZ3MiLCJ2ZXJzaW9uIiwiZm9ybWF0TWVzc2FnZSIsIm9wdCIsImRlc2MiLCJvcHRzIiwiRVJSX0RFUFJFQ0FURUQiLCJjb25zb2xlIiwid2FybiIsImFzc2VydE9wdGlvbnMiLCJzY2hlbWEiLCJhbGxvd1Vua25vd24iLCJFUlJfQkFEX09QVElPTl9WQUxVRSIsIkVSUl9CQURfT1BUSU9OIiwiQXhpb3MiLCJpbnN0YW5jZUNvbmZpZyIsImludGVyY2VwdG9ycyIsImNvbmZpZ09yVXJsIiwiX3JlcXVlc3QiLCJkdW1teSIsImJvb2xlYW4iLCJmdW5jdGlvbiIsImNvbnRleHRIZWFkZXJzIiwicmVxdWVzdEludGVyY2VwdG9yQ2hhaW4iLCJzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMiLCJ1bnNoaWZ0UmVxdWVzdEludGVyY2VwdG9ycyIsImludGVyY2VwdG9yIiwidW5zaGlmdCIsInJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbiIsInB1c2hSZXNwb25zZUludGVyY2VwdG9ycyIsInByb21pc2UiLCJjaGFpbiIsIm5ld0NvbmZpZyIsIm9uRnVsZmlsbGVkIiwib25SZWplY3RlZCIsImdldFVyaSIsImZvckVhY2hNZXRob2ROb0RhdGEiLCJmb3JFYWNoTWV0aG9kV2l0aERhdGEiLCJnZW5lcmF0ZUhUVFBNZXRob2QiLCJpc0Zvcm0iLCJodHRwTWV0aG9kIiwiQ2FuY2VsVG9rZW4iLCJleGVjdXRvciIsInJlc29sdmVQcm9taXNlIiwicHJvbWlzZUV4ZWN1dG9yIiwiX2xpc3RlbmVycyIsIm9uZnVsZmlsbGVkIiwic3BsaWNlIiwiYyIsInNwcmVhZCIsImNhbGxiYWNrIiwiaXNBeGlvc0Vycm9yIiwicGF5bG9hZCIsIkh0dHBTdGF0dXNDb2RlIiwiQ29udGludWUiLCJTd2l0Y2hpbmdQcm90b2NvbHMiLCJQcm9jZXNzaW5nIiwiRWFybHlIaW50cyIsIk9rIiwiQ3JlYXRlZCIsIkFjY2VwdGVkIiwiTm9uQXV0aG9yaXRhdGl2ZUluZm9ybWF0aW9uIiwiTm9Db250ZW50IiwiUmVzZXRDb250ZW50IiwiUGFydGlhbENvbnRlbnQiLCJNdWx0aVN0YXR1cyIsIkFscmVhZHlSZXBvcnRlZCIsIkltVXNlZCIsIk11bHRpcGxlQ2hvaWNlcyIsIk1vdmVkUGVybWFuZW50bHkiLCJGb3VuZCIsIlNlZU90aGVyIiwiTm90TW9kaWZpZWQiLCJVc2VQcm94eSIsIlVudXNlZCIsIlRlbXBvcmFyeVJlZGlyZWN0IiwiUGVybWFuZW50UmVkaXJlY3QiLCJCYWRSZXF1ZXN0IiwiVW5hdXRob3JpemVkIiwiUGF5bWVudFJlcXVpcmVkIiwiRm9yYmlkZGVuIiwiTm90Rm91bmQiLCJNZXRob2ROb3RBbGxvd2VkIiwiTm90QWNjZXB0YWJsZSIsIlByb3h5QXV0aGVudGljYXRpb25SZXF1aXJlZCIsIlJlcXVlc3RUaW1lb3V0IiwiQ29uZmxpY3QiLCJHb25lIiwiTGVuZ3RoUmVxdWlyZWQiLCJQcmVjb25kaXRpb25GYWlsZWQiLCJQYXlsb2FkVG9vTGFyZ2UiLCJVcmlUb29Mb25nIiwiVW5zdXBwb3J0ZWRNZWRpYVR5cGUiLCJSYW5nZU5vdFNhdGlzZmlhYmxlIiwiRXhwZWN0YXRpb25GYWlsZWQiLCJJbUFUZWFwb3QiLCJNaXNkaXJlY3RlZFJlcXVlc3QiLCJVbnByb2Nlc3NhYmxlRW50aXR5IiwiTG9ja2VkIiwiRmFpbGVkRGVwZW5kZW5jeSIsIlRvb0Vhcmx5IiwiVXBncmFkZVJlcXVpcmVkIiwiUHJlY29uZGl0aW9uUmVxdWlyZWQiLCJUb29NYW55UmVxdWVzdHMiLCJSZXF1ZXN0SGVhZGVyRmllbGRzVG9vTGFyZ2UiLCJVbmF2YWlsYWJsZUZvckxlZ2FsUmVhc29ucyIsIkludGVybmFsU2VydmVyRXJyb3IiLCJOb3RJbXBsZW1lbnRlZCIsIkJhZEdhdGV3YXkiLCJTZXJ2aWNlVW5hdmFpbGFibGUiLCJHYXRld2F5VGltZW91dCIsIkh0dHBWZXJzaW9uTm90U3VwcG9ydGVkIiwiVmFyaWFudEFsc29OZWdvdGlhdGVzIiwiSW5zdWZmaWNpZW50U3RvcmFnZSIsIkxvb3BEZXRlY3RlZCIsIk5vdEV4dGVuZGVkIiwiTmV0d29ya0F1dGhlbnRpY2F0aW9uUmVxdWlyZWQiLCJjcmVhdGVJbnN0YW5jZSIsImRlZmF1bHRDb25maWciLCJpbnN0YW5jZSIsImF4aW9zIiwiQ2FuY2VsIiwiYWxsIiwicHJvbWlzZXMiLCJmb3JtVG9KU09OIiwiX2NsYXNzUHJpdmF0ZUZpZWxkU2V0IiwiX2NsYXNzUHJpdmF0ZUZpZWxkR2V0IiwiX2F4aW9zIiwiV2Vha01hcCIsIl9yZXF1ZXN0Q291bnQiLCJfZXJyb3JUaXBzQ291bnQiLCJfbG9hZGluZ0luc3RhbmNlIiwiX2NvbmZpZyIsIkh0dHAiLCJzdWNjZXNzQ29kZSIsImVycm9yQ29kZSIsImsiLCJfdGhpcyRyZXF1ZXN0Q291bnQiLCJfdGhpcyRyZXF1ZXN0Q291bnQyIiwibG9hZGluZyIsImF1dGhvcml6YXRpb24iLCJsb2NhbFN0b3JhZ2UiLCJfdGhpcyRyZXF1ZXN0Q291bnQzIiwiX3RoaXMkcmVxdWVzdENvdW50NCIsImNsb3NlIiwiX3RoaXMkcmVxdWVzdENvdW50NSIsIl90aGlzJHJlcXVlc3RDb3VudDYiLCJfaGFuZGxlUmVzdWx0Iiwic3VjY2VzcyIsIl90aGlzJGVycm9yVGlwc0NvdW50IiwiX3RoaXMkZXJyb3JUaXBzQ291bnQyIiwibXNnIiwidXBkYXRlIiwiZG93bkxvYWQiLCJibG9iIiwibGluayIsImRpc3BsYXkiLCJVUkwiLCJjcmVhdGVPYmplY3RVUkwiLCJkb3dubG9hZCIsInJldm9rZU9iamVjdFVSTCIsInJlcXVpcmUiLCJQYWdpbmF0aW9uIiwiUGFnZVRhYmxlIiwiRGlhbG9nIiwiQ2FyZCIsIlRyZWUiLCJfSHR0cCIsImNvbXMiLCJpbnN0YWxsIiwiY29tIiwiY29tcG9uZW50Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9600\n");
26
+ eval("// ESM COMPAT FLAG\n__webpack_require__.r(__webpack_exports__);\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n Http: function() { return /* reexport */ Http; },\n \"default\": function() { return /* binding */ entry_lib; }\n});\n\n// NAMESPACE OBJECT: ./node_modules/axios/lib/platform/common/utils.js\nvar common_utils_namespaceObject = {};\n__webpack_require__.r(common_utils_namespaceObject);\n__webpack_require__.d(common_utils_namespaceObject, {\n hasBrowserEnv: function() { return hasBrowserEnv; },\n hasStandardBrowserEnv: function() { return hasStandardBrowserEnv; },\n hasStandardBrowserWebWorkerEnv: function() { return hasStandardBrowserWebWorkerEnv; }\n});\n\n;// CONCATENATED MODULE: ./node_modules/@vue/cli-service/lib/commands/build/setPublicPath.js\n/* eslint-disable no-var */\n// This file is imported into lib/wc client bundles.\n\nif (typeof window !== 'undefined') {\n var currentScript = window.document.currentScript\n if (false) { var getCurrentScript; }\n\n var src = currentScript && currentScript.src.match(/(.+\\/)[^/]+\\.js(\\?.*)?$/)\n if (src) {\n __webpack_require__.p = src[1] // eslint-disable-line\n }\n}\n\n// Indicate to webpack that this file can be concatenated\n/* harmony default export */ var setPublicPath = (null);\n\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-82.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/pagination/Index.vue?vue&type=template&id=26b70fb4&scoped=true\nvar render = function render() {\n var _vm = this,\n _c = _vm._self._c;\n return _vm.total > 0 ? _c('div', [_c('el-pagination', _vm._b({\n attrs: {\n \"background\": \"\",\n \"current-page\": _vm.currentPage,\n \"page-size\": _vm.pageSize,\n \"page-sizes\": _vm.pageSizes,\n \"total\": _vm.total,\n \"layout\": \"prev, pager, next\"\n },\n on: {\n \"size-change\": _vm.handleSizeChange,\n \"current-change\": _vm.handleCurrentChange\n }\n }, 'el-pagination', _vm.$attrs, false))], 1) : _vm._e();\n};\nvar staticRenderFns = [];\n\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-82.use[1]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/pagination/Index.vue?vue&type=script&lang=js\n/* harmony default export */ var Indexvue_type_script_lang_js = ({\n name: 'Pagination',\n props: {\n total: {\n required: true,\n type: Number,\n default: 0\n },\n page: {\n type: Number,\n default: 1\n },\n limit: {\n type: Number,\n default: 20\n },\n pageSizes: {\n type: Array,\n default() {\n return [10, 15, 20, 30, 50];\n }\n }\n },\n computed: {\n currentPage: {\n get() {\n return this.page;\n },\n set(val) {\n this.$emit('update:page', val);\n }\n },\n pageSize: {\n get() {\n return this.limit;\n },\n set(val) {\n this.$emit('update:limit', val);\n }\n },\n totalCount: {\n get() {\n return this.total;\n },\n set(val) {\n this.$emit('update:total', val);\n }\n }\n },\n methods: {\n handleSizeChange(val) {\n this.$emit('pagination', {\n page: this.currentPage,\n limit: val\n });\n },\n handleCurrentChange(val) {\n this.$emit('pagination', {\n page: val,\n limit: this.pageSize\n });\n }\n }\n});\n;// CONCATENATED MODULE: ./src/components/pagination/Index.vue?vue&type=script&lang=js\n /* harmony default export */ var pagination_Indexvue_type_script_lang_js = (Indexvue_type_script_lang_js); \n;// CONCATENATED MODULE: ./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-64.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-64.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-64.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-64.use[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/pagination/Index.vue?vue&type=style&index=0&id=26b70fb4&prod&lang=scss&scoped=true\n// extracted by mini-css-extract-plugin\n\n;// CONCATENATED MODULE: ./src/components/pagination/Index.vue?vue&type=style&index=0&id=26b70fb4&prod&lang=scss&scoped=true\n\n;// CONCATENATED MODULE: ./node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\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 =\n typeof scriptExports === 'function' ? scriptExports.options : 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) {\n // 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 ? [].concat(existing, hook) : [hook]\n }\n }\n\n return {\n exports: scriptExports,\n options: options\n }\n}\n\n;// CONCATENATED MODULE: ./src/components/pagination/Index.vue\n\n\n\n;\n\n\n/* normalize component */\n\nvar component = normalizeComponent(\n pagination_Indexvue_type_script_lang_js,\n render,\n staticRenderFns,\n false,\n null,\n \"26b70fb4\",\n null\n \n)\n\n/* harmony default export */ var Index = (component.exports);\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-82.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/page-table/Index.vue?vue&type=template&id=6ae25121&scoped=true\nvar Indexvue_type_template_id_6ae25121_scoped_true_render = function render() {\n var _vm = this,\n _c = _vm._self._c;\n return _c('div', {\n staticClass: \"page-table\",\n attrs: {\n \"id\": this.tableId\n }\n }, [_c('div', {\n staticClass: \"table\"\n }, [_c('el-scrollbar', {\n staticStyle: {\n \"height\": \"100%\"\n }\n }, [_c('el-table', _vm._b({\n ref: _vm.tableId,\n attrs: {\n \"stripe\": \"\",\n \"data\": _vm.list,\n \"row-key\": _vm.rowKey,\n \"load\": _vm.load,\n \"highlight-current-row\": _vm.hlightCurrentRow,\n \"default-expand-all\": _vm.defaultExpandAll\n },\n on: {\n \"select\": _vm.handelSelectionChange,\n \"select-all\": _vm.selectAll,\n \"row-click\": _vm.handleRowClick,\n \"expand-change\": val => _vm.$emit('expand-change', val)\n }\n }, 'el-table', _vm.$attrs, false), [_vm.showCheckBox ? _c('el-table-column', {\n attrs: {\n \"type\": \"selection\",\n \"width\": \"60px\",\n \"align\": \"center\"\n }\n }) : _vm._e(), _vm.sortNum ? _c('el-table-column', {\n attrs: {\n \"type\": \"index\",\n \"width\": \"60px\",\n \"label\": \"序号\",\n \"align\": \"center\"\n },\n scopedSlots: _vm._u([{\n key: \"default\",\n fn: function (scope) {\n return [_vm.page ? _c('span', [_vm._v(_vm._s((_vm.params.page - 1) * _vm.params.limit + scope.$index + 1))]) : _c('span', [_vm._v(_vm._s(scope.$index + 1))])];\n }\n }], null, false, 2786008021)\n }) : _vm._e(), _vm._t(\"default\")], 2)], 1)], 1), _vm.page ? _c('Pagination', {\n attrs: {\n \"total\": _vm.total,\n \"page\": _vm.params.page,\n \"limit\": _vm.params.limit\n },\n on: {\n \"update:page\": function ($event) {\n return _vm.$set(_vm.params, \"page\", $event);\n },\n \"pagination\": _vm.getList\n }\n }) : _vm._e()], 1);\n};\nvar Indexvue_type_template_id_6ae25121_scoped_true_staticRenderFns = [];\n\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-82.use[1]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/page-table/Index.vue?vue&type=script&lang=js\n/* harmony default export */ var page_table_Indexvue_type_script_lang_js = ({\n name: 'PageTable',\n props: {\n // 自定义数据\n data: {\n type: Array,\n default: null\n },\n // 请求地址\n url: {\n type: String,\n default: ''\n },\n // 请求方式\n method: {\n type: String,\n default: 'get'\n },\n // 是否显示序号\n sortNum: {\n type: Boolean,\n default: true\n },\n // 是否分页\n page: {\n type: Boolean,\n default: true\n },\n // 树形表格时,是否全部展开\n defaultExpandAll: {\n type: Boolean,\n default: false\n },\n // 初始请求参数\n defaultParams: {\n type: Object,\n default: () => ({})\n },\n // 默认选中数据\n defaultSelect: {\n type: Array,\n default: () => []\n },\n rowKey: {\n type: String,\n default: 'id'\n },\n hlightCurrentRow: {\n ype: Boolean,\n default: false\n }\n },\n watch: {\n data(newVal) {\n this.list = newVal;\n },\n defaultSelect: {\n handler() {\n this.setChecked();\n },\n deep: true\n },\n defaultParams(newVal, oldVal) {\n for (const key in newVal) {\n if (newVal[key] != oldVal[key]) {\n this.params = {\n page: 1,\n limit: 15,\n param: {\n ...newVal\n }\n };\n this.getList();\n break;\n }\n }\n }\n },\n data() {\n return {\n showCheckBox: false,\n params: {\n page: 1,\n limit: 15,\n param: {\n ...this.defaultParams\n }\n },\n total: 0,\n list: [],\n tableId: `table_${Math.random().toString(36).substring(2, 16)}`,\n selectData: {},\n selectIds: []\n };\n },\n mounted() {\n log(this);\n if (this.$listeners['selection-change']) {\n this.showCheckBox = true;\n }\n if (this.data) {\n this.list = this.data;\n return;\n }\n for (const item of this.defaultSelect) {\n this.selectData[item[this.rowKey]] = item;\n }\n this.getList();\n },\n methods: {\n // 获取数据\n getList(pageOption) {\n if (!this.url) {\n return;\n }\n if (pageOption) {\n this.params.page = pageOption.page;\n this.params.limit = pageOption.limit;\n }\n if (!this.page) {\n delete this.params.page;\n delete this.params.limit;\n }\n const storageParams = sessionStorage.getItem(this.$route.path);\n if (storageParams) {\n sessionStorage.setItem(this.$route.path, JSON.stringify(this.params));\n }\n switch (this.method) {\n case 'get':\n http.get(this.url, this.params, res => {\n this._setData(res);\n });\n break;\n case 'post':\n http.post(this.url, this.params, res => {\n this._setData(res);\n });\n break;\n default:\n break;\n }\n },\n _setData(res) {\n if (this.page) {\n this.list = res.data.records;\n this.total = res.data.total;\n } else {\n this.list = res.data;\n }\n this.setChecked();\n },\n // 设置默认选中\n setChecked() {\n if (this.defaultSelect.length > 0) {\n this.selectIds = this.defaultSelect.map(item => item[this.rowKey]);\n if (this.showCheckBox && this.list) {\n this.$nextTick(() => {\n // 默认选中数据\n if (this.$refs[this.tableId]) {\n for (const item of this.list) {\n if (this.selectIds.includes(item[this.rowKey])) {\n this.$refs[this.tableId].toggleRowSelection(item, true);\n this.selectData[item[this.rowKey]] = item;\n } else {\n this.$refs[this.tableId].toggleRowSelection(item, false);\n delete this.selectData[item[this.rowKey]];\n }\n }\n }\n });\n }\n } else {\n this.selectIds = [];\n this.selectData = {};\n if (this.$refs[this.tableId]) {\n for (const item of this.list) {\n this.$refs[this.tableId].toggleRowSelection(item, false);\n }\n }\n }\n },\n // 条件查询\n query(params = {}) {\n if (Object.keys(params).length > 0) {\n const param = {\n ...this.params.param,\n ...params\n };\n this.params = {\n ...this.params,\n param\n };\n this.params.page = 1;\n }\n this.getList();\n },\n // 点击行\n handleRowClick(row, column, event) {\n this.$emit('row-click', row, column, event);\n },\n handelSelectionChange(_, row) {\n if (this.selectData[row[this.rowKey]]) {\n delete this.selectData[row[this.rowKey]];\n } else {\n this.selectData[row[this.rowKey]] = row;\n }\n const selectionList = Object.values(this.selectData);\n this.selectIds = selectionList.map(item => item[this.rowKey]);\n this.$emit('selection-change', selectionList);\n },\n // 全选/全不选\n selectAll(selection) {\n if (selection.length > 0) {\n for (const item of selection) {\n this.selectData[item[this.rowKey]] = item;\n }\n } else {\n for (const item of this.list) {\n delete this.selectData[item[this.rowKey]];\n }\n }\n const selectionList = Object.values(this.selectData);\n this.selectIds = selectionList.map(item => item[this.rowKey]);\n this.$emit('selection-change', selectionList);\n },\n setCurrent(index) {\n this.$refs[this.tableId].setCurrentRow(this.list[index]);\n },\n getData() {\n return this.list;\n },\n load(tree, treeNode, resolve) {\n this.$emit('load', tree, treeNode, resolve);\n }\n }\n});\n;// CONCATENATED MODULE: ./src/components/page-table/Index.vue?vue&type=script&lang=js\n /* harmony default export */ var components_page_table_Indexvue_type_script_lang_js = (page_table_Indexvue_type_script_lang_js); \n;// CONCATENATED MODULE: ./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-64.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-64.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-64.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-64.use[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/page-table/Index.vue?vue&type=style&index=0&id=6ae25121&prod&lang=scss&scoped=true\n// extracted by mini-css-extract-plugin\n\n;// CONCATENATED MODULE: ./src/components/page-table/Index.vue?vue&type=style&index=0&id=6ae25121&prod&lang=scss&scoped=true\n\n;// CONCATENATED MODULE: ./src/components/page-table/Index.vue\n\n\n\n;\n\n\n/* normalize component */\n\nvar Index_component = normalizeComponent(\n components_page_table_Indexvue_type_script_lang_js,\n Indexvue_type_template_id_6ae25121_scoped_true_render,\n Indexvue_type_template_id_6ae25121_scoped_true_staticRenderFns,\n false,\n null,\n \"6ae25121\",\n null\n \n)\n\n/* harmony default export */ var page_table_Index = (Index_component.exports);\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-82.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/dialog/Index.vue?vue&type=template&id=4148762e&scoped=true\nvar Indexvue_type_template_id_4148762e_scoped_true_render = function render() {\n var _vm = this,\n _c = _vm._self._c;\n return _c('el-dialog', _vm._b({\n directives: [{\n name: \"dialogDrag\",\n rawName: \"v-dialogDrag\"\n }],\n staticStyle: {\n \"margin-top\": \"0\"\n },\n attrs: {\n \"title\": _vm.title,\n \"visible\": _vm.dialogVisible,\n \"before-close\": _vm.handleClose,\n \"center\": \"\",\n \"close-on-click-modal\": false,\n \"show-close\": _vm.showClose,\n \"append-to-body\": \"\"\n }\n }, 'el-dialog', _vm.$attrs, false), [_c('div', {\n staticStyle: {\n \"overflow-y\": \"auto\",\n \"overflow-x\": \"hidden\",\n \"position\": \"relative\"\n },\n style: {\n maxHeight: _vm.maxHeight,\n minHeight: _vm.minHeight\n }\n }, [_vm._t(\"default\")], 2), _c('div', {\n staticStyle: {\n \"text-align\": \"center\"\n },\n attrs: {\n \"slot\": \"footer\"\n },\n slot: \"footer\"\n }, [_vm._t(\"footer\")], 2)]);\n};\nvar Indexvue_type_template_id_4148762e_scoped_true_staticRenderFns = [];\n\n// EXTERNAL MODULE: external {\"commonjs\":\"vue\",\"commonjs2\":\"vue\",\"root\":\"Vue\"}\nvar external_commonjs_vue_commonjs2_vue_root_Vue_ = __webpack_require__(9274);\nvar external_commonjs_vue_commonjs2_vue_root_Vue_default = /*#__PURE__*/__webpack_require__.n(external_commonjs_vue_commonjs2_vue_root_Vue_);\n;// CONCATENATED MODULE: ./src/components/dialog/dialog-drag.js\n// v-dialogDrag: 弹窗拖拽\n\nexternal_commonjs_vue_commonjs2_vue_root_Vue_default().directive('dialogDrag', {\n bind(el) {\n const dialogHeaderEl = el.querySelector('.el-dialog__header');\n const dragDom = el.querySelector('.el-dialog');\n dialogHeaderEl.style.cursor = 'move';\n\n // 获取原有属性 ie dom元素.currentStyle 火狐谷歌 window.getComputedStyle(dom元素, null);\n const sty = dragDom.currentStyle || window.getComputedStyle(dragDom, null);\n dialogHeaderEl.onmousedown = event => {\n // 鼠标按下,计算当前元素距离可视区的距离\n const disX = event.clientX - dialogHeaderEl.offsetLeft;\n const disY = event.clientY - dialogHeaderEl.offsetTop;\n\n // 获取到的值带px 正则匹配替换\n let styL = null;\n let styT = null;\n\n // 注意在ie中 第一次获取到的值为组件自带50% 移动之后赋值为px\n if (sty.left.includes('\\%')) {\n styL = +document.body.clientWidth * (+sty.left.replace(/\\%/g, '') / 100);\n styT = +document.body.clientHeight * (+sty.top.replace(/\\%/g, '') / 100);\n } else {\n styL = +sty.left.replace(/\\px/g, '');\n styT = +sty.top.replace(/\\px/g, '');\n }\n document.onmousemove = function (e) {\n // 通过事件委托,计算移动的距离\n const l = e.clientX - disX;\n const t = e.clientY - disY;\n\n // 移动当前元素\n dragDom.style.left = `${l + styL}px`;\n dragDom.style.top = `${t + styT}px`;\n };\n document.onmouseup = function () {\n document.onmousemove = null;\n document.onmouseup = null;\n };\n };\n }\n});\nexternal_commonjs_vue_commonjs2_vue_root_Vue_default().directive('removeAriaHidden', {\n bind(el) {\n let ariaEls = el.querySelectorAll('.el-radio__original');\n ariaEls.forEach(item => {\n item.removeAttribute('aria-hidden');\n });\n }\n});\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-82.use[1]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/dialog/Index.vue?vue&type=script&lang=js\n\n/* harmony default export */ var dialog_Indexvue_type_script_lang_js = ({\n name: 'Dialog',\n props: {\n title: {\n type: String,\n default: '提示'\n },\n maxHeight: {\n type: String,\n default: '60vh'\n },\n minHeight: {\n type: String,\n default: '150px'\n }\n },\n data() {\n return {\n dialogVisible: true,\n showClose: false\n };\n },\n mounted() {\n if (this.$listeners['close']) {\n this.showClose = true;\n }\n },\n methods: {\n handleClose() {\n this.$emit('close');\n }\n }\n});\n;// CONCATENATED MODULE: ./src/components/dialog/Index.vue?vue&type=script&lang=js\n /* harmony default export */ var components_dialog_Indexvue_type_script_lang_js = (dialog_Indexvue_type_script_lang_js); \n;// CONCATENATED MODULE: ./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-64.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-64.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-64.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-64.use[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/dialog/Index.vue?vue&type=style&index=0&id=4148762e&prod&lang=scss&scoped=true\n// extracted by mini-css-extract-plugin\n\n;// CONCATENATED MODULE: ./src/components/dialog/Index.vue?vue&type=style&index=0&id=4148762e&prod&lang=scss&scoped=true\n\n;// CONCATENATED MODULE: ./src/components/dialog/Index.vue\n\n\n\n;\n\n\n/* normalize component */\n\nvar dialog_Index_component = normalizeComponent(\n components_dialog_Indexvue_type_script_lang_js,\n Indexvue_type_template_id_4148762e_scoped_true_render,\n Indexvue_type_template_id_4148762e_scoped_true_staticRenderFns,\n false,\n null,\n \"4148762e\",\n null\n \n)\n\n/* harmony default export */ var dialog_Index = (dialog_Index_component.exports);\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-82.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/card/Index.vue?vue&type=template&id=0c5de06e&scoped=true\nvar Indexvue_type_template_id_0c5de06e_scoped_true_render = function render() {\n var _vm = this,\n _c = _vm._self._c;\n return _c('el-card', {\n staticStyle: {\n \"height\": \"calc(100% - 2px)\",\n \"overflow\": \"auto\"\n },\n attrs: {\n \"shadow\": _vm.shadow\n }\n }, [_c('div', {\n staticClass: \"clearfix\",\n attrs: {\n \"slot\": \"header\"\n },\n slot: \"header\"\n }, [_c('div', {\n staticStyle: {\n \"font-size\": \"16px\"\n }\n }, [_vm.$slots['card-title'] ? [_vm._t(\"card-title\")] : [_vm._v(\" \" + _vm._s(_vm.title) + \" \")]], 2), _c('div', {\n staticStyle: {\n \"flex\": \"1\",\n \"position\": \"relative\"\n }\n }, [_c('div', {\n staticStyle: {\n \"position\": \"absolute\",\n \"right\": \"0px\",\n \"top\": \"-14px\",\n \"width\": \"100%\",\n \"text-align\": \"right\"\n }\n }, [_vm._t(\"card-tools\")], 2)])]), _vm._t(\"default\")], 2);\n};\nvar Indexvue_type_template_id_0c5de06e_scoped_true_staticRenderFns = [];\n\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-82.use[1]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/card/Index.vue?vue&type=script&lang=js\n/* harmony default export */ var card_Indexvue_type_script_lang_js = ({\n name: 'Card',\n props: {\n title: {\n type: String,\n default: ''\n },\n shadow: {\n type: String,\n default: ''\n }\n }\n});\n;// CONCATENATED MODULE: ./src/components/card/Index.vue?vue&type=script&lang=js\n /* harmony default export */ var components_card_Indexvue_type_script_lang_js = (card_Indexvue_type_script_lang_js); \n;// CONCATENATED MODULE: ./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-64.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-64.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-64.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-64.use[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/card/Index.vue?vue&type=style&index=0&id=0c5de06e&prod&lang=scss&scoped=true\n// extracted by mini-css-extract-plugin\n\n;// CONCATENATED MODULE: ./src/components/card/Index.vue?vue&type=style&index=0&id=0c5de06e&prod&lang=scss&scoped=true\n\n;// CONCATENATED MODULE: ./src/components/card/Index.vue\n\n\n\n;\n\n\n/* normalize component */\n\nvar card_Index_component = normalizeComponent(\n components_card_Indexvue_type_script_lang_js,\n Indexvue_type_template_id_0c5de06e_scoped_true_render,\n Indexvue_type_template_id_0c5de06e_scoped_true_staticRenderFns,\n false,\n null,\n \"0c5de06e\",\n null\n \n)\n\n/* harmony default export */ var card_Index = (card_Index_component.exports);\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-82.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/tree/Index.vue?vue&type=template&id=5e81e05e&scoped=true\nvar Indexvue_type_template_id_5e81e05e_scoped_true_render = function render() {\n var _vm = this,\n _c = _vm._self._c;\n return _vm.show ? _c('div', [_vm.data.length > 0 ? _vm._l(_vm.data, function (item) {\n return _c('auth-tree', {\n key: item.id,\n attrs: {\n \"data\": item,\n \"props\": _vm.props\n },\n on: {\n \"on-node-expand\": data => _vm.onExpand(data),\n \"on-node-checked\": data => _vm.onChecked(data)\n }\n });\n }) : _vm._e()], 2) : _vm._e();\n};\nvar Indexvue_type_template_id_5e81e05e_scoped_true_staticRenderFns = [];\n\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.array.push.js\nvar es_array_push = __webpack_require__(4114);\n;// CONCATENATED MODULE: ./src/components/tree/tree.js\n\n// 是否有子节点\nconst hasChildren = data => {\n return Array.isArray(data.children) && data.children.length > 0;\n};\n\n// 创建节点\nconst renderLabel = (h, data, context) => {\n const {\n props,\n listeners\n } = context;\n const clickHandler = listeners['on-node-expand'];\n const checkedHandler = listeners['on-node-checked'];\n const label = data[props.props.label];\n const childNodes = [];\n childNodes.push(label);\n const icoClass = [];\n if (hasChildren(data)) {\n if (data.expand) {\n icoClass.push('icon-icon-dwon');\n } else {\n icoClass.push('icon-icon_right');\n }\n }\n return h('li', {}, [h('i', {\n domProps: {\n className: `iconfont ${icoClass.join(' ')}`\n },\n style: {\n marginLeft: `${14 * data._leve}px`,\n fontSize: '12px',\n transform: 'translateY(-2px)',\n color: '#666'\n },\n on: {\n click: () => {\n clickHandler(data);\n }\n }\n }, ''), h('i', {\n domProps: {\n className: data.checked ? 'iconfont icon-fangxingxuanzhongfil' : 'iconfont icon-fangxingweixuanzhong'\n },\n style: {\n color: '#666'\n },\n on: {\n click: () => {\n checkedHandler(data);\n }\n }\n }, ''), h('span', {}, childNodes)]);\n};\n\n// 创建 node 子节点\nconst renderChildren = (h, list, expand, context) => {\n if (Array.isArray(list) && list.length) {\n const children = list.map(item => {\n return renderNode(h, item, context);\n });\n let cls = ['tree-node-children'];\n if (!expand) {\n cls.push('expand');\n }\n return h('div', {\n domProps: {\n className: cls.join(' ')\n }\n }, children);\n }\n return '';\n};\nconst renderNode = (h, data, context) => {\n const childNodes = [];\n childNodes.push(renderLabel(h, data, context));\n const children = data.children;\n if (hasChildren(data)) {\n childNodes.push(renderChildren(h, children, data.expand, context));\n }\n return h('ul', {\n domProps: {\n className: 'node'\n }\n }, childNodes);\n};\nconst tree_render = (h, context) => {\n const {\n props\n } = context;\n return renderNode(h, props.data, context);\n};\n/* harmony default export */ var tree = (tree_render);\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-82.use[1]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/tree/Index.vue?vue&type=script&lang=js\n\n\n/* harmony default export */ var tree_Indexvue_type_script_lang_js = ({\n name: 'Tree',\n components: {\n AuthTree: {\n render: tree,\n functional: true\n }\n },\n props: {\n data: {\n type: Array,\n default: () => {\n return [];\n }\n },\n props: {\n type: Object,\n default: () => {\n return {\n label: 'name'\n };\n }\n }\n },\n data() {\n return {\n name: 1,\n show: false,\n list: [],\n checked: false\n };\n },\n methods: {\n init(data, leve) {\n data._leve = leve;\n if (data.children && data.children.length > 0) {\n leve++;\n for (const i in data.children) {\n this.init(data.children[i], leve);\n }\n }\n },\n // 刷新\n refresh() {\n this.show = false;\n this.$nextTick(() => {\n this.show = true;\n });\n },\n // 展开/隐藏\n onExpand(data) {\n data.expand = !data.expand;\n this.refresh();\n },\n // 选中/取消选中\n onChecked(data) {\n data.checked = !data.checked;\n this.toolerChecked(this.data, data);\n this.setParentChecked(this.data);\n this.refresh();\n },\n toolerChecked(list, node) {\n for (const i in list) {\n if (list[i].id === node.id) {\n this.setChildChecked(list[i].children, list[i].checked);\n } else {\n this.toolerChecked(list[i].children, node);\n }\n }\n },\n // 选中节点时,设置子节点全选\n setChildChecked(children, checked) {\n for (const i in children) {\n children[i].checked = checked;\n this.setChildChecked(children[i].children, checked);\n }\n },\n // 设置父节点选中\n setParentChecked(data) {\n for (const i in data) {\n this.checked = false;\n if (data[i].children && data[i].children.length > 0) {\n this.childIsChecked(data[i].children);\n if (this.checked) {\n data[i].checked = this.checked;\n }\n this.setParentChecked(data[i].children);\n }\n }\n this.refresh();\n },\n // 判断节点的子节点是否有选中\n childIsChecked(children) {\n for (const i in children) {\n if (children[i].checked) {\n this.checked = true;\n } else {\n this.childIsChecked(children[i].children);\n }\n }\n },\n // 设置默认选中\n setDefaultChecked(defaultIds) {\n for (const i in defaultIds) {\n this.setChecked(this.data, defaultIds[i]);\n }\n this.setParentChecked(this.data);\n },\n // 根据所给的id,设置改项选中\n setChecked(data, id) {\n for (const i in data) {\n if (data[i].id === id) {\n data[i].checked = true;\n break;\n } else {\n if (data[i].children && data[i].children.length > 0) {\n this.setChecked(data[i].children, id);\n }\n }\n }\n },\n // 获取选中选的key\n getCheckedKeys() {\n const keys = [];\n this._getCheckedKeys(this.data, keys);\n return keys;\n },\n // 遍历出选中选的key\n _getCheckedKeys(data, keys) {\n for (const i in data) {\n if (data[i].checked) {\n keys.push(data[i].id);\n }\n if (data[i].children && data[i].children.length > 0) {\n this._getCheckedKeys(data[i].children, keys);\n }\n }\n },\n // 获取选中选的节点\n getCheckedNodes() {\n const nodes = [];\n this._getCheckedNodes(this.data, nodes);\n return nodes;\n },\n // 遍历出选中选的节点\n _getCheckedNodes(data, nodes) {\n for (const i in data) {\n if (data[i].checked) {\n nodes.push(data[i]);\n }\n if (data[i].children && data[i].children.length > 0) {\n this._getCheckedNodes(data[i].children, nodes);\n }\n }\n }\n },\n watch: {\n data: {\n handler() {\n for (const i in this.data) {\n this.init(this.data[i], 0);\n }\n this.refresh();\n },\n immediate: true,\n deep: true\n }\n }\n});\n;// CONCATENATED MODULE: ./src/components/tree/Index.vue?vue&type=script&lang=js\n /* harmony default export */ var components_tree_Indexvue_type_script_lang_js = (tree_Indexvue_type_script_lang_js); \n;// CONCATENATED MODULE: ./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-64.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-64.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-64.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-64.use[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/tree/Index.vue?vue&type=style&index=0&id=5e81e05e&prod&lang=scss&scoped=true\n// extracted by mini-css-extract-plugin\n\n;// CONCATENATED MODULE: ./src/components/tree/Index.vue?vue&type=style&index=0&id=5e81e05e&prod&lang=scss&scoped=true\n\n;// CONCATENATED MODULE: ./src/components/tree/Index.vue\n\n\n\n;\n\n\n/* normalize component */\n\nvar tree_Index_component = normalizeComponent(\n components_tree_Indexvue_type_script_lang_js,\n Indexvue_type_template_id_5e81e05e_scoped_true_render,\n Indexvue_type_template_id_5e81e05e_scoped_true_staticRenderFns,\n false,\n null,\n \"5e81e05e\",\n null\n \n)\n\n/* harmony default export */ var tree_Index = (tree_Index_component.exports);\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/checkPrivateRedeclaration.js\nfunction _checkPrivateRedeclaration(obj, privateCollection) {\n if (privateCollection.has(obj)) {\n throw new TypeError(\"Cannot initialize the same private elements twice on an object\");\n }\n}\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/classPrivateFieldInitSpec.js\n\nfunction _classPrivateFieldInitSpec(obj, privateMap, value) {\n _checkPrivateRedeclaration(obj, privateMap);\n privateMap.set(obj, value);\n}\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/assertClassBrand.js\nfunction _assertClassBrand(e, t, n) {\n if (\"function\" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n;\n throw new TypeError(\"Private element is not present on this object\");\n}\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/classPrivateFieldSet2.js\n\nfunction _classPrivateFieldSet2(s, a, r) {\n return s.set(_assertClassBrand(s, a), r), r;\n}\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/classPrivateFieldGet2.js\n\nfunction _classPrivateFieldGet2(s, a) {\n return s.get(_assertClassBrand(s, a));\n}\n// EXTERNAL MODULE: ./node_modules/core-js/modules/web.url-search-params.delete.js\nvar web_url_search_params_delete = __webpack_require__(4603);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/web.url-search-params.has.js\nvar web_url_search_params_has = __webpack_require__(7566);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/web.url-search-params.size.js\nvar web_url_search_params_size = __webpack_require__(8721);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.to-reversed.js\nvar es_typed_array_to_reversed = __webpack_require__(7467);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.to-sorted.js\nvar es_typed_array_to_sorted = __webpack_require__(4732);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.with.js\nvar es_typed_array_with = __webpack_require__(9577);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/esnext.array-buffer.detached.js\nvar esnext_array_buffer_detached = __webpack_require__(6280);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/esnext.array-buffer.transfer.js\nvar esnext_array_buffer_transfer = __webpack_require__(7913);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/esnext.array-buffer.transfer-to-fixed-length.js\nvar esnext_array_buffer_transfer_to_fixed_length = __webpack_require__(7801);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/bind.js\n\n\nfunction bind(fn, thisArg) {\n return function wrap() {\n return fn.apply(thisArg, arguments);\n };\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/utils.js\n\n\n\n\n\n\n\n\n\n\n\n// utils is a library of generic helper functions non-specific to axios\n\nconst {\n toString: utils_toString\n} = Object.prototype;\nconst {\n getPrototypeOf\n} = Object;\nconst kindOf = (cache => thing => {\n const str = utils_toString.call(thing);\n return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());\n})(Object.create(null));\nconst kindOfTest = type => {\n type = type.toLowerCase();\n return thing => kindOf(thing) === type;\n};\nconst typeOfTest = type => thing => typeof thing === type;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n *\n * @returns {boolean} True if value is an Array, otherwise false\n */\nconst {\n isArray\n} = Array;\n\n/**\n * Determine if a value is undefined\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nconst isUndefined = typeOfTest('undefined');\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor) && isFunction(val.constructor.isBuffer) && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nconst isArrayBuffer = kindOfTest('ArrayBuffer');\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n let result;\n if (typeof ArrayBuffer !== 'undefined' && ArrayBuffer.isView) {\n result = ArrayBuffer.isView(val);\n } else {\n result = val && val.buffer && isArrayBuffer(val.buffer);\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a String, otherwise false\n */\nconst isString = typeOfTest('string');\n\n/**\n * Determine if a value is a Function\n *\n * @param {*} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nconst isFunction = typeOfTest('function');\n\n/**\n * Determine if a value is a Number\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Number, otherwise false\n */\nconst isNumber = typeOfTest('number');\n\n/**\n * Determine if a value is an Object\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an Object, otherwise false\n */\nconst isObject = thing => thing !== null && typeof thing === 'object';\n\n/**\n * Determine if a value is a Boolean\n *\n * @param {*} thing The value to test\n * @returns {boolean} True if value is a Boolean, otherwise false\n */\nconst isBoolean = thing => thing === true || thing === false;\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a plain Object, otherwise false\n */\nconst isPlainObject = val => {\n if (kindOf(val) !== 'object') {\n return false;\n }\n const prototype = getPrototypeOf(val);\n return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in val) && !(Symbol.iterator in val);\n};\n\n/**\n * Determine if a value is a Date\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Date, otherwise false\n */\nconst isDate = kindOfTest('Date');\n\n/**\n * Determine if a value is a File\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFile = kindOfTest('File');\n\n/**\n * Determine if a value is a Blob\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nconst isBlob = kindOfTest('Blob');\n\n/**\n * Determine if a value is a FileList\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFileList = kindOfTest('FileList');\n\n/**\n * Determine if a value is a Stream\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nconst isStream = val => isObject(val) && isFunction(val.pipe);\n\n/**\n * Determine if a value is a FormData\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nconst isFormData = thing => {\n let kind;\n return thing && (typeof FormData === 'function' && thing instanceof FormData || isFunction(thing.append) && ((kind = kindOf(thing)) === 'formdata' ||\n // detect form-data instance\n kind === 'object' && isFunction(thing.toString) && thing.toString() === '[object FormData]'));\n};\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nconst isURLSearchParams = kindOfTest('URLSearchParams');\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n *\n * @returns {String} The String freed of excess whitespace\n */\nconst trim = str => str.trim ? str.trim() : str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n *\n * @param {Boolean} [allOwnKeys = false]\n * @returns {any}\n */\nfunction forEach(obj, fn, {\n allOwnKeys = false\n} = {}) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n let i;\n let l;\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n if (isArray(obj)) {\n // Iterate over array values\n for (i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Iterate over object keys\n const keys = allOwnKeys ? Object.getOwnPropertyNames(obj) : Object.keys(obj);\n const len = keys.length;\n let key;\n for (i = 0; i < len; i++) {\n key = keys[i];\n fn.call(null, obj[key], key, obj);\n }\n }\n}\nfunction findKey(obj, key) {\n key = key.toLowerCase();\n const keys = Object.keys(obj);\n let i = keys.length;\n let _key;\n while (i-- > 0) {\n _key = keys[i];\n if (key === _key.toLowerCase()) {\n return _key;\n }\n }\n return null;\n}\nconst _global = (() => {\n /*eslint no-undef:0*/\n if (typeof globalThis !== \"undefined\") return globalThis;\n return typeof self !== \"undefined\" ? self : typeof window !== 'undefined' ? window : global;\n})();\nconst isContextDefined = context => !isUndefined(context) && context !== _global;\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n *\n * @returns {Object} Result of all merge properties\n */\nfunction merge( /* obj1, obj2, obj3, ... */\n) {\n const {\n caseless\n } = isContextDefined(this) && this || {};\n const result = {};\n const assignValue = (val, key) => {\n const targetKey = caseless && findKey(result, key) || key;\n if (isPlainObject(result[targetKey]) && isPlainObject(val)) {\n result[targetKey] = merge(result[targetKey], val);\n } else if (isPlainObject(val)) {\n result[targetKey] = merge({}, val);\n } else if (isArray(val)) {\n result[targetKey] = val.slice();\n } else {\n result[targetKey] = val;\n }\n };\n for (let i = 0, l = arguments.length; i < l; i++) {\n arguments[i] && forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n *\n * @param {Boolean} [allOwnKeys]\n * @returns {Object} The resulting value of object a\n */\nconst extend = (a, b, thisArg, {\n allOwnKeys\n} = {}) => {\n forEach(b, (val, key) => {\n if (thisArg && isFunction(val)) {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n }, {\n allOwnKeys\n });\n return a;\n};\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n *\n * @returns {string} content value without BOM\n */\nconst stripBOM = content => {\n if (content.charCodeAt(0) === 0xFEFF) {\n content = content.slice(1);\n }\n return content;\n};\n\n/**\n * Inherit the prototype methods from one constructor into another\n * @param {function} constructor\n * @param {function} superConstructor\n * @param {object} [props]\n * @param {object} [descriptors]\n *\n * @returns {void}\n */\nconst inherits = (constructor, superConstructor, props, descriptors) => {\n constructor.prototype = Object.create(superConstructor.prototype, descriptors);\n constructor.prototype.constructor = constructor;\n Object.defineProperty(constructor, 'super', {\n value: superConstructor.prototype\n });\n props && Object.assign(constructor.prototype, props);\n};\n\n/**\n * Resolve object with deep prototype chain to a flat object\n * @param {Object} sourceObj source object\n * @param {Object} [destObj]\n * @param {Function|Boolean} [filter]\n * @param {Function} [propFilter]\n *\n * @returns {Object}\n */\nconst toFlatObject = (sourceObj, destObj, filter, propFilter) => {\n let props;\n let i;\n let prop;\n const merged = {};\n destObj = destObj || {};\n // eslint-disable-next-line no-eq-null,eqeqeq\n if (sourceObj == null) return destObj;\n do {\n props = Object.getOwnPropertyNames(sourceObj);\n i = props.length;\n while (i-- > 0) {\n prop = props[i];\n if ((!propFilter || propFilter(prop, sourceObj, destObj)) && !merged[prop]) {\n destObj[prop] = sourceObj[prop];\n merged[prop] = true;\n }\n }\n sourceObj = filter !== false && getPrototypeOf(sourceObj);\n } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype);\n return destObj;\n};\n\n/**\n * Determines whether a string ends with the characters of a specified string\n *\n * @param {String} str\n * @param {String} searchString\n * @param {Number} [position= 0]\n *\n * @returns {boolean}\n */\nconst endsWith = (str, searchString, position) => {\n str = String(str);\n if (position === undefined || position > str.length) {\n position = str.length;\n }\n position -= searchString.length;\n const lastIndex = str.indexOf(searchString, position);\n return lastIndex !== -1 && lastIndex === position;\n};\n\n/**\n * Returns new array from array like object or null if failed\n *\n * @param {*} [thing]\n *\n * @returns {?Array}\n */\nconst toArray = thing => {\n if (!thing) return null;\n if (isArray(thing)) return thing;\n let i = thing.length;\n if (!isNumber(i)) return null;\n const arr = new Array(i);\n while (i-- > 0) {\n arr[i] = thing[i];\n }\n return arr;\n};\n\n/**\n * Checking if the Uint8Array exists and if it does, it returns a function that checks if the\n * thing passed in is an instance of Uint8Array\n *\n * @param {TypedArray}\n *\n * @returns {Array}\n */\n// eslint-disable-next-line func-names\nconst isTypedArray = (TypedArray => {\n // eslint-disable-next-line func-names\n return thing => {\n return TypedArray && thing instanceof TypedArray;\n };\n})(typeof Uint8Array !== 'undefined' && getPrototypeOf(Uint8Array));\n\n/**\n * For each entry in the object, call the function with the key and value.\n *\n * @param {Object<any, any>} obj - The object to iterate over.\n * @param {Function} fn - The function to call for each entry.\n *\n * @returns {void}\n */\nconst forEachEntry = (obj, fn) => {\n const generator = obj && obj[Symbol.iterator];\n const iterator = generator.call(obj);\n let result;\n while ((result = iterator.next()) && !result.done) {\n const pair = result.value;\n fn.call(obj, pair[0], pair[1]);\n }\n};\n\n/**\n * It takes a regular expression and a string, and returns an array of all the matches\n *\n * @param {string} regExp - The regular expression to match against.\n * @param {string} str - The string to search.\n *\n * @returns {Array<boolean>}\n */\nconst matchAll = (regExp, str) => {\n let matches;\n const arr = [];\n while ((matches = regExp.exec(str)) !== null) {\n arr.push(matches);\n }\n return arr;\n};\n\n/* Checking if the kindOfTest function returns true when passed an HTMLFormElement. */\nconst isHTMLForm = kindOfTest('HTMLFormElement');\nconst toCamelCase = str => {\n return str.toLowerCase().replace(/[-_\\s]([a-z\\d])(\\w*)/g, function replacer(m, p1, p2) {\n return p1.toUpperCase() + p2;\n });\n};\n\n/* Creating a function that will check if an object has a property. */\nconst utils_hasOwnProperty = (({\n hasOwnProperty\n}) => (obj, prop) => hasOwnProperty.call(obj, prop))(Object.prototype);\n\n/**\n * Determine if a value is a RegExp object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a RegExp object, otherwise false\n */\nconst isRegExp = kindOfTest('RegExp');\nconst reduceDescriptors = (obj, reducer) => {\n const descriptors = Object.getOwnPropertyDescriptors(obj);\n const reducedDescriptors = {};\n forEach(descriptors, (descriptor, name) => {\n let ret;\n if ((ret = reducer(descriptor, name, obj)) !== false) {\n reducedDescriptors[name] = ret || descriptor;\n }\n });\n Object.defineProperties(obj, reducedDescriptors);\n};\n\n/**\n * Makes all methods read-only\n * @param {Object} obj\n */\n\nconst freezeMethods = obj => {\n reduceDescriptors(obj, (descriptor, name) => {\n // skip restricted props in strict mode\n if (isFunction(obj) && ['arguments', 'caller', 'callee'].indexOf(name) !== -1) {\n return false;\n }\n const value = obj[name];\n if (!isFunction(value)) return;\n descriptor.enumerable = false;\n if ('writable' in descriptor) {\n descriptor.writable = false;\n return;\n }\n if (!descriptor.set) {\n descriptor.set = () => {\n throw Error('Can not rewrite read-only method \\'' + name + '\\'');\n };\n }\n });\n};\nconst toObjectSet = (arrayOrString, delimiter) => {\n const obj = {};\n const define = arr => {\n arr.forEach(value => {\n obj[value] = true;\n });\n };\n isArray(arrayOrString) ? define(arrayOrString) : define(String(arrayOrString).split(delimiter));\n return obj;\n};\nconst noop = () => {};\nconst toFiniteNumber = (value, defaultValue) => {\n value = +value;\n return Number.isFinite(value) ? value : defaultValue;\n};\nconst ALPHA = 'abcdefghijklmnopqrstuvwxyz';\nconst DIGIT = '0123456789';\nconst ALPHABET = {\n DIGIT,\n ALPHA,\n ALPHA_DIGIT: ALPHA + ALPHA.toUpperCase() + DIGIT\n};\nconst generateString = (size = 16, alphabet = ALPHABET.ALPHA_DIGIT) => {\n let str = '';\n const {\n length\n } = alphabet;\n while (size--) {\n str += alphabet[Math.random() * length | 0];\n }\n return str;\n};\n\n/**\n * If the thing is a FormData object, return true, otherwise return false.\n *\n * @param {unknown} thing - The thing to check.\n *\n * @returns {boolean}\n */\nfunction isSpecCompliantForm(thing) {\n return !!(thing && isFunction(thing.append) && thing[Symbol.toStringTag] === 'FormData' && thing[Symbol.iterator]);\n}\nconst toJSONObject = obj => {\n const stack = new Array(10);\n const visit = (source, i) => {\n if (isObject(source)) {\n if (stack.indexOf(source) >= 0) {\n return;\n }\n if (!('toJSON' in source)) {\n stack[i] = source;\n const target = isArray(source) ? [] : {};\n forEach(source, (value, key) => {\n const reducedValue = visit(value, i + 1);\n !isUndefined(reducedValue) && (target[key] = reducedValue);\n });\n stack[i] = undefined;\n return target;\n }\n }\n return source;\n };\n return visit(obj, 0);\n};\nconst isAsyncFn = kindOfTest('AsyncFunction');\nconst isThenable = thing => thing && (isObject(thing) || isFunction(thing)) && isFunction(thing.then) && isFunction(thing.catch);\n/* harmony default export */ var utils = ({\n isArray,\n isArrayBuffer,\n isBuffer,\n isFormData,\n isArrayBufferView,\n isString,\n isNumber,\n isBoolean,\n isObject,\n isPlainObject,\n isUndefined,\n isDate,\n isFile,\n isBlob,\n isRegExp,\n isFunction,\n isStream,\n isURLSearchParams,\n isTypedArray,\n isFileList,\n forEach,\n merge,\n extend,\n trim,\n stripBOM,\n inherits,\n toFlatObject,\n kindOf,\n kindOfTest,\n endsWith,\n toArray,\n forEachEntry,\n matchAll,\n isHTMLForm,\n hasOwnProperty: utils_hasOwnProperty,\n hasOwnProp: utils_hasOwnProperty,\n // an alias to avoid ESLint no-prototype-builtins detection\n reduceDescriptors,\n freezeMethods,\n toObjectSet,\n toCamelCase,\n noop,\n toFiniteNumber,\n findKey,\n global: _global,\n isContextDefined,\n ALPHABET,\n generateString,\n isSpecCompliantForm,\n toJSONObject,\n isAsyncFn,\n isThenable\n});\n;// CONCATENATED MODULE: ./node_modules/axios/lib/core/AxiosError.js\n\n\n\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [config] The config.\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n *\n * @returns {Error} The created error.\n */\nfunction AxiosError(message, code, config, request, response) {\n Error.call(this);\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n } else {\n this.stack = new Error().stack;\n }\n this.message = message;\n this.name = 'AxiosError';\n code && (this.code = code);\n config && (this.config = config);\n request && (this.request = request);\n response && (this.response = response);\n}\nutils.inherits(AxiosError, Error, {\n toJSON: function toJSON() {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: utils.toJSONObject(this.config),\n code: this.code,\n status: this.response && this.response.status ? this.response.status : null\n };\n }\n});\nconst AxiosError_prototype = AxiosError.prototype;\nconst descriptors = {};\n['ERR_BAD_OPTION_VALUE', 'ERR_BAD_OPTION', 'ECONNABORTED', 'ETIMEDOUT', 'ERR_NETWORK', 'ERR_FR_TOO_MANY_REDIRECTS', 'ERR_DEPRECATED', 'ERR_BAD_RESPONSE', 'ERR_BAD_REQUEST', 'ERR_CANCELED', 'ERR_NOT_SUPPORT', 'ERR_INVALID_URL'\n// eslint-disable-next-line func-names\n].forEach(code => {\n descriptors[code] = {\n value: code\n };\n});\nObject.defineProperties(AxiosError, descriptors);\nObject.defineProperty(AxiosError_prototype, 'isAxiosError', {\n value: true\n});\n\n// eslint-disable-next-line func-names\nAxiosError.from = (error, code, config, request, response, customProps) => {\n const axiosError = Object.create(AxiosError_prototype);\n utils.toFlatObject(error, axiosError, function filter(obj) {\n return obj !== Error.prototype;\n }, prop => {\n return prop !== 'isAxiosError';\n });\n AxiosError.call(axiosError, error.message, code, config, request, response);\n axiosError.cause = error;\n axiosError.name = error.name;\n customProps && Object.assign(axiosError, customProps);\n return axiosError;\n};\n/* harmony default export */ var core_AxiosError = (AxiosError);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/null.js\n// eslint-disable-next-line strict\n/* harmony default export */ var helpers_null = (null);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/toFormData.js\n\n\n\n\n\n// temporary hotfix to avoid circular references until AxiosURLSearchParams is refactored\n\n\n/**\n * Determines if the given thing is a array or js object.\n *\n * @param {string} thing - The object or array to be visited.\n *\n * @returns {boolean}\n */\nfunction isVisitable(thing) {\n return utils.isPlainObject(thing) || utils.isArray(thing);\n}\n\n/**\n * It removes the brackets from the end of a string\n *\n * @param {string} key - The key of the parameter.\n *\n * @returns {string} the key without the brackets.\n */\nfunction removeBrackets(key) {\n return utils.endsWith(key, '[]') ? key.slice(0, -2) : key;\n}\n\n/**\n * It takes a path, a key, and a boolean, and returns a string\n *\n * @param {string} path - The path to the current key.\n * @param {string} key - The key of the current object being iterated over.\n * @param {string} dots - If true, the key will be rendered with dots instead of brackets.\n *\n * @returns {string} The path to the current key.\n */\nfunction renderKey(path, key, dots) {\n if (!path) return key;\n return path.concat(key).map(function each(token, i) {\n // eslint-disable-next-line no-param-reassign\n token = removeBrackets(token);\n return !dots && i ? '[' + token + ']' : token;\n }).join(dots ? '.' : '');\n}\n\n/**\n * If the array is an array and none of its elements are visitable, then it's a flat array.\n *\n * @param {Array<any>} arr - The array to check\n *\n * @returns {boolean}\n */\nfunction isFlatArray(arr) {\n return utils.isArray(arr) && !arr.some(isVisitable);\n}\nconst predicates = utils.toFlatObject(utils, {}, null, function filter(prop) {\n return /^is[A-Z]/.test(prop);\n});\n\n/**\n * Convert a data object to FormData\n *\n * @param {Object} obj\n * @param {?Object} [formData]\n * @param {?Object} [options]\n * @param {Function} [options.visitor]\n * @param {Boolean} [options.metaTokens = true]\n * @param {Boolean} [options.dots = false]\n * @param {?Boolean} [options.indexes = false]\n *\n * @returns {Object}\n **/\n\n/**\n * It converts an object into a FormData object\n *\n * @param {Object<any, any>} obj - The object to convert to form data.\n * @param {string} formData - The FormData object to append to.\n * @param {Object<string, any>} options\n *\n * @returns\n */\nfunction toFormData(obj, formData, options) {\n if (!utils.isObject(obj)) {\n throw new TypeError('target must be an object');\n }\n\n // eslint-disable-next-line no-param-reassign\n formData = formData || new (helpers_null || FormData)();\n\n // eslint-disable-next-line no-param-reassign\n options = utils.toFlatObject(options, {\n metaTokens: true,\n dots: false,\n indexes: false\n }, false, function defined(option, source) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n return !utils.isUndefined(source[option]);\n });\n const metaTokens = options.metaTokens;\n // eslint-disable-next-line no-use-before-define\n const visitor = options.visitor || defaultVisitor;\n const dots = options.dots;\n const indexes = options.indexes;\n const _Blob = options.Blob || typeof Blob !== 'undefined' && Blob;\n const useBlob = _Blob && utils.isSpecCompliantForm(formData);\n if (!utils.isFunction(visitor)) {\n throw new TypeError('visitor must be a function');\n }\n function convertValue(value) {\n if (value === null) return '';\n if (utils.isDate(value)) {\n return value.toISOString();\n }\n if (!useBlob && utils.isBlob(value)) {\n throw new core_AxiosError('Blob is not supported. Use a Buffer instead.');\n }\n if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) {\n return useBlob && typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);\n }\n return value;\n }\n\n /**\n * Default visitor.\n *\n * @param {*} value\n * @param {String|Number} key\n * @param {Array<String|Number>} path\n * @this {FormData}\n *\n * @returns {boolean} return true to visit the each prop of the value recursively\n */\n function defaultVisitor(value, key, path) {\n let arr = value;\n if (value && !path && typeof value === 'object') {\n if (utils.endsWith(key, '{}')) {\n // eslint-disable-next-line no-param-reassign\n key = metaTokens ? key : key.slice(0, -2);\n // eslint-disable-next-line no-param-reassign\n value = JSON.stringify(value);\n } else if (utils.isArray(value) && isFlatArray(value) || (utils.isFileList(value) || utils.endsWith(key, '[]')) && (arr = utils.toArray(value))) {\n // eslint-disable-next-line no-param-reassign\n key = removeBrackets(key);\n arr.forEach(function each(el, index) {\n !(utils.isUndefined(el) || el === null) && formData.append(\n // eslint-disable-next-line no-nested-ternary\n indexes === true ? renderKey([key], index, dots) : indexes === null ? key : key + '[]', convertValue(el));\n });\n return false;\n }\n }\n if (isVisitable(value)) {\n return true;\n }\n formData.append(renderKey(path, key, dots), convertValue(value));\n return false;\n }\n const stack = [];\n const exposedHelpers = Object.assign(predicates, {\n defaultVisitor,\n convertValue,\n isVisitable\n });\n function build(value, path) {\n if (utils.isUndefined(value)) return;\n if (stack.indexOf(value) !== -1) {\n throw Error('Circular reference detected in ' + path.join('.'));\n }\n stack.push(value);\n utils.forEach(value, function each(el, key) {\n const result = !(utils.isUndefined(el) || el === null) && visitor.call(formData, el, utils.isString(key) ? key.trim() : key, path, exposedHelpers);\n if (result === true) {\n build(el, path ? path.concat(key) : [key]);\n }\n });\n stack.pop();\n }\n if (!utils.isObject(obj)) {\n throw new TypeError('data must be an object');\n }\n build(obj);\n return formData;\n}\n/* harmony default export */ var helpers_toFormData = (toFormData);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/AxiosURLSearchParams.js\n\n\n\n\n\n/**\n * It encodes a string by replacing all characters that are not in the unreserved set with\n * their percent-encoded equivalents\n *\n * @param {string} str - The string to encode.\n *\n * @returns {string} The encoded string.\n */\nfunction encode(str) {\n const charMap = {\n '!': '%21',\n \"'\": '%27',\n '(': '%28',\n ')': '%29',\n '~': '%7E',\n '%20': '+',\n '%00': '\\x00'\n };\n return encodeURIComponent(str).replace(/[!'()~]|%20|%00/g, function replacer(match) {\n return charMap[match];\n });\n}\n\n/**\n * It takes a params object and converts it to a FormData object\n *\n * @param {Object<string, any>} params - The parameters to be converted to a FormData object.\n * @param {Object<string, any>} options - The options object passed to the Axios constructor.\n *\n * @returns {void}\n */\nfunction AxiosURLSearchParams(params, options) {\n this._pairs = [];\n params && helpers_toFormData(params, this, options);\n}\nconst AxiosURLSearchParams_prototype = AxiosURLSearchParams.prototype;\nAxiosURLSearchParams_prototype.append = function append(name, value) {\n this._pairs.push([name, value]);\n};\nAxiosURLSearchParams_prototype.toString = function toString(encoder) {\n const _encode = encoder ? function (value) {\n return encoder.call(this, value, encode);\n } : encode;\n return this._pairs.map(function each(pair) {\n return _encode(pair[0]) + '=' + _encode(pair[1]);\n }, '').join('&');\n};\n/* harmony default export */ var helpers_AxiosURLSearchParams = (AxiosURLSearchParams);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/buildURL.js\n\n\n\n\n\n/**\n * It replaces all instances of the characters `:`, `$`, `,`, `+`, `[`, and `]` with their\n * URI encoded counterparts\n *\n * @param {string} val The value to be encoded.\n *\n * @returns {string} The encoded value.\n */\nfunction buildURL_encode(val) {\n return encodeURIComponent(val).replace(/%3A/gi, ':').replace(/%24/g, '$').replace(/%2C/gi, ',').replace(/%20/g, '+').replace(/%5B/gi, '[').replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @param {?object} options\n *\n * @returns {string} The formatted url\n */\nfunction buildURL(url, params, options) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n const _encode = options && options.encode || buildURL_encode;\n const serializeFn = options && options.serialize;\n let serializedParams;\n if (serializeFn) {\n serializedParams = serializeFn(params, options);\n } else {\n serializedParams = utils.isURLSearchParams(params) ? params.toString() : new helpers_AxiosURLSearchParams(params, options).toString(_encode);\n }\n if (serializedParams) {\n const hashmarkIndex = url.indexOf(\"#\");\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n return url;\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/core/InterceptorManager.js\n\n\n\n\nclass InterceptorManager {\n constructor() {\n this.handlers = [];\n }\n\n /**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\n use(fulfilled, rejected, options) {\n this.handlers.push({\n fulfilled,\n rejected,\n synchronous: options ? options.synchronous : false,\n runWhen: options ? options.runWhen : null\n });\n return this.handlers.length - 1;\n }\n\n /**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n *\n * @returns {Boolean} `true` if the interceptor was removed, `false` otherwise\n */\n eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n }\n\n /**\n * Clear all interceptors from the stack\n *\n * @returns {void}\n */\n clear() {\n if (this.handlers) {\n this.handlers = [];\n }\n }\n\n /**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n *\n * @returns {void}\n */\n forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n }\n}\n/* harmony default export */ var core_InterceptorManager = (InterceptorManager);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/defaults/transitional.js\n\n\n/* harmony default export */ var defaults_transitional = ({\n silentJSONParsing: true,\n forcedJSONParsing: true,\n clarifyTimeoutError: false\n});\n;// CONCATENATED MODULE: ./node_modules/axios/lib/platform/browser/classes/URLSearchParams.js\n\n\n\n\n\n\n/* harmony default export */ var classes_URLSearchParams = (typeof URLSearchParams !== 'undefined' ? URLSearchParams : helpers_AxiosURLSearchParams);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/platform/browser/classes/FormData.js\n\n\n/* harmony default export */ var classes_FormData = (typeof FormData !== 'undefined' ? FormData : null);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/platform/browser/classes/Blob.js\n\n\n/* harmony default export */ var classes_Blob = (typeof Blob !== 'undefined' ? Blob : null);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/platform/browser/index.js\n\n\n\n/* harmony default export */ var browser = ({\n isBrowser: true,\n classes: {\n URLSearchParams: classes_URLSearchParams,\n FormData: classes_FormData,\n Blob: classes_Blob\n },\n protocols: ['http', 'https', 'file', 'blob', 'url', 'data']\n});\n;// CONCATENATED MODULE: ./node_modules/axios/lib/platform/common/utils.js\nconst hasBrowserEnv = typeof window !== 'undefined' && typeof document !== 'undefined';\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n *\n * @returns {boolean}\n */\nconst hasStandardBrowserEnv = (product => {\n return hasBrowserEnv && ['ReactNative', 'NativeScript', 'NS'].indexOf(product) < 0;\n})(typeof navigator !== 'undefined' && navigator.product);\n\n/**\n * Determine if we're running in a standard browser webWorker environment\n *\n * Although the `isStandardBrowserEnv` method indicates that\n * `allows axios to run in a web worker`, the WebWorker will still be\n * filtered out due to its judgment standard\n * `typeof window !== 'undefined' && typeof document !== 'undefined'`.\n * This leads to a problem when axios post `FormData` in webWorker\n */\nconst hasStandardBrowserWebWorkerEnv = (() => {\n return typeof WorkerGlobalScope !== 'undefined' &&\n // eslint-disable-next-line no-undef\n self instanceof WorkerGlobalScope && typeof self.importScripts === 'function';\n})();\n\n;// CONCATENATED MODULE: ./node_modules/axios/lib/platform/index.js\n\n\n/* harmony default export */ var platform = ({\n ...common_utils_namespaceObject,\n ...browser\n});\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/toURLEncodedForm.js\n\n\n\n\n\nfunction toURLEncodedForm(data, options) {\n return helpers_toFormData(data, new platform.classes.URLSearchParams(), Object.assign({\n visitor: function (value, key, path, helpers) {\n if (platform.isNode && utils.isBuffer(value)) {\n this.append(key, value.toString('base64'));\n return false;\n }\n return helpers.defaultVisitor.apply(this, arguments);\n }\n }, options));\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/formDataToJSON.js\n\n\n\n\n/**\n * It takes a string like `foo[x][y][z]` and returns an array like `['foo', 'x', 'y', 'z']\n *\n * @param {string} name - The name of the property to get.\n *\n * @returns An array of strings.\n */\nfunction parsePropPath(name) {\n // foo[x][y][z]\n // foo.x.y.z\n // foo-x-y-z\n // foo x y z\n return utils.matchAll(/\\w+|\\[(\\w*)]/g, name).map(match => {\n return match[0] === '[]' ? '' : match[1] || match[0];\n });\n}\n\n/**\n * Convert an array to an object.\n *\n * @param {Array<any>} arr - The array to convert to an object.\n *\n * @returns An object with the same keys and values as the array.\n */\nfunction arrayToObject(arr) {\n const obj = {};\n const keys = Object.keys(arr);\n let i;\n const len = keys.length;\n let key;\n for (i = 0; i < len; i++) {\n key = keys[i];\n obj[key] = arr[key];\n }\n return obj;\n}\n\n/**\n * It takes a FormData object and returns a JavaScript object\n *\n * @param {string} formData The FormData object to convert to JSON.\n *\n * @returns {Object<string, any> | null} The converted object.\n */\nfunction formDataToJSON(formData) {\n function buildPath(path, value, target, index) {\n let name = path[index++];\n if (name === '__proto__') return true;\n const isNumericKey = Number.isFinite(+name);\n const isLast = index >= path.length;\n name = !name && utils.isArray(target) ? target.length : name;\n if (isLast) {\n if (utils.hasOwnProp(target, name)) {\n target[name] = [target[name], value];\n } else {\n target[name] = value;\n }\n return !isNumericKey;\n }\n if (!target[name] || !utils.isObject(target[name])) {\n target[name] = [];\n }\n const result = buildPath(path, value, target[name], index);\n if (result && utils.isArray(target[name])) {\n target[name] = arrayToObject(target[name]);\n }\n return !isNumericKey;\n }\n if (utils.isFormData(formData) && utils.isFunction(formData.entries)) {\n const obj = {};\n utils.forEachEntry(formData, (name, value) => {\n buildPath(parsePropPath(name), value, obj, 0);\n });\n return obj;\n }\n return null;\n}\n/* harmony default export */ var helpers_formDataToJSON = (formDataToJSON);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/defaults/index.js\n\n\n\n\n\n\n\n\n\n\n/**\n * It takes a string, tries to parse it, and if it fails, it returns the stringified version\n * of the input\n *\n * @param {any} rawValue - The value to be stringified.\n * @param {Function} parser - A function that parses a string into a JavaScript object.\n * @param {Function} encoder - A function that takes a value and returns a string.\n *\n * @returns {string} A stringified version of the rawValue.\n */\nfunction stringifySafely(rawValue, parser, encoder) {\n if (utils.isString(rawValue)) {\n try {\n (parser || JSON.parse)(rawValue);\n return utils.trim(rawValue);\n } catch (e) {\n if (e.name !== 'SyntaxError') {\n throw e;\n }\n }\n }\n return (encoder || JSON.stringify)(rawValue);\n}\nconst defaults = {\n transitional: defaults_transitional,\n adapter: ['xhr', 'http'],\n transformRequest: [function transformRequest(data, headers) {\n const contentType = headers.getContentType() || '';\n const hasJSONContentType = contentType.indexOf('application/json') > -1;\n const isObjectPayload = utils.isObject(data);\n if (isObjectPayload && utils.isHTMLForm(data)) {\n data = new FormData(data);\n }\n const isFormData = utils.isFormData(data);\n if (isFormData) {\n return hasJSONContentType ? JSON.stringify(helpers_formDataToJSON(data)) : data;\n }\n if (utils.isArrayBuffer(data) || utils.isBuffer(data) || utils.isStream(data) || utils.isFile(data) || utils.isBlob(data)) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n headers.setContentType('application/x-www-form-urlencoded;charset=utf-8', false);\n return data.toString();\n }\n let isFileList;\n if (isObjectPayload) {\n if (contentType.indexOf('application/x-www-form-urlencoded') > -1) {\n return toURLEncodedForm(data, this.formSerializer).toString();\n }\n if ((isFileList = utils.isFileList(data)) || contentType.indexOf('multipart/form-data') > -1) {\n const _FormData = this.env && this.env.FormData;\n return helpers_toFormData(isFileList ? {\n 'files[]': data\n } : data, _FormData && new _FormData(), this.formSerializer);\n }\n }\n if (isObjectPayload || hasJSONContentType) {\n headers.setContentType('application/json', false);\n return stringifySafely(data);\n }\n return data;\n }],\n transformResponse: [function transformResponse(data) {\n const transitional = this.transitional || defaults.transitional;\n const forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n const JSONRequested = this.responseType === 'json';\n if (data && utils.isString(data) && (forcedJSONParsing && !this.responseType || JSONRequested)) {\n const silentJSONParsing = transitional && transitional.silentJSONParsing;\n const strictJSONParsing = !silentJSONParsing && JSONRequested;\n try {\n return JSON.parse(data);\n } catch (e) {\n if (strictJSONParsing) {\n if (e.name === 'SyntaxError') {\n throw core_AxiosError.from(e, core_AxiosError.ERR_BAD_RESPONSE, this, null, this.response);\n }\n throw e;\n }\n }\n }\n return data;\n }],\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n maxContentLength: -1,\n maxBodyLength: -1,\n env: {\n FormData: platform.classes.FormData,\n Blob: platform.classes.Blob\n },\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n },\n headers: {\n common: {\n 'Accept': 'application/json, text/plain, */*',\n 'Content-Type': undefined\n }\n }\n};\nutils.forEach(['delete', 'get', 'head', 'post', 'put', 'patch'], method => {\n defaults.headers[method] = {};\n});\n/* harmony default export */ var lib_defaults = (defaults);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/parseHeaders.js\n\n\n\n\n\n// RawAxiosHeaders whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nconst ignoreDuplicateOf = utils.toObjectSet(['age', 'authorization', 'content-length', 'content-type', 'etag', 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since', 'last-modified', 'location', 'max-forwards', 'proxy-authorization', 'referer', 'retry-after', 'user-agent']);\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} rawHeaders Headers needing to be parsed\n *\n * @returns {Object} Headers parsed into an object\n */\n/* harmony default export */ var parseHeaders = (rawHeaders => {\n const parsed = {};\n let key;\n let val;\n let i;\n rawHeaders && rawHeaders.split('\\n').forEach(function parser(line) {\n i = line.indexOf(':');\n key = line.substring(0, i).trim().toLowerCase();\n val = line.substring(i + 1).trim();\n if (!key || parsed[key] && ignoreDuplicateOf[key]) {\n return;\n }\n if (key === 'set-cookie') {\n if (parsed[key]) {\n parsed[key].push(val);\n } else {\n parsed[key] = [val];\n }\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n });\n return parsed;\n});\n;// CONCATENATED MODULE: ./node_modules/axios/lib/core/AxiosHeaders.js\n\n\n\n\nconst $internals = Symbol('internals');\nfunction normalizeHeader(header) {\n return header && String(header).trim().toLowerCase();\n}\nfunction normalizeValue(value) {\n if (value === false || value == null) {\n return value;\n }\n return utils.isArray(value) ? value.map(normalizeValue) : String(value);\n}\nfunction parseTokens(str) {\n const tokens = Object.create(null);\n const tokensRE = /([^\\s,;=]+)\\s*(?:=\\s*([^,;]+))?/g;\n let match;\n while (match = tokensRE.exec(str)) {\n tokens[match[1]] = match[2];\n }\n return tokens;\n}\nconst isValidHeaderName = str => /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(str.trim());\nfunction matchHeaderValue(context, value, header, filter, isHeaderNameFilter) {\n if (utils.isFunction(filter)) {\n return filter.call(this, value, header);\n }\n if (isHeaderNameFilter) {\n value = header;\n }\n if (!utils.isString(value)) return;\n if (utils.isString(filter)) {\n return value.indexOf(filter) !== -1;\n }\n if (utils.isRegExp(filter)) {\n return filter.test(value);\n }\n}\nfunction formatHeader(header) {\n return header.trim().toLowerCase().replace(/([a-z\\d])(\\w*)/g, (w, char, str) => {\n return char.toUpperCase() + str;\n });\n}\nfunction buildAccessors(obj, header) {\n const accessorName = utils.toCamelCase(' ' + header);\n ['get', 'set', 'has'].forEach(methodName => {\n Object.defineProperty(obj, methodName + accessorName, {\n value: function (arg1, arg2, arg3) {\n return this[methodName].call(this, header, arg1, arg2, arg3);\n },\n configurable: true\n });\n });\n}\nclass AxiosHeaders {\n constructor(headers) {\n headers && this.set(headers);\n }\n set(header, valueOrRewrite, rewrite) {\n const self = this;\n function setHeader(_value, _header, _rewrite) {\n const lHeader = normalizeHeader(_header);\n if (!lHeader) {\n throw new Error('header name must be a non-empty string');\n }\n const key = utils.findKey(self, lHeader);\n if (!key || self[key] === undefined || _rewrite === true || _rewrite === undefined && self[key] !== false) {\n self[key || _header] = normalizeValue(_value);\n }\n }\n const setHeaders = (headers, _rewrite) => utils.forEach(headers, (_value, _header) => setHeader(_value, _header, _rewrite));\n if (utils.isPlainObject(header) || header instanceof this.constructor) {\n setHeaders(header, valueOrRewrite);\n } else if (utils.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) {\n setHeaders(parseHeaders(header), valueOrRewrite);\n } else {\n header != null && setHeader(valueOrRewrite, header, rewrite);\n }\n return this;\n }\n get(header, parser) {\n header = normalizeHeader(header);\n if (header) {\n const key = utils.findKey(this, header);\n if (key) {\n const value = this[key];\n if (!parser) {\n return value;\n }\n if (parser === true) {\n return parseTokens(value);\n }\n if (utils.isFunction(parser)) {\n return parser.call(this, value, key);\n }\n if (utils.isRegExp(parser)) {\n return parser.exec(value);\n }\n throw new TypeError('parser must be boolean|regexp|function');\n }\n }\n }\n has(header, matcher) {\n header = normalizeHeader(header);\n if (header) {\n const key = utils.findKey(this, header);\n return !!(key && this[key] !== undefined && (!matcher || matchHeaderValue(this, this[key], key, matcher)));\n }\n return false;\n }\n delete(header, matcher) {\n const self = this;\n let deleted = false;\n function deleteHeader(_header) {\n _header = normalizeHeader(_header);\n if (_header) {\n const key = utils.findKey(self, _header);\n if (key && (!matcher || matchHeaderValue(self, self[key], key, matcher))) {\n delete self[key];\n deleted = true;\n }\n }\n }\n if (utils.isArray(header)) {\n header.forEach(deleteHeader);\n } else {\n deleteHeader(header);\n }\n return deleted;\n }\n clear(matcher) {\n const keys = Object.keys(this);\n let i = keys.length;\n let deleted = false;\n while (i--) {\n const key = keys[i];\n if (!matcher || matchHeaderValue(this, this[key], key, matcher, true)) {\n delete this[key];\n deleted = true;\n }\n }\n return deleted;\n }\n normalize(format) {\n const self = this;\n const headers = {};\n utils.forEach(this, (value, header) => {\n const key = utils.findKey(headers, header);\n if (key) {\n self[key] = normalizeValue(value);\n delete self[header];\n return;\n }\n const normalized = format ? formatHeader(header) : String(header).trim();\n if (normalized !== header) {\n delete self[header];\n }\n self[normalized] = normalizeValue(value);\n headers[normalized] = true;\n });\n return this;\n }\n concat(...targets) {\n return this.constructor.concat(this, ...targets);\n }\n toJSON(asStrings) {\n const obj = Object.create(null);\n utils.forEach(this, (value, header) => {\n value != null && value !== false && (obj[header] = asStrings && utils.isArray(value) ? value.join(', ') : value);\n });\n return obj;\n }\n [Symbol.iterator]() {\n return Object.entries(this.toJSON())[Symbol.iterator]();\n }\n toString() {\n return Object.entries(this.toJSON()).map(([header, value]) => header + ': ' + value).join('\\n');\n }\n get [Symbol.toStringTag]() {\n return 'AxiosHeaders';\n }\n static from(thing) {\n return thing instanceof this ? thing : new this(thing);\n }\n static concat(first, ...targets) {\n const computed = new this(first);\n targets.forEach(target => computed.set(target));\n return computed;\n }\n static accessor(header) {\n const internals = this[$internals] = this[$internals] = {\n accessors: {}\n };\n const accessors = internals.accessors;\n const prototype = this.prototype;\n function defineAccessor(_header) {\n const lHeader = normalizeHeader(_header);\n if (!accessors[lHeader]) {\n buildAccessors(prototype, _header);\n accessors[lHeader] = true;\n }\n }\n utils.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header);\n return this;\n }\n}\nAxiosHeaders.accessor(['Content-Type', 'Content-Length', 'Accept', 'Accept-Encoding', 'User-Agent', 'Authorization']);\n\n// reserved names hotfix\nutils.reduceDescriptors(AxiosHeaders.prototype, ({\n value\n}, key) => {\n let mapped = key[0].toUpperCase() + key.slice(1); // map `set` => `Set`\n return {\n get: () => value,\n set(headerValue) {\n this[mapped] = headerValue;\n }\n };\n});\nutils.freezeMethods(AxiosHeaders);\n/* harmony default export */ var core_AxiosHeaders = (AxiosHeaders);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/core/transformData.js\n\n\n\n\n\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Array|Function} fns A single function or Array of functions\n * @param {?Object} response The response object\n *\n * @returns {*} The resulting transformed data\n */\nfunction transformData(fns, response) {\n const config = this || lib_defaults;\n const context = response || config;\n const headers = core_AxiosHeaders.from(context.headers);\n let data = context.data;\n utils.forEach(fns, function transform(fn) {\n data = fn.call(config, data, headers.normalize(), response ? response.status : undefined);\n });\n headers.normalize();\n return data;\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/cancel/isCancel.js\n\n\nfunction isCancel(value) {\n return !!(value && value.__CANCEL__);\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/cancel/CanceledError.js\n\n\n\n\n\n/**\n * A `CanceledError` is an object that is thrown when an operation is canceled.\n *\n * @param {string=} message The message.\n * @param {Object=} config The config.\n * @param {Object=} request The request.\n *\n * @returns {CanceledError} The created error.\n */\nfunction CanceledError(message, config, request) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n core_AxiosError.call(this, message == null ? 'canceled' : message, core_AxiosError.ERR_CANCELED, config, request);\n this.name = 'CanceledError';\n}\nutils.inherits(CanceledError, core_AxiosError, {\n __CANCEL__: true\n});\n/* harmony default export */ var cancel_CanceledError = (CanceledError);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/web.dom-exception.stack.js\nvar web_dom_exception_stack = __webpack_require__(4979);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/core/settle.js\n\n\n\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n *\n * @returns {object} The response.\n */\nfunction settle(resolve, reject, response) {\n const validateStatus = response.config.validateStatus;\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(new core_AxiosError('Request failed with status code ' + response.status, [core_AxiosError.ERR_BAD_REQUEST, core_AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4], response.config, response.request, response));\n }\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/cookies.js\n\n\n\n/* harmony default export */ var cookies = (platform.hasStandardBrowserEnv ?\n// Standard browser envs support document.cookie\n{\n write(name, value, expires, path, domain, secure) {\n const cookie = [name + '=' + encodeURIComponent(value)];\n utils.isNumber(expires) && cookie.push('expires=' + new Date(expires).toGMTString());\n utils.isString(path) && cookie.push('path=' + path);\n utils.isString(domain) && cookie.push('domain=' + domain);\n secure === true && cookie.push('secure');\n document.cookie = cookie.join('; ');\n },\n read(name) {\n const match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return match ? decodeURIComponent(match[3]) : null;\n },\n remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n} :\n// Non-standard browser env (web workers, react-native) lack needed support.\n{\n write() {},\n read() {\n return null;\n },\n remove() {}\n});\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/isAbsoluteURL.js\n\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n *\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nfunction isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"<scheme>://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/combineURLs.js\n\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n *\n * @returns {string} The combined URL\n */\nfunction combineURLs(baseURL, relativeURL) {\n return relativeURL ? baseURL.replace(/\\/?\\/$/, '') + '/' + relativeURL.replace(/^\\/+/, '') : baseURL;\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/core/buildFullPath.js\n\n\n\n\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n *\n * @returns {string} The combined full path\n */\nfunction buildFullPath(baseURL, requestedURL) {\n if (baseURL && !isAbsoluteURL(requestedURL)) {\n return combineURLs(baseURL, requestedURL);\n }\n return requestedURL;\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/isURLSameOrigin.js\n\n\n\n\n/* harmony default export */ var isURLSameOrigin = (platform.hasStandardBrowserEnv ?\n// Standard browser envs have full support of the APIs needed to test\n// whether the request URL is of the same origin as current location.\nfunction standardBrowserEnv() {\n const msie = /(msie|trident)/i.test(navigator.userAgent);\n const urlParsingNode = document.createElement('a');\n let originURL;\n\n /**\n * Parse a URL to discover its components\n *\n * @param {String} url The URL to be parsed\n * @returns {Object}\n */\n function resolveURL(url) {\n let href = url;\n if (msie) {\n // IE needs attribute set twice to normalize properties\n urlParsingNode.setAttribute('href', href);\n href = urlParsingNode.href;\n }\n urlParsingNode.setAttribute('href', href);\n\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n return {\n href: urlParsingNode.href,\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n host: urlParsingNode.host,\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n hostname: urlParsingNode.hostname,\n port: urlParsingNode.port,\n pathname: urlParsingNode.pathname.charAt(0) === '/' ? urlParsingNode.pathname : '/' + urlParsingNode.pathname\n };\n }\n originURL = resolveURL(window.location.href);\n\n /**\n * Determine if a URL shares the same origin as the current location\n *\n * @param {String} requestURL The URL to test\n * @returns {boolean} True if URL shares the same origin, otherwise false\n */\n return function isURLSameOrigin(requestURL) {\n const parsed = utils.isString(requestURL) ? resolveURL(requestURL) : requestURL;\n return parsed.protocol === originURL.protocol && parsed.host === originURL.host;\n };\n}() :\n// Non standard browser envs (web workers, react-native) lack needed support.\nfunction nonStandardBrowserEnv() {\n return function isURLSameOrigin() {\n return true;\n };\n}());\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/parseProtocol.js\n\n\nfunction parseProtocol(url) {\n const match = /^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(url);\n return match && match[1] || '';\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/speedometer.js\n\n\n/**\n * Calculate data maxRate\n * @param {Number} [samplesCount= 10]\n * @param {Number} [min= 1000]\n * @returns {Function}\n */\nfunction speedometer(samplesCount, min) {\n samplesCount = samplesCount || 10;\n const bytes = new Array(samplesCount);\n const timestamps = new Array(samplesCount);\n let head = 0;\n let tail = 0;\n let firstSampleTS;\n min = min !== undefined ? min : 1000;\n return function push(chunkLength) {\n const now = Date.now();\n const startedAt = timestamps[tail];\n if (!firstSampleTS) {\n firstSampleTS = now;\n }\n bytes[head] = chunkLength;\n timestamps[head] = now;\n let i = tail;\n let bytesCount = 0;\n while (i !== head) {\n bytesCount += bytes[i++];\n i = i % samplesCount;\n }\n head = (head + 1) % samplesCount;\n if (head === tail) {\n tail = (tail + 1) % samplesCount;\n }\n if (now - firstSampleTS < min) {\n return;\n }\n const passed = startedAt && now - startedAt;\n return passed ? Math.round(bytesCount * 1000 / passed) : undefined;\n };\n}\n/* harmony default export */ var helpers_speedometer = (speedometer);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/adapters/xhr.js\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction progressEventReducer(listener, isDownloadStream) {\n let bytesNotified = 0;\n const _speedometer = helpers_speedometer(50, 250);\n return e => {\n const loaded = e.loaded;\n const total = e.lengthComputable ? e.total : undefined;\n const progressBytes = loaded - bytesNotified;\n const rate = _speedometer(progressBytes);\n const inRange = loaded <= total;\n bytesNotified = loaded;\n const data = {\n loaded,\n total,\n progress: total ? loaded / total : undefined,\n bytes: progressBytes,\n rate: rate ? rate : undefined,\n estimated: rate && total && inRange ? (total - loaded) / rate : undefined,\n event: e\n };\n data[isDownloadStream ? 'download' : 'upload'] = true;\n listener(data);\n };\n}\nconst isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined';\n/* harmony default export */ var xhr = (isXHRAdapterSupported && function (config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n let requestData = config.data;\n const requestHeaders = core_AxiosHeaders.from(config.headers).normalize();\n let {\n responseType,\n withXSRFToken\n } = config;\n let onCanceled;\n function done() {\n if (config.cancelToken) {\n config.cancelToken.unsubscribe(onCanceled);\n }\n if (config.signal) {\n config.signal.removeEventListener('abort', onCanceled);\n }\n }\n let contentType;\n if (utils.isFormData(requestData)) {\n if (platform.hasStandardBrowserEnv || platform.hasStandardBrowserWebWorkerEnv) {\n requestHeaders.setContentType(false); // Let the browser set it\n } else if ((contentType = requestHeaders.getContentType()) !== false) {\n // fix semicolon duplication issue for ReactNative FormData implementation\n const [type, ...tokens] = contentType ? contentType.split(';').map(token => token.trim()).filter(Boolean) : [];\n requestHeaders.setContentType([type || 'multipart/form-data', ...tokens].join('; '));\n }\n }\n let request = new XMLHttpRequest();\n\n // HTTP basic authentication\n if (config.auth) {\n const username = config.auth.username || '';\n const password = config.auth.password ? unescape(encodeURIComponent(config.auth.password)) : '';\n requestHeaders.set('Authorization', 'Basic ' + btoa(username + ':' + password));\n }\n const fullPath = buildFullPath(config.baseURL, config.url);\n request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true);\n\n // Set the request timeout in MS\n request.timeout = config.timeout;\n function onloadend() {\n if (!request) {\n return;\n }\n // Prepare the response\n const responseHeaders = core_AxiosHeaders.from('getAllResponseHeaders' in request && request.getAllResponseHeaders());\n const responseData = !responseType || responseType === 'text' || responseType === 'json' ? request.responseText : request.response;\n const response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config,\n request\n };\n settle(function _resolve(value) {\n resolve(value);\n done();\n }, function _reject(err) {\n reject(err);\n done();\n }, response);\n\n // Clean up request\n request = null;\n }\n if ('onloadend' in request) {\n // Use onloadend if available\n request.onloadend = onloadend;\n } else {\n // Listen for ready state to emulate onloadend\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n // readystate handler is calling before onerror or ontimeout handlers,\n // so we should call onloadend on the next 'tick'\n setTimeout(onloadend);\n };\n }\n\n // Handle browser request cancellation (as opposed to a manual cancellation)\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n reject(new core_AxiosError('Request aborted', core_AxiosError.ECONNABORTED, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(new core_AxiosError('Network Error', core_AxiosError.ERR_NETWORK, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n let timeoutErrorMessage = config.timeout ? 'timeout of ' + config.timeout + 'ms exceeded' : 'timeout exceeded';\n const transitional = config.transitional || defaults_transitional;\n if (config.timeoutErrorMessage) {\n timeoutErrorMessage = config.timeoutErrorMessage;\n }\n reject(new core_AxiosError(timeoutErrorMessage, transitional.clarifyTimeoutError ? core_AxiosError.ETIMEDOUT : core_AxiosError.ECONNABORTED, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n if (platform.hasStandardBrowserEnv) {\n withXSRFToken && utils.isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(config));\n if (withXSRFToken || withXSRFToken !== false && isURLSameOrigin(fullPath)) {\n // Add xsrf header\n const xsrfValue = config.xsrfHeaderName && config.xsrfCookieName && cookies.read(config.xsrfCookieName);\n if (xsrfValue) {\n requestHeaders.set(config.xsrfHeaderName, xsrfValue);\n }\n }\n }\n\n // Remove Content-Type if data is undefined\n requestData === undefined && requestHeaders.setContentType(null);\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders.toJSON(), function setRequestHeader(val, key) {\n request.setRequestHeader(key, val);\n });\n }\n\n // Add withCredentials to request if needed\n if (!utils.isUndefined(config.withCredentials)) {\n request.withCredentials = !!config.withCredentials;\n }\n\n // Add responseType to request if needed\n if (responseType && responseType !== 'json') {\n request.responseType = config.responseType;\n }\n\n // Handle progress if needed\n if (typeof config.onDownloadProgress === 'function') {\n request.addEventListener('progress', progressEventReducer(config.onDownloadProgress, true));\n }\n\n // Not all browsers support upload events\n if (typeof config.onUploadProgress === 'function' && request.upload) {\n request.upload.addEventListener('progress', progressEventReducer(config.onUploadProgress));\n }\n if (config.cancelToken || config.signal) {\n // Handle cancellation\n // eslint-disable-next-line func-names\n onCanceled = cancel => {\n if (!request) {\n return;\n }\n reject(!cancel || cancel.type ? new cancel_CanceledError(null, config, request) : cancel);\n request.abort();\n request = null;\n };\n config.cancelToken && config.cancelToken.subscribe(onCanceled);\n if (config.signal) {\n config.signal.aborted ? onCanceled() : config.signal.addEventListener('abort', onCanceled);\n }\n }\n const protocol = parseProtocol(fullPath);\n if (protocol && platform.protocols.indexOf(protocol) === -1) {\n reject(new core_AxiosError('Unsupported protocol ' + protocol + ':', core_AxiosError.ERR_BAD_REQUEST, config));\n return;\n }\n\n // Send the request\n request.send(requestData || null);\n });\n});\n;// CONCATENATED MODULE: ./node_modules/axios/lib/adapters/adapters.js\n\n\n\n\nconst knownAdapters = {\n http: helpers_null,\n xhr: xhr\n};\nutils.forEach(knownAdapters, (fn, value) => {\n if (fn) {\n try {\n Object.defineProperty(fn, 'name', {\n value\n });\n } catch (e) {\n // eslint-disable-next-line no-empty\n }\n Object.defineProperty(fn, 'adapterName', {\n value\n });\n }\n});\nconst renderReason = reason => `- ${reason}`;\nconst isResolvedHandle = adapter => utils.isFunction(adapter) || adapter === null || adapter === false;\n/* harmony default export */ var adapters = ({\n getAdapter: adapters => {\n adapters = utils.isArray(adapters) ? adapters : [adapters];\n const {\n length\n } = adapters;\n let nameOrAdapter;\n let adapter;\n const rejectedReasons = {};\n for (let i = 0; i < length; i++) {\n nameOrAdapter = adapters[i];\n let id;\n adapter = nameOrAdapter;\n if (!isResolvedHandle(nameOrAdapter)) {\n adapter = knownAdapters[(id = String(nameOrAdapter)).toLowerCase()];\n if (adapter === undefined) {\n throw new core_AxiosError(`Unknown adapter '${id}'`);\n }\n }\n if (adapter) {\n break;\n }\n rejectedReasons[id || '#' + i] = adapter;\n }\n if (!adapter) {\n const reasons = Object.entries(rejectedReasons).map(([id, state]) => `adapter ${id} ` + (state === false ? 'is not supported by the environment' : 'is not available in the build'));\n let s = length ? reasons.length > 1 ? 'since :\\n' + reasons.map(renderReason).join('\\n') : ' ' + renderReason(reasons[0]) : 'as no adapter specified';\n throw new core_AxiosError(`There is no suitable adapter to dispatch the request ` + s, 'ERR_NOT_SUPPORT');\n }\n return adapter;\n },\n adapters: knownAdapters\n});\n;// CONCATENATED MODULE: ./node_modules/axios/lib/core/dispatchRequest.js\n\n\n\n\n\n\n\n\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n *\n * @param {Object} config The config that is to be used for the request\n *\n * @returns {void}\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n if (config.signal && config.signal.aborted) {\n throw new cancel_CanceledError(null, config);\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n *\n * @returns {Promise} The Promise to be fulfilled\n */\nfunction dispatchRequest(config) {\n throwIfCancellationRequested(config);\n config.headers = core_AxiosHeaders.from(config.headers);\n\n // Transform request data\n config.data = transformData.call(config, config.transformRequest);\n if (['post', 'put', 'patch'].indexOf(config.method) !== -1) {\n config.headers.setContentType('application/x-www-form-urlencoded', false);\n }\n const adapter = adapters.getAdapter(config.adapter || lib_defaults.adapter);\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData.call(config, config.transformResponse, response);\n response.headers = core_AxiosHeaders.from(response.headers);\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData.call(config, config.transformResponse, reason.response);\n reason.response.headers = core_AxiosHeaders.from(reason.response.headers);\n }\n }\n return Promise.reject(reason);\n });\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/core/mergeConfig.js\n\n\n\n\nconst headersToObject = thing => thing instanceof core_AxiosHeaders ? thing.toJSON() : thing;\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n *\n * @returns {Object} New object resulting from merging config2 to config1\n */\nfunction mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n const config = {};\n function getMergedValue(target, source, caseless) {\n if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n return utils.merge.call({\n caseless\n }, target, source);\n } else if (utils.isPlainObject(source)) {\n return utils.merge({}, source);\n } else if (utils.isArray(source)) {\n return source.slice();\n }\n return source;\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDeepProperties(a, b, caseless) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(a, b, caseless);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a, caseless);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function valueFromConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function defaultToConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDirectKeys(a, b, prop) {\n if (prop in config2) {\n return getMergedValue(a, b);\n } else if (prop in config1) {\n return getMergedValue(undefined, a);\n }\n }\n const mergeMap = {\n url: valueFromConfig2,\n method: valueFromConfig2,\n data: valueFromConfig2,\n baseURL: defaultToConfig2,\n transformRequest: defaultToConfig2,\n transformResponse: defaultToConfig2,\n paramsSerializer: defaultToConfig2,\n timeout: defaultToConfig2,\n timeoutMessage: defaultToConfig2,\n withCredentials: defaultToConfig2,\n withXSRFToken: defaultToConfig2,\n adapter: defaultToConfig2,\n responseType: defaultToConfig2,\n xsrfCookieName: defaultToConfig2,\n xsrfHeaderName: defaultToConfig2,\n onUploadProgress: defaultToConfig2,\n onDownloadProgress: defaultToConfig2,\n decompress: defaultToConfig2,\n maxContentLength: defaultToConfig2,\n maxBodyLength: defaultToConfig2,\n beforeRedirect: defaultToConfig2,\n transport: defaultToConfig2,\n httpAgent: defaultToConfig2,\n httpsAgent: defaultToConfig2,\n cancelToken: defaultToConfig2,\n socketPath: defaultToConfig2,\n responseEncoding: defaultToConfig2,\n validateStatus: mergeDirectKeys,\n headers: (a, b) => mergeDeepProperties(headersToObject(a), headersToObject(b), true)\n };\n utils.forEach(Object.keys(Object.assign({}, config1, config2)), function computeConfigValue(prop) {\n const merge = mergeMap[prop] || mergeDeepProperties;\n const configValue = merge(config1[prop], config2[prop], prop);\n utils.isUndefined(configValue) && merge !== mergeDirectKeys || (config[prop] = configValue);\n });\n return config;\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/env/data.js\nconst VERSION = \"1.6.7\";\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/validator.js\n\n\n\n\nconst validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach((type, i) => {\n validators[type] = function validator(thing) {\n return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n };\n});\nconst deprecatedWarnings = {};\n\n/**\n * Transitional option validator\n *\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\n * @param {string?} version - deprecated version / removed since version\n * @param {string?} message - some message with additional info\n *\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n function formatMessage(opt, desc) {\n return '[Axios v' + VERSION + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\n }\n\n // eslint-disable-next-line func-names\n return (value, opt, opts) => {\n if (validator === false) {\n throw new core_AxiosError(formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')), core_AxiosError.ERR_DEPRECATED);\n }\n if (version && !deprecatedWarnings[opt]) {\n deprecatedWarnings[opt] = true;\n // eslint-disable-next-line no-console\n console.warn(formatMessage(opt, ' has been deprecated since v' + version + ' and will be removed in the near future'));\n }\n return validator ? validator(value, opt, opts) : true;\n };\n};\n\n/**\n * Assert object's properties type\n *\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n *\n * @returns {object}\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n if (typeof options !== 'object') {\n throw new core_AxiosError('options must be an object', core_AxiosError.ERR_BAD_OPTION_VALUE);\n }\n const keys = Object.keys(options);\n let i = keys.length;\n while (i-- > 0) {\n const opt = keys[i];\n const validator = schema[opt];\n if (validator) {\n const value = options[opt];\n const result = value === undefined || validator(value, opt, options);\n if (result !== true) {\n throw new core_AxiosError('option ' + opt + ' must be ' + result, core_AxiosError.ERR_BAD_OPTION_VALUE);\n }\n continue;\n }\n if (allowUnknown !== true) {\n throw new core_AxiosError('Unknown option ' + opt, core_AxiosError.ERR_BAD_OPTION);\n }\n }\n}\n/* harmony default export */ var validator = ({\n assertOptions,\n validators\n});\n;// CONCATENATED MODULE: ./node_modules/axios/lib/core/Axios.js\n\n\n\n\n\n\n\n\n\n\n\nconst Axios_validators = validator.validators;\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n *\n * @return {Axios} A new instance of Axios\n */\nclass Axios {\n constructor(instanceConfig) {\n this.defaults = instanceConfig;\n this.interceptors = {\n request: new core_InterceptorManager(),\n response: new core_InterceptorManager()\n };\n }\n\n /**\n * Dispatch a request\n *\n * @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults)\n * @param {?Object} config\n *\n * @returns {Promise} The Promise to be fulfilled\n */\n async request(configOrUrl, config) {\n try {\n return await this._request(configOrUrl, config);\n } catch (err) {\n if (err instanceof Error) {\n let dummy;\n Error.captureStackTrace ? Error.captureStackTrace(dummy = {}) : dummy = new Error();\n\n // slice off the Error: ... line\n const stack = dummy.stack ? dummy.stack.replace(/^.+\\n/, '') : '';\n if (!err.stack) {\n err.stack = stack;\n // match without the 2 top stack lines\n } else if (stack && !String(err.stack).endsWith(stack.replace(/^.+\\n.+\\n/, ''))) {\n err.stack += '\\n' + stack;\n }\n }\n throw err;\n }\n }\n _request(configOrUrl, config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof configOrUrl === 'string') {\n config = config || {};\n config.url = configOrUrl;\n } else {\n config = configOrUrl || {};\n }\n config = mergeConfig(this.defaults, config);\n const {\n transitional,\n paramsSerializer,\n headers\n } = config;\n if (transitional !== undefined) {\n validator.assertOptions(transitional, {\n silentJSONParsing: Axios_validators.transitional(Axios_validators.boolean),\n forcedJSONParsing: Axios_validators.transitional(Axios_validators.boolean),\n clarifyTimeoutError: Axios_validators.transitional(Axios_validators.boolean)\n }, false);\n }\n if (paramsSerializer != null) {\n if (utils.isFunction(paramsSerializer)) {\n config.paramsSerializer = {\n serialize: paramsSerializer\n };\n } else {\n validator.assertOptions(paramsSerializer, {\n encode: Axios_validators.function,\n serialize: Axios_validators.function\n }, true);\n }\n }\n\n // Set config.method\n config.method = (config.method || this.defaults.method || 'get').toLowerCase();\n\n // Flatten headers\n let contextHeaders = headers && utils.merge(headers.common, headers[config.method]);\n headers && utils.forEach(['delete', 'get', 'head', 'post', 'put', 'patch', 'common'], method => {\n delete headers[method];\n });\n config.headers = core_AxiosHeaders.concat(contextHeaders, headers);\n\n // filter out skipped interceptors\n const requestInterceptorChain = [];\n let synchronousRequestInterceptors = true;\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n return;\n }\n synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n const responseInterceptorChain = [];\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n });\n let promise;\n let i = 0;\n let len;\n if (!synchronousRequestInterceptors) {\n const chain = [dispatchRequest.bind(this), undefined];\n chain.unshift.apply(chain, requestInterceptorChain);\n chain.push.apply(chain, responseInterceptorChain);\n len = chain.length;\n promise = Promise.resolve(config);\n while (i < len) {\n promise = promise.then(chain[i++], chain[i++]);\n }\n return promise;\n }\n len = requestInterceptorChain.length;\n let newConfig = config;\n i = 0;\n while (i < len) {\n const onFulfilled = requestInterceptorChain[i++];\n const onRejected = requestInterceptorChain[i++];\n try {\n newConfig = onFulfilled(newConfig);\n } catch (error) {\n onRejected.call(this, error);\n break;\n }\n }\n try {\n promise = dispatchRequest.call(this, newConfig);\n } catch (error) {\n return Promise.reject(error);\n }\n i = 0;\n len = responseInterceptorChain.length;\n while (i < len) {\n promise = promise.then(responseInterceptorChain[i++], responseInterceptorChain[i++]);\n }\n return promise;\n }\n getUri(config) {\n config = mergeConfig(this.defaults, config);\n const fullPath = buildFullPath(config.baseURL, config.url);\n return buildURL(fullPath, config.params, config.paramsSerializer);\n }\n}\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function (url, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n url,\n data: (config || {}).data\n }));\n };\n});\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n\n function generateHTTPMethod(isForm) {\n return function httpMethod(url, data, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n headers: isForm ? {\n 'Content-Type': 'multipart/form-data'\n } : {},\n url,\n data\n }));\n };\n }\n Axios.prototype[method] = generateHTTPMethod();\n Axios.prototype[method + 'Form'] = generateHTTPMethod(true);\n});\n/* harmony default export */ var core_Axios = (Axios);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/cancel/CancelToken.js\n\n\n\n\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @param {Function} executor The executor function.\n *\n * @returns {CancelToken}\n */\nclass CancelToken {\n constructor(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n let resolvePromise;\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n const token = this;\n\n // eslint-disable-next-line func-names\n this.promise.then(cancel => {\n if (!token._listeners) return;\n let i = token._listeners.length;\n while (i-- > 0) {\n token._listeners[i](cancel);\n }\n token._listeners = null;\n });\n\n // eslint-disable-next-line func-names\n this.promise.then = onfulfilled => {\n let _resolve;\n // eslint-disable-next-line func-names\n const promise = new Promise(resolve => {\n token.subscribe(resolve);\n _resolve = resolve;\n }).then(onfulfilled);\n promise.cancel = function reject() {\n token.unsubscribe(_resolve);\n };\n return promise;\n };\n executor(function cancel(message, config, request) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n token.reason = new cancel_CanceledError(message, config, request);\n resolvePromise(token.reason);\n });\n }\n\n /**\n * Throws a `CanceledError` if cancellation has been requested.\n */\n throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n }\n\n /**\n * Subscribe to the cancel signal\n */\n\n subscribe(listener) {\n if (this.reason) {\n listener(this.reason);\n return;\n }\n if (this._listeners) {\n this._listeners.push(listener);\n } else {\n this._listeners = [listener];\n }\n }\n\n /**\n * Unsubscribe from the cancel signal\n */\n\n unsubscribe(listener) {\n if (!this._listeners) {\n return;\n }\n const index = this._listeners.indexOf(listener);\n if (index !== -1) {\n this._listeners.splice(index, 1);\n }\n }\n\n /**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\n static source() {\n let cancel;\n const token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token,\n cancel\n };\n }\n}\n/* harmony default export */ var cancel_CancelToken = (CancelToken);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/spread.js\n\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n *\n * @returns {Function}\n */\nfunction spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/isAxiosError.js\n\n\n\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n *\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nfunction isAxiosError(payload) {\n return utils.isObject(payload) && payload.isAxiosError === true;\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/HttpStatusCode.js\nconst HttpStatusCode = {\n Continue: 100,\n SwitchingProtocols: 101,\n Processing: 102,\n EarlyHints: 103,\n Ok: 200,\n Created: 201,\n Accepted: 202,\n NonAuthoritativeInformation: 203,\n NoContent: 204,\n ResetContent: 205,\n PartialContent: 206,\n MultiStatus: 207,\n AlreadyReported: 208,\n ImUsed: 226,\n MultipleChoices: 300,\n MovedPermanently: 301,\n Found: 302,\n SeeOther: 303,\n NotModified: 304,\n UseProxy: 305,\n Unused: 306,\n TemporaryRedirect: 307,\n PermanentRedirect: 308,\n BadRequest: 400,\n Unauthorized: 401,\n PaymentRequired: 402,\n Forbidden: 403,\n NotFound: 404,\n MethodNotAllowed: 405,\n NotAcceptable: 406,\n ProxyAuthenticationRequired: 407,\n RequestTimeout: 408,\n Conflict: 409,\n Gone: 410,\n LengthRequired: 411,\n PreconditionFailed: 412,\n PayloadTooLarge: 413,\n UriTooLong: 414,\n UnsupportedMediaType: 415,\n RangeNotSatisfiable: 416,\n ExpectationFailed: 417,\n ImATeapot: 418,\n MisdirectedRequest: 421,\n UnprocessableEntity: 422,\n Locked: 423,\n FailedDependency: 424,\n TooEarly: 425,\n UpgradeRequired: 426,\n PreconditionRequired: 428,\n TooManyRequests: 429,\n RequestHeaderFieldsTooLarge: 431,\n UnavailableForLegalReasons: 451,\n InternalServerError: 500,\n NotImplemented: 501,\n BadGateway: 502,\n ServiceUnavailable: 503,\n GatewayTimeout: 504,\n HttpVersionNotSupported: 505,\n VariantAlsoNegotiates: 506,\n InsufficientStorage: 507,\n LoopDetected: 508,\n NotExtended: 510,\n NetworkAuthenticationRequired: 511\n};\nObject.entries(HttpStatusCode).forEach(([key, value]) => {\n HttpStatusCode[value] = key;\n});\n/* harmony default export */ var helpers_HttpStatusCode = (HttpStatusCode);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/axios.js\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n *\n * @returns {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n const context = new core_Axios(defaultConfig);\n const instance = bind(core_Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, core_Axios.prototype, context, {\n allOwnKeys: true\n });\n\n // Copy context to instance\n utils.extend(instance, context, null, {\n allOwnKeys: true\n });\n\n // Factory for creating new instances\n instance.create = function create(instanceConfig) {\n return createInstance(mergeConfig(defaultConfig, instanceConfig));\n };\n return instance;\n}\n\n// Create the default instance to be exported\nconst axios = createInstance(lib_defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = core_Axios;\n\n// Expose Cancel & CancelToken\naxios.CanceledError = cancel_CanceledError;\naxios.CancelToken = cancel_CancelToken;\naxios.isCancel = isCancel;\naxios.VERSION = VERSION;\naxios.toFormData = helpers_toFormData;\n\n// Expose AxiosError class\naxios.AxiosError = core_AxiosError;\n\n// alias for CanceledError for backward compatibility\naxios.Cancel = axios.CanceledError;\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\naxios.spread = spread;\n\n// Expose isAxiosError\naxios.isAxiosError = isAxiosError;\n\n// Expose mergeConfig\naxios.mergeConfig = mergeConfig;\naxios.AxiosHeaders = core_AxiosHeaders;\naxios.formToJSON = thing => helpers_formDataToJSON(utils.isHTMLForm(thing) ? new FormData(thing) : thing);\naxios.getAdapter = adapters.getAdapter;\naxios.HttpStatusCode = helpers_HttpStatusCode;\naxios.default = axios;\n\n// this module should only have a default export\n/* harmony default export */ var lib_axios = (axios);\n;// CONCATENATED MODULE: ./src/components/http/index.js\n\n\n\n\n\n\n\n\n\nvar _axios = /*#__PURE__*/new WeakMap();\nvar _requestCount = /*#__PURE__*/new WeakMap();\nvar _loadingInstance = /*#__PURE__*/new WeakMap();\nvar _config = /*#__PURE__*/new WeakMap();\nclass http_Http {\n constructor(options) {\n _classPrivateFieldInitSpec(this, _axios, void 0);\n _classPrivateFieldInitSpec(this, _requestCount, 0);\n // 请求次数\n _classPrivateFieldInitSpec(this, _loadingInstance, null);\n _classPrivateFieldInitSpec(this, _config, {\n baseURL: '',\n timeout: 60 * 1000,\n withCredentials: false,\n successCode: 200,\n errorCode: 500,\n callBackCode: [],\n call: null\n });\n for (const k in _classPrivateFieldGet2(_config, this)) {\n if (options[k]) {\n _classPrivateFieldGet2(_config, this)[k] = options[k];\n }\n }\n lib_axios.defaults.headers['Content-Type'] = 'application/json;charset=UTF-8';\n lib_axios.defaults.headers['Accept'] = 'application/json';\n _classPrivateFieldSet2(_axios, this, lib_axios.create(_classPrivateFieldGet2(_config, this)));\n _classPrivateFieldGet2(_axios, this).interceptors.request.use(config => {\n var _this$requestCount, _this$requestCount2;\n if (!config.params) {\n config.params = {};\n }\n if (_classPrivateFieldGet2(_requestCount, this) == 0) {\n _classPrivateFieldSet2(_loadingInstance, this, loading());\n }\n _classPrivateFieldSet2(_requestCount, this, (_this$requestCount = _classPrivateFieldGet2(_requestCount, this), _this$requestCount2 = _this$requestCount++, _this$requestCount)), _this$requestCount2;\n config.headers.authorization = localStorage.getItem('token');\n return config;\n }, error => {\n return Promise.reject(error);\n });\n _classPrivateFieldGet2(_axios, this).interceptors.response.use(response => {\n var _this$requestCount3, _this$requestCount4;\n _classPrivateFieldSet2(_requestCount, this, (_this$requestCount3 = _classPrivateFieldGet2(_requestCount, this), _this$requestCount4 = _this$requestCount3--, _this$requestCount3)), _this$requestCount4;\n if (_classPrivateFieldGet2(_requestCount, this) === 0) {\n _classPrivateFieldGet2(_loadingInstance, this).close();\n }\n return response.data;\n }, error => {\n var _this$requestCount5, _this$requestCount6;\n _classPrivateFieldSet2(_requestCount, this, (_this$requestCount5 = _classPrivateFieldGet2(_requestCount, this), _this$requestCount6 = _this$requestCount5--, _this$requestCount5)), _this$requestCount6;\n if (_classPrivateFieldGet2(_requestCount, this) === 0) {\n _classPrivateFieldGet2(_loadingInstance, this).close();\n }\n return Promise.reject(error);\n });\n }\n _handleResult(success, err, res) {\n if (!res) {\n return;\n }\n if (res.code === _classPrivateFieldGet2(_config, this).successCode) {\n if (typeof success === 'function') {\n success(res);\n }\n } else if (res.code === _classPrivateFieldGet2(_config, this).errorCode) {\n if (typeof err === 'function') {\n err(res);\n } else {\n error(res.msg);\n }\n } else if (_classPrivateFieldGet2(_config, this).callBackCode.includes(res.code) && typeof _classPrivateFieldGet2(_config, this).call === 'function') {\n _classPrivateFieldGet2(_config, this).call(res);\n }\n }\n post(url, params, success, err) {\n _classPrivateFieldGet2(_axios, this).post(url, params).then(res => {\n this._handleResult(success, err, res);\n });\n }\n update(url, params, success, err) {\n _classPrivateFieldGet2(_axios, this).update(url, params).then(res => {\n this._handleResult(success, err, res);\n });\n }\n get(url, params, success, err) {\n _classPrivateFieldGet2(_axios, this).get(url, {\n params: params\n }).then(res => {\n this._handleResult(success, err, res);\n });\n }\n delete(url, params, success, err) {\n _classPrivateFieldGet2(_axios, this).delete(url, {\n params: params\n }).then(res => {\n this._handleResult(success, err, res);\n });\n }\n downLoad(url, params = {}) {\n _classPrivateFieldGet2(_axios, this).post(url, params, {\n 'responseType': 'blob'\n }).then(res => {\n if (res) {\n let fileName = params.fileName;\n if (!fileName) {\n fileName = res.headers['content-disposition'].split('filename=')[1].replace(/\"/g, '');\n }\n const blob = new Blob([res.data], {\n type: 'application/octet-stream;charset=UTF-8'\n });\n const link = document.createElement('a');\n link.style.display = 'none';\n link.href = window.URL.createObjectURL(blob);\n link.download = decodeURIComponent(fileName);\n link.click();\n window.URL.revokeObjectURL(link.href);\n }\n });\n }\n}\n;// CONCATENATED MODULE: ./src/components/index.js\n__webpack_require__(5506);\n\n\n\n\n\n\nconst coms = [Index, page_table_Index, dialog_Index, card_Index, tree_Index];\nconst install = function (Vue) {\n coms.forEach(com => {\n Vue.component(com.name, com);\n });\n};\n\n// 导出组件\n/* harmony default export */ var components = (install);\nclass Http extends http_Http {\n constructor(options) {\n super(options);\n }\n}\n;// CONCATENATED MODULE: ./node_modules/@vue/cli-service/lib/commands/build/entry-lib.js\n\n\n/* harmony default export */ var entry_lib = (components);\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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NnVCLEdBQUcsQ0FBQ0MsZUFBZSxDQUFDSixJQUFJLENBQUM7UUFDNUNDLElBQUksQ0FBQ0ksUUFBUSxHQUFHdlQsa0JBQWtCLENBQUMxTCxRQUFRLENBQUM7UUFDNUM2ZSxJQUFJLENBQUNuckIsS0FBSyxDQUFDLENBQUM7UUFDWnhELE1BQU0sQ0FBQzZ1QixHQUFHLENBQUNHLGVBQWUsQ0FBQ0wsSUFBSSxDQUFDblMsSUFBSSxDQUFDO01BQ3RDO0lBQ0ssQ0FBQyxDQUFDO0VBQ047QUFDSixDOztBQ3ZIQXlTLG1CQUFPLENBQUMsSUFBb0IsQ0FBQztBQUNtQjtBQUNEO0FBQ1A7QUFDSjtBQUNBO0FBQ0E7QUFDcEMsTUFBTU8sSUFBSSxHQUFHLENBQUNOLEtBQVUsRUFBRUMsZ0JBQVMsRUFBRUMsWUFBTSxFQUFFQyxVQUFJLEVBQUVDLFVBQUksQ0FBQztBQUN4RCxNQUFNRyxPQUFPLEdBQUcsU0FBQUEsQ0FBU253QixHQUFHLEVBQUM7RUFDekJrd0IsSUFBSSxDQUFDL3RCLE9BQU8sQ0FBQ2l1QixHQUFHLElBQUk7SUFDaEJwd0IsR0FBRyxDQUFDcXdCLFNBQVMsQ0FBQ0QsR0FBRyxDQUFDeDNCLElBQUksRUFBRXczQixHQUFHLENBQUM7RUFDaEMsQ0FBQyxDQUFDO0FBQ04sQ0FBQzs7QUFFRDtBQUNBLCtDQUFlRCxPQUFPLEVBQUM7QUFFaEIsTUFBTW5DLElBQUksU0FBU2lDLFNBQUs7RUFDM0Jub0IsV0FBV0EsQ0FBQ2lLLE9BQU8sRUFBQztJQUNoQixLQUFLLENBQUNBLE9BQU8sQ0FBQztFQUNsQjtBQUNKLEM7O0FDckJ3QjtBQUNBO0FBQ3hCLDhDQUFlLFVBQUc7QUFDSSIsInNvdXJjZXMiOlsid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vbm9kZV9tb2R1bGVzL0B2dWUvY2xpLXNlcnZpY2UvbGliL2NvbW1hbmRzL2J1aWxkL3NldFB1YmxpY1BhdGguanM/NjljYiIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL3NyYy9jb21wb25lbnRzL3BhZ2luYXRpb24vSW5kZXgudnVlPzI3MzMiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13Ymkvc3JjL2NvbXBvbmVudHMvcGFnaW5hdGlvbi9JbmRleC52dWU/M2M1ZSIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL3NyYy9jb21wb25lbnRzL3BhZ2luYXRpb24vSW5kZXgudnVlP2Y5NmUiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9zcmMvY29tcG9uZW50cy9wYWdpbmF0aW9uL0luZGV4LnZ1ZT9mMTViIiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vc3JjL2NvbXBvbmVudHMvcGFnaW5hdGlvbi9JbmRleC52dWU/YzE1ZSIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL25vZGVfbW9kdWxlcy9AdnVlL3Z1ZS1sb2FkZXItdjE1L2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanM/MmY4NSIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL3NyYy9jb21wb25lbnRzL3BhZ2luYXRpb24vSW5kZXgudnVlP2ZiMWQiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9zcmMvY29tcG9uZW50cy9wYWdlLXRhYmxlL0luZGV4LnZ1ZT8wOGJhIiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpL3NyYy9jb21wb25lbnRzL3BhZ2UtdGFibGUvSW5kZXgudnVlPzVkMDMiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9zcmMvY29tcG9uZW50cy9wYWdlLXRhYmxlL0luZGV4LnZ1ZT9jZWU5Iiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vc3JjL2NvbXBvbmVudHMvcGFnZS10YWJsZS9JbmRleC52dWU/OTIxNiIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL3NyYy9jb21wb25lbnRzL3BhZ2UtdGFibGUvSW5kZXgudnVlPzVjNDIiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9zcmMvY29tcG9uZW50cy9wYWdlLXRhYmxlL0luZGV4LnZ1ZT8zOGEwIiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vc3JjL2NvbXBvbmVudHMvZGlhbG9nL0luZGV4LnZ1ZT8wZTcxIiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vc3JjL2NvbXBvbmVudHMvZGlhbG9nL2RpYWxvZy1kcmFnLmpzPzVlYmQiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13Ymkvc3JjL2NvbXBvbmVudHMvZGlhbG9nL0luZGV4LnZ1ZT80ZGI2Iiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vc3JjL2NvbXBvbmVudHMvZGlhbG9nL0luZGV4LnZ1ZT9mZmM5Iiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vc3JjL2NvbXBvbmVudHMvZGlhbG9nL0luZGV4LnZ1ZT8xNDBkIiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vc3JjL2NvbXBvbmVudHMvZGlhbG9nL0luZGV4LnZ1ZT9lODY3Iiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vc3JjL2NvbXBvbmVudHMvZGlhbG9nL0luZGV4LnZ1ZT82MTE4Iiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vc3JjL2NvbXBvbmVudHMvY2FyZC9JbmRleC52dWU/ZTdmYSIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS9zcmMvY29tcG9uZW50cy9jYXJkL0luZGV4LnZ1ZT9jMWZiIiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vc3JjL2NvbXBvbmVudHMvY2FyZC9JbmRleC52dWU/ZGEyMSIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL3NyYy9jb21wb25lbnRzL2NhcmQvSW5kZXgudnVlPzU3MjUiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9zcmMvY29tcG9uZW50cy9jYXJkL0luZGV4LnZ1ZT9iNGFiIiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vc3JjL2NvbXBvbmVudHMvY2FyZC9JbmRleC52dWU/ZjMzNSIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL3NyYy9jb21wb25lbnRzL3RyZWUvSW5kZXgudnVlPzkwOWMiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9zcmMvY29tcG9uZW50cy90cmVlL3RyZWUuanM/NDJjNiIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS9zcmMvY29tcG9uZW50cy90cmVlL0luZGV4LnZ1ZT9iZjY2Iiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vc3JjL2NvbXBvbmVudHMvdHJlZS9JbmRleC52dWU/YmRlYiIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL3NyYy9jb21wb25lbnRzL3RyZWUvSW5kZXgudnVlP2E2NTgiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9zcmMvY29tcG9uZW50cy90cmVlL0luZGV4LnZ1ZT85MTBhIiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vc3JjL2NvbXBvbmVudHMvdHJlZS9JbmRleC52dWU/N2EwMSIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jaGVja1ByaXZhdGVSZWRlY2xhcmF0aW9uLmpzP2I4NWYiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYy5qcz9jZmRhIiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2Fzc2VydENsYXNzQnJhbmQuanM/MTlmOCIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jbGFzc1ByaXZhdGVGaWVsZFNldDIuanM/NDRiZiIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jbGFzc1ByaXZhdGVGaWVsZEdldDIuanM/OTI5ZSIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9iaW5kLmpzPzRiZWEiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3V0aWxzLmpzP2M5ZWIiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvQXhpb3NFcnJvci5qcz8yMDI3Iiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL251bGwuanM/MWE5NCIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy90b0Zvcm1EYXRhLmpzPzliYTMiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvQXhpb3NVUkxTZWFyY2hQYXJhbXMuanM/OTNlMiIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9idWlsZFVSTC5qcz9jMTc4Iiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL0ludGVyY2VwdG9yTWFuYWdlci5qcz9jNzkyIiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9kZWZhdWx0cy90cmFuc2l0aW9uYWwuanM/MjdhNCIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvcGxhdGZvcm0vYnJvd3Nlci9jbGFzc2VzL1VSTFNlYXJjaFBhcmFtcy5qcz9hMGVkIiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9wbGF0Zm9ybS9icm93c2VyL2NsYXNzZXMvRm9ybURhdGEuanM/MWRiOSIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvcGxhdGZvcm0vYnJvd3Nlci9jbGFzc2VzL0Jsb2IuanM/NmQ3OCIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvcGxhdGZvcm0vYnJvd3Nlci9pbmRleC5qcz9iMmU0Iiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9wbGF0Zm9ybS9jb21tb24vdXRpbHMuanM/YmY4YyIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvcGxhdGZvcm0vaW5kZXguanM/NzhmMSIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy90b1VSTEVuY29kZWRGb3JtLmpzPzhmZTkiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvZm9ybURhdGFUb0pTT04uanM/ZjQzNyIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvZGVmYXVsdHMvaW5kZXguanM/ZmYxMCIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9wYXJzZUhlYWRlcnMuanM/NTRlOSIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9BeGlvc0hlYWRlcnMuanM/OTU5NyIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS90cmFuc2Zvcm1EYXRhLmpzPzc2NjIiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NhbmNlbC9pc0NhbmNlbC5qcz9jMTdhIiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jYW5jZWwvQ2FuY2VsZWRFcnJvci5qcz82OGE0Iiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL3NldHRsZS5qcz84NzY4Iiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2Nvb2tpZXMuanM/MWQzZiIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9pc0Fic29sdXRlVVJMLmpzP2EyMjciLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvY29tYmluZVVSTHMuanM/NmJjNiIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9idWlsZEZ1bGxQYXRoLmpzP2YwMmQiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvaXNVUkxTYW1lT3JpZ2luLmpzPzg3OTUiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvcGFyc2VQcm90b2NvbC5qcz85ZmFjIiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3NwZWVkb21ldGVyLmpzPzU5YzAiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2FkYXB0ZXJzL3hoci5qcz8xYTVjIiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9hZGFwdGVycy9hZGFwdGVycy5qcz83ODI1Iiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL2Rpc3BhdGNoUmVxdWVzdC5qcz80ZGM5Iiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL21lcmdlQ29uZmlnLmpzP2JkMTMiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2Vudi9kYXRhLmpzPzExMGYiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvdmFsaWRhdG9yLmpzPzAxMzIiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvQXhpb3MuanM/MjlmYiIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY2FuY2VsL0NhbmNlbFRva2VuLmpzPzcyYzgiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvc3ByZWFkLmpzPzI3MjkiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvaXNBeGlvc0Vycm9yLmpzP2JkOWQiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvSHR0cFN0YXR1c0NvZGUuanM/YzZmMyIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvYXhpb3MuanM/ZmFkNiIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL3NyYy9jb21wb25lbnRzL2h0dHAvaW5kZXguanM/Y2M2YSIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL3NyYy9jb21wb25lbnRzL2luZGV4LmpzPzE1NjgiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9ub2RlX21vZHVsZXMvQHZ1ZS9jbGktc2VydmljZS9saWIvY29tbWFuZHMvYnVpbGQvZW50cnktbGliLmpzPzhhOTciXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tdmFyICovXG4vLyBUaGlzIGZpbGUgaXMgaW1wb3J0ZWQgaW50byBsaWIvd2MgY2xpZW50IGJ1bmRsZXMuXG5cbmlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICB2YXIgY3VycmVudFNjcmlwdCA9IHdpbmRvdy5kb2N1bWVudC5jdXJyZW50U2NyaXB0XG4gIGlmIChwcm9jZXNzLmVudi5ORUVEX0NVUlJFTlRTQ1JJUFRfUE9MWUZJTEwpIHtcbiAgICB2YXIgZ2V0Q3VycmVudFNjcmlwdCA9IHJlcXVpcmUoJ0Bzb2RhL2dldC1jdXJyZW50LXNjcmlwdCcpXG4gICAgY3VycmVudFNjcmlwdCA9IGdldEN1cnJlbnRTY3JpcHQoKVxuXG4gICAgLy8gZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIGJlY2F1c2UgcHJldmlvdXNseSB3ZSBkaXJlY3RseSBpbmNsdWRlZCB0aGUgcG9seWZpbGxcbiAgICBpZiAoISgnY3VycmVudFNjcmlwdCcgaW4gZG9jdW1lbnQpKSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZG9jdW1lbnQsICdjdXJyZW50U2NyaXB0JywgeyBnZXQ6IGdldEN1cnJlbnRTY3JpcHQgfSlcbiAgICB9XG4gIH1cblxuICB2YXIgc3JjID0gY3VycmVudFNjcmlwdCAmJiBjdXJyZW50U2NyaXB0LnNyYy5tYXRjaCgvKC4rXFwvKVteL10rXFwuanMoXFw/LiopPyQvKVxuICBpZiAoc3JjKSB7XG4gICAgX193ZWJwYWNrX3B1YmxpY19wYXRoX18gPSBzcmNbMV0gLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICB9XG59XG5cbi8vIEluZGljYXRlIHRvIHdlYnBhY2sgdGhhdCB0aGlzIGZpbGUgY2FuIGJlIGNvbmNhdGVuYXRlZFxuZXhwb3J0IGRlZmF1bHQgbnVsbFxuIiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpe3ZhciBfdm09dGhpcyxfYz1fdm0uX3NlbGYuX2M7cmV0dXJuIChfdm0udG90YWw+MCk/X2MoJ2RpdicsW19jKCdlbC1wYWdpbmF0aW9uJyxfdm0uX2Ioe2F0dHJzOntcImJhY2tncm91bmRcIjpcIlwiLFwiY3VycmVudC1wYWdlXCI6X3ZtLmN1cnJlbnRQYWdlLFwicGFnZS1zaXplXCI6X3ZtLnBhZ2VTaXplLFwicGFnZS1zaXplc1wiOl92bS5wYWdlU2l6ZXMsXCJ0b3RhbFwiOl92bS50b3RhbCxcImxheW91dFwiOlwicHJldiwgcGFnZXIsIG5leHRcIn0sb246e1wic2l6ZS1jaGFuZ2VcIjpfdm0uaGFuZGxlU2l6ZUNoYW5nZSxcImN1cnJlbnQtY2hhbmdlXCI6X3ZtLmhhbmRsZUN1cnJlbnRDaGFuZ2V9fSwnZWwtcGFnaW5hdGlvbicsX3ZtLiRhdHRycyxmYWxzZSkpXSwxKTpfdm0uX2UoKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCI8dGVtcGxhdGU+XHJcbiAgICA8ZGl2IHYtaWY9XCJ0b3RhbD4wXCI+XHJcbiAgICAgICAgPGVsLXBhZ2luYXRpb25cclxuICAgICAgICAgICAgYmFja2dyb3VuZCBcclxuICAgICAgICAgICAgOmN1cnJlbnQtcGFnZT1cImN1cnJlbnRQYWdlXCJcclxuICAgICAgICAgICAgOnBhZ2Utc2l6ZT1cInBhZ2VTaXplXCJcclxuICAgICAgICAgICAgOnBhZ2Utc2l6ZXM9XCJwYWdlU2l6ZXNcIlxyXG4gICAgICAgICAgICA6dG90YWw9XCJ0b3RhbFwiXHJcbiAgICAgICAgICAgIGxheW91dD1cInByZXYsIHBhZ2VyLCBuZXh0XCJcclxuICAgICAgICAgICAgdi1iaW5kPVwiJGF0dHJzXCJcclxuICAgICAgICAgICAgQHNpemUtY2hhbmdlPVwiaGFuZGxlU2l6ZUNoYW5nZVwiXHJcbiAgICAgICAgICAgIEBjdXJyZW50LWNoYW5nZT1cImhhbmRsZUN1cnJlbnRDaGFuZ2VcIlxyXG4gICAgICAgIC8+XHJcbiAgICA8L2Rpdj5cclxuPC90ZW1wbGF0ZT5cclxuXHJcbjxzY3JpcHQ+XHJcbiAgICBleHBvcnQgZGVmYXVsdCB7XHJcbiAgICAgICAgbmFtZTogJ1BhZ2luYXRpb24nLFxyXG4gICAgICAgIHByb3BzOiB7XHJcbiAgICAgICAgICAgIHRvdGFsOiB7XHJcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIHR5cGU6IE51bWJlcixcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IDBcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgcGFnZToge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogTnVtYmVyLFxyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDogMVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBsaW1pdDoge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogTnVtYmVyLFxyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDogMjBcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgcGFnZVNpemVzOiB7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiBBcnJheSxcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsxMCwgMTUsIDIwLCAzMCwgNTBdXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfSxcclxuICAgICAgICBjb21wdXRlZDoge1xyXG4gICAgICAgICAgICBjdXJyZW50UGFnZToge1xyXG4gICAgICAgICAgICAgICAgZ2V0KCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBhZ2VcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBzZXQodmFsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOnBhZ2UnLCB2YWwpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHBhZ2VTaXplOiB7XHJcbiAgICAgICAgICAgICAgICBnZXQoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubGltaXRcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBzZXQodmFsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOmxpbWl0JywgdmFsKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB0b3RhbENvdW50OiB7XHJcbiAgICAgICAgICAgICAgICBnZXQoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudG90YWxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBzZXQodmFsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOnRvdGFsJywgdmFsKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBtZXRob2RzOiB7XHJcbiAgICAgICAgICAgIGhhbmRsZVNpemVDaGFuZ2UodmFsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLiRlbWl0KCdwYWdpbmF0aW9uJywgeyBwYWdlOiB0aGlzLmN1cnJlbnRQYWdlLCBsaW1pdDogdmFsIH0pXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGhhbmRsZUN1cnJlbnRDaGFuZ2UodmFsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLiRlbWl0KCdwYWdpbmF0aW9uJywgeyBwYWdlOiB2YWwsIGxpbWl0OiB0aGlzLnBhZ2VTaXplIH0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbjwvc2NyaXB0PlxyXG5cclxuPHN0eWxlIGxhbmc9XCJzY3NzXCIgc2NvcGVkPlxyXG4uZWwtcGFnaW5hdGlvbntcclxuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICAgIG1hcmdpbi10b3A6IDIwcHg7XHJcbn1cclxuPC9zdHlsZT4iLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uLy4uL25vZGVfbW9kdWxlcy90aHJlYWQtbG9hZGVyL2Rpc3QvY2pzLmpzIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTgyLnVzZVsxXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvQHZ1ZS92dWUtbG9hZGVyLXYxNS9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL0luZGV4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qc1wiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uL25vZGVfbW9kdWxlcy90aHJlYWQtbG9hZGVyL2Rpc3QvY2pzLmpzIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTgyLnVzZVsxXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvQHZ1ZS92dWUtbG9hZGVyLXYxNS9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL0luZGV4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qc1wiIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQge307IiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pbmktY3NzLWV4dHJhY3QtcGx1Z2luL2Rpc3QvbG9hZGVyLmpzPz9jbG9uZWRSdWxlU2V0LTY0LnVzZVswXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcz8/Y2xvbmVkUnVsZVNldC02NC51c2VbMV0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0B2dWUvdnVlLWxvYWRlci12MTUvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9wb3N0Y3NzLWxvYWRlci9kaXN0L2Nqcy5qcz8/Y2xvbmVkUnVsZVNldC02NC51c2VbMl0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9jbG9uZWRSdWxlU2V0LTY0LnVzZVszXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvQHZ1ZS92dWUtbG9hZGVyLXYxNS9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL0luZGV4LnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPTI2YjcwZmI0JnByb2QmbGFuZz1zY3NzJnNjb3BlZD10cnVlXCIiLCIvKiBnbG9iYWxzIF9fVlVFX1NTUl9DT05URVhUX18gKi9cblxuLy8gSU1QT1JUQU5UOiBEbyBOT1QgdXNlIEVTMjAxNSBmZWF0dXJlcyBpbiB0aGlzIGZpbGUgKGV4Y2VwdCBmb3IgbW9kdWxlcykuXG4vLyBUaGlzIG1vZHVsZSBpcyBhIHJ1bnRpbWUgdXRpbGl0eSBmb3IgY2xlYW5lciBjb21wb25lbnQgbW9kdWxlIG91dHB1dCBhbmQgd2lsbFxuLy8gYmUgaW5jbHVkZWQgaW4gdGhlIGZpbmFsIHdlYnBhY2sgdXNlciBidW5kbGUuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgc2NyaXB0RXhwb3J0cyxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZ1bmN0aW9uYWxUZW1wbGF0ZSxcbiAgaW5qZWN0U3R5bGVzLFxuICBzY29wZUlkLFxuICBtb2R1bGVJZGVudGlmaWVyIC8qIHNlcnZlciBvbmx5ICovLFxuICBzaGFkb3dNb2RlIC8qIHZ1ZS1jbGkgb25seSAqL1xuKSB7XG4gIC8vIFZ1ZS5leHRlbmQgY29uc3RydWN0b3IgZXhwb3J0IGludGVyb3BcbiAgdmFyIG9wdGlvbnMgPVxuICAgIHR5cGVvZiBzY3JpcHRFeHBvcnRzID09PSAnZnVuY3Rpb24nID8gc2NyaXB0RXhwb3J0cy5vcHRpb25zIDogc2NyaXB0RXhwb3J0c1xuXG4gIC8vIHJlbmRlciBmdW5jdGlvbnNcbiAgaWYgKHJlbmRlcikge1xuICAgIG9wdGlvbnMucmVuZGVyID0gcmVuZGVyXG4gICAgb3B0aW9ucy5zdGF0aWNSZW5kZXJGbnMgPSBzdGF0aWNSZW5kZXJGbnNcbiAgICBvcHRpb25zLl9jb21waWxlZCA9IHRydWVcbiAgfVxuXG4gIC8vIGZ1bmN0aW9uYWwgdGVtcGxhdGVcbiAgaWYgKGZ1bmN0aW9uYWxUZW1wbGF0ZSkge1xuICAgIG9wdGlvbnMuZnVuY3Rpb25hbCA9IHRydWVcbiAgfVxuXG4gIC8vIHNjb3BlZElkXG4gIGlmIChzY29wZUlkKSB7XG4gICAgb3B0aW9ucy5fc2NvcGVJZCA9ICdkYXRhLXYtJyArIHNjb3BlSWRcbiAgfVxuXG4gIHZhciBob29rXG4gIGlmIChtb2R1bGVJZGVudGlmaWVyKSB7XG4gICAgLy8gc2VydmVyIGJ1aWxkXG4gICAgaG9vayA9IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gICAgICAvLyAyLjMgaW5qZWN0aW9uXG4gICAgICBjb250ZXh0ID1cbiAgICAgICAgY29udGV4dCB8fCAvLyBjYWNoZWQgY2FsbFxuICAgICAgICAodGhpcy4kdm5vZGUgJiYgdGhpcy4kdm5vZGUuc3NyQ29udGV4dCkgfHwgLy8gc3RhdGVmdWxcbiAgICAgICAgKHRoaXMucGFyZW50ICYmIHRoaXMucGFyZW50LiR2bm9kZSAmJiB0aGlzLnBhcmVudC4kdm5vZGUuc3NyQ29udGV4dCkgLy8gZnVuY3Rpb25hbFxuICAgICAgLy8gMi4yIHdpdGggcnVuSW5OZXdDb250ZXh0OiB0cnVlXG4gICAgICBpZiAoIWNvbnRleHQgJiYgdHlwZW9mIF9fVlVFX1NTUl9DT05URVhUX18gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGNvbnRleHQgPSBfX1ZVRV9TU1JfQ09OVEVYVF9fXG4gICAgICB9XG4gICAgICAvLyBpbmplY3QgY29tcG9uZW50IHN0eWxlc1xuICAgICAgaWYgKGluamVjdFN0eWxlcykge1xuICAgICAgICBpbmplY3RTdHlsZXMuY2FsbCh0aGlzLCBjb250ZXh0KVxuICAgICAgfVxuICAgICAgLy8gcmVnaXN0ZXIgY29tcG9uZW50IG1vZHVsZSBpZGVudGlmaWVyIGZvciBhc3luYyBjaHVuayBpbmZlcnJlbmNlXG4gICAgICBpZiAoY29udGV4dCAmJiBjb250ZXh0Ll9yZWdpc3RlcmVkQ29tcG9uZW50cykge1xuICAgICAgICBjb250ZXh0Ll9yZWdpc3RlcmVkQ29tcG9uZW50cy5hZGQobW9kdWxlSWRlbnRpZmllcilcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gdXNlZCBieSBzc3IgaW4gY2FzZSBjb21wb25lbnQgaXMgY2FjaGVkIGFuZCBiZWZvcmVDcmVhdGVcbiAgICAvLyBuZXZlciBnZXRzIGNhbGxlZFxuICAgIG9wdGlvbnMuX3NzclJlZ2lzdGVyID0gaG9va1xuICB9IGVsc2UgaWYgKGluamVjdFN0eWxlcykge1xuICAgIGhvb2sgPSBzaGFkb3dNb2RlXG4gICAgICA/IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpbmplY3RTdHlsZXMuY2FsbChcbiAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICAob3B0aW9ucy5mdW5jdGlvbmFsID8gdGhpcy5wYXJlbnQgOiB0aGlzKS4kcm9vdC4kb3B0aW9ucy5zaGFkb3dSb290XG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICA6IGluamVjdFN0eWxlc1xuICB9XG5cbiAgaWYgKGhvb2spIHtcbiAgICBpZiAob3B0aW9ucy5mdW5jdGlvbmFsKSB7XG4gICAgICAvLyBmb3IgdGVtcGxhdGUtb25seSBob3QtcmVsb2FkIGJlY2F1c2UgaW4gdGhhdCBjYXNlIHRoZSByZW5kZXIgZm4gZG9lc24ndFxuICAgICAgLy8gZ28gdGhyb3VnaCB0aGUgbm9ybWFsaXplclxuICAgICAgb3B0aW9ucy5faW5qZWN0U3R5bGVzID0gaG9va1xuICAgICAgLy8gcmVnaXN0ZXIgZm9yIGZ1bmN0aW9uYWwgY29tcG9uZW50IGluIHZ1ZSBmaWxlXG4gICAgICB2YXIgb3JpZ2luYWxSZW5kZXIgPSBvcHRpb25zLnJlbmRlclxuICAgICAgb3B0aW9ucy5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXJXaXRoU3R5bGVJbmplY3Rpb24oaCwgY29udGV4dCkge1xuICAgICAgICBob29rLmNhbGwoY29udGV4dClcbiAgICAgICAgcmV0dXJuIG9yaWdpbmFsUmVuZGVyKGgsIGNvbnRleHQpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGluamVjdCBjb21wb25lbnQgcmVnaXN0cmF0aW9uIGFzIGJlZm9yZUNyZWF0ZSBob29rXG4gICAgICB2YXIgZXhpc3RpbmcgPSBvcHRpb25zLmJlZm9yZUNyZWF0ZVxuICAgICAgb3B0aW9ucy5iZWZvcmVDcmVhdGUgPSBleGlzdGluZyA/IFtdLmNvbmNhdChleGlzdGluZywgaG9vaykgOiBbaG9va11cbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGV4cG9ydHM6IHNjcmlwdEV4cG9ydHMsXG4gICAgb3B0aW9uczogb3B0aW9uc1xuICB9XG59XG4iLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL0luZGV4LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yNmI3MGZiNCZzY29wZWQ9dHJ1ZVwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL0luZGV4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qc1wiXG5leHBvcnQgKiBmcm9tIFwiLi9JbmRleC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anNcIlxuaW1wb3J0IHN0eWxlMCBmcm9tIFwiLi9JbmRleC52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZpZD0yNmI3MGZiNCZwcm9kJmxhbmc9c2NzcyZzY29wZWQ9dHJ1ZVwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi8uLi9ub2RlX21vZHVsZXMvQHZ1ZS92dWUtbG9hZGVyLXYxNS9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgXCIyNmI3MGZiNFwiLFxuICBudWxsXG4gIFxuKVxuXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsInZhciByZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKXt2YXIgX3ZtPXRoaXMsX2M9X3ZtLl9zZWxmLl9jO3JldHVybiBfYygnZGl2Jyx7c3RhdGljQ2xhc3M6XCJwYWdlLXRhYmxlXCIsYXR0cnM6e1wiaWRcIjp0aGlzLnRhYmxlSWR9fSxbX2MoJ2Rpdicse3N0YXRpY0NsYXNzOlwidGFibGVcIn0sW19jKCdlbC1zY3JvbGxiYXInLHtzdGF0aWNTdHlsZTp7XCJoZWlnaHRcIjpcIjEwMCVcIn19LFtfYygnZWwtdGFibGUnLF92bS5fYih7cmVmOl92bS50YWJsZUlkLGF0dHJzOntcInN0cmlwZVwiOlwiXCIsXCJkYXRhXCI6X3ZtLmxpc3QsXCJyb3cta2V5XCI6X3ZtLnJvd0tleSxcImxvYWRcIjpfdm0ubG9hZCxcImhpZ2hsaWdodC1jdXJyZW50LXJvd1wiOl92bS5obGlnaHRDdXJyZW50Um93LFwiZGVmYXVsdC1leHBhbmQtYWxsXCI6X3ZtLmRlZmF1bHRFeHBhbmRBbGx9LG9uOntcInNlbGVjdFwiOl92bS5oYW5kZWxTZWxlY3Rpb25DaGFuZ2UsXCJzZWxlY3QtYWxsXCI6X3ZtLnNlbGVjdEFsbCxcInJvdy1jbGlja1wiOl92bS5oYW5kbGVSb3dDbGljayxcImV4cGFuZC1jaGFuZ2VcIjp2YWw9Pl92bS4kZW1pdCgnZXhwYW5kLWNoYW5nZScsIHZhbCl9fSwnZWwtdGFibGUnLF92bS4kYXR0cnMsZmFsc2UpLFsoX3ZtLnNob3dDaGVja0JveCk/X2MoJ2VsLXRhYmxlLWNvbHVtbicse2F0dHJzOntcInR5cGVcIjpcInNlbGVjdGlvblwiLFwid2lkdGhcIjpcIjYwcHhcIixcImFsaWduXCI6XCJjZW50ZXJcIn19KTpfdm0uX2UoKSwoX3ZtLnNvcnROdW0pP19jKCdlbC10YWJsZS1jb2x1bW4nLHthdHRyczp7XCJ0eXBlXCI6XCJpbmRleFwiLFwid2lkdGhcIjpcIjYwcHhcIixcImxhYmVsXCI6XCLluo/lj7dcIixcImFsaWduXCI6XCJjZW50ZXJcIn0sc2NvcGVkU2xvdHM6X3ZtLl91KFt7a2V5OlwiZGVmYXVsdFwiLGZuOmZ1bmN0aW9uKHNjb3BlKXtyZXR1cm4gWyhfdm0ucGFnZSk/X2MoJ3NwYW4nLFtfdm0uX3YoX3ZtLl9zKChfdm0ucGFyYW1zLnBhZ2UtMSkqX3ZtLnBhcmFtcy5saW1pdCtzY29wZS4kaW5kZXgrMSkpXSk6X2MoJ3NwYW4nLFtfdm0uX3YoX3ZtLl9zKHNjb3BlLiRpbmRleCsxKSldKV19fV0sbnVsbCxmYWxzZSwyNzg2MDA4MDIxKX0pOl92bS5fZSgpLF92bS5fdChcImRlZmF1bHRcIildLDIpXSwxKV0sMSksKF92bS5wYWdlKT9fYygnUGFnaW5hdGlvbicse2F0dHJzOntcInRvdGFsXCI6X3ZtLnRvdGFsLFwicGFnZVwiOl92bS5wYXJhbXMucGFnZSxcImxpbWl0XCI6X3ZtLnBhcmFtcy5saW1pdH0sb246e1widXBkYXRlOnBhZ2VcIjpmdW5jdGlvbigkZXZlbnQpe3JldHVybiBfdm0uJHNldChfdm0ucGFyYW1zLCBcInBhZ2VcIiwgJGV2ZW50KX0sXCJwYWdpbmF0aW9uXCI6X3ZtLmdldExpc3R9fSk6X3ZtLl9lKCldLDEpXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsIjx0ZW1wbGF0ZT5cclxuICAgIDxkaXYgY2xhc3M9XCJwYWdlLXRhYmxlXCIgOmlkPVwidGhpcy50YWJsZUlkXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlXCI+XHJcbiAgICAgICAgICAgIDxlbC1zY3JvbGxiYXIgc3R5bGU9XCJoZWlnaHQ6IDEwMCVcIj5cclxuICAgICAgICAgICAgICAgIDxlbC10YWJsZVxyXG4gICAgICAgICAgICAgICAgICAgIHYtYmluZD1cIiRhdHRyc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgc3RyaXBlXHJcbiAgICAgICAgICAgICAgICAgICAgOnJlZj1cInRhYmxlSWRcIlxyXG4gICAgICAgICAgICAgICAgICAgIDpkYXRhPVwibGlzdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgOnJvdy1rZXk9XCJyb3dLZXlcIlxyXG4gICAgICAgICAgICAgICAgICAgIDpsb2FkPVwibG9hZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgOmhpZ2hsaWdodC1jdXJyZW50LXJvdz1cImhsaWdodEN1cnJlbnRSb3dcIlxyXG4gICAgICAgICAgICAgICAgICAgIEBzZWxlY3Q9XCJoYW5kZWxTZWxlY3Rpb25DaGFuZ2VcIlxyXG4gICAgICAgICAgICAgICAgICAgIEBzZWxlY3QtYWxsPVwic2VsZWN0QWxsXCJcclxuICAgICAgICAgICAgICAgICAgICA6ZGVmYXVsdC1leHBhbmQtYWxsPVwiZGVmYXVsdEV4cGFuZEFsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgQHJvdy1jbGljaz1cImhhbmRsZVJvd0NsaWNrXCJcclxuICAgICAgICAgICAgICAgICAgICBAZXhwYW5kLWNoYW5nZT1cInZhbD0+JGVtaXQoJ2V4cGFuZC1jaGFuZ2UnLCB2YWwpXCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgPGVsLXRhYmxlLWNvbHVtbiB2LWlmPVwic2hvd0NoZWNrQm94XCIgdHlwZT1cInNlbGVjdGlvblwiIHdpZHRoPVwiNjBweFwiIGFsaWduPVwiY2VudGVyXCI+PC9lbC10YWJsZS1jb2x1bW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPGVsLXRhYmxlLWNvbHVtbiB2LWlmPVwic29ydE51bVwiIHR5cGU9XCJpbmRleFwiIHdpZHRoPVwiNjBweFwiIGxhYmVsPVwi5bqP5Y+3XCIgYWxpZ249XCJjZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIHNsb3Qtc2NvcGU9XCJzY29wZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gdi1pZj1cInBhZ2VcIj57eyhwYXJhbXMucGFnZS0xKSpwYXJhbXMubGltaXQrc2NvcGUuJGluZGV4KzF9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHYtZWxzZT57e3Njb3BlLiRpbmRleCsxfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9lbC10YWJsZS1jb2x1bW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNsb3Q+PC9zbG90PlxyXG4gICAgICAgICAgICAgICAgPC9lbC10YWJsZT5cclxuICAgICAgICAgICAgPC9lbC1zY3JvbGxiYXI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPFBhZ2luYXRpb24gdi1pZj1cInBhZ2VcIiA6dG90YWw9XCJ0b3RhbFwiIDpwYWdlLnN5bmM9XCJwYXJhbXMucGFnZVwiIDpsaW1pdD1cInBhcmFtcy5saW1pdFwiIEBwYWdpbmF0aW9uPVwiZ2V0TGlzdFwiIC8+XHJcbiAgICA8L2Rpdj5cclxuPC90ZW1wbGF0ZT5cclxuPHNjcmlwdD5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gICAgbmFtZTogJ1BhZ2VUYWJsZScsXHJcbiAgICBwcm9wczoge1xyXG4gICAgICAgIC8vIOiHquWumuS5ieaVsOaNrlxyXG4gICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgdHlwZTogQXJyYXksXHJcbiAgICAgICAgICAgIGRlZmF1bHQ6IG51bGxcclxuICAgICAgICB9LFxyXG4gICAgICAgIC8vIOivt+axguWcsOWdgFxyXG4gICAgICAgIHVybDoge1xyXG4gICAgICAgICAgICB0eXBlOiBTdHJpbmcsXHJcbiAgICAgICAgICAgIGRlZmF1bHQ6ICcnXHJcbiAgICAgICAgfSxcclxuICAgICAgICAvLyDor7fmsYLmlrnlvI9cclxuICAgICAgICBtZXRob2Q6IHtcclxuICAgICAgICAgICAgdHlwZTogU3RyaW5nLFxyXG4gICAgICAgICAgICBkZWZhdWx0OiAnZ2V0J1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLy8g5piv5ZCm5pi+56S65bqP5Y+3XHJcbiAgICAgICAgc29ydE51bToge1xyXG4gICAgICAgICAgICB0eXBlOiBCb29sZWFuLFxyXG4gICAgICAgICAgICBkZWZhdWx0OiB0cnVlXHJcbiAgICAgICAgfSxcclxuICAgICAgICAvLyDmmK/lkKbliIbpobVcclxuICAgICAgICBwYWdlOiB7XHJcbiAgICAgICAgICAgIHR5cGU6IEJvb2xlYW4sXHJcbiAgICAgICAgICAgIGRlZmF1bHQ6IHRydWVcclxuICAgICAgICB9LFxyXG4gICAgICAgIC8vIOagkeW9ouihqOagvOaXtu+8jOaYr+WQpuWFqOmDqOWxleW8gFxyXG4gICAgICAgIGRlZmF1bHRFeHBhbmRBbGw6IHtcclxuICAgICAgICAgICAgdHlwZTogQm9vbGVhbixcclxuICAgICAgICAgICAgZGVmYXVsdDogZmFsc2VcclxuICAgICAgICB9LFxyXG4gICAgICAgIC8vIOWIneWni+ivt+axguWPguaVsFxyXG4gICAgICAgIGRlZmF1bHRQYXJhbXM6IHtcclxuICAgICAgICAgICAgdHlwZTogT2JqZWN0LFxyXG4gICAgICAgICAgICBkZWZhdWx0OiAoKT0+KHt9KVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLy8g6buY6K6k6YCJ5Lit5pWw5o2uXHJcbiAgICAgICAgZGVmYXVsdFNlbGVjdDoge1xyXG4gICAgICAgICAgICB0eXBlOiBBcnJheSxcclxuICAgICAgICAgICAgZGVmYXVsdDogKCk9PltdXHJcbiAgICAgICAgfSxcclxuICAgICAgICByb3dLZXk6IHtcclxuICAgICAgICAgICAgdHlwZTogU3RyaW5nLFxyXG4gICAgICAgICAgICBkZWZhdWx0OiAnaWQnXHJcbiAgICAgICAgfSxcclxuICAgICAgICBobGlnaHRDdXJyZW50Um93OiB7XHJcbiAgICAgICAgICAgIHlwZTogQm9vbGVhbixcclxuICAgICAgICAgICAgZGVmYXVsdDogZmFsc2VcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgd2F0Y2g6IHtcclxuICAgICAgICBkYXRhKG5ld1ZhbCl7XHJcbiAgICAgICAgICAgIHRoaXMubGlzdCA9IG5ld1ZhbDtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGRlZmF1bHRTZWxlY3Q6IHtcclxuICAgICAgICAgICAgaGFuZGxlcigpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRDaGVja2VkKCk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGRlZXA6IHRydWVcclxuICAgICAgICB9LFxyXG4gICAgICAgIGRlZmF1bHRQYXJhbXMobmV3VmFsLCBvbGRWYWwpe1xyXG4gICAgICAgICAgICBmb3IoY29uc3Qga2V5IGluIG5ld1ZhbCl7XHJcbiAgICAgICAgICAgICAgICBpZihuZXdWYWxba2V5XSAhPSBvbGRWYWxba2V5XSl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXJhbXMgPSB7cGFnZTogMSwgbGltaXQ6IDE1LCBwYXJhbTogey4uLm5ld1ZhbH19O1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0TGlzdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIGRhdGEoKXtcclxuICAgICAgICByZXR1cm57XHJcbiAgICAgICAgICAgIHNob3dDaGVja0JveDogZmFsc2UsXHJcbiAgICAgICAgICAgIHBhcmFtczoge1xyXG4gICAgICAgICAgICAgICAgcGFnZTogMSxcclxuICAgICAgICAgICAgICAgIGxpbWl0OiAxNSxcclxuICAgICAgICAgICAgICAgIHBhcmFtOiB7Li4udGhpcy5kZWZhdWx0UGFyYW1zfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB0b3RhbDogMCxcclxuICAgICAgICAgICAgbGlzdDogW10sXHJcbiAgICAgICAgICAgIHRhYmxlSWQ6IGB0YWJsZV8ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyLCAxNil9YCxcclxuICAgICAgICAgICAgc2VsZWN0RGF0YToge30sXHJcbiAgICAgICAgICAgIHNlbGVjdElkczogW11cclxuICAgICAgICB9O1xyXG4gICAgfSxcclxuICAgIG1vdW50ZWQoKXtcclxuICAgICAgICBsb2codGhpcyk7XHJcbiAgICAgICAgaWYodGhpcy4kbGlzdGVuZXJzWydzZWxlY3Rpb24tY2hhbmdlJ10pe1xyXG4gICAgICAgICAgICB0aGlzLnNob3dDaGVja0JveCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKHRoaXMuZGF0YSl7XHJcbiAgICAgICAgICAgIHRoaXMubGlzdCA9IHRoaXMuZGF0YTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IoY29uc3QgaXRlbSBvZiB0aGlzLmRlZmF1bHRTZWxlY3Qpe1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdERhdGFbaXRlbVt0aGlzLnJvd0tleV1dID0gaXRlbTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5nZXRMaXN0KCk7XHJcbiAgICB9LFxyXG4gICAgbWV0aG9kczoge1xyXG4gICAgICAgIC8vIOiOt+WPluaVsOaNrlxyXG4gICAgICAgIGdldExpc3QocGFnZU9wdGlvbil7XHJcbiAgICAgICAgICAgIGlmKCF0aGlzLnVybCl7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYocGFnZU9wdGlvbil7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBhcmFtcy5wYWdlID0gcGFnZU9wdGlvbi5wYWdlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wYXJhbXMubGltaXQgPSBwYWdlT3B0aW9uLmxpbWl0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKCF0aGlzLnBhZ2Upe1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMucGFyYW1zLnBhZ2U7XHJcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5wYXJhbXMubGltaXQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3Qgc3RvcmFnZVBhcmFtcyA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0odGhpcy4kcm91dGUucGF0aCk7XHJcbiAgICAgICAgICAgIGlmKHN0b3JhZ2VQYXJhbXMpe1xyXG4gICAgICAgICAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSh0aGlzLiRyb3V0ZS5wYXRoLCBKU09OLnN0cmluZ2lmeSh0aGlzLnBhcmFtcykpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHN3aXRjaCh0aGlzLm1ldGhvZCl7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdnZXQnOlxyXG4gICAgICAgICAgICAgICAgICAgIGh0dHAuZ2V0KHRoaXMudXJsLCB0aGlzLnBhcmFtcywgKHJlcyk9PntcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2V0RGF0YShyZXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAncG9zdCc6XHJcbiAgICAgICAgICAgICAgICAgICAgaHR0cC5wb3N0KHRoaXMudXJsLCB0aGlzLnBhcmFtcywgKHJlcyk9PntcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2V0RGF0YShyZXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgX3NldERhdGEocmVzKXtcclxuICAgICAgICAgICAgaWYodGhpcy5wYWdlKXtcclxuICAgICAgICAgICAgICAgIHRoaXMubGlzdCA9IHJlcy5kYXRhLnJlY29yZHM7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvdGFsID0gcmVzLmRhdGEudG90YWw7XHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgdGhpcy5saXN0ID0gcmVzLmRhdGE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5zZXRDaGVja2VkKCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAvLyDorr7nva7pu5jorqTpgInkuK1cclxuICAgICAgICBzZXRDaGVja2VkKCl7XHJcbiAgICAgICAgICAgIGlmKHRoaXMuZGVmYXVsdFNlbGVjdC5sZW5ndGg+MCl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdElkcyA9IHRoaXMuZGVmYXVsdFNlbGVjdC5tYXAoKGl0ZW0pPT5pdGVtW3RoaXMucm93S2V5XSk7XHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLnNob3dDaGVja0JveCAmJiB0aGlzLmxpc3Qpe1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJG5leHRUaWNrKCgpPT57XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIOm7mOiupOmAieS4reaVsOaNrlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZih0aGlzLiRyZWZzW3RoaXMudGFibGVJZF0pe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGNvbnN0IGl0ZW0gb2YgdGhpcy5saXN0KXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih0aGlzLnNlbGVjdElkcy5pbmNsdWRlcyhpdGVtW3RoaXMucm93S2V5XSkpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiRyZWZzW3RoaXMudGFibGVJZF0udG9nZ2xlUm93U2VsZWN0aW9uKGl0ZW0sIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdERhdGFbaXRlbVt0aGlzLnJvd0tleV1dID0gaXRlbTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kcmVmc1t0aGlzLnRhYmxlSWRdLnRvZ2dsZVJvd1NlbGVjdGlvbihpdGVtLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnNlbGVjdERhdGFbaXRlbVt0aGlzLnJvd0tleV1dO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0SWRzID0gW107XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdERhdGEgPSB7fTtcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMuJHJlZnNbdGhpcy50YWJsZUlkXSl7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yKGNvbnN0IGl0ZW0gb2YgdGhpcy5saXN0KXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kcmVmc1t0aGlzLnRhYmxlSWRdLnRvZ2dsZVJvd1NlbGVjdGlvbihpdGVtLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICAvLyDmnaHku7bmn6Xor6JcclxuICAgICAgICBxdWVyeShwYXJhbXM9e30pe1xyXG4gICAgICAgICAgICBpZihPYmplY3Qua2V5cyhwYXJhbXMpLmxlbmd0aD4wKXtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmFtID0gey4uLnRoaXMucGFyYW1zLnBhcmFtLCAuLi5wYXJhbXN9O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wYXJhbXMgPSB7Li4udGhpcy5wYXJhbXMsIHBhcmFtfTtcclxuICAgICAgICAgICAgICAgIHRoaXMucGFyYW1zLnBhZ2UgPSAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0TGlzdCgpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLy8g54K55Ye76KGMXHJcbiAgICAgICAgaGFuZGxlUm93Q2xpY2socm93LCBjb2x1bW4sIGV2ZW50KXtcclxuICAgICAgICAgICAgdGhpcy4kZW1pdCgncm93LWNsaWNrJywgcm93LCBjb2x1bW4sIGV2ZW50KTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGhhbmRlbFNlbGVjdGlvbkNoYW5nZShfLCByb3cpe1xyXG4gICAgICAgICAgICBpZih0aGlzLnNlbGVjdERhdGFbcm93W3RoaXMucm93S2V5XV0pe1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuc2VsZWN0RGF0YVtyb3dbdGhpcy5yb3dLZXldXTtcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdERhdGFbcm93W3RoaXMucm93S2V5XV0gPSByb3c7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3Qgc2VsZWN0aW9uTGlzdCA9IE9iamVjdC52YWx1ZXModGhpcy5zZWxlY3REYXRhKTtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RJZHMgPSBzZWxlY3Rpb25MaXN0Lm1hcCgoaXRlbSk9Pml0ZW1bdGhpcy5yb3dLZXldKTtcclxuICAgICAgICAgICAgdGhpcy4kZW1pdCgnc2VsZWN0aW9uLWNoYW5nZScsIHNlbGVjdGlvbkxpc3QpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLy8g5YWo6YCJL+WFqOS4jemAiVxyXG4gICAgICAgIHNlbGVjdEFsbChzZWxlY3Rpb24pe1xyXG4gICAgICAgICAgICBpZihzZWxlY3Rpb24ubGVuZ3RoPjApe1xyXG4gICAgICAgICAgICAgICAgZm9yKGNvbnN0IGl0ZW0gb2Ygc2VsZWN0aW9uKXtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdERhdGFbaXRlbVt0aGlzLnJvd0tleV1dID0gaXRlbTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICBmb3IoY29uc3QgaXRlbSBvZiB0aGlzLmxpc3Qpe1xyXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnNlbGVjdERhdGFbaXRlbVt0aGlzLnJvd0tleV1dO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGlvbkxpc3QgPSBPYmplY3QudmFsdWVzKHRoaXMuc2VsZWN0RGF0YSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0SWRzID0gc2VsZWN0aW9uTGlzdC5tYXAoKGl0ZW0pPT5pdGVtW3RoaXMucm93S2V5XSk7XHJcbiAgICAgICAgICAgIHRoaXMuJGVtaXQoJ3NlbGVjdGlvbi1jaGFuZ2UnLCBzZWxlY3Rpb25MaXN0KTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHNldEN1cnJlbnQoaW5kZXgpIHtcclxuICAgICAgICAgICAgdGhpcy4kcmVmc1t0aGlzLnRhYmxlSWRdLnNldEN1cnJlbnRSb3codGhpcy5saXN0W2luZGV4XSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBnZXREYXRhKCl7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxpc3Q7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBsb2FkKHRyZWUsIHRyZWVOb2RlLCByZXNvbHZlKXtcclxuICAgICAgICAgICAgdGhpcy4kZW1pdCgnbG9hZCcsIHRyZWUsIHRyZWVOb2RlLCByZXNvbHZlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07XHJcbjwvc2NyaXB0PlxyXG48c3R5bGUgbGFuZz1cInNjc3NcIiBzY29wZWQ+XHJcbiAgICAucGFnZS10YWJsZXtcclxuICAgICAgICBoZWlnaHQ6IDEwMCU7XHJcbiAgICAgICAgZmxleDogMSAxIGF1dG87XHJcbiAgICAgICAgb3ZlcmZsb3cteTogYXV0bztcclxuICAgICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XHJcbiAgICAgICAgLnRhYmxle1xyXG4gICAgICAgICAgICBmbGV4OiBhdXRvIDEgMTtcclxuICAgICAgICAgICAgb3ZlcmZsb3c6IGF1dG87XHJcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgL2RlZXAvLmVsLXRhYmxlIHRoZWFke1xyXG4gICAgICAgIGNvbG9yOiAjMzMzMzMzO1xyXG4gICAgfVxyXG4gICAgL2RlZXAvLmVsLXRhYmxlIHRoLmVsLXRhYmxlX19jZWxse1xyXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNGNUY3RkE7XHJcbiAgICB9XHJcbiAgICAvZGVlcC8uZWwtdGFibGUtLW1pbmkgLmVsLXRhYmxlX19jZWxse1xyXG4gICAgICAgIHBhZGRpbmc6IDNweCAwO1xyXG4gICAgfVxyXG48L3N0eWxlPiIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RocmVhZC1sb2FkZXIvZGlzdC9janMuanMhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtODIudXNlWzFdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9AdnVlL3Z1ZS1sb2FkZXItdjE1L2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vSW5kZXgudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RocmVhZC1sb2FkZXIvZGlzdC9janMuanMhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtODIudXNlWzFdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9AdnVlL3Z1ZS1sb2FkZXItdjE1L2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vSW5kZXgudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzXCIiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCB7fTsiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvbWluaS1jc3MtZXh0cmFjdC1wbHVnaW4vZGlzdC9sb2FkZXIuanM/P2Nsb25lZFJ1bGVTZXQtNjQudXNlWzBdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9jbG9uZWRSdWxlU2V0LTY0LnVzZVsxXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvQHZ1ZS92dWUtbG9hZGVyLXYxNS9saWIvbG9hZGVycy9zdHlsZVBvc3RMb2FkZXIuanMhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9jbG9uZWRSdWxlU2V0LTY0LnVzZVsyXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanM/P2Nsb25lZFJ1bGVTZXQtNjQudXNlWzNdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9AdnVlL3Z1ZS1sb2FkZXItdjE1L2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vSW5kZXgudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9NmFlMjUxMjEmcHJvZCZsYW5nPXNjc3Mmc2NvcGVkPXRydWVcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vSW5kZXgudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTZhZTI1MTIxJnNjb3BlZD10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vSW5kZXgudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzXCJcbmV4cG9ydCAqIGZyb20gXCIuL0luZGV4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qc1wiXG5pbXBvcnQgc3R5bGUwIGZyb20gXCIuL0luZGV4LnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPTZhZTI1MTIxJnByb2QmbGFuZz1zY3NzJnNjb3BlZD10cnVlXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9AdnVlL3Z1ZS1sb2FkZXItdjE1L2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBcIjZhZTI1MTIxXCIsXG4gIG51bGxcbiAgXG4pXG5cbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpe3ZhciBfdm09dGhpcyxfYz1fdm0uX3NlbGYuX2M7cmV0dXJuIF9jKCdlbC1kaWFsb2cnLF92bS5fYih7ZGlyZWN0aXZlczpbe25hbWU6XCJkaWFsb2dEcmFnXCIscmF3TmFtZTpcInYtZGlhbG9nRHJhZ1wifV0sc3RhdGljU3R5bGU6e1wibWFyZ2luLXRvcFwiOlwiMFwifSxhdHRyczp7XCJ0aXRsZVwiOl92bS50aXRsZSxcInZpc2libGVcIjpfdm0uZGlhbG9nVmlzaWJsZSxcImJlZm9yZS1jbG9zZVwiOl92bS5oYW5kbGVDbG9zZSxcImNlbnRlclwiOlwiXCIsXCJjbG9zZS1vbi1jbGljay1tb2RhbFwiOmZhbHNlLFwic2hvdy1jbG9zZVwiOl92bS5zaG93Q2xvc2UsXCJhcHBlbmQtdG8tYm9keVwiOlwiXCJ9fSwnZWwtZGlhbG9nJyxfdm0uJGF0dHJzLGZhbHNlKSxbX2MoJ2Rpdicse3N0YXRpY1N0eWxlOntcIm92ZXJmbG93LXlcIjpcImF1dG9cIixcIm92ZXJmbG93LXhcIjpcImhpZGRlblwiLFwicG9zaXRpb25cIjpcInJlbGF0aXZlXCJ9LHN0eWxlOih7bWF4SGVpZ2h0OiBfdm0ubWF4SGVpZ2h0LCBtaW5IZWlnaHQ6IF92bS5taW5IZWlnaHR9KX0sW192bS5fdChcImRlZmF1bHRcIildLDIpLF9jKCdkaXYnLHtzdGF0aWNTdHlsZTp7XCJ0ZXh0LWFsaWduXCI6XCJjZW50ZXJcIn0sYXR0cnM6e1wic2xvdFwiOlwiZm9vdGVyXCJ9LHNsb3Q6XCJmb290ZXJcIn0sW192bS5fdChcImZvb3RlclwiKV0sMildKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCIvLyB2LWRpYWxvZ0RyYWc6IOW8ueeql+aLluaLvVxyXG5pbXBvcnQgVnVlIGZyb20gJ3Z1ZSc7XHJcblZ1ZS5kaXJlY3RpdmUoJ2RpYWxvZ0RyYWcnLCB7XHJcbiAgICBiaW5kKGVsKSB7XHJcblx0XHRjb25zdCBkaWFsb2dIZWFkZXJFbCA9IGVsLnF1ZXJ5U2VsZWN0b3IoJy5lbC1kaWFsb2dfX2hlYWRlcicpO1xyXG5cdFx0Y29uc3QgZHJhZ0RvbSA9IGVsLnF1ZXJ5U2VsZWN0b3IoJy5lbC1kaWFsb2cnKTtcclxuXHRcdGRpYWxvZ0hlYWRlckVsLnN0eWxlLmN1cnNvciA9ICdtb3ZlJztcclxuXHJcblx0XHQvLyDojrflj5bljp/mnInlsZ7mgKcgaWUgZG9t5YWD57SgLmN1cnJlbnRTdHlsZSDngavni5DosLfmrYwgd2luZG93LmdldENvbXB1dGVkU3R5bGUoZG9t5YWD57SgLCBudWxsKTtcclxuXHRcdGNvbnN0IHN0eSA9IGRyYWdEb20uY3VycmVudFN0eWxlIHx8IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGRyYWdEb20sIG51bGwpO1xyXG5cclxuXHRcdGRpYWxvZ0hlYWRlckVsLm9ubW91c2Vkb3duID0gKGV2ZW50KT0+e1xyXG5cdFx0XHQvLyDpvKDmoIfmjInkuIvvvIzorqHnrpflvZPliY3lhYPntKDot53nprvlj6/op4bljLrnmoTot53nprtcclxuXHRcdFx0Y29uc3QgZGlzWCA9IGV2ZW50LmNsaWVudFggLSBkaWFsb2dIZWFkZXJFbC5vZmZzZXRMZWZ0O1xyXG5cdFx0XHRjb25zdCBkaXNZID0gZXZlbnQuY2xpZW50WSAtIGRpYWxvZ0hlYWRlckVsLm9mZnNldFRvcDtcclxuXHJcblx0XHRcdC8vIOiOt+WPluWIsOeahOWAvOW4pnB4IOato+WImeWMuemFjeabv+aNolxyXG5cdFx0XHRsZXQgc3R5TD1udWxsO1xyXG5cdFx0XHRsZXQgc3R5VD1udWxsO1xyXG5cclxuXHRcdFx0Ly8g5rOo5oSP5ZyoaWXkuK0g56ys5LiA5qyh6I635Y+W5Yiw55qE5YC85Li657uE5Lu26Ieq5bimNTAlIOenu+WKqOS5i+WQjui1i+WAvOS4unB4XHJcblx0XHRcdGlmIChzdHkubGVmdC5pbmNsdWRlcygnXFwlJykpIHtcclxuXHRcdFx0XHRzdHlMID0gK2RvY3VtZW50LmJvZHkuY2xpZW50V2lkdGggKiAoK3N0eS5sZWZ0LnJlcGxhY2UoL1xcJS9nLCAnJykgLyAxMDApO1xyXG5cdFx0XHRcdHN0eVQgPSArZG9jdW1lbnQuYm9keS5jbGllbnRIZWlnaHQgKiAoK3N0eS50b3AucmVwbGFjZSgvXFwlL2csICcnKSAvIDEwMCk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0c3R5TCA9ICtzdHkubGVmdC5yZXBsYWNlKC9cXHB4L2csICcnKTtcclxuXHRcdFx0XHRzdHlUID0gK3N0eS50b3AucmVwbGFjZSgvXFxweC9nLCAnJyk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGRvY3VtZW50Lm9ubW91c2Vtb3ZlID0gZnVuY3Rpb24oZSkge1xyXG5cdFx0XHRcdC8vIOmAmui/h+S6i+S7tuWnlOaJmO+8jOiuoeeul+enu+WKqOeahOi3neemu1xyXG5cdFx0XHRcdGNvbnN0IGwgPSBlLmNsaWVudFggLSBkaXNYO1xyXG5cdFx0XHRcdGNvbnN0IHQgPSBlLmNsaWVudFkgLSBkaXNZO1xyXG5cclxuXHRcdFx0XHQvLyDnp7vliqjlvZPliY3lhYPntKBcclxuXHRcdFx0XHRkcmFnRG9tLnN0eWxlLmxlZnQgPSBgJHtsICsgc3R5TH1weGA7XHJcblx0XHRcdFx0ZHJhZ0RvbS5zdHlsZS50b3AgPSBgJHt0ICsgc3R5VH1weGA7XHJcblx0XHRcdH07XHJcblxyXG5cdFx0XHRkb2N1bWVudC5vbm1vdXNldXAgPSBmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRkb2N1bWVudC5vbm1vdXNlbW92ZSA9IG51bGw7XHJcblx0XHRcdFx0ZG9jdW1lbnQub25tb3VzZXVwID0gbnVsbDtcclxuXHRcdFx0fTtcclxuXHRcdH07XHJcblx0fVxyXG59KTtcclxuXHJcblZ1ZS5kaXJlY3RpdmUoJ3JlbW92ZUFyaWFIaWRkZW4nLCB7XHJcblx0YmluZChlbCkge1xyXG5cdFx0bGV0IGFyaWFFbHMgPSBlbC5xdWVyeVNlbGVjdG9yQWxsKCcuZWwtcmFkaW9fX29yaWdpbmFsJyk7XHJcblx0XHRhcmlhRWxzLmZvckVhY2goKGl0ZW0pPT57XHJcblx0XHRcdGl0ZW0ucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWhpZGRlbicpO1xyXG5cdFx0fSk7XHJcblx0fVxyXG59KTsiLCI8dGVtcGxhdGU+XHJcbiAgICA8ZWwtZGlhbG9nIHYtYmluZD1cIiRhdHRyc1wiIDp0aXRsZT1cInRpdGxlXCIgOnZpc2libGU9XCJkaWFsb2dWaXNpYmxlXCIgdi1kaWFsb2dEcmFnIDpiZWZvcmUtY2xvc2U9XCJoYW5kbGVDbG9zZVwiIGNlbnRlciA6Y2xvc2Utb24tY2xpY2stbW9kYWw9XCJmYWxzZVwiIDpzaG93LWNsb3NlPVwic2hvd0Nsb3NlXCIgYXBwZW5kLXRvLWJvZHkgc3R5bGU9XCJtYXJnaW4tdG9wOiAwO1wiPlxyXG4gICAgICAgIDxkaXYgc3R5bGU9XCJvdmVyZmxvdy15OiBhdXRvO292ZXJmbG93LXg6IGhpZGRlbjtwb3NpdGlvbjogcmVsYXRpdmU7XCIgOnN0eWxlPVwie21heEhlaWdodCwgbWluSGVpZ2h0fVwiPlxyXG4gICAgICAgICAgICA8c2xvdD48L3Nsb3Q+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBzbG90PVwiZm9vdGVyXCIgc3R5bGU9XCJ0ZXh0LWFsaWduOiBjZW50ZXI7XCI+XHJcbiAgICAgICAgICAgIDxzbG90IG5hbWU9XCJmb290ZXJcIj48L3Nsb3Q+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2VsLWRpYWxvZz5cclxuPC90ZW1wbGF0ZT5cclxuXHJcbjxzY3JpcHQ+XHJcbmltcG9ydCAnLi9kaWFsb2ctZHJhZyc7XHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICAgIG5hbWU6ICdEaWFsb2cnLFxyXG4gICAgcHJvcHM6IHtcclxuICAgICAgICB0aXRsZToge1xyXG4gICAgICAgICAgICB0eXBlOiBTdHJpbmcsXHJcbiAgICAgICAgICAgIGRlZmF1bHQ6ICfmj5DnpLonXHJcbiAgICAgICAgfSxcclxuICAgICAgICBtYXhIZWlnaHQ6IHtcclxuICAgICAgICAgICAgdHlwZTogU3RyaW5nLFxyXG4gICAgICAgICAgICBkZWZhdWx0OiAnNjB2aCdcclxuICAgICAgICB9LFxyXG4gICAgICAgIG1pbkhlaWdodDoge1xyXG4gICAgICAgICAgICB0eXBlOiBTdHJpbmcsXHJcbiAgICAgICAgICAgIGRlZmF1bHQ6ICcxNTBweCdcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgZGF0YSgpe1xyXG4gICAgICAgIHJldHVybntcclxuICAgICAgICAgICAgZGlhbG9nVmlzaWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgc2hvd0Nsb3NlOiBmYWxzZVxyXG4gICAgICAgIH07XHJcbiAgICB9LFxyXG4gICAgbW91bnRlZCgpe1xyXG4gICAgICAgIGlmKHRoaXMuJGxpc3RlbmVyc1snY2xvc2UnXSl7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd0Nsb3NlID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgbWV0aG9kczoge1xyXG4gICAgICAgIGhhbmRsZUNsb3NlKCl7XHJcbiAgICAgICAgICAgIHRoaXMuJGVtaXQoJ2Nsb3NlJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59O1xyXG48L3NjcmlwdD5cclxuXHJcbjxzdHlsZSBsYW5nPVwic2Nzc1wiIHNjb3BlZD5cclxuL2RlZXAvLmVsLWRpYWxvZ19faGVhZGVye1xyXG4gICAgcGFkZGluZzogMTVweCAyMHB4O1xyXG59XHJcbi9kZWVwLy5lbC1kaWFsb2ctLWNlbnRlciAuZWwtZGlhbG9nX19ib2R5e1xyXG4gICAgcGFkZGluZzogMjBweDtcclxufVxyXG48L3N0eWxlPiIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RocmVhZC1sb2FkZXIvZGlzdC9janMuanMhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtODIudXNlWzFdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9AdnVlL3Z1ZS1sb2FkZXItdjE1L2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vSW5kZXgudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RocmVhZC1sb2FkZXIvZGlzdC9janMuanMhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtODIudXNlWzFdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9AdnVlL3Z1ZS1sb2FkZXItdjE1L2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vSW5kZXgudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzXCIiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCB7fTsiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvbWluaS1jc3MtZXh0cmFjdC1wbHVnaW4vZGlzdC9sb2FkZXIuanM/P2Nsb25lZFJ1bGVTZXQtNjQudXNlWzBdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9jbG9uZWRSdWxlU2V0LTY0LnVzZVsxXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvQHZ1ZS92dWUtbG9hZGVyLXYxNS9saWIvbG9hZGVycy9zdHlsZVBvc3RMb2FkZXIuanMhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9jbG9uZWRSdWxlU2V0LTY0LnVzZVsyXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanM/P2Nsb25lZFJ1bGVTZXQtNjQudXNlWzNdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9AdnVlL3Z1ZS1sb2FkZXItdjE1L2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vSW5kZXgudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9NDE0ODc2MmUmcHJvZCZsYW5nPXNjc3Mmc2NvcGVkPXRydWVcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vSW5kZXgudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTQxNDg3NjJlJnNjb3BlZD10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vSW5kZXgudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzXCJcbmV4cG9ydCAqIGZyb20gXCIuL0luZGV4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qc1wiXG5pbXBvcnQgc3R5bGUwIGZyb20gXCIuL0luZGV4LnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPTQxNDg3NjJlJnByb2QmbGFuZz1zY3NzJnNjb3BlZD10cnVlXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9AdnVlL3Z1ZS1sb2FkZXItdjE1L2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBcIjQxNDg3NjJlXCIsXG4gIG51bGxcbiAgXG4pXG5cbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpe3ZhciBfdm09dGhpcyxfYz1fdm0uX3NlbGYuX2M7cmV0dXJuIF9jKCdlbC1jYXJkJyx7c3RhdGljU3R5bGU6e1wiaGVpZ2h0XCI6XCJjYWxjKDEwMCUgLSAycHgpXCIsXCJvdmVyZmxvd1wiOlwiYXV0b1wifSxhdHRyczp7XCJzaGFkb3dcIjpfdm0uc2hhZG93fX0sW19jKCdkaXYnLHtzdGF0aWNDbGFzczpcImNsZWFyZml4XCIsYXR0cnM6e1wic2xvdFwiOlwiaGVhZGVyXCJ9LHNsb3Q6XCJoZWFkZXJcIn0sW19jKCdkaXYnLHtzdGF0aWNTdHlsZTp7XCJmb250LXNpemVcIjpcIjE2cHhcIn19LFsoX3ZtLiRzbG90c1snY2FyZC10aXRsZSddKT9bX3ZtLl90KFwiY2FyZC10aXRsZVwiKV06W192bS5fdihcIiBcIitfdm0uX3MoX3ZtLnRpdGxlKStcIiBcIildXSwyKSxfYygnZGl2Jyx7c3RhdGljU3R5bGU6e1wiZmxleFwiOlwiMVwiLFwicG9zaXRpb25cIjpcInJlbGF0aXZlXCJ9fSxbX2MoJ2Rpdicse3N0YXRpY1N0eWxlOntcInBvc2l0aW9uXCI6XCJhYnNvbHV0ZVwiLFwicmlnaHRcIjpcIjBweFwiLFwidG9wXCI6XCItMTRweFwiLFwid2lkdGhcIjpcIjEwMCVcIixcInRleHQtYWxpZ25cIjpcInJpZ2h0XCJ9fSxbX3ZtLl90KFwiY2FyZC10b29sc1wiKV0sMildKV0pLF92bS5fdChcImRlZmF1bHRcIildLDIpXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsIjx0ZW1wbGF0ZT5cclxuICAgIDxlbC1jYXJkIDpzaGFkb3c9XCJzaGFkb3dcIiBzdHlsZT1cImhlaWdodDogY2FsYygxMDAlIC0gMnB4KTtvdmVyZmxvdzogYXV0bztcIj5cclxuICAgICAgICA8ZGl2IHNsb3Q9XCJoZWFkZXJcIiBjbGFzcz1cImNsZWFyZml4XCI+XHJcbiAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJmb250LXNpemU6IDE2cHg7XCI+XHJcbiAgICAgICAgICAgICAgICA8dGVtcGxhdGUgdi1pZj1cIiRzbG90c1snY2FyZC10aXRsZSddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNsb3QgbmFtZT1cImNhcmQtdGl0bGVcIj48L3Nsb3Q+XHJcbiAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgPHRlbXBsYXRlIHYtZWxzZT5cclxuICAgICAgICAgICAgICAgICAgICB7eyB0aXRsZSB9fVxyXG4gICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJmbGV4OiAxO3Bvc2l0aW9uOiByZWxhdGl2ZTtcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJwb3NpdGlvbjogYWJzb2x1dGU7cmlnaHQ6IDBweDt0b3A6IC0xNHB4O3dpZHRoOiAxMDAlO3RleHQtYWxpZ246IHJpZ2h0O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzbG90IG5hbWU9XCJjYXJkLXRvb2xzXCI+PC9zbG90PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxzbG90Pjwvc2xvdD5cclxuICAgIDwvZWwtY2FyZD5cclxuPC90ZW1wbGF0ZT5cclxuXHJcbjxzY3JpcHQ+XHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICAgIG5hbWU6ICdDYXJkJyxcclxuICAgIHByb3BzOiB7XHJcbiAgICAgICAgdGl0bGU6IHtcclxuICAgICAgICAgICAgdHlwZTogU3RyaW5nLFxyXG4gICAgICAgICAgICBkZWZhdWx0OiAnJ1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc2hhZG93OiB7XHJcbiAgICAgICAgICAgIHR5cGU6IFN0cmluZyxcclxuICAgICAgICAgICAgZGVmYXVsdDogJydcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07XHJcbjwvc2NyaXB0PlxyXG5cclxuPHN0eWxlIGxhbmc9XCJzY3NzXCIgc2NvcGVkPlxyXG4uY2xlYXJmaXh7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxufVxyXG48L3N0eWxlPiIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RocmVhZC1sb2FkZXIvZGlzdC9janMuanMhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtODIudXNlWzFdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9AdnVlL3Z1ZS1sb2FkZXItdjE1L2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vSW5kZXgudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RocmVhZC1sb2FkZXIvZGlzdC9janMuanMhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtODIudXNlWzFdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9AdnVlL3Z1ZS1sb2FkZXItdjE1L2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vSW5kZXgudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzXCIiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCB7fTsiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvbWluaS1jc3MtZXh0cmFjdC1wbHVnaW4vZGlzdC9sb2FkZXIuanM/P2Nsb25lZFJ1bGVTZXQtNjQudXNlWzBdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9jbG9uZWRSdWxlU2V0LTY0LnVzZVsxXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvQHZ1ZS92dWUtbG9hZGVyLXYxNS9saWIvbG9hZGVycy9zdHlsZVBvc3RMb2FkZXIuanMhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9jbG9uZWRSdWxlU2V0LTY0LnVzZVsyXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanM/P2Nsb25lZFJ1bGVTZXQtNjQudXNlWzNdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9AdnVlL3Z1ZS1sb2FkZXItdjE1L2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vSW5kZXgudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9MGM1ZGUwNmUmcHJvZCZsYW5nPXNjc3Mmc2NvcGVkPXRydWVcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vSW5kZXgudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTBjNWRlMDZlJnNjb3BlZD10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vSW5kZXgudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzXCJcbmV4cG9ydCAqIGZyb20gXCIuL0luZGV4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qc1wiXG5pbXBvcnQgc3R5bGUwIGZyb20gXCIuL0luZGV4LnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPTBjNWRlMDZlJnByb2QmbGFuZz1zY3NzJnNjb3BlZD10cnVlXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9AdnVlL3Z1ZS1sb2FkZXItdjE1L2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBcIjBjNWRlMDZlXCIsXG4gIG51bGxcbiAgXG4pXG5cbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpe3ZhciBfdm09dGhpcyxfYz1fdm0uX3NlbGYuX2M7cmV0dXJuIChfdm0uc2hvdyk/X2MoJ2RpdicsWyhfdm0uZGF0YS5sZW5ndGggPiAwKT9fdm0uX2woKF92bS5kYXRhKSxmdW5jdGlvbihpdGVtKXtyZXR1cm4gX2MoJ2F1dGgtdHJlZScse2tleTppdGVtLmlkLGF0dHJzOntcImRhdGFcIjppdGVtLFwicHJvcHNcIjpfdm0ucHJvcHN9LG9uOntcIm9uLW5vZGUtZXhwYW5kXCI6KGRhdGEpPT5fdm0ub25FeHBhbmQoZGF0YSksXCJvbi1ub2RlLWNoZWNrZWRcIjooZGF0YSk9Pl92bS5vbkNoZWNrZWQoZGF0YSl9fSl9KTpfdm0uX2UoKV0sMik6X3ZtLl9lKClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwiLy8g5piv5ZCm5pyJ5a2Q6IqC54K5XG5jb25zdCBoYXNDaGlsZHJlbiA9IChkYXRhKT0+e1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KGRhdGEuY2hpbGRyZW4pICYmIGRhdGEuY2hpbGRyZW4ubGVuZ3RoID4gMDtcbn07XG5cbi8vIOWIm+W7uuiKgueCuVxuZXhwb3J0IGNvbnN0IHJlbmRlckxhYmVsID0gKGgsIGRhdGEsIGNvbnRleHQpPT57XG4gICAgY29uc3Qge3Byb3BzLCBsaXN0ZW5lcnN9ID0gY29udGV4dDtcbiAgICBjb25zdCBjbGlja0hhbmRsZXIgPSBsaXN0ZW5lcnNbJ29uLW5vZGUtZXhwYW5kJ107XG4gICAgY29uc3QgY2hlY2tlZEhhbmRsZXIgPSBsaXN0ZW5lcnNbJ29uLW5vZGUtY2hlY2tlZCddO1xuICAgIGNvbnN0IGxhYmVsID0gZGF0YVtwcm9wcy5wcm9wcy5sYWJlbF07XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IFtdO1xuICAgIGNoaWxkTm9kZXMucHVzaChsYWJlbCk7XG5cbiAgICBjb25zdCBpY29DbGFzcyA9IFtdO1xuICAgIGlmKGhhc0NoaWxkcmVuKGRhdGEpKXtcbiAgICAgICAgaWYoZGF0YS5leHBhbmQpe1xuICAgICAgICAgICAgaWNvQ2xhc3MucHVzaCgnaWNvbi1pY29uLWR3b24nKTtcbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICBpY29DbGFzcy5wdXNoKCdpY29uLWljb25fcmlnaHQnKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaCgnbGknLCB7XG4gICAgfSwgW1xuICAgICAgICBoKCdpJywge1xuICAgICAgICAgICAgZG9tUHJvcHM6IHtcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU6IGBpY29uZm9udCAke2ljb0NsYXNzLmpvaW4oJyAnKX1gXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAgICAgICBtYXJnaW5MZWZ0OiBgJHsxNCpkYXRhLl9sZXZlfXB4YCxcbiAgICAgICAgICAgICAgICBmb250U2l6ZTogJzEycHgnLFxuICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoLTJweCknLFxuICAgICAgICAgICAgICAgIGNvbG9yOiAnIzY2NidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgIGNsaWNrOiAoKT0+e1xuICAgICAgICAgICAgICAgICAgICBjbGlja0hhbmRsZXIoZGF0YSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LCAnJyksXG4gICAgICAgIGgoJ2knLCB7XG4gICAgICAgICAgICBkb21Qcm9wczoge1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogZGF0YS5jaGVja2VkPydpY29uZm9udCBpY29uLWZhbmd4aW5neHVhbnpob25nZmlsJzonaWNvbmZvbnQgaWNvbi1mYW5neGluZ3dlaXh1YW56aG9uZydcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgICAgIGNvbG9yOiAnIzY2NidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgIGNsaWNrOiAoKT0+e1xuICAgICAgICAgICAgICAgICAgICBjaGVja2VkSGFuZGxlcihkYXRhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sICcnKSxcbiAgICAgICAgaCgnc3BhbicsIHtcblxuICAgICAgICB9LCBjaGlsZE5vZGVzKVxuICAgIF0pO1xufTtcblxuLy8g5Yib5bu6IG5vZGUg5a2Q6IqC54K5XG5leHBvcnQgY29uc3QgcmVuZGVyQ2hpbGRyZW4gPSAoaCwgbGlzdCwgZXhwYW5kLCBjb250ZXh0KT0+e1xuICAgIGlmIChBcnJheS5pc0FycmF5KGxpc3QpICYmIGxpc3QubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gbGlzdC5tYXAoaXRlbT0+e1xuICAgICAgICAgICAgcmV0dXJuIHJlbmRlck5vZGUoaCwgaXRlbSwgY29udGV4dCk7XG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgY2xzID0gWyd0cmVlLW5vZGUtY2hpbGRyZW4nXTtcbiAgICAgICAgaWYoIWV4cGFuZCl7XG4gICAgICAgICAgICBjbHMucHVzaCgnZXhwYW5kJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGgoJ2RpdicsIHtcbiAgICAgICAgICAgIGRvbVByb3BzOiB7XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBjbHMuam9pbignICcpXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIGNoaWxkcmVuKTtcbiAgICB9XG4gICAgcmV0dXJuICcnO1xufTtcblxuZXhwb3J0IGNvbnN0IHJlbmRlck5vZGUgPSAoaCwgZGF0YSwgY29udGV4dCk9PntcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gW107XG4gICAgY2hpbGROb2Rlcy5wdXNoKHJlbmRlckxhYmVsKGgsIGRhdGEsIGNvbnRleHQpKTtcbiAgICBjb25zdCBjaGlsZHJlbiA9IGRhdGEuY2hpbGRyZW47XG4gICAgaWYoaGFzQ2hpbGRyZW4oZGF0YSkpe1xuICAgICAgICBjaGlsZE5vZGVzLnB1c2gocmVuZGVyQ2hpbGRyZW4oaCwgY2hpbGRyZW4sIGRhdGEuZXhwYW5kLCBjb250ZXh0KSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGgoJ3VsJywge1xuICAgICAgICBkb21Qcm9wczoge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAnbm9kZSdcbiAgICAgICAgfVxuICAgIH0sIGNoaWxkTm9kZXMpO1xufTtcblxuZXhwb3J0IGNvbnN0IHJlbmRlciA9IChoLCBjb250ZXh0KT0+e1xuICAgIGNvbnN0IHtwcm9wc30gPSBjb250ZXh0O1xuICAgIHJldHVybiByZW5kZXJOb2RlKGgsIHByb3BzLmRhdGEsIGNvbnRleHQpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgcmVuZGVyOyIsIjx0ZW1wbGF0ZT5cbiAgICA8ZGl2IHYtaWY9XCJzaG93XCI+XG4gICAgICAgIDx0ZW1wbGF0ZSB2LWlmPVwiZGF0YS5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgICA8YXV0aC10cmVlIHYtZm9yPVwiaXRlbSBpbiBkYXRhXCJcbiAgICAgICAgICAgICAgICA6a2V5PVwiaXRlbS5pZFwiXG4gICAgICAgICAgICAgICAgOmRhdGE9XCJpdGVtXCJcbiAgICAgICAgICAgICAgICA6cHJvcHM9XCJwcm9wc1wiXG4gICAgICAgICAgICAgICAgQG9uLW5vZGUtZXhwYW5kPVwiKGRhdGEpPT5vbkV4cGFuZChkYXRhKVwiXG4gICAgICAgICAgICAgICAgQG9uLW5vZGUtY2hlY2tlZD1cIihkYXRhKT0+b25DaGVja2VkKGRhdGEpXCJcbiAgICAgICAgICAgID48L2F1dGgtdHJlZT5cbiAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgcmVuZGVyIGZyb20gJy4vdHJlZSc7XG5leHBvcnQgZGVmYXVsdCB7XG4gICAgbmFtZTogJ1RyZWUnLFxuICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgQXV0aFRyZWU6IHtcbiAgICAgICAgICAgIHJlbmRlcixcbiAgICAgICAgICAgIGZ1bmN0aW9uYWw6IHRydWVcbiAgICAgICAgfVxuICAgIH0sXG4gICAgcHJvcHM6IHtcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgdHlwZTogQXJyYXksXG4gICAgICAgICAgICBkZWZhdWx0OiAoKT0+e1xuICAgICAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgICAgIGRlZmF1bHQ6ICgpPT57XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICduYW1lJ1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGRhdGEoKXtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5hbWU6IDEsXG4gICAgICAgICAgICBzaG93OiBmYWxzZSxcbiAgICAgICAgICAgIGxpc3Q6IFtdLFxuICAgICAgICAgICAgY2hlY2tlZDogZmFsc2VcbiAgICAgICAgfTtcbiAgICB9LFxuICAgIG1ldGhvZHM6IHtcbiAgICAgICAgaW5pdChkYXRhLCBsZXZlKXtcbiAgICAgICAgICAgIGRhdGEuX2xldmUgPSBsZXZlO1xuICAgICAgICAgICAgaWYoZGF0YS5jaGlsZHJlbiAmJiBkYXRhLmNoaWxkcmVuLmxlbmd0aCA+IDApe1xuICAgICAgICAgICAgICAgIGxldmUrKztcbiAgICAgICAgICAgICAgICBmb3IoY29uc3QgaSBpbiBkYXRhLmNoaWxkcmVuKXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbml0KGRhdGEuY2hpbGRyZW5baV0sIGxldmUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgLy8g5Yi35pawXG4gICAgICAgIHJlZnJlc2goKXtcbiAgICAgICAgICAgIHRoaXMuc2hvdyA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy4kbmV4dFRpY2soKCk9PntcbiAgICAgICAgICAgICAgICB0aGlzLnNob3cgPSB0cnVlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIC8vIOWxleW8gC/pmpDol49cbiAgICAgICAgb25FeHBhbmQoZGF0YSl7XG4gICAgICAgICAgICBkYXRhLmV4cGFuZCA9ICFkYXRhLmV4cGFuZDtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgICAgICB9LFxuICAgICAgICAvLyDpgInkuK0v5Y+W5raI6YCJ5LitXG4gICAgICAgIG9uQ2hlY2tlZChkYXRhKXtcbiAgICAgICAgICAgIGRhdGEuY2hlY2tlZCA9ICFkYXRhLmNoZWNrZWQ7XG4gICAgICAgICAgICB0aGlzLnRvb2xlckNoZWNrZWQodGhpcy5kYXRhLCBkYXRhKTtcbiAgICAgICAgICAgIHRoaXMuc2V0UGFyZW50Q2hlY2tlZCh0aGlzLmRhdGEpO1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgICAgIH0sXG4gICAgICAgIHRvb2xlckNoZWNrZWQobGlzdCwgbm9kZSl7XG4gICAgICAgICAgICBmb3IoY29uc3QgaSBpbiBsaXN0KXtcbiAgICAgICAgICAgICAgICBpZihsaXN0W2ldLmlkID09PSBub2RlLmlkKXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRDaGlsZENoZWNrZWQobGlzdFtpXS5jaGlsZHJlbiwgbGlzdFtpXS5jaGVja2VkKTtcbiAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b29sZXJDaGVja2VkKGxpc3RbaV0uY2hpbGRyZW4sIG5vZGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgLy8g6YCJ5Lit6IqC54K55pe277yM6K6+572u5a2Q6IqC54K55YWo6YCJXG4gICAgICAgIHNldENoaWxkQ2hlY2tlZChjaGlsZHJlbiwgY2hlY2tlZCl7XG4gICAgICAgICAgICBmb3IoY29uc3QgaSBpbiBjaGlsZHJlbil7XG4gICAgICAgICAgICAgICAgY2hpbGRyZW5baV0uY2hlY2tlZCA9IGNoZWNrZWQ7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRDaGlsZENoZWNrZWQoY2hpbGRyZW5baV0uY2hpbGRyZW4sIGNoZWNrZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAvLyDorr7nva7niLboioLngrnpgInkuK1cbiAgICAgICAgc2V0UGFyZW50Q2hlY2tlZChkYXRhKXtcbiAgICAgICAgICAgIGZvcihjb25zdCBpIGluIGRhdGEpe1xuICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGlmKGRhdGFbaV0uY2hpbGRyZW4gJiYgZGF0YVtpXS5jaGlsZHJlbi5sZW5ndGggPiAwKXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGlsZElzQ2hlY2tlZChkYXRhW2ldLmNoaWxkcmVuKTtcbiAgICAgICAgICAgICAgICAgICAgaWYodGhpcy5jaGVja2VkKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbaV0uY2hlY2tlZCA9IHRoaXMuY2hlY2tlZDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFBhcmVudENoZWNrZWQoZGF0YVtpXS5jaGlsZHJlbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgICAgIH0sXG4gICAgICAgIC8vIOWIpOaWreiKgueCueeahOWtkOiKgueCueaYr+WQpuaciemAieS4rVxuICAgICAgICBjaGlsZElzQ2hlY2tlZChjaGlsZHJlbil7XG4gICAgICAgICAgICBmb3IoY29uc3QgaSBpbiBjaGlsZHJlbil7XG4gICAgICAgICAgICAgICAgaWYoY2hpbGRyZW5baV0uY2hlY2tlZCl7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hpbGRJc0NoZWNrZWQoY2hpbGRyZW5baV0uY2hpbGRyZW4pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgLy8g6K6+572u6buY6K6k6YCJ5LitXG4gICAgICAgIHNldERlZmF1bHRDaGVja2VkKGRlZmF1bHRJZHMpe1xuICAgICAgICAgICAgZm9yKGNvbnN0IGkgaW4gZGVmYXVsdElkcyl7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRDaGVja2VkKHRoaXMuZGF0YSwgZGVmYXVsdElkc1tpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNldFBhcmVudENoZWNrZWQodGhpcy5kYXRhKTtcbiAgICAgICAgfSxcbiAgICAgICAgLy8g5qC55o2u5omA57uZ55qEaWTvvIzorr7nva7mlLnpobnpgInkuK1cbiAgICAgICAgc2V0Q2hlY2tlZChkYXRhLCBpZCl7XG4gICAgICAgICAgICBmb3IoY29uc3QgaSBpbiBkYXRhKXtcbiAgICAgICAgICAgICAgICBpZihkYXRhW2ldLmlkID09PSBpZCl7XG4gICAgICAgICAgICAgICAgICAgIGRhdGFbaV0uY2hlY2tlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICAgICBpZihkYXRhW2ldLmNoaWxkcmVuICYmIGRhdGFbaV0uY2hpbGRyZW4ubGVuZ3RoID4gMCl7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldENoZWNrZWQoZGF0YVtpXS5jaGlsZHJlbiwgaWQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAvLyDojrflj5bpgInkuK3pgInnmoRrZXlcbiAgICAgICAgZ2V0Q2hlY2tlZEtleXMoKXtcbiAgICAgICAgICAgIGNvbnN0IGtleXMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX2dldENoZWNrZWRLZXlzKHRoaXMuZGF0YSwga2V5cyk7XG4gICAgICAgICAgICByZXR1cm4ga2V5cztcbiAgICAgICAgfSxcbiAgICAgICAgLy8g6YGN5Y6G5Ye66YCJ5Lit6YCJ55qEa2V5XG4gICAgICAgIF9nZXRDaGVja2VkS2V5cyhkYXRhLCBrZXlzKXtcbiAgICAgICAgICAgIGZvcihjb25zdCBpIGluIGRhdGEpe1xuICAgICAgICAgICAgICAgIGlmKGRhdGFbaV0uY2hlY2tlZCl7XG4gICAgICAgICAgICAgICAgICAgIGtleXMucHVzaChkYXRhW2ldLmlkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYoZGF0YVtpXS5jaGlsZHJlbiAmJiBkYXRhW2ldLmNoaWxkcmVuLmxlbmd0aCA+IDApe1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9nZXRDaGVja2VkS2V5cyhkYXRhW2ldLmNoaWxkcmVuLCBrZXlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIC8vIOiOt+WPlumAieS4remAieeahOiKgueCuVxuICAgICAgICBnZXRDaGVja2VkTm9kZXMoKXtcbiAgICAgICAgICAgIGNvbnN0IG5vZGVzID0gW107XG4gICAgICAgICAgICB0aGlzLl9nZXRDaGVja2VkTm9kZXModGhpcy5kYXRhLCBub2Rlcyk7XG4gICAgICAgICAgICByZXR1cm4gbm9kZXM7XG4gICAgICAgIH0sXG4gICAgICAgIC8vIOmBjeWOhuWHuumAieS4remAieeahOiKgueCuVxuICAgICAgICBfZ2V0Q2hlY2tlZE5vZGVzKGRhdGEsIG5vZGVzKXtcbiAgICAgICAgICAgIGZvcihjb25zdCBpIGluIGRhdGEpe1xuICAgICAgICAgICAgICAgIGlmKGRhdGFbaV0uY2hlY2tlZCl7XG4gICAgICAgICAgICAgICAgICAgIG5vZGVzLnB1c2goZGF0YVtpXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmKGRhdGFbaV0uY2hpbGRyZW4gJiYgZGF0YVtpXS5jaGlsZHJlbi5sZW5ndGggPiAwKXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZ2V0Q2hlY2tlZE5vZGVzKGRhdGFbaV0uY2hpbGRyZW4sIG5vZGVzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuICAgIHdhdGNoOiB7XG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIGhhbmRsZXIoKSB7XG4gICAgICAgICAgICAgICAgZm9yKGNvbnN0IGkgaW4gdGhpcy5kYXRhKXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbml0KHRoaXMuZGF0YVtpXSwgMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGltbWVkaWF0ZTogdHJ1ZSxcbiAgICAgICAgICAgIGRlZXA6IHRydWVcbiAgICAgICAgfVxuICAgIH1cbn07XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCIgc2NvcGVkPlxuQGltcG9ydCB1cmwoLi9pY29uL2ljb25mb250LmNzcyk7XG51bHtcbiAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgIG1hcmdpbjogMDtcbiAgICBwYWRkaW5nOiAwO1xuICAgIHRleHQtYWxpZ246IGxlZnQ7XG5cbiAgICBsaXtcbiAgICAgICAgcGFkZGluZzogNXB4IDA7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcblxuICAgICAgICAuY2hlY2staWNve1xuICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICAgICAgaGVpZ2h0OiA1cHg7XG4gICAgICAgICAgICB3aWR0aDogNXB4O1xuICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBsaTpob3ZlcntcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgkY29sb3I6ICMwMDAwMDAsICRhbHBoYTogMC4xKTtcbiAgICB9XG5cbiAgICAuZXhwYW5ke1xuICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cbn1cbjwvc3R5bGU+IiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdGhyZWFkLWxvYWRlci9kaXN0L2Nqcy5qcyEuLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC04Mi51c2VbMV0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0B2dWUvdnVlLWxvYWRlci12MTUvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9JbmRleC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anNcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdGhyZWFkLWxvYWRlci9kaXN0L2Nqcy5qcyEuLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC04Mi51c2VbMV0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0B2dWUvdnVlLWxvYWRlci12MTUvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9JbmRleC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anNcIiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IHt9OyIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9taW5pLWNzcy1leHRyYWN0LXBsdWdpbi9kaXN0L2xvYWRlci5qcz8/Y2xvbmVkUnVsZVNldC02NC51c2VbMF0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanM/P2Nsb25lZFJ1bGVTZXQtNjQudXNlWzFdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9AdnVlL3Z1ZS1sb2FkZXItdjE1L2xpYi9sb2FkZXJzL3N0eWxlUG9zdExvYWRlci5qcyEuLi8uLi8uLi9ub2RlX21vZHVsZXMvcG9zdGNzcy1sb2FkZXIvZGlzdC9janMuanM/P2Nsb25lZFJ1bGVTZXQtNjQudXNlWzJdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcz8/Y2xvbmVkUnVsZVNldC02NC51c2VbM10hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0B2dWUvdnVlLWxvYWRlci12MTUvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9JbmRleC52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZpZD01ZTgxZTA1ZSZwcm9kJmxhbmc9c2NzcyZzY29wZWQ9dHJ1ZVwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9JbmRleC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NWU4MWUwNWUmc2NvcGVkPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9JbmRleC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anNcIlxuZXhwb3J0ICogZnJvbSBcIi4vSW5kZXgudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzXCJcbmltcG9ydCBzdHlsZTAgZnJvbSBcIi4vSW5kZXgudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9NWU4MWUwNWUmcHJvZCZsYW5nPXNjc3Mmc2NvcGVkPXRydWVcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0B2dWUvdnVlLWxvYWRlci12MTUvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIFwiNWU4MWUwNWVcIixcbiAgbnVsbFxuICBcbilcblxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfY2hlY2tQcml2YXRlUmVkZWNsYXJhdGlvbihvYmosIHByaXZhdGVDb2xsZWN0aW9uKSB7XG4gIGlmIChwcml2YXRlQ29sbGVjdGlvbi5oYXMob2JqKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdFwiKTtcbiAgfVxufSIsImltcG9ydCBjaGVja1ByaXZhdGVSZWRlY2xhcmF0aW9uIGZyb20gXCIuL2NoZWNrUHJpdmF0ZVJlZGVjbGFyYXRpb24uanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKG9iaiwgcHJpdmF0ZU1hcCwgdmFsdWUpIHtcbiAgY2hlY2tQcml2YXRlUmVkZWNsYXJhdGlvbihvYmosIHByaXZhdGVNYXApO1xuICBwcml2YXRlTWFwLnNldChvYmosIHZhbHVlKTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfYXNzZXJ0Q2xhc3NCcmFuZChlLCB0LCBuKSB7XG4gIGlmIChcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUgPyBlID09PSB0IDogZS5oYXModCkpIHJldHVybiBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHQgOiBuO1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0XCIpO1xufSIsImltcG9ydCBhc3NlcnRDbGFzc0JyYW5kIGZyb20gXCIuL2Fzc2VydENsYXNzQnJhbmQuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9jbGFzc1ByaXZhdGVGaWVsZFNldDIocywgYSwgcikge1xuICByZXR1cm4gcy5zZXQoYXNzZXJ0Q2xhc3NCcmFuZChzLCBhKSwgciksIHI7XG59IiwiaW1wb3J0IGFzc2VydENsYXNzQnJhbmQgZnJvbSBcIi4vYXNzZXJ0Q2xhc3NCcmFuZC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0MihzLCBhKSB7XG4gIHJldHVybiBzLmdldChhc3NlcnRDbGFzc0JyYW5kKHMsIGEpKTtcbn0iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJpbmQoZm4sIHRoaXNBcmcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHdyYXAoKSB7XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoaXNBcmcsIGFyZ3VtZW50cyk7XG4gIH07XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCBiaW5kIGZyb20gJy4vaGVscGVycy9iaW5kLmpzJztcblxuLy8gdXRpbHMgaXMgYSBsaWJyYXJ5IG9mIGdlbmVyaWMgaGVscGVyIGZ1bmN0aW9ucyBub24tc3BlY2lmaWMgdG8gYXhpb3NcblxuY29uc3Qge3RvU3RyaW5nfSA9IE9iamVjdC5wcm90b3R5cGU7XG5jb25zdCB7Z2V0UHJvdG90eXBlT2Z9ID0gT2JqZWN0O1xuXG5jb25zdCBraW5kT2YgPSAoY2FjaGUgPT4gdGhpbmcgPT4ge1xuICAgIGNvbnN0IHN0ciA9IHRvU3RyaW5nLmNhbGwodGhpbmcpO1xuICAgIHJldHVybiBjYWNoZVtzdHJdIHx8IChjYWNoZVtzdHJdID0gc3RyLnNsaWNlKDgsIC0xKS50b0xvd2VyQ2FzZSgpKTtcbn0pKE9iamVjdC5jcmVhdGUobnVsbCkpO1xuXG5jb25zdCBraW5kT2ZUZXN0ID0gKHR5cGUpID0+IHtcbiAgdHlwZSA9IHR5cGUudG9Mb3dlckNhc2UoKTtcbiAgcmV0dXJuICh0aGluZykgPT4ga2luZE9mKHRoaW5nKSA9PT0gdHlwZVxufVxuXG5jb25zdCB0eXBlT2ZUZXN0ID0gdHlwZSA9PiB0aGluZyA9PiB0eXBlb2YgdGhpbmcgPT09IHR5cGU7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYW4gQXJyYXlcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gQXJyYXksIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCB7aXNBcnJheX0gPSBBcnJheTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyB1bmRlZmluZWRcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSB2YWx1ZSBpcyB1bmRlZmluZWQsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc1VuZGVmaW5lZCA9IHR5cGVPZlRlc3QoJ3VuZGVmaW5lZCcpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgQnVmZmVyXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEJ1ZmZlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQnVmZmVyKHZhbCkge1xuICByZXR1cm4gdmFsICE9PSBudWxsICYmICFpc1VuZGVmaW5lZCh2YWwpICYmIHZhbC5jb25zdHJ1Y3RvciAhPT0gbnVsbCAmJiAhaXNVbmRlZmluZWQodmFsLmNvbnN0cnVjdG9yKVxuICAgICYmIGlzRnVuY3Rpb24odmFsLmNvbnN0cnVjdG9yLmlzQnVmZmVyKSAmJiB2YWwuY29uc3RydWN0b3IuaXNCdWZmZXIodmFsKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBBcnJheUJ1ZmZlclxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gQXJyYXlCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0FycmF5QnVmZmVyID0ga2luZE9mVGVzdCgnQXJyYXlCdWZmZXInKTtcblxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgdmlldyBvbiBhbiBBcnJheUJ1ZmZlclxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSB2aWV3IG9uIGFuIEFycmF5QnVmZmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBcnJheUJ1ZmZlclZpZXcodmFsKSB7XG4gIGxldCByZXN1bHQ7XG4gIGlmICgodHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJykgJiYgKEFycmF5QnVmZmVyLmlzVmlldykpIHtcbiAgICByZXN1bHQgPSBBcnJheUJ1ZmZlci5pc1ZpZXcodmFsKTtcbiAgfSBlbHNlIHtcbiAgICByZXN1bHQgPSAodmFsKSAmJiAodmFsLmJ1ZmZlcikgJiYgKGlzQXJyYXlCdWZmZXIodmFsLmJ1ZmZlcikpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBTdHJpbmdcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgU3RyaW5nLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNTdHJpbmcgPSB0eXBlT2ZUZXN0KCdzdHJpbmcnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZ1bmN0aW9uXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRnVuY3Rpb24sIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0Z1bmN0aW9uID0gdHlwZU9mVGVzdCgnZnVuY3Rpb24nKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIE51bWJlclxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBOdW1iZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc051bWJlciA9IHR5cGVPZlRlc3QoJ251bWJlcicpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIE9iamVjdFxuICpcbiAqIEBwYXJhbSB7Kn0gdGhpbmcgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBPYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc09iamVjdCA9ICh0aGluZykgPT4gdGhpbmcgIT09IG51bGwgJiYgdHlwZW9mIHRoaW5nID09PSAnb2JqZWN0JztcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEJvb2xlYW5cbiAqXG4gKiBAcGFyYW0geyp9IHRoaW5nIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEJvb2xlYW4sIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0Jvb2xlYW4gPSB0aGluZyA9PiB0aGluZyA9PT0gdHJ1ZSB8fCB0aGluZyA9PT0gZmFsc2U7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBwbGFpbiBPYmplY3RcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgcGxhaW4gT2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNQbGFpbk9iamVjdCA9ICh2YWwpID0+IHtcbiAgaWYgKGtpbmRPZih2YWwpICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IHByb3RvdHlwZSA9IGdldFByb3RvdHlwZU9mKHZhbCk7XG4gIHJldHVybiAocHJvdG90eXBlID09PSBudWxsIHx8IHByb3RvdHlwZSA9PT0gT2JqZWN0LnByb3RvdHlwZSB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YocHJvdG90eXBlKSA9PT0gbnVsbCkgJiYgIShTeW1ib2wudG9TdHJpbmdUYWcgaW4gdmFsKSAmJiAhKFN5bWJvbC5pdGVyYXRvciBpbiB2YWwpO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRGF0ZVxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBEYXRlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNEYXRlID0ga2luZE9mVGVzdCgnRGF0ZScpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRmlsZVxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBGaWxlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNGaWxlID0ga2luZE9mVGVzdCgnRmlsZScpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgQmxvYlxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBCbG9iLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNCbG9iID0ga2luZE9mVGVzdCgnQmxvYicpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRmlsZUxpc3RcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRmlsZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzRmlsZUxpc3QgPSBraW5kT2ZUZXN0KCdGaWxlTGlzdCcpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgU3RyZWFtXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFN0cmVhbSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzU3RyZWFtID0gKHZhbCkgPT4gaXNPYmplY3QodmFsKSAmJiBpc0Z1bmN0aW9uKHZhbC5waXBlKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZvcm1EYXRhXG4gKlxuICogQHBhcmFtIHsqfSB0aGluZyBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIEZvcm1EYXRhLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNGb3JtRGF0YSA9ICh0aGluZykgPT4ge1xuICBsZXQga2luZDtcbiAgcmV0dXJuIHRoaW5nICYmIChcbiAgICAodHlwZW9mIEZvcm1EYXRhID09PSAnZnVuY3Rpb24nICYmIHRoaW5nIGluc3RhbmNlb2YgRm9ybURhdGEpIHx8IChcbiAgICAgIGlzRnVuY3Rpb24odGhpbmcuYXBwZW5kKSAmJiAoXG4gICAgICAgIChraW5kID0ga2luZE9mKHRoaW5nKSkgPT09ICdmb3JtZGF0YScgfHxcbiAgICAgICAgLy8gZGV0ZWN0IGZvcm0tZGF0YSBpbnN0YW5jZVxuICAgICAgICAoa2luZCA9PT0gJ29iamVjdCcgJiYgaXNGdW5jdGlvbih0aGluZy50b1N0cmluZykgJiYgdGhpbmcudG9TdHJpbmcoKSA9PT0gJ1tvYmplY3QgRm9ybURhdGFdJylcbiAgICAgIClcbiAgICApXG4gIClcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFVSTFNlYXJjaFBhcmFtcyBvYmplY3RcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgVVJMU2VhcmNoUGFyYW1zIG9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzVVJMU2VhcmNoUGFyYW1zID0ga2luZE9mVGVzdCgnVVJMU2VhcmNoUGFyYW1zJyk7XG5cbi8qKlxuICogVHJpbSBleGNlc3Mgd2hpdGVzcGFjZSBvZmYgdGhlIGJlZ2lubmluZyBhbmQgZW5kIG9mIGEgc3RyaW5nXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0ciBUaGUgU3RyaW5nIHRvIHRyaW1cbiAqXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgU3RyaW5nIGZyZWVkIG9mIGV4Y2VzcyB3aGl0ZXNwYWNlXG4gKi9cbmNvbnN0IHRyaW0gPSAoc3RyKSA9PiBzdHIudHJpbSA/XG4gIHN0ci50cmltKCkgOiBzdHIucmVwbGFjZSgvXltcXHNcXHVGRUZGXFx4QTBdK3xbXFxzXFx1RkVGRlxceEEwXSskL2csICcnKTtcblxuLyoqXG4gKiBJdGVyYXRlIG92ZXIgYW4gQXJyYXkgb3IgYW4gT2JqZWN0IGludm9raW5nIGEgZnVuY3Rpb24gZm9yIGVhY2ggaXRlbS5cbiAqXG4gKiBJZiBgb2JqYCBpcyBhbiBBcnJheSBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBwYXNzaW5nXG4gKiB0aGUgdmFsdWUsIGluZGV4LCBhbmQgY29tcGxldGUgYXJyYXkgZm9yIGVhY2ggaXRlbS5cbiAqXG4gKiBJZiAnb2JqJyBpcyBhbiBPYmplY3QgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgcGFzc2luZ1xuICogdGhlIHZhbHVlLCBrZXksIGFuZCBjb21wbGV0ZSBvYmplY3QgZm9yIGVhY2ggcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIHtPYmplY3R8QXJyYXl9IG9iaiBUaGUgb2JqZWN0IHRvIGl0ZXJhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBjYWxsYmFjayB0byBpbnZva2UgZm9yIGVhY2ggaXRlbVxuICpcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW2FsbE93bktleXMgPSBmYWxzZV1cbiAqIEByZXR1cm5zIHthbnl9XG4gKi9cbmZ1bmN0aW9uIGZvckVhY2gob2JqLCBmbiwge2FsbE93bktleXMgPSBmYWxzZX0gPSB7fSkge1xuICAvLyBEb24ndCBib3RoZXIgaWYgbm8gdmFsdWUgcHJvdmlkZWRcbiAgaWYgKG9iaiA9PT0gbnVsbCB8fCB0eXBlb2Ygb2JqID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxldCBpO1xuICBsZXQgbDtcblxuICAvLyBGb3JjZSBhbiBhcnJheSBpZiBub3QgYWxyZWFkeSBzb21ldGhpbmcgaXRlcmFibGVcbiAgaWYgKHR5cGVvZiBvYmogIT09ICdvYmplY3QnKSB7XG4gICAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gICAgb2JqID0gW29ial07XG4gIH1cblxuICBpZiAoaXNBcnJheShvYmopKSB7XG4gICAgLy8gSXRlcmF0ZSBvdmVyIGFycmF5IHZhbHVlc1xuICAgIGZvciAoaSA9IDAsIGwgPSBvYmoubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICBmbi5jYWxsKG51bGwsIG9ialtpXSwgaSwgb2JqKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gSXRlcmF0ZSBvdmVyIG9iamVjdCBrZXlzXG4gICAgY29uc3Qga2V5cyA9IGFsbE93bktleXMgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmopIDogT2JqZWN0LmtleXMob2JqKTtcbiAgICBjb25zdCBsZW4gPSBrZXlzLmxlbmd0aDtcbiAgICBsZXQga2V5O1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBrZXkgPSBrZXlzW2ldO1xuICAgICAgZm4uY2FsbChudWxsLCBvYmpba2V5XSwga2V5LCBvYmopO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBmaW5kS2V5KG9iaiwga2V5KSB7XG4gIGtleSA9IGtleS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMob2JqKTtcbiAgbGV0IGkgPSBrZXlzLmxlbmd0aDtcbiAgbGV0IF9rZXk7XG4gIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgX2tleSA9IGtleXNbaV07XG4gICAgaWYgKGtleSA9PT0gX2tleS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICByZXR1cm4gX2tleTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbmNvbnN0IF9nbG9iYWwgPSAoKCkgPT4ge1xuICAvKmVzbGludCBuby11bmRlZjowKi9cbiAgaWYgKHR5cGVvZiBnbG9iYWxUaGlzICE9PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gZ2xvYmFsVGhpcztcbiAgcmV0dXJuIHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiID8gc2VsZiA6ICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IGdsb2JhbClcbn0pKCk7XG5cbmNvbnN0IGlzQ29udGV4dERlZmluZWQgPSAoY29udGV4dCkgPT4gIWlzVW5kZWZpbmVkKGNvbnRleHQpICYmIGNvbnRleHQgIT09IF9nbG9iYWw7XG5cbi8qKlxuICogQWNjZXB0cyB2YXJhcmdzIGV4cGVjdGluZyBlYWNoIGFyZ3VtZW50IHRvIGJlIGFuIG9iamVjdCwgdGhlblxuICogaW1tdXRhYmx5IG1lcmdlcyB0aGUgcHJvcGVydGllcyBvZiBlYWNoIG9iamVjdCBhbmQgcmV0dXJucyByZXN1bHQuXG4gKlxuICogV2hlbiBtdWx0aXBsZSBvYmplY3RzIGNvbnRhaW4gdGhlIHNhbWUga2V5IHRoZSBsYXRlciBvYmplY3QgaW5cbiAqIHRoZSBhcmd1bWVudHMgbGlzdCB3aWxsIHRha2UgcHJlY2VkZW5jZS5cbiAqXG4gKiBFeGFtcGxlOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgcmVzdWx0ID0gbWVyZ2Uoe2ZvbzogMTIzfSwge2ZvbzogNDU2fSk7XG4gKiBjb25zb2xlLmxvZyhyZXN1bHQuZm9vKTsgLy8gb3V0cHV0cyA0NTZcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmoxIE9iamVjdCB0byBtZXJnZVxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJlc3VsdCBvZiBhbGwgbWVyZ2UgcHJvcGVydGllc1xuICovXG5mdW5jdGlvbiBtZXJnZSgvKiBvYmoxLCBvYmoyLCBvYmozLCAuLi4gKi8pIHtcbiAgY29uc3Qge2Nhc2VsZXNzfSA9IGlzQ29udGV4dERlZmluZWQodGhpcykgJiYgdGhpcyB8fCB7fTtcbiAgY29uc3QgcmVzdWx0ID0ge307XG4gIGNvbnN0IGFzc2lnblZhbHVlID0gKHZhbCwga2V5KSA9PiB7XG4gICAgY29uc3QgdGFyZ2V0S2V5ID0gY2FzZWxlc3MgJiYgZmluZEtleShyZXN1bHQsIGtleSkgfHwga2V5O1xuICAgIGlmIChpc1BsYWluT2JqZWN0KHJlc3VsdFt0YXJnZXRLZXldKSAmJiBpc1BsYWluT2JqZWN0KHZhbCkpIHtcbiAgICAgIHJlc3VsdFt0YXJnZXRLZXldID0gbWVyZ2UocmVzdWx0W3RhcmdldEtleV0sIHZhbCk7XG4gICAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KHZhbCkpIHtcbiAgICAgIHJlc3VsdFt0YXJnZXRLZXldID0gbWVyZ2Uoe30sIHZhbCk7XG4gICAgfSBlbHNlIGlmIChpc0FycmF5KHZhbCkpIHtcbiAgICAgIHJlc3VsdFt0YXJnZXRLZXldID0gdmFsLnNsaWNlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdFt0YXJnZXRLZXldID0gdmFsO1xuICAgIH1cbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGFyZ3VtZW50c1tpXSAmJiBmb3JFYWNoKGFyZ3VtZW50c1tpXSwgYXNzaWduVmFsdWUpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogRXh0ZW5kcyBvYmplY3QgYSBieSBtdXRhYmx5IGFkZGluZyB0byBpdCB0aGUgcHJvcGVydGllcyBvZiBvYmplY3QgYi5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gYSBUaGUgb2JqZWN0IHRvIGJlIGV4dGVuZGVkXG4gKiBAcGFyYW0ge09iamVjdH0gYiBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyBmcm9tXG4gKiBAcGFyYW0ge09iamVjdH0gdGhpc0FyZyBUaGUgb2JqZWN0IHRvIGJpbmQgZnVuY3Rpb24gdG9cbiAqXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFthbGxPd25LZXlzXVxuICogQHJldHVybnMge09iamVjdH0gVGhlIHJlc3VsdGluZyB2YWx1ZSBvZiBvYmplY3QgYVxuICovXG5jb25zdCBleHRlbmQgPSAoYSwgYiwgdGhpc0FyZywge2FsbE93bktleXN9PSB7fSkgPT4ge1xuICBmb3JFYWNoKGIsICh2YWwsIGtleSkgPT4ge1xuICAgIGlmICh0aGlzQXJnICYmIGlzRnVuY3Rpb24odmFsKSkge1xuICAgICAgYVtrZXldID0gYmluZCh2YWwsIHRoaXNBcmcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhW2tleV0gPSB2YWw7XG4gICAgfVxuICB9LCB7YWxsT3duS2V5c30pO1xuICByZXR1cm4gYTtcbn1cblxuLyoqXG4gKiBSZW1vdmUgYnl0ZSBvcmRlciBtYXJrZXIuIFRoaXMgY2F0Y2hlcyBFRiBCQiBCRiAodGhlIFVURi04IEJPTSlcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gY29udGVudCB3aXRoIEJPTVxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IGNvbnRlbnQgdmFsdWUgd2l0aG91dCBCT01cbiAqL1xuY29uc3Qgc3RyaXBCT00gPSAoY29udGVudCkgPT4ge1xuICBpZiAoY29udGVudC5jaGFyQ29kZUF0KDApID09PSAweEZFRkYpIHtcbiAgICBjb250ZW50ID0gY29udGVudC5zbGljZSgxKTtcbiAgfVxuICByZXR1cm4gY29udGVudDtcbn1cblxuLyoqXG4gKiBJbmhlcml0IHRoZSBwcm90b3R5cGUgbWV0aG9kcyBmcm9tIG9uZSBjb25zdHJ1Y3RvciBpbnRvIGFub3RoZXJcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBzdXBlckNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge29iamVjdH0gW3Byb3BzXVxuICogQHBhcmFtIHtvYmplY3R9IFtkZXNjcmlwdG9yc11cbiAqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuY29uc3QgaW5oZXJpdHMgPSAoY29uc3RydWN0b3IsIHN1cGVyQ29uc3RydWN0b3IsIHByb3BzLCBkZXNjcmlwdG9ycykgPT4ge1xuICBjb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ29uc3RydWN0b3IucHJvdG90eXBlLCBkZXNjcmlwdG9ycyk7XG4gIGNvbnN0cnVjdG9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGNvbnN0cnVjdG9yO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29uc3RydWN0b3IsICdzdXBlcicsIHtcbiAgICB2YWx1ZTogc3VwZXJDb25zdHJ1Y3Rvci5wcm90b3R5cGVcbiAgfSk7XG4gIHByb3BzICYmIE9iamVjdC5hc3NpZ24oY29uc3RydWN0b3IucHJvdG90eXBlLCBwcm9wcyk7XG59XG5cbi8qKlxuICogUmVzb2x2ZSBvYmplY3Qgd2l0aCBkZWVwIHByb3RvdHlwZSBjaGFpbiB0byBhIGZsYXQgb2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlT2JqIHNvdXJjZSBvYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBbZGVzdE9ial1cbiAqIEBwYXJhbSB7RnVuY3Rpb258Qm9vbGVhbn0gW2ZpbHRlcl1cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtwcm9wRmlsdGVyXVxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9XG4gKi9cbmNvbnN0IHRvRmxhdE9iamVjdCA9IChzb3VyY2VPYmosIGRlc3RPYmosIGZpbHRlciwgcHJvcEZpbHRlcikgPT4ge1xuICBsZXQgcHJvcHM7XG4gIGxldCBpO1xuICBsZXQgcHJvcDtcbiAgY29uc3QgbWVyZ2VkID0ge307XG5cbiAgZGVzdE9iaiA9IGRlc3RPYmogfHwge307XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lcS1udWxsLGVxZXFlcVxuICBpZiAoc291cmNlT2JqID09IG51bGwpIHJldHVybiBkZXN0T2JqO1xuXG4gIGRvIHtcbiAgICBwcm9wcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHNvdXJjZU9iaik7XG4gICAgaSA9IHByb3BzLmxlbmd0aDtcbiAgICB3aGlsZSAoaS0tID4gMCkge1xuICAgICAgcHJvcCA9IHByb3BzW2ldO1xuICAgICAgaWYgKCghcHJvcEZpbHRlciB8fCBwcm9wRmlsdGVyKHByb3AsIHNvdXJjZU9iaiwgZGVzdE9iaikpICYmICFtZXJnZWRbcHJvcF0pIHtcbiAgICAgICAgZGVzdE9ialtwcm9wXSA9IHNvdXJjZU9ialtwcm9wXTtcbiAgICAgICAgbWVyZ2VkW3Byb3BdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgc291cmNlT2JqID0gZmlsdGVyICE9PSBmYWxzZSAmJiBnZXRQcm90b3R5cGVPZihzb3VyY2VPYmopO1xuICB9IHdoaWxlIChzb3VyY2VPYmogJiYgKCFmaWx0ZXIgfHwgZmlsdGVyKHNvdXJjZU9iaiwgZGVzdE9iaikpICYmIHNvdXJjZU9iaiAhPT0gT2JqZWN0LnByb3RvdHlwZSk7XG5cbiAgcmV0dXJuIGRlc3RPYmo7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIGEgc3RyaW5nIGVuZHMgd2l0aCB0aGUgY2hhcmFjdGVycyBvZiBhIHNwZWNpZmllZCBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKiBAcGFyYW0ge1N0cmluZ30gc2VhcmNoU3RyaW5nXG4gKiBAcGFyYW0ge051bWJlcn0gW3Bvc2l0aW9uPSAwXVxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5jb25zdCBlbmRzV2l0aCA9IChzdHIsIHNlYXJjaFN0cmluZywgcG9zaXRpb24pID0+IHtcbiAgc3RyID0gU3RyaW5nKHN0cik7XG4gIGlmIChwb3NpdGlvbiA9PT0gdW5kZWZpbmVkIHx8IHBvc2l0aW9uID4gc3RyLmxlbmd0aCkge1xuICAgIHBvc2l0aW9uID0gc3RyLmxlbmd0aDtcbiAgfVxuICBwb3NpdGlvbiAtPSBzZWFyY2hTdHJpbmcubGVuZ3RoO1xuICBjb25zdCBsYXN0SW5kZXggPSBzdHIuaW5kZXhPZihzZWFyY2hTdHJpbmcsIHBvc2l0aW9uKTtcbiAgcmV0dXJuIGxhc3RJbmRleCAhPT0gLTEgJiYgbGFzdEluZGV4ID09PSBwb3NpdGlvbjtcbn1cblxuXG4vKipcbiAqIFJldHVybnMgbmV3IGFycmF5IGZyb20gYXJyYXkgbGlrZSBvYmplY3Qgb3IgbnVsbCBpZiBmYWlsZWRcbiAqXG4gKiBAcGFyYW0geyp9IFt0aGluZ11cbiAqXG4gKiBAcmV0dXJucyB7P0FycmF5fVxuICovXG5jb25zdCB0b0FycmF5ID0gKHRoaW5nKSA9PiB7XG4gIGlmICghdGhpbmcpIHJldHVybiBudWxsO1xuICBpZiAoaXNBcnJheSh0aGluZykpIHJldHVybiB0aGluZztcbiAgbGV0IGkgPSB0aGluZy5sZW5ndGg7XG4gIGlmICghaXNOdW1iZXIoaSkpIHJldHVybiBudWxsO1xuICBjb25zdCBhcnIgPSBuZXcgQXJyYXkoaSk7XG4gIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgYXJyW2ldID0gdGhpbmdbaV07XG4gIH1cbiAgcmV0dXJuIGFycjtcbn1cblxuLyoqXG4gKiBDaGVja2luZyBpZiB0aGUgVWludDhBcnJheSBleGlzdHMgYW5kIGlmIGl0IGRvZXMsIGl0IHJldHVybnMgYSBmdW5jdGlvbiB0aGF0IGNoZWNrcyBpZiB0aGVcbiAqIHRoaW5nIHBhc3NlZCBpbiBpcyBhbiBpbnN0YW5jZSBvZiBVaW50OEFycmF5XG4gKlxuICogQHBhcmFtIHtUeXBlZEFycmF5fVxuICpcbiAqIEByZXR1cm5zIHtBcnJheX1cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbmNvbnN0IGlzVHlwZWRBcnJheSA9IChUeXBlZEFycmF5ID0+IHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgcmV0dXJuIHRoaW5nID0+IHtcbiAgICByZXR1cm4gVHlwZWRBcnJheSAmJiB0aGluZyBpbnN0YW5jZW9mIFR5cGVkQXJyYXk7XG4gIH07XG59KSh0eXBlb2YgVWludDhBcnJheSAhPT0gJ3VuZGVmaW5lZCcgJiYgZ2V0UHJvdG90eXBlT2YoVWludDhBcnJheSkpO1xuXG4vKipcbiAqIEZvciBlYWNoIGVudHJ5IGluIHRoZSBvYmplY3QsIGNhbGwgdGhlIGZ1bmN0aW9uIHdpdGggdGhlIGtleSBhbmQgdmFsdWUuXG4gKlxuICogQHBhcmFtIHtPYmplY3Q8YW55LCBhbnk+fSBvYmogLSBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIC0gVGhlIGZ1bmN0aW9uIHRvIGNhbGwgZm9yIGVhY2ggZW50cnkuXG4gKlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmNvbnN0IGZvckVhY2hFbnRyeSA9IChvYmosIGZuKSA9PiB7XG4gIGNvbnN0IGdlbmVyYXRvciA9IG9iaiAmJiBvYmpbU3ltYm9sLml0ZXJhdG9yXTtcblxuICBjb25zdCBpdGVyYXRvciA9IGdlbmVyYXRvci5jYWxsKG9iaik7XG5cbiAgbGV0IHJlc3VsdDtcblxuICB3aGlsZSAoKHJlc3VsdCA9IGl0ZXJhdG9yLm5leHQoKSkgJiYgIXJlc3VsdC5kb25lKSB7XG4gICAgY29uc3QgcGFpciA9IHJlc3VsdC52YWx1ZTtcbiAgICBmbi5jYWxsKG9iaiwgcGFpclswXSwgcGFpclsxXSk7XG4gIH1cbn1cblxuLyoqXG4gKiBJdCB0YWtlcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBhbmQgYSBzdHJpbmcsIGFuZCByZXR1cm5zIGFuIGFycmF5IG9mIGFsbCB0aGUgbWF0Y2hlc1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWdFeHAgLSBUaGUgcmVndWxhciBleHByZXNzaW9uIHRvIG1hdGNoIGFnYWluc3QuXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyIC0gVGhlIHN0cmluZyB0byBzZWFyY2guXG4gKlxuICogQHJldHVybnMge0FycmF5PGJvb2xlYW4+fVxuICovXG5jb25zdCBtYXRjaEFsbCA9IChyZWdFeHAsIHN0cikgPT4ge1xuICBsZXQgbWF0Y2hlcztcbiAgY29uc3QgYXJyID0gW107XG5cbiAgd2hpbGUgKChtYXRjaGVzID0gcmVnRXhwLmV4ZWMoc3RyKSkgIT09IG51bGwpIHtcbiAgICBhcnIucHVzaChtYXRjaGVzKTtcbiAgfVxuXG4gIHJldHVybiBhcnI7XG59XG5cbi8qIENoZWNraW5nIGlmIHRoZSBraW5kT2ZUZXN0IGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIHBhc3NlZCBhbiBIVE1MRm9ybUVsZW1lbnQuICovXG5jb25zdCBpc0hUTUxGb3JtID0ga2luZE9mVGVzdCgnSFRNTEZvcm1FbGVtZW50Jyk7XG5cbmNvbnN0IHRvQ2FtZWxDYXNlID0gc3RyID0+IHtcbiAgcmV0dXJuIHN0ci50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1stX1xcc10oW2EtelxcZF0pKFxcdyopL2csXG4gICAgZnVuY3Rpb24gcmVwbGFjZXIobSwgcDEsIHAyKSB7XG4gICAgICByZXR1cm4gcDEudG9VcHBlckNhc2UoKSArIHAyO1xuICAgIH1cbiAgKTtcbn07XG5cbi8qIENyZWF0aW5nIGEgZnVuY3Rpb24gdGhhdCB3aWxsIGNoZWNrIGlmIGFuIG9iamVjdCBoYXMgYSBwcm9wZXJ0eS4gKi9cbmNvbnN0IGhhc093blByb3BlcnR5ID0gKCh7aGFzT3duUHJvcGVydHl9KSA9PiAob2JqLCBwcm9wKSA9PiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkpKE9iamVjdC5wcm90b3R5cGUpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgUmVnRXhwIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBSZWdFeHAgb2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNSZWdFeHAgPSBraW5kT2ZUZXN0KCdSZWdFeHAnKTtcblxuY29uc3QgcmVkdWNlRGVzY3JpcHRvcnMgPSAob2JqLCByZWR1Y2VyKSA9PiB7XG4gIGNvbnN0IGRlc2NyaXB0b3JzID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMob2JqKTtcbiAgY29uc3QgcmVkdWNlZERlc2NyaXB0b3JzID0ge307XG5cbiAgZm9yRWFjaChkZXNjcmlwdG9ycywgKGRlc2NyaXB0b3IsIG5hbWUpID0+IHtcbiAgICBsZXQgcmV0O1xuICAgIGlmICgocmV0ID0gcmVkdWNlcihkZXNjcmlwdG9yLCBuYW1lLCBvYmopKSAhPT0gZmFsc2UpIHtcbiAgICAgIHJlZHVjZWREZXNjcmlwdG9yc1tuYW1lXSA9IHJldCB8fCBkZXNjcmlwdG9yO1xuICAgIH1cbiAgfSk7XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMob2JqLCByZWR1Y2VkRGVzY3JpcHRvcnMpO1xufVxuXG4vKipcbiAqIE1ha2VzIGFsbCBtZXRob2RzIHJlYWQtb25seVxuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICovXG5cbmNvbnN0IGZyZWV6ZU1ldGhvZHMgPSAob2JqKSA9PiB7XG4gIHJlZHVjZURlc2NyaXB0b3JzKG9iaiwgKGRlc2NyaXB0b3IsIG5hbWUpID0+IHtcbiAgICAvLyBza2lwIHJlc3RyaWN0ZWQgcHJvcHMgaW4gc3RyaWN0IG1vZGVcbiAgICBpZiAoaXNGdW5jdGlvbihvYmopICYmIFsnYXJndW1lbnRzJywgJ2NhbGxlcicsICdjYWxsZWUnXS5pbmRleE9mKG5hbWUpICE9PSAtMSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlID0gb2JqW25hbWVdO1xuXG4gICAgaWYgKCFpc0Z1bmN0aW9uKHZhbHVlKSkgcmV0dXJuO1xuXG4gICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZmFsc2U7XG5cbiAgICBpZiAoJ3dyaXRhYmxlJyBpbiBkZXNjcmlwdG9yKSB7XG4gICAgICBkZXNjcmlwdG9yLndyaXRhYmxlID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFkZXNjcmlwdG9yLnNldCkge1xuICAgICAgZGVzY3JpcHRvci5zZXQgPSAoKSA9PiB7XG4gICAgICAgIHRocm93IEVycm9yKCdDYW4gbm90IHJld3JpdGUgcmVhZC1vbmx5IG1ldGhvZCBcXCcnICsgbmFtZSArICdcXCcnKTtcbiAgICAgIH07XG4gICAgfVxuICB9KTtcbn1cblxuY29uc3QgdG9PYmplY3RTZXQgPSAoYXJyYXlPclN0cmluZywgZGVsaW1pdGVyKSA9PiB7XG4gIGNvbnN0IG9iaiA9IHt9O1xuXG4gIGNvbnN0IGRlZmluZSA9IChhcnIpID0+IHtcbiAgICBhcnIuZm9yRWFjaCh2YWx1ZSA9PiB7XG4gICAgICBvYmpbdmFsdWVdID0gdHJ1ZTtcbiAgICB9KTtcbiAgfVxuXG4gIGlzQXJyYXkoYXJyYXlPclN0cmluZykgPyBkZWZpbmUoYXJyYXlPclN0cmluZykgOiBkZWZpbmUoU3RyaW5nKGFycmF5T3JTdHJpbmcpLnNwbGl0KGRlbGltaXRlcikpO1xuXG4gIHJldHVybiBvYmo7XG59XG5cbmNvbnN0IG5vb3AgPSAoKSA9PiB7fVxuXG5jb25zdCB0b0Zpbml0ZU51bWJlciA9ICh2YWx1ZSwgZGVmYXVsdFZhbHVlKSA9PiB7XG4gIHZhbHVlID0gK3ZhbHVlO1xuICByZXR1cm4gTnVtYmVyLmlzRmluaXRlKHZhbHVlKSA/IHZhbHVlIDogZGVmYXVsdFZhbHVlO1xufVxuXG5jb25zdCBBTFBIQSA9ICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eidcblxuY29uc3QgRElHSVQgPSAnMDEyMzQ1Njc4OSc7XG5cbmNvbnN0IEFMUEhBQkVUID0ge1xuICBESUdJVCxcbiAgQUxQSEEsXG4gIEFMUEhBX0RJR0lUOiBBTFBIQSArIEFMUEhBLnRvVXBwZXJDYXNlKCkgKyBESUdJVFxufVxuXG5jb25zdCBnZW5lcmF0ZVN0cmluZyA9IChzaXplID0gMTYsIGFscGhhYmV0ID0gQUxQSEFCRVQuQUxQSEFfRElHSVQpID0+IHtcbiAgbGV0IHN0ciA9ICcnO1xuICBjb25zdCB7bGVuZ3RofSA9IGFscGhhYmV0O1xuICB3aGlsZSAoc2l6ZS0tKSB7XG4gICAgc3RyICs9IGFscGhhYmV0W01hdGgucmFuZG9tKCkgKiBsZW5ndGh8MF1cbiAgfVxuXG4gIHJldHVybiBzdHI7XG59XG5cbi8qKlxuICogSWYgdGhlIHRoaW5nIGlzIGEgRm9ybURhdGEgb2JqZWN0LCByZXR1cm4gdHJ1ZSwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cbiAqXG4gKiBAcGFyYW0ge3Vua25vd259IHRoaW5nIC0gVGhlIHRoaW5nIHRvIGNoZWNrLlxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc1NwZWNDb21wbGlhbnRGb3JtKHRoaW5nKSB7XG4gIHJldHVybiAhISh0aGluZyAmJiBpc0Z1bmN0aW9uKHRoaW5nLmFwcGVuZCkgJiYgdGhpbmdbU3ltYm9sLnRvU3RyaW5nVGFnXSA9PT0gJ0Zvcm1EYXRhJyAmJiB0aGluZ1tTeW1ib2wuaXRlcmF0b3JdKTtcbn1cblxuY29uc3QgdG9KU09OT2JqZWN0ID0gKG9iaikgPT4ge1xuICBjb25zdCBzdGFjayA9IG5ldyBBcnJheSgxMCk7XG5cbiAgY29uc3QgdmlzaXQgPSAoc291cmNlLCBpKSA9PiB7XG5cbiAgICBpZiAoaXNPYmplY3Qoc291cmNlKSkge1xuICAgICAgaWYgKHN0YWNrLmluZGV4T2Yoc291cmNlKSA+PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYoISgndG9KU09OJyBpbiBzb3VyY2UpKSB7XG4gICAgICAgIHN0YWNrW2ldID0gc291cmNlO1xuICAgICAgICBjb25zdCB0YXJnZXQgPSBpc0FycmF5KHNvdXJjZSkgPyBbXSA6IHt9O1xuXG4gICAgICAgIGZvckVhY2goc291cmNlLCAodmFsdWUsIGtleSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHJlZHVjZWRWYWx1ZSA9IHZpc2l0KHZhbHVlLCBpICsgMSk7XG4gICAgICAgICAgIWlzVW5kZWZpbmVkKHJlZHVjZWRWYWx1ZSkgJiYgKHRhcmdldFtrZXldID0gcmVkdWNlZFZhbHVlKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgc3RhY2tbaV0gPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc291cmNlO1xuICB9XG5cbiAgcmV0dXJuIHZpc2l0KG9iaiwgMCk7XG59XG5cbmNvbnN0IGlzQXN5bmNGbiA9IGtpbmRPZlRlc3QoJ0FzeW5jRnVuY3Rpb24nKTtcblxuY29uc3QgaXNUaGVuYWJsZSA9ICh0aGluZykgPT5cbiAgdGhpbmcgJiYgKGlzT2JqZWN0KHRoaW5nKSB8fCBpc0Z1bmN0aW9uKHRoaW5nKSkgJiYgaXNGdW5jdGlvbih0aGluZy50aGVuKSAmJiBpc0Z1bmN0aW9uKHRoaW5nLmNhdGNoKTtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBpc0FycmF5LFxuICBpc0FycmF5QnVmZmVyLFxuICBpc0J1ZmZlcixcbiAgaXNGb3JtRGF0YSxcbiAgaXNBcnJheUJ1ZmZlclZpZXcsXG4gIGlzU3RyaW5nLFxuICBpc051bWJlcixcbiAgaXNCb29sZWFuLFxuICBpc09iamVjdCxcbiAgaXNQbGFpbk9iamVjdCxcbiAgaXNVbmRlZmluZWQsXG4gIGlzRGF0ZSxcbiAgaXNGaWxlLFxuICBpc0Jsb2IsXG4gIGlzUmVnRXhwLFxuICBpc0Z1bmN0aW9uLFxuICBpc1N0cmVhbSxcbiAgaXNVUkxTZWFyY2hQYXJhbXMsXG4gIGlzVHlwZWRBcnJheSxcbiAgaXNGaWxlTGlzdCxcbiAgZm9yRWFjaCxcbiAgbWVyZ2UsXG4gIGV4dGVuZCxcbiAgdHJpbSxcbiAgc3RyaXBCT00sXG4gIGluaGVyaXRzLFxuICB0b0ZsYXRPYmplY3QsXG4gIGtpbmRPZixcbiAga2luZE9mVGVzdCxcbiAgZW5kc1dpdGgsXG4gIHRvQXJyYXksXG4gIGZvckVhY2hFbnRyeSxcbiAgbWF0Y2hBbGwsXG4gIGlzSFRNTEZvcm0sXG4gIGhhc093blByb3BlcnR5LFxuICBoYXNPd25Qcm9wOiBoYXNPd25Qcm9wZXJ0eSwgLy8gYW4gYWxpYXMgdG8gYXZvaWQgRVNMaW50IG5vLXByb3RvdHlwZS1idWlsdGlucyBkZXRlY3Rpb25cbiAgcmVkdWNlRGVzY3JpcHRvcnMsXG4gIGZyZWV6ZU1ldGhvZHMsXG4gIHRvT2JqZWN0U2V0LFxuICB0b0NhbWVsQ2FzZSxcbiAgbm9vcCxcbiAgdG9GaW5pdGVOdW1iZXIsXG4gIGZpbmRLZXksXG4gIGdsb2JhbDogX2dsb2JhbCxcbiAgaXNDb250ZXh0RGVmaW5lZCxcbiAgQUxQSEFCRVQsXG4gIGdlbmVyYXRlU3RyaW5nLFxuICBpc1NwZWNDb21wbGlhbnRGb3JtLFxuICB0b0pTT05PYmplY3QsXG4gIGlzQXN5bmNGbixcbiAgaXNUaGVuYWJsZVxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcblxuLyoqXG4gKiBDcmVhdGUgYW4gRXJyb3Igd2l0aCB0aGUgc3BlY2lmaWVkIG1lc3NhZ2UsIGNvbmZpZywgZXJyb3IgY29kZSwgcmVxdWVzdCBhbmQgcmVzcG9uc2UuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gW2NvZGVdIFRoZSBlcnJvciBjb2RlIChmb3IgZXhhbXBsZSwgJ0VDT05OQUJPUlRFRCcpLlxuICogQHBhcmFtIHtPYmplY3R9IFtjb25maWddIFRoZSBjb25maWcuXG4gKiBAcGFyYW0ge09iamVjdH0gW3JlcXVlc3RdIFRoZSByZXF1ZXN0LlxuICogQHBhcmFtIHtPYmplY3R9IFtyZXNwb25zZV0gVGhlIHJlc3BvbnNlLlxuICpcbiAqIEByZXR1cm5zIHtFcnJvcn0gVGhlIGNyZWF0ZWQgZXJyb3IuXG4gKi9cbmZ1bmN0aW9uIEF4aW9zRXJyb3IobWVzc2FnZSwgY29kZSwgY29uZmlnLCByZXF1ZXN0LCByZXNwb25zZSkge1xuICBFcnJvci5jYWxsKHRoaXMpO1xuXG4gIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSkge1xuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHRoaXMuY29uc3RydWN0b3IpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuc3RhY2sgPSAobmV3IEVycm9yKCkpLnN0YWNrO1xuICB9XG5cbiAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcbiAgdGhpcy5uYW1lID0gJ0F4aW9zRXJyb3InO1xuICBjb2RlICYmICh0aGlzLmNvZGUgPSBjb2RlKTtcbiAgY29uZmlnICYmICh0aGlzLmNvbmZpZyA9IGNvbmZpZyk7XG4gIHJlcXVlc3QgJiYgKHRoaXMucmVxdWVzdCA9IHJlcXVlc3QpO1xuICByZXNwb25zZSAmJiAodGhpcy5yZXNwb25zZSA9IHJlc3BvbnNlKTtcbn1cblxudXRpbHMuaW5oZXJpdHMoQXhpb3NFcnJvciwgRXJyb3IsIHtcbiAgdG9KU09OOiBmdW5jdGlvbiB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIFN0YW5kYXJkXG4gICAgICBtZXNzYWdlOiB0aGlzLm1lc3NhZ2UsXG4gICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAvLyBNaWNyb3NvZnRcbiAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLmRlc2NyaXB0aW9uLFxuICAgICAgbnVtYmVyOiB0aGlzLm51bWJlcixcbiAgICAgIC8vIE1vemlsbGFcbiAgICAgIGZpbGVOYW1lOiB0aGlzLmZpbGVOYW1lLFxuICAgICAgbGluZU51bWJlcjogdGhpcy5saW5lTnVtYmVyLFxuICAgICAgY29sdW1uTnVtYmVyOiB0aGlzLmNvbHVtbk51bWJlcixcbiAgICAgIHN0YWNrOiB0aGlzLnN0YWNrLFxuICAgICAgLy8gQXhpb3NcbiAgICAgIGNvbmZpZzogdXRpbHMudG9KU09OT2JqZWN0KHRoaXMuY29uZmlnKSxcbiAgICAgIGNvZGU6IHRoaXMuY29kZSxcbiAgICAgIHN0YXR1czogdGhpcy5yZXNwb25zZSAmJiB0aGlzLnJlc3BvbnNlLnN0YXR1cyA/IHRoaXMucmVzcG9uc2Uuc3RhdHVzIDogbnVsbFxuICAgIH07XG4gIH1cbn0pO1xuXG5jb25zdCBwcm90b3R5cGUgPSBBeGlvc0Vycm9yLnByb3RvdHlwZTtcbmNvbnN0IGRlc2NyaXB0b3JzID0ge307XG5cbltcbiAgJ0VSUl9CQURfT1BUSU9OX1ZBTFVFJyxcbiAgJ0VSUl9CQURfT1BUSU9OJyxcbiAgJ0VDT05OQUJPUlRFRCcsXG4gICdFVElNRURPVVQnLFxuICAnRVJSX05FVFdPUksnLFxuICAnRVJSX0ZSX1RPT19NQU5ZX1JFRElSRUNUUycsXG4gICdFUlJfREVQUkVDQVRFRCcsXG4gICdFUlJfQkFEX1JFU1BPTlNFJyxcbiAgJ0VSUl9CQURfUkVRVUVTVCcsXG4gICdFUlJfQ0FOQ0VMRUQnLFxuICAnRVJSX05PVF9TVVBQT1JUJyxcbiAgJ0VSUl9JTlZBTElEX1VSTCdcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5dLmZvckVhY2goY29kZSA9PiB7XG4gIGRlc2NyaXB0b3JzW2NvZGVdID0ge3ZhbHVlOiBjb2RlfTtcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhBeGlvc0Vycm9yLCBkZXNjcmlwdG9ycyk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkocHJvdG90eXBlLCAnaXNBeGlvc0Vycm9yJywge3ZhbHVlOiB0cnVlfSk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5BeGlvc0Vycm9yLmZyb20gPSAoZXJyb3IsIGNvZGUsIGNvbmZpZywgcmVxdWVzdCwgcmVzcG9uc2UsIGN1c3RvbVByb3BzKSA9PiB7XG4gIGNvbnN0IGF4aW9zRXJyb3IgPSBPYmplY3QuY3JlYXRlKHByb3RvdHlwZSk7XG5cbiAgdXRpbHMudG9GbGF0T2JqZWN0KGVycm9yLCBheGlvc0Vycm9yLCBmdW5jdGlvbiBmaWx0ZXIob2JqKSB7XG4gICAgcmV0dXJuIG9iaiAhPT0gRXJyb3IucHJvdG90eXBlO1xuICB9LCBwcm9wID0+IHtcbiAgICByZXR1cm4gcHJvcCAhPT0gJ2lzQXhpb3NFcnJvcic7XG4gIH0pO1xuXG4gIEF4aW9zRXJyb3IuY2FsbChheGlvc0Vycm9yLCBlcnJvci5tZXNzYWdlLCBjb2RlLCBjb25maWcsIHJlcXVlc3QsIHJlc3BvbnNlKTtcblxuICBheGlvc0Vycm9yLmNhdXNlID0gZXJyb3I7XG5cbiAgYXhpb3NFcnJvci5uYW1lID0gZXJyb3IubmFtZTtcblxuICBjdXN0b21Qcm9wcyAmJiBPYmplY3QuYXNzaWduKGF4aW9zRXJyb3IsIGN1c3RvbVByb3BzKTtcblxuICByZXR1cm4gYXhpb3NFcnJvcjtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEF4aW9zRXJyb3I7XG4iLCIvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgc3RyaWN0XG5leHBvcnQgZGVmYXVsdCBudWxsO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IEF4aW9zRXJyb3IgZnJvbSAnLi4vY29yZS9BeGlvc0Vycm9yLmpzJztcbi8vIHRlbXBvcmFyeSBob3RmaXggdG8gYXZvaWQgY2lyY3VsYXIgcmVmZXJlbmNlcyB1bnRpbCBBeGlvc1VSTFNlYXJjaFBhcmFtcyBpcyByZWZhY3RvcmVkXG5pbXBvcnQgUGxhdGZvcm1Gb3JtRGF0YSBmcm9tICcuLi9wbGF0Zm9ybS9ub2RlL2NsYXNzZXMvRm9ybURhdGEuanMnO1xuXG4vKipcbiAqIERldGVybWluZXMgaWYgdGhlIGdpdmVuIHRoaW5nIGlzIGEgYXJyYXkgb3IganMgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0aGluZyAtIFRoZSBvYmplY3Qgb3IgYXJyYXkgdG8gYmUgdmlzaXRlZC5cbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNWaXNpdGFibGUodGhpbmcpIHtcbiAgcmV0dXJuIHV0aWxzLmlzUGxhaW5PYmplY3QodGhpbmcpIHx8IHV0aWxzLmlzQXJyYXkodGhpbmcpO1xufVxuXG4vKipcbiAqIEl0IHJlbW92ZXMgdGhlIGJyYWNrZXRzIGZyb20gdGhlIGVuZCBvZiBhIHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUga2V5IG9mIHRoZSBwYXJhbWV0ZXIuXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gdGhlIGtleSB3aXRob3V0IHRoZSBicmFja2V0cy5cbiAqL1xuZnVuY3Rpb24gcmVtb3ZlQnJhY2tldHMoa2V5KSB7XG4gIHJldHVybiB1dGlscy5lbmRzV2l0aChrZXksICdbXScpID8ga2V5LnNsaWNlKDAsIC0yKSA6IGtleTtcbn1cblxuLyoqXG4gKiBJdCB0YWtlcyBhIHBhdGgsIGEga2V5LCBhbmQgYSBib29sZWFuLCBhbmQgcmV0dXJucyBhIHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIC0gVGhlIHBhdGggdG8gdGhlIGN1cnJlbnQga2V5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBrZXkgb2YgdGhlIGN1cnJlbnQgb2JqZWN0IGJlaW5nIGl0ZXJhdGVkIG92ZXIuXG4gKiBAcGFyYW0ge3N0cmluZ30gZG90cyAtIElmIHRydWUsIHRoZSBrZXkgd2lsbCBiZSByZW5kZXJlZCB3aXRoIGRvdHMgaW5zdGVhZCBvZiBicmFja2V0cy5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgcGF0aCB0byB0aGUgY3VycmVudCBrZXkuXG4gKi9cbmZ1bmN0aW9uIHJlbmRlcktleShwYXRoLCBrZXksIGRvdHMpIHtcbiAgaWYgKCFwYXRoKSByZXR1cm4ga2V5O1xuICByZXR1cm4gcGF0aC5jb25jYXQoa2V5KS5tYXAoZnVuY3Rpb24gZWFjaCh0b2tlbiwgaSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgIHRva2VuID0gcmVtb3ZlQnJhY2tldHModG9rZW4pO1xuICAgIHJldHVybiAhZG90cyAmJiBpID8gJ1snICsgdG9rZW4gKyAnXScgOiB0b2tlbjtcbiAgfSkuam9pbihkb3RzID8gJy4nIDogJycpO1xufVxuXG4vKipcbiAqIElmIHRoZSBhcnJheSBpcyBhbiBhcnJheSBhbmQgbm9uZSBvZiBpdHMgZWxlbWVudHMgYXJlIHZpc2l0YWJsZSwgdGhlbiBpdCdzIGEgZmxhdCBhcnJheS5cbiAqXG4gKiBAcGFyYW0ge0FycmF5PGFueT59IGFyciAtIFRoZSBhcnJheSB0byBjaGVja1xuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc0ZsYXRBcnJheShhcnIpIHtcbiAgcmV0dXJuIHV0aWxzLmlzQXJyYXkoYXJyKSAmJiAhYXJyLnNvbWUoaXNWaXNpdGFibGUpO1xufVxuXG5jb25zdCBwcmVkaWNhdGVzID0gdXRpbHMudG9GbGF0T2JqZWN0KHV0aWxzLCB7fSwgbnVsbCwgZnVuY3Rpb24gZmlsdGVyKHByb3ApIHtcbiAgcmV0dXJuIC9eaXNbQS1aXS8udGVzdChwcm9wKTtcbn0pO1xuXG4vKipcbiAqIENvbnZlcnQgYSBkYXRhIG9iamVjdCB0byBGb3JtRGF0YVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAqIEBwYXJhbSB7P09iamVjdH0gW2Zvcm1EYXRhXVxuICogQHBhcmFtIHs/T2JqZWN0fSBbb3B0aW9uc11cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRpb25zLnZpc2l0b3JdXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLm1ldGFUb2tlbnMgPSB0cnVlXVxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy5kb3RzID0gZmFsc2VdXG4gKiBAcGFyYW0gez9Cb29sZWFufSBbb3B0aW9ucy5pbmRleGVzID0gZmFsc2VdXG4gKlxuICogQHJldHVybnMge09iamVjdH1cbiAqKi9cblxuLyoqXG4gKiBJdCBjb252ZXJ0cyBhbiBvYmplY3QgaW50byBhIEZvcm1EYXRhIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0PGFueSwgYW55Pn0gb2JqIC0gVGhlIG9iamVjdCB0byBjb252ZXJ0IHRvIGZvcm0gZGF0YS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmb3JtRGF0YSAtIFRoZSBGb3JtRGF0YSBvYmplY3QgdG8gYXBwZW5kIHRvLlxuICogQHBhcmFtIHtPYmplY3Q8c3RyaW5nLCBhbnk+fSBvcHRpb25zXG4gKlxuICogQHJldHVybnNcbiAqL1xuZnVuY3Rpb24gdG9Gb3JtRGF0YShvYmosIGZvcm1EYXRhLCBvcHRpb25zKSB7XG4gIGlmICghdXRpbHMuaXNPYmplY3Qob2JqKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3RhcmdldCBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gIGZvcm1EYXRhID0gZm9ybURhdGEgfHwgbmV3IChQbGF0Zm9ybUZvcm1EYXRhIHx8IEZvcm1EYXRhKSgpO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICBvcHRpb25zID0gdXRpbHMudG9GbGF0T2JqZWN0KG9wdGlvbnMsIHtcbiAgICBtZXRhVG9rZW5zOiB0cnVlLFxuICAgIGRvdHM6IGZhbHNlLFxuICAgIGluZGV4ZXM6IGZhbHNlXG4gIH0sIGZhbHNlLCBmdW5jdGlvbiBkZWZpbmVkKG9wdGlvbiwgc291cmNlKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVxLW51bGwsZXFlcWVxXG4gICAgcmV0dXJuICF1dGlscy5pc1VuZGVmaW5lZChzb3VyY2Vbb3B0aW9uXSk7XG4gIH0pO1xuXG4gIGNvbnN0IG1ldGFUb2tlbnMgPSBvcHRpb25zLm1ldGFUb2tlbnM7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2UtYmVmb3JlLWRlZmluZVxuICBjb25zdCB2aXNpdG9yID0gb3B0aW9ucy52aXNpdG9yIHx8IGRlZmF1bHRWaXNpdG9yO1xuICBjb25zdCBkb3RzID0gb3B0aW9ucy5kb3RzO1xuICBjb25zdCBpbmRleGVzID0gb3B0aW9ucy5pbmRleGVzO1xuICBjb25zdCBfQmxvYiA9IG9wdGlvbnMuQmxvYiB8fCB0eXBlb2YgQmxvYiAhPT0gJ3VuZGVmaW5lZCcgJiYgQmxvYjtcbiAgY29uc3QgdXNlQmxvYiA9IF9CbG9iICYmIHV0aWxzLmlzU3BlY0NvbXBsaWFudEZvcm0oZm9ybURhdGEpO1xuXG4gIGlmICghdXRpbHMuaXNGdW5jdGlvbih2aXNpdG9yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3Zpc2l0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gIH1cblxuICBmdW5jdGlvbiBjb252ZXJ0VmFsdWUodmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT09IG51bGwpIHJldHVybiAnJztcblxuICAgIGlmICh1dGlscy5pc0RhdGUodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdmFsdWUudG9JU09TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBpZiAoIXVzZUJsb2IgJiYgdXRpbHMuaXNCbG9iKHZhbHVlKSkge1xuICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoJ0Jsb2IgaXMgbm90IHN1cHBvcnRlZC4gVXNlIGEgQnVmZmVyIGluc3RlYWQuJyk7XG4gICAgfVxuXG4gICAgaWYgKHV0aWxzLmlzQXJyYXlCdWZmZXIodmFsdWUpIHx8IHV0aWxzLmlzVHlwZWRBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB1c2VCbG9iICYmIHR5cGVvZiBCbG9iID09PSAnZnVuY3Rpb24nID8gbmV3IEJsb2IoW3ZhbHVlXSkgOiBCdWZmZXIuZnJvbSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmF1bHQgdmlzaXRvci5cbiAgICpcbiAgICogQHBhcmFtIHsqfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ3xOdW1iZXJ9IGtleVxuICAgKiBAcGFyYW0ge0FycmF5PFN0cmluZ3xOdW1iZXI+fSBwYXRoXG4gICAqIEB0aGlzIHtGb3JtRGF0YX1cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59IHJldHVybiB0cnVlIHRvIHZpc2l0IHRoZSBlYWNoIHByb3Agb2YgdGhlIHZhbHVlIHJlY3Vyc2l2ZWx5XG4gICAqL1xuICBmdW5jdGlvbiBkZWZhdWx0VmlzaXRvcih2YWx1ZSwga2V5LCBwYXRoKSB7XG4gICAgbGV0IGFyciA9IHZhbHVlO1xuXG4gICAgaWYgKHZhbHVlICYmICFwYXRoICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGlmICh1dGlscy5lbmRzV2l0aChrZXksICd7fScpKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICBrZXkgPSBtZXRhVG9rZW5zID8ga2V5IDoga2V5LnNsaWNlKDAsIC0yKTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgIHZhbHVlID0gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgKHV0aWxzLmlzQXJyYXkodmFsdWUpICYmIGlzRmxhdEFycmF5KHZhbHVlKSkgfHxcbiAgICAgICAgKCh1dGlscy5pc0ZpbGVMaXN0KHZhbHVlKSB8fCB1dGlscy5lbmRzV2l0aChrZXksICdbXScpKSAmJiAoYXJyID0gdXRpbHMudG9BcnJheSh2YWx1ZSkpXG4gICAgICAgICkpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgIGtleSA9IHJlbW92ZUJyYWNrZXRzKGtleSk7XG5cbiAgICAgICAgYXJyLmZvckVhY2goZnVuY3Rpb24gZWFjaChlbCwgaW5kZXgpIHtcbiAgICAgICAgICAhKHV0aWxzLmlzVW5kZWZpbmVkKGVsKSB8fCBlbCA9PT0gbnVsbCkgJiYgZm9ybURhdGEuYXBwZW5kKFxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5lc3RlZC10ZXJuYXJ5XG4gICAgICAgICAgICBpbmRleGVzID09PSB0cnVlID8gcmVuZGVyS2V5KFtrZXldLCBpbmRleCwgZG90cykgOiAoaW5kZXhlcyA9PT0gbnVsbCA/IGtleSA6IGtleSArICdbXScpLFxuICAgICAgICAgICAgY29udmVydFZhbHVlKGVsKVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGlzVmlzaXRhYmxlKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZm9ybURhdGEuYXBwZW5kKHJlbmRlcktleShwYXRoLCBrZXksIGRvdHMpLCBjb252ZXJ0VmFsdWUodmFsdWUpKTtcblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IHN0YWNrID0gW107XG5cbiAgY29uc3QgZXhwb3NlZEhlbHBlcnMgPSBPYmplY3QuYXNzaWduKHByZWRpY2F0ZXMsIHtcbiAgICBkZWZhdWx0VmlzaXRvcixcbiAgICBjb252ZXJ0VmFsdWUsXG4gICAgaXNWaXNpdGFibGVcbiAgfSk7XG5cbiAgZnVuY3Rpb24gYnVpbGQodmFsdWUsIHBhdGgpIHtcbiAgICBpZiAodXRpbHMuaXNVbmRlZmluZWQodmFsdWUpKSByZXR1cm47XG5cbiAgICBpZiAoc3RhY2suaW5kZXhPZih2YWx1ZSkgIT09IC0xKSB7XG4gICAgICB0aHJvdyBFcnJvcignQ2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGVkIGluICcgKyBwYXRoLmpvaW4oJy4nKSk7XG4gICAgfVxuXG4gICAgc3RhY2sucHVzaCh2YWx1ZSk7XG5cbiAgICB1dGlscy5mb3JFYWNoKHZhbHVlLCBmdW5jdGlvbiBlYWNoKGVsLCBrZXkpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9ICEodXRpbHMuaXNVbmRlZmluZWQoZWwpIHx8IGVsID09PSBudWxsKSAmJiB2aXNpdG9yLmNhbGwoXG4gICAgICAgIGZvcm1EYXRhLCBlbCwgdXRpbHMuaXNTdHJpbmcoa2V5KSA/IGtleS50cmltKCkgOiBrZXksIHBhdGgsIGV4cG9zZWRIZWxwZXJzXG4gICAgICApO1xuXG4gICAgICBpZiAocmVzdWx0ID09PSB0cnVlKSB7XG4gICAgICAgIGJ1aWxkKGVsLCBwYXRoID8gcGF0aC5jb25jYXQoa2V5KSA6IFtrZXldKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHN0YWNrLnBvcCgpO1xuICB9XG5cbiAgaWYgKCF1dGlscy5pc09iamVjdChvYmopKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZGF0YSBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICB9XG5cbiAgYnVpbGQob2JqKTtcblxuICByZXR1cm4gZm9ybURhdGE7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHRvRm9ybURhdGE7XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB0b0Zvcm1EYXRhIGZyb20gJy4vdG9Gb3JtRGF0YS5qcyc7XG5cbi8qKlxuICogSXQgZW5jb2RlcyBhIHN0cmluZyBieSByZXBsYWNpbmcgYWxsIGNoYXJhY3RlcnMgdGhhdCBhcmUgbm90IGluIHRoZSB1bnJlc2VydmVkIHNldCB3aXRoXG4gKiB0aGVpciBwZXJjZW50LWVuY29kZWQgZXF1aXZhbGVudHNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyIC0gVGhlIHN0cmluZyB0byBlbmNvZGUuXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGVuY29kZWQgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBlbmNvZGUoc3RyKSB7XG4gIGNvbnN0IGNoYXJNYXAgPSB7XG4gICAgJyEnOiAnJTIxJyxcbiAgICBcIidcIjogJyUyNycsXG4gICAgJygnOiAnJTI4JyxcbiAgICAnKSc6ICclMjknLFxuICAgICd+JzogJyU3RScsXG4gICAgJyUyMCc6ICcrJyxcbiAgICAnJTAwJzogJ1xceDAwJ1xuICB9O1xuICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHN0cikucmVwbGFjZSgvWyEnKCl+XXwlMjB8JTAwL2csIGZ1bmN0aW9uIHJlcGxhY2VyKG1hdGNoKSB7XG4gICAgcmV0dXJuIGNoYXJNYXBbbWF0Y2hdO1xuICB9KTtcbn1cblxuLyoqXG4gKiBJdCB0YWtlcyBhIHBhcmFtcyBvYmplY3QgYW5kIGNvbnZlcnRzIGl0IHRvIGEgRm9ybURhdGEgb2JqZWN0XG4gKlxuICogQHBhcmFtIHtPYmplY3Q8c3RyaW5nLCBhbnk+fSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyB0byBiZSBjb252ZXJ0ZWQgdG8gYSBGb3JtRGF0YSBvYmplY3QuXG4gKiBAcGFyYW0ge09iamVjdDxzdHJpbmcsIGFueT59IG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBvYmplY3QgcGFzc2VkIHRvIHRoZSBBeGlvcyBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gQXhpb3NVUkxTZWFyY2hQYXJhbXMocGFyYW1zLCBvcHRpb25zKSB7XG4gIHRoaXMuX3BhaXJzID0gW107XG5cbiAgcGFyYW1zICYmIHRvRm9ybURhdGEocGFyYW1zLCB0aGlzLCBvcHRpb25zKTtcbn1cblxuY29uc3QgcHJvdG90eXBlID0gQXhpb3NVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlO1xuXG5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24gYXBwZW5kKG5hbWUsIHZhbHVlKSB7XG4gIHRoaXMuX3BhaXJzLnB1c2goW25hbWUsIHZhbHVlXSk7XG59O1xuXG5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZyhlbmNvZGVyKSB7XG4gIGNvbnN0IF9lbmNvZGUgPSBlbmNvZGVyID8gZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gZW5jb2Rlci5jYWxsKHRoaXMsIHZhbHVlLCBlbmNvZGUpO1xuICB9IDogZW5jb2RlO1xuXG4gIHJldHVybiB0aGlzLl9wYWlycy5tYXAoZnVuY3Rpb24gZWFjaChwYWlyKSB7XG4gICAgcmV0dXJuIF9lbmNvZGUocGFpclswXSkgKyAnPScgKyBfZW5jb2RlKHBhaXJbMV0pO1xuICB9LCAnJykuam9pbignJicpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgQXhpb3NVUkxTZWFyY2hQYXJhbXM7XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5pbXBvcnQgQXhpb3NVUkxTZWFyY2hQYXJhbXMgZnJvbSAnLi4vaGVscGVycy9BeGlvc1VSTFNlYXJjaFBhcmFtcy5qcyc7XG5cbi8qKlxuICogSXQgcmVwbGFjZXMgYWxsIGluc3RhbmNlcyBvZiB0aGUgY2hhcmFjdGVycyBgOmAsIGAkYCwgYCxgLCBgK2AsIGBbYCwgYW5kIGBdYCB3aXRoIHRoZWlyXG4gKiBVUkkgZW5jb2RlZCBjb3VudGVycGFydHNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsIFRoZSB2YWx1ZSB0byBiZSBlbmNvZGVkLlxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBlbmNvZGVkIHZhbHVlLlxuICovXG5mdW5jdGlvbiBlbmNvZGUodmFsKSB7XG4gIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQodmFsKS5cbiAgICByZXBsYWNlKC8lM0EvZ2ksICc6JykuXG4gICAgcmVwbGFjZSgvJTI0L2csICckJykuXG4gICAgcmVwbGFjZSgvJTJDL2dpLCAnLCcpLlxuICAgIHJlcGxhY2UoLyUyMC9nLCAnKycpLlxuICAgIHJlcGxhY2UoLyU1Qi9naSwgJ1snKS5cbiAgICByZXBsYWNlKC8lNUQvZ2ksICddJyk7XG59XG5cbi8qKlxuICogQnVpbGQgYSBVUkwgYnkgYXBwZW5kaW5nIHBhcmFtcyB0byB0aGUgZW5kXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHVybCBUaGUgYmFzZSBvZiB0aGUgdXJsIChlLmcuLCBodHRwOi8vd3d3Lmdvb2dsZS5jb20pXG4gKiBAcGFyYW0ge29iamVjdH0gW3BhcmFtc10gVGhlIHBhcmFtcyB0byBiZSBhcHBlbmRlZFxuICogQHBhcmFtIHs/b2JqZWN0fSBvcHRpb25zXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGZvcm1hdHRlZCB1cmxcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYnVpbGRVUkwodXJsLCBwYXJhbXMsIG9wdGlvbnMpIHtcbiAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gIGlmICghcGFyYW1zKSB7XG4gICAgcmV0dXJuIHVybDtcbiAgfVxuICBcbiAgY29uc3QgX2VuY29kZSA9IG9wdGlvbnMgJiYgb3B0aW9ucy5lbmNvZGUgfHwgZW5jb2RlO1xuXG4gIGNvbnN0IHNlcmlhbGl6ZUZuID0gb3B0aW9ucyAmJiBvcHRpb25zLnNlcmlhbGl6ZTtcblxuICBsZXQgc2VyaWFsaXplZFBhcmFtcztcblxuICBpZiAoc2VyaWFsaXplRm4pIHtcbiAgICBzZXJpYWxpemVkUGFyYW1zID0gc2VyaWFsaXplRm4ocGFyYW1zLCBvcHRpb25zKTtcbiAgfSBlbHNlIHtcbiAgICBzZXJpYWxpemVkUGFyYW1zID0gdXRpbHMuaXNVUkxTZWFyY2hQYXJhbXMocGFyYW1zKSA/XG4gICAgICBwYXJhbXMudG9TdHJpbmcoKSA6XG4gICAgICBuZXcgQXhpb3NVUkxTZWFyY2hQYXJhbXMocGFyYW1zLCBvcHRpb25zKS50b1N0cmluZyhfZW5jb2RlKTtcbiAgfVxuXG4gIGlmIChzZXJpYWxpemVkUGFyYW1zKSB7XG4gICAgY29uc3QgaGFzaG1hcmtJbmRleCA9IHVybC5pbmRleE9mKFwiI1wiKTtcblxuICAgIGlmIChoYXNobWFya0luZGV4ICE9PSAtMSkge1xuICAgICAgdXJsID0gdXJsLnNsaWNlKDAsIGhhc2htYXJrSW5kZXgpO1xuICAgIH1cbiAgICB1cmwgKz0gKHVybC5pbmRleE9mKCc/JykgPT09IC0xID8gJz8nIDogJyYnKSArIHNlcmlhbGl6ZWRQYXJhbXM7XG4gIH1cblxuICByZXR1cm4gdXJsO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi8uLi91dGlscy5qcyc7XG5cbmNsYXNzIEludGVyY2VwdG9yTWFuYWdlciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuaGFuZGxlcnMgPSBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBuZXcgaW50ZXJjZXB0b3IgdG8gdGhlIHN0YWNrXG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bGZpbGxlZCBUaGUgZnVuY3Rpb24gdG8gaGFuZGxlIGB0aGVuYCBmb3IgYSBgUHJvbWlzZWBcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gcmVqZWN0ZWQgVGhlIGZ1bmN0aW9uIHRvIGhhbmRsZSBgcmVqZWN0YCBmb3IgYSBgUHJvbWlzZWBcbiAgICpcbiAgICogQHJldHVybiB7TnVtYmVyfSBBbiBJRCB1c2VkIHRvIHJlbW92ZSBpbnRlcmNlcHRvciBsYXRlclxuICAgKi9cbiAgdXNlKGZ1bGZpbGxlZCwgcmVqZWN0ZWQsIG9wdGlvbnMpIHtcbiAgICB0aGlzLmhhbmRsZXJzLnB1c2goe1xuICAgICAgZnVsZmlsbGVkLFxuICAgICAgcmVqZWN0ZWQsXG4gICAgICBzeW5jaHJvbm91czogb3B0aW9ucyA/IG9wdGlvbnMuc3luY2hyb25vdXMgOiBmYWxzZSxcbiAgICAgIHJ1bldoZW46IG9wdGlvbnMgPyBvcHRpb25zLnJ1bldoZW4gOiBudWxsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlcnMubGVuZ3RoIC0gMTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYW4gaW50ZXJjZXB0b3IgZnJvbSB0aGUgc3RhY2tcbiAgICpcbiAgICogQHBhcmFtIHtOdW1iZXJ9IGlkIFRoZSBJRCB0aGF0IHdhcyByZXR1cm5lZCBieSBgdXNlYFxuICAgKlxuICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gYHRydWVgIGlmIHRoZSBpbnRlcmNlcHRvciB3YXMgcmVtb3ZlZCwgYGZhbHNlYCBvdGhlcndpc2VcbiAgICovXG4gIGVqZWN0KGlkKSB7XG4gICAgaWYgKHRoaXMuaGFuZGxlcnNbaWRdKSB7XG4gICAgICB0aGlzLmhhbmRsZXJzW2lkXSA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENsZWFyIGFsbCBpbnRlcmNlcHRvcnMgZnJvbSB0aGUgc3RhY2tcbiAgICpcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBjbGVhcigpIHtcbiAgICBpZiAodGhpcy5oYW5kbGVycykge1xuICAgICAgdGhpcy5oYW5kbGVycyA9IFtdO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJdGVyYXRlIG92ZXIgYWxsIHRoZSByZWdpc3RlcmVkIGludGVyY2VwdG9yc1xuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIGZvciBza2lwcGluZyBvdmVyIGFueVxuICAgKiBpbnRlcmNlcHRvcnMgdGhhdCBtYXkgaGF2ZSBiZWNvbWUgYG51bGxgIGNhbGxpbmcgYGVqZWN0YC5cbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGZ1bmN0aW9uIHRvIGNhbGwgZm9yIGVhY2ggaW50ZXJjZXB0b3JcbiAgICpcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBmb3JFYWNoKGZuKSB7XG4gICAgdXRpbHMuZm9yRWFjaCh0aGlzLmhhbmRsZXJzLCBmdW5jdGlvbiBmb3JFYWNoSGFuZGxlcihoKSB7XG4gICAgICBpZiAoaCAhPT0gbnVsbCkge1xuICAgICAgICBmbihoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBJbnRlcmNlcHRvck1hbmFnZXI7XG4iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgc2lsZW50SlNPTlBhcnNpbmc6IHRydWUsXG4gIGZvcmNlZEpTT05QYXJzaW5nOiB0cnVlLFxuICBjbGFyaWZ5VGltZW91dEVycm9yOiBmYWxzZVxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IEF4aW9zVVJMU2VhcmNoUGFyYW1zIGZyb20gJy4uLy4uLy4uL2hlbHBlcnMvQXhpb3NVUkxTZWFyY2hQYXJhbXMuanMnO1xuZXhwb3J0IGRlZmF1bHQgdHlwZW9mIFVSTFNlYXJjaFBhcmFtcyAhPT0gJ3VuZGVmaW5lZCcgPyBVUkxTZWFyY2hQYXJhbXMgOiBBeGlvc1VSTFNlYXJjaFBhcmFtcztcbiIsIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0IGRlZmF1bHQgdHlwZW9mIEZvcm1EYXRhICE9PSAndW5kZWZpbmVkJyA/IEZvcm1EYXRhIDogbnVsbDtcbiIsIid1c2Ugc3RyaWN0J1xuXG5leHBvcnQgZGVmYXVsdCB0eXBlb2YgQmxvYiAhPT0gJ3VuZGVmaW5lZCcgPyBCbG9iIDogbnVsbFxuIiwiaW1wb3J0IFVSTFNlYXJjaFBhcmFtcyBmcm9tICcuL2NsYXNzZXMvVVJMU2VhcmNoUGFyYW1zLmpzJ1xuaW1wb3J0IEZvcm1EYXRhIGZyb20gJy4vY2xhc3Nlcy9Gb3JtRGF0YS5qcydcbmltcG9ydCBCbG9iIGZyb20gJy4vY2xhc3Nlcy9CbG9iLmpzJ1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGlzQnJvd3NlcjogdHJ1ZSxcbiAgY2xhc3Nlczoge1xuICAgIFVSTFNlYXJjaFBhcmFtcyxcbiAgICBGb3JtRGF0YSxcbiAgICBCbG9iXG4gIH0sXG4gIHByb3RvY29sczogWydodHRwJywgJ2h0dHBzJywgJ2ZpbGUnLCAnYmxvYicsICd1cmwnLCAnZGF0YSddXG59O1xuIiwiY29uc3QgaGFzQnJvd3NlckVudiA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCc7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gYSBzdGFuZGFyZCBicm93c2VyIGVudmlyb25tZW50XG4gKlxuICogVGhpcyBhbGxvd3MgYXhpb3MgdG8gcnVuIGluIGEgd2ViIHdvcmtlciwgYW5kIHJlYWN0LW5hdGl2ZS5cbiAqIEJvdGggZW52aXJvbm1lbnRzIHN1cHBvcnQgWE1MSHR0cFJlcXVlc3QsIGJ1dCBub3QgZnVsbHkgc3RhbmRhcmQgZ2xvYmFscy5cbiAqXG4gKiB3ZWIgd29ya2VyczpcbiAqICB0eXBlb2Ygd2luZG93IC0+IHVuZGVmaW5lZFxuICogIHR5cGVvZiBkb2N1bWVudCAtPiB1bmRlZmluZWRcbiAqXG4gKiByZWFjdC1uYXRpdmU6XG4gKiAgbmF2aWdhdG9yLnByb2R1Y3QgLT4gJ1JlYWN0TmF0aXZlJ1xuICogbmF0aXZlc2NyaXB0XG4gKiAgbmF2aWdhdG9yLnByb2R1Y3QgLT4gJ05hdGl2ZVNjcmlwdCcgb3IgJ05TJ1xuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5jb25zdCBoYXNTdGFuZGFyZEJyb3dzZXJFbnYgPSAoXG4gIChwcm9kdWN0KSA9PiB7XG4gICAgcmV0dXJuIGhhc0Jyb3dzZXJFbnYgJiYgWydSZWFjdE5hdGl2ZScsICdOYXRpdmVTY3JpcHQnLCAnTlMnXS5pbmRleE9mKHByb2R1Y3QpIDwgMFxuICB9KSh0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiBuYXZpZ2F0b3IucHJvZHVjdCk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gYSBzdGFuZGFyZCBicm93c2VyIHdlYldvcmtlciBlbnZpcm9ubWVudFxuICpcbiAqIEFsdGhvdWdoIHRoZSBgaXNTdGFuZGFyZEJyb3dzZXJFbnZgIG1ldGhvZCBpbmRpY2F0ZXMgdGhhdFxuICogYGFsbG93cyBheGlvcyB0byBydW4gaW4gYSB3ZWIgd29ya2VyYCwgdGhlIFdlYldvcmtlciB3aWxsIHN0aWxsIGJlXG4gKiBmaWx0ZXJlZCBvdXQgZHVlIHRvIGl0cyBqdWRnbWVudCBzdGFuZGFyZFxuICogYHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCdgLlxuICogVGhpcyBsZWFkcyB0byBhIHByb2JsZW0gd2hlbiBheGlvcyBwb3N0IGBGb3JtRGF0YWAgaW4gd2ViV29ya2VyXG4gKi9cbmNvbnN0IGhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudiA9ICgoKSA9PiB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlICE9PSAndW5kZWZpbmVkJyAmJlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICAgIHNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZSAmJlxuICAgIHR5cGVvZiBzZWxmLmltcG9ydFNjcmlwdHMgPT09ICdmdW5jdGlvbidcbiAgKTtcbn0pKCk7XG5cbmV4cG9ydCB7XG4gIGhhc0Jyb3dzZXJFbnYsXG4gIGhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudixcbiAgaGFzU3RhbmRhcmRCcm93c2VyRW52XG59XG4iLCJpbXBvcnQgcGxhdGZvcm0gZnJvbSAnLi9ub2RlL2luZGV4LmpzJztcbmltcG9ydCAqIGFzIHV0aWxzIGZyb20gJy4vY29tbW9uL3V0aWxzLmpzJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICAuLi51dGlscyxcbiAgLi4ucGxhdGZvcm1cbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcbmltcG9ydCB0b0Zvcm1EYXRhIGZyb20gJy4vdG9Gb3JtRGF0YS5qcyc7XG5pbXBvcnQgcGxhdGZvcm0gZnJvbSAnLi4vcGxhdGZvcm0vaW5kZXguanMnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0b1VSTEVuY29kZWRGb3JtKGRhdGEsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIHRvRm9ybURhdGEoZGF0YSwgbmV3IHBsYXRmb3JtLmNsYXNzZXMuVVJMU2VhcmNoUGFyYW1zKCksIE9iamVjdC5hc3NpZ24oe1xuICAgIHZpc2l0b3I6IGZ1bmN0aW9uKHZhbHVlLCBrZXksIHBhdGgsIGhlbHBlcnMpIHtcbiAgICAgIGlmIChwbGF0Zm9ybS5pc05vZGUgJiYgdXRpbHMuaXNCdWZmZXIodmFsdWUpKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKGtleSwgdmFsdWUudG9TdHJpbmcoJ2Jhc2U2NCcpKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gaGVscGVycy5kZWZhdWx0VmlzaXRvci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH1cbiAgfSwgb3B0aW9ucykpO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuXG4vKipcbiAqIEl0IHRha2VzIGEgc3RyaW5nIGxpa2UgYGZvb1t4XVt5XVt6XWAgYW5kIHJldHVybnMgYW4gYXJyYXkgbGlrZSBgWydmb28nLCAneCcsICd5JywgJ3onXVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqXG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiBzdHJpbmdzLlxuICovXG5mdW5jdGlvbiBwYXJzZVByb3BQYXRoKG5hbWUpIHtcbiAgLy8gZm9vW3hdW3ldW3pdXG4gIC8vIGZvby54LnkuelxuICAvLyBmb28teC15LXpcbiAgLy8gZm9vIHggeSB6XG4gIHJldHVybiB1dGlscy5tYXRjaEFsbCgvXFx3K3xcXFsoXFx3KildL2csIG5hbWUpLm1hcChtYXRjaCA9PiB7XG4gICAgcmV0dXJuIG1hdGNoWzBdID09PSAnW10nID8gJycgOiBtYXRjaFsxXSB8fCBtYXRjaFswXTtcbiAgfSk7XG59XG5cbi8qKlxuICogQ29udmVydCBhbiBhcnJheSB0byBhbiBvYmplY3QuXG4gKlxuICogQHBhcmFtIHtBcnJheTxhbnk+fSBhcnIgLSBUaGUgYXJyYXkgdG8gY29udmVydCB0byBhbiBvYmplY3QuXG4gKlxuICogQHJldHVybnMgQW4gb2JqZWN0IHdpdGggdGhlIHNhbWUga2V5cyBhbmQgdmFsdWVzIGFzIHRoZSBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYXJyYXlUb09iamVjdChhcnIpIHtcbiAgY29uc3Qgb2JqID0ge307XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhhcnIpO1xuICBsZXQgaTtcbiAgY29uc3QgbGVuID0ga2V5cy5sZW5ndGg7XG4gIGxldCBrZXk7XG4gIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIGtleSA9IGtleXNbaV07XG4gICAgb2JqW2tleV0gPSBhcnJba2V5XTtcbiAgfVxuICByZXR1cm4gb2JqO1xufVxuXG4vKipcbiAqIEl0IHRha2VzIGEgRm9ybURhdGEgb2JqZWN0IGFuZCByZXR1cm5zIGEgSmF2YVNjcmlwdCBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZm9ybURhdGEgVGhlIEZvcm1EYXRhIG9iamVjdCB0byBjb252ZXJ0IHRvIEpTT04uXG4gKlxuICogQHJldHVybnMge09iamVjdDxzdHJpbmcsIGFueT4gfCBudWxsfSBUaGUgY29udmVydGVkIG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gZm9ybURhdGFUb0pTT04oZm9ybURhdGEpIHtcbiAgZnVuY3Rpb24gYnVpbGRQYXRoKHBhdGgsIHZhbHVlLCB0YXJnZXQsIGluZGV4KSB7XG4gICAgbGV0IG5hbWUgPSBwYXRoW2luZGV4KytdO1xuXG4gICAgaWYgKG5hbWUgPT09ICdfX3Byb3RvX18nKSByZXR1cm4gdHJ1ZTtcblxuICAgIGNvbnN0IGlzTnVtZXJpY0tleSA9IE51bWJlci5pc0Zpbml0ZSgrbmFtZSk7XG4gICAgY29uc3QgaXNMYXN0ID0gaW5kZXggPj0gcGF0aC5sZW5ndGg7XG4gICAgbmFtZSA9ICFuYW1lICYmIHV0aWxzLmlzQXJyYXkodGFyZ2V0KSA/IHRhcmdldC5sZW5ndGggOiBuYW1lO1xuXG4gICAgaWYgKGlzTGFzdCkge1xuICAgICAgaWYgKHV0aWxzLmhhc093blByb3AodGFyZ2V0LCBuYW1lKSkge1xuICAgICAgICB0YXJnZXRbbmFtZV0gPSBbdGFyZ2V0W25hbWVdLCB2YWx1ZV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0YXJnZXRbbmFtZV0gPSB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuICFpc051bWVyaWNLZXk7XG4gICAgfVxuXG4gICAgaWYgKCF0YXJnZXRbbmFtZV0gfHwgIXV0aWxzLmlzT2JqZWN0KHRhcmdldFtuYW1lXSkpIHtcbiAgICAgIHRhcmdldFtuYW1lXSA9IFtdO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGJ1aWxkUGF0aChwYXRoLCB2YWx1ZSwgdGFyZ2V0W25hbWVdLCBpbmRleCk7XG5cbiAgICBpZiAocmVzdWx0ICYmIHV0aWxzLmlzQXJyYXkodGFyZ2V0W25hbWVdKSkge1xuICAgICAgdGFyZ2V0W25hbWVdID0gYXJyYXlUb09iamVjdCh0YXJnZXRbbmFtZV0pO1xuICAgIH1cblxuICAgIHJldHVybiAhaXNOdW1lcmljS2V5O1xuICB9XG5cbiAgaWYgKHV0aWxzLmlzRm9ybURhdGEoZm9ybURhdGEpICYmIHV0aWxzLmlzRnVuY3Rpb24oZm9ybURhdGEuZW50cmllcykpIHtcbiAgICBjb25zdCBvYmogPSB7fTtcblxuICAgIHV0aWxzLmZvckVhY2hFbnRyeShmb3JtRGF0YSwgKG5hbWUsIHZhbHVlKSA9PiB7XG4gICAgICBidWlsZFBhdGgocGFyc2VQcm9wUGF0aChuYW1lKSwgdmFsdWUsIG9iaiwgMCk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gb2JqO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZvcm1EYXRhVG9KU09OO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IEF4aW9zRXJyb3IgZnJvbSAnLi4vY29yZS9BeGlvc0Vycm9yLmpzJztcbmltcG9ydCB0cmFuc2l0aW9uYWxEZWZhdWx0cyBmcm9tICcuL3RyYW5zaXRpb25hbC5qcyc7XG5pbXBvcnQgdG9Gb3JtRGF0YSBmcm9tICcuLi9oZWxwZXJzL3RvRm9ybURhdGEuanMnO1xuaW1wb3J0IHRvVVJMRW5jb2RlZEZvcm0gZnJvbSAnLi4vaGVscGVycy90b1VSTEVuY29kZWRGb3JtLmpzJztcbmltcG9ydCBwbGF0Zm9ybSBmcm9tICcuLi9wbGF0Zm9ybS9pbmRleC5qcyc7XG5pbXBvcnQgZm9ybURhdGFUb0pTT04gZnJvbSAnLi4vaGVscGVycy9mb3JtRGF0YVRvSlNPTi5qcyc7XG5cbi8qKlxuICogSXQgdGFrZXMgYSBzdHJpbmcsIHRyaWVzIHRvIHBhcnNlIGl0LCBhbmQgaWYgaXQgZmFpbHMsIGl0IHJldHVybnMgdGhlIHN0cmluZ2lmaWVkIHZlcnNpb25cbiAqIG9mIHRoZSBpbnB1dFxuICpcbiAqIEBwYXJhbSB7YW55fSByYXdWYWx1ZSAtIFRoZSB2YWx1ZSB0byBiZSBzdHJpbmdpZmllZC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHBhcnNlciAtIEEgZnVuY3Rpb24gdGhhdCBwYXJzZXMgYSBzdHJpbmcgaW50byBhIEphdmFTY3JpcHQgb2JqZWN0LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZW5jb2RlciAtIEEgZnVuY3Rpb24gdGhhdCB0YWtlcyBhIHZhbHVlIGFuZCByZXR1cm5zIGEgc3RyaW5nLlxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IEEgc3RyaW5naWZpZWQgdmVyc2lvbiBvZiB0aGUgcmF3VmFsdWUuXG4gKi9cbmZ1bmN0aW9uIHN0cmluZ2lmeVNhZmVseShyYXdWYWx1ZSwgcGFyc2VyLCBlbmNvZGVyKSB7XG4gIGlmICh1dGlscy5pc1N0cmluZyhyYXdWYWx1ZSkpIHtcbiAgICB0cnkge1xuICAgICAgKHBhcnNlciB8fCBKU09OLnBhcnNlKShyYXdWYWx1ZSk7XG4gICAgICByZXR1cm4gdXRpbHMudHJpbShyYXdWYWx1ZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKGUubmFtZSAhPT0gJ1N5bnRheEVycm9yJykge1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAoZW5jb2RlciB8fCBKU09OLnN0cmluZ2lmeSkocmF3VmFsdWUpO1xufVxuXG5jb25zdCBkZWZhdWx0cyA9IHtcblxuICB0cmFuc2l0aW9uYWw6IHRyYW5zaXRpb25hbERlZmF1bHRzLFxuXG4gIGFkYXB0ZXI6IFsneGhyJywgJ2h0dHAnXSxcblxuICB0cmFuc2Zvcm1SZXF1ZXN0OiBbZnVuY3Rpb24gdHJhbnNmb3JtUmVxdWVzdChkYXRhLCBoZWFkZXJzKSB7XG4gICAgY29uc3QgY29udGVudFR5cGUgPSBoZWFkZXJzLmdldENvbnRlbnRUeXBlKCkgfHwgJyc7XG4gICAgY29uc3QgaGFzSlNPTkNvbnRlbnRUeXBlID0gY29udGVudFR5cGUuaW5kZXhPZignYXBwbGljYXRpb24vanNvbicpID4gLTE7XG4gICAgY29uc3QgaXNPYmplY3RQYXlsb2FkID0gdXRpbHMuaXNPYmplY3QoZGF0YSk7XG5cbiAgICBpZiAoaXNPYmplY3RQYXlsb2FkICYmIHV0aWxzLmlzSFRNTEZvcm0oZGF0YSkpIHtcbiAgICAgIGRhdGEgPSBuZXcgRm9ybURhdGEoZGF0YSk7XG4gICAgfVxuXG4gICAgY29uc3QgaXNGb3JtRGF0YSA9IHV0aWxzLmlzRm9ybURhdGEoZGF0YSk7XG5cbiAgICBpZiAoaXNGb3JtRGF0YSkge1xuICAgICAgcmV0dXJuIGhhc0pTT05Db250ZW50VHlwZSA/IEpTT04uc3RyaW5naWZ5KGZvcm1EYXRhVG9KU09OKGRhdGEpKSA6IGRhdGE7XG4gICAgfVxuXG4gICAgaWYgKHV0aWxzLmlzQXJyYXlCdWZmZXIoZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzQnVmZmVyKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc1N0cmVhbShkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNGaWxlKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc0Jsb2IoZGF0YSlcbiAgICApIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cbiAgICBpZiAodXRpbHMuaXNBcnJheUJ1ZmZlclZpZXcoZGF0YSkpIHtcbiAgICAgIHJldHVybiBkYXRhLmJ1ZmZlcjtcbiAgICB9XG4gICAgaWYgKHV0aWxzLmlzVVJMU2VhcmNoUGFyYW1zKGRhdGEpKSB7XG4gICAgICBoZWFkZXJzLnNldENvbnRlbnRUeXBlKCdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtOCcsIGZhbHNlKTtcbiAgICAgIHJldHVybiBkYXRhLnRvU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgbGV0IGlzRmlsZUxpc3Q7XG5cbiAgICBpZiAoaXNPYmplY3RQYXlsb2FkKSB7XG4gICAgICBpZiAoY29udGVudFR5cGUuaW5kZXhPZignYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJykgPiAtMSkge1xuICAgICAgICByZXR1cm4gdG9VUkxFbmNvZGVkRm9ybShkYXRhLCB0aGlzLmZvcm1TZXJpYWxpemVyKS50b1N0cmluZygpO1xuICAgICAgfVxuXG4gICAgICBpZiAoKGlzRmlsZUxpc3QgPSB1dGlscy5pc0ZpbGVMaXN0KGRhdGEpKSB8fCBjb250ZW50VHlwZS5pbmRleE9mKCdtdWx0aXBhcnQvZm9ybS1kYXRhJykgPiAtMSkge1xuICAgICAgICBjb25zdCBfRm9ybURhdGEgPSB0aGlzLmVudiAmJiB0aGlzLmVudi5Gb3JtRGF0YTtcblxuICAgICAgICByZXR1cm4gdG9Gb3JtRGF0YShcbiAgICAgICAgICBpc0ZpbGVMaXN0ID8geydmaWxlc1tdJzogZGF0YX0gOiBkYXRhLFxuICAgICAgICAgIF9Gb3JtRGF0YSAmJiBuZXcgX0Zvcm1EYXRhKCksXG4gICAgICAgICAgdGhpcy5mb3JtU2VyaWFsaXplclxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc09iamVjdFBheWxvYWQgfHwgaGFzSlNPTkNvbnRlbnRUeXBlICkge1xuICAgICAgaGVhZGVycy5zZXRDb250ZW50VHlwZSgnYXBwbGljYXRpb24vanNvbicsIGZhbHNlKTtcbiAgICAgIHJldHVybiBzdHJpbmdpZnlTYWZlbHkoZGF0YSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1dLFxuXG4gIHRyYW5zZm9ybVJlc3BvbnNlOiBbZnVuY3Rpb24gdHJhbnNmb3JtUmVzcG9uc2UoZGF0YSkge1xuICAgIGNvbnN0IHRyYW5zaXRpb25hbCA9IHRoaXMudHJhbnNpdGlvbmFsIHx8IGRlZmF1bHRzLnRyYW5zaXRpb25hbDtcbiAgICBjb25zdCBmb3JjZWRKU09OUGFyc2luZyA9IHRyYW5zaXRpb25hbCAmJiB0cmFuc2l0aW9uYWwuZm9yY2VkSlNPTlBhcnNpbmc7XG4gICAgY29uc3QgSlNPTlJlcXVlc3RlZCA9IHRoaXMucmVzcG9uc2VUeXBlID09PSAnanNvbic7XG5cbiAgICBpZiAoZGF0YSAmJiB1dGlscy5pc1N0cmluZyhkYXRhKSAmJiAoKGZvcmNlZEpTT05QYXJzaW5nICYmICF0aGlzLnJlc3BvbnNlVHlwZSkgfHwgSlNPTlJlcXVlc3RlZCkpIHtcbiAgICAgIGNvbnN0IHNpbGVudEpTT05QYXJzaW5nID0gdHJhbnNpdGlvbmFsICYmIHRyYW5zaXRpb25hbC5zaWxlbnRKU09OUGFyc2luZztcbiAgICAgIGNvbnN0IHN0cmljdEpTT05QYXJzaW5nID0gIXNpbGVudEpTT05QYXJzaW5nICYmIEpTT05SZXF1ZXN0ZWQ7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKGRhdGEpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAoc3RyaWN0SlNPTlBhcnNpbmcpIHtcbiAgICAgICAgICBpZiAoZS5uYW1lID09PSAnU3ludGF4RXJyb3InKSB7XG4gICAgICAgICAgICB0aHJvdyBBeGlvc0Vycm9yLmZyb20oZSwgQXhpb3NFcnJvci5FUlJfQkFEX1JFU1BPTlNFLCB0aGlzLCBudWxsLCB0aGlzLnJlc3BvbnNlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkYXRhO1xuICB9XSxcblxuICAvKipcbiAgICogQSB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyB0byBhYm9ydCBhIHJlcXVlc3QuIElmIHNldCB0byAwIChkZWZhdWx0KSBhXG4gICAqIHRpbWVvdXQgaXMgbm90IGNyZWF0ZWQuXG4gICAqL1xuICB0aW1lb3V0OiAwLFxuXG4gIHhzcmZDb29raWVOYW1lOiAnWFNSRi1UT0tFTicsXG4gIHhzcmZIZWFkZXJOYW1lOiAnWC1YU1JGLVRPS0VOJyxcblxuICBtYXhDb250ZW50TGVuZ3RoOiAtMSxcbiAgbWF4Qm9keUxlbmd0aDogLTEsXG5cbiAgZW52OiB7XG4gICAgRm9ybURhdGE6IHBsYXRmb3JtLmNsYXNzZXMuRm9ybURhdGEsXG4gICAgQmxvYjogcGxhdGZvcm0uY2xhc3Nlcy5CbG9iXG4gIH0sXG5cbiAgdmFsaWRhdGVTdGF0dXM6IGZ1bmN0aW9uIHZhbGlkYXRlU3RhdHVzKHN0YXR1cykge1xuICAgIHJldHVybiBzdGF0dXMgPj0gMjAwICYmIHN0YXR1cyA8IDMwMDtcbiAgfSxcblxuICBoZWFkZXJzOiB7XG4gICAgY29tbW9uOiB7XG4gICAgICAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKicsXG4gICAgICAnQ29udGVudC1UeXBlJzogdW5kZWZpbmVkXG4gICAgfVxuICB9XG59O1xuXG51dGlscy5mb3JFYWNoKFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJywgJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJ10sIChtZXRob2QpID0+IHtcbiAgZGVmYXVsdHMuaGVhZGVyc1ttZXRob2RdID0ge307XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgZGVmYXVsdHM7XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLy4uL3V0aWxzLmpzJztcblxuLy8gUmF3QXhpb3NIZWFkZXJzIHdob3NlIGR1cGxpY2F0ZXMgYXJlIGlnbm9yZWQgYnkgbm9kZVxuLy8gYy5mLiBodHRwczovL25vZGVqcy5vcmcvYXBpL2h0dHAuaHRtbCNodHRwX21lc3NhZ2VfaGVhZGVyc1xuY29uc3QgaWdub3JlRHVwbGljYXRlT2YgPSB1dGlscy50b09iamVjdFNldChbXG4gICdhZ2UnLCAnYXV0aG9yaXphdGlvbicsICdjb250ZW50LWxlbmd0aCcsICdjb250ZW50LXR5cGUnLCAnZXRhZycsXG4gICdleHBpcmVzJywgJ2Zyb20nLCAnaG9zdCcsICdpZi1tb2RpZmllZC1zaW5jZScsICdpZi11bm1vZGlmaWVkLXNpbmNlJyxcbiAgJ2xhc3QtbW9kaWZpZWQnLCAnbG9jYXRpb24nLCAnbWF4LWZvcndhcmRzJywgJ3Byb3h5LWF1dGhvcml6YXRpb24nLFxuICAncmVmZXJlcicsICdyZXRyeS1hZnRlcicsICd1c2VyLWFnZW50J1xuXSk7XG5cbi8qKlxuICogUGFyc2UgaGVhZGVycyBpbnRvIGFuIG9iamVjdFxuICpcbiAqIGBgYFxuICogRGF0ZTogV2VkLCAyNyBBdWcgMjAxNCAwODo1ODo0OSBHTVRcbiAqIENvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvblxuICogQ29ubmVjdGlvbjoga2VlcC1hbGl2ZVxuICogVHJhbnNmZXItRW5jb2Rpbmc6IGNodW5rZWRcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSByYXdIZWFkZXJzIEhlYWRlcnMgbmVlZGluZyB0byBiZSBwYXJzZWRcbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBIZWFkZXJzIHBhcnNlZCBpbnRvIGFuIG9iamVjdFxuICovXG5leHBvcnQgZGVmYXVsdCByYXdIZWFkZXJzID0+IHtcbiAgY29uc3QgcGFyc2VkID0ge307XG4gIGxldCBrZXk7XG4gIGxldCB2YWw7XG4gIGxldCBpO1xuXG4gIHJhd0hlYWRlcnMgJiYgcmF3SGVhZGVycy5zcGxpdCgnXFxuJykuZm9yRWFjaChmdW5jdGlvbiBwYXJzZXIobGluZSkge1xuICAgIGkgPSBsaW5lLmluZGV4T2YoJzonKTtcbiAgICBrZXkgPSBsaW5lLnN1YnN0cmluZygwLCBpKS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgICB2YWwgPSBsaW5lLnN1YnN0cmluZyhpICsgMSkudHJpbSgpO1xuXG4gICAgaWYgKCFrZXkgfHwgKHBhcnNlZFtrZXldICYmIGlnbm9yZUR1cGxpY2F0ZU9mW2tleV0pKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gJ3NldC1jb29raWUnKSB7XG4gICAgICBpZiAocGFyc2VkW2tleV0pIHtcbiAgICAgICAgcGFyc2VkW2tleV0ucHVzaCh2YWwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFyc2VkW2tleV0gPSBbdmFsXTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGFyc2VkW2tleV0gPSBwYXJzZWRba2V5XSA/IHBhcnNlZFtrZXldICsgJywgJyArIHZhbCA6IHZhbDtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBwYXJzZWQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IHBhcnNlSGVhZGVycyBmcm9tICcuLi9oZWxwZXJzL3BhcnNlSGVhZGVycy5qcyc7XG5cbmNvbnN0ICRpbnRlcm5hbHMgPSBTeW1ib2woJ2ludGVybmFscycpO1xuXG5mdW5jdGlvbiBub3JtYWxpemVIZWFkZXIoaGVhZGVyKSB7XG4gIHJldHVybiBoZWFkZXIgJiYgU3RyaW5nKGhlYWRlcikudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVZhbHVlKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PT0gZmFsc2UgfHwgdmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiB1dGlscy5pc0FycmF5KHZhbHVlKSA/IHZhbHVlLm1hcChub3JtYWxpemVWYWx1ZSkgOiBTdHJpbmcodmFsdWUpO1xufVxuXG5mdW5jdGlvbiBwYXJzZVRva2VucyhzdHIpIHtcbiAgY29uc3QgdG9rZW5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgY29uc3QgdG9rZW5zUkUgPSAvKFteXFxzLDs9XSspXFxzKig/Oj1cXHMqKFteLDtdKykpPy9nO1xuICBsZXQgbWF0Y2g7XG5cbiAgd2hpbGUgKChtYXRjaCA9IHRva2Vuc1JFLmV4ZWMoc3RyKSkpIHtcbiAgICB0b2tlbnNbbWF0Y2hbMV1dID0gbWF0Y2hbMl07XG4gIH1cblxuICByZXR1cm4gdG9rZW5zO1xufVxuXG5jb25zdCBpc1ZhbGlkSGVhZGVyTmFtZSA9IChzdHIpID0+IC9eWy1fYS16QS1aMC05XmB8fiwhIyQlJicqKy5dKyQvLnRlc3Qoc3RyLnRyaW0oKSk7XG5cbmZ1bmN0aW9uIG1hdGNoSGVhZGVyVmFsdWUoY29udGV4dCwgdmFsdWUsIGhlYWRlciwgZmlsdGVyLCBpc0hlYWRlck5hbWVGaWx0ZXIpIHtcbiAgaWYgKHV0aWxzLmlzRnVuY3Rpb24oZmlsdGVyKSkge1xuICAgIHJldHVybiBmaWx0ZXIuY2FsbCh0aGlzLCB2YWx1ZSwgaGVhZGVyKTtcbiAgfVxuXG4gIGlmIChpc0hlYWRlck5hbWVGaWx0ZXIpIHtcbiAgICB2YWx1ZSA9IGhlYWRlcjtcbiAgfVxuXG4gIGlmICghdXRpbHMuaXNTdHJpbmcodmFsdWUpKSByZXR1cm47XG5cbiAgaWYgKHV0aWxzLmlzU3RyaW5nKGZpbHRlcikpIHtcbiAgICByZXR1cm4gdmFsdWUuaW5kZXhPZihmaWx0ZXIpICE9PSAtMTtcbiAgfVxuXG4gIGlmICh1dGlscy5pc1JlZ0V4cChmaWx0ZXIpKSB7XG4gICAgcmV0dXJuIGZpbHRlci50ZXN0KHZhbHVlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBmb3JtYXRIZWFkZXIoaGVhZGVyKSB7XG4gIHJldHVybiBoZWFkZXIudHJpbSgpXG4gICAgLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvKFthLXpcXGRdKShcXHcqKS9nLCAodywgY2hhciwgc3RyKSA9PiB7XG4gICAgICByZXR1cm4gY2hhci50b1VwcGVyQ2FzZSgpICsgc3RyO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBidWlsZEFjY2Vzc29ycyhvYmosIGhlYWRlcikge1xuICBjb25zdCBhY2Nlc3Nvck5hbWUgPSB1dGlscy50b0NhbWVsQ2FzZSgnICcgKyBoZWFkZXIpO1xuXG4gIFsnZ2V0JywgJ3NldCcsICdoYXMnXS5mb3JFYWNoKG1ldGhvZE5hbWUgPT4ge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIG1ldGhvZE5hbWUgKyBhY2Nlc3Nvck5hbWUsIHtcbiAgICAgIHZhbHVlOiBmdW5jdGlvbihhcmcxLCBhcmcyLCBhcmczKSB7XG4gICAgICAgIHJldHVybiB0aGlzW21ldGhvZE5hbWVdLmNhbGwodGhpcywgaGVhZGVyLCBhcmcxLCBhcmcyLCBhcmczKTtcbiAgICAgIH0sXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgfSk7XG59XG5cbmNsYXNzIEF4aW9zSGVhZGVycyB7XG4gIGNvbnN0cnVjdG9yKGhlYWRlcnMpIHtcbiAgICBoZWFkZXJzICYmIHRoaXMuc2V0KGhlYWRlcnMpO1xuICB9XG5cbiAgc2V0KGhlYWRlciwgdmFsdWVPclJld3JpdGUsIHJld3JpdGUpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcblxuICAgIGZ1bmN0aW9uIHNldEhlYWRlcihfdmFsdWUsIF9oZWFkZXIsIF9yZXdyaXRlKSB7XG4gICAgICBjb25zdCBsSGVhZGVyID0gbm9ybWFsaXplSGVhZGVyKF9oZWFkZXIpO1xuXG4gICAgICBpZiAoIWxIZWFkZXIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdoZWFkZXIgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZycpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBrZXkgPSB1dGlscy5maW5kS2V5KHNlbGYsIGxIZWFkZXIpO1xuXG4gICAgICBpZigha2V5IHx8IHNlbGZba2V5XSA9PT0gdW5kZWZpbmVkIHx8IF9yZXdyaXRlID09PSB0cnVlIHx8IChfcmV3cml0ZSA9PT0gdW5kZWZpbmVkICYmIHNlbGZba2V5XSAhPT0gZmFsc2UpKSB7XG4gICAgICAgIHNlbGZba2V5IHx8IF9oZWFkZXJdID0gbm9ybWFsaXplVmFsdWUoX3ZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBzZXRIZWFkZXJzID0gKGhlYWRlcnMsIF9yZXdyaXRlKSA9PlxuICAgICAgdXRpbHMuZm9yRWFjaChoZWFkZXJzLCAoX3ZhbHVlLCBfaGVhZGVyKSA9PiBzZXRIZWFkZXIoX3ZhbHVlLCBfaGVhZGVyLCBfcmV3cml0ZSkpO1xuXG4gICAgaWYgKHV0aWxzLmlzUGxhaW5PYmplY3QoaGVhZGVyKSB8fCBoZWFkZXIgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yKSB7XG4gICAgICBzZXRIZWFkZXJzKGhlYWRlciwgdmFsdWVPclJld3JpdGUpXG4gICAgfSBlbHNlIGlmKHV0aWxzLmlzU3RyaW5nKGhlYWRlcikgJiYgKGhlYWRlciA9IGhlYWRlci50cmltKCkpICYmICFpc1ZhbGlkSGVhZGVyTmFtZShoZWFkZXIpKSB7XG4gICAgICBzZXRIZWFkZXJzKHBhcnNlSGVhZGVycyhoZWFkZXIpLCB2YWx1ZU9yUmV3cml0ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhlYWRlciAhPSBudWxsICYmIHNldEhlYWRlcih2YWx1ZU9yUmV3cml0ZSwgaGVhZGVyLCByZXdyaXRlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGdldChoZWFkZXIsIHBhcnNlcikge1xuICAgIGhlYWRlciA9IG5vcm1hbGl6ZUhlYWRlcihoZWFkZXIpO1xuXG4gICAgaWYgKGhlYWRlcikge1xuICAgICAgY29uc3Qga2V5ID0gdXRpbHMuZmluZEtleSh0aGlzLCBoZWFkZXIpO1xuXG4gICAgICBpZiAoa2V5KSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpc1trZXldO1xuXG4gICAgICAgIGlmICghcGFyc2VyKSB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhcnNlciA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHJldHVybiBwYXJzZVRva2Vucyh2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodXRpbHMuaXNGdW5jdGlvbihwYXJzZXIpKSB7XG4gICAgICAgICAgcmV0dXJuIHBhcnNlci5jYWxsKHRoaXMsIHZhbHVlLCBrZXkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHV0aWxzLmlzUmVnRXhwKHBhcnNlcikpIHtcbiAgICAgICAgICByZXR1cm4gcGFyc2VyLmV4ZWModmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigncGFyc2VyIG11c3QgYmUgYm9vbGVhbnxyZWdleHB8ZnVuY3Rpb24nKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBoYXMoaGVhZGVyLCBtYXRjaGVyKSB7XG4gICAgaGVhZGVyID0gbm9ybWFsaXplSGVhZGVyKGhlYWRlcik7XG5cbiAgICBpZiAoaGVhZGVyKSB7XG4gICAgICBjb25zdCBrZXkgPSB1dGlscy5maW5kS2V5KHRoaXMsIGhlYWRlcik7XG5cbiAgICAgIHJldHVybiAhIShrZXkgJiYgdGhpc1trZXldICE9PSB1bmRlZmluZWQgJiYgKCFtYXRjaGVyIHx8IG1hdGNoSGVhZGVyVmFsdWUodGhpcywgdGhpc1trZXldLCBrZXksIG1hdGNoZXIpKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZGVsZXRlKGhlYWRlciwgbWF0Y2hlcikge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIGxldCBkZWxldGVkID0gZmFsc2U7XG5cbiAgICBmdW5jdGlvbiBkZWxldGVIZWFkZXIoX2hlYWRlcikge1xuICAgICAgX2hlYWRlciA9IG5vcm1hbGl6ZUhlYWRlcihfaGVhZGVyKTtcblxuICAgICAgaWYgKF9oZWFkZXIpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gdXRpbHMuZmluZEtleShzZWxmLCBfaGVhZGVyKTtcblxuICAgICAgICBpZiAoa2V5ICYmICghbWF0Y2hlciB8fCBtYXRjaEhlYWRlclZhbHVlKHNlbGYsIHNlbGZba2V5XSwga2V5LCBtYXRjaGVyKSkpIHtcbiAgICAgICAgICBkZWxldGUgc2VsZltrZXldO1xuXG4gICAgICAgICAgZGVsZXRlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodXRpbHMuaXNBcnJheShoZWFkZXIpKSB7XG4gICAgICBoZWFkZXIuZm9yRWFjaChkZWxldGVIZWFkZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGVIZWFkZXIoaGVhZGVyKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGVsZXRlZDtcbiAgfVxuXG4gIGNsZWFyKG1hdGNoZXIpIHtcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXModGhpcyk7XG4gICAgbGV0IGkgPSBrZXlzLmxlbmd0aDtcbiAgICBsZXQgZGVsZXRlZCA9IGZhbHNlO1xuXG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgY29uc3Qga2V5ID0ga2V5c1tpXTtcbiAgICAgIGlmKCFtYXRjaGVyIHx8IG1hdGNoSGVhZGVyVmFsdWUodGhpcywgdGhpc1trZXldLCBrZXksIG1hdGNoZXIsIHRydWUpKSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzW2tleV07XG4gICAgICAgIGRlbGV0ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkZWxldGVkO1xuICB9XG5cbiAgbm9ybWFsaXplKGZvcm1hdCkge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIGNvbnN0IGhlYWRlcnMgPSB7fTtcblxuICAgIHV0aWxzLmZvckVhY2godGhpcywgKHZhbHVlLCBoZWFkZXIpID0+IHtcbiAgICAgIGNvbnN0IGtleSA9IHV0aWxzLmZpbmRLZXkoaGVhZGVycywgaGVhZGVyKTtcblxuICAgICAgaWYgKGtleSkge1xuICAgICAgICBzZWxmW2tleV0gPSBub3JtYWxpemVWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIGRlbGV0ZSBzZWxmW2hlYWRlcl07XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgbm9ybWFsaXplZCA9IGZvcm1hdCA/IGZvcm1hdEhlYWRlcihoZWFkZXIpIDogU3RyaW5nKGhlYWRlcikudHJpbSgpO1xuXG4gICAgICBpZiAobm9ybWFsaXplZCAhPT0gaGVhZGVyKSB7XG4gICAgICAgIGRlbGV0ZSBzZWxmW2hlYWRlcl07XG4gICAgICB9XG5cbiAgICAgIHNlbGZbbm9ybWFsaXplZF0gPSBub3JtYWxpemVWYWx1ZSh2YWx1ZSk7XG5cbiAgICAgIGhlYWRlcnNbbm9ybWFsaXplZF0gPSB0cnVlO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBjb25jYXQoLi4udGFyZ2V0cykge1xuICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLmNvbmNhdCh0aGlzLCAuLi50YXJnZXRzKTtcbiAgfVxuXG4gIHRvSlNPTihhc1N0cmluZ3MpIHtcbiAgICBjb25zdCBvYmogPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gICAgdXRpbHMuZm9yRWFjaCh0aGlzLCAodmFsdWUsIGhlYWRlcikgPT4ge1xuICAgICAgdmFsdWUgIT0gbnVsbCAmJiB2YWx1ZSAhPT0gZmFsc2UgJiYgKG9ialtoZWFkZXJdID0gYXNTdHJpbmdzICYmIHV0aWxzLmlzQXJyYXkodmFsdWUpID8gdmFsdWUuam9pbignLCAnKSA6IHZhbHVlKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICBbU3ltYm9sLml0ZXJhdG9yXSgpIHtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy50b0pTT04oKSlbU3ltYm9sLml0ZXJhdG9yXSgpO1xuICB9XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpLm1hcCgoW2hlYWRlciwgdmFsdWVdKSA9PiBoZWFkZXIgKyAnOiAnICsgdmFsdWUpLmpvaW4oJ1xcbicpO1xuICB9XG5cbiAgZ2V0IFtTeW1ib2wudG9TdHJpbmdUYWddKCkge1xuICAgIHJldHVybiAnQXhpb3NIZWFkZXJzJztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tKHRoaW5nKSB7XG4gICAgcmV0dXJuIHRoaW5nIGluc3RhbmNlb2YgdGhpcyA/IHRoaW5nIDogbmV3IHRoaXModGhpbmcpO1xuICB9XG5cbiAgc3RhdGljIGNvbmNhdChmaXJzdCwgLi4udGFyZ2V0cykge1xuICAgIGNvbnN0IGNvbXB1dGVkID0gbmV3IHRoaXMoZmlyc3QpO1xuXG4gICAgdGFyZ2V0cy5mb3JFYWNoKCh0YXJnZXQpID0+IGNvbXB1dGVkLnNldCh0YXJnZXQpKTtcblxuICAgIHJldHVybiBjb21wdXRlZDtcbiAgfVxuXG4gIHN0YXRpYyBhY2Nlc3NvcihoZWFkZXIpIHtcbiAgICBjb25zdCBpbnRlcm5hbHMgPSB0aGlzWyRpbnRlcm5hbHNdID0gKHRoaXNbJGludGVybmFsc10gPSB7XG4gICAgICBhY2Nlc3NvcnM6IHt9XG4gICAgfSk7XG5cbiAgICBjb25zdCBhY2Nlc3NvcnMgPSBpbnRlcm5hbHMuYWNjZXNzb3JzO1xuICAgIGNvbnN0IHByb3RvdHlwZSA9IHRoaXMucHJvdG90eXBlO1xuXG4gICAgZnVuY3Rpb24gZGVmaW5lQWNjZXNzb3IoX2hlYWRlcikge1xuICAgICAgY29uc3QgbEhlYWRlciA9IG5vcm1hbGl6ZUhlYWRlcihfaGVhZGVyKTtcblxuICAgICAgaWYgKCFhY2Nlc3NvcnNbbEhlYWRlcl0pIHtcbiAgICAgICAgYnVpbGRBY2Nlc3NvcnMocHJvdG90eXBlLCBfaGVhZGVyKTtcbiAgICAgICAgYWNjZXNzb3JzW2xIZWFkZXJdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB1dGlscy5pc0FycmF5KGhlYWRlcikgPyBoZWFkZXIuZm9yRWFjaChkZWZpbmVBY2Nlc3NvcikgOiBkZWZpbmVBY2Nlc3NvcihoZWFkZXIpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbn1cblxuQXhpb3NIZWFkZXJzLmFjY2Vzc29yKFsnQ29udGVudC1UeXBlJywgJ0NvbnRlbnQtTGVuZ3RoJywgJ0FjY2VwdCcsICdBY2NlcHQtRW5jb2RpbmcnLCAnVXNlci1BZ2VudCcsICdBdXRob3JpemF0aW9uJ10pO1xuXG4vLyByZXNlcnZlZCBuYW1lcyBob3RmaXhcbnV0aWxzLnJlZHVjZURlc2NyaXB0b3JzKEF4aW9zSGVhZGVycy5wcm90b3R5cGUsICh7dmFsdWV9LCBrZXkpID0+IHtcbiAgbGV0IG1hcHBlZCA9IGtleVswXS50b1VwcGVyQ2FzZSgpICsga2V5LnNsaWNlKDEpOyAvLyBtYXAgYHNldGAgPT4gYFNldGBcbiAgcmV0dXJuIHtcbiAgICBnZXQ6ICgpID0+IHZhbHVlLFxuICAgIHNldChoZWFkZXJWYWx1ZSkge1xuICAgICAgdGhpc1ttYXBwZWRdID0gaGVhZGVyVmFsdWU7XG4gICAgfVxuICB9XG59KTtcblxudXRpbHMuZnJlZXplTWV0aG9kcyhBeGlvc0hlYWRlcnMpO1xuXG5leHBvcnQgZGVmYXVsdCBBeGlvc0hlYWRlcnM7XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLy4uL3V0aWxzLmpzJztcbmltcG9ydCBkZWZhdWx0cyBmcm9tICcuLi9kZWZhdWx0cy9pbmRleC5qcyc7XG5pbXBvcnQgQXhpb3NIZWFkZXJzIGZyb20gJy4uL2NvcmUvQXhpb3NIZWFkZXJzLmpzJztcblxuLyoqXG4gKiBUcmFuc2Zvcm0gdGhlIGRhdGEgZm9yIGEgcmVxdWVzdCBvciBhIHJlc3BvbnNlXG4gKlxuICogQHBhcmFtIHtBcnJheXxGdW5jdGlvbn0gZm5zIEEgc2luZ2xlIGZ1bmN0aW9uIG9yIEFycmF5IG9mIGZ1bmN0aW9uc1xuICogQHBhcmFtIHs/T2JqZWN0fSByZXNwb25zZSBUaGUgcmVzcG9uc2Ugb2JqZWN0XG4gKlxuICogQHJldHVybnMgeyp9IFRoZSByZXN1bHRpbmcgdHJhbnNmb3JtZWQgZGF0YVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0cmFuc2Zvcm1EYXRhKGZucywgcmVzcG9uc2UpIHtcbiAgY29uc3QgY29uZmlnID0gdGhpcyB8fCBkZWZhdWx0cztcbiAgY29uc3QgY29udGV4dCA9IHJlc3BvbnNlIHx8IGNvbmZpZztcbiAgY29uc3QgaGVhZGVycyA9IEF4aW9zSGVhZGVycy5mcm9tKGNvbnRleHQuaGVhZGVycyk7XG4gIGxldCBkYXRhID0gY29udGV4dC5kYXRhO1xuXG4gIHV0aWxzLmZvckVhY2goZm5zLCBmdW5jdGlvbiB0cmFuc2Zvcm0oZm4pIHtcbiAgICBkYXRhID0gZm4uY2FsbChjb25maWcsIGRhdGEsIGhlYWRlcnMubm9ybWFsaXplKCksIHJlc3BvbnNlID8gcmVzcG9uc2Uuc3RhdHVzIDogdW5kZWZpbmVkKTtcbiAgfSk7XG5cbiAgaGVhZGVycy5ub3JtYWxpemUoKTtcblxuICByZXR1cm4gZGF0YTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNDYW5jZWwodmFsdWUpIHtcbiAgcmV0dXJuICEhKHZhbHVlICYmIHZhbHVlLl9fQ0FOQ0VMX18pO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tICcuLi9jb3JlL0F4aW9zRXJyb3IuanMnO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcblxuLyoqXG4gKiBBIGBDYW5jZWxlZEVycm9yYCBpcyBhbiBvYmplY3QgdGhhdCBpcyB0aHJvd24gd2hlbiBhbiBvcGVyYXRpb24gaXMgY2FuY2VsZWQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmc9fSBtZXNzYWdlIFRoZSBtZXNzYWdlLlxuICogQHBhcmFtIHtPYmplY3Q9fSBjb25maWcgVGhlIGNvbmZpZy5cbiAqIEBwYXJhbSB7T2JqZWN0PX0gcmVxdWVzdCBUaGUgcmVxdWVzdC5cbiAqXG4gKiBAcmV0dXJucyB7Q2FuY2VsZWRFcnJvcn0gVGhlIGNyZWF0ZWQgZXJyb3IuXG4gKi9cbmZ1bmN0aW9uIENhbmNlbGVkRXJyb3IobWVzc2FnZSwgY29uZmlnLCByZXF1ZXN0KSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lcS1udWxsLGVxZXFlcVxuICBBeGlvc0Vycm9yLmNhbGwodGhpcywgbWVzc2FnZSA9PSBudWxsID8gJ2NhbmNlbGVkJyA6IG1lc3NhZ2UsIEF4aW9zRXJyb3IuRVJSX0NBTkNFTEVELCBjb25maWcsIHJlcXVlc3QpO1xuICB0aGlzLm5hbWUgPSAnQ2FuY2VsZWRFcnJvcic7XG59XG5cbnV0aWxzLmluaGVyaXRzKENhbmNlbGVkRXJyb3IsIEF4aW9zRXJyb3IsIHtcbiAgX19DQU5DRUxfXzogdHJ1ZVxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IENhbmNlbGVkRXJyb3I7XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCBBeGlvc0Vycm9yIGZyb20gJy4vQXhpb3NFcnJvci5qcyc7XG5cbi8qKlxuICogUmVzb2x2ZSBvciByZWplY3QgYSBQcm9taXNlIGJhc2VkIG9uIHJlc3BvbnNlIHN0YXR1cy5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSByZXNvbHZlIEEgZnVuY3Rpb24gdGhhdCByZXNvbHZlcyB0aGUgcHJvbWlzZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlamVjdCBBIGZ1bmN0aW9uIHRoYXQgcmVqZWN0cyB0aGUgcHJvbWlzZS5cbiAqIEBwYXJhbSB7b2JqZWN0fSByZXNwb25zZSBUaGUgcmVzcG9uc2UuXG4gKlxuICogQHJldHVybnMge29iamVjdH0gVGhlIHJlc3BvbnNlLlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCByZXNwb25zZSkge1xuICBjb25zdCB2YWxpZGF0ZVN0YXR1cyA9IHJlc3BvbnNlLmNvbmZpZy52YWxpZGF0ZVN0YXR1cztcbiAgaWYgKCFyZXNwb25zZS5zdGF0dXMgfHwgIXZhbGlkYXRlU3RhdHVzIHx8IHZhbGlkYXRlU3RhdHVzKHJlc3BvbnNlLnN0YXR1cykpIHtcbiAgICByZXNvbHZlKHJlc3BvbnNlKTtcbiAgfSBlbHNlIHtcbiAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoXG4gICAgICAnUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZSAnICsgcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgW0F4aW9zRXJyb3IuRVJSX0JBRF9SRVFVRVNULCBBeGlvc0Vycm9yLkVSUl9CQURfUkVTUE9OU0VdW01hdGguZmxvb3IocmVzcG9uc2Uuc3RhdHVzIC8gMTAwKSAtIDRdLFxuICAgICAgcmVzcG9uc2UuY29uZmlnLFxuICAgICAgcmVzcG9uc2UucmVxdWVzdCxcbiAgICAgIHJlc3BvbnNlXG4gICAgKSk7XG4gIH1cbn1cbiIsImltcG9ydCB1dGlscyBmcm9tICcuLy4uL3V0aWxzLmpzJztcbmltcG9ydCBwbGF0Zm9ybSBmcm9tICcuLi9wbGF0Zm9ybS9pbmRleC5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IHBsYXRmb3JtLmhhc1N0YW5kYXJkQnJvd3NlckVudiA/XG5cbiAgLy8gU3RhbmRhcmQgYnJvd3NlciBlbnZzIHN1cHBvcnQgZG9jdW1lbnQuY29va2llXG4gIHtcbiAgICB3cml0ZShuYW1lLCB2YWx1ZSwgZXhwaXJlcywgcGF0aCwgZG9tYWluLCBzZWN1cmUpIHtcbiAgICAgIGNvbnN0IGNvb2tpZSA9IFtuYW1lICsgJz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKV07XG5cbiAgICAgIHV0aWxzLmlzTnVtYmVyKGV4cGlyZXMpICYmIGNvb2tpZS5wdXNoKCdleHBpcmVzPScgKyBuZXcgRGF0ZShleHBpcmVzKS50b0dNVFN0cmluZygpKTtcblxuICAgICAgdXRpbHMuaXNTdHJpbmcocGF0aCkgJiYgY29va2llLnB1c2goJ3BhdGg9JyArIHBhdGgpO1xuXG4gICAgICB1dGlscy5pc1N0cmluZyhkb21haW4pICYmIGNvb2tpZS5wdXNoKCdkb21haW49JyArIGRvbWFpbik7XG5cbiAgICAgIHNlY3VyZSA9PT0gdHJ1ZSAmJiBjb29raWUucHVzaCgnc2VjdXJlJyk7XG5cbiAgICAgIGRvY3VtZW50LmNvb2tpZSA9IGNvb2tpZS5qb2luKCc7ICcpO1xuICAgIH0sXG5cbiAgICByZWFkKG5hbWUpIHtcbiAgICAgIGNvbnN0IG1hdGNoID0gZG9jdW1lbnQuY29va2llLm1hdGNoKG5ldyBSZWdFeHAoJyhefDtcXFxccyopKCcgKyBuYW1lICsgJyk9KFteO10qKScpKTtcbiAgICAgIHJldHVybiAobWF0Y2ggPyBkZWNvZGVVUklDb21wb25lbnQobWF0Y2hbM10pIDogbnVsbCk7XG4gICAgfSxcblxuICAgIHJlbW92ZShuYW1lKSB7XG4gICAgICB0aGlzLndyaXRlKG5hbWUsICcnLCBEYXRlLm5vdygpIC0gODY0MDAwMDApO1xuICAgIH1cbiAgfVxuXG4gIDpcblxuICAvLyBOb24tc3RhbmRhcmQgYnJvd3NlciBlbnYgKHdlYiB3b3JrZXJzLCByZWFjdC1uYXRpdmUpIGxhY2sgbmVlZGVkIHN1cHBvcnQuXG4gIHtcbiAgICB3cml0ZSgpIHt9LFxuICAgIHJlYWQoKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9LFxuICAgIHJlbW92ZSgpIHt9XG4gIH07XG5cbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBVUkwgaXMgYWJzb2x1dGVcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJsIFRoZSBVUkwgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBzcGVjaWZpZWQgVVJMIGlzIGFic29sdXRlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNBYnNvbHV0ZVVSTCh1cmwpIHtcbiAgLy8gQSBVUkwgaXMgY29uc2lkZXJlZCBhYnNvbHV0ZSBpZiBpdCBiZWdpbnMgd2l0aCBcIjxzY2hlbWU+Oi8vXCIgb3IgXCIvL1wiIChwcm90b2NvbC1yZWxhdGl2ZSBVUkwpLlxuICAvLyBSRkMgMzk4NiBkZWZpbmVzIHNjaGVtZSBuYW1lIGFzIGEgc2VxdWVuY2Ugb2YgY2hhcmFjdGVycyBiZWdpbm5pbmcgd2l0aCBhIGxldHRlciBhbmQgZm9sbG93ZWRcbiAgLy8gYnkgYW55IGNvbWJpbmF0aW9uIG9mIGxldHRlcnMsIGRpZ2l0cywgcGx1cywgcGVyaW9kLCBvciBoeXBoZW4uXG4gIHJldHVybiAvXihbYS16XVthLXpcXGQrXFwtLl0qOik/XFwvXFwvL2kudGVzdCh1cmwpO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgVVJMIGJ5IGNvbWJpbmluZyB0aGUgc3BlY2lmaWVkIFVSTHNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYmFzZVVSTCBUaGUgYmFzZSBVUkxcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWxhdGl2ZVVSTCBUaGUgcmVsYXRpdmUgVVJMXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGNvbWJpbmVkIFVSTFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjb21iaW5lVVJMcyhiYXNlVVJMLCByZWxhdGl2ZVVSTCkge1xuICByZXR1cm4gcmVsYXRpdmVVUkxcbiAgICA/IGJhc2VVUkwucmVwbGFjZSgvXFwvP1xcLyQvLCAnJykgKyAnLycgKyByZWxhdGl2ZVVSTC5yZXBsYWNlKC9eXFwvKy8sICcnKVxuICAgIDogYmFzZVVSTDtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IGlzQWJzb2x1dGVVUkwgZnJvbSAnLi4vaGVscGVycy9pc0Fic29sdXRlVVJMLmpzJztcbmltcG9ydCBjb21iaW5lVVJMcyBmcm9tICcuLi9oZWxwZXJzL2NvbWJpbmVVUkxzLmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IFVSTCBieSBjb21iaW5pbmcgdGhlIGJhc2VVUkwgd2l0aCB0aGUgcmVxdWVzdGVkVVJMLFxuICogb25seSB3aGVuIHRoZSByZXF1ZXN0ZWRVUkwgaXMgbm90IGFscmVhZHkgYW4gYWJzb2x1dGUgVVJMLlxuICogSWYgdGhlIHJlcXVlc3RVUkwgaXMgYWJzb2x1dGUsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgcmVxdWVzdGVkVVJMIHVudG91Y2hlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYmFzZVVSTCBUaGUgYmFzZSBVUkxcbiAqIEBwYXJhbSB7c3RyaW5nfSByZXF1ZXN0ZWRVUkwgQWJzb2x1dGUgb3IgcmVsYXRpdmUgVVJMIHRvIGNvbWJpbmVcbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgY29tYmluZWQgZnVsbCBwYXRoXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJ1aWxkRnVsbFBhdGgoYmFzZVVSTCwgcmVxdWVzdGVkVVJMKSB7XG4gIGlmIChiYXNlVVJMICYmICFpc0Fic29sdXRlVVJMKHJlcXVlc3RlZFVSTCkpIHtcbiAgICByZXR1cm4gY29tYmluZVVSTHMoYmFzZVVSTCwgcmVxdWVzdGVkVVJMKTtcbiAgfVxuICByZXR1cm4gcmVxdWVzdGVkVVJMO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi8uLi91dGlscy5qcyc7XG5pbXBvcnQgcGxhdGZvcm0gZnJvbSAnLi4vcGxhdGZvcm0vaW5kZXguanMnO1xuXG5leHBvcnQgZGVmYXVsdCBwbGF0Zm9ybS5oYXNTdGFuZGFyZEJyb3dzZXJFbnYgP1xuXG4vLyBTdGFuZGFyZCBicm93c2VyIGVudnMgaGF2ZSBmdWxsIHN1cHBvcnQgb2YgdGhlIEFQSXMgbmVlZGVkIHRvIHRlc3Rcbi8vIHdoZXRoZXIgdGhlIHJlcXVlc3QgVVJMIGlzIG9mIHRoZSBzYW1lIG9yaWdpbiBhcyBjdXJyZW50IGxvY2F0aW9uLlxuICAoZnVuY3Rpb24gc3RhbmRhcmRCcm93c2VyRW52KCkge1xuICAgIGNvbnN0IG1zaWUgPSAvKG1zaWV8dHJpZGVudCkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xuICAgIGNvbnN0IHVybFBhcnNpbmdOb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgIGxldCBvcmlnaW5VUkw7XG5cbiAgICAvKipcbiAgICAqIFBhcnNlIGEgVVJMIHRvIGRpc2NvdmVyIGl0cyBjb21wb25lbnRzXG4gICAgKlxuICAgICogQHBhcmFtIHtTdHJpbmd9IHVybCBUaGUgVVJMIHRvIGJlIHBhcnNlZFxuICAgICogQHJldHVybnMge09iamVjdH1cbiAgICAqL1xuICAgIGZ1bmN0aW9uIHJlc29sdmVVUkwodXJsKSB7XG4gICAgICBsZXQgaHJlZiA9IHVybDtcblxuICAgICAgaWYgKG1zaWUpIHtcbiAgICAgICAgLy8gSUUgbmVlZHMgYXR0cmlidXRlIHNldCB0d2ljZSB0byBub3JtYWxpemUgcHJvcGVydGllc1xuICAgICAgICB1cmxQYXJzaW5nTm9kZS5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBocmVmKTtcbiAgICAgICAgaHJlZiA9IHVybFBhcnNpbmdOb2RlLmhyZWY7XG4gICAgICB9XG5cbiAgICAgIHVybFBhcnNpbmdOb2RlLnNldEF0dHJpYnV0ZSgnaHJlZicsIGhyZWYpO1xuXG4gICAgICAvLyB1cmxQYXJzaW5nTm9kZSBwcm92aWRlcyB0aGUgVXJsVXRpbHMgaW50ZXJmYWNlIC0gaHR0cDovL3VybC5zcGVjLndoYXR3Zy5vcmcvI3VybHV0aWxzXG4gICAgICByZXR1cm4ge1xuICAgICAgICBocmVmOiB1cmxQYXJzaW5nTm9kZS5ocmVmLFxuICAgICAgICBwcm90b2NvbDogdXJsUGFyc2luZ05vZGUucHJvdG9jb2wgPyB1cmxQYXJzaW5nTm9kZS5wcm90b2NvbC5yZXBsYWNlKC86JC8sICcnKSA6ICcnLFxuICAgICAgICBob3N0OiB1cmxQYXJzaW5nTm9kZS5ob3N0LFxuICAgICAgICBzZWFyY2g6IHVybFBhcnNpbmdOb2RlLnNlYXJjaCA/IHVybFBhcnNpbmdOb2RlLnNlYXJjaC5yZXBsYWNlKC9eXFw/LywgJycpIDogJycsXG4gICAgICAgIGhhc2g6IHVybFBhcnNpbmdOb2RlLmhhc2ggPyB1cmxQYXJzaW5nTm9kZS5oYXNoLnJlcGxhY2UoL14jLywgJycpIDogJycsXG4gICAgICAgIGhvc3RuYW1lOiB1cmxQYXJzaW5nTm9kZS5ob3N0bmFtZSxcbiAgICAgICAgcG9ydDogdXJsUGFyc2luZ05vZGUucG9ydCxcbiAgICAgICAgcGF0aG5hbWU6ICh1cmxQYXJzaW5nTm9kZS5wYXRobmFtZS5jaGFyQXQoMCkgPT09ICcvJykgP1xuICAgICAgICAgIHVybFBhcnNpbmdOb2RlLnBhdGhuYW1lIDpcbiAgICAgICAgICAnLycgKyB1cmxQYXJzaW5nTm9kZS5wYXRobmFtZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBvcmlnaW5VUkwgPSByZXNvbHZlVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcblxuICAgIC8qKlxuICAgICogRGV0ZXJtaW5lIGlmIGEgVVJMIHNoYXJlcyB0aGUgc2FtZSBvcmlnaW4gYXMgdGhlIGN1cnJlbnQgbG9jYXRpb25cbiAgICAqXG4gICAgKiBAcGFyYW0ge1N0cmluZ30gcmVxdWVzdFVSTCBUaGUgVVJMIHRvIHRlc3RcbiAgICAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIFVSTCBzaGFyZXMgdGhlIHNhbWUgb3JpZ2luLCBvdGhlcndpc2UgZmFsc2VcbiAgICAqL1xuICAgIHJldHVybiBmdW5jdGlvbiBpc1VSTFNhbWVPcmlnaW4ocmVxdWVzdFVSTCkge1xuICAgICAgY29uc3QgcGFyc2VkID0gKHV0aWxzLmlzU3RyaW5nKHJlcXVlc3RVUkwpKSA/IHJlc29sdmVVUkwocmVxdWVzdFVSTCkgOiByZXF1ZXN0VVJMO1xuICAgICAgcmV0dXJuIChwYXJzZWQucHJvdG9jb2wgPT09IG9yaWdpblVSTC5wcm90b2NvbCAmJlxuICAgICAgICAgIHBhcnNlZC5ob3N0ID09PSBvcmlnaW5VUkwuaG9zdCk7XG4gICAgfTtcbiAgfSkoKSA6XG5cbiAgLy8gTm9uIHN0YW5kYXJkIGJyb3dzZXIgZW52cyAod2ViIHdvcmtlcnMsIHJlYWN0LW5hdGl2ZSkgbGFjayBuZWVkZWQgc3VwcG9ydC5cbiAgKGZ1bmN0aW9uIG5vblN0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gaXNVUkxTYW1lT3JpZ2luKCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcbiAgfSkoKTtcbiIsIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcGFyc2VQcm90b2NvbCh1cmwpIHtcbiAgY29uc3QgbWF0Y2ggPSAvXihbLStcXHddezEsMjV9KSg6P1xcL1xcL3w6KS8uZXhlYyh1cmwpO1xuICByZXR1cm4gbWF0Y2ggJiYgbWF0Y2hbMV0gfHwgJyc7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQ2FsY3VsYXRlIGRhdGEgbWF4UmF0ZVxuICogQHBhcmFtIHtOdW1iZXJ9IFtzYW1wbGVzQ291bnQ9IDEwXVxuICogQHBhcmFtIHtOdW1iZXJ9IFttaW49IDEwMDBdXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gKi9cbmZ1bmN0aW9uIHNwZWVkb21ldGVyKHNhbXBsZXNDb3VudCwgbWluKSB7XG4gIHNhbXBsZXNDb3VudCA9IHNhbXBsZXNDb3VudCB8fCAxMDtcbiAgY29uc3QgYnl0ZXMgPSBuZXcgQXJyYXkoc2FtcGxlc0NvdW50KTtcbiAgY29uc3QgdGltZXN0YW1wcyA9IG5ldyBBcnJheShzYW1wbGVzQ291bnQpO1xuICBsZXQgaGVhZCA9IDA7XG4gIGxldCB0YWlsID0gMDtcbiAgbGV0IGZpcnN0U2FtcGxlVFM7XG5cbiAgbWluID0gbWluICE9PSB1bmRlZmluZWQgPyBtaW4gOiAxMDAwO1xuXG4gIHJldHVybiBmdW5jdGlvbiBwdXNoKGNodW5rTGVuZ3RoKSB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblxuICAgIGNvbnN0IHN0YXJ0ZWRBdCA9IHRpbWVzdGFtcHNbdGFpbF07XG5cbiAgICBpZiAoIWZpcnN0U2FtcGxlVFMpIHtcbiAgICAgIGZpcnN0U2FtcGxlVFMgPSBub3c7XG4gICAgfVxuXG4gICAgYnl0ZXNbaGVhZF0gPSBjaHVua0xlbmd0aDtcbiAgICB0aW1lc3RhbXBzW2hlYWRdID0gbm93O1xuXG4gICAgbGV0IGkgPSB0YWlsO1xuICAgIGxldCBieXRlc0NvdW50ID0gMDtcblxuICAgIHdoaWxlIChpICE9PSBoZWFkKSB7XG4gICAgICBieXRlc0NvdW50ICs9IGJ5dGVzW2krK107XG4gICAgICBpID0gaSAlIHNhbXBsZXNDb3VudDtcbiAgICB9XG5cbiAgICBoZWFkID0gKGhlYWQgKyAxKSAlIHNhbXBsZXNDb3VudDtcblxuICAgIGlmIChoZWFkID09PSB0YWlsKSB7XG4gICAgICB0YWlsID0gKHRhaWwgKyAxKSAlIHNhbXBsZXNDb3VudDtcbiAgICB9XG5cbiAgICBpZiAobm93IC0gZmlyc3RTYW1wbGVUUyA8IG1pbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHBhc3NlZCA9IHN0YXJ0ZWRBdCAmJiBub3cgLSBzdGFydGVkQXQ7XG5cbiAgICByZXR1cm4gcGFzc2VkID8gTWF0aC5yb3VuZChieXRlc0NvdW50ICogMTAwMCAvIHBhc3NlZCkgOiB1bmRlZmluZWQ7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IHNwZWVkb21ldGVyO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi8uLi91dGlscy5qcyc7XG5pbXBvcnQgc2V0dGxlIGZyb20gJy4vLi4vY29yZS9zZXR0bGUuanMnO1xuaW1wb3J0IGNvb2tpZXMgZnJvbSAnLi8uLi9oZWxwZXJzL2Nvb2tpZXMuanMnO1xuaW1wb3J0IGJ1aWxkVVJMIGZyb20gJy4vLi4vaGVscGVycy9idWlsZFVSTC5qcyc7XG5pbXBvcnQgYnVpbGRGdWxsUGF0aCBmcm9tICcuLi9jb3JlL2J1aWxkRnVsbFBhdGguanMnO1xuaW1wb3J0IGlzVVJMU2FtZU9yaWdpbiBmcm9tICcuLy4uL2hlbHBlcnMvaXNVUkxTYW1lT3JpZ2luLmpzJztcbmltcG9ydCB0cmFuc2l0aW9uYWxEZWZhdWx0cyBmcm9tICcuLi9kZWZhdWx0cy90cmFuc2l0aW9uYWwuanMnO1xuaW1wb3J0IEF4aW9zRXJyb3IgZnJvbSAnLi4vY29yZS9BeGlvc0Vycm9yLmpzJztcbmltcG9ydCBDYW5jZWxlZEVycm9yIGZyb20gJy4uL2NhbmNlbC9DYW5jZWxlZEVycm9yLmpzJztcbmltcG9ydCBwYXJzZVByb3RvY29sIGZyb20gJy4uL2hlbHBlcnMvcGFyc2VQcm90b2NvbC5qcyc7XG5pbXBvcnQgcGxhdGZvcm0gZnJvbSAnLi4vcGxhdGZvcm0vaW5kZXguanMnO1xuaW1wb3J0IEF4aW9zSGVhZGVycyBmcm9tICcuLi9jb3JlL0F4aW9zSGVhZGVycy5qcyc7XG5pbXBvcnQgc3BlZWRvbWV0ZXIgZnJvbSAnLi4vaGVscGVycy9zcGVlZG9tZXRlci5qcyc7XG5cbmZ1bmN0aW9uIHByb2dyZXNzRXZlbnRSZWR1Y2VyKGxpc3RlbmVyLCBpc0Rvd25sb2FkU3RyZWFtKSB7XG4gIGxldCBieXRlc05vdGlmaWVkID0gMDtcbiAgY29uc3QgX3NwZWVkb21ldGVyID0gc3BlZWRvbWV0ZXIoNTAsIDI1MCk7XG5cbiAgcmV0dXJuIGUgPT4ge1xuICAgIGNvbnN0IGxvYWRlZCA9IGUubG9hZGVkO1xuICAgIGNvbnN0IHRvdGFsID0gZS5sZW5ndGhDb21wdXRhYmxlID8gZS50b3RhbCA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBwcm9ncmVzc0J5dGVzID0gbG9hZGVkIC0gYnl0ZXNOb3RpZmllZDtcbiAgICBjb25zdCByYXRlID0gX3NwZWVkb21ldGVyKHByb2dyZXNzQnl0ZXMpO1xuICAgIGNvbnN0IGluUmFuZ2UgPSBsb2FkZWQgPD0gdG90YWw7XG5cbiAgICBieXRlc05vdGlmaWVkID0gbG9hZGVkO1xuXG4gICAgY29uc3QgZGF0YSA9IHtcbiAgICAgIGxvYWRlZCxcbiAgICAgIHRvdGFsLFxuICAgICAgcHJvZ3Jlc3M6IHRvdGFsID8gKGxvYWRlZCAvIHRvdGFsKSA6IHVuZGVmaW5lZCxcbiAgICAgIGJ5dGVzOiBwcm9ncmVzc0J5dGVzLFxuICAgICAgcmF0ZTogcmF0ZSA/IHJhdGUgOiB1bmRlZmluZWQsXG4gICAgICBlc3RpbWF0ZWQ6IHJhdGUgJiYgdG90YWwgJiYgaW5SYW5nZSA/ICh0b3RhbCAtIGxvYWRlZCkgLyByYXRlIDogdW5kZWZpbmVkLFxuICAgICAgZXZlbnQ6IGVcbiAgICB9O1xuXG4gICAgZGF0YVtpc0Rvd25sb2FkU3RyZWFtID8gJ2Rvd25sb2FkJyA6ICd1cGxvYWQnXSA9IHRydWU7XG5cbiAgICBsaXN0ZW5lcihkYXRhKTtcbiAgfTtcbn1cblxuY29uc3QgaXNYSFJBZGFwdGVyU3VwcG9ydGVkID0gdHlwZW9mIFhNTEh0dHBSZXF1ZXN0ICE9PSAndW5kZWZpbmVkJztcblxuZXhwb3J0IGRlZmF1bHQgaXNYSFJBZGFwdGVyU3VwcG9ydGVkICYmIGZ1bmN0aW9uIChjb25maWcpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIGRpc3BhdGNoWGhyUmVxdWVzdChyZXNvbHZlLCByZWplY3QpIHtcbiAgICBsZXQgcmVxdWVzdERhdGEgPSBjb25maWcuZGF0YTtcbiAgICBjb25zdCByZXF1ZXN0SGVhZGVycyA9IEF4aW9zSGVhZGVycy5mcm9tKGNvbmZpZy5oZWFkZXJzKS5ub3JtYWxpemUoKTtcbiAgICBsZXQge3Jlc3BvbnNlVHlwZSwgd2l0aFhTUkZUb2tlbn0gPSBjb25maWc7XG4gICAgbGV0IG9uQ2FuY2VsZWQ7XG4gICAgZnVuY3Rpb24gZG9uZSgpIHtcbiAgICAgIGlmIChjb25maWcuY2FuY2VsVG9rZW4pIHtcbiAgICAgICAgY29uZmlnLmNhbmNlbFRva2VuLnVuc3Vic2NyaWJlKG9uQ2FuY2VsZWQpO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29uZmlnLnNpZ25hbCkge1xuICAgICAgICBjb25maWcuc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25DYW5jZWxlZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGNvbnRlbnRUeXBlO1xuXG4gICAgaWYgKHV0aWxzLmlzRm9ybURhdGEocmVxdWVzdERhdGEpKSB7XG4gICAgICBpZiAocGxhdGZvcm0uaGFzU3RhbmRhcmRCcm93c2VyRW52IHx8IHBsYXRmb3JtLmhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudikge1xuICAgICAgICByZXF1ZXN0SGVhZGVycy5zZXRDb250ZW50VHlwZShmYWxzZSk7IC8vIExldCB0aGUgYnJvd3NlciBzZXQgaXRcbiAgICAgIH0gZWxzZSBpZiAoKGNvbnRlbnRUeXBlID0gcmVxdWVzdEhlYWRlcnMuZ2V0Q29udGVudFR5cGUoKSkgIT09IGZhbHNlKSB7XG4gICAgICAgIC8vIGZpeCBzZW1pY29sb24gZHVwbGljYXRpb24gaXNzdWUgZm9yIFJlYWN0TmF0aXZlIEZvcm1EYXRhIGltcGxlbWVudGF0aW9uXG4gICAgICAgIGNvbnN0IFt0eXBlLCAuLi50b2tlbnNdID0gY29udGVudFR5cGUgPyBjb250ZW50VHlwZS5zcGxpdCgnOycpLm1hcCh0b2tlbiA9PiB0b2tlbi50cmltKCkpLmZpbHRlcihCb29sZWFuKSA6IFtdO1xuICAgICAgICByZXF1ZXN0SGVhZGVycy5zZXRDb250ZW50VHlwZShbdHlwZSB8fCAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScsIC4uLnRva2Vuc10uam9pbignOyAnKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IHJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblxuICAgIC8vIEhUVFAgYmFzaWMgYXV0aGVudGljYXRpb25cbiAgICBpZiAoY29uZmlnLmF1dGgpIHtcbiAgICAgIGNvbnN0IHVzZXJuYW1lID0gY29uZmlnLmF1dGgudXNlcm5hbWUgfHwgJyc7XG4gICAgICBjb25zdCBwYXNzd29yZCA9IGNvbmZpZy5hdXRoLnBhc3N3b3JkID8gdW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KGNvbmZpZy5hdXRoLnBhc3N3b3JkKSkgOiAnJztcbiAgICAgIHJlcXVlc3RIZWFkZXJzLnNldCgnQXV0aG9yaXphdGlvbicsICdCYXNpYyAnICsgYnRvYSh1c2VybmFtZSArICc6JyArIHBhc3N3b3JkKSk7XG4gICAgfVxuXG4gICAgY29uc3QgZnVsbFBhdGggPSBidWlsZEZ1bGxQYXRoKGNvbmZpZy5iYXNlVVJMLCBjb25maWcudXJsKTtcblxuICAgIHJlcXVlc3Qub3Blbihjb25maWcubWV0aG9kLnRvVXBwZXJDYXNlKCksIGJ1aWxkVVJMKGZ1bGxQYXRoLCBjb25maWcucGFyYW1zLCBjb25maWcucGFyYW1zU2VyaWFsaXplciksIHRydWUpO1xuXG4gICAgLy8gU2V0IHRoZSByZXF1ZXN0IHRpbWVvdXQgaW4gTVNcbiAgICByZXF1ZXN0LnRpbWVvdXQgPSBjb25maWcudGltZW91dDtcblxuICAgIGZ1bmN0aW9uIG9ubG9hZGVuZCgpIHtcbiAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAvLyBQcmVwYXJlIHRoZSByZXNwb25zZVxuICAgICAgY29uc3QgcmVzcG9uc2VIZWFkZXJzID0gQXhpb3NIZWFkZXJzLmZyb20oXG4gICAgICAgICdnZXRBbGxSZXNwb25zZUhlYWRlcnMnIGluIHJlcXVlc3QgJiYgcmVxdWVzdC5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKVxuICAgICAgKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlRGF0YSA9ICFyZXNwb25zZVR5cGUgfHwgcmVzcG9uc2VUeXBlID09PSAndGV4dCcgfHwgcmVzcG9uc2VUeXBlID09PSAnanNvbicgP1xuICAgICAgICByZXF1ZXN0LnJlc3BvbnNlVGV4dCA6IHJlcXVlc3QucmVzcG9uc2U7XG4gICAgICBjb25zdCByZXNwb25zZSA9IHtcbiAgICAgICAgZGF0YTogcmVzcG9uc2VEYXRhLFxuICAgICAgICBzdGF0dXM6IHJlcXVlc3Quc3RhdHVzLFxuICAgICAgICBzdGF0dXNUZXh0OiByZXF1ZXN0LnN0YXR1c1RleHQsXG4gICAgICAgIGhlYWRlcnM6IHJlc3BvbnNlSGVhZGVycyxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICByZXF1ZXN0XG4gICAgICB9O1xuXG4gICAgICBzZXR0bGUoZnVuY3Rpb24gX3Jlc29sdmUodmFsdWUpIHtcbiAgICAgICAgcmVzb2x2ZSh2YWx1ZSk7XG4gICAgICAgIGRvbmUoKTtcbiAgICAgIH0sIGZ1bmN0aW9uIF9yZWplY3QoZXJyKSB7XG4gICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICBkb25lKCk7XG4gICAgICB9LCByZXNwb25zZSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH1cblxuICAgIGlmICgnb25sb2FkZW5kJyBpbiByZXF1ZXN0KSB7XG4gICAgICAvLyBVc2Ugb25sb2FkZW5kIGlmIGF2YWlsYWJsZVxuICAgICAgcmVxdWVzdC5vbmxvYWRlbmQgPSBvbmxvYWRlbmQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIExpc3RlbiBmb3IgcmVhZHkgc3RhdGUgdG8gZW11bGF0ZSBvbmxvYWRlbmRcbiAgICAgIHJlcXVlc3Qub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24gaGFuZGxlTG9hZCgpIHtcbiAgICAgICAgaWYgKCFyZXF1ZXN0IHx8IHJlcXVlc3QucmVhZHlTdGF0ZSAhPT0gNCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoZSByZXF1ZXN0IGVycm9yZWQgb3V0IGFuZCB3ZSBkaWRuJ3QgZ2V0IGEgcmVzcG9uc2UsIHRoaXMgd2lsbCBiZVxuICAgICAgICAvLyBoYW5kbGVkIGJ5IG9uZXJyb3IgaW5zdGVhZFxuICAgICAgICAvLyBXaXRoIG9uZSBleGNlcHRpb246IHJlcXVlc3QgdGhhdCB1c2luZyBmaWxlOiBwcm90b2NvbCwgbW9zdCBicm93c2Vyc1xuICAgICAgICAvLyB3aWxsIHJldHVybiBzdGF0dXMgYXMgMCBldmVuIHRob3VnaCBpdCdzIGEgc3VjY2Vzc2Z1bCByZXF1ZXN0XG4gICAgICAgIGlmIChyZXF1ZXN0LnN0YXR1cyA9PT0gMCAmJiAhKHJlcXVlc3QucmVzcG9uc2VVUkwgJiYgcmVxdWVzdC5yZXNwb25zZVVSTC5pbmRleE9mKCdmaWxlOicpID09PSAwKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyByZWFkeXN0YXRlIGhhbmRsZXIgaXMgY2FsbGluZyBiZWZvcmUgb25lcnJvciBvciBvbnRpbWVvdXQgaGFuZGxlcnMsXG4gICAgICAgIC8vIHNvIHdlIHNob3VsZCBjYWxsIG9ubG9hZGVuZCBvbiB0aGUgbmV4dCAndGljaydcbiAgICAgICAgc2V0VGltZW91dChvbmxvYWRlbmQpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgYnJvd3NlciByZXF1ZXN0IGNhbmNlbGxhdGlvbiAoYXMgb3Bwb3NlZCB0byBhIG1hbnVhbCBjYW5jZWxsYXRpb24pXG4gICAgcmVxdWVzdC5vbmFib3J0ID0gZnVuY3Rpb24gaGFuZGxlQWJvcnQoKSB7XG4gICAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoJ1JlcXVlc3QgYWJvcnRlZCcsIEF4aW9zRXJyb3IuRUNPTk5BQk9SVEVELCBjb25maWcsIHJlcXVlc3QpKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIEhhbmRsZSBsb3cgbGV2ZWwgbmV0d29yayBlcnJvcnNcbiAgICByZXF1ZXN0Lm9uZXJyb3IgPSBmdW5jdGlvbiBoYW5kbGVFcnJvcigpIHtcbiAgICAgIC8vIFJlYWwgZXJyb3JzIGFyZSBoaWRkZW4gZnJvbSB1cyBieSB0aGUgYnJvd3NlclxuICAgICAgLy8gb25lcnJvciBzaG91bGQgb25seSBmaXJlIGlmIGl0J3MgYSBuZXR3b3JrIGVycm9yXG4gICAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoJ05ldHdvcmsgRXJyb3InLCBBeGlvc0Vycm9yLkVSUl9ORVRXT1JLLCBjb25maWcsIHJlcXVlc3QpKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIEhhbmRsZSB0aW1lb3V0XG4gICAgcmVxdWVzdC5vbnRpbWVvdXQgPSBmdW5jdGlvbiBoYW5kbGVUaW1lb3V0KCkge1xuICAgICAgbGV0IHRpbWVvdXRFcnJvck1lc3NhZ2UgPSBjb25maWcudGltZW91dCA/ICd0aW1lb3V0IG9mICcgKyBjb25maWcudGltZW91dCArICdtcyBleGNlZWRlZCcgOiAndGltZW91dCBleGNlZWRlZCc7XG4gICAgICBjb25zdCB0cmFuc2l0aW9uYWwgPSBjb25maWcudHJhbnNpdGlvbmFsIHx8IHRyYW5zaXRpb25hbERlZmF1bHRzO1xuICAgICAgaWYgKGNvbmZpZy50aW1lb3V0RXJyb3JNZXNzYWdlKSB7XG4gICAgICAgIHRpbWVvdXRFcnJvck1lc3NhZ2UgPSBjb25maWcudGltZW91dEVycm9yTWVzc2FnZTtcbiAgICAgIH1cbiAgICAgIHJlamVjdChuZXcgQXhpb3NFcnJvcihcbiAgICAgICAgdGltZW91dEVycm9yTWVzc2FnZSxcbiAgICAgICAgdHJhbnNpdGlvbmFsLmNsYXJpZnlUaW1lb3V0RXJyb3IgPyBBeGlvc0Vycm9yLkVUSU1FRE9VVCA6IEF4aW9zRXJyb3IuRUNPTk5BQk9SVEVELFxuICAgICAgICBjb25maWcsXG4gICAgICAgIHJlcXVlc3QpKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIEFkZCB4c3JmIGhlYWRlclxuICAgIC8vIFRoaXMgaXMgb25seSBkb25lIGlmIHJ1bm5pbmcgaW4gYSBzdGFuZGFyZCBicm93c2VyIGVudmlyb25tZW50LlxuICAgIC8vIFNwZWNpZmljYWxseSBub3QgaWYgd2UncmUgaW4gYSB3ZWIgd29ya2VyLCBvciByZWFjdC1uYXRpdmUuXG4gICAgaWYocGxhdGZvcm0uaGFzU3RhbmRhcmRCcm93c2VyRW52KSB7XG4gICAgICB3aXRoWFNSRlRva2VuICYmIHV0aWxzLmlzRnVuY3Rpb24od2l0aFhTUkZUb2tlbikgJiYgKHdpdGhYU1JGVG9rZW4gPSB3aXRoWFNSRlRva2VuKGNvbmZpZykpO1xuXG4gICAgICBpZiAod2l0aFhTUkZUb2tlbiB8fCAod2l0aFhTUkZUb2tlbiAhPT0gZmFsc2UgJiYgaXNVUkxTYW1lT3JpZ2luKGZ1bGxQYXRoKSkpIHtcbiAgICAgICAgLy8gQWRkIHhzcmYgaGVhZGVyXG4gICAgICAgIGNvbnN0IHhzcmZWYWx1ZSA9IGNvbmZpZy54c3JmSGVhZGVyTmFtZSAmJiBjb25maWcueHNyZkNvb2tpZU5hbWUgJiYgY29va2llcy5yZWFkKGNvbmZpZy54c3JmQ29va2llTmFtZSk7XG5cbiAgICAgICAgaWYgKHhzcmZWYWx1ZSkge1xuICAgICAgICAgIHJlcXVlc3RIZWFkZXJzLnNldChjb25maWcueHNyZkhlYWRlck5hbWUsIHhzcmZWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBSZW1vdmUgQ29udGVudC1UeXBlIGlmIGRhdGEgaXMgdW5kZWZpbmVkXG4gICAgcmVxdWVzdERhdGEgPT09IHVuZGVmaW5lZCAmJiByZXF1ZXN0SGVhZGVycy5zZXRDb250ZW50VHlwZShudWxsKTtcblxuICAgIC8vIEFkZCBoZWFkZXJzIHRvIHRoZSByZXF1ZXN0XG4gICAgaWYgKCdzZXRSZXF1ZXN0SGVhZGVyJyBpbiByZXF1ZXN0KSB7XG4gICAgICB1dGlscy5mb3JFYWNoKHJlcXVlc3RIZWFkZXJzLnRvSlNPTigpLCBmdW5jdGlvbiBzZXRSZXF1ZXN0SGVhZGVyKHZhbCwga2V5KSB7XG4gICAgICAgIHJlcXVlc3Quc2V0UmVxdWVzdEhlYWRlcihrZXksIHZhbCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBBZGQgd2l0aENyZWRlbnRpYWxzIHRvIHJlcXVlc3QgaWYgbmVlZGVkXG4gICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChjb25maWcud2l0aENyZWRlbnRpYWxzKSkge1xuICAgICAgcmVxdWVzdC53aXRoQ3JlZGVudGlhbHMgPSAhIWNvbmZpZy53aXRoQ3JlZGVudGlhbHM7XG4gICAgfVxuXG4gICAgLy8gQWRkIHJlc3BvbnNlVHlwZSB0byByZXF1ZXN0IGlmIG5lZWRlZFxuICAgIGlmIChyZXNwb25zZVR5cGUgJiYgcmVzcG9uc2VUeXBlICE9PSAnanNvbicpIHtcbiAgICAgIHJlcXVlc3QucmVzcG9uc2VUeXBlID0gY29uZmlnLnJlc3BvbnNlVHlwZTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgcHJvZ3Jlc3MgaWYgbmVlZGVkXG4gICAgaWYgKHR5cGVvZiBjb25maWcub25Eb3dubG9hZFByb2dyZXNzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXF1ZXN0LmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgcHJvZ3Jlc3NFdmVudFJlZHVjZXIoY29uZmlnLm9uRG93bmxvYWRQcm9ncmVzcywgdHJ1ZSkpO1xuICAgIH1cblxuICAgIC8vIE5vdCBhbGwgYnJvd3NlcnMgc3VwcG9ydCB1cGxvYWQgZXZlbnRzXG4gICAgaWYgKHR5cGVvZiBjb25maWcub25VcGxvYWRQcm9ncmVzcyA9PT0gJ2Z1bmN0aW9uJyAmJiByZXF1ZXN0LnVwbG9hZCkge1xuICAgICAgcmVxdWVzdC51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCBwcm9ncmVzc0V2ZW50UmVkdWNlcihjb25maWcub25VcGxvYWRQcm9ncmVzcykpO1xuICAgIH1cblxuICAgIGlmIChjb25maWcuY2FuY2VsVG9rZW4gfHwgY29uZmlnLnNpZ25hbCkge1xuICAgICAgLy8gSGFuZGxlIGNhbmNlbGxhdGlvblxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgICAgIG9uQ2FuY2VsZWQgPSBjYW5jZWwgPT4ge1xuICAgICAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KCFjYW5jZWwgfHwgY2FuY2VsLnR5cGUgPyBuZXcgQ2FuY2VsZWRFcnJvcihudWxsLCBjb25maWcsIHJlcXVlc3QpIDogY2FuY2VsKTtcbiAgICAgICAgcmVxdWVzdC5hYm9ydCgpO1xuICAgICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICAgIH07XG5cbiAgICAgIGNvbmZpZy5jYW5jZWxUb2tlbiAmJiBjb25maWcuY2FuY2VsVG9rZW4uc3Vic2NyaWJlKG9uQ2FuY2VsZWQpO1xuICAgICAgaWYgKGNvbmZpZy5zaWduYWwpIHtcbiAgICAgICAgY29uZmlnLnNpZ25hbC5hYm9ydGVkID8gb25DYW5jZWxlZCgpIDogY29uZmlnLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIG9uQ2FuY2VsZWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHByb3RvY29sID0gcGFyc2VQcm90b2NvbChmdWxsUGF0aCk7XG5cbiAgICBpZiAocHJvdG9jb2wgJiYgcGxhdGZvcm0ucHJvdG9jb2xzLmluZGV4T2YocHJvdG9jb2wpID09PSAtMSkge1xuICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKCdVbnN1cHBvcnRlZCBwcm90b2NvbCAnICsgcHJvdG9jb2wgKyAnOicsIEF4aW9zRXJyb3IuRVJSX0JBRF9SRVFVRVNULCBjb25maWcpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cblxuICAgIC8vIFNlbmQgdGhlIHJlcXVlc3RcbiAgICByZXF1ZXN0LnNlbmQocmVxdWVzdERhdGEgfHwgbnVsbCk7XG4gIH0pO1xufVxuIiwiaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcbmltcG9ydCBodHRwQWRhcHRlciBmcm9tICcuL2h0dHAuanMnO1xuaW1wb3J0IHhockFkYXB0ZXIgZnJvbSAnLi94aHIuanMnO1xuaW1wb3J0IEF4aW9zRXJyb3IgZnJvbSBcIi4uL2NvcmUvQXhpb3NFcnJvci5qc1wiO1xuXG5jb25zdCBrbm93bkFkYXB0ZXJzID0ge1xuICBodHRwOiBodHRwQWRhcHRlcixcbiAgeGhyOiB4aHJBZGFwdGVyXG59XG5cbnV0aWxzLmZvckVhY2goa25vd25BZGFwdGVycywgKGZuLCB2YWx1ZSkgPT4ge1xuICBpZiAoZm4pIHtcbiAgICB0cnkge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGZuLCAnbmFtZScsIHt2YWx1ZX0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lbXB0eVxuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZm4sICdhZGFwdGVyTmFtZScsIHt2YWx1ZX0pO1xuICB9XG59KTtcblxuY29uc3QgcmVuZGVyUmVhc29uID0gKHJlYXNvbikgPT4gYC0gJHtyZWFzb259YDtcblxuY29uc3QgaXNSZXNvbHZlZEhhbmRsZSA9IChhZGFwdGVyKSA9PiB1dGlscy5pc0Z1bmN0aW9uKGFkYXB0ZXIpIHx8IGFkYXB0ZXIgPT09IG51bGwgfHwgYWRhcHRlciA9PT0gZmFsc2U7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZ2V0QWRhcHRlcjogKGFkYXB0ZXJzKSA9PiB7XG4gICAgYWRhcHRlcnMgPSB1dGlscy5pc0FycmF5KGFkYXB0ZXJzKSA/IGFkYXB0ZXJzIDogW2FkYXB0ZXJzXTtcblxuICAgIGNvbnN0IHtsZW5ndGh9ID0gYWRhcHRlcnM7XG4gICAgbGV0IG5hbWVPckFkYXB0ZXI7XG4gICAgbGV0IGFkYXB0ZXI7XG5cbiAgICBjb25zdCByZWplY3RlZFJlYXNvbnMgPSB7fTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIG5hbWVPckFkYXB0ZXIgPSBhZGFwdGVyc1tpXTtcbiAgICAgIGxldCBpZDtcblxuICAgICAgYWRhcHRlciA9IG5hbWVPckFkYXB0ZXI7XG5cbiAgICAgIGlmICghaXNSZXNvbHZlZEhhbmRsZShuYW1lT3JBZGFwdGVyKSkge1xuICAgICAgICBhZGFwdGVyID0ga25vd25BZGFwdGVyc1soaWQgPSBTdHJpbmcobmFtZU9yQWRhcHRlcikpLnRvTG93ZXJDYXNlKCldO1xuXG4gICAgICAgIGlmIChhZGFwdGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcihgVW5rbm93biBhZGFwdGVyICcke2lkfSdgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoYWRhcHRlcikge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgcmVqZWN0ZWRSZWFzb25zW2lkIHx8ICcjJyArIGldID0gYWRhcHRlcjtcbiAgICB9XG5cbiAgICBpZiAoIWFkYXB0ZXIpIHtcblxuICAgICAgY29uc3QgcmVhc29ucyA9IE9iamVjdC5lbnRyaWVzKHJlamVjdGVkUmVhc29ucylcbiAgICAgICAgLm1hcCgoW2lkLCBzdGF0ZV0pID0+IGBhZGFwdGVyICR7aWR9IGAgK1xuICAgICAgICAgIChzdGF0ZSA9PT0gZmFsc2UgPyAnaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgZW52aXJvbm1lbnQnIDogJ2lzIG5vdCBhdmFpbGFibGUgaW4gdGhlIGJ1aWxkJylcbiAgICAgICAgKTtcblxuICAgICAgbGV0IHMgPSBsZW5ndGggP1xuICAgICAgICAocmVhc29ucy5sZW5ndGggPiAxID8gJ3NpbmNlIDpcXG4nICsgcmVhc29ucy5tYXAocmVuZGVyUmVhc29uKS5qb2luKCdcXG4nKSA6ICcgJyArIHJlbmRlclJlYXNvbihyZWFzb25zWzBdKSkgOlxuICAgICAgICAnYXMgbm8gYWRhcHRlciBzcGVjaWZpZWQnO1xuXG4gICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcihcbiAgICAgICAgYFRoZXJlIGlzIG5vIHN1aXRhYmxlIGFkYXB0ZXIgdG8gZGlzcGF0Y2ggdGhlIHJlcXVlc3QgYCArIHMsXG4gICAgICAgICdFUlJfTk9UX1NVUFBPUlQnXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBhZGFwdGVyO1xuICB9LFxuICBhZGFwdGVyczoga25vd25BZGFwdGVyc1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdHJhbnNmb3JtRGF0YSBmcm9tICcuL3RyYW5zZm9ybURhdGEuanMnO1xuaW1wb3J0IGlzQ2FuY2VsIGZyb20gJy4uL2NhbmNlbC9pc0NhbmNlbC5qcyc7XG5pbXBvcnQgZGVmYXVsdHMgZnJvbSAnLi4vZGVmYXVsdHMvaW5kZXguanMnO1xuaW1wb3J0IENhbmNlbGVkRXJyb3IgZnJvbSAnLi4vY2FuY2VsL0NhbmNlbGVkRXJyb3IuanMnO1xuaW1wb3J0IEF4aW9zSGVhZGVycyBmcm9tICcuLi9jb3JlL0F4aW9zSGVhZGVycy5qcyc7XG5pbXBvcnQgYWRhcHRlcnMgZnJvbSBcIi4uL2FkYXB0ZXJzL2FkYXB0ZXJzLmpzXCI7XG5cbi8qKlxuICogVGhyb3dzIGEgYENhbmNlbGVkRXJyb3JgIGlmIGNhbmNlbGxhdGlvbiBoYXMgYmVlbiByZXF1ZXN0ZWQuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyBUaGUgY29uZmlnIHRoYXQgaXMgdG8gYmUgdXNlZCBmb3IgdGhlIHJlcXVlc3RcbiAqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpIHtcbiAgaWYgKGNvbmZpZy5jYW5jZWxUb2tlbikge1xuICAgIGNvbmZpZy5jYW5jZWxUb2tlbi50aHJvd0lmUmVxdWVzdGVkKCk7XG4gIH1cblxuICBpZiAoY29uZmlnLnNpZ25hbCAmJiBjb25maWcuc2lnbmFsLmFib3J0ZWQpIHtcbiAgICB0aHJvdyBuZXcgQ2FuY2VsZWRFcnJvcihudWxsLCBjb25maWcpO1xuICB9XG59XG5cbi8qKlxuICogRGlzcGF0Y2ggYSByZXF1ZXN0IHRvIHRoZSBzZXJ2ZXIgdXNpbmcgdGhlIGNvbmZpZ3VyZWQgYWRhcHRlci5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gY29uZmlnIFRoZSBjb25maWcgdGhhdCBpcyB0byBiZSB1c2VkIGZvciB0aGUgcmVxdWVzdFxuICpcbiAqIEByZXR1cm5zIHtQcm9taXNlfSBUaGUgUHJvbWlzZSB0byBiZSBmdWxmaWxsZWRcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZGlzcGF0Y2hSZXF1ZXN0KGNvbmZpZykge1xuICB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZyk7XG5cbiAgY29uZmlnLmhlYWRlcnMgPSBBeGlvc0hlYWRlcnMuZnJvbShjb25maWcuaGVhZGVycyk7XG5cbiAgLy8gVHJhbnNmb3JtIHJlcXVlc3QgZGF0YVxuICBjb25maWcuZGF0YSA9IHRyYW5zZm9ybURhdGEuY2FsbChcbiAgICBjb25maWcsXG4gICAgY29uZmlnLnRyYW5zZm9ybVJlcXVlc3RcbiAgKTtcblxuICBpZiAoWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLmluZGV4T2YoY29uZmlnLm1ldGhvZCkgIT09IC0xKSB7XG4gICAgY29uZmlnLmhlYWRlcnMuc2V0Q29udGVudFR5cGUoJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsIGZhbHNlKTtcbiAgfVxuXG4gIGNvbnN0IGFkYXB0ZXIgPSBhZGFwdGVycy5nZXRBZGFwdGVyKGNvbmZpZy5hZGFwdGVyIHx8IGRlZmF1bHRzLmFkYXB0ZXIpO1xuXG4gIHJldHVybiBhZGFwdGVyKGNvbmZpZykudGhlbihmdW5jdGlvbiBvbkFkYXB0ZXJSZXNvbHV0aW9uKHJlc3BvbnNlKSB7XG4gICAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gICAgLy8gVHJhbnNmb3JtIHJlc3BvbnNlIGRhdGFcbiAgICByZXNwb25zZS5kYXRhID0gdHJhbnNmb3JtRGF0YS5jYWxsKFxuICAgICAgY29uZmlnLFxuICAgICAgY29uZmlnLnRyYW5zZm9ybVJlc3BvbnNlLFxuICAgICAgcmVzcG9uc2VcbiAgICApO1xuXG4gICAgcmVzcG9uc2UuaGVhZGVycyA9IEF4aW9zSGVhZGVycy5mcm9tKHJlc3BvbnNlLmhlYWRlcnMpO1xuXG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICB9LCBmdW5jdGlvbiBvbkFkYXB0ZXJSZWplY3Rpb24ocmVhc29uKSB7XG4gICAgaWYgKCFpc0NhbmNlbChyZWFzb24pKSB7XG4gICAgICB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZyk7XG5cbiAgICAgIC8vIFRyYW5zZm9ybSByZXNwb25zZSBkYXRhXG4gICAgICBpZiAocmVhc29uICYmIHJlYXNvbi5yZXNwb25zZSkge1xuICAgICAgICByZWFzb24ucmVzcG9uc2UuZGF0YSA9IHRyYW5zZm9ybURhdGEuY2FsbChcbiAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgY29uZmlnLnRyYW5zZm9ybVJlc3BvbnNlLFxuICAgICAgICAgIHJlYXNvbi5yZXNwb25zZVxuICAgICAgICApO1xuICAgICAgICByZWFzb24ucmVzcG9uc2UuaGVhZGVycyA9IEF4aW9zSGVhZGVycy5mcm9tKHJlYXNvbi5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QocmVhc29uKTtcbiAgfSk7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5pbXBvcnQgQXhpb3NIZWFkZXJzIGZyb20gXCIuL0F4aW9zSGVhZGVycy5qc1wiO1xuXG5jb25zdCBoZWFkZXJzVG9PYmplY3QgPSAodGhpbmcpID0+IHRoaW5nIGluc3RhbmNlb2YgQXhpb3NIZWFkZXJzID8gdGhpbmcudG9KU09OKCkgOiB0aGluZztcblxuLyoqXG4gKiBDb25maWctc3BlY2lmaWMgbWVyZ2UtZnVuY3Rpb24gd2hpY2ggY3JlYXRlcyBhIG5ldyBjb25maWctb2JqZWN0XG4gKiBieSBtZXJnaW5nIHR3byBjb25maWd1cmF0aW9uIG9iamVjdHMgdG9nZXRoZXIuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZzFcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcyXG4gKlxuICogQHJldHVybnMge09iamVjdH0gTmV3IG9iamVjdCByZXN1bHRpbmcgZnJvbSBtZXJnaW5nIGNvbmZpZzIgdG8gY29uZmlnMVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtZXJnZUNvbmZpZyhjb25maWcxLCBjb25maWcyKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICBjb25maWcyID0gY29uZmlnMiB8fCB7fTtcbiAgY29uc3QgY29uZmlnID0ge307XG5cbiAgZnVuY3Rpb24gZ2V0TWVyZ2VkVmFsdWUodGFyZ2V0LCBzb3VyY2UsIGNhc2VsZXNzKSB7XG4gICAgaWYgKHV0aWxzLmlzUGxhaW5PYmplY3QodGFyZ2V0KSAmJiB1dGlscy5pc1BsYWluT2JqZWN0KHNvdXJjZSkpIHtcbiAgICAgIHJldHVybiB1dGlscy5tZXJnZS5jYWxsKHtjYXNlbGVzc30sIHRhcmdldCwgc291cmNlKTtcbiAgICB9IGVsc2UgaWYgKHV0aWxzLmlzUGxhaW5PYmplY3Qoc291cmNlKSkge1xuICAgICAgcmV0dXJuIHV0aWxzLm1lcmdlKHt9LCBzb3VyY2UpO1xuICAgIH0gZWxzZSBpZiAodXRpbHMuaXNBcnJheShzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gc291cmNlLnNsaWNlKCk7XG4gICAgfVxuICAgIHJldHVybiBzb3VyY2U7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgZnVuY3Rpb24gbWVyZ2VEZWVwUHJvcGVydGllcyhhLCBiLCBjYXNlbGVzcykge1xuICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQoYikpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZShhLCBiLCBjYXNlbGVzcyk7XG4gICAgfSBlbHNlIGlmICghdXRpbHMuaXNVbmRlZmluZWQoYSkpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGEsIGNhc2VsZXNzKTtcbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgZnVuY3Rpb24gdmFsdWVGcm9tQ29uZmlnMihhLCBiKSB7XG4gICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChiKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgYik7XG4gICAgfVxuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gIGZ1bmN0aW9uIGRlZmF1bHRUb0NvbmZpZzIoYSwgYikge1xuICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQoYikpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGIpO1xuICAgIH0gZWxzZSBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGEpKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBhKTtcbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgZnVuY3Rpb24gbWVyZ2VEaXJlY3RLZXlzKGEsIGIsIHByb3ApIHtcbiAgICBpZiAocHJvcCBpbiBjb25maWcyKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUoYSwgYik7XG4gICAgfSBlbHNlIGlmIChwcm9wIGluIGNvbmZpZzEpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGEpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IG1lcmdlTWFwID0ge1xuICAgIHVybDogdmFsdWVGcm9tQ29uZmlnMixcbiAgICBtZXRob2Q6IHZhbHVlRnJvbUNvbmZpZzIsXG4gICAgZGF0YTogdmFsdWVGcm9tQ29uZmlnMixcbiAgICBiYXNlVVJMOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHRyYW5zZm9ybVJlcXVlc3Q6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdHJhbnNmb3JtUmVzcG9uc2U6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgcGFyYW1zU2VyaWFsaXplcjogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB0aW1lb3V0OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHRpbWVvdXRNZXNzYWdlOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHdpdGhDcmVkZW50aWFsczogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB3aXRoWFNSRlRva2VuOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGFkYXB0ZXI6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgcmVzcG9uc2VUeXBlOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHhzcmZDb29raWVOYW1lOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHhzcmZIZWFkZXJOYW1lOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIG9uVXBsb2FkUHJvZ3Jlc3M6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgb25Eb3dubG9hZFByb2dyZXNzOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGRlY29tcHJlc3M6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgbWF4Q29udGVudExlbmd0aDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBtYXhCb2R5TGVuZ3RoOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGJlZm9yZVJlZGlyZWN0OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHRyYW5zcG9ydDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBodHRwQWdlbnQ6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgaHR0cHNBZ2VudDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBjYW5jZWxUb2tlbjogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBzb2NrZXRQYXRoOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHJlc3BvbnNlRW5jb2Rpbmc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdmFsaWRhdGVTdGF0dXM6IG1lcmdlRGlyZWN0S2V5cyxcbiAgICBoZWFkZXJzOiAoYSwgYikgPT4gbWVyZ2VEZWVwUHJvcGVydGllcyhoZWFkZXJzVG9PYmplY3QoYSksIGhlYWRlcnNUb09iamVjdChiKSwgdHJ1ZSlcbiAgfTtcblxuICB1dGlscy5mb3JFYWNoKE9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30sIGNvbmZpZzEsIGNvbmZpZzIpKSwgZnVuY3Rpb24gY29tcHV0ZUNvbmZpZ1ZhbHVlKHByb3ApIHtcbiAgICBjb25zdCBtZXJnZSA9IG1lcmdlTWFwW3Byb3BdIHx8IG1lcmdlRGVlcFByb3BlcnRpZXM7XG4gICAgY29uc3QgY29uZmlnVmFsdWUgPSBtZXJnZShjb25maWcxW3Byb3BdLCBjb25maWcyW3Byb3BdLCBwcm9wKTtcbiAgICAodXRpbHMuaXNVbmRlZmluZWQoY29uZmlnVmFsdWUpICYmIG1lcmdlICE9PSBtZXJnZURpcmVjdEtleXMpIHx8IChjb25maWdbcHJvcF0gPSBjb25maWdWYWx1ZSk7XG4gIH0pO1xuXG4gIHJldHVybiBjb25maWc7XG59XG4iLCJleHBvcnQgY29uc3QgVkVSU0lPTiA9IFwiMS42LjdcIjsiLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB7VkVSU0lPTn0gZnJvbSAnLi4vZW52L2RhdGEuanMnO1xuaW1wb3J0IEF4aW9zRXJyb3IgZnJvbSAnLi4vY29yZS9BeGlvc0Vycm9yLmpzJztcblxuY29uc3QgdmFsaWRhdG9ycyA9IHt9O1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuWydvYmplY3QnLCAnYm9vbGVhbicsICdudW1iZXInLCAnZnVuY3Rpb24nLCAnc3RyaW5nJywgJ3N5bWJvbCddLmZvckVhY2goKHR5cGUsIGkpID0+IHtcbiAgdmFsaWRhdG9yc1t0eXBlXSA9IGZ1bmN0aW9uIHZhbGlkYXRvcih0aGluZykge1xuICAgIHJldHVybiB0eXBlb2YgdGhpbmcgPT09IHR5cGUgfHwgJ2EnICsgKGkgPCAxID8gJ24gJyA6ICcgJykgKyB0eXBlO1xuICB9O1xufSk7XG5cbmNvbnN0IGRlcHJlY2F0ZWRXYXJuaW5ncyA9IHt9O1xuXG4vKipcbiAqIFRyYW5zaXRpb25hbCBvcHRpb24gdmFsaWRhdG9yXG4gKlxuICogQHBhcmFtIHtmdW5jdGlvbnxib29sZWFuP30gdmFsaWRhdG9yIC0gc2V0IHRvIGZhbHNlIGlmIHRoZSB0cmFuc2l0aW9uYWwgb3B0aW9uIGhhcyBiZWVuIHJlbW92ZWRcbiAqIEBwYXJhbSB7c3RyaW5nP30gdmVyc2lvbiAtIGRlcHJlY2F0ZWQgdmVyc2lvbiAvIHJlbW92ZWQgc2luY2UgdmVyc2lvblxuICogQHBhcmFtIHtzdHJpbmc/fSBtZXNzYWdlIC0gc29tZSBtZXNzYWdlIHdpdGggYWRkaXRpb25hbCBpbmZvXG4gKlxuICogQHJldHVybnMge2Z1bmN0aW9ufVxuICovXG52YWxpZGF0b3JzLnRyYW5zaXRpb25hbCA9IGZ1bmN0aW9uIHRyYW5zaXRpb25hbCh2YWxpZGF0b3IsIHZlcnNpb24sIG1lc3NhZ2UpIHtcbiAgZnVuY3Rpb24gZm9ybWF0TWVzc2FnZShvcHQsIGRlc2MpIHtcbiAgICByZXR1cm4gJ1tBeGlvcyB2JyArIFZFUlNJT04gKyAnXSBUcmFuc2l0aW9uYWwgb3B0aW9uIFxcJycgKyBvcHQgKyAnXFwnJyArIGRlc2MgKyAobWVzc2FnZSA/ICcuICcgKyBtZXNzYWdlIDogJycpO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgcmV0dXJuICh2YWx1ZSwgb3B0LCBvcHRzKSA9PiB7XG4gICAgaWYgKHZhbGlkYXRvciA9PT0gZmFsc2UpIHtcbiAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICBmb3JtYXRNZXNzYWdlKG9wdCwgJyBoYXMgYmVlbiByZW1vdmVkJyArICh2ZXJzaW9uID8gJyBpbiAnICsgdmVyc2lvbiA6ICcnKSksXG4gICAgICAgIEF4aW9zRXJyb3IuRVJSX0RFUFJFQ0FURURcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHZlcnNpb24gJiYgIWRlcHJlY2F0ZWRXYXJuaW5nc1tvcHRdKSB7XG4gICAgICBkZXByZWNhdGVkV2FybmluZ3Nbb3B0XSA9IHRydWU7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBmb3JtYXRNZXNzYWdlKFxuICAgICAgICAgIG9wdCxcbiAgICAgICAgICAnIGhhcyBiZWVuIGRlcHJlY2F0ZWQgc2luY2UgdicgKyB2ZXJzaW9uICsgJyBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZWFyIGZ1dHVyZSdcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsaWRhdG9yID8gdmFsaWRhdG9yKHZhbHVlLCBvcHQsIG9wdHMpIDogdHJ1ZTtcbiAgfTtcbn07XG5cbi8qKlxuICogQXNzZXJ0IG9iamVjdCdzIHByb3BlcnRpZXMgdHlwZVxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gKiBAcGFyYW0ge29iamVjdH0gc2NoZW1hXG4gKiBAcGFyYW0ge2Jvb2xlYW4/fSBhbGxvd1Vua25vd25cbiAqXG4gKiBAcmV0dXJucyB7b2JqZWN0fVxuICovXG5cbmZ1bmN0aW9uIGFzc2VydE9wdGlvbnMob3B0aW9ucywgc2NoZW1hLCBhbGxvd1Vua25vd24pIHtcbiAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKCdvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0JywgQXhpb3NFcnJvci5FUlJfQkFEX09QVElPTl9WQUxVRSk7XG4gIH1cbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9wdGlvbnMpO1xuICBsZXQgaSA9IGtleXMubGVuZ3RoO1xuICB3aGlsZSAoaS0tID4gMCkge1xuICAgIGNvbnN0IG9wdCA9IGtleXNbaV07XG4gICAgY29uc3QgdmFsaWRhdG9yID0gc2NoZW1hW29wdF07XG4gICAgaWYgKHZhbGlkYXRvcikge1xuICAgICAgY29uc3QgdmFsdWUgPSBvcHRpb25zW29wdF07XG4gICAgICBjb25zdCByZXN1bHQgPSB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbGlkYXRvcih2YWx1ZSwgb3B0LCBvcHRpb25zKTtcbiAgICAgIGlmIChyZXN1bHQgIT09IHRydWUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoJ29wdGlvbiAnICsgb3B0ICsgJyBtdXN0IGJlICcgKyByZXN1bHQsIEF4aW9zRXJyb3IuRVJSX0JBRF9PUFRJT05fVkFMVUUpO1xuICAgICAgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChhbGxvd1Vua25vd24gIT09IHRydWUpIHtcbiAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKCdVbmtub3duIG9wdGlvbiAnICsgb3B0LCBBeGlvc0Vycm9yLkVSUl9CQURfT1BUSU9OKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBhc3NlcnRPcHRpb25zLFxuICB2YWxpZGF0b3JzXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi8uLi91dGlscy5qcyc7XG5pbXBvcnQgYnVpbGRVUkwgZnJvbSAnLi4vaGVscGVycy9idWlsZFVSTC5qcyc7XG5pbXBvcnQgSW50ZXJjZXB0b3JNYW5hZ2VyIGZyb20gJy4vSW50ZXJjZXB0b3JNYW5hZ2VyLmpzJztcbmltcG9ydCBkaXNwYXRjaFJlcXVlc3QgZnJvbSAnLi9kaXNwYXRjaFJlcXVlc3QuanMnO1xuaW1wb3J0IG1lcmdlQ29uZmlnIGZyb20gJy4vbWVyZ2VDb25maWcuanMnO1xuaW1wb3J0IGJ1aWxkRnVsbFBhdGggZnJvbSAnLi9idWlsZEZ1bGxQYXRoLmpzJztcbmltcG9ydCB2YWxpZGF0b3IgZnJvbSAnLi4vaGVscGVycy92YWxpZGF0b3IuanMnO1xuaW1wb3J0IEF4aW9zSGVhZGVycyBmcm9tICcuL0F4aW9zSGVhZGVycy5qcyc7XG5cbmNvbnN0IHZhbGlkYXRvcnMgPSB2YWxpZGF0b3IudmFsaWRhdG9ycztcblxuLyoqXG4gKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgQXhpb3NcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VDb25maWcgVGhlIGRlZmF1bHQgY29uZmlnIGZvciB0aGUgaW5zdGFuY2VcbiAqXG4gKiBAcmV0dXJuIHtBeGlvc30gQSBuZXcgaW5zdGFuY2Ugb2YgQXhpb3NcbiAqL1xuY2xhc3MgQXhpb3Mge1xuICBjb25zdHJ1Y3RvcihpbnN0YW5jZUNvbmZpZykge1xuICAgIHRoaXMuZGVmYXVsdHMgPSBpbnN0YW5jZUNvbmZpZztcbiAgICB0aGlzLmludGVyY2VwdG9ycyA9IHtcbiAgICAgIHJlcXVlc3Q6IG5ldyBJbnRlcmNlcHRvck1hbmFnZXIoKSxcbiAgICAgIHJlc3BvbnNlOiBuZXcgSW50ZXJjZXB0b3JNYW5hZ2VyKClcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERpc3BhdGNoIGEgcmVxdWVzdFxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ3xPYmplY3R9IGNvbmZpZ09yVXJsIFRoZSBjb25maWcgc3BlY2lmaWMgZm9yIHRoaXMgcmVxdWVzdCAobWVyZ2VkIHdpdGggdGhpcy5kZWZhdWx0cylcbiAgICogQHBhcmFtIHs/T2JqZWN0fSBjb25maWdcbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2V9IFRoZSBQcm9taXNlIHRvIGJlIGZ1bGZpbGxlZFxuICAgKi9cbiAgYXN5bmMgcmVxdWVzdChjb25maWdPclVybCwgY29uZmlnKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLl9yZXF1ZXN0KGNvbmZpZ09yVXJsLCBjb25maWcpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgIGxldCBkdW1teTtcblxuICAgICAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSA/IEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKGR1bW15ID0ge30pIDogKGR1bW15ID0gbmV3IEVycm9yKCkpO1xuXG4gICAgICAgIC8vIHNsaWNlIG9mZiB0aGUgRXJyb3I6IC4uLiBsaW5lXG4gICAgICAgIGNvbnN0IHN0YWNrID0gZHVtbXkuc3RhY2sgPyBkdW1teS5zdGFjay5yZXBsYWNlKC9eLitcXG4vLCAnJykgOiAnJztcblxuICAgICAgICBpZiAoIWVyci5zdGFjaykge1xuICAgICAgICAgIGVyci5zdGFjayA9IHN0YWNrO1xuICAgICAgICAgIC8vIG1hdGNoIHdpdGhvdXQgdGhlIDIgdG9wIHN0YWNrIGxpbmVzXG4gICAgICAgIH0gZWxzZSBpZiAoc3RhY2sgJiYgIVN0cmluZyhlcnIuc3RhY2spLmVuZHNXaXRoKHN0YWNrLnJlcGxhY2UoL14uK1xcbi4rXFxuLywgJycpKSkge1xuICAgICAgICAgIGVyci5zdGFjayArPSAnXFxuJyArIHN0YWNrXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgfVxuXG4gIF9yZXF1ZXN0KGNvbmZpZ09yVXJsLCBjb25maWcpIHtcbiAgICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgICAvLyBBbGxvdyBmb3IgYXhpb3MoJ2V4YW1wbGUvdXJsJ1ssIGNvbmZpZ10pIGEgbGEgZmV0Y2ggQVBJXG4gICAgaWYgKHR5cGVvZiBjb25maWdPclVybCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbmZpZyA9IGNvbmZpZyB8fCB7fTtcbiAgICAgIGNvbmZpZy51cmwgPSBjb25maWdPclVybDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uZmlnID0gY29uZmlnT3JVcmwgfHwge307XG4gICAgfVxuXG4gICAgY29uZmlnID0gbWVyZ2VDb25maWcodGhpcy5kZWZhdWx0cywgY29uZmlnKTtcblxuICAgIGNvbnN0IHt0cmFuc2l0aW9uYWwsIHBhcmFtc1NlcmlhbGl6ZXIsIGhlYWRlcnN9ID0gY29uZmlnO1xuXG4gICAgaWYgKHRyYW5zaXRpb25hbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YWxpZGF0b3IuYXNzZXJ0T3B0aW9ucyh0cmFuc2l0aW9uYWwsIHtcbiAgICAgICAgc2lsZW50SlNPTlBhcnNpbmc6IHZhbGlkYXRvcnMudHJhbnNpdGlvbmFsKHZhbGlkYXRvcnMuYm9vbGVhbiksXG4gICAgICAgIGZvcmNlZEpTT05QYXJzaW5nOiB2YWxpZGF0b3JzLnRyYW5zaXRpb25hbCh2YWxpZGF0b3JzLmJvb2xlYW4pLFxuICAgICAgICBjbGFyaWZ5VGltZW91dEVycm9yOiB2YWxpZGF0b3JzLnRyYW5zaXRpb25hbCh2YWxpZGF0b3JzLmJvb2xlYW4pXG4gICAgICB9LCBmYWxzZSk7XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtc1NlcmlhbGl6ZXIgIT0gbnVsbCkge1xuICAgICAgaWYgKHV0aWxzLmlzRnVuY3Rpb24ocGFyYW1zU2VyaWFsaXplcikpIHtcbiAgICAgICAgY29uZmlnLnBhcmFtc1NlcmlhbGl6ZXIgPSB7XG4gICAgICAgICAgc2VyaWFsaXplOiBwYXJhbXNTZXJpYWxpemVyXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbGlkYXRvci5hc3NlcnRPcHRpb25zKHBhcmFtc1NlcmlhbGl6ZXIsIHtcbiAgICAgICAgICBlbmNvZGU6IHZhbGlkYXRvcnMuZnVuY3Rpb24sXG4gICAgICAgICAgc2VyaWFsaXplOiB2YWxpZGF0b3JzLmZ1bmN0aW9uXG4gICAgICAgIH0sIHRydWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNldCBjb25maWcubWV0aG9kXG4gICAgY29uZmlnLm1ldGhvZCA9IChjb25maWcubWV0aG9kIHx8IHRoaXMuZGVmYXVsdHMubWV0aG9kIHx8ICdnZXQnKS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgLy8gRmxhdHRlbiBoZWFkZXJzXG4gICAgbGV0IGNvbnRleHRIZWFkZXJzID0gaGVhZGVycyAmJiB1dGlscy5tZXJnZShcbiAgICAgIGhlYWRlcnMuY29tbW9uLFxuICAgICAgaGVhZGVyc1tjb25maWcubWV0aG9kXVxuICAgICk7XG5cbiAgICBoZWFkZXJzICYmIHV0aWxzLmZvckVhY2goXG4gICAgICBbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCcsICdwb3N0JywgJ3B1dCcsICdwYXRjaCcsICdjb21tb24nXSxcbiAgICAgIChtZXRob2QpID0+IHtcbiAgICAgICAgZGVsZXRlIGhlYWRlcnNbbWV0aG9kXTtcbiAgICAgIH1cbiAgICApO1xuXG4gICAgY29uZmlnLmhlYWRlcnMgPSBBeGlvc0hlYWRlcnMuY29uY2F0KGNvbnRleHRIZWFkZXJzLCBoZWFkZXJzKTtcblxuICAgIC8vIGZpbHRlciBvdXQgc2tpcHBlZCBpbnRlcmNlcHRvcnNcbiAgICBjb25zdCByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbiA9IFtdO1xuICAgIGxldCBzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMgPSB0cnVlO1xuICAgIHRoaXMuaW50ZXJjZXB0b3JzLnJlcXVlc3QuZm9yRWFjaChmdW5jdGlvbiB1bnNoaWZ0UmVxdWVzdEludGVyY2VwdG9ycyhpbnRlcmNlcHRvcikge1xuICAgICAgaWYgKHR5cGVvZiBpbnRlcmNlcHRvci5ydW5XaGVuID09PSAnZnVuY3Rpb24nICYmIGludGVyY2VwdG9yLnJ1bldoZW4oY29uZmlnKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMgPSBzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMgJiYgaW50ZXJjZXB0b3Iuc3luY2hyb25vdXM7XG5cbiAgICAgIHJlcXVlc3RJbnRlcmNlcHRvckNoYWluLnVuc2hpZnQoaW50ZXJjZXB0b3IuZnVsZmlsbGVkLCBpbnRlcmNlcHRvci5yZWplY3RlZCk7XG4gICAgfSk7XG5cbiAgICBjb25zdCByZXNwb25zZUludGVyY2VwdG9yQ2hhaW4gPSBbXTtcbiAgICB0aGlzLmludGVyY2VwdG9ycy5yZXNwb25zZS5mb3JFYWNoKGZ1bmN0aW9uIHB1c2hSZXNwb25zZUludGVyY2VwdG9ycyhpbnRlcmNlcHRvcikge1xuICAgICAgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluLnB1c2goaW50ZXJjZXB0b3IuZnVsZmlsbGVkLCBpbnRlcmNlcHRvci5yZWplY3RlZCk7XG4gICAgfSk7XG5cbiAgICBsZXQgcHJvbWlzZTtcbiAgICBsZXQgaSA9IDA7XG4gICAgbGV0IGxlbjtcblxuICAgIGlmICghc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzKSB7XG4gICAgICBjb25zdCBjaGFpbiA9IFtkaXNwYXRjaFJlcXVlc3QuYmluZCh0aGlzKSwgdW5kZWZpbmVkXTtcbiAgICAgIGNoYWluLnVuc2hpZnQuYXBwbHkoY2hhaW4sIHJlcXVlc3RJbnRlcmNlcHRvckNoYWluKTtcbiAgICAgIGNoYWluLnB1c2guYXBwbHkoY2hhaW4sIHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbik7XG4gICAgICBsZW4gPSBjaGFpbi5sZW5ndGg7XG5cbiAgICAgIHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoY29uZmlnKTtcblxuICAgICAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICAgICAgcHJvbWlzZSA9IHByb21pc2UudGhlbihjaGFpbltpKytdLCBjaGFpbltpKytdKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfVxuXG4gICAgbGVuID0gcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4ubGVuZ3RoO1xuXG4gICAgbGV0IG5ld0NvbmZpZyA9IGNvbmZpZztcblxuICAgIGkgPSAwO1xuXG4gICAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICAgIGNvbnN0IG9uRnVsZmlsbGVkID0gcmVxdWVzdEludGVyY2VwdG9yQ2hhaW5baSsrXTtcbiAgICAgIGNvbnN0IG9uUmVqZWN0ZWQgPSByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbltpKytdO1xuICAgICAgdHJ5IHtcbiAgICAgICAgbmV3Q29uZmlnID0gb25GdWxmaWxsZWQobmV3Q29uZmlnKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIG9uUmVqZWN0ZWQuY2FsbCh0aGlzLCBlcnJvcik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBwcm9taXNlID0gZGlzcGF0Y2hSZXF1ZXN0LmNhbGwodGhpcywgbmV3Q29uZmlnKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKTtcbiAgICB9XG5cbiAgICBpID0gMDtcbiAgICBsZW4gPSByZXNwb25zZUludGVyY2VwdG9yQ2hhaW4ubGVuZ3RoO1xuXG4gICAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICAgIHByb21pc2UgPSBwcm9taXNlLnRoZW4ocmVzcG9uc2VJbnRlcmNlcHRvckNoYWluW2krK10sIHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbltpKytdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvbWlzZTtcbiAgfVxuXG4gIGdldFVyaShjb25maWcpIHtcbiAgICBjb25maWcgPSBtZXJnZUNvbmZpZyh0aGlzLmRlZmF1bHRzLCBjb25maWcpO1xuICAgIGNvbnN0IGZ1bGxQYXRoID0gYnVpbGRGdWxsUGF0aChjb25maWcuYmFzZVVSTCwgY29uZmlnLnVybCk7XG4gICAgcmV0dXJuIGJ1aWxkVVJMKGZ1bGxQYXRoLCBjb25maWcucGFyYW1zLCBjb25maWcucGFyYW1zU2VyaWFsaXplcik7XG4gIH1cbn1cblxuLy8gUHJvdmlkZSBhbGlhc2VzIGZvciBzdXBwb3J0ZWQgcmVxdWVzdCBtZXRob2RzXG51dGlscy5mb3JFYWNoKFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJywgJ29wdGlvbnMnXSwgZnVuY3Rpb24gZm9yRWFjaE1ldGhvZE5vRGF0YShtZXRob2QpIHtcbiAgLyplc2xpbnQgZnVuYy1uYW1lczowKi9cbiAgQXhpb3MucHJvdG90eXBlW21ldGhvZF0gPSBmdW5jdGlvbih1cmwsIGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QobWVyZ2VDb25maWcoY29uZmlnIHx8IHt9LCB7XG4gICAgICBtZXRob2QsXG4gICAgICB1cmwsXG4gICAgICBkYXRhOiAoY29uZmlnIHx8IHt9KS5kYXRhXG4gICAgfSkpO1xuICB9O1xufSk7XG5cbnV0aWxzLmZvckVhY2goWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kV2l0aERhdGEobWV0aG9kKSB7XG4gIC8qZXNsaW50IGZ1bmMtbmFtZXM6MCovXG5cbiAgZnVuY3Rpb24gZ2VuZXJhdGVIVFRQTWV0aG9kKGlzRm9ybSkge1xuICAgIHJldHVybiBmdW5jdGlvbiBodHRwTWV0aG9kKHVybCwgZGF0YSwgY29uZmlnKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KG1lcmdlQ29uZmlnKGNvbmZpZyB8fCB7fSwge1xuICAgICAgICBtZXRob2QsXG4gICAgICAgIGhlYWRlcnM6IGlzRm9ybSA/IHtcbiAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ211bHRpcGFydC9mb3JtLWRhdGEnXG4gICAgICAgIH0gOiB7fSxcbiAgICAgICAgdXJsLFxuICAgICAgICBkYXRhXG4gICAgICB9KSk7XG4gICAgfTtcbiAgfVxuXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2RdID0gZ2VuZXJhdGVIVFRQTWV0aG9kKCk7XG5cbiAgQXhpb3MucHJvdG90eXBlW21ldGhvZCArICdGb3JtJ10gPSBnZW5lcmF0ZUhUVFBNZXRob2QodHJ1ZSk7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgQXhpb3M7XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCBDYW5jZWxlZEVycm9yIGZyb20gJy4vQ2FuY2VsZWRFcnJvci5qcyc7XG5cbi8qKlxuICogQSBgQ2FuY2VsVG9rZW5gIGlzIGFuIG9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIHRvIHJlcXVlc3QgY2FuY2VsbGF0aW9uIG9mIGFuIG9wZXJhdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBleGVjdXRvciBUaGUgZXhlY3V0b3IgZnVuY3Rpb24uXG4gKlxuICogQHJldHVybnMge0NhbmNlbFRva2VufVxuICovXG5jbGFzcyBDYW5jZWxUb2tlbiB7XG4gIGNvbnN0cnVjdG9yKGV4ZWN1dG9yKSB7XG4gICAgaWYgKHR5cGVvZiBleGVjdXRvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZXhlY3V0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uLicpO1xuICAgIH1cblxuICAgIGxldCByZXNvbHZlUHJvbWlzZTtcblxuICAgIHRoaXMucHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIHByb21pc2VFeGVjdXRvcihyZXNvbHZlKSB7XG4gICAgICByZXNvbHZlUHJvbWlzZSA9IHJlc29sdmU7XG4gICAgfSk7XG5cbiAgICBjb25zdCB0b2tlbiA9IHRoaXM7XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICAgIHRoaXMucHJvbWlzZS50aGVuKGNhbmNlbCA9PiB7XG4gICAgICBpZiAoIXRva2VuLl9saXN0ZW5lcnMpIHJldHVybjtcblxuICAgICAgbGV0IGkgPSB0b2tlbi5fbGlzdGVuZXJzLmxlbmd0aDtcblxuICAgICAgd2hpbGUgKGktLSA+IDApIHtcbiAgICAgICAgdG9rZW4uX2xpc3RlbmVyc1tpXShjYW5jZWwpO1xuICAgICAgfVxuICAgICAgdG9rZW4uX2xpc3RlbmVycyA9IG51bGw7XG4gICAgfSk7XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICAgIHRoaXMucHJvbWlzZS50aGVuID0gb25mdWxmaWxsZWQgPT4ge1xuICAgICAgbGV0IF9yZXNvbHZlO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgICAgIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgdG9rZW4uc3Vic2NyaWJlKHJlc29sdmUpO1xuICAgICAgICBfcmVzb2x2ZSA9IHJlc29sdmU7XG4gICAgICB9KS50aGVuKG9uZnVsZmlsbGVkKTtcblxuICAgICAgcHJvbWlzZS5jYW5jZWwgPSBmdW5jdGlvbiByZWplY3QoKSB7XG4gICAgICAgIHRva2VuLnVuc3Vic2NyaWJlKF9yZXNvbHZlKTtcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBwcm9taXNlO1xuICAgIH07XG5cbiAgICBleGVjdXRvcihmdW5jdGlvbiBjYW5jZWwobWVzc2FnZSwgY29uZmlnLCByZXF1ZXN0KSB7XG4gICAgICBpZiAodG9rZW4ucmVhc29uKSB7XG4gICAgICAgIC8vIENhbmNlbGxhdGlvbiBoYXMgYWxyZWFkeSBiZWVuIHJlcXVlc3RlZFxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRva2VuLnJlYXNvbiA9IG5ldyBDYW5jZWxlZEVycm9yKG1lc3NhZ2UsIGNvbmZpZywgcmVxdWVzdCk7XG4gICAgICByZXNvbHZlUHJvbWlzZSh0b2tlbi5yZWFzb24pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRocm93cyBhIGBDYW5jZWxlZEVycm9yYCBpZiBjYW5jZWxsYXRpb24gaGFzIGJlZW4gcmVxdWVzdGVkLlxuICAgKi9cbiAgdGhyb3dJZlJlcXVlc3RlZCgpIHtcbiAgICBpZiAodGhpcy5yZWFzb24pIHtcbiAgICAgIHRocm93IHRoaXMucmVhc29uO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTdWJzY3JpYmUgdG8gdGhlIGNhbmNlbCBzaWduYWxcbiAgICovXG5cbiAgc3Vic2NyaWJlKGxpc3RlbmVyKSB7XG4gICAgaWYgKHRoaXMucmVhc29uKSB7XG4gICAgICBsaXN0ZW5lcih0aGlzLnJlYXNvbik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2xpc3RlbmVycykge1xuICAgICAgdGhpcy5fbGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9saXN0ZW5lcnMgPSBbbGlzdGVuZXJdO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVbnN1YnNjcmliZSBmcm9tIHRoZSBjYW5jZWwgc2lnbmFsXG4gICAqL1xuXG4gIHVuc3Vic2NyaWJlKGxpc3RlbmVyKSB7XG4gICAgaWYgKCF0aGlzLl9saXN0ZW5lcnMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLl9saXN0ZW5lcnMuaW5kZXhPZihsaXN0ZW5lcik7XG4gICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgdGhpcy5fbGlzdGVuZXJzLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gb2JqZWN0IHRoYXQgY29udGFpbnMgYSBuZXcgYENhbmNlbFRva2VuYCBhbmQgYSBmdW5jdGlvbiB0aGF0LCB3aGVuIGNhbGxlZCxcbiAgICogY2FuY2VscyB0aGUgYENhbmNlbFRva2VuYC5cbiAgICovXG4gIHN0YXRpYyBzb3VyY2UoKSB7XG4gICAgbGV0IGNhbmNlbDtcbiAgICBjb25zdCB0b2tlbiA9IG5ldyBDYW5jZWxUb2tlbihmdW5jdGlvbiBleGVjdXRvcihjKSB7XG4gICAgICBjYW5jZWwgPSBjO1xuICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICB0b2tlbixcbiAgICAgIGNhbmNlbFxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ2FuY2VsVG9rZW47XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogU3ludGFjdGljIHN1Z2FyIGZvciBpbnZva2luZyBhIGZ1bmN0aW9uIGFuZCBleHBhbmRpbmcgYW4gYXJyYXkgZm9yIGFyZ3VtZW50cy5cbiAqXG4gKiBDb21tb24gdXNlIGNhc2Ugd291bGQgYmUgdG8gdXNlIGBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHlgLlxuICpcbiAqICBgYGBqc1xuICogIGZ1bmN0aW9uIGYoeCwgeSwgeikge31cbiAqICB2YXIgYXJncyA9IFsxLCAyLCAzXTtcbiAqICBmLmFwcGx5KG51bGwsIGFyZ3MpO1xuICogIGBgYFxuICpcbiAqIFdpdGggYHNwcmVhZGAgdGhpcyBleGFtcGxlIGNhbiBiZSByZS13cml0dGVuLlxuICpcbiAqICBgYGBqc1xuICogIHNwcmVhZChmdW5jdGlvbih4LCB5LCB6KSB7fSkoWzEsIDIsIDNdKTtcbiAqICBgYGBcbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICpcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc3ByZWFkKGNhbGxiYWNrKSB7XG4gIHJldHVybiBmdW5jdGlvbiB3cmFwKGFycikge1xuICAgIHJldHVybiBjYWxsYmFjay5hcHBseShudWxsLCBhcnIpO1xuICB9O1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi8uLi91dGlscy5qcyc7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBwYXlsb2FkIGlzIGFuIGVycm9yIHRocm93biBieSBBeGlvc1xuICpcbiAqIEBwYXJhbSB7Kn0gcGF5bG9hZCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBwYXlsb2FkIGlzIGFuIGVycm9yIHRocm93biBieSBBeGlvcywgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzQXhpb3NFcnJvcihwYXlsb2FkKSB7XG4gIHJldHVybiB1dGlscy5pc09iamVjdChwYXlsb2FkKSAmJiAocGF5bG9hZC5pc0F4aW9zRXJyb3IgPT09IHRydWUpO1xufVxuIiwiY29uc3QgSHR0cFN0YXR1c0NvZGUgPSB7XG4gIENvbnRpbnVlOiAxMDAsXG4gIFN3aXRjaGluZ1Byb3RvY29sczogMTAxLFxuICBQcm9jZXNzaW5nOiAxMDIsXG4gIEVhcmx5SGludHM6IDEwMyxcbiAgT2s6IDIwMCxcbiAgQ3JlYXRlZDogMjAxLFxuICBBY2NlcHRlZDogMjAyLFxuICBOb25BdXRob3JpdGF0aXZlSW5mb3JtYXRpb246IDIwMyxcbiAgTm9Db250ZW50OiAyMDQsXG4gIFJlc2V0Q29udGVudDogMjA1LFxuICBQYXJ0aWFsQ29udGVudDogMjA2LFxuICBNdWx0aVN0YXR1czogMjA3LFxuICBBbHJlYWR5UmVwb3J0ZWQ6IDIwOCxcbiAgSW1Vc2VkOiAyMjYsXG4gIE11bHRpcGxlQ2hvaWNlczogMzAwLFxuICBNb3ZlZFBlcm1hbmVudGx5OiAzMDEsXG4gIEZvdW5kOiAzMDIsXG4gIFNlZU90aGVyOiAzMDMsXG4gIE5vdE1vZGlmaWVkOiAzMDQsXG4gIFVzZVByb3h5OiAzMDUsXG4gIFVudXNlZDogMzA2LFxuICBUZW1wb3JhcnlSZWRpcmVjdDogMzA3LFxuICBQZXJtYW5lbnRSZWRpcmVjdDogMzA4LFxuICBCYWRSZXF1ZXN0OiA0MDAsXG4gIFVuYXV0aG9yaXplZDogNDAxLFxuICBQYXltZW50UmVxdWlyZWQ6IDQwMixcbiAgRm9yYmlkZGVuOiA0MDMsXG4gIE5vdEZvdW5kOiA0MDQsXG4gIE1ldGhvZE5vdEFsbG93ZWQ6IDQwNSxcbiAgTm90QWNjZXB0YWJsZTogNDA2LFxuICBQcm94eUF1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6IDQwNyxcbiAgUmVxdWVzdFRpbWVvdXQ6IDQwOCxcbiAgQ29uZmxpY3Q6IDQwOSxcbiAgR29uZTogNDEwLFxuICBMZW5ndGhSZXF1aXJlZDogNDExLFxuICBQcmVjb25kaXRpb25GYWlsZWQ6IDQxMixcbiAgUGF5bG9hZFRvb0xhcmdlOiA0MTMsXG4gIFVyaVRvb0xvbmc6IDQxNCxcbiAgVW5zdXBwb3J0ZWRNZWRpYVR5cGU6IDQxNSxcbiAgUmFuZ2VOb3RTYXRpc2ZpYWJsZTogNDE2LFxuICBFeHBlY3RhdGlvbkZhaWxlZDogNDE3LFxuICBJbUFUZWFwb3Q6IDQxOCxcbiAgTWlzZGlyZWN0ZWRSZXF1ZXN0OiA0MjEsXG4gIFVucHJvY2Vzc2FibGVFbnRpdHk6IDQyMixcbiAgTG9ja2VkOiA0MjMsXG4gIEZhaWxlZERlcGVuZGVuY3k6IDQyNCxcbiAgVG9vRWFybHk6IDQyNSxcbiAgVXBncmFkZVJlcXVpcmVkOiA0MjYsXG4gIFByZWNvbmRpdGlvblJlcXVpcmVkOiA0MjgsXG4gIFRvb01hbnlSZXF1ZXN0czogNDI5LFxuICBSZXF1ZXN0SGVhZGVyRmllbGRzVG9vTGFyZ2U6IDQzMSxcbiAgVW5hdmFpbGFibGVGb3JMZWdhbFJlYXNvbnM6IDQ1MSxcbiAgSW50ZXJuYWxTZXJ2ZXJFcnJvcjogNTAwLFxuICBOb3RJbXBsZW1lbnRlZDogNTAxLFxuICBCYWRHYXRld2F5OiA1MDIsXG4gIFNlcnZpY2VVbmF2YWlsYWJsZTogNTAzLFxuICBHYXRld2F5VGltZW91dDogNTA0LFxuICBIdHRwVmVyc2lvbk5vdFN1cHBvcnRlZDogNTA1LFxuICBWYXJpYW50QWxzb05lZ290aWF0ZXM6IDUwNixcbiAgSW5zdWZmaWNpZW50U3RvcmFnZTogNTA3LFxuICBMb29wRGV0ZWN0ZWQ6IDUwOCxcbiAgTm90RXh0ZW5kZWQ6IDUxMCxcbiAgTmV0d29ya0F1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6IDUxMSxcbn07XG5cbk9iamVjdC5lbnRyaWVzKEh0dHBTdGF0dXNDb2RlKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgSHR0cFN0YXR1c0NvZGVbdmFsdWVdID0ga2V5O1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IEh0dHBTdGF0dXNDb2RlO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi91dGlscy5qcyc7XG5pbXBvcnQgYmluZCBmcm9tICcuL2hlbHBlcnMvYmluZC5qcyc7XG5pbXBvcnQgQXhpb3MgZnJvbSAnLi9jb3JlL0F4aW9zLmpzJztcbmltcG9ydCBtZXJnZUNvbmZpZyBmcm9tICcuL2NvcmUvbWVyZ2VDb25maWcuanMnO1xuaW1wb3J0IGRlZmF1bHRzIGZyb20gJy4vZGVmYXVsdHMvaW5kZXguanMnO1xuaW1wb3J0IGZvcm1EYXRhVG9KU09OIGZyb20gJy4vaGVscGVycy9mb3JtRGF0YVRvSlNPTi5qcyc7XG5pbXBvcnQgQ2FuY2VsZWRFcnJvciBmcm9tICcuL2NhbmNlbC9DYW5jZWxlZEVycm9yLmpzJztcbmltcG9ydCBDYW5jZWxUb2tlbiBmcm9tICcuL2NhbmNlbC9DYW5jZWxUb2tlbi5qcyc7XG5pbXBvcnQgaXNDYW5jZWwgZnJvbSAnLi9jYW5jZWwvaXNDYW5jZWwuanMnO1xuaW1wb3J0IHtWRVJTSU9OfSBmcm9tICcuL2Vudi9kYXRhLmpzJztcbmltcG9ydCB0b0Zvcm1EYXRhIGZyb20gJy4vaGVscGVycy90b0Zvcm1EYXRhLmpzJztcbmltcG9ydCBBeGlvc0Vycm9yIGZyb20gJy4vY29yZS9BeGlvc0Vycm9yLmpzJztcbmltcG9ydCBzcHJlYWQgZnJvbSAnLi9oZWxwZXJzL3NwcmVhZC5qcyc7XG5pbXBvcnQgaXNBeGlvc0Vycm9yIGZyb20gJy4vaGVscGVycy9pc0F4aW9zRXJyb3IuanMnO1xuaW1wb3J0IEF4aW9zSGVhZGVycyBmcm9tIFwiLi9jb3JlL0F4aW9zSGVhZGVycy5qc1wiO1xuaW1wb3J0IGFkYXB0ZXJzIGZyb20gJy4vYWRhcHRlcnMvYWRhcHRlcnMuanMnO1xuaW1wb3J0IEh0dHBTdGF0dXNDb2RlIGZyb20gJy4vaGVscGVycy9IdHRwU3RhdHVzQ29kZS5qcyc7XG5cbi8qKlxuICogQ3JlYXRlIGFuIGluc3RhbmNlIG9mIEF4aW9zXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGRlZmF1bHRDb25maWcgVGhlIGRlZmF1bHQgY29uZmlnIGZvciB0aGUgaW5zdGFuY2VcbiAqXG4gKiBAcmV0dXJucyB7QXhpb3N9IEEgbmV3IGluc3RhbmNlIG9mIEF4aW9zXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUluc3RhbmNlKGRlZmF1bHRDb25maWcpIHtcbiAgY29uc3QgY29udGV4dCA9IG5ldyBBeGlvcyhkZWZhdWx0Q29uZmlnKTtcbiAgY29uc3QgaW5zdGFuY2UgPSBiaW5kKEF4aW9zLnByb3RvdHlwZS5yZXF1ZXN0LCBjb250ZXh0KTtcblxuICAvLyBDb3B5IGF4aW9zLnByb3RvdHlwZSB0byBpbnN0YW5jZVxuICB1dGlscy5leHRlbmQoaW5zdGFuY2UsIEF4aW9zLnByb3RvdHlwZSwgY29udGV4dCwge2FsbE93bktleXM6IHRydWV9KTtcblxuICAvLyBDb3B5IGNvbnRleHQgdG8gaW5zdGFuY2VcbiAgdXRpbHMuZXh0ZW5kKGluc3RhbmNlLCBjb250ZXh0LCBudWxsLCB7YWxsT3duS2V5czogdHJ1ZX0pO1xuXG4gIC8vIEZhY3RvcnkgZm9yIGNyZWF0aW5nIG5ldyBpbnN0YW5jZXNcbiAgaW5zdGFuY2UuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKGluc3RhbmNlQ29uZmlnKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUluc3RhbmNlKG1lcmdlQ29uZmlnKGRlZmF1bHRDb25maWcsIGluc3RhbmNlQ29uZmlnKSk7XG4gIH07XG5cbiAgcmV0dXJuIGluc3RhbmNlO1xufVxuXG4vLyBDcmVhdGUgdGhlIGRlZmF1bHQgaW5zdGFuY2UgdG8gYmUgZXhwb3J0ZWRcbmNvbnN0IGF4aW9zID0gY3JlYXRlSW5zdGFuY2UoZGVmYXVsdHMpO1xuXG4vLyBFeHBvc2UgQXhpb3MgY2xhc3MgdG8gYWxsb3cgY2xhc3MgaW5oZXJpdGFuY2VcbmF4aW9zLkF4aW9zID0gQXhpb3M7XG5cbi8vIEV4cG9zZSBDYW5jZWwgJiBDYW5jZWxUb2tlblxuYXhpb3MuQ2FuY2VsZWRFcnJvciA9IENhbmNlbGVkRXJyb3I7XG5heGlvcy5DYW5jZWxUb2tlbiA9IENhbmNlbFRva2VuO1xuYXhpb3MuaXNDYW5jZWwgPSBpc0NhbmNlbDtcbmF4aW9zLlZFUlNJT04gPSBWRVJTSU9OO1xuYXhpb3MudG9Gb3JtRGF0YSA9IHRvRm9ybURhdGE7XG5cbi8vIEV4cG9zZSBBeGlvc0Vycm9yIGNsYXNzXG5heGlvcy5BeGlvc0Vycm9yID0gQXhpb3NFcnJvcjtcblxuLy8gYWxpYXMgZm9yIENhbmNlbGVkRXJyb3IgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHlcbmF4aW9zLkNhbmNlbCA9IGF4aW9zLkNhbmNlbGVkRXJyb3I7XG5cbi8vIEV4cG9zZSBhbGwvc3ByZWFkXG5heGlvcy5hbGwgPSBmdW5jdGlvbiBhbGwocHJvbWlzZXMpIHtcbiAgcmV0dXJuIFByb21pc2UuYWxsKHByb21pc2VzKTtcbn07XG5cbmF4aW9zLnNwcmVhZCA9IHNwcmVhZDtcblxuLy8gRXhwb3NlIGlzQXhpb3NFcnJvclxuYXhpb3MuaXNBeGlvc0Vycm9yID0gaXNBeGlvc0Vycm9yO1xuXG4vLyBFeHBvc2UgbWVyZ2VDb25maWdcbmF4aW9zLm1lcmdlQ29uZmlnID0gbWVyZ2VDb25maWc7XG5cbmF4aW9zLkF4aW9zSGVhZGVycyA9IEF4aW9zSGVhZGVycztcblxuYXhpb3MuZm9ybVRvSlNPTiA9IHRoaW5nID0+IGZvcm1EYXRhVG9KU09OKHV0aWxzLmlzSFRNTEZvcm0odGhpbmcpID8gbmV3IEZvcm1EYXRhKHRoaW5nKSA6IHRoaW5nKTtcblxuYXhpb3MuZ2V0QWRhcHRlciA9IGFkYXB0ZXJzLmdldEFkYXB0ZXI7XG5cbmF4aW9zLkh0dHBTdGF0dXNDb2RlID0gSHR0cFN0YXR1c0NvZGU7XG5cbmF4aW9zLmRlZmF1bHQgPSBheGlvcztcblxuLy8gdGhpcyBtb2R1bGUgc2hvdWxkIG9ubHkgaGF2ZSBhIGRlZmF1bHQgZXhwb3J0XG5leHBvcnQgZGVmYXVsdCBheGlvc1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbmltcG9ydCBheGlvcyBmcm9tIFwiYXhpb3NcIjtcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSHR0cHtcclxuICAgICNheGlvcztcclxuICAgICNyZXF1ZXN0Q291bnQgPSAwOyAvLyDor7fmsYLmrKHmlbBcclxuICAgICNsb2FkaW5nSW5zdGFuY2UgPSBudWxsO1xyXG4gICAgI2NvbmZpZyA9IHtcclxuICAgICAgICBiYXNlVVJMOiAnJyxcclxuICAgICAgICB0aW1lb3V0OiA2MCAqIDEwMDAsXHJcbiAgICAgICAgd2l0aENyZWRlbnRpYWxzOiBmYWxzZSxcclxuICAgICAgICBzdWNjZXNzQ29kZTogMjAwLFxyXG4gICAgICAgIGVycm9yQ29kZTogNTAwLFxyXG4gICAgICAgIGNhbGxCYWNrQ29kZTogW10sXHJcbiAgICAgICAgY2FsbDogbnVsbFxyXG4gICAgfVxyXG4gICAgY29uc3RydWN0b3Iob3B0aW9ucyl7XHJcbiAgICAgICAgZm9yKGNvbnN0IGsgaW4gdGhpcy4jY29uZmlnKXtcclxuICAgICAgICAgICAgaWYob3B0aW9uc1trXSl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLiNjb25maWdba10gPSBvcHRpb25zW2tdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGF4aW9zLmRlZmF1bHRzLmhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gJ2FwcGxpY2F0aW9uL2pzb247Y2hhcnNldD1VVEYtOCc7XHJcbiAgICAgICAgYXhpb3MuZGVmYXVsdHMuaGVhZGVyc1snQWNjZXB0J10gPSAnYXBwbGljYXRpb24vanNvbic7XHJcbiAgICAgICAgdGhpcy4jYXhpb3MgPSBheGlvcy5jcmVhdGUodGhpcy4jY29uZmlnKTtcclxuXHJcbiAgICAgICAgdGhpcy4jYXhpb3MuaW50ZXJjZXB0b3JzLnJlcXVlc3QudXNlKFxyXG4gICAgICAgICAgICBjb25maWc9PntcclxuICAgICAgICAgICAgICAgIGlmKCFjb25maWcucGFyYW1zKXtcclxuICAgICAgICAgICAgICAgICAgICBjb25maWcucGFyYW1zID0ge307XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLiNyZXF1ZXN0Q291bnQgPT0gMCl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jbG9hZGluZ0luc3RhbmNlID0gbG9hZGluZygpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy4jcmVxdWVzdENvdW50Kys7XHJcbiAgICAgICAgICAgICAgICBjb25maWcuaGVhZGVycy5hdXRob3JpemF0aW9uID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3Rva2VuJyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY29uZmlnO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnJvcj0+e1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy4jYXhpb3MuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLnVzZShcclxuICAgICAgICAgICAgcmVzcG9uc2U9PntcclxuICAgICAgICAgICAgICAgIHRoaXMuI3JlcXVlc3RDb3VudC0tO1xyXG4gICAgICAgICAgICAgICAgaWYodGhpcy4jcmVxdWVzdENvdW50ID09PSAwKXtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLiNsb2FkaW5nSW5zdGFuY2UuY2xvc2UoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZS5kYXRhO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnJvcj0+e1xyXG4gICAgICAgICAgICAgICAgdGhpcy4jcmVxdWVzdENvdW50LS07XHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLiNyZXF1ZXN0Q291bnQgPT09IDApe1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI2xvYWRpbmdJbnN0YW5jZS5jbG9zZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgX2hhbmRsZVJlc3VsdChzdWNjZXNzLGVycixyZXMpe1xyXG4gICAgICAgIGlmKCFyZXMpe1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKHJlcy5jb2RlID09PSB0aGlzLiNjb25maWcuc3VjY2Vzc0NvZGUpe1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHN1Y2Nlc3MgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgIHN1Y2Nlc3MocmVzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1lbHNlIGlmKHJlcy5jb2RlID09PSB0aGlzLiNjb25maWcuZXJyb3JDb2RlKXtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBlcnIgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgIGVycihyZXMpO1xyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIGVycm9yKHJlcy5tc2cpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfWVsc2UgaWYodGhpcy4jY29uZmlnLmNhbGxCYWNrQ29kZS5pbmNsdWRlcyhyZXMuY29kZSkgJiYgdHlwZW9mIHRoaXMuI2NvbmZpZy5jYWxsID09PSAnZnVuY3Rpb24nKXtcclxuICAgICAgICAgICAgdGhpcy4jY29uZmlnLmNhbGwocmVzKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcG9zdCh1cmwscGFyYW1zLHN1Y2Nlc3MsZXJyKXtcclxuICAgICAgICB0aGlzLiNheGlvcy5wb3N0KHVybCxwYXJhbXMpLnRoZW4ocmVzPT57XHJcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZVJlc3VsdChzdWNjZXNzLGVycixyZXMpO1xyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlKHVybCxwYXJhbXMsc3VjY2VzcyxlcnIpe1xyXG4gICAgICAgIHRoaXMuI2F4aW9zLnVwZGF0ZSh1cmwscGFyYW1zKS50aGVuKHJlcz0+e1xyXG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVSZXN1bHQoc3VjY2VzcyxlcnIscmVzKTtcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIGdldCh1cmwsIHBhcmFtcywgc3VjY2VzcywgZXJyKXtcclxuICAgICAgICB0aGlzLiNheGlvcy5nZXQodXJsLCB7IHBhcmFtczogcGFyYW1zfSkudGhlbihyZXMgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVSZXN1bHQoc3VjY2VzcyxlcnIscmVzKTtcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIGRlbGV0ZSh1cmwsIHBhcmFtcywgc3VjY2VzcywgZXJyKXtcclxuXHRcdHRoaXMuI2F4aW9zLmRlbGV0ZSh1cmwsIHsgcGFyYW1zOiBwYXJhbXN9KS50aGVuKHJlcyA9PiB7XHJcblx0XHRcdHRoaXMuX2hhbmRsZVJlc3VsdChzdWNjZXNzLGVycixyZXMpO1xyXG5cdFx0fSlcclxuXHR9XHJcblxyXG4gICAgZG93bkxvYWQodXJsLCBwYXJhbXM9e30pe1xyXG4gICAgICAgIHRoaXMuI2F4aW9zLnBvc3QodXJsLCBwYXJhbXMsIHsncmVzcG9uc2VUeXBlJzogJ2Jsb2InfSkudGhlbihyZXM9PntcclxuXHRcdFx0aWYocmVzKXtcclxuXHRcdFx0XHRsZXQgZmlsZU5hbWUgPSBwYXJhbXMuZmlsZU5hbWU7XHJcblx0XHRcdFx0aWYoIWZpbGVOYW1lKXtcclxuXHRcdFx0XHRcdGZpbGVOYW1lID0gcmVzLmhlYWRlcnNbJ2NvbnRlbnQtZGlzcG9zaXRpb24nXS5zcGxpdCgnZmlsZW5hbWU9JylbMV0ucmVwbGFjZSgvXCIvZywgJycpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRjb25zdCBibG9iID0gbmV3IEJsb2IoW3Jlcy5kYXRhXSwge3R5cGU6ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW07Y2hhcnNldD1VVEYtOCd9KTtcclxuXHRcdFx0XHRjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xyXG5cdFx0XHRcdGxpbmsuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuXHRcdFx0XHRsaW5rLmhyZWYgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcclxuXHRcdFx0XHRsaW5rLmRvd25sb2FkID0gZGVjb2RlVVJJQ29tcG9uZW50KGZpbGVOYW1lKTtcclxuXHRcdFx0XHRsaW5rLmNsaWNrKCk7XHJcblx0XHRcdFx0d2luZG93LlVSTC5yZXZva2VPYmplY3RVUkwobGluay5ocmVmKTtcclxuXHRcdFx0fVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59IiwicmVxdWlyZSgnLi9tZXNzYWdlL2luZGV4LmpzJyk7XHJcbmltcG9ydCBQYWdpbmF0aW9uIGZyb20gJy4vcGFnaW5hdGlvbi9JbmRleC52dWUnO1xyXG5pbXBvcnQgUGFnZVRhYmxlIGZyb20gJy4vcGFnZS10YWJsZS9JbmRleC52dWUnO1xyXG5pbXBvcnQgRGlhbG9nIGZyb20gJy4vZGlhbG9nL0luZGV4LnZ1ZSc7XHJcbmltcG9ydCBDYXJkIGZyb20gJy4vY2FyZC9JbmRleC52dWUnO1xyXG5pbXBvcnQgVHJlZSBmcm9tICcuL3RyZWUvSW5kZXgudnVlJztcclxuaW1wb3J0IF9IdHRwIGZyb20gJy4vaHR0cC9pbmRleC5qcyc7XHJcbmNvbnN0IGNvbXMgPSBbUGFnaW5hdGlvbiwgUGFnZVRhYmxlLCBEaWFsb2csIENhcmQsIFRyZWVdO1xyXG5jb25zdCBpbnN0YWxsID0gZnVuY3Rpb24oVnVlKXtcclxuICAgIGNvbXMuZm9yRWFjaChjb20gPT4ge1xyXG4gICAgICAgIFZ1ZS5jb21wb25lbnQoY29tLm5hbWUsIGNvbSk7XHJcbiAgICB9KVxyXG59XHJcblxyXG4vLyDlr7zlh7rnu4Tku7ZcclxuZXhwb3J0IGRlZmF1bHQgaW5zdGFsbDtcclxuXHJcbmV4cG9ydCBjbGFzcyBIdHRwIGV4dGVuZHMgX0h0dHB7XHJcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKXtcclxuICAgICAgICBzdXBlcihvcHRpb25zKTtcclxuICAgIH1cclxufSIsImltcG9ydCAnLi9zZXRQdWJsaWNQYXRoJ1xuaW1wb3J0IG1vZCBmcm9tICd+ZW50cnknXG5leHBvcnQgZGVmYXVsdCBtb2RcbmV4cG9ydCAqIGZyb20gJ35lbnRyeSdcbiJdLCJuYW1lcyI6WyJyZW5kZXIiLCJfdm0iLCJfYyIsIl9zZWxmIiwidG90YWwiLCJfYiIsImF0dHJzIiwiY3VycmVudFBhZ2UiLCJwYWdlU2l6ZSIsInBhZ2VTaXplcyIsIm9uIiwiaGFuZGxlU2l6ZUNoYW5nZSIsImhhbmRsZUN1cnJlbnRDaGFuZ2UiLCIkYXR0cnMiLCJfZSIsInN0YXRpY1JlbmRlckZucyIsIm5hbWUiLCJwcm9wcyIsInJlcXVpcmVkIiwidHlwZSIsIk51bWJlciIsImRlZmF1bHQiLCJwYWdlIiwibGltaXQiLCJBcnJheSIsImNvbXB1dGVkIiwiZ2V0Iiwic2V0IiwidmFsIiwiJGVtaXQiLCJ0b3RhbENvdW50IiwibWV0aG9kcyIsInN0YXRpY0NsYXNzIiwidGFibGVJZCIsInN0YXRpY1N0eWxlIiwicmVmIiwibGlzdCIsInJvd0tleSIsImxvYWQiLCJobGlnaHRDdXJyZW50Um93IiwiZGVmYXVsdEV4cGFuZEFsbCIsImhhbmRlbFNlbGVjdGlvbkNoYW5nZSIsInNlbGVjdEFsbCIsImhhbmRsZVJvd0NsaWNrIiwic2hvd0NoZWNrQm94Iiwic29ydE51bSIsInNjb3BlZFNsb3RzIiwiX3UiLCJrZXkiLCJmbiIsInNjb3BlIiwiX3YiLCJfcyIsInBhcmFtcyIsIiRpbmRleCIsIl90IiwidXBkYXRlOnBhZ2UiLCIkZXZlbnQiLCIkc2V0IiwiZ2V0TGlzdCIsImRhdGEiLCJ1cmwiLCJTdHJpbmciLCJtZXRob2QiLCJCb29sZWFuIiwiZGVmYXVsdFBhcmFtcyIsIk9iamVjdCIsImRlZmF1bHRTZWxlY3QiLCJ5cGUiLCJ3YXRjaCIsIm5ld1ZhbCIsImhhbmRsZXIiLCJzZXRDaGVja2VkIiwiZGVlcCIsIm9sZFZhbCIsInBhcmFtIiwiTWF0aCIsInJhbmRvbSIsInRvU3RyaW5nIiwic3Vic3RyaW5nIiwic2VsZWN0RGF0YSIsInNlbGVjdElkcyIsIm1vdW50ZWQiLCJsb2ciLCIkbGlzdGVuZXJzIiwiaXRlbSIsInBhZ2VPcHRpb24iLCJzdG9yYWdlUGFyYW1zIiwic2Vzc2lvblN0b3JhZ2UiLCJnZXRJdGVtIiwiJHJvdXRlIiwicGF0aCIsInNldEl0ZW0iLCJKU09OIiwic3RyaW5naWZ5IiwiaHR0cCIsInJlcyIsIl9zZXREYXRhIiwicG9zdCIsInJlY29yZHMiLCJsZW5ndGgiLCJtYXAiLCIkbmV4dFRpY2siLCIkcmVmcyIsImluY2x1ZGVzIiwidG9nZ2xlUm93U2VsZWN0aW9uIiwicXVlcnkiLCJrZXlzIiwicm93IiwiY29sdW1uIiwiZXZlbnQiLCJfIiwic2VsZWN0aW9uTGlzdCIsInZhbHVlcyIsInNlbGVjdGlvbiIsInNldEN1cnJlbnQiLCJpbmRleCIsInNldEN1cnJlbnRSb3ciLCJnZXREYXRhIiwidHJlZSIsInRyZWVOb2RlIiwicmVzb2x2ZSIsImRpcmVjdGl2ZXMiLCJyYXdOYW1lIiwidGl0bGUiLCJkaWFsb2dWaXNpYmxlIiwiaGFuZGxlQ2xvc2UiLCJzaG93Q2xvc2UiLCJzdHlsZSIsIm1heEhlaWdodCIsIm1pbkhlaWdodCIsInNsb3QiLCJWdWUiLCJkaXJlY3RpdmUiLCJiaW5kIiwiZWwiLCJkaWFsb2dIZWFkZXJFbCIsInF1ZXJ5U2VsZWN0b3IiLCJkcmFnRG9tIiwiY3Vyc29yIiwic3R5IiwiY3VycmVudFN0eWxlIiwid2luZG93IiwiZ2V0Q29tcHV0ZWRTdHlsZSIsIm9ubW91c2Vkb3duIiwiZGlzWCIsImNsaWVudFgiLCJvZmZzZXRMZWZ0IiwiZGlzWSIsImNsaWVudFkiLCJvZmZzZXRUb3AiLCJzdHlMIiwic3R5VCIsImxlZnQiLCJkb2N1bWVudCIsImJvZHkiLCJjbGllbnRXaWR0aCIsInJlcGxhY2UiLCJjbGllbnRIZWlnaHQiLCJ0b3AiLCJvbm1vdXNlbW92ZSIsImUiLCJsIiwidCIsIm9ubW91c2V1cCIsImFyaWFFbHMiLCJxdWVyeVNlbGVjdG9yQWxsIiwiZm9yRWFjaCIsInJlbW92ZUF0dHJpYnV0ZSIsInNoYWRvdyIsIiRzbG90cyIsInNob3ciLCJfbCIsImlkIiwib25FeHBhbmQiLCJvbkNoZWNrZWQiLCJoYXNDaGlsZHJlbiIsImlzQXJyYXkiLCJjaGlsZHJlbiIsInJlbmRlckxhYmVsIiwiaCIsImNvbnRleHQiLCJsaXN0ZW5lcnMiLCJjbGlja0hhbmRsZXIiLCJjaGVja2VkSGFuZGxlciIsImxhYmVsIiwiY2hpbGROb2RlcyIsInB1c2giLCJpY29DbGFzcyIsImV4cGFuZCIsImRvbVByb3BzIiwiY2xhc3NOYW1lIiwiam9pbiIsIm1hcmdpbkxlZnQiLCJfbGV2ZSIsImZvbnRTaXplIiwidHJhbnNmb3JtIiwiY29sb3IiLCJjbGljayIsImNoZWNrZWQiLCJyZW5kZXJDaGlsZHJlbiIsInJlbmRlck5vZGUiLCJjbHMiLCJjb21wb25lbnRzIiwiQXV0aFRyZWUiLCJmdW5jdGlvbmFsIiwiaW5pdCIsImxldmUiLCJpIiwicmVmcmVzaCIsInRvb2xlckNoZWNrZWQiLCJzZXRQYXJlbnRDaGVja2VkIiwibm9kZSIsInNldENoaWxkQ2hlY2tlZCIsImNoaWxkSXNDaGVja2VkIiwic2V0RGVmYXVsdENoZWNrZWQiLCJkZWZhdWx0SWRzIiwiZ2V0Q2hlY2tlZEtleXMiLCJfZ2V0Q2hlY2tlZEtleXMiLCJnZXRDaGVja2VkTm9kZXMiLCJub2RlcyIsIl9nZXRDaGVja2VkTm9kZXMiLCJpbW1lZGlhdGUiLCJfY2hlY2tQcml2YXRlUmVkZWNsYXJhdGlvbiIsIm9iaiIsInByaXZhdGVDb2xsZWN0aW9uIiwiaGFzIiwiVHlwZUVycm9yIiwiY2hlY2tQcml2YXRlUmVkZWNsYXJhdGlvbiIsIl9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjIiwicHJpdmF0ZU1hcCIsInZhbHVlIiwiX2Fzc2VydENsYXNzQnJhbmQiLCJuIiwiYXJndW1lbnRzIiwiYXNzZXJ0Q2xhc3NCcmFuZCIsIl9jbGFzc1ByaXZhdGVGaWVsZFNldDIiLCJzIiwiYSIsInIiLCJfY2xhc3NQcml2YXRlRmllbGRHZXQyIiwidGhpc0FyZyIsIndyYXAiLCJhcHBseSIsInByb3RvdHlwZSIsImdldFByb3RvdHlwZU9mIiwia2luZE9mIiwiY2FjaGUiLCJ0aGluZyIsInN0ciIsImNhbGwiLCJzbGljZSIsInRvTG93ZXJDYXNlIiwiY3JlYXRlIiwia2luZE9mVGVzdCIsInR5cGVPZlRlc3QiLCJpc1VuZGVmaW5lZCIsImlzQnVmZmVyIiwiY29uc3RydWN0b3IiLCJpc0Z1bmN0aW9uIiwiaXNBcnJheUJ1ZmZlciIsImlzQXJyYXlCdWZmZXJWaWV3IiwicmVzdWx0IiwiQXJyYXlCdWZmZXIiLCJpc1ZpZXciLCJidWZmZXIiLCJpc1N0cmluZyIsImlzTnVtYmVyIiwiaXNPYmplY3QiLCJpc0Jvb2xlYW4iLCJpc1BsYWluT2JqZWN0IiwiU3ltYm9sIiwidG9TdHJpbmdUYWciLCJpdGVyYXRvciIsImlzRGF0ZSIsImlzRmlsZSIsImlzQmxvYiIsImlzRmlsZUxpc3QiLCJpc1N0cmVhbSIsInBpcGUiLCJpc0Zvcm1EYXRhIiwia2luZCIsIkZvcm1EYXRhIiwiYXBwZW5kIiwiaXNVUkxTZWFyY2hQYXJhbXMiLCJ0cmltIiwiYWxsT3duS2V5cyIsImdldE93blByb3BlcnR5TmFtZXMiLCJsZW4iLCJmaW5kS2V5IiwiX2tleSIsIl9nbG9iYWwiLCJnbG9iYWxUaGlzIiwic2VsZiIsImdsb2JhbCIsImlzQ29udGV4dERlZmluZWQiLCJtZXJnZSIsImNhc2VsZXNzIiwiYXNzaWduVmFsdWUiLCJ0YXJnZXRLZXkiLCJleHRlbmQiLCJiIiwic3RyaXBCT00iLCJjb250ZW50IiwiY2hhckNvZGVBdCIsImluaGVyaXRzIiwic3VwZXJDb25zdHJ1Y3RvciIsImRlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydHkiLCJhc3NpZ24iLCJ0b0ZsYXRPYmplY3QiLCJzb3VyY2VPYmoiLCJkZXN0T2JqIiwiZmlsdGVyIiwicHJvcEZpbHRlciIsInByb3AiLCJtZXJnZWQiLCJlbmRzV2l0aCIsInNlYXJjaFN0cmluZyIsInBvc2l0aW9uIiwidW5kZWZpbmVkIiwibGFzdEluZGV4IiwiaW5kZXhPZiIsInRvQXJyYXkiLCJhcnIiLCJpc1R5cGVkQXJyYXkiLCJUeXBlZEFycmF5IiwiVWludDhBcnJheSIsImZvckVhY2hFbnRyeSIsImdlbmVyYXRvciIsIm5leHQiLCJkb25lIiwicGFpciIsIm1hdGNoQWxsIiwicmVnRXhwIiwibWF0Y2hlcyIsImV4ZWMiLCJpc0hUTUxGb3JtIiwidG9DYW1lbENhc2UiLCJyZXBsYWNlciIsIm0iLCJwMSIsInAyIiwidG9VcHBlckNhc2UiLCJoYXNPd25Qcm9wZXJ0eSIsImlzUmVnRXhwIiwicmVkdWNlRGVzY3JpcHRvcnMiLCJyZWR1Y2VyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsInJlZHVjZWREZXNjcmlwdG9ycyIsImRlc2NyaXB0b3IiLCJyZXQiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZnJlZXplTWV0aG9kcyIsImVudW1lcmFibGUiLCJ3cml0YWJsZSIsIkVycm9yIiwidG9PYmplY3RTZXQiLCJhcnJheU9yU3RyaW5nIiwiZGVsaW1pdGVyIiwiZGVmaW5lIiwic3BsaXQiLCJub29wIiwidG9GaW5pdGVOdW1iZXIiLCJkZWZhdWx0VmFsdWUiLCJpc0Zpbml0ZSIsIkFMUEhBIiwiRElHSVQiLCJBTFBIQUJFVCIsIkFMUEhBX0RJR0lUIiwiZ2VuZXJhdGVTdHJpbmciLCJzaXplIiwiYWxwaGFiZXQiLCJpc1NwZWNDb21wbGlhbnRGb3JtIiwidG9KU09OT2JqZWN0Iiwic3RhY2siLCJ2aXNpdCIsInNvdXJjZSIsInRhcmdldCIsInJlZHVjZWRWYWx1ZSIsImlzQXN5bmNGbiIsImlzVGhlbmFibGUiLCJ0aGVuIiwiY2F0Y2giLCJoYXNPd25Qcm9wIiwidXRpbHMiLCJBeGlvc0Vycm9yIiwibWVzc2FnZSIsImNvZGUiLCJjb25maWciLCJyZXF1ZXN0IiwicmVzcG9uc2UiLCJjYXB0dXJlU3RhY2tUcmFjZSIsInRvSlNPTiIsImRlc2NyaXB0aW9uIiwibnVtYmVyIiwiZmlsZU5hbWUiLCJsaW5lTnVtYmVyIiwiY29sdW1uTnVtYmVyIiwic3RhdHVzIiwiZnJvbSIsImVycm9yIiwiY3VzdG9tUHJvcHMiLCJheGlvc0Vycm9yIiwiY2F1c2UiLCJQbGF0Zm9ybUZvcm1EYXRhIiwiaXNWaXNpdGFibGUiLCJyZW1vdmVCcmFja2V0cyIsInJlbmRlcktleSIsImRvdHMiLCJjb25jYXQiLCJlYWNoIiwidG9rZW4iLCJpc0ZsYXRBcnJheSIsInNvbWUiLCJwcmVkaWNhdGVzIiwidGVzdCIsInRvRm9ybURhdGEiLCJmb3JtRGF0YSIsIm9wdGlvbnMiLCJtZXRhVG9rZW5zIiwiaW5kZXhlcyIsImRlZmluZWQiLCJvcHRpb24iLCJ2aXNpdG9yIiwiZGVmYXVsdFZpc2l0b3IiLCJfQmxvYiIsIkJsb2IiLCJ1c2VCbG9iIiwiY29udmVydFZhbHVlIiwidG9JU09TdHJpbmciLCJCdWZmZXIiLCJleHBvc2VkSGVscGVycyIsImJ1aWxkIiwicG9wIiwiZW5jb2RlIiwiY2hhck1hcCIsImVuY29kZVVSSUNvbXBvbmVudCIsIm1hdGNoIiwiQXhpb3NVUkxTZWFyY2hQYXJhbXMiLCJfcGFpcnMiLCJlbmNvZGVyIiwiX2VuY29kZSIsImJ1aWxkVVJMIiwic2VyaWFsaXplRm4iLCJzZXJpYWxpemUiLCJzZXJpYWxpemVkUGFyYW1zIiwiaGFzaG1hcmtJbmRleCIsIkludGVyY2VwdG9yTWFuYWdlciIsImhhbmRsZXJzIiwidXNlIiwiZnVsZmlsbGVkIiwicmVqZWN0ZWQiLCJzeW5jaHJvbm91cyIsInJ1bldoZW4iLCJlamVjdCIsImNsZWFyIiwiZm9yRWFjaEhhbmRsZXIiLCJzaWxlbnRKU09OUGFyc2luZyIsImZvcmNlZEpTT05QYXJzaW5nIiwiY2xhcmlmeVRpbWVvdXRFcnJvciIsIlVSTFNlYXJjaFBhcmFtcyIsImlzQnJvd3NlciIsImNsYXNzZXMiLCJwcm90b2NvbHMiLCJoYXNCcm93c2VyRW52IiwiaGFzU3RhbmRhcmRCcm93c2VyRW52IiwicHJvZHVjdCIsIm5hdmlnYXRvciIsImhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudiIsIldvcmtlckdsb2JhbFNjb3BlIiwiaW1wb3J0U2NyaXB0cyIsInBsYXRmb3JtIiwidG9VUkxFbmNvZGVkRm9ybSIsImhlbHBlcnMiLCJpc05vZGUiLCJwYXJzZVByb3BQYXRoIiwiYXJyYXlUb09iamVjdCIsImZvcm1EYXRhVG9KU09OIiwiYnVpbGRQYXRoIiwiaXNOdW1lcmljS2V5IiwiaXNMYXN0IiwiZW50cmllcyIsInRyYW5zaXRpb25hbERlZmF1bHRzIiwic3RyaW5naWZ5U2FmZWx5IiwicmF3VmFsdWUiLCJwYXJzZXIiLCJwYXJzZSIsImRlZmF1bHRzIiwidHJhbnNpdGlvbmFsIiwiYWRhcHRlciIsInRyYW5zZm9ybVJlcXVlc3QiLCJoZWFkZXJzIiwiY29udGVudFR5cGUiLCJnZXRDb250ZW50VHlwZSIsImhhc0pTT05Db250ZW50VHlwZSIsImlzT2JqZWN0UGF5bG9hZCIsInNldENvbnRlbnRUeXBlIiwiZm9ybVNlcmlhbGl6ZXIiLCJfRm9ybURhdGEiLCJlbnYiLCJ0cmFuc2Zvcm1SZXNwb25zZSIsIkpTT05SZXF1ZXN0ZWQiLCJyZXNwb25zZVR5cGUiLCJzdHJpY3RKU09OUGFyc2luZyIsIkVSUl9CQURfUkVTUE9OU0UiLCJ0aW1lb3V0IiwieHNyZkNvb2tpZU5hbWUiLCJ4c3JmSGVhZGVyTmFtZSIsIm1heENvbnRlbnRMZW5ndGgiLCJtYXhCb2R5TGVuZ3RoIiwidmFsaWRhdGVTdGF0dXMiLCJjb21tb24iLCJpZ25vcmVEdXBsaWNhdGVPZiIsInJhd0hlYWRlcnMiLCJwYXJzZWQiLCJsaW5lIiwicGFyc2VIZWFkZXJzIiwiJGludGVybmFscyIsIm5vcm1hbGl6ZUhlYWRlciIsImhlYWRlciIsIm5vcm1hbGl6ZVZhbHVlIiwicGFyc2VUb2tlbnMiLCJ0b2tlbnMiLCJ0b2tlbnNSRSIsImlzVmFsaWRIZWFkZXJOYW1lIiwibWF0Y2hIZWFkZXJWYWx1ZSIsImlzSGVhZGVyTmFtZUZpbHRlciIsImZvcm1hdEhlYWRlciIsInciLCJjaGFyIiwiYnVpbGRBY2Nlc3NvcnMiLCJhY2Nlc3Nvck5hbWUiLCJtZXRob2ROYW1lIiwiYXJnMSIsImFyZzIiLCJhcmczIiwiY29uZmlndXJhYmxlIiwiQXhpb3NIZWFkZXJzIiwidmFsdWVPclJld3JpdGUiLCJyZXdyaXRlIiwic2V0SGVhZGVyIiwiX3ZhbHVlIiwiX2hlYWRlciIsIl9yZXdyaXRlIiwibEhlYWRlciIsInNldEhlYWRlcnMiLCJtYXRjaGVyIiwiZGVsZXRlIiwiZGVsZXRlZCIsImRlbGV0ZUhlYWRlciIsIm5vcm1hbGl6ZSIsImZvcm1hdCIsIm5vcm1hbGl6ZWQiLCJ0YXJnZXRzIiwiYXNTdHJpbmdzIiwiZmlyc3QiLCJhY2Nlc3NvciIsImludGVybmFscyIsImFjY2Vzc29ycyIsImRlZmluZUFjY2Vzc29yIiwibWFwcGVkIiwiaGVhZGVyVmFsdWUiLCJ0cmFuc2Zvcm1EYXRhIiwiZm5zIiwiaXNDYW5jZWwiLCJfX0NBTkNFTF9fIiwiQ2FuY2VsZWRFcnJvciIsIkVSUl9DQU5DRUxFRCIsInNldHRsZSIsInJlamVjdCIsIkVSUl9CQURfUkVRVUVTVCIsImZsb29yIiwid3JpdGUiLCJleHBpcmVzIiwiZG9tYWluIiwic2VjdXJlIiwiY29va2llIiwiRGF0ZSIsInRvR01UU3RyaW5nIiwicmVhZCIsIlJlZ0V4cCIsImRlY29kZVVSSUNvbXBvbmVudCIsInJlbW92ZSIsIm5vdyIsImlzQWJzb2x1dGVVUkwiLCJjb21iaW5lVVJMcyIsImJhc2VVUkwiLCJyZWxhdGl2ZVVSTCIsImJ1aWxkRnVsbFBhdGgiLCJyZXF1ZXN0ZWRVUkwiLCJzdGFuZGFyZEJyb3dzZXJFbnYiLCJtc2llIiwidXNlckFnZW50IiwidXJsUGFyc2luZ05vZGUiLCJjcmVhdGVFbGVtZW50Iiwib3JpZ2luVVJMIiwicmVzb2x2ZVVSTCIsImhyZWYiLCJzZXRBdHRyaWJ1dGUiLCJwcm90b2NvbCIsImhvc3QiLCJzZWFyY2giLCJoYXNoIiwiaG9zdG5hbWUiLCJwb3J0IiwicGF0aG5hbWUiLCJjaGFyQXQiLCJsb2NhdGlvbiIsImlzVVJMU2FtZU9yaWdpbiIsInJlcXVlc3RVUkwiLCJub25TdGFuZGFyZEJyb3dzZXJFbnYiLCJwYXJzZVByb3RvY29sIiwic3BlZWRvbWV0ZXIiLCJzYW1wbGVzQ291bnQiLCJtaW4iLCJieXRlcyIsInRpbWVzdGFtcHMiLCJoZWFkIiwidGFpbCIsImZpcnN0U2FtcGxlVFMiLCJjaHVua0xlbmd0aCIsInN0YXJ0ZWRBdCIsImJ5dGVzQ291bnQiLCJwYXNzZWQiLCJyb3VuZCIsImNvb2tpZXMiLCJwcm9ncmVzc0V2ZW50UmVkdWNlciIsImxpc3RlbmVyIiwiaXNEb3dubG9hZFN0cmVhbSIsImJ5dGVzTm90aWZpZWQiLCJfc3BlZWRvbWV0ZXIiLCJsb2FkZWQiLCJsZW5ndGhDb21wdXRhYmxlIiwicHJvZ3Jlc3NCeXRlcyIsInJhdGUiLCJpblJhbmdlIiwicHJvZ3Jlc3MiLCJlc3RpbWF0ZWQiLCJpc1hIUkFkYXB0ZXJTdXBwb3J0ZWQiLCJYTUxIdHRwUmVxdWVzdCIsIlByb21pc2UiLCJkaXNwYXRjaFhoclJlcXVlc3QiLCJyZXF1ZXN0RGF0YSIsInJlcXVlc3RIZWFkZXJzIiwid2l0aFhTUkZUb2tlbiIsIm9uQ2FuY2VsZWQiLCJjYW5jZWxUb2tlbiIsInVuc3Vic2NyaWJlIiwic2lnbmFsIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImF1dGgiLCJ1c2VybmFtZSIsInBhc3N3b3JkIiwidW5lc2NhcGUiLCJidG9hIiwiZnVsbFBhdGgiLCJvcGVuIiwicGFyYW1zU2VyaWFsaXplciIsIm9ubG9hZGVuZCIsInJlc3BvbnNlSGVhZGVycyIsImdldEFsbFJlc3BvbnNlSGVhZGVycyIsInJlc3BvbnNlRGF0YSIsInJlc3BvbnNlVGV4dCIsInN0YXR1c1RleHQiLCJfcmVzb2x2ZSIsIl9yZWplY3QiLCJlcnIiLCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCJoYW5kbGVMb2FkIiwicmVhZHlTdGF0ZSIsInJlc3BvbnNlVVJMIiwic2V0VGltZW91dCIsIm9uYWJvcnQiLCJoYW5kbGVBYm9ydCIsIkVDT05OQUJPUlRFRCIsIm9uZXJyb3IiLCJoYW5kbGVFcnJvciIsIkVSUl9ORVRXT1JLIiwib250aW1lb3V0IiwiaGFuZGxlVGltZW91dCIsInRpbWVvdXRFcnJvck1lc3NhZ2UiLCJFVElNRURPVVQiLCJ4c3JmVmFsdWUiLCJzZXRSZXF1ZXN0SGVhZGVyIiwid2l0aENyZWRlbnRpYWxzIiwib25Eb3dubG9hZFByb2dyZXNzIiwiYWRkRXZlbnRMaXN0ZW5lciIsIm9uVXBsb2FkUHJvZ3Jlc3MiLCJ1cGxvYWQiLCJjYW5jZWwiLCJhYm9ydCIsInN1YnNjcmliZSIsImFib3J0ZWQiLCJzZW5kIiwiaHR0cEFkYXB0ZXIiLCJ4aHJBZGFwdGVyIiwia25vd25BZGFwdGVycyIsInhociIsInJlbmRlclJlYXNvbiIsInJlYXNvbiIsImlzUmVzb2x2ZWRIYW5kbGUiLCJnZXRBZGFwdGVyIiwiYWRhcHRlcnMiLCJuYW1lT3JBZGFwdGVyIiwicmVqZWN0ZWRSZWFzb25zIiwicmVhc29ucyIsInN0YXRlIiwidGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZCIsInRocm93SWZSZXF1ZXN0ZWQiLCJkaXNwYXRjaFJlcXVlc3QiLCJvbkFkYXB0ZXJSZXNvbHV0aW9uIiwib25BZGFwdGVyUmVqZWN0aW9uIiwiaGVhZGVyc1RvT2JqZWN0IiwibWVyZ2VDb25maWciLCJjb25maWcxIiwiY29uZmlnMiIsImdldE1lcmdlZFZhbHVlIiwibWVyZ2VEZWVwUHJvcGVydGllcyIsInZhbHVlRnJvbUNvbmZpZzIiLCJkZWZhdWx0VG9Db25maWcyIiwibWVyZ2VEaXJlY3RLZXlzIiwibWVyZ2VNYXAiLCJ0aW1lb3V0TWVzc2FnZSIsImRlY29tcHJlc3MiLCJiZWZvcmVSZWRpcmVjdCIsInRyYW5zcG9ydCIsImh0dHBBZ2VudCIsImh0dHBzQWdlbnQiLCJzb2NrZXRQYXRoIiwicmVzcG9uc2VFbmNvZGluZyIsImNvbXB1dGVDb25maWdWYWx1ZSIsImNvbmZpZ1ZhbHVlIiwiVkVSU0lPTiIsInZhbGlkYXRvcnMiLCJ2YWxpZGF0b3IiLCJkZXByZWNhdGVkV2FybmluZ3MiLCJ2ZXJzaW9uIiwiZm9ybWF0TWVzc2FnZSIsIm9wdCIsImRlc2MiLCJvcHRzIiwiRVJSX0RFUFJFQ0FURUQiLCJjb25zb2xlIiwid2FybiIsImFzc2VydE9wdGlvbnMiLCJzY2hlbWEiLCJhbGxvd1Vua25vd24iLCJFUlJfQkFEX09QVElPTl9WQUxVRSIsIkVSUl9CQURfT1BUSU9OIiwiQXhpb3MiLCJpbnN0YW5jZUNvbmZpZyIsImludGVyY2VwdG9ycyIsImNvbmZpZ09yVXJsIiwiX3JlcXVlc3QiLCJkdW1teSIsImJvb2xlYW4iLCJmdW5jdGlvbiIsImNvbnRleHRIZWFkZXJzIiwicmVxdWVzdEludGVyY2VwdG9yQ2hhaW4iLCJzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMiLCJ1bnNoaWZ0UmVxdWVzdEludGVyY2VwdG9ycyIsImludGVyY2VwdG9yIiwidW5zaGlmdCIsInJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbiIsInB1c2hSZXNwb25zZUludGVyY2VwdG9ycyIsInByb21pc2UiLCJjaGFpbiIsIm5ld0NvbmZpZyIsIm9uRnVsZmlsbGVkIiwib25SZWplY3RlZCIsImdldFVyaSIsImZvckVhY2hNZXRob2ROb0RhdGEiLCJmb3JFYWNoTWV0aG9kV2l0aERhdGEiLCJnZW5lcmF0ZUhUVFBNZXRob2QiLCJpc0Zvcm0iLCJodHRwTWV0aG9kIiwiQ2FuY2VsVG9rZW4iLCJleGVjdXRvciIsInJlc29sdmVQcm9taXNlIiwicHJvbWlzZUV4ZWN1dG9yIiwiX2xpc3RlbmVycyIsIm9uZnVsZmlsbGVkIiwic3BsaWNlIiwiYyIsInNwcmVhZCIsImNhbGxiYWNrIiwiaXNBeGlvc0Vycm9yIiwicGF5bG9hZCIsIkh0dHBTdGF0dXNDb2RlIiwiQ29udGludWUiLCJTd2l0Y2hpbmdQcm90b2NvbHMiLCJQcm9jZXNzaW5nIiwiRWFybHlIaW50cyIsIk9rIiwiQ3JlYXRlZCIsIkFjY2VwdGVkIiwiTm9uQXV0aG9yaXRhdGl2ZUluZm9ybWF0aW9uIiwiTm9Db250ZW50IiwiUmVzZXRDb250ZW50IiwiUGFydGlhbENvbnRlbnQiLCJNdWx0aVN0YXR1cyIsIkFscmVhZHlSZXBvcnRlZCIsIkltVXNlZCIsIk11bHRpcGxlQ2hvaWNlcyIsIk1vdmVkUGVybWFuZW50bHkiLCJGb3VuZCIsIlNlZU90aGVyIiwiTm90TW9kaWZpZWQiLCJVc2VQcm94eSIsIlVudXNlZCIsIlRlbXBvcmFyeVJlZGlyZWN0IiwiUGVybWFuZW50UmVkaXJlY3QiLCJCYWRSZXF1ZXN0IiwiVW5hdXRob3JpemVkIiwiUGF5bWVudFJlcXVpcmVkIiwiRm9yYmlkZGVuIiwiTm90Rm91bmQiLCJNZXRob2ROb3RBbGxvd2VkIiwiTm90QWNjZXB0YWJsZSIsIlByb3h5QXV0aGVudGljYXRpb25SZXF1aXJlZCIsIlJlcXVlc3RUaW1lb3V0IiwiQ29uZmxpY3QiLCJHb25lIiwiTGVuZ3RoUmVxdWlyZWQiLCJQcmVjb25kaXRpb25GYWlsZWQiLCJQYXlsb2FkVG9vTGFyZ2UiLCJVcmlUb29Mb25nIiwiVW5zdXBwb3J0ZWRNZWRpYVR5cGUiLCJSYW5nZU5vdFNhdGlzZmlhYmxlIiwiRXhwZWN0YXRpb25GYWlsZWQiLCJJbUFUZWFwb3QiLCJNaXNkaXJlY3RlZFJlcXVlc3QiLCJVbnByb2Nlc3NhYmxlRW50aXR5IiwiTG9ja2VkIiwiRmFpbGVkRGVwZW5kZW5jeSIsIlRvb0Vhcmx5IiwiVXBncmFkZVJlcXVpcmVkIiwiUHJlY29uZGl0aW9uUmVxdWlyZWQiLCJUb29NYW55UmVxdWVzdHMiLCJSZXF1ZXN0SGVhZGVyRmllbGRzVG9vTGFyZ2UiLCJVbmF2YWlsYWJsZUZvckxlZ2FsUmVhc29ucyIsIkludGVybmFsU2VydmVyRXJyb3IiLCJOb3RJbXBsZW1lbnRlZCIsIkJhZEdhdGV3YXkiLCJTZXJ2aWNlVW5hdmFpbGFibGUiLCJHYXRld2F5VGltZW91dCIsIkh0dHBWZXJzaW9uTm90U3VwcG9ydGVkIiwiVmFyaWFudEFsc29OZWdvdGlhdGVzIiwiSW5zdWZmaWNpZW50U3RvcmFnZSIsIkxvb3BEZXRlY3RlZCIsIk5vdEV4dGVuZGVkIiwiTmV0d29ya0F1dGhlbnRpY2F0aW9uUmVxdWlyZWQiLCJjcmVhdGVJbnN0YW5jZSIsImRlZmF1bHRDb25maWciLCJpbnN0YW5jZSIsImF4aW9zIiwiQ2FuY2VsIiwiYWxsIiwicHJvbWlzZXMiLCJmb3JtVG9KU09OIiwiX2NsYXNzUHJpdmF0ZUZpZWxkU2V0IiwiX2NsYXNzUHJpdmF0ZUZpZWxkR2V0IiwiX2F4aW9zIiwiV2Vha01hcCIsIl9yZXF1ZXN0Q291bnQiLCJfbG9hZGluZ0luc3RhbmNlIiwiX2NvbmZpZyIsIkh0dHAiLCJzdWNjZXNzQ29kZSIsImVycm9yQ29kZSIsImNhbGxCYWNrQ29kZSIsImsiLCJfdGhpcyRyZXF1ZXN0Q291bnQiLCJfdGhpcyRyZXF1ZXN0Q291bnQyIiwibG9hZGluZyIsImF1dGhvcml6YXRpb24iLCJsb2NhbFN0b3JhZ2UiLCJfdGhpcyRyZXF1ZXN0Q291bnQzIiwiX3RoaXMkcmVxdWVzdENvdW50NCIsImNsb3NlIiwiX3RoaXMkcmVxdWVzdENvdW50NSIsIl90aGlzJHJlcXVlc3RDb3VudDYiLCJfaGFuZGxlUmVzdWx0Iiwic3VjY2VzcyIsIm1zZyIsInVwZGF0ZSIsImRvd25Mb2FkIiwiYmxvYiIsImxpbmsiLCJkaXNwbGF5IiwiVVJMIiwiY3JlYXRlT2JqZWN0VVJMIiwiZG93bmxvYWQiLCJyZXZva2VPYmplY3RVUkwiLCJyZXF1aXJlIiwiUGFnaW5hdGlvbiIsIlBhZ2VUYWJsZSIsIkRpYWxvZyIsIkNhcmQiLCJUcmVlIiwiX0h0dHAiLCJjb21zIiwiaW5zdGFsbCIsImNvbSIsImNvbXBvbmVudCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///964\n");
27
27
 
28
28
  /***/ }),
29
29
 
@@ -2007,7 +2007,7 @@ eval("\nvar DESCRIPTORS = __webpack_require__(3724);\nvar uncurryThis = __webpac
2007
2007
  /******/ // startup
2008
2008
  /******/ // Load entry module and return exports
2009
2009
  /******/ // This entry module can't be inlined because the eval-source-map devtool is used.
2010
- /******/ var __webpack_exports__ = __webpack_require__(9600);
2010
+ /******/ var __webpack_exports__ = __webpack_require__(964);
2011
2011
  /******/
2012
2012
  /******/ return __webpack_exports__;
2013
2013
  /******/ })()