mirror of
https://github.com/tenrok/vue-context.git
synced 2026-06-13 01:42:24 +03:00
202 lines
1.6 MiB
Plaintext
202 lines
1.6 MiB
Plaintext
/******/ (function(modules) { // webpackBootstrap
|
||
/******/ // The module cache
|
||
/******/ var installedModules = {};
|
||
/******/
|
||
/******/ // The require function
|
||
/******/ function __webpack_require__(moduleId) {
|
||
/******/
|
||
/******/ // Check if module is in cache
|
||
/******/ if(installedModules[moduleId]) {
|
||
/******/ return installedModules[moduleId].exports;
|
||
/******/ }
|
||
/******/ // Create a new module (and put it into the cache)
|
||
/******/ var module = installedModules[moduleId] = {
|
||
/******/ i: moduleId,
|
||
/******/ l: false,
|
||
/******/ exports: {}
|
||
/******/ };
|
||
/******/
|
||
/******/ // Execute the module function
|
||
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
|
||
/******/
|
||
/******/ // Flag the module as loaded
|
||
/******/ module.l = true;
|
||
/******/
|
||
/******/ // Return the exports of the module
|
||
/******/ return module.exports;
|
||
/******/ }
|
||
/******/
|
||
/******/
|
||
/******/ // expose the modules object (__webpack_modules__)
|
||
/******/ __webpack_require__.m = modules;
|
||
/******/
|
||
/******/ // expose the module cache
|
||
/******/ __webpack_require__.c = installedModules;
|
||
/******/
|
||
/******/ // define getter function for harmony exports
|
||
/******/ __webpack_require__.d = function(exports, name, getter) {
|
||
/******/ if(!__webpack_require__.o(exports, name)) {
|
||
/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
|
||
/******/ }
|
||
/******/ };
|
||
/******/
|
||
/******/ // define __esModule on exports
|
||
/******/ __webpack_require__.r = function(exports) {
|
||
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
|
||
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
||
/******/ }
|
||
/******/ Object.defineProperty(exports, '__esModule', { value: true });
|
||
/******/ };
|
||
/******/
|
||
/******/ // create a fake namespace object
|
||
/******/ // mode & 1: value is a module id, require it
|
||
/******/ // mode & 2: merge all properties of value into the ns
|
||
/******/ // mode & 4: return value when already ns object
|
||
/******/ // mode & 8|1: behave like require
|
||
/******/ __webpack_require__.t = function(value, mode) {
|
||
/******/ if(mode & 1) value = __webpack_require__(value);
|
||
/******/ if(mode & 8) return value;
|
||
/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
|
||
/******/ var ns = Object.create(null);
|
||
/******/ __webpack_require__.r(ns);
|
||
/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
|
||
/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
|
||
/******/ return ns;
|
||
/******/ };
|
||
/******/
|
||
/******/ // getDefaultExport function for compatibility with non-harmony modules
|
||
/******/ __webpack_require__.n = function(module) {
|
||
/******/ var getter = module && module.__esModule ?
|
||
/******/ function getDefault() { return module['default']; } :
|
||
/******/ function getModuleExports() { return module; };
|
||
/******/ __webpack_require__.d(getter, 'a', getter);
|
||
/******/ return getter;
|
||
/******/ };
|
||
/******/
|
||
/******/ // Object.prototype.hasOwnProperty.call
|
||
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
|
||
/******/
|
||
/******/ // __webpack_public_path__
|
||
/******/ __webpack_require__.p = "/";
|
||
/******/
|
||
/******/
|
||
/******/ // Load entry module and return exports
|
||
/******/ return __webpack_require__(__webpack_require__.s = 0);
|
||
/******/ })
|
||
/************************************************************************/
|
||
/******/ ({
|
||
|
||
/***/ "./dist/vue-context.js":
|
||
/*!*****************************!*\
|
||
!*** ./dist/vue-context.js ***!
|
||
\*****************************/
|
||
/*! no static exports found */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
eval("/* WEBPACK VAR INJECTION */(function(module) {var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n!function (e, t) {\n if (\"object\" == ( false ? undefined : _typeof(exports)) && \"object\" == ( false ? undefined : _typeof(module))) module.exports = t();else if (true) !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_FACTORY__ = (t),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));else { var r, n; }\n}(window, function () {\n return function (e) {\n var t = {};\n\n function n(r) {\n if (t[r]) return t[r].exports;\n var i = t[r] = {\n i: r,\n l: !1,\n exports: {}\n };\n return e[r].call(i.exports, i, i.exports, n), i.l = !0, i.exports;\n }\n\n return n.m = e, n.c = t, n.d = function (e, t, r) {\n n.o(e, t) || Object.defineProperty(e, t, {\n enumerable: !0,\n get: r\n });\n }, n.r = function (e) {\n \"undefined\" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(e, Symbol.toStringTag, {\n value: \"Module\"\n }), Object.defineProperty(e, \"__esModule\", {\n value: !0\n });\n }, n.t = function (e, t) {\n if (1 & t && (e = n(e)), 8 & t) return e;\n if (4 & t && \"object\" == _typeof(e) && e && e.__esModule) return e;\n var r = Object.create(null);\n if (n.r(r), Object.defineProperty(r, \"default\", {\n enumerable: !0,\n value: e\n }), 2 & t && \"string\" != typeof e) for (var i in e) {\n n.d(r, i, function (t) {\n return e[t];\n }.bind(null, i));\n }\n return r;\n }, n.n = function (e) {\n var t = e && e.__esModule ? function () {\n return e[\"default\"];\n } : function () {\n return e;\n };\n return n.d(t, \"a\", t), t;\n }, n.o = function (e, t) {\n return Object.prototype.hasOwnProperty.call(e, t);\n }, n.p = \"/\", n(n.s = 3);\n }([function (e, t, n) {\n var r = n(10);\n \"string\" == typeof r && (r = [[e.i, r, \"\"]]);\n var i = {\n hmr: !0,\n transform: void 0,\n insertInto: void 0\n };\n n(12)(r, i);\n r.locals && (e.exports = r.locals);\n }, function (e, t) {\n var n;\n\n n = function () {\n return this;\n }();\n\n try {\n n = n || new Function(\"return this\")();\n } catch (e) {\n \"object\" == (typeof window === \"undefined\" ? \"undefined\" : _typeof(window)) && (n = window);\n }\n\n e.exports = n;\n }, function (e, t, n) {\n \"use strict\";\n\n var r = n(4);\n r = \"default\" in r ? r[\"default\"] : r;\n /^2\\./.test(r.version) || r.util.warn(\"VueClickaway 2.2.2 only supports Vue 2.x, and does not support Vue \" + r.version);\n var i = \"_vue_clickaway_handler\";\n\n function o(e, t, n) {\n a(e);\n var r = n.context,\n o = t.value;\n\n if (\"function\" == typeof o) {\n var s = !1;\n setTimeout(function () {\n s = !0;\n }, 0), e[i] = function (t) {\n var n = t.path || (t.composedPath ? t.composedPath() : void 0);\n if (s && (n ? n.indexOf(e) < 0 : !e.contains(t.target))) return o.call(r, t);\n }, document.documentElement.addEventListener(\"click\", e[i], !1);\n }\n }\n\n function a(e) {\n document.documentElement.removeEventListener(\"click\", e[i], !1), delete e[i];\n }\n\n var s = {\n bind: o,\n update: function update(e, t) {\n t.value !== t.oldValue && o(e, t);\n },\n unbind: a\n },\n c = {\n directives: {\n onClickaway: s\n }\n };\n t.version = \"2.2.2\", t.directive = s, t.mixin = c;\n }, function (e, t, n) {\n e.exports = n(14);\n }, function (e, t, n) {\n e.exports = n(5);\n }, function (e, t, n) {\n \"use strict\";\n\n (function (t, n) {\n var r = Object.freeze({});\n\n function i(e) {\n return null == e;\n }\n\n function o(e) {\n return null != e;\n }\n\n function a(e) {\n return !0 === e;\n }\n\n function s(e) {\n return \"string\" == typeof e || \"number\" == typeof e || \"symbol\" == _typeof(e) || \"boolean\" == typeof e;\n }\n\n function c(e) {\n return null !== e && \"object\" == _typeof(e);\n }\n\n var u = Object.prototype.toString;\n\n function l(e) {\n return \"[object Object]\" === u.call(e);\n }\n\n function f(e) {\n var t = parseFloat(String(e));\n return t >= 0 && Math.floor(t) === t && isFinite(e);\n }\n\n function d(e) {\n return o(e) && \"function\" == typeof e.then && \"function\" == typeof e[\"catch\"];\n }\n\n function p(e) {\n return null == e ? \"\" : Array.isArray(e) || l(e) && e.toString === u ? JSON.stringify(e, null, 2) : String(e);\n }\n\n function v(e) {\n var t = parseFloat(e);\n return isNaN(t) ? e : t;\n }\n\n function h(e, t) {\n for (var n = Object.create(null), r = e.split(\",\"), i = 0; i < r.length; i++) {\n n[r[i]] = !0;\n }\n\n return t ? function (e) {\n return n[e.toLowerCase()];\n } : function (e) {\n return n[e];\n };\n }\n\n var m = h(\"slot,component\", !0),\n y = h(\"key,ref,slot,slot-scope,is\");\n\n function g(e, t) {\n if (e.length) {\n var n = e.indexOf(t);\n if (n > -1) return e.splice(n, 1);\n }\n }\n\n var _ = Object.prototype.hasOwnProperty;\n\n function b(e, t) {\n return _.call(e, t);\n }\n\n function w(e) {\n var t = Object.create(null);\n return function (n) {\n return t[n] || (t[n] = e(n));\n };\n }\n\n var $ = /-(\\w)/g,\n x = w(function (e) {\n return e.replace($, function (e, t) {\n return t ? t.toUpperCase() : \"\";\n });\n }),\n C = w(function (e) {\n return e.charAt(0).toUpperCase() + e.slice(1);\n }),\n k = /\\B([A-Z])/g,\n A = w(function (e) {\n return e.replace(k, \"-$1\").toLowerCase();\n }),\n O = Function.prototype.bind ? function (e, t) {\n return e.bind(t);\n } : function (e, t) {\n function n(n) {\n var r = arguments.length;\n return r ? r > 1 ? e.apply(t, arguments) : e.call(t, n) : e.call(t);\n }\n\n return n._length = e.length, n;\n };\n\n function S(e, t) {\n t = t || 0;\n\n for (var n = e.length - t, r = new Array(n); n--;) {\n r[n] = e[n + t];\n }\n\n return r;\n }\n\n function T(e, t) {\n for (var n in t) {\n e[n] = t[n];\n }\n\n return e;\n }\n\n function E(e) {\n for (var t = {}, n = 0; n < e.length; n++) {\n e[n] && T(t, e[n]);\n }\n\n return t;\n }\n\n function j(e, t, n) {}\n\n var L = function L(e, t, n) {\n return !1;\n },\n I = function I(e) {\n return e;\n };\n\n function N(e, t) {\n if (e === t) return !0;\n var n = c(e),\n r = c(t);\n if (!n || !r) return !n && !r && String(e) === String(t);\n\n try {\n var i = Array.isArray(e),\n o = Array.isArray(t);\n if (i && o) return e.length === t.length && e.every(function (e, n) {\n return N(e, t[n]);\n });\n if (e instanceof Date && t instanceof Date) return e.getTime() === t.getTime();\n if (i || o) return !1;\n var a = Object.keys(e),\n s = Object.keys(t);\n return a.length === s.length && a.every(function (n) {\n return N(e[n], t[n]);\n });\n } catch (e) {\n return !1;\n }\n }\n\n function M(e, t) {\n for (var n = 0; n < e.length; n++) {\n if (N(e[n], t)) return n;\n }\n\n return -1;\n }\n\n function D(e) {\n var t = !1;\n return function () {\n t || (t = !0, e.apply(this, arguments));\n };\n }\n\n var F = \"data-server-rendered\",\n P = [\"component\", \"directive\", \"filter\"],\n R = [\"beforeCreate\", \"created\", \"beforeMount\", \"mounted\", \"beforeUpdate\", \"updated\", \"beforeDestroy\", \"destroyed\", \"activated\", \"deactivated\", \"errorCaptured\", \"serverPrefetch\"],\n U = {\n optionMergeStrategies: Object.create(null),\n silent: !1,\n productionTip: !1,\n devtools: !1,\n performance: !1,\n errorHandler: null,\n warnHandler: null,\n ignoredElements: [],\n keyCodes: Object.create(null),\n isReservedTag: L,\n isReservedAttr: L,\n isUnknownElement: L,\n getTagNamespace: j,\n parsePlatformTagName: I,\n mustUseProp: L,\n async: !0,\n _lifecycleHooks: R\n },\n B = /a-zA-Z\\u00B7\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u203F-\\u2040\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD/;\n\n function H(e, t, n, r) {\n Object.defineProperty(e, t, {\n value: n,\n enumerable: !!r,\n writable: !0,\n configurable: !0\n });\n }\n\n var V,\n z = new RegExp(\"[^\" + B.source + \".$_\\\\d]\"),\n J = \"__proto__\" in {},\n K = \"undefined\" != typeof window,\n q = \"undefined\" != typeof WXEnvironment && !!WXEnvironment.platform,\n W = q && WXEnvironment.platform.toLowerCase(),\n G = K && window.navigator.userAgent.toLowerCase(),\n X = G && /msie|trident/.test(G),\n Z = G && G.indexOf(\"msie 9.0\") > 0,\n Y = G && G.indexOf(\"edge/\") > 0,\n Q = (G && G.indexOf(\"android\"), G && /iphone|ipad|ipod|ios/.test(G) || \"ios\" === W),\n ee = (G && /chrome\\/\\d+/.test(G), G && /phantomjs/.test(G), G && G.match(/firefox\\/(\\d+)/)),\n te = {}.watch,\n ne = !1;\n if (K) try {\n var re = {};\n Object.defineProperty(re, \"passive\", {\n get: function get() {\n ne = !0;\n }\n }), window.addEventListener(\"test-passive\", null, re);\n } catch (r) {}\n\n var ie = function ie() {\n return void 0 === V && (V = !K && !q && void 0 !== t && t.process && \"server\" === t.process.env.VUE_ENV), V;\n },\n oe = K && window.__VUE_DEVTOOLS_GLOBAL_HOOK__;\n\n function ae(e) {\n return \"function\" == typeof e && /native code/.test(e.toString());\n }\n\n var se,\n ce = \"undefined\" != typeof Symbol && ae(Symbol) && \"undefined\" != typeof Reflect && ae(Reflect.ownKeys);\n se = \"undefined\" != typeof Set && ae(Set) ? Set : function () {\n function e() {\n this.set = Object.create(null);\n }\n\n return e.prototype.has = function (e) {\n return !0 === this.set[e];\n }, e.prototype.add = function (e) {\n this.set[e] = !0;\n }, e.prototype.clear = function () {\n this.set = Object.create(null);\n }, e;\n }();\n\n var ue = j,\n le = 0,\n fe = function fe() {\n this.id = le++, this.subs = [];\n };\n\n fe.prototype.addSub = function (e) {\n this.subs.push(e);\n }, fe.prototype.removeSub = function (e) {\n g(this.subs, e);\n }, fe.prototype.depend = function () {\n fe.target && fe.target.addDep(this);\n }, fe.prototype.notify = function () {\n for (var e = this.subs.slice(), t = 0, n = e.length; t < n; t++) {\n e[t].update();\n }\n }, fe.target = null;\n var de = [];\n\n function pe(e) {\n de.push(e), fe.target = e;\n }\n\n function ve() {\n de.pop(), fe.target = de[de.length - 1];\n }\n\n var he = function he(e, t, n, r, i, o, a, s) {\n this.tag = e, this.data = t, this.children = n, this.text = r, this.elm = i, this.ns = void 0, this.context = o, this.fnContext = void 0, this.fnOptions = void 0, this.fnScopeId = void 0, this.key = t && t.key, this.componentOptions = a, this.componentInstance = void 0, this.parent = void 0, this.raw = !1, this.isStatic = !1, this.isRootInsert = !0, this.isComment = !1, this.isCloned = !1, this.isOnce = !1, this.asyncFactory = s, this.asyncMeta = void 0, this.isAsyncPlaceholder = !1;\n },\n me = {\n child: {\n configurable: !0\n }\n };\n\n me.child.get = function () {\n return this.componentInstance;\n }, Object.defineProperties(he.prototype, me);\n\n var ye = function ye(e) {\n void 0 === e && (e = \"\");\n var t = new he();\n return t.text = e, t.isComment = !0, t;\n };\n\n function ge(e) {\n return new he(void 0, void 0, void 0, String(e));\n }\n\n function _e(e) {\n var t = new he(e.tag, e.data, e.children && e.children.slice(), e.text, e.elm, e.context, e.componentOptions, e.asyncFactory);\n return t.ns = e.ns, t.isStatic = e.isStatic, t.key = e.key, t.isComment = e.isComment, t.fnContext = e.fnContext, t.fnOptions = e.fnOptions, t.fnScopeId = e.fnScopeId, t.asyncMeta = e.asyncMeta, t.isCloned = !0, t;\n }\n\n var be = Array.prototype,\n we = Object.create(be);\n [\"push\", \"pop\", \"shift\", \"unshift\", \"splice\", \"sort\", \"reverse\"].forEach(function (e) {\n var t = be[e];\n H(we, e, function () {\n for (var n = [], r = arguments.length; r--;) {\n n[r] = arguments[r];\n }\n\n var i,\n o = t.apply(this, n),\n a = this.__ob__;\n\n switch (e) {\n case \"push\":\n case \"unshift\":\n i = n;\n break;\n\n case \"splice\":\n i = n.slice(2);\n }\n\n return i && a.observeArray(i), a.dep.notify(), o;\n });\n });\n var $e = Object.getOwnPropertyNames(we),\n xe = !0;\n\n function Ce(e) {\n xe = e;\n }\n\n var ke = function ke(e) {\n var t;\n this.value = e, this.dep = new fe(), this.vmCount = 0, H(e, \"__ob__\", this), Array.isArray(e) ? (J ? (t = we, e.__proto__ = t) : function (e, t, n) {\n for (var r = 0, i = n.length; r < i; r++) {\n var o = n[r];\n H(e, o, t[o]);\n }\n }(e, we, $e), this.observeArray(e)) : this.walk(e);\n };\n\n function Ae(e, t) {\n var n;\n if (c(e) && !(e instanceof he)) return b(e, \"__ob__\") && e.__ob__ instanceof ke ? n = e.__ob__ : xe && !ie() && (Array.isArray(e) || l(e)) && Object.isExtensible(e) && !e._isVue && (n = new ke(e)), t && n && n.vmCount++, n;\n }\n\n function Oe(e, t, n, r, i) {\n var o = new fe(),\n a = Object.getOwnPropertyDescriptor(e, t);\n\n if (!a || !1 !== a.configurable) {\n var s = a && a.get,\n c = a && a.set;\n s && !c || 2 !== arguments.length || (n = e[t]);\n var u = !i && Ae(n);\n Object.defineProperty(e, t, {\n enumerable: !0,\n configurable: !0,\n get: function get() {\n var t = s ? s.call(e) : n;\n return fe.target && (o.depend(), u && (u.dep.depend(), Array.isArray(t) && function e(t) {\n for (var n = void 0, r = 0, i = t.length; r < i; r++) {\n (n = t[r]) && n.__ob__ && n.__ob__.dep.depend(), Array.isArray(n) && e(n);\n }\n }(t))), t;\n },\n set: function set(t) {\n var r = s ? s.call(e) : n;\n t === r || t != t && r != r || s && !c || (c ? c.call(e, t) : n = t, u = !i && Ae(t), o.notify());\n }\n });\n }\n }\n\n function Se(e, t, n) {\n if (Array.isArray(e) && f(t)) return e.length = Math.max(e.length, t), e.splice(t, 1, n), n;\n if (t in e && !(t in Object.prototype)) return e[t] = n, n;\n var r = e.__ob__;\n return e._isVue || r && r.vmCount ? n : r ? (Oe(r.value, t, n), r.dep.notify(), n) : (e[t] = n, n);\n }\n\n function Te(e, t) {\n if (Array.isArray(e) && f(t)) e.splice(t, 1);else {\n var n = e.__ob__;\n e._isVue || n && n.vmCount || b(e, t) && (delete e[t], n && n.dep.notify());\n }\n }\n\n ke.prototype.walk = function (e) {\n for (var t = Object.keys(e), n = 0; n < t.length; n++) {\n Oe(e, t[n]);\n }\n }, ke.prototype.observeArray = function (e) {\n for (var t = 0, n = e.length; t < n; t++) {\n Ae(e[t]);\n }\n };\n var Ee = U.optionMergeStrategies;\n\n function je(e, t) {\n if (!t) return e;\n\n for (var n, r, i, o = ce ? Reflect.ownKeys(t) : Object.keys(t), a = 0; a < o.length; a++) {\n \"__ob__\" !== (n = o[a]) && (r = e[n], i = t[n], b(e, n) ? r !== i && l(r) && l(i) && je(r, i) : Se(e, n, i));\n }\n\n return e;\n }\n\n function Le(e, t, n) {\n return n ? function () {\n var r = \"function\" == typeof t ? t.call(n, n) : t,\n i = \"function\" == typeof e ? e.call(n, n) : e;\n return r ? je(r, i) : i;\n } : t ? e ? function () {\n return je(\"function\" == typeof t ? t.call(this, this) : t, \"function\" == typeof e ? e.call(this, this) : e);\n } : t : e;\n }\n\n function Ie(e, t) {\n var n = t ? e ? e.concat(t) : Array.isArray(t) ? t : [t] : e;\n return n ? function (e) {\n for (var t = [], n = 0; n < e.length; n++) {\n -1 === t.indexOf(e[n]) && t.push(e[n]);\n }\n\n return t;\n }(n) : n;\n }\n\n function Ne(e, t, n, r) {\n var i = Object.create(e || null);\n return t ? T(i, t) : i;\n }\n\n Ee.data = function (e, t, n) {\n return n ? Le(e, t, n) : t && \"function\" != typeof t ? e : Le(e, t);\n }, R.forEach(function (e) {\n Ee[e] = Ie;\n }), P.forEach(function (e) {\n Ee[e + \"s\"] = Ne;\n }), Ee.watch = function (e, t, n, r) {\n if (e === te && (e = void 0), t === te && (t = void 0), !t) return Object.create(e || null);\n if (!e) return t;\n var i = {};\n\n for (var o in T(i, e), t) {\n var a = i[o],\n s = t[o];\n a && !Array.isArray(a) && (a = [a]), i[o] = a ? a.concat(s) : Array.isArray(s) ? s : [s];\n }\n\n return i;\n }, Ee.props = Ee.methods = Ee.inject = Ee.computed = function (e, t, n, r) {\n if (!e) return t;\n var i = Object.create(null);\n return T(i, e), t && T(i, t), i;\n }, Ee.provide = Le;\n\n var Me = function Me(e, t) {\n return void 0 === t ? e : t;\n };\n\n function De(e, t, n) {\n if (\"function\" == typeof t && (t = t.options), function (e, t) {\n var n = e.props;\n\n if (n) {\n var r,\n i,\n o = {};\n if (Array.isArray(n)) for (r = n.length; r--;) {\n \"string\" == typeof (i = n[r]) && (o[x(i)] = {\n type: null\n });\n } else if (l(n)) for (var a in n) {\n i = n[a], o[x(a)] = l(i) ? i : {\n type: i\n };\n }\n e.props = o;\n }\n }(t), function (e, t) {\n var n = e.inject;\n\n if (n) {\n var r = e.inject = {};\n if (Array.isArray(n)) for (var i = 0; i < n.length; i++) {\n r[n[i]] = {\n from: n[i]\n };\n } else if (l(n)) for (var o in n) {\n var a = n[o];\n r[o] = l(a) ? T({\n from: o\n }, a) : {\n from: a\n };\n }\n }\n }(t), function (e) {\n var t = e.directives;\n if (t) for (var n in t) {\n var r = t[n];\n \"function\" == typeof r && (t[n] = {\n bind: r,\n update: r\n });\n }\n }(t), !t._base && (t[\"extends\"] && (e = De(e, t[\"extends\"], n)), t.mixins)) for (var r = 0, i = t.mixins.length; r < i; r++) {\n e = De(e, t.mixins[r], n);\n }\n var o,\n a = {};\n\n for (o in e) {\n s(o);\n }\n\n for (o in t) {\n b(e, o) || s(o);\n }\n\n function s(r) {\n var i = Ee[r] || Me;\n a[r] = i(e[r], t[r], n, r);\n }\n\n return a;\n }\n\n function Fe(e, t, n, r) {\n if (\"string\" == typeof n) {\n var i = e[t];\n if (b(i, n)) return i[n];\n var o = x(n);\n if (b(i, o)) return i[o];\n var a = C(o);\n return b(i, a) ? i[a] : i[n] || i[o] || i[a];\n }\n }\n\n function Pe(e, t, n, r) {\n var i = t[e],\n o = !b(n, e),\n a = n[e],\n s = Be(Boolean, i.type);\n if (s > -1) if (o && !b(i, \"default\")) a = !1;else if (\"\" === a || a === A(e)) {\n var c = Be(String, i.type);\n (c < 0 || s < c) && (a = !0);\n }\n\n if (void 0 === a) {\n a = function (e, t, n) {\n if (b(t, \"default\")) {\n var r = t[\"default\"];\n return e && e.$options.propsData && void 0 === e.$options.propsData[n] && void 0 !== e._props[n] ? e._props[n] : \"function\" == typeof r && \"Function\" !== Re(t.type) ? r.call(e) : r;\n }\n }(r, i, e);\n\n var u = xe;\n Ce(!0), Ae(a), Ce(u);\n }\n\n return a;\n }\n\n function Re(e) {\n var t = e && e.toString().match(/^\\s*function (\\w+)/);\n return t ? t[1] : \"\";\n }\n\n function Ue(e, t) {\n return Re(e) === Re(t);\n }\n\n function Be(e, t) {\n if (!Array.isArray(t)) return Ue(t, e) ? 0 : -1;\n\n for (var n = 0, r = t.length; n < r; n++) {\n if (Ue(t[n], e)) return n;\n }\n\n return -1;\n }\n\n function He(e, t, n) {\n pe();\n\n try {\n if (t) for (var r = t; r = r.$parent;) {\n var i = r.$options.errorCaptured;\n if (i) for (var o = 0; o < i.length; o++) {\n try {\n if (!1 === i[o].call(r, e, t, n)) return;\n } catch (e) {\n ze(e, r, \"errorCaptured hook\");\n }\n }\n }\n ze(e, t, n);\n } finally {\n ve();\n }\n }\n\n function Ve(e, t, n, r, i) {\n var o;\n\n try {\n (o = n ? e.apply(t, n) : e.call(t)) && !o._isVue && d(o) && !o._handled && (o[\"catch\"](function (e) {\n return He(e, r, i + \" (Promise/async)\");\n }), o._handled = !0);\n } catch (e) {\n He(e, r, i);\n }\n\n return o;\n }\n\n function ze(e, t, n) {\n if (U.errorHandler) try {\n return U.errorHandler.call(null, e, t, n);\n } catch (t) {\n t !== e && Je(t, null, \"config.errorHandler\");\n }\n Je(e, t, n);\n }\n\n function Je(e, t, n) {\n if (!K && !q || \"undefined\" == typeof console) throw e;\n console.error(e);\n }\n\n var Ke,\n qe = !1,\n We = [],\n Ge = !1;\n\n function Xe() {\n Ge = !1;\n var e = We.slice(0);\n We.length = 0;\n\n for (var t = 0; t < e.length; t++) {\n e[t]();\n }\n }\n\n if (\"undefined\" != typeof Promise && ae(Promise)) {\n var Ze = Promise.resolve();\n Ke = function Ke() {\n Ze.then(Xe), Q && setTimeout(j);\n }, qe = !0;\n } else if (X || \"undefined\" == typeof MutationObserver || !ae(MutationObserver) && \"[object MutationObserverConstructor]\" !== MutationObserver.toString()) Ke = void 0 !== n && ae(n) ? function () {\n n(Xe);\n } : function () {\n setTimeout(Xe, 0);\n };else {\n var Ye = 1,\n Qe = new MutationObserver(Xe),\n et = document.createTextNode(String(Ye));\n Qe.observe(et, {\n characterData: !0\n }), Ke = function Ke() {\n Ye = (Ye + 1) % 2, et.data = String(Ye);\n }, qe = !0;\n }\n\n function tt(e, t) {\n var n;\n if (We.push(function () {\n if (e) try {\n e.call(t);\n } catch (e) {\n He(e, t, \"nextTick\");\n } else n && n(t);\n }), Ge || (Ge = !0, Ke()), !e && \"undefined\" != typeof Promise) return new Promise(function (e) {\n n = e;\n });\n }\n\n var nt = new se();\n\n function rt(e) {\n !function e(t, n) {\n var r,\n i,\n o = Array.isArray(t);\n\n if (!(!o && !c(t) || Object.isFrozen(t) || t instanceof he)) {\n if (t.__ob__) {\n var a = t.__ob__.dep.id;\n if (n.has(a)) return;\n n.add(a);\n }\n\n if (o) for (r = t.length; r--;) {\n e(t[r], n);\n } else for (r = (i = Object.keys(t)).length; r--;) {\n e(t[i[r]], n);\n }\n }\n }(e, nt), nt.clear();\n }\n\n var it = w(function (e) {\n var t = \"&\" === e.charAt(0),\n n = \"~\" === (e = t ? e.slice(1) : e).charAt(0),\n r = \"!\" === (e = n ? e.slice(1) : e).charAt(0);\n return {\n name: e = r ? e.slice(1) : e,\n once: n,\n capture: r,\n passive: t\n };\n });\n\n function ot(e, t) {\n function n() {\n var e = arguments,\n r = n.fns;\n if (!Array.isArray(r)) return Ve(r, null, arguments, t, \"v-on handler\");\n\n for (var i = r.slice(), o = 0; o < i.length; o++) {\n Ve(i[o], null, e, t, \"v-on handler\");\n }\n }\n\n return n.fns = e, n;\n }\n\n function at(e, t, n, r, o, s) {\n var c, u, l, f;\n\n for (c in e) {\n u = e[c], l = t[c], f = it(c), i(u) || (i(l) ? (i(u.fns) && (u = e[c] = ot(u, s)), a(f.once) && (u = e[c] = o(f.name, u, f.capture)), n(f.name, u, f.capture, f.passive, f.params)) : u !== l && (l.fns = u, e[c] = l));\n }\n\n for (c in t) {\n i(e[c]) && r((f = it(c)).name, t[c], f.capture);\n }\n }\n\n function st(e, t, n) {\n var r;\n e instanceof he && (e = e.data.hook || (e.data.hook = {}));\n var s = e[t];\n\n function c() {\n n.apply(this, arguments), g(r.fns, c);\n }\n\n i(s) ? r = ot([c]) : o(s.fns) && a(s.merged) ? (r = s).fns.push(c) : r = ot([s, c]), r.merged = !0, e[t] = r;\n }\n\n function ct(e, t, n, r, i) {\n if (o(t)) {\n if (b(t, n)) return e[n] = t[n], i || delete t[n], !0;\n if (b(t, r)) return e[n] = t[r], i || delete t[r], !0;\n }\n\n return !1;\n }\n\n function ut(e) {\n return s(e) ? [ge(e)] : Array.isArray(e) ? function e(t, n) {\n var r,\n c,\n u,\n l,\n f = [];\n\n for (r = 0; r < t.length; r++) {\n i(c = t[r]) || \"boolean\" == typeof c || (l = f[u = f.length - 1], Array.isArray(c) ? c.length > 0 && (lt((c = e(c, (n || \"\") + \"_\" + r))[0]) && lt(l) && (f[u] = ge(l.text + c[0].text), c.shift()), f.push.apply(f, c)) : s(c) ? lt(l) ? f[u] = ge(l.text + c) : \"\" !== c && f.push(ge(c)) : lt(c) && lt(l) ? f[u] = ge(l.text + c.text) : (a(t._isVList) && o(c.tag) && i(c.key) && o(n) && (c.key = \"__vlist\" + n + \"_\" + r + \"__\"), f.push(c)));\n }\n\n return f;\n }(e) : void 0;\n }\n\n function lt(e) {\n return o(e) && o(e.text) && !1 === e.isComment;\n }\n\n function ft(e, t) {\n if (e) {\n for (var n = Object.create(null), r = ce ? Reflect.ownKeys(e) : Object.keys(e), i = 0; i < r.length; i++) {\n var o = r[i];\n\n if (\"__ob__\" !== o) {\n for (var a = e[o].from, s = t; s;) {\n if (s._provided && b(s._provided, a)) {\n n[o] = s._provided[a];\n break;\n }\n\n s = s.$parent;\n }\n\n if (!s && \"default\" in e[o]) {\n var c = e[o][\"default\"];\n n[o] = \"function\" == typeof c ? c.call(t) : c;\n }\n }\n }\n\n return n;\n }\n }\n\n function dt(e, t) {\n if (!e || !e.length) return {};\n\n for (var n = {}, r = 0, i = e.length; r < i; r++) {\n var o = e[r],\n a = o.data;\n if (a && a.attrs && a.attrs.slot && delete a.attrs.slot, o.context !== t && o.fnContext !== t || !a || null == a.slot) (n[\"default\"] || (n[\"default\"] = [])).push(o);else {\n var s = a.slot,\n c = n[s] || (n[s] = []);\n \"template\" === o.tag ? c.push.apply(c, o.children || []) : c.push(o);\n }\n }\n\n for (var u in n) {\n n[u].every(pt) && delete n[u];\n }\n\n return n;\n }\n\n function pt(e) {\n return e.isComment && !e.asyncFactory || \" \" === e.text;\n }\n\n function vt(e, t, n) {\n var i,\n o = Object.keys(t).length > 0,\n a = e ? !!e.$stable : !o,\n s = e && e.$key;\n\n if (e) {\n if (e._normalized) return e._normalized;\n if (a && n && n !== r && s === n.$key && !o && !n.$hasNormal) return n;\n\n for (var c in i = {}, e) {\n e[c] && \"$\" !== c[0] && (i[c] = ht(t, c, e[c]));\n }\n } else i = {};\n\n for (var u in t) {\n u in i || (i[u] = mt(t, u));\n }\n\n return e && Object.isExtensible(e) && (e._normalized = i), H(i, \"$stable\", a), H(i, \"$key\", s), H(i, \"$hasNormal\", o), i;\n }\n\n function ht(e, t, n) {\n var r = function r() {\n var e = arguments.length ? n.apply(null, arguments) : n({});\n return (e = e && \"object\" == _typeof(e) && !Array.isArray(e) ? [e] : ut(e)) && (0 === e.length || 1 === e.length && e[0].isComment) ? void 0 : e;\n };\n\n return n.proxy && Object.defineProperty(e, t, {\n get: r,\n enumerable: !0,\n configurable: !0\n }), r;\n }\n\n function mt(e, t) {\n return function () {\n return e[t];\n };\n }\n\n function yt(e, t) {\n var n, r, i, a, s;\n if (Array.isArray(e) || \"string\" == typeof e) for (n = new Array(e.length), r = 0, i = e.length; r < i; r++) {\n n[r] = t(e[r], r);\n } else if (\"number\" == typeof e) for (n = new Array(e), r = 0; r < e; r++) {\n n[r] = t(r + 1, r);\n } else if (c(e)) if (ce && e[Symbol.iterator]) {\n n = [];\n\n for (var u = e[Symbol.iterator](), l = u.next(); !l.done;) {\n n.push(t(l.value, n.length)), l = u.next();\n }\n } else for (a = Object.keys(e), n = new Array(a.length), r = 0, i = a.length; r < i; r++) {\n s = a[r], n[r] = t(e[s], s, r);\n }\n return o(n) || (n = []), n._isVList = !0, n;\n }\n\n function gt(e, t, n, r) {\n var i,\n o = this.$scopedSlots[e];\n o ? (n = n || {}, r && (n = T(T({}, r), n)), i = o(n) || t) : i = this.$slots[e] || t;\n var a = n && n.slot;\n return a ? this.$createElement(\"template\", {\n slot: a\n }, i) : i;\n }\n\n function _t(e) {\n return Fe(this.$options, \"filters\", e) || I;\n }\n\n function bt(e, t) {\n return Array.isArray(e) ? -1 === e.indexOf(t) : e !== t;\n }\n\n function wt(e, t, n, r, i) {\n var o = U.keyCodes[t] || n;\n return i && r && !U.keyCodes[t] ? bt(i, r) : o ? bt(o, e) : r ? A(r) !== t : void 0;\n }\n\n function $t(e, t, n, r, i) {\n if (n && c(n)) {\n var o;\n Array.isArray(n) && (n = E(n));\n\n var a = function a(_a2) {\n if (\"class\" === _a2 || \"style\" === _a2 || y(_a2)) o = e;else {\n var s = e.attrs && e.attrs.type;\n o = r || U.mustUseProp(t, s, _a2) ? e.domProps || (e.domProps = {}) : e.attrs || (e.attrs = {});\n }\n var c = x(_a2),\n u = A(_a2);\n c in o || u in o || (o[_a2] = n[_a2], i && ((e.on || (e.on = {}))[\"update:\" + _a2] = function (e) {\n n[_a2] = e;\n }));\n };\n\n for (var s in n) {\n a(s);\n }\n }\n\n return e;\n }\n\n function xt(e, t) {\n var n = this._staticTrees || (this._staticTrees = []),\n r = n[e];\n return r && !t ? r : (kt(r = n[e] = this.$options.staticRenderFns[e].call(this._renderProxy, null, this), \"__static__\" + e, !1), r);\n }\n\n function Ct(e, t, n) {\n return kt(e, \"__once__\" + t + (n ? \"_\" + n : \"\"), !0), e;\n }\n\n function kt(e, t, n) {\n if (Array.isArray(e)) for (var r = 0; r < e.length; r++) {\n e[r] && \"string\" != typeof e[r] && At(e[r], t + \"_\" + r, n);\n } else At(e, t, n);\n }\n\n function At(e, t, n) {\n e.isStatic = !0, e.key = t, e.isOnce = n;\n }\n\n function Ot(e, t) {\n if (t && l(t)) {\n var n = e.on = e.on ? T({}, e.on) : {};\n\n for (var r in t) {\n var i = n[r],\n o = t[r];\n n[r] = i ? [].concat(i, o) : o;\n }\n }\n\n return e;\n }\n\n function St(e, t, n, r) {\n t = t || {\n $stable: !n\n };\n\n for (var i = 0; i < e.length; i++) {\n var o = e[i];\n Array.isArray(o) ? St(o, t, n) : o && (o.proxy && (o.fn.proxy = !0), t[o.key] = o.fn);\n }\n\n return r && (t.$key = r), t;\n }\n\n function Tt(e, t) {\n for (var n = 0; n < t.length; n += 2) {\n var r = t[n];\n \"string\" == typeof r && r && (e[t[n]] = t[n + 1]);\n }\n\n return e;\n }\n\n function Et(e, t) {\n return \"string\" == typeof e ? t + e : e;\n }\n\n function jt(e) {\n e._o = Ct, e._n = v, e._s = p, e._l = yt, e._t = gt, e._q = N, e._i = M, e._m = xt, e._f = _t, e._k = wt, e._b = $t, e._v = ge, e._e = ye, e._u = St, e._g = Ot, e._d = Tt, e._p = Et;\n }\n\n function Lt(e, t, n, i, o) {\n var s,\n c = this,\n u = o.options;\n b(i, \"_uid\") ? (s = Object.create(i))._original = i : (s = i, i = i._original);\n var l = a(u._compiled),\n f = !l;\n this.data = e, this.props = t, this.children = n, this.parent = i, this.listeners = e.on || r, this.injections = ft(u.inject, i), this.slots = function () {\n return c.$slots || vt(e.scopedSlots, c.$slots = dt(n, i)), c.$slots;\n }, Object.defineProperty(this, \"scopedSlots\", {\n enumerable: !0,\n get: function get() {\n return vt(e.scopedSlots, this.slots());\n }\n }), l && (this.$options = u, this.$slots = this.slots(), this.$scopedSlots = vt(e.scopedSlots, this.$slots)), u._scopeId ? this._c = function (e, t, n, r) {\n var o = Bt(s, e, t, n, r, f);\n return o && !Array.isArray(o) && (o.fnScopeId = u._scopeId, o.fnContext = i), o;\n } : this._c = function (e, t, n, r) {\n return Bt(s, e, t, n, r, f);\n };\n }\n\n function It(e, t, n, r, i) {\n var o = _e(e);\n\n return o.fnContext = n, o.fnOptions = r, t.slot && ((o.data || (o.data = {})).slot = t.slot), o;\n }\n\n function Nt(e, t) {\n for (var n in t) {\n e[x(n)] = t[n];\n }\n }\n\n jt(Lt.prototype);\n var Mt = {\n init: function init(e, t) {\n if (e.componentInstance && !e.componentInstance._isDestroyed && e.data.keepAlive) {\n var n = e;\n Mt.prepatch(n, n);\n } else (e.componentInstance = function (e, t) {\n var n = {\n _isComponent: !0,\n _parentVnode: e,\n parent: Zt\n },\n r = e.data.inlineTemplate;\n return o(r) && (n.render = r.render, n.staticRenderFns = r.staticRenderFns), new e.componentOptions.Ctor(n);\n }(e)).$mount(t ? e.elm : void 0, t);\n },\n prepatch: function prepatch(e, t) {\n var n = t.componentOptions;\n !function (e, t, n, i, o) {\n var a = i.data.scopedSlots,\n s = e.$scopedSlots,\n c = !!(a && !a.$stable || s !== r && !s.$stable || a && e.$scopedSlots.$key !== a.$key),\n u = !!(o || e.$options._renderChildren || c);\n\n if (e.$options._parentVnode = i, e.$vnode = i, e._vnode && (e._vnode.parent = i), e.$options._renderChildren = o, e.$attrs = i.data.attrs || r, e.$listeners = n || r, t && e.$options.props) {\n Ce(!1);\n\n for (var l = e._props, f = e.$options._propKeys || [], d = 0; d < f.length; d++) {\n var p = f[d],\n v = e.$options.props;\n l[p] = Pe(p, v, t, e);\n }\n\n Ce(!0), e.$options.propsData = t;\n }\n\n n = n || r;\n var h = e.$options._parentListeners;\n e.$options._parentListeners = n, Xt(e, n, h), u && (e.$slots = dt(o, i.context), e.$forceUpdate());\n }(t.componentInstance = e.componentInstance, n.propsData, n.listeners, t, n.children);\n },\n insert: function insert(e) {\n var t,\n n = e.context,\n r = e.componentInstance;\n r._isMounted || (r._isMounted = !0, tn(r, \"mounted\")), e.data.keepAlive && (n._isMounted ? ((t = r)._inactive = !1, rn.push(t)) : en(r, !0));\n },\n destroy: function destroy(e) {\n var t = e.componentInstance;\n t._isDestroyed || (e.data.keepAlive ? function e(t, n) {\n if (!(n && (t._directInactive = !0, Qt(t)) || t._inactive)) {\n t._inactive = !0;\n\n for (var r = 0; r < t.$children.length; r++) {\n e(t.$children[r]);\n }\n\n tn(t, \"deactivated\");\n }\n }(t, !0) : t.$destroy());\n }\n },\n Dt = Object.keys(Mt);\n\n function Ft(e, t, n, s, u) {\n if (!i(e)) {\n var l = n.$options._base;\n\n if (c(e) && (e = l.extend(e)), \"function\" == typeof e) {\n var f;\n if (i(e.cid) && void 0 === (e = function (e, t) {\n if (a(e.error) && o(e.errorComp)) return e.errorComp;\n if (o(e.resolved)) return e.resolved;\n var n = Vt;\n if (n && o(e.owners) && -1 === e.owners.indexOf(n) && e.owners.push(n), a(e.loading) && o(e.loadingComp)) return e.loadingComp;\n\n if (n && !o(e.owners)) {\n var r = e.owners = [n],\n s = !0,\n u = null,\n l = null;\n n.$on(\"hook:destroyed\", function () {\n return g(r, n);\n });\n\n var f = function f(e) {\n for (var t = 0, n = r.length; t < n; t++) {\n r[t].$forceUpdate();\n }\n\n e && (r.length = 0, null !== u && (clearTimeout(u), u = null), null !== l && (clearTimeout(l), l = null));\n },\n p = D(function (n) {\n e.resolved = zt(n, t), s ? r.length = 0 : f(!0);\n }),\n v = D(function (t) {\n o(e.errorComp) && (e.error = !0, f(!0));\n }),\n h = e(p, v);\n\n return c(h) && (d(h) ? i(e.resolved) && h.then(p, v) : d(h.component) && (h.component.then(p, v), o(h.error) && (e.errorComp = zt(h.error, t)), o(h.loading) && (e.loadingComp = zt(h.loading, t), 0 === h.delay ? e.loading = !0 : u = setTimeout(function () {\n u = null, i(e.resolved) && i(e.error) && (e.loading = !0, f(!1));\n }, h.delay || 200)), o(h.timeout) && (l = setTimeout(function () {\n l = null, i(e.resolved) && v(null);\n }, h.timeout)))), s = !1, e.loading ? e.loadingComp : e.resolved;\n }\n }(f = e, l))) return function (e, t, n, r, i) {\n var o = ye();\n return o.asyncFactory = e, o.asyncMeta = {\n data: t,\n context: n,\n children: r,\n tag: i\n }, o;\n }(f, t, n, s, u);\n t = t || {}, xn(e), o(t.model) && function (e, t) {\n var n = e.model && e.model.prop || \"value\",\n r = e.model && e.model.event || \"input\";\n (t.attrs || (t.attrs = {}))[n] = t.model.value;\n var i = t.on || (t.on = {}),\n a = i[r],\n s = t.model.callback;\n o(a) ? (Array.isArray(a) ? -1 === a.indexOf(s) : a !== s) && (i[r] = [s].concat(a)) : i[r] = s;\n }(e.options, t);\n\n var p = function (e, t, n) {\n var r = t.options.props;\n\n if (!i(r)) {\n var a = {},\n s = e.attrs,\n c = e.props;\n if (o(s) || o(c)) for (var u in r) {\n var l = A(u);\n ct(a, c, u, l, !0) || ct(a, s, u, l, !1);\n }\n return a;\n }\n }(t, e);\n\n if (a(e.options.functional)) return function (e, t, n, i, a) {\n var s = e.options,\n c = {},\n u = s.props;\n if (o(u)) for (var l in u) {\n c[l] = Pe(l, u, t || r);\n } else o(n.attrs) && Nt(c, n.attrs), o(n.props) && Nt(c, n.props);\n var f = new Lt(n, c, a, i, e),\n d = s.render.call(null, f._c, f);\n if (d instanceof he) return It(d, n, f.parent, s);\n\n if (Array.isArray(d)) {\n for (var p = ut(d) || [], v = new Array(p.length), h = 0; h < p.length; h++) {\n v[h] = It(p[h], n, f.parent, s);\n }\n\n return v;\n }\n }(e, p, t, n, s);\n var v = t.on;\n\n if (t.on = t.nativeOn, a(e.options[\"abstract\"])) {\n var h = t.slot;\n t = {}, h && (t.slot = h);\n }\n\n !function (e) {\n for (var t = e.hook || (e.hook = {}), n = 0; n < Dt.length; n++) {\n var r = Dt[n],\n i = t[r],\n o = Mt[r];\n i === o || i && i._merged || (t[r] = i ? Pt(o, i) : o);\n }\n }(t);\n var m = e.options.name || u;\n return new he(\"vue-component-\" + e.cid + (m ? \"-\" + m : \"\"), t, void 0, void 0, void 0, n, {\n Ctor: e,\n propsData: p,\n listeners: v,\n tag: u,\n children: s\n }, f);\n }\n }\n }\n\n function Pt(e, t) {\n var n = function n(_n2, r) {\n e(_n2, r), t(_n2, r);\n };\n\n return n._merged = !0, n;\n }\n\n var Rt = 1,\n Ut = 2;\n\n function Bt(e, t, n, r, u, l) {\n return (Array.isArray(n) || s(n)) && (u = r, r = n, n = void 0), a(l) && (u = Ut), function (e, t, n, r, s) {\n if (o(n) && o(n.__ob__)) return ye();\n if (o(n) && o(n.is) && (t = n.is), !t) return ye();\n var u, l, f;\n (Array.isArray(r) && \"function\" == typeof r[0] && ((n = n || {}).scopedSlots = {\n \"default\": r[0]\n }, r.length = 0), s === Ut ? r = ut(r) : s === Rt && (r = function (e) {\n for (var t = 0; t < e.length; t++) {\n if (Array.isArray(e[t])) return Array.prototype.concat.apply([], e);\n }\n\n return e;\n }(r)), \"string\" == typeof t) ? (l = e.$vnode && e.$vnode.ns || U.getTagNamespace(t), u = U.isReservedTag(t) ? new he(U.parsePlatformTagName(t), n, r, void 0, void 0, e) : n && n.pre || !o(f = Fe(e.$options, \"components\", t)) ? new he(t, n, r, void 0, void 0, e) : Ft(f, n, e, r, t)) : u = Ft(t, n, e, r);\n return Array.isArray(u) ? u : o(u) ? (o(l) && function e(t, n, r) {\n if (t.ns = n, \"foreignObject\" === t.tag && (n = void 0, r = !0), o(t.children)) for (var s = 0, c = t.children.length; s < c; s++) {\n var u = t.children[s];\n o(u.tag) && (i(u.ns) || a(r) && \"svg\" !== u.tag) && e(u, n, r);\n }\n }(u, l), o(n) && function (e) {\n c(e.style) && rt(e.style), c(e[\"class\"]) && rt(e[\"class\"]);\n }(n), u) : ye();\n }(e, t, n, r, u);\n }\n\n var Ht,\n Vt = null;\n\n function zt(e, t) {\n return (e.__esModule || ce && \"Module\" === e[Symbol.toStringTag]) && (e = e[\"default\"]), c(e) ? t.extend(e) : e;\n }\n\n function Jt(e) {\n return e.isComment && e.asyncFactory;\n }\n\n function Kt(e) {\n if (Array.isArray(e)) for (var t = 0; t < e.length; t++) {\n var n = e[t];\n if (o(n) && (o(n.componentOptions) || Jt(n))) return n;\n }\n }\n\n function qt(e, t) {\n Ht.$on(e, t);\n }\n\n function Wt(e, t) {\n Ht.$off(e, t);\n }\n\n function Gt(e, t) {\n var n = Ht;\n return function r() {\n null !== t.apply(null, arguments) && n.$off(e, r);\n };\n }\n\n function Xt(e, t, n) {\n Ht = e, at(t, n || {}, qt, Wt, Gt, e), Ht = void 0;\n }\n\n var Zt = null;\n\n function Yt(e) {\n var t = Zt;\n return Zt = e, function () {\n Zt = t;\n };\n }\n\n function Qt(e) {\n for (; e && (e = e.$parent);) {\n if (e._inactive) return !0;\n }\n\n return !1;\n }\n\n function en(e, t) {\n if (t) {\n if (e._directInactive = !1, Qt(e)) return;\n } else if (e._directInactive) return;\n\n if (e._inactive || null === e._inactive) {\n e._inactive = !1;\n\n for (var n = 0; n < e.$children.length; n++) {\n en(e.$children[n]);\n }\n\n tn(e, \"activated\");\n }\n }\n\n function tn(e, t) {\n pe();\n var n = e.$options[t],\n r = t + \" hook\";\n if (n) for (var i = 0, o = n.length; i < o; i++) {\n Ve(n[i], e, null, e, r);\n }\n e._hasHookEvent && e.$emit(\"hook:\" + t), ve();\n }\n\n var nn = [],\n rn = [],\n on = {},\n an = !1,\n sn = !1,\n cn = 0,\n un = 0,\n ln = Date.now;\n\n if (K && !X) {\n var fn = window.performance;\n fn && \"function\" == typeof fn.now && ln() > document.createEvent(\"Event\").timeStamp && (ln = function ln() {\n return fn.now();\n });\n }\n\n function dn() {\n var e, t;\n\n for (un = ln(), sn = !0, nn.sort(function (e, t) {\n return e.id - t.id;\n }), cn = 0; cn < nn.length; cn++) {\n (e = nn[cn]).before && e.before(), t = e.id, on[t] = null, e.run();\n }\n\n var n = rn.slice(),\n r = nn.slice();\n cn = nn.length = rn.length = 0, on = {}, an = sn = !1, function (e) {\n for (var t = 0; t < e.length; t++) {\n e[t]._inactive = !0, en(e[t], !0);\n }\n }(n), function (e) {\n for (var t = e.length; t--;) {\n var n = e[t],\n r = n.vm;\n r._watcher === n && r._isMounted && !r._isDestroyed && tn(r, \"updated\");\n }\n }(r), oe && U.devtools && oe.emit(\"flush\");\n }\n\n var pn = 0,\n vn = function vn(e, t, n, r, i) {\n this.vm = e, i && (e._watcher = this), e._watchers.push(this), r ? (this.deep = !!r.deep, this.user = !!r.user, this.lazy = !!r.lazy, this.sync = !!r.sync, this.before = r.before) : this.deep = this.user = this.lazy = this.sync = !1, this.cb = n, this.id = ++pn, this.active = !0, this.dirty = this.lazy, this.deps = [], this.newDeps = [], this.depIds = new se(), this.newDepIds = new se(), this.expression = \"\", \"function\" == typeof t ? this.getter = t : (this.getter = function (e) {\n if (!z.test(e)) {\n var t = e.split(\".\");\n return function (e) {\n for (var n = 0; n < t.length; n++) {\n if (!e) return;\n e = e[t[n]];\n }\n\n return e;\n };\n }\n }(t), this.getter || (this.getter = j)), this.value = this.lazy ? void 0 : this.get();\n };\n\n vn.prototype.get = function () {\n var e;\n pe(this);\n var t = this.vm;\n\n try {\n e = this.getter.call(t, t);\n } catch (e) {\n if (!this.user) throw e;\n He(e, t, 'getter for watcher \"' + this.expression + '\"');\n } finally {\n this.deep && rt(e), ve(), this.cleanupDeps();\n }\n\n return e;\n }, vn.prototype.addDep = function (e) {\n var t = e.id;\n this.newDepIds.has(t) || (this.newDepIds.add(t), this.newDeps.push(e), this.depIds.has(t) || e.addSub(this));\n }, vn.prototype.cleanupDeps = function () {\n for (var e = this.deps.length; e--;) {\n var t = this.deps[e];\n this.newDepIds.has(t.id) || t.removeSub(this);\n }\n\n var n = this.depIds;\n this.depIds = this.newDepIds, this.newDepIds = n, this.newDepIds.clear(), n = this.deps, this.deps = this.newDeps, this.newDeps = n, this.newDeps.length = 0;\n }, vn.prototype.update = function () {\n this.lazy ? this.dirty = !0 : this.sync ? this.run() : function (e) {\n var t = e.id;\n\n if (null == on[t]) {\n if (on[t] = !0, sn) {\n for (var n = nn.length - 1; n > cn && nn[n].id > e.id;) {\n n--;\n }\n\n nn.splice(n + 1, 0, e);\n } else nn.push(e);\n\n an || (an = !0, tt(dn));\n }\n }(this);\n }, vn.prototype.run = function () {\n if (this.active) {\n var e = this.get();\n\n if (e !== this.value || c(e) || this.deep) {\n var t = this.value;\n if (this.value = e, this.user) try {\n this.cb.call(this.vm, e, t);\n } catch (e) {\n He(e, this.vm, 'callback for watcher \"' + this.expression + '\"');\n } else this.cb.call(this.vm, e, t);\n }\n }\n }, vn.prototype.evaluate = function () {\n this.value = this.get(), this.dirty = !1;\n }, vn.prototype.depend = function () {\n for (var e = this.deps.length; e--;) {\n this.deps[e].depend();\n }\n }, vn.prototype.teardown = function () {\n if (this.active) {\n this.vm._isBeingDestroyed || g(this.vm._watchers, this);\n\n for (var e = this.deps.length; e--;) {\n this.deps[e].removeSub(this);\n }\n\n this.active = !1;\n }\n };\n var hn = {\n enumerable: !0,\n configurable: !0,\n get: j,\n set: j\n };\n\n function mn(e, t, n) {\n hn.get = function () {\n return this[t][n];\n }, hn.set = function (e) {\n this[t][n] = e;\n }, Object.defineProperty(e, n, hn);\n }\n\n var yn = {\n lazy: !0\n };\n\n function gn(e, t, n) {\n var r = !ie();\n \"function\" == typeof n ? (hn.get = r ? _n(t) : bn(n), hn.set = j) : (hn.get = n.get ? r && !1 !== n.cache ? _n(t) : bn(n.get) : j, hn.set = n.set || j), Object.defineProperty(e, t, hn);\n }\n\n function _n(e) {\n return function () {\n var t = this._computedWatchers && this._computedWatchers[e];\n if (t) return t.dirty && t.evaluate(), fe.target && t.depend(), t.value;\n };\n }\n\n function bn(e) {\n return function () {\n return e.call(this, this);\n };\n }\n\n function wn(e, t, n, r) {\n return l(n) && (r = n, n = n.handler), \"string\" == typeof n && (n = e[n]), e.$watch(t, n, r);\n }\n\n var $n = 0;\n\n function xn(e) {\n var t = e.options;\n\n if (e[\"super\"]) {\n var n = xn(e[\"super\"]);\n\n if (n !== e.superOptions) {\n e.superOptions = n;\n\n var r = function (e) {\n var t,\n n = e.options,\n r = e.sealedOptions;\n\n for (var i in n) {\n n[i] !== r[i] && (t || (t = {}), t[i] = n[i]);\n }\n\n return t;\n }(e);\n\n r && T(e.extendOptions, r), (t = e.options = De(n, e.extendOptions)).name && (t.components[t.name] = e);\n }\n }\n\n return t;\n }\n\n function Cn(e) {\n this._init(e);\n }\n\n function kn(e) {\n return e && (e.Ctor.options.name || e.tag);\n }\n\n function An(e, t) {\n return Array.isArray(e) ? e.indexOf(t) > -1 : \"string\" == typeof e ? e.split(\",\").indexOf(t) > -1 : (n = e, \"[object RegExp]\" === u.call(n) && e.test(t));\n var n;\n }\n\n function On(e, t) {\n var n = e.cache,\n r = e.keys,\n i = e._vnode;\n\n for (var o in n) {\n var a = n[o];\n\n if (a) {\n var s = kn(a.componentOptions);\n s && !t(s) && Sn(n, o, r, i);\n }\n }\n }\n\n function Sn(e, t, n, r) {\n var i = e[t];\n !i || r && i.tag === r.tag || i.componentInstance.$destroy(), e[t] = null, g(n, t);\n }\n\n Cn.prototype._init = function (e) {\n var t = this;\n t._uid = $n++, t._isVue = !0, e && e._isComponent ? function (e, t) {\n var n = e.$options = Object.create(e.constructor.options),\n r = t._parentVnode;\n n.parent = t.parent, n._parentVnode = r;\n var i = r.componentOptions;\n n.propsData = i.propsData, n._parentListeners = i.listeners, n._renderChildren = i.children, n._componentTag = i.tag, t.render && (n.render = t.render, n.staticRenderFns = t.staticRenderFns);\n }(t, e) : t.$options = De(xn(t.constructor), e || {}, t), t._renderProxy = t, t._self = t, function (e) {\n var t = e.$options,\n n = t.parent;\n\n if (n && !t[\"abstract\"]) {\n for (; n.$options[\"abstract\"] && n.$parent;) {\n n = n.$parent;\n }\n\n n.$children.push(e);\n }\n\n e.$parent = n, e.$root = n ? n.$root : e, e.$children = [], e.$refs = {}, e._watcher = null, e._inactive = null, e._directInactive = !1, e._isMounted = !1, e._isDestroyed = !1, e._isBeingDestroyed = !1;\n }(t), function (e) {\n e._events = Object.create(null), e._hasHookEvent = !1;\n var t = e.$options._parentListeners;\n t && Xt(e, t);\n }(t), function (e) {\n e._vnode = null, e._staticTrees = null;\n var t = e.$options,\n n = e.$vnode = t._parentVnode,\n i = n && n.context;\n e.$slots = dt(t._renderChildren, i), e.$scopedSlots = r, e._c = function (t, n, r, i) {\n return Bt(e, t, n, r, i, !1);\n }, e.$createElement = function (t, n, r, i) {\n return Bt(e, t, n, r, i, !0);\n };\n var o = n && n.data;\n Oe(e, \"$attrs\", o && o.attrs || r, null, !0), Oe(e, \"$listeners\", t._parentListeners || r, null, !0);\n }(t), tn(t, \"beforeCreate\"), function (e) {\n var t = ft(e.$options.inject, e);\n t && (Ce(!1), Object.keys(t).forEach(function (n) {\n Oe(e, n, t[n]);\n }), Ce(!0));\n }(t), function (e) {\n e._watchers = [];\n var t = e.$options;\n t.props && function (e, t) {\n var n = e.$options.propsData || {},\n r = e._props = {},\n i = e.$options._propKeys = [];\n e.$parent && Ce(!1);\n\n var o = function o(_o2) {\n i.push(_o2);\n var a = Pe(_o2, t, n, e);\n Oe(r, _o2, a), _o2 in e || mn(e, \"_props\", _o2);\n };\n\n for (var a in t) {\n o(a);\n }\n\n Ce(!0);\n }(e, t.props), t.methods && function (e, t) {\n for (var n in e.$options.props, t) {\n e[n] = \"function\" != typeof t[n] ? j : O(t[n], e);\n }\n }(e, t.methods), t.data ? function (e) {\n var t = e.$options.data;\n l(t = e._data = \"function\" == typeof t ? function (e, t) {\n pe();\n\n try {\n return e.call(t, t);\n } catch (e) {\n return He(e, t, \"data()\"), {};\n } finally {\n ve();\n }\n }(t, e) : t || {}) || (t = {});\n\n for (var n, r = Object.keys(t), i = e.$options.props, o = (e.$options.methods, r.length); o--;) {\n var a = r[o];\n i && b(i, a) || 36 !== (n = (a + \"\").charCodeAt(0)) && 95 !== n && mn(e, \"_data\", a);\n }\n\n Ae(t, !0);\n }(e) : Ae(e._data = {}, !0), t.computed && function (e, t) {\n var n = e._computedWatchers = Object.create(null),\n r = ie();\n\n for (var i in t) {\n var o = t[i],\n a = \"function\" == typeof o ? o : o.get;\n r || (n[i] = new vn(e, a || j, j, yn)), i in e || gn(e, i, o);\n }\n }(e, t.computed), t.watch && t.watch !== te && function (e, t) {\n for (var n in t) {\n var r = t[n];\n if (Array.isArray(r)) for (var i = 0; i < r.length; i++) {\n wn(e, n, r[i]);\n } else wn(e, n, r);\n }\n }(e, t.watch);\n }(t), function (e) {\n var t = e.$options.provide;\n t && (e._provided = \"function\" == typeof t ? t.call(e) : t);\n }(t), tn(t, \"created\"), t.$options.el && t.$mount(t.$options.el);\n }, function (e) {\n Object.defineProperty(e.prototype, \"$data\", {\n get: function get() {\n return this._data;\n }\n }), Object.defineProperty(e.prototype, \"$props\", {\n get: function get() {\n return this._props;\n }\n }), e.prototype.$set = Se, e.prototype.$delete = Te, e.prototype.$watch = function (e, t, n) {\n if (l(t)) return wn(this, e, t, n);\n (n = n || {}).user = !0;\n var r = new vn(this, e, t, n);\n if (n.immediate) try {\n t.call(this, r.value);\n } catch (e) {\n He(e, this, 'callback for immediate watcher \"' + r.expression + '\"');\n }\n return function () {\n r.teardown();\n };\n };\n }(Cn), function (e) {\n var t = /^hook:/;\n e.prototype.$on = function (e, n) {\n var r = this;\n if (Array.isArray(e)) for (var i = 0, o = e.length; i < o; i++) {\n r.$on(e[i], n);\n } else (r._events[e] || (r._events[e] = [])).push(n), t.test(e) && (r._hasHookEvent = !0);\n return r;\n }, e.prototype.$once = function (e, t) {\n var n = this;\n\n function r() {\n n.$off(e, r), t.apply(n, arguments);\n }\n\n return r.fn = t, n.$on(e, r), n;\n }, e.prototype.$off = function (e, t) {\n var n = this;\n if (!arguments.length) return n._events = Object.create(null), n;\n\n if (Array.isArray(e)) {\n for (var r = 0, i = e.length; r < i; r++) {\n n.$off(e[r], t);\n }\n\n return n;\n }\n\n var o,\n a = n._events[e];\n if (!a) return n;\n if (!t) return n._events[e] = null, n;\n\n for (var s = a.length; s--;) {\n if ((o = a[s]) === t || o.fn === t) {\n a.splice(s, 1);\n break;\n }\n }\n\n return n;\n }, e.prototype.$emit = function (e) {\n var t = this._events[e];\n\n if (t) {\n t = t.length > 1 ? S(t) : t;\n\n for (var n = S(arguments, 1), r = 'event handler for \"' + e + '\"', i = 0, o = t.length; i < o; i++) {\n Ve(t[i], this, n, this, r);\n }\n }\n\n return this;\n };\n }(Cn), function (e) {\n e.prototype._update = function (e, t) {\n var n = this,\n r = n.$el,\n i = n._vnode,\n o = Yt(n);\n n._vnode = e, n.$el = i ? n.__patch__(i, e) : n.__patch__(n.$el, e, t, !1), o(), r && (r.__vue__ = null), n.$el && (n.$el.__vue__ = n), n.$vnode && n.$parent && n.$vnode === n.$parent._vnode && (n.$parent.$el = n.$el);\n }, e.prototype.$forceUpdate = function () {\n this._watcher && this._watcher.update();\n }, e.prototype.$destroy = function () {\n var e = this;\n\n if (!e._isBeingDestroyed) {\n tn(e, \"beforeDestroy\"), e._isBeingDestroyed = !0;\n var t = e.$parent;\n !t || t._isBeingDestroyed || e.$options[\"abstract\"] || g(t.$children, e), e._watcher && e._watcher.teardown();\n\n for (var n = e._watchers.length; n--;) {\n e._watchers[n].teardown();\n }\n\n e._data.__ob__ && e._data.__ob__.vmCount--, e._isDestroyed = !0, e.__patch__(e._vnode, null), tn(e, \"destroyed\"), e.$off(), e.$el && (e.$el.__vue__ = null), e.$vnode && (e.$vnode.parent = null);\n }\n };\n }(Cn), function (e) {\n jt(e.prototype), e.prototype.$nextTick = function (e) {\n return tt(e, this);\n }, e.prototype._render = function () {\n var e,\n t = this,\n n = t.$options,\n r = n.render,\n i = n._parentVnode;\n i && (t.$scopedSlots = vt(i.data.scopedSlots, t.$slots, t.$scopedSlots)), t.$vnode = i;\n\n try {\n Vt = t, e = r.call(t._renderProxy, t.$createElement);\n } catch (n) {\n He(n, t, \"render\"), e = t._vnode;\n } finally {\n Vt = null;\n }\n\n return Array.isArray(e) && 1 === e.length && (e = e[0]), e instanceof he || (e = ye()), e.parent = i, e;\n };\n }(Cn);\n var Tn = [String, RegExp, Array],\n En = {\n KeepAlive: {\n name: \"keep-alive\",\n \"abstract\": !0,\n props: {\n include: Tn,\n exclude: Tn,\n max: [String, Number]\n },\n created: function created() {\n this.cache = Object.create(null), this.keys = [];\n },\n destroyed: function destroyed() {\n for (var e in this.cache) {\n Sn(this.cache, e, this.keys);\n }\n },\n mounted: function mounted() {\n var e = this;\n this.$watch(\"include\", function (t) {\n On(e, function (e) {\n return An(t, e);\n });\n }), this.$watch(\"exclude\", function (t) {\n On(e, function (e) {\n return !An(t, e);\n });\n });\n },\n render: function render() {\n var e = this.$slots[\"default\"],\n t = Kt(e),\n n = t && t.componentOptions;\n\n if (n) {\n var r = kn(n),\n i = this.include,\n o = this.exclude;\n if (i && (!r || !An(i, r)) || o && r && An(o, r)) return t;\n var a = this.cache,\n s = this.keys,\n c = null == t.key ? n.Ctor.cid + (n.tag ? \"::\" + n.tag : \"\") : t.key;\n a[c] ? (t.componentInstance = a[c].componentInstance, g(s, c), s.push(c)) : (a[c] = t, s.push(c), this.max && s.length > parseInt(this.max) && Sn(a, s[0], s, this._vnode)), t.data.keepAlive = !0;\n }\n\n return t || e && e[0];\n }\n }\n };\n !function (e) {\n var t = {\n get: function get() {\n return U;\n }\n };\n Object.defineProperty(e, \"config\", t), e.util = {\n warn: ue,\n extend: T,\n mergeOptions: De,\n defineReactive: Oe\n }, e.set = Se, e[\"delete\"] = Te, e.nextTick = tt, e.observable = function (e) {\n return Ae(e), e;\n }, e.options = Object.create(null), P.forEach(function (t) {\n e.options[t + \"s\"] = Object.create(null);\n }), e.options._base = e, T(e.options.components, En), function (e) {\n e.use = function (e) {\n var t = this._installedPlugins || (this._installedPlugins = []);\n if (t.indexOf(e) > -1) return this;\n var n = S(arguments, 1);\n return n.unshift(this), \"function\" == typeof e.install ? e.install.apply(e, n) : \"function\" == typeof e && e.apply(null, n), t.push(e), this;\n };\n }(e), function (e) {\n e.mixin = function (e) {\n return this.options = De(this.options, e), this;\n };\n }(e), function (e) {\n e.cid = 0;\n var t = 1;\n\n e.extend = function (e) {\n e = e || {};\n var n = this,\n r = n.cid,\n i = e._Ctor || (e._Ctor = {});\n if (i[r]) return i[r];\n\n var o = e.name || n.options.name,\n a = function a(e) {\n this._init(e);\n };\n\n return (a.prototype = Object.create(n.prototype)).constructor = a, a.cid = t++, a.options = De(n.options, e), a[\"super\"] = n, a.options.props && function (e) {\n var t = e.options.props;\n\n for (var n in t) {\n mn(e.prototype, \"_props\", n);\n }\n }(a), a.options.computed && function (e) {\n var t = e.options.computed;\n\n for (var n in t) {\n gn(e.prototype, n, t[n]);\n }\n }(a), a.extend = n.extend, a.mixin = n.mixin, a.use = n.use, P.forEach(function (e) {\n a[e] = n[e];\n }), o && (a.options.components[o] = a), a.superOptions = n.options, a.extendOptions = e, a.sealedOptions = T({}, a.options), i[r] = a, a;\n };\n }(e), function (e) {\n P.forEach(function (t) {\n e[t] = function (e, n) {\n return n ? (\"component\" === t && l(n) && (n.name = n.name || e, n = this.options._base.extend(n)), \"directive\" === t && \"function\" == typeof n && (n = {\n bind: n,\n update: n\n }), this.options[t + \"s\"][e] = n, n) : this.options[t + \"s\"][e];\n };\n });\n }(e);\n }(Cn), Object.defineProperty(Cn.prototype, \"$isServer\", {\n get: ie\n }), Object.defineProperty(Cn.prototype, \"$ssrContext\", {\n get: function get() {\n return this.$vnode && this.$vnode.ssrContext;\n }\n }), Object.defineProperty(Cn, \"FunctionalRenderContext\", {\n value: Lt\n }), Cn.version = \"2.6.10\";\n\n var jn = h(\"style,class\"),\n Ln = h(\"input,textarea,option,select,progress\"),\n In = function In(e, t, n) {\n return \"value\" === n && Ln(e) && \"button\" !== t || \"selected\" === n && \"option\" === e || \"checked\" === n && \"input\" === e || \"muted\" === n && \"video\" === e;\n },\n Nn = h(\"contenteditable,draggable,spellcheck\"),\n Mn = h(\"events,caret,typing,plaintext-only\"),\n Dn = function Dn(e, t) {\n return Bn(t) || \"false\" === t ? \"false\" : \"contenteditable\" === e && Mn(t) ? t : \"true\";\n },\n Fn = h(\"allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,translate,truespeed,typemustmatch,visible\"),\n Pn = \"http://www.w3.org/1999/xlink\",\n Rn = function Rn(e) {\n return \":\" === e.charAt(5) && \"xlink\" === e.slice(0, 5);\n },\n Un = function Un(e) {\n return Rn(e) ? e.slice(6, e.length) : \"\";\n },\n Bn = function Bn(e) {\n return null == e || !1 === e;\n };\n\n function Hn(e, t) {\n return {\n staticClass: Vn(e.staticClass, t.staticClass),\n \"class\": o(e[\"class\"]) ? [e[\"class\"], t[\"class\"]] : t[\"class\"]\n };\n }\n\n function Vn(e, t) {\n return e ? t ? e + \" \" + t : e : t || \"\";\n }\n\n function zn(e) {\n return Array.isArray(e) ? function (e) {\n for (var t, n = \"\", r = 0, i = e.length; r < i; r++) {\n o(t = zn(e[r])) && \"\" !== t && (n && (n += \" \"), n += t);\n }\n\n return n;\n }(e) : c(e) ? function (e) {\n var t = \"\";\n\n for (var n in e) {\n e[n] && (t && (t += \" \"), t += n);\n }\n\n return t;\n }(e) : \"string\" == typeof e ? e : \"\";\n }\n\n var Jn = {\n svg: \"http://www.w3.org/2000/svg\",\n math: \"http://www.w3.org/1998/Math/MathML\"\n },\n Kn = h(\"html,body,base,head,link,meta,style,title,address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,menuitem,summary,content,element,shadow,template,blockquote,iframe,tfoot\"),\n qn = h(\"svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,foreignObject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view\", !0),\n Wn = function Wn(e) {\n return Kn(e) || qn(e);\n };\n\n function Gn(e) {\n return qn(e) ? \"svg\" : \"math\" === e ? \"math\" : void 0;\n }\n\n var Xn = Object.create(null),\n Zn = h(\"text,number,password,search,email,tel,url\");\n\n function Yn(e) {\n return \"string\" == typeof e ? document.querySelector(e) || document.createElement(\"div\") : e;\n }\n\n var Qn = Object.freeze({\n createElement: function createElement(e, t) {\n var n = document.createElement(e);\n return \"select\" !== e ? n : (t.data && t.data.attrs && void 0 !== t.data.attrs.multiple && n.setAttribute(\"multiple\", \"multiple\"), n);\n },\n createElementNS: function createElementNS(e, t) {\n return document.createElementNS(Jn[e], t);\n },\n createTextNode: function createTextNode(e) {\n return document.createTextNode(e);\n },\n createComment: function createComment(e) {\n return document.createComment(e);\n },\n insertBefore: function insertBefore(e, t, n) {\n e.insertBefore(t, n);\n },\n removeChild: function removeChild(e, t) {\n e.removeChild(t);\n },\n appendChild: function appendChild(e, t) {\n e.appendChild(t);\n },\n parentNode: function parentNode(e) {\n return e.parentNode;\n },\n nextSibling: function nextSibling(e) {\n return e.nextSibling;\n },\n tagName: function tagName(e) {\n return e.tagName;\n },\n setTextContent: function setTextContent(e, t) {\n e.textContent = t;\n },\n setStyleScope: function setStyleScope(e, t) {\n e.setAttribute(t, \"\");\n }\n }),\n er = {\n create: function create(e, t) {\n tr(t);\n },\n update: function update(e, t) {\n e.data.ref !== t.data.ref && (tr(e, !0), tr(t));\n },\n destroy: function destroy(e) {\n tr(e, !0);\n }\n };\n\n function tr(e, t) {\n var n = e.data.ref;\n\n if (o(n)) {\n var r = e.context,\n i = e.componentInstance || e.elm,\n a = r.$refs;\n t ? Array.isArray(a[n]) ? g(a[n], i) : a[n] === i && (a[n] = void 0) : e.data.refInFor ? Array.isArray(a[n]) ? a[n].indexOf(i) < 0 && a[n].push(i) : a[n] = [i] : a[n] = i;\n }\n }\n\n var nr = new he(\"\", {}, []),\n rr = [\"create\", \"activate\", \"update\", \"remove\", \"destroy\"];\n\n function ir(e, t) {\n return e.key === t.key && (e.tag === t.tag && e.isComment === t.isComment && o(e.data) === o(t.data) && function (e, t) {\n if (\"input\" !== e.tag) return !0;\n var n,\n r = o(n = e.data) && o(n = n.attrs) && n.type,\n i = o(n = t.data) && o(n = n.attrs) && n.type;\n return r === i || Zn(r) && Zn(i);\n }(e, t) || a(e.isAsyncPlaceholder) && e.asyncFactory === t.asyncFactory && i(t.asyncFactory.error));\n }\n\n function or(e, t, n) {\n var r,\n i,\n a = {};\n\n for (r = t; r <= n; ++r) {\n o(i = e[r].key) && (a[i] = r);\n }\n\n return a;\n }\n\n var ar = {\n create: sr,\n update: sr,\n destroy: function destroy(e) {\n sr(e, nr);\n }\n };\n\n function sr(e, t) {\n (e.data.directives || t.data.directives) && function (e, t) {\n var n,\n r,\n i,\n o = e === nr,\n a = t === nr,\n s = ur(e.data.directives, e.context),\n c = ur(t.data.directives, t.context),\n u = [],\n l = [];\n\n for (n in c) {\n r = s[n], i = c[n], r ? (i.oldValue = r.value, i.oldArg = r.arg, fr(i, \"update\", t, e), i.def && i.def.componentUpdated && l.push(i)) : (fr(i, \"bind\", t, e), i.def && i.def.inserted && u.push(i));\n }\n\n if (u.length) {\n var f = function f() {\n for (var n = 0; n < u.length; n++) {\n fr(u[n], \"inserted\", t, e);\n }\n };\n\n o ? st(t, \"insert\", f) : f();\n }\n\n if (l.length && st(t, \"postpatch\", function () {\n for (var n = 0; n < l.length; n++) {\n fr(l[n], \"componentUpdated\", t, e);\n }\n }), !o) for (n in s) {\n c[n] || fr(s[n], \"unbind\", e, e, a);\n }\n }(e, t);\n }\n\n var cr = Object.create(null);\n\n function ur(e, t) {\n var n,\n r,\n i = Object.create(null);\n if (!e) return i;\n\n for (n = 0; n < e.length; n++) {\n (r = e[n]).modifiers || (r.modifiers = cr), i[lr(r)] = r, r.def = Fe(t.$options, \"directives\", r.name);\n }\n\n return i;\n }\n\n function lr(e) {\n return e.rawName || e.name + \".\" + Object.keys(e.modifiers || {}).join(\".\");\n }\n\n function fr(e, t, n, r, i) {\n var o = e.def && e.def[t];\n if (o) try {\n o(n.elm, e, n, r, i);\n } catch (r) {\n He(r, n.context, \"directive \" + e.name + \" \" + t + \" hook\");\n }\n }\n\n var dr = [er, ar];\n\n function pr(e, t) {\n var n = t.componentOptions;\n\n if (!(o(n) && !1 === n.Ctor.options.inheritAttrs || i(e.data.attrs) && i(t.data.attrs))) {\n var r,\n a,\n s = t.elm,\n c = e.data.attrs || {},\n u = t.data.attrs || {};\n\n for (r in o(u.__ob__) && (u = t.data.attrs = T({}, u)), u) {\n a = u[r], c[r] !== a && vr(s, r, a);\n }\n\n for (r in (X || Y) && u.value !== c.value && vr(s, \"value\", u.value), c) {\n i(u[r]) && (Rn(r) ? s.removeAttributeNS(Pn, Un(r)) : Nn(r) || s.removeAttribute(r));\n }\n }\n }\n\n function vr(e, t, n) {\n e.tagName.indexOf(\"-\") > -1 ? hr(e, t, n) : Fn(t) ? Bn(n) ? e.removeAttribute(t) : (n = \"allowfullscreen\" === t && \"EMBED\" === e.tagName ? \"true\" : t, e.setAttribute(t, n)) : Nn(t) ? e.setAttribute(t, Dn(t, n)) : Rn(t) ? Bn(n) ? e.removeAttributeNS(Pn, Un(t)) : e.setAttributeNS(Pn, t, n) : hr(e, t, n);\n }\n\n function hr(e, t, n) {\n if (Bn(n)) e.removeAttribute(t);else {\n if (X && !Z && \"TEXTAREA\" === e.tagName && \"placeholder\" === t && \"\" !== n && !e.__ieph) {\n var r = function r(t) {\n t.stopImmediatePropagation(), e.removeEventListener(\"input\", r);\n };\n\n e.addEventListener(\"input\", r), e.__ieph = !0;\n }\n\n e.setAttribute(t, n);\n }\n }\n\n var mr = {\n create: pr,\n update: pr\n };\n\n function yr(e, t) {\n var n = t.elm,\n r = t.data,\n a = e.data;\n\n if (!(i(r.staticClass) && i(r[\"class\"]) && (i(a) || i(a.staticClass) && i(a[\"class\"])))) {\n var s = function (e) {\n for (var t = e.data, n = e, r = e; o(r.componentInstance);) {\n (r = r.componentInstance._vnode) && r.data && (t = Hn(r.data, t));\n }\n\n for (; o(n = n.parent);) {\n n && n.data && (t = Hn(t, n.data));\n }\n\n return function (e, t) {\n return o(e) || o(t) ? Vn(e, zn(t)) : \"\";\n }(t.staticClass, t[\"class\"]);\n }(t),\n c = n._transitionClasses;\n\n o(c) && (s = Vn(s, zn(c))), s !== n._prevClass && (n.setAttribute(\"class\", s), n._prevClass = s);\n }\n }\n\n var gr,\n _r,\n br,\n wr,\n $r,\n xr,\n Cr = {\n create: yr,\n update: yr\n },\n kr = /[\\w).+\\-_$\\]]/;\n\n function Ar(e) {\n var t,\n n,\n r,\n i,\n o,\n a = !1,\n s = !1,\n c = !1,\n u = !1,\n l = 0,\n f = 0,\n d = 0,\n p = 0;\n\n for (r = 0; r < e.length; r++) {\n if (n = t, t = e.charCodeAt(r), a) 39 === t && 92 !== n && (a = !1);else if (s) 34 === t && 92 !== n && (s = !1);else if (c) 96 === t && 92 !== n && (c = !1);else if (u) 47 === t && 92 !== n && (u = !1);else if (124 !== t || 124 === e.charCodeAt(r + 1) || 124 === e.charCodeAt(r - 1) || l || f || d) {\n switch (t) {\n case 34:\n s = !0;\n break;\n\n case 39:\n a = !0;\n break;\n\n case 96:\n c = !0;\n break;\n\n case 40:\n d++;\n break;\n\n case 41:\n d--;\n break;\n\n case 91:\n f++;\n break;\n\n case 93:\n f--;\n break;\n\n case 123:\n l++;\n break;\n\n case 125:\n l--;\n }\n\n if (47 === t) {\n for (var v = r - 1, h = void 0; v >= 0 && \" \" === (h = e.charAt(v)); v--) {\n ;\n }\n\n h && kr.test(h) || (u = !0);\n }\n } else void 0 === i ? (p = r + 1, i = e.slice(0, r).trim()) : m();\n }\n\n function m() {\n (o || (o = [])).push(e.slice(p, r).trim()), p = r + 1;\n }\n\n if (void 0 === i ? i = e.slice(0, r).trim() : 0 !== p && m(), o) for (r = 0; r < o.length; r++) {\n i = Or(i, o[r]);\n }\n return i;\n }\n\n function Or(e, t) {\n var n = t.indexOf(\"(\");\n if (n < 0) return '_f(\"' + t + '\")(' + e + \")\";\n var r = t.slice(0, n),\n i = t.slice(n + 1);\n return '_f(\"' + r + '\")(' + e + (\")\" !== i ? \",\" + i : i);\n }\n\n function Sr(e, t) {\n console.error(\"[Vue compiler]: \" + e);\n }\n\n function Tr(e, t) {\n return e ? e.map(function (e) {\n return e[t];\n }).filter(function (e) {\n return e;\n }) : [];\n }\n\n function Er(e, t, n, r, i) {\n (e.props || (e.props = [])).push(Rr({\n name: t,\n value: n,\n dynamic: i\n }, r)), e.plain = !1;\n }\n\n function jr(e, t, n, r, i) {\n (i ? e.dynamicAttrs || (e.dynamicAttrs = []) : e.attrs || (e.attrs = [])).push(Rr({\n name: t,\n value: n,\n dynamic: i\n }, r)), e.plain = !1;\n }\n\n function Lr(e, t, n, r) {\n e.attrsMap[t] = n, e.attrsList.push(Rr({\n name: t,\n value: n\n }, r));\n }\n\n function Ir(e, t, n, r, i, o, a, s) {\n (e.directives || (e.directives = [])).push(Rr({\n name: t,\n rawName: n,\n value: r,\n arg: i,\n isDynamicArg: o,\n modifiers: a\n }, s)), e.plain = !1;\n }\n\n function Nr(e, t, n) {\n return n ? \"_p(\" + t + ',\"' + e + '\")' : e + t;\n }\n\n function Mr(e, t, n, i, o, a, s, c) {\n var u;\n (i = i || r).right ? c ? t = \"(\" + t + \")==='click'?'contextmenu':(\" + t + \")\" : \"click\" === t && (t = \"contextmenu\", delete i.right) : i.middle && (c ? t = \"(\" + t + \")==='click'?'mouseup':(\" + t + \")\" : \"click\" === t && (t = \"mouseup\")), i.capture && (delete i.capture, t = Nr(\"!\", t, c)), i.once && (delete i.once, t = Nr(\"~\", t, c)), i.passive && (delete i.passive, t = Nr(\"&\", t, c)), i[\"native\"] ? (delete i[\"native\"], u = e.nativeEvents || (e.nativeEvents = {})) : u = e.events || (e.events = {});\n var l = Rr({\n value: n.trim(),\n dynamic: c\n }, s);\n i !== r && (l.modifiers = i);\n var f = u[t];\n Array.isArray(f) ? o ? f.unshift(l) : f.push(l) : u[t] = f ? o ? [l, f] : [f, l] : l, e.plain = !1;\n }\n\n function Dr(e, t, n) {\n var r = Fr(e, \":\" + t) || Fr(e, \"v-bind:\" + t);\n if (null != r) return Ar(r);\n\n if (!1 !== n) {\n var i = Fr(e, t);\n if (null != i) return JSON.stringify(i);\n }\n }\n\n function Fr(e, t, n) {\n var r;\n if (null != (r = e.attrsMap[t])) for (var i = e.attrsList, o = 0, a = i.length; o < a; o++) {\n if (i[o].name === t) {\n i.splice(o, 1);\n break;\n }\n }\n return n && delete e.attrsMap[t], r;\n }\n\n function Pr(e, t) {\n for (var n = e.attrsList, r = 0, i = n.length; r < i; r++) {\n var o = n[r];\n if (t.test(o.name)) return n.splice(r, 1), o;\n }\n }\n\n function Rr(e, t) {\n return t && (null != t.start && (e.start = t.start), null != t.end && (e.end = t.end)), e;\n }\n\n function Ur(e, t, n) {\n var r = n || {},\n i = r.number,\n o = \"$$v\";\n r.trim && (o = \"(typeof $$v === 'string'? $$v.trim(): $$v)\"), i && (o = \"_n(\" + o + \")\");\n var a = Br(t, o);\n e.model = {\n value: \"(\" + t + \")\",\n expression: JSON.stringify(t),\n callback: \"function ($$v) {\" + a + \"}\"\n };\n }\n\n function Br(e, t) {\n var n = function (e) {\n if (e = e.trim(), gr = e.length, e.indexOf(\"[\") < 0 || e.lastIndexOf(\"]\") < gr - 1) return (wr = e.lastIndexOf(\".\")) > -1 ? {\n exp: e.slice(0, wr),\n key: '\"' + e.slice(wr + 1) + '\"'\n } : {\n exp: e,\n key: null\n };\n\n for (_r = e, wr = $r = xr = 0; !Vr();) {\n zr(br = Hr()) ? Kr(br) : 91 === br && Jr(br);\n }\n\n return {\n exp: e.slice(0, $r),\n key: e.slice($r + 1, xr)\n };\n }(e);\n\n return null === n.key ? e + \"=\" + t : \"$set(\" + n.exp + \", \" + n.key + \", \" + t + \")\";\n }\n\n function Hr() {\n return _r.charCodeAt(++wr);\n }\n\n function Vr() {\n return wr >= gr;\n }\n\n function zr(e) {\n return 34 === e || 39 === e;\n }\n\n function Jr(e) {\n var t = 1;\n\n for ($r = wr; !Vr();) {\n if (zr(e = Hr())) Kr(e);else if (91 === e && t++, 93 === e && t--, 0 === t) {\n xr = wr;\n break;\n }\n }\n }\n\n function Kr(e) {\n for (var t = e; !Vr() && (e = Hr()) !== t;) {\n ;\n }\n }\n\n var qr,\n Wr = \"__r\",\n Gr = \"__c\";\n\n function Xr(e, t, n) {\n var r = qr;\n return function i() {\n null !== t.apply(null, arguments) && Qr(e, i, n, r);\n };\n }\n\n var Zr = qe && !(ee && Number(ee[1]) <= 53);\n\n function Yr(e, t, n, r) {\n if (Zr) {\n var i = un,\n o = t;\n\n t = o._wrapper = function (e) {\n if (e.target === e.currentTarget || e.timeStamp >= i || e.timeStamp <= 0 || e.target.ownerDocument !== document) return o.apply(this, arguments);\n };\n }\n\n qr.addEventListener(e, t, ne ? {\n capture: n,\n passive: r\n } : n);\n }\n\n function Qr(e, t, n, r) {\n (r || qr).removeEventListener(e, t._wrapper || t, n);\n }\n\n function ei(e, t) {\n if (!i(e.data.on) || !i(t.data.on)) {\n var n = t.data.on || {},\n r = e.data.on || {};\n qr = t.elm, function (e) {\n if (o(e[Wr])) {\n var t = X ? \"change\" : \"input\";\n e[t] = [].concat(e[Wr], e[t] || []), delete e[Wr];\n }\n\n o(e[Gr]) && (e.change = [].concat(e[Gr], e.change || []), delete e[Gr]);\n }(n), at(n, r, Yr, Qr, Xr, t.context), qr = void 0;\n }\n }\n\n var ti,\n ni = {\n create: ei,\n update: ei\n };\n\n function ri(e, t) {\n if (!i(e.data.domProps) || !i(t.data.domProps)) {\n var n,\n r,\n a = t.elm,\n s = e.data.domProps || {},\n c = t.data.domProps || {};\n\n for (n in o(c.__ob__) && (c = t.data.domProps = T({}, c)), s) {\n n in c || (a[n] = \"\");\n }\n\n for (n in c) {\n if (r = c[n], \"textContent\" === n || \"innerHTML\" === n) {\n if (t.children && (t.children.length = 0), r === s[n]) continue;\n 1 === a.childNodes.length && a.removeChild(a.childNodes[0]);\n }\n\n if (\"value\" === n && \"PROGRESS\" !== a.tagName) {\n a._value = r;\n var u = i(r) ? \"\" : String(r);\n ii(a, u) && (a.value = u);\n } else if (\"innerHTML\" === n && qn(a.tagName) && i(a.innerHTML)) {\n (ti = ti || document.createElement(\"div\")).innerHTML = \"<svg>\" + r + \"</svg>\";\n\n for (var l = ti.firstChild; a.firstChild;) {\n a.removeChild(a.firstChild);\n }\n\n for (; l.firstChild;) {\n a.appendChild(l.firstChild);\n }\n } else if (r !== s[n]) try {\n a[n] = r;\n } catch (e) {}\n }\n }\n }\n\n function ii(e, t) {\n return !e.composing && (\"OPTION\" === e.tagName || function (e, t) {\n var n = !0;\n\n try {\n n = document.activeElement !== e;\n } catch (e) {}\n\n return n && e.value !== t;\n }(e, t) || function (e, t) {\n var n = e.value,\n r = e._vModifiers;\n\n if (o(r)) {\n if (r.number) return v(n) !== v(t);\n if (r.trim) return n.trim() !== t.trim();\n }\n\n return n !== t;\n }(e, t));\n }\n\n var oi = {\n create: ri,\n update: ri\n },\n ai = w(function (e) {\n var t = {},\n n = /:(.+)/;\n return e.split(/;(?![^(]*\\))/g).forEach(function (e) {\n if (e) {\n var r = e.split(n);\n r.length > 1 && (t[r[0].trim()] = r[1].trim());\n }\n }), t;\n });\n\n function si(e) {\n var t = ci(e.style);\n return e.staticStyle ? T(e.staticStyle, t) : t;\n }\n\n function ci(e) {\n return Array.isArray(e) ? E(e) : \"string\" == typeof e ? ai(e) : e;\n }\n\n var ui,\n li = /^--/,\n fi = /\\s*!important$/,\n di = function di(e, t, n) {\n if (li.test(t)) e.style.setProperty(t, n);else if (fi.test(n)) e.style.setProperty(A(t), n.replace(fi, \"\"), \"important\");else {\n var r = vi(t);\n if (Array.isArray(n)) for (var i = 0, o = n.length; i < o; i++) {\n e.style[r] = n[i];\n } else e.style[r] = n;\n }\n },\n pi = [\"Webkit\", \"Moz\", \"ms\"],\n vi = w(function (e) {\n if (ui = ui || document.createElement(\"div\").style, \"filter\" !== (e = x(e)) && e in ui) return e;\n\n for (var t = e.charAt(0).toUpperCase() + e.slice(1), n = 0; n < pi.length; n++) {\n var r = pi[n] + t;\n if (r in ui) return r;\n }\n });\n\n function hi(e, t) {\n var n = t.data,\n r = e.data;\n\n if (!(i(n.staticStyle) && i(n.style) && i(r.staticStyle) && i(r.style))) {\n var a,\n s,\n c = t.elm,\n u = r.staticStyle,\n l = r.normalizedStyle || r.style || {},\n f = u || l,\n d = ci(t.data.style) || {};\n t.data.normalizedStyle = o(d.__ob__) ? T({}, d) : d;\n\n var p = function (e, t) {\n for (var n, r = {}, i = e; i.componentInstance;) {\n (i = i.componentInstance._vnode) && i.data && (n = si(i.data)) && T(r, n);\n }\n\n (n = si(e.data)) && T(r, n);\n\n for (var o = e; o = o.parent;) {\n o.data && (n = si(o.data)) && T(r, n);\n }\n\n return r;\n }(t);\n\n for (s in f) {\n i(p[s]) && di(c, s, \"\");\n }\n\n for (s in p) {\n (a = p[s]) !== f[s] && di(c, s, null == a ? \"\" : a);\n }\n }\n }\n\n var mi = {\n create: hi,\n update: hi\n },\n yi = /\\s+/;\n\n function gi(e, t) {\n if (t && (t = t.trim())) if (e.classList) t.indexOf(\" \") > -1 ? t.split(yi).forEach(function (t) {\n return e.classList.add(t);\n }) : e.classList.add(t);else {\n var n = \" \" + (e.getAttribute(\"class\") || \"\") + \" \";\n n.indexOf(\" \" + t + \" \") < 0 && e.setAttribute(\"class\", (n + t).trim());\n }\n }\n\n function _i(e, t) {\n if (t && (t = t.trim())) if (e.classList) t.indexOf(\" \") > -1 ? t.split(yi).forEach(function (t) {\n return e.classList.remove(t);\n }) : e.classList.remove(t), e.classList.length || e.removeAttribute(\"class\");else {\n for (var n = \" \" + (e.getAttribute(\"class\") || \"\") + \" \", r = \" \" + t + \" \"; n.indexOf(r) >= 0;) {\n n = n.replace(r, \" \");\n }\n\n (n = n.trim()) ? e.setAttribute(\"class\", n) : e.removeAttribute(\"class\");\n }\n }\n\n function bi(e) {\n if (e) {\n if (\"object\" == _typeof(e)) {\n var t = {};\n return !1 !== e.css && T(t, wi(e.name || \"v\")), T(t, e), t;\n }\n\n return \"string\" == typeof e ? wi(e) : void 0;\n }\n }\n\n var wi = w(function (e) {\n return {\n enterClass: e + \"-enter\",\n enterToClass: e + \"-enter-to\",\n enterActiveClass: e + \"-enter-active\",\n leaveClass: e + \"-leave\",\n leaveToClass: e + \"-leave-to\",\n leaveActiveClass: e + \"-leave-active\"\n };\n }),\n $i = K && !Z,\n xi = \"transition\",\n Ci = \"animation\",\n ki = \"transition\",\n Ai = \"transitionend\",\n Oi = \"animation\",\n Si = \"animationend\";\n $i && (void 0 === window.ontransitionend && void 0 !== window.onwebkittransitionend && (ki = \"WebkitTransition\", Ai = \"webkitTransitionEnd\"), void 0 === window.onanimationend && void 0 !== window.onwebkitanimationend && (Oi = \"WebkitAnimation\", Si = \"webkitAnimationEnd\"));\n var Ti = K ? window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : setTimeout : function (e) {\n return e();\n };\n\n function Ei(e) {\n Ti(function () {\n Ti(e);\n });\n }\n\n function ji(e, t) {\n var n = e._transitionClasses || (e._transitionClasses = []);\n n.indexOf(t) < 0 && (n.push(t), gi(e, t));\n }\n\n function Li(e, t) {\n e._transitionClasses && g(e._transitionClasses, t), _i(e, t);\n }\n\n function Ii(e, t, n) {\n var r = Mi(e, t),\n i = r.type,\n o = r.timeout,\n a = r.propCount;\n if (!i) return n();\n\n var s = i === xi ? Ai : Si,\n c = 0,\n u = function u() {\n e.removeEventListener(s, l), n();\n },\n l = function l(t) {\n t.target === e && ++c >= a && u();\n };\n\n setTimeout(function () {\n c < a && u();\n }, o + 1), e.addEventListener(s, l);\n }\n\n var Ni = /\\b(transform|all)(,|$)/;\n\n function Mi(e, t) {\n var n,\n r = window.getComputedStyle(e),\n i = (r[ki + \"Delay\"] || \"\").split(\", \"),\n o = (r[ki + \"Duration\"] || \"\").split(\", \"),\n a = Di(i, o),\n s = (r[Oi + \"Delay\"] || \"\").split(\", \"),\n c = (r[Oi + \"Duration\"] || \"\").split(\", \"),\n u = Di(s, c),\n l = 0,\n f = 0;\n return t === xi ? a > 0 && (n = xi, l = a, f = o.length) : t === Ci ? u > 0 && (n = Ci, l = u, f = c.length) : f = (n = (l = Math.max(a, u)) > 0 ? a > u ? xi : Ci : null) ? n === xi ? o.length : c.length : 0, {\n type: n,\n timeout: l,\n propCount: f,\n hasTransform: n === xi && Ni.test(r[ki + \"Property\"])\n };\n }\n\n function Di(e, t) {\n for (; e.length < t.length;) {\n e = e.concat(e);\n }\n\n return Math.max.apply(null, t.map(function (t, n) {\n return Fi(t) + Fi(e[n]);\n }));\n }\n\n function Fi(e) {\n return 1e3 * Number(e.slice(0, -1).replace(\",\", \".\"));\n }\n\n function Pi(e, t) {\n var n = e.elm;\n o(n._leaveCb) && (n._leaveCb.cancelled = !0, n._leaveCb());\n var r = bi(e.data.transition);\n\n if (!i(r) && !o(n._enterCb) && 1 === n.nodeType) {\n for (var a = r.css, s = r.type, u = r.enterClass, l = r.enterToClass, f = r.enterActiveClass, d = r.appearClass, p = r.appearToClass, h = r.appearActiveClass, m = r.beforeEnter, y = r.enter, g = r.afterEnter, _ = r.enterCancelled, b = r.beforeAppear, w = r.appear, $ = r.afterAppear, x = r.appearCancelled, C = r.duration, k = Zt, A = Zt.$vnode; A && A.parent;) {\n k = A.context, A = A.parent;\n }\n\n var O = !k._isMounted || !e.isRootInsert;\n\n if (!O || w || \"\" === w) {\n var S = O && d ? d : u,\n T = O && h ? h : f,\n E = O && p ? p : l,\n j = O && b || m,\n L = O && \"function\" == typeof w ? w : y,\n I = O && $ || g,\n N = O && x || _,\n M = v(c(C) ? C.enter : C),\n F = !1 !== a && !Z,\n P = Bi(L),\n R = n._enterCb = D(function () {\n F && (Li(n, E), Li(n, T)), R.cancelled ? (F && Li(n, S), N && N(n)) : I && I(n), n._enterCb = null;\n });\n e.data.show || st(e, \"insert\", function () {\n var t = n.parentNode,\n r = t && t._pending && t._pending[e.key];\n r && r.tag === e.tag && r.elm._leaveCb && r.elm._leaveCb(), L && L(n, R);\n }), j && j(n), F && (ji(n, S), ji(n, T), Ei(function () {\n Li(n, S), R.cancelled || (ji(n, E), P || (Ui(M) ? setTimeout(R, M) : Ii(n, s, R)));\n })), e.data.show && (t && t(), L && L(n, R)), F || P || R();\n }\n }\n }\n\n function Ri(e, t) {\n var n = e.elm;\n o(n._enterCb) && (n._enterCb.cancelled = !0, n._enterCb());\n var r = bi(e.data.transition);\n if (i(r) || 1 !== n.nodeType) return t();\n\n if (!o(n._leaveCb)) {\n var a = r.css,\n s = r.type,\n u = r.leaveClass,\n l = r.leaveToClass,\n f = r.leaveActiveClass,\n d = r.beforeLeave,\n p = r.leave,\n h = r.afterLeave,\n m = r.leaveCancelled,\n y = r.delayLeave,\n g = r.duration,\n _ = !1 !== a && !Z,\n b = Bi(p),\n w = v(c(g) ? g.leave : g),\n $ = n._leaveCb = D(function () {\n n.parentNode && n.parentNode._pending && (n.parentNode._pending[e.key] = null), _ && (Li(n, l), Li(n, f)), $.cancelled ? (_ && Li(n, u), m && m(n)) : (t(), h && h(n)), n._leaveCb = null;\n });\n\n y ? y(x) : x();\n }\n\n function x() {\n $.cancelled || (!e.data.show && n.parentNode && ((n.parentNode._pending || (n.parentNode._pending = {}))[e.key] = e), d && d(n), _ && (ji(n, u), ji(n, f), Ei(function () {\n Li(n, u), $.cancelled || (ji(n, l), b || (Ui(w) ? setTimeout($, w) : Ii(n, s, $)));\n })), p && p(n, $), _ || b || $());\n }\n }\n\n function Ui(e) {\n return \"number\" == typeof e && !isNaN(e);\n }\n\n function Bi(e) {\n if (i(e)) return !1;\n var t = e.fns;\n return o(t) ? Bi(Array.isArray(t) ? t[0] : t) : (e._length || e.length) > 1;\n }\n\n function Hi(e, t) {\n !0 !== t.data.show && Pi(t);\n }\n\n var Vi = function (e) {\n var t,\n n,\n r = {},\n c = e.modules,\n u = e.nodeOps;\n\n for (t = 0; t < rr.length; ++t) {\n for (r[rr[t]] = [], n = 0; n < c.length; ++n) {\n o(c[n][rr[t]]) && r[rr[t]].push(c[n][rr[t]]);\n }\n }\n\n function l(e) {\n var t = u.parentNode(e);\n o(t) && u.removeChild(t, e);\n }\n\n function f(e, t, n, i, s, c, l) {\n if (o(e.elm) && o(c) && (e = c[l] = _e(e)), e.isRootInsert = !s, !function (e, t, n, i) {\n var s = e.data;\n\n if (o(s)) {\n var c = o(e.componentInstance) && s.keepAlive;\n if (o(s = s.hook) && o(s = s.init) && s(e, !1), o(e.componentInstance)) return d(e, t), p(n, e.elm, i), a(c) && function (e, t, n, i) {\n for (var a, s = e; s.componentInstance;) {\n if (o(a = (s = s.componentInstance._vnode).data) && o(a = a.transition)) {\n for (a = 0; a < r.activate.length; ++a) {\n r.activate[a](nr, s);\n }\n\n t.push(s);\n break;\n }\n }\n\n p(n, e.elm, i);\n }(e, t, n, i), !0;\n }\n }(e, t, n, i)) {\n var f = e.data,\n h = e.children,\n m = e.tag;\n o(m) ? (e.elm = e.ns ? u.createElementNS(e.ns, m) : u.createElement(m, e), g(e), v(e, h, t), o(f) && y(e, t), p(n, e.elm, i)) : a(e.isComment) ? (e.elm = u.createComment(e.text), p(n, e.elm, i)) : (e.elm = u.createTextNode(e.text), p(n, e.elm, i));\n }\n }\n\n function d(e, t) {\n o(e.data.pendingInsert) && (t.push.apply(t, e.data.pendingInsert), e.data.pendingInsert = null), e.elm = e.componentInstance.$el, m(e) ? (y(e, t), g(e)) : (tr(e), t.push(e));\n }\n\n function p(e, t, n) {\n o(e) && (o(n) ? u.parentNode(n) === e && u.insertBefore(e, t, n) : u.appendChild(e, t));\n }\n\n function v(e, t, n) {\n if (Array.isArray(t)) for (var r = 0; r < t.length; ++r) {\n f(t[r], n, e.elm, null, !0, t, r);\n } else s(e.text) && u.appendChild(e.elm, u.createTextNode(String(e.text)));\n }\n\n function m(e) {\n for (; e.componentInstance;) {\n e = e.componentInstance._vnode;\n }\n\n return o(e.tag);\n }\n\n function y(e, n) {\n for (var i = 0; i < r.create.length; ++i) {\n r.create[i](nr, e);\n }\n\n o(t = e.data.hook) && (o(t.create) && t.create(nr, e), o(t.insert) && n.push(e));\n }\n\n function g(e) {\n var t;\n if (o(t = e.fnScopeId)) u.setStyleScope(e.elm, t);else for (var n = e; n;) {\n o(t = n.context) && o(t = t.$options._scopeId) && u.setStyleScope(e.elm, t), n = n.parent;\n }\n o(t = Zt) && t !== e.context && t !== e.fnContext && o(t = t.$options._scopeId) && u.setStyleScope(e.elm, t);\n }\n\n function _(e, t, n, r, i, o) {\n for (; r <= i; ++r) {\n f(n[r], o, e, t, !1, n, r);\n }\n }\n\n function b(e) {\n var t,\n n,\n i = e.data;\n if (o(i)) for (o(t = i.hook) && o(t = t.destroy) && t(e), t = 0; t < r.destroy.length; ++t) {\n r.destroy[t](e);\n }\n if (o(t = e.children)) for (n = 0; n < e.children.length; ++n) {\n b(e.children[n]);\n }\n }\n\n function w(e, t, n, r) {\n for (; n <= r; ++n) {\n var i = t[n];\n o(i) && (o(i.tag) ? ($(i), b(i)) : l(i.elm));\n }\n }\n\n function $(e, t) {\n if (o(t) || o(e.data)) {\n var n,\n i = r.remove.length + 1;\n\n for (o(t) ? t.listeners += i : t = function (e, t) {\n function n() {\n 0 == --n.listeners && l(e);\n }\n\n return n.listeners = t, n;\n }(e.elm, i), o(n = e.componentInstance) && o(n = n._vnode) && o(n.data) && $(n, t), n = 0; n < r.remove.length; ++n) {\n r.remove[n](e, t);\n }\n\n o(n = e.data.hook) && o(n = n.remove) ? n(e, t) : t();\n } else l(e.elm);\n }\n\n function x(e, t, n, r) {\n for (var i = n; i < r; i++) {\n var a = t[i];\n if (o(a) && ir(e, a)) return i;\n }\n }\n\n function C(e, t, n, s, c, l) {\n if (e !== t) {\n o(t.elm) && o(s) && (t = s[c] = _e(t));\n var d = t.elm = e.elm;\n if (a(e.isAsyncPlaceholder)) o(t.asyncFactory.resolved) ? O(e.elm, t, n) : t.isAsyncPlaceholder = !0;else if (a(t.isStatic) && a(e.isStatic) && t.key === e.key && (a(t.isCloned) || a(t.isOnce))) t.componentInstance = e.componentInstance;else {\n var p,\n v = t.data;\n o(v) && o(p = v.hook) && o(p = p.prepatch) && p(e, t);\n var h = e.children,\n y = t.children;\n\n if (o(v) && m(t)) {\n for (p = 0; p < r.update.length; ++p) {\n r.update[p](e, t);\n }\n\n o(p = v.hook) && o(p = p.update) && p(e, t);\n }\n\n i(t.text) ? o(h) && o(y) ? h !== y && function (e, t, n, r, a) {\n for (var s, c, l, d = 0, p = 0, v = t.length - 1, h = t[0], m = t[v], y = n.length - 1, g = n[0], b = n[y], $ = !a; d <= v && p <= y;) {\n i(h) ? h = t[++d] : i(m) ? m = t[--v] : ir(h, g) ? (C(h, g, r, n, p), h = t[++d], g = n[++p]) : ir(m, b) ? (C(m, b, r, n, y), m = t[--v], b = n[--y]) : ir(h, b) ? (C(h, b, r, n, y), $ && u.insertBefore(e, h.elm, u.nextSibling(m.elm)), h = t[++d], b = n[--y]) : ir(m, g) ? (C(m, g, r, n, p), $ && u.insertBefore(e, m.elm, h.elm), m = t[--v], g = n[++p]) : (i(s) && (s = or(t, d, v)), i(c = o(g.key) ? s[g.key] : x(g, t, d, v)) ? f(g, r, e, h.elm, !1, n, p) : ir(l = t[c], g) ? (C(l, g, r, n, p), t[c] = void 0, $ && u.insertBefore(e, l.elm, h.elm)) : f(g, r, e, h.elm, !1, n, p), g = n[++p]);\n }\n\n d > v ? _(e, i(n[y + 1]) ? null : n[y + 1].elm, n, p, y, r) : p > y && w(0, t, d, v);\n }(d, h, y, n, l) : o(y) ? (o(e.text) && u.setTextContent(d, \"\"), _(d, null, y, 0, y.length - 1, n)) : o(h) ? w(0, h, 0, h.length - 1) : o(e.text) && u.setTextContent(d, \"\") : e.text !== t.text && u.setTextContent(d, t.text), o(v) && o(p = v.hook) && o(p = p.postpatch) && p(e, t);\n }\n }\n }\n\n function k(e, t, n) {\n if (a(n) && o(e.parent)) e.parent.data.pendingInsert = t;else for (var r = 0; r < t.length; ++r) {\n t[r].data.hook.insert(t[r]);\n }\n }\n\n var A = h(\"attrs,class,staticClass,staticStyle,key\");\n\n function O(e, t, n, r) {\n var i,\n s = t.tag,\n c = t.data,\n u = t.children;\n if (r = r || c && c.pre, t.elm = e, a(t.isComment) && o(t.asyncFactory)) return t.isAsyncPlaceholder = !0, !0;\n if (o(c) && (o(i = c.hook) && o(i = i.init) && i(t, !0), o(i = t.componentInstance))) return d(t, n), !0;\n\n if (o(s)) {\n if (o(u)) if (e.hasChildNodes()) {\n if (o(i = c) && o(i = i.domProps) && o(i = i.innerHTML)) {\n if (i !== e.innerHTML) return !1;\n } else {\n for (var l = !0, f = e.firstChild, p = 0; p < u.length; p++) {\n if (!f || !O(f, u[p], n, r)) {\n l = !1;\n break;\n }\n\n f = f.nextSibling;\n }\n\n if (!l || f) return !1;\n }\n } else v(t, u, n);\n\n if (o(c)) {\n var h = !1;\n\n for (var m in c) {\n if (!A(m)) {\n h = !0, y(t, n);\n break;\n }\n }\n\n !h && c[\"class\"] && rt(c[\"class\"]);\n }\n } else e.data !== t.text && (e.data = t.text);\n\n return !0;\n }\n\n return function (e, t, n, s) {\n if (!i(t)) {\n var c,\n l = !1,\n d = [];\n if (i(e)) l = !0, f(t, d);else {\n var p = o(e.nodeType);\n if (!p && ir(e, t)) C(e, t, d, null, null, s);else {\n if (p) {\n if (1 === e.nodeType && e.hasAttribute(F) && (e.removeAttribute(F), n = !0), a(n) && O(e, t, d)) return k(t, d, !0), e;\n c = e, e = new he(u.tagName(c).toLowerCase(), {}, [], void 0, c);\n }\n\n var v = e.elm,\n h = u.parentNode(v);\n if (f(t, d, v._leaveCb ? null : h, u.nextSibling(v)), o(t.parent)) for (var y = t.parent, g = m(t); y;) {\n for (var _ = 0; _ < r.destroy.length; ++_) {\n r.destroy[_](y);\n }\n\n if (y.elm = t.elm, g) {\n for (var $ = 0; $ < r.create.length; ++$) {\n r.create[$](nr, y);\n }\n\n var x = y.data.hook.insert;\n if (x.merged) for (var A = 1; A < x.fns.length; A++) {\n x.fns[A]();\n }\n } else tr(y);\n\n y = y.parent;\n }\n o(h) ? w(0, [e], 0, 0) : o(e.tag) && b(e);\n }\n }\n return k(t, d, l), t.elm;\n }\n\n o(e) && b(e);\n };\n }({\n nodeOps: Qn,\n modules: [mr, Cr, ni, oi, mi, K ? {\n create: Hi,\n activate: Hi,\n remove: function remove(e, t) {\n !0 !== e.data.show ? Ri(e, t) : t();\n }\n } : {}].concat(dr)\n });\n\n Z && document.addEventListener(\"selectionchange\", function () {\n var e = document.activeElement;\n e && e.vmodel && Zi(e, \"input\");\n });\n var zi = {\n inserted: function inserted(e, t, n, r) {\n \"select\" === n.tag ? (r.elm && !r.elm._vOptions ? st(n, \"postpatch\", function () {\n zi.componentUpdated(e, t, n);\n }) : Ji(e, t, n.context), e._vOptions = [].map.call(e.options, Wi)) : (\"textarea\" === n.tag || Zn(e.type)) && (e._vModifiers = t.modifiers, t.modifiers.lazy || (e.addEventListener(\"compositionstart\", Gi), e.addEventListener(\"compositionend\", Xi), e.addEventListener(\"change\", Xi), Z && (e.vmodel = !0)));\n },\n componentUpdated: function componentUpdated(e, t, n) {\n if (\"select\" === n.tag) {\n Ji(e, t, n.context);\n var r = e._vOptions,\n i = e._vOptions = [].map.call(e.options, Wi);\n i.some(function (e, t) {\n return !N(e, r[t]);\n }) && (e.multiple ? t.value.some(function (e) {\n return qi(e, i);\n }) : t.value !== t.oldValue && qi(t.value, i)) && Zi(e, \"change\");\n }\n }\n };\n\n function Ji(e, t, n) {\n Ki(e, t, n), (X || Y) && setTimeout(function () {\n Ki(e, t, n);\n }, 0);\n }\n\n function Ki(e, t, n) {\n var r = t.value,\n i = e.multiple;\n\n if (!i || Array.isArray(r)) {\n for (var o, a, s = 0, c = e.options.length; s < c; s++) {\n if (a = e.options[s], i) o = M(r, Wi(a)) > -1, a.selected !== o && (a.selected = o);else if (N(Wi(a), r)) return void (e.selectedIndex !== s && (e.selectedIndex = s));\n }\n\n i || (e.selectedIndex = -1);\n }\n }\n\n function qi(e, t) {\n return t.every(function (t) {\n return !N(t, e);\n });\n }\n\n function Wi(e) {\n return \"_value\" in e ? e._value : e.value;\n }\n\n function Gi(e) {\n e.target.composing = !0;\n }\n\n function Xi(e) {\n e.target.composing && (e.target.composing = !1, Zi(e.target, \"input\"));\n }\n\n function Zi(e, t) {\n var n = document.createEvent(\"HTMLEvents\");\n n.initEvent(t, !0, !0), e.dispatchEvent(n);\n }\n\n function Yi(e) {\n return !e.componentInstance || e.data && e.data.transition ? e : Yi(e.componentInstance._vnode);\n }\n\n var Qi = {\n model: zi,\n show: {\n bind: function bind(e, t, n) {\n var r = t.value,\n i = (n = Yi(n)).data && n.data.transition,\n o = e.__vOriginalDisplay = \"none\" === e.style.display ? \"\" : e.style.display;\n r && i ? (n.data.show = !0, Pi(n, function () {\n e.style.display = o;\n })) : e.style.display = r ? o : \"none\";\n },\n update: function update(e, t, n) {\n var r = t.value;\n !r != !t.oldValue && ((n = Yi(n)).data && n.data.transition ? (n.data.show = !0, r ? Pi(n, function () {\n e.style.display = e.__vOriginalDisplay;\n }) : Ri(n, function () {\n e.style.display = \"none\";\n })) : e.style.display = r ? e.__vOriginalDisplay : \"none\");\n },\n unbind: function unbind(e, t, n, r, i) {\n i || (e.style.display = e.__vOriginalDisplay);\n }\n }\n },\n eo = {\n name: String,\n appear: Boolean,\n css: Boolean,\n mode: String,\n type: String,\n enterClass: String,\n leaveClass: String,\n enterToClass: String,\n leaveToClass: String,\n enterActiveClass: String,\n leaveActiveClass: String,\n appearClass: String,\n appearActiveClass: String,\n appearToClass: String,\n duration: [Number, String, Object]\n };\n\n function to(e) {\n var t = e && e.componentOptions;\n return t && t.Ctor.options[\"abstract\"] ? to(Kt(t.children)) : e;\n }\n\n function no(e) {\n var t = {},\n n = e.$options;\n\n for (var r in n.propsData) {\n t[r] = e[r];\n }\n\n var i = n._parentListeners;\n\n for (var o in i) {\n t[x(o)] = i[o];\n }\n\n return t;\n }\n\n function ro(e, t) {\n if (/\\d-keep-alive$/.test(t.tag)) return e(\"keep-alive\", {\n props: t.componentOptions.propsData\n });\n }\n\n var io = function io(e) {\n return e.tag || Jt(e);\n },\n oo = function oo(e) {\n return \"show\" === e.name;\n },\n ao = {\n name: \"transition\",\n props: eo,\n \"abstract\": !0,\n render: function render(e) {\n var t = this,\n n = this.$slots[\"default\"];\n\n if (n && (n = n.filter(io)).length) {\n var r = this.mode,\n i = n[0];\n if (function (e) {\n for (; e = e.parent;) {\n if (e.data.transition) return !0;\n }\n }(this.$vnode)) return i;\n var o = to(i);\n if (!o) return i;\n if (this._leaving) return ro(e, i);\n var a = \"__transition-\" + this._uid + \"-\";\n o.key = null == o.key ? o.isComment ? a + \"comment\" : a + o.tag : s(o.key) ? 0 === String(o.key).indexOf(a) ? o.key : a + o.key : o.key;\n var c = (o.data || (o.data = {})).transition = no(this),\n u = this._vnode,\n l = to(u);\n\n if (o.data.directives && o.data.directives.some(oo) && (o.data.show = !0), l && l.data && !function (e, t) {\n return t.key === e.key && t.tag === e.tag;\n }(o, l) && !Jt(l) && (!l.componentInstance || !l.componentInstance._vnode.isComment)) {\n var f = l.data.transition = T({}, c);\n if (\"out-in\" === r) return this._leaving = !0, st(f, \"afterLeave\", function () {\n t._leaving = !1, t.$forceUpdate();\n }), ro(e, i);\n\n if (\"in-out\" === r) {\n if (Jt(o)) return u;\n\n var d,\n p = function p() {\n d();\n };\n\n st(c, \"afterEnter\", p), st(c, \"enterCancelled\", p), st(f, \"delayLeave\", function (e) {\n d = e;\n });\n }\n }\n\n return i;\n }\n }\n },\n so = T({\n tag: String,\n moveClass: String\n }, eo);\n\n function co(e) {\n e.elm._moveCb && e.elm._moveCb(), e.elm._enterCb && e.elm._enterCb();\n }\n\n function uo(e) {\n e.data.newPos = e.elm.getBoundingClientRect();\n }\n\n function lo(e) {\n var t = e.data.pos,\n n = e.data.newPos,\n r = t.left - n.left,\n i = t.top - n.top;\n\n if (r || i) {\n e.data.moved = !0;\n var o = e.elm.style;\n o.transform = o.WebkitTransform = \"translate(\" + r + \"px,\" + i + \"px)\", o.transitionDuration = \"0s\";\n }\n }\n\n delete so.mode;\n var fo = {\n Transition: ao,\n TransitionGroup: {\n props: so,\n beforeMount: function beforeMount() {\n var e = this,\n t = this._update;\n\n this._update = function (n, r) {\n var i = Yt(e);\n e.__patch__(e._vnode, e.kept, !1, !0), e._vnode = e.kept, i(), t.call(e, n, r);\n };\n },\n render: function render(e) {\n for (var t = this.tag || this.$vnode.data.tag || \"span\", n = Object.create(null), r = this.prevChildren = this.children, i = this.$slots[\"default\"] || [], o = this.children = [], a = no(this), s = 0; s < i.length; s++) {\n var c = i[s];\n c.tag && null != c.key && 0 !== String(c.key).indexOf(\"__vlist\") && (o.push(c), n[c.key] = c, (c.data || (c.data = {})).transition = a);\n }\n\n if (r) {\n for (var u = [], l = [], f = 0; f < r.length; f++) {\n var d = r[f];\n d.data.transition = a, d.data.pos = d.elm.getBoundingClientRect(), n[d.key] ? u.push(d) : l.push(d);\n }\n\n this.kept = e(t, null, u), this.removed = l;\n }\n\n return e(t, null, o);\n },\n updated: function updated() {\n var e = this.prevChildren,\n t = this.moveClass || (this.name || \"v\") + \"-move\";\n e.length && this.hasMove(e[0].elm, t) && (e.forEach(co), e.forEach(uo), e.forEach(lo), this._reflow = document.body.offsetHeight, e.forEach(function (e) {\n if (e.data.moved) {\n var n = e.elm,\n r = n.style;\n ji(n, t), r.transform = r.WebkitTransform = r.transitionDuration = \"\", n.addEventListener(Ai, n._moveCb = function e(r) {\n r && r.target !== n || r && !/transform$/.test(r.propertyName) || (n.removeEventListener(Ai, e), n._moveCb = null, Li(n, t));\n });\n }\n }));\n },\n methods: {\n hasMove: function hasMove(e, t) {\n if (!$i) return !1;\n if (this._hasMove) return this._hasMove;\n var n = e.cloneNode();\n e._transitionClasses && e._transitionClasses.forEach(function (e) {\n _i(n, e);\n }), gi(n, t), n.style.display = \"none\", this.$el.appendChild(n);\n var r = Mi(n);\n return this.$el.removeChild(n), this._hasMove = r.hasTransform;\n }\n }\n }\n };\n Cn.config.mustUseProp = In, Cn.config.isReservedTag = Wn, Cn.config.isReservedAttr = jn, Cn.config.getTagNamespace = Gn, Cn.config.isUnknownElement = function (e) {\n if (!K) return !0;\n if (Wn(e)) return !1;\n if (e = e.toLowerCase(), null != Xn[e]) return Xn[e];\n var t = document.createElement(e);\n return e.indexOf(\"-\") > -1 ? Xn[e] = t.constructor === window.HTMLUnknownElement || t.constructor === window.HTMLElement : Xn[e] = /HTMLUnknownElement/.test(t.toString());\n }, T(Cn.options.directives, Qi), T(Cn.options.components, fo), Cn.prototype.__patch__ = K ? Vi : j, Cn.prototype.$mount = function (e, t) {\n return function (e, t, n) {\n var r;\n return e.$el = t, e.$options.render || (e.$options.render = ye), tn(e, \"beforeMount\"), r = function r() {\n e._update(e._render(), n);\n }, new vn(e, r, j, {\n before: function before() {\n e._isMounted && !e._isDestroyed && tn(e, \"beforeUpdate\");\n }\n }, !0), n = !1, null == e.$vnode && (e._isMounted = !0, tn(e, \"mounted\")), e;\n }(this, e = e && K ? Yn(e) : void 0, t);\n }, K && setTimeout(function () {\n U.devtools && oe && oe.emit(\"init\", Cn);\n }, 0);\n\n var po,\n vo = /\\{\\{((?:.|\\r?\\n)+?)\\}\\}/g,\n ho = /[-.*+?^${}()|[\\]\\/\\\\]/g,\n mo = w(function (e) {\n var t = e[0].replace(ho, \"\\\\$&\"),\n n = e[1].replace(ho, \"\\\\$&\");\n return new RegExp(t + \"((?:.|\\\\n)+?)\" + n, \"g\");\n }),\n yo = {\n staticKeys: [\"staticClass\"],\n transformNode: function transformNode(e, t) {\n t.warn;\n var n = Fr(e, \"class\");\n n && (e.staticClass = JSON.stringify(n));\n var r = Dr(e, \"class\", !1);\n r && (e.classBinding = r);\n },\n genData: function genData(e) {\n var t = \"\";\n return e.staticClass && (t += \"staticClass:\" + e.staticClass + \",\"), e.classBinding && (t += \"class:\" + e.classBinding + \",\"), t;\n }\n },\n go = {\n staticKeys: [\"staticStyle\"],\n transformNode: function transformNode(e, t) {\n t.warn;\n var n = Fr(e, \"style\");\n n && (e.staticStyle = JSON.stringify(ai(n)));\n var r = Dr(e, \"style\", !1);\n r && (e.styleBinding = r);\n },\n genData: function genData(e) {\n var t = \"\";\n return e.staticStyle && (t += \"staticStyle:\" + e.staticStyle + \",\"), e.styleBinding && (t += \"style:(\" + e.styleBinding + \"),\"), t;\n }\n },\n _o = h(\"area,base,br,col,embed,frame,hr,img,input,isindex,keygen,link,meta,param,source,track,wbr\"),\n bo = h(\"colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source\"),\n wo = h(\"address,article,aside,base,blockquote,body,caption,col,colgroup,dd,details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,title,tr,track\"),\n $o = /^\\s*([^\\s\"'<>\\/=]+)(?:\\s*(=)\\s*(?:\"([^\"]*)\"+|'([^']*)'+|([^\\s\"'=<>`]+)))?/,\n xo = /^\\s*((?:v-[\\w-]+:|@|:|#)\\[[^=]+\\][^\\s\"'<>\\/=]*)(?:\\s*(=)\\s*(?:\"([^\"]*)\"+|'([^']*)'+|([^\\s\"'=<>`]+)))?/,\n Co = \"[a-zA-Z_][\\\\-\\\\.0-9_a-zA-Z\" + B.source + \"]*\",\n ko = \"((?:\" + Co + \"\\\\:)?\" + Co + \")\",\n Ao = new RegExp(\"^<\" + ko),\n Oo = /^\\s*(\\/?)>/,\n So = new RegExp(\"^<\\\\/\" + ko + \"[^>]*>\"),\n To = /^<!DOCTYPE [^>]+>/i,\n Eo = /^<!\\--/,\n jo = /^<!\\[/,\n Lo = h(\"script,style,textarea\", !0),\n Io = {},\n No = {\n \"<\": \"<\",\n \">\": \">\",\n \""\": '\"',\n \"&\": \"&\",\n \" \": \"\\n\",\n \"	\": \"\\t\",\n \"'\": \"'\"\n },\n Mo = /&(?:lt|gt|quot|amp|#39);/g,\n Do = /&(?:lt|gt|quot|amp|#39|#10|#9);/g,\n Fo = h(\"pre,textarea\", !0),\n Po = function Po(e, t) {\n return e && Fo(e) && \"\\n\" === t[0];\n };\n\n function Ro(e, t) {\n var n = t ? Do : Mo;\n return e.replace(n, function (e) {\n return No[e];\n });\n }\n\n var Uo,\n Bo,\n Ho,\n Vo,\n zo,\n Jo,\n Ko,\n qo,\n Wo = /^@|^v-on:/,\n Go = /^v-|^@|^:/,\n Xo = /([\\s\\S]*?)\\s+(?:in|of)\\s+([\\s\\S]*)/,\n Zo = /,([^,\\}\\]]*)(?:,([^,\\}\\]]*))?$/,\n Yo = /^\\(|\\)$/g,\n Qo = /^\\[.*\\]$/,\n ea = /:(.*)$/,\n ta = /^:|^\\.|^v-bind:/,\n na = /\\.[^.\\]]+(?=[^\\]]*$)/g,\n ra = /^v-slot(:|$)|^#/,\n ia = /[\\r\\n]/,\n oa = /\\s+/g,\n aa = w(function (e) {\n return (po = po || document.createElement(\"div\")).innerHTML = e, po.textContent;\n }),\n sa = \"_empty_\";\n\n function ca(e, t, n) {\n return {\n type: 1,\n tag: e,\n attrsList: t,\n attrsMap: va(t),\n rawAttrsMap: {},\n parent: n,\n children: []\n };\n }\n\n function ua(e, t) {\n var n, r;\n (r = Dr(n = e, \"key\")) && (n.key = r), e.plain = !e.key && !e.scopedSlots && !e.attrsList.length, function (e) {\n var t = Dr(e, \"ref\");\n t && (e.ref = t, e.refInFor = function (e) {\n for (var t = e; t;) {\n if (void 0 !== t[\"for\"]) return !0;\n t = t.parent;\n }\n\n return !1;\n }(e));\n }(e), function (e) {\n var t;\n \"template\" === e.tag ? (t = Fr(e, \"scope\"), e.slotScope = t || Fr(e, \"slot-scope\")) : (t = Fr(e, \"slot-scope\")) && (e.slotScope = t);\n var n = Dr(e, \"slot\");\n\n if (n && (e.slotTarget = '\"\"' === n ? '\"default\"' : n, e.slotTargetDynamic = !(!e.attrsMap[\":slot\"] && !e.attrsMap[\"v-bind:slot\"]), \"template\" === e.tag || e.slotScope || jr(e, \"slot\", n, function (e, t) {\n return e.rawAttrsMap[\":\" + t] || e.rawAttrsMap[\"v-bind:\" + t] || e.rawAttrsMap[t];\n }(e, \"slot\"))), \"template\" === e.tag) {\n var r = Pr(e, ra);\n\n if (r) {\n var i = da(r),\n o = i.name,\n a = i.dynamic;\n e.slotTarget = o, e.slotTargetDynamic = a, e.slotScope = r.value || sa;\n }\n } else {\n var s = Pr(e, ra);\n\n if (s) {\n var c = e.scopedSlots || (e.scopedSlots = {}),\n u = da(s),\n l = u.name,\n f = u.dynamic,\n d = c[l] = ca(\"template\", [], e);\n d.slotTarget = l, d.slotTargetDynamic = f, d.children = e.children.filter(function (e) {\n if (!e.slotScope) return e.parent = d, !0;\n }), d.slotScope = s.value || sa, e.children = [], e.plain = !1;\n }\n }\n }(e), function (e) {\n \"slot\" === e.tag && (e.slotName = Dr(e, \"name\"));\n }(e), function (e) {\n var t;\n (t = Dr(e, \"is\")) && (e.component = t), null != Fr(e, \"inline-template\") && (e.inlineTemplate = !0);\n }(e);\n\n for (var i = 0; i < Ho.length; i++) {\n e = Ho[i](e, t) || e;\n }\n\n return function (e) {\n var t,\n n,\n r,\n i,\n o,\n a,\n s,\n c,\n u = e.attrsList;\n\n for (t = 0, n = u.length; t < n; t++) {\n if (r = i = u[t].name, o = u[t].value, Go.test(r)) {\n if (e.hasBindings = !0, (a = pa(r.replace(Go, \"\"))) && (r = r.replace(na, \"\")), ta.test(r)) r = r.replace(ta, \"\"), o = Ar(o), (c = Qo.test(r)) && (r = r.slice(1, -1)), a && (a.prop && !c && \"innerHtml\" === (r = x(r)) && (r = \"innerHTML\"), a.camel && !c && (r = x(r)), a.sync && (s = Br(o, \"$event\"), c ? Mr(e, '\"update:\"+(' + r + \")\", s, null, !1, 0, u[t], !0) : (Mr(e, \"update:\" + x(r), s, null, !1, 0, u[t]), A(r) !== x(r) && Mr(e, \"update:\" + A(r), s, null, !1, 0, u[t])))), a && a.prop || !e.component && Ko(e.tag, e.attrsMap.type, r) ? Er(e, r, o, u[t], c) : jr(e, r, o, u[t], c);else if (Wo.test(r)) r = r.replace(Wo, \"\"), (c = Qo.test(r)) && (r = r.slice(1, -1)), Mr(e, r, o, a, !1, 0, u[t], c);else {\n var l = (r = r.replace(Go, \"\")).match(ea),\n f = l && l[1];\n c = !1, f && (r = r.slice(0, -(f.length + 1)), Qo.test(f) && (f = f.slice(1, -1), c = !0)), Ir(e, r, i, o, f, c, a, u[t]);\n }\n } else jr(e, r, JSON.stringify(o), u[t]), !e.component && \"muted\" === r && Ko(e.tag, e.attrsMap.type, r) && Er(e, r, \"true\", u[t]);\n }\n }(e), e;\n }\n\n function la(e) {\n var t;\n\n if (t = Fr(e, \"v-for\")) {\n var n = function (e) {\n var t = e.match(Xo);\n\n if (t) {\n var n = {};\n n[\"for\"] = t[2].trim();\n var r = t[1].trim().replace(Yo, \"\"),\n i = r.match(Zo);\n return i ? (n.alias = r.replace(Zo, \"\").trim(), n.iterator1 = i[1].trim(), i[2] && (n.iterator2 = i[2].trim())) : n.alias = r, n;\n }\n }(t);\n\n n && T(e, n);\n }\n }\n\n function fa(e, t) {\n e.ifConditions || (e.ifConditions = []), e.ifConditions.push(t);\n }\n\n function da(e) {\n var t = e.name.replace(ra, \"\");\n return t || \"#\" !== e.name[0] && (t = \"default\"), Qo.test(t) ? {\n name: t.slice(1, -1),\n dynamic: !0\n } : {\n name: '\"' + t + '\"',\n dynamic: !1\n };\n }\n\n function pa(e) {\n var t = e.match(na);\n\n if (t) {\n var n = {};\n return t.forEach(function (e) {\n n[e.slice(1)] = !0;\n }), n;\n }\n }\n\n function va(e) {\n for (var t = {}, n = 0, r = e.length; n < r; n++) {\n t[e[n].name] = e[n].value;\n }\n\n return t;\n }\n\n var ha = /^xmlns:NS\\d+/,\n ma = /^NS\\d+:/;\n\n function ya(e) {\n return ca(e.tag, e.attrsList.slice(), e.parent);\n }\n\n var ga,\n _a,\n ba = [yo, go, {\n preTransformNode: function preTransformNode(e, t) {\n if (\"input\" === e.tag) {\n var n,\n r = e.attrsMap;\n if (!r[\"v-model\"]) return;\n\n if ((r[\":type\"] || r[\"v-bind:type\"]) && (n = Dr(e, \"type\")), r.type || n || !r[\"v-bind\"] || (n = \"(\" + r[\"v-bind\"] + \").type\"), n) {\n var i = Fr(e, \"v-if\", !0),\n o = i ? \"&&(\" + i + \")\" : \"\",\n a = null != Fr(e, \"v-else\", !0),\n s = Fr(e, \"v-else-if\", !0),\n c = ya(e);\n la(c), Lr(c, \"type\", \"checkbox\"), ua(c, t), c.processed = !0, c[\"if\"] = \"(\" + n + \")==='checkbox'\" + o, fa(c, {\n exp: c[\"if\"],\n block: c\n });\n var u = ya(e);\n Fr(u, \"v-for\", !0), Lr(u, \"type\", \"radio\"), ua(u, t), fa(c, {\n exp: \"(\" + n + \")==='radio'\" + o,\n block: u\n });\n var l = ya(e);\n return Fr(l, \"v-for\", !0), Lr(l, \":type\", n), ua(l, t), fa(c, {\n exp: i,\n block: l\n }), a ? c[\"else\"] = !0 : s && (c.elseif = s), c;\n }\n }\n }\n }],\n wa = {\n expectHTML: !0,\n modules: ba,\n directives: {\n model: function model(e, t, n) {\n var r = t.value,\n i = t.modifiers,\n o = e.tag,\n a = e.attrsMap.type;\n if (e.component) return Ur(e, r, i), !1;\n if (\"select\" === o) !function (e, t, n) {\n var r = 'var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return ' + (i && i.number ? \"_n(val)\" : \"val\") + \"});\";\n Mr(e, \"change\", r = r + \" \" + Br(t, \"$event.target.multiple ? $$selectedVal : $$selectedVal[0]\"), null, !0);\n }(e, r);else if (\"input\" === o && \"checkbox\" === a) !function (e, t, n) {\n var r = n && n.number,\n i = Dr(e, \"value\") || \"null\",\n o = Dr(e, \"true-value\") || \"true\",\n a = Dr(e, \"false-value\") || \"false\";\n Er(e, \"checked\", \"Array.isArray(\" + t + \")?_i(\" + t + \",\" + i + \")>-1\" + (\"true\" === o ? \":(\" + t + \")\" : \":_q(\" + t + \",\" + o + \")\")), Mr(e, \"change\", \"var $$a=\" + t + \",$$el=$event.target,$$c=$$el.checked?(\" + o + \"):(\" + a + \");if(Array.isArray($$a)){var $$v=\" + (r ? \"_n(\" + i + \")\" : i) + \",$$i=_i($$a,$$v);if($$el.checked){$$i<0&&(\" + Br(t, \"$$a.concat([$$v])\") + \")}else{$$i>-1&&(\" + Br(t, \"$$a.slice(0,$$i).concat($$a.slice($$i+1))\") + \")}}else{\" + Br(t, \"$$c\") + \"}\", null, !0);\n }(e, r, i);else if (\"input\" === o && \"radio\" === a) !function (e, t, n) {\n var r = n && n.number,\n i = Dr(e, \"value\") || \"null\";\n Er(e, \"checked\", \"_q(\" + t + \",\" + (i = r ? \"_n(\" + i + \")\" : i) + \")\"), Mr(e, \"change\", Br(t, i), null, !0);\n }(e, r, i);else if (\"input\" === o || \"textarea\" === o) !function (e, t, n) {\n var r = e.attrsMap.type,\n i = n || {},\n o = i.lazy,\n a = i.number,\n s = i.trim,\n c = !o && \"range\" !== r,\n u = o ? \"change\" : \"range\" === r ? Wr : \"input\",\n l = \"$event.target.value\";\n s && (l = \"$event.target.value.trim()\"), a && (l = \"_n(\" + l + \")\");\n var f = Br(t, l);\n c && (f = \"if($event.target.composing)return;\" + f), Er(e, \"value\", \"(\" + t + \")\"), Mr(e, u, f, null, !0), (s || a) && Mr(e, \"blur\", \"$forceUpdate()\");\n }(e, r, i);else if (!U.isReservedTag(o)) return Ur(e, r, i), !1;\n return !0;\n },\n text: function text(e, t) {\n t.value && Er(e, \"textContent\", \"_s(\" + t.value + \")\", t);\n },\n html: function html(e, t) {\n t.value && Er(e, \"innerHTML\", \"_s(\" + t.value + \")\", t);\n }\n },\n isPreTag: function isPreTag(e) {\n return \"pre\" === e;\n },\n isUnaryTag: _o,\n mustUseProp: In,\n canBeLeftOpenTag: bo,\n isReservedTag: Wn,\n getTagNamespace: Gn,\n staticKeys: ba.reduce(function (e, t) {\n return e.concat(t.staticKeys || []);\n }, []).join(\",\")\n },\n $a = w(function (e) {\n return h(\"type,tag,attrsList,attrsMap,plain,parent,children,attrs,start,end,rawAttrsMap\" + (e ? \",\" + e : \"\"));\n });\n\n var xa = /^([\\w$_]+|\\([^)]*?\\))\\s*=>|^function\\s*(?:[\\w$]+)?\\s*\\(/,\n Ca = /\\([^)]*?\\);*$/,\n ka = /^[A-Za-z_$][\\w$]*(?:\\.[A-Za-z_$][\\w$]*|\\['[^']*?']|\\[\"[^\"]*?\"]|\\[\\d+]|\\[[A-Za-z_$][\\w$]*])*$/,\n Aa = {\n esc: 27,\n tab: 9,\n enter: 13,\n space: 32,\n up: 38,\n left: 37,\n right: 39,\n down: 40,\n \"delete\": [8, 46]\n },\n Oa = {\n esc: [\"Esc\", \"Escape\"],\n tab: \"Tab\",\n enter: \"Enter\",\n space: [\" \", \"Spacebar\"],\n up: [\"Up\", \"ArrowUp\"],\n left: [\"Left\", \"ArrowLeft\"],\n right: [\"Right\", \"ArrowRight\"],\n down: [\"Down\", \"ArrowDown\"],\n \"delete\": [\"Backspace\", \"Delete\", \"Del\"]\n },\n Sa = function Sa(e) {\n return \"if(\" + e + \")return null;\";\n },\n Ta = {\n stop: \"$event.stopPropagation();\",\n prevent: \"$event.preventDefault();\",\n self: Sa(\"$event.target !== $event.currentTarget\"),\n ctrl: Sa(\"!$event.ctrlKey\"),\n shift: Sa(\"!$event.shiftKey\"),\n alt: Sa(\"!$event.altKey\"),\n meta: Sa(\"!$event.metaKey\"),\n left: Sa(\"'button' in $event && $event.button !== 0\"),\n middle: Sa(\"'button' in $event && $event.button !== 1\"),\n right: Sa(\"'button' in $event && $event.button !== 2\")\n };\n\n function Ea(e, t) {\n var n = t ? \"nativeOn:\" : \"on:\",\n r = \"\",\n i = \"\";\n\n for (var o in e) {\n var a = ja(e[o]);\n e[o] && e[o].dynamic ? i += o + \",\" + a + \",\" : r += '\"' + o + '\":' + a + \",\";\n }\n\n return r = \"{\" + r.slice(0, -1) + \"}\", i ? n + \"_d(\" + r + \",[\" + i.slice(0, -1) + \"])\" : n + r;\n }\n\n function ja(e) {\n if (!e) return \"function(){}\";\n if (Array.isArray(e)) return \"[\" + e.map(function (e) {\n return ja(e);\n }).join(\",\") + \"]\";\n var t = ka.test(e.value),\n n = xa.test(e.value),\n r = ka.test(e.value.replace(Ca, \"\"));\n\n if (e.modifiers) {\n var i = \"\",\n o = \"\",\n a = [];\n\n for (var s in e.modifiers) {\n if (Ta[s]) o += Ta[s], Aa[s] && a.push(s);else if (\"exact\" === s) {\n var c = e.modifiers;\n o += Sa([\"ctrl\", \"shift\", \"alt\", \"meta\"].filter(function (e) {\n return !c[e];\n }).map(function (e) {\n return \"$event.\" + e + \"Key\";\n }).join(\"||\"));\n } else a.push(s);\n }\n\n return a.length && (i += \"if(!$event.type.indexOf('key')&&\" + a.map(La).join(\"&&\") + \")return null;\"), o && (i += o), \"function($event){\" + i + (t ? \"return \" + e.value + \"($event)\" : n ? \"return (\" + e.value + \")($event)\" : r ? \"return \" + e.value : e.value) + \"}\";\n }\n\n return t || n ? e.value : \"function($event){\" + (r ? \"return \" + e.value : e.value) + \"}\";\n }\n\n function La(e) {\n var t = parseInt(e, 10);\n if (t) return \"$event.keyCode!==\" + t;\n var n = Aa[e],\n r = Oa[e];\n return \"_k($event.keyCode,\" + JSON.stringify(e) + \",\" + JSON.stringify(n) + \",$event.key,\" + JSON.stringify(r) + \")\";\n }\n\n var Ia = {\n on: function on(e, t) {\n e.wrapListeners = function (e) {\n return \"_g(\" + e + \",\" + t.value + \")\";\n };\n },\n bind: function bind(e, t) {\n e.wrapData = function (n) {\n return \"_b(\" + n + \",'\" + e.tag + \"',\" + t.value + \",\" + (t.modifiers && t.modifiers.prop ? \"true\" : \"false\") + (t.modifiers && t.modifiers.sync ? \",true\" : \"\") + \")\";\n };\n },\n cloak: j\n },\n Na = function Na(e) {\n this.options = e, this.warn = e.warn || Sr, this.transforms = Tr(e.modules, \"transformCode\"), this.dataGenFns = Tr(e.modules, \"genData\"), this.directives = T(T({}, Ia), e.directives);\n var t = e.isReservedTag || L;\n this.maybeComponent = function (e) {\n return !!e.component || !t(e.tag);\n }, this.onceId = 0, this.staticRenderFns = [], this.pre = !1;\n };\n\n function Ma(e, t) {\n var n = new Na(t);\n return {\n render: \"with(this){return \" + (e ? Da(e, n) : '_c(\"div\")') + \"}\",\n staticRenderFns: n.staticRenderFns\n };\n }\n\n function Da(e, t) {\n if (e.parent && (e.pre = e.pre || e.parent.pre), e.staticRoot && !e.staticProcessed) return Fa(e, t);\n if (e.once && !e.onceProcessed) return Pa(e, t);\n if (e[\"for\"] && !e.forProcessed) return Ua(e, t);\n if (e[\"if\"] && !e.ifProcessed) return Ra(e, t);\n\n if (\"template\" !== e.tag || e.slotTarget || t.pre) {\n if (\"slot\" === e.tag) return function (e, t) {\n var n = e.slotName || '\"default\"',\n r = za(e, t),\n i = \"_t(\" + n + (r ? \",\" + r : \"\"),\n o = e.attrs || e.dynamicAttrs ? qa((e.attrs || []).concat(e.dynamicAttrs || []).map(function (e) {\n return {\n name: x(e.name),\n value: e.value,\n dynamic: e.dynamic\n };\n })) : null,\n a = e.attrsMap[\"v-bind\"];\n return !o && !a || r || (i += \",null\"), o && (i += \",\" + o), a && (i += (o ? \"\" : \",null\") + \",\" + a), i + \")\";\n }(e, t);\n var n;\n if (e.component) n = function (e, t, n) {\n var r = t.inlineTemplate ? null : za(t, n, !0);\n return \"_c(\" + e + \",\" + Ba(t, n) + (r ? \",\" + r : \"\") + \")\";\n }(e.component, e, t);else {\n var r;\n (!e.plain || e.pre && t.maybeComponent(e)) && (r = Ba(e, t));\n var i = e.inlineTemplate ? null : za(e, t, !0);\n n = \"_c('\" + e.tag + \"'\" + (r ? \",\" + r : \"\") + (i ? \",\" + i : \"\") + \")\";\n }\n\n for (var o = 0; o < t.transforms.length; o++) {\n n = t.transforms[o](e, n);\n }\n\n return n;\n }\n\n return za(e, t) || \"void 0\";\n }\n\n function Fa(e, t) {\n e.staticProcessed = !0;\n var n = t.pre;\n return e.pre && (t.pre = e.pre), t.staticRenderFns.push(\"with(this){return \" + Da(e, t) + \"}\"), t.pre = n, \"_m(\" + (t.staticRenderFns.length - 1) + (e.staticInFor ? \",true\" : \"\") + \")\";\n }\n\n function Pa(e, t) {\n if (e.onceProcessed = !0, e[\"if\"] && !e.ifProcessed) return Ra(e, t);\n\n if (e.staticInFor) {\n for (var n = \"\", r = e.parent; r;) {\n if (r[\"for\"]) {\n n = r.key;\n break;\n }\n\n r = r.parent;\n }\n\n return n ? \"_o(\" + Da(e, t) + \",\" + t.onceId++ + \",\" + n + \")\" : Da(e, t);\n }\n\n return Fa(e, t);\n }\n\n function Ra(e, t, n, r) {\n return e.ifProcessed = !0, function e(t, n, r, i) {\n if (!t.length) return i || \"_e()\";\n var o = t.shift();\n return o.exp ? \"(\" + o.exp + \")?\" + a(o.block) + \":\" + e(t, n, r, i) : \"\" + a(o.block);\n\n function a(e) {\n return r ? r(e, n) : e.once ? Pa(e, n) : Da(e, n);\n }\n }(e.ifConditions.slice(), t, n, r);\n }\n\n function Ua(e, t, n, r) {\n var i = e[\"for\"],\n o = e.alias,\n a = e.iterator1 ? \",\" + e.iterator1 : \"\",\n s = e.iterator2 ? \",\" + e.iterator2 : \"\";\n return e.forProcessed = !0, (r || \"_l\") + \"((\" + i + \"),function(\" + o + a + s + \"){return \" + (n || Da)(e, t) + \"})\";\n }\n\n function Ba(e, t) {\n var n = \"{\",\n r = function (e, t) {\n var n = e.directives;\n\n if (n) {\n var r,\n i,\n o,\n a,\n s = \"directives:[\",\n c = !1;\n\n for (r = 0, i = n.length; r < i; r++) {\n o = n[r], a = !0;\n var u = t.directives[o.name];\n u && (a = !!u(e, o, t.warn)), a && (c = !0, s += '{name:\"' + o.name + '\",rawName:\"' + o.rawName + '\"' + (o.value ? \",value:(\" + o.value + \"),expression:\" + JSON.stringify(o.value) : \"\") + (o.arg ? \",arg:\" + (o.isDynamicArg ? o.arg : '\"' + o.arg + '\"') : \"\") + (o.modifiers ? \",modifiers:\" + JSON.stringify(o.modifiers) : \"\") + \"},\");\n }\n\n return c ? s.slice(0, -1) + \"]\" : void 0;\n }\n }(e, t);\n\n r && (n += r + \",\"), e.key && (n += \"key:\" + e.key + \",\"), e.ref && (n += \"ref:\" + e.ref + \",\"), e.refInFor && (n += \"refInFor:true,\"), e.pre && (n += \"pre:true,\"), e.component && (n += 'tag:\"' + e.tag + '\",');\n\n for (var i = 0; i < t.dataGenFns.length; i++) {\n n += t.dataGenFns[i](e);\n }\n\n if (e.attrs && (n += \"attrs:\" + qa(e.attrs) + \",\"), e.props && (n += \"domProps:\" + qa(e.props) + \",\"), e.events && (n += Ea(e.events, !1) + \",\"), e.nativeEvents && (n += Ea(e.nativeEvents, !0) + \",\"), e.slotTarget && !e.slotScope && (n += \"slot:\" + e.slotTarget + \",\"), e.scopedSlots && (n += function (e, t, n) {\n var r = e[\"for\"] || Object.keys(t).some(function (e) {\n var n = t[e];\n return n.slotTargetDynamic || n[\"if\"] || n[\"for\"] || Ha(n);\n }),\n i = !!e[\"if\"];\n if (!r) for (var o = e.parent; o;) {\n if (o.slotScope && o.slotScope !== sa || o[\"for\"]) {\n r = !0;\n break;\n }\n\n o[\"if\"] && (i = !0), o = o.parent;\n }\n var a = Object.keys(t).map(function (e) {\n return Va(t[e], n);\n }).join(\",\");\n return \"scopedSlots:_u([\" + a + \"]\" + (r ? \",null,true\" : \"\") + (!r && i ? \",null,false,\" + function (e) {\n for (var t = 5381, n = e.length; n;) {\n t = 33 * t ^ e.charCodeAt(--n);\n }\n\n return t >>> 0;\n }(a) : \"\") + \")\";\n }(e, e.scopedSlots, t) + \",\"), e.model && (n += \"model:{value:\" + e.model.value + \",callback:\" + e.model.callback + \",expression:\" + e.model.expression + \"},\"), e.inlineTemplate) {\n var o = function (e, t) {\n var n = e.children[0];\n\n if (n && 1 === n.type) {\n var r = Ma(n, t.options);\n return \"inlineTemplate:{render:function(){\" + r.render + \"},staticRenderFns:[\" + r.staticRenderFns.map(function (e) {\n return \"function(){\" + e + \"}\";\n }).join(\",\") + \"]}\";\n }\n }(e, t);\n\n o && (n += o + \",\");\n }\n\n return n = n.replace(/,$/, \"\") + \"}\", e.dynamicAttrs && (n = \"_b(\" + n + ',\"' + e.tag + '\",' + qa(e.dynamicAttrs) + \")\"), e.wrapData && (n = e.wrapData(n)), e.wrapListeners && (n = e.wrapListeners(n)), n;\n }\n\n function Ha(e) {\n return 1 === e.type && (\"slot\" === e.tag || e.children.some(Ha));\n }\n\n function Va(e, t) {\n var n = e.attrsMap[\"slot-scope\"];\n if (e[\"if\"] && !e.ifProcessed && !n) return Ra(e, t, Va, \"null\");\n if (e[\"for\"] && !e.forProcessed) return Ua(e, t, Va);\n var r = e.slotScope === sa ? \"\" : String(e.slotScope),\n i = \"function(\" + r + \"){return \" + (\"template\" === e.tag ? e[\"if\"] && n ? \"(\" + e[\"if\"] + \")?\" + (za(e, t) || \"undefined\") + \":undefined\" : za(e, t) || \"undefined\" : Da(e, t)) + \"}\",\n o = r ? \"\" : \",proxy:true\";\n return \"{key:\" + (e.slotTarget || '\"default\"') + \",fn:\" + i + o + \"}\";\n }\n\n function za(e, t, n, r, i) {\n var o = e.children;\n\n if (o.length) {\n var a = o[0];\n\n if (1 === o.length && a[\"for\"] && \"template\" !== a.tag && \"slot\" !== a.tag) {\n var s = n ? t.maybeComponent(a) ? \",1\" : \",0\" : \"\";\n return \"\" + (r || Da)(a, t) + s;\n }\n\n var c = n ? function (e, t) {\n for (var n = 0, r = 0; r < e.length; r++) {\n var i = e[r];\n\n if (1 === i.type) {\n if (Ja(i) || i.ifConditions && i.ifConditions.some(function (e) {\n return Ja(e.block);\n })) {\n n = 2;\n break;\n }\n\n (t(i) || i.ifConditions && i.ifConditions.some(function (e) {\n return t(e.block);\n })) && (n = 1);\n }\n }\n\n return n;\n }(o, t.maybeComponent) : 0,\n u = i || Ka;\n return \"[\" + o.map(function (e) {\n return u(e, t);\n }).join(\",\") + \"]\" + (c ? \",\" + c : \"\");\n }\n }\n\n function Ja(e) {\n return void 0 !== e[\"for\"] || \"template\" === e.tag || \"slot\" === e.tag;\n }\n\n function Ka(e, t) {\n return 1 === e.type ? Da(e, t) : 3 === e.type && e.isComment ? (r = e, \"_e(\" + JSON.stringify(r.text) + \")\") : \"_v(\" + (2 === (n = e).type ? n.expression : Wa(JSON.stringify(n.text))) + \")\";\n var n, r;\n }\n\n function qa(e) {\n for (var t = \"\", n = \"\", r = 0; r < e.length; r++) {\n var i = e[r],\n o = Wa(i.value);\n i.dynamic ? n += i.name + \",\" + o + \",\" : t += '\"' + i.name + '\":' + o + \",\";\n }\n\n return t = \"{\" + t.slice(0, -1) + \"}\", n ? \"_d(\" + t + \",[\" + n.slice(0, -1) + \"])\" : t;\n }\n\n function Wa(e) {\n return e.replace(/\\u2028/g, \"\\\\u2028\").replace(/\\u2029/g, \"\\\\u2029\");\n }\n\n function Ga(e, t) {\n try {\n return new Function(e);\n } catch (n) {\n return t.push({\n err: n,\n code: e\n }), j;\n }\n }\n\n function Xa(e) {\n var t = Object.create(null);\n return function (n, r, i) {\n (r = T({}, r)).warn, delete r.warn;\n var o = r.delimiters ? String(r.delimiters) + n : n;\n if (t[o]) return t[o];\n var a = e(n, r),\n s = {},\n c = [];\n return s.render = Ga(a.render, c), s.staticRenderFns = a.staticRenderFns.map(function (e) {\n return Ga(e, c);\n }), t[o] = s;\n };\n }\n\n new RegExp(\"\\\\b\" + \"do,if,for,let,new,try,var,case,else,with,await,break,catch,class,const,super,throw,while,yield,delete,export,import,return,switch,default,extends,finally,continue,debugger,function,arguments\".split(\",\").join(\"\\\\b|\\\\b\") + \"\\\\b\");\n var Za,\n Ya,\n Qa = (Za = function Za(e, t) {\n var n = function (e, t) {\n Uo = t.warn || Sr, Jo = t.isPreTag || L, Ko = t.mustUseProp || L, qo = t.getTagNamespace || L, t.isReservedTag, Ho = Tr(t.modules, \"transformNode\"), Vo = Tr(t.modules, \"preTransformNode\"), zo = Tr(t.modules, \"postTransformNode\"), Bo = t.delimiters;\n var n,\n r,\n i = [],\n o = !1 !== t.preserveWhitespace,\n a = t.whitespace,\n s = !1,\n c = !1;\n\n function u(e) {\n if (l(e), s || e.processed || (e = ua(e, t)), i.length || e === n || n[\"if\"] && (e.elseif || e[\"else\"]) && fa(n, {\n exp: e.elseif,\n block: e\n }), r && !e.forbidden) if (e.elseif || e[\"else\"]) a = e, (u = function (e) {\n for (var t = e.length; t--;) {\n if (1 === e[t].type) return e[t];\n e.pop();\n }\n }(r.children)) && u[\"if\"] && fa(u, {\n exp: a.elseif,\n block: a\n });else {\n if (e.slotScope) {\n var o = e.slotTarget || '\"default\"';\n (r.scopedSlots || (r.scopedSlots = {}))[o] = e;\n }\n\n r.children.push(e), e.parent = r;\n }\n var a, u;\n e.children = e.children.filter(function (e) {\n return !e.slotScope;\n }), l(e), e.pre && (s = !1), Jo(e.tag) && (c = !1);\n\n for (var f = 0; f < zo.length; f++) {\n zo[f](e, t);\n }\n }\n\n function l(e) {\n if (!c) for (var t; (t = e.children[e.children.length - 1]) && 3 === t.type && \" \" === t.text;) {\n e.children.pop();\n }\n }\n\n return function (e, t) {\n for (var n, r, i = [], o = t.expectHTML, a = t.isUnaryTag || L, s = t.canBeLeftOpenTag || L, c = 0; e;) {\n if (n = e, r && Lo(r)) {\n var u = 0,\n l = r.toLowerCase(),\n f = Io[l] || (Io[l] = new RegExp(\"([\\\\s\\\\S]*?)(</\" + l + \"[^>]*>)\", \"i\")),\n d = e.replace(f, function (e, n, r) {\n return u = r.length, Lo(l) || \"noscript\" === l || (n = n.replace(/<!\\--([\\s\\S]*?)-->/g, \"$1\").replace(/<!\\[CDATA\\[([\\s\\S]*?)]]>/g, \"$1\")), Po(l, n) && (n = n.slice(1)), t.chars && t.chars(n), \"\";\n });\n c += e.length - d.length, e = d, A(l, c - u, c);\n } else {\n var p = e.indexOf(\"<\");\n\n if (0 === p) {\n if (Eo.test(e)) {\n var v = e.indexOf(\"--\\x3e\");\n\n if (v >= 0) {\n t.shouldKeepComment && t.comment(e.substring(4, v), c, c + v + 3), x(v + 3);\n continue;\n }\n }\n\n if (jo.test(e)) {\n var h = e.indexOf(\"]>\");\n\n if (h >= 0) {\n x(h + 2);\n continue;\n }\n }\n\n var m = e.match(To);\n\n if (m) {\n x(m[0].length);\n continue;\n }\n\n var y = e.match(So);\n\n if (y) {\n var g = c;\n x(y[0].length), A(y[1], g, c);\n continue;\n }\n\n var _ = C();\n\n if (_) {\n k(_), Po(_.tagName, e) && x(1);\n continue;\n }\n }\n\n var b = void 0,\n w = void 0,\n $ = void 0;\n\n if (p >= 0) {\n for (w = e.slice(p); !(So.test(w) || Ao.test(w) || Eo.test(w) || jo.test(w) || ($ = w.indexOf(\"<\", 1)) < 0);) {\n p += $, w = e.slice(p);\n }\n\n b = e.substring(0, p);\n }\n\n p < 0 && (b = e), b && x(b.length), t.chars && b && t.chars(b, c - b.length, c);\n }\n\n if (e === n) {\n t.chars && t.chars(e);\n break;\n }\n }\n\n function x(t) {\n c += t, e = e.substring(t);\n }\n\n function C() {\n var t = e.match(Ao);\n\n if (t) {\n var n,\n r,\n i = {\n tagName: t[1],\n attrs: [],\n start: c\n };\n\n for (x(t[0].length); !(n = e.match(Oo)) && (r = e.match(xo) || e.match($o));) {\n r.start = c, x(r[0].length), r.end = c, i.attrs.push(r);\n }\n\n if (n) return i.unarySlash = n[1], x(n[0].length), i.end = c, i;\n }\n }\n\n function k(e) {\n var n = e.tagName,\n c = e.unarySlash;\n o && (\"p\" === r && wo(n) && A(r), s(n) && r === n && A(n));\n\n for (var u = a(n) || !!c, l = e.attrs.length, f = new Array(l), d = 0; d < l; d++) {\n var p = e.attrs[d],\n v = p[3] || p[4] || p[5] || \"\",\n h = \"a\" === n && \"href\" === p[1] ? t.shouldDecodeNewlinesForHref : t.shouldDecodeNewlines;\n f[d] = {\n name: p[1],\n value: Ro(v, h)\n };\n }\n\n u || (i.push({\n tag: n,\n lowerCasedTag: n.toLowerCase(),\n attrs: f,\n start: e.start,\n end: e.end\n }), r = n), t.start && t.start(n, f, u, e.start, e.end);\n }\n\n function A(e, n, o) {\n var a, s;\n if (null == n && (n = c), null == o && (o = c), e) for (s = e.toLowerCase(), a = i.length - 1; a >= 0 && i[a].lowerCasedTag !== s; a--) {\n ;\n } else a = 0;\n\n if (a >= 0) {\n for (var u = i.length - 1; u >= a; u--) {\n t.end && t.end(i[u].tag, n, o);\n }\n\n i.length = a, r = a && i[a - 1].tag;\n } else \"br\" === s ? t.start && t.start(e, [], !0, n, o) : \"p\" === s && (t.start && t.start(e, [], !1, n, o), t.end && t.end(e, n, o));\n }\n\n A();\n }(e, {\n warn: Uo,\n expectHTML: t.expectHTML,\n isUnaryTag: t.isUnaryTag,\n canBeLeftOpenTag: t.canBeLeftOpenTag,\n shouldDecodeNewlines: t.shouldDecodeNewlines,\n shouldDecodeNewlinesForHref: t.shouldDecodeNewlinesForHref,\n shouldKeepComment: t.comments,\n outputSourceRange: t.outputSourceRange,\n start: function start(e, o, a, l, f) {\n var d = r && r.ns || qo(e);\n X && \"svg\" === d && (o = function (e) {\n for (var t = [], n = 0; n < e.length; n++) {\n var r = e[n];\n ha.test(r.name) || (r.name = r.name.replace(ma, \"\"), t.push(r));\n }\n\n return t;\n }(o));\n var p,\n v = ca(e, o, r);\n d && (v.ns = d), \"style\" !== (p = v).tag && (\"script\" !== p.tag || p.attrsMap.type && \"text/javascript\" !== p.attrsMap.type) || ie() || (v.forbidden = !0);\n\n for (var h = 0; h < Vo.length; h++) {\n v = Vo[h](v, t) || v;\n }\n\n s || (function (e) {\n null != Fr(e, \"v-pre\") && (e.pre = !0);\n }(v), v.pre && (s = !0)), Jo(v.tag) && (c = !0), s ? function (e) {\n var t = e.attrsList,\n n = t.length;\n if (n) for (var r = e.attrs = new Array(n), i = 0; i < n; i++) {\n r[i] = {\n name: t[i].name,\n value: JSON.stringify(t[i].value)\n }, null != t[i].start && (r[i].start = t[i].start, r[i].end = t[i].end);\n } else e.pre || (e.plain = !0);\n }(v) : v.processed || (la(v), function (e) {\n var t = Fr(e, \"v-if\");\n if (t) e[\"if\"] = t, fa(e, {\n exp: t,\n block: e\n });else {\n null != Fr(e, \"v-else\") && (e[\"else\"] = !0);\n var n = Fr(e, \"v-else-if\");\n n && (e.elseif = n);\n }\n }(v), function (e) {\n null != Fr(e, \"v-once\") && (e.once = !0);\n }(v)), n || (n = v), a ? u(v) : (r = v, i.push(v));\n },\n end: function end(e, t, n) {\n var o = i[i.length - 1];\n i.length -= 1, r = i[i.length - 1], u(o);\n },\n chars: function chars(e, t, n) {\n if (r && (!X || \"textarea\" !== r.tag || r.attrsMap.placeholder !== e)) {\n var i,\n u,\n l,\n f = r.children;\n (e = c || e.trim() ? \"script\" === (i = r).tag || \"style\" === i.tag ? e : aa(e) : f.length ? a ? \"condense\" === a && ia.test(e) ? \"\" : \" \" : o ? \" \" : \"\" : \"\") && (c || \"condense\" !== a || (e = e.replace(oa, \" \")), !s && \" \" !== e && (u = function (e, t) {\n var n = Bo ? mo(Bo) : vo;\n\n if (n.test(e)) {\n for (var r, i, o, a = [], s = [], c = n.lastIndex = 0; r = n.exec(e);) {\n (i = r.index) > c && (s.push(o = e.slice(c, i)), a.push(JSON.stringify(o)));\n var u = Ar(r[1].trim());\n a.push(\"_s(\" + u + \")\"), s.push({\n \"@binding\": u\n }), c = i + r[0].length;\n }\n\n return c < e.length && (s.push(o = e.slice(c)), a.push(JSON.stringify(o))), {\n expression: a.join(\"+\"),\n tokens: s\n };\n }\n }(e)) ? l = {\n type: 2,\n expression: u.expression,\n tokens: u.tokens,\n text: e\n } : \" \" === e && f.length && \" \" === f[f.length - 1].text || (l = {\n type: 3,\n text: e\n }), l && f.push(l));\n }\n },\n comment: function comment(e, t, n) {\n if (r) {\n var i = {\n type: 3,\n text: e,\n isComment: !0\n };\n r.children.push(i);\n }\n }\n }), n;\n }(e.trim(), t);\n\n !1 !== t.optimize && function (e, t) {\n e && (ga = $a(t.staticKeys || \"\"), _a = t.isReservedTag || L, function e(t) {\n if (t[\"static\"] = function (e) {\n return 2 !== e.type && (3 === e.type || !(!e.pre && (e.hasBindings || e[\"if\"] || e[\"for\"] || m(e.tag) || !_a(e.tag) || function (e) {\n for (; e.parent;) {\n if (\"template\" !== (e = e.parent).tag) return !1;\n if (e[\"for\"]) return !0;\n }\n\n return !1;\n }(e) || !Object.keys(e).every(ga))));\n }(t), 1 === t.type) {\n if (!_a(t.tag) && \"slot\" !== t.tag && null == t.attrsMap[\"inline-template\"]) return;\n\n for (var n = 0, r = t.children.length; n < r; n++) {\n var i = t.children[n];\n e(i), i[\"static\"] || (t[\"static\"] = !1);\n }\n\n if (t.ifConditions) for (var o = 1, a = t.ifConditions.length; o < a; o++) {\n var s = t.ifConditions[o].block;\n e(s), s[\"static\"] || (t[\"static\"] = !1);\n }\n }\n }(e), function e(t, n) {\n if (1 === t.type) {\n if ((t[\"static\"] || t.once) && (t.staticInFor = n), t[\"static\"] && t.children.length && (1 !== t.children.length || 3 !== t.children[0].type)) return void (t.staticRoot = !0);\n if (t.staticRoot = !1, t.children) for (var r = 0, i = t.children.length; r < i; r++) {\n e(t.children[r], n || !!t[\"for\"]);\n }\n if (t.ifConditions) for (var o = 1, a = t.ifConditions.length; o < a; o++) {\n e(t.ifConditions[o].block, n);\n }\n }\n }(e, !1));\n }(n, t);\n var r = Ma(n, t);\n return {\n ast: n,\n render: r.render,\n staticRenderFns: r.staticRenderFns\n };\n }, function (e) {\n function t(t, n) {\n var r = Object.create(e),\n i = [],\n o = [];\n if (n) for (var a in n.modules && (r.modules = (e.modules || []).concat(n.modules)), n.directives && (r.directives = T(Object.create(e.directives || null), n.directives)), n) {\n \"modules\" !== a && \"directives\" !== a && (r[a] = n[a]);\n }\n\n r.warn = function (e, t, n) {\n (n ? o : i).push(e);\n };\n\n var s = Za(t.trim(), r);\n return s.errors = i, s.tips = o, s;\n }\n\n return {\n compile: t,\n compileToFunctions: Xa(t)\n };\n })(wa),\n es = (Qa.compile, Qa.compileToFunctions);\n\n function ts(e) {\n return (Ya = Ya || document.createElement(\"div\")).innerHTML = e ? '<a href=\"\\n\"/>' : '<div a=\"\\n\"/>', Ya.innerHTML.indexOf(\" \") > 0;\n }\n\n var ns = !!K && ts(!1),\n rs = !!K && ts(!0),\n is = w(function (e) {\n var t = Yn(e);\n return t && t.innerHTML;\n }),\n os = Cn.prototype.$mount;\n Cn.prototype.$mount = function (e, t) {\n if ((e = e && Yn(e)) === document.body || e === document.documentElement) return this;\n var n = this.$options;\n\n if (!n.render) {\n var r = n.template;\n if (r) {\n if (\"string\" == typeof r) \"#\" === r.charAt(0) && (r = is(r));else {\n if (!r.nodeType) return this;\n r = r.innerHTML;\n }\n } else e && (r = function (e) {\n if (e.outerHTML) return e.outerHTML;\n var t = document.createElement(\"div\");\n return t.appendChild(e.cloneNode(!0)), t.innerHTML;\n }(e));\n\n if (r) {\n var i = es(r, {\n outputSourceRange: !1,\n shouldDecodeNewlines: ns,\n shouldDecodeNewlinesForHref: rs,\n delimiters: n.delimiters,\n comments: n.comments\n }, this),\n o = i.render,\n a = i.staticRenderFns;\n n.render = o, n.staticRenderFns = a;\n }\n }\n\n return os.call(this, e, t);\n }, Cn.compile = es, e.exports = Cn;\n }).call(this, n(1), n(6).setImmediate);\n }, function (e, t, n) {\n (function (e) {\n var r = void 0 !== e && e || \"undefined\" != typeof self && self || window,\n i = Function.prototype.apply;\n\n function o(e, t) {\n this._id = e, this._clearFn = t;\n }\n\n t.setTimeout = function () {\n return new o(i.call(setTimeout, r, arguments), clearTimeout);\n }, t.setInterval = function () {\n return new o(i.call(setInterval, r, arguments), clearInterval);\n }, t.clearTimeout = t.clearInterval = function (e) {\n e && e.close();\n }, o.prototype.unref = o.prototype.ref = function () {}, o.prototype.close = function () {\n this._clearFn.call(r, this._id);\n }, t.enroll = function (e, t) {\n clearTimeout(e._idleTimeoutId), e._idleTimeout = t;\n }, t.unenroll = function (e) {\n clearTimeout(e._idleTimeoutId), e._idleTimeout = -1;\n }, t._unrefActive = t.active = function (e) {\n clearTimeout(e._idleTimeoutId);\n var t = e._idleTimeout;\n t >= 0 && (e._idleTimeoutId = setTimeout(function () {\n e._onTimeout && e._onTimeout();\n }, t));\n }, n(7), t.setImmediate = \"undefined\" != typeof self && self.setImmediate || void 0 !== e && e.setImmediate || this && this.setImmediate, t.clearImmediate = \"undefined\" != typeof self && self.clearImmediate || void 0 !== e && e.clearImmediate || this && this.clearImmediate;\n }).call(this, n(1));\n }, function (e, t, n) {\n (function (e, t) {\n !function (e, n) {\n \"use strict\";\n\n if (!e.setImmediate) {\n var r,\n i,\n o,\n a,\n s,\n c = 1,\n u = {},\n l = !1,\n f = e.document,\n d = Object.getPrototypeOf && Object.getPrototypeOf(e);\n d = d && d.setTimeout ? d : e, \"[object process]\" === {}.toString.call(e.process) ? r = function r(e) {\n t.nextTick(function () {\n v(e);\n });\n } : !function () {\n if (e.postMessage && !e.importScripts) {\n var t = !0,\n n = e.onmessage;\n return e.onmessage = function () {\n t = !1;\n }, e.postMessage(\"\", \"*\"), e.onmessage = n, t;\n }\n }() ? e.MessageChannel ? ((o = new MessageChannel()).port1.onmessage = function (e) {\n v(e.data);\n }, r = function r(e) {\n o.port2.postMessage(e);\n }) : f && \"onreadystatechange\" in f.createElement(\"script\") ? (i = f.documentElement, r = function r(e) {\n var t = f.createElement(\"script\");\n t.onreadystatechange = function () {\n v(e), t.onreadystatechange = null, i.removeChild(t), t = null;\n }, i.appendChild(t);\n }) : r = function r(e) {\n setTimeout(v, 0, e);\n } : (a = \"setImmediate$\" + Math.random() + \"$\", s = function s(t) {\n t.source === e && \"string\" == typeof t.data && 0 === t.data.indexOf(a) && v(+t.data.slice(a.length));\n }, e.addEventListener ? e.addEventListener(\"message\", s, !1) : e.attachEvent(\"onmessage\", s), r = function r(t) {\n e.postMessage(a + t, \"*\");\n }), d.setImmediate = function (e) {\n \"function\" != typeof e && (e = new Function(\"\" + e));\n\n for (var t = new Array(arguments.length - 1), n = 0; n < t.length; n++) {\n t[n] = arguments[n + 1];\n }\n\n var i = {\n callback: e,\n args: t\n };\n return u[c] = i, r(c), c++;\n }, d.clearImmediate = p;\n }\n\n function p(e) {\n delete u[e];\n }\n\n function v(e) {\n if (l) setTimeout(v, 0, e);else {\n var t = u[e];\n\n if (t) {\n l = !0;\n\n try {\n !function (e) {\n var t = e.callback,\n r = e.args;\n\n switch (r.length) {\n case 0:\n t();\n break;\n\n case 1:\n t(r[0]);\n break;\n\n case 2:\n t(r[0], r[1]);\n break;\n\n case 3:\n t(r[0], r[1], r[2]);\n break;\n\n default:\n t.apply(n, r);\n }\n }(t);\n } finally {\n p(e), l = !1;\n }\n }\n }\n }\n }(\"undefined\" == typeof self ? void 0 === e ? this : e : self);\n }).call(this, n(1), n(8));\n }, function (e, t) {\n var n,\n r,\n i = e.exports = {};\n\n function o() {\n throw new Error(\"setTimeout has not been defined\");\n }\n\n function a() {\n throw new Error(\"clearTimeout has not been defined\");\n }\n\n function s(e) {\n if (n === setTimeout) return setTimeout(e, 0);\n if ((n === o || !n) && setTimeout) return n = setTimeout, setTimeout(e, 0);\n\n try {\n return n(e, 0);\n } catch (t) {\n try {\n return n.call(null, e, 0);\n } catch (t) {\n return n.call(this, e, 0);\n }\n }\n }\n\n !function () {\n try {\n n = \"function\" == typeof setTimeout ? setTimeout : o;\n } catch (e) {\n n = o;\n }\n\n try {\n r = \"function\" == typeof clearTimeout ? clearTimeout : a;\n } catch (e) {\n r = a;\n }\n }();\n var c,\n u = [],\n l = !1,\n f = -1;\n\n function d() {\n l && c && (l = !1, c.length ? u = c.concat(u) : f = -1, u.length && p());\n }\n\n function p() {\n if (!l) {\n var e = s(d);\n l = !0;\n\n for (var t = u.length; t;) {\n for (c = u, u = []; ++f < t;) {\n c && c[f].run();\n }\n\n f = -1, t = u.length;\n }\n\n c = null, l = !1, function (e) {\n if (r === clearTimeout) return clearTimeout(e);\n if ((r === a || !r) && clearTimeout) return r = clearTimeout, clearTimeout(e);\n\n try {\n r(e);\n } catch (t) {\n try {\n return r.call(null, e);\n } catch (t) {\n return r.call(this, e);\n }\n }\n }(e);\n }\n }\n\n function v(e, t) {\n this.fun = e, this.array = t;\n }\n\n function h() {}\n\n i.nextTick = function (e) {\n var t = new Array(arguments.length - 1);\n if (arguments.length > 1) for (var n = 1; n < arguments.length; n++) {\n t[n - 1] = arguments[n];\n }\n u.push(new v(e, t)), 1 !== u.length || l || s(p);\n }, v.prototype.run = function () {\n this.fun.apply(null, this.array);\n }, i.title = \"browser\", i.browser = !0, i.env = {}, i.argv = [], i.version = \"\", i.versions = {}, i.on = h, i.addListener = h, i.once = h, i.off = h, i.removeListener = h, i.removeAllListeners = h, i.emit = h, i.prependListener = h, i.prependOnceListener = h, i.listeners = function (e) {\n return [];\n }, i.binding = function (e) {\n throw new Error(\"process.binding is not supported\");\n }, i.cwd = function () {\n return \"/\";\n }, i.chdir = function (e) {\n throw new Error(\"process.chdir is not supported\");\n }, i.umask = function () {\n return 0;\n };\n }, function (e, t, n) {\n \"use strict\";\n\n var r = n(0);\n n.n(r).a;\n }, function (e, t, n) {\n (e.exports = n(11)(!1)).push([e.i, \".v-context[data-v-7de2ab45] {\\n background: #fafafa;\\n border: 1px solid #bdbdbd;\\n box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12);\\n display: block;\\n margin: 0;\\n padding: 0;\\n position: fixed;\\n width: 250px;\\n z-index: 99999;\\n}\\n.v-context ul[data-v-7de2ab45] {\\n list-style: none;\\n padding: 10px 0;\\n margin: 0;\\n font-size: 12px;\\n font-weight: 600;\\n}\\n.v-context ul li[data-v-7de2ab45] {\\n margin: 0;\\n padding: 10px 35px;\\n cursor: pointer;\\n}\\n.v-context ul li[data-v-7de2ab45]:hover {\\n background: #1e88e5;\\n color: #fafafa;\\n}\\n\", \"\"]);\n }, function (e, t) {\n e.exports = function (e) {\n var t = [];\n return t.toString = function () {\n return this.map(function (t) {\n var n = function (e, t) {\n var n = e[1] || \"\",\n r = e[3];\n if (!r) return n;\n\n if (t && \"function\" == typeof btoa) {\n var i = (a = r, \"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,\" + btoa(unescape(encodeURIComponent(JSON.stringify(a)))) + \" */\"),\n o = r.sources.map(function (e) {\n return \"/*# sourceURL=\" + r.sourceRoot + e + \" */\";\n });\n return [n].concat(o).concat([i]).join(\"\\n\");\n }\n\n var a;\n return [n].join(\"\\n\");\n }(t, e);\n\n return t[2] ? \"@media \" + t[2] + \"{\" + n + \"}\" : n;\n }).join(\"\");\n }, t.i = function (e, n) {\n \"string\" == typeof e && (e = [[null, e, \"\"]]);\n\n for (var r = {}, i = 0; i < this.length; i++) {\n var o = this[i][0];\n \"number\" == typeof o && (r[o] = !0);\n }\n\n for (i = 0; i < e.length; i++) {\n var a = e[i];\n \"number\" == typeof a[0] && r[a[0]] || (n && !a[2] ? a[2] = n : n && (a[2] = \"(\" + a[2] + \") and (\" + n + \")\"), t.push(a));\n }\n }, t;\n };\n }, function (e, t, n) {\n var r,\n i,\n o = {},\n a = (r = function r() {\n return window && document && document.all && !window.atob;\n }, function () {\n return void 0 === i && (i = r.apply(this, arguments)), i;\n }),\n s = function (e) {\n var t = {};\n return function (e, n) {\n if (\"function\" == typeof e) return e();\n\n if (void 0 === t[e]) {\n var r = function (e, t) {\n return t ? t.querySelector(e) : document.querySelector(e);\n }.call(this, e, n);\n\n if (window.HTMLIFrameElement && r instanceof window.HTMLIFrameElement) try {\n r = r.contentDocument.head;\n } catch (e) {\n r = null;\n }\n t[e] = r;\n }\n\n return t[e];\n };\n }(),\n c = null,\n u = 0,\n l = [],\n f = n(13);\n\n function d(e, t) {\n for (var n = 0; n < e.length; n++) {\n var r = e[n],\n i = o[r.id];\n\n if (i) {\n i.refs++;\n\n for (var a = 0; a < i.parts.length; a++) {\n i.parts[a](r.parts[a]);\n }\n\n for (; a < r.parts.length; a++) {\n i.parts.push(g(r.parts[a], t));\n }\n } else {\n var s = [];\n\n for (a = 0; a < r.parts.length; a++) {\n s.push(g(r.parts[a], t));\n }\n\n o[r.id] = {\n id: r.id,\n refs: 1,\n parts: s\n };\n }\n }\n }\n\n function p(e, t) {\n for (var n = [], r = {}, i = 0; i < e.length; i++) {\n var o = e[i],\n a = t.base ? o[0] + t.base : o[0],\n s = {\n css: o[1],\n media: o[2],\n sourceMap: o[3]\n };\n r[a] ? r[a].parts.push(s) : n.push(r[a] = {\n id: a,\n parts: [s]\n });\n }\n\n return n;\n }\n\n function v(e, t) {\n var n = s(e.insertInto);\n if (!n) throw new Error(\"Couldn't find a style target. This probably means that the value for the 'insertInto' parameter is invalid.\");\n var r = l[l.length - 1];\n if (\"top\" === e.insertAt) r ? r.nextSibling ? n.insertBefore(t, r.nextSibling) : n.appendChild(t) : n.insertBefore(t, n.firstChild), l.push(t);else if (\"bottom\" === e.insertAt) n.appendChild(t);else {\n if (\"object\" != _typeof(e.insertAt) || !e.insertAt.before) throw new Error(\"[Style Loader]\\n\\n Invalid value for parameter 'insertAt' ('options.insertAt') found.\\n Must be 'top', 'bottom', or Object.\\n (https://github.com/webpack-contrib/style-loader#insertat)\\n\");\n var i = s(e.insertAt.before, n);\n n.insertBefore(t, i);\n }\n }\n\n function h(e) {\n if (null === e.parentNode) return !1;\n e.parentNode.removeChild(e);\n var t = l.indexOf(e);\n t >= 0 && l.splice(t, 1);\n }\n\n function m(e) {\n var t = document.createElement(\"style\");\n\n if (void 0 === e.attrs.type && (e.attrs.type = \"text/css\"), void 0 === e.attrs.nonce) {\n var r = function () {\n 0;\n return n.nc;\n }();\n\n r && (e.attrs.nonce = r);\n }\n\n return y(t, e.attrs), v(e, t), t;\n }\n\n function y(e, t) {\n Object.keys(t).forEach(function (n) {\n e.setAttribute(n, t[n]);\n });\n }\n\n function g(e, t) {\n var n, r, i, o;\n\n if (t.transform && e.css) {\n if (!(o = \"function\" == typeof t.transform ? t.transform(e.css) : t.transform[\"default\"](e.css))) return function () {};\n e.css = o;\n }\n\n if (t.singleton) {\n var a = u++;\n n = c || (c = m(t)), r = w.bind(null, n, a, !1), i = w.bind(null, n, a, !0);\n } else e.sourceMap && \"function\" == typeof URL && \"function\" == typeof URL.createObjectURL && \"function\" == typeof URL.revokeObjectURL && \"function\" == typeof Blob && \"function\" == typeof btoa ? (n = function (e) {\n var t = document.createElement(\"link\");\n return void 0 === e.attrs.type && (e.attrs.type = \"text/css\"), e.attrs.rel = \"stylesheet\", y(t, e.attrs), v(e, t), t;\n }(t), r = function (e, t, n) {\n var r = n.css,\n i = n.sourceMap,\n o = void 0 === t.convertToAbsoluteUrls && i;\n (t.convertToAbsoluteUrls || o) && (r = f(r));\n i && (r += \"\\n/*# sourceMappingURL=data:application/json;base64,\" + btoa(unescape(encodeURIComponent(JSON.stringify(i)))) + \" */\");\n var a = new Blob([r], {\n type: \"text/css\"\n }),\n s = e.href;\n e.href = URL.createObjectURL(a), s && URL.revokeObjectURL(s);\n }.bind(null, n, t), i = function i() {\n h(n), n.href && URL.revokeObjectURL(n.href);\n }) : (n = m(t), r = function (e, t) {\n var n = t.css,\n r = t.media;\n r && e.setAttribute(\"media\", r);\n if (e.styleSheet) e.styleSheet.cssText = n;else {\n for (; e.firstChild;) {\n e.removeChild(e.firstChild);\n }\n\n e.appendChild(document.createTextNode(n));\n }\n }.bind(null, n), i = function i() {\n h(n);\n });\n\n return r(e), function (t) {\n if (t) {\n if (t.css === e.css && t.media === e.media && t.sourceMap === e.sourceMap) return;\n r(e = t);\n } else i();\n };\n }\n\n e.exports = function (e, t) {\n if (\"undefined\" != typeof DEBUG && DEBUG && \"object\" != (typeof document === \"undefined\" ? \"undefined\" : _typeof(document))) throw new Error(\"The style-loader cannot be used in a non-browser environment\");\n (t = t || {}).attrs = \"object\" == _typeof(t.attrs) ? t.attrs : {}, t.singleton || \"boolean\" == typeof t.singleton || (t.singleton = a()), t.insertInto || (t.insertInto = \"head\"), t.insertAt || (t.insertAt = \"bottom\");\n var n = p(e, t);\n return d(n, t), function (e) {\n for (var r = [], i = 0; i < n.length; i++) {\n var a = n[i];\n (s = o[a.id]).refs--, r.push(s);\n }\n\n e && d(p(e, t), t);\n\n for (i = 0; i < r.length; i++) {\n var s;\n\n if (0 === (s = r[i]).refs) {\n for (var c = 0; c < s.parts.length; c++) {\n s.parts[c]();\n }\n\n delete o[s.id];\n }\n }\n };\n };\n\n var _,\n b = (_ = [], function (e, t) {\n return _[e] = t, _.filter(Boolean).join(\"\\n\");\n });\n\n function w(e, t, n, r) {\n var i = n ? \"\" : r.css;\n if (e.styleSheet) e.styleSheet.cssText = b(t, i);else {\n var o = document.createTextNode(i),\n a = e.childNodes;\n a[t] && e.removeChild(a[t]), a.length ? e.insertBefore(o, a[t]) : e.appendChild(o);\n }\n }\n }, function (e, t) {\n e.exports = function (e) {\n var t = \"undefined\" != typeof window && window.location;\n if (!t) throw new Error(\"fixUrls requires window.location\");\n if (!e || \"string\" != typeof e) return e;\n var n = t.protocol + \"//\" + t.host,\n r = n + t.pathname.replace(/\\/[^\\/]*$/, \"/\");\n return e.replace(/url\\s*\\(((?:[^)(]|\\((?:[^)(]+|\\([^)(]*\\))*\\))*)\\)/gi, function (e, t) {\n var i,\n o = t.trim().replace(/^\"(.*)\"$/, function (e, t) {\n return t;\n }).replace(/^'(.*)'$/, function (e, t) {\n return t;\n });\n return /^(#|data:|http:\\/\\/|https:\\/\\/|file:\\/\\/\\/|\\s*$)/i.test(o) ? e : (i = 0 === o.indexOf(\"//\") ? o : 0 === o.indexOf(\"/\") ? n + o : r + o.replace(/^\\.\\//, \"\"), \"url(\" + JSON.stringify(i) + \")\");\n });\n };\n }, function (e, t, n) {\n \"use strict\";\n\n n.r(t);\n var r = {\n mixins: [n(2).mixin],\n props: {\n closeOnClick: {\n type: Boolean,\n \"default\": !0\n },\n closeOnScroll: {\n type: Boolean,\n \"default\": !0\n }\n },\n computed: {\n style: function style() {\n return this.show ? {\n top: \"\".concat(this.top, \"px\"),\n left: \"\".concat(this.left, \"px\")\n } : null;\n }\n },\n data: function data() {\n return {\n top: null,\n left: null,\n show: !1,\n data: null\n };\n },\n beforeDestroy: function beforeDestroy() {\n this.closeOnScroll && this.removeScrollEventListener();\n },\n methods: {\n addScrollEventListener: function addScrollEventListener() {\n window.addEventListener(\"scroll\", this.close);\n },\n close: function close() {\n var e = !(arguments.length > 0 && void 0 !== arguments[0]) || arguments[0];\n this.show && (this.top = null, this.left = null, this.data = null, this.show = !1, this.closeOnScroll && this.removeScrollEventListener(), e && this.$emit(\"close\"));\n },\n onClick: function onClick() {\n this.closeOnClick && this.close(!1);\n },\n open: function open(e, t) {\n var n = this;\n this.data = t, this.show = !0, this.$nextTick(function () {\n n.positionMenu(e.clientY, e.clientX), n.$el.focus(), n.closeOnScroll && n.addScrollEventListener(), n.$emit(\"open\", e, n.data, n.top, n.left);\n });\n },\n positionMenu: function positionMenu(e, t) {\n var n = window.innerHeight - this.$el.offsetHeight - 25,\n r = window.innerWidth - this.$el.offsetWidth - 25;\n e > n && (e = n), t > r && (t = r), this.top = e, this.left = t;\n },\n removeScrollEventListener: function removeScrollEventListener() {\n window.removeEventListener(\"scroll\", this.close);\n }\n },\n watch: {\n closeOnScroll: function closeOnScroll(e, t) {\n e !== t && (e && this.show ? this.addScrollEventListener() : this.removeScrollEventListener());\n }\n }\n };\n n(9);\n\n var i = function (e, t, n, r, i, o, a, s) {\n var c,\n u = \"function\" == typeof e ? e.options : e;\n if (t && (u.render = t, u.staticRenderFns = n, u._compiled = !0), r && (u.functional = !0), o && (u._scopeId = \"data-v-\" + o), a ? (c = function c(e) {\n (e = e || this.$vnode && this.$vnode.ssrContext || this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) || \"undefined\" == typeof __VUE_SSR_CONTEXT__ || (e = __VUE_SSR_CONTEXT__), i && i.call(this, e), e && e._registeredComponents && e._registeredComponents.add(a);\n }, u._ssrRegister = c) : i && (c = s ? function () {\n i.call(this, this.$root.$options.shadowRoot);\n } : i), c) if (u.functional) {\n u._injectStyles = c;\n var l = u.render;\n\n u.render = function (e, t) {\n return c.call(t), l(e, t);\n };\n } else {\n var f = u.beforeCreate;\n u.beforeCreate = f ? [].concat(f, c) : [c];\n }\n return {\n exports: e,\n options: u\n };\n }(r, function () {\n var e = this.$createElement;\n return (this._self._c || e)(\"div\", {\n directives: [{\n name: \"show\",\n rawName: \"v-show\",\n value: this.show,\n expression: \"show\"\n }, {\n name: \"on-clickaway\",\n rawName: \"v-on-clickaway\",\n value: this.close,\n expression: \"close\"\n }],\n staticClass: \"v-context\",\n style: this.style,\n attrs: {\n tabindex: \"-1\"\n },\n on: {\n click: this.onClick,\n \"!contextmenu\": function contextmenu(e) {\n e.preventDefault();\n }\n }\n }, [this._t(\"default\", null, {\n data: this.data\n })], 2);\n }, [], !1, null, \"7de2ab45\", null).exports;\n\n n.d(t, \"VueContext\", function () {\n return i;\n });\n }]);\n});\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9kaXN0L3Z1ZS1jb250ZXh0LmpzP2VjODYiXSwibmFtZXMiOlsiZSIsInQiLCJleHBvcnRzIiwibW9kdWxlIiwiZGVmaW5lIiwid2luZG93IiwibiIsInIiLCJpIiwibCIsImNhbGwiLCJtIiwiYyIsImQiLCJvIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiU3ltYm9sIiwidG9TdHJpbmdUYWciLCJ2YWx1ZSIsIl9fZXNNb2R1bGUiLCJjcmVhdGUiLCJiaW5kIiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJwIiwicyIsImhtciIsInRyYW5zZm9ybSIsImluc2VydEludG8iLCJsb2NhbHMiLCJGdW5jdGlvbiIsInRlc3QiLCJ2ZXJzaW9uIiwidXRpbCIsIndhcm4iLCJhIiwiY29udGV4dCIsInNldFRpbWVvdXQiLCJwYXRoIiwiY29tcG9zZWRQYXRoIiwiaW5kZXhPZiIsImNvbnRhaW5zIiwidGFyZ2V0IiwiZG9jdW1lbnQiLCJkb2N1bWVudEVsZW1lbnQiLCJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsInVwZGF0ZSIsIm9sZFZhbHVlIiwidW5iaW5kIiwiZGlyZWN0aXZlcyIsIm9uQ2xpY2thd2F5IiwiZGlyZWN0aXZlIiwibWl4aW4iLCJmcmVlemUiLCJ1IiwidG9TdHJpbmciLCJmIiwicGFyc2VGbG9hdCIsIlN0cmluZyIsIk1hdGgiLCJmbG9vciIsImlzRmluaXRlIiwidGhlbiIsIkFycmF5IiwiaXNBcnJheSIsIkpTT04iLCJzdHJpbmdpZnkiLCJ2IiwiaXNOYU4iLCJoIiwic3BsaXQiLCJsZW5ndGgiLCJ0b0xvd2VyQ2FzZSIsInkiLCJnIiwic3BsaWNlIiwiXyIsImIiLCJ3IiwiJCIsIngiLCJyZXBsYWNlIiwidG9VcHBlckNhc2UiLCJDIiwiY2hhckF0Iiwic2xpY2UiLCJrIiwiQSIsIk8iLCJhcmd1bWVudHMiLCJhcHBseSIsIl9sZW5ndGgiLCJTIiwiVCIsIkUiLCJqIiwiTCIsIkkiLCJOIiwiZXZlcnkiLCJEYXRlIiwiZ2V0VGltZSIsImtleXMiLCJNIiwiRCIsIkYiLCJQIiwiUiIsIlUiLCJvcHRpb25NZXJnZVN0cmF0ZWdpZXMiLCJzaWxlbnQiLCJwcm9kdWN0aW9uVGlwIiwiZGV2dG9vbHMiLCJwZXJmb3JtYW5jZSIsImVycm9ySGFuZGxlciIsIndhcm5IYW5kbGVyIiwiaWdub3JlZEVsZW1lbnRzIiwia2V5Q29kZXMiLCJpc1Jlc2VydmVkVGFnIiwiaXNSZXNlcnZlZEF0dHIiLCJpc1Vua25vd25FbGVtZW50IiwiZ2V0VGFnTmFtZXNwYWNlIiwicGFyc2VQbGF0Zm9ybVRhZ05hbWUiLCJtdXN0VXNlUHJvcCIsImFzeW5jIiwiX2xpZmVjeWNsZUhvb2tzIiwiQiIsIkgiLCJ3cml0YWJsZSIsImNvbmZpZ3VyYWJsZSIsIlYiLCJ6IiwiUmVnRXhwIiwic291cmNlIiwiSiIsIksiLCJxIiwiV1hFbnZpcm9ubWVudCIsInBsYXRmb3JtIiwiVyIsIkciLCJuYXZpZ2F0b3IiLCJ1c2VyQWdlbnQiLCJYIiwiWiIsIlkiLCJRIiwiZWUiLCJtYXRjaCIsInRlIiwid2F0Y2giLCJuZSIsInJlIiwiaWUiLCJwcm9jZXNzIiwiZW52IiwiVlVFX0VOViIsIm9lIiwiX19WVUVfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyIsImFlIiwic2UiLCJjZSIsIlJlZmxlY3QiLCJvd25LZXlzIiwiU2V0Iiwic2V0IiwiaGFzIiwiYWRkIiwiY2xlYXIiLCJ1ZSIsImxlIiwiZmUiLCJpZCIsInN1YnMiLCJhZGRTdWIiLCJwdXNoIiwicmVtb3ZlU3ViIiwiZGVwZW5kIiwiYWRkRGVwIiwibm90aWZ5IiwiZGUiLCJwZSIsInZlIiwicG9wIiwiaGUiLCJ0YWciLCJkYXRhIiwiY2hpbGRyZW4iLCJ0ZXh0IiwiZWxtIiwibnMiLCJmbkNvbnRleHQiLCJmbk9wdGlvbnMiLCJmblNjb3BlSWQiLCJrZXkiLCJjb21wb25lbnRPcHRpb25zIiwiY29tcG9uZW50SW5zdGFuY2UiLCJwYXJlbnQiLCJyYXciLCJpc1N0YXRpYyIsImlzUm9vdEluc2VydCIsImlzQ29tbWVudCIsImlzQ2xvbmVkIiwiaXNPbmNlIiwiYXN5bmNGYWN0b3J5IiwiYXN5bmNNZXRhIiwiaXNBc3luY1BsYWNlaG9sZGVyIiwibWUiLCJjaGlsZCIsImRlZmluZVByb3BlcnRpZXMiLCJ5ZSIsImdlIiwiX2UiLCJiZSIsIndlIiwiZm9yRWFjaCIsIl9fb2JfXyIsIm9ic2VydmVBcnJheSIsImRlcCIsIiRlIiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsInhlIiwiQ2UiLCJrZSIsInZtQ291bnQiLCJfX3Byb3RvX18iLCJ3YWxrIiwiQWUiLCJpc0V4dGVuc2libGUiLCJfaXNWdWUiLCJPZSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsIlNlIiwibWF4IiwiVGUiLCJFZSIsImplIiwiTGUiLCJJZSIsImNvbmNhdCIsIk5lIiwicHJvcHMiLCJtZXRob2RzIiwiaW5qZWN0IiwiY29tcHV0ZWQiLCJwcm92aWRlIiwiTWUiLCJEZSIsIm9wdGlvbnMiLCJ0eXBlIiwiZnJvbSIsIl9iYXNlIiwibWl4aW5zIiwiRmUiLCJQZSIsIkJlIiwiQm9vbGVhbiIsIiRvcHRpb25zIiwicHJvcHNEYXRhIiwiX3Byb3BzIiwiUmUiLCJVZSIsIkhlIiwiJHBhcmVudCIsImVycm9yQ2FwdHVyZWQiLCJ6ZSIsIlZlIiwiX2hhbmRsZWQiLCJKZSIsImNvbnNvbGUiLCJlcnJvciIsIktlIiwicWUiLCJXZSIsIkdlIiwiWGUiLCJQcm9taXNlIiwiWmUiLCJyZXNvbHZlIiwiTXV0YXRpb25PYnNlcnZlciIsIlllIiwiUWUiLCJldCIsImNyZWF0ZVRleHROb2RlIiwib2JzZXJ2ZSIsImNoYXJhY3RlckRhdGEiLCJ0dCIsIm50IiwicnQiLCJpc0Zyb3plbiIsIml0IiwibmFtZSIsIm9uY2UiLCJjYXB0dXJlIiwicGFzc2l2ZSIsIm90IiwiZm5zIiwiYXQiLCJwYXJhbXMiLCJzdCIsImhvb2siLCJtZXJnZWQiLCJjdCIsInV0IiwibHQiLCJzaGlmdCIsIl9pc1ZMaXN0IiwiZnQiLCJfcHJvdmlkZWQiLCJkdCIsImF0dHJzIiwic2xvdCIsInB0IiwidnQiLCIkc3RhYmxlIiwiJGtleSIsIl9ub3JtYWxpemVkIiwiJGhhc05vcm1hbCIsImh0IiwibXQiLCJwcm94eSIsInl0IiwiaXRlcmF0b3IiLCJuZXh0IiwiZG9uZSIsImd0IiwiJHNjb3BlZFNsb3RzIiwiJHNsb3RzIiwiJGNyZWF0ZUVsZW1lbnQiLCJfdCIsImJ0Iiwid3QiLCIkdCIsImRvbVByb3BzIiwib24iLCJ4dCIsIl9zdGF0aWNUcmVlcyIsImt0Iiwic3RhdGljUmVuZGVyRm5zIiwiX3JlbmRlclByb3h5IiwiQ3QiLCJBdCIsIk90IiwiU3QiLCJmbiIsIlR0IiwiRXQiLCJqdCIsIl9vIiwiX24iLCJfcyIsIl9sIiwiX3EiLCJfaSIsIl9tIiwiX2YiLCJfayIsIl9iIiwiX3YiLCJfdSIsIl9nIiwiX2QiLCJfcCIsIkx0IiwiX29yaWdpbmFsIiwiX2NvbXBpbGVkIiwibGlzdGVuZXJzIiwiaW5qZWN0aW9ucyIsInNsb3RzIiwic2NvcGVkU2xvdHMiLCJfc2NvcGVJZCIsIl9jIiwiQnQiLCJJdCIsIk50IiwiTXQiLCJpbml0IiwiX2lzRGVzdHJveWVkIiwia2VlcEFsaXZlIiwicHJlcGF0Y2giLCJfaXNDb21wb25lbnQiLCJfcGFyZW50Vm5vZGUiLCJadCIsImlubGluZVRlbXBsYXRlIiwicmVuZGVyIiwiQ3RvciIsIiRtb3VudCIsIl9yZW5kZXJDaGlsZHJlbiIsIiR2bm9kZSIsIl92bm9kZSIsIiRhdHRycyIsIiRsaXN0ZW5lcnMiLCJfcHJvcEtleXMiLCJfcGFyZW50TGlzdGVuZXJzIiwiWHQiLCIkZm9yY2VVcGRhdGUiLCJpbnNlcnQiLCJfaXNNb3VudGVkIiwidG4iLCJfaW5hY3RpdmUiLCJybiIsImVuIiwiZGVzdHJveSIsIl9kaXJlY3RJbmFjdGl2ZSIsIlF0IiwiJGNoaWxkcmVuIiwiJGRlc3Ryb3kiLCJEdCIsIkZ0IiwiZXh0ZW5kIiwiY2lkIiwiZXJyb3JDb21wIiwicmVzb2x2ZWQiLCJWdCIsIm93bmVycyIsImxvYWRpbmciLCJsb2FkaW5nQ29tcCIsIiRvbiIsImNsZWFyVGltZW91dCIsInp0IiwiY29tcG9uZW50IiwiZGVsYXkiLCJ0aW1lb3V0IiwieG4iLCJtb2RlbCIsInByb3AiLCJldmVudCIsImNhbGxiYWNrIiwiZnVuY3Rpb25hbCIsIm5hdGl2ZU9uIiwiX21lcmdlZCIsIlB0IiwiUnQiLCJVdCIsImlzIiwicHJlIiwic3R5bGUiLCJIdCIsIkp0IiwiS3QiLCJxdCIsIld0IiwiJG9mZiIsIkd0IiwiWXQiLCJfaGFzSG9va0V2ZW50IiwiJGVtaXQiLCJubiIsImFuIiwic24iLCJjbiIsInVuIiwibG4iLCJub3ciLCJjcmVhdGVFdmVudCIsInRpbWVTdGFtcCIsImRuIiwic29ydCIsImJlZm9yZSIsInJ1biIsInZtIiwiX3dhdGNoZXIiLCJlbWl0IiwicG4iLCJ2biIsIl93YXRjaGVycyIsImRlZXAiLCJ1c2VyIiwibGF6eSIsInN5bmMiLCJjYiIsImFjdGl2ZSIsImRpcnR5IiwiZGVwcyIsIm5ld0RlcHMiLCJkZXBJZHMiLCJuZXdEZXBJZHMiLCJleHByZXNzaW9uIiwiZ2V0dGVyIiwiY2xlYW51cERlcHMiLCJldmFsdWF0ZSIsInRlYXJkb3duIiwiX2lzQmVpbmdEZXN0cm95ZWQiLCJobiIsIm1uIiwieW4iLCJnbiIsImJuIiwiY2FjaGUiLCJfY29tcHV0ZWRXYXRjaGVycyIsInduIiwiaGFuZGxlciIsIiR3YXRjaCIsIiRuIiwic3VwZXJPcHRpb25zIiwic2VhbGVkT3B0aW9ucyIsImV4dGVuZE9wdGlvbnMiLCJjb21wb25lbnRzIiwiQ24iLCJfaW5pdCIsImtuIiwiQW4iLCJPbiIsIlNuIiwiX3VpZCIsImNvbnN0cnVjdG9yIiwiX2NvbXBvbmVudFRhZyIsIl9zZWxmIiwiJHJvb3QiLCIkcmVmcyIsIl9ldmVudHMiLCJfZGF0YSIsImNoYXJDb2RlQXQiLCJlbCIsIiRzZXQiLCIkZGVsZXRlIiwiaW1tZWRpYXRlIiwiJG9uY2UiLCJfdXBkYXRlIiwiJGVsIiwiX19wYXRjaF9fIiwiX192dWVfXyIsIiRuZXh0VGljayIsIl9yZW5kZXIiLCJUbiIsIkVuIiwiS2VlcEFsaXZlIiwiaW5jbHVkZSIsImV4Y2x1ZGUiLCJOdW1iZXIiLCJjcmVhdGVkIiwiZGVzdHJveWVkIiwibW91bnRlZCIsInBhcnNlSW50IiwibWVyZ2VPcHRpb25zIiwiZGVmaW5lUmVhY3RpdmUiLCJuZXh0VGljayIsIm9ic2VydmFibGUiLCJ1c2UiLCJfaW5zdGFsbGVkUGx1Z2lucyIsInVuc2hpZnQiLCJpbnN0YWxsIiwiX0N0b3IiLCJzc3JDb250ZXh0Iiwiam4iLCJMbiIsIkluIiwiTm4iLCJNbiIsIkRuIiwiQm4iLCJGbiIsIlBuIiwiUm4iLCJVbiIsIkhuIiwic3RhdGljQ2xhc3MiLCJWbiIsInpuIiwiSm4iLCJzdmciLCJtYXRoIiwiS24iLCJxbiIsIlduIiwiR24iLCJYbiIsIlpuIiwiWW4iLCJxdWVyeVNlbGVjdG9yIiwiY3JlYXRlRWxlbWVudCIsIlFuIiwibXVsdGlwbGUiLCJzZXRBdHRyaWJ1dGUiLCJjcmVhdGVFbGVtZW50TlMiLCJjcmVhdGVDb21tZW50IiwiaW5zZXJ0QmVmb3JlIiwicmVtb3ZlQ2hpbGQiLCJhcHBlbmRDaGlsZCIsInBhcmVudE5vZGUiLCJuZXh0U2libGluZyIsInRhZ05hbWUiLCJzZXRUZXh0Q29udGVudCIsInRleHRDb250ZW50Iiwic2V0U3R5bGVTY29wZSIsImVyIiwidHIiLCJyZWYiLCJyZWZJbkZvciIsIm5yIiwicnIiLCJpciIsIm9yIiwiYXIiLCJzciIsInVyIiwib2xkQXJnIiwiYXJnIiwiZnIiLCJkZWYiLCJjb21wb25lbnRVcGRhdGVkIiwiaW5zZXJ0ZWQiLCJjciIsIm1vZGlmaWVycyIsImxyIiwicmF3TmFtZSIsImpvaW4iLCJkciIsInByIiwiaW5oZXJpdEF0dHJzIiwidnIiLCJyZW1vdmVBdHRyaWJ1dGVOUyIsInJlbW92ZUF0dHJpYnV0ZSIsImhyIiwic2V0QXR0cmlidXRlTlMiLCJfX2llcGgiLCJzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24iLCJtciIsInlyIiwiX3RyYW5zaXRpb25DbGFzc2VzIiwiX3ByZXZDbGFzcyIsImdyIiwiX3IiLCJiciIsIndyIiwiJHIiLCJ4ciIsIkNyIiwia3IiLCJBciIsInRyaW0iLCJPciIsIlNyIiwiVHIiLCJtYXAiLCJmaWx0ZXIiLCJFciIsIlJyIiwiZHluYW1pYyIsInBsYWluIiwianIiLCJkeW5hbWljQXR0cnMiLCJMciIsImF0dHJzTWFwIiwiYXR0cnNMaXN0IiwiSXIiLCJpc0R5bmFtaWNBcmciLCJOciIsIk1yIiwicmlnaHQiLCJtaWRkbGUiLCJuYXRpdmVFdmVudHMiLCJldmVudHMiLCJEciIsIkZyIiwiUHIiLCJzdGFydCIsImVuZCIsIlVyIiwibnVtYmVyIiwiQnIiLCJsYXN0SW5kZXhPZiIsImV4cCIsIlZyIiwienIiLCJIciIsIktyIiwiSnIiLCJxciIsIldyIiwiR3IiLCJYciIsIlFyIiwiWnIiLCJZciIsIl93cmFwcGVyIiwiY3VycmVudFRhcmdldCIsIm93bmVyRG9jdW1lbnQiLCJlaSIsImNoYW5nZSIsInRpIiwibmkiLCJyaSIsImNoaWxkTm9kZXMiLCJfdmFsdWUiLCJpaSIsImlubmVySFRNTCIsImZpcnN0Q2hpbGQiLCJjb21wb3NpbmciLCJhY3RpdmVFbGVtZW50IiwiX3ZNb2RpZmllcnMiLCJvaSIsImFpIiwic2kiLCJjaSIsInN0YXRpY1N0eWxlIiwidWkiLCJsaSIsImZpIiwiZGkiLCJzZXRQcm9wZXJ0eSIsInZpIiwicGkiLCJoaSIsIm5vcm1hbGl6ZWRTdHlsZSIsIm1pIiwieWkiLCJnaSIsImNsYXNzTGlzdCIsImdldEF0dHJpYnV0ZSIsInJlbW92ZSIsImJpIiwiY3NzIiwid2kiLCJlbnRlckNsYXNzIiwiZW50ZXJUb0NsYXNzIiwiZW50ZXJBY3RpdmVDbGFzcyIsImxlYXZlQ2xhc3MiLCJsZWF2ZVRvQ2xhc3MiLCJsZWF2ZUFjdGl2ZUNsYXNzIiwiJGkiLCJ4aSIsIkNpIiwia2kiLCJBaSIsIk9pIiwiU2kiLCJvbnRyYW5zaXRpb25lbmQiLCJvbndlYmtpdHRyYW5zaXRpb25lbmQiLCJvbmFuaW1hdGlvbmVuZCIsIm9ud2Via2l0YW5pbWF0aW9uZW5kIiwiVGkiLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJFaSIsImppIiwiTGkiLCJJaSIsIk1pIiwicHJvcENvdW50IiwiTmkiLCJnZXRDb21wdXRlZFN0eWxlIiwiRGkiLCJoYXNUcmFuc2Zvcm0iLCJGaSIsIlBpIiwiX2xlYXZlQ2IiLCJjYW5jZWxsZWQiLCJ0cmFuc2l0aW9uIiwiX2VudGVyQ2IiLCJub2RlVHlwZSIsImFwcGVhckNsYXNzIiwiYXBwZWFyVG9DbGFzcyIsImFwcGVhckFjdGl2ZUNsYXNzIiwiYmVmb3JlRW50ZXIiLCJlbnRlciIsImFmdGVyRW50ZXIiLCJlbnRlckNhbmNlbGxlZCIsImJlZm9yZUFwcGVhciIsImFwcGVhciIsImFmdGVyQXBwZWFyIiwiYXBwZWFyQ2FuY2VsbGVkIiwiZHVyYXRpb24iLCJCaSIsInNob3ciLCJfcGVuZGluZyIsIlVpIiwiUmkiLCJiZWZvcmVMZWF2ZSIsImxlYXZlIiwiYWZ0ZXJMZWF2ZSIsImxlYXZlQ2FuY2VsbGVkIiwiZGVsYXlMZWF2ZSIsIkhpIiwiVmkiLCJtb2R1bGVzIiwibm9kZU9wcyIsImFjdGl2YXRlIiwicGVuZGluZ0luc2VydCIsInBvc3RwYXRjaCIsImhhc0NoaWxkTm9kZXMiLCJoYXNBdHRyaWJ1dGUiLCJ2bW9kZWwiLCJaaSIsInppIiwiX3ZPcHRpb25zIiwiSmkiLCJXaSIsIkdpIiwiWGkiLCJzb21lIiwicWkiLCJLaSIsInNlbGVjdGVkIiwic2VsZWN0ZWRJbmRleCIsImluaXRFdmVudCIsImRpc3BhdGNoRXZlbnQiLCJZaSIsIlFpIiwiX192T3JpZ2luYWxEaXNwbGF5IiwiZGlzcGxheSIsImVvIiwibW9kZSIsInRvIiwibm8iLCJybyIsImlvIiwib28iLCJhbyIsIl9sZWF2aW5nIiwic28iLCJtb3ZlQ2xhc3MiLCJjbyIsIl9tb3ZlQ2IiLCJ1byIsIm5ld1BvcyIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsImxvIiwicG9zIiwibGVmdCIsInRvcCIsIm1vdmVkIiwiV2Via2l0VHJhbnNmb3JtIiwidHJhbnNpdGlvbkR1cmF0aW9uIiwiZm8iLCJUcmFuc2l0aW9uIiwiVHJhbnNpdGlvbkdyb3VwIiwiYmVmb3JlTW91bnQiLCJrZXB0IiwicHJldkNoaWxkcmVuIiwicmVtb3ZlZCIsInVwZGF0ZWQiLCJoYXNNb3ZlIiwiX3JlZmxvdyIsImJvZHkiLCJvZmZzZXRIZWlnaHQiLCJwcm9wZXJ0eU5hbWUiLCJfaGFzTW92ZSIsImNsb25lTm9kZSIsImNvbmZpZyIsIkhUTUxVbmtub3duRWxlbWVudCIsIkhUTUxFbGVtZW50IiwicG8iLCJ2byIsImhvIiwibW8iLCJ5byIsInN0YXRpY0tleXMiLCJ0cmFuc2Zvcm1Ob2RlIiwiY2xhc3NCaW5kaW5nIiwiZ2VuRGF0YSIsImdvIiwic3R5bGVCaW5kaW5nIiwiYm8iLCJ3byIsIiRvIiwieG8iLCJDbyIsImtvIiwiQW8iLCJPbyIsIlNvIiwiVG8iLCJFbyIsImpvIiwiTG8iLCJJbyIsIk5vIiwiTW8iLCJEbyIsIkZvIiwiUG8iLCJSbyIsIlVvIiwiQm8iLCJIbyIsIlZvIiwiem8iLCJKbyIsIktvIiwicW8iLCJXbyIsIkdvIiwiWG8iLCJabyIsIllvIiwiUW8iLCJlYSIsInRhIiwibmEiLCJyYSIsImlhIiwib2EiLCJhYSIsInNhIiwiY2EiLCJ2YSIsInJhd0F0dHJzTWFwIiwidWEiLCJzbG90U2NvcGUiLCJzbG90VGFyZ2V0Iiwic2xvdFRhcmdldER5bmFtaWMiLCJkYSIsInNsb3ROYW1lIiwiaGFzQmluZGluZ3MiLCJwYSIsImNhbWVsIiwibGEiLCJhbGlhcyIsIml0ZXJhdG9yMSIsIml0ZXJhdG9yMiIsImZhIiwiaWZDb25kaXRpb25zIiwiaGEiLCJtYSIsInlhIiwiZ2EiLCJfYSIsImJhIiwicHJlVHJhbnNmb3JtTm9kZSIsInByb2Nlc3NlZCIsImJsb2NrIiwiZWxzZWlmIiwid2EiLCJleHBlY3RIVE1MIiwiaHRtbCIsImlzUHJlVGFnIiwiaXNVbmFyeVRhZyIsImNhbkJlTGVmdE9wZW5UYWciLCJyZWR1Y2UiLCIkYSIsInhhIiwiQ2EiLCJrYSIsIkFhIiwiZXNjIiwidGFiIiwic3BhY2UiLCJ1cCIsImRvd24iLCJPYSIsIlNhIiwiVGEiLCJzdG9wIiwicHJldmVudCIsInNlbGYiLCJjdHJsIiwiYWx0IiwibWV0YSIsIkVhIiwiamEiLCJMYSIsIklhIiwid3JhcExpc3RlbmVycyIsIndyYXBEYXRhIiwiY2xvYWsiLCJOYSIsInRyYW5zZm9ybXMiLCJkYXRhR2VuRm5zIiwibWF5YmVDb21wb25lbnQiLCJvbmNlSWQiLCJNYSIsIkRhIiwic3RhdGljUm9vdCIsInN0YXRpY1Byb2Nlc3NlZCIsIkZhIiwib25jZVByb2Nlc3NlZCIsIlBhIiwiZm9yUHJvY2Vzc2VkIiwiVWEiLCJpZlByb2Nlc3NlZCIsIlJhIiwiemEiLCJxYSIsIkJhIiwic3RhdGljSW5Gb3IiLCJIYSIsIlZhIiwiSmEiLCJLYSIsIldhIiwiR2EiLCJlcnIiLCJjb2RlIiwiWGEiLCJkZWxpbWl0ZXJzIiwiWmEiLCJZYSIsIlFhIiwicHJlc2VydmVXaGl0ZXNwYWNlIiwid2hpdGVzcGFjZSIsImZvcmJpZGRlbiIsImNoYXJzIiwic2hvdWxkS2VlcENvbW1lbnQiLCJjb21tZW50Iiwic3Vic3RyaW5nIiwidW5hcnlTbGFzaCIsInNob3VsZERlY29kZU5ld2xpbmVzRm9ySHJlZiIsInNob3VsZERlY29kZU5ld2xpbmVzIiwibG93ZXJDYXNlZFRhZyIsImNvbW1lbnRzIiwib3V0cHV0U291cmNlUmFuZ2UiLCJwbGFjZWhvbGRlciIsImxhc3RJbmRleCIsImV4ZWMiLCJpbmRleCIsInRva2VucyIsIm9wdGltaXplIiwiYXN0IiwiZXJyb3JzIiwidGlwcyIsImNvbXBpbGUiLCJjb21waWxlVG9GdW5jdGlvbnMiLCJlcyIsInRzIiwicnMiLCJvcyIsInRlbXBsYXRlIiwib3V0ZXJIVE1MIiwic2V0SW1tZWRpYXRlIiwiX2lkIiwiX2NsZWFyRm4iLCJzZXRJbnRlcnZhbCIsImNsZWFySW50ZXJ2YWwiLCJjbG9zZSIsInVucmVmIiwiZW5yb2xsIiwiX2lkbGVUaW1lb3V0SWQiLCJfaWRsZVRpbWVvdXQiLCJ1bmVucm9sbCIsIl91bnJlZkFjdGl2ZSIsIl9vblRpbWVvdXQiLCJjbGVhckltbWVkaWF0ZSIsImdldFByb3RvdHlwZU9mIiwicG9zdE1lc3NhZ2UiLCJpbXBvcnRTY3JpcHRzIiwib25tZXNzYWdlIiwiTWVzc2FnZUNoYW5uZWwiLCJwb3J0MSIsInBvcnQyIiwib25yZWFkeXN0YXRlY2hhbmdlIiwicmFuZG9tIiwiYXR0YWNoRXZlbnQiLCJhcmdzIiwiRXJyb3IiLCJmdW4iLCJhcnJheSIsInRpdGxlIiwiYnJvd3NlciIsImFyZ3YiLCJ2ZXJzaW9ucyIsImFkZExpc3RlbmVyIiwib2ZmIiwicmVtb3ZlTGlzdGVuZXIiLCJyZW1vdmVBbGxMaXN0ZW5lcnMiLCJwcmVwZW5kTGlzdGVuZXIiLCJwcmVwZW5kT25jZUxpc3RlbmVyIiwiYmluZGluZyIsImN3ZCIsImNoZGlyIiwidW1hc2siLCJidG9hIiwidW5lc2NhcGUiLCJlbmNvZGVVUklDb21wb25lbnQiLCJzb3VyY2VzIiwic291cmNlUm9vdCIsImFsbCIsImF0b2IiLCJIVE1MSUZyYW1lRWxlbWVudCIsImNvbnRlbnREb2N1bWVudCIsImhlYWQiLCJyZWZzIiwicGFydHMiLCJiYXNlIiwibWVkaWEiLCJzb3VyY2VNYXAiLCJpbnNlcnRBdCIsIm5vbmNlIiwibmMiLCJzaW5nbGV0b24iLCJVUkwiLCJjcmVhdGVPYmplY3RVUkwiLCJyZXZva2VPYmplY3RVUkwiLCJCbG9iIiwicmVsIiwiY29udmVydFRvQWJzb2x1dGVVcmxzIiwiaHJlZiIsInN0eWxlU2hlZXQiLCJjc3NUZXh0IiwiREVCVUciLCJsb2NhdGlvbiIsInByb3RvY29sIiwiaG9zdCIsInBhdGhuYW1lIiwiY2xvc2VPbkNsaWNrIiwiY2xvc2VPblNjcm9sbCIsImJlZm9yZURlc3Ryb3kiLCJyZW1vdmVTY3JvbGxFdmVudExpc3RlbmVyIiwiYWRkU2Nyb2xsRXZlbnRMaXN0ZW5lciIsIm9uQ2xpY2siLCJvcGVuIiwicG9zaXRpb25NZW51IiwiY2xpZW50WSIsImNsaWVudFgiLCJmb2N1cyIsImlubmVySGVpZ2h0IiwiaW5uZXJXaWR0aCIsIm9mZnNldFdpZHRoIiwiX19WVUVfU1NSX0NPTlRFWFRfXyIsIl9yZWdpc3RlcmVkQ29tcG9uZW50cyIsIl9zc3JSZWdpc3RlciIsInNoYWRvd1Jvb3QiLCJfaW5qZWN0U3R5bGVzIiwiYmVmb3JlQ3JlYXRlIiwidGFiaW5kZXgiLCJjbGljayIsInByZXZlbnREZWZhdWx0Il0sIm1hcHBpbmdzIjoiOztBQUFBLENBQUMsVUFBU0EsQ0FBVCxFQUFXQyxDQUFYLEVBQWE7QUFBQyxNQUFHLDBDQUFpQkMsT0FBakIsTUFBMEIsMENBQWlCQyxNQUFqQixFQUE3QixFQUFxREEsTUFBTSxDQUFDRCxPQUFQLEdBQWVELENBQUMsRUFBaEIsQ0FBckQsS0FBNkUsSUFBRyxJQUFILEVBQXlDRyxpQ0FBTyxFQUFELG9DQUFJSCxDQUFKO0FBQUE7QUFBQTtBQUFBLG9HQUFOLENBQXpDLEtBQTBELGFBQXVFO0FBQUMsQ0FBN04sQ0FBOE5JLE1BQTlOLEVBQXFPLFlBQVU7QUFBQyxTQUFPLFVBQVNMLENBQVQsRUFBVztBQUFDLFFBQUlDLENBQUMsR0FBQyxFQUFOOztBQUFTLGFBQVNLLENBQVQsQ0FBV0MsQ0FBWCxFQUFhO0FBQUMsVUFBR04sQ0FBQyxDQUFDTSxDQUFELENBQUosRUFBUSxPQUFPTixDQUFDLENBQUNNLENBQUQsQ0FBRCxDQUFLTCxPQUFaO0FBQW9CLFVBQUlNLENBQUMsR0FBQ1AsQ0FBQyxDQUFDTSxDQUFELENBQUQsR0FBSztBQUFDQyxTQUFDLEVBQUNELENBQUg7QUFBS0UsU0FBQyxFQUFDLENBQUMsQ0FBUjtBQUFVUCxlQUFPLEVBQUM7QUFBbEIsT0FBWDtBQUFpQyxhQUFPRixDQUFDLENBQUNPLENBQUQsQ0FBRCxDQUFLRyxJQUFMLENBQVVGLENBQUMsQ0FBQ04sT0FBWixFQUFvQk0sQ0FBcEIsRUFBc0JBLENBQUMsQ0FBQ04sT0FBeEIsRUFBZ0NJLENBQWhDLEdBQW1DRSxDQUFDLENBQUNDLENBQUYsR0FB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UyxLQUF2QztBQUF5QyxHQUFqc3lHLENBQXQ1QixDQUFQO0FBQWltMEcsQ0FBajEwRyxDQUFELEMiLCJmaWxlIjoiLi9kaXN0L3Z1ZS1jb250ZXh0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiIWZ1bmN0aW9uKGUsdCl7aWYoXCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHMmJlwib2JqZWN0XCI9PXR5cGVvZiBtb2R1bGUpbW9kdWxlLmV4cG9ydHM9dCgpO2Vsc2UgaWYoXCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kKWRlZmluZShbXSx0KTtlbHNle3ZhciBuPXQoKTtmb3IodmFyIHIgaW4gbikoXCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHM/ZXhwb3J0czplKVtyXT1uW3JdfX0od2luZG93LGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0PXt9O2Z1bmN0aW9uIG4ocil7aWYodFtyXSlyZXR1cm4gdFtyXS5leHBvcnRzO3ZhciBpPXRbcl09e2k6cixsOiExLGV4cG9ydHM6e319O3JldHVybiBlW3JdLmNhbGwoaS5leHBvcnRzLGksaS5leHBvcnRzLG4pLGkubD0hMCxpLmV4cG9ydHN9cmV0dXJuIG4ubT1lLG4uYz10LG4uZD1mdW5jdGlvbihlLHQscil7bi5vKGUsdCl8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2VudW1lcmFibGU6ITAsZ2V0OnJ9KX0sbi5yPWZ1bmN0aW9uKGUpe1widW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJlN5bWJvbC50b1N0cmluZ1RhZyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZTpcIk1vZHVsZVwifSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSl9LG4udD1mdW5jdGlvbihlLHQpe2lmKDEmdCYmKGU9bihlKSksOCZ0KXJldHVybiBlO2lmKDQmdCYmXCJvYmplY3RcIj09dHlwZW9mIGUmJmUmJmUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgcj1PYmplY3QuY3JlYXRlKG51bGwpO2lmKG4ucihyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkocixcImRlZmF1bHRcIix7ZW51bWVyYWJsZTohMCx2YWx1ZTplfSksMiZ0JiZcInN0cmluZ1wiIT10eXBlb2YgZSlmb3IodmFyIGkgaW4gZSluLmQocixpLGZ1bmN0aW9uKHQpe3JldHVybiBlW3RdfS5iaW5kKG51bGwsaSkpO3JldHVybiByfSxuLm49ZnVuY3Rpb24oZSl7dmFyIHQ9ZSYmZS5fX2VzTW9kdWxlP2Z1bmN0aW9uKCl7cmV0dXJuIGUuZGVmYXVsdH06ZnVuY3Rpb24oKXtyZXR1cm4gZX07cmV0dXJuIG4uZCh0LFwiYVwiLHQpLHR9LG4ubz1mdW5jdGlvbihlLHQpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSx0KX0sbi5wPVwiL1wiLG4obi5zPTMpfShbZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oMTApO1wic3RyaW5nXCI9PXR5cGVvZiByJiYocj1bW2UuaSxyLFwiXCJdXSk7dmFyIGk9e2htcjohMCx0cmFuc2Zvcm06dm9pZCAwLGluc2VydEludG86dm9pZCAwfTtuKDEyKShyLGkpO3IubG9jYWxzJiYoZS5leHBvcnRzPXIubG9jYWxzKX0sZnVuY3Rpb24oZSx0KXt2YXIgbjtuPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KCk7dHJ5e249bnx8bmV3IEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKX1jYXRjaChlKXtcIm9iamVjdFwiPT10eXBlb2Ygd2luZG93JiYobj13aW5kb3cpfWUuZXhwb3J0cz1ufSxmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7dmFyIHI9big0KTtyPVwiZGVmYXVsdFwiaW4gcj9yLmRlZmF1bHQ6cjsvXjJcXC4vLnRlc3Qoci52ZXJzaW9uKXx8ci51dGlsLndhcm4oXCJWdWVDbGlja2F3YXkgMi4yLjIgb25seSBzdXBwb3J0cyBWdWUgMi54LCBhbmQgZG9lcyBub3Qgc3VwcG9ydCBWdWUgXCIrci52ZXJzaW9uKTt2YXIgaT1cIl92dWVfY2xpY2thd2F5X2hhbmRsZXJcIjtmdW5jdGlvbiBvKGUsdCxuKXthKGUpO3ZhciByPW4uY29udGV4dCxvPXQudmFsdWU7aWYoXCJmdW5jdGlvblwiPT10eXBlb2Ygbyl7dmFyIHM9ITE7c2V0VGltZW91dChmdW5jdGlvbigpe3M9ITB9LDApLGVbaV09ZnVuY3Rpb24odCl7dmFyIG49dC5wYXRofHwodC5jb21wb3NlZFBhdGg/dC5jb21wb3NlZFBhdGgoKTp2b2lkIDApO2lmKHMmJihuP24uaW5kZXhPZihlKTwwOiFlLmNvbnRhaW5zKHQudGFyZ2V0KSkpcmV0dXJuIG8uY2FsbChyLHQpfSxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsZVtpXSwhMSl9fWZ1bmN0aW9uIGEoZSl7ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLGVbaV0sITEpLGRlbGV0ZSBlW2ldfXZhciBzPXtiaW5kOm8sdXBkYXRlOmZ1bmN0aW9uKGUsdCl7dC52YWx1ZSE9PXQub2xkVmFsdWUmJm8oZSx0KX0sdW5iaW5kOmF9LGM9e2RpcmVjdGl2ZXM6e29uQ2xpY2thd2F5OnN9fTt0LnZlcnNpb249XCIyLjIuMlwiLHQuZGlyZWN0aXZlPXMsdC5taXhpbj1jfSxmdW5jdGlvbihlLHQsbil7ZS5leHBvcnRzPW4oMTQpfSxmdW5jdGlvbihlLHQsbil7ZS5leHBvcnRzPW4oNSl9LGZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjsoZnVuY3Rpb24odCxuKXt2YXIgcj1PYmplY3QuZnJlZXplKHt9KTtmdW5jdGlvbiBpKGUpe3JldHVybiBudWxsPT1lfWZ1bmN0aW9uIG8oZSl7cmV0dXJuIG51bGwhPWV9ZnVuY3Rpb24gYShlKXtyZXR1cm4hMD09PWV9ZnVuY3Rpb24gcyhlKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgZXx8XCJudW1iZXJcIj09dHlwZW9mIGV8fFwic3ltYm9sXCI9PXR5cGVvZiBlfHxcImJvb2xlYW5cIj09dHlwZW9mIGV9ZnVuY3Rpb24gYyhlKXtyZXR1cm4gbnVsbCE9PWUmJlwib2JqZWN0XCI9PXR5cGVvZiBlfXZhciB1PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7ZnVuY3Rpb24gbChlKXtyZXR1cm5cIltvYmplY3QgT2JqZWN0XVwiPT09dS5jYWxsKGUpfWZ1bmN0aW9uIGYoZSl7dmFyIHQ9cGFyc2VGbG9hdChTdHJpbmcoZSkpO3JldHVybiB0Pj0wJiZNYXRoLmZsb29yKHQpPT09dCYmaXNGaW5pdGUoZSl9ZnVuY3Rpb24gZChlKXtyZXR1cm4gbyhlKSYmXCJmdW5jdGlvblwiPT10eXBlb2YgZS50aGVuJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLmNhdGNofWZ1bmN0aW9uIHAoZSl7cmV0dXJuIG51bGw9PWU/XCJcIjpBcnJheS5pc0FycmF5KGUpfHxsKGUpJiZlLnRvU3RyaW5nPT09dT9KU09OLnN0cmluZ2lmeShlLG51bGwsMik6U3RyaW5nKGUpfWZ1bmN0aW9uIHYoZSl7dmFyIHQ9cGFyc2VGbG9hdChlKTtyZXR1cm4gaXNOYU4odCk/ZTp0fWZ1bmN0aW9uIGgoZSx0KXtmb3IodmFyIG49T2JqZWN0LmNyZWF0ZShudWxsKSxyPWUuc3BsaXQoXCIsXCIpLGk9MDtpPHIubGVuZ3RoO2krKyluW3JbaV1dPSEwO3JldHVybiB0P2Z1bmN0aW9uKGUpe3JldHVybiBuW2UudG9Mb3dlckNhc2UoKV19OmZ1bmN0aW9uKGUpe3JldHVybiBuW2VdfX12YXIgbT1oKFwic2xvdCxjb21wb25lbnRcIiwhMCkseT1oKFwia2V5LHJlZixzbG90LHNsb3Qtc2NvcGUsaXNcIik7ZnVuY3Rpb24gZyhlLHQpe2lmKGUubGVuZ3RoKXt2YXIgbj1lLmluZGV4T2YodCk7aWYobj4tMSlyZXR1cm4gZS5zcGxpY2UobiwxKX19dmFyIF89T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBiKGUsdCl7cmV0dXJuIF8uY2FsbChlLHQpfWZ1bmN0aW9uIHcoZSl7dmFyIHQ9T2JqZWN0LmNyZWF0ZShudWxsKTtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIHRbbl18fCh0W25dPWUobikpfX12YXIgJD0vLShcXHcpL2cseD13KGZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoJCxmdW5jdGlvbihlLHQpe3JldHVybiB0P3QudG9VcHBlckNhc2UoKTpcIlwifSl9KSxDPXcoZnVuY3Rpb24oZSl7cmV0dXJuIGUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrZS5zbGljZSgxKX0pLGs9L1xcQihbQS1aXSkvZyxBPXcoZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZShrLFwiLSQxXCIpLnRvTG93ZXJDYXNlKCl9KSxPPUZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kP2Z1bmN0aW9uKGUsdCl7cmV0dXJuIGUuYmluZCh0KX06ZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKG4pe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg7cmV0dXJuIHI/cj4xP2UuYXBwbHkodCxhcmd1bWVudHMpOmUuY2FsbCh0LG4pOmUuY2FsbCh0KX1yZXR1cm4gbi5fbGVuZ3RoPWUubGVuZ3RoLG59O2Z1bmN0aW9uIFMoZSx0KXt0PXR8fDA7Zm9yKHZhciBuPWUubGVuZ3RoLXQscj1uZXcgQXJyYXkobik7bi0tOylyW25dPWVbbit0XTtyZXR1cm4gcn1mdW5jdGlvbiBUKGUsdCl7Zm9yKHZhciBuIGluIHQpZVtuXT10W25dO3JldHVybiBlfWZ1bmN0aW9uIEUoZSl7Zm9yKHZhciB0PXt9LG49MDtuPGUubGVuZ3RoO24rKyllW25dJiZUKHQsZVtuXSk7cmV0dXJuIHR9ZnVuY3Rpb24gaihlLHQsbil7fXZhciBMPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4hMX0sST1mdW5jdGlvbihlKXtyZXR1cm4gZX07ZnVuY3Rpb24gTihlLHQpe2lmKGU9PT10KXJldHVybiEwO3ZhciBuPWMoZSkscj1jKHQpO2lmKCFufHwhcilyZXR1cm4hbiYmIXImJlN0cmluZyhlKT09PVN0cmluZyh0KTt0cnl7dmFyIGk9QXJyYXkuaXNBcnJheShlKSxvPUFycmF5LmlzQXJyYXkodCk7aWYoaSYmbylyZXR1cm4gZS5sZW5ndGg9PT10Lmxlbmd0aCYmZS5ldmVyeShmdW5jdGlvbihlLG4pe3JldHVybiBOKGUsdFtuXSl9KTtpZihlIGluc3RhbmNlb2YgRGF0ZSYmdCBpbnN0YW5jZW9mIERhdGUpcmV0dXJuIGUuZ2V0VGltZSgpPT09dC5nZXRUaW1lKCk7aWYoaXx8bylyZXR1cm4hMTt2YXIgYT1PYmplY3Qua2V5cyhlKSxzPU9iamVjdC5rZXlzKHQpO3JldHVybiBhLmxlbmd0aD09PXMubGVuZ3RoJiZhLmV2ZXJ5KGZ1bmN0aW9uKG4pe3JldHVybiBOKGVbbl0sdFtuXSl9KX1jYXRjaChlKXtyZXR1cm4hMX19ZnVuY3Rpb24gTShlLHQpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKWlmKE4oZVtuXSx0KSlyZXR1cm4gbjtyZXR1cm4tMX1mdW5jdGlvbiBEKGUpe3ZhciB0PSExO3JldHVybiBmdW5jdGlvbigpe3R8fCh0PSEwLGUuYXBwbHkodGhpcyxhcmd1bWVudHMpKX19dmFyIEY9XCJkYXRhLXNlcnZlci1yZW5kZXJlZFwiLFA9W1wiY29tcG9uZW50XCIsXCJkaXJlY3RpdmVcIixcImZpbHRlclwiXSxSPVtcImJlZm9yZUNyZWF0ZVwiLFwiY3JlYXRlZFwiLFwiYmVmb3JlTW91bnRcIixcIm1vdW50ZWRcIixcImJlZm9yZVVwZGF0ZVwiLFwidXBkYXRlZFwiLFwiYmVmb3JlRGVzdHJveVwiLFwiZGVzdHJveWVkXCIsXCJhY3RpdmF0ZWRcIixcImRlYWN0aXZhdGVkXCIsXCJlcnJvckNhcHR1cmVkXCIsXCJzZXJ2ZXJQcmVmZXRjaFwiXSxVPXtvcHRpb25NZXJnZVN0cmF0ZWdpZXM6T2JqZWN0LmNyZWF0ZShudWxsKSxzaWxlbnQ6ITEscHJvZHVjdGlvblRpcDohMSxkZXZ0b29sczohMSxwZXJmb3JtYW5jZTohMSxlcnJvckhhbmRsZXI6bnVsbCx3YXJuSGFuZGxlcjpudWxsLGlnbm9yZWRFbGVtZW50czpbXSxrZXlDb2RlczpPYmplY3QuY3JlYXRlKG51bGwpLGlzUmVzZXJ2ZWRUYWc6TCxpc1Jlc2VydmVkQXR0cjpMLGlzVW5rbm93bkVsZW1lbnQ6TCxnZXRUYWdOYW1lc3BhY2U6aixwYXJzZVBsYXRmb3JtVGFnTmFtZTpJLG11c3RVc2VQcm9wOkwsYXN5bmM6ITAsX2xpZmVjeWNsZUhvb2tzOlJ9LEI9L2EtekEtWlxcdTAwQjdcXHUwMEMwLVxcdTAwRDZcXHUwMEQ4LVxcdTAwRjZcXHUwMEY4LVxcdTAzN0RcXHUwMzdGLVxcdTFGRkZcXHUyMDBDLVxcdTIwMERcXHUyMDNGLVxcdTIwNDBcXHUyMDcwLVxcdTIxOEZcXHUyQzAwLVxcdTJGRUZcXHUzMDAxLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRkQvO2Z1bmN0aW9uIEgoZSx0LG4scil7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6bixlbnVtZXJhYmxlOiEhcix3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9KX12YXIgVix6PW5ldyBSZWdFeHAoXCJbXlwiK0Iuc291cmNlK1wiLiRfXFxcXGRdXCIpLEo9XCJfX3Byb3RvX19cImlue30sSz1cInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93LHE9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFdYRW52aXJvbm1lbnQmJiEhV1hFbnZpcm9ubWVudC5wbGF0Zm9ybSxXPXEmJldYRW52aXJvbm1lbnQucGxhdGZvcm0udG9Mb3dlckNhc2UoKSxHPUsmJndpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCksWD1HJiYvbXNpZXx0cmlkZW50Ly50ZXN0KEcpLFo9RyYmRy5pbmRleE9mKFwibXNpZSA5LjBcIik+MCxZPUcmJkcuaW5kZXhPZihcImVkZ2UvXCIpPjAsUT0oRyYmRy5pbmRleE9mKFwiYW5kcm9pZFwiKSxHJiYvaXBob25lfGlwYWR8aXBvZHxpb3MvLnRlc3QoRyl8fFwiaW9zXCI9PT1XKSxlZT0oRyYmL2Nocm9tZVxcL1xcZCsvLnRlc3QoRyksRyYmL3BoYW50b21qcy8udGVzdChHKSxHJiZHLm1hdGNoKC9maXJlZm94XFwvKFxcZCspLykpLHRlPXt9LndhdGNoLG5lPSExO2lmKEspdHJ5e3ZhciByZT17fTtPYmplY3QuZGVmaW5lUHJvcGVydHkocmUsXCJwYXNzaXZlXCIse2dldDpmdW5jdGlvbigpe25lPSEwfX0pLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwidGVzdC1wYXNzaXZlXCIsbnVsbCxyZSl9Y2F0Y2gocil7fXZhciBpZT1mdW5jdGlvbigpe3JldHVybiB2b2lkIDA9PT1WJiYoVj0hSyYmIXEmJnZvaWQgMCE9PXQmJnQucHJvY2VzcyYmXCJzZXJ2ZXJcIj09PXQucHJvY2Vzcy5lbnYuVlVFX0VOViksVn0sb2U9SyYmd2luZG93Ll9fVlVFX0RFVlRPT0xTX0dMT0JBTF9IT09LX187ZnVuY3Rpb24gYWUoZSl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgZSYmL25hdGl2ZSBjb2RlLy50ZXN0KGUudG9TdHJpbmcoKSl9dmFyIHNlLGNlPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJmFlKFN5bWJvbCkmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBSZWZsZWN0JiZhZShSZWZsZWN0Lm93bktleXMpO3NlPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBTZXQmJmFlKFNldCk/U2V0OmZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMuc2V0PU9iamVjdC5jcmVhdGUobnVsbCl9cmV0dXJuIGUucHJvdG90eXBlLmhhcz1mdW5jdGlvbihlKXtyZXR1cm4hMD09PXRoaXMuc2V0W2VdfSxlLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZSl7dGhpcy5zZXRbZV09ITB9LGUucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5zZXQ9T2JqZWN0LmNyZWF0ZShudWxsKX0sZX0oKTt2YXIgdWU9aixsZT0wLGZlPWZ1bmN0aW9uKCl7dGhpcy5pZD1sZSsrLHRoaXMuc3Vicz1bXX07ZmUucHJvdG90eXBlLmFkZFN1Yj1mdW5jdGlvbihlKXt0aGlzLnN1YnMucHVzaChlKX0sZmUucHJvdG90eXBlLnJlbW92ZVN1Yj1mdW5jdGlvbihlKXtnKHRoaXMuc3VicyxlKX0sZmUucHJvdG90eXBlLmRlcGVuZD1mdW5jdGlvbigpe2ZlLnRhcmdldCYmZmUudGFyZ2V0LmFkZERlcCh0aGlzKX0sZmUucHJvdG90eXBlLm5vdGlmeT1mdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLnN1YnMuc2xpY2UoKSx0PTAsbj1lLmxlbmd0aDt0PG47dCsrKWVbdF0udXBkYXRlKCl9LGZlLnRhcmdldD1udWxsO3ZhciBkZT1bXTtmdW5jdGlvbiBwZShlKXtkZS5wdXNoKGUpLGZlLnRhcmdldD1lfWZ1bmN0aW9uIHZlKCl7ZGUucG9wKCksZmUudGFyZ2V0PWRlW2RlLmxlbmd0aC0xXX12YXIgaGU9ZnVuY3Rpb24oZSx0LG4scixpLG8sYSxzKXt0aGlzLnRhZz1lLHRoaXMuZGF0YT10LHRoaXMuY2hpbGRyZW49bix0aGlzLnRleHQ9cix0aGlzLmVsbT1pLHRoaXMubnM9dm9pZCAwLHRoaXMuY29udGV4dD1vLHRoaXMuZm5Db250ZXh0PXZvaWQgMCx0aGlzLmZuT3B0aW9ucz12b2lkIDAsdGhpcy5mblNjb3BlSWQ9dm9pZCAwLHRoaXMua2V5PXQmJnQua2V5LHRoaXMuY29tcG9uZW50T3B0aW9ucz1hLHRoaXMuY29tcG9uZW50SW5zdGFuY2U9dm9pZCAwLHRoaXMucGFyZW50PXZvaWQgMCx0aGlzLnJhdz0hMSx0aGlzLmlzU3RhdGljPSExLHRoaXMuaXNSb290SW5zZXJ0PSEwLHRoaXMuaXNDb21tZW50PSExLHRoaXMuaXNDbG9uZWQ9ITEsdGhpcy5pc09uY2U9ITEsdGhpcy5hc3luY0ZhY3Rvcnk9cyx0aGlzLmFzeW5jTWV0YT12b2lkIDAsdGhpcy5pc0FzeW5jUGxhY2Vob2xkZXI9ITF9LG1lPXtjaGlsZDp7Y29uZmlndXJhYmxlOiEwfX07bWUuY2hpbGQuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29tcG9uZW50SW5zdGFuY2V9LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGhlLnByb3RvdHlwZSxtZSk7dmFyIHllPWZ1bmN0aW9uKGUpe3ZvaWQgMD09PWUmJihlPVwiXCIpO3ZhciB0PW5ldyBoZTtyZXR1cm4gdC50ZXh0PWUsdC5pc0NvbW1lbnQ9ITAsdH07ZnVuY3Rpb24gZ2UoZSl7cmV0dXJuIG5ldyBoZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCxTdHJpbmcoZSkpfWZ1bmN0aW9uIF9lKGUpe3ZhciB0PW5ldyBoZShlLnRhZyxlLmRhdGEsZS5jaGlsZHJlbiYmZS5jaGlsZHJlbi5zbGljZSgpLGUudGV4dCxlLmVsbSxlLmNvbnRleHQsZS5jb21wb25lbnRPcHRpb25zLGUuYXN5bmNGYWN0b3J5KTtyZXR1cm4gdC5ucz1lLm5zLHQuaXNTdGF0aWM9ZS5pc1N0YXRpYyx0LmtleT1lLmtleSx0LmlzQ29tbWVudD1lLmlzQ29tbWVudCx0LmZuQ29udGV4dD1lLmZuQ29udGV4dCx0LmZuT3B0aW9ucz1lLmZuT3B0aW9ucyx0LmZuU2NvcGVJZD1lLmZuU2NvcGVJZCx0LmFzeW5jTWV0YT1lLmFzeW5jTWV0YSx0LmlzQ2xvbmVkPSEwLHR9dmFyIGJlPUFycmF5LnByb3RvdHlwZSx3ZT1PYmplY3QuY3JlYXRlKGJlKTtbXCJwdXNoXCIsXCJwb3BcIixcInNoaWZ0XCIsXCJ1bnNoaWZ0XCIsXCJzcGxpY2VcIixcInNvcnRcIixcInJldmVyc2VcIl0uZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD1iZVtlXTtIKHdlLGUsZnVuY3Rpb24oKXtmb3IodmFyIG49W10scj1hcmd1bWVudHMubGVuZ3RoO3ItLTspbltyXT1hcmd1bWVudHNbcl07dmFyIGksbz10LmFwcGx5KHRoaXMsbiksYT10aGlzLl9fb2JfXztzd2l0Y2goZSl7Y2FzZVwicHVzaFwiOmNhc2VcInVuc2hpZnRcIjppPW47YnJlYWs7Y2FzZVwic3BsaWNlXCI6aT1uLnNsaWNlKDIpfXJldHVybiBpJiZhLm9ic2VydmVBcnJheShpKSxhLmRlcC5ub3RpZnkoKSxvfSl9KTt2YXIgJGU9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMod2UpLHhlPSEwO2Z1bmN0aW9uIENlKGUpe3hlPWV9dmFyIGtlPWZ1bmN0aW9uKGUpe3ZhciB0O3RoaXMudmFsdWU9ZSx0aGlzLmRlcD1uZXcgZmUsdGhpcy52bUNvdW50PTAsSChlLFwiX19vYl9fXCIsdGhpcyksQXJyYXkuaXNBcnJheShlKT8oSj8odD13ZSxlLl9fcHJvdG9fXz10KTpmdW5jdGlvbihlLHQsbil7Zm9yKHZhciByPTAsaT1uLmxlbmd0aDtyPGk7cisrKXt2YXIgbz1uW3JdO0goZSxvLHRbb10pfX0oZSx3ZSwkZSksdGhpcy5vYnNlcnZlQXJyYXkoZSkpOnRoaXMud2FsayhlKX07ZnVuY3Rpb24gQWUoZSx0KXt2YXIgbjtpZihjKGUpJiYhKGUgaW5zdGFuY2VvZiBoZSkpcmV0dXJuIGIoZSxcIl9fb2JfX1wiKSYmZS5fX29iX18gaW5zdGFuY2VvZiBrZT9uPWUuX19vYl9fOnhlJiYhaWUoKSYmKEFycmF5LmlzQXJyYXkoZSl8fGwoZSkpJiZPYmplY3QuaXNFeHRlbnNpYmxlKGUpJiYhZS5faXNWdWUmJihuPW5ldyBrZShlKSksdCYmbiYmbi52bUNvdW50Kyssbn1mdW5jdGlvbiBPZShlLHQsbixyLGkpe3ZhciBvPW5ldyBmZSxhPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSx0KTtpZighYXx8ITEhPT1hLmNvbmZpZ3VyYWJsZSl7dmFyIHM9YSYmYS5nZXQsYz1hJiZhLnNldDtzJiYhY3x8MiE9PWFyZ3VtZW50cy5sZW5ndGh8fChuPWVbdF0pO3ZhciB1PSFpJiZBZShuKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXt2YXIgdD1zP3MuY2FsbChlKTpuO3JldHVybiBmZS50YXJnZXQmJihvLmRlcGVuZCgpLHUmJih1LmRlcC5kZXBlbmQoKSxBcnJheS5pc0FycmF5KHQpJiZmdW5jdGlvbiBlKHQpe2Zvcih2YXIgbj12b2lkIDAscj0wLGk9dC5sZW5ndGg7cjxpO3IrKykobj10W3JdKSYmbi5fX29iX18mJm4uX19vYl9fLmRlcC5kZXBlbmQoKSxBcnJheS5pc0FycmF5KG4pJiZlKG4pfSh0KSkpLHR9LHNldDpmdW5jdGlvbih0KXt2YXIgcj1zP3MuY2FsbChlKTpuO3Q9PT1yfHx0IT10JiZyIT1yfHxzJiYhY3x8KGM/Yy5jYWxsKGUsdCk6bj10LHU9IWkmJkFlKHQpLG8ubm90aWZ5KCkpfX0pfX1mdW5jdGlvbiBTZShlLHQsbil7aWYoQXJyYXkuaXNBcnJheShlKSYmZih0KSlyZXR1cm4gZS5sZW5ndGg9TWF0aC5tYXgoZS5sZW5ndGgsdCksZS5zcGxpY2UodCwxLG4pLG47aWYodCBpbiBlJiYhKHQgaW4gT2JqZWN0LnByb3RvdHlwZSkpcmV0dXJuIGVbdF09bixuO3ZhciByPWUuX19vYl9fO3JldHVybiBlLl9pc1Z1ZXx8ciYmci52bUNvdW50P246cj8oT2Uoci52YWx1ZSx0LG4pLHIuZGVwLm5vdGlmeSgpLG4pOihlW3RdPW4sbil9ZnVuY3Rpb24gVGUoZSx0KXtpZihBcnJheS5pc0FycmF5KGUpJiZmKHQpKWUuc3BsaWNlKHQsMSk7ZWxzZXt2YXIgbj1lLl9fb2JfXztlLl9pc1Z1ZXx8biYmbi52bUNvdW50fHxiKGUsdCkmJihkZWxldGUgZVt0XSxuJiZuLmRlcC5ub3RpZnkoKSl9fWtlLnByb3RvdHlwZS53YWxrPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1PYmplY3Qua2V5cyhlKSxuPTA7bjx0Lmxlbmd0aDtuKyspT2UoZSx0W25dKX0sa2UucHJvdG90eXBlLm9ic2VydmVBcnJheT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MCxuPWUubGVuZ3RoO3Q8bjt0KyspQWUoZVt0XSl9O3ZhciBFZT1VLm9wdGlvbk1lcmdlU3RyYXRlZ2llcztmdW5jdGlvbiBqZShlLHQpe2lmKCF0KXJldHVybiBlO2Zvcih2YXIgbixyLGksbz1jZT9SZWZsZWN0Lm93bktleXModCk6T2JqZWN0LmtleXModCksYT0wO2E8by5sZW5ndGg7YSsrKVwiX19vYl9fXCIhPT0obj1vW2FdKSYmKHI9ZVtuXSxpPXRbbl0sYihlLG4pP3IhPT1pJiZsKHIpJiZsKGkpJiZqZShyLGkpOlNlKGUsbixpKSk7cmV0dXJuIGV9ZnVuY3Rpb24gTGUoZSx0LG4pe3JldHVybiBuP2Z1bmN0aW9uKCl7dmFyIHI9XCJmdW5jdGlvblwiPT10eXBlb2YgdD90LmNhbGwobixuKTp0LGk9XCJmdW5jdGlvblwiPT10eXBlb2YgZT9lLmNhbGwobixuKTplO3JldHVybiByP2plKHIsaSk6aX06dD9lP2Z1bmN0aW9uKCl7cmV0dXJuIGplKFwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dC5jYWxsKHRoaXMsdGhpcyk6dCxcImZ1bmN0aW9uXCI9PXR5cGVvZiBlP2UuY2FsbCh0aGlzLHRoaXMpOmUpfTp0OmV9ZnVuY3Rpb24gSWUoZSx0KXt2YXIgbj10P2U/ZS5jb25jYXQodCk6QXJyYXkuaXNBcnJheSh0KT90Olt0XTplO3JldHVybiBuP2Z1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxuPTA7bjxlLmxlbmd0aDtuKyspLTE9PT10LmluZGV4T2YoZVtuXSkmJnQucHVzaChlW25dKTtyZXR1cm4gdH0obik6bn1mdW5jdGlvbiBOZShlLHQsbixyKXt2YXIgaT1PYmplY3QuY3JlYXRlKGV8fG51bGwpO3JldHVybiB0P1QoaSx0KTppfUVlLmRhdGE9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBuP0xlKGUsdCxuKTp0JiZcImZ1bmN0aW9uXCIhPXR5cGVvZiB0P2U6TGUoZSx0KX0sUi5mb3JFYWNoKGZ1bmN0aW9uKGUpe0VlW2VdPUllfSksUC5mb3JFYWNoKGZ1bmN0aW9uKGUpe0VlW2UrXCJzXCJdPU5lfSksRWUud2F0Y2g9ZnVuY3Rpb24oZSx0LG4scil7aWYoZT09PXRlJiYoZT12b2lkIDApLHQ9PT10ZSYmKHQ9dm9pZCAwKSwhdClyZXR1cm4gT2JqZWN0LmNyZWF0ZShlfHxudWxsKTtpZighZSlyZXR1cm4gdDt2YXIgaT17fTtmb3IodmFyIG8gaW4gVChpLGUpLHQpe3ZhciBhPWlbb10scz10W29dO2EmJiFBcnJheS5pc0FycmF5KGEpJiYoYT1bYV0pLGlbb109YT9hLmNvbmNhdChzKTpBcnJheS5pc0FycmF5KHMpP3M6W3NdfXJldHVybiBpfSxFZS5wcm9wcz1FZS5tZXRob2RzPUVlLmluamVjdD1FZS5jb21wdXRlZD1mdW5jdGlvbihlLHQsbixyKXtpZighZSlyZXR1cm4gdDt2YXIgaT1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybiBUKGksZSksdCYmVChpLHQpLGl9LEVlLnByb3ZpZGU9TGU7dmFyIE1lPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHZvaWQgMD09PXQ/ZTp0fTtmdW5jdGlvbiBEZShlLHQsbil7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgdCYmKHQ9dC5vcHRpb25zKSxmdW5jdGlvbihlLHQpe3ZhciBuPWUucHJvcHM7aWYobil7dmFyIHIsaSxvPXt9O2lmKEFycmF5LmlzQXJyYXkobikpZm9yKHI9bi5sZW5ndGg7ci0tOylcInN0cmluZ1wiPT10eXBlb2YoaT1uW3JdKSYmKG9beChpKV09e3R5cGU6bnVsbH0pO2Vsc2UgaWYobChuKSlmb3IodmFyIGEgaW4gbilpPW5bYV0sb1t4KGEpXT1sKGkpP2k6e3R5cGU6aX07ZS5wcm9wcz1vfX0odCksZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmluamVjdDtpZihuKXt2YXIgcj1lLmluamVjdD17fTtpZihBcnJheS5pc0FycmF5KG4pKWZvcih2YXIgaT0wO2k8bi5sZW5ndGg7aSsrKXJbbltpXV09e2Zyb206bltpXX07ZWxzZSBpZihsKG4pKWZvcih2YXIgbyBpbiBuKXt2YXIgYT1uW29dO3Jbb109bChhKT9UKHtmcm9tOm99LGEpOntmcm9tOmF9fX19KHQpLGZ1bmN0aW9uKGUpe3ZhciB0PWUuZGlyZWN0aXZlcztpZih0KWZvcih2YXIgbiBpbiB0KXt2YXIgcj10W25dO1wiZnVuY3Rpb25cIj09dHlwZW9mIHImJih0W25dPXtiaW5kOnIsdXBkYXRlOnJ9KX19KHQpLCF0Ll9iYXNlJiYodC5leHRlbmRzJiYoZT1EZShlLHQuZXh0ZW5kcyxuKSksdC5taXhpbnMpKWZvcih2YXIgcj0wLGk9dC5taXhpbnMubGVuZ3RoO3I8aTtyKyspZT1EZShlLHQubWl4aW5zW3JdLG4pO3ZhciBvLGE9e307Zm9yKG8gaW4gZSlzKG8pO2ZvcihvIGluIHQpYihlLG8pfHxzKG8pO2Z1bmN0aW9uIHMocil7dmFyIGk9RWVbcl18fE1lO2Fbcl09aShlW3JdLHRbcl0sbixyKX1yZXR1cm4gYX1mdW5jdGlvbiBGZShlLHQsbixyKXtpZihcInN0cmluZ1wiPT10eXBlb2Ygbil7dmFyIGk9ZVt0XTtpZihiKGksbikpcmV0dXJuIGlbbl07dmFyIG89eChuKTtpZihiKGksbykpcmV0dXJuIGlbb107dmFyIGE9QyhvKTtyZXR1cm4gYihpLGEpP2lbYV06aVtuXXx8aVtvXXx8aVthXX19ZnVuY3Rpb24gUGUoZSx0LG4scil7dmFyIGk9dFtlXSxvPSFiKG4sZSksYT1uW2VdLHM9QmUoQm9vbGVhbixpLnR5cGUpO2lmKHM+LTEpaWYobyYmIWIoaSxcImRlZmF1bHRcIikpYT0hMTtlbHNlIGlmKFwiXCI9PT1hfHxhPT09QShlKSl7dmFyIGM9QmUoU3RyaW5nLGkudHlwZSk7KGM8MHx8czxjKSYmKGE9ITApfWlmKHZvaWQgMD09PWEpe2E9ZnVuY3Rpb24oZSx0LG4pe2lmKGIodCxcImRlZmF1bHRcIikpe3ZhciByPXQuZGVmYXVsdDtyZXR1cm4gZSYmZS4kb3B0aW9ucy5wcm9wc0RhdGEmJnZvaWQgMD09PWUuJG9wdGlvbnMucHJvcHNEYXRhW25dJiZ2b2lkIDAhPT1lLl9wcm9wc1tuXT9lLl9wcm9wc1tuXTpcImZ1bmN0aW9uXCI9PXR5cGVvZiByJiZcIkZ1bmN0aW9uXCIhPT1SZSh0LnR5cGUpP3IuY2FsbChlKTpyfX0ocixpLGUpO3ZhciB1PXhlO0NlKCEwKSxBZShhKSxDZSh1KX1yZXR1cm4gYX1mdW5jdGlvbiBSZShlKXt2YXIgdD1lJiZlLnRvU3RyaW5nKCkubWF0Y2goL15cXHMqZnVuY3Rpb24gKFxcdyspLyk7cmV0dXJuIHQ/dFsxXTpcIlwifWZ1bmN0aW9uIFVlKGUsdCl7cmV0dXJuIFJlKGUpPT09UmUodCl9ZnVuY3Rpb24gQmUoZSx0KXtpZighQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gVWUodCxlKT8wOi0xO2Zvcih2YXIgbj0wLHI9dC5sZW5ndGg7bjxyO24rKylpZihVZSh0W25dLGUpKXJldHVybiBuO3JldHVybi0xfWZ1bmN0aW9uIEhlKGUsdCxuKXtwZSgpO3RyeXtpZih0KWZvcih2YXIgcj10O3I9ci4kcGFyZW50Oyl7dmFyIGk9ci4kb3B0aW9ucy5lcnJvckNhcHR1cmVkO2lmKGkpZm9yKHZhciBvPTA7bzxpLmxlbmd0aDtvKyspdHJ5e2lmKCExPT09aVtvXS5jYWxsKHIsZSx0LG4pKXJldHVybn1jYXRjaChlKXt6ZShlLHIsXCJlcnJvckNhcHR1cmVkIGhvb2tcIil9fXplKGUsdCxuKX1maW5hbGx5e3ZlKCl9fWZ1bmN0aW9uIFZlKGUsdCxuLHIsaSl7dmFyIG87dHJ5eyhvPW4/ZS5hcHBseSh0LG4pOmUuY2FsbCh0KSkmJiFvLl9pc1Z1ZSYmZChvKSYmIW8uX2hhbmRsZWQmJihvLmNhdGNoKGZ1bmN0aW9uKGUpe3JldHVybiBIZShlLHIsaStcIiAoUHJvbWlzZS9hc3luYylcIil9KSxvLl9oYW5kbGVkPSEwKX1jYXRjaChlKXtIZShlLHIsaSl9cmV0dXJuIG99ZnVuY3Rpb24gemUoZSx0LG4pe2lmKFUuZXJyb3JIYW5kbGVyKXRyeXtyZXR1cm4gVS5lcnJvckhhbmRsZXIuY2FsbChudWxsLGUsdCxuKX1jYXRjaCh0KXt0IT09ZSYmSmUodCxudWxsLFwiY29uZmlnLmVycm9ySGFuZGxlclwiKX1KZShlLHQsbil9ZnVuY3Rpb24gSmUoZSx0LG4pe2lmKCFLJiYhcXx8XCJ1bmRlZmluZWRcIj09dHlwZW9mIGNvbnNvbGUpdGhyb3cgZTtjb25zb2xlLmVycm9yKGUpfXZhciBLZSxxZT0hMSxXZT1bXSxHZT0hMTtmdW5jdGlvbiBYZSgpe0dlPSExO3ZhciBlPVdlLnNsaWNlKDApO1dlLmxlbmd0aD0wO2Zvcih2YXIgdD0wO3Q8ZS5sZW5ndGg7dCsrKWVbdF0oKX1pZihcInVuZGVmaW5lZFwiIT10eXBlb2YgUHJvbWlzZSYmYWUoUHJvbWlzZSkpe3ZhciBaZT1Qcm9taXNlLnJlc29sdmUoKTtLZT1mdW5jdGlvbigpe1plLnRoZW4oWGUpLFEmJnNldFRpbWVvdXQoail9LHFlPSEwfWVsc2UgaWYoWHx8XCJ1bmRlZmluZWRcIj09dHlwZW9mIE11dGF0aW9uT2JzZXJ2ZXJ8fCFhZShNdXRhdGlvbk9ic2VydmVyKSYmXCJbb2JqZWN0IE11dGF0aW9uT2JzZXJ2ZXJDb25zdHJ1Y3Rvcl1cIiE9PU11dGF0aW9uT2JzZXJ2ZXIudG9TdHJpbmcoKSlLZT12b2lkIDAhPT1uJiZhZShuKT9mdW5jdGlvbigpe24oWGUpfTpmdW5jdGlvbigpe3NldFRpbWVvdXQoWGUsMCl9O2Vsc2V7dmFyIFllPTEsUWU9bmV3IE11dGF0aW9uT2JzZXJ2ZXIoWGUpLGV0PWRvY3VtZW50LmNyZWF0ZVRleHROb2RlKFN0cmluZyhZZSkpO1FlLm9ic2VydmUoZXQse2NoYXJhY3RlckRhdGE6ITB9KSxLZT1mdW5jdGlvbigpe1llPShZZSsxKSUyLGV0LmRhdGE9U3RyaW5nKFllKX0scWU9ITB9ZnVuY3Rpb24gdHQoZSx0KXt2YXIgbjtpZihXZS5wdXNoKGZ1bmN0aW9uKCl7aWYoZSl0cnl7ZS5jYWxsKHQpfWNhdGNoKGUpe0hlKGUsdCxcIm5leHRUaWNrXCIpfWVsc2UgbiYmbih0KX0pLEdlfHwoR2U9ITAsS2UoKSksIWUmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBQcm9taXNlKXJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihlKXtuPWV9KX12YXIgbnQ9bmV3IHNlO2Z1bmN0aW9uIHJ0KGUpeyFmdW5jdGlvbiBlKHQsbil7dmFyIHIsaSxvPUFycmF5LmlzQXJyYXkodCk7aWYoISghbyYmIWModCl8fE9iamVjdC5pc0Zyb3plbih0KXx8dCBpbnN0YW5jZW9mIGhlKSl7aWYodC5fX29iX18pe3ZhciBhPXQuX19vYl9fLmRlcC5pZDtpZihuLmhhcyhhKSlyZXR1cm47bi5hZGQoYSl9aWYobylmb3Iocj10Lmxlbmd0aDtyLS07KWUodFtyXSxuKTtlbHNlIGZvcihyPShpPU9iamVjdC5rZXlzKHQpKS5sZW5ndGg7ci0tOyllKHRbaVtyXV0sbil9fShlLG50KSxudC5jbGVhcigpfXZhciBpdD13KGZ1bmN0aW9uKGUpe3ZhciB0PVwiJlwiPT09ZS5jaGFyQXQoMCksbj1cIn5cIj09PShlPXQ/ZS5zbGljZSgxKTplKS5jaGFyQXQoMCkscj1cIiFcIj09PShlPW4/ZS5zbGljZSgxKTplKS5jaGFyQXQoMCk7cmV0dXJue25hbWU6ZT1yP2Uuc2xpY2UoMSk6ZSxvbmNlOm4sY2FwdHVyZTpyLHBhc3NpdmU6dH19KTtmdW5jdGlvbiBvdChlLHQpe2Z1bmN0aW9uIG4oKXt2YXIgZT1hcmd1bWVudHMscj1uLmZucztpZighQXJyYXkuaXNBcnJheShyKSlyZXR1cm4gVmUocixudWxsLGFyZ3VtZW50cyx0LFwidi1vbiBoYW5kbGVyXCIpO2Zvcih2YXIgaT1yLnNsaWNlKCksbz0wO288aS5sZW5ndGg7bysrKVZlKGlbb10sbnVsbCxlLHQsXCJ2LW9uIGhhbmRsZXJcIil9cmV0dXJuIG4uZm5zPWUsbn1mdW5jdGlvbiBhdChlLHQsbixyLG8scyl7dmFyIGMsdSxsLGY7Zm9yKGMgaW4gZSl1PWVbY10sbD10W2NdLGY9aXQoYyksaSh1KXx8KGkobCk/KGkodS5mbnMpJiYodT1lW2NdPW90KHUscykpLGEoZi5vbmNlKSYmKHU9ZVtjXT1vKGYubmFtZSx1LGYuY2FwdHVyZSkpLG4oZi5uYW1lLHUsZi5jYXB0dXJlLGYucGFzc2l2ZSxmLnBhcmFtcykpOnUhPT1sJiYobC5mbnM9dSxlW2NdPWwpKTtmb3IoYyBpbiB0KWkoZVtjXSkmJnIoKGY9aXQoYykpLm5hbWUsdFtjXSxmLmNhcHR1cmUpfWZ1bmN0aW9uIHN0KGUsdCxuKXt2YXIgcjtlIGluc3RhbmNlb2YgaGUmJihlPWUuZGF0YS5ob29rfHwoZS5kYXRhLmhvb2s9e30pKTt2YXIgcz1lW3RdO2Z1bmN0aW9uIGMoKXtuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxnKHIuZm5zLGMpfWkocyk/cj1vdChbY10pOm8ocy5mbnMpJiZhKHMubWVyZ2VkKT8ocj1zKS5mbnMucHVzaChjKTpyPW90KFtzLGNdKSxyLm1lcmdlZD0hMCxlW3RdPXJ9ZnVuY3Rpb24gY3QoZSx0LG4scixpKXtpZihvKHQpKXtpZihiKHQsbikpcmV0dXJuIGVbbl09dFtuXSxpfHxkZWxldGUgdFtuXSwhMDtpZihiKHQscikpcmV0dXJuIGVbbl09dFtyXSxpfHxkZWxldGUgdFtyXSwhMH1yZXR1cm4hMX1mdW5jdGlvbiB1dChlKXtyZXR1cm4gcyhlKT9bZ2UoZSldOkFycmF5LmlzQXJyYXkoZSk/ZnVuY3Rpb24gZSh0LG4pe3ZhciByLGMsdSxsLGY9W107Zm9yKHI9MDtyPHQubGVuZ3RoO3IrKylpKGM9dFtyXSl8fFwiYm9vbGVhblwiPT10eXBlb2YgY3x8KGw9Zlt1PWYubGVuZ3RoLTFdLEFycmF5LmlzQXJyYXkoYyk/Yy5sZW5ndGg+MCYmKGx0KChjPWUoYywobnx8XCJcIikrXCJfXCIrcikpWzBdKSYmbHQobCkmJihmW3VdPWdlKGwudGV4dCtjWzBdLnRleHQpLGMuc2hpZnQoKSksZi5wdXNoLmFwcGx5KGYsYykpOnMoYyk/bHQobCk/Zlt1XT1nZShsLnRleHQrYyk6XCJcIiE9PWMmJmYucHVzaChnZShjKSk6bHQoYykmJmx0KGwpP2ZbdV09Z2UobC50ZXh0K2MudGV4dCk6KGEodC5faXNWTGlzdCkmJm8oYy50YWcpJiZpKGMua2V5KSYmbyhuKSYmKGMua2V5PVwiX192bGlzdFwiK24rXCJfXCIrcitcIl9fXCIpLGYucHVzaChjKSkpO3JldHVybiBmfShlKTp2b2lkIDB9ZnVuY3Rpb24gbHQoZSl7cmV0dXJuIG8oZSkmJm8oZS50ZXh0KSYmITE9PT1lLmlzQ29tbWVudH1mdW5jdGlvbiBmdChlLHQpe2lmKGUpe2Zvcih2YXIgbj1PYmplY3QuY3JlYXRlKG51bGwpLHI9Y2U/UmVmbGVjdC5vd25LZXlzKGUpOk9iamVjdC5rZXlzKGUpLGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIG89cltpXTtpZihcIl9fb2JfX1wiIT09byl7Zm9yKHZhciBhPWVbb10uZnJvbSxzPXQ7czspe2lmKHMuX3Byb3ZpZGVkJiZiKHMuX3Byb3ZpZGVkLGEpKXtuW29dPXMuX3Byb3ZpZGVkW2FdO2JyZWFrfXM9cy4kcGFyZW50fWlmKCFzJiZcImRlZmF1bHRcImluIGVbb10pe3ZhciBjPWVbb10uZGVmYXVsdDtuW29dPVwiZnVuY3Rpb25cIj09dHlwZW9mIGM/Yy5jYWxsKHQpOmN9fX1yZXR1cm4gbn19ZnVuY3Rpb24gZHQoZSx0KXtpZighZXx8IWUubGVuZ3RoKXJldHVybnt9O2Zvcih2YXIgbj17fSxyPTAsaT1lLmxlbmd0aDtyPGk7cisrKXt2YXIgbz1lW3JdLGE9by5kYXRhO2lmKGEmJmEuYXR0cnMmJmEuYXR0cnMuc2xvdCYmZGVsZXRlIGEuYXR0cnMuc2xvdCxvLmNvbnRleHQhPT10JiZvLmZuQ29udGV4dCE9PXR8fCFhfHxudWxsPT1hLnNsb3QpKG4uZGVmYXVsdHx8KG4uZGVmYXVsdD1bXSkpLnB1c2gobyk7ZWxzZXt2YXIgcz1hLnNsb3QsYz1uW3NdfHwobltzXT1bXSk7XCJ0ZW1wbGF0ZVwiPT09by50YWc/Yy5wdXNoLmFwcGx5KGMsby5jaGlsZHJlbnx8W10pOmMucHVzaChvKX19Zm9yKHZhciB1IGluIG4pblt1XS5ldmVyeShwdCkmJmRlbGV0ZSBuW3VdO3JldHVybiBufWZ1bmN0aW9uIHB0KGUpe3JldHVybiBlLmlzQ29tbWVudCYmIWUuYXN5bmNGYWN0b3J5fHxcIiBcIj09PWUudGV4dH1mdW5jdGlvbiB2dChlLHQsbil7dmFyIGksbz1PYmplY3Qua2V5cyh0KS5sZW5ndGg+MCxhPWU/ISFlLiRzdGFibGU6IW8scz1lJiZlLiRrZXk7aWYoZSl7aWYoZS5fbm9ybWFsaXplZClyZXR1cm4gZS5fbm9ybWFsaXplZDtpZihhJiZuJiZuIT09ciYmcz09PW4uJGtleSYmIW8mJiFuLiRoYXNOb3JtYWwpcmV0dXJuIG47Zm9yKHZhciBjIGluIGk9e30sZSllW2NdJiZcIiRcIiE9PWNbMF0mJihpW2NdPWh0KHQsYyxlW2NdKSl9ZWxzZSBpPXt9O2Zvcih2YXIgdSBpbiB0KXUgaW4gaXx8KGlbdV09bXQodCx1KSk7cmV0dXJuIGUmJk9iamVjdC5pc0V4dGVuc2libGUoZSkmJihlLl9ub3JtYWxpemVkPWkpLEgoaSxcIiRzdGFibGVcIixhKSxIKGksXCIka2V5XCIscyksSChpLFwiJGhhc05vcm1hbFwiLG8pLGl9ZnVuY3Rpb24gaHQoZSx0LG4pe3ZhciByPWZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD9uLmFwcGx5KG51bGwsYXJndW1lbnRzKTpuKHt9KTtyZXR1cm4oZT1lJiZcIm9iamVjdFwiPT10eXBlb2YgZSYmIUFycmF5LmlzQXJyYXkoZSk/W2VdOnV0KGUpKSYmKDA9PT1lLmxlbmd0aHx8MT09PWUubGVuZ3RoJiZlWzBdLmlzQ29tbWVudCk/dm9pZCAwOmV9O3JldHVybiBuLnByb3h5JiZPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHtnZXQ6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHJ9ZnVuY3Rpb24gbXQoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZVt0XX19ZnVuY3Rpb24geXQoZSx0KXt2YXIgbixyLGksYSxzO2lmKEFycmF5LmlzQXJyYXkoZSl8fFwic3RyaW5nXCI9PXR5cGVvZiBlKWZvcihuPW5ldyBBcnJheShlLmxlbmd0aCkscj0wLGk9ZS5sZW5ndGg7cjxpO3IrKyluW3JdPXQoZVtyXSxyKTtlbHNlIGlmKFwibnVtYmVyXCI9PXR5cGVvZiBlKWZvcihuPW5ldyBBcnJheShlKSxyPTA7cjxlO3IrKyluW3JdPXQocisxLHIpO2Vsc2UgaWYoYyhlKSlpZihjZSYmZVtTeW1ib2wuaXRlcmF0b3JdKXtuPVtdO2Zvcih2YXIgdT1lW1N5bWJvbC5pdGVyYXRvcl0oKSxsPXUubmV4dCgpOyFsLmRvbmU7KW4ucHVzaCh0KGwudmFsdWUsbi5sZW5ndGgpKSxsPXUubmV4dCgpfWVsc2UgZm9yKGE9T2JqZWN0LmtleXMoZSksbj1uZXcgQXJyYXkoYS5sZW5ndGgpLHI9MCxpPWEubGVuZ3RoO3I8aTtyKyspcz1hW3JdLG5bcl09dChlW3NdLHMscik7cmV0dXJuIG8obil8fChuPVtdKSxuLl9pc1ZMaXN0PSEwLG59ZnVuY3Rpb24gZ3QoZSx0LG4scil7dmFyIGksbz10aGlzLiRzY29wZWRTbG90c1tlXTtvPyhuPW58fHt9LHImJihuPVQoVCh7fSxyKSxuKSksaT1vKG4pfHx0KTppPXRoaXMuJHNsb3RzW2VdfHx0O3ZhciBhPW4mJm4uc2xvdDtyZXR1cm4gYT90aGlzLiRjcmVhdGVFbGVtZW50KFwidGVtcGxhdGVcIix7c2xvdDphfSxpKTppfWZ1bmN0aW9uIF90KGUpe3JldHVybiBGZSh0aGlzLiRvcHRpb25zLFwiZmlsdGVyc1wiLGUpfHxJfWZ1bmN0aW9uIGJ0KGUsdCl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/LTE9PT1lLmluZGV4T2YodCk6ZSE9PXR9ZnVuY3Rpb24gd3QoZSx0LG4scixpKXt2YXIgbz1VLmtleUNvZGVzW3RdfHxuO3JldHVybiBpJiZyJiYhVS5rZXlDb2Rlc1t0XT9idChpLHIpOm8/YnQobyxlKTpyP0EocikhPT10OnZvaWQgMH1mdW5jdGlvbiAkdChlLHQsbixyLGkpe2lmKG4mJmMobikpe3ZhciBvO0FycmF5LmlzQXJyYXkobikmJihuPUUobikpO3ZhciBhPWZ1bmN0aW9uKGEpe2lmKFwiY2xhc3NcIj09PWF8fFwic3R5bGVcIj09PWF8fHkoYSkpbz1lO2Vsc2V7dmFyIHM9ZS5hdHRycyYmZS5hdHRycy50eXBlO289cnx8VS5tdXN0VXNlUHJvcCh0LHMsYSk/ZS5kb21Qcm9wc3x8KGUuZG9tUHJvcHM9e30pOmUuYXR0cnN8fChlLmF0dHJzPXt9KX12YXIgYz14KGEpLHU9QShhKTtjIGluIG98fHUgaW4gb3x8KG9bYV09blthXSxpJiYoKGUub258fChlLm9uPXt9KSlbXCJ1cGRhdGU6XCIrYV09ZnVuY3Rpb24oZSl7blthXT1lfSkpfTtmb3IodmFyIHMgaW4gbilhKHMpfXJldHVybiBlfWZ1bmN0aW9uIHh0KGUsdCl7dmFyIG49dGhpcy5fc3RhdGljVHJlZXN8fCh0aGlzLl9zdGF0aWNUcmVlcz1bXSkscj1uW2VdO3JldHVybiByJiYhdD9yOihrdChyPW5bZV09dGhpcy4kb3B0aW9ucy5zdGF0aWNSZW5kZXJGbnNbZV0uY2FsbCh0aGlzLl9yZW5kZXJQcm94eSxudWxsLHRoaXMpLFwiX19zdGF0aWNfX1wiK2UsITEpLHIpfWZ1bmN0aW9uIEN0KGUsdCxuKXtyZXR1cm4ga3QoZSxcIl9fb25jZV9fXCIrdCsobj9cIl9cIituOlwiXCIpLCEwKSxlfWZ1bmN0aW9uIGt0KGUsdCxuKXtpZihBcnJheS5pc0FycmF5KGUpKWZvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKWVbcl0mJlwic3RyaW5nXCIhPXR5cGVvZiBlW3JdJiZBdChlW3JdLHQrXCJfXCIrcixuKTtlbHNlIEF0KGUsdCxuKX1mdW5jdGlvbiBBdChlLHQsbil7ZS5pc1N0YXRpYz0hMCxlLmtleT10LGUuaXNPbmNlPW59ZnVuY3Rpb24gT3QoZSx0KXtpZih0JiZsKHQpKXt2YXIgbj1lLm9uPWUub24/VCh7fSxlLm9uKTp7fTtmb3IodmFyIHIgaW4gdCl7dmFyIGk9bltyXSxvPXRbcl07bltyXT1pP1tdLmNvbmNhdChpLG8pOm99fXJldHVybiBlfWZ1bmN0aW9uIFN0KGUsdCxuLHIpe3Q9dHx8eyRzdGFibGU6IW59O2Zvcih2YXIgaT0wO2k8ZS5sZW5ndGg7aSsrKXt2YXIgbz1lW2ldO0FycmF5LmlzQXJyYXkobyk/U3Qobyx0LG4pOm8mJihvLnByb3h5JiYoby5mbi5wcm94eT0hMCksdFtvLmtleV09by5mbil9cmV0dXJuIHImJih0LiRrZXk9ciksdH1mdW5jdGlvbiBUdChlLHQpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bis9Mil7dmFyIHI9dFtuXTtcInN0cmluZ1wiPT10eXBlb2YgciYmciYmKGVbdFtuXV09dFtuKzFdKX1yZXR1cm4gZX1mdW5jdGlvbiBFdChlLHQpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBlP3QrZTplfWZ1bmN0aW9uIGp0KGUpe2UuX289Q3QsZS5fbj12LGUuX3M9cCxlLl9sPXl0LGUuX3Q9Z3QsZS5fcT1OLGUuX2k9TSxlLl9tPXh0LGUuX2Y9X3QsZS5faz13dCxlLl9iPSR0LGUuX3Y9Z2UsZS5fZT15ZSxlLl91PVN0LGUuX2c9T3QsZS5fZD1UdCxlLl9wPUV0fWZ1bmN0aW9uIEx0KGUsdCxuLGksbyl7dmFyIHMsYz10aGlzLHU9by5vcHRpb25zO2IoaSxcIl91aWRcIik/KHM9T2JqZWN0LmNyZWF0ZShpKSkuX29yaWdpbmFsPWk6KHM9aSxpPWkuX29yaWdpbmFsKTt2YXIgbD1hKHUuX2NvbXBpbGVkKSxmPSFsO3RoaXMuZGF0YT1lLHRoaXMucHJvcHM9dCx0aGlzLmNoaWxkcmVuPW4sdGhpcy5wYXJlbnQ9aSx0aGlzLmxpc3RlbmVycz1lLm9ufHxyLHRoaXMuaW5qZWN0aW9ucz1mdCh1LmluamVjdCxpKSx0aGlzLnNsb3RzPWZ1bmN0aW9uKCl7cmV0dXJuIGMuJHNsb3RzfHx2dChlLnNjb3BlZFNsb3RzLGMuJHNsb3RzPWR0KG4saSkpLGMuJHNsb3RzfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcInNjb3BlZFNsb3RzXCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHZ0KGUuc2NvcGVkU2xvdHMsdGhpcy5zbG90cygpKX19KSxsJiYodGhpcy4kb3B0aW9ucz11LHRoaXMuJHNsb3RzPXRoaXMuc2xvdHMoKSx0aGlzLiRzY29wZWRTbG90cz12dChlLnNjb3BlZFNsb3RzLHRoaXMuJHNsb3RzKSksdS5fc2NvcGVJZD90aGlzLl9jPWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBvPUJ0KHMsZSx0LG4scixmKTtyZXR1cm4gbyYmIUFycmF5LmlzQXJyYXkobykmJihvLmZuU2NvcGVJZD11Ll9zY29wZUlkLG8uZm5Db250ZXh0PWkpLG99OnRoaXMuX2M9ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIEJ0KHMsZSx0LG4scixmKX19ZnVuY3Rpb24gSXQoZSx0LG4scixpKXt2YXIgbz1fZShlKTtyZXR1cm4gby5mbkNvbnRleHQ9bixvLmZuT3B0aW9ucz1yLHQuc2xvdCYmKChvLmRhdGF8fChvLmRhdGE9e30pKS5zbG90PXQuc2xvdCksb31mdW5jdGlvbiBOdChlLHQpe2Zvcih2YXIgbiBpbiB0KWVbeChuKV09dFtuXX1qdChMdC5wcm90b3R5cGUpO3ZhciBNdD17aW5pdDpmdW5jdGlvbihlLHQpe2lmKGUuY29tcG9uZW50SW5zdGFuY2UmJiFlLmNvbXBvbmVudEluc3RhbmNlLl9pc0Rlc3Ryb3llZCYmZS5kYXRhLmtlZXBBbGl2ZSl7dmFyIG49ZTtNdC5wcmVwYXRjaChuLG4pfWVsc2UoZS5jb21wb25lbnRJbnN0YW5jZT1mdW5jdGlvbihlLHQpe3ZhciBuPXtfaXNDb21wb25lbnQ6ITAsX3BhcmVudFZub2RlOmUscGFyZW50Olp0fSxyPWUuZGF0YS5pbmxpbmVUZW1wbGF0ZTtyZXR1cm4gbyhyKSYmKG4ucmVuZGVyPXIucmVuZGVyLG4uc3RhdGljUmVuZGVyRm5zPXIuc3RhdGljUmVuZGVyRm5zKSxuZXcgZS5jb21wb25lbnRPcHRpb25zLkN0b3Iobil9KGUpKS4kbW91bnQodD9lLmVsbTp2b2lkIDAsdCl9LHByZXBhdGNoOmZ1bmN0aW9uKGUsdCl7dmFyIG49dC5jb21wb25lbnRPcHRpb25zOyFmdW5jdGlvbihlLHQsbixpLG8pe3ZhciBhPWkuZGF0YS5zY29wZWRTbG90cyxzPWUuJHNjb3BlZFNsb3RzLGM9ISEoYSYmIWEuJHN0YWJsZXx8cyE9PXImJiFzLiRzdGFibGV8fGEmJmUuJHNjb3BlZFNsb3RzLiRrZXkhPT1hLiRrZXkpLHU9ISEob3x8ZS4kb3B0aW9ucy5fcmVuZGVyQ2hpbGRyZW58fGMpO2lmKGUuJG9wdGlvbnMuX3BhcmVudFZub2RlPWksZS4kdm5vZGU9aSxlLl92bm9kZSYmKGUuX3Zub2RlLnBhcmVudD1pKSxlLiRvcHRpb25zLl9yZW5kZXJDaGlsZHJlbj1vLGUuJGF0dHJzPWkuZGF0YS5hdHRyc3x8cixlLiRsaXN0ZW5lcnM9bnx8cix0JiZlLiRvcHRpb25zLnByb3BzKXtDZSghMSk7Zm9yKHZhciBsPWUuX3Byb3BzLGY9ZS4kb3B0aW9ucy5fcHJvcEtleXN8fFtdLGQ9MDtkPGYubGVuZ3RoO2QrKyl7dmFyIHA9ZltkXSx2PWUuJG9wdGlvbnMucHJvcHM7bFtwXT1QZShwLHYsdCxlKX1DZSghMCksZS4kb3B0aW9ucy5wcm9wc0RhdGE9dH1uPW58fHI7dmFyIGg9ZS4kb3B0aW9ucy5fcGFyZW50TGlzdGVuZXJzO2UuJG9wdGlvbnMuX3BhcmVudExpc3RlbmVycz1uLFh0KGUsbixoKSx1JiYoZS4kc2xvdHM9ZHQobyxpLmNvbnRleHQpLGUuJGZvcmNlVXBkYXRlKCkpfSh0LmNvbXBvbmVudEluc3RhbmNlPWUuY29tcG9uZW50SW5zdGFuY2Usbi5wcm9wc0RhdGEsbi5saXN0ZW5lcnMsdCxuLmNoaWxkcmVuKX0saW5zZXJ0OmZ1bmN0aW9uKGUpe3ZhciB0LG49ZS5jb250ZXh0LHI9ZS5jb21wb25lbnRJbnN0YW5jZTtyLl9pc01vdW50ZWR8fChyLl9pc01vdW50ZWQ9ITAsdG4ocixcIm1vdW50ZWRcIikpLGUuZGF0YS5rZWVwQWxpdmUmJihuLl9pc01vdW50ZWQ/KCh0PXIpLl9pbmFjdGl2ZT0hMSxybi5wdXNoKHQpKTplbihyLCEwKSl9LGRlc3Ryb3k6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb21wb25lbnRJbnN0YW5jZTt0Ll9pc0Rlc3Ryb3llZHx8KGUuZGF0YS5rZWVwQWxpdmU/ZnVuY3Rpb24gZSh0LG4pe2lmKCEobiYmKHQuX2RpcmVjdEluYWN0aXZlPSEwLFF0KHQpKXx8dC5faW5hY3RpdmUpKXt0Ll9pbmFjdGl2ZT0hMDtmb3IodmFyIHI9MDtyPHQuJGNoaWxkcmVuLmxlbmd0aDtyKyspZSh0LiRjaGlsZHJlbltyXSk7dG4odCxcImRlYWN0aXZhdGVkXCIpfX0odCwhMCk6dC4kZGVzdHJveSgpKX19LER0PU9iamVjdC5rZXlzKE10KTtmdW5jdGlvbiBGdChlLHQsbixzLHUpe2lmKCFpKGUpKXt2YXIgbD1uLiRvcHRpb25zLl9iYXNlO2lmKGMoZSkmJihlPWwuZXh0ZW5kKGUpKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBlKXt2YXIgZjtpZihpKGUuY2lkKSYmdm9pZCAwPT09KGU9ZnVuY3Rpb24oZSx0KXtpZihhKGUuZXJyb3IpJiZvKGUuZXJyb3JDb21wKSlyZXR1cm4gZS5lcnJvckNvbXA7aWYobyhlLnJlc29sdmVkKSlyZXR1cm4gZS5yZXNvbHZlZDt2YXIgbj1WdDtpZihuJiZvKGUub3duZXJzKSYmLTE9PT1lLm93bmVycy5pbmRleE9mKG4pJiZlLm93bmVycy5wdXNoKG4pLGEoZS5sb2FkaW5nKSYmbyhlLmxvYWRpbmdDb21wKSlyZXR1cm4gZS5sb2FkaW5nQ29tcDtpZihuJiYhbyhlLm93bmVycykpe3ZhciByPWUub3duZXJzPVtuXSxzPSEwLHU9bnVsbCxsPW51bGw7bi4kb24oXCJob29rOmRlc3Ryb3llZFwiLGZ1bmN0aW9uKCl7cmV0dXJuIGcocixuKX0pO3ZhciBmPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wLG49ci5sZW5ndGg7dDxuO3QrKylyW3RdLiRmb3JjZVVwZGF0ZSgpO2UmJihyLmxlbmd0aD0wLG51bGwhPT11JiYoY2xlYXJUaW1lb3V0KHUpLHU9bnVsbCksbnVsbCE9PWwmJihjbGVhclRpbWVvdXQobCksbD1udWxsKSl9LHA9RChmdW5jdGlvbihuKXtlLnJlc29sdmVkPXp0KG4sdCkscz9yLmxlbmd0aD0wOmYoITApfSksdj1EKGZ1bmN0aW9uKHQpe28oZS5lcnJvckNvbXApJiYoZS5lcnJvcj0hMCxmKCEwKSl9KSxoPWUocCx2KTtyZXR1cm4gYyhoKSYmKGQoaCk/aShlLnJlc29sdmVkKSYmaC50aGVuKHAsdik6ZChoLmNvbXBvbmVudCkmJihoLmNvbXBvbmVudC50aGVuKHAsdiksbyhoLmVycm9yKSYmKGUuZXJyb3JDb21wPXp0KGguZXJyb3IsdCkpLG8oaC5sb2FkaW5nKSYmKGUubG9hZGluZ0NvbXA9enQoaC5sb2FkaW5nLHQpLDA9PT1oLmRlbGF5P2UubG9hZGluZz0hMDp1PXNldFRpbWVvdXQoZnVuY3Rpb24oKXt1PW51bGwsaShlLnJlc29sdmVkKSYmaShlLmVycm9yKSYmKGUubG9hZGluZz0hMCxmKCExKSl9LGguZGVsYXl8fDIwMCkpLG8oaC50aW1lb3V0KSYmKGw9c2V0VGltZW91dChmdW5jdGlvbigpe2w9bnVsbCxpKGUucmVzb2x2ZWQpJiZ2KG51bGwpfSxoLnRpbWVvdXQpKSkpLHM9ITEsZS5sb2FkaW5nP2UubG9hZGluZ0NvbXA6ZS5yZXNvbHZlZH19KGY9ZSxsKSkpcmV0dXJuIGZ1bmN0aW9uKGUsdCxuLHIsaSl7dmFyIG89eWUoKTtyZXR1cm4gby5hc3luY0ZhY3Rvcnk9ZSxvLmFzeW5jTWV0YT17ZGF0YTp0LGNvbnRleHQ6bixjaGlsZHJlbjpyLHRhZzppfSxvfShmLHQsbixzLHUpO3Q9dHx8e30seG4oZSksbyh0Lm1vZGVsKSYmZnVuY3Rpb24oZSx0KXt2YXIgbj1lLm1vZGVsJiZlLm1vZGVsLnByb3B8fFwidmFsdWVcIixyPWUubW9kZWwmJmUubW9kZWwuZXZlbnR8fFwiaW5wdXRcIjsodC5hdHRyc3x8KHQuYXR0cnM9e30pKVtuXT10Lm1vZGVsLnZhbHVlO3ZhciBpPXQub258fCh0Lm9uPXt9KSxhPWlbcl0scz10Lm1vZGVsLmNhbGxiYWNrO28oYSk/KEFycmF5LmlzQXJyYXkoYSk/LTE9PT1hLmluZGV4T2Yocyk6YSE9PXMpJiYoaVtyXT1bc10uY29uY2F0KGEpKTppW3JdPXN9KGUub3B0aW9ucyx0KTt2YXIgcD1mdW5jdGlvbihlLHQsbil7dmFyIHI9dC5vcHRpb25zLnByb3BzO2lmKCFpKHIpKXt2YXIgYT17fSxzPWUuYXR0cnMsYz1lLnByb3BzO2lmKG8ocyl8fG8oYykpZm9yKHZhciB1IGluIHIpe3ZhciBsPUEodSk7Y3QoYSxjLHUsbCwhMCl8fGN0KGEscyx1LGwsITEpfXJldHVybiBhfX0odCxlKTtpZihhKGUub3B0aW9ucy5mdW5jdGlvbmFsKSlyZXR1cm4gZnVuY3Rpb24oZSx0LG4saSxhKXt2YXIgcz1lLm9wdGlvbnMsYz17fSx1PXMucHJvcHM7aWYobyh1KSlmb3IodmFyIGwgaW4gdSljW2xdPVBlKGwsdSx0fHxyKTtlbHNlIG8obi5hdHRycykmJk50KGMsbi5hdHRycyksbyhuLnByb3BzKSYmTnQoYyxuLnByb3BzKTt2YXIgZj1uZXcgTHQobixjLGEsaSxlKSxkPXMucmVuZGVyLmNhbGwobnVsbCxmLl9jLGYpO2lmKGQgaW5zdGFuY2VvZiBoZSlyZXR1cm4gSXQoZCxuLGYucGFyZW50LHMpO2lmKEFycmF5LmlzQXJyYXkoZCkpe2Zvcih2YXIgcD11dChkKXx8W10sdj1uZXcgQXJyYXkocC5sZW5ndGgpLGg9MDtoPHAubGVuZ3RoO2grKyl2W2hdPUl0KHBbaF0sbixmLnBhcmVudCxzKTtyZXR1cm4gdn19KGUscCx0LG4scyk7dmFyIHY9dC5vbjtpZih0Lm9uPXQubmF0aXZlT24sYShlLm9wdGlvbnMuYWJzdHJhY3QpKXt2YXIgaD10LnNsb3Q7dD17fSxoJiYodC5zbG90PWgpfSFmdW5jdGlvbihlKXtmb3IodmFyIHQ9ZS5ob29rfHwoZS5ob29rPXt9KSxuPTA7bjxEdC5sZW5ndGg7bisrKXt2YXIgcj1EdFtuXSxpPXRbcl0sbz1NdFtyXTtpPT09b3x8aSYmaS5fbWVyZ2VkfHwodFtyXT1pP1B0KG8saSk6byl9fSh0KTt2YXIgbT1lLm9wdGlvbnMubmFtZXx8dTtyZXR1cm4gbmV3IGhlKFwidnVlLWNvbXBvbmVudC1cIitlLmNpZCsobT9cIi1cIittOlwiXCIpLHQsdm9pZCAwLHZvaWQgMCx2b2lkIDAsbix7Q3RvcjplLHByb3BzRGF0YTpwLGxpc3RlbmVyczp2LHRhZzp1LGNoaWxkcmVuOnN9LGYpfX19ZnVuY3Rpb24gUHQoZSx0KXt2YXIgbj1mdW5jdGlvbihuLHIpe2UobixyKSx0KG4scil9O3JldHVybiBuLl9tZXJnZWQ9ITAsbn12YXIgUnQ9MSxVdD0yO2Z1bmN0aW9uIEJ0KGUsdCxuLHIsdSxsKXtyZXR1cm4oQXJyYXkuaXNBcnJheShuKXx8cyhuKSkmJih1PXIscj1uLG49dm9pZCAwKSxhKGwpJiYodT1VdCksZnVuY3Rpb24oZSx0LG4scixzKXtpZihvKG4pJiZvKG4uX19vYl9fKSlyZXR1cm4geWUoKTtpZihvKG4pJiZvKG4uaXMpJiYodD1uLmlzKSwhdClyZXR1cm4geWUoKTt2YXIgdSxsLGY7KEFycmF5LmlzQXJyYXkocikmJlwiZnVuY3Rpb25cIj09dHlwZW9mIHJbMF0mJigobj1ufHx7fSkuc2NvcGVkU2xvdHM9e2RlZmF1bHQ6clswXX0sci5sZW5ndGg9MCkscz09PVV0P3I9dXQocik6cz09PVJ0JiYocj1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MDt0PGUubGVuZ3RoO3QrKylpZihBcnJheS5pc0FycmF5KGVbdF0pKXJldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLGUpO3JldHVybiBlfShyKSksXCJzdHJpbmdcIj09dHlwZW9mIHQpPyhsPWUuJHZub2RlJiZlLiR2bm9kZS5uc3x8VS5nZXRUYWdOYW1lc3BhY2UodCksdT1VLmlzUmVzZXJ2ZWRUYWcodCk/bmV3IGhlKFUucGFyc2VQbGF0Zm9ybVRhZ05hbWUodCksbixyLHZvaWQgMCx2b2lkIDAsZSk6biYmbi5wcmV8fCFvKGY9RmUoZS4kb3B0aW9ucyxcImNvbXBvbmVudHNcIix0KSk/bmV3IGhlKHQsbixyLHZvaWQgMCx2b2lkIDAsZSk6RnQoZixuLGUscix0KSk6dT1GdCh0LG4sZSxyKTtyZXR1cm4gQXJyYXkuaXNBcnJheSh1KT91Om8odSk/KG8obCkmJmZ1bmN0aW9uIGUodCxuLHIpe2lmKHQubnM9bixcImZvcmVpZ25PYmplY3RcIj09PXQudGFnJiYobj12b2lkIDAscj0hMCksbyh0LmNoaWxkcmVuKSlmb3IodmFyIHM9MCxjPXQuY2hpbGRyZW4ubGVuZ3RoO3M8YztzKyspe3ZhciB1PXQuY2hpbGRyZW5bc107byh1LnRhZykmJihpKHUubnMpfHxhKHIpJiZcInN2Z1wiIT09dS50YWcpJiZlKHUsbixyKX19KHUsbCksbyhuKSYmZnVuY3Rpb24oZSl7YyhlLnN0eWxlKSYmcnQoZS5zdHlsZSksYyhlLmNsYXNzKSYmcnQoZS5jbGFzcyl9KG4pLHUpOnllKCl9KGUsdCxuLHIsdSl9dmFyIEh0LFZ0PW51bGw7ZnVuY3Rpb24genQoZSx0KXtyZXR1cm4oZS5fX2VzTW9kdWxlfHxjZSYmXCJNb2R1bGVcIj09PWVbU3ltYm9sLnRvU3RyaW5nVGFnXSkmJihlPWUuZGVmYXVsdCksYyhlKT90LmV4dGVuZChlKTplfWZ1bmN0aW9uIEp0KGUpe3JldHVybiBlLmlzQ29tbWVudCYmZS5hc3luY0ZhY3Rvcnl9ZnVuY3Rpb24gS3QoZSl7aWYoQXJyYXkuaXNBcnJheShlKSlmb3IodmFyIHQ9MDt0PGUubGVuZ3RoO3QrKyl7dmFyIG49ZVt0XTtpZihvKG4pJiYobyhuLmNvbXBvbmVudE9wdGlvbnMpfHxKdChuKSkpcmV0dXJuIG59fWZ1bmN0aW9uIHF0KGUsdCl7SHQuJG9uKGUsdCl9ZnVuY3Rpb24gV3QoZSx0KXtIdC4kb2ZmKGUsdCl9ZnVuY3Rpb24gR3QoZSx0KXt2YXIgbj1IdDtyZXR1cm4gZnVuY3Rpb24gcigpe251bGwhPT10LmFwcGx5KG51bGwsYXJndW1lbnRzKSYmbi4kb2ZmKGUscil9fWZ1bmN0aW9uIFh0KGUsdCxuKXtIdD1lLGF0KHQsbnx8e30scXQsV3QsR3QsZSksSHQ9dm9pZCAwfXZhciBadD1udWxsO2Z1bmN0aW9uIFl0KGUpe3ZhciB0PVp0O3JldHVybiBadD1lLGZ1bmN0aW9uKCl7WnQ9dH19ZnVuY3Rpb24gUXQoZSl7Zm9yKDtlJiYoZT1lLiRwYXJlbnQpOylpZihlLl9pbmFjdGl2ZSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBlbihlLHQpe2lmKHQpe2lmKGUuX2RpcmVjdEluYWN0aXZlPSExLFF0KGUpKXJldHVybn1lbHNlIGlmKGUuX2RpcmVjdEluYWN0aXZlKXJldHVybjtpZihlLl9pbmFjdGl2ZXx8bnVsbD09PWUuX2luYWN0aXZlKXtlLl9pbmFjdGl2ZT0hMTtmb3IodmFyIG49MDtuPGUuJGNoaWxkcmVuLmxlbmd0aDtuKyspZW4oZS4kY2hpbGRyZW5bbl0pO3RuKGUsXCJhY3RpdmF0ZWRcIil9fWZ1bmN0aW9uIHRuKGUsdCl7cGUoKTt2YXIgbj1lLiRvcHRpb25zW3RdLHI9dCtcIiBob29rXCI7aWYobilmb3IodmFyIGk9MCxvPW4ubGVuZ3RoO2k8bztpKyspVmUobltpXSxlLG51bGwsZSxyKTtlLl9oYXNIb29rRXZlbnQmJmUuJGVtaXQoXCJob29rOlwiK3QpLHZlKCl9dmFyIG5uPVtdLHJuPVtdLG9uPXt9LGFuPSExLHNuPSExLGNuPTAsdW49MCxsbj1EYXRlLm5vdztpZihLJiYhWCl7dmFyIGZuPXdpbmRvdy5wZXJmb3JtYW5jZTtmbiYmXCJmdW5jdGlvblwiPT10eXBlb2YgZm4ubm93JiZsbigpPmRvY3VtZW50LmNyZWF0ZUV2ZW50KFwiRXZlbnRcIikudGltZVN0YW1wJiYobG49ZnVuY3Rpb24oKXtyZXR1cm4gZm4ubm93KCl9KX1mdW5jdGlvbiBkbigpe3ZhciBlLHQ7Zm9yKHVuPWxuKCksc249ITAsbm4uc29ydChmdW5jdGlvbihlLHQpe3JldHVybiBlLmlkLXQuaWR9KSxjbj0wO2NuPG5uLmxlbmd0aDtjbisrKShlPW5uW2NuXSkuYmVmb3JlJiZlLmJlZm9yZSgpLHQ9ZS5pZCxvblt0XT1udWxsLGUucnVuKCk7dmFyIG49cm4uc2xpY2UoKSxyPW5uLnNsaWNlKCk7Y249bm4ubGVuZ3RoPXJuLmxlbmd0aD0wLG9uPXt9LGFuPXNuPSExLGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wO3Q8ZS5sZW5ndGg7dCsrKWVbdF0uX2luYWN0aXZlPSEwLGVuKGVbdF0sITApfShuKSxmdW5jdGlvbihlKXtmb3IodmFyIHQ9ZS5sZW5ndGg7dC0tOyl7dmFyIG49ZVt0XSxyPW4udm07ci5fd2F0Y2hlcj09PW4mJnIuX2lzTW91bnRlZCYmIXIuX2lzRGVzdHJveWVkJiZ0bihyLFwidXBkYXRlZFwiKX19KHIpLG9lJiZVLmRldnRvb2xzJiZvZS5lbWl0KFwiZmx1c2hcIil9dmFyIHBuPTAsdm49ZnVuY3Rpb24oZSx0LG4scixpKXt0aGlzLnZtPWUsaSYmKGUuX3dhdGNoZXI9dGhpcyksZS5fd2F0Y2hlcnMucHVzaCh0aGlzKSxyPyh0aGlzLmRlZXA9ISFyLmRlZXAsdGhpcy51c2VyPSEhci51c2VyLHRoaXMubGF6eT0hIXIubGF6eSx0aGlzLnN5bmM9ISFyLnN5bmMsdGhpcy5iZWZvcmU9ci5iZWZvcmUpOnRoaXMuZGVlcD10aGlzLnVzZXI9dGhpcy5sYXp5PXRoaXMuc3luYz0hMSx0aGlzLmNiPW4sdGhpcy5pZD0rK3BuLHRoaXMuYWN0aXZlPSEwLHRoaXMuZGlydHk9dGhpcy5sYXp5LHRoaXMuZGVwcz1bXSx0aGlzLm5ld0RlcHM9W10sdGhpcy5kZXBJZHM9bmV3IHNlLHRoaXMubmV3RGVwSWRzPW5ldyBzZSx0aGlzLmV4cHJlc3Npb249XCJcIixcImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3RoaXMuZ2V0dGVyPXQ6KHRoaXMuZ2V0dGVyPWZ1bmN0aW9uKGUpe2lmKCF6LnRlc3QoZSkpe3ZhciB0PWUuc3BsaXQoXCIuXCIpO3JldHVybiBmdW5jdGlvbihlKXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7aWYoIWUpcmV0dXJuO2U9ZVt0W25dXX1yZXR1cm4gZX19fSh0KSx0aGlzLmdldHRlcnx8KHRoaXMuZ2V0dGVyPWopKSx0aGlzLnZhbHVlPXRoaXMubGF6eT92b2lkIDA6dGhpcy5nZXQoKX07dm4ucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe3ZhciBlO3BlKHRoaXMpO3ZhciB0PXRoaXMudm07dHJ5e2U9dGhpcy5nZXR0ZXIuY2FsbCh0LHQpfWNhdGNoKGUpe2lmKCF0aGlzLnVzZXIpdGhyb3cgZTtIZShlLHQsJ2dldHRlciBmb3Igd2F0Y2hlciBcIicrdGhpcy5leHByZXNzaW9uKydcIicpfWZpbmFsbHl7dGhpcy5kZWVwJiZydChlKSx2ZSgpLHRoaXMuY2xlYW51cERlcHMoKX1yZXR1cm4gZX0sdm4ucHJvdG90eXBlLmFkZERlcD1mdW5jdGlvbihlKXt2YXIgdD1lLmlkO3RoaXMubmV3RGVwSWRzLmhhcyh0KXx8KHRoaXMubmV3RGVwSWRzLmFkZCh0KSx0aGlzLm5ld0RlcHMucHVzaChlKSx0aGlzLmRlcElkcy5oYXModCl8fGUuYWRkU3ViKHRoaXMpKX0sdm4ucHJvdG90eXBlLmNsZWFudXBEZXBzPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPXRoaXMuZGVwcy5sZW5ndGg7ZS0tOyl7dmFyIHQ9dGhpcy5kZXBzW2VdO3RoaXMubmV3RGVwSWRzLmhhcyh0LmlkKXx8dC5yZW1vdmVTdWIodGhpcyl9dmFyIG49dGhpcy5kZXBJZHM7dGhpcy5kZXBJZHM9dGhpcy5uZXdEZXBJZHMsdGhpcy5uZXdEZXBJZHM9bix0aGlzLm5ld0RlcElkcy5jbGVhcigpLG49dGhpcy5kZXBzLHRoaXMuZGVwcz10aGlzLm5ld0RlcHMsdGhpcy5uZXdEZXBzPW4sdGhpcy5uZXdEZXBzLmxlbmd0aD0wfSx2bi5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKCl7dGhpcy5sYXp5P3RoaXMuZGlydHk9ITA6dGhpcy5zeW5jP3RoaXMucnVuKCk6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5pZDtpZihudWxsPT1vblt0XSl7aWYob25bdF09ITAsc24pe2Zvcih2YXIgbj1ubi5sZW5ndGgtMTtuPmNuJiZubltuXS5pZD5lLmlkOyluLS07bm4uc3BsaWNlKG4rMSwwLGUpfWVsc2Ugbm4ucHVzaChlKTthbnx8KGFuPSEwLHR0KGRuKSl9fSh0aGlzKX0sdm4ucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe2lmKHRoaXMuYWN0aXZlKXt2YXIgZT10aGlzLmdldCgpO2lmKGUhPT10aGlzLnZhbHVlfHxjKGUpfHx0aGlzLmRlZXApe3ZhciB0PXRoaXMudmFsdWU7aWYodGhpcy52YWx1ZT1lLHRoaXMudXNlcil0cnl7dGhpcy5jYi5jYWxsKHRoaXMudm0sZSx0KX1jYXRjaChlKXtIZShlLHRoaXMudm0sJ2NhbGxiYWNrIGZvciB3YXRjaGVyIFwiJyt0aGlzLmV4cHJlc3Npb24rJ1wiJyl9ZWxzZSB0aGlzLmNiLmNhbGwodGhpcy52bSxlLHQpfX19LHZuLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbigpe3RoaXMudmFsdWU9dGhpcy5nZXQoKSx0aGlzLmRpcnR5PSExfSx2bi5wcm90b3R5cGUuZGVwZW5kPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPXRoaXMuZGVwcy5sZW5ndGg7ZS0tOyl0aGlzLmRlcHNbZV0uZGVwZW5kKCl9LHZuLnByb3RvdHlwZS50ZWFyZG93bj1mdW5jdGlvbigpe2lmKHRoaXMuYWN0aXZlKXt0aGlzLnZtLl9pc0JlaW5nRGVzdHJveWVkfHxnKHRoaXMudm0uX3dhdGNoZXJzLHRoaXMpO2Zvcih2YXIgZT10aGlzLmRlcHMubGVuZ3RoO2UtLTspdGhpcy5kZXBzW2VdLnJlbW92ZVN1Yih0aGlzKTt0aGlzLmFjdGl2ZT0hMX19O3ZhciBobj17ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsZ2V0Omosc2V0Omp9O2Z1bmN0aW9uIG1uKGUsdCxuKXtobi5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1t0XVtuXX0saG4uc2V0PWZ1bmN0aW9uKGUpe3RoaXNbdF1bbl09ZX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbixobil9dmFyIHluPXtsYXp5OiEwfTtmdW5jdGlvbiBnbihlLHQsbil7dmFyIHI9IWllKCk7XCJmdW5jdGlvblwiPT10eXBlb2Ygbj8oaG4uZ2V0PXI/X24odCk6Ym4obiksaG4uc2V0PWopOihobi5nZXQ9bi5nZXQ/ciYmITEhPT1uLmNhY2hlP19uKHQpOmJuKG4uZ2V0KTpqLGhuLnNldD1uLnNldHx8aiksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCxobil9ZnVuY3Rpb24gX24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fY29tcHV0ZWRXYXRjaGVycyYmdGhpcy5fY29tcHV0ZWRXYXRjaGVyc1tlXTtpZih0KXJldHVybiB0LmRpcnR5JiZ0LmV2YWx1YXRlKCksZmUudGFyZ2V0JiZ0LmRlcGVuZCgpLHQudmFsdWV9fWZ1bmN0aW9uIGJuKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlLmNhbGwodGhpcyx0aGlzKX19ZnVuY3Rpb24gd24oZSx0LG4scil7cmV0dXJuIGwobikmJihyPW4sbj1uLmhhbmRsZXIpLFwic3RyaW5nXCI9PXR5cGVvZiBuJiYobj1lW25dKSxlLiR3YXRjaCh0LG4scil9dmFyICRuPTA7ZnVuY3Rpb24geG4oZSl7dmFyIHQ9ZS5vcHRpb25zO2lmKGUuc3VwZXIpe3ZhciBuPXhuKGUuc3VwZXIpO2lmKG4hPT1lLnN1cGVyT3B0aW9ucyl7ZS5zdXBlck9wdGlvbnM9bjt2YXIgcj1mdW5jdGlvbihlKXt2YXIgdCxuPWUub3B0aW9ucyxyPWUuc2VhbGVkT3B0aW9ucztmb3IodmFyIGkgaW4gbiluW2ldIT09cltpXSYmKHR8fCh0PXt9KSx0W2ldPW5baV0pO3JldHVybiB0fShlKTtyJiZUKGUuZXh0ZW5kT3B0aW9ucyxyKSwodD1lLm9wdGlvbnM9RGUobixlLmV4dGVuZE9wdGlvbnMpKS5uYW1lJiYodC5jb21wb25lbnRzW3QubmFtZV09ZSl9fXJldHVybiB0fWZ1bmN0aW9uIENuKGUpe3RoaXMuX2luaXQoZSl9ZnVuY3Rpb24ga24oZSl7cmV0dXJuIGUmJihlLkN0b3Iub3B0aW9ucy5uYW1lfHxlLnRhZyl9ZnVuY3Rpb24gQW4oZSx0KXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9lLmluZGV4T2YodCk+LTE6XCJzdHJpbmdcIj09dHlwZW9mIGU/ZS5zcGxpdChcIixcIikuaW5kZXhPZih0KT4tMToobj1lLFwiW29iamVjdCBSZWdFeHBdXCI9PT11LmNhbGwobikmJmUudGVzdCh0KSk7dmFyIG59ZnVuY3Rpb24gT24oZSx0KXt2YXIgbj1lLmNhY2hlLHI9ZS5rZXlzLGk9ZS5fdm5vZGU7Zm9yKHZhciBvIGluIG4pe3ZhciBhPW5bb107aWYoYSl7dmFyIHM9a24oYS5jb21wb25lbnRPcHRpb25zKTtzJiYhdChzKSYmU24obixvLHIsaSl9fX1mdW5jdGlvbiBTbihlLHQsbixyKXt2YXIgaT1lW3RdOyFpfHxyJiZpLnRhZz09PXIudGFnfHxpLmNvbXBvbmVudEluc3RhbmNlLiRkZXN0cm95KCksZVt0XT1udWxsLGcobix0KX1Dbi5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpczt0Ll91aWQ9JG4rKyx0Ll9pc1Z1ZT0hMCxlJiZlLl9pc0NvbXBvbmVudD9mdW5jdGlvbihlLHQpe3ZhciBuPWUuJG9wdGlvbnM9T2JqZWN0LmNyZWF0ZShlLmNvbnN0cnVjdG9yLm9wdGlvbnMpLHI9dC5fcGFyZW50Vm5vZGU7bi5wYXJlbnQ9dC5wYXJlbnQsbi5fcGFyZW50Vm5vZGU9cjt2YXIgaT1yLmNvbXBvbmVudE9wdGlvbnM7bi5wcm9wc0RhdGE9aS5wcm9wc0RhdGEsbi5fcGFyZW50TGlzdGVuZXJzPWkubGlzdGVuZXJzLG4uX3JlbmRlckNoaWxkcmVuPWkuY2hpbGRyZW4sbi5fY29tcG9uZW50VGFnPWkudGFnLHQucmVuZGVyJiYobi5yZW5kZXI9dC5yZW5kZXIsbi5zdGF0aWNSZW5kZXJGbnM9dC5zdGF0aWNSZW5kZXJGbnMpfSh0LGUpOnQuJG9wdGlvbnM9RGUoeG4odC5jb25zdHJ1Y3RvciksZXx8e30sdCksdC5fcmVuZGVyUHJveHk9dCx0Ll9zZWxmPXQsZnVuY3Rpb24oZSl7dmFyIHQ9ZS4kb3B0aW9ucyxuPXQucGFyZW50O2lmKG4mJiF0LmFic3RyYWN0KXtmb3IoO24uJG9wdGlvbnMuYWJzdHJhY3QmJm4uJHBhcmVudDspbj1uLiRwYXJlbnQ7bi4kY2hpbGRyZW4ucHVzaChlKX1lLiRwYXJlbnQ9bixlLiRyb290PW4/bi4kcm9vdDplLGUuJGNoaWxkcmVuPVtdLGUuJHJlZnM9e30sZS5fd2F0Y2hlcj1udWxsLGUuX2luYWN0aXZlPW51bGwsZS5fZGlyZWN0SW5hY3RpdmU9ITEsZS5faXNNb3VudGVkPSExLGUuX2lzRGVzdHJveWVkPSExLGUuX2lzQmVpbmdEZXN0cm95ZWQ9ITF9KHQpLGZ1bmN0aW9uKGUpe2UuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpLGUuX2hhc0hvb2tFdmVudD0hMTt2YXIgdD1lLiRvcHRpb25zLl9wYXJlbnRMaXN0ZW5lcnM7dCYmWHQoZSx0KX0odCksZnVuY3Rpb24oZSl7ZS5fdm5vZGU9bnVsbCxlLl9zdGF0aWNUcmVlcz1udWxsO3ZhciB0PWUuJG9wdGlvbnMsbj1lLiR2bm9kZT10Ll9wYXJlbnRWbm9kZSxpPW4mJm4uY29udGV4dDtlLiRzbG90cz1kdCh0Ll9yZW5kZXJDaGlsZHJlbixpKSxlLiRzY29wZWRTbG90cz1yLGUuX2M9ZnVuY3Rpb24odCxuLHIsaSl7cmV0dXJuIEJ0KGUsdCxuLHIsaSwhMSl9LGUuJGNyZWF0ZUVsZW1lbnQ9ZnVuY3Rpb24odCxuLHIsaSl7cmV0dXJuIEJ0KGUsdCxuLHIsaSwhMCl9O3ZhciBvPW4mJm4uZGF0YTtPZShlLFwiJGF0dHJzXCIsbyYmby5hdHRyc3x8cixudWxsLCEwKSxPZShlLFwiJGxpc3RlbmVyc1wiLHQuX3BhcmVudExpc3RlbmVyc3x8cixudWxsLCEwKX0odCksdG4odCxcImJlZm9yZUNyZWF0ZVwiKSxmdW5jdGlvbihlKXt2YXIgdD1mdChlLiRvcHRpb25zLmluamVjdCxlKTt0JiYoQ2UoITEpLE9iamVjdC5rZXlzKHQpLmZvckVhY2goZnVuY3Rpb24obil7T2UoZSxuLHRbbl0pfSksQ2UoITApKX0odCksZnVuY3Rpb24oZSl7ZS5fd2F0Y2hlcnM9W107dmFyIHQ9ZS4kb3B0aW9uczt0LnByb3BzJiZmdW5jdGlvbihlLHQpe3ZhciBuPWUuJG9wdGlvbnMucHJvcHNEYXRhfHx7fSxyPWUuX3Byb3BzPXt9LGk9ZS4kb3B0aW9ucy5fcHJvcEtleXM9W107ZS4kcGFyZW50JiZDZSghMSk7dmFyIG89ZnVuY3Rpb24obyl7aS5wdXNoKG8pO3ZhciBhPVBlKG8sdCxuLGUpO09lKHIsbyxhKSxvIGluIGV8fG1uKGUsXCJfcHJvcHNcIixvKX07Zm9yKHZhciBhIGluIHQpbyhhKTtDZSghMCl9KGUsdC5wcm9wcyksdC5tZXRob2RzJiZmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlLiRvcHRpb25zLnByb3BzLHQpZVtuXT1cImZ1bmN0aW9uXCIhPXR5cGVvZiB0W25dP2o6Tyh0W25dLGUpfShlLHQubWV0aG9kcyksdC5kYXRhP2Z1bmN0aW9uKGUpe3ZhciB0PWUuJG9wdGlvbnMuZGF0YTtsKHQ9ZS5fZGF0YT1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P2Z1bmN0aW9uKGUsdCl7cGUoKTt0cnl7cmV0dXJuIGUuY2FsbCh0LHQpfWNhdGNoKGUpe3JldHVybiBIZShlLHQsXCJkYXRhKClcIikse319ZmluYWxseXt2ZSgpfX0odCxlKTp0fHx7fSl8fCh0PXt9KTtmb3IodmFyIG4scj1PYmplY3Qua2V5cyh0KSxpPWUuJG9wdGlvbnMucHJvcHMsbz0oZS4kb3B0aW9ucy5tZXRob2RzLHIubGVuZ3RoKTtvLS07KXt2YXIgYT1yW29dO2kmJmIoaSxhKXx8MzYhPT0obj0oYStcIlwiKS5jaGFyQ29kZUF0KDApKSYmOTUhPT1uJiZtbihlLFwiX2RhdGFcIixhKX1BZSh0LCEwKX0oZSk6QWUoZS5fZGF0YT17fSwhMCksdC5jb21wdXRlZCYmZnVuY3Rpb24oZSx0KXt2YXIgbj1lLl9jb21wdXRlZFdhdGNoZXJzPU9iamVjdC5jcmVhdGUobnVsbCkscj1pZSgpO2Zvcih2YXIgaSBpbiB0KXt2YXIgbz10W2ldLGE9XCJmdW5jdGlvblwiPT10eXBlb2Ygbz9vOm8uZ2V0O3J8fChuW2ldPW5ldyB2bihlLGF8fGosaix5bikpLGkgaW4gZXx8Z24oZSxpLG8pfX0oZSx0LmNvbXB1dGVkKSx0LndhdGNoJiZ0LndhdGNoIT09dGUmJmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIHQpe3ZhciByPXRbbl07aWYoQXJyYXkuaXNBcnJheShyKSlmb3IodmFyIGk9MDtpPHIubGVuZ3RoO2krKyl3bihlLG4scltpXSk7ZWxzZSB3bihlLG4scil9fShlLHQud2F0Y2gpfSh0KSxmdW5jdGlvbihlKXt2YXIgdD1lLiRvcHRpb25zLnByb3ZpZGU7dCYmKGUuX3Byb3ZpZGVkPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dC5jYWxsKGUpOnQpfSh0KSx0bih0LFwiY3JlYXRlZFwiKSx0LiRvcHRpb25zLmVsJiZ0LiRtb3VudCh0LiRvcHRpb25zLmVsKX0sZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLFwiJGRhdGFcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RhdGF9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLFwiJHByb3BzXCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcm9wc319KSxlLnByb3RvdHlwZS4kc2V0PVNlLGUucHJvdG90eXBlLiRkZWxldGU9VGUsZS5wcm90b3R5cGUuJHdhdGNoPWZ1bmN0aW9uKGUsdCxuKXtpZihsKHQpKXJldHVybiB3bih0aGlzLGUsdCxuKTsobj1ufHx7fSkudXNlcj0hMDt2YXIgcj1uZXcgdm4odGhpcyxlLHQsbik7aWYobi5pbW1lZGlhdGUpdHJ5e3QuY2FsbCh0aGlzLHIudmFsdWUpfWNhdGNoKGUpe0hlKGUsdGhpcywnY2FsbGJhY2sgZm9yIGltbWVkaWF0ZSB3YXRjaGVyIFwiJytyLmV4cHJlc3Npb24rJ1wiJyl9cmV0dXJuIGZ1bmN0aW9uKCl7ci50ZWFyZG93bigpfX19KENuKSxmdW5jdGlvbihlKXt2YXIgdD0vXmhvb2s6LztlLnByb3RvdHlwZS4kb249ZnVuY3Rpb24oZSxuKXt2YXIgcj10aGlzO2lmKEFycmF5LmlzQXJyYXkoZSkpZm9yKHZhciBpPTAsbz1lLmxlbmd0aDtpPG87aSsrKXIuJG9uKGVbaV0sbik7ZWxzZShyLl9ldmVudHNbZV18fChyLl9ldmVudHNbZV09W10pKS5wdXNoKG4pLHQudGVzdChlKSYmKHIuX2hhc0hvb2tFdmVudD0hMCk7cmV0dXJuIHJ9LGUucHJvdG90eXBlLiRvbmNlPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcztmdW5jdGlvbiByKCl7bi4kb2ZmKGUsciksdC5hcHBseShuLGFyZ3VtZW50cyl9cmV0dXJuIHIuZm49dCxuLiRvbihlLHIpLG59LGUucHJvdG90eXBlLiRvZmY9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzO2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBuLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKSxuO2lmKEFycmF5LmlzQXJyYXkoZSkpe2Zvcih2YXIgcj0wLGk9ZS5sZW5ndGg7cjxpO3IrKyluLiRvZmYoZVtyXSx0KTtyZXR1cm4gbn12YXIgbyxhPW4uX2V2ZW50c1tlXTtpZighYSlyZXR1cm4gbjtpZighdClyZXR1cm4gbi5fZXZlbnRzW2VdPW51bGwsbjtmb3IodmFyIHM9YS5sZW5ndGg7cy0tOylpZigobz1hW3NdKT09PXR8fG8uZm49PT10KXthLnNwbGljZShzLDEpO2JyZWFrfXJldHVybiBufSxlLnByb3RvdHlwZS4kZW1pdD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9ldmVudHNbZV07aWYodCl7dD10Lmxlbmd0aD4xP1ModCk6dDtmb3IodmFyIG49Uyhhcmd1bWVudHMsMSkscj0nZXZlbnQgaGFuZGxlciBmb3IgXCInK2UrJ1wiJyxpPTAsbz10Lmxlbmd0aDtpPG87aSsrKVZlKHRbaV0sdGhpcyxuLHRoaXMscil9cmV0dXJuIHRoaXN9fShDbiksZnVuY3Rpb24oZSl7ZS5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMscj1uLiRlbCxpPW4uX3Zub2RlLG89WXQobik7bi5fdm5vZGU9ZSxuLiRlbD1pP24uX19wYXRjaF9fKGksZSk6bi5fX3BhdGNoX18obi4kZWwsZSx0LCExKSxvKCksciYmKHIuX192dWVfXz1udWxsKSxuLiRlbCYmKG4uJGVsLl9fdnVlX189biksbi4kdm5vZGUmJm4uJHBhcmVudCYmbi4kdm5vZGU9PT1uLiRwYXJlbnQuX3Zub2RlJiYobi4kcGFyZW50LiRlbD1uLiRlbCl9LGUucHJvdG90eXBlLiRmb3JjZVVwZGF0ZT1mdW5jdGlvbigpe3RoaXMuX3dhdGNoZXImJnRoaXMuX3dhdGNoZXIudXBkYXRlKCl9LGUucHJvdG90eXBlLiRkZXN0cm95PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcztpZighZS5faXNCZWluZ0Rlc3Ryb3llZCl7dG4oZSxcImJlZm9yZURlc3Ryb3lcIiksZS5faXNCZWluZ0Rlc3Ryb3llZD0hMDt2YXIgdD1lLiRwYXJlbnQ7IXR8fHQuX2lzQmVpbmdEZXN0cm95ZWR8fGUuJG9wdGlvbnMuYWJzdHJhY3R8fGcodC4kY2hpbGRyZW4sZSksZS5fd2F0Y2hlciYmZS5fd2F0Y2hlci50ZWFyZG93bigpO2Zvcih2YXIgbj1lLl93YXRjaGVycy5sZW5ndGg7bi0tOyllLl93YXRjaGVyc1tuXS50ZWFyZG93bigpO2UuX2RhdGEuX19vYl9fJiZlLl9kYXRhLl9fb2JfXy52bUNvdW50LS0sZS5faXNEZXN0cm95ZWQ9ITAsZS5fX3BhdGNoX18oZS5fdm5vZGUsbnVsbCksdG4oZSxcImRlc3Ryb3llZFwiKSxlLiRvZmYoKSxlLiRlbCYmKGUuJGVsLl9fdnVlX189bnVsbCksZS4kdm5vZGUmJihlLiR2bm9kZS5wYXJlbnQ9bnVsbCl9fX0oQ24pLGZ1bmN0aW9uKGUpe2p0KGUucHJvdG90eXBlKSxlLnByb3RvdHlwZS4kbmV4dFRpY2s9ZnVuY3Rpb24oZSl7cmV0dXJuIHR0KGUsdGhpcyl9LGUucHJvdG90eXBlLl9yZW5kZXI9ZnVuY3Rpb24oKXt2YXIgZSx0PXRoaXMsbj10LiRvcHRpb25zLHI9bi5yZW5kZXIsaT1uLl9wYXJlbnRWbm9kZTtpJiYodC4kc2NvcGVkU2xvdHM9dnQoaS5kYXRhLnNjb3BlZFNsb3RzLHQuJHNsb3RzLHQuJHNjb3BlZFNsb3RzKSksdC4kdm5vZGU9aTt0cnl7VnQ9dCxlPXIuY2FsbCh0Ll9yZW5kZXJQcm94eSx0LiRjcmVhdGVFbGVtZW50KX1jYXRjaChuKXtIZShuLHQsXCJyZW5kZXJcIiksZT10Ll92bm9kZX1maW5hbGx5e1Z0PW51bGx9cmV0dXJuIEFycmF5LmlzQXJyYXkoZSkmJjE9PT1lLmxlbmd0aCYmKGU9ZVswXSksZSBpbnN0YW5jZW9mIGhlfHwoZT15ZSgpKSxlLnBhcmVudD1pLGV9fShDbik7dmFyIFRuPVtTdHJpbmcsUmVnRXhwLEFycmF5XSxFbj17S2VlcEFsaXZlOntuYW1lOlwia2VlcC1hbGl2ZVwiLGFic3RyYWN0OiEwLHByb3BzOntpbmNsdWRlOlRuLGV4Y2x1ZGU6VG4sbWF4OltTdHJpbmcsTnVtYmVyXX0sY3JlYXRlZDpmdW5jdGlvbigpe3RoaXMuY2FjaGU9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLmtleXM9W119LGRlc3Ryb3llZDpmdW5jdGlvbigpe2Zvcih2YXIgZSBpbiB0aGlzLmNhY2hlKVNuKHRoaXMuY2FjaGUsZSx0aGlzLmtleXMpfSxtb3VudGVkOmZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLiR3YXRjaChcImluY2x1ZGVcIixmdW5jdGlvbih0KXtPbihlLGZ1bmN0aW9uKGUpe3JldHVybiBBbih0LGUpfSl9KSx0aGlzLiR3YXRjaChcImV4Y2x1ZGVcIixmdW5jdGlvbih0KXtPbihlLGZ1bmN0aW9uKGUpe3JldHVybiFBbih0LGUpfSl9KX0scmVuZGVyOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy4kc2xvdHMuZGVmYXVsdCx0PUt0KGUpLG49dCYmdC5jb21wb25lbnRPcHRpb25zO2lmKG4pe3ZhciByPWtuKG4pLGk9dGhpcy5pbmNsdWRlLG89dGhpcy5leGNsdWRlO2lmKGkmJighcnx8IUFuKGkscikpfHxvJiZyJiZBbihvLHIpKXJldHVybiB0O3ZhciBhPXRoaXMuY2FjaGUscz10aGlzLmtleXMsYz1udWxsPT10LmtleT9uLkN0b3IuY2lkKyhuLnRhZz9cIjo6XCIrbi50YWc6XCJcIik6dC5rZXk7YVtjXT8odC5jb21wb25lbnRJbnN0YW5jZT1hW2NdLmNvbXBvbmVudEluc3RhbmNlLGcocyxjKSxzLnB1c2goYykpOihhW2NdPXQscy5wdXNoKGMpLHRoaXMubWF4JiZzLmxlbmd0aD5wYXJzZUludCh0aGlzLm1heCkmJlNuKGEsc1swXSxzLHRoaXMuX3Zub2RlKSksdC5kYXRhLmtlZXBBbGl2ZT0hMH1yZXR1cm4gdHx8ZSYmZVswXX19fTshZnVuY3Rpb24oZSl7dmFyIHQ9e2dldDpmdW5jdGlvbigpe3JldHVybiBVfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsXCJjb25maWdcIix0KSxlLnV0aWw9e3dhcm46dWUsZXh0ZW5kOlQsbWVyZ2VPcHRpb25zOkRlLGRlZmluZVJlYWN0aXZlOk9lfSxlLnNldD1TZSxlLmRlbGV0ZT1UZSxlLm5leHRUaWNrPXR0LGUub2JzZXJ2YWJsZT1mdW5jdGlvbihlKXtyZXR1cm4gQWUoZSksZX0sZS5vcHRpb25zPU9iamVjdC5jcmVhdGUobnVsbCksUC5mb3JFYWNoKGZ1bmN0aW9uKHQpe2Uub3B0aW9uc1t0K1wic1wiXT1PYmplY3QuY3JlYXRlKG51bGwpfSksZS5vcHRpb25zLl9iYXNlPWUsVChlLm9wdGlvbnMuY29tcG9uZW50cyxFbiksZnVuY3Rpb24oZSl7ZS51c2U9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5faW5zdGFsbGVkUGx1Z2luc3x8KHRoaXMuX2luc3RhbGxlZFBsdWdpbnM9W10pO2lmKHQuaW5kZXhPZihlKT4tMSlyZXR1cm4gdGhpczt2YXIgbj1TKGFyZ3VtZW50cywxKTtyZXR1cm4gbi51bnNoaWZ0KHRoaXMpLFwiZnVuY3Rpb25cIj09dHlwZW9mIGUuaW5zdGFsbD9lLmluc3RhbGwuYXBwbHkoZSxuKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBlJiZlLmFwcGx5KG51bGwsbiksdC5wdXNoKGUpLHRoaXN9fShlKSxmdW5jdGlvbihlKXtlLm1peGluPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLm9wdGlvbnM9RGUodGhpcy5vcHRpb25zLGUpLHRoaXN9fShlKSxmdW5jdGlvbihlKXtlLmNpZD0wO3ZhciB0PTE7ZS5leHRlbmQ9ZnVuY3Rpb24oZSl7ZT1lfHx7fTt2YXIgbj10aGlzLHI9bi5jaWQsaT1lLl9DdG9yfHwoZS5fQ3Rvcj17fSk7aWYoaVtyXSlyZXR1cm4gaVtyXTt2YXIgbz1lLm5hbWV8fG4ub3B0aW9ucy5uYW1lLGE9ZnVuY3Rpb24oZSl7dGhpcy5faW5pdChlKX07cmV0dXJuKGEucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobi5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1hLGEuY2lkPXQrKyxhLm9wdGlvbnM9RGUobi5vcHRpb25zLGUpLGEuc3VwZXI9bixhLm9wdGlvbnMucHJvcHMmJmZ1bmN0aW9uKGUpe3ZhciB0PWUub3B0aW9ucy5wcm9wcztmb3IodmFyIG4gaW4gdCltbihlLnByb3RvdHlwZSxcIl9wcm9wc1wiLG4pfShhKSxhLm9wdGlvbnMuY29tcHV0ZWQmJmZ1bmN0aW9uKGUpe3ZhciB0PWUub3B0aW9ucy5jb21wdXRlZDtmb3IodmFyIG4gaW4gdClnbihlLnByb3RvdHlwZSxuLHRbbl0pfShhKSxhLmV4dGVuZD1uLmV4dGVuZCxhLm1peGluPW4ubWl4aW4sYS51c2U9bi51c2UsUC5mb3JFYWNoKGZ1bmN0aW9uKGUpe2FbZV09bltlXX0pLG8mJihhLm9wdGlvbnMuY29tcG9uZW50c1tvXT1hKSxhLnN1cGVyT3B0aW9ucz1uLm9wdGlvbnMsYS5leHRlbmRPcHRpb25zPWUsYS5zZWFsZWRPcHRpb25zPVQoe30sYS5vcHRpb25zKSxpW3JdPWEsYX19KGUpLGZ1bmN0aW9uKGUpe1AuZm9yRWFjaChmdW5jdGlvbih0KXtlW3RdPWZ1bmN0aW9uKGUsbil7cmV0dXJuIG4/KFwiY29tcG9uZW50XCI9PT10JiZsKG4pJiYobi5uYW1lPW4ubmFtZXx8ZSxuPXRoaXMub3B0aW9ucy5fYmFzZS5leHRlbmQobikpLFwiZGlyZWN0aXZlXCI9PT10JiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBuJiYobj17YmluZDpuLHVwZGF0ZTpufSksdGhpcy5vcHRpb25zW3QrXCJzXCJdW2VdPW4sbik6dGhpcy5vcHRpb25zW3QrXCJzXCJdW2VdfX0pfShlKX0oQ24pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDbi5wcm90b3R5cGUsXCIkaXNTZXJ2ZXJcIix7Z2V0OmllfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KENuLnByb3RvdHlwZSxcIiRzc3JDb250ZXh0XCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLiR2bm9kZSYmdGhpcy4kdm5vZGUuc3NyQ29udGV4dH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQ24sXCJGdW5jdGlvbmFsUmVuZGVyQ29udGV4dFwiLHt2YWx1ZTpMdH0pLENuLnZlcnNpb249XCIyLjYuMTBcIjt2YXIgam49aChcInN0eWxlLGNsYXNzXCIpLExuPWgoXCJpbnB1dCx0ZXh0YXJlYSxvcHRpb24sc2VsZWN0LHByb2dyZXNzXCIpLEluPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm5cInZhbHVlXCI9PT1uJiZMbihlKSYmXCJidXR0b25cIiE9PXR8fFwic2VsZWN0ZWRcIj09PW4mJlwib3B0aW9uXCI9PT1lfHxcImNoZWNrZWRcIj09PW4mJlwiaW5wdXRcIj09PWV8fFwibXV0ZWRcIj09PW4mJlwidmlkZW9cIj09PWV9LE5uPWgoXCJjb250ZW50ZWRpdGFibGUsZHJhZ2dhYmxlLHNwZWxsY2hlY2tcIiksTW49aChcImV2ZW50cyxjYXJldCx0eXBpbmcscGxhaW50ZXh0LW9ubHlcIiksRG49ZnVuY3Rpb24oZSx0KXtyZXR1cm4gQm4odCl8fFwiZmFsc2VcIj09PXQ/XCJmYWxzZVwiOlwiY29udGVudGVkaXRhYmxlXCI9PT1lJiZNbih0KT90OlwidHJ1ZVwifSxGbj1oKFwiYWxsb3dmdWxsc2NyZWVuLGFzeW5jLGF1dG9mb2N1cyxhdXRvcGxheSxjaGVja2VkLGNvbXBhY3QsY29udHJvbHMsZGVjbGFyZSxkZWZhdWx0LGRlZmF1bHRjaGVja2VkLGRlZmF1bHRtdXRlZCxkZWZhdWx0c2VsZWN0ZWQsZGVmZXIsZGlzYWJsZWQsZW5hYmxlZCxmb3Jtbm92YWxpZGF0ZSxoaWRkZW4saW5kZXRlcm1pbmF0ZSxpbmVydCxpc21hcCxpdGVtc2NvcGUsbG9vcCxtdWx0aXBsZSxtdXRlZCxub2hyZWYsbm9yZXNpemUsbm9zaGFkZSxub3ZhbGlkYXRlLG5vd3JhcCxvcGVuLHBhdXNlb25leGl0LHJlYWRvbmx5LHJlcXVpcmVkLHJldmVyc2VkLHNjb3BlZCxzZWFtbGVzcyxzZWxlY3RlZCxzb3J0YWJsZSx0cmFuc2xhdGUsdHJ1ZXNwZWVkLHR5cGVtdXN0bWF0Y2gsdmlzaWJsZVwiKSxQbj1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIixSbj1mdW5jdGlvbihlKXtyZXR1cm5cIjpcIj09PWUuY2hhckF0KDUpJiZcInhsaW5rXCI9PT1lLnNsaWNlKDAsNSl9LFVuPWZ1bmN0aW9uKGUpe3JldHVybiBSbihlKT9lLnNsaWNlKDYsZS5sZW5ndGgpOlwiXCJ9LEJuPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lfHwhMT09PWV9O2Z1bmN0aW9uIEhuKGUsdCl7cmV0dXJue3N0YXRpY0NsYXNzOlZuKGUuc3RhdGljQ2xhc3MsdC5zdGF0aWNDbGFzcyksY2xhc3M6byhlLmNsYXNzKT9bZS5jbGFzcyx0LmNsYXNzXTp0LmNsYXNzfX1mdW5jdGlvbiBWbihlLHQpe3JldHVybiBlP3Q/ZStcIiBcIit0OmU6dHx8XCJcIn1mdW5jdGlvbiB6bihlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9mdW5jdGlvbihlKXtmb3IodmFyIHQsbj1cIlwiLHI9MCxpPWUubGVuZ3RoO3I8aTtyKyspbyh0PXpuKGVbcl0pKSYmXCJcIiE9PXQmJihuJiYobis9XCIgXCIpLG4rPXQpO3JldHVybiBufShlKTpjKGUpP2Z1bmN0aW9uKGUpe3ZhciB0PVwiXCI7Zm9yKHZhciBuIGluIGUpZVtuXSYmKHQmJih0Kz1cIiBcIiksdCs9bik7cmV0dXJuIHR9KGUpOlwic3RyaW5nXCI9PXR5cGVvZiBlP2U6XCJcIn12YXIgSm49e3N2ZzpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsbWF0aDpcImh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUxcIn0sS249aChcImh0bWwsYm9keSxiYXNlLGhlYWQsbGluayxtZXRhLHN0eWxlLHRpdGxlLGFkZHJlc3MsYXJ0aWNsZSxhc2lkZSxmb290ZXIsaGVhZGVyLGgxLGgyLGgzLGg0LGg1LGg2LGhncm91cCxuYXYsc2VjdGlvbixkaXYsZGQsZGwsZHQsZmlnY2FwdGlvbixmaWd1cmUscGljdHVyZSxocixpbWcsbGksbWFpbixvbCxwLHByZSx1bCxhLGIsYWJicixiZGksYmRvLGJyLGNpdGUsY29kZSxkYXRhLGRmbixlbSxpLGtiZCxtYXJrLHEscnAscnQscnRjLHJ1YnkscyxzYW1wLHNtYWxsLHNwYW4sc3Ryb25nLHN1YixzdXAsdGltZSx1LHZhcix3YnIsYXJlYSxhdWRpbyxtYXAsdHJhY2ssdmlkZW8sZW1iZWQsb2JqZWN0LHBhcmFtLHNvdXJjZSxjYW52YXMsc2NyaXB0LG5vc2NyaXB0LGRlbCxpbnMsY2FwdGlvbixjb2wsY29sZ3JvdXAsdGFibGUsdGhlYWQsdGJvZHksdGQsdGgsdHIsYnV0dG9uLGRhdGFsaXN0LGZpZWxkc2V0LGZvcm0saW5wdXQsbGFiZWwsbGVnZW5kLG1ldGVyLG9wdGdyb3VwLG9wdGlvbixvdXRwdXQscHJvZ3Jlc3Msc2VsZWN0LHRleHRhcmVhLGRldGFpbHMsZGlhbG9nLG1lbnUsbWVudWl0ZW0sc3VtbWFyeSxjb250ZW50LGVsZW1lbnQsc2hhZG93LHRlbXBsYXRlLGJsb2NrcXVvdGUsaWZyYW1lLHRmb290XCIpLHFuPWgoXCJzdmcsYW5pbWF0ZSxjaXJjbGUsY2xpcHBhdGgsY3Vyc29yLGRlZnMsZGVzYyxlbGxpcHNlLGZpbHRlcixmb250LWZhY2UsZm9yZWlnbk9iamVjdCxnLGdseXBoLGltYWdlLGxpbmUsbWFya2VyLG1hc2ssbWlzc2luZy1nbHlwaCxwYXRoLHBhdHRlcm4scG9seWdvbixwb2x5bGluZSxyZWN0LHN3aXRjaCxzeW1ib2wsdGV4dCx0ZXh0cGF0aCx0c3Bhbix1c2Usdmlld1wiLCEwKSxXbj1mdW5jdGlvbihlKXtyZXR1cm4gS24oZSl8fHFuKGUpfTtmdW5jdGlvbiBHbihlKXtyZXR1cm4gcW4oZSk/XCJzdmdcIjpcIm1hdGhcIj09PWU/XCJtYXRoXCI6dm9pZCAwfXZhciBYbj1PYmplY3QuY3JlYXRlKG51bGwpLFpuPWgoXCJ0ZXh0LG51bWJlcixwYXNzd29yZCxzZWFyY2gsZW1haWwsdGVsLHVybFwiKTtmdW5jdGlvbiBZbihlKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgZT9kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGUpfHxkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpOmV9dmFyIFFuPU9iamVjdC5mcmVlemUoe2NyZWF0ZUVsZW1lbnQ6ZnVuY3Rpb24oZSx0KXt2YXIgbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KGUpO3JldHVyblwic2VsZWN0XCIhPT1lP246KHQuZGF0YSYmdC5kYXRhLmF0dHJzJiZ2b2lkIDAhPT10LmRhdGEuYXR0cnMubXVsdGlwbGUmJm4uc2V0QXR0cmlidXRlKFwibXVsdGlwbGVcIixcIm11bHRpcGxlXCIpLG4pfSxjcmVhdGVFbGVtZW50TlM6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKEpuW2VdLHQpfSxjcmVhdGVUZXh0Tm9kZTpmdW5jdGlvbihlKXtyZXR1cm4gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZSl9LGNyZWF0ZUNvbW1lbnQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGRvY3VtZW50LmNyZWF0ZUNvbW1lbnQoZSl9LGluc2VydEJlZm9yZTpmdW5jdGlvbihlLHQsbil7ZS5pbnNlcnRCZWZvcmUodCxuKX0scmVtb3ZlQ2hpbGQ6ZnVuY3Rpb24oZSx0KXtlLnJlbW92ZUNoaWxkKHQpfSxhcHBlbmRDaGlsZDpmdW5jdGlvbihlLHQpe2UuYXBwZW5kQ2hpbGQodCl9LHBhcmVudE5vZGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucGFyZW50Tm9kZX0sbmV4dFNpYmxpbmc6ZnVuY3Rpb24oZSl7cmV0dXJuIGUubmV4dFNpYmxpbmd9LHRhZ05hbWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGUudGFnTmFtZX0sc2V0VGV4dENvbnRlbnQ6ZnVuY3Rpb24oZSx0KXtlLnRleHRDb250ZW50PXR9LHNldFN0eWxlU2NvcGU6ZnVuY3Rpb24oZSx0KXtlLnNldEF0dHJpYnV0ZSh0LFwiXCIpfX0pLGVyPXtjcmVhdGU6ZnVuY3Rpb24oZSx0KXt0cih0KX0sdXBkYXRlOmZ1bmN0aW9uKGUsdCl7ZS5kYXRhLnJlZiE9PXQuZGF0YS5yZWYmJih0cihlLCEwKSx0cih0KSl9LGRlc3Ryb3k6ZnVuY3Rpb24oZSl7dHIoZSwhMCl9fTtmdW5jdGlvbiB0cihlLHQpe3ZhciBuPWUuZGF0YS5yZWY7aWYobyhuKSl7dmFyIHI9ZS5jb250ZXh0LGk9ZS5jb21wb25lbnRJbnN0YW5jZXx8ZS5lbG0sYT1yLiRyZWZzO3Q/QXJyYXkuaXNBcnJheShhW25dKT9nKGFbbl0saSk6YVtuXT09PWkmJihhW25dPXZvaWQgMCk6ZS5kYXRhLnJlZkluRm9yP0FycmF5LmlzQXJyYXkoYVtuXSk/YVtuXS5pbmRleE9mKGkpPDAmJmFbbl0ucHVzaChpKTphW25dPVtpXTphW25dPWl9fXZhciBucj1uZXcgaGUoXCJcIix7fSxbXSkscnI9W1wiY3JlYXRlXCIsXCJhY3RpdmF0ZVwiLFwidXBkYXRlXCIsXCJyZW1vdmVcIixcImRlc3Ryb3lcIl07ZnVuY3Rpb24gaXIoZSx0KXtyZXR1cm4gZS5rZXk9PT10LmtleSYmKGUudGFnPT09dC50YWcmJmUuaXNDb21tZW50PT09dC5pc0NvbW1lbnQmJm8oZS5kYXRhKT09PW8odC5kYXRhKSYmZnVuY3Rpb24oZSx0KXtpZihcImlucHV0XCIhPT1lLnRhZylyZXR1cm4hMDt2YXIgbixyPW8obj1lLmRhdGEpJiZvKG49bi5hdHRycykmJm4udHlwZSxpPW8obj10LmRhdGEpJiZvKG49bi5hdHRycykmJm4udHlwZTtyZXR1cm4gcj09PWl8fFpuKHIpJiZabihpKX0oZSx0KXx8YShlLmlzQXN5bmNQbGFjZWhvbGRlcikmJmUuYXN5bmNGYWN0b3J5PT09dC5hc3luY0ZhY3RvcnkmJmkodC5hc3luY0ZhY3RvcnkuZXJyb3IpKX1mdW5jdGlvbiBvcihlLHQsbil7dmFyIHIsaSxhPXt9O2ZvcihyPXQ7cjw9bjsrK3IpbyhpPWVbcl0ua2V5KSYmKGFbaV09cik7cmV0dXJuIGF9dmFyIGFyPXtjcmVhdGU6c3IsdXBkYXRlOnNyLGRlc3Ryb3k6ZnVuY3Rpb24oZSl7c3IoZSxucil9fTtmdW5jdGlvbiBzcihlLHQpeyhlLmRhdGEuZGlyZWN0aXZlc3x8dC5kYXRhLmRpcmVjdGl2ZXMpJiZmdW5jdGlvbihlLHQpe3ZhciBuLHIsaSxvPWU9PT1ucixhPXQ9PT1ucixzPXVyKGUuZGF0YS5kaXJlY3RpdmVzLGUuY29udGV4dCksYz11cih0LmRhdGEuZGlyZWN0aXZlcyx0LmNvbnRleHQpLHU9W10sbD1bXTtmb3IobiBpbiBjKXI9c1tuXSxpPWNbbl0scj8oaS5vbGRWYWx1ZT1yLnZhbHVlLGkub2xkQXJnPXIuYXJnLGZyKGksXCJ1cGRhdGVcIix0LGUpLGkuZGVmJiZpLmRlZi5jb21wb25lbnRVcGRhdGVkJiZsLnB1c2goaSkpOihmcihpLFwiYmluZFwiLHQsZSksaS5kZWYmJmkuZGVmLmluc2VydGVkJiZ1LnB1c2goaSkpO2lmKHUubGVuZ3RoKXt2YXIgZj1mdW5jdGlvbigpe2Zvcih2YXIgbj0wO248dS5sZW5ndGg7bisrKWZyKHVbbl0sXCJpbnNlcnRlZFwiLHQsZSl9O28/c3QodCxcImluc2VydFwiLGYpOmYoKX1pZihsLmxlbmd0aCYmc3QodCxcInBvc3RwYXRjaFwiLGZ1bmN0aW9uKCl7Zm9yKHZhciBuPTA7bjxsLmxlbmd0aDtuKyspZnIobFtuXSxcImNvbXBvbmVudFVwZGF0ZWRcIix0LGUpfSksIW8pZm9yKG4gaW4gcyljW25dfHxmcihzW25dLFwidW5iaW5kXCIsZSxlLGEpfShlLHQpfXZhciBjcj1PYmplY3QuY3JlYXRlKG51bGwpO2Z1bmN0aW9uIHVyKGUsdCl7dmFyIG4scixpPU9iamVjdC5jcmVhdGUobnVsbCk7aWYoIWUpcmV0dXJuIGk7Zm9yKG49MDtuPGUubGVuZ3RoO24rKykocj1lW25dKS5tb2RpZmllcnN8fChyLm1vZGlmaWVycz1jciksaVtscihyKV09cixyLmRlZj1GZSh0LiRvcHRpb25zLFwiZGlyZWN0aXZlc1wiLHIubmFtZSk7cmV0dXJuIGl9ZnVuY3Rpb24gbHIoZSl7cmV0dXJuIGUucmF3TmFtZXx8ZS5uYW1lK1wiLlwiK09iamVjdC5rZXlzKGUubW9kaWZpZXJzfHx7fSkuam9pbihcIi5cIil9ZnVuY3Rpb24gZnIoZSx0LG4scixpKXt2YXIgbz1lLmRlZiYmZS5kZWZbdF07aWYobyl0cnl7byhuLmVsbSxlLG4scixpKX1jYXRjaChyKXtIZShyLG4uY29udGV4dCxcImRpcmVjdGl2ZSBcIitlLm5hbWUrXCIgXCIrdCtcIiBob29rXCIpfX12YXIgZHI9W2VyLGFyXTtmdW5jdGlvbiBwcihlLHQpe3ZhciBuPXQuY29tcG9uZW50T3B0aW9ucztpZighKG8obikmJiExPT09bi5DdG9yLm9wdGlvbnMuaW5oZXJpdEF0dHJzfHxpKGUuZGF0YS5hdHRycykmJmkodC5kYXRhLmF0dHJzKSkpe3ZhciByLGEscz10LmVsbSxjPWUuZGF0YS5hdHRyc3x8e30sdT10LmRhdGEuYXR0cnN8fHt9O2ZvcihyIGluIG8odS5fX29iX18pJiYodT10LmRhdGEuYXR0cnM9VCh7fSx1KSksdSlhPXVbcl0sY1tyXSE9PWEmJnZyKHMscixhKTtmb3IociBpbihYfHxZKSYmdS52YWx1ZSE9PWMudmFsdWUmJnZyKHMsXCJ2YWx1ZVwiLHUudmFsdWUpLGMpaSh1W3JdKSYmKFJuKHIpP3MucmVtb3ZlQXR0cmlidXRlTlMoUG4sVW4ocikpOk5uKHIpfHxzLnJlbW92ZUF0dHJpYnV0ZShyKSl9fWZ1bmN0aW9uIHZyKGUsdCxuKXtlLnRhZ05hbWUuaW5kZXhPZihcIi1cIik+LTE/aHIoZSx0LG4pOkZuKHQpP0JuKG4pP2UucmVtb3ZlQXR0cmlidXRlKHQpOihuPVwiYWxsb3dmdWxsc2NyZWVuXCI9PT10JiZcIkVNQkVEXCI9PT1lLnRhZ05hbWU/XCJ0cnVlXCI6dCxlLnNldEF0dHJpYnV0ZSh0LG4pKTpObih0KT9lLnNldEF0dHJpYnV0ZSh0LERuKHQsbikpOlJuKHQpP0JuKG4pP2UucmVtb3ZlQXR0cmlidXRlTlMoUG4sVW4odCkpOmUuc2V0QXR0cmlidXRlTlMoUG4sdCxuKTpocihlLHQsbil9ZnVuY3Rpb24gaHIoZSx0LG4pe2lmKEJuKG4pKWUucmVtb3ZlQXR0cmlidXRlKHQpO2Vsc2V7aWYoWCYmIVomJlwiVEVYVEFSRUFcIj09PWUudGFnTmFtZSYmXCJwbGFjZWhvbGRlclwiPT09dCYmXCJcIiE9PW4mJiFlLl9faWVwaCl7dmFyIHI9ZnVuY3Rpb24odCl7dC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSxlLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJpbnB1dFwiLHIpfTtlLmFkZEV2ZW50TGlzdGVuZXIoXCJpbnB1dFwiLHIpLGUuX19pZXBoPSEwfWUuc2V0QXR0cmlidXRlKHQsbil9fXZhciBtcj17Y3JlYXRlOnByLHVwZGF0ZTpwcn07ZnVuY3Rpb24geXIoZSx0KXt2YXIgbj10LmVsbSxyPXQuZGF0YSxhPWUuZGF0YTtpZighKGkoci5zdGF0aWNDbGFzcykmJmkoci5jbGFzcykmJihpKGEpfHxpKGEuc3RhdGljQ2xhc3MpJiZpKGEuY2xhc3MpKSkpe3ZhciBzPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLmRhdGEsbj1lLHI9ZTtvKHIuY29tcG9uZW50SW5zdGFuY2UpOykocj1yLmNvbXBvbmVudEluc3RhbmNlLl92bm9kZSkmJnIuZGF0YSYmKHQ9SG4oci5kYXRhLHQpKTtmb3IoO28obj1uLnBhcmVudCk7KW4mJm4uZGF0YSYmKHQ9SG4odCxuLmRhdGEpKTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtyZXR1cm4gbyhlKXx8byh0KT9WbihlLHpuKHQpKTpcIlwifSh0LnN0YXRpY0NsYXNzLHQuY2xhc3MpfSh0KSxjPW4uX3RyYW5zaXRpb25DbGFzc2VzO28oYykmJihzPVZuKHMsem4oYykpKSxzIT09bi5fcHJldkNsYXNzJiYobi5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLHMpLG4uX3ByZXZDbGFzcz1zKX19dmFyIGdyLF9yLGJyLHdyLCRyLHhyLENyPXtjcmVhdGU6eXIsdXBkYXRlOnlyfSxrcj0vW1xcdykuK1xcLV8kXFxdXS87ZnVuY3Rpb24gQXIoZSl7dmFyIHQsbixyLGksbyxhPSExLHM9ITEsYz0hMSx1PSExLGw9MCxmPTAsZD0wLHA9MDtmb3Iocj0wO3I8ZS5sZW5ndGg7cisrKWlmKG49dCx0PWUuY2hhckNvZGVBdChyKSxhKTM5PT09dCYmOTIhPT1uJiYoYT0hMSk7ZWxzZSBpZihzKTM0PT09dCYmOTIhPT1uJiYocz0hMSk7ZWxzZSBpZihjKTk2PT09dCYmOTIhPT1uJiYoYz0hMSk7ZWxzZSBpZih1KTQ3PT09dCYmOTIhPT1uJiYodT0hMSk7ZWxzZSBpZigxMjQhPT10fHwxMjQ9PT1lLmNoYXJDb2RlQXQocisxKXx8MTI0PT09ZS5jaGFyQ29kZUF0KHItMSl8fGx8fGZ8fGQpe3N3aXRjaCh0KXtjYXNlIDM0OnM9ITA7YnJlYWs7Y2FzZSAzOTphPSEwO2JyZWFrO2Nhc2UgOTY6Yz0hMDticmVhaztjYXNlIDQwOmQrKzticmVhaztjYXNlIDQxOmQtLTticmVhaztjYXNlIDkxOmYrKzticmVhaztjYXNlIDkzOmYtLTticmVhaztjYXNlIDEyMzpsKys7YnJlYWs7Y2FzZSAxMjU6bC0tfWlmKDQ3PT09dCl7Zm9yKHZhciB2PXItMSxoPXZvaWQgMDt2Pj0wJiZcIiBcIj09PShoPWUuY2hhckF0KHYpKTt2LS0pO2gmJmtyLnRlc3QoaCl8fCh1PSEwKX19ZWxzZSB2b2lkIDA9PT1pPyhwPXIrMSxpPWUuc2xpY2UoMCxyKS50cmltKCkpOm0oKTtmdW5jdGlvbiBtKCl7KG98fChvPVtdKSkucHVzaChlLnNsaWNlKHAscikudHJpbSgpKSxwPXIrMX1pZih2b2lkIDA9PT1pP2k9ZS5zbGljZSgwLHIpLnRyaW0oKTowIT09cCYmbSgpLG8pZm9yKHI9MDtyPG8ubGVuZ3RoO3IrKylpPU9yKGksb1tyXSk7cmV0dXJuIGl9ZnVuY3Rpb24gT3IoZSx0KXt2YXIgbj10LmluZGV4T2YoXCIoXCIpO2lmKG48MClyZXR1cm4nX2YoXCInK3QrJ1wiKSgnK2UrXCIpXCI7dmFyIHI9dC5zbGljZSgwLG4pLGk9dC5zbGljZShuKzEpO3JldHVybidfZihcIicrcisnXCIpKCcrZSsoXCIpXCIhPT1pP1wiLFwiK2k6aSl9ZnVuY3Rpb24gU3IoZSx0KXtjb25zb2xlLmVycm9yKFwiW1Z1ZSBjb21waWxlcl06IFwiK2UpfWZ1bmN0aW9uIFRyKGUsdCl7cmV0dXJuIGU/ZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGVbdF19KS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGV9KTpbXX1mdW5jdGlvbiBFcihlLHQsbixyLGkpeyhlLnByb3BzfHwoZS5wcm9wcz1bXSkpLnB1c2goUnIoe25hbWU6dCx2YWx1ZTpuLGR5bmFtaWM6aX0scikpLGUucGxhaW49ITF9ZnVuY3Rpb24ganIoZSx0LG4scixpKXsoaT9lLmR5bmFtaWNBdHRyc3x8KGUuZHluYW1pY0F0dHJzPVtdKTplLmF0dHJzfHwoZS5hdHRycz1bXSkpLnB1c2goUnIoe25hbWU6dCx2YWx1ZTpuLGR5bmFtaWM6aX0scikpLGUucGxhaW49ITF9ZnVuY3Rpb24gTHIoZSx0LG4scil7ZS5hdHRyc01hcFt0XT1uLGUuYXR0cnNMaXN0LnB1c2goUnIoe25hbWU6dCx2YWx1ZTpufSxyKSl9ZnVuY3Rpb24gSXIoZSx0LG4scixpLG8sYSxzKXsoZS5kaXJlY3RpdmVzfHwoZS5kaXJlY3RpdmVzPVtdKSkucHVzaChScih7bmFtZTp0LHJhd05hbWU6bix2YWx1ZTpyLGFyZzppLGlzRHluYW1pY0FyZzpvLG1vZGlmaWVyczphfSxzKSksZS5wbGFpbj0hMX1mdW5jdGlvbiBOcihlLHQsbil7cmV0dXJuIG4/XCJfcChcIit0KycsXCInK2UrJ1wiKSc6ZSt0fWZ1bmN0aW9uIE1yKGUsdCxuLGksbyxhLHMsYyl7dmFyIHU7KGk9aXx8cikucmlnaHQ/Yz90PVwiKFwiK3QrXCIpPT09J2NsaWNrJz8nY29udGV4dG1lbnUnOihcIit0K1wiKVwiOlwiY2xpY2tcIj09PXQmJih0PVwiY29udGV4dG1lbnVcIixkZWxldGUgaS5yaWdodCk6aS5taWRkbGUmJihjP3Q9XCIoXCIrdCtcIik9PT0nY2xpY2snPydtb3VzZXVwJzooXCIrdCtcIilcIjpcImNsaWNrXCI9PT10JiYodD1cIm1vdXNldXBcIikpLGkuY2FwdHVyZSYmKGRlbGV0ZSBpLmNhcHR1cmUsdD1OcihcIiFcIix0LGMpKSxpLm9uY2UmJihkZWxldGUgaS5vbmNlLHQ9TnIoXCJ+XCIsdCxjKSksaS5wYXNzaXZlJiYoZGVsZXRlIGkucGFzc2l2ZSx0PU5yKFwiJlwiLHQsYykpLGkubmF0aXZlPyhkZWxldGUgaS5uYXRpdmUsdT1lLm5hdGl2ZUV2ZW50c3x8KGUubmF0aXZlRXZlbnRzPXt9KSk6dT1lLmV2ZW50c3x8KGUuZXZlbnRzPXt9KTt2YXIgbD1Scih7dmFsdWU6bi50cmltKCksZHluYW1pYzpjfSxzKTtpIT09ciYmKGwubW9kaWZpZXJzPWkpO3ZhciBmPXVbdF07QXJyYXkuaXNBcnJheShmKT9vP2YudW5zaGlmdChsKTpmLnB1c2gobCk6dVt0XT1mP28/W2wsZl06W2YsbF06bCxlLnBsYWluPSExfWZ1bmN0aW9uIERyKGUsdCxuKXt2YXIgcj1GcihlLFwiOlwiK3QpfHxGcihlLFwidi1iaW5kOlwiK3QpO2lmKG51bGwhPXIpcmV0dXJuIEFyKHIpO2lmKCExIT09bil7dmFyIGk9RnIoZSx0KTtpZihudWxsIT1pKXJldHVybiBKU09OLnN0cmluZ2lmeShpKX19ZnVuY3Rpb24gRnIoZSx0LG4pe3ZhciByO2lmKG51bGwhPShyPWUuYXR0cnNNYXBbdF0pKWZvcih2YXIgaT1lLmF0dHJzTGlzdCxvPTAsYT1pLmxlbmd0aDtvPGE7bysrKWlmKGlbb10ubmFtZT09PXQpe2kuc3BsaWNlKG8sMSk7YnJlYWt9cmV0dXJuIG4mJmRlbGV0ZSBlLmF0dHJzTWFwW3RdLHJ9ZnVuY3Rpb24gUHIoZSx0KXtmb3IodmFyIG49ZS5hdHRyc0xpc3Qscj0wLGk9bi5sZW5ndGg7cjxpO3IrKyl7dmFyIG89bltyXTtpZih0LnRlc3Qoby5uYW1lKSlyZXR1cm4gbi5zcGxpY2UociwxKSxvfX1mdW5jdGlvbiBScihlLHQpe3JldHVybiB0JiYobnVsbCE9dC5zdGFydCYmKGUuc3RhcnQ9dC5zdGFydCksbnVsbCE9dC5lbmQmJihlLmVuZD10LmVuZCkpLGV9ZnVuY3Rpb24gVXIoZSx0LG4pe3ZhciByPW58fHt9LGk9ci5udW1iZXIsbz1cIiQkdlwiO3IudHJpbSYmKG89XCIodHlwZW9mICQkdiA9PT0gJ3N0cmluZyc/ICQkdi50cmltKCk6ICQkdilcIiksaSYmKG89XCJfbihcIitvK1wiKVwiKTt2YXIgYT1Ccih0LG8pO2UubW9kZWw9e3ZhbHVlOlwiKFwiK3QrXCIpXCIsZXhwcmVzc2lvbjpKU09OLnN0cmluZ2lmeSh0KSxjYWxsYmFjazpcImZ1bmN0aW9uICgkJHYpIHtcIithK1wifVwifX1mdW5jdGlvbiBCcihlLHQpe3ZhciBuPWZ1bmN0aW9uKGUpe2lmKGU9ZS50cmltKCksZ3I9ZS5sZW5ndGgsZS5pbmRleE9mKFwiW1wiKTwwfHxlLmxhc3RJbmRleE9mKFwiXVwiKTxnci0xKXJldHVybih3cj1lLmxhc3RJbmRleE9mKFwiLlwiKSk+LTE/e2V4cDplLnNsaWNlKDAsd3IpLGtleTonXCInK2Uuc2xpY2Uod3IrMSkrJ1wiJ306e2V4cDplLGtleTpudWxsfTtmb3IoX3I9ZSx3cj0kcj14cj0wOyFWcigpOyl6cihicj1IcigpKT9Lcihicik6OTE9PT1iciYmSnIoYnIpO3JldHVybntleHA6ZS5zbGljZSgwLCRyKSxrZXk6ZS5zbGljZSgkcisxLHhyKX19KGUpO3JldHVybiBudWxsPT09bi5rZXk/ZStcIj1cIit0OlwiJHNldChcIituLmV4cCtcIiwgXCIrbi5rZXkrXCIsIFwiK3QrXCIpXCJ9ZnVuY3Rpb24gSHIoKXtyZXR1cm4gX3IuY2hhckNvZGVBdCgrK3dyKX1mdW5jdGlvbiBWcigpe3JldHVybiB3cj49Z3J9ZnVuY3Rpb24genIoZSl7cmV0dXJuIDM0PT09ZXx8Mzk9PT1lfWZ1bmN0aW9uIEpyKGUpe3ZhciB0PTE7Zm9yKCRyPXdyOyFWcigpOylpZih6cihlPUhyKCkpKUtyKGUpO2Vsc2UgaWYoOTE9PT1lJiZ0KyssOTM9PT1lJiZ0LS0sMD09PXQpe3hyPXdyO2JyZWFrfX1mdW5jdGlvbiBLcihlKXtmb3IodmFyIHQ9ZTshVnIoKSYmKGU9SHIoKSkhPT10Oyk7fXZhciBxcixXcj1cIl9fclwiLEdyPVwiX19jXCI7ZnVuY3Rpb24gWHIoZSx0LG4pe3ZhciByPXFyO3JldHVybiBmdW5jdGlvbiBpKCl7bnVsbCE9PXQuYXBwbHkobnVsbCxhcmd1bWVudHMpJiZRcihlLGksbixyKX19dmFyIFpyPXFlJiYhKGVlJiZOdW1iZXIoZWVbMV0pPD01Myk7ZnVuY3Rpb24gWXIoZSx0LG4scil7aWYoWnIpe3ZhciBpPXVuLG89dDt0PW8uX3dyYXBwZXI9ZnVuY3Rpb24oZSl7aWYoZS50YXJnZXQ9PT1lLmN1cnJlbnRUYXJnZXR8fGUudGltZVN0YW1wPj1pfHxlLnRpbWVTdGFtcDw9MHx8ZS50YXJnZXQub3duZXJEb2N1bWVudCE9PWRvY3VtZW50KXJldHVybiBvLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19cXIuYWRkRXZlbnRMaXN0ZW5lcihlLHQsbmU/e2NhcHR1cmU6bixwYXNzaXZlOnJ9Om4pfWZ1bmN0aW9uIFFyKGUsdCxuLHIpeyhyfHxxcikucmVtb3ZlRXZlbnRMaXN0ZW5lcihlLHQuX3dyYXBwZXJ8fHQsbil9ZnVuY3Rpb24gZWkoZSx0KXtpZighaShlLmRhdGEub24pfHwhaSh0LmRhdGEub24pKXt2YXIgbj10LmRhdGEub258fHt9LHI9ZS5kYXRhLm9ufHx7fTtxcj10LmVsbSxmdW5jdGlvbihlKXtpZihvKGVbV3JdKSl7dmFyIHQ9WD9cImNoYW5nZVwiOlwiaW5wdXRcIjtlW3RdPVtdLmNvbmNhdChlW1dyXSxlW3RdfHxbXSksZGVsZXRlIGVbV3JdfW8oZVtHcl0pJiYoZS5jaGFuZ2U9W10uY29uY2F0KGVbR3JdLGUuY2hhbmdlfHxbXSksZGVsZXRlIGVbR3JdKX0obiksYXQobixyLFlyLFFyLFhyLHQuY29udGV4dCkscXI9dm9pZCAwfX12YXIgdGksbmk9e2NyZWF0ZTplaSx1cGRhdGU6ZWl9O2Z1bmN0aW9uIHJpKGUsdCl7aWYoIWkoZS5kYXRhLmRvbVByb3BzKXx8IWkodC5kYXRhLmRvbVByb3BzKSl7dmFyIG4scixhPXQuZWxtLHM9ZS5kYXRhLmRvbVByb3BzfHx7fSxjPXQuZGF0YS5kb21Qcm9wc3x8e307Zm9yKG4gaW4gbyhjLl9fb2JfXykmJihjPXQuZGF0YS5kb21Qcm9wcz1UKHt9LGMpKSxzKW4gaW4gY3x8KGFbbl09XCJcIik7Zm9yKG4gaW4gYyl7aWYocj1jW25dLFwidGV4dENvbnRlbnRcIj09PW58fFwiaW5uZXJIVE1MXCI9PT1uKXtpZih0LmNoaWxkcmVuJiYodC5jaGlsZHJlbi5sZW5ndGg9MCkscj09PXNbbl0pY29udGludWU7MT09PWEuY2hpbGROb2Rlcy5sZW5ndGgmJmEucmVtb3ZlQ2hpbGQoYS5jaGlsZE5vZGVzWzBdKX1pZihcInZhbHVlXCI9PT1uJiZcIlBST0dSRVNTXCIhPT1hLnRhZ05hbWUpe2EuX3ZhbHVlPXI7dmFyIHU9aShyKT9cIlwiOlN0cmluZyhyKTtpaShhLHUpJiYoYS52YWx1ZT11KX1lbHNlIGlmKFwiaW5uZXJIVE1MXCI9PT1uJiZxbihhLnRhZ05hbWUpJiZpKGEuaW5uZXJIVE1MKSl7KHRpPXRpfHxkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpKS5pbm5lckhUTUw9XCI8c3ZnPlwiK3IrXCI8L3N2Zz5cIjtmb3IodmFyIGw9dGkuZmlyc3RDaGlsZDthLmZpcnN0Q2hpbGQ7KWEucmVtb3ZlQ2hpbGQoYS5maXJzdENoaWxkKTtmb3IoO2wuZmlyc3RDaGlsZDspYS5hcHBlbmRDaGlsZChsLmZpcnN0Q2hpbGQpfWVsc2UgaWYociE9PXNbbl0pdHJ5e2Fbbl09cn1jYXRjaChlKXt9fX19ZnVuY3Rpb24gaWkoZSx0KXtyZXR1cm4hZS5jb21wb3NpbmcmJihcIk9QVElPTlwiPT09ZS50YWdOYW1lfHxmdW5jdGlvbihlLHQpe3ZhciBuPSEwO3RyeXtuPWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQhPT1lfWNhdGNoKGUpe31yZXR1cm4gbiYmZS52YWx1ZSE9PXR9KGUsdCl8fGZ1bmN0aW9uKGUsdCl7dmFyIG49ZS52YWx1ZSxyPWUuX3ZNb2RpZmllcnM7aWYobyhyKSl7aWYoci5udW1iZXIpcmV0dXJuIHYobikhPT12KHQpO2lmKHIudHJpbSlyZXR1cm4gbi50cmltKCkhPT10LnRyaW0oKX1yZXR1cm4gbiE9PXR9KGUsdCkpfXZhciBvaT17Y3JlYXRlOnJpLHVwZGF0ZTpyaX0sYWk9dyhmdW5jdGlvbihlKXt2YXIgdD17fSxuPS86KC4rKS87cmV0dXJuIGUuc3BsaXQoLzsoPyFbXihdKlxcKSkvZykuZm9yRWFjaChmdW5jdGlvbihlKXtpZihlKXt2YXIgcj1lLnNwbGl0KG4pO3IubGVuZ3RoPjEmJih0W3JbMF0udHJpbSgpXT1yWzFdLnRyaW0oKSl9fSksdH0pO2Z1bmN0aW9uIHNpKGUpe3ZhciB0PWNpKGUuc3R5bGUpO3JldHVybiBlLnN0YXRpY1N0eWxlP1QoZS5zdGF0aWNTdHlsZSx0KTp0fWZ1bmN0aW9uIGNpKGUpe3JldHVybiBBcnJheS5pc0FycmF5KGUpP0UoZSk6XCJzdHJpbmdcIj09dHlwZW9mIGU/YWkoZSk6ZX12YXIgdWksbGk9L14tLS8sZmk9L1xccyohaW1wb3J0YW50JC8sZGk9ZnVuY3Rpb24oZSx0LG4pe2lmKGxpLnRlc3QodCkpZS5zdHlsZS5zZXRQcm9wZXJ0eSh0LG4pO2Vsc2UgaWYoZmkudGVzdChuKSllLnN0eWxlLnNldFByb3BlcnR5KEEodCksbi5yZXBsYWNlKGZpLFwiXCIpLFwiaW1wb3J0YW50XCIpO2Vsc2V7dmFyIHI9dmkodCk7aWYoQXJyYXkuaXNBcnJheShuKSlmb3IodmFyIGk9MCxvPW4ubGVuZ3RoO2k8bztpKyspZS5zdHlsZVtyXT1uW2ldO2Vsc2UgZS5zdHlsZVtyXT1ufX0scGk9W1wiV2Via2l0XCIsXCJNb3pcIixcIm1zXCJdLHZpPXcoZnVuY3Rpb24oZSl7aWYodWk9dWl8fGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikuc3R5bGUsXCJmaWx0ZXJcIiE9PShlPXgoZSkpJiZlIGluIHVpKXJldHVybiBlO2Zvcih2YXIgdD1lLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK2Uuc2xpY2UoMSksbj0wO248cGkubGVuZ3RoO24rKyl7dmFyIHI9cGlbbl0rdDtpZihyIGluIHVpKXJldHVybiByfX0pO2Z1bmN0aW9uIGhpKGUsdCl7dmFyIG49dC5kYXRhLHI9ZS5kYXRhO2lmKCEoaShuLnN0YXRpY1N0eWxlKSYmaShuLnN0eWxlKSYmaShyLnN0YXRpY1N0eWxlKSYmaShyLnN0eWxlKSkpe3ZhciBhLHMsYz10LmVsbSx1PXIuc3RhdGljU3R5bGUsbD1yLm5vcm1hbGl6ZWRTdHlsZXx8ci5zdHlsZXx8e30sZj11fHxsLGQ9Y2kodC5kYXRhLnN0eWxlKXx8e307dC5kYXRhLm5vcm1hbGl6ZWRTdHlsZT1vKGQuX19vYl9fKT9UKHt9LGQpOmQ7dmFyIHA9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4scj17fSxpPWU7aS5jb21wb25lbnRJbnN0YW5jZTspKGk9aS5jb21wb25lbnRJbnN0YW5jZS5fdm5vZGUpJiZpLmRhdGEmJihuPXNpKGkuZGF0YSkpJiZUKHIsbik7KG49c2koZS5kYXRhKSkmJlQocixuKTtmb3IodmFyIG89ZTtvPW8ucGFyZW50OylvLmRhdGEmJihuPXNpKG8uZGF0YSkpJiZUKHIsbik7cmV0dXJuIHJ9KHQpO2ZvcihzIGluIGYpaShwW3NdKSYmZGkoYyxzLFwiXCIpO2ZvcihzIGluIHApKGE9cFtzXSkhPT1mW3NdJiZkaShjLHMsbnVsbD09YT9cIlwiOmEpfX12YXIgbWk9e2NyZWF0ZTpoaSx1cGRhdGU6aGl9LHlpPS9cXHMrLztmdW5jdGlvbiBnaShlLHQpe2lmKHQmJih0PXQudHJpbSgpKSlpZihlLmNsYXNzTGlzdCl0LmluZGV4T2YoXCIgXCIpPi0xP3Quc3BsaXQoeWkpLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIGUuY2xhc3NMaXN0LmFkZCh0KX0pOmUuY2xhc3NMaXN0LmFkZCh0KTtlbHNle3ZhciBuPVwiIFwiKyhlLmdldEF0dHJpYnV0ZShcImNsYXNzXCIpfHxcIlwiKStcIiBcIjtuLmluZGV4T2YoXCIgXCIrdCtcIiBcIik8MCYmZS5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLChuK3QpLnRyaW0oKSl9fWZ1bmN0aW9uIF9pKGUsdCl7aWYodCYmKHQ9dC50cmltKCkpKWlmKGUuY2xhc3NMaXN0KXQuaW5kZXhPZihcIiBcIik+LTE/dC5zcGxpdCh5aSkuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gZS5jbGFzc0xpc3QucmVtb3ZlKHQpfSk6ZS5jbGFzc0xpc3QucmVtb3ZlKHQpLGUuY2xhc3NMaXN0Lmxlbmd0aHx8ZS5yZW1vdmVBdHRyaWJ1dGUoXCJjbGFzc1wiKTtlbHNle2Zvcih2YXIgbj1cIiBcIisoZS5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKXx8XCJcIikrXCIgXCIscj1cIiBcIit0K1wiIFwiO24uaW5kZXhPZihyKT49MDspbj1uLnJlcGxhY2UocixcIiBcIik7KG49bi50cmltKCkpP2Uuc2V0QXR0cmlidXRlKFwiY2xhc3NcIixuKTplLnJlbW92ZUF0dHJpYnV0ZShcImNsYXNzXCIpfX1mdW5jdGlvbiBiaShlKXtpZihlKXtpZihcIm9iamVjdFwiPT10eXBlb2YgZSl7dmFyIHQ9e307cmV0dXJuITEhPT1lLmNzcyYmVCh0LHdpKGUubmFtZXx8XCJ2XCIpKSxUKHQsZSksdH1yZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgZT93aShlKTp2b2lkIDB9fXZhciB3aT13KGZ1bmN0aW9uKGUpe3JldHVybntlbnRlckNsYXNzOmUrXCItZW50ZXJcIixlbnRlclRvQ2xhc3M6ZStcIi1lbnRlci10b1wiLGVudGVyQWN0aXZlQ2xhc3M6ZStcIi1lbnRlci1hY3RpdmVcIixsZWF2ZUNsYXNzOmUrXCItbGVhdmVcIixsZWF2ZVRvQ2xhc3M6ZStcIi1sZWF2ZS10b1wiLGxlYXZlQWN0aXZlQ2xhc3M6ZStcIi1sZWF2ZS1hY3RpdmVcIn19KSwkaT1LJiYhWix4aT1cInRyYW5zaXRpb25cIixDaT1cImFuaW1hdGlvblwiLGtpPVwidHJhbnNpdGlvblwiLEFpPVwidHJhbnNpdGlvbmVuZFwiLE9pPVwiYW5pbWF0aW9uXCIsU2k9XCJhbmltYXRpb25lbmRcIjskaSYmKHZvaWQgMD09PXdpbmRvdy5vbnRyYW5zaXRpb25lbmQmJnZvaWQgMCE9PXdpbmRvdy5vbndlYmtpdHRyYW5zaXRpb25lbmQmJihraT1cIldlYmtpdFRyYW5zaXRpb25cIixBaT1cIndlYmtpdFRyYW5zaXRpb25FbmRcIiksdm9pZCAwPT09d2luZG93Lm9uYW5pbWF0aW9uZW5kJiZ2b2lkIDAhPT13aW5kb3cub253ZWJraXRhbmltYXRpb25lbmQmJihPaT1cIldlYmtpdEFuaW1hdGlvblwiLFNpPVwid2Via2l0QW5pbWF0aW9uRW5kXCIpKTt2YXIgVGk9Sz93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lP3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuYmluZCh3aW5kb3cpOnNldFRpbWVvdXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUoKX07ZnVuY3Rpb24gRWkoZSl7VGkoZnVuY3Rpb24oKXtUaShlKX0pfWZ1bmN0aW9uIGppKGUsdCl7dmFyIG49ZS5fdHJhbnNpdGlvbkNsYXNzZXN8fChlLl90cmFuc2l0aW9uQ2xhc3Nlcz1bXSk7bi5pbmRleE9mKHQpPDAmJihuLnB1c2godCksZ2koZSx0KSl9ZnVuY3Rpb24gTGkoZSx0KXtlLl90cmFuc2l0aW9uQ2xhc3NlcyYmZyhlLl90cmFuc2l0aW9uQ2xhc3Nlcyx0KSxfaShlLHQpfWZ1bmN0aW9uIElpKGUsdCxuKXt2YXIgcj1NaShlLHQpLGk9ci50eXBlLG89ci50aW1lb3V0LGE9ci5wcm9wQ291bnQ7aWYoIWkpcmV0dXJuIG4oKTt2YXIgcz1pPT09eGk/QWk6U2ksYz0wLHU9ZnVuY3Rpb24oKXtlLnJlbW92ZUV2ZW50TGlzdGVuZXIocyxsKSxuKCl9LGw9ZnVuY3Rpb24odCl7dC50YXJnZXQ9PT1lJiYrK2M+PWEmJnUoKX07c2V0VGltZW91dChmdW5jdGlvbigpe2M8YSYmdSgpfSxvKzEpLGUuYWRkRXZlbnRMaXN0ZW5lcihzLGwpfXZhciBOaT0vXFxiKHRyYW5zZm9ybXxhbGwpKCx8JCkvO2Z1bmN0aW9uIE1pKGUsdCl7dmFyIG4scj13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlKSxpPShyW2tpK1wiRGVsYXlcIl18fFwiXCIpLnNwbGl0KFwiLCBcIiksbz0ocltraStcIkR1cmF0aW9uXCJdfHxcIlwiKS5zcGxpdChcIiwgXCIpLGE9RGkoaSxvKSxzPShyW09pK1wiRGVsYXlcIl18fFwiXCIpLnNwbGl0KFwiLCBcIiksYz0ocltPaStcIkR1cmF0aW9uXCJdfHxcIlwiKS5zcGxpdChcIiwgXCIpLHU9RGkocyxjKSxsPTAsZj0wO3JldHVybiB0PT09eGk/YT4wJiYobj14aSxsPWEsZj1vLmxlbmd0aCk6dD09PUNpP3U+MCYmKG49Q2ksbD11LGY9Yy5sZW5ndGgpOmY9KG49KGw9TWF0aC5tYXgoYSx1KSk+MD9hPnU/eGk6Q2k6bnVsbCk/bj09PXhpP28ubGVuZ3RoOmMubGVuZ3RoOjAse3R5cGU6bix0aW1lb3V0OmwscHJvcENvdW50OmYsaGFzVHJhbnNmb3JtOm49PT14aSYmTmkudGVzdChyW2tpK1wiUHJvcGVydHlcIl0pfX1mdW5jdGlvbiBEaShlLHQpe2Zvcig7ZS5sZW5ndGg8dC5sZW5ndGg7KWU9ZS5jb25jYXQoZSk7cmV0dXJuIE1hdGgubWF4LmFwcGx5KG51bGwsdC5tYXAoZnVuY3Rpb24odCxuKXtyZXR1cm4gRmkodCkrRmkoZVtuXSl9KSl9ZnVuY3Rpb24gRmkoZSl7cmV0dXJuIDFlMypOdW1iZXIoZS5zbGljZSgwLC0xKS5yZXBsYWNlKFwiLFwiLFwiLlwiKSl9ZnVuY3Rpb24gUGkoZSx0KXt2YXIgbj1lLmVsbTtvKG4uX2xlYXZlQ2IpJiYobi5fbGVhdmVDYi5jYW5jZWxsZWQ9ITAsbi5fbGVhdmVDYigpKTt2YXIgcj1iaShlLmRhdGEudHJhbnNpdGlvbik7aWYoIWkocikmJiFvKG4uX2VudGVyQ2IpJiYxPT09bi5ub2RlVHlwZSl7Zm9yKHZhciBhPXIuY3NzLHM9ci50eXBlLHU9ci5lbnRlckNsYXNzLGw9ci5lbnRlclRvQ2xhc3MsZj1yLmVudGVyQWN0aXZlQ2xhc3MsZD1yLmFwcGVhckNsYXNzLHA9ci5hcHBlYXJUb0NsYXNzLGg9ci5hcHBlYXJBY3RpdmVDbGFzcyxtPXIuYmVmb3JlRW50ZXIseT1yLmVudGVyLGc9ci5hZnRlckVudGVyLF89ci5lbnRlckNhbmNlbGxlZCxiPXIuYmVmb3JlQXBwZWFyLHc9ci5hcHBlYXIsJD1yLmFmdGVyQXBwZWFyLHg9ci5hcHBlYXJDYW5jZWxsZWQsQz1yLmR1cmF0aW9uLGs9WnQsQT1adC4kdm5vZGU7QSYmQS5wYXJlbnQ7KWs9QS5jb250ZXh0LEE9QS5wYXJlbnQ7dmFyIE89IWsuX2lzTW91bnRlZHx8IWUuaXNSb290SW5zZXJ0O2lmKCFPfHx3fHxcIlwiPT09dyl7dmFyIFM9TyYmZD9kOnUsVD1PJiZoP2g6ZixFPU8mJnA/cDpsLGo9TyYmYnx8bSxMPU8mJlwiZnVuY3Rpb25cIj09dHlwZW9mIHc/dzp5LEk9TyYmJHx8ZyxOPU8mJnh8fF8sTT12KGMoQyk/Qy5lbnRlcjpDKSxGPSExIT09YSYmIVosUD1CaShMKSxSPW4uX2VudGVyQ2I9RChmdW5jdGlvbigpe0YmJihMaShuLEUpLExpKG4sVCkpLFIuY2FuY2VsbGVkPyhGJiZMaShuLFMpLE4mJk4obikpOkkmJkkobiksbi5fZW50ZXJDYj1udWxsfSk7ZS5kYXRhLnNob3d8fHN0KGUsXCJpbnNlcnRcIixmdW5jdGlvbigpe3ZhciB0PW4ucGFyZW50Tm9kZSxyPXQmJnQuX3BlbmRpbmcmJnQuX3BlbmRpbmdbZS5rZXldO3ImJnIudGFnPT09ZS50YWcmJnIuZWxtLl9sZWF2ZUNiJiZyLmVsbS5fbGVhdmVDYigpLEwmJkwobixSKX0pLGomJmoobiksRiYmKGppKG4sUyksamkobixUKSxFaShmdW5jdGlvbigpe0xpKG4sUyksUi5jYW5jZWxsZWR8fChqaShuLEUpLFB8fChVaShNKT9zZXRUaW1lb3V0KFIsTSk6SWkobixzLFIpKSl9KSksZS5kYXRhLnNob3cmJih0JiZ0KCksTCYmTChuLFIpKSxGfHxQfHxSKCl9fX1mdW5jdGlvbiBSaShlLHQpe3ZhciBuPWUuZWxtO28obi5fZW50ZXJDYikmJihuLl9lbnRlckNiLmNhbmNlbGxlZD0hMCxuLl9lbnRlckNiKCkpO3ZhciByPWJpKGUuZGF0YS50cmFuc2l0aW9uKTtpZihpKHIpfHwxIT09bi5ub2RlVHlwZSlyZXR1cm4gdCgpO2lmKCFvKG4uX2xlYXZlQ2IpKXt2YXIgYT1yLmNzcyxzPXIudHlwZSx1PXIubGVhdmVDbGFzcyxsPXIubGVhdmVUb0NsYXNzLGY9ci5sZWF2ZUFjdGl2ZUNsYXNzLGQ9ci5iZWZvcmVMZWF2ZSxwPXIubGVhdmUsaD1yLmFmdGVyTGVhdmUsbT1yLmxlYXZlQ2FuY2VsbGVkLHk9ci5kZWxheUxlYXZlLGc9ci5kdXJhdGlvbixfPSExIT09YSYmIVosYj1CaShwKSx3PXYoYyhnKT9nLmxlYXZlOmcpLCQ9bi5fbGVhdmVDYj1EKGZ1bmN0aW9uKCl7bi5wYXJlbnROb2RlJiZuLnBhcmVudE5vZGUuX3BlbmRpbmcmJihuLnBhcmVudE5vZGUuX3BlbmRpbmdbZS5rZXldPW51bGwpLF8mJihMaShuLGwpLExpKG4sZikpLCQuY2FuY2VsbGVkPyhfJiZMaShuLHUpLG0mJm0obikpOih0KCksaCYmaChuKSksbi5fbGVhdmVDYj1udWxsfSk7eT95KHgpOngoKX1mdW5jdGlvbiB4KCl7JC5jYW5jZWxsZWR8fCghZS5kYXRhLnNob3cmJm4ucGFyZW50Tm9kZSYmKChuLnBhcmVudE5vZGUuX3BlbmRpbmd8fChuLnBhcmVudE5vZGUuX3BlbmRpbmc9e30pKVtlLmtleV09ZSksZCYmZChuKSxfJiYoamkobix1KSxqaShuLGYpLEVpKGZ1bmN0aW9uKCl7TGkobix1KSwkLmNhbmNlbGxlZHx8KGppKG4sbCksYnx8KFVpKHcpP3NldFRpbWVvdXQoJCx3KTpJaShuLHMsJCkpKX0pKSxwJiZwKG4sJCksX3x8Ynx8JCgpKX19ZnVuY3Rpb24gVWkoZSl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIGUmJiFpc05hTihlKX1mdW5jdGlvbiBCaShlKXtpZihpKGUpKXJldHVybiExO3ZhciB0PWUuZm5zO3JldHVybiBvKHQpP0JpKEFycmF5LmlzQXJyYXkodCk/dFswXTp0KTooZS5fbGVuZ3RofHxlLmxlbmd0aCk+MX1mdW5jdGlvbiBIaShlLHQpeyEwIT09dC5kYXRhLnNob3cmJlBpKHQpfXZhciBWaT1mdW5jdGlvbihlKXt2YXIgdCxuLHI9e30sYz1lLm1vZHVsZXMsdT1lLm5vZGVPcHM7Zm9yKHQ9MDt0PHJyLmxlbmd0aDsrK3QpZm9yKHJbcnJbdF1dPVtdLG49MDtuPGMubGVuZ3RoOysrbilvKGNbbl1bcnJbdF1dKSYmcltyclt0XV0ucHVzaChjW25dW3JyW3RdXSk7ZnVuY3Rpb24gbChlKXt2YXIgdD11LnBhcmVudE5vZGUoZSk7byh0KSYmdS5yZW1vdmVDaGlsZCh0LGUpfWZ1bmN0aW9uIGYoZSx0LG4saSxzLGMsbCl7aWYobyhlLmVsbSkmJm8oYykmJihlPWNbbF09X2UoZSkpLGUuaXNSb290SW5zZXJ0PSFzLCFmdW5jdGlvbihlLHQsbixpKXt2YXIgcz1lLmRhdGE7aWYobyhzKSl7dmFyIGM9byhlLmNvbXBvbmVudEluc3RhbmNlKSYmcy5rZWVwQWxpdmU7aWYobyhzPXMuaG9vaykmJm8ocz1zLmluaXQpJiZzKGUsITEpLG8oZS5jb21wb25lbnRJbnN0YW5jZSkpcmV0dXJuIGQoZSx0KSxwKG4sZS5lbG0saSksYShjKSYmZnVuY3Rpb24oZSx0LG4saSl7Zm9yKHZhciBhLHM9ZTtzLmNvbXBvbmVudEluc3RhbmNlOylpZihvKGE9KHM9cy5jb21wb25lbnRJbnN0YW5jZS5fdm5vZGUpLmRhdGEpJiZvKGE9YS50cmFuc2l0aW9uKSl7Zm9yKGE9MDthPHIuYWN0aXZhdGUubGVuZ3RoOysrYSlyLmFjdGl2YXRlW2FdKG5yLHMpO3QucHVzaChzKTticmVha31wKG4sZS5lbG0saSl9KGUsdCxuLGkpLCEwfX0oZSx0LG4saSkpe3ZhciBmPWUuZGF0YSxoPWUuY2hpbGRyZW4sbT1lLnRhZztvKG0pPyhlLmVsbT1lLm5zP3UuY3JlYXRlRWxlbWVudE5TKGUubnMsbSk6dS5jcmVhdGVFbGVtZW50KG0sZSksZyhlKSx2KGUsaCx0KSxvKGYpJiZ5KGUsdCkscChuLGUuZWxtLGkpKTphKGUuaXNDb21tZW50KT8oZS5lbG09dS5jcmVhdGVDb21tZW50KGUudGV4dCkscChuLGUuZWxtLGkpKTooZS5lbG09dS5jcmVhdGVUZXh0Tm9kZShlLnRleHQpLHAobixlLmVsbSxpKSl9fWZ1bmN0aW9uIGQoZSx0KXtvKGUuZGF0YS5wZW5kaW5nSW5zZXJ0KSYmKHQucHVzaC5hcHBseSh0LGUuZGF0YS5wZW5kaW5nSW5zZXJ0KSxlLmRhdGEucGVuZGluZ0luc2VydD1udWxsKSxlLmVsbT1lLmNvbXBvbmVudEluc3RhbmNlLiRlbCxtKGUpPyh5KGUsdCksZyhlKSk6KHRyKGUpLHQucHVzaChlKSl9ZnVuY3Rpb24gcChlLHQsbil7byhlKSYmKG8obik/dS5wYXJlbnROb2RlKG4pPT09ZSYmdS5pbnNlcnRCZWZvcmUoZSx0LG4pOnUuYXBwZW5kQ2hpbGQoZSx0KSl9ZnVuY3Rpb24gdihlLHQsbil7aWYoQXJyYXkuaXNBcnJheSh0KSlmb3IodmFyIHI9MDtyPHQubGVuZ3RoOysrcilmKHRbcl0sbixlLmVsbSxudWxsLCEwLHQscik7ZWxzZSBzKGUudGV4dCkmJnUuYXBwZW5kQ2hpbGQoZS5lbG0sdS5jcmVhdGVUZXh0Tm9kZShTdHJpbmcoZS50ZXh0KSkpfWZ1bmN0aW9uIG0oZSl7Zm9yKDtlLmNvbXBvbmVudEluc3RhbmNlOyllPWUuY29tcG9uZW50SW5zdGFuY2UuX3Zub2RlO3JldHVybiBvKGUudGFnKX1mdW5jdGlvbiB5KGUsbil7Zm9yKHZhciBpPTA7aTxyLmNyZWF0ZS5sZW5ndGg7KytpKXIuY3JlYXRlW2ldKG5yLGUpO28odD1lLmRhdGEuaG9vaykmJihvKHQuY3JlYXRlKSYmdC5jcmVhdGUobnIsZSksbyh0Lmluc2VydCkmJm4ucHVzaChlKSl9ZnVuY3Rpb24gZyhlKXt2YXIgdDtpZihvKHQ9ZS5mblNjb3BlSWQpKXUuc2V0U3R5bGVTY29wZShlLmVsbSx0KTtlbHNlIGZvcih2YXIgbj1lO247KW8odD1uLmNvbnRleHQpJiZvKHQ9dC4kb3B0aW9ucy5fc2NvcGVJZCkmJnUuc2V0U3R5bGVTY29wZShlLmVsbSx0KSxuPW4ucGFyZW50O28odD1adCkmJnQhPT1lLmNvbnRleHQmJnQhPT1lLmZuQ29udGV4dCYmbyh0PXQuJG9wdGlvbnMuX3Njb3BlSWQpJiZ1LnNldFN0eWxlU2NvcGUoZS5lbG0sdCl9ZnVuY3Rpb24gXyhlLHQsbixyLGksbyl7Zm9yKDtyPD1pOysrcilmKG5bcl0sbyxlLHQsITEsbixyKX1mdW5jdGlvbiBiKGUpe3ZhciB0LG4saT1lLmRhdGE7aWYobyhpKSlmb3Iobyh0PWkuaG9vaykmJm8odD10LmRlc3Ryb3kpJiZ0KGUpLHQ9MDt0PHIuZGVzdHJveS5sZW5ndGg7Kyt0KXIuZGVzdHJveVt0XShlKTtpZihvKHQ9ZS5jaGlsZHJlbikpZm9yKG49MDtuPGUuY2hpbGRyZW4ubGVuZ3RoOysrbiliKGUuY2hpbGRyZW5bbl0pfWZ1bmN0aW9uIHcoZSx0LG4scil7Zm9yKDtuPD1yOysrbil7dmFyIGk9dFtuXTtvKGkpJiYobyhpLnRhZyk/KCQoaSksYihpKSk6bChpLmVsbSkpfX1mdW5jdGlvbiAkKGUsdCl7aWYobyh0KXx8byhlLmRhdGEpKXt2YXIgbixpPXIucmVtb3ZlLmxlbmd0aCsxO2ZvcihvKHQpP3QubGlzdGVuZXJzKz1pOnQ9ZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKCl7MD09LS1uLmxpc3RlbmVycyYmbChlKX1yZXR1cm4gbi5saXN0ZW5lcnM9dCxufShlLmVsbSxpKSxvKG49ZS5jb21wb25lbnRJbnN0YW5jZSkmJm8obj1uLl92bm9kZSkmJm8obi5kYXRhKSYmJChuLHQpLG49MDtuPHIucmVtb3ZlLmxlbmd0aDsrK24pci5yZW1vdmVbbl0oZSx0KTtvKG49ZS5kYXRhLmhvb2spJiZvKG49bi5yZW1vdmUpP24oZSx0KTp0KCl9ZWxzZSBsKGUuZWxtKX1mdW5jdGlvbiB4KGUsdCxuLHIpe2Zvcih2YXIgaT1uO2k8cjtpKyspe3ZhciBhPXRbaV07aWYobyhhKSYmaXIoZSxhKSlyZXR1cm4gaX19ZnVuY3Rpb24gQyhlLHQsbixzLGMsbCl7aWYoZSE9PXQpe28odC5lbG0pJiZvKHMpJiYodD1zW2NdPV9lKHQpKTt2YXIgZD10LmVsbT1lLmVsbTtpZihhKGUuaXNBc3luY1BsYWNlaG9sZGVyKSlvKHQuYXN5bmNGYWN0b3J5LnJlc29sdmVkKT9PKGUuZWxtLHQsbik6dC5pc0FzeW5jUGxhY2Vob2xkZXI9ITA7ZWxzZSBpZihhKHQuaXNTdGF0aWMpJiZhKGUuaXNTdGF0aWMpJiZ0LmtleT09PWUua2V5JiYoYSh0LmlzQ2xvbmVkKXx8YSh0LmlzT25jZSkpKXQuY29tcG9uZW50SW5zdGFuY2U9ZS5jb21wb25lbnRJbnN0YW5jZTtlbHNle3ZhciBwLHY9dC5kYXRhO28odikmJm8ocD12Lmhvb2spJiZvKHA9cC5wcmVwYXRjaCkmJnAoZSx0KTt2YXIgaD1lLmNoaWxkcmVuLHk9dC5jaGlsZHJlbjtpZihvKHYpJiZtKHQpKXtmb3IocD0wO3A8ci51cGRhdGUubGVuZ3RoOysrcClyLnVwZGF0ZVtwXShlLHQpO28ocD12Lmhvb2spJiZvKHA9cC51cGRhdGUpJiZwKGUsdCl9aSh0LnRleHQpP28oaCkmJm8oeSk/aCE9PXkmJmZ1bmN0aW9uKGUsdCxuLHIsYSl7Zm9yKHZhciBzLGMsbCxkPTAscD0wLHY9dC5sZW5ndGgtMSxoPXRbMF0sbT10W3ZdLHk9bi5sZW5ndGgtMSxnPW5bMF0sYj1uW3ldLCQ9IWE7ZDw9diYmcDw9eTspaShoKT9oPXRbKytkXTppKG0pP209dFstLXZdOmlyKGgsZyk/KEMoaCxnLHIsbixwKSxoPXRbKytkXSxnPW5bKytwXSk6aXIobSxiKT8oQyhtLGIscixuLHkpLG09dFstLXZdLGI9blstLXldKTppcihoLGIpPyhDKGgsYixyLG4seSksJCYmdS5pbnNlcnRCZWZvcmUoZSxoLmVsbSx1Lm5leHRTaWJsaW5nKG0uZWxtKSksaD10WysrZF0sYj1uWy0teV0pOmlyKG0sZyk/KEMobSxnLHIsbixwKSwkJiZ1Lmluc2VydEJlZm9yZShlLG0uZWxtLGguZWxtKSxtPXRbLS12XSxnPW5bKytwXSk6KGkocykmJihzPW9yKHQsZCx2KSksaShjPW8oZy5rZXkpP3NbZy5rZXldOngoZyx0LGQsdikpP2YoZyxyLGUsaC5lbG0sITEsbixwKTppcihsPXRbY10sZyk/KEMobCxnLHIsbixwKSx0W2NdPXZvaWQgMCwkJiZ1Lmluc2VydEJlZm9yZShlLGwuZWxtLGguZWxtKSk6ZihnLHIsZSxoLmVsbSwhMSxuLHApLGc9blsrK3BdKTtkPnY/XyhlLGkoblt5KzFdKT9udWxsOm5beSsxXS5lbG0sbixwLHkscik6cD55JiZ3KDAsdCxkLHYpfShkLGgseSxuLGwpOm8oeSk/KG8oZS50ZXh0KSYmdS5zZXRUZXh0Q29udGVudChkLFwiXCIpLF8oZCxudWxsLHksMCx5Lmxlbmd0aC0xLG4pKTpvKGgpP3coMCxoLDAsaC5sZW5ndGgtMSk6byhlLnRleHQpJiZ1LnNldFRleHRDb250ZW50KGQsXCJcIik6ZS50ZXh0IT09dC50ZXh0JiZ1LnNldFRleHRDb250ZW50KGQsdC50ZXh0KSxvKHYpJiZvKHA9di5ob29rKSYmbyhwPXAucG9zdHBhdGNoKSYmcChlLHQpfX19ZnVuY3Rpb24gayhlLHQsbil7aWYoYShuKSYmbyhlLnBhcmVudCkpZS5wYXJlbnQuZGF0YS5wZW5kaW5nSW5zZXJ0PXQ7ZWxzZSBmb3IodmFyIHI9MDtyPHQubGVuZ3RoOysrcil0W3JdLmRhdGEuaG9vay5pbnNlcnQodFtyXSl9dmFyIEE9aChcImF0dHJzLGNsYXNzLHN0YXRpY0NsYXNzLHN0YXRpY1N0eWxlLGtleVwiKTtmdW5jdGlvbiBPKGUsdCxuLHIpe3ZhciBpLHM9dC50YWcsYz10LmRhdGEsdT10LmNoaWxkcmVuO2lmKHI9cnx8YyYmYy5wcmUsdC5lbG09ZSxhKHQuaXNDb21tZW50KSYmbyh0LmFzeW5jRmFjdG9yeSkpcmV0dXJuIHQuaXNBc3luY1BsYWNlaG9sZGVyPSEwLCEwO2lmKG8oYykmJihvKGk9Yy5ob29rKSYmbyhpPWkuaW5pdCkmJmkodCwhMCksbyhpPXQuY29tcG9uZW50SW5zdGFuY2UpKSlyZXR1cm4gZCh0LG4pLCEwO2lmKG8ocykpe2lmKG8odSkpaWYoZS5oYXNDaGlsZE5vZGVzKCkpaWYobyhpPWMpJiZvKGk9aS5kb21Qcm9wcykmJm8oaT1pLmlubmVySFRNTCkpe2lmKGkhPT1lLmlubmVySFRNTClyZXR1cm4hMX1lbHNle2Zvcih2YXIgbD0hMCxmPWUuZmlyc3RDaGlsZCxwPTA7cDx1Lmxlbmd0aDtwKyspe2lmKCFmfHwhTyhmLHVbcF0sbixyKSl7bD0hMTticmVha31mPWYubmV4dFNpYmxpbmd9aWYoIWx8fGYpcmV0dXJuITF9ZWxzZSB2KHQsdSxuKTtpZihvKGMpKXt2YXIgaD0hMTtmb3IodmFyIG0gaW4gYylpZighQShtKSl7aD0hMCx5KHQsbik7YnJlYWt9IWgmJmMuY2xhc3MmJnJ0KGMuY2xhc3MpfX1lbHNlIGUuZGF0YSE9PXQudGV4dCYmKGUuZGF0YT10LnRleHQpO3JldHVybiEwfXJldHVybiBmdW5jdGlvbihlLHQsbixzKXtpZighaSh0KSl7dmFyIGMsbD0hMSxkPVtdO2lmKGkoZSkpbD0hMCxmKHQsZCk7ZWxzZXt2YXIgcD1vKGUubm9kZVR5cGUpO2lmKCFwJiZpcihlLHQpKUMoZSx0LGQsbnVsbCxudWxsLHMpO2Vsc2V7aWYocCl7aWYoMT09PWUubm9kZVR5cGUmJmUuaGFzQXR0cmlidXRlKEYpJiYoZS5yZW1vdmVBdHRyaWJ1dGUoRiksbj0hMCksYShuKSYmTyhlLHQsZCkpcmV0dXJuIGsodCxkLCEwKSxlO2M9ZSxlPW5ldyBoZSh1LnRhZ05hbWUoYykudG9Mb3dlckNhc2UoKSx7fSxbXSx2b2lkIDAsYyl9dmFyIHY9ZS5lbG0saD11LnBhcmVudE5vZGUodik7aWYoZih0LGQsdi5fbGVhdmVDYj9udWxsOmgsdS5uZXh0U2libGluZyh2KSksbyh0LnBhcmVudCkpZm9yKHZhciB5PXQucGFyZW50LGc9bSh0KTt5Oyl7Zm9yKHZhciBfPTA7XzxyLmRlc3Ryb3kubGVuZ3RoOysrXylyLmRlc3Ryb3lbX10oeSk7aWYoeS5lbG09dC5lbG0sZyl7Zm9yKHZhciAkPTA7JDxyLmNyZWF0ZS5sZW5ndGg7KyskKXIuY3JlYXRlWyRdKG5yLHkpO3ZhciB4PXkuZGF0YS5ob29rLmluc2VydDtpZih4Lm1lcmdlZClmb3IodmFyIEE9MTtBPHguZm5zLmxlbmd0aDtBKyspeC5mbnNbQV0oKX1lbHNlIHRyKHkpO3k9eS5wYXJlbnR9byhoKT93KDAsW2VdLDAsMCk6byhlLnRhZykmJmIoZSl9fXJldHVybiBrKHQsZCxsKSx0LmVsbX1vKGUpJiZiKGUpfX0oe25vZGVPcHM6UW4sbW9kdWxlczpbbXIsQ3Isbmksb2ksbWksSz97Y3JlYXRlOkhpLGFjdGl2YXRlOkhpLHJlbW92ZTpmdW5jdGlvbihlLHQpeyEwIT09ZS5kYXRhLnNob3c/UmkoZSx0KTp0KCl9fTp7fV0uY29uY2F0KGRyKX0pO1omJmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJzZWxlY3Rpb25jaGFuZ2VcIixmdW5jdGlvbigpe3ZhciBlPWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7ZSYmZS52bW9kZWwmJlppKGUsXCJpbnB1dFwiKX0pO3ZhciB6aT17aW5zZXJ0ZWQ6ZnVuY3Rpb24oZSx0LG4scil7XCJzZWxlY3RcIj09PW4udGFnPyhyLmVsbSYmIXIuZWxtLl92T3B0aW9ucz9zdChuLFwicG9zdHBhdGNoXCIsZnVuY3Rpb24oKXt6aS5jb21wb25lbnRVcGRhdGVkKGUsdCxuKX0pOkppKGUsdCxuLmNvbnRleHQpLGUuX3ZPcHRpb25zPVtdLm1hcC5jYWxsKGUub3B0aW9ucyxXaSkpOihcInRleHRhcmVhXCI9PT1uLnRhZ3x8Wm4oZS50eXBlKSkmJihlLl92TW9kaWZpZXJzPXQubW9kaWZpZXJzLHQubW9kaWZpZXJzLmxhenl8fChlLmFkZEV2ZW50TGlzdGVuZXIoXCJjb21wb3NpdGlvbnN0YXJ0XCIsR2kpLGUuYWRkRXZlbnRMaXN0ZW5lcihcImNvbXBvc2l0aW9uZW5kXCIsWGkpLGUuYWRkRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLFhpKSxaJiYoZS52bW9kZWw9ITApKSl9LGNvbXBvbmVudFVwZGF0ZWQ6ZnVuY3Rpb24oZSx0LG4pe2lmKFwic2VsZWN0XCI9PT1uLnRhZyl7SmkoZSx0LG4uY29udGV4dCk7dmFyIHI9ZS5fdk9wdGlvbnMsaT1lLl92T3B0aW9ucz1bXS5tYXAuY2FsbChlLm9wdGlvbnMsV2kpO2kuc29tZShmdW5jdGlvbihlLHQpe3JldHVybiFOKGUsclt0XSl9KSYmKGUubXVsdGlwbGU/dC52YWx1ZS5zb21lKGZ1bmN0aW9uKGUpe3JldHVybiBxaShlLGkpfSk6dC52YWx1ZSE9PXQub2xkVmFsdWUmJnFpKHQudmFsdWUsaSkpJiZaaShlLFwiY2hhbmdlXCIpfX19O2Z1bmN0aW9uIEppKGUsdCxuKXtLaShlLHQsbiksKFh8fFkpJiZzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7S2koZSx0LG4pfSwwKX1mdW5jdGlvbiBLaShlLHQsbil7dmFyIHI9dC52YWx1ZSxpPWUubXVsdGlwbGU7aWYoIWl8fEFycmF5LmlzQXJyYXkocikpe2Zvcih2YXIgbyxhLHM9MCxjPWUub3B0aW9ucy5sZW5ndGg7czxjO3MrKylpZihhPWUub3B0aW9uc1tzXSxpKW89TShyLFdpKGEpKT4tMSxhLnNlbGVjdGVkIT09byYmKGEuc2VsZWN0ZWQ9byk7ZWxzZSBpZihOKFdpKGEpLHIpKXJldHVybiB2b2lkKGUuc2VsZWN0ZWRJbmRleCE9PXMmJihlLnNlbGVjdGVkSW5kZXg9cykpO2l8fChlLnNlbGVjdGVkSW5kZXg9LTEpfX1mdW5jdGlvbiBxaShlLHQpe3JldHVybiB0LmV2ZXJ5KGZ1bmN0aW9uKHQpe3JldHVybiFOKHQsZSl9KX1mdW5jdGlvbiBXaShlKXtyZXR1cm5cIl92YWx1ZVwiaW4gZT9lLl92YWx1ZTplLnZhbHVlfWZ1bmN0aW9uIEdpKGUpe2UudGFyZ2V0LmNvbXBvc2luZz0hMH1mdW5jdGlvbiBYaShlKXtlLnRhcmdldC5jb21wb3NpbmcmJihlLnRhcmdldC5jb21wb3Npbmc9ITEsWmkoZS50YXJnZXQsXCJpbnB1dFwiKSl9ZnVuY3Rpb24gWmkoZSx0KXt2YXIgbj1kb2N1bWVudC5jcmVhdGVFdmVudChcIkhUTUxFdmVudHNcIik7bi5pbml0RXZlbnQodCwhMCwhMCksZS5kaXNwYXRjaEV2ZW50KG4pfWZ1bmN0aW9uIFlpKGUpe3JldHVybiFlLmNvbXBvbmVudEluc3RhbmNlfHxlLmRhdGEmJmUuZGF0YS50cmFuc2l0aW9uP2U6WWkoZS5jb21wb25lbnRJbnN0YW5jZS5fdm5vZGUpfXZhciBRaT17bW9kZWw6emksc2hvdzp7YmluZDpmdW5jdGlvbihlLHQsbil7dmFyIHI9dC52YWx1ZSxpPShuPVlpKG4pKS5kYXRhJiZuLmRhdGEudHJhbnNpdGlvbixvPWUuX192T3JpZ2luYWxEaXNwbGF5PVwibm9uZVwiPT09ZS5zdHlsZS5kaXNwbGF5P1wiXCI6ZS5zdHlsZS5kaXNwbGF5O3ImJmk/KG4uZGF0YS5zaG93PSEwLFBpKG4sZnVuY3Rpb24oKXtlLnN0eWxlLmRpc3BsYXk9b30pKTplLnN0eWxlLmRpc3BsYXk9cj9vOlwibm9uZVwifSx1cGRhdGU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXQudmFsdWU7IXIhPSF0Lm9sZFZhbHVlJiYoKG49WWkobikpLmRhdGEmJm4uZGF0YS50cmFuc2l0aW9uPyhuLmRhdGEuc2hvdz0hMCxyP1BpKG4sZnVuY3Rpb24oKXtlLnN0eWxlLmRpc3BsYXk9ZS5fX3ZPcmlnaW5hbERpc3BsYXl9KTpSaShuLGZ1bmN0aW9uKCl7ZS5zdHlsZS5kaXNwbGF5PVwibm9uZVwifSkpOmUuc3R5bGUuZGlzcGxheT1yP2UuX192T3JpZ2luYWxEaXNwbGF5Olwibm9uZVwiKX0sdW5iaW5kOmZ1bmN0aW9uKGUsdCxuLHIsaSl7aXx8KGUuc3R5bGUuZGlzcGxheT1lLl9fdk9yaWdpbmFsRGlzcGxheSl9fX0sZW89e25hbWU6U3RyaW5nLGFwcGVhcjpCb29sZWFuLGNzczpCb29sZWFuLG1vZGU6U3RyaW5nLHR5cGU6U3RyaW5nLGVudGVyQ2xhc3M6U3RyaW5nLGxlYXZlQ2xhc3M6U3RyaW5nLGVudGVyVG9DbGFzczpTdHJpbmcsbGVhdmVUb0NsYXNzOlN0cmluZyxlbnRlckFjdGl2ZUNsYXNzOlN0cmluZyxsZWF2ZUFjdGl2ZUNsYXNzOlN0cmluZyxhcHBlYXJDbGFzczpTdHJpbmcsYXBwZWFyQWN0aXZlQ2xhc3M6U3RyaW5nLGFwcGVhclRvQ2xhc3M6U3RyaW5nLGR1cmF0aW9uOltOdW1iZXIsU3RyaW5nLE9iamVjdF19O2Z1bmN0aW9uIHRvKGUpe3ZhciB0PWUmJmUuY29tcG9uZW50T3B0aW9ucztyZXR1cm4gdCYmdC5DdG9yLm9wdGlvbnMuYWJzdHJhY3Q/dG8oS3QodC5jaGlsZHJlbikpOmV9ZnVuY3Rpb24gbm8oZSl7dmFyIHQ9e30sbj1lLiRvcHRpb25zO2Zvcih2YXIgciBpbiBuLnByb3BzRGF0YSl0W3JdPWVbcl07dmFyIGk9bi5fcGFyZW50TGlzdGVuZXJzO2Zvcih2YXIgbyBpbiBpKXRbeChvKV09aVtvXTtyZXR1cm4gdH1mdW5jdGlvbiBybyhlLHQpe2lmKC9cXGQta2VlcC1hbGl2ZSQvLnRlc3QodC50YWcpKXJldHVybiBlKFwia2VlcC1hbGl2ZVwiLHtwcm9wczp0LmNvbXBvbmVudE9wdGlvbnMucHJvcHNEYXRhfSl9dmFyIGlvPWZ1bmN0aW9uKGUpe3JldHVybiBlLnRhZ3x8SnQoZSl9LG9vPWZ1bmN0aW9uKGUpe3JldHVyblwic2hvd1wiPT09ZS5uYW1lfSxhbz17bmFtZTpcInRyYW5zaXRpb25cIixwcm9wczplbyxhYnN0cmFjdDohMCxyZW5kZXI6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxuPXRoaXMuJHNsb3RzLmRlZmF1bHQ7aWYobiYmKG49bi5maWx0ZXIoaW8pKS5sZW5ndGgpe3ZhciByPXRoaXMubW9kZSxpPW5bMF07aWYoZnVuY3Rpb24oZSl7Zm9yKDtlPWUucGFyZW50OylpZihlLmRhdGEudHJhbnNpdGlvbilyZXR1cm4hMH0odGhpcy4kdm5vZGUpKXJldHVybiBpO3ZhciBvPXRvKGkpO2lmKCFvKXJldHVybiBpO2lmKHRoaXMuX2xlYXZpbmcpcmV0dXJuIHJvKGUsaSk7dmFyIGE9XCJfX3RyYW5zaXRpb24tXCIrdGhpcy5fdWlkK1wiLVwiO28ua2V5PW51bGw9PW8ua2V5P28uaXNDb21tZW50P2ErXCJjb21tZW50XCI6YStvLnRhZzpzKG8ua2V5KT8wPT09U3RyaW5nKG8ua2V5KS5pbmRleE9mKGEpP28ua2V5OmErby5rZXk6by5rZXk7dmFyIGM9KG8uZGF0YXx8KG8uZGF0YT17fSkpLnRyYW5zaXRpb249bm8odGhpcyksdT10aGlzLl92bm9kZSxsPXRvKHUpO2lmKG8uZGF0YS5kaXJlY3RpdmVzJiZvLmRhdGEuZGlyZWN0aXZlcy5zb21lKG9vKSYmKG8uZGF0YS5zaG93PSEwKSxsJiZsLmRhdGEmJiFmdW5jdGlvbihlLHQpe3JldHVybiB0LmtleT09PWUua2V5JiZ0LnRhZz09PWUudGFnfShvLGwpJiYhSnQobCkmJighbC5jb21wb25lbnRJbnN0YW5jZXx8IWwuY29tcG9uZW50SW5zdGFuY2UuX3Zub2RlLmlzQ29tbWVudCkpe3ZhciBmPWwuZGF0YS50cmFuc2l0aW9uPVQoe30sYyk7aWYoXCJvdXQtaW5cIj09PXIpcmV0dXJuIHRoaXMuX2xlYXZpbmc9ITAsc3QoZixcImFmdGVyTGVhdmVcIixmdW5jdGlvbigpe3QuX2xlYXZpbmc9ITEsdC4kZm9yY2VVcGRhdGUoKX0pLHJvKGUsaSk7aWYoXCJpbi1vdXRcIj09PXIpe2lmKEp0KG8pKXJldHVybiB1O3ZhciBkLHA9ZnVuY3Rpb24oKXtkKCl9O3N0KGMsXCJhZnRlckVudGVyXCIscCksc3QoYyxcImVudGVyQ2FuY2VsbGVkXCIscCksc3QoZixcImRlbGF5TGVhdmVcIixmdW5jdGlvbihlKXtkPWV9KX19cmV0dXJuIGl9fX0sc289VCh7dGFnOlN0cmluZyxtb3ZlQ2xhc3M6U3RyaW5nfSxlbyk7ZnVuY3Rpb24gY28oZSl7ZS5lbG0uX21vdmVDYiYmZS5lbG0uX21vdmVDYigpLGUuZWxtLl9lbnRlckNiJiZlLmVsbS5fZW50ZXJDYigpfWZ1bmN0aW9uIHVvKGUpe2UuZGF0YS5uZXdQb3M9ZS5lbG0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCl9ZnVuY3Rpb24gbG8oZSl7dmFyIHQ9ZS5kYXRhLnBvcyxuPWUuZGF0YS5uZXdQb3Mscj10LmxlZnQtbi5sZWZ0LGk9dC50b3Atbi50b3A7aWYocnx8aSl7ZS5kYXRhLm1vdmVkPSEwO3ZhciBvPWUuZWxtLnN0eWxlO28udHJhbnNmb3JtPW8uV2Via2l0VHJhbnNmb3JtPVwidHJhbnNsYXRlKFwiK3IrXCJweCxcIitpK1wicHgpXCIsby50cmFuc2l0aW9uRHVyYXRpb249XCIwc1wifX1kZWxldGUgc28ubW9kZTt2YXIgZm89e1RyYW5zaXRpb246YW8sVHJhbnNpdGlvbkdyb3VwOntwcm9wczpzbyxiZWZvcmVNb3VudDpmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD10aGlzLl91cGRhdGU7dGhpcy5fdXBkYXRlPWZ1bmN0aW9uKG4scil7dmFyIGk9WXQoZSk7ZS5fX3BhdGNoX18oZS5fdm5vZGUsZS5rZXB0LCExLCEwKSxlLl92bm9kZT1lLmtlcHQsaSgpLHQuY2FsbChlLG4scil9fSxyZW5kZXI6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMudGFnfHx0aGlzLiR2bm9kZS5kYXRhLnRhZ3x8XCJzcGFuXCIsbj1PYmplY3QuY3JlYXRlKG51bGwpLHI9dGhpcy5wcmV2Q2hpbGRyZW49dGhpcy5jaGlsZHJlbixpPXRoaXMuJHNsb3RzLmRlZmF1bHR8fFtdLG89dGhpcy5jaGlsZHJlbj1bXSxhPW5vKHRoaXMpLHM9MDtzPGkubGVuZ3RoO3MrKyl7dmFyIGM9aVtzXTtjLnRhZyYmbnVsbCE9Yy5rZXkmJjAhPT1TdHJpbmcoYy5rZXkpLmluZGV4T2YoXCJfX3ZsaXN0XCIpJiYoby5wdXNoKGMpLG5bYy5rZXldPWMsKGMuZGF0YXx8KGMuZGF0YT17fSkpLnRyYW5zaXRpb249YSl9aWYocil7Zm9yKHZhciB1PVtdLGw9W10sZj0wO2Y8ci5sZW5ndGg7ZisrKXt2YXIgZD1yW2ZdO2QuZGF0YS50cmFuc2l0aW9uPWEsZC5kYXRhLnBvcz1kLmVsbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxuW2Qua2V5XT91LnB1c2goZCk6bC5wdXNoKGQpfXRoaXMua2VwdD1lKHQsbnVsbCx1KSx0aGlzLnJlbW92ZWQ9bH1yZXR1cm4gZSh0LG51bGwsbyl9LHVwZGF0ZWQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByZXZDaGlsZHJlbix0PXRoaXMubW92ZUNsYXNzfHwodGhpcy5uYW1lfHxcInZcIikrXCItbW92ZVwiO2UubGVuZ3RoJiZ0aGlzLmhhc01vdmUoZVswXS5lbG0sdCkmJihlLmZvckVhY2goY28pLGUuZm9yRWFjaCh1byksZS5mb3JFYWNoKGxvKSx0aGlzLl9yZWZsb3c9ZG9jdW1lbnQuYm9keS5vZmZzZXRIZWlnaHQsZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2lmKGUuZGF0YS5tb3ZlZCl7dmFyIG49ZS5lbG0scj1uLnN0eWxlO2ppKG4sdCksci50cmFuc2Zvcm09ci5XZWJraXRUcmFuc2Zvcm09ci50cmFuc2l0aW9uRHVyYXRpb249XCJcIixuLmFkZEV2ZW50TGlzdGVuZXIoQWksbi5fbW92ZUNiPWZ1bmN0aW9uIGUocil7ciYmci50YXJnZXQhPT1ufHxyJiYhL3RyYW5zZm9ybSQvLnRlc3Qoci5wcm9wZXJ0eU5hbWUpfHwobi5yZW1vdmVFdmVudExpc3RlbmVyKEFpLGUpLG4uX21vdmVDYj1udWxsLExpKG4sdCkpfSl9fSkpfSxtZXRob2RzOntoYXNNb3ZlOmZ1bmN0aW9uKGUsdCl7aWYoISRpKXJldHVybiExO2lmKHRoaXMuX2hhc01vdmUpcmV0dXJuIHRoaXMuX2hhc01vdmU7dmFyIG49ZS5jbG9uZU5vZGUoKTtlLl90cmFuc2l0aW9uQ2xhc3NlcyYmZS5fdHJhbnNpdGlvbkNsYXNzZXMuZm9yRWFjaChmdW5jdGlvbihlKXtfaShuLGUpfSksZ2kobix0KSxuLnN0eWxlLmRpc3BsYXk9XCJub25lXCIsdGhpcy4kZWwuYXBwZW5kQ2hpbGQobik7dmFyIHI9TWkobik7cmV0dXJuIHRoaXMuJGVsLnJlbW92ZUNoaWxkKG4pLHRoaXMuX2hhc01vdmU9ci5oYXNUcmFuc2Zvcm19fX19O0NuLmNvbmZpZy5tdXN0VXNlUHJvcD1JbixDbi5jb25maWcuaXNSZXNlcnZlZFRhZz1XbixDbi5jb25maWcuaXNSZXNlcnZlZEF0dHI9am4sQ24uY29uZmlnLmdldFRhZ05hbWVzcGFjZT1HbixDbi5jb25maWcuaXNVbmtub3duRWxlbWVudD1mdW5jdGlvbihlKXtpZighSylyZXR1cm4hMDtpZihXbihlKSlyZXR1cm4hMTtpZihlPWUudG9Mb3dlckNhc2UoKSxudWxsIT1YbltlXSlyZXR1cm4gWG5bZV07dmFyIHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChlKTtyZXR1cm4gZS5pbmRleE9mKFwiLVwiKT4tMT9YbltlXT10LmNvbnN0cnVjdG9yPT09d2luZG93LkhUTUxVbmtub3duRWxlbWVudHx8dC5jb25zdHJ1Y3Rvcj09PXdpbmRvdy5IVE1MRWxlbWVudDpYbltlXT0vSFRNTFVua25vd25FbGVtZW50Ly50ZXN0KHQudG9TdHJpbmcoKSl9LFQoQ24ub3B0aW9ucy5kaXJlY3RpdmVzLFFpKSxUKENuLm9wdGlvbnMuY29tcG9uZW50cyxmbyksQ24ucHJvdG90eXBlLl9fcGF0Y2hfXz1LP1ZpOmosQ24ucHJvdG90eXBlLiRtb3VudD1mdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbihlLHQsbil7dmFyIHI7cmV0dXJuIGUuJGVsPXQsZS4kb3B0aW9ucy5yZW5kZXJ8fChlLiRvcHRpb25zLnJlbmRlcj15ZSksdG4oZSxcImJlZm9yZU1vdW50XCIpLHI9ZnVuY3Rpb24oKXtlLl91cGRhdGUoZS5fcmVuZGVyKCksbil9LG5ldyB2bihlLHIsaix7YmVmb3JlOmZ1bmN0aW9uKCl7ZS5faXNNb3VudGVkJiYhZS5faXNEZXN0cm95ZWQmJnRuKGUsXCJiZWZvcmVVcGRhdGVcIil9fSwhMCksbj0hMSxudWxsPT1lLiR2bm9kZSYmKGUuX2lzTW91bnRlZD0hMCx0bihlLFwibW91bnRlZFwiKSksZX0odGhpcyxlPWUmJks/WW4oZSk6dm9pZCAwLHQpfSxLJiZzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7VS5kZXZ0b29scyYmb2UmJm9lLmVtaXQoXCJpbml0XCIsQ24pfSwwKTt2YXIgcG8sdm89L1xce1xceygoPzoufFxccj9cXG4pKz8pXFx9XFx9L2csaG89L1stLiorP14ke30oKXxbXFxdXFwvXFxcXF0vZyxtbz13KGZ1bmN0aW9uKGUpe3ZhciB0PWVbMF0ucmVwbGFjZShobyxcIlxcXFwkJlwiKSxuPWVbMV0ucmVwbGFjZShobyxcIlxcXFwkJlwiKTtyZXR1cm4gbmV3IFJlZ0V4cCh0K1wiKCg/Oi58XFxcXG4pKz8pXCIrbixcImdcIil9KSx5bz17c3RhdGljS2V5czpbXCJzdGF0aWNDbGFzc1wiXSx0cmFuc2Zvcm1Ob2RlOmZ1bmN0aW9uKGUsdCl7dC53YXJuO3ZhciBuPUZyKGUsXCJjbGFzc1wiKTtuJiYoZS5zdGF0aWNDbGFzcz1KU09OLnN0cmluZ2lmeShuKSk7dmFyIHI9RHIoZSxcImNsYXNzXCIsITEpO3ImJihlLmNsYXNzQmluZGluZz1yKX0sZ2VuRGF0YTpmdW5jdGlvbihlKXt2YXIgdD1cIlwiO3JldHVybiBlLnN0YXRpY0NsYXNzJiYodCs9XCJzdGF0aWNDbGFzczpcIitlLnN0YXRpY0NsYXNzK1wiLFwiKSxlLmNsYXNzQmluZGluZyYmKHQrPVwiY2xhc3M6XCIrZS5jbGFzc0JpbmRpbmcrXCIsXCIpLHR9fSxnbz17c3RhdGljS2V5czpbXCJzdGF0aWNTdHlsZVwiXSx0cmFuc2Zvcm1Ob2RlOmZ1bmN0aW9uKGUsdCl7dC53YXJuO3ZhciBuPUZyKGUsXCJzdHlsZVwiKTtuJiYoZS5zdGF0aWNTdHlsZT1KU09OLnN0cmluZ2lmeShhaShuKSkpO3ZhciByPURyKGUsXCJzdHlsZVwiLCExKTtyJiYoZS5zdHlsZUJpbmRpbmc9cil9LGdlbkRhdGE6ZnVuY3Rpb24oZSl7dmFyIHQ9XCJcIjtyZXR1cm4gZS5zdGF0aWNTdHlsZSYmKHQrPVwic3RhdGljU3R5bGU6XCIrZS5zdGF0aWNTdHlsZStcIixcIiksZS5zdHlsZUJpbmRpbmcmJih0Kz1cInN0eWxlOihcIitlLnN0eWxlQmluZGluZytcIiksXCIpLHR9fSxfbz1oKFwiYXJlYSxiYXNlLGJyLGNvbCxlbWJlZCxmcmFtZSxocixpbWcsaW5wdXQsaXNpbmRleCxrZXlnZW4sbGluayxtZXRhLHBhcmFtLHNvdXJjZSx0cmFjayx3YnJcIiksYm89aChcImNvbGdyb3VwLGRkLGR0LGxpLG9wdGlvbnMscCx0ZCx0Zm9vdCx0aCx0aGVhZCx0cixzb3VyY2VcIiksd289aChcImFkZHJlc3MsYXJ0aWNsZSxhc2lkZSxiYXNlLGJsb2NrcXVvdGUsYm9keSxjYXB0aW9uLGNvbCxjb2xncm91cCxkZCxkZXRhaWxzLGRpYWxvZyxkaXYsZGwsZHQsZmllbGRzZXQsZmlnY2FwdGlvbixmaWd1cmUsZm9vdGVyLGZvcm0saDEsaDIsaDMsaDQsaDUsaDYsaGVhZCxoZWFkZXIsaGdyb3VwLGhyLGh0bWwsbGVnZW5kLGxpLG1lbnVpdGVtLG1ldGEsb3B0Z3JvdXAsb3B0aW9uLHBhcmFtLHJwLHJ0LHNvdXJjZSxzdHlsZSxzdW1tYXJ5LHRib2R5LHRkLHRmb290LHRoLHRoZWFkLHRpdGxlLHRyLHRyYWNrXCIpLCRvPS9eXFxzKihbXlxcc1wiJzw+XFwvPV0rKSg/OlxccyooPSlcXHMqKD86XCIoW15cIl0qKVwiK3wnKFteJ10qKScrfChbXlxcc1wiJz08PmBdKykpKT8vLHhvPS9eXFxzKigoPzp2LVtcXHctXSs6fEB8OnwjKVxcW1tePV0rXFxdW15cXHNcIic8PlxcLz1dKikoPzpcXHMqKD0pXFxzKig/OlwiKFteXCJdKilcIit8JyhbXiddKiknK3woW15cXHNcIic9PD5gXSspKSk/LyxDbz1cIlthLXpBLVpfXVtcXFxcLVxcXFwuMC05X2EtekEtWlwiK0Iuc291cmNlK1wiXSpcIixrbz1cIigoPzpcIitDbytcIlxcXFw6KT9cIitDbytcIilcIixBbz1uZXcgUmVnRXhwKFwiXjxcIitrbyksT289L15cXHMqKFxcLz8pPi8sU289bmV3IFJlZ0V4cChcIl48XFxcXC9cIitrbytcIltePl0qPlwiKSxUbz0vXjwhRE9DVFlQRSBbXj5dKz4vaSxFbz0vXjwhXFwtLS8sam89L148IVxcWy8sTG89aChcInNjcmlwdCxzdHlsZSx0ZXh0YXJlYVwiLCEwKSxJbz17fSxObz17XCImbHQ7XCI6XCI8XCIsXCImZ3Q7XCI6XCI+XCIsXCImcXVvdDtcIjonXCInLFwiJmFtcDtcIjpcIiZcIixcIiYjMTA7XCI6XCJcXG5cIixcIiYjOTtcIjpcIlxcdFwiLFwiJiMzOTtcIjpcIidcIn0sTW89LyYoPzpsdHxndHxxdW90fGFtcHwjMzkpOy9nLERvPS8mKD86bHR8Z3R8cXVvdHxhbXB8IzM5fCMxMHwjOSk7L2csRm89aChcInByZSx0ZXh0YXJlYVwiLCEwKSxQbz1mdW5jdGlvbihlLHQpe3JldHVybiBlJiZGbyhlKSYmXCJcXG5cIj09PXRbMF19O2Z1bmN0aW9uIFJvKGUsdCl7dmFyIG49dD9EbzpNbztyZXR1cm4gZS5yZXBsYWNlKG4sZnVuY3Rpb24oZSl7cmV0dXJuIE5vW2VdfSl9dmFyIFVvLEJvLEhvLFZvLHpvLEpvLEtvLHFvLFdvPS9eQHxedi1vbjovLEdvPS9edi18XkB8XjovLFhvPS8oW1xcc1xcU10qPylcXHMrKD86aW58b2YpXFxzKyhbXFxzXFxTXSopLyxabz0vLChbXixcXH1cXF1dKikoPzosKFteLFxcfVxcXV0qKSk/JC8sWW89L15cXCh8XFwpJC9nLFFvPS9eXFxbLipcXF0kLyxlYT0vOiguKikkLyx0YT0vXjp8XlxcLnxedi1iaW5kOi8sbmE9L1xcLlteLlxcXV0rKD89W15cXF1dKiQpL2cscmE9L152LXNsb3QoOnwkKXxeIy8saWE9L1tcXHJcXG5dLyxvYT0vXFxzKy9nLGFhPXcoZnVuY3Rpb24oZSl7cmV0dXJuKHBvPXBvfHxkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpKS5pbm5lckhUTUw9ZSxwby50ZXh0Q29udGVudH0pLHNhPVwiX2VtcHR5X1wiO2Z1bmN0aW9uIGNhKGUsdCxuKXtyZXR1cm57dHlwZToxLHRhZzplLGF0dHJzTGlzdDp0LGF0dHJzTWFwOnZhKHQpLHJhd0F0dHJzTWFwOnt9LHBhcmVudDpuLGNoaWxkcmVuOltdfX1mdW5jdGlvbiB1YShlLHQpe3ZhciBuLHI7KHI9RHIobj1lLFwia2V5XCIpKSYmKG4ua2V5PXIpLGUucGxhaW49IWUua2V5JiYhZS5zY29wZWRTbG90cyYmIWUuYXR0cnNMaXN0Lmxlbmd0aCxmdW5jdGlvbihlKXt2YXIgdD1EcihlLFwicmVmXCIpO3QmJihlLnJlZj10LGUucmVmSW5Gb3I9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWU7dDspe2lmKHZvaWQgMCE9PXQuZm9yKXJldHVybiEwO3Q9dC5wYXJlbnR9cmV0dXJuITF9KGUpKX0oZSksZnVuY3Rpb24oZSl7dmFyIHQ7XCJ0ZW1wbGF0ZVwiPT09ZS50YWc/KHQ9RnIoZSxcInNjb3BlXCIpLGUuc2xvdFNjb3BlPXR8fEZyKGUsXCJzbG90LXNjb3BlXCIpKToodD1GcihlLFwic2xvdC1zY29wZVwiKSkmJihlLnNsb3RTY29wZT10KTt2YXIgbj1EcihlLFwic2xvdFwiKTtpZihuJiYoZS5zbG90VGFyZ2V0PSdcIlwiJz09PW4/J1wiZGVmYXVsdFwiJzpuLGUuc2xvdFRhcmdldER5bmFtaWM9ISghZS5hdHRyc01hcFtcIjpzbG90XCJdJiYhZS5hdHRyc01hcFtcInYtYmluZDpzbG90XCJdKSxcInRlbXBsYXRlXCI9PT1lLnRhZ3x8ZS5zbG90U2NvcGV8fGpyKGUsXCJzbG90XCIsbixmdW5jdGlvbihlLHQpe3JldHVybiBlLnJhd0F0dHJzTWFwW1wiOlwiK3RdfHxlLnJhd0F0dHJzTWFwW1widi1iaW5kOlwiK3RdfHxlLnJhd0F0dHJzTWFwW3RdfShlLFwic2xvdFwiKSkpLFwidGVtcGxhdGVcIj09PWUudGFnKXt2YXIgcj1QcihlLHJhKTtpZihyKXt2YXIgaT1kYShyKSxvPWkubmFtZSxhPWkuZHluYW1pYztlLnNsb3RUYXJnZXQ9byxlLnNsb3RUYXJnZXREeW5hbWljPWEsZS5zbG90U2NvcGU9ci52YWx1ZXx8c2F9fWVsc2V7dmFyIHM9UHIoZSxyYSk7aWYocyl7dmFyIGM9ZS5zY29wZWRTbG90c3x8KGUuc2NvcGVkU2xvdHM9e30pLHU9ZGEocyksbD11Lm5hbWUsZj11LmR5bmFtaWMsZD1jW2xdPWNhKFwidGVtcGxhdGVcIixbXSxlKTtkLnNsb3RUYXJnZXQ9bCxkLnNsb3RUYXJnZXREeW5hbWljPWYsZC5jaGlsZHJlbj1lLmNoaWxkcmVuLmZpbHRlcihmdW5jdGlvbihlKXtpZighZS5zbG90U2NvcGUpcmV0dXJuIGUucGFyZW50PWQsITB9KSxkLnNsb3RTY29wZT1zLnZhbHVlfHxzYSxlLmNoaWxkcmVuPVtdLGUucGxhaW49ITF9fX0oZSksZnVuY3Rpb24oZSl7XCJzbG90XCI9PT1lLnRhZyYmKGUuc2xvdE5hbWU9RHIoZSxcIm5hbWVcIikpfShlKSxmdW5jdGlvbihlKXt2YXIgdDsodD1EcihlLFwiaXNcIikpJiYoZS5jb21wb25lbnQ9dCksbnVsbCE9RnIoZSxcImlubGluZS10ZW1wbGF0ZVwiKSYmKGUuaW5saW5lVGVtcGxhdGU9ITApfShlKTtmb3IodmFyIGk9MDtpPEhvLmxlbmd0aDtpKyspZT1Ib1tpXShlLHQpfHxlO3JldHVybiBmdW5jdGlvbihlKXt2YXIgdCxuLHIsaSxvLGEscyxjLHU9ZS5hdHRyc0xpc3Q7Zm9yKHQ9MCxuPXUubGVuZ3RoO3Q8bjt0KyspaWYocj1pPXVbdF0ubmFtZSxvPXVbdF0udmFsdWUsR28udGVzdChyKSlpZihlLmhhc0JpbmRpbmdzPSEwLChhPXBhKHIucmVwbGFjZShHbyxcIlwiKSkpJiYocj1yLnJlcGxhY2UobmEsXCJcIikpLHRhLnRlc3Qocikpcj1yLnJlcGxhY2UodGEsXCJcIiksbz1BcihvKSwoYz1Rby50ZXN0KHIpKSYmKHI9ci5zbGljZSgxLC0xKSksYSYmKGEucHJvcCYmIWMmJlwiaW5uZXJIdG1sXCI9PT0ocj14KHIpKSYmKHI9XCJpbm5lckhUTUxcIiksYS5jYW1lbCYmIWMmJihyPXgocikpLGEuc3luYyYmKHM9QnIobyxcIiRldmVudFwiKSxjP01yKGUsJ1widXBkYXRlOlwiKygnK3IrXCIpXCIscyxudWxsLCExLDAsdVt0XSwhMCk6KE1yKGUsXCJ1cGRhdGU6XCIreChyKSxzLG51bGwsITEsMCx1W3RdKSxBKHIpIT09eChyKSYmTXIoZSxcInVwZGF0ZTpcIitBKHIpLHMsbnVsbCwhMSwwLHVbdF0pKSkpLGEmJmEucHJvcHx8IWUuY29tcG9uZW50JiZLbyhlLnRhZyxlLmF0dHJzTWFwLnR5cGUscik/RXIoZSxyLG8sdVt0XSxjKTpqcihlLHIsbyx1W3RdLGMpO2Vsc2UgaWYoV28udGVzdChyKSlyPXIucmVwbGFjZShXbyxcIlwiKSwoYz1Rby50ZXN0KHIpKSYmKHI9ci5zbGljZSgxLC0xKSksTXIoZSxyLG8sYSwhMSwwLHVbdF0sYyk7ZWxzZXt2YXIgbD0ocj1yLnJlcGxhY2UoR28sXCJcIikpLm1hdGNoKGVhKSxmPWwmJmxbMV07Yz0hMSxmJiYocj1yLnNsaWNlKDAsLShmLmxlbmd0aCsxKSksUW8udGVzdChmKSYmKGY9Zi5zbGljZSgxLC0xKSxjPSEwKSksSXIoZSxyLGksbyxmLGMsYSx1W3RdKX1lbHNlIGpyKGUscixKU09OLnN0cmluZ2lmeShvKSx1W3RdKSwhZS5jb21wb25lbnQmJlwibXV0ZWRcIj09PXImJktvKGUudGFnLGUuYXR0cnNNYXAudHlwZSxyKSYmRXIoZSxyLFwidHJ1ZVwiLHVbdF0pfShlKSxlfWZ1bmN0aW9uIGxhKGUpe3ZhciB0O2lmKHQ9RnIoZSxcInYtZm9yXCIpKXt2YXIgbj1mdW5jdGlvbihlKXt2YXIgdD1lLm1hdGNoKFhvKTtpZih0KXt2YXIgbj17fTtuLmZvcj10WzJdLnRyaW0oKTt2YXIgcj10WzFdLnRyaW0oKS5yZXBsYWNlKFlvLFwiXCIpLGk9ci5tYXRjaChabyk7cmV0dXJuIGk/KG4uYWxpYXM9ci5yZXBsYWNlKFpvLFwiXCIpLnRyaW0oKSxuLml0ZXJhdG9yMT1pWzFdLnRyaW0oKSxpWzJdJiYobi5pdGVyYXRvcjI9aVsyXS50cmltKCkpKTpuLmFsaWFzPXIsbn19KHQpO24mJlQoZSxuKX19ZnVuY3Rpb24gZmEoZSx0KXtlLmlmQ29uZGl0aW9uc3x8KGUuaWZDb25kaXRpb25zPVtdKSxlLmlmQ29uZGl0aW9ucy5wdXNoKHQpfWZ1bmN0aW9uIGRhKGUpe3ZhciB0PWUubmFtZS5yZXBsYWNlKHJhLFwiXCIpO3JldHVybiB0fHxcIiNcIiE9PWUubmFtZVswXSYmKHQ9XCJkZWZhdWx0XCIpLFFvLnRlc3QodCk/e25hbWU6dC5zbGljZSgxLC0xKSxkeW5hbWljOiEwfTp7bmFtZTonXCInK3QrJ1wiJyxkeW5hbWljOiExfX1mdW5jdGlvbiBwYShlKXt2YXIgdD1lLm1hdGNoKG5hKTtpZih0KXt2YXIgbj17fTtyZXR1cm4gdC5mb3JFYWNoKGZ1bmN0aW9uKGUpe25bZS5zbGljZSgxKV09ITB9KSxufX1mdW5jdGlvbiB2YShlKXtmb3IodmFyIHQ9e30sbj0wLHI9ZS5sZW5ndGg7bjxyO24rKyl0W2Vbbl0ubmFtZV09ZVtuXS52YWx1ZTtyZXR1cm4gdH12YXIgaGE9L154bWxuczpOU1xcZCsvLG1hPS9eTlNcXGQrOi87ZnVuY3Rpb24geWEoZSl7cmV0dXJuIGNhKGUudGFnLGUuYXR0cnNMaXN0LnNsaWNlKCksZS5wYXJlbnQpfXZhciBnYSxfYSxiYT1beW8sZ28se3ByZVRyYW5zZm9ybU5vZGU6ZnVuY3Rpb24oZSx0KXtpZihcImlucHV0XCI9PT1lLnRhZyl7dmFyIG4scj1lLmF0dHJzTWFwO2lmKCFyW1widi1tb2RlbFwiXSlyZXR1cm47aWYoKHJbXCI6dHlwZVwiXXx8cltcInYtYmluZDp0eXBlXCJdKSYmKG49RHIoZSxcInR5cGVcIikpLHIudHlwZXx8bnx8IXJbXCJ2LWJpbmRcIl18fChuPVwiKFwiK3JbXCJ2LWJpbmRcIl0rXCIpLnR5cGVcIiksbil7dmFyIGk9RnIoZSxcInYtaWZcIiwhMCksbz1pP1wiJiYoXCIraStcIilcIjpcIlwiLGE9bnVsbCE9RnIoZSxcInYtZWxzZVwiLCEwKSxzPUZyKGUsXCJ2LWVsc2UtaWZcIiwhMCksYz15YShlKTtsYShjKSxMcihjLFwidHlwZVwiLFwiY2hlY2tib3hcIiksdWEoYyx0KSxjLnByb2Nlc3NlZD0hMCxjLmlmPVwiKFwiK24rXCIpPT09J2NoZWNrYm94J1wiK28sZmEoYyx7ZXhwOmMuaWYsYmxvY2s6Y30pO3ZhciB1PXlhKGUpO0ZyKHUsXCJ2LWZvclwiLCEwKSxMcih1LFwidHlwZVwiLFwicmFkaW9cIiksdWEodSx0KSxmYShjLHtleHA6XCIoXCIrbitcIik9PT0ncmFkaW8nXCIrbyxibG9jazp1fSk7dmFyIGw9eWEoZSk7cmV0dXJuIEZyKGwsXCJ2LWZvclwiLCEwKSxMcihsLFwiOnR5cGVcIixuKSx1YShsLHQpLGZhKGMse2V4cDppLGJsb2NrOmx9KSxhP2MuZWxzZT0hMDpzJiYoYy5lbHNlaWY9cyksY319fX1dLHdhPXtleHBlY3RIVE1MOiEwLG1vZHVsZXM6YmEsZGlyZWN0aXZlczp7bW9kZWw6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXQudmFsdWUsaT10Lm1vZGlmaWVycyxvPWUudGFnLGE9ZS5hdHRyc01hcC50eXBlO2lmKGUuY29tcG9uZW50KXJldHVybiBVcihlLHIsaSksITE7aWYoXCJzZWxlY3RcIj09PW8pIWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj0ndmFyICQkc2VsZWN0ZWRWYWwgPSBBcnJheS5wcm90b3R5cGUuZmlsdGVyLmNhbGwoJGV2ZW50LnRhcmdldC5vcHRpb25zLGZ1bmN0aW9uKG8pe3JldHVybiBvLnNlbGVjdGVkfSkubWFwKGZ1bmN0aW9uKG8pe3ZhciB2YWwgPSBcIl92YWx1ZVwiIGluIG8gPyBvLl92YWx1ZSA6IG8udmFsdWU7cmV0dXJuICcrKGkmJmkubnVtYmVyP1wiX24odmFsKVwiOlwidmFsXCIpK1wifSk7XCI7TXIoZSxcImNoYW5nZVwiLHI9citcIiBcIitCcih0LFwiJGV2ZW50LnRhcmdldC5tdWx0aXBsZSA/ICQkc2VsZWN0ZWRWYWwgOiAkJHNlbGVjdGVkVmFsWzBdXCIpLG51bGwsITApfShlLHIpO2Vsc2UgaWYoXCJpbnB1dFwiPT09byYmXCJjaGVja2JveFwiPT09YSkhZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4mJm4ubnVtYmVyLGk9RHIoZSxcInZhbHVlXCIpfHxcIm51bGxcIixvPURyKGUsXCJ0cnVlLXZhbHVlXCIpfHxcInRydWVcIixhPURyKGUsXCJmYWxzZS12YWx1ZVwiKXx8XCJmYWxzZVwiO0VyKGUsXCJjaGVja2VkXCIsXCJBcnJheS5pc0FycmF5KFwiK3QrXCIpP19pKFwiK3QrXCIsXCIraStcIik+LTFcIisoXCJ0cnVlXCI9PT1vP1wiOihcIit0K1wiKVwiOlwiOl9xKFwiK3QrXCIsXCIrbytcIilcIikpLE1yKGUsXCJjaGFuZ2VcIixcInZhciAkJGE9XCIrdCtcIiwkJGVsPSRldmVudC50YXJnZXQsJCRjPSQkZWwuY2hlY2tlZD8oXCIrbytcIik6KFwiK2ErXCIpO2lmKEFycmF5LmlzQXJyYXkoJCRhKSl7dmFyICQkdj1cIisocj9cIl9uKFwiK2krXCIpXCI6aSkrXCIsJCRpPV9pKCQkYSwkJHYpO2lmKCQkZWwuY2hlY2tlZCl7JCRpPDAmJihcIitCcih0LFwiJCRhLmNvbmNhdChbJCR2XSlcIikrXCIpfWVsc2V7JCRpPi0xJiYoXCIrQnIodCxcIiQkYS5zbGljZSgwLCQkaSkuY29uY2F0KCQkYS5zbGljZSgkJGkrMSkpXCIpK1wiKX19ZWxzZXtcIitCcih0LFwiJCRjXCIpK1wifVwiLG51bGwsITApfShlLHIsaSk7ZWxzZSBpZihcImlucHV0XCI9PT1vJiZcInJhZGlvXCI9PT1hKSFmdW5jdGlvbihlLHQsbil7dmFyIHI9biYmbi5udW1iZXIsaT1EcihlLFwidmFsdWVcIil8fFwibnVsbFwiO0VyKGUsXCJjaGVja2VkXCIsXCJfcShcIit0K1wiLFwiKyhpPXI/XCJfbihcIitpK1wiKVwiOmkpK1wiKVwiKSxNcihlLFwiY2hhbmdlXCIsQnIodCxpKSxudWxsLCEwKX0oZSxyLGkpO2Vsc2UgaWYoXCJpbnB1dFwiPT09b3x8XCJ0ZXh0YXJlYVwiPT09bykhZnVuY3Rpb24oZSx0LG4pe3ZhciByPWUuYXR0cnNNYXAudHlwZSxpPW58fHt9LG89aS5sYXp5LGE9aS5udW1iZXIscz1pLnRyaW0sYz0hbyYmXCJyYW5nZVwiIT09cix1PW8/XCJjaGFuZ2VcIjpcInJhbmdlXCI9PT1yP1dyOlwiaW5wdXRcIixsPVwiJGV2ZW50LnRhcmdldC52YWx1ZVwiO3MmJihsPVwiJGV2ZW50LnRhcmdldC52YWx1ZS50cmltKClcIiksYSYmKGw9XCJfbihcIitsK1wiKVwiKTt2YXIgZj1Ccih0LGwpO2MmJihmPVwiaWYoJGV2ZW50LnRhcmdldC5jb21wb3NpbmcpcmV0dXJuO1wiK2YpLEVyKGUsXCJ2YWx1ZVwiLFwiKFwiK3QrXCIpXCIpLE1yKGUsdSxmLG51bGwsITApLChzfHxhKSYmTXIoZSxcImJsdXJcIixcIiRmb3JjZVVwZGF0ZSgpXCIpfShlLHIsaSk7ZWxzZSBpZighVS5pc1Jlc2VydmVkVGFnKG8pKXJldHVybiBVcihlLHIsaSksITE7cmV0dXJuITB9LHRleHQ6ZnVuY3Rpb24oZSx0KXt0LnZhbHVlJiZFcihlLFwidGV4dENvbnRlbnRcIixcIl9zKFwiK3QudmFsdWUrXCIpXCIsdCl9LGh0bWw6ZnVuY3Rpb24oZSx0KXt0LnZhbHVlJiZFcihlLFwiaW5uZXJIVE1MXCIsXCJfcyhcIit0LnZhbHVlK1wiKVwiLHQpfX0saXNQcmVUYWc6ZnVuY3Rpb24oZSl7cmV0dXJuXCJwcmVcIj09PWV9LGlzVW5hcnlUYWc6X28sbXVzdFVzZVByb3A6SW4sY2FuQmVMZWZ0T3BlblRhZzpibyxpc1Jlc2VydmVkVGFnOlduLGdldFRhZ05hbWVzcGFjZTpHbixzdGF0aWNLZXlzOmJhLnJlZHVjZShmdW5jdGlvbihlLHQpe3JldHVybiBlLmNvbmNhdCh0LnN0YXRpY0tleXN8fFtdKX0sW10pLmpvaW4oXCIsXCIpfSwkYT13KGZ1bmN0aW9uKGUpe3JldHVybiBoKFwidHlwZSx0YWcsYXR0cnNMaXN0LGF0dHJzTWFwLHBsYWluLHBhcmVudCxjaGlsZHJlbixhdHRycyxzdGFydCxlbmQscmF3QXR0cnNNYXBcIisoZT9cIixcIitlOlwiXCIpKX0pO3ZhciB4YT0vXihbXFx3JF9dK3xcXChbXildKj9cXCkpXFxzKj0+fF5mdW5jdGlvblxccyooPzpbXFx3JF0rKT9cXHMqXFwoLyxDYT0vXFwoW14pXSo/XFwpOyokLyxrYT0vXltBLVphLXpfJF1bXFx3JF0qKD86XFwuW0EtWmEtel8kXVtcXHckXSp8XFxbJ1teJ10qPyddfFxcW1wiW15cIl0qP1wiXXxcXFtcXGQrXXxcXFtbQS1aYS16XyRdW1xcdyRdKl0pKiQvLEFhPXtlc2M6MjcsdGFiOjksZW50ZXI6MTMsc3BhY2U6MzIsdXA6MzgsbGVmdDozNyxyaWdodDozOSxkb3duOjQwLGRlbGV0ZTpbOCw0Nl19LE9hPXtlc2M6W1wiRXNjXCIsXCJFc2NhcGVcIl0sdGFiOlwiVGFiXCIsZW50ZXI6XCJFbnRlclwiLHNwYWNlOltcIiBcIixcIlNwYWNlYmFyXCJdLHVwOltcIlVwXCIsXCJBcnJvd1VwXCJdLGxlZnQ6W1wiTGVmdFwiLFwiQXJyb3dMZWZ0XCJdLHJpZ2h0OltcIlJpZ2h0XCIsXCJBcnJvd1JpZ2h0XCJdLGRvd246W1wiRG93blwiLFwiQXJyb3dEb3duXCJdLGRlbGV0ZTpbXCJCYWNrc3BhY2VcIixcIkRlbGV0ZVwiLFwiRGVsXCJdfSxTYT1mdW5jdGlvbihlKXtyZXR1cm5cImlmKFwiK2UrXCIpcmV0dXJuIG51bGw7XCJ9LFRhPXtzdG9wOlwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1wiLHByZXZlbnQ6XCIkZXZlbnQucHJldmVudERlZmF1bHQoKTtcIixzZWxmOlNhKFwiJGV2ZW50LnRhcmdldCAhPT0gJGV2ZW50LmN1cnJlbnRUYXJnZXRcIiksY3RybDpTYShcIiEkZXZlbnQuY3RybEtleVwiKSxzaGlmdDpTYShcIiEkZXZlbnQuc2hpZnRLZXlcIiksYWx0OlNhKFwiISRldmVudC5hbHRLZXlcIiksbWV0YTpTYShcIiEkZXZlbnQubWV0YUtleVwiKSxsZWZ0OlNhKFwiJ2J1dHRvbicgaW4gJGV2ZW50ICYmICRldmVudC5idXR0b24gIT09IDBcIiksbWlkZGxlOlNhKFwiJ2J1dHRvbicgaW4gJGV2ZW50ICYmICRldmVudC5idXR0b24gIT09IDFcIikscmlnaHQ6U2EoXCInYnV0dG9uJyBpbiAkZXZlbnQgJiYgJGV2ZW50LmJ1dHRvbiAhPT0gMlwiKX07ZnVuY3Rpb24gRWEoZSx0KXt2YXIgbj10P1wibmF0aXZlT246XCI6XCJvbjpcIixyPVwiXCIsaT1cIlwiO2Zvcih2YXIgbyBpbiBlKXt2YXIgYT1qYShlW29dKTtlW29dJiZlW29dLmR5bmFtaWM/aSs9bytcIixcIithK1wiLFwiOnIrPSdcIicrbysnXCI6JythK1wiLFwifXJldHVybiByPVwie1wiK3Iuc2xpY2UoMCwtMSkrXCJ9XCIsaT9uK1wiX2QoXCIrcitcIixbXCIraS5zbGljZSgwLC0xKStcIl0pXCI6bityfWZ1bmN0aW9uIGphKGUpe2lmKCFlKXJldHVyblwiZnVuY3Rpb24oKXt9XCI7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm5cIltcIitlLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gamEoZSl9KS5qb2luKFwiLFwiKStcIl1cIjt2YXIgdD1rYS50ZXN0KGUudmFsdWUpLG49eGEudGVzdChlLnZhbHVlKSxyPWthLnRlc3QoZS52YWx1ZS5yZXBsYWNlKENhLFwiXCIpKTtpZihlLm1vZGlmaWVycyl7dmFyIGk9XCJcIixvPVwiXCIsYT1bXTtmb3IodmFyIHMgaW4gZS5tb2RpZmllcnMpaWYoVGFbc10pbys9VGFbc10sQWFbc10mJmEucHVzaChzKTtlbHNlIGlmKFwiZXhhY3RcIj09PXMpe3ZhciBjPWUubW9kaWZpZXJzO28rPVNhKFtcImN0cmxcIixcInNoaWZ0XCIsXCJhbHRcIixcIm1ldGFcIl0uZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiFjW2VdfSkubWFwKGZ1bmN0aW9uKGUpe3JldHVyblwiJGV2ZW50LlwiK2UrXCJLZXlcIn0pLmpvaW4oXCJ8fFwiKSl9ZWxzZSBhLnB1c2gocyk7cmV0dXJuIGEubGVuZ3RoJiYoaSs9XCJpZighJGV2ZW50LnR5cGUuaW5kZXhPZigna2V5JykmJlwiK2EubWFwKExhKS5qb2luKFwiJiZcIikrXCIpcmV0dXJuIG51bGw7XCIpLG8mJihpKz1vKSxcImZ1bmN0aW9uKCRldmVudCl7XCIraSsodD9cInJldHVybiBcIitlLnZhbHVlK1wiKCRldmVudClcIjpuP1wicmV0dXJuIChcIitlLnZhbHVlK1wiKSgkZXZlbnQpXCI6cj9cInJldHVybiBcIitlLnZhbHVlOmUudmFsdWUpK1wifVwifXJldHVybiB0fHxuP2UudmFsdWU6XCJmdW5jdGlvbigkZXZlbnQpe1wiKyhyP1wicmV0dXJuIFwiK2UudmFsdWU6ZS52YWx1ZSkrXCJ9XCJ9ZnVuY3Rpb24gTGEoZSl7dmFyIHQ9cGFyc2VJbnQoZSwxMCk7aWYodClyZXR1cm5cIiRldmVudC5rZXlDb2RlIT09XCIrdDt2YXIgbj1BYVtlXSxyPU9hW2VdO3JldHVyblwiX2soJGV2ZW50LmtleUNvZGUsXCIrSlNPTi5zdHJpbmdpZnkoZSkrXCIsXCIrSlNPTi5zdHJpbmdpZnkobikrXCIsJGV2ZW50LmtleSxcIitKU09OLnN0cmluZ2lmeShyKStcIilcIn12YXIgSWE9e29uOmZ1bmN0aW9uKGUsdCl7ZS53cmFwTGlzdGVuZXJzPWZ1bmN0aW9uKGUpe3JldHVyblwiX2coXCIrZStcIixcIit0LnZhbHVlK1wiKVwifX0sYmluZDpmdW5jdGlvbihlLHQpe2Uud3JhcERhdGE9ZnVuY3Rpb24obil7cmV0dXJuXCJfYihcIituK1wiLCdcIitlLnRhZytcIicsXCIrdC52YWx1ZStcIixcIisodC5tb2RpZmllcnMmJnQubW9kaWZpZXJzLnByb3A/XCJ0cnVlXCI6XCJmYWxzZVwiKSsodC5tb2RpZmllcnMmJnQubW9kaWZpZXJzLnN5bmM/XCIsdHJ1ZVwiOlwiXCIpK1wiKVwifX0sY2xvYWs6an0sTmE9ZnVuY3Rpb24oZSl7dGhpcy5vcHRpb25zPWUsdGhpcy53YXJuPWUud2Fybnx8U3IsdGhpcy50cmFuc2Zvcm1zPVRyKGUubW9kdWxlcyxcInRyYW5zZm9ybUNvZGVcIiksdGhpcy5kYXRhR2VuRm5zPVRyKGUubW9kdWxlcyxcImdlbkRhdGFcIiksdGhpcy5kaXJlY3RpdmVzPVQoVCh7fSxJYSksZS5kaXJlY3RpdmVzKTt2YXIgdD1lLmlzUmVzZXJ2ZWRUYWd8fEw7dGhpcy5tYXliZUNvbXBvbmVudD1mdW5jdGlvbihlKXtyZXR1cm4hIWUuY29tcG9uZW50fHwhdChlLnRhZyl9LHRoaXMub25jZUlkPTAsdGhpcy5zdGF0aWNSZW5kZXJGbnM9W10sdGhpcy5wcmU9ITF9O2Z1bmN0aW9uIE1hKGUsdCl7dmFyIG49bmV3IE5hKHQpO3JldHVybntyZW5kZXI6XCJ3aXRoKHRoaXMpe3JldHVybiBcIisoZT9EYShlLG4pOidfYyhcImRpdlwiKScpK1wifVwiLHN0YXRpY1JlbmRlckZuczpuLnN0YXRpY1JlbmRlckZuc319ZnVuY3Rpb24gRGEoZSx0KXtpZihlLnBhcmVudCYmKGUucHJlPWUucHJlfHxlLnBhcmVudC5wcmUpLGUuc3RhdGljUm9vdCYmIWUuc3RhdGljUHJvY2Vzc2VkKXJldHVybiBGYShlLHQpO2lmKGUub25jZSYmIWUub25jZVByb2Nlc3NlZClyZXR1cm4gUGEoZSx0KTtpZihlLmZvciYmIWUuZm9yUHJvY2Vzc2VkKXJldHVybiBVYShlLHQpO2lmKGUuaWYmJiFlLmlmUHJvY2Vzc2VkKXJldHVybiBSYShlLHQpO2lmKFwidGVtcGxhdGVcIiE9PWUudGFnfHxlLnNsb3RUYXJnZXR8fHQucHJlKXtpZihcInNsb3RcIj09PWUudGFnKXJldHVybiBmdW5jdGlvbihlLHQpe3ZhciBuPWUuc2xvdE5hbWV8fCdcImRlZmF1bHRcIicscj16YShlLHQpLGk9XCJfdChcIituKyhyP1wiLFwiK3I6XCJcIiksbz1lLmF0dHJzfHxlLmR5bmFtaWNBdHRycz9xYSgoZS5hdHRyc3x8W10pLmNvbmNhdChlLmR5bmFtaWNBdHRyc3x8W10pLm1hcChmdW5jdGlvbihlKXtyZXR1cm57bmFtZTp4KGUubmFtZSksdmFsdWU6ZS52YWx1ZSxkeW5hbWljOmUuZHluYW1pY319KSk6bnVsbCxhPWUuYXR0cnNNYXBbXCJ2LWJpbmRcIl07cmV0dXJuIW8mJiFhfHxyfHwoaSs9XCIsbnVsbFwiKSxvJiYoaSs9XCIsXCIrbyksYSYmKGkrPShvP1wiXCI6XCIsbnVsbFwiKStcIixcIithKSxpK1wiKVwifShlLHQpO3ZhciBuO2lmKGUuY29tcG9uZW50KW49ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXQuaW5saW5lVGVtcGxhdGU/bnVsbDp6YSh0LG4sITApO3JldHVyblwiX2MoXCIrZStcIixcIitCYSh0LG4pKyhyP1wiLFwiK3I6XCJcIikrXCIpXCJ9KGUuY29tcG9uZW50LGUsdCk7ZWxzZXt2YXIgcjsoIWUucGxhaW58fGUucHJlJiZ0Lm1heWJlQ29tcG9uZW50KGUpKSYmKHI9QmEoZSx0KSk7dmFyIGk9ZS5pbmxpbmVUZW1wbGF0ZT9udWxsOnphKGUsdCwhMCk7bj1cIl9jKCdcIitlLnRhZytcIidcIisocj9cIixcIityOlwiXCIpKyhpP1wiLFwiK2k6XCJcIikrXCIpXCJ9Zm9yKHZhciBvPTA7bzx0LnRyYW5zZm9ybXMubGVuZ3RoO28rKyluPXQudHJhbnNmb3Jtc1tvXShlLG4pO3JldHVybiBufXJldHVybiB6YShlLHQpfHxcInZvaWQgMFwifWZ1bmN0aW9uIEZhKGUsdCl7ZS5zdGF0aWNQcm9jZXNzZWQ9ITA7dmFyIG49dC5wcmU7cmV0dXJuIGUucHJlJiYodC5wcmU9ZS5wcmUpLHQuc3RhdGljUmVuZGVyRm5zLnB1c2goXCJ3aXRoKHRoaXMpe3JldHVybiBcIitEYShlLHQpK1wifVwiKSx0LnByZT1uLFwiX20oXCIrKHQuc3RhdGljUmVuZGVyRm5zLmxlbmd0aC0xKSsoZS5zdGF0aWNJbkZvcj9cIix0cnVlXCI6XCJcIikrXCIpXCJ9ZnVuY3Rpb24gUGEoZSx0KXtpZihlLm9uY2VQcm9jZXNzZWQ9ITAsZS5pZiYmIWUuaWZQcm9jZXNzZWQpcmV0dXJuIFJhKGUsdCk7aWYoZS5zdGF0aWNJbkZvcil7Zm9yKHZhciBuPVwiXCIscj1lLnBhcmVudDtyOyl7aWYoci5mb3Ipe249ci5rZXk7YnJlYWt9cj1yLnBhcmVudH1yZXR1cm4gbj9cIl9vKFwiK0RhKGUsdCkrXCIsXCIrdC5vbmNlSWQrKytcIixcIituK1wiKVwiOkRhKGUsdCl9cmV0dXJuIEZhKGUsdCl9ZnVuY3Rpb24gUmEoZSx0LG4scil7cmV0dXJuIGUuaWZQcm9jZXNzZWQ9ITAsZnVuY3Rpb24gZSh0LG4scixpKXtpZighdC5sZW5ndGgpcmV0dXJuIGl8fFwiX2UoKVwiO3ZhciBvPXQuc2hpZnQoKTtyZXR1cm4gby5leHA/XCIoXCIrby5leHArXCIpP1wiK2Eoby5ibG9jaykrXCI6XCIrZSh0LG4scixpKTpcIlwiK2Eoby5ibG9jayk7ZnVuY3Rpb24gYShlKXtyZXR1cm4gcj9yKGUsbik6ZS5vbmNlP1BhKGUsbik6RGEoZSxuKX19KGUuaWZDb25kaXRpb25zLnNsaWNlKCksdCxuLHIpfWZ1bmN0aW9uIFVhKGUsdCxuLHIpe3ZhciBpPWUuZm9yLG89ZS5hbGlhcyxhPWUuaXRlcmF0b3IxP1wiLFwiK2UuaXRlcmF0b3IxOlwiXCIscz1lLml0ZXJhdG9yMj9cIixcIitlLml0ZXJhdG9yMjpcIlwiO3JldHVybiBlLmZvclByb2Nlc3NlZD0hMCwocnx8XCJfbFwiKStcIigoXCIraStcIiksZnVuY3Rpb24oXCIrbythK3MrXCIpe3JldHVybiBcIisobnx8RGEpKGUsdCkrXCJ9KVwifWZ1bmN0aW9uIEJhKGUsdCl7dmFyIG49XCJ7XCIscj1mdW5jdGlvbihlLHQpe3ZhciBuPWUuZGlyZWN0aXZlcztpZihuKXt2YXIgcixpLG8sYSxzPVwiZGlyZWN0aXZlczpbXCIsYz0hMTtmb3Iocj0wLGk9bi5sZW5ndGg7cjxpO3IrKyl7bz1uW3JdLGE9ITA7dmFyIHU9dC5kaXJlY3RpdmVzW28ubmFtZV07dSYmKGE9ISF1KGUsbyx0Lndhcm4pKSxhJiYoYz0hMCxzKz0ne25hbWU6XCInK28ubmFtZSsnXCIscmF3TmFtZTpcIicrby5yYXdOYW1lKydcIicrKG8udmFsdWU/XCIsdmFsdWU6KFwiK28udmFsdWUrXCIpLGV4cHJlc3Npb246XCIrSlNPTi5zdHJpbmdpZnkoby52YWx1ZSk6XCJcIikrKG8uYXJnP1wiLGFyZzpcIisoby5pc0R5bmFtaWNBcmc/by5hcmc6J1wiJytvLmFyZysnXCInKTpcIlwiKSsoby5tb2RpZmllcnM/XCIsbW9kaWZpZXJzOlwiK0pTT04uc3RyaW5naWZ5KG8ubW9kaWZpZXJzKTpcIlwiKStcIn0sXCIpfXJldHVybiBjP3Muc2xpY2UoMCwtMSkrXCJdXCI6dm9pZCAwfX0oZSx0KTtyJiYobis9citcIixcIiksZS5rZXkmJihuKz1cImtleTpcIitlLmtleStcIixcIiksZS5yZWYmJihuKz1cInJlZjpcIitlLnJlZitcIixcIiksZS5yZWZJbkZvciYmKG4rPVwicmVmSW5Gb3I6dHJ1ZSxcIiksZS5wcmUmJihuKz1cInByZTp0cnVlLFwiKSxlLmNvbXBvbmVudCYmKG4rPSd0YWc6XCInK2UudGFnKydcIiwnKTtmb3IodmFyIGk9MDtpPHQuZGF0YUdlbkZucy5sZW5ndGg7aSsrKW4rPXQuZGF0YUdlbkZuc1tpXShlKTtpZihlLmF0dHJzJiYobis9XCJhdHRyczpcIitxYShlLmF0dHJzKStcIixcIiksZS5wcm9wcyYmKG4rPVwiZG9tUHJvcHM6XCIrcWEoZS5wcm9wcykrXCIsXCIpLGUuZXZlbnRzJiYobis9RWEoZS5ldmVudHMsITEpK1wiLFwiKSxlLm5hdGl2ZUV2ZW50cyYmKG4rPUVhKGUubmF0aXZlRXZlbnRzLCEwKStcIixcIiksZS5zbG90VGFyZ2V0JiYhZS5zbG90U2NvcGUmJihuKz1cInNsb3Q6XCIrZS5zbG90VGFyZ2V0K1wiLFwiKSxlLnNjb3BlZFNsb3RzJiYobis9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWUuZm9yfHxPYmplY3Qua2V5cyh0KS5zb21lKGZ1bmN0aW9uKGUpe3ZhciBuPXRbZV07cmV0dXJuIG4uc2xvdFRhcmdldER5bmFtaWN8fG4uaWZ8fG4uZm9yfHxIYShuKX0pLGk9ISFlLmlmO2lmKCFyKWZvcih2YXIgbz1lLnBhcmVudDtvOyl7aWYoby5zbG90U2NvcGUmJm8uc2xvdFNjb3BlIT09c2F8fG8uZm9yKXtyPSEwO2JyZWFrfW8uaWYmJihpPSEwKSxvPW8ucGFyZW50fXZhciBhPU9iamVjdC5rZXlzKHQpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gVmEodFtlXSxuKX0pLmpvaW4oXCIsXCIpO3JldHVyblwic2NvcGVkU2xvdHM6X3UoW1wiK2ErXCJdXCIrKHI/XCIsbnVsbCx0cnVlXCI6XCJcIikrKCFyJiZpP1wiLG51bGwsZmFsc2UsXCIrZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTUzODEsbj1lLmxlbmd0aDtuOyl0PTMzKnReZS5jaGFyQ29kZUF0KC0tbik7cmV0dXJuIHQ+Pj4wfShhKTpcIlwiKStcIilcIn0oZSxlLnNjb3BlZFNsb3RzLHQpK1wiLFwiKSxlLm1vZGVsJiYobis9XCJtb2RlbDp7dmFsdWU6XCIrZS5tb2RlbC52YWx1ZStcIixjYWxsYmFjazpcIitlLm1vZGVsLmNhbGxiYWNrK1wiLGV4cHJlc3Npb246XCIrZS5tb2RlbC5leHByZXNzaW9uK1wifSxcIiksZS5pbmxpbmVUZW1wbGF0ZSl7dmFyIG89ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmNoaWxkcmVuWzBdO2lmKG4mJjE9PT1uLnR5cGUpe3ZhciByPU1hKG4sdC5vcHRpb25zKTtyZXR1cm5cImlubGluZVRlbXBsYXRlOntyZW5kZXI6ZnVuY3Rpb24oKXtcIityLnJlbmRlcitcIn0sc3RhdGljUmVuZGVyRm5zOltcIityLnN0YXRpY1JlbmRlckZucy5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuXCJmdW5jdGlvbigpe1wiK2UrXCJ9XCJ9KS5qb2luKFwiLFwiKStcIl19XCJ9fShlLHQpO28mJihuKz1vK1wiLFwiKX1yZXR1cm4gbj1uLnJlcGxhY2UoLywkLyxcIlwiKStcIn1cIixlLmR5bmFtaWNBdHRycyYmKG49XCJfYihcIituKycsXCInK2UudGFnKydcIiwnK3FhKGUuZHluYW1pY0F0dHJzKStcIilcIiksZS53cmFwRGF0YSYmKG49ZS53cmFwRGF0YShuKSksZS53cmFwTGlzdGVuZXJzJiYobj1lLndyYXBMaXN0ZW5lcnMobikpLG59ZnVuY3Rpb24gSGEoZSl7cmV0dXJuIDE9PT1lLnR5cGUmJihcInNsb3RcIj09PWUudGFnfHxlLmNoaWxkcmVuLnNvbWUoSGEpKX1mdW5jdGlvbiBWYShlLHQpe3ZhciBuPWUuYXR0cnNNYXBbXCJzbG90LXNjb3BlXCJdO2lmKGUuaWYmJiFlLmlmUHJvY2Vzc2VkJiYhbilyZXR1cm4gUmEoZSx0LFZhLFwibnVsbFwiKTtpZihlLmZvciYmIWUuZm9yUHJvY2Vzc2VkKXJldHVybiBVYShlLHQsVmEpO3ZhciByPWUuc2xvdFNjb3BlPT09c2E/XCJcIjpTdHJpbmcoZS5zbG90U2NvcGUpLGk9XCJmdW5jdGlvbihcIityK1wiKXtyZXR1cm4gXCIrKFwidGVtcGxhdGVcIj09PWUudGFnP2UuaWYmJm4/XCIoXCIrZS5pZitcIik/XCIrKHphKGUsdCl8fFwidW5kZWZpbmVkXCIpK1wiOnVuZGVmaW5lZFwiOnphKGUsdCl8fFwidW5kZWZpbmVkXCI6RGEoZSx0KSkrXCJ9XCIsbz1yP1wiXCI6XCIscHJveHk6dHJ1ZVwiO3JldHVyblwie2tleTpcIisoZS5zbG90VGFyZ2V0fHwnXCJkZWZhdWx0XCInKStcIixmbjpcIitpK28rXCJ9XCJ9ZnVuY3Rpb24gemEoZSx0LG4scixpKXt2YXIgbz1lLmNoaWxkcmVuO2lmKG8ubGVuZ3RoKXt2YXIgYT1vWzBdO2lmKDE9PT1vLmxlbmd0aCYmYS5mb3ImJlwidGVtcGxhdGVcIiE9PWEudGFnJiZcInNsb3RcIiE9PWEudGFnKXt2YXIgcz1uP3QubWF5YmVDb21wb25lbnQoYSk/XCIsMVwiOlwiLDBcIjpcIlwiO3JldHVyblwiXCIrKHJ8fERhKShhLHQpK3N9dmFyIGM9bj9mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0wLHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIGk9ZVtyXTtpZigxPT09aS50eXBlKXtpZihKYShpKXx8aS5pZkNvbmRpdGlvbnMmJmkuaWZDb25kaXRpb25zLnNvbWUoZnVuY3Rpb24oZSl7cmV0dXJuIEphKGUuYmxvY2spfSkpe249MjticmVha30odChpKXx8aS5pZkNvbmRpdGlvbnMmJmkuaWZDb25kaXRpb25zLnNvbWUoZnVuY3Rpb24oZSl7cmV0dXJuIHQoZS5ibG9jayl9KSkmJihuPTEpfX1yZXR1cm4gbn0obyx0Lm1heWJlQ29tcG9uZW50KTowLHU9aXx8S2E7cmV0dXJuXCJbXCIrby5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSx0KX0pLmpvaW4oXCIsXCIpK1wiXVwiKyhjP1wiLFwiK2M6XCJcIil9fWZ1bmN0aW9uIEphKGUpe3JldHVybiB2b2lkIDAhPT1lLmZvcnx8XCJ0ZW1wbGF0ZVwiPT09ZS50YWd8fFwic2xvdFwiPT09ZS50YWd9ZnVuY3Rpb24gS2EoZSx0KXtyZXR1cm4gMT09PWUudHlwZT9EYShlLHQpOjM9PT1lLnR5cGUmJmUuaXNDb21tZW50PyhyPWUsXCJfZShcIitKU09OLnN0cmluZ2lmeShyLnRleHQpK1wiKVwiKTpcIl92KFwiKygyPT09KG49ZSkudHlwZT9uLmV4cHJlc3Npb246V2EoSlNPTi5zdHJpbmdpZnkobi50ZXh0KSkpK1wiKVwiO3ZhciBuLHJ9ZnVuY3Rpb24gcWEoZSl7Zm9yKHZhciB0PVwiXCIsbj1cIlwiLHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIGk9ZVtyXSxvPVdhKGkudmFsdWUpO2kuZHluYW1pYz9uKz1pLm5hbWUrXCIsXCIrbytcIixcIjp0Kz0nXCInK2kubmFtZSsnXCI6JytvK1wiLFwifXJldHVybiB0PVwie1wiK3Quc2xpY2UoMCwtMSkrXCJ9XCIsbj9cIl9kKFwiK3QrXCIsW1wiK24uc2xpY2UoMCwtMSkrXCJdKVwiOnR9ZnVuY3Rpb24gV2EoZSl7cmV0dXJuIGUucmVwbGFjZSgvXFx1MjAyOC9nLFwiXFxcXHUyMDI4XCIpLnJlcGxhY2UoL1xcdTIwMjkvZyxcIlxcXFx1MjAyOVwiKX1mdW5jdGlvbiBHYShlLHQpe3RyeXtyZXR1cm4gbmV3IEZ1bmN0aW9uKGUpfWNhdGNoKG4pe3JldHVybiB0LnB1c2goe2VycjpuLGNvZGU6ZX0pLGp9fWZ1bmN0aW9uIFhhKGUpe3ZhciB0PU9iamVjdC5jcmVhdGUobnVsbCk7cmV0dXJuIGZ1bmN0aW9uKG4scixpKXsocj1UKHt9LHIpKS53YXJuLGRlbGV0ZSByLndhcm47dmFyIG89ci5kZWxpbWl0ZXJzP1N0cmluZyhyLmRlbGltaXRlcnMpK246bjtpZih0W29dKXJldHVybiB0W29dO3ZhciBhPWUobixyKSxzPXt9LGM9W107cmV0dXJuIHMucmVuZGVyPUdhKGEucmVuZGVyLGMpLHMuc3RhdGljUmVuZGVyRm5zPWEuc3RhdGljUmVuZGVyRm5zLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gR2EoZSxjKX0pLHRbb109c319bmV3IFJlZ0V4cChcIlxcXFxiXCIrXCJkbyxpZixmb3IsbGV0LG5ldyx0cnksdmFyLGNhc2UsZWxzZSx3aXRoLGF3YWl0LGJyZWFrLGNhdGNoLGNsYXNzLGNvbnN0LHN1cGVyLHRocm93LHdoaWxlLHlpZWxkLGRlbGV0ZSxleHBvcnQsaW1wb3J0LHJldHVybixzd2l0Y2gsZGVmYXVsdCxleHRlbmRzLGZpbmFsbHksY29udGludWUsZGVidWdnZXIsZnVuY3Rpb24sYXJndW1lbnRzXCIuc3BsaXQoXCIsXCIpLmpvaW4oXCJcXFxcYnxcXFxcYlwiKStcIlxcXFxiXCIpO3ZhciBaYSxZYSxRYT0oWmE9ZnVuY3Rpb24oZSx0KXt2YXIgbj1mdW5jdGlvbihlLHQpe1VvPXQud2Fybnx8U3IsSm89dC5pc1ByZVRhZ3x8TCxLbz10Lm11c3RVc2VQcm9wfHxMLHFvPXQuZ2V0VGFnTmFtZXNwYWNlfHxMLHQuaXNSZXNlcnZlZFRhZyxIbz1Ucih0Lm1vZHVsZXMsXCJ0cmFuc2Zvcm1Ob2RlXCIpLFZvPVRyKHQubW9kdWxlcyxcInByZVRyYW5zZm9ybU5vZGVcIiksem89VHIodC5tb2R1bGVzLFwicG9zdFRyYW5zZm9ybU5vZGVcIiksQm89dC5kZWxpbWl0ZXJzO3ZhciBuLHIsaT1bXSxvPSExIT09dC5wcmVzZXJ2ZVdoaXRlc3BhY2UsYT10LndoaXRlc3BhY2Uscz0hMSxjPSExO2Z1bmN0aW9uIHUoZSl7aWYobChlKSxzfHxlLnByb2Nlc3NlZHx8KGU9dWEoZSx0KSksaS5sZW5ndGh8fGU9PT1ufHxuLmlmJiYoZS5lbHNlaWZ8fGUuZWxzZSkmJmZhKG4se2V4cDplLmVsc2VpZixibG9jazplfSksciYmIWUuZm9yYmlkZGVuKWlmKGUuZWxzZWlmfHxlLmVsc2UpYT1lLCh1PWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLmxlbmd0aDt0LS07KXtpZigxPT09ZVt0XS50eXBlKXJldHVybiBlW3RdO2UucG9wKCl9fShyLmNoaWxkcmVuKSkmJnUuaWYmJmZhKHUse2V4cDphLmVsc2VpZixibG9jazphfSk7ZWxzZXtpZihlLnNsb3RTY29wZSl7dmFyIG89ZS5zbG90VGFyZ2V0fHwnXCJkZWZhdWx0XCInOyhyLnNjb3BlZFNsb3RzfHwoci5zY29wZWRTbG90cz17fSkpW29dPWV9ci5jaGlsZHJlbi5wdXNoKGUpLGUucGFyZW50PXJ9dmFyIGEsdTtlLmNoaWxkcmVuPWUuY2hpbGRyZW4uZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiFlLnNsb3RTY29wZX0pLGwoZSksZS5wcmUmJihzPSExKSxKbyhlLnRhZykmJihjPSExKTtmb3IodmFyIGY9MDtmPHpvLmxlbmd0aDtmKyspem9bZl0oZSx0KX1mdW5jdGlvbiBsKGUpe2lmKCFjKWZvcih2YXIgdDsodD1lLmNoaWxkcmVuW2UuY2hpbGRyZW4ubGVuZ3RoLTFdKSYmMz09PXQudHlwZSYmXCIgXCI9PT10LnRleHQ7KWUuY2hpbGRyZW4ucG9wKCl9cmV0dXJuIGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuLHIsaT1bXSxvPXQuZXhwZWN0SFRNTCxhPXQuaXNVbmFyeVRhZ3x8TCxzPXQuY2FuQmVMZWZ0T3BlblRhZ3x8TCxjPTA7ZTspe2lmKG49ZSxyJiZMbyhyKSl7dmFyIHU9MCxsPXIudG9Mb3dlckNhc2UoKSxmPUlvW2xdfHwoSW9bbF09bmV3IFJlZ0V4cChcIihbXFxcXHNcXFxcU10qPykoPC9cIitsK1wiW14+XSo+KVwiLFwiaVwiKSksZD1lLnJlcGxhY2UoZixmdW5jdGlvbihlLG4scil7cmV0dXJuIHU9ci5sZW5ndGgsTG8obCl8fFwibm9zY3JpcHRcIj09PWx8fChuPW4ucmVwbGFjZSgvPCFcXC0tKFtcXHNcXFNdKj8pLS0+L2csXCIkMVwiKS5yZXBsYWNlKC88IVxcW0NEQVRBXFxbKFtcXHNcXFNdKj8pXV0+L2csXCIkMVwiKSksUG8obCxuKSYmKG49bi5zbGljZSgxKSksdC5jaGFycyYmdC5jaGFycyhuKSxcIlwifSk7Yys9ZS5sZW5ndGgtZC5sZW5ndGgsZT1kLEEobCxjLXUsYyl9ZWxzZXt2YXIgcD1lLmluZGV4T2YoXCI8XCIpO2lmKDA9PT1wKXtpZihFby50ZXN0KGUpKXt2YXIgdj1lLmluZGV4T2YoXCItLVxceDNlXCIpO2lmKHY+PTApe3Quc2hvdWxkS2VlcENvbW1lbnQmJnQuY29tbWVudChlLnN1YnN0cmluZyg0LHYpLGMsYyt2KzMpLHgodiszKTtjb250aW51ZX19aWYoam8udGVzdChlKSl7dmFyIGg9ZS5pbmRleE9mKFwiXT5cIik7aWYoaD49MCl7eChoKzIpO2NvbnRpbnVlfX12YXIgbT1lLm1hdGNoKFRvKTtpZihtKXt4KG1bMF0ubGVuZ3RoKTtjb250aW51ZX12YXIgeT1lLm1hdGNoKFNvKTtpZih5KXt2YXIgZz1jO3goeVswXS5sZW5ndGgpLEEoeVsxXSxnLGMpO2NvbnRpbnVlfXZhciBfPUMoKTtpZihfKXtrKF8pLFBvKF8udGFnTmFtZSxlKSYmeCgxKTtjb250aW51ZX19dmFyIGI9dm9pZCAwLHc9dm9pZCAwLCQ9dm9pZCAwO2lmKHA+PTApe2Zvcih3PWUuc2xpY2UocCk7IShTby50ZXN0KHcpfHxBby50ZXN0KHcpfHxFby50ZXN0KHcpfHxqby50ZXN0KHcpfHwoJD13LmluZGV4T2YoXCI8XCIsMSkpPDApOylwKz0kLHc9ZS5zbGljZShwKTtiPWUuc3Vic3RyaW5nKDAscCl9cDwwJiYoYj1lKSxiJiZ4KGIubGVuZ3RoKSx0LmNoYXJzJiZiJiZ0LmNoYXJzKGIsYy1iLmxlbmd0aCxjKX1pZihlPT09bil7dC5jaGFycyYmdC5jaGFycyhlKTticmVha319ZnVuY3Rpb24geCh0KXtjKz10LGU9ZS5zdWJzdHJpbmcodCl9ZnVuY3Rpb24gQygpe3ZhciB0PWUubWF0Y2goQW8pO2lmKHQpe3ZhciBuLHIsaT17dGFnTmFtZTp0WzFdLGF0dHJzOltdLHN0YXJ0OmN9O2Zvcih4KHRbMF0ubGVuZ3RoKTshKG49ZS5tYXRjaChPbykpJiYocj1lLm1hdGNoKHhvKXx8ZS5tYXRjaCgkbykpOylyLnN0YXJ0PWMseChyWzBdLmxlbmd0aCksci5lbmQ9YyxpLmF0dHJzLnB1c2gocik7aWYobilyZXR1cm4gaS51bmFyeVNsYXNoPW5bMV0seChuWzBdLmxlbmd0aCksaS5lbmQ9YyxpfX1mdW5jdGlvbiBrKGUpe3ZhciBuPWUudGFnTmFtZSxjPWUudW5hcnlTbGFzaDtvJiYoXCJwXCI9PT1yJiZ3byhuKSYmQShyKSxzKG4pJiZyPT09biYmQShuKSk7Zm9yKHZhciB1PWEobil8fCEhYyxsPWUuYXR0cnMubGVuZ3RoLGY9bmV3IEFycmF5KGwpLGQ9MDtkPGw7ZCsrKXt2YXIgcD1lLmF0dHJzW2RdLHY9cFszXXx8cFs0XXx8cFs1XXx8XCJcIixoPVwiYVwiPT09biYmXCJocmVmXCI9PT1wWzFdP3Quc2hvdWxkRGVjb2RlTmV3bGluZXNGb3JIcmVmOnQuc2hvdWxkRGVjb2RlTmV3bGluZXM7ZltkXT17bmFtZTpwWzFdLHZhbHVlOlJvKHYsaCl9fXV8fChpLnB1c2goe3RhZzpuLGxvd2VyQ2FzZWRUYWc6bi50b0xvd2VyQ2FzZSgpLGF0dHJzOmYsc3RhcnQ6ZS5zdGFydCxlbmQ6ZS5lbmR9KSxyPW4pLHQuc3RhcnQmJnQuc3RhcnQobixmLHUsZS5zdGFydCxlLmVuZCl9ZnVuY3Rpb24gQShlLG4sbyl7dmFyIGEscztpZihudWxsPT1uJiYobj1jKSxudWxsPT1vJiYobz1jKSxlKWZvcihzPWUudG9Mb3dlckNhc2UoKSxhPWkubGVuZ3RoLTE7YT49MCYmaVthXS5sb3dlckNhc2VkVGFnIT09czthLS0pO2Vsc2UgYT0wO2lmKGE+PTApe2Zvcih2YXIgdT1pLmxlbmd0aC0xO3U+PWE7dS0tKXQuZW5kJiZ0LmVuZChpW3VdLnRhZyxuLG8pO2kubGVuZ3RoPWEscj1hJiZpW2EtMV0udGFnfWVsc2VcImJyXCI9PT1zP3Quc3RhcnQmJnQuc3RhcnQoZSxbXSwhMCxuLG8pOlwicFwiPT09cyYmKHQuc3RhcnQmJnQuc3RhcnQoZSxbXSwhMSxuLG8pLHQuZW5kJiZ0LmVuZChlLG4sbykpfUEoKX0oZSx7d2FybjpVbyxleHBlY3RIVE1MOnQuZXhwZWN0SFRNTCxpc1VuYXJ5VGFnOnQuaXNVbmFyeVRhZyxjYW5CZUxlZnRPcGVuVGFnOnQuY2FuQmVMZWZ0T3BlblRhZyxzaG91bGREZWNvZGVOZXdsaW5lczp0LnNob3VsZERlY29kZU5ld2xpbmVzLHNob3VsZERlY29kZU5ld2xpbmVzRm9ySHJlZjp0LnNob3VsZERlY29kZU5ld2xpbmVzRm9ySHJlZixzaG91bGRLZWVwQ29tbWVudDp0LmNvbW1lbnRzLG91dHB1dFNvdXJjZVJhbmdlOnQub3V0cHV0U291cmNlUmFuZ2Usc3RhcnQ6ZnVuY3Rpb24oZSxvLGEsbCxmKXt2YXIgZD1yJiZyLm5zfHxxbyhlKTtYJiZcInN2Z1wiPT09ZCYmKG89ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIHI9ZVtuXTtoYS50ZXN0KHIubmFtZSl8fChyLm5hbWU9ci5uYW1lLnJlcGxhY2UobWEsXCJcIiksdC5wdXNoKHIpKX1yZXR1cm4gdH0obykpO3ZhciBwLHY9Y2EoZSxvLHIpO2QmJih2Lm5zPWQpLFwic3R5bGVcIiE9PShwPXYpLnRhZyYmKFwic2NyaXB0XCIhPT1wLnRhZ3x8cC5hdHRyc01hcC50eXBlJiZcInRleHQvamF2YXNjcmlwdFwiIT09cC5hdHRyc01hcC50eXBlKXx8aWUoKXx8KHYuZm9yYmlkZGVuPSEwKTtmb3IodmFyIGg9MDtoPFZvLmxlbmd0aDtoKyspdj1Wb1toXSh2LHQpfHx2O3N8fChmdW5jdGlvbihlKXtudWxsIT1GcihlLFwidi1wcmVcIikmJihlLnByZT0hMCl9KHYpLHYucHJlJiYocz0hMCkpLEpvKHYudGFnKSYmKGM9ITApLHM/ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5hdHRyc0xpc3Qsbj10Lmxlbmd0aDtpZihuKWZvcih2YXIgcj1lLmF0dHJzPW5ldyBBcnJheShuKSxpPTA7aTxuO2krKylyW2ldPXtuYW1lOnRbaV0ubmFtZSx2YWx1ZTpKU09OLnN0cmluZ2lmeSh0W2ldLnZhbHVlKX0sbnVsbCE9dFtpXS5zdGFydCYmKHJbaV0uc3RhcnQ9dFtpXS5zdGFydCxyW2ldLmVuZD10W2ldLmVuZCk7ZWxzZSBlLnByZXx8KGUucGxhaW49ITApfSh2KTp2LnByb2Nlc3NlZHx8KGxhKHYpLGZ1bmN0aW9uKGUpe3ZhciB0PUZyKGUsXCJ2LWlmXCIpO2lmKHQpZS5pZj10LGZhKGUse2V4cDp0LGJsb2NrOmV9KTtlbHNle251bGwhPUZyKGUsXCJ2LWVsc2VcIikmJihlLmVsc2U9ITApO3ZhciBuPUZyKGUsXCJ2LWVsc2UtaWZcIik7biYmKGUuZWxzZWlmPW4pfX0odiksZnVuY3Rpb24oZSl7bnVsbCE9RnIoZSxcInYtb25jZVwiKSYmKGUub25jZT0hMCl9KHYpKSxufHwobj12KSxhP3Uodik6KHI9dixpLnB1c2godikpfSxlbmQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciBvPWlbaS5sZW5ndGgtMV07aS5sZW5ndGgtPTEscj1pW2kubGVuZ3RoLTFdLHUobyl9LGNoYXJzOmZ1bmN0aW9uKGUsdCxuKXtpZihyJiYoIVh8fFwidGV4dGFyZWFcIiE9PXIudGFnfHxyLmF0dHJzTWFwLnBsYWNlaG9sZGVyIT09ZSkpe3ZhciBpLHUsbCxmPXIuY2hpbGRyZW47KGU9Y3x8ZS50cmltKCk/XCJzY3JpcHRcIj09PShpPXIpLnRhZ3x8XCJzdHlsZVwiPT09aS50YWc/ZTphYShlKTpmLmxlbmd0aD9hP1wiY29uZGVuc2VcIj09PWEmJmlhLnRlc3QoZSk/XCJcIjpcIiBcIjpvP1wiIFwiOlwiXCI6XCJcIikmJihjfHxcImNvbmRlbnNlXCIhPT1hfHwoZT1lLnJlcGxhY2Uob2EsXCIgXCIpKSwhcyYmXCIgXCIhPT1lJiYodT1mdW5jdGlvbihlLHQpe3ZhciBuPUJvP21vKEJvKTp2bztpZihuLnRlc3QoZSkpe2Zvcih2YXIgcixpLG8sYT1bXSxzPVtdLGM9bi5sYXN0SW5kZXg9MDtyPW4uZXhlYyhlKTspeyhpPXIuaW5kZXgpPmMmJihzLnB1c2gobz1lLnNsaWNlKGMsaSkpLGEucHVzaChKU09OLnN0cmluZ2lmeShvKSkpO3ZhciB1PUFyKHJbMV0udHJpbSgpKTthLnB1c2goXCJfcyhcIit1K1wiKVwiKSxzLnB1c2goe1wiQGJpbmRpbmdcIjp1fSksYz1pK3JbMF0ubGVuZ3RofXJldHVybiBjPGUubGVuZ3RoJiYocy5wdXNoKG89ZS5zbGljZShjKSksYS5wdXNoKEpTT04uc3RyaW5naWZ5KG8pKSkse2V4cHJlc3Npb246YS5qb2luKFwiK1wiKSx0b2tlbnM6c319fShlKSk/bD17dHlwZToyLGV4cHJlc3Npb246dS5leHByZXNzaW9uLHRva2Vuczp1LnRva2Vucyx0ZXh0OmV9OlwiIFwiPT09ZSYmZi5sZW5ndGgmJlwiIFwiPT09ZltmLmxlbmd0aC0xXS50ZXh0fHwobD17dHlwZTozLHRleHQ6ZX0pLGwmJmYucHVzaChsKSl9fSxjb21tZW50OmZ1bmN0aW9uKGUsdCxuKXtpZihyKXt2YXIgaT17dHlwZTozLHRleHQ6ZSxpc0NvbW1lbnQ6ITB9O3IuY2hpbGRyZW4ucHVzaChpKX19fSksbn0oZS50cmltKCksdCk7ITEhPT10Lm9wdGltaXplJiZmdW5jdGlvbihlLHQpe2UmJihnYT0kYSh0LnN0YXRpY0tleXN8fFwiXCIpLF9hPXQuaXNSZXNlcnZlZFRhZ3x8TCxmdW5jdGlvbiBlKHQpe2lmKHQuc3RhdGljPWZ1bmN0aW9uKGUpe3JldHVybiAyIT09ZS50eXBlJiYoMz09PWUudHlwZXx8ISghZS5wcmUmJihlLmhhc0JpbmRpbmdzfHxlLmlmfHxlLmZvcnx8bShlLnRhZyl8fCFfYShlLnRhZyl8fGZ1bmN0aW9uKGUpe2Zvcig7ZS5wYXJlbnQ7KXtpZihcInRlbXBsYXRlXCIhPT0oZT1lLnBhcmVudCkudGFnKXJldHVybiExO2lmKGUuZm9yKXJldHVybiEwfXJldHVybiExfShlKXx8IU9iamVjdC5rZXlzKGUpLmV2ZXJ5KGdhKSkpKX0odCksMT09PXQudHlwZSl7aWYoIV9hKHQudGFnKSYmXCJzbG90XCIhPT10LnRhZyYmbnVsbD09dC5hdHRyc01hcFtcImlubGluZS10ZW1wbGF0ZVwiXSlyZXR1cm47Zm9yKHZhciBuPTAscj10LmNoaWxkcmVuLmxlbmd0aDtuPHI7bisrKXt2YXIgaT10LmNoaWxkcmVuW25dO2UoaSksaS5zdGF0aWN8fCh0LnN0YXRpYz0hMSl9aWYodC5pZkNvbmRpdGlvbnMpZm9yKHZhciBvPTEsYT10LmlmQ29uZGl0aW9ucy5sZW5ndGg7bzxhO28rKyl7dmFyIHM9dC5pZkNvbmRpdGlvbnNbb10uYmxvY2s7ZShzKSxzLnN0YXRpY3x8KHQuc3RhdGljPSExKX19fShlKSxmdW5jdGlvbiBlKHQsbil7aWYoMT09PXQudHlwZSl7aWYoKHQuc3RhdGljfHx0Lm9uY2UpJiYodC5zdGF0aWNJbkZvcj1uKSx0LnN0YXRpYyYmdC5jaGlsZHJlbi5sZW5ndGgmJigxIT09dC5jaGlsZHJlbi5sZW5ndGh8fDMhPT10LmNoaWxkcmVuWzBdLnR5cGUpKXJldHVybiB2b2lkKHQuc3RhdGljUm9vdD0hMCk7aWYodC5zdGF0aWNSb290PSExLHQuY2hpbGRyZW4pZm9yKHZhciByPTAsaT10LmNoaWxkcmVuLmxlbmd0aDtyPGk7cisrKWUodC5jaGlsZHJlbltyXSxufHwhIXQuZm9yKTtpZih0LmlmQ29uZGl0aW9ucylmb3IodmFyIG89MSxhPXQuaWZDb25kaXRpb25zLmxlbmd0aDtvPGE7bysrKWUodC5pZkNvbmRpdGlvbnNbb10uYmxvY2ssbil9fShlLCExKSl9KG4sdCk7dmFyIHI9TWEobix0KTtyZXR1cm57YXN0Om4scmVuZGVyOnIucmVuZGVyLHN0YXRpY1JlbmRlckZuczpyLnN0YXRpY1JlbmRlckZuc319LGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCxuKXt2YXIgcj1PYmplY3QuY3JlYXRlKGUpLGk9W10sbz1bXTtpZihuKWZvcih2YXIgYSBpbiBuLm1vZHVsZXMmJihyLm1vZHVsZXM9KGUubW9kdWxlc3x8W10pLmNvbmNhdChuLm1vZHVsZXMpKSxuLmRpcmVjdGl2ZXMmJihyLmRpcmVjdGl2ZXM9VChPYmplY3QuY3JlYXRlKGUuZGlyZWN0aXZlc3x8bnVsbCksbi5kaXJlY3RpdmVzKSksbilcIm1vZHVsZXNcIiE9PWEmJlwiZGlyZWN0aXZlc1wiIT09YSYmKHJbYV09blthXSk7ci53YXJuPWZ1bmN0aW9uKGUsdCxuKXsobj9vOmkpLnB1c2goZSl9O3ZhciBzPVphKHQudHJpbSgpLHIpO3JldHVybiBzLmVycm9ycz1pLHMudGlwcz1vLHN9cmV0dXJue2NvbXBpbGU6dCxjb21waWxlVG9GdW5jdGlvbnM6WGEodCl9fSkod2EpLGVzPShRYS5jb21waWxlLFFhLmNvbXBpbGVUb0Z1bmN0aW9ucyk7ZnVuY3Rpb24gdHMoZSl7cmV0dXJuKFlhPVlhfHxkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpKS5pbm5lckhUTUw9ZT8nPGEgaHJlZj1cIlxcblwiLz4nOic8ZGl2IGE9XCJcXG5cIi8+JyxZYS5pbm5lckhUTUwuaW5kZXhPZihcIiYjMTA7XCIpPjB9dmFyIG5zPSEhSyYmdHMoITEpLHJzPSEhSyYmdHMoITApLGlzPXcoZnVuY3Rpb24oZSl7dmFyIHQ9WW4oZSk7cmV0dXJuIHQmJnQuaW5uZXJIVE1MfSksb3M9Q24ucHJvdG90eXBlLiRtb3VudDtDbi5wcm90b3R5cGUuJG1vdW50PWZ1bmN0aW9uKGUsdCl7aWYoKGU9ZSYmWW4oZSkpPT09ZG9jdW1lbnQuYm9keXx8ZT09PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudClyZXR1cm4gdGhpczt2YXIgbj10aGlzLiRvcHRpb25zO2lmKCFuLnJlbmRlcil7dmFyIHI9bi50ZW1wbGF0ZTtpZihyKWlmKFwic3RyaW5nXCI9PXR5cGVvZiByKVwiI1wiPT09ci5jaGFyQXQoMCkmJihyPWlzKHIpKTtlbHNle2lmKCFyLm5vZGVUeXBlKXJldHVybiB0aGlzO3I9ci5pbm5lckhUTUx9ZWxzZSBlJiYocj1mdW5jdGlvbihlKXtpZihlLm91dGVySFRNTClyZXR1cm4gZS5vdXRlckhUTUw7dmFyIHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtyZXR1cm4gdC5hcHBlbmRDaGlsZChlLmNsb25lTm9kZSghMCkpLHQuaW5uZXJIVE1MfShlKSk7aWYocil7dmFyIGk9ZXMocix7b3V0cHV0U291cmNlUmFuZ2U6ITEsc2hvdWxkRGVjb2RlTmV3bGluZXM6bnMsc2hvdWxkRGVjb2RlTmV3bGluZXNGb3JIcmVmOnJzLGRlbGltaXRlcnM6bi5kZWxpbWl0ZXJzLGNvbW1lbnRzOm4uY29tbWVudHN9LHRoaXMpLG89aS5yZW5kZXIsYT1pLnN0YXRpY1JlbmRlckZucztuLnJlbmRlcj1vLG4uc3RhdGljUmVuZGVyRm5zPWF9fXJldHVybiBvcy5jYWxsKHRoaXMsZSx0KX0sQ24uY29tcGlsZT1lcyxlLmV4cG9ydHM9Q259KS5jYWxsKHRoaXMsbigxKSxuKDYpLnNldEltbWVkaWF0ZSl9LGZ1bmN0aW9uKGUsdCxuKXsoZnVuY3Rpb24oZSl7dmFyIHI9dm9pZCAwIT09ZSYmZXx8XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGYmJnNlbGZ8fHdpbmRvdyxpPUZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseTtmdW5jdGlvbiBvKGUsdCl7dGhpcy5faWQ9ZSx0aGlzLl9jbGVhckZuPXR9dC5zZXRUaW1lb3V0PWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBvKGkuY2FsbChzZXRUaW1lb3V0LHIsYXJndW1lbnRzKSxjbGVhclRpbWVvdXQpfSx0LnNldEludGVydmFsPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBvKGkuY2FsbChzZXRJbnRlcnZhbCxyLGFyZ3VtZW50cyksY2xlYXJJbnRlcnZhbCl9LHQuY2xlYXJUaW1lb3V0PXQuY2xlYXJJbnRlcnZhbD1mdW5jdGlvbihlKXtlJiZlLmNsb3NlKCl9LG8ucHJvdG90eXBlLnVucmVmPW8ucHJvdG90eXBlLnJlZj1mdW5jdGlvbigpe30sby5wcm90b3R5cGUuY2xvc2U9ZnVuY3Rpb24oKXt0aGlzLl9jbGVhckZuLmNhbGwocix0aGlzLl9pZCl9LHQuZW5yb2xsPWZ1bmN0aW9uKGUsdCl7Y2xlYXJUaW1lb3V0KGUuX2lkbGVUaW1lb3V0SWQpLGUuX2lkbGVUaW1lb3V0PXR9LHQudW5lbnJvbGw9ZnVuY3Rpb24oZSl7Y2xlYXJUaW1lb3V0KGUuX2lkbGVUaW1lb3V0SWQpLGUuX2lkbGVUaW1lb3V0PS0xfSx0Ll91bnJlZkFjdGl2ZT10LmFjdGl2ZT1mdW5jdGlvbihlKXtjbGVhclRpbWVvdXQoZS5faWRsZVRpbWVvdXRJZCk7dmFyIHQ9ZS5faWRsZVRpbWVvdXQ7dD49MCYmKGUuX2lkbGVUaW1lb3V0SWQ9c2V0VGltZW91dChmdW5jdGlvbigpe2UuX29uVGltZW91dCYmZS5fb25UaW1lb3V0KCl9LHQpKX0sbig3KSx0LnNldEltbWVkaWF0ZT1cInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZiYmc2VsZi5zZXRJbW1lZGlhdGV8fHZvaWQgMCE9PWUmJmUuc2V0SW1tZWRpYXRlfHx0aGlzJiZ0aGlzLnNldEltbWVkaWF0ZSx0LmNsZWFySW1tZWRpYXRlPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmJiZzZWxmLmNsZWFySW1tZWRpYXRlfHx2b2lkIDAhPT1lJiZlLmNsZWFySW1tZWRpYXRlfHx0aGlzJiZ0aGlzLmNsZWFySW1tZWRpYXRlfSkuY2FsbCh0aGlzLG4oMSkpfSxmdW5jdGlvbihlLHQsbil7KGZ1bmN0aW9uKGUsdCl7IWZ1bmN0aW9uKGUsbil7XCJ1c2Ugc3RyaWN0XCI7aWYoIWUuc2V0SW1tZWRpYXRlKXt2YXIgcixpLG8sYSxzLGM9MSx1PXt9LGw9ITEsZj1lLmRvY3VtZW50LGQ9T2JqZWN0LmdldFByb3RvdHlwZU9mJiZPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSk7ZD1kJiZkLnNldFRpbWVvdXQ/ZDplLFwiW29iamVjdCBwcm9jZXNzXVwiPT09e30udG9TdHJpbmcuY2FsbChlLnByb2Nlc3MpP3I9ZnVuY3Rpb24oZSl7dC5uZXh0VGljayhmdW5jdGlvbigpe3YoZSl9KX06IWZ1bmN0aW9uKCl7aWYoZS5wb3N0TWVzc2FnZSYmIWUuaW1wb3J0U2NyaXB0cyl7dmFyIHQ9ITAsbj1lLm9ubWVzc2FnZTtyZXR1cm4gZS5vbm1lc3NhZ2U9ZnVuY3Rpb24oKXt0PSExfSxlLnBvc3RNZXNzYWdlKFwiXCIsXCIqXCIpLGUub25tZXNzYWdlPW4sdH19KCk/ZS5NZXNzYWdlQ2hhbm5lbD8oKG89bmV3IE1lc3NhZ2VDaGFubmVsKS5wb3J0MS5vbm1lc3NhZ2U9ZnVuY3Rpb24oZSl7dihlLmRhdGEpfSxyPWZ1bmN0aW9uKGUpe28ucG9ydDIucG9zdE1lc3NhZ2UoZSl9KTpmJiZcIm9ucmVhZHlzdGF0ZWNoYW5nZVwiaW4gZi5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpPyhpPWYuZG9jdW1lbnRFbGVtZW50LHI9ZnVuY3Rpb24oZSl7dmFyIHQ9Zi5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpO3Qub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7dihlKSx0Lm9ucmVhZHlzdGF0ZWNoYW5nZT1udWxsLGkucmVtb3ZlQ2hpbGQodCksdD1udWxsfSxpLmFwcGVuZENoaWxkKHQpfSk6cj1mdW5jdGlvbihlKXtzZXRUaW1lb3V0KHYsMCxlKX06KGE9XCJzZXRJbW1lZGlhdGUkXCIrTWF0aC5yYW5kb20oKStcIiRcIixzPWZ1bmN0aW9uKHQpe3Quc291cmNlPT09ZSYmXCJzdHJpbmdcIj09dHlwZW9mIHQuZGF0YSYmMD09PXQuZGF0YS5pbmRleE9mKGEpJiZ2KCt0LmRhdGEuc2xpY2UoYS5sZW5ndGgpKX0sZS5hZGRFdmVudExpc3RlbmVyP2UuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIixzLCExKTplLmF0dGFjaEV2ZW50KFwib25tZXNzYWdlXCIscykscj1mdW5jdGlvbih0KXtlLnBvc3RNZXNzYWdlKGErdCxcIipcIil9KSxkLnNldEltbWVkaWF0ZT1mdW5jdGlvbihlKXtcImZ1bmN0aW9uXCIhPXR5cGVvZiBlJiYoZT1uZXcgRnVuY3Rpb24oXCJcIitlKSk7Zm9yKHZhciB0PW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoLTEpLG49MDtuPHQubGVuZ3RoO24rKyl0W25dPWFyZ3VtZW50c1tuKzFdO3ZhciBpPXtjYWxsYmFjazplLGFyZ3M6dH07cmV0dXJuIHVbY109aSxyKGMpLGMrK30sZC5jbGVhckltbWVkaWF0ZT1wfWZ1bmN0aW9uIHAoZSl7ZGVsZXRlIHVbZV19ZnVuY3Rpb24gdihlKXtpZihsKXNldFRpbWVvdXQodiwwLGUpO2Vsc2V7dmFyIHQ9dVtlXTtpZih0KXtsPSEwO3RyeXshZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jYWxsYmFjayxyPWUuYXJncztzd2l0Y2goci5sZW5ndGgpe2Nhc2UgMDp0KCk7YnJlYWs7Y2FzZSAxOnQoclswXSk7YnJlYWs7Y2FzZSAyOnQoclswXSxyWzFdKTticmVhaztjYXNlIDM6dChyWzBdLHJbMV0sclsyXSk7YnJlYWs7ZGVmYXVsdDp0LmFwcGx5KG4scil9fSh0KX1maW5hbGx5e3AoZSksbD0hMX19fX19KFwidW5kZWZpbmVkXCI9PXR5cGVvZiBzZWxmP3ZvaWQgMD09PWU/dGhpczplOnNlbGYpfSkuY2FsbCh0aGlzLG4oMSksbig4KSl9LGZ1bmN0aW9uKGUsdCl7dmFyIG4scixpPWUuZXhwb3J0cz17fTtmdW5jdGlvbiBvKCl7dGhyb3cgbmV3IEVycm9yKFwic2V0VGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZFwiKX1mdW5jdGlvbiBhKCl7dGhyb3cgbmV3IEVycm9yKFwiY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkXCIpfWZ1bmN0aW9uIHMoZSl7aWYobj09PXNldFRpbWVvdXQpcmV0dXJuIHNldFRpbWVvdXQoZSwwKTtpZigobj09PW98fCFuKSYmc2V0VGltZW91dClyZXR1cm4gbj1zZXRUaW1lb3V0LHNldFRpbWVvdXQoZSwwKTt0cnl7cmV0dXJuIG4oZSwwKX1jYXRjaCh0KXt0cnl7cmV0dXJuIG4uY2FsbChudWxsLGUsMCl9Y2F0Y2godCl7cmV0dXJuIG4uY2FsbCh0aGlzLGUsMCl9fX0hZnVuY3Rpb24oKXt0cnl7bj1cImZ1bmN0aW9uXCI9PXR5cGVvZiBzZXRUaW1lb3V0P3NldFRpbWVvdXQ6b31jYXRjaChlKXtuPW99dHJ5e3I9XCJmdW5jdGlvblwiPT10eXBlb2YgY2xlYXJUaW1lb3V0P2NsZWFyVGltZW91dDphfWNhdGNoKGUpe3I9YX19KCk7dmFyIGMsdT1bXSxsPSExLGY9LTE7ZnVuY3Rpb24gZCgpe2wmJmMmJihsPSExLGMubGVuZ3RoP3U9Yy5jb25jYXQodSk6Zj0tMSx1Lmxlbmd0aCYmcCgpKX1mdW5jdGlvbiBwKCl7aWYoIWwpe3ZhciBlPXMoZCk7bD0hMDtmb3IodmFyIHQ9dS5sZW5ndGg7dDspe2ZvcihjPXUsdT1bXTsrK2Y8dDspYyYmY1tmXS5ydW4oKTtmPS0xLHQ9dS5sZW5ndGh9Yz1udWxsLGw9ITEsZnVuY3Rpb24oZSl7aWYocj09PWNsZWFyVGltZW91dClyZXR1cm4gY2xlYXJUaW1lb3V0KGUpO2lmKChyPT09YXx8IXIpJiZjbGVhclRpbWVvdXQpcmV0dXJuIHI9Y2xlYXJUaW1lb3V0LGNsZWFyVGltZW91dChlKTt0cnl7cihlKX1jYXRjaCh0KXt0cnl7cmV0dXJuIHIuY2FsbChudWxsLGUpfWNhdGNoKHQpe3JldHVybiByLmNhbGwodGhpcyxlKX19fShlKX19ZnVuY3Rpb24gdihlLHQpe3RoaXMuZnVuPWUsdGhpcy5hcnJheT10fWZ1bmN0aW9uIGgoKXt9aS5uZXh0VGljaz1mdW5jdGlvbihlKXt2YXIgdD1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aC0xKTtpZihhcmd1bWVudHMubGVuZ3RoPjEpZm9yKHZhciBuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl0W24tMV09YXJndW1lbnRzW25dO3UucHVzaChuZXcgdihlLHQpKSwxIT09dS5sZW5ndGh8fGx8fHMocCl9LHYucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3RoaXMuZnVuLmFwcGx5KG51bGwsdGhpcy5hcnJheSl9LGkudGl0bGU9XCJicm93c2VyXCIsaS5icm93c2VyPSEwLGkuZW52PXt9LGkuYXJndj1bXSxpLnZlcnNpb249XCJcIixpLnZlcnNpb25zPXt9LGkub249aCxpLmFkZExpc3RlbmVyPWgsaS5vbmNlPWgsaS5vZmY9aCxpLnJlbW92ZUxpc3RlbmVyPWgsaS5yZW1vdmVBbGxMaXN0ZW5lcnM9aCxpLmVtaXQ9aCxpLnByZXBlbmRMaXN0ZW5lcj1oLGkucHJlcGVuZE9uY2VMaXN0ZW5lcj1oLGkubGlzdGVuZXJzPWZ1bmN0aW9uKGUpe3JldHVybltdfSxpLmJpbmRpbmc9ZnVuY3Rpb24oZSl7dGhyb3cgbmV3IEVycm9yKFwicHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWRcIil9LGkuY3dkPWZ1bmN0aW9uKCl7cmV0dXJuXCIvXCJ9LGkuY2hkaXI9ZnVuY3Rpb24oZSl7dGhyb3cgbmV3IEVycm9yKFwicHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkXCIpfSxpLnVtYXNrPWZ1bmN0aW9uKCl7cmV0dXJuIDB9fSxmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7dmFyIHI9bigwKTtuLm4ocikuYX0sZnVuY3Rpb24oZSx0LG4peyhlLmV4cG9ydHM9bigxMSkoITEpKS5wdXNoKFtlLmksXCIudi1jb250ZXh0W2RhdGEtdi03ZGUyYWI0NV0ge1xcbiAgYmFja2dyb3VuZDogI2ZhZmFmYTtcXG4gIGJvcmRlcjogMXB4IHNvbGlkICNiZGJkYmQ7XFxuICBib3gtc2hhZG93OiAwIDJweCAycHggMCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwIDNweCAxcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMiksIDAgMXB4IDVweCAwIHJnYmEoMCwgMCwgMCwgMC4xMik7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIG1hcmdpbjogMDtcXG4gIHBhZGRpbmc6IDA7XFxuICBwb3NpdGlvbjogZml4ZWQ7XFxuICB3aWR0aDogMjUwcHg7XFxuICB6LWluZGV4OiA5OTk5OTtcXG59XFxuLnYtY29udGV4dCB1bFtkYXRhLXYtN2RlMmFiNDVdIHtcXG4gIGxpc3Qtc3R5bGU6IG5vbmU7XFxuICBwYWRkaW5nOiAxMHB4IDA7XFxuICBtYXJnaW46IDA7XFxuICBmb250LXNpemU6IDEycHg7XFxuICBmb250LXdlaWdodDogNjAwO1xcbn1cXG4udi1jb250ZXh0IHVsIGxpW2RhdGEtdi03ZGUyYWI0NV0ge1xcbiAgbWFyZ2luOiAwO1xcbiAgcGFkZGluZzogMTBweCAzNXB4O1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG4udi1jb250ZXh0IHVsIGxpW2RhdGEtdi03ZGUyYWI0NV06aG92ZXIge1xcbiAgYmFja2dyb3VuZDogIzFlODhlNTtcXG4gIGNvbG9yOiAjZmFmYWZhO1xcbn1cXG5cIixcIlwiXSl9LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PVtdO3JldHVybiB0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKHQpe3ZhciBuPWZ1bmN0aW9uKGUsdCl7dmFyIG49ZVsxXXx8XCJcIixyPWVbM107aWYoIXIpcmV0dXJuIG47aWYodCYmXCJmdW5jdGlvblwiPT10eXBlb2YgYnRvYSl7dmFyIGk9KGE9cixcIi8qIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxcIitidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShhKSkpKStcIiAqL1wiKSxvPXIuc291cmNlcy5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuXCIvKiMgc291cmNlVVJMPVwiK3Iuc291cmNlUm9vdCtlK1wiICovXCJ9KTtyZXR1cm5bbl0uY29uY2F0KG8pLmNvbmNhdChbaV0pLmpvaW4oXCJcXG5cIil9dmFyIGE7cmV0dXJuW25dLmpvaW4oXCJcXG5cIil9KHQsZSk7cmV0dXJuIHRbMl0/XCJAbWVkaWEgXCIrdFsyXStcIntcIituK1wifVwiOm59KS5qb2luKFwiXCIpfSx0Lmk9ZnVuY3Rpb24oZSxuKXtcInN0cmluZ1wiPT10eXBlb2YgZSYmKGU9W1tudWxsLGUsXCJcIl1dKTtmb3IodmFyIHI9e30saT0wO2k8dGhpcy5sZW5ndGg7aSsrKXt2YXIgbz10aGlzW2ldWzBdO1wibnVtYmVyXCI9PXR5cGVvZiBvJiYocltvXT0hMCl9Zm9yKGk9MDtpPGUubGVuZ3RoO2krKyl7dmFyIGE9ZVtpXTtcIm51bWJlclwiPT10eXBlb2YgYVswXSYmclthWzBdXXx8KG4mJiFhWzJdP2FbMl09bjpuJiYoYVsyXT1cIihcIithWzJdK1wiKSBhbmQgKFwiK24rXCIpXCIpLHQucHVzaChhKSl9fSx0fX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbz17fSxhPShyPWZ1bmN0aW9uKCl7cmV0dXJuIHdpbmRvdyYmZG9jdW1lbnQmJmRvY3VtZW50LmFsbCYmIXdpbmRvdy5hdG9ifSxmdW5jdGlvbigpe3JldHVybiB2b2lkIDA9PT1pJiYoaT1yLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksaX0pLHM9ZnVuY3Rpb24oZSl7dmFyIHQ9e307cmV0dXJuIGZ1bmN0aW9uKGUsbil7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgZSlyZXR1cm4gZSgpO2lmKHZvaWQgMD09PXRbZV0pe3ZhciByPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ/dC5xdWVyeVNlbGVjdG9yKGUpOmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZSl9LmNhbGwodGhpcyxlLG4pO2lmKHdpbmRvdy5IVE1MSUZyYW1lRWxlbWVudCYmciBpbnN0YW5jZW9mIHdpbmRvdy5IVE1MSUZyYW1lRWxlbWVudCl0cnl7cj1yLmNvbnRlbnREb2N1bWVudC5oZWFkfWNhdGNoKGUpe3I9bnVsbH10W2VdPXJ9cmV0dXJuIHRbZV19fSgpLGM9bnVsbCx1PTAsbD1bXSxmPW4oMTMpO2Z1bmN0aW9uIGQoZSx0KXtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIHI9ZVtuXSxpPW9bci5pZF07aWYoaSl7aS5yZWZzKys7Zm9yKHZhciBhPTA7YTxpLnBhcnRzLmxlbmd0aDthKyspaS5wYXJ0c1thXShyLnBhcnRzW2FdKTtmb3IoO2E8ci5wYXJ0cy5sZW5ndGg7YSsrKWkucGFydHMucHVzaChnKHIucGFydHNbYV0sdCkpfWVsc2V7dmFyIHM9W107Zm9yKGE9MDthPHIucGFydHMubGVuZ3RoO2ErKylzLnB1c2goZyhyLnBhcnRzW2FdLHQpKTtvW3IuaWRdPXtpZDpyLmlkLHJlZnM6MSxwYXJ0czpzfX19fWZ1bmN0aW9uIHAoZSx0KXtmb3IodmFyIG49W10scj17fSxpPTA7aTxlLmxlbmd0aDtpKyspe3ZhciBvPWVbaV0sYT10LmJhc2U/b1swXSt0LmJhc2U6b1swXSxzPXtjc3M6b1sxXSxtZWRpYTpvWzJdLHNvdXJjZU1hcDpvWzNdfTtyW2FdP3JbYV0ucGFydHMucHVzaChzKTpuLnB1c2goclthXT17aWQ6YSxwYXJ0czpbc119KX1yZXR1cm4gbn1mdW5jdGlvbiB2KGUsdCl7dmFyIG49cyhlLmluc2VydEludG8pO2lmKCFuKXRocm93IG5ldyBFcnJvcihcIkNvdWxkbid0IGZpbmQgYSBzdHlsZSB0YXJnZXQuIFRoaXMgcHJvYmFibHkgbWVhbnMgdGhhdCB0aGUgdmFsdWUgZm9yIHRoZSAnaW5zZXJ0SW50bycgcGFyYW1ldGVyIGlzIGludmFsaWQuXCIpO3ZhciByPWxbbC5sZW5ndGgtMV07aWYoXCJ0b3BcIj09PWUuaW5zZXJ0QXQpcj9yLm5leHRTaWJsaW5nP24uaW5zZXJ0QmVmb3JlKHQsci5uZXh0U2libGluZyk6bi5hcHBlbmRDaGlsZCh0KTpuLmluc2VydEJlZm9yZSh0LG4uZmlyc3RDaGlsZCksbC5wdXNoKHQpO2Vsc2UgaWYoXCJib3R0b21cIj09PWUuaW5zZXJ0QXQpbi5hcHBlbmRDaGlsZCh0KTtlbHNle2lmKFwib2JqZWN0XCIhPXR5cGVvZiBlLmluc2VydEF0fHwhZS5pbnNlcnRBdC5iZWZvcmUpdGhyb3cgbmV3IEVycm9yKFwiW1N0eWxlIExvYWRlcl1cXG5cXG4gSW52YWxpZCB2YWx1ZSBmb3IgcGFyYW1ldGVyICdpbnNlcnRBdCcgKCdvcHRpb25zLmluc2VydEF0JykgZm91bmQuXFxuIE11c3QgYmUgJ3RvcCcsICdib3R0b20nLCBvciBPYmplY3QuXFxuIChodHRwczovL2dpdGh1Yi5jb20vd2VicGFjay1jb250cmliL3N0eWxlLWxvYWRlciNpbnNlcnRhdClcXG5cIik7dmFyIGk9cyhlLmluc2VydEF0LmJlZm9yZSxuKTtuLmluc2VydEJlZm9yZSh0LGkpfX1mdW5jdGlvbiBoKGUpe2lmKG51bGw9PT1lLnBhcmVudE5vZGUpcmV0dXJuITE7ZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGUpO3ZhciB0PWwuaW5kZXhPZihlKTt0Pj0wJiZsLnNwbGljZSh0LDEpfWZ1bmN0aW9uIG0oZSl7dmFyIHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInN0eWxlXCIpO2lmKHZvaWQgMD09PWUuYXR0cnMudHlwZSYmKGUuYXR0cnMudHlwZT1cInRleHQvY3NzXCIpLHZvaWQgMD09PWUuYXR0cnMubm9uY2Upe3ZhciByPWZ1bmN0aW9uKCl7MDtyZXR1cm4gbi5uY30oKTtyJiYoZS5hdHRycy5ub25jZT1yKX1yZXR1cm4geSh0LGUuYXR0cnMpLHYoZSx0KSx0fWZ1bmN0aW9uIHkoZSx0KXtPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKG4pe2Uuc2V0QXR0cmlidXRlKG4sdFtuXSl9KX1mdW5jdGlvbiBnKGUsdCl7dmFyIG4scixpLG87aWYodC50cmFuc2Zvcm0mJmUuY3NzKXtpZighKG89XCJmdW5jdGlvblwiPT10eXBlb2YgdC50cmFuc2Zvcm0/dC50cmFuc2Zvcm0oZS5jc3MpOnQudHJhbnNmb3JtLmRlZmF1bHQoZS5jc3MpKSlyZXR1cm4gZnVuY3Rpb24oKXt9O2UuY3NzPW99aWYodC5zaW5nbGV0b24pe3ZhciBhPXUrKztuPWN8fChjPW0odCkpLHI9dy5iaW5kKG51bGwsbixhLCExKSxpPXcuYmluZChudWxsLG4sYSwhMCl9ZWxzZSBlLnNvdXJjZU1hcCYmXCJmdW5jdGlvblwiPT10eXBlb2YgVVJMJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBVUkwuY3JlYXRlT2JqZWN0VVJMJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBVUkwucmV2b2tlT2JqZWN0VVJMJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBCbG9iJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBidG9hPyhuPWZ1bmN0aW9uKGUpe3ZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJsaW5rXCIpO3JldHVybiB2b2lkIDA9PT1lLmF0dHJzLnR5cGUmJihlLmF0dHJzLnR5cGU9XCJ0ZXh0L2Nzc1wiKSxlLmF0dHJzLnJlbD1cInN0eWxlc2hlZXRcIix5KHQsZS5hdHRycyksdihlLHQpLHR9KHQpLHI9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4uY3NzLGk9bi5zb3VyY2VNYXAsbz12b2lkIDA9PT10LmNvbnZlcnRUb0Fic29sdXRlVXJscyYmaTsodC5jb252ZXJ0VG9BYnNvbHV0ZVVybHN8fG8pJiYocj1mKHIpKTtpJiYocis9XCJcXG4vKiMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LFwiK2J0b2EodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KGkpKSkpK1wiICovXCIpO3ZhciBhPW5ldyBCbG9iKFtyXSx7dHlwZTpcInRleHQvY3NzXCJ9KSxzPWUuaHJlZjtlLmhyZWY9VVJMLmNyZWF0ZU9iamVjdFVSTChhKSxzJiZVUkwucmV2b2tlT2JqZWN0VVJMKHMpfS5iaW5kKG51bGwsbix0KSxpPWZ1bmN0aW9uKCl7aChuKSxuLmhyZWYmJlVSTC5yZXZva2VPYmplY3RVUkwobi5ocmVmKX0pOihuPW0odCkscj1mdW5jdGlvbihlLHQpe3ZhciBuPXQuY3NzLHI9dC5tZWRpYTtyJiZlLnNldEF0dHJpYnV0ZShcIm1lZGlhXCIscik7aWYoZS5zdHlsZVNoZWV0KWUuc3R5bGVTaGVldC5jc3NUZXh0PW47ZWxzZXtmb3IoO2UuZmlyc3RDaGlsZDspZS5yZW1vdmVDaGlsZChlLmZpcnN0Q2hpbGQpO2UuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobikpfX0uYmluZChudWxsLG4pLGk9ZnVuY3Rpb24oKXtoKG4pfSk7cmV0dXJuIHIoZSksZnVuY3Rpb24odCl7aWYodCl7aWYodC5jc3M9PT1lLmNzcyYmdC5tZWRpYT09PWUubWVkaWEmJnQuc291cmNlTWFwPT09ZS5zb3VyY2VNYXApcmV0dXJuO3IoZT10KX1lbHNlIGkoKX19ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIERFQlVHJiZERUJVRyYmXCJvYmplY3RcIiE9dHlwZW9mIGRvY3VtZW50KXRocm93IG5ldyBFcnJvcihcIlRoZSBzdHlsZS1sb2FkZXIgY2Fubm90IGJlIHVzZWQgaW4gYSBub24tYnJvd3NlciBlbnZpcm9ubWVudFwiKTsodD10fHx7fSkuYXR0cnM9XCJvYmplY3RcIj09dHlwZW9mIHQuYXR0cnM/dC5hdHRyczp7fSx0LnNpbmdsZXRvbnx8XCJib29sZWFuXCI9PXR5cGVvZiB0LnNpbmdsZXRvbnx8KHQuc2luZ2xldG9uPWEoKSksdC5pbnNlcnRJbnRvfHwodC5pbnNlcnRJbnRvPVwiaGVhZFwiKSx0Lmluc2VydEF0fHwodC5pbnNlcnRBdD1cImJvdHRvbVwiKTt2YXIgbj1wKGUsdCk7cmV0dXJuIGQobix0KSxmdW5jdGlvbihlKXtmb3IodmFyIHI9W10saT0wO2k8bi5sZW5ndGg7aSsrKXt2YXIgYT1uW2ldOyhzPW9bYS5pZF0pLnJlZnMtLSxyLnB1c2gocyl9ZSYmZChwKGUsdCksdCk7Zm9yKGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIHM7aWYoMD09PShzPXJbaV0pLnJlZnMpe2Zvcih2YXIgYz0wO2M8cy5wYXJ0cy5sZW5ndGg7YysrKXMucGFydHNbY10oKTtkZWxldGUgb1tzLmlkXX19fX07dmFyIF8sYj0oXz1bXSxmdW5jdGlvbihlLHQpe3JldHVybiBfW2VdPXQsXy5maWx0ZXIoQm9vbGVhbikuam9pbihcIlxcblwiKX0pO2Z1bmN0aW9uIHcoZSx0LG4scil7dmFyIGk9bj9cIlwiOnIuY3NzO2lmKGUuc3R5bGVTaGVldCllLnN0eWxlU2hlZXQuY3NzVGV4dD1iKHQsaSk7ZWxzZXt2YXIgbz1kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShpKSxhPWUuY2hpbGROb2RlczthW3RdJiZlLnJlbW92ZUNoaWxkKGFbdF0pLGEubGVuZ3RoP2UuaW5zZXJ0QmVmb3JlKG8sYVt0XSk6ZS5hcHBlbmRDaGlsZChvKX19fSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD1cInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93JiZ3aW5kb3cubG9jYXRpb247aWYoIXQpdGhyb3cgbmV3IEVycm9yKFwiZml4VXJscyByZXF1aXJlcyB3aW5kb3cubG9jYXRpb25cIik7aWYoIWV8fFwic3RyaW5nXCIhPXR5cGVvZiBlKXJldHVybiBlO3ZhciBuPXQucHJvdG9jb2wrXCIvL1wiK3QuaG9zdCxyPW4rdC5wYXRobmFtZS5yZXBsYWNlKC9cXC9bXlxcL10qJC8sXCIvXCIpO3JldHVybiBlLnJlcGxhY2UoL3VybFxccypcXCgoKD86W14pKF18XFwoKD86W14pKF0rfFxcKFteKShdKlxcKSkqXFwpKSopXFwpL2dpLGZ1bmN0aW9uKGUsdCl7dmFyIGksbz10LnRyaW0oKS5yZXBsYWNlKC9eXCIoLiopXCIkLyxmdW5jdGlvbihlLHQpe3JldHVybiB0fSkucmVwbGFjZSgvXicoLiopJyQvLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR9KTtyZXR1cm4vXigjfGRhdGE6fGh0dHA6XFwvXFwvfGh0dHBzOlxcL1xcL3xmaWxlOlxcL1xcL1xcL3xcXHMqJCkvaS50ZXN0KG8pP2U6KGk9MD09PW8uaW5kZXhPZihcIi8vXCIpP286MD09PW8uaW5kZXhPZihcIi9cIik/bitvOnIrby5yZXBsYWNlKC9eXFwuXFwvLyxcIlwiKSxcInVybChcIitKU09OLnN0cmluZ2lmeShpKStcIilcIil9KX19LGZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjtuLnIodCk7dmFyIHI9e21peGluczpbbigyKS5taXhpbl0scHJvcHM6e2Nsb3NlT25DbGljazp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITB9LGNsb3NlT25TY3JvbGw6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiEwfX0sY29tcHV0ZWQ6e3N0eWxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2hvdz97dG9wOlwiXCIuY29uY2F0KHRoaXMudG9wLFwicHhcIiksbGVmdDpcIlwiLmNvbmNhdCh0aGlzLmxlZnQsXCJweFwiKX06bnVsbH19LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57dG9wOm51bGwsbGVmdDpudWxsLHNob3c6ITEsZGF0YTpudWxsfX0sYmVmb3JlRGVzdHJveTpmdW5jdGlvbigpe3RoaXMuY2xvc2VPblNjcm9sbCYmdGhpcy5yZW1vdmVTY3JvbGxFdmVudExpc3RlbmVyKCl9LG1ldGhvZHM6e2FkZFNjcm9sbEV2ZW50TGlzdGVuZXI6ZnVuY3Rpb24oKXt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLHRoaXMuY2xvc2UpfSxjbG9zZTpmdW5jdGlvbigpe3ZhciBlPSEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0pfHxhcmd1bWVudHNbMF07dGhpcy5zaG93JiYodGhpcy50b3A9bnVsbCx0aGlzLmxlZnQ9bnVsbCx0aGlzLmRhdGE9bnVsbCx0aGlzLnNob3c9ITEsdGhpcy5jbG9zZU9uU2Nyb2xsJiZ0aGlzLnJlbW92ZVNjcm9sbEV2ZW50TGlzdGVuZXIoKSxlJiZ0aGlzLiRlbWl0KFwiY2xvc2VcIikpfSxvbkNsaWNrOmZ1bmN0aW9uKCl7dGhpcy5jbG9zZU9uQ2xpY2smJnRoaXMuY2xvc2UoITEpfSxvcGVuOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpczt0aGlzLmRhdGE9dCx0aGlzLnNob3c9ITAsdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24oKXtuLnBvc2l0aW9uTWVudShlLmNsaWVudFksZS5jbGllbnRYKSxuLiRlbC5mb2N1cygpLG4uY2xvc2VPblNjcm9sbCYmbi5hZGRTY3JvbGxFdmVudExpc3RlbmVyKCksbi4kZW1pdChcIm9wZW5cIixlLG4uZGF0YSxuLnRvcCxuLmxlZnQpfSl9LHBvc2l0aW9uTWVudTpmdW5jdGlvbihlLHQpe3ZhciBuPXdpbmRvdy5pbm5lckhlaWdodC10aGlzLiRlbC5vZmZzZXRIZWlnaHQtMjUscj13aW5kb3cuaW5uZXJXaWR0aC10aGlzLiRlbC5vZmZzZXRXaWR0aC0yNTtlPm4mJihlPW4pLHQ+ciYmKHQ9ciksdGhpcy50b3A9ZSx0aGlzLmxlZnQ9dH0scmVtb3ZlU2Nyb2xsRXZlbnRMaXN0ZW5lcjpmdW5jdGlvbigpe3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsdGhpcy5jbG9zZSl9fSx3YXRjaDp7Y2xvc2VPblNjcm9sbDpmdW5jdGlvbihlLHQpe2UhPT10JiYoZSYmdGhpcy5zaG93P3RoaXMuYWRkU2Nyb2xsRXZlbnRMaXN0ZW5lcigpOnRoaXMucmVtb3ZlU2Nyb2xsRXZlbnRMaXN0ZW5lcigpKX19fTtuKDkpO3ZhciBpPWZ1bmN0aW9uKGUsdCxuLHIsaSxvLGEscyl7dmFyIGMsdT1cImZ1bmN0aW9uXCI9PXR5cGVvZiBlP2Uub3B0aW9uczplO2lmKHQmJih1LnJlbmRlcj10LHUuc3RhdGljUmVuZGVyRm5zPW4sdS5fY29tcGlsZWQ9ITApLHImJih1LmZ1bmN0aW9uYWw9ITApLG8mJih1Ll9zY29wZUlkPVwiZGF0YS12LVwiK28pLGE/KGM9ZnVuY3Rpb24oZSl7KGU9ZXx8dGhpcy4kdm5vZGUmJnRoaXMuJHZub2RlLnNzckNvbnRleHR8fHRoaXMucGFyZW50JiZ0aGlzLnBhcmVudC4kdm5vZGUmJnRoaXMucGFyZW50LiR2bm9kZS5zc3JDb250ZXh0KXx8XCJ1bmRlZmluZWRcIj09dHlwZW9mIF9fVlVFX1NTUl9DT05URVhUX198fChlPV9fVlVFX1NTUl9DT05URVhUX18pLGkmJmkuY2FsbCh0aGlzLGUpLGUmJmUuX3JlZ2lzdGVyZWRDb21wb25lbnRzJiZlLl9yZWdpc3RlcmVkQ29tcG9uZW50cy5hZGQoYSl9LHUuX3NzclJlZ2lzdGVyPWMpOmkmJihjPXM/ZnVuY3Rpb24oKXtpLmNhbGwodGhpcyx0aGlzLiRyb290LiRvcHRpb25zLnNoYWRvd1Jvb3QpfTppKSxjKWlmKHUuZnVuY3Rpb25hbCl7dS5faW5qZWN0U3R5bGVzPWM7dmFyIGw9dS5yZW5kZXI7dS5yZW5kZXI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYy5jYWxsKHQpLGwoZSx0KX19ZWxzZXt2YXIgZj11LmJlZm9yZUNyZWF0ZTt1LmJlZm9yZUNyZWF0ZT1mP1tdLmNvbmNhdChmLGMpOltjXX1yZXR1cm57ZXhwb3J0czplLG9wdGlvbnM6dX19KHIsZnVuY3Rpb24oKXt2YXIgZT10aGlzLiRjcmVhdGVFbGVtZW50O3JldHVybih0aGlzLl9zZWxmLl9jfHxlKShcImRpdlwiLHtkaXJlY3RpdmVzOlt7bmFtZTpcInNob3dcIixyYXdOYW1lOlwidi1zaG93XCIsdmFsdWU6dGhpcy5zaG93LGV4cHJlc3Npb246XCJzaG93XCJ9LHtuYW1lOlwib24tY2xpY2thd2F5XCIscmF3TmFtZTpcInYtb24tY2xpY2thd2F5XCIsdmFsdWU6dGhpcy5jbG9zZSxleHByZXNzaW9uOlwiY2xvc2VcIn1dLHN0YXRpY0NsYXNzOlwidi1jb250ZXh0XCIsc3R5bGU6dGhpcy5zdHlsZSxhdHRyczp7dGFiaW5kZXg6XCItMVwifSxvbjp7Y2xpY2s6dGhpcy5vbkNsaWNrLFwiIWNvbnRleHRtZW51XCI6ZnVuY3Rpb24oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpfX19LFt0aGlzLl90KFwiZGVmYXVsdFwiLG51bGwse2RhdGE6dGhpcy5kYXRhfSldLDIpfSxbXSwhMSxudWxsLFwiN2RlMmFiNDVcIixudWxsKS5leHBvcnRzO24uZCh0LFwiVnVlQ29udGV4dFwiLGZ1bmN0aW9uKCl7cmV0dXJuIGl9KX1dKX0pOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./dist/vue-context.js\n");
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/process/browser.js":
|
||
/*!*****************************************!*\
|
||
!*** ./node_modules/process/browser.js ***!
|
||
\*****************************************/
|
||
/*! no static exports found */
|
||
/***/ (function(module, exports) {
|
||
|
||
eval("// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzP2YyOGMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixzQkFBc0I7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHFDQUFxQzs7QUFFckM7QUFDQTtBQUNBOztBQUVBLDJCQUEyQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsVUFBVSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9wcm9jZXNzL2Jyb3dzZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXJcbnZhciBwcm9jZXNzID0gbW9kdWxlLmV4cG9ydHMgPSB7fTtcblxuLy8gY2FjaGVkIGZyb20gd2hhdGV2ZXIgZ2xvYmFsIGlzIHByZXNlbnQgc28gdGhhdCB0ZXN0IHJ1bm5lcnMgdGhhdCBzdHViIGl0XG4vLyBkb24ndCBicmVhayB0aGluZ3MuICBCdXQgd2UgbmVlZCB0byB3cmFwIGl0IGluIGEgdHJ5IGNhdGNoIGluIGNhc2UgaXQgaXNcbi8vIHdyYXBwZWQgaW4gc3RyaWN0IG1vZGUgY29kZSB3aGljaCBkb2Vzbid0IGRlZmluZSBhbnkgZ2xvYmFscy4gIEl0J3MgaW5zaWRlIGFcbi8vIGZ1bmN0aW9uIGJlY2F1c2UgdHJ5L2NhdGNoZXMgZGVvcHRpbWl6ZSBpbiBjZXJ0YWluIGVuZ2luZXMuXG5cbnZhciBjYWNoZWRTZXRUaW1lb3V0O1xudmFyIGNhY2hlZENsZWFyVGltZW91dDtcblxuZnVuY3Rpb24gZGVmYXVsdFNldFRpbW91dCgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3NldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cbmZ1bmN0aW9uIGRlZmF1bHRDbGVhclRpbWVvdXQgKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XG59XG4oZnVuY3Rpb24gKCkge1xuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2V0VGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2YgY2xlYXJUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgIH1cbn0gKCkpXG5mdW5jdGlvbiBydW5UaW1lb3V0KGZ1bikge1xuICAgIGlmIChjYWNoZWRTZXRUaW1lb3V0ID09PSBzZXRUaW1lb3V0KSB7XG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH1cbiAgICAvLyBpZiBzZXRUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuICAgIGlmICgoY2FjaGVkU2V0VGltZW91dCA9PT0gZGVmYXVsdFNldFRpbW91dCB8fCAhY2FjaGVkU2V0VGltZW91dCkgJiYgc2V0VGltZW91dCkge1xuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dChmdW4sIDApO1xuICAgIH0gY2F0Y2goZSl7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBpbiBJLkUuIGJ1dCB0aGUgc2NyaXB0IGhhcyBiZWVuIGV2YWxlZCBzbyBJLkUuIGRvZXNuJ3QgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwobnVsbCwgZnVuLCAwKTtcbiAgICAgICAgfSBjYXRjaChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yXG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKHRoaXMsIGZ1biwgMCk7XG4gICAgICAgIH1cbiAgICB9XG5cblxufVxuZnVuY3Rpb24gcnVuQ2xlYXJUaW1lb3V0KG1hcmtlcikge1xuICAgIGlmIChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGNsZWFyVGltZW91dCkge1xuICAgICAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5lIHNpdHVhdGlvbnNcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICAvLyBpZiBjbGVhclRpbWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG4gICAgaWYgKChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGRlZmF1bHRDbGVhclRpbWVvdXQgfHwgIWNhY2hlZENsZWFyVGltZW91dCkgJiYgY2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG4gICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCAgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbChudWxsLCBtYXJrZXIpO1xuICAgICAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yLlxuICAgICAgICAgICAgLy8gU29tZSB2ZXJzaW9ucyBvZiBJLkUuIGhhdmUgZGlmZmVyZW50IHJ1bGVzIGZvciBjbGVhclRpbWVvdXQgdnMgc2V0VGltZW91dFxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKHRoaXMsIG1hcmtlcik7XG4gICAgICAgIH1cbiAgICB9XG5cblxuXG59XG52YXIgcXVldWUgPSBbXTtcbnZhciBkcmFpbmluZyA9IGZhbHNlO1xudmFyIGN1cnJlbnRRdWV1ZTtcbnZhciBxdWV1ZUluZGV4ID0gLTE7XG5cbmZ1bmN0aW9uIGNsZWFuVXBOZXh0VGljaygpIHtcbiAgICBpZiAoIWRyYWluaW5nIHx8ICFjdXJyZW50UXVldWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIGlmIChjdXJyZW50UXVldWUubGVuZ3RoKSB7XG4gICAgICAgIHF1ZXVlID0gY3VycmVudFF1ZXVlLmNvbmNhdChxdWV1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgIH1cbiAgICBpZiAocXVldWUubGVuZ3RoKSB7XG4gICAgICAgIGRyYWluUXVldWUoKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGRyYWluUXVldWUoKSB7XG4gICAgaWYgKGRyYWluaW5nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHRpbWVvdXQgPSBydW5UaW1lb3V0KGNsZWFuVXBOZXh0VGljayk7XG4gICAgZHJhaW5pbmcgPSB0cnVlO1xuXG4gICAgdmFyIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB3aGlsZShsZW4pIHtcbiAgICAgICAgY3VycmVudFF1ZXVlID0gcXVldWU7XG4gICAgICAgIHF1ZXVlID0gW107XG4gICAgICAgIHdoaWxlICgrK3F1ZXVlSW5kZXggPCBsZW4pIHtcbiAgICAgICAgICAgIGlmIChjdXJyZW50UXVldWUpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50UXVldWVbcXVldWVJbmRleF0ucnVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgICAgICBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgfVxuICAgIGN1cnJlbnRRdWV1ZSA9IG51bGw7XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBydW5DbGVhclRpbWVvdXQodGltZW91dCk7XG59XG5cbnByb2Nlc3MubmV4dFRpY2sgPSBmdW5jdGlvbiAoZnVuKSB7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCAtIDEpO1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcXVldWUucHVzaChuZXcgSXRlbShmdW4sIGFyZ3MpKTtcbiAgICBpZiAocXVldWUubGVuZ3RoID09PSAxICYmICFkcmFpbmluZykge1xuICAgICAgICBydW5UaW1lb3V0KGRyYWluUXVldWUpO1xuICAgIH1cbn07XG5cbi8vIHY4IGxpa2VzIHByZWRpY3RpYmxlIG9iamVjdHNcbmZ1bmN0aW9uIEl0ZW0oZnVuLCBhcnJheSkge1xuICAgIHRoaXMuZnVuID0gZnVuO1xuICAgIHRoaXMuYXJyYXkgPSBhcnJheTtcbn1cbkl0ZW0ucHJvdG90eXBlLnJ1biA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmZ1bi5hcHBseShudWxsLCB0aGlzLmFycmF5KTtcbn07XG5wcm9jZXNzLnRpdGxlID0gJ2Jyb3dzZXInO1xucHJvY2Vzcy5icm93c2VyID0gdHJ1ZTtcbnByb2Nlc3MuZW52ID0ge307XG5wcm9jZXNzLmFyZ3YgPSBbXTtcbnByb2Nlc3MudmVyc2lvbiA9ICcnOyAvLyBlbXB0eSBzdHJpbmcgdG8gYXZvaWQgcmVnZXhwIGlzc3Vlc1xucHJvY2Vzcy52ZXJzaW9ucyA9IHt9O1xuXG5mdW5jdGlvbiBub29wKCkge31cblxucHJvY2Vzcy5vbiA9IG5vb3A7XG5wcm9jZXNzLmFkZExpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3Mub25jZSA9IG5vb3A7XG5wcm9jZXNzLm9mZiA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUxpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlQWxsTGlzdGVuZXJzID0gbm9vcDtcbnByb2Nlc3MuZW1pdCA9IG5vb3A7XG5wcm9jZXNzLnByZXBlbmRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnByZXBlbmRPbmNlTGlzdGVuZXIgPSBub29wO1xuXG5wcm9jZXNzLmxpc3RlbmVycyA9IGZ1bmN0aW9uIChuYW1lKSB7IHJldHVybiBbXSB9XG5cbnByb2Nlc3MuYmluZGluZyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcblxucHJvY2Vzcy5jd2QgPSBmdW5jdGlvbiAoKSB7IHJldHVybiAnLycgfTtcbnByb2Nlc3MuY2hkaXIgPSBmdW5jdGlvbiAoZGlyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5wcm9jZXNzLnVtYXNrID0gZnVuY3Rpb24oKSB7IHJldHVybiAwOyB9O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/process/browser.js\n");
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/setimmediate/setImmediate.js":
|
||
/*!***************************************************!*\
|
||
!*** ./node_modules/setimmediate/setImmediate.js ***!
|
||
\***************************************************/
|
||
/*! no static exports found */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
eval("/* WEBPACK VAR INJECTION */(function(global, process) {(function (global, undefined) {\n \"use strict\";\n\n if (global.setImmediate) {\n return;\n }\n\n var nextHandle = 1; // Spec says greater than zero\n var tasksByHandle = {};\n var currentlyRunningATask = false;\n var doc = global.document;\n var registerImmediate;\n\n function setImmediate(callback) {\n // Callback can either be a function or a string\n if (typeof callback !== \"function\") {\n callback = new Function(\"\" + callback);\n }\n // Copy function arguments\n var args = new Array(arguments.length - 1);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i + 1];\n }\n // Store and register the task\n var task = { callback: callback, args: args };\n tasksByHandle[nextHandle] = task;\n registerImmediate(nextHandle);\n return nextHandle++;\n }\n\n function clearImmediate(handle) {\n delete tasksByHandle[handle];\n }\n\n function run(task) {\n var callback = task.callback;\n var args = task.args;\n switch (args.length) {\n case 0:\n callback();\n break;\n case 1:\n callback(args[0]);\n break;\n case 2:\n callback(args[0], args[1]);\n break;\n case 3:\n callback(args[0], args[1], args[2]);\n break;\n default:\n callback.apply(undefined, args);\n break;\n }\n }\n\n function runIfPresent(handle) {\n // From the spec: \"Wait until any invocations of this algorithm started before this one have completed.\"\n // So if we're currently running a task, we'll need to delay this invocation.\n if (currentlyRunningATask) {\n // Delay by doing a setTimeout. setImmediate was tried instead, but in Firefox 7 it generated a\n // \"too much recursion\" error.\n setTimeout(runIfPresent, 0, handle);\n } else {\n var task = tasksByHandle[handle];\n if (task) {\n currentlyRunningATask = true;\n try {\n run(task);\n } finally {\n clearImmediate(handle);\n currentlyRunningATask = false;\n }\n }\n }\n }\n\n function installNextTickImplementation() {\n registerImmediate = function(handle) {\n process.nextTick(function () { runIfPresent(handle); });\n };\n }\n\n function canUsePostMessage() {\n // The test against `importScripts` prevents this implementation from being installed inside a web worker,\n // where `global.postMessage` means something completely different and can't be used for this purpose.\n if (global.postMessage && !global.importScripts) {\n var postMessageIsAsynchronous = true;\n var oldOnMessage = global.onmessage;\n global.onmessage = function() {\n postMessageIsAsynchronous = false;\n };\n global.postMessage(\"\", \"*\");\n global.onmessage = oldOnMessage;\n return postMessageIsAsynchronous;\n }\n }\n\n function installPostMessageImplementation() {\n // Installs an event handler on `global` for the `message` event: see\n // * https://developer.mozilla.org/en/DOM/window.postMessage\n // * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages\n\n var messagePrefix = \"setImmediate$\" + Math.random() + \"$\";\n var onGlobalMessage = function(event) {\n if (event.source === global &&\n typeof event.data === \"string\" &&\n event.data.indexOf(messagePrefix) === 0) {\n runIfPresent(+event.data.slice(messagePrefix.length));\n }\n };\n\n if (global.addEventListener) {\n global.addEventListener(\"message\", onGlobalMessage, false);\n } else {\n global.attachEvent(\"onmessage\", onGlobalMessage);\n }\n\n registerImmediate = function(handle) {\n global.postMessage(messagePrefix + handle, \"*\");\n };\n }\n\n function installMessageChannelImplementation() {\n var channel = new MessageChannel();\n channel.port1.onmessage = function(event) {\n var handle = event.data;\n runIfPresent(handle);\n };\n\n registerImmediate = function(handle) {\n channel.port2.postMessage(handle);\n };\n }\n\n function installReadyStateChangeImplementation() {\n var html = doc.documentElement;\n registerImmediate = function(handle) {\n // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted\n // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.\n var script = doc.createElement(\"script\");\n script.onreadystatechange = function () {\n runIfPresent(handle);\n script.onreadystatechange = null;\n html.removeChild(script);\n script = null;\n };\n html.appendChild(script);\n };\n }\n\n function installSetTimeoutImplementation() {\n registerImmediate = function(handle) {\n setTimeout(runIfPresent, 0, handle);\n };\n }\n\n // If supported, we should attach to the prototype of global, since that is where setTimeout et al. live.\n var attachTo = Object.getPrototypeOf && Object.getPrototypeOf(global);\n attachTo = attachTo && attachTo.setTimeout ? attachTo : global;\n\n // Don't get fooled by e.g. browserify environments.\n if ({}.toString.call(global.process) === \"[object process]\") {\n // For Node.js before 0.9\n installNextTickImplementation();\n\n } else if (canUsePostMessage()) {\n // For non-IE10 modern browsers\n installPostMessageImplementation();\n\n } else if (global.MessageChannel) {\n // For web workers, where supported\n installMessageChannelImplementation();\n\n } else if (doc && \"onreadystatechange\" in doc.createElement(\"script\")) {\n // For IE 6–8\n installReadyStateChangeImplementation();\n\n } else {\n // For older browsers\n installSetTimeoutImplementation();\n }\n\n attachTo.setImmediate = setImmediate;\n attachTo.clearImmediate = clearImmediate;\n}(typeof self === \"undefined\" ? typeof global === \"undefined\" ? this : global : self));\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../webpack/buildin/global.js */ \"./node_modules/webpack/buildin/global.js\"), __webpack_require__(/*! ./../process/browser.js */ \"./node_modules/process/browser.js\")))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvc2V0aW1tZWRpYXRlL3NldEltbWVkaWF0ZS5qcz82MDE3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHVCQUF1QjtBQUN2QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQixpQkFBaUI7QUFDdEM7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDBDQUEwQyxzQkFBc0IsRUFBRTtBQUNsRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QztBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7O0FBRUEsS0FBSztBQUNMO0FBQ0E7O0FBRUEsS0FBSztBQUNMO0FBQ0E7O0FBRUEsS0FBSztBQUNMO0FBQ0E7O0FBRUEsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9zZXRpbW1lZGlhdGUvc2V0SW1tZWRpYXRlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIChnbG9iYWwsIHVuZGVmaW5lZCkge1xuICAgIFwidXNlIHN0cmljdFwiO1xuXG4gICAgaWYgKGdsb2JhbC5zZXRJbW1lZGlhdGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBuZXh0SGFuZGxlID0gMTsgLy8gU3BlYyBzYXlzIGdyZWF0ZXIgdGhhbiB6ZXJvXG4gICAgdmFyIHRhc2tzQnlIYW5kbGUgPSB7fTtcbiAgICB2YXIgY3VycmVudGx5UnVubmluZ0FUYXNrID0gZmFsc2U7XG4gICAgdmFyIGRvYyA9IGdsb2JhbC5kb2N1bWVudDtcbiAgICB2YXIgcmVnaXN0ZXJJbW1lZGlhdGU7XG5cbiAgICBmdW5jdGlvbiBzZXRJbW1lZGlhdGUoY2FsbGJhY2spIHtcbiAgICAgIC8vIENhbGxiYWNrIGNhbiBlaXRoZXIgYmUgYSBmdW5jdGlvbiBvciBhIHN0cmluZ1xuICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGNhbGxiYWNrID0gbmV3IEZ1bmN0aW9uKFwiXCIgKyBjYWxsYmFjayk7XG4gICAgICB9XG4gICAgICAvLyBDb3B5IGZ1bmN0aW9uIGFyZ3VtZW50c1xuICAgICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCAtIDEpO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgYXJnc1tpXSA9IGFyZ3VtZW50c1tpICsgMV07XG4gICAgICB9XG4gICAgICAvLyBTdG9yZSBhbmQgcmVnaXN0ZXIgdGhlIHRhc2tcbiAgICAgIHZhciB0YXNrID0geyBjYWxsYmFjazogY2FsbGJhY2ssIGFyZ3M6IGFyZ3MgfTtcbiAgICAgIHRhc2tzQnlIYW5kbGVbbmV4dEhhbmRsZV0gPSB0YXNrO1xuICAgICAgcmVnaXN0ZXJJbW1lZGlhdGUobmV4dEhhbmRsZSk7XG4gICAgICByZXR1cm4gbmV4dEhhbmRsZSsrO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNsZWFySW1tZWRpYXRlKGhhbmRsZSkge1xuICAgICAgICBkZWxldGUgdGFza3NCeUhhbmRsZVtoYW5kbGVdO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJ1bih0YXNrKSB7XG4gICAgICAgIHZhciBjYWxsYmFjayA9IHRhc2suY2FsbGJhY2s7XG4gICAgICAgIHZhciBhcmdzID0gdGFzay5hcmdzO1xuICAgICAgICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgY2FsbGJhY2soYXJnc1swXSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgY2FsbGJhY2soYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgY2FsbGJhY2soYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KHVuZGVmaW5lZCwgYXJncyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJ1bklmUHJlc2VudChoYW5kbGUpIHtcbiAgICAgICAgLy8gRnJvbSB0aGUgc3BlYzogXCJXYWl0IHVudGlsIGFueSBpbnZvY2F0aW9ucyBvZiB0aGlzIGFsZ29yaXRobSBzdGFydGVkIGJlZm9yZSB0aGlzIG9uZSBoYXZlIGNvbXBsZXRlZC5cIlxuICAgICAgICAvLyBTbyBpZiB3ZSdyZSBjdXJyZW50bHkgcnVubmluZyBhIHRhc2ssIHdlJ2xsIG5lZWQgdG8gZGVsYXkgdGhpcyBpbnZvY2F0aW9uLlxuICAgICAgICBpZiAoY3VycmVudGx5UnVubmluZ0FUYXNrKSB7XG4gICAgICAgICAgICAvLyBEZWxheSBieSBkb2luZyBhIHNldFRpbWVvdXQuIHNldEltbWVkaWF0ZSB3YXMgdHJpZWQgaW5zdGVhZCwgYnV0IGluIEZpcmVmb3ggNyBpdCBnZW5lcmF0ZWQgYVxuICAgICAgICAgICAgLy8gXCJ0b28gbXVjaCByZWN1cnNpb25cIiBlcnJvci5cbiAgICAgICAgICAgIHNldFRpbWVvdXQocnVuSWZQcmVzZW50LCAwLCBoYW5kbGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIHRhc2sgPSB0YXNrc0J5SGFuZGxlW2hhbmRsZV07XG4gICAgICAgICAgICBpZiAodGFzaykge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRseVJ1bm5pbmdBVGFzayA9IHRydWU7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcnVuKHRhc2spO1xuICAgICAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgIGNsZWFySW1tZWRpYXRlKGhhbmRsZSk7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRseVJ1bm5pbmdBVGFzayA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGluc3RhbGxOZXh0VGlja0ltcGxlbWVudGF0aW9uKCkge1xuICAgICAgICByZWdpc3RlckltbWVkaWF0ZSA9IGZ1bmN0aW9uKGhhbmRsZSkge1xuICAgICAgICAgICAgcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbiAoKSB7IHJ1bklmUHJlc2VudChoYW5kbGUpOyB9KTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjYW5Vc2VQb3N0TWVzc2FnZSgpIHtcbiAgICAgICAgLy8gVGhlIHRlc3QgYWdhaW5zdCBgaW1wb3J0U2NyaXB0c2AgcHJldmVudHMgdGhpcyBpbXBsZW1lbnRhdGlvbiBmcm9tIGJlaW5nIGluc3RhbGxlZCBpbnNpZGUgYSB3ZWIgd29ya2VyLFxuICAgICAgICAvLyB3aGVyZSBgZ2xvYmFsLnBvc3RNZXNzYWdlYCBtZWFucyBzb21ldGhpbmcgY29tcGxldGVseSBkaWZmZXJlbnQgYW5kIGNhbid0IGJlIHVzZWQgZm9yIHRoaXMgcHVycG9zZS5cbiAgICAgICAgaWYgKGdsb2JhbC5wb3N0TWVzc2FnZSAmJiAhZ2xvYmFsLmltcG9ydFNjcmlwdHMpIHtcbiAgICAgICAgICAgIHZhciBwb3N0TWVzc2FnZUlzQXN5bmNocm9ub3VzID0gdHJ1ZTtcbiAgICAgICAgICAgIHZhciBvbGRPbk1lc3NhZ2UgPSBnbG9iYWwub25tZXNzYWdlO1xuICAgICAgICAgICAgZ2xvYmFsLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHBvc3RNZXNzYWdlSXNBc3luY2hyb25vdXMgPSBmYWxzZTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBnbG9iYWwucG9zdE1lc3NhZ2UoXCJcIiwgXCIqXCIpO1xuICAgICAgICAgICAgZ2xvYmFsLm9ubWVzc2FnZSA9IG9sZE9uTWVzc2FnZTtcbiAgICAgICAgICAgIHJldHVybiBwb3N0TWVzc2FnZUlzQXN5bmNocm9ub3VzO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW5zdGFsbFBvc3RNZXNzYWdlSW1wbGVtZW50YXRpb24oKSB7XG4gICAgICAgIC8vIEluc3RhbGxzIGFuIGV2ZW50IGhhbmRsZXIgb24gYGdsb2JhbGAgZm9yIHRoZSBgbWVzc2FnZWAgZXZlbnQ6IHNlZVxuICAgICAgICAvLyAqIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL0RPTS93aW5kb3cucG9zdE1lc3NhZ2VcbiAgICAgICAgLy8gKiBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS9jb21tcy5odG1sI2Nyb3NzRG9jdW1lbnRNZXNzYWdlc1xuXG4gICAgICAgIHZhciBtZXNzYWdlUHJlZml4ID0gXCJzZXRJbW1lZGlhdGUkXCIgKyBNYXRoLnJhbmRvbSgpICsgXCIkXCI7XG4gICAgICAgIHZhciBvbkdsb2JhbE1lc3NhZ2UgPSBmdW5jdGlvbihldmVudCkge1xuICAgICAgICAgICAgaWYgKGV2ZW50LnNvdXJjZSA9PT0gZ2xvYmFsICYmXG4gICAgICAgICAgICAgICAgdHlwZW9mIGV2ZW50LmRhdGEgPT09IFwic3RyaW5nXCIgJiZcbiAgICAgICAgICAgICAgICBldmVudC5kYXRhLmluZGV4T2YobWVzc2FnZVByZWZpeCkgPT09IDApIHtcbiAgICAgICAgICAgICAgICBydW5JZlByZXNlbnQoK2V2ZW50LmRhdGEuc2xpY2UobWVzc2FnZVByZWZpeC5sZW5ndGgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIpIHtcbiAgICAgICAgICAgIGdsb2JhbC5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCBvbkdsb2JhbE1lc3NhZ2UsIGZhbHNlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGdsb2JhbC5hdHRhY2hFdmVudChcIm9ubWVzc2FnZVwiLCBvbkdsb2JhbE1lc3NhZ2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVnaXN0ZXJJbW1lZGlhdGUgPSBmdW5jdGlvbihoYW5kbGUpIHtcbiAgICAgICAgICAgIGdsb2JhbC5wb3N0TWVzc2FnZShtZXNzYWdlUHJlZml4ICsgaGFuZGxlLCBcIipcIik7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW5zdGFsbE1lc3NhZ2VDaGFubmVsSW1wbGVtZW50YXRpb24oKSB7XG4gICAgICAgIHZhciBjaGFubmVsID0gbmV3IE1lc3NhZ2VDaGFubmVsKCk7XG4gICAgICAgIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgICAgIHZhciBoYW5kbGUgPSBldmVudC5kYXRhO1xuICAgICAgICAgICAgcnVuSWZQcmVzZW50KGhhbmRsZSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgcmVnaXN0ZXJJbW1lZGlhdGUgPSBmdW5jdGlvbihoYW5kbGUpIHtcbiAgICAgICAgICAgIGNoYW5uZWwucG9ydDIucG9zdE1lc3NhZ2UoaGFuZGxlKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnN0YWxsUmVhZHlTdGF0ZUNoYW5nZUltcGxlbWVudGF0aW9uKCkge1xuICAgICAgICB2YXIgaHRtbCA9IGRvYy5kb2N1bWVudEVsZW1lbnQ7XG4gICAgICAgIHJlZ2lzdGVySW1tZWRpYXRlID0gZnVuY3Rpb24oaGFuZGxlKSB7XG4gICAgICAgICAgICAvLyBDcmVhdGUgYSA8c2NyaXB0PiBlbGVtZW50OyBpdHMgcmVhZHlzdGF0ZWNoYW5nZSBldmVudCB3aWxsIGJlIGZpcmVkIGFzeW5jaHJvbm91c2x5IG9uY2UgaXQgaXMgaW5zZXJ0ZWRcbiAgICAgICAgICAgIC8vIGludG8gdGhlIGRvY3VtZW50LiBEbyBzbywgdGh1cyBxdWV1aW5nIHVwIHRoZSB0YXNrLiBSZW1lbWJlciB0byBjbGVhbiB1cCBvbmNlIGl0J3MgYmVlbiBjYWxsZWQuXG4gICAgICAgICAgICB2YXIgc2NyaXB0ID0gZG9jLmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7XG4gICAgICAgICAgICBzY3JpcHQub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJ1bklmUHJlc2VudChoYW5kbGUpO1xuICAgICAgICAgICAgICAgIHNjcmlwdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBudWxsO1xuICAgICAgICAgICAgICAgIGh0bWwucmVtb3ZlQ2hpbGQoc2NyaXB0KTtcbiAgICAgICAgICAgICAgICBzY3JpcHQgPSBudWxsO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGh0bWwuYXBwZW5kQ2hpbGQoc2NyaXB0KTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnN0YWxsU2V0VGltZW91dEltcGxlbWVudGF0aW9uKCkge1xuICAgICAgICByZWdpc3RlckltbWVkaWF0ZSA9IGZ1bmN0aW9uKGhhbmRsZSkge1xuICAgICAgICAgICAgc2V0VGltZW91dChydW5JZlByZXNlbnQsIDAsIGhhbmRsZSk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gSWYgc3VwcG9ydGVkLCB3ZSBzaG91bGQgYXR0YWNoIHRvIHRoZSBwcm90b3R5cGUgb2YgZ2xvYmFsLCBzaW5jZSB0aGF0IGlzIHdoZXJlIHNldFRpbWVvdXQgZXQgYWwuIGxpdmUuXG4gICAgdmFyIGF0dGFjaFRvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mICYmIE9iamVjdC5nZXRQcm90b3R5cGVPZihnbG9iYWwpO1xuICAgIGF0dGFjaFRvID0gYXR0YWNoVG8gJiYgYXR0YWNoVG8uc2V0VGltZW91dCA/IGF0dGFjaFRvIDogZ2xvYmFsO1xuXG4gICAgLy8gRG9uJ3QgZ2V0IGZvb2xlZCBieSBlLmcuIGJyb3dzZXJpZnkgZW52aXJvbm1lbnRzLlxuICAgIGlmICh7fS50b1N0cmluZy5jYWxsKGdsb2JhbC5wcm9jZXNzKSA9PT0gXCJbb2JqZWN0IHByb2Nlc3NdXCIpIHtcbiAgICAgICAgLy8gRm9yIE5vZGUuanMgYmVmb3JlIDAuOVxuICAgICAgICBpbnN0YWxsTmV4dFRpY2tJbXBsZW1lbnRhdGlvbigpO1xuXG4gICAgfSBlbHNlIGlmIChjYW5Vc2VQb3N0TWVzc2FnZSgpKSB7XG4gICAgICAgIC8vIEZvciBub24tSUUxMCBtb2Rlcm4gYnJvd3NlcnNcbiAgICAgICAgaW5zdGFsbFBvc3RNZXNzYWdlSW1wbGVtZW50YXRpb24oKTtcblxuICAgIH0gZWxzZSBpZiAoZ2xvYmFsLk1lc3NhZ2VDaGFubmVsKSB7XG4gICAgICAgIC8vIEZvciB3ZWIgd29ya2Vycywgd2hlcmUgc3VwcG9ydGVkXG4gICAgICAgIGluc3RhbGxNZXNzYWdlQ2hhbm5lbEltcGxlbWVudGF0aW9uKCk7XG5cbiAgICB9IGVsc2UgaWYgKGRvYyAmJiBcIm9ucmVhZHlzdGF0ZWNoYW5nZVwiIGluIGRvYy5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpKSB7XG4gICAgICAgIC8vIEZvciBJRSA24oCTOFxuICAgICAgICBpbnN0YWxsUmVhZHlTdGF0ZUNoYW5nZUltcGxlbWVudGF0aW9uKCk7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgICAvLyBGb3Igb2xkZXIgYnJvd3NlcnNcbiAgICAgICAgaW5zdGFsbFNldFRpbWVvdXRJbXBsZW1lbnRhdGlvbigpO1xuICAgIH1cblxuICAgIGF0dGFjaFRvLnNldEltbWVkaWF0ZSA9IHNldEltbWVkaWF0ZTtcbiAgICBhdHRhY2hUby5jbGVhckltbWVkaWF0ZSA9IGNsZWFySW1tZWRpYXRlO1xufSh0eXBlb2Ygc2VsZiA9PT0gXCJ1bmRlZmluZWRcIiA/IHR5cGVvZiBnbG9iYWwgPT09IFwidW5kZWZpbmVkXCIgPyB0aGlzIDogZ2xvYmFsIDogc2VsZikpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/setimmediate/setImmediate.js\n");
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/timers-browserify/main.js":
|
||
/*!************************************************!*\
|
||
!*** ./node_modules/timers-browserify/main.js ***!
|
||
\************************************************/
|
||
/*! no static exports found */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
eval("/* WEBPACK VAR INJECTION */(function(global) {var scope = (typeof global !== \"undefined\" && global) ||\n (typeof self !== \"undefined\" && self) ||\n window;\nvar apply = Function.prototype.apply;\n\n// DOM APIs, for completeness\n\nexports.setTimeout = function() {\n return new Timeout(apply.call(setTimeout, scope, arguments), clearTimeout);\n};\nexports.setInterval = function() {\n return new Timeout(apply.call(setInterval, scope, arguments), clearInterval);\n};\nexports.clearTimeout =\nexports.clearInterval = function(timeout) {\n if (timeout) {\n timeout.close();\n }\n};\n\nfunction Timeout(id, clearFn) {\n this._id = id;\n this._clearFn = clearFn;\n}\nTimeout.prototype.unref = Timeout.prototype.ref = function() {};\nTimeout.prototype.close = function() {\n this._clearFn.call(scope, this._id);\n};\n\n// Does not start the time, just sets up the members needed.\nexports.enroll = function(item, msecs) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = msecs;\n};\n\nexports.unenroll = function(item) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = -1;\n};\n\nexports._unrefActive = exports.active = function(item) {\n clearTimeout(item._idleTimeoutId);\n\n var msecs = item._idleTimeout;\n if (msecs >= 0) {\n item._idleTimeoutId = setTimeout(function onTimeout() {\n if (item._onTimeout)\n item._onTimeout();\n }, msecs);\n }\n};\n\n// setimmediate attaches itself to the global object\n__webpack_require__(/*! setimmediate */ \"./node_modules/setimmediate/setImmediate.js\");\n// On some exotic environments, it's not clear which object `setimmediate` was\n// able to install onto. Search each possibility in the same order as the\n// `setimmediate` library.\nexports.setImmediate = (typeof self !== \"undefined\" && self.setImmediate) ||\n (typeof global !== \"undefined\" && global.setImmediate) ||\n (this && this.setImmediate);\nexports.clearImmediate = (typeof self !== \"undefined\" && self.clearImmediate) ||\n (typeof global !== \"undefined\" && global.clearImmediate) ||\n (this && this.clearImmediate);\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../webpack/buildin/global.js */ \"./node_modules/webpack/buildin/global.js\")))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdGltZXJzLWJyb3dzZXJpZnkvbWFpbi5qcz81MTE4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQSxtQkFBTyxDQUFDLGlFQUFjO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy90aW1lcnMtYnJvd3NlcmlmeS9tYWluLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIHNjb3BlID0gKHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIgJiYgZ2xvYmFsKSB8fFxuICAgICAgICAgICAgKHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiICYmIHNlbGYpIHx8XG4gICAgICAgICAgICB3aW5kb3c7XG52YXIgYXBwbHkgPSBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHk7XG5cbi8vIERPTSBBUElzLCBmb3IgY29tcGxldGVuZXNzXG5cbmV4cG9ydHMuc2V0VGltZW91dCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IFRpbWVvdXQoYXBwbHkuY2FsbChzZXRUaW1lb3V0LCBzY29wZSwgYXJndW1lbnRzKSwgY2xlYXJUaW1lb3V0KTtcbn07XG5leHBvcnRzLnNldEludGVydmFsID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBuZXcgVGltZW91dChhcHBseS5jYWxsKHNldEludGVydmFsLCBzY29wZSwgYXJndW1lbnRzKSwgY2xlYXJJbnRlcnZhbCk7XG59O1xuZXhwb3J0cy5jbGVhclRpbWVvdXQgPVxuZXhwb3J0cy5jbGVhckludGVydmFsID0gZnVuY3Rpb24odGltZW91dCkge1xuICBpZiAodGltZW91dCkge1xuICAgIHRpbWVvdXQuY2xvc2UoKTtcbiAgfVxufTtcblxuZnVuY3Rpb24gVGltZW91dChpZCwgY2xlYXJGbikge1xuICB0aGlzLl9pZCA9IGlkO1xuICB0aGlzLl9jbGVhckZuID0gY2xlYXJGbjtcbn1cblRpbWVvdXQucHJvdG90eXBlLnVucmVmID0gVGltZW91dC5wcm90b3R5cGUucmVmID0gZnVuY3Rpb24oKSB7fTtcblRpbWVvdXQucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuX2NsZWFyRm4uY2FsbChzY29wZSwgdGhpcy5faWQpO1xufTtcblxuLy8gRG9lcyBub3Qgc3RhcnQgdGhlIHRpbWUsIGp1c3Qgc2V0cyB1cCB0aGUgbWVtYmVycyBuZWVkZWQuXG5leHBvcnRzLmVucm9sbCA9IGZ1bmN0aW9uKGl0ZW0sIG1zZWNzKSB7XG4gIGNsZWFyVGltZW91dChpdGVtLl9pZGxlVGltZW91dElkKTtcbiAgaXRlbS5faWRsZVRpbWVvdXQgPSBtc2Vjcztcbn07XG5cbmV4cG9ydHMudW5lbnJvbGwgPSBmdW5jdGlvbihpdGVtKSB7XG4gIGNsZWFyVGltZW91dChpdGVtLl9pZGxlVGltZW91dElkKTtcbiAgaXRlbS5faWRsZVRpbWVvdXQgPSAtMTtcbn07XG5cbmV4cG9ydHMuX3VucmVmQWN0aXZlID0gZXhwb3J0cy5hY3RpdmUgPSBmdW5jdGlvbihpdGVtKSB7XG4gIGNsZWFyVGltZW91dChpdGVtLl9pZGxlVGltZW91dElkKTtcblxuICB2YXIgbXNlY3MgPSBpdGVtLl9pZGxlVGltZW91dDtcbiAgaWYgKG1zZWNzID49IDApIHtcbiAgICBpdGVtLl9pZGxlVGltZW91dElkID0gc2V0VGltZW91dChmdW5jdGlvbiBvblRpbWVvdXQoKSB7XG4gICAgICBpZiAoaXRlbS5fb25UaW1lb3V0KVxuICAgICAgICBpdGVtLl9vblRpbWVvdXQoKTtcbiAgICB9LCBtc2Vjcyk7XG4gIH1cbn07XG5cbi8vIHNldGltbWVkaWF0ZSBhdHRhY2hlcyBpdHNlbGYgdG8gdGhlIGdsb2JhbCBvYmplY3RcbnJlcXVpcmUoXCJzZXRpbW1lZGlhdGVcIik7XG4vLyBPbiBzb21lIGV4b3RpYyBlbnZpcm9ubWVudHMsIGl0J3Mgbm90IGNsZWFyIHdoaWNoIG9iamVjdCBgc2V0aW1tZWRpYXRlYCB3YXNcbi8vIGFibGUgdG8gaW5zdGFsbCBvbnRvLiAgU2VhcmNoIGVhY2ggcG9zc2liaWxpdHkgaW4gdGhlIHNhbWUgb3JkZXIgYXMgdGhlXG4vLyBgc2V0aW1tZWRpYXRlYCBsaWJyYXJ5LlxuZXhwb3J0cy5zZXRJbW1lZGlhdGUgPSAodHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgJiYgc2VsZi5zZXRJbW1lZGlhdGUpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICh0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiICYmIGdsb2JhbC5zZXRJbW1lZGlhdGUpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICh0aGlzICYmIHRoaXMuc2V0SW1tZWRpYXRlKTtcbmV4cG9ydHMuY2xlYXJJbW1lZGlhdGUgPSAodHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgJiYgc2VsZi5jbGVhckltbWVkaWF0ZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAodHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBnbG9iYWwuY2xlYXJJbW1lZGlhdGUpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgKHRoaXMgJiYgdGhpcy5jbGVhckltbWVkaWF0ZSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/timers-browserify/main.js\n");
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/vue/dist/vue.common.dev.js":
|
||
/*!*************************************************!*\
|
||
!*** ./node_modules/vue/dist/vue.common.dev.js ***!
|
||
\*************************************************/
|
||
/*! no static exports found */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval("/* WEBPACK VAR INJECTION */(function(global, setImmediate) {/*!\n * Vue.js v2.6.10\n * (c) 2014-2019 Evan You\n * Released under the MIT License.\n */\n\n\n/* */\n\nvar emptyObject = Object.freeze({});\n\n// These helpers produce better VM code in JS engines due to their\n// explicitness and function inlining.\nfunction isUndef (v) {\n return v === undefined || v === null\n}\n\nfunction isDef (v) {\n return v !== undefined && v !== null\n}\n\nfunction isTrue (v) {\n return v === true\n}\n\nfunction isFalse (v) {\n return v === false\n}\n\n/**\n * Check if value is primitive.\n */\nfunction isPrimitive (value) {\n return (\n typeof value === 'string' ||\n typeof value === 'number' ||\n // $flow-disable-line\n typeof value === 'symbol' ||\n typeof value === 'boolean'\n )\n}\n\n/**\n * Quick object check - this is primarily used to tell\n * Objects from primitive values when we know the value\n * is a JSON-compliant type.\n */\nfunction isObject (obj) {\n return obj !== null && typeof obj === 'object'\n}\n\n/**\n * Get the raw type string of a value, e.g., [object Object].\n */\nvar _toString = Object.prototype.toString;\n\nfunction toRawType (value) {\n return _toString.call(value).slice(8, -1)\n}\n\n/**\n * Strict object type check. Only returns true\n * for plain JavaScript objects.\n */\nfunction isPlainObject (obj) {\n return _toString.call(obj) === '[object Object]'\n}\n\nfunction isRegExp (v) {\n return _toString.call(v) === '[object RegExp]'\n}\n\n/**\n * Check if val is a valid array index.\n */\nfunction isValidArrayIndex (val) {\n var n = parseFloat(String(val));\n return n >= 0 && Math.floor(n) === n && isFinite(val)\n}\n\nfunction isPromise (val) {\n return (\n isDef(val) &&\n typeof val.then === 'function' &&\n typeof val.catch === 'function'\n )\n}\n\n/**\n * Convert a value to a string that is actually rendered.\n */\nfunction toString (val) {\n return val == null\n ? ''\n : Array.isArray(val) || (isPlainObject(val) && val.toString === _toString)\n ? JSON.stringify(val, null, 2)\n : String(val)\n}\n\n/**\n * Convert an input value to a number for persistence.\n * If the conversion fails, return original string.\n */\nfunction toNumber (val) {\n var n = parseFloat(val);\n return isNaN(n) ? val : n\n}\n\n/**\n * Make a map and return a function for checking if a key\n * is in that map.\n */\nfunction makeMap (\n str,\n expectsLowerCase\n) {\n var map = Object.create(null);\n var list = str.split(',');\n for (var i = 0; i < list.length; i++) {\n map[list[i]] = true;\n }\n return expectsLowerCase\n ? function (val) { return map[val.toLowerCase()]; }\n : function (val) { return map[val]; }\n}\n\n/**\n * Check if a tag is a built-in tag.\n */\nvar isBuiltInTag = makeMap('slot,component', true);\n\n/**\n * Check if an attribute is a reserved attribute.\n */\nvar isReservedAttribute = makeMap('key,ref,slot,slot-scope,is');\n\n/**\n * Remove an item from an array.\n */\nfunction remove (arr, item) {\n if (arr.length) {\n var index = arr.indexOf(item);\n if (index > -1) {\n return arr.splice(index, 1)\n }\n }\n}\n\n/**\n * Check whether an object has the property.\n */\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nfunction hasOwn (obj, key) {\n return hasOwnProperty.call(obj, key)\n}\n\n/**\n * Create a cached version of a pure function.\n */\nfunction cached (fn) {\n var cache = Object.create(null);\n return (function cachedFn (str) {\n var hit = cache[str];\n return hit || (cache[str] = fn(str))\n })\n}\n\n/**\n * Camelize a hyphen-delimited string.\n */\nvar camelizeRE = /-(\\w)/g;\nvar camelize = cached(function (str) {\n return str.replace(camelizeRE, function (_, c) { return c ? c.toUpperCase() : ''; })\n});\n\n/**\n * Capitalize a string.\n */\nvar capitalize = cached(function (str) {\n return str.charAt(0).toUpperCase() + str.slice(1)\n});\n\n/**\n * Hyphenate a camelCase string.\n */\nvar hyphenateRE = /\\B([A-Z])/g;\nvar hyphenate = cached(function (str) {\n return str.replace(hyphenateRE, '-$1').toLowerCase()\n});\n\n/**\n * Simple bind polyfill for environments that do not support it,\n * e.g., PhantomJS 1.x. Technically, we don't need this anymore\n * since native bind is now performant enough in most browsers.\n * But removing it would mean breaking code that was able to run in\n * PhantomJS 1.x, so this must be kept for backward compatibility.\n */\n\n/* istanbul ignore next */\nfunction polyfillBind (fn, ctx) {\n function boundFn (a) {\n var l = arguments.length;\n return l\n ? l > 1\n ? fn.apply(ctx, arguments)\n : fn.call(ctx, a)\n : fn.call(ctx)\n }\n\n boundFn._length = fn.length;\n return boundFn\n}\n\nfunction nativeBind (fn, ctx) {\n return fn.bind(ctx)\n}\n\nvar bind = Function.prototype.bind\n ? nativeBind\n : polyfillBind;\n\n/**\n * Convert an Array-like object to a real Array.\n */\nfunction toArray (list, start) {\n start = start || 0;\n var i = list.length - start;\n var ret = new Array(i);\n while (i--) {\n ret[i] = list[i + start];\n }\n return ret\n}\n\n/**\n * Mix properties into target object.\n */\nfunction extend (to, _from) {\n for (var key in _from) {\n to[key] = _from[key];\n }\n return to\n}\n\n/**\n * Merge an Array of Objects into a single Object.\n */\nfunction toObject (arr) {\n var res = {};\n for (var i = 0; i < arr.length; i++) {\n if (arr[i]) {\n extend(res, arr[i]);\n }\n }\n return res\n}\n\n/* eslint-disable no-unused-vars */\n\n/**\n * Perform no operation.\n * Stubbing args to make Flow happy without leaving useless transpiled code\n * with ...rest (https://flow.org/blog/2017/05/07/Strict-Function-Call-Arity/).\n */\nfunction noop (a, b, c) {}\n\n/**\n * Always return false.\n */\nvar no = function (a, b, c) { return false; };\n\n/* eslint-enable no-unused-vars */\n\n/**\n * Return the same value.\n */\nvar identity = function (_) { return _; };\n\n/**\n * Generate a string containing static keys from compiler modules.\n */\nfunction genStaticKeys (modules) {\n return modules.reduce(function (keys, m) {\n return keys.concat(m.staticKeys || [])\n }, []).join(',')\n}\n\n/**\n * Check if two values are loosely equal - that is,\n * if they are plain objects, do they have the same shape?\n */\nfunction looseEqual (a, b) {\n if (a === b) { return true }\n var isObjectA = isObject(a);\n var isObjectB = isObject(b);\n if (isObjectA && isObjectB) {\n try {\n var isArrayA = Array.isArray(a);\n var isArrayB = Array.isArray(b);\n if (isArrayA && isArrayB) {\n return a.length === b.length && a.every(function (e, i) {\n return looseEqual(e, b[i])\n })\n } else if (a instanceof Date && b instanceof Date) {\n return a.getTime() === b.getTime()\n } else if (!isArrayA && !isArrayB) {\n var keysA = Object.keys(a);\n var keysB = Object.keys(b);\n return keysA.length === keysB.length && keysA.every(function (key) {\n return looseEqual(a[key], b[key])\n })\n } else {\n /* istanbul ignore next */\n return false\n }\n } catch (e) {\n /* istanbul ignore next */\n return false\n }\n } else if (!isObjectA && !isObjectB) {\n return String(a) === String(b)\n } else {\n return false\n }\n}\n\n/**\n * Return the first index at which a loosely equal value can be\n * found in the array (if value is a plain object, the array must\n * contain an object of the same shape), or -1 if it is not present.\n */\nfunction looseIndexOf (arr, val) {\n for (var i = 0; i < arr.length; i++) {\n if (looseEqual(arr[i], val)) { return i }\n }\n return -1\n}\n\n/**\n * Ensure a function is called only once.\n */\nfunction once (fn) {\n var called = false;\n return function () {\n if (!called) {\n called = true;\n fn.apply(this, arguments);\n }\n }\n}\n\nvar SSR_ATTR = 'data-server-rendered';\n\nvar ASSET_TYPES = [\n 'component',\n 'directive',\n 'filter'\n];\n\nvar LIFECYCLE_HOOKS = [\n 'beforeCreate',\n 'created',\n 'beforeMount',\n 'mounted',\n 'beforeUpdate',\n 'updated',\n 'beforeDestroy',\n 'destroyed',\n 'activated',\n 'deactivated',\n 'errorCaptured',\n 'serverPrefetch'\n];\n\n/* */\n\n\n\nvar config = ({\n /**\n * Option merge strategies (used in core/util/options)\n */\n // $flow-disable-line\n optionMergeStrategies: Object.create(null),\n\n /**\n * Whether to suppress warnings.\n */\n silent: false,\n\n /**\n * Show production mode tip message on boot?\n */\n productionTip: \"development\" !== 'production',\n\n /**\n * Whether to enable devtools\n */\n devtools: \"development\" !== 'production',\n\n /**\n * Whether to record perf\n */\n performance: false,\n\n /**\n * Error handler for watcher errors\n */\n errorHandler: null,\n\n /**\n * Warn handler for watcher warns\n */\n warnHandler: null,\n\n /**\n * Ignore certain custom elements\n */\n ignoredElements: [],\n\n /**\n * Custom user key aliases for v-on\n */\n // $flow-disable-line\n keyCodes: Object.create(null),\n\n /**\n * Check if a tag is reserved so that it cannot be registered as a\n * component. This is platform-dependent and may be overwritten.\n */\n isReservedTag: no,\n\n /**\n * Check if an attribute is reserved so that it cannot be used as a component\n * prop. This is platform-dependent and may be overwritten.\n */\n isReservedAttr: no,\n\n /**\n * Check if a tag is an unknown element.\n * Platform-dependent.\n */\n isUnknownElement: no,\n\n /**\n * Get the namespace of an element\n */\n getTagNamespace: noop,\n\n /**\n * Parse the real tag name for the specific platform.\n */\n parsePlatformTagName: identity,\n\n /**\n * Check if an attribute must be bound using property, e.g. value\n * Platform-dependent.\n */\n mustUseProp: no,\n\n /**\n * Perform updates asynchronously. Intended to be used by Vue Test Utils\n * This will significantly reduce performance if set to false.\n */\n async: true,\n\n /**\n * Exposed for legacy reasons\n */\n _lifecycleHooks: LIFECYCLE_HOOKS\n});\n\n/* */\n\n/**\n * unicode letters used for parsing html tags, component names and property paths.\n * using https://www.w3.org/TR/html53/semantics-scripting.html#potentialcustomelementname\n * skipping \\u10000-\\uEFFFF due to it freezing up PhantomJS\n */\nvar unicodeRegExp = /a-zA-Z\\u00B7\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u203F-\\u2040\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD/;\n\n/**\n * Check if a string starts with $ or _\n */\nfunction isReserved (str) {\n var c = (str + '').charCodeAt(0);\n return c === 0x24 || c === 0x5F\n}\n\n/**\n * Define a property.\n */\nfunction def (obj, key, val, enumerable) {\n Object.defineProperty(obj, key, {\n value: val,\n enumerable: !!enumerable,\n writable: true,\n configurable: true\n });\n}\n\n/**\n * Parse simple path.\n */\nvar bailRE = new RegExp((\"[^\" + (unicodeRegExp.source) + \".$_\\\\d]\"));\nfunction parsePath (path) {\n if (bailRE.test(path)) {\n return\n }\n var segments = path.split('.');\n return function (obj) {\n for (var i = 0; i < segments.length; i++) {\n if (!obj) { return }\n obj = obj[segments[i]];\n }\n return obj\n }\n}\n\n/* */\n\n// can we use __proto__?\nvar hasProto = '__proto__' in {};\n\n// Browser environment sniffing\nvar inBrowser = typeof window !== 'undefined';\nvar inWeex = typeof WXEnvironment !== 'undefined' && !!WXEnvironment.platform;\nvar weexPlatform = inWeex && WXEnvironment.platform.toLowerCase();\nvar UA = inBrowser && window.navigator.userAgent.toLowerCase();\nvar isIE = UA && /msie|trident/.test(UA);\nvar isIE9 = UA && UA.indexOf('msie 9.0') > 0;\nvar isEdge = UA && UA.indexOf('edge/') > 0;\nvar isAndroid = (UA && UA.indexOf('android') > 0) || (weexPlatform === 'android');\nvar isIOS = (UA && /iphone|ipad|ipod|ios/.test(UA)) || (weexPlatform === 'ios');\nvar isChrome = UA && /chrome\\/\\d+/.test(UA) && !isEdge;\nvar isPhantomJS = UA && /phantomjs/.test(UA);\nvar isFF = UA && UA.match(/firefox\\/(\\d+)/);\n\n// Firefox has a \"watch\" function on Object.prototype...\nvar nativeWatch = ({}).watch;\n\nvar supportsPassive = false;\nif (inBrowser) {\n try {\n var opts = {};\n Object.defineProperty(opts, 'passive', ({\n get: function get () {\n /* istanbul ignore next */\n supportsPassive = true;\n }\n })); // https://github.com/facebook/flow/issues/285\n window.addEventListener('test-passive', null, opts);\n } catch (e) {}\n}\n\n// this needs to be lazy-evaled because vue may be required before\n// vue-server-renderer can set VUE_ENV\nvar _isServer;\nvar isServerRendering = function () {\n if (_isServer === undefined) {\n /* istanbul ignore if */\n if (!inBrowser && !inWeex && typeof global !== 'undefined') {\n // detect presence of vue-server-renderer and avoid\n // Webpack shimming the process\n _isServer = global['process'] && global['process'].env.VUE_ENV === 'server';\n } else {\n _isServer = false;\n }\n }\n return _isServer\n};\n\n// detect devtools\nvar devtools = inBrowser && window.__VUE_DEVTOOLS_GLOBAL_HOOK__;\n\n/* istanbul ignore next */\nfunction isNative (Ctor) {\n return typeof Ctor === 'function' && /native code/.test(Ctor.toString())\n}\n\nvar hasSymbol =\n typeof Symbol !== 'undefined' && isNative(Symbol) &&\n typeof Reflect !== 'undefined' && isNative(Reflect.ownKeys);\n\nvar _Set;\n/* istanbul ignore if */ // $flow-disable-line\nif (typeof Set !== 'undefined' && isNative(Set)) {\n // use native Set when available.\n _Set = Set;\n} else {\n // a non-standard Set polyfill that only works with primitive keys.\n _Set = /*@__PURE__*/(function () {\n function Set () {\n this.set = Object.create(null);\n }\n Set.prototype.has = function has (key) {\n return this.set[key] === true\n };\n Set.prototype.add = function add (key) {\n this.set[key] = true;\n };\n Set.prototype.clear = function clear () {\n this.set = Object.create(null);\n };\n\n return Set;\n }());\n}\n\n/* */\n\nvar warn = noop;\nvar tip = noop;\nvar generateComponentTrace = (noop); // work around flow check\nvar formatComponentName = (noop);\n\n{\n var hasConsole = typeof console !== 'undefined';\n var classifyRE = /(?:^|[-_])(\\w)/g;\n var classify = function (str) { return str\n .replace(classifyRE, function (c) { return c.toUpperCase(); })\n .replace(/[-_]/g, ''); };\n\n warn = function (msg, vm) {\n var trace = vm ? generateComponentTrace(vm) : '';\n\n if (config.warnHandler) {\n config.warnHandler.call(null, msg, vm, trace);\n } else if (hasConsole && (!config.silent)) {\n console.error((\"[Vue warn]: \" + msg + trace));\n }\n };\n\n tip = function (msg, vm) {\n if (hasConsole && (!config.silent)) {\n console.warn(\"[Vue tip]: \" + msg + (\n vm ? generateComponentTrace(vm) : ''\n ));\n }\n };\n\n formatComponentName = function (vm, includeFile) {\n if (vm.$root === vm) {\n return '<Root>'\n }\n var options = typeof vm === 'function' && vm.cid != null\n ? vm.options\n : vm._isVue\n ? vm.$options || vm.constructor.options\n : vm;\n var name = options.name || options._componentTag;\n var file = options.__file;\n if (!name && file) {\n var match = file.match(/([^/\\\\]+)\\.vue$/);\n name = match && match[1];\n }\n\n return (\n (name ? (\"<\" + (classify(name)) + \">\") : \"<Anonymous>\") +\n (file && includeFile !== false ? (\" at \" + file) : '')\n )\n };\n\n var repeat = function (str, n) {\n var res = '';\n while (n) {\n if (n % 2 === 1) { res += str; }\n if (n > 1) { str += str; }\n n >>= 1;\n }\n return res\n };\n\n generateComponentTrace = function (vm) {\n if (vm._isVue && vm.$parent) {\n var tree = [];\n var currentRecursiveSequence = 0;\n while (vm) {\n if (tree.length > 0) {\n var last = tree[tree.length - 1];\n if (last.constructor === vm.constructor) {\n currentRecursiveSequence++;\n vm = vm.$parent;\n continue\n } else if (currentRecursiveSequence > 0) {\n tree[tree.length - 1] = [last, currentRecursiveSequence];\n currentRecursiveSequence = 0;\n }\n }\n tree.push(vm);\n vm = vm.$parent;\n }\n return '\\n\\nfound in\\n\\n' + tree\n .map(function (vm, i) { return (\"\" + (i === 0 ? '---> ' : repeat(' ', 5 + i * 2)) + (Array.isArray(vm)\n ? ((formatComponentName(vm[0])) + \"... (\" + (vm[1]) + \" recursive calls)\")\n : formatComponentName(vm))); })\n .join('\\n')\n } else {\n return (\"\\n\\n(found in \" + (formatComponentName(vm)) + \")\")\n }\n };\n}\n\n/* */\n\nvar uid = 0;\n\n/**\n * A dep is an observable that can have multiple\n * directives subscribing to it.\n */\nvar Dep = function Dep () {\n this.id = uid++;\n this.subs = [];\n};\n\nDep.prototype.addSub = function addSub (sub) {\n this.subs.push(sub);\n};\n\nDep.prototype.removeSub = function removeSub (sub) {\n remove(this.subs, sub);\n};\n\nDep.prototype.depend = function depend () {\n if (Dep.target) {\n Dep.target.addDep(this);\n }\n};\n\nDep.prototype.notify = function notify () {\n // stabilize the subscriber list first\n var subs = this.subs.slice();\n if (!config.async) {\n // subs aren't sorted in scheduler if not running async\n // we need to sort them now to make sure they fire in correct\n // order\n subs.sort(function (a, b) { return a.id - b.id; });\n }\n for (var i = 0, l = subs.length; i < l; i++) {\n subs[i].update();\n }\n};\n\n// The current target watcher being evaluated.\n// This is globally unique because only one watcher\n// can be evaluated at a time.\nDep.target = null;\nvar targetStack = [];\n\nfunction pushTarget (target) {\n targetStack.push(target);\n Dep.target = target;\n}\n\nfunction popTarget () {\n targetStack.pop();\n Dep.target = targetStack[targetStack.length - 1];\n}\n\n/* */\n\nvar VNode = function VNode (\n tag,\n data,\n children,\n text,\n elm,\n context,\n componentOptions,\n asyncFactory\n) {\n this.tag = tag;\n this.data = data;\n this.children = children;\n this.text = text;\n this.elm = elm;\n this.ns = undefined;\n this.context = context;\n this.fnContext = undefined;\n this.fnOptions = undefined;\n this.fnScopeId = undefined;\n this.key = data && data.key;\n this.componentOptions = componentOptions;\n this.componentInstance = undefined;\n this.parent = undefined;\n this.raw = false;\n this.isStatic = false;\n this.isRootInsert = true;\n this.isComment = false;\n this.isCloned = false;\n this.isOnce = false;\n this.asyncFactory = asyncFactory;\n this.asyncMeta = undefined;\n this.isAsyncPlaceholder = false;\n};\n\nvar prototypeAccessors = { child: { configurable: true } };\n\n// DEPRECATED: alias for componentInstance for backwards compat.\n/* istanbul ignore next */\nprototypeAccessors.child.get = function () {\n return this.componentInstance\n};\n\nObject.defineProperties( VNode.prototype, prototypeAccessors );\n\nvar createEmptyVNode = function (text) {\n if ( text === void 0 ) text = '';\n\n var node = new VNode();\n node.text = text;\n node.isComment = true;\n return node\n};\n\nfunction createTextVNode (val) {\n return new VNode(undefined, undefined, undefined, String(val))\n}\n\n// optimized shallow clone\n// used for static nodes and slot nodes because they may be reused across\n// multiple renders, cloning them avoids errors when DOM manipulations rely\n// on their elm reference.\nfunction cloneVNode (vnode) {\n var cloned = new VNode(\n vnode.tag,\n vnode.data,\n // #7975\n // clone children array to avoid mutating original in case of cloning\n // a child.\n vnode.children && vnode.children.slice(),\n vnode.text,\n vnode.elm,\n vnode.context,\n vnode.componentOptions,\n vnode.asyncFactory\n );\n cloned.ns = vnode.ns;\n cloned.isStatic = vnode.isStatic;\n cloned.key = vnode.key;\n cloned.isComment = vnode.isComment;\n cloned.fnContext = vnode.fnContext;\n cloned.fnOptions = vnode.fnOptions;\n cloned.fnScopeId = vnode.fnScopeId;\n cloned.asyncMeta = vnode.asyncMeta;\n cloned.isCloned = true;\n return cloned\n}\n\n/*\n * not type checking this file because flow doesn't play well with\n * dynamically accessing methods on Array prototype\n */\n\nvar arrayProto = Array.prototype;\nvar arrayMethods = Object.create(arrayProto);\n\nvar methodsToPatch = [\n 'push',\n 'pop',\n 'shift',\n 'unshift',\n 'splice',\n 'sort',\n 'reverse'\n];\n\n/**\n * Intercept mutating methods and emit events\n */\nmethodsToPatch.forEach(function (method) {\n // cache original method\n var original = arrayProto[method];\n def(arrayMethods, method, function mutator () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n var result = original.apply(this, args);\n var ob = this.__ob__;\n var inserted;\n switch (method) {\n case 'push':\n case 'unshift':\n inserted = args;\n break\n case 'splice':\n inserted = args.slice(2);\n break\n }\n if (inserted) { ob.observeArray(inserted); }\n // notify change\n ob.dep.notify();\n return result\n });\n});\n\n/* */\n\nvar arrayKeys = Object.getOwnPropertyNames(arrayMethods);\n\n/**\n * In some cases we may want to disable observation inside a component's\n * update computation.\n */\nvar shouldObserve = true;\n\nfunction toggleObserving (value) {\n shouldObserve = value;\n}\n\n/**\n * Observer class that is attached to each observed\n * object. Once attached, the observer converts the target\n * object's property keys into getter/setters that\n * collect dependencies and dispatch updates.\n */\nvar Observer = function Observer (value) {\n this.value = value;\n this.dep = new Dep();\n this.vmCount = 0;\n def(value, '__ob__', this);\n if (Array.isArray(value)) {\n if (hasProto) {\n protoAugment(value, arrayMethods);\n } else {\n copyAugment(value, arrayMethods, arrayKeys);\n }\n this.observeArray(value);\n } else {\n this.walk(value);\n }\n};\n\n/**\n * Walk through all properties and convert them into\n * getter/setters. This method should only be called when\n * value type is Object.\n */\nObserver.prototype.walk = function walk (obj) {\n var keys = Object.keys(obj);\n for (var i = 0; i < keys.length; i++) {\n defineReactive$$1(obj, keys[i]);\n }\n};\n\n/**\n * Observe a list of Array items.\n */\nObserver.prototype.observeArray = function observeArray (items) {\n for (var i = 0, l = items.length; i < l; i++) {\n observe(items[i]);\n }\n};\n\n// helpers\n\n/**\n * Augment a target Object or Array by intercepting\n * the prototype chain using __proto__\n */\nfunction protoAugment (target, src) {\n /* eslint-disable no-proto */\n target.__proto__ = src;\n /* eslint-enable no-proto */\n}\n\n/**\n * Augment a target Object or Array by defining\n * hidden properties.\n */\n/* istanbul ignore next */\nfunction copyAugment (target, src, keys) {\n for (var i = 0, l = keys.length; i < l; i++) {\n var key = keys[i];\n def(target, key, src[key]);\n }\n}\n\n/**\n * Attempt to create an observer instance for a value,\n * returns the new observer if successfully observed,\n * or the existing observer if the value already has one.\n */\nfunction observe (value, asRootData) {\n if (!isObject(value) || value instanceof VNode) {\n return\n }\n var ob;\n if (hasOwn(value, '__ob__') && value.__ob__ instanceof Observer) {\n ob = value.__ob__;\n } else if (\n shouldObserve &&\n !isServerRendering() &&\n (Array.isArray(value) || isPlainObject(value)) &&\n Object.isExtensible(value) &&\n !value._isVue\n ) {\n ob = new Observer(value);\n }\n if (asRootData && ob) {\n ob.vmCount++;\n }\n return ob\n}\n\n/**\n * Define a reactive property on an Object.\n */\nfunction defineReactive$$1 (\n obj,\n key,\n val,\n customSetter,\n shallow\n) {\n var dep = new Dep();\n\n var property = Object.getOwnPropertyDescriptor(obj, key);\n if (property && property.configurable === false) {\n return\n }\n\n // cater for pre-defined getter/setters\n var getter = property && property.get;\n var setter = property && property.set;\n if ((!getter || setter) && arguments.length === 2) {\n val = obj[key];\n }\n\n var childOb = !shallow && observe(val);\n Object.defineProperty(obj, key, {\n enumerable: true,\n configurable: true,\n get: function reactiveGetter () {\n var value = getter ? getter.call(obj) : val;\n if (Dep.target) {\n dep.depend();\n if (childOb) {\n childOb.dep.depend();\n if (Array.isArray(value)) {\n dependArray(value);\n }\n }\n }\n return value\n },\n set: function reactiveSetter (newVal) {\n var value = getter ? getter.call(obj) : val;\n /* eslint-disable no-self-compare */\n if (newVal === value || (newVal !== newVal && value !== value)) {\n return\n }\n /* eslint-enable no-self-compare */\n if (customSetter) {\n customSetter();\n }\n // #7981: for accessor properties without setter\n if (getter && !setter) { return }\n if (setter) {\n setter.call(obj, newVal);\n } else {\n val = newVal;\n }\n childOb = !shallow && observe(newVal);\n dep.notify();\n }\n });\n}\n\n/**\n * Set a property on an object. Adds the new property and\n * triggers change notification if the property doesn't\n * already exist.\n */\nfunction set (target, key, val) {\n if (isUndef(target) || isPrimitive(target)\n ) {\n warn((\"Cannot set reactive property on undefined, null, or primitive value: \" + ((target))));\n }\n if (Array.isArray(target) && isValidArrayIndex(key)) {\n target.length = Math.max(target.length, key);\n target.splice(key, 1, val);\n return val\n }\n if (key in target && !(key in Object.prototype)) {\n target[key] = val;\n return val\n }\n var ob = (target).__ob__;\n if (target._isVue || (ob && ob.vmCount)) {\n warn(\n 'Avoid adding reactive properties to a Vue instance or its root $data ' +\n 'at runtime - declare it upfront in the data option.'\n );\n return val\n }\n if (!ob) {\n target[key] = val;\n return val\n }\n defineReactive$$1(ob.value, key, val);\n ob.dep.notify();\n return val\n}\n\n/**\n * Delete a property and trigger change if necessary.\n */\nfunction del (target, key) {\n if (isUndef(target) || isPrimitive(target)\n ) {\n warn((\"Cannot delete reactive property on undefined, null, or primitive value: \" + ((target))));\n }\n if (Array.isArray(target) && isValidArrayIndex(key)) {\n target.splice(key, 1);\n return\n }\n var ob = (target).__ob__;\n if (target._isVue || (ob && ob.vmCount)) {\n warn(\n 'Avoid deleting properties on a Vue instance or its root $data ' +\n '- just set it to null.'\n );\n return\n }\n if (!hasOwn(target, key)) {\n return\n }\n delete target[key];\n if (!ob) {\n return\n }\n ob.dep.notify();\n}\n\n/**\n * Collect dependencies on array elements when the array is touched, since\n * we cannot intercept array element access like property getters.\n */\nfunction dependArray (value) {\n for (var e = (void 0), i = 0, l = value.length; i < l; i++) {\n e = value[i];\n e && e.__ob__ && e.__ob__.dep.depend();\n if (Array.isArray(e)) {\n dependArray(e);\n }\n }\n}\n\n/* */\n\n/**\n * Option overwriting strategies are functions that handle\n * how to merge a parent option value and a child option\n * value into the final value.\n */\nvar strats = config.optionMergeStrategies;\n\n/**\n * Options with restrictions\n */\n{\n strats.el = strats.propsData = function (parent, child, vm, key) {\n if (!vm) {\n warn(\n \"option \\\"\" + key + \"\\\" can only be used during instance \" +\n 'creation with the `new` keyword.'\n );\n }\n return defaultStrat(parent, child)\n };\n}\n\n/**\n * Helper that recursively merges two data objects together.\n */\nfunction mergeData (to, from) {\n if (!from) { return to }\n var key, toVal, fromVal;\n\n var keys = hasSymbol\n ? Reflect.ownKeys(from)\n : Object.keys(from);\n\n for (var i = 0; i < keys.length; i++) {\n key = keys[i];\n // in case the object is already observed...\n if (key === '__ob__') { continue }\n toVal = to[key];\n fromVal = from[key];\n if (!hasOwn(to, key)) {\n set(to, key, fromVal);\n } else if (\n toVal !== fromVal &&\n isPlainObject(toVal) &&\n isPlainObject(fromVal)\n ) {\n mergeData(toVal, fromVal);\n }\n }\n return to\n}\n\n/**\n * Data\n */\nfunction mergeDataOrFn (\n parentVal,\n childVal,\n vm\n) {\n if (!vm) {\n // in a Vue.extend merge, both should be functions\n if (!childVal) {\n return parentVal\n }\n if (!parentVal) {\n return childVal\n }\n // when parentVal & childVal are both present,\n // we need to return a function that returns the\n // merged result of both functions... no need to\n // check if parentVal is a function here because\n // it has to be a function to pass previous merges.\n return function mergedDataFn () {\n return mergeData(\n typeof childVal === 'function' ? childVal.call(this, this) : childVal,\n typeof parentVal === 'function' ? parentVal.call(this, this) : parentVal\n )\n }\n } else {\n return function mergedInstanceDataFn () {\n // instance merge\n var instanceData = typeof childVal === 'function'\n ? childVal.call(vm, vm)\n : childVal;\n var defaultData = typeof parentVal === 'function'\n ? parentVal.call(vm, vm)\n : parentVal;\n if (instanceData) {\n return mergeData(instanceData, defaultData)\n } else {\n return defaultData\n }\n }\n }\n}\n\nstrats.data = function (\n parentVal,\n childVal,\n vm\n) {\n if (!vm) {\n if (childVal && typeof childVal !== 'function') {\n warn(\n 'The \"data\" option should be a function ' +\n 'that returns a per-instance value in component ' +\n 'definitions.',\n vm\n );\n\n return parentVal\n }\n return mergeDataOrFn(parentVal, childVal)\n }\n\n return mergeDataOrFn(parentVal, childVal, vm)\n};\n\n/**\n * Hooks and props are merged as arrays.\n */\nfunction mergeHook (\n parentVal,\n childVal\n) {\n var res = childVal\n ? parentVal\n ? parentVal.concat(childVal)\n : Array.isArray(childVal)\n ? childVal\n : [childVal]\n : parentVal;\n return res\n ? dedupeHooks(res)\n : res\n}\n\nfunction dedupeHooks (hooks) {\n var res = [];\n for (var i = 0; i < hooks.length; i++) {\n if (res.indexOf(hooks[i]) === -1) {\n res.push(hooks[i]);\n }\n }\n return res\n}\n\nLIFECYCLE_HOOKS.forEach(function (hook) {\n strats[hook] = mergeHook;\n});\n\n/**\n * Assets\n *\n * When a vm is present (instance creation), we need to do\n * a three-way merge between constructor options, instance\n * options and parent options.\n */\nfunction mergeAssets (\n parentVal,\n childVal,\n vm,\n key\n) {\n var res = Object.create(parentVal || null);\n if (childVal) {\n assertObjectType(key, childVal, vm);\n return extend(res, childVal)\n } else {\n return res\n }\n}\n\nASSET_TYPES.forEach(function (type) {\n strats[type + 's'] = mergeAssets;\n});\n\n/**\n * Watchers.\n *\n * Watchers hashes should not overwrite one\n * another, so we merge them as arrays.\n */\nstrats.watch = function (\n parentVal,\n childVal,\n vm,\n key\n) {\n // work around Firefox's Object.prototype.watch...\n if (parentVal === nativeWatch) { parentVal = undefined; }\n if (childVal === nativeWatch) { childVal = undefined; }\n /* istanbul ignore if */\n if (!childVal) { return Object.create(parentVal || null) }\n {\n assertObjectType(key, childVal, vm);\n }\n if (!parentVal) { return childVal }\n var ret = {};\n extend(ret, parentVal);\n for (var key$1 in childVal) {\n var parent = ret[key$1];\n var child = childVal[key$1];\n if (parent && !Array.isArray(parent)) {\n parent = [parent];\n }\n ret[key$1] = parent\n ? parent.concat(child)\n : Array.isArray(child) ? child : [child];\n }\n return ret\n};\n\n/**\n * Other object hashes.\n */\nstrats.props =\nstrats.methods =\nstrats.inject =\nstrats.computed = function (\n parentVal,\n childVal,\n vm,\n key\n) {\n if (childVal && \"development\" !== 'production') {\n assertObjectType(key, childVal, vm);\n }\n if (!parentVal) { return childVal }\n var ret = Object.create(null);\n extend(ret, parentVal);\n if (childVal) { extend(ret, childVal); }\n return ret\n};\nstrats.provide = mergeDataOrFn;\n\n/**\n * Default strategy.\n */\nvar defaultStrat = function (parentVal, childVal) {\n return childVal === undefined\n ? parentVal\n : childVal\n};\n\n/**\n * Validate component names\n */\nfunction checkComponents (options) {\n for (var key in options.components) {\n validateComponentName(key);\n }\n}\n\nfunction validateComponentName (name) {\n if (!new RegExp((\"^[a-zA-Z][\\\\-\\\\.0-9_\" + (unicodeRegExp.source) + \"]*$\")).test(name)) {\n warn(\n 'Invalid component name: \"' + name + '\". Component names ' +\n 'should conform to valid custom element name in html5 specification.'\n );\n }\n if (isBuiltInTag(name) || config.isReservedTag(name)) {\n warn(\n 'Do not use built-in or reserved HTML elements as component ' +\n 'id: ' + name\n );\n }\n}\n\n/**\n * Ensure all props option syntax are normalized into the\n * Object-based format.\n */\nfunction normalizeProps (options, vm) {\n var props = options.props;\n if (!props) { return }\n var res = {};\n var i, val, name;\n if (Array.isArray(props)) {\n i = props.length;\n while (i--) {\n val = props[i];\n if (typeof val === 'string') {\n name = camelize(val);\n res[name] = { type: null };\n } else {\n warn('props must be strings when using array syntax.');\n }\n }\n } else if (isPlainObject(props)) {\n for (var key in props) {\n val = props[key];\n name = camelize(key);\n res[name] = isPlainObject(val)\n ? val\n : { type: val };\n }\n } else {\n warn(\n \"Invalid value for option \\\"props\\\": expected an Array or an Object, \" +\n \"but got \" + (toRawType(props)) + \".\",\n vm\n );\n }\n options.props = res;\n}\n\n/**\n * Normalize all injections into Object-based format\n */\nfunction normalizeInject (options, vm) {\n var inject = options.inject;\n if (!inject) { return }\n var normalized = options.inject = {};\n if (Array.isArray(inject)) {\n for (var i = 0; i < inject.length; i++) {\n normalized[inject[i]] = { from: inject[i] };\n }\n } else if (isPlainObject(inject)) {\n for (var key in inject) {\n var val = inject[key];\n normalized[key] = isPlainObject(val)\n ? extend({ from: key }, val)\n : { from: val };\n }\n } else {\n warn(\n \"Invalid value for option \\\"inject\\\": expected an Array or an Object, \" +\n \"but got \" + (toRawType(inject)) + \".\",\n vm\n );\n }\n}\n\n/**\n * Normalize raw function directives into object format.\n */\nfunction normalizeDirectives (options) {\n var dirs = options.directives;\n if (dirs) {\n for (var key in dirs) {\n var def$$1 = dirs[key];\n if (typeof def$$1 === 'function') {\n dirs[key] = { bind: def$$1, update: def$$1 };\n }\n }\n }\n}\n\nfunction assertObjectType (name, value, vm) {\n if (!isPlainObject(value)) {\n warn(\n \"Invalid value for option \\\"\" + name + \"\\\": expected an Object, \" +\n \"but got \" + (toRawType(value)) + \".\",\n vm\n );\n }\n}\n\n/**\n * Merge two option objects into a new one.\n * Core utility used in both instantiation and inheritance.\n */\nfunction mergeOptions (\n parent,\n child,\n vm\n) {\n {\n checkComponents(child);\n }\n\n if (typeof child === 'function') {\n child = child.options;\n }\n\n normalizeProps(child, vm);\n normalizeInject(child, vm);\n normalizeDirectives(child);\n\n // Apply extends and mixins on the child options,\n // but only if it is a raw options object that isn't\n // the result of another mergeOptions call.\n // Only merged options has the _base property.\n if (!child._base) {\n if (child.extends) {\n parent = mergeOptions(parent, child.extends, vm);\n }\n if (child.mixins) {\n for (var i = 0, l = child.mixins.length; i < l; i++) {\n parent = mergeOptions(parent, child.mixins[i], vm);\n }\n }\n }\n\n var options = {};\n var key;\n for (key in parent) {\n mergeField(key);\n }\n for (key in child) {\n if (!hasOwn(parent, key)) {\n mergeField(key);\n }\n }\n function mergeField (key) {\n var strat = strats[key] || defaultStrat;\n options[key] = strat(parent[key], child[key], vm, key);\n }\n return options\n}\n\n/**\n * Resolve an asset.\n * This function is used because child instances need access\n * to assets defined in its ancestor chain.\n */\nfunction resolveAsset (\n options,\n type,\n id,\n warnMissing\n) {\n /* istanbul ignore if */\n if (typeof id !== 'string') {\n return\n }\n var assets = options[type];\n // check local registration variations first\n if (hasOwn(assets, id)) { return assets[id] }\n var camelizedId = camelize(id);\n if (hasOwn(assets, camelizedId)) { return assets[camelizedId] }\n var PascalCaseId = capitalize(camelizedId);\n if (hasOwn(assets, PascalCaseId)) { return assets[PascalCaseId] }\n // fallback to prototype chain\n var res = assets[id] || assets[camelizedId] || assets[PascalCaseId];\n if (warnMissing && !res) {\n warn(\n 'Failed to resolve ' + type.slice(0, -1) + ': ' + id,\n options\n );\n }\n return res\n}\n\n/* */\n\n\n\nfunction validateProp (\n key,\n propOptions,\n propsData,\n vm\n) {\n var prop = propOptions[key];\n var absent = !hasOwn(propsData, key);\n var value = propsData[key];\n // boolean casting\n var booleanIndex = getTypeIndex(Boolean, prop.type);\n if (booleanIndex > -1) {\n if (absent && !hasOwn(prop, 'default')) {\n value = false;\n } else if (value === '' || value === hyphenate(key)) {\n // only cast empty string / same name to boolean if\n // boolean has higher priority\n var stringIndex = getTypeIndex(String, prop.type);\n if (stringIndex < 0 || booleanIndex < stringIndex) {\n value = true;\n }\n }\n }\n // check default value\n if (value === undefined) {\n value = getPropDefaultValue(vm, prop, key);\n // since the default value is a fresh copy,\n // make sure to observe it.\n var prevShouldObserve = shouldObserve;\n toggleObserving(true);\n observe(value);\n toggleObserving(prevShouldObserve);\n }\n {\n assertProp(prop, key, value, vm, absent);\n }\n return value\n}\n\n/**\n * Get the default value of a prop.\n */\nfunction getPropDefaultValue (vm, prop, key) {\n // no default, return undefined\n if (!hasOwn(prop, 'default')) {\n return undefined\n }\n var def = prop.default;\n // warn against non-factory defaults for Object & Array\n if (isObject(def)) {\n warn(\n 'Invalid default value for prop \"' + key + '\": ' +\n 'Props with type Object/Array must use a factory function ' +\n 'to return the default value.',\n vm\n );\n }\n // the raw prop value was also undefined from previous render,\n // return previous default value to avoid unnecessary watcher trigger\n if (vm && vm.$options.propsData &&\n vm.$options.propsData[key] === undefined &&\n vm._props[key] !== undefined\n ) {\n return vm._props[key]\n }\n // call factory function for non-Function types\n // a value is Function if its prototype is function even across different execution context\n return typeof def === 'function' && getType(prop.type) !== 'Function'\n ? def.call(vm)\n : def\n}\n\n/**\n * Assert whether a prop is valid.\n */\nfunction assertProp (\n prop,\n name,\n value,\n vm,\n absent\n) {\n if (prop.required && absent) {\n warn(\n 'Missing required prop: \"' + name + '\"',\n vm\n );\n return\n }\n if (value == null && !prop.required) {\n return\n }\n var type = prop.type;\n var valid = !type || type === true;\n var expectedTypes = [];\n if (type) {\n if (!Array.isArray(type)) {\n type = [type];\n }\n for (var i = 0; i < type.length && !valid; i++) {\n var assertedType = assertType(value, type[i]);\n expectedTypes.push(assertedType.expectedType || '');\n valid = assertedType.valid;\n }\n }\n\n if (!valid) {\n warn(\n getInvalidTypeMessage(name, value, expectedTypes),\n vm\n );\n return\n }\n var validator = prop.validator;\n if (validator) {\n if (!validator(value)) {\n warn(\n 'Invalid prop: custom validator check failed for prop \"' + name + '\".',\n vm\n );\n }\n }\n}\n\nvar simpleCheckRE = /^(String|Number|Boolean|Function|Symbol)$/;\n\nfunction assertType (value, type) {\n var valid;\n var expectedType = getType(type);\n if (simpleCheckRE.test(expectedType)) {\n var t = typeof value;\n valid = t === expectedType.toLowerCase();\n // for primitive wrapper objects\n if (!valid && t === 'object') {\n valid = value instanceof type;\n }\n } else if (expectedType === 'Object') {\n valid = isPlainObject(value);\n } else if (expectedType === 'Array') {\n valid = Array.isArray(value);\n } else {\n valid = value instanceof type;\n }\n return {\n valid: valid,\n expectedType: expectedType\n }\n}\n\n/**\n * Use function string name to check built-in types,\n * because a simple equality check will fail when running\n * across different vms / iframes.\n */\nfunction getType (fn) {\n var match = fn && fn.toString().match(/^\\s*function (\\w+)/);\n return match ? match[1] : ''\n}\n\nfunction isSameType (a, b) {\n return getType(a) === getType(b)\n}\n\nfunction getTypeIndex (type, expectedTypes) {\n if (!Array.isArray(expectedTypes)) {\n return isSameType(expectedTypes, type) ? 0 : -1\n }\n for (var i = 0, len = expectedTypes.length; i < len; i++) {\n if (isSameType(expectedTypes[i], type)) {\n return i\n }\n }\n return -1\n}\n\nfunction getInvalidTypeMessage (name, value, expectedTypes) {\n var message = \"Invalid prop: type check failed for prop \\\"\" + name + \"\\\".\" +\n \" Expected \" + (expectedTypes.map(capitalize).join(', '));\n var expectedType = expectedTypes[0];\n var receivedType = toRawType(value);\n var expectedValue = styleValue(value, expectedType);\n var receivedValue = styleValue(value, receivedType);\n // check if we need to specify expected value\n if (expectedTypes.length === 1 &&\n isExplicable(expectedType) &&\n !isBoolean(expectedType, receivedType)) {\n message += \" with value \" + expectedValue;\n }\n message += \", got \" + receivedType + \" \";\n // check if we need to specify received value\n if (isExplicable(receivedType)) {\n message += \"with value \" + receivedValue + \".\";\n }\n return message\n}\n\nfunction styleValue (value, type) {\n if (type === 'String') {\n return (\"\\\"\" + value + \"\\\"\")\n } else if (type === 'Number') {\n return (\"\" + (Number(value)))\n } else {\n return (\"\" + value)\n }\n}\n\nfunction isExplicable (value) {\n var explicitTypes = ['string', 'number', 'boolean'];\n return explicitTypes.some(function (elem) { return value.toLowerCase() === elem; })\n}\n\nfunction isBoolean () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n return args.some(function (elem) { return elem.toLowerCase() === 'boolean'; })\n}\n\n/* */\n\nfunction handleError (err, vm, info) {\n // Deactivate deps tracking while processing error handler to avoid possible infinite rendering.\n // See: https://github.com/vuejs/vuex/issues/1505\n pushTarget();\n try {\n if (vm) {\n var cur = vm;\n while ((cur = cur.$parent)) {\n var hooks = cur.$options.errorCaptured;\n if (hooks) {\n for (var i = 0; i < hooks.length; i++) {\n try {\n var capture = hooks[i].call(cur, err, vm, info) === false;\n if (capture) { return }\n } catch (e) {\n globalHandleError(e, cur, 'errorCaptured hook');\n }\n }\n }\n }\n }\n globalHandleError(err, vm, info);\n } finally {\n popTarget();\n }\n}\n\nfunction invokeWithErrorHandling (\n handler,\n context,\n args,\n vm,\n info\n) {\n var res;\n try {\n res = args ? handler.apply(context, args) : handler.call(context);\n if (res && !res._isVue && isPromise(res) && !res._handled) {\n res.catch(function (e) { return handleError(e, vm, info + \" (Promise/async)\"); });\n // issue #9511\n // avoid catch triggering multiple times when nested calls\n res._handled = true;\n }\n } catch (e) {\n handleError(e, vm, info);\n }\n return res\n}\n\nfunction globalHandleError (err, vm, info) {\n if (config.errorHandler) {\n try {\n return config.errorHandler.call(null, err, vm, info)\n } catch (e) {\n // if the user intentionally throws the original error in the handler,\n // do not log it twice\n if (e !== err) {\n logError(e, null, 'config.errorHandler');\n }\n }\n }\n logError(err, vm, info);\n}\n\nfunction logError (err, vm, info) {\n {\n warn((\"Error in \" + info + \": \\\"\" + (err.toString()) + \"\\\"\"), vm);\n }\n /* istanbul ignore else */\n if ((inBrowser || inWeex) && typeof console !== 'undefined') {\n console.error(err);\n } else {\n throw err\n }\n}\n\n/* */\n\nvar isUsingMicroTask = false;\n\nvar callbacks = [];\nvar pending = false;\n\nfunction flushCallbacks () {\n pending = false;\n var copies = callbacks.slice(0);\n callbacks.length = 0;\n for (var i = 0; i < copies.length; i++) {\n copies[i]();\n }\n}\n\n// Here we have async deferring wrappers using microtasks.\n// In 2.5 we used (macro) tasks (in combination with microtasks).\n// However, it has subtle problems when state is changed right before repaint\n// (e.g. #6813, out-in transitions).\n// Also, using (macro) tasks in event handler would cause some weird behaviors\n// that cannot be circumvented (e.g. #7109, #7153, #7546, #7834, #8109).\n// So we now use microtasks everywhere, again.\n// A major drawback of this tradeoff is that there are some scenarios\n// where microtasks have too high a priority and fire in between supposedly\n// sequential events (e.g. #4521, #6690, which have workarounds)\n// or even between bubbling of the same event (#6566).\nvar timerFunc;\n\n// The nextTick behavior leverages the microtask queue, which can be accessed\n// via either native Promise.then or MutationObserver.\n// MutationObserver has wider support, however it is seriously bugged in\n// UIWebView in iOS >= 9.3.3 when triggered in touch event handlers. It\n// completely stops working after triggering a few times... so, if native\n// Promise is available, we will use it:\n/* istanbul ignore next, $flow-disable-line */\nif (typeof Promise !== 'undefined' && isNative(Promise)) {\n var p = Promise.resolve();\n timerFunc = function () {\n p.then(flushCallbacks);\n // In problematic UIWebViews, Promise.then doesn't completely break, but\n // it can get stuck in a weird state where callbacks are pushed into the\n // microtask queue but the queue isn't being flushed, until the browser\n // needs to do some other work, e.g. handle a timer. Therefore we can\n // \"force\" the microtask queue to be flushed by adding an empty timer.\n if (isIOS) { setTimeout(noop); }\n };\n isUsingMicroTask = true;\n} else if (!isIE && typeof MutationObserver !== 'undefined' && (\n isNative(MutationObserver) ||\n // PhantomJS and iOS 7.x\n MutationObserver.toString() === '[object MutationObserverConstructor]'\n)) {\n // Use MutationObserver where native Promise is not available,\n // e.g. PhantomJS, iOS7, Android 4.4\n // (#6466 MutationObserver is unreliable in IE11)\n var counter = 1;\n var observer = new MutationObserver(flushCallbacks);\n var textNode = document.createTextNode(String(counter));\n observer.observe(textNode, {\n characterData: true\n });\n timerFunc = function () {\n counter = (counter + 1) % 2;\n textNode.data = String(counter);\n };\n isUsingMicroTask = true;\n} else if (typeof setImmediate !== 'undefined' && isNative(setImmediate)) {\n // Fallback to setImmediate.\n // Techinically it leverages the (macro) task queue,\n // but it is still a better choice than setTimeout.\n timerFunc = function () {\n setImmediate(flushCallbacks);\n };\n} else {\n // Fallback to setTimeout.\n timerFunc = function () {\n setTimeout(flushCallbacks, 0);\n };\n}\n\nfunction nextTick (cb, ctx) {\n var _resolve;\n callbacks.push(function () {\n if (cb) {\n try {\n cb.call(ctx);\n } catch (e) {\n handleError(e, ctx, 'nextTick');\n }\n } else if (_resolve) {\n _resolve(ctx);\n }\n });\n if (!pending) {\n pending = true;\n timerFunc();\n }\n // $flow-disable-line\n if (!cb && typeof Promise !== 'undefined') {\n return new Promise(function (resolve) {\n _resolve = resolve;\n })\n }\n}\n\n/* */\n\nvar mark;\nvar measure;\n\n{\n var perf = inBrowser && window.performance;\n /* istanbul ignore if */\n if (\n perf &&\n perf.mark &&\n perf.measure &&\n perf.clearMarks &&\n perf.clearMeasures\n ) {\n mark = function (tag) { return perf.mark(tag); };\n measure = function (name, startTag, endTag) {\n perf.measure(name, startTag, endTag);\n perf.clearMarks(startTag);\n perf.clearMarks(endTag);\n // perf.clearMeasures(name)\n };\n }\n}\n\n/* not type checking this file because flow doesn't play well with Proxy */\n\nvar initProxy;\n\n{\n var allowedGlobals = makeMap(\n 'Infinity,undefined,NaN,isFinite,isNaN,' +\n 'parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,' +\n 'Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,' +\n 'require' // for Webpack/Browserify\n );\n\n var warnNonPresent = function (target, key) {\n warn(\n \"Property or method \\\"\" + key + \"\\\" is not defined on the instance but \" +\n 'referenced during render. Make sure that this property is reactive, ' +\n 'either in the data option, or for class-based components, by ' +\n 'initializing the property. ' +\n 'See: https://vuejs.org/v2/guide/reactivity.html#Declaring-Reactive-Properties.',\n target\n );\n };\n\n var warnReservedPrefix = function (target, key) {\n warn(\n \"Property \\\"\" + key + \"\\\" must be accessed with \\\"$data.\" + key + \"\\\" because \" +\n 'properties starting with \"$\" or \"_\" are not proxied in the Vue instance to ' +\n 'prevent conflicts with Vue internals' +\n 'See: https://vuejs.org/v2/api/#data',\n target\n );\n };\n\n var hasProxy =\n typeof Proxy !== 'undefined' && isNative(Proxy);\n\n if (hasProxy) {\n var isBuiltInModifier = makeMap('stop,prevent,self,ctrl,shift,alt,meta,exact');\n config.keyCodes = new Proxy(config.keyCodes, {\n set: function set (target, key, value) {\n if (isBuiltInModifier(key)) {\n warn((\"Avoid overwriting built-in modifier in config.keyCodes: .\" + key));\n return false\n } else {\n target[key] = value;\n return true\n }\n }\n });\n }\n\n var hasHandler = {\n has: function has (target, key) {\n var has = key in target;\n var isAllowed = allowedGlobals(key) ||\n (typeof key === 'string' && key.charAt(0) === '_' && !(key in target.$data));\n if (!has && !isAllowed) {\n if (key in target.$data) { warnReservedPrefix(target, key); }\n else { warnNonPresent(target, key); }\n }\n return has || !isAllowed\n }\n };\n\n var getHandler = {\n get: function get (target, key) {\n if (typeof key === 'string' && !(key in target)) {\n if (key in target.$data) { warnReservedPrefix(target, key); }\n else { warnNonPresent(target, key); }\n }\n return target[key]\n }\n };\n\n initProxy = function initProxy (vm) {\n if (hasProxy) {\n // determine which proxy handler to use\n var options = vm.$options;\n var handlers = options.render && options.render._withStripped\n ? getHandler\n : hasHandler;\n vm._renderProxy = new Proxy(vm, handlers);\n } else {\n vm._renderProxy = vm;\n }\n };\n}\n\n/* */\n\nvar seenObjects = new _Set();\n\n/**\n * Recursively traverse an object to evoke all converted\n * getters, so that every nested property inside the object\n * is collected as a \"deep\" dependency.\n */\nfunction traverse (val) {\n _traverse(val, seenObjects);\n seenObjects.clear();\n}\n\nfunction _traverse (val, seen) {\n var i, keys;\n var isA = Array.isArray(val);\n if ((!isA && !isObject(val)) || Object.isFrozen(val) || val instanceof VNode) {\n return\n }\n if (val.__ob__) {\n var depId = val.__ob__.dep.id;\n if (seen.has(depId)) {\n return\n }\n seen.add(depId);\n }\n if (isA) {\n i = val.length;\n while (i--) { _traverse(val[i], seen); }\n } else {\n keys = Object.keys(val);\n i = keys.length;\n while (i--) { _traverse(val[keys[i]], seen); }\n }\n}\n\n/* */\n\nvar normalizeEvent = cached(function (name) {\n var passive = name.charAt(0) === '&';\n name = passive ? name.slice(1) : name;\n var once$$1 = name.charAt(0) === '~'; // Prefixed last, checked first\n name = once$$1 ? name.slice(1) : name;\n var capture = name.charAt(0) === '!';\n name = capture ? name.slice(1) : name;\n return {\n name: name,\n once: once$$1,\n capture: capture,\n passive: passive\n }\n});\n\nfunction createFnInvoker (fns, vm) {\n function invoker () {\n var arguments$1 = arguments;\n\n var fns = invoker.fns;\n if (Array.isArray(fns)) {\n var cloned = fns.slice();\n for (var i = 0; i < cloned.length; i++) {\n invokeWithErrorHandling(cloned[i], null, arguments$1, vm, \"v-on handler\");\n }\n } else {\n // return handler return value for single handlers\n return invokeWithErrorHandling(fns, null, arguments, vm, \"v-on handler\")\n }\n }\n invoker.fns = fns;\n return invoker\n}\n\nfunction updateListeners (\n on,\n oldOn,\n add,\n remove$$1,\n createOnceHandler,\n vm\n) {\n var name, def$$1, cur, old, event;\n for (name in on) {\n def$$1 = cur = on[name];\n old = oldOn[name];\n event = normalizeEvent(name);\n if (isUndef(cur)) {\n warn(\n \"Invalid handler for event \\\"\" + (event.name) + \"\\\": got \" + String(cur),\n vm\n );\n } else if (isUndef(old)) {\n if (isUndef(cur.fns)) {\n cur = on[name] = createFnInvoker(cur, vm);\n }\n if (isTrue(event.once)) {\n cur = on[name] = createOnceHandler(event.name, cur, event.capture);\n }\n add(event.name, cur, event.capture, event.passive, event.params);\n } else if (cur !== old) {\n old.fns = cur;\n on[name] = old;\n }\n }\n for (name in oldOn) {\n if (isUndef(on[name])) {\n event = normalizeEvent(name);\n remove$$1(event.name, oldOn[name], event.capture);\n }\n }\n}\n\n/* */\n\nfunction mergeVNodeHook (def, hookKey, hook) {\n if (def instanceof VNode) {\n def = def.data.hook || (def.data.hook = {});\n }\n var invoker;\n var oldHook = def[hookKey];\n\n function wrappedHook () {\n hook.apply(this, arguments);\n // important: remove merged hook to ensure it's called only once\n // and prevent memory leak\n remove(invoker.fns, wrappedHook);\n }\n\n if (isUndef(oldHook)) {\n // no existing hook\n invoker = createFnInvoker([wrappedHook]);\n } else {\n /* istanbul ignore if */\n if (isDef(oldHook.fns) && isTrue(oldHook.merged)) {\n // already a merged invoker\n invoker = oldHook;\n invoker.fns.push(wrappedHook);\n } else {\n // existing plain hook\n invoker = createFnInvoker([oldHook, wrappedHook]);\n }\n }\n\n invoker.merged = true;\n def[hookKey] = invoker;\n}\n\n/* */\n\nfunction extractPropsFromVNodeData (\n data,\n Ctor,\n tag\n) {\n // we are only extracting raw values here.\n // validation and default values are handled in the child\n // component itself.\n var propOptions = Ctor.options.props;\n if (isUndef(propOptions)) {\n return\n }\n var res = {};\n var attrs = data.attrs;\n var props = data.props;\n if (isDef(attrs) || isDef(props)) {\n for (var key in propOptions) {\n var altKey = hyphenate(key);\n {\n var keyInLowerCase = key.toLowerCase();\n if (\n key !== keyInLowerCase &&\n attrs && hasOwn(attrs, keyInLowerCase)\n ) {\n tip(\n \"Prop \\\"\" + keyInLowerCase + \"\\\" is passed to component \" +\n (formatComponentName(tag || Ctor)) + \", but the declared prop name is\" +\n \" \\\"\" + key + \"\\\". \" +\n \"Note that HTML attributes are case-insensitive and camelCased \" +\n \"props need to use their kebab-case equivalents when using in-DOM \" +\n \"templates. You should probably use \\\"\" + altKey + \"\\\" instead of \\\"\" + key + \"\\\".\"\n );\n }\n }\n checkProp(res, props, key, altKey, true) ||\n checkProp(res, attrs, key, altKey, false);\n }\n }\n return res\n}\n\nfunction checkProp (\n res,\n hash,\n key,\n altKey,\n preserve\n) {\n if (isDef(hash)) {\n if (hasOwn(hash, key)) {\n res[key] = hash[key];\n if (!preserve) {\n delete hash[key];\n }\n return true\n } else if (hasOwn(hash, altKey)) {\n res[key] = hash[altKey];\n if (!preserve) {\n delete hash[altKey];\n }\n return true\n }\n }\n return false\n}\n\n/* */\n\n// The template compiler attempts to minimize the need for normalization by\n// statically analyzing the template at compile time.\n//\n// For plain HTML markup, normalization can be completely skipped because the\n// generated render function is guaranteed to return Array<VNode>. There are\n// two cases where extra normalization is needed:\n\n// 1. When the children contains components - because a functional component\n// may return an Array instead of a single root. In this case, just a simple\n// normalization is needed - if any child is an Array, we flatten the whole\n// thing with Array.prototype.concat. It is guaranteed to be only 1-level deep\n// because functional components already normalize their own children.\nfunction simpleNormalizeChildren (children) {\n for (var i = 0; i < children.length; i++) {\n if (Array.isArray(children[i])) {\n return Array.prototype.concat.apply([], children)\n }\n }\n return children\n}\n\n// 2. When the children contains constructs that always generated nested Arrays,\n// e.g. <template>, <slot>, v-for, or when the children is provided by user\n// with hand-written render functions / JSX. In such cases a full normalization\n// is needed to cater to all possible types of children values.\nfunction normalizeChildren (children) {\n return isPrimitive(children)\n ? [createTextVNode(children)]\n : Array.isArray(children)\n ? normalizeArrayChildren(children)\n : undefined\n}\n\nfunction isTextNode (node) {\n return isDef(node) && isDef(node.text) && isFalse(node.isComment)\n}\n\nfunction normalizeArrayChildren (children, nestedIndex) {\n var res = [];\n var i, c, lastIndex, last;\n for (i = 0; i < children.length; i++) {\n c = children[i];\n if (isUndef(c) || typeof c === 'boolean') { continue }\n lastIndex = res.length - 1;\n last = res[lastIndex];\n // nested\n if (Array.isArray(c)) {\n if (c.length > 0) {\n c = normalizeArrayChildren(c, ((nestedIndex || '') + \"_\" + i));\n // merge adjacent text nodes\n if (isTextNode(c[0]) && isTextNode(last)) {\n res[lastIndex] = createTextVNode(last.text + (c[0]).text);\n c.shift();\n }\n res.push.apply(res, c);\n }\n } else if (isPrimitive(c)) {\n if (isTextNode(last)) {\n // merge adjacent text nodes\n // this is necessary for SSR hydration because text nodes are\n // essentially merged when rendered to HTML strings\n res[lastIndex] = createTextVNode(last.text + c);\n } else if (c !== '') {\n // convert primitive to vnode\n res.push(createTextVNode(c));\n }\n } else {\n if (isTextNode(c) && isTextNode(last)) {\n // merge adjacent text nodes\n res[lastIndex] = createTextVNode(last.text + c.text);\n } else {\n // default key for nested array children (likely generated by v-for)\n if (isTrue(children._isVList) &&\n isDef(c.tag) &&\n isUndef(c.key) &&\n isDef(nestedIndex)) {\n c.key = \"__vlist\" + nestedIndex + \"_\" + i + \"__\";\n }\n res.push(c);\n }\n }\n }\n return res\n}\n\n/* */\n\nfunction initProvide (vm) {\n var provide = vm.$options.provide;\n if (provide) {\n vm._provided = typeof provide === 'function'\n ? provide.call(vm)\n : provide;\n }\n}\n\nfunction initInjections (vm) {\n var result = resolveInject(vm.$options.inject, vm);\n if (result) {\n toggleObserving(false);\n Object.keys(result).forEach(function (key) {\n /* istanbul ignore else */\n {\n defineReactive$$1(vm, key, result[key], function () {\n warn(\n \"Avoid mutating an injected value directly since the changes will be \" +\n \"overwritten whenever the provided component re-renders. \" +\n \"injection being mutated: \\\"\" + key + \"\\\"\",\n vm\n );\n });\n }\n });\n toggleObserving(true);\n }\n}\n\nfunction resolveInject (inject, vm) {\n if (inject) {\n // inject is :any because flow is not smart enough to figure out cached\n var result = Object.create(null);\n var keys = hasSymbol\n ? Reflect.ownKeys(inject)\n : Object.keys(inject);\n\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n // #6574 in case the inject object is observed...\n if (key === '__ob__') { continue }\n var provideKey = inject[key].from;\n var source = vm;\n while (source) {\n if (source._provided && hasOwn(source._provided, provideKey)) {\n result[key] = source._provided[provideKey];\n break\n }\n source = source.$parent;\n }\n if (!source) {\n if ('default' in inject[key]) {\n var provideDefault = inject[key].default;\n result[key] = typeof provideDefault === 'function'\n ? provideDefault.call(vm)\n : provideDefault;\n } else {\n warn((\"Injection \\\"\" + key + \"\\\" not found\"), vm);\n }\n }\n }\n return result\n }\n}\n\n/* */\n\n\n\n/**\n * Runtime helper for resolving raw children VNodes into a slot object.\n */\nfunction resolveSlots (\n children,\n context\n) {\n if (!children || !children.length) {\n return {}\n }\n var slots = {};\n for (var i = 0, l = children.length; i < l; i++) {\n var child = children[i];\n var data = child.data;\n // remove slot attribute if the node is resolved as a Vue slot node\n if (data && data.attrs && data.attrs.slot) {\n delete data.attrs.slot;\n }\n // named slots should only be respected if the vnode was rendered in the\n // same context.\n if ((child.context === context || child.fnContext === context) &&\n data && data.slot != null\n ) {\n var name = data.slot;\n var slot = (slots[name] || (slots[name] = []));\n if (child.tag === 'template') {\n slot.push.apply(slot, child.children || []);\n } else {\n slot.push(child);\n }\n } else {\n (slots.default || (slots.default = [])).push(child);\n }\n }\n // ignore slots that contains only whitespace\n for (var name$1 in slots) {\n if (slots[name$1].every(isWhitespace)) {\n delete slots[name$1];\n }\n }\n return slots\n}\n\nfunction isWhitespace (node) {\n return (node.isComment && !node.asyncFactory) || node.text === ' '\n}\n\n/* */\n\nfunction normalizeScopedSlots (\n slots,\n normalSlots,\n prevSlots\n) {\n var res;\n var hasNormalSlots = Object.keys(normalSlots).length > 0;\n var isStable = slots ? !!slots.$stable : !hasNormalSlots;\n var key = slots && slots.$key;\n if (!slots) {\n res = {};\n } else if (slots._normalized) {\n // fast path 1: child component re-render only, parent did not change\n return slots._normalized\n } else if (\n isStable &&\n prevSlots &&\n prevSlots !== emptyObject &&\n key === prevSlots.$key &&\n !hasNormalSlots &&\n !prevSlots.$hasNormal\n ) {\n // fast path 2: stable scoped slots w/ no normal slots to proxy,\n // only need to normalize once\n return prevSlots\n } else {\n res = {};\n for (var key$1 in slots) {\n if (slots[key$1] && key$1[0] !== '$') {\n res[key$1] = normalizeScopedSlot(normalSlots, key$1, slots[key$1]);\n }\n }\n }\n // expose normal slots on scopedSlots\n for (var key$2 in normalSlots) {\n if (!(key$2 in res)) {\n res[key$2] = proxyNormalSlot(normalSlots, key$2);\n }\n }\n // avoriaz seems to mock a non-extensible $scopedSlots object\n // and when that is passed down this would cause an error\n if (slots && Object.isExtensible(slots)) {\n (slots)._normalized = res;\n }\n def(res, '$stable', isStable);\n def(res, '$key', key);\n def(res, '$hasNormal', hasNormalSlots);\n return res\n}\n\nfunction normalizeScopedSlot(normalSlots, key, fn) {\n var normalized = function () {\n var res = arguments.length ? fn.apply(null, arguments) : fn({});\n res = res && typeof res === 'object' && !Array.isArray(res)\n ? [res] // single vnode\n : normalizeChildren(res);\n return res && (\n res.length === 0 ||\n (res.length === 1 && res[0].isComment) // #9658\n ) ? undefined\n : res\n };\n // this is a slot using the new v-slot syntax without scope. although it is\n // compiled as a scoped slot, render fn users would expect it to be present\n // on this.$slots because the usage is semantically a normal slot.\n if (fn.proxy) {\n Object.defineProperty(normalSlots, key, {\n get: normalized,\n enumerable: true,\n configurable: true\n });\n }\n return normalized\n}\n\nfunction proxyNormalSlot(slots, key) {\n return function () { return slots[key]; }\n}\n\n/* */\n\n/**\n * Runtime helper for rendering v-for lists.\n */\nfunction renderList (\n val,\n render\n) {\n var ret, i, l, keys, key;\n if (Array.isArray(val) || typeof val === 'string') {\n ret = new Array(val.length);\n for (i = 0, l = val.length; i < l; i++) {\n ret[i] = render(val[i], i);\n }\n } else if (typeof val === 'number') {\n ret = new Array(val);\n for (i = 0; i < val; i++) {\n ret[i] = render(i + 1, i);\n }\n } else if (isObject(val)) {\n if (hasSymbol && val[Symbol.iterator]) {\n ret = [];\n var iterator = val[Symbol.iterator]();\n var result = iterator.next();\n while (!result.done) {\n ret.push(render(result.value, ret.length));\n result = iterator.next();\n }\n } else {\n keys = Object.keys(val);\n ret = new Array(keys.length);\n for (i = 0, l = keys.length; i < l; i++) {\n key = keys[i];\n ret[i] = render(val[key], key, i);\n }\n }\n }\n if (!isDef(ret)) {\n ret = [];\n }\n (ret)._isVList = true;\n return ret\n}\n\n/* */\n\n/**\n * Runtime helper for rendering <slot>\n */\nfunction renderSlot (\n name,\n fallback,\n props,\n bindObject\n) {\n var scopedSlotFn = this.$scopedSlots[name];\n var nodes;\n if (scopedSlotFn) { // scoped slot\n props = props || {};\n if (bindObject) {\n if (!isObject(bindObject)) {\n warn(\n 'slot v-bind without argument expects an Object',\n this\n );\n }\n props = extend(extend({}, bindObject), props);\n }\n nodes = scopedSlotFn(props) || fallback;\n } else {\n nodes = this.$slots[name] || fallback;\n }\n\n var target = props && props.slot;\n if (target) {\n return this.$createElement('template', { slot: target }, nodes)\n } else {\n return nodes\n }\n}\n\n/* */\n\n/**\n * Runtime helper for resolving filters\n */\nfunction resolveFilter (id) {\n return resolveAsset(this.$options, 'filters', id, true) || identity\n}\n\n/* */\n\nfunction isKeyNotMatch (expect, actual) {\n if (Array.isArray(expect)) {\n return expect.indexOf(actual) === -1\n } else {\n return expect !== actual\n }\n}\n\n/**\n * Runtime helper for checking keyCodes from config.\n * exposed as Vue.prototype._k\n * passing in eventKeyName as last argument separately for backwards compat\n */\nfunction checkKeyCodes (\n eventKeyCode,\n key,\n builtInKeyCode,\n eventKeyName,\n builtInKeyName\n) {\n var mappedKeyCode = config.keyCodes[key] || builtInKeyCode;\n if (builtInKeyName && eventKeyName && !config.keyCodes[key]) {\n return isKeyNotMatch(builtInKeyName, eventKeyName)\n } else if (mappedKeyCode) {\n return isKeyNotMatch(mappedKeyCode, eventKeyCode)\n } else if (eventKeyName) {\n return hyphenate(eventKeyName) !== key\n }\n}\n\n/* */\n\n/**\n * Runtime helper for merging v-bind=\"object\" into a VNode's data.\n */\nfunction bindObjectProps (\n data,\n tag,\n value,\n asProp,\n isSync\n) {\n if (value) {\n if (!isObject(value)) {\n warn(\n 'v-bind without argument expects an Object or Array value',\n this\n );\n } else {\n if (Array.isArray(value)) {\n value = toObject(value);\n }\n var hash;\n var loop = function ( key ) {\n if (\n key === 'class' ||\n key === 'style' ||\n isReservedAttribute(key)\n ) {\n hash = data;\n } else {\n var type = data.attrs && data.attrs.type;\n hash = asProp || config.mustUseProp(tag, type, key)\n ? data.domProps || (data.domProps = {})\n : data.attrs || (data.attrs = {});\n }\n var camelizedKey = camelize(key);\n var hyphenatedKey = hyphenate(key);\n if (!(camelizedKey in hash) && !(hyphenatedKey in hash)) {\n hash[key] = value[key];\n\n if (isSync) {\n var on = data.on || (data.on = {});\n on[(\"update:\" + key)] = function ($event) {\n value[key] = $event;\n };\n }\n }\n };\n\n for (var key in value) loop( key );\n }\n }\n return data\n}\n\n/* */\n\n/**\n * Runtime helper for rendering static trees.\n */\nfunction renderStatic (\n index,\n isInFor\n) {\n var cached = this._staticTrees || (this._staticTrees = []);\n var tree = cached[index];\n // if has already-rendered static tree and not inside v-for,\n // we can reuse the same tree.\n if (tree && !isInFor) {\n return tree\n }\n // otherwise, render a fresh tree.\n tree = cached[index] = this.$options.staticRenderFns[index].call(\n this._renderProxy,\n null,\n this // for render fns generated for functional component templates\n );\n markStatic(tree, (\"__static__\" + index), false);\n return tree\n}\n\n/**\n * Runtime helper for v-once.\n * Effectively it means marking the node as static with a unique key.\n */\nfunction markOnce (\n tree,\n index,\n key\n) {\n markStatic(tree, (\"__once__\" + index + (key ? (\"_\" + key) : \"\")), true);\n return tree\n}\n\nfunction markStatic (\n tree,\n key,\n isOnce\n) {\n if (Array.isArray(tree)) {\n for (var i = 0; i < tree.length; i++) {\n if (tree[i] && typeof tree[i] !== 'string') {\n markStaticNode(tree[i], (key + \"_\" + i), isOnce);\n }\n }\n } else {\n markStaticNode(tree, key, isOnce);\n }\n}\n\nfunction markStaticNode (node, key, isOnce) {\n node.isStatic = true;\n node.key = key;\n node.isOnce = isOnce;\n}\n\n/* */\n\nfunction bindObjectListeners (data, value) {\n if (value) {\n if (!isPlainObject(value)) {\n warn(\n 'v-on without argument expects an Object value',\n this\n );\n } else {\n var on = data.on = data.on ? extend({}, data.on) : {};\n for (var key in value) {\n var existing = on[key];\n var ours = value[key];\n on[key] = existing ? [].concat(existing, ours) : ours;\n }\n }\n }\n return data\n}\n\n/* */\n\nfunction resolveScopedSlots (\n fns, // see flow/vnode\n res,\n // the following are added in 2.6\n hasDynamicKeys,\n contentHashKey\n) {\n res = res || { $stable: !hasDynamicKeys };\n for (var i = 0; i < fns.length; i++) {\n var slot = fns[i];\n if (Array.isArray(slot)) {\n resolveScopedSlots(slot, res, hasDynamicKeys);\n } else if (slot) {\n // marker for reverse proxying v-slot without scope on this.$slots\n if (slot.proxy) {\n slot.fn.proxy = true;\n }\n res[slot.key] = slot.fn;\n }\n }\n if (contentHashKey) {\n (res).$key = contentHashKey;\n }\n return res\n}\n\n/* */\n\nfunction bindDynamicKeys (baseObj, values) {\n for (var i = 0; i < values.length; i += 2) {\n var key = values[i];\n if (typeof key === 'string' && key) {\n baseObj[values[i]] = values[i + 1];\n } else if (key !== '' && key !== null) {\n // null is a speical value for explicitly removing a binding\n warn(\n (\"Invalid value for dynamic directive argument (expected string or null): \" + key),\n this\n );\n }\n }\n return baseObj\n}\n\n// helper to dynamically append modifier runtime markers to event names.\n// ensure only append when value is already string, otherwise it will be cast\n// to string and cause the type check to miss.\nfunction prependModifier (value, symbol) {\n return typeof value === 'string' ? symbol + value : value\n}\n\n/* */\n\nfunction installRenderHelpers (target) {\n target._o = markOnce;\n target._n = toNumber;\n target._s = toString;\n target._l = renderList;\n target._t = renderSlot;\n target._q = looseEqual;\n target._i = looseIndexOf;\n target._m = renderStatic;\n target._f = resolveFilter;\n target._k = checkKeyCodes;\n target._b = bindObjectProps;\n target._v = createTextVNode;\n target._e = createEmptyVNode;\n target._u = resolveScopedSlots;\n target._g = bindObjectListeners;\n target._d = bindDynamicKeys;\n target._p = prependModifier;\n}\n\n/* */\n\nfunction FunctionalRenderContext (\n data,\n props,\n children,\n parent,\n Ctor\n) {\n var this$1 = this;\n\n var options = Ctor.options;\n // ensure the createElement function in functional components\n // gets a unique context - this is necessary for correct named slot check\n var contextVm;\n if (hasOwn(parent, '_uid')) {\n contextVm = Object.create(parent);\n // $flow-disable-line\n contextVm._original = parent;\n } else {\n // the context vm passed in is a functional context as well.\n // in this case we want to make sure we are able to get a hold to the\n // real context instance.\n contextVm = parent;\n // $flow-disable-line\n parent = parent._original;\n }\n var isCompiled = isTrue(options._compiled);\n var needNormalization = !isCompiled;\n\n this.data = data;\n this.props = props;\n this.children = children;\n this.parent = parent;\n this.listeners = data.on || emptyObject;\n this.injections = resolveInject(options.inject, parent);\n this.slots = function () {\n if (!this$1.$slots) {\n normalizeScopedSlots(\n data.scopedSlots,\n this$1.$slots = resolveSlots(children, parent)\n );\n }\n return this$1.$slots\n };\n\n Object.defineProperty(this, 'scopedSlots', ({\n enumerable: true,\n get: function get () {\n return normalizeScopedSlots(data.scopedSlots, this.slots())\n }\n }));\n\n // support for compiled functional template\n if (isCompiled) {\n // exposing $options for renderStatic()\n this.$options = options;\n // pre-resolve slots for renderSlot()\n this.$slots = this.slots();\n this.$scopedSlots = normalizeScopedSlots(data.scopedSlots, this.$slots);\n }\n\n if (options._scopeId) {\n this._c = function (a, b, c, d) {\n var vnode = createElement(contextVm, a, b, c, d, needNormalization);\n if (vnode && !Array.isArray(vnode)) {\n vnode.fnScopeId = options._scopeId;\n vnode.fnContext = parent;\n }\n return vnode\n };\n } else {\n this._c = function (a, b, c, d) { return createElement(contextVm, a, b, c, d, needNormalization); };\n }\n}\n\ninstallRenderHelpers(FunctionalRenderContext.prototype);\n\nfunction createFunctionalComponent (\n Ctor,\n propsData,\n data,\n contextVm,\n children\n) {\n var options = Ctor.options;\n var props = {};\n var propOptions = options.props;\n if (isDef(propOptions)) {\n for (var key in propOptions) {\n props[key] = validateProp(key, propOptions, propsData || emptyObject);\n }\n } else {\n if (isDef(data.attrs)) { mergeProps(props, data.attrs); }\n if (isDef(data.props)) { mergeProps(props, data.props); }\n }\n\n var renderContext = new FunctionalRenderContext(\n data,\n props,\n children,\n contextVm,\n Ctor\n );\n\n var vnode = options.render.call(null, renderContext._c, renderContext);\n\n if (vnode instanceof VNode) {\n return cloneAndMarkFunctionalResult(vnode, data, renderContext.parent, options, renderContext)\n } else if (Array.isArray(vnode)) {\n var vnodes = normalizeChildren(vnode) || [];\n var res = new Array(vnodes.length);\n for (var i = 0; i < vnodes.length; i++) {\n res[i] = cloneAndMarkFunctionalResult(vnodes[i], data, renderContext.parent, options, renderContext);\n }\n return res\n }\n}\n\nfunction cloneAndMarkFunctionalResult (vnode, data, contextVm, options, renderContext) {\n // #7817 clone node before setting fnContext, otherwise if the node is reused\n // (e.g. it was from a cached normal slot) the fnContext causes named slots\n // that should not be matched to match.\n var clone = cloneVNode(vnode);\n clone.fnContext = contextVm;\n clone.fnOptions = options;\n {\n (clone.devtoolsMeta = clone.devtoolsMeta || {}).renderContext = renderContext;\n }\n if (data.slot) {\n (clone.data || (clone.data = {})).slot = data.slot;\n }\n return clone\n}\n\nfunction mergeProps (to, from) {\n for (var key in from) {\n to[camelize(key)] = from[key];\n }\n}\n\n/* */\n\n/* */\n\n/* */\n\n/* */\n\n// inline hooks to be invoked on component VNodes during patch\nvar componentVNodeHooks = {\n init: function init (vnode, hydrating) {\n if (\n vnode.componentInstance &&\n !vnode.componentInstance._isDestroyed &&\n vnode.data.keepAlive\n ) {\n // kept-alive components, treat as a patch\n var mountedNode = vnode; // work around flow\n componentVNodeHooks.prepatch(mountedNode, mountedNode);\n } else {\n var child = vnode.componentInstance = createComponentInstanceForVnode(\n vnode,\n activeInstance\n );\n child.$mount(hydrating ? vnode.elm : undefined, hydrating);\n }\n },\n\n prepatch: function prepatch (oldVnode, vnode) {\n var options = vnode.componentOptions;\n var child = vnode.componentInstance = oldVnode.componentInstance;\n updateChildComponent(\n child,\n options.propsData, // updated props\n options.listeners, // updated listeners\n vnode, // new parent vnode\n options.children // new children\n );\n },\n\n insert: function insert (vnode) {\n var context = vnode.context;\n var componentInstance = vnode.componentInstance;\n if (!componentInstance._isMounted) {\n componentInstance._isMounted = true;\n callHook(componentInstance, 'mounted');\n }\n if (vnode.data.keepAlive) {\n if (context._isMounted) {\n // vue-router#1212\n // During updates, a kept-alive component's child components may\n // change, so directly walking the tree here may call activated hooks\n // on incorrect children. Instead we push them into a queue which will\n // be processed after the whole patch process ended.\n queueActivatedComponent(componentInstance);\n } else {\n activateChildComponent(componentInstance, true /* direct */);\n }\n }\n },\n\n destroy: function destroy (vnode) {\n var componentInstance = vnode.componentInstance;\n if (!componentInstance._isDestroyed) {\n if (!vnode.data.keepAlive) {\n componentInstance.$destroy();\n } else {\n deactivateChildComponent(componentInstance, true /* direct */);\n }\n }\n }\n};\n\nvar hooksToMerge = Object.keys(componentVNodeHooks);\n\nfunction createComponent (\n Ctor,\n data,\n context,\n children,\n tag\n) {\n if (isUndef(Ctor)) {\n return\n }\n\n var baseCtor = context.$options._base;\n\n // plain options object: turn it into a constructor\n if (isObject(Ctor)) {\n Ctor = baseCtor.extend(Ctor);\n }\n\n // if at this stage it's not a constructor or an async component factory,\n // reject.\n if (typeof Ctor !== 'function') {\n {\n warn((\"Invalid Component definition: \" + (String(Ctor))), context);\n }\n return\n }\n\n // async component\n var asyncFactory;\n if (isUndef(Ctor.cid)) {\n asyncFactory = Ctor;\n Ctor = resolveAsyncComponent(asyncFactory, baseCtor);\n if (Ctor === undefined) {\n // return a placeholder node for async component, which is rendered\n // as a comment node but preserves all the raw information for the node.\n // the information will be used for async server-rendering and hydration.\n return createAsyncPlaceholder(\n asyncFactory,\n data,\n context,\n children,\n tag\n )\n }\n }\n\n data = data || {};\n\n // resolve constructor options in case global mixins are applied after\n // component constructor creation\n resolveConstructorOptions(Ctor);\n\n // transform component v-model data into props & events\n if (isDef(data.model)) {\n transformModel(Ctor.options, data);\n }\n\n // extract props\n var propsData = extractPropsFromVNodeData(data, Ctor, tag);\n\n // functional component\n if (isTrue(Ctor.options.functional)) {\n return createFunctionalComponent(Ctor, propsData, data, context, children)\n }\n\n // extract listeners, since these needs to be treated as\n // child component listeners instead of DOM listeners\n var listeners = data.on;\n // replace with listeners with .native modifier\n // so it gets processed during parent component patch.\n data.on = data.nativeOn;\n\n if (isTrue(Ctor.options.abstract)) {\n // abstract components do not keep anything\n // other than props & listeners & slot\n\n // work around flow\n var slot = data.slot;\n data = {};\n if (slot) {\n data.slot = slot;\n }\n }\n\n // install component management hooks onto the placeholder node\n installComponentHooks(data);\n\n // return a placeholder vnode\n var name = Ctor.options.name || tag;\n var vnode = new VNode(\n (\"vue-component-\" + (Ctor.cid) + (name ? (\"-\" + name) : '')),\n data, undefined, undefined, undefined, context,\n { Ctor: Ctor, propsData: propsData, listeners: listeners, tag: tag, children: children },\n asyncFactory\n );\n\n return vnode\n}\n\nfunction createComponentInstanceForVnode (\n vnode, // we know it's MountedComponentVNode but flow doesn't\n parent // activeInstance in lifecycle state\n) {\n var options = {\n _isComponent: true,\n _parentVnode: vnode,\n parent: parent\n };\n // check inline-template render functions\n var inlineTemplate = vnode.data.inlineTemplate;\n if (isDef(inlineTemplate)) {\n options.render = inlineTemplate.render;\n options.staticRenderFns = inlineTemplate.staticRenderFns;\n }\n return new vnode.componentOptions.Ctor(options)\n}\n\nfunction installComponentHooks (data) {\n var hooks = data.hook || (data.hook = {});\n for (var i = 0; i < hooksToMerge.length; i++) {\n var key = hooksToMerge[i];\n var existing = hooks[key];\n var toMerge = componentVNodeHooks[key];\n if (existing !== toMerge && !(existing && existing._merged)) {\n hooks[key] = existing ? mergeHook$1(toMerge, existing) : toMerge;\n }\n }\n}\n\nfunction mergeHook$1 (f1, f2) {\n var merged = function (a, b) {\n // flow complains about extra args which is why we use any\n f1(a, b);\n f2(a, b);\n };\n merged._merged = true;\n return merged\n}\n\n// transform component v-model info (value and callback) into\n// prop and event handler respectively.\nfunction transformModel (options, data) {\n var prop = (options.model && options.model.prop) || 'value';\n var event = (options.model && options.model.event) || 'input'\n ;(data.attrs || (data.attrs = {}))[prop] = data.model.value;\n var on = data.on || (data.on = {});\n var existing = on[event];\n var callback = data.model.callback;\n if (isDef(existing)) {\n if (\n Array.isArray(existing)\n ? existing.indexOf(callback) === -1\n : existing !== callback\n ) {\n on[event] = [callback].concat(existing);\n }\n } else {\n on[event] = callback;\n }\n}\n\n/* */\n\nvar SIMPLE_NORMALIZE = 1;\nvar ALWAYS_NORMALIZE = 2;\n\n// wrapper function for providing a more flexible interface\n// without getting yelled at by flow\nfunction createElement (\n context,\n tag,\n data,\n children,\n normalizationType,\n alwaysNormalize\n) {\n if (Array.isArray(data) || isPrimitive(data)) {\n normalizationType = children;\n children = data;\n data = undefined;\n }\n if (isTrue(alwaysNormalize)) {\n normalizationType = ALWAYS_NORMALIZE;\n }\n return _createElement(context, tag, data, children, normalizationType)\n}\n\nfunction _createElement (\n context,\n tag,\n data,\n children,\n normalizationType\n) {\n if (isDef(data) && isDef((data).__ob__)) {\n warn(\n \"Avoid using observed data object as vnode data: \" + (JSON.stringify(data)) + \"\\n\" +\n 'Always create fresh vnode data objects in each render!',\n context\n );\n return createEmptyVNode()\n }\n // object syntax in v-bind\n if (isDef(data) && isDef(data.is)) {\n tag = data.is;\n }\n if (!tag) {\n // in case of component :is set to falsy value\n return createEmptyVNode()\n }\n // warn against non-primitive key\n if (isDef(data) && isDef(data.key) && !isPrimitive(data.key)\n ) {\n {\n warn(\n 'Avoid using non-primitive value as key, ' +\n 'use string/number value instead.',\n context\n );\n }\n }\n // support single function children as default scoped slot\n if (Array.isArray(children) &&\n typeof children[0] === 'function'\n ) {\n data = data || {};\n data.scopedSlots = { default: children[0] };\n children.length = 0;\n }\n if (normalizationType === ALWAYS_NORMALIZE) {\n children = normalizeChildren(children);\n } else if (normalizationType === SIMPLE_NORMALIZE) {\n children = simpleNormalizeChildren(children);\n }\n var vnode, ns;\n if (typeof tag === 'string') {\n var Ctor;\n ns = (context.$vnode && context.$vnode.ns) || config.getTagNamespace(tag);\n if (config.isReservedTag(tag)) {\n // platform built-in elements\n vnode = new VNode(\n config.parsePlatformTagName(tag), data, children,\n undefined, undefined, context\n );\n } else if ((!data || !data.pre) && isDef(Ctor = resolveAsset(context.$options, 'components', tag))) {\n // component\n vnode = createComponent(Ctor, data, context, children, tag);\n } else {\n // unknown or unlisted namespaced elements\n // check at runtime because it may get assigned a namespace when its\n // parent normalizes children\n vnode = new VNode(\n tag, data, children,\n undefined, undefined, context\n );\n }\n } else {\n // direct component options / constructor\n vnode = createComponent(tag, data, context, children);\n }\n if (Array.isArray(vnode)) {\n return vnode\n } else if (isDef(vnode)) {\n if (isDef(ns)) { applyNS(vnode, ns); }\n if (isDef(data)) { registerDeepBindings(data); }\n return vnode\n } else {\n return createEmptyVNode()\n }\n}\n\nfunction applyNS (vnode, ns, force) {\n vnode.ns = ns;\n if (vnode.tag === 'foreignObject') {\n // use default namespace inside foreignObject\n ns = undefined;\n force = true;\n }\n if (isDef(vnode.children)) {\n for (var i = 0, l = vnode.children.length; i < l; i++) {\n var child = vnode.children[i];\n if (isDef(child.tag) && (\n isUndef(child.ns) || (isTrue(force) && child.tag !== 'svg'))) {\n applyNS(child, ns, force);\n }\n }\n }\n}\n\n// ref #5318\n// necessary to ensure parent re-render when deep bindings like :style and\n// :class are used on slot nodes\nfunction registerDeepBindings (data) {\n if (isObject(data.style)) {\n traverse(data.style);\n }\n if (isObject(data.class)) {\n traverse(data.class);\n }\n}\n\n/* */\n\nfunction initRender (vm) {\n vm._vnode = null; // the root of the child tree\n vm._staticTrees = null; // v-once cached trees\n var options = vm.$options;\n var parentVnode = vm.$vnode = options._parentVnode; // the placeholder node in parent tree\n var renderContext = parentVnode && parentVnode.context;\n vm.$slots = resolveSlots(options._renderChildren, renderContext);\n vm.$scopedSlots = emptyObject;\n // bind the createElement fn to this instance\n // so that we get proper render context inside it.\n // args order: tag, data, children, normalizationType, alwaysNormalize\n // internal version is used by render functions compiled from templates\n vm._c = function (a, b, c, d) { return createElement(vm, a, b, c, d, false); };\n // normalization is always applied for the public version, used in\n // user-written render functions.\n vm.$createElement = function (a, b, c, d) { return createElement(vm, a, b, c, d, true); };\n\n // $attrs & $listeners are exposed for easier HOC creation.\n // they need to be reactive so that HOCs using them are always updated\n var parentData = parentVnode && parentVnode.data;\n\n /* istanbul ignore else */\n {\n defineReactive$$1(vm, '$attrs', parentData && parentData.attrs || emptyObject, function () {\n !isUpdatingChildComponent && warn(\"$attrs is readonly.\", vm);\n }, true);\n defineReactive$$1(vm, '$listeners', options._parentListeners || emptyObject, function () {\n !isUpdatingChildComponent && warn(\"$listeners is readonly.\", vm);\n }, true);\n }\n}\n\nvar currentRenderingInstance = null;\n\nfunction renderMixin (Vue) {\n // install runtime convenience helpers\n installRenderHelpers(Vue.prototype);\n\n Vue.prototype.$nextTick = function (fn) {\n return nextTick(fn, this)\n };\n\n Vue.prototype._render = function () {\n var vm = this;\n var ref = vm.$options;\n var render = ref.render;\n var _parentVnode = ref._parentVnode;\n\n if (_parentVnode) {\n vm.$scopedSlots = normalizeScopedSlots(\n _parentVnode.data.scopedSlots,\n vm.$slots,\n vm.$scopedSlots\n );\n }\n\n // set parent vnode. this allows render functions to have access\n // to the data on the placeholder node.\n vm.$vnode = _parentVnode;\n // render self\n var vnode;\n try {\n // There's no need to maintain a stack becaues all render fns are called\n // separately from one another. Nested component's render fns are called\n // when parent component is patched.\n currentRenderingInstance = vm;\n vnode = render.call(vm._renderProxy, vm.$createElement);\n } catch (e) {\n handleError(e, vm, \"render\");\n // return error render result,\n // or previous vnode to prevent render error causing blank component\n /* istanbul ignore else */\n if (vm.$options.renderError) {\n try {\n vnode = vm.$options.renderError.call(vm._renderProxy, vm.$createElement, e);\n } catch (e) {\n handleError(e, vm, \"renderError\");\n vnode = vm._vnode;\n }\n } else {\n vnode = vm._vnode;\n }\n } finally {\n currentRenderingInstance = null;\n }\n // if the returned array contains only a single node, allow it\n if (Array.isArray(vnode) && vnode.length === 1) {\n vnode = vnode[0];\n }\n // return empty vnode in case the render function errored out\n if (!(vnode instanceof VNode)) {\n if (Array.isArray(vnode)) {\n warn(\n 'Multiple root nodes returned from render function. Render function ' +\n 'should return a single root node.',\n vm\n );\n }\n vnode = createEmptyVNode();\n }\n // set parent\n vnode.parent = _parentVnode;\n return vnode\n };\n}\n\n/* */\n\nfunction ensureCtor (comp, base) {\n if (\n comp.__esModule ||\n (hasSymbol && comp[Symbol.toStringTag] === 'Module')\n ) {\n comp = comp.default;\n }\n return isObject(comp)\n ? base.extend(comp)\n : comp\n}\n\nfunction createAsyncPlaceholder (\n factory,\n data,\n context,\n children,\n tag\n) {\n var node = createEmptyVNode();\n node.asyncFactory = factory;\n node.asyncMeta = { data: data, context: context, children: children, tag: tag };\n return node\n}\n\nfunction resolveAsyncComponent (\n factory,\n baseCtor\n) {\n if (isTrue(factory.error) && isDef(factory.errorComp)) {\n return factory.errorComp\n }\n\n if (isDef(factory.resolved)) {\n return factory.resolved\n }\n\n var owner = currentRenderingInstance;\n if (owner && isDef(factory.owners) && factory.owners.indexOf(owner) === -1) {\n // already pending\n factory.owners.push(owner);\n }\n\n if (isTrue(factory.loading) && isDef(factory.loadingComp)) {\n return factory.loadingComp\n }\n\n if (owner && !isDef(factory.owners)) {\n var owners = factory.owners = [owner];\n var sync = true;\n var timerLoading = null;\n var timerTimeout = null\n\n ;(owner).$on('hook:destroyed', function () { return remove(owners, owner); });\n\n var forceRender = function (renderCompleted) {\n for (var i = 0, l = owners.length; i < l; i++) {\n (owners[i]).$forceUpdate();\n }\n\n if (renderCompleted) {\n owners.length = 0;\n if (timerLoading !== null) {\n clearTimeout(timerLoading);\n timerLoading = null;\n }\n if (timerTimeout !== null) {\n clearTimeout(timerTimeout);\n timerTimeout = null;\n }\n }\n };\n\n var resolve = once(function (res) {\n // cache resolved\n factory.resolved = ensureCtor(res, baseCtor);\n // invoke callbacks only if this is not a synchronous resolve\n // (async resolves are shimmed as synchronous during SSR)\n if (!sync) {\n forceRender(true);\n } else {\n owners.length = 0;\n }\n });\n\n var reject = once(function (reason) {\n warn(\n \"Failed to resolve async component: \" + (String(factory)) +\n (reason ? (\"\\nReason: \" + reason) : '')\n );\n if (isDef(factory.errorComp)) {\n factory.error = true;\n forceRender(true);\n }\n });\n\n var res = factory(resolve, reject);\n\n if (isObject(res)) {\n if (isPromise(res)) {\n // () => Promise\n if (isUndef(factory.resolved)) {\n res.then(resolve, reject);\n }\n } else if (isPromise(res.component)) {\n res.component.then(resolve, reject);\n\n if (isDef(res.error)) {\n factory.errorComp = ensureCtor(res.error, baseCtor);\n }\n\n if (isDef(res.loading)) {\n factory.loadingComp = ensureCtor(res.loading, baseCtor);\n if (res.delay === 0) {\n factory.loading = true;\n } else {\n timerLoading = setTimeout(function () {\n timerLoading = null;\n if (isUndef(factory.resolved) && isUndef(factory.error)) {\n factory.loading = true;\n forceRender(false);\n }\n }, res.delay || 200);\n }\n }\n\n if (isDef(res.timeout)) {\n timerTimeout = setTimeout(function () {\n timerTimeout = null;\n if (isUndef(factory.resolved)) {\n reject(\n \"timeout (\" + (res.timeout) + \"ms)\"\n );\n }\n }, res.timeout);\n }\n }\n }\n\n sync = false;\n // return in case resolved synchronously\n return factory.loading\n ? factory.loadingComp\n : factory.resolved\n }\n}\n\n/* */\n\nfunction isAsyncPlaceholder (node) {\n return node.isComment && node.asyncFactory\n}\n\n/* */\n\nfunction getFirstComponentChild (children) {\n if (Array.isArray(children)) {\n for (var i = 0; i < children.length; i++) {\n var c = children[i];\n if (isDef(c) && (isDef(c.componentOptions) || isAsyncPlaceholder(c))) {\n return c\n }\n }\n }\n}\n\n/* */\n\n/* */\n\nfunction initEvents (vm) {\n vm._events = Object.create(null);\n vm._hasHookEvent = false;\n // init parent attached events\n var listeners = vm.$options._parentListeners;\n if (listeners) {\n updateComponentListeners(vm, listeners);\n }\n}\n\nvar target;\n\nfunction add (event, fn) {\n target.$on(event, fn);\n}\n\nfunction remove$1 (event, fn) {\n target.$off(event, fn);\n}\n\nfunction createOnceHandler (event, fn) {\n var _target = target;\n return function onceHandler () {\n var res = fn.apply(null, arguments);\n if (res !== null) {\n _target.$off(event, onceHandler);\n }\n }\n}\n\nfunction updateComponentListeners (\n vm,\n listeners,\n oldListeners\n) {\n target = vm;\n updateListeners(listeners, oldListeners || {}, add, remove$1, createOnceHandler, vm);\n target = undefined;\n}\n\nfunction eventsMixin (Vue) {\n var hookRE = /^hook:/;\n Vue.prototype.$on = function (event, fn) {\n var vm = this;\n if (Array.isArray(event)) {\n for (var i = 0, l = event.length; i < l; i++) {\n vm.$on(event[i], fn);\n }\n } else {\n (vm._events[event] || (vm._events[event] = [])).push(fn);\n // optimize hook:event cost by using a boolean flag marked at registration\n // instead of a hash lookup\n if (hookRE.test(event)) {\n vm._hasHookEvent = true;\n }\n }\n return vm\n };\n\n Vue.prototype.$once = function (event, fn) {\n var vm = this;\n function on () {\n vm.$off(event, on);\n fn.apply(vm, arguments);\n }\n on.fn = fn;\n vm.$on(event, on);\n return vm\n };\n\n Vue.prototype.$off = function (event, fn) {\n var vm = this;\n // all\n if (!arguments.length) {\n vm._events = Object.create(null);\n return vm\n }\n // array of events\n if (Array.isArray(event)) {\n for (var i$1 = 0, l = event.length; i$1 < l; i$1++) {\n vm.$off(event[i$1], fn);\n }\n return vm\n }\n // specific event\n var cbs = vm._events[event];\n if (!cbs) {\n return vm\n }\n if (!fn) {\n vm._events[event] = null;\n return vm\n }\n // specific handler\n var cb;\n var i = cbs.length;\n while (i--) {\n cb = cbs[i];\n if (cb === fn || cb.fn === fn) {\n cbs.splice(i, 1);\n break\n }\n }\n return vm\n };\n\n Vue.prototype.$emit = function (event) {\n var vm = this;\n {\n var lowerCaseEvent = event.toLowerCase();\n if (lowerCaseEvent !== event && vm._events[lowerCaseEvent]) {\n tip(\n \"Event \\\"\" + lowerCaseEvent + \"\\\" is emitted in component \" +\n (formatComponentName(vm)) + \" but the handler is registered for \\\"\" + event + \"\\\". \" +\n \"Note that HTML attributes are case-insensitive and you cannot use \" +\n \"v-on to listen to camelCase events when using in-DOM templates. \" +\n \"You should probably use \\\"\" + (hyphenate(event)) + \"\\\" instead of \\\"\" + event + \"\\\".\"\n );\n }\n }\n var cbs = vm._events[event];\n if (cbs) {\n cbs = cbs.length > 1 ? toArray(cbs) : cbs;\n var args = toArray(arguments, 1);\n var info = \"event handler for \\\"\" + event + \"\\\"\";\n for (var i = 0, l = cbs.length; i < l; i++) {\n invokeWithErrorHandling(cbs[i], vm, args, vm, info);\n }\n }\n return vm\n };\n}\n\n/* */\n\nvar activeInstance = null;\nvar isUpdatingChildComponent = false;\n\nfunction setActiveInstance(vm) {\n var prevActiveInstance = activeInstance;\n activeInstance = vm;\n return function () {\n activeInstance = prevActiveInstance;\n }\n}\n\nfunction initLifecycle (vm) {\n var options = vm.$options;\n\n // locate first non-abstract parent\n var parent = options.parent;\n if (parent && !options.abstract) {\n while (parent.$options.abstract && parent.$parent) {\n parent = parent.$parent;\n }\n parent.$children.push(vm);\n }\n\n vm.$parent = parent;\n vm.$root = parent ? parent.$root : vm;\n\n vm.$children = [];\n vm.$refs = {};\n\n vm._watcher = null;\n vm._inactive = null;\n vm._directInactive = false;\n vm._isMounted = false;\n vm._isDestroyed = false;\n vm._isBeingDestroyed = false;\n}\n\nfunction lifecycleMixin (Vue) {\n Vue.prototype._update = function (vnode, hydrating) {\n var vm = this;\n var prevEl = vm.$el;\n var prevVnode = vm._vnode;\n var restoreActiveInstance = setActiveInstance(vm);\n vm._vnode = vnode;\n // Vue.prototype.__patch__ is injected in entry points\n // based on the rendering backend used.\n if (!prevVnode) {\n // initial render\n vm.$el = vm.__patch__(vm.$el, vnode, hydrating, false /* removeOnly */);\n } else {\n // updates\n vm.$el = vm.__patch__(prevVnode, vnode);\n }\n restoreActiveInstance();\n // update __vue__ reference\n if (prevEl) {\n prevEl.__vue__ = null;\n }\n if (vm.$el) {\n vm.$el.__vue__ = vm;\n }\n // if parent is an HOC, update its $el as well\n if (vm.$vnode && vm.$parent && vm.$vnode === vm.$parent._vnode) {\n vm.$parent.$el = vm.$el;\n }\n // updated hook is called by the scheduler to ensure that children are\n // updated in a parent's updated hook.\n };\n\n Vue.prototype.$forceUpdate = function () {\n var vm = this;\n if (vm._watcher) {\n vm._watcher.update();\n }\n };\n\n Vue.prototype.$destroy = function () {\n var vm = this;\n if (vm._isBeingDestroyed) {\n return\n }\n callHook(vm, 'beforeDestroy');\n vm._isBeingDestroyed = true;\n // remove self from parent\n var parent = vm.$parent;\n if (parent && !parent._isBeingDestroyed && !vm.$options.abstract) {\n remove(parent.$children, vm);\n }\n // teardown watchers\n if (vm._watcher) {\n vm._watcher.teardown();\n }\n var i = vm._watchers.length;\n while (i--) {\n vm._watchers[i].teardown();\n }\n // remove reference from data ob\n // frozen object may not have observer.\n if (vm._data.__ob__) {\n vm._data.__ob__.vmCount--;\n }\n // call the last hook...\n vm._isDestroyed = true;\n // invoke destroy hooks on current rendered tree\n vm.__patch__(vm._vnode, null);\n // fire destroyed hook\n callHook(vm, 'destroyed');\n // turn off all instance listeners.\n vm.$off();\n // remove __vue__ reference\n if (vm.$el) {\n vm.$el.__vue__ = null;\n }\n // release circular reference (#6759)\n if (vm.$vnode) {\n vm.$vnode.parent = null;\n }\n };\n}\n\nfunction mountComponent (\n vm,\n el,\n hydrating\n) {\n vm.$el = el;\n if (!vm.$options.render) {\n vm.$options.render = createEmptyVNode;\n {\n /* istanbul ignore if */\n if ((vm.$options.template && vm.$options.template.charAt(0) !== '#') ||\n vm.$options.el || el) {\n warn(\n 'You are using the runtime-only build of Vue where the template ' +\n 'compiler is not available. Either pre-compile the templates into ' +\n 'render functions, or use the compiler-included build.',\n vm\n );\n } else {\n warn(\n 'Failed to mount component: template or render function not defined.',\n vm\n );\n }\n }\n }\n callHook(vm, 'beforeMount');\n\n var updateComponent;\n /* istanbul ignore if */\n if (config.performance && mark) {\n updateComponent = function () {\n var name = vm._name;\n var id = vm._uid;\n var startTag = \"vue-perf-start:\" + id;\n var endTag = \"vue-perf-end:\" + id;\n\n mark(startTag);\n var vnode = vm._render();\n mark(endTag);\n measure((\"vue \" + name + \" render\"), startTag, endTag);\n\n mark(startTag);\n vm._update(vnode, hydrating);\n mark(endTag);\n measure((\"vue \" + name + \" patch\"), startTag, endTag);\n };\n } else {\n updateComponent = function () {\n vm._update(vm._render(), hydrating);\n };\n }\n\n // we set this to vm._watcher inside the watcher's constructor\n // since the watcher's initial patch may call $forceUpdate (e.g. inside child\n // component's mounted hook), which relies on vm._watcher being already defined\n new Watcher(vm, updateComponent, noop, {\n before: function before () {\n if (vm._isMounted && !vm._isDestroyed) {\n callHook(vm, 'beforeUpdate');\n }\n }\n }, true /* isRenderWatcher */);\n hydrating = false;\n\n // manually mounted instance, call mounted on self\n // mounted is called for render-created child components in its inserted hook\n if (vm.$vnode == null) {\n vm._isMounted = true;\n callHook(vm, 'mounted');\n }\n return vm\n}\n\nfunction updateChildComponent (\n vm,\n propsData,\n listeners,\n parentVnode,\n renderChildren\n) {\n {\n isUpdatingChildComponent = true;\n }\n\n // determine whether component has slot children\n // we need to do this before overwriting $options._renderChildren.\n\n // check if there are dynamic scopedSlots (hand-written or compiled but with\n // dynamic slot names). Static scoped slots compiled from template has the\n // \"$stable\" marker.\n var newScopedSlots = parentVnode.data.scopedSlots;\n var oldScopedSlots = vm.$scopedSlots;\n var hasDynamicScopedSlot = !!(\n (newScopedSlots && !newScopedSlots.$stable) ||\n (oldScopedSlots !== emptyObject && !oldScopedSlots.$stable) ||\n (newScopedSlots && vm.$scopedSlots.$key !== newScopedSlots.$key)\n );\n\n // Any static slot children from the parent may have changed during parent's\n // update. Dynamic scoped slots may also have changed. In such cases, a forced\n // update is necessary to ensure correctness.\n var needsForceUpdate = !!(\n renderChildren || // has new static slots\n vm.$options._renderChildren || // has old static slots\n hasDynamicScopedSlot\n );\n\n vm.$options._parentVnode = parentVnode;\n vm.$vnode = parentVnode; // update vm's placeholder node without re-render\n\n if (vm._vnode) { // update child tree's parent\n vm._vnode.parent = parentVnode;\n }\n vm.$options._renderChildren = renderChildren;\n\n // update $attrs and $listeners hash\n // these are also reactive so they may trigger child update if the child\n // used them during render\n vm.$attrs = parentVnode.data.attrs || emptyObject;\n vm.$listeners = listeners || emptyObject;\n\n // update props\n if (propsData && vm.$options.props) {\n toggleObserving(false);\n var props = vm._props;\n var propKeys = vm.$options._propKeys || [];\n for (var i = 0; i < propKeys.length; i++) {\n var key = propKeys[i];\n var propOptions = vm.$options.props; // wtf flow?\n props[key] = validateProp(key, propOptions, propsData, vm);\n }\n toggleObserving(true);\n // keep a copy of raw propsData\n vm.$options.propsData = propsData;\n }\n\n // update listeners\n listeners = listeners || emptyObject;\n var oldListeners = vm.$options._parentListeners;\n vm.$options._parentListeners = listeners;\n updateComponentListeners(vm, listeners, oldListeners);\n\n // resolve slots + force update if has children\n if (needsForceUpdate) {\n vm.$slots = resolveSlots(renderChildren, parentVnode.context);\n vm.$forceUpdate();\n }\n\n {\n isUpdatingChildComponent = false;\n }\n}\n\nfunction isInInactiveTree (vm) {\n while (vm && (vm = vm.$parent)) {\n if (vm._inactive) { return true }\n }\n return false\n}\n\nfunction activateChildComponent (vm, direct) {\n if (direct) {\n vm._directInactive = false;\n if (isInInactiveTree(vm)) {\n return\n }\n } else if (vm._directInactive) {\n return\n }\n if (vm._inactive || vm._inactive === null) {\n vm._inactive = false;\n for (var i = 0; i < vm.$children.length; i++) {\n activateChildComponent(vm.$children[i]);\n }\n callHook(vm, 'activated');\n }\n}\n\nfunction deactivateChildComponent (vm, direct) {\n if (direct) {\n vm._directInactive = true;\n if (isInInactiveTree(vm)) {\n return\n }\n }\n if (!vm._inactive) {\n vm._inactive = true;\n for (var i = 0; i < vm.$children.length; i++) {\n deactivateChildComponent(vm.$children[i]);\n }\n callHook(vm, 'deactivated');\n }\n}\n\nfunction callHook (vm, hook) {\n // #7573 disable dep collection when invoking lifecycle hooks\n pushTarget();\n var handlers = vm.$options[hook];\n var info = hook + \" hook\";\n if (handlers) {\n for (var i = 0, j = handlers.length; i < j; i++) {\n invokeWithErrorHandling(handlers[i], vm, null, vm, info);\n }\n }\n if (vm._hasHookEvent) {\n vm.$emit('hook:' + hook);\n }\n popTarget();\n}\n\n/* */\n\nvar MAX_UPDATE_COUNT = 100;\n\nvar queue = [];\nvar activatedChildren = [];\nvar has = {};\nvar circular = {};\nvar waiting = false;\nvar flushing = false;\nvar index = 0;\n\n/**\n * Reset the scheduler's state.\n */\nfunction resetSchedulerState () {\n index = queue.length = activatedChildren.length = 0;\n has = {};\n {\n circular = {};\n }\n waiting = flushing = false;\n}\n\n// Async edge case #6566 requires saving the timestamp when event listeners are\n// attached. However, calling performance.now() has a perf overhead especially\n// if the page has thousands of event listeners. Instead, we take a timestamp\n// every time the scheduler flushes and use that for all event listeners\n// attached during that flush.\nvar currentFlushTimestamp = 0;\n\n// Async edge case fix requires storing an event listener's attach timestamp.\nvar getNow = Date.now;\n\n// Determine what event timestamp the browser is using. Annoyingly, the\n// timestamp can either be hi-res (relative to page load) or low-res\n// (relative to UNIX epoch), so in order to compare time we have to use the\n// same timestamp type when saving the flush timestamp.\n// All IE versions use low-res event timestamps, and have problematic clock\n// implementations (#9632)\nif (inBrowser && !isIE) {\n var performance = window.performance;\n if (\n performance &&\n typeof performance.now === 'function' &&\n getNow() > document.createEvent('Event').timeStamp\n ) {\n // if the event timestamp, although evaluated AFTER the Date.now(), is\n // smaller than it, it means the event is using a hi-res timestamp,\n // and we need to use the hi-res version for event listener timestamps as\n // well.\n getNow = function () { return performance.now(); };\n }\n}\n\n/**\n * Flush both queues and run the watchers.\n */\nfunction flushSchedulerQueue () {\n currentFlushTimestamp = getNow();\n flushing = true;\n var watcher, id;\n\n // Sort queue before flush.\n // This ensures that:\n // 1. Components are updated from parent to child. (because parent is always\n // created before the child)\n // 2. A component's user watchers are run before its render watcher (because\n // user watchers are created before the render watcher)\n // 3. If a component is destroyed during a parent component's watcher run,\n // its watchers can be skipped.\n queue.sort(function (a, b) { return a.id - b.id; });\n\n // do not cache length because more watchers might be pushed\n // as we run existing watchers\n for (index = 0; index < queue.length; index++) {\n watcher = queue[index];\n if (watcher.before) {\n watcher.before();\n }\n id = watcher.id;\n has[id] = null;\n watcher.run();\n // in dev build, check and stop circular updates.\n if (has[id] != null) {\n circular[id] = (circular[id] || 0) + 1;\n if (circular[id] > MAX_UPDATE_COUNT) {\n warn(\n 'You may have an infinite update loop ' + (\n watcher.user\n ? (\"in watcher with expression \\\"\" + (watcher.expression) + \"\\\"\")\n : \"in a component render function.\"\n ),\n watcher.vm\n );\n break\n }\n }\n }\n\n // keep copies of post queues before resetting state\n var activatedQueue = activatedChildren.slice();\n var updatedQueue = queue.slice();\n\n resetSchedulerState();\n\n // call component updated and activated hooks\n callActivatedHooks(activatedQueue);\n callUpdatedHooks(updatedQueue);\n\n // devtool hook\n /* istanbul ignore if */\n if (devtools && config.devtools) {\n devtools.emit('flush');\n }\n}\n\nfunction callUpdatedHooks (queue) {\n var i = queue.length;\n while (i--) {\n var watcher = queue[i];\n var vm = watcher.vm;\n if (vm._watcher === watcher && vm._isMounted && !vm._isDestroyed) {\n callHook(vm, 'updated');\n }\n }\n}\n\n/**\n * Queue a kept-alive component that was activated during patch.\n * The queue will be processed after the entire tree has been patched.\n */\nfunction queueActivatedComponent (vm) {\n // setting _inactive to false here so that a render function can\n // rely on checking whether it's in an inactive tree (e.g. router-view)\n vm._inactive = false;\n activatedChildren.push(vm);\n}\n\nfunction callActivatedHooks (queue) {\n for (var i = 0; i < queue.length; i++) {\n queue[i]._inactive = true;\n activateChildComponent(queue[i], true /* true */);\n }\n}\n\n/**\n * Push a watcher into the watcher queue.\n * Jobs with duplicate IDs will be skipped unless it's\n * pushed when the queue is being flushed.\n */\nfunction queueWatcher (watcher) {\n var id = watcher.id;\n if (has[id] == null) {\n has[id] = true;\n if (!flushing) {\n queue.push(watcher);\n } else {\n // if already flushing, splice the watcher based on its id\n // if already past its id, it will be run next immediately.\n var i = queue.length - 1;\n while (i > index && queue[i].id > watcher.id) {\n i--;\n }\n queue.splice(i + 1, 0, watcher);\n }\n // queue the flush\n if (!waiting) {\n waiting = true;\n\n if (!config.async) {\n flushSchedulerQueue();\n return\n }\n nextTick(flushSchedulerQueue);\n }\n }\n}\n\n/* */\n\n\n\nvar uid$2 = 0;\n\n/**\n * A watcher parses an expression, collects dependencies,\n * and fires callback when the expression value changes.\n * This is used for both the $watch() api and directives.\n */\nvar Watcher = function Watcher (\n vm,\n expOrFn,\n cb,\n options,\n isRenderWatcher\n) {\n this.vm = vm;\n if (isRenderWatcher) {\n vm._watcher = this;\n }\n vm._watchers.push(this);\n // options\n if (options) {\n this.deep = !!options.deep;\n this.user = !!options.user;\n this.lazy = !!options.lazy;\n this.sync = !!options.sync;\n this.before = options.before;\n } else {\n this.deep = this.user = this.lazy = this.sync = false;\n }\n this.cb = cb;\n this.id = ++uid$2; // uid for batching\n this.active = true;\n this.dirty = this.lazy; // for lazy watchers\n this.deps = [];\n this.newDeps = [];\n this.depIds = new _Set();\n this.newDepIds = new _Set();\n this.expression = expOrFn.toString();\n // parse expression for getter\n if (typeof expOrFn === 'function') {\n this.getter = expOrFn;\n } else {\n this.getter = parsePath(expOrFn);\n if (!this.getter) {\n this.getter = noop;\n warn(\n \"Failed watching path: \\\"\" + expOrFn + \"\\\" \" +\n 'Watcher only accepts simple dot-delimited paths. ' +\n 'For full control, use a function instead.',\n vm\n );\n }\n }\n this.value = this.lazy\n ? undefined\n : this.get();\n};\n\n/**\n * Evaluate the getter, and re-collect dependencies.\n */\nWatcher.prototype.get = function get () {\n pushTarget(this);\n var value;\n var vm = this.vm;\n try {\n value = this.getter.call(vm, vm);\n } catch (e) {\n if (this.user) {\n handleError(e, vm, (\"getter for watcher \\\"\" + (this.expression) + \"\\\"\"));\n } else {\n throw e\n }\n } finally {\n // \"touch\" every property so they are all tracked as\n // dependencies for deep watching\n if (this.deep) {\n traverse(value);\n }\n popTarget();\n this.cleanupDeps();\n }\n return value\n};\n\n/**\n * Add a dependency to this directive.\n */\nWatcher.prototype.addDep = function addDep (dep) {\n var id = dep.id;\n if (!this.newDepIds.has(id)) {\n this.newDepIds.add(id);\n this.newDeps.push(dep);\n if (!this.depIds.has(id)) {\n dep.addSub(this);\n }\n }\n};\n\n/**\n * Clean up for dependency collection.\n */\nWatcher.prototype.cleanupDeps = function cleanupDeps () {\n var i = this.deps.length;\n while (i--) {\n var dep = this.deps[i];\n if (!this.newDepIds.has(dep.id)) {\n dep.removeSub(this);\n }\n }\n var tmp = this.depIds;\n this.depIds = this.newDepIds;\n this.newDepIds = tmp;\n this.newDepIds.clear();\n tmp = this.deps;\n this.deps = this.newDeps;\n this.newDeps = tmp;\n this.newDeps.length = 0;\n};\n\n/**\n * Subscriber interface.\n * Will be called when a dependency changes.\n */\nWatcher.prototype.update = function update () {\n /* istanbul ignore else */\n if (this.lazy) {\n this.dirty = true;\n } else if (this.sync) {\n this.run();\n } else {\n queueWatcher(this);\n }\n};\n\n/**\n * Scheduler job interface.\n * Will be called by the scheduler.\n */\nWatcher.prototype.run = function run () {\n if (this.active) {\n var value = this.get();\n if (\n value !== this.value ||\n // Deep watchers and watchers on Object/Arrays should fire even\n // when the value is the same, because the value may\n // have mutated.\n isObject(value) ||\n this.deep\n ) {\n // set new value\n var oldValue = this.value;\n this.value = value;\n if (this.user) {\n try {\n this.cb.call(this.vm, value, oldValue);\n } catch (e) {\n handleError(e, this.vm, (\"callback for watcher \\\"\" + (this.expression) + \"\\\"\"));\n }\n } else {\n this.cb.call(this.vm, value, oldValue);\n }\n }\n }\n};\n\n/**\n * Evaluate the value of the watcher.\n * This only gets called for lazy watchers.\n */\nWatcher.prototype.evaluate = function evaluate () {\n this.value = this.get();\n this.dirty = false;\n};\n\n/**\n * Depend on all deps collected by this watcher.\n */\nWatcher.prototype.depend = function depend () {\n var i = this.deps.length;\n while (i--) {\n this.deps[i].depend();\n }\n};\n\n/**\n * Remove self from all dependencies' subscriber list.\n */\nWatcher.prototype.teardown = function teardown () {\n if (this.active) {\n // remove self from vm's watcher list\n // this is a somewhat expensive operation so we skip it\n // if the vm is being destroyed.\n if (!this.vm._isBeingDestroyed) {\n remove(this.vm._watchers, this);\n }\n var i = this.deps.length;\n while (i--) {\n this.deps[i].removeSub(this);\n }\n this.active = false;\n }\n};\n\n/* */\n\nvar sharedPropertyDefinition = {\n enumerable: true,\n configurable: true,\n get: noop,\n set: noop\n};\n\nfunction proxy (target, sourceKey, key) {\n sharedPropertyDefinition.get = function proxyGetter () {\n return this[sourceKey][key]\n };\n sharedPropertyDefinition.set = function proxySetter (val) {\n this[sourceKey][key] = val;\n };\n Object.defineProperty(target, key, sharedPropertyDefinition);\n}\n\nfunction initState (vm) {\n vm._watchers = [];\n var opts = vm.$options;\n if (opts.props) { initProps(vm, opts.props); }\n if (opts.methods) { initMethods(vm, opts.methods); }\n if (opts.data) {\n initData(vm);\n } else {\n observe(vm._data = {}, true /* asRootData */);\n }\n if (opts.computed) { initComputed(vm, opts.computed); }\n if (opts.watch && opts.watch !== nativeWatch) {\n initWatch(vm, opts.watch);\n }\n}\n\nfunction initProps (vm, propsOptions) {\n var propsData = vm.$options.propsData || {};\n var props = vm._props = {};\n // cache prop keys so that future props updates can iterate using Array\n // instead of dynamic object key enumeration.\n var keys = vm.$options._propKeys = [];\n var isRoot = !vm.$parent;\n // root instance props should be converted\n if (!isRoot) {\n toggleObserving(false);\n }\n var loop = function ( key ) {\n keys.push(key);\n var value = validateProp(key, propsOptions, propsData, vm);\n /* istanbul ignore else */\n {\n var hyphenatedKey = hyphenate(key);\n if (isReservedAttribute(hyphenatedKey) ||\n config.isReservedAttr(hyphenatedKey)) {\n warn(\n (\"\\\"\" + hyphenatedKey + \"\\\" is a reserved attribute and cannot be used as component prop.\"),\n vm\n );\n }\n defineReactive$$1(props, key, value, function () {\n if (!isRoot && !isUpdatingChildComponent) {\n warn(\n \"Avoid mutating a prop directly since the value will be \" +\n \"overwritten whenever the parent component re-renders. \" +\n \"Instead, use a data or computed property based on the prop's \" +\n \"value. Prop being mutated: \\\"\" + key + \"\\\"\",\n vm\n );\n }\n });\n }\n // static props are already proxied on the component's prototype\n // during Vue.extend(). We only need to proxy props defined at\n // instantiation here.\n if (!(key in vm)) {\n proxy(vm, \"_props\", key);\n }\n };\n\n for (var key in propsOptions) loop( key );\n toggleObserving(true);\n}\n\nfunction initData (vm) {\n var data = vm.$options.data;\n data = vm._data = typeof data === 'function'\n ? getData(data, vm)\n : data || {};\n if (!isPlainObject(data)) {\n data = {};\n warn(\n 'data functions should return an object:\\n' +\n 'https://vuejs.org/v2/guide/components.html#data-Must-Be-a-Function',\n vm\n );\n }\n // proxy data on instance\n var keys = Object.keys(data);\n var props = vm.$options.props;\n var methods = vm.$options.methods;\n var i = keys.length;\n while (i--) {\n var key = keys[i];\n {\n if (methods && hasOwn(methods, key)) {\n warn(\n (\"Method \\\"\" + key + \"\\\" has already been defined as a data property.\"),\n vm\n );\n }\n }\n if (props && hasOwn(props, key)) {\n warn(\n \"The data property \\\"\" + key + \"\\\" is already declared as a prop. \" +\n \"Use prop default value instead.\",\n vm\n );\n } else if (!isReserved(key)) {\n proxy(vm, \"_data\", key);\n }\n }\n // observe data\n observe(data, true /* asRootData */);\n}\n\nfunction getData (data, vm) {\n // #7573 disable dep collection when invoking data getters\n pushTarget();\n try {\n return data.call(vm, vm)\n } catch (e) {\n handleError(e, vm, \"data()\");\n return {}\n } finally {\n popTarget();\n }\n}\n\nvar computedWatcherOptions = { lazy: true };\n\nfunction initComputed (vm, computed) {\n // $flow-disable-line\n var watchers = vm._computedWatchers = Object.create(null);\n // computed properties are just getters during SSR\n var isSSR = isServerRendering();\n\n for (var key in computed) {\n var userDef = computed[key];\n var getter = typeof userDef === 'function' ? userDef : userDef.get;\n if (getter == null) {\n warn(\n (\"Getter is missing for computed property \\\"\" + key + \"\\\".\"),\n vm\n );\n }\n\n if (!isSSR) {\n // create internal watcher for the computed property.\n watchers[key] = new Watcher(\n vm,\n getter || noop,\n noop,\n computedWatcherOptions\n );\n }\n\n // component-defined computed properties are already defined on the\n // component prototype. We only need to define computed properties defined\n // at instantiation here.\n if (!(key in vm)) {\n defineComputed(vm, key, userDef);\n } else {\n if (key in vm.$data) {\n warn((\"The computed property \\\"\" + key + \"\\\" is already defined in data.\"), vm);\n } else if (vm.$options.props && key in vm.$options.props) {\n warn((\"The computed property \\\"\" + key + \"\\\" is already defined as a prop.\"), vm);\n }\n }\n }\n}\n\nfunction defineComputed (\n target,\n key,\n userDef\n) {\n var shouldCache = !isServerRendering();\n if (typeof userDef === 'function') {\n sharedPropertyDefinition.get = shouldCache\n ? createComputedGetter(key)\n : createGetterInvoker(userDef);\n sharedPropertyDefinition.set = noop;\n } else {\n sharedPropertyDefinition.get = userDef.get\n ? shouldCache && userDef.cache !== false\n ? createComputedGetter(key)\n : createGetterInvoker(userDef.get)\n : noop;\n sharedPropertyDefinition.set = userDef.set || noop;\n }\n if (sharedPropertyDefinition.set === noop) {\n sharedPropertyDefinition.set = function () {\n warn(\n (\"Computed property \\\"\" + key + \"\\\" was assigned to but it has no setter.\"),\n this\n );\n };\n }\n Object.defineProperty(target, key, sharedPropertyDefinition);\n}\n\nfunction createComputedGetter (key) {\n return function computedGetter () {\n var watcher = this._computedWatchers && this._computedWatchers[key];\n if (watcher) {\n if (watcher.dirty) {\n watcher.evaluate();\n }\n if (Dep.target) {\n watcher.depend();\n }\n return watcher.value\n }\n }\n}\n\nfunction createGetterInvoker(fn) {\n return function computedGetter () {\n return fn.call(this, this)\n }\n}\n\nfunction initMethods (vm, methods) {\n var props = vm.$options.props;\n for (var key in methods) {\n {\n if (typeof methods[key] !== 'function') {\n warn(\n \"Method \\\"\" + key + \"\\\" has type \\\"\" + (typeof methods[key]) + \"\\\" in the component definition. \" +\n \"Did you reference the function correctly?\",\n vm\n );\n }\n if (props && hasOwn(props, key)) {\n warn(\n (\"Method \\\"\" + key + \"\\\" has already been defined as a prop.\"),\n vm\n );\n }\n if ((key in vm) && isReserved(key)) {\n warn(\n \"Method \\\"\" + key + \"\\\" conflicts with an existing Vue instance method. \" +\n \"Avoid defining component methods that start with _ or $.\"\n );\n }\n }\n vm[key] = typeof methods[key] !== 'function' ? noop : bind(methods[key], vm);\n }\n}\n\nfunction initWatch (vm, watch) {\n for (var key in watch) {\n var handler = watch[key];\n if (Array.isArray(handler)) {\n for (var i = 0; i < handler.length; i++) {\n createWatcher(vm, key, handler[i]);\n }\n } else {\n createWatcher(vm, key, handler);\n }\n }\n}\n\nfunction createWatcher (\n vm,\n expOrFn,\n handler,\n options\n) {\n if (isPlainObject(handler)) {\n options = handler;\n handler = handler.handler;\n }\n if (typeof handler === 'string') {\n handler = vm[handler];\n }\n return vm.$watch(expOrFn, handler, options)\n}\n\nfunction stateMixin (Vue) {\n // flow somehow has problems with directly declared definition object\n // when using Object.defineProperty, so we have to procedurally build up\n // the object here.\n var dataDef = {};\n dataDef.get = function () { return this._data };\n var propsDef = {};\n propsDef.get = function () { return this._props };\n {\n dataDef.set = function () {\n warn(\n 'Avoid replacing instance root $data. ' +\n 'Use nested data properties instead.',\n this\n );\n };\n propsDef.set = function () {\n warn(\"$props is readonly.\", this);\n };\n }\n Object.defineProperty(Vue.prototype, '$data', dataDef);\n Object.defineProperty(Vue.prototype, '$props', propsDef);\n\n Vue.prototype.$set = set;\n Vue.prototype.$delete = del;\n\n Vue.prototype.$watch = function (\n expOrFn,\n cb,\n options\n ) {\n var vm = this;\n if (isPlainObject(cb)) {\n return createWatcher(vm, expOrFn, cb, options)\n }\n options = options || {};\n options.user = true;\n var watcher = new Watcher(vm, expOrFn, cb, options);\n if (options.immediate) {\n try {\n cb.call(vm, watcher.value);\n } catch (error) {\n handleError(error, vm, (\"callback for immediate watcher \\\"\" + (watcher.expression) + \"\\\"\"));\n }\n }\n return function unwatchFn () {\n watcher.teardown();\n }\n };\n}\n\n/* */\n\nvar uid$3 = 0;\n\nfunction initMixin (Vue) {\n Vue.prototype._init = function (options) {\n var vm = this;\n // a uid\n vm._uid = uid$3++;\n\n var startTag, endTag;\n /* istanbul ignore if */\n if (config.performance && mark) {\n startTag = \"vue-perf-start:\" + (vm._uid);\n endTag = \"vue-perf-end:\" + (vm._uid);\n mark(startTag);\n }\n\n // a flag to avoid this being observed\n vm._isVue = true;\n // merge options\n if (options && options._isComponent) {\n // optimize internal component instantiation\n // since dynamic options merging is pretty slow, and none of the\n // internal component options needs special treatment.\n initInternalComponent(vm, options);\n } else {\n vm.$options = mergeOptions(\n resolveConstructorOptions(vm.constructor),\n options || {},\n vm\n );\n }\n /* istanbul ignore else */\n {\n initProxy(vm);\n }\n // expose real self\n vm._self = vm;\n initLifecycle(vm);\n initEvents(vm);\n initRender(vm);\n callHook(vm, 'beforeCreate');\n initInjections(vm); // resolve injections before data/props\n initState(vm);\n initProvide(vm); // resolve provide after data/props\n callHook(vm, 'created');\n\n /* istanbul ignore if */\n if (config.performance && mark) {\n vm._name = formatComponentName(vm, false);\n mark(endTag);\n measure((\"vue \" + (vm._name) + \" init\"), startTag, endTag);\n }\n\n if (vm.$options.el) {\n vm.$mount(vm.$options.el);\n }\n };\n}\n\nfunction initInternalComponent (vm, options) {\n var opts = vm.$options = Object.create(vm.constructor.options);\n // doing this because it's faster than dynamic enumeration.\n var parentVnode = options._parentVnode;\n opts.parent = options.parent;\n opts._parentVnode = parentVnode;\n\n var vnodeComponentOptions = parentVnode.componentOptions;\n opts.propsData = vnodeComponentOptions.propsData;\n opts._parentListeners = vnodeComponentOptions.listeners;\n opts._renderChildren = vnodeComponentOptions.children;\n opts._componentTag = vnodeComponentOptions.tag;\n\n if (options.render) {\n opts.render = options.render;\n opts.staticRenderFns = options.staticRenderFns;\n }\n}\n\nfunction resolveConstructorOptions (Ctor) {\n var options = Ctor.options;\n if (Ctor.super) {\n var superOptions = resolveConstructorOptions(Ctor.super);\n var cachedSuperOptions = Ctor.superOptions;\n if (superOptions !== cachedSuperOptions) {\n // super option changed,\n // need to resolve new options.\n Ctor.superOptions = superOptions;\n // check if there are any late-modified/attached options (#4976)\n var modifiedOptions = resolveModifiedOptions(Ctor);\n // update base extend options\n if (modifiedOptions) {\n extend(Ctor.extendOptions, modifiedOptions);\n }\n options = Ctor.options = mergeOptions(superOptions, Ctor.extendOptions);\n if (options.name) {\n options.components[options.name] = Ctor;\n }\n }\n }\n return options\n}\n\nfunction resolveModifiedOptions (Ctor) {\n var modified;\n var latest = Ctor.options;\n var sealed = Ctor.sealedOptions;\n for (var key in latest) {\n if (latest[key] !== sealed[key]) {\n if (!modified) { modified = {}; }\n modified[key] = latest[key];\n }\n }\n return modified\n}\n\nfunction Vue (options) {\n if (!(this instanceof Vue)\n ) {\n warn('Vue is a constructor and should be called with the `new` keyword');\n }\n this._init(options);\n}\n\ninitMixin(Vue);\nstateMixin(Vue);\neventsMixin(Vue);\nlifecycleMixin(Vue);\nrenderMixin(Vue);\n\n/* */\n\nfunction initUse (Vue) {\n Vue.use = function (plugin) {\n var installedPlugins = (this._installedPlugins || (this._installedPlugins = []));\n if (installedPlugins.indexOf(plugin) > -1) {\n return this\n }\n\n // additional parameters\n var args = toArray(arguments, 1);\n args.unshift(this);\n if (typeof plugin.install === 'function') {\n plugin.install.apply(plugin, args);\n } else if (typeof plugin === 'function') {\n plugin.apply(null, args);\n }\n installedPlugins.push(plugin);\n return this\n };\n}\n\n/* */\n\nfunction initMixin$1 (Vue) {\n Vue.mixin = function (mixin) {\n this.options = mergeOptions(this.options, mixin);\n return this\n };\n}\n\n/* */\n\nfunction initExtend (Vue) {\n /**\n * Each instance constructor, including Vue, has a unique\n * cid. This enables us to create wrapped \"child\n * constructors\" for prototypal inheritance and cache them.\n */\n Vue.cid = 0;\n var cid = 1;\n\n /**\n * Class inheritance\n */\n Vue.extend = function (extendOptions) {\n extendOptions = extendOptions || {};\n var Super = this;\n var SuperId = Super.cid;\n var cachedCtors = extendOptions._Ctor || (extendOptions._Ctor = {});\n if (cachedCtors[SuperId]) {\n return cachedCtors[SuperId]\n }\n\n var name = extendOptions.name || Super.options.name;\n if (name) {\n validateComponentName(name);\n }\n\n var Sub = function VueComponent (options) {\n this._init(options);\n };\n Sub.prototype = Object.create(Super.prototype);\n Sub.prototype.constructor = Sub;\n Sub.cid = cid++;\n Sub.options = mergeOptions(\n Super.options,\n extendOptions\n );\n Sub['super'] = Super;\n\n // For props and computed properties, we define the proxy getters on\n // the Vue instances at extension time, on the extended prototype. This\n // avoids Object.defineProperty calls for each instance created.\n if (Sub.options.props) {\n initProps$1(Sub);\n }\n if (Sub.options.computed) {\n initComputed$1(Sub);\n }\n\n // allow further extension/mixin/plugin usage\n Sub.extend = Super.extend;\n Sub.mixin = Super.mixin;\n Sub.use = Super.use;\n\n // create asset registers, so extended classes\n // can have their private assets too.\n ASSET_TYPES.forEach(function (type) {\n Sub[type] = Super[type];\n });\n // enable recursive self-lookup\n if (name) {\n Sub.options.components[name] = Sub;\n }\n\n // keep a reference to the super options at extension time.\n // later at instantiation we can check if Super's options have\n // been updated.\n Sub.superOptions = Super.options;\n Sub.extendOptions = extendOptions;\n Sub.sealedOptions = extend({}, Sub.options);\n\n // cache constructor\n cachedCtors[SuperId] = Sub;\n return Sub\n };\n}\n\nfunction initProps$1 (Comp) {\n var props = Comp.options.props;\n for (var key in props) {\n proxy(Comp.prototype, \"_props\", key);\n }\n}\n\nfunction initComputed$1 (Comp) {\n var computed = Comp.options.computed;\n for (var key in computed) {\n defineComputed(Comp.prototype, key, computed[key]);\n }\n}\n\n/* */\n\nfunction initAssetRegisters (Vue) {\n /**\n * Create asset registration methods.\n */\n ASSET_TYPES.forEach(function (type) {\n Vue[type] = function (\n id,\n definition\n ) {\n if (!definition) {\n return this.options[type + 's'][id]\n } else {\n /* istanbul ignore if */\n if (type === 'component') {\n validateComponentName(id);\n }\n if (type === 'component' && isPlainObject(definition)) {\n definition.name = definition.name || id;\n definition = this.options._base.extend(definition);\n }\n if (type === 'directive' && typeof definition === 'function') {\n definition = { bind: definition, update: definition };\n }\n this.options[type + 's'][id] = definition;\n return definition\n }\n };\n });\n}\n\n/* */\n\n\n\nfunction getComponentName (opts) {\n return opts && (opts.Ctor.options.name || opts.tag)\n}\n\nfunction matches (pattern, name) {\n if (Array.isArray(pattern)) {\n return pattern.indexOf(name) > -1\n } else if (typeof pattern === 'string') {\n return pattern.split(',').indexOf(name) > -1\n } else if (isRegExp(pattern)) {\n return pattern.test(name)\n }\n /* istanbul ignore next */\n return false\n}\n\nfunction pruneCache (keepAliveInstance, filter) {\n var cache = keepAliveInstance.cache;\n var keys = keepAliveInstance.keys;\n var _vnode = keepAliveInstance._vnode;\n for (var key in cache) {\n var cachedNode = cache[key];\n if (cachedNode) {\n var name = getComponentName(cachedNode.componentOptions);\n if (name && !filter(name)) {\n pruneCacheEntry(cache, key, keys, _vnode);\n }\n }\n }\n}\n\nfunction pruneCacheEntry (\n cache,\n key,\n keys,\n current\n) {\n var cached$$1 = cache[key];\n if (cached$$1 && (!current || cached$$1.tag !== current.tag)) {\n cached$$1.componentInstance.$destroy();\n }\n cache[key] = null;\n remove(keys, key);\n}\n\nvar patternTypes = [String, RegExp, Array];\n\nvar KeepAlive = {\n name: 'keep-alive',\n abstract: true,\n\n props: {\n include: patternTypes,\n exclude: patternTypes,\n max: [String, Number]\n },\n\n created: function created () {\n this.cache = Object.create(null);\n this.keys = [];\n },\n\n destroyed: function destroyed () {\n for (var key in this.cache) {\n pruneCacheEntry(this.cache, key, this.keys);\n }\n },\n\n mounted: function mounted () {\n var this$1 = this;\n\n this.$watch('include', function (val) {\n pruneCache(this$1, function (name) { return matches(val, name); });\n });\n this.$watch('exclude', function (val) {\n pruneCache(this$1, function (name) { return !matches(val, name); });\n });\n },\n\n render: function render () {\n var slot = this.$slots.default;\n var vnode = getFirstComponentChild(slot);\n var componentOptions = vnode && vnode.componentOptions;\n if (componentOptions) {\n // check pattern\n var name = getComponentName(componentOptions);\n var ref = this;\n var include = ref.include;\n var exclude = ref.exclude;\n if (\n // not included\n (include && (!name || !matches(include, name))) ||\n // excluded\n (exclude && name && matches(exclude, name))\n ) {\n return vnode\n }\n\n var ref$1 = this;\n var cache = ref$1.cache;\n var keys = ref$1.keys;\n var key = vnode.key == null\n // same constructor may get registered as different local components\n // so cid alone is not enough (#3269)\n ? componentOptions.Ctor.cid + (componentOptions.tag ? (\"::\" + (componentOptions.tag)) : '')\n : vnode.key;\n if (cache[key]) {\n vnode.componentInstance = cache[key].componentInstance;\n // make current key freshest\n remove(keys, key);\n keys.push(key);\n } else {\n cache[key] = vnode;\n keys.push(key);\n // prune oldest entry\n if (this.max && keys.length > parseInt(this.max)) {\n pruneCacheEntry(cache, keys[0], keys, this._vnode);\n }\n }\n\n vnode.data.keepAlive = true;\n }\n return vnode || (slot && slot[0])\n }\n};\n\nvar builtInComponents = {\n KeepAlive: KeepAlive\n};\n\n/* */\n\nfunction initGlobalAPI (Vue) {\n // config\n var configDef = {};\n configDef.get = function () { return config; };\n {\n configDef.set = function () {\n warn(\n 'Do not replace the Vue.config object, set individual fields instead.'\n );\n };\n }\n Object.defineProperty(Vue, 'config', configDef);\n\n // exposed util methods.\n // NOTE: these are not considered part of the public API - avoid relying on\n // them unless you are aware of the risk.\n Vue.util = {\n warn: warn,\n extend: extend,\n mergeOptions: mergeOptions,\n defineReactive: defineReactive$$1\n };\n\n Vue.set = set;\n Vue.delete = del;\n Vue.nextTick = nextTick;\n\n // 2.6 explicit observable API\n Vue.observable = function (obj) {\n observe(obj);\n return obj\n };\n\n Vue.options = Object.create(null);\n ASSET_TYPES.forEach(function (type) {\n Vue.options[type + 's'] = Object.create(null);\n });\n\n // this is used to identify the \"base\" constructor to extend all plain-object\n // components with in Weex's multi-instance scenarios.\n Vue.options._base = Vue;\n\n extend(Vue.options.components, builtInComponents);\n\n initUse(Vue);\n initMixin$1(Vue);\n initExtend(Vue);\n initAssetRegisters(Vue);\n}\n\ninitGlobalAPI(Vue);\n\nObject.defineProperty(Vue.prototype, '$isServer', {\n get: isServerRendering\n});\n\nObject.defineProperty(Vue.prototype, '$ssrContext', {\n get: function get () {\n /* istanbul ignore next */\n return this.$vnode && this.$vnode.ssrContext\n }\n});\n\n// expose FunctionalRenderContext for ssr runtime helper installation\nObject.defineProperty(Vue, 'FunctionalRenderContext', {\n value: FunctionalRenderContext\n});\n\nVue.version = '2.6.10';\n\n/* */\n\n// these are reserved for web because they are directly compiled away\n// during template compilation\nvar isReservedAttr = makeMap('style,class');\n\n// attributes that should be using props for binding\nvar acceptValue = makeMap('input,textarea,option,select,progress');\nvar mustUseProp = function (tag, type, attr) {\n return (\n (attr === 'value' && acceptValue(tag)) && type !== 'button' ||\n (attr === 'selected' && tag === 'option') ||\n (attr === 'checked' && tag === 'input') ||\n (attr === 'muted' && tag === 'video')\n )\n};\n\nvar isEnumeratedAttr = makeMap('contenteditable,draggable,spellcheck');\n\nvar isValidContentEditableValue = makeMap('events,caret,typing,plaintext-only');\n\nvar convertEnumeratedValue = function (key, value) {\n return isFalsyAttrValue(value) || value === 'false'\n ? 'false'\n // allow arbitrary string value for contenteditable\n : key === 'contenteditable' && isValidContentEditableValue(value)\n ? value\n : 'true'\n};\n\nvar isBooleanAttr = makeMap(\n 'allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,' +\n 'default,defaultchecked,defaultmuted,defaultselected,defer,disabled,' +\n 'enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,' +\n 'muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,' +\n 'required,reversed,scoped,seamless,selected,sortable,translate,' +\n 'truespeed,typemustmatch,visible'\n);\n\nvar xlinkNS = 'http://www.w3.org/1999/xlink';\n\nvar isXlink = function (name) {\n return name.charAt(5) === ':' && name.slice(0, 5) === 'xlink'\n};\n\nvar getXlinkProp = function (name) {\n return isXlink(name) ? name.slice(6, name.length) : ''\n};\n\nvar isFalsyAttrValue = function (val) {\n return val == null || val === false\n};\n\n/* */\n\nfunction genClassForVnode (vnode) {\n var data = vnode.data;\n var parentNode = vnode;\n var childNode = vnode;\n while (isDef(childNode.componentInstance)) {\n childNode = childNode.componentInstance._vnode;\n if (childNode && childNode.data) {\n data = mergeClassData(childNode.data, data);\n }\n }\n while (isDef(parentNode = parentNode.parent)) {\n if (parentNode && parentNode.data) {\n data = mergeClassData(data, parentNode.data);\n }\n }\n return renderClass(data.staticClass, data.class)\n}\n\nfunction mergeClassData (child, parent) {\n return {\n staticClass: concat(child.staticClass, parent.staticClass),\n class: isDef(child.class)\n ? [child.class, parent.class]\n : parent.class\n }\n}\n\nfunction renderClass (\n staticClass,\n dynamicClass\n) {\n if (isDef(staticClass) || isDef(dynamicClass)) {\n return concat(staticClass, stringifyClass(dynamicClass))\n }\n /* istanbul ignore next */\n return ''\n}\n\nfunction concat (a, b) {\n return a ? b ? (a + ' ' + b) : a : (b || '')\n}\n\nfunction stringifyClass (value) {\n if (Array.isArray(value)) {\n return stringifyArray(value)\n }\n if (isObject(value)) {\n return stringifyObject(value)\n }\n if (typeof value === 'string') {\n return value\n }\n /* istanbul ignore next */\n return ''\n}\n\nfunction stringifyArray (value) {\n var res = '';\n var stringified;\n for (var i = 0, l = value.length; i < l; i++) {\n if (isDef(stringified = stringifyClass(value[i])) && stringified !== '') {\n if (res) { res += ' '; }\n res += stringified;\n }\n }\n return res\n}\n\nfunction stringifyObject (value) {\n var res = '';\n for (var key in value) {\n if (value[key]) {\n if (res) { res += ' '; }\n res += key;\n }\n }\n return res\n}\n\n/* */\n\nvar namespaceMap = {\n svg: 'http://www.w3.org/2000/svg',\n math: 'http://www.w3.org/1998/Math/MathML'\n};\n\nvar isHTMLTag = makeMap(\n 'html,body,base,head,link,meta,style,title,' +\n 'address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,' +\n 'div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,' +\n 'a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,' +\n 's,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,' +\n 'embed,object,param,source,canvas,script,noscript,del,ins,' +\n 'caption,col,colgroup,table,thead,tbody,td,th,tr,' +\n 'button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,' +\n 'output,progress,select,textarea,' +\n 'details,dialog,menu,menuitem,summary,' +\n 'content,element,shadow,template,blockquote,iframe,tfoot'\n);\n\n// this map is intentionally selective, only covering SVG elements that may\n// contain child elements.\nvar isSVG = makeMap(\n 'svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,' +\n 'foreignObject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,' +\n 'polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view',\n true\n);\n\nvar isPreTag = function (tag) { return tag === 'pre'; };\n\nvar isReservedTag = function (tag) {\n return isHTMLTag(tag) || isSVG(tag)\n};\n\nfunction getTagNamespace (tag) {\n if (isSVG(tag)) {\n return 'svg'\n }\n // basic support for MathML\n // note it doesn't support other MathML elements being component roots\n if (tag === 'math') {\n return 'math'\n }\n}\n\nvar unknownElementCache = Object.create(null);\nfunction isUnknownElement (tag) {\n /* istanbul ignore if */\n if (!inBrowser) {\n return true\n }\n if (isReservedTag(tag)) {\n return false\n }\n tag = tag.toLowerCase();\n /* istanbul ignore if */\n if (unknownElementCache[tag] != null) {\n return unknownElementCache[tag]\n }\n var el = document.createElement(tag);\n if (tag.indexOf('-') > -1) {\n // http://stackoverflow.com/a/28210364/1070244\n return (unknownElementCache[tag] = (\n el.constructor === window.HTMLUnknownElement ||\n el.constructor === window.HTMLElement\n ))\n } else {\n return (unknownElementCache[tag] = /HTMLUnknownElement/.test(el.toString()))\n }\n}\n\nvar isTextInputType = makeMap('text,number,password,search,email,tel,url');\n\n/* */\n\n/**\n * Query an element selector if it's not an element already.\n */\nfunction query (el) {\n if (typeof el === 'string') {\n var selected = document.querySelector(el);\n if (!selected) {\n warn(\n 'Cannot find element: ' + el\n );\n return document.createElement('div')\n }\n return selected\n } else {\n return el\n }\n}\n\n/* */\n\nfunction createElement$1 (tagName, vnode) {\n var elm = document.createElement(tagName);\n if (tagName !== 'select') {\n return elm\n }\n // false or null will remove the attribute but undefined will not\n if (vnode.data && vnode.data.attrs && vnode.data.attrs.multiple !== undefined) {\n elm.setAttribute('multiple', 'multiple');\n }\n return elm\n}\n\nfunction createElementNS (namespace, tagName) {\n return document.createElementNS(namespaceMap[namespace], tagName)\n}\n\nfunction createTextNode (text) {\n return document.createTextNode(text)\n}\n\nfunction createComment (text) {\n return document.createComment(text)\n}\n\nfunction insertBefore (parentNode, newNode, referenceNode) {\n parentNode.insertBefore(newNode, referenceNode);\n}\n\nfunction removeChild (node, child) {\n node.removeChild(child);\n}\n\nfunction appendChild (node, child) {\n node.appendChild(child);\n}\n\nfunction parentNode (node) {\n return node.parentNode\n}\n\nfunction nextSibling (node) {\n return node.nextSibling\n}\n\nfunction tagName (node) {\n return node.tagName\n}\n\nfunction setTextContent (node, text) {\n node.textContent = text;\n}\n\nfunction setStyleScope (node, scopeId) {\n node.setAttribute(scopeId, '');\n}\n\nvar nodeOps = /*#__PURE__*/Object.freeze({\n createElement: createElement$1,\n createElementNS: createElementNS,\n createTextNode: createTextNode,\n createComment: createComment,\n insertBefore: insertBefore,\n removeChild: removeChild,\n appendChild: appendChild,\n parentNode: parentNode,\n nextSibling: nextSibling,\n tagName: tagName,\n setTextContent: setTextContent,\n setStyleScope: setStyleScope\n});\n\n/* */\n\nvar ref = {\n create: function create (_, vnode) {\n registerRef(vnode);\n },\n update: function update (oldVnode, vnode) {\n if (oldVnode.data.ref !== vnode.data.ref) {\n registerRef(oldVnode, true);\n registerRef(vnode);\n }\n },\n destroy: function destroy (vnode) {\n registerRef(vnode, true);\n }\n};\n\nfunction registerRef (vnode, isRemoval) {\n var key = vnode.data.ref;\n if (!isDef(key)) { return }\n\n var vm = vnode.context;\n var ref = vnode.componentInstance || vnode.elm;\n var refs = vm.$refs;\n if (isRemoval) {\n if (Array.isArray(refs[key])) {\n remove(refs[key], ref);\n } else if (refs[key] === ref) {\n refs[key] = undefined;\n }\n } else {\n if (vnode.data.refInFor) {\n if (!Array.isArray(refs[key])) {\n refs[key] = [ref];\n } else if (refs[key].indexOf(ref) < 0) {\n // $flow-disable-line\n refs[key].push(ref);\n }\n } else {\n refs[key] = ref;\n }\n }\n}\n\n/**\n * Virtual DOM patching algorithm based on Snabbdom by\n * Simon Friis Vindum (@paldepind)\n * Licensed under the MIT License\n * https://github.com/paldepind/snabbdom/blob/master/LICENSE\n *\n * modified by Evan You (@yyx990803)\n *\n * Not type-checking this because this file is perf-critical and the cost\n * of making flow understand it is not worth it.\n */\n\nvar emptyNode = new VNode('', {}, []);\n\nvar hooks = ['create', 'activate', 'update', 'remove', 'destroy'];\n\nfunction sameVnode (a, b) {\n return (\n a.key === b.key && (\n (\n a.tag === b.tag &&\n a.isComment === b.isComment &&\n isDef(a.data) === isDef(b.data) &&\n sameInputType(a, b)\n ) || (\n isTrue(a.isAsyncPlaceholder) &&\n a.asyncFactory === b.asyncFactory &&\n isUndef(b.asyncFactory.error)\n )\n )\n )\n}\n\nfunction sameInputType (a, b) {\n if (a.tag !== 'input') { return true }\n var i;\n var typeA = isDef(i = a.data) && isDef(i = i.attrs) && i.type;\n var typeB = isDef(i = b.data) && isDef(i = i.attrs) && i.type;\n return typeA === typeB || isTextInputType(typeA) && isTextInputType(typeB)\n}\n\nfunction createKeyToOldIdx (children, beginIdx, endIdx) {\n var i, key;\n var map = {};\n for (i = beginIdx; i <= endIdx; ++i) {\n key = children[i].key;\n if (isDef(key)) { map[key] = i; }\n }\n return map\n}\n\nfunction createPatchFunction (backend) {\n var i, j;\n var cbs = {};\n\n var modules = backend.modules;\n var nodeOps = backend.nodeOps;\n\n for (i = 0; i < hooks.length; ++i) {\n cbs[hooks[i]] = [];\n for (j = 0; j < modules.length; ++j) {\n if (isDef(modules[j][hooks[i]])) {\n cbs[hooks[i]].push(modules[j][hooks[i]]);\n }\n }\n }\n\n function emptyNodeAt (elm) {\n return new VNode(nodeOps.tagName(elm).toLowerCase(), {}, [], undefined, elm)\n }\n\n function createRmCb (childElm, listeners) {\n function remove$$1 () {\n if (--remove$$1.listeners === 0) {\n removeNode(childElm);\n }\n }\n remove$$1.listeners = listeners;\n return remove$$1\n }\n\n function removeNode (el) {\n var parent = nodeOps.parentNode(el);\n // element may have already been removed due to v-html / v-text\n if (isDef(parent)) {\n nodeOps.removeChild(parent, el);\n }\n }\n\n function isUnknownElement$$1 (vnode, inVPre) {\n return (\n !inVPre &&\n !vnode.ns &&\n !(\n config.ignoredElements.length &&\n config.ignoredElements.some(function (ignore) {\n return isRegExp(ignore)\n ? ignore.test(vnode.tag)\n : ignore === vnode.tag\n })\n ) &&\n config.isUnknownElement(vnode.tag)\n )\n }\n\n var creatingElmInVPre = 0;\n\n function createElm (\n vnode,\n insertedVnodeQueue,\n parentElm,\n refElm,\n nested,\n ownerArray,\n index\n ) {\n if (isDef(vnode.elm) && isDef(ownerArray)) {\n // This vnode was used in a previous render!\n // now it's used as a new node, overwriting its elm would cause\n // potential patch errors down the road when it's used as an insertion\n // reference node. Instead, we clone the node on-demand before creating\n // associated DOM element for it.\n vnode = ownerArray[index] = cloneVNode(vnode);\n }\n\n vnode.isRootInsert = !nested; // for transition enter check\n if (createComponent(vnode, insertedVnodeQueue, parentElm, refElm)) {\n return\n }\n\n var data = vnode.data;\n var children = vnode.children;\n var tag = vnode.tag;\n if (isDef(tag)) {\n {\n if (data && data.pre) {\n creatingElmInVPre++;\n }\n if (isUnknownElement$$1(vnode, creatingElmInVPre)) {\n warn(\n 'Unknown custom element: <' + tag + '> - did you ' +\n 'register the component correctly? For recursive components, ' +\n 'make sure to provide the \"name\" option.',\n vnode.context\n );\n }\n }\n\n vnode.elm = vnode.ns\n ? nodeOps.createElementNS(vnode.ns, tag)\n : nodeOps.createElement(tag, vnode);\n setScope(vnode);\n\n /* istanbul ignore if */\n {\n createChildren(vnode, children, insertedVnodeQueue);\n if (isDef(data)) {\n invokeCreateHooks(vnode, insertedVnodeQueue);\n }\n insert(parentElm, vnode.elm, refElm);\n }\n\n if (data && data.pre) {\n creatingElmInVPre--;\n }\n } else if (isTrue(vnode.isComment)) {\n vnode.elm = nodeOps.createComment(vnode.text);\n insert(parentElm, vnode.elm, refElm);\n } else {\n vnode.elm = nodeOps.createTextNode(vnode.text);\n insert(parentElm, vnode.elm, refElm);\n }\n }\n\n function createComponent (vnode, insertedVnodeQueue, parentElm, refElm) {\n var i = vnode.data;\n if (isDef(i)) {\n var isReactivated = isDef(vnode.componentInstance) && i.keepAlive;\n if (isDef(i = i.hook) && isDef(i = i.init)) {\n i(vnode, false /* hydrating */);\n }\n // after calling the init hook, if the vnode is a child component\n // it should've created a child instance and mounted it. the child\n // component also has set the placeholder vnode's elm.\n // in that case we can just return the element and be done.\n if (isDef(vnode.componentInstance)) {\n initComponent(vnode, insertedVnodeQueue);\n insert(parentElm, vnode.elm, refElm);\n if (isTrue(isReactivated)) {\n reactivateComponent(vnode, insertedVnodeQueue, parentElm, refElm);\n }\n return true\n }\n }\n }\n\n function initComponent (vnode, insertedVnodeQueue) {\n if (isDef(vnode.data.pendingInsert)) {\n insertedVnodeQueue.push.apply(insertedVnodeQueue, vnode.data.pendingInsert);\n vnode.data.pendingInsert = null;\n }\n vnode.elm = vnode.componentInstance.$el;\n if (isPatchable(vnode)) {\n invokeCreateHooks(vnode, insertedVnodeQueue);\n setScope(vnode);\n } else {\n // empty component root.\n // skip all element-related modules except for ref (#3455)\n registerRef(vnode);\n // make sure to invoke the insert hook\n insertedVnodeQueue.push(vnode);\n }\n }\n\n function reactivateComponent (vnode, insertedVnodeQueue, parentElm, refElm) {\n var i;\n // hack for #4339: a reactivated component with inner transition\n // does not trigger because the inner node's created hooks are not called\n // again. It's not ideal to involve module-specific logic in here but\n // there doesn't seem to be a better way to do it.\n var innerNode = vnode;\n while (innerNode.componentInstance) {\n innerNode = innerNode.componentInstance._vnode;\n if (isDef(i = innerNode.data) && isDef(i = i.transition)) {\n for (i = 0; i < cbs.activate.length; ++i) {\n cbs.activate[i](emptyNode, innerNode);\n }\n insertedVnodeQueue.push(innerNode);\n break\n }\n }\n // unlike a newly created component,\n // a reactivated keep-alive component doesn't insert itself\n insert(parentElm, vnode.elm, refElm);\n }\n\n function insert (parent, elm, ref$$1) {\n if (isDef(parent)) {\n if (isDef(ref$$1)) {\n if (nodeOps.parentNode(ref$$1) === parent) {\n nodeOps.insertBefore(parent, elm, ref$$1);\n }\n } else {\n nodeOps.appendChild(parent, elm);\n }\n }\n }\n\n function createChildren (vnode, children, insertedVnodeQueue) {\n if (Array.isArray(children)) {\n {\n checkDuplicateKeys(children);\n }\n for (var i = 0; i < children.length; ++i) {\n createElm(children[i], insertedVnodeQueue, vnode.elm, null, true, children, i);\n }\n } else if (isPrimitive(vnode.text)) {\n nodeOps.appendChild(vnode.elm, nodeOps.createTextNode(String(vnode.text)));\n }\n }\n\n function isPatchable (vnode) {\n while (vnode.componentInstance) {\n vnode = vnode.componentInstance._vnode;\n }\n return isDef(vnode.tag)\n }\n\n function invokeCreateHooks (vnode, insertedVnodeQueue) {\n for (var i$1 = 0; i$1 < cbs.create.length; ++i$1) {\n cbs.create[i$1](emptyNode, vnode);\n }\n i = vnode.data.hook; // Reuse variable\n if (isDef(i)) {\n if (isDef(i.create)) { i.create(emptyNode, vnode); }\n if (isDef(i.insert)) { insertedVnodeQueue.push(vnode); }\n }\n }\n\n // set scope id attribute for scoped CSS.\n // this is implemented as a special case to avoid the overhead\n // of going through the normal attribute patching process.\n function setScope (vnode) {\n var i;\n if (isDef(i = vnode.fnScopeId)) {\n nodeOps.setStyleScope(vnode.elm, i);\n } else {\n var ancestor = vnode;\n while (ancestor) {\n if (isDef(i = ancestor.context) && isDef(i = i.$options._scopeId)) {\n nodeOps.setStyleScope(vnode.elm, i);\n }\n ancestor = ancestor.parent;\n }\n }\n // for slot content they should also get the scopeId from the host instance.\n if (isDef(i = activeInstance) &&\n i !== vnode.context &&\n i !== vnode.fnContext &&\n isDef(i = i.$options._scopeId)\n ) {\n nodeOps.setStyleScope(vnode.elm, i);\n }\n }\n\n function addVnodes (parentElm, refElm, vnodes, startIdx, endIdx, insertedVnodeQueue) {\n for (; startIdx <= endIdx; ++startIdx) {\n createElm(vnodes[startIdx], insertedVnodeQueue, parentElm, refElm, false, vnodes, startIdx);\n }\n }\n\n function invokeDestroyHook (vnode) {\n var i, j;\n var data = vnode.data;\n if (isDef(data)) {\n if (isDef(i = data.hook) && isDef(i = i.destroy)) { i(vnode); }\n for (i = 0; i < cbs.destroy.length; ++i) { cbs.destroy[i](vnode); }\n }\n if (isDef(i = vnode.children)) {\n for (j = 0; j < vnode.children.length; ++j) {\n invokeDestroyHook(vnode.children[j]);\n }\n }\n }\n\n function removeVnodes (parentElm, vnodes, startIdx, endIdx) {\n for (; startIdx <= endIdx; ++startIdx) {\n var ch = vnodes[startIdx];\n if (isDef(ch)) {\n if (isDef(ch.tag)) {\n removeAndInvokeRemoveHook(ch);\n invokeDestroyHook(ch);\n } else { // Text node\n removeNode(ch.elm);\n }\n }\n }\n }\n\n function removeAndInvokeRemoveHook (vnode, rm) {\n if (isDef(rm) || isDef(vnode.data)) {\n var i;\n var listeners = cbs.remove.length + 1;\n if (isDef(rm)) {\n // we have a recursively passed down rm callback\n // increase the listeners count\n rm.listeners += listeners;\n } else {\n // directly removing\n rm = createRmCb(vnode.elm, listeners);\n }\n // recursively invoke hooks on child component root node\n if (isDef(i = vnode.componentInstance) && isDef(i = i._vnode) && isDef(i.data)) {\n removeAndInvokeRemoveHook(i, rm);\n }\n for (i = 0; i < cbs.remove.length; ++i) {\n cbs.remove[i](vnode, rm);\n }\n if (isDef(i = vnode.data.hook) && isDef(i = i.remove)) {\n i(vnode, rm);\n } else {\n rm();\n }\n } else {\n removeNode(vnode.elm);\n }\n }\n\n function updateChildren (parentElm, oldCh, newCh, insertedVnodeQueue, removeOnly) {\n var oldStartIdx = 0;\n var newStartIdx = 0;\n var oldEndIdx = oldCh.length - 1;\n var oldStartVnode = oldCh[0];\n var oldEndVnode = oldCh[oldEndIdx];\n var newEndIdx = newCh.length - 1;\n var newStartVnode = newCh[0];\n var newEndVnode = newCh[newEndIdx];\n var oldKeyToIdx, idxInOld, vnodeToMove, refElm;\n\n // removeOnly is a special flag used only by <transition-group>\n // to ensure removed elements stay in correct relative positions\n // during leaving transitions\n var canMove = !removeOnly;\n\n {\n checkDuplicateKeys(newCh);\n }\n\n while (oldStartIdx <= oldEndIdx && newStartIdx <= newEndIdx) {\n if (isUndef(oldStartVnode)) {\n oldStartVnode = oldCh[++oldStartIdx]; // Vnode has been moved left\n } else if (isUndef(oldEndVnode)) {\n oldEndVnode = oldCh[--oldEndIdx];\n } else if (sameVnode(oldStartVnode, newStartVnode)) {\n patchVnode(oldStartVnode, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);\n oldStartVnode = oldCh[++oldStartIdx];\n newStartVnode = newCh[++newStartIdx];\n } else if (sameVnode(oldEndVnode, newEndVnode)) {\n patchVnode(oldEndVnode, newEndVnode, insertedVnodeQueue, newCh, newEndIdx);\n oldEndVnode = oldCh[--oldEndIdx];\n newEndVnode = newCh[--newEndIdx];\n } else if (sameVnode(oldStartVnode, newEndVnode)) { // Vnode moved right\n patchVnode(oldStartVnode, newEndVnode, insertedVnodeQueue, newCh, newEndIdx);\n canMove && nodeOps.insertBefore(parentElm, oldStartVnode.elm, nodeOps.nextSibling(oldEndVnode.elm));\n oldStartVnode = oldCh[++oldStartIdx];\n newEndVnode = newCh[--newEndIdx];\n } else if (sameVnode(oldEndVnode, newStartVnode)) { // Vnode moved left\n patchVnode(oldEndVnode, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);\n canMove && nodeOps.insertBefore(parentElm, oldEndVnode.elm, oldStartVnode.elm);\n oldEndVnode = oldCh[--oldEndIdx];\n newStartVnode = newCh[++newStartIdx];\n } else {\n if (isUndef(oldKeyToIdx)) { oldKeyToIdx = createKeyToOldIdx(oldCh, oldStartIdx, oldEndIdx); }\n idxInOld = isDef(newStartVnode.key)\n ? oldKeyToIdx[newStartVnode.key]\n : findIdxInOld(newStartVnode, oldCh, oldStartIdx, oldEndIdx);\n if (isUndef(idxInOld)) { // New element\n createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm, false, newCh, newStartIdx);\n } else {\n vnodeToMove = oldCh[idxInOld];\n if (sameVnode(vnodeToMove, newStartVnode)) {\n patchVnode(vnodeToMove, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);\n oldCh[idxInOld] = undefined;\n canMove && nodeOps.insertBefore(parentElm, vnodeToMove.elm, oldStartVnode.elm);\n } else {\n // same key but different element. treat as new element\n createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm, false, newCh, newStartIdx);\n }\n }\n newStartVnode = newCh[++newStartIdx];\n }\n }\n if (oldStartIdx > oldEndIdx) {\n refElm = isUndef(newCh[newEndIdx + 1]) ? null : newCh[newEndIdx + 1].elm;\n addVnodes(parentElm, refElm, newCh, newStartIdx, newEndIdx, insertedVnodeQueue);\n } else if (newStartIdx > newEndIdx) {\n removeVnodes(parentElm, oldCh, oldStartIdx, oldEndIdx);\n }\n }\n\n function checkDuplicateKeys (children) {\n var seenKeys = {};\n for (var i = 0; i < children.length; i++) {\n var vnode = children[i];\n var key = vnode.key;\n if (isDef(key)) {\n if (seenKeys[key]) {\n warn(\n (\"Duplicate keys detected: '\" + key + \"'. This may cause an update error.\"),\n vnode.context\n );\n } else {\n seenKeys[key] = true;\n }\n }\n }\n }\n\n function findIdxInOld (node, oldCh, start, end) {\n for (var i = start; i < end; i++) {\n var c = oldCh[i];\n if (isDef(c) && sameVnode(node, c)) { return i }\n }\n }\n\n function patchVnode (\n oldVnode,\n vnode,\n insertedVnodeQueue,\n ownerArray,\n index,\n removeOnly\n ) {\n if (oldVnode === vnode) {\n return\n }\n\n if (isDef(vnode.elm) && isDef(ownerArray)) {\n // clone reused vnode\n vnode = ownerArray[index] = cloneVNode(vnode);\n }\n\n var elm = vnode.elm = oldVnode.elm;\n\n if (isTrue(oldVnode.isAsyncPlaceholder)) {\n if (isDef(vnode.asyncFactory.resolved)) {\n hydrate(oldVnode.elm, vnode, insertedVnodeQueue);\n } else {\n vnode.isAsyncPlaceholder = true;\n }\n return\n }\n\n // reuse element for static trees.\n // note we only do this if the vnode is cloned -\n // if the new node is not cloned it means the render functions have been\n // reset by the hot-reload-api and we need to do a proper re-render.\n if (isTrue(vnode.isStatic) &&\n isTrue(oldVnode.isStatic) &&\n vnode.key === oldVnode.key &&\n (isTrue(vnode.isCloned) || isTrue(vnode.isOnce))\n ) {\n vnode.componentInstance = oldVnode.componentInstance;\n return\n }\n\n var i;\n var data = vnode.data;\n if (isDef(data) && isDef(i = data.hook) && isDef(i = i.prepatch)) {\n i(oldVnode, vnode);\n }\n\n var oldCh = oldVnode.children;\n var ch = vnode.children;\n if (isDef(data) && isPatchable(vnode)) {\n for (i = 0; i < cbs.update.length; ++i) { cbs.update[i](oldVnode, vnode); }\n if (isDef(i = data.hook) && isDef(i = i.update)) { i(oldVnode, vnode); }\n }\n if (isUndef(vnode.text)) {\n if (isDef(oldCh) && isDef(ch)) {\n if (oldCh !== ch) { updateChildren(elm, oldCh, ch, insertedVnodeQueue, removeOnly); }\n } else if (isDef(ch)) {\n {\n checkDuplicateKeys(ch);\n }\n if (isDef(oldVnode.text)) { nodeOps.setTextContent(elm, ''); }\n addVnodes(elm, null, ch, 0, ch.length - 1, insertedVnodeQueue);\n } else if (isDef(oldCh)) {\n removeVnodes(elm, oldCh, 0, oldCh.length - 1);\n } else if (isDef(oldVnode.text)) {\n nodeOps.setTextContent(elm, '');\n }\n } else if (oldVnode.text !== vnode.text) {\n nodeOps.setTextContent(elm, vnode.text);\n }\n if (isDef(data)) {\n if (isDef(i = data.hook) && isDef(i = i.postpatch)) { i(oldVnode, vnode); }\n }\n }\n\n function invokeInsertHook (vnode, queue, initial) {\n // delay insert hooks for component root nodes, invoke them after the\n // element is really inserted\n if (isTrue(initial) && isDef(vnode.parent)) {\n vnode.parent.data.pendingInsert = queue;\n } else {\n for (var i = 0; i < queue.length; ++i) {\n queue[i].data.hook.insert(queue[i]);\n }\n }\n }\n\n var hydrationBailed = false;\n // list of modules that can skip create hook during hydration because they\n // are already rendered on the client or has no need for initialization\n // Note: style is excluded because it relies on initial clone for future\n // deep updates (#7063).\n var isRenderedModule = makeMap('attrs,class,staticClass,staticStyle,key');\n\n // Note: this is a browser-only function so we can assume elms are DOM nodes.\n function hydrate (elm, vnode, insertedVnodeQueue, inVPre) {\n var i;\n var tag = vnode.tag;\n var data = vnode.data;\n var children = vnode.children;\n inVPre = inVPre || (data && data.pre);\n vnode.elm = elm;\n\n if (isTrue(vnode.isComment) && isDef(vnode.asyncFactory)) {\n vnode.isAsyncPlaceholder = true;\n return true\n }\n // assert node match\n {\n if (!assertNodeMatch(elm, vnode, inVPre)) {\n return false\n }\n }\n if (isDef(data)) {\n if (isDef(i = data.hook) && isDef(i = i.init)) { i(vnode, true /* hydrating */); }\n if (isDef(i = vnode.componentInstance)) {\n // child component. it should have hydrated its own tree.\n initComponent(vnode, insertedVnodeQueue);\n return true\n }\n }\n if (isDef(tag)) {\n if (isDef(children)) {\n // empty element, allow client to pick up and populate children\n if (!elm.hasChildNodes()) {\n createChildren(vnode, children, insertedVnodeQueue);\n } else {\n // v-html and domProps: innerHTML\n if (isDef(i = data) && isDef(i = i.domProps) && isDef(i = i.innerHTML)) {\n if (i !== elm.innerHTML) {\n /* istanbul ignore if */\n if (typeof console !== 'undefined' &&\n !hydrationBailed\n ) {\n hydrationBailed = true;\n console.warn('Parent: ', elm);\n console.warn('server innerHTML: ', i);\n console.warn('client innerHTML: ', elm.innerHTML);\n }\n return false\n }\n } else {\n // iterate and compare children lists\n var childrenMatch = true;\n var childNode = elm.firstChild;\n for (var i$1 = 0; i$1 < children.length; i$1++) {\n if (!childNode || !hydrate(childNode, children[i$1], insertedVnodeQueue, inVPre)) {\n childrenMatch = false;\n break\n }\n childNode = childNode.nextSibling;\n }\n // if childNode is not null, it means the actual childNodes list is\n // longer than the virtual children list.\n if (!childrenMatch || childNode) {\n /* istanbul ignore if */\n if (typeof console !== 'undefined' &&\n !hydrationBailed\n ) {\n hydrationBailed = true;\n console.warn('Parent: ', elm);\n console.warn('Mismatching childNodes vs. VNodes: ', elm.childNodes, children);\n }\n return false\n }\n }\n }\n }\n if (isDef(data)) {\n var fullInvoke = false;\n for (var key in data) {\n if (!isRenderedModule(key)) {\n fullInvoke = true;\n invokeCreateHooks(vnode, insertedVnodeQueue);\n break\n }\n }\n if (!fullInvoke && data['class']) {\n // ensure collecting deps for deep class bindings for future updates\n traverse(data['class']);\n }\n }\n } else if (elm.data !== vnode.text) {\n elm.data = vnode.text;\n }\n return true\n }\n\n function assertNodeMatch (node, vnode, inVPre) {\n if (isDef(vnode.tag)) {\n return vnode.tag.indexOf('vue-component') === 0 || (\n !isUnknownElement$$1(vnode, inVPre) &&\n vnode.tag.toLowerCase() === (node.tagName && node.tagName.toLowerCase())\n )\n } else {\n return node.nodeType === (vnode.isComment ? 8 : 3)\n }\n }\n\n return function patch (oldVnode, vnode, hydrating, removeOnly) {\n if (isUndef(vnode)) {\n if (isDef(oldVnode)) { invokeDestroyHook(oldVnode); }\n return\n }\n\n var isInitialPatch = false;\n var insertedVnodeQueue = [];\n\n if (isUndef(oldVnode)) {\n // empty mount (likely as component), create new root element\n isInitialPatch = true;\n createElm(vnode, insertedVnodeQueue);\n } else {\n var isRealElement = isDef(oldVnode.nodeType);\n if (!isRealElement && sameVnode(oldVnode, vnode)) {\n // patch existing root node\n patchVnode(oldVnode, vnode, insertedVnodeQueue, null, null, removeOnly);\n } else {\n if (isRealElement) {\n // mounting to a real element\n // check if this is server-rendered content and if we can perform\n // a successful hydration.\n if (oldVnode.nodeType === 1 && oldVnode.hasAttribute(SSR_ATTR)) {\n oldVnode.removeAttribute(SSR_ATTR);\n hydrating = true;\n }\n if (isTrue(hydrating)) {\n if (hydrate(oldVnode, vnode, insertedVnodeQueue)) {\n invokeInsertHook(vnode, insertedVnodeQueue, true);\n return oldVnode\n } else {\n warn(\n 'The client-side rendered virtual DOM tree is not matching ' +\n 'server-rendered content. This is likely caused by incorrect ' +\n 'HTML markup, for example nesting block-level elements inside ' +\n '<p>, or missing <tbody>. Bailing hydration and performing ' +\n 'full client-side render.'\n );\n }\n }\n // either not server-rendered, or hydration failed.\n // create an empty node and replace it\n oldVnode = emptyNodeAt(oldVnode);\n }\n\n // replacing existing element\n var oldElm = oldVnode.elm;\n var parentElm = nodeOps.parentNode(oldElm);\n\n // create new node\n createElm(\n vnode,\n insertedVnodeQueue,\n // extremely rare edge case: do not insert if old element is in a\n // leaving transition. Only happens when combining transition +\n // keep-alive + HOCs. (#4590)\n oldElm._leaveCb ? null : parentElm,\n nodeOps.nextSibling(oldElm)\n );\n\n // update parent placeholder node element, recursively\n if (isDef(vnode.parent)) {\n var ancestor = vnode.parent;\n var patchable = isPatchable(vnode);\n while (ancestor) {\n for (var i = 0; i < cbs.destroy.length; ++i) {\n cbs.destroy[i](ancestor);\n }\n ancestor.elm = vnode.elm;\n if (patchable) {\n for (var i$1 = 0; i$1 < cbs.create.length; ++i$1) {\n cbs.create[i$1](emptyNode, ancestor);\n }\n // #6513\n // invoke insert hooks that may have been merged by create hooks.\n // e.g. for directives that uses the \"inserted\" hook.\n var insert = ancestor.data.hook.insert;\n if (insert.merged) {\n // start at index 1 to avoid re-invoking component mounted hook\n for (var i$2 = 1; i$2 < insert.fns.length; i$2++) {\n insert.fns[i$2]();\n }\n }\n } else {\n registerRef(ancestor);\n }\n ancestor = ancestor.parent;\n }\n }\n\n // destroy old node\n if (isDef(parentElm)) {\n removeVnodes(parentElm, [oldVnode], 0, 0);\n } else if (isDef(oldVnode.tag)) {\n invokeDestroyHook(oldVnode);\n }\n }\n }\n\n invokeInsertHook(vnode, insertedVnodeQueue, isInitialPatch);\n return vnode.elm\n }\n}\n\n/* */\n\nvar directives = {\n create: updateDirectives,\n update: updateDirectives,\n destroy: function unbindDirectives (vnode) {\n updateDirectives(vnode, emptyNode);\n }\n};\n\nfunction updateDirectives (oldVnode, vnode) {\n if (oldVnode.data.directives || vnode.data.directives) {\n _update(oldVnode, vnode);\n }\n}\n\nfunction _update (oldVnode, vnode) {\n var isCreate = oldVnode === emptyNode;\n var isDestroy = vnode === emptyNode;\n var oldDirs = normalizeDirectives$1(oldVnode.data.directives, oldVnode.context);\n var newDirs = normalizeDirectives$1(vnode.data.directives, vnode.context);\n\n var dirsWithInsert = [];\n var dirsWithPostpatch = [];\n\n var key, oldDir, dir;\n for (key in newDirs) {\n oldDir = oldDirs[key];\n dir = newDirs[key];\n if (!oldDir) {\n // new directive, bind\n callHook$1(dir, 'bind', vnode, oldVnode);\n if (dir.def && dir.def.inserted) {\n dirsWithInsert.push(dir);\n }\n } else {\n // existing directive, update\n dir.oldValue = oldDir.value;\n dir.oldArg = oldDir.arg;\n callHook$1(dir, 'update', vnode, oldVnode);\n if (dir.def && dir.def.componentUpdated) {\n dirsWithPostpatch.push(dir);\n }\n }\n }\n\n if (dirsWithInsert.length) {\n var callInsert = function () {\n for (var i = 0; i < dirsWithInsert.length; i++) {\n callHook$1(dirsWithInsert[i], 'inserted', vnode, oldVnode);\n }\n };\n if (isCreate) {\n mergeVNodeHook(vnode, 'insert', callInsert);\n } else {\n callInsert();\n }\n }\n\n if (dirsWithPostpatch.length) {\n mergeVNodeHook(vnode, 'postpatch', function () {\n for (var i = 0; i < dirsWithPostpatch.length; i++) {\n callHook$1(dirsWithPostpatch[i], 'componentUpdated', vnode, oldVnode);\n }\n });\n }\n\n if (!isCreate) {\n for (key in oldDirs) {\n if (!newDirs[key]) {\n // no longer present, unbind\n callHook$1(oldDirs[key], 'unbind', oldVnode, oldVnode, isDestroy);\n }\n }\n }\n}\n\nvar emptyModifiers = Object.create(null);\n\nfunction normalizeDirectives$1 (\n dirs,\n vm\n) {\n var res = Object.create(null);\n if (!dirs) {\n // $flow-disable-line\n return res\n }\n var i, dir;\n for (i = 0; i < dirs.length; i++) {\n dir = dirs[i];\n if (!dir.modifiers) {\n // $flow-disable-line\n dir.modifiers = emptyModifiers;\n }\n res[getRawDirName(dir)] = dir;\n dir.def = resolveAsset(vm.$options, 'directives', dir.name, true);\n }\n // $flow-disable-line\n return res\n}\n\nfunction getRawDirName (dir) {\n return dir.rawName || ((dir.name) + \".\" + (Object.keys(dir.modifiers || {}).join('.')))\n}\n\nfunction callHook$1 (dir, hook, vnode, oldVnode, isDestroy) {\n var fn = dir.def && dir.def[hook];\n if (fn) {\n try {\n fn(vnode.elm, dir, vnode, oldVnode, isDestroy);\n } catch (e) {\n handleError(e, vnode.context, (\"directive \" + (dir.name) + \" \" + hook + \" hook\"));\n }\n }\n}\n\nvar baseModules = [\n ref,\n directives\n];\n\n/* */\n\nfunction updateAttrs (oldVnode, vnode) {\n var opts = vnode.componentOptions;\n if (isDef(opts) && opts.Ctor.options.inheritAttrs === false) {\n return\n }\n if (isUndef(oldVnode.data.attrs) && isUndef(vnode.data.attrs)) {\n return\n }\n var key, cur, old;\n var elm = vnode.elm;\n var oldAttrs = oldVnode.data.attrs || {};\n var attrs = vnode.data.attrs || {};\n // clone observed objects, as the user probably wants to mutate it\n if (isDef(attrs.__ob__)) {\n attrs = vnode.data.attrs = extend({}, attrs);\n }\n\n for (key in attrs) {\n cur = attrs[key];\n old = oldAttrs[key];\n if (old !== cur) {\n setAttr(elm, key, cur);\n }\n }\n // #4391: in IE9, setting type can reset value for input[type=radio]\n // #6666: IE/Edge forces progress value down to 1 before setting a max\n /* istanbul ignore if */\n if ((isIE || isEdge) && attrs.value !== oldAttrs.value) {\n setAttr(elm, 'value', attrs.value);\n }\n for (key in oldAttrs) {\n if (isUndef(attrs[key])) {\n if (isXlink(key)) {\n elm.removeAttributeNS(xlinkNS, getXlinkProp(key));\n } else if (!isEnumeratedAttr(key)) {\n elm.removeAttribute(key);\n }\n }\n }\n}\n\nfunction setAttr (el, key, value) {\n if (el.tagName.indexOf('-') > -1) {\n baseSetAttr(el, key, value);\n } else if (isBooleanAttr(key)) {\n // set attribute for blank value\n // e.g. <option disabled>Select one</option>\n if (isFalsyAttrValue(value)) {\n el.removeAttribute(key);\n } else {\n // technically allowfullscreen is a boolean attribute for <iframe>,\n // but Flash expects a value of \"true\" when used on <embed> tag\n value = key === 'allowfullscreen' && el.tagName === 'EMBED'\n ? 'true'\n : key;\n el.setAttribute(key, value);\n }\n } else if (isEnumeratedAttr(key)) {\n el.setAttribute(key, convertEnumeratedValue(key, value));\n } else if (isXlink(key)) {\n if (isFalsyAttrValue(value)) {\n el.removeAttributeNS(xlinkNS, getXlinkProp(key));\n } else {\n el.setAttributeNS(xlinkNS, key, value);\n }\n } else {\n baseSetAttr(el, key, value);\n }\n}\n\nfunction baseSetAttr (el, key, value) {\n if (isFalsyAttrValue(value)) {\n el.removeAttribute(key);\n } else {\n // #7138: IE10 & 11 fires input event when setting placeholder on\n // <textarea>... block the first input event and remove the blocker\n // immediately.\n /* istanbul ignore if */\n if (\n isIE && !isIE9 &&\n el.tagName === 'TEXTAREA' &&\n key === 'placeholder' && value !== '' && !el.__ieph\n ) {\n var blocker = function (e) {\n e.stopImmediatePropagation();\n el.removeEventListener('input', blocker);\n };\n el.addEventListener('input', blocker);\n // $flow-disable-line\n el.__ieph = true; /* IE placeholder patched */\n }\n el.setAttribute(key, value);\n }\n}\n\nvar attrs = {\n create: updateAttrs,\n update: updateAttrs\n};\n\n/* */\n\nfunction updateClass (oldVnode, vnode) {\n var el = vnode.elm;\n var data = vnode.data;\n var oldData = oldVnode.data;\n if (\n isUndef(data.staticClass) &&\n isUndef(data.class) && (\n isUndef(oldData) || (\n isUndef(oldData.staticClass) &&\n isUndef(oldData.class)\n )\n )\n ) {\n return\n }\n\n var cls = genClassForVnode(vnode);\n\n // handle transition classes\n var transitionClass = el._transitionClasses;\n if (isDef(transitionClass)) {\n cls = concat(cls, stringifyClass(transitionClass));\n }\n\n // set the class\n if (cls !== el._prevClass) {\n el.setAttribute('class', cls);\n el._prevClass = cls;\n }\n}\n\nvar klass = {\n create: updateClass,\n update: updateClass\n};\n\n/* */\n\nvar validDivisionCharRE = /[\\w).+\\-_$\\]]/;\n\nfunction parseFilters (exp) {\n var inSingle = false;\n var inDouble = false;\n var inTemplateString = false;\n var inRegex = false;\n var curly = 0;\n var square = 0;\n var paren = 0;\n var lastFilterIndex = 0;\n var c, prev, i, expression, filters;\n\n for (i = 0; i < exp.length; i++) {\n prev = c;\n c = exp.charCodeAt(i);\n if (inSingle) {\n if (c === 0x27 && prev !== 0x5C) { inSingle = false; }\n } else if (inDouble) {\n if (c === 0x22 && prev !== 0x5C) { inDouble = false; }\n } else if (inTemplateString) {\n if (c === 0x60 && prev !== 0x5C) { inTemplateString = false; }\n } else if (inRegex) {\n if (c === 0x2f && prev !== 0x5C) { inRegex = false; }\n } else if (\n c === 0x7C && // pipe\n exp.charCodeAt(i + 1) !== 0x7C &&\n exp.charCodeAt(i - 1) !== 0x7C &&\n !curly && !square && !paren\n ) {\n if (expression === undefined) {\n // first filter, end of expression\n lastFilterIndex = i + 1;\n expression = exp.slice(0, i).trim();\n } else {\n pushFilter();\n }\n } else {\n switch (c) {\n case 0x22: inDouble = true; break // \"\n case 0x27: inSingle = true; break // '\n case 0x60: inTemplateString = true; break // `\n case 0x28: paren++; break // (\n case 0x29: paren--; break // )\n case 0x5B: square++; break // [\n case 0x5D: square--; break // ]\n case 0x7B: curly++; break // {\n case 0x7D: curly--; break // }\n }\n if (c === 0x2f) { // /\n var j = i - 1;\n var p = (void 0);\n // find first non-whitespace prev char\n for (; j >= 0; j--) {\n p = exp.charAt(j);\n if (p !== ' ') { break }\n }\n if (!p || !validDivisionCharRE.test(p)) {\n inRegex = true;\n }\n }\n }\n }\n\n if (expression === undefined) {\n expression = exp.slice(0, i).trim();\n } else if (lastFilterIndex !== 0) {\n pushFilter();\n }\n\n function pushFilter () {\n (filters || (filters = [])).push(exp.slice(lastFilterIndex, i).trim());\n lastFilterIndex = i + 1;\n }\n\n if (filters) {\n for (i = 0; i < filters.length; i++) {\n expression = wrapFilter(expression, filters[i]);\n }\n }\n\n return expression\n}\n\nfunction wrapFilter (exp, filter) {\n var i = filter.indexOf('(');\n if (i < 0) {\n // _f: resolveFilter\n return (\"_f(\\\"\" + filter + \"\\\")(\" + exp + \")\")\n } else {\n var name = filter.slice(0, i);\n var args = filter.slice(i + 1);\n return (\"_f(\\\"\" + name + \"\\\")(\" + exp + (args !== ')' ? ',' + args : args))\n }\n}\n\n/* */\n\n\n\n/* eslint-disable no-unused-vars */\nfunction baseWarn (msg, range) {\n console.error((\"[Vue compiler]: \" + msg));\n}\n/* eslint-enable no-unused-vars */\n\nfunction pluckModuleFunction (\n modules,\n key\n) {\n return modules\n ? modules.map(function (m) { return m[key]; }).filter(function (_) { return _; })\n : []\n}\n\nfunction addProp (el, name, value, range, dynamic) {\n (el.props || (el.props = [])).push(rangeSetItem({ name: name, value: value, dynamic: dynamic }, range));\n el.plain = false;\n}\n\nfunction addAttr (el, name, value, range, dynamic) {\n var attrs = dynamic\n ? (el.dynamicAttrs || (el.dynamicAttrs = []))\n : (el.attrs || (el.attrs = []));\n attrs.push(rangeSetItem({ name: name, value: value, dynamic: dynamic }, range));\n el.plain = false;\n}\n\n// add a raw attr (use this in preTransforms)\nfunction addRawAttr (el, name, value, range) {\n el.attrsMap[name] = value;\n el.attrsList.push(rangeSetItem({ name: name, value: value }, range));\n}\n\nfunction addDirective (\n el,\n name,\n rawName,\n value,\n arg,\n isDynamicArg,\n modifiers,\n range\n) {\n (el.directives || (el.directives = [])).push(rangeSetItem({\n name: name,\n rawName: rawName,\n value: value,\n arg: arg,\n isDynamicArg: isDynamicArg,\n modifiers: modifiers\n }, range));\n el.plain = false;\n}\n\nfunction prependModifierMarker (symbol, name, dynamic) {\n return dynamic\n ? (\"_p(\" + name + \",\\\"\" + symbol + \"\\\")\")\n : symbol + name // mark the event as captured\n}\n\nfunction addHandler (\n el,\n name,\n value,\n modifiers,\n important,\n warn,\n range,\n dynamic\n) {\n modifiers = modifiers || emptyObject;\n // warn prevent and passive modifier\n /* istanbul ignore if */\n if (\n warn &&\n modifiers.prevent && modifiers.passive\n ) {\n warn(\n 'passive and prevent can\\'t be used together. ' +\n 'Passive handler can\\'t prevent default event.',\n range\n );\n }\n\n // normalize click.right and click.middle since they don't actually fire\n // this is technically browser-specific, but at least for now browsers are\n // the only target envs that have right/middle clicks.\n if (modifiers.right) {\n if (dynamic) {\n name = \"(\" + name + \")==='click'?'contextmenu':(\" + name + \")\";\n } else if (name === 'click') {\n name = 'contextmenu';\n delete modifiers.right;\n }\n } else if (modifiers.middle) {\n if (dynamic) {\n name = \"(\" + name + \")==='click'?'mouseup':(\" + name + \")\";\n } else if (name === 'click') {\n name = 'mouseup';\n }\n }\n\n // check capture modifier\n if (modifiers.capture) {\n delete modifiers.capture;\n name = prependModifierMarker('!', name, dynamic);\n }\n if (modifiers.once) {\n delete modifiers.once;\n name = prependModifierMarker('~', name, dynamic);\n }\n /* istanbul ignore if */\n if (modifiers.passive) {\n delete modifiers.passive;\n name = prependModifierMarker('&', name, dynamic);\n }\n\n var events;\n if (modifiers.native) {\n delete modifiers.native;\n events = el.nativeEvents || (el.nativeEvents = {});\n } else {\n events = el.events || (el.events = {});\n }\n\n var newHandler = rangeSetItem({ value: value.trim(), dynamic: dynamic }, range);\n if (modifiers !== emptyObject) {\n newHandler.modifiers = modifiers;\n }\n\n var handlers = events[name];\n /* istanbul ignore if */\n if (Array.isArray(handlers)) {\n important ? handlers.unshift(newHandler) : handlers.push(newHandler);\n } else if (handlers) {\n events[name] = important ? [newHandler, handlers] : [handlers, newHandler];\n } else {\n events[name] = newHandler;\n }\n\n el.plain = false;\n}\n\nfunction getRawBindingAttr (\n el,\n name\n) {\n return el.rawAttrsMap[':' + name] ||\n el.rawAttrsMap['v-bind:' + name] ||\n el.rawAttrsMap[name]\n}\n\nfunction getBindingAttr (\n el,\n name,\n getStatic\n) {\n var dynamicValue =\n getAndRemoveAttr(el, ':' + name) ||\n getAndRemoveAttr(el, 'v-bind:' + name);\n if (dynamicValue != null) {\n return parseFilters(dynamicValue)\n } else if (getStatic !== false) {\n var staticValue = getAndRemoveAttr(el, name);\n if (staticValue != null) {\n return JSON.stringify(staticValue)\n }\n }\n}\n\n// note: this only removes the attr from the Array (attrsList) so that it\n// doesn't get processed by processAttrs.\n// By default it does NOT remove it from the map (attrsMap) because the map is\n// needed during codegen.\nfunction getAndRemoveAttr (\n el,\n name,\n removeFromMap\n) {\n var val;\n if ((val = el.attrsMap[name]) != null) {\n var list = el.attrsList;\n for (var i = 0, l = list.length; i < l; i++) {\n if (list[i].name === name) {\n list.splice(i, 1);\n break\n }\n }\n }\n if (removeFromMap) {\n delete el.attrsMap[name];\n }\n return val\n}\n\nfunction getAndRemoveAttrByRegex (\n el,\n name\n) {\n var list = el.attrsList;\n for (var i = 0, l = list.length; i < l; i++) {\n var attr = list[i];\n if (name.test(attr.name)) {\n list.splice(i, 1);\n return attr\n }\n }\n}\n\nfunction rangeSetItem (\n item,\n range\n) {\n if (range) {\n if (range.start != null) {\n item.start = range.start;\n }\n if (range.end != null) {\n item.end = range.end;\n }\n }\n return item\n}\n\n/* */\n\n/**\n * Cross-platform code generation for component v-model\n */\nfunction genComponentModel (\n el,\n value,\n modifiers\n) {\n var ref = modifiers || {};\n var number = ref.number;\n var trim = ref.trim;\n\n var baseValueExpression = '$$v';\n var valueExpression = baseValueExpression;\n if (trim) {\n valueExpression =\n \"(typeof \" + baseValueExpression + \" === 'string'\" +\n \"? \" + baseValueExpression + \".trim()\" +\n \": \" + baseValueExpression + \")\";\n }\n if (number) {\n valueExpression = \"_n(\" + valueExpression + \")\";\n }\n var assignment = genAssignmentCode(value, valueExpression);\n\n el.model = {\n value: (\"(\" + value + \")\"),\n expression: JSON.stringify(value),\n callback: (\"function (\" + baseValueExpression + \") {\" + assignment + \"}\")\n };\n}\n\n/**\n * Cross-platform codegen helper for generating v-model value assignment code.\n */\nfunction genAssignmentCode (\n value,\n assignment\n) {\n var res = parseModel(value);\n if (res.key === null) {\n return (value + \"=\" + assignment)\n } else {\n return (\"$set(\" + (res.exp) + \", \" + (res.key) + \", \" + assignment + \")\")\n }\n}\n\n/**\n * Parse a v-model expression into a base path and a final key segment.\n * Handles both dot-path and possible square brackets.\n *\n * Possible cases:\n *\n * - test\n * - test[key]\n * - test[test1[key]]\n * - test[\"a\"][key]\n * - xxx.test[a[a].test1[key]]\n * - test.xxx.a[\"asa\"][test1[key]]\n *\n */\n\nvar len, str, chr, index$1, expressionPos, expressionEndPos;\n\n\n\nfunction parseModel (val) {\n // Fix https://github.com/vuejs/vue/pull/7730\n // allow v-model=\"obj.val \" (trailing whitespace)\n val = val.trim();\n len = val.length;\n\n if (val.indexOf('[') < 0 || val.lastIndexOf(']') < len - 1) {\n index$1 = val.lastIndexOf('.');\n if (index$1 > -1) {\n return {\n exp: val.slice(0, index$1),\n key: '\"' + val.slice(index$1 + 1) + '\"'\n }\n } else {\n return {\n exp: val,\n key: null\n }\n }\n }\n\n str = val;\n index$1 = expressionPos = expressionEndPos = 0;\n\n while (!eof()) {\n chr = next();\n /* istanbul ignore if */\n if (isStringStart(chr)) {\n parseString(chr);\n } else if (chr === 0x5B) {\n parseBracket(chr);\n }\n }\n\n return {\n exp: val.slice(0, expressionPos),\n key: val.slice(expressionPos + 1, expressionEndPos)\n }\n}\n\nfunction next () {\n return str.charCodeAt(++index$1)\n}\n\nfunction eof () {\n return index$1 >= len\n}\n\nfunction isStringStart (chr) {\n return chr === 0x22 || chr === 0x27\n}\n\nfunction parseBracket (chr) {\n var inBracket = 1;\n expressionPos = index$1;\n while (!eof()) {\n chr = next();\n if (isStringStart(chr)) {\n parseString(chr);\n continue\n }\n if (chr === 0x5B) { inBracket++; }\n if (chr === 0x5D) { inBracket--; }\n if (inBracket === 0) {\n expressionEndPos = index$1;\n break\n }\n }\n}\n\nfunction parseString (chr) {\n var stringQuote = chr;\n while (!eof()) {\n chr = next();\n if (chr === stringQuote) {\n break\n }\n }\n}\n\n/* */\n\nvar warn$1;\n\n// in some cases, the event used has to be determined at runtime\n// so we used some reserved tokens during compile.\nvar RANGE_TOKEN = '__r';\nvar CHECKBOX_RADIO_TOKEN = '__c';\n\nfunction model (\n el,\n dir,\n _warn\n) {\n warn$1 = _warn;\n var value = dir.value;\n var modifiers = dir.modifiers;\n var tag = el.tag;\n var type = el.attrsMap.type;\n\n {\n // inputs with type=\"file\" are read only and setting the input's\n // value will throw an error.\n if (tag === 'input' && type === 'file') {\n warn$1(\n \"<\" + (el.tag) + \" v-model=\\\"\" + value + \"\\\" type=\\\"file\\\">:\\n\" +\n \"File inputs are read only. Use a v-on:change listener instead.\",\n el.rawAttrsMap['v-model']\n );\n }\n }\n\n if (el.component) {\n genComponentModel(el, value, modifiers);\n // component v-model doesn't need extra runtime\n return false\n } else if (tag === 'select') {\n genSelect(el, value, modifiers);\n } else if (tag === 'input' && type === 'checkbox') {\n genCheckboxModel(el, value, modifiers);\n } else if (tag === 'input' && type === 'radio') {\n genRadioModel(el, value, modifiers);\n } else if (tag === 'input' || tag === 'textarea') {\n genDefaultModel(el, value, modifiers);\n } else if (!config.isReservedTag(tag)) {\n genComponentModel(el, value, modifiers);\n // component v-model doesn't need extra runtime\n return false\n } else {\n warn$1(\n \"<\" + (el.tag) + \" v-model=\\\"\" + value + \"\\\">: \" +\n \"v-model is not supported on this element type. \" +\n 'If you are working with contenteditable, it\\'s recommended to ' +\n 'wrap a library dedicated for that purpose inside a custom component.',\n el.rawAttrsMap['v-model']\n );\n }\n\n // ensure runtime directive metadata\n return true\n}\n\nfunction genCheckboxModel (\n el,\n value,\n modifiers\n) {\n var number = modifiers && modifiers.number;\n var valueBinding = getBindingAttr(el, 'value') || 'null';\n var trueValueBinding = getBindingAttr(el, 'true-value') || 'true';\n var falseValueBinding = getBindingAttr(el, 'false-value') || 'false';\n addProp(el, 'checked',\n \"Array.isArray(\" + value + \")\" +\n \"?_i(\" + value + \",\" + valueBinding + \")>-1\" + (\n trueValueBinding === 'true'\n ? (\":(\" + value + \")\")\n : (\":_q(\" + value + \",\" + trueValueBinding + \")\")\n )\n );\n addHandler(el, 'change',\n \"var $$a=\" + value + \",\" +\n '$$el=$event.target,' +\n \"$$c=$$el.checked?(\" + trueValueBinding + \"):(\" + falseValueBinding + \");\" +\n 'if(Array.isArray($$a)){' +\n \"var $$v=\" + (number ? '_n(' + valueBinding + ')' : valueBinding) + \",\" +\n '$$i=_i($$a,$$v);' +\n \"if($$el.checked){$$i<0&&(\" + (genAssignmentCode(value, '$$a.concat([$$v])')) + \")}\" +\n \"else{$$i>-1&&(\" + (genAssignmentCode(value, '$$a.slice(0,$$i).concat($$a.slice($$i+1))')) + \")}\" +\n \"}else{\" + (genAssignmentCode(value, '$$c')) + \"}\",\n null, true\n );\n}\n\nfunction genRadioModel (\n el,\n value,\n modifiers\n) {\n var number = modifiers && modifiers.number;\n var valueBinding = getBindingAttr(el, 'value') || 'null';\n valueBinding = number ? (\"_n(\" + valueBinding + \")\") : valueBinding;\n addProp(el, 'checked', (\"_q(\" + value + \",\" + valueBinding + \")\"));\n addHandler(el, 'change', genAssignmentCode(value, valueBinding), null, true);\n}\n\nfunction genSelect (\n el,\n value,\n modifiers\n) {\n var number = modifiers && modifiers.number;\n var selectedVal = \"Array.prototype.filter\" +\n \".call($event.target.options,function(o){return o.selected})\" +\n \".map(function(o){var val = \\\"_value\\\" in o ? o._value : o.value;\" +\n \"return \" + (number ? '_n(val)' : 'val') + \"})\";\n\n var assignment = '$event.target.multiple ? $$selectedVal : $$selectedVal[0]';\n var code = \"var $$selectedVal = \" + selectedVal + \";\";\n code = code + \" \" + (genAssignmentCode(value, assignment));\n addHandler(el, 'change', code, null, true);\n}\n\nfunction genDefaultModel (\n el,\n value,\n modifiers\n) {\n var type = el.attrsMap.type;\n\n // warn if v-bind:value conflicts with v-model\n // except for inputs with v-bind:type\n {\n var value$1 = el.attrsMap['v-bind:value'] || el.attrsMap[':value'];\n var typeBinding = el.attrsMap['v-bind:type'] || el.attrsMap[':type'];\n if (value$1 && !typeBinding) {\n var binding = el.attrsMap['v-bind:value'] ? 'v-bind:value' : ':value';\n warn$1(\n binding + \"=\\\"\" + value$1 + \"\\\" conflicts with v-model on the same element \" +\n 'because the latter already expands to a value binding internally',\n el.rawAttrsMap[binding]\n );\n }\n }\n\n var ref = modifiers || {};\n var lazy = ref.lazy;\n var number = ref.number;\n var trim = ref.trim;\n var needCompositionGuard = !lazy && type !== 'range';\n var event = lazy\n ? 'change'\n : type === 'range'\n ? RANGE_TOKEN\n : 'input';\n\n var valueExpression = '$event.target.value';\n if (trim) {\n valueExpression = \"$event.target.value.trim()\";\n }\n if (number) {\n valueExpression = \"_n(\" + valueExpression + \")\";\n }\n\n var code = genAssignmentCode(value, valueExpression);\n if (needCompositionGuard) {\n code = \"if($event.target.composing)return;\" + code;\n }\n\n addProp(el, 'value', (\"(\" + value + \")\"));\n addHandler(el, event, code, null, true);\n if (trim || number) {\n addHandler(el, 'blur', '$forceUpdate()');\n }\n}\n\n/* */\n\n// normalize v-model event tokens that can only be determined at runtime.\n// it's important to place the event as the first in the array because\n// the whole point is ensuring the v-model callback gets called before\n// user-attached handlers.\nfunction normalizeEvents (on) {\n /* istanbul ignore if */\n if (isDef(on[RANGE_TOKEN])) {\n // IE input[type=range] only supports `change` event\n var event = isIE ? 'change' : 'input';\n on[event] = [].concat(on[RANGE_TOKEN], on[event] || []);\n delete on[RANGE_TOKEN];\n }\n // This was originally intended to fix #4521 but no longer necessary\n // after 2.5. Keeping it for backwards compat with generated code from < 2.4\n /* istanbul ignore if */\n if (isDef(on[CHECKBOX_RADIO_TOKEN])) {\n on.change = [].concat(on[CHECKBOX_RADIO_TOKEN], on.change || []);\n delete on[CHECKBOX_RADIO_TOKEN];\n }\n}\n\nvar target$1;\n\nfunction createOnceHandler$1 (event, handler, capture) {\n var _target = target$1; // save current target element in closure\n return function onceHandler () {\n var res = handler.apply(null, arguments);\n if (res !== null) {\n remove$2(event, onceHandler, capture, _target);\n }\n }\n}\n\n// #9446: Firefox <= 53 (in particular, ESR 52) has incorrect Event.timeStamp\n// implementation and does not fire microtasks in between event propagation, so\n// safe to exclude.\nvar useMicrotaskFix = isUsingMicroTask && !(isFF && Number(isFF[1]) <= 53);\n\nfunction add$1 (\n name,\n handler,\n capture,\n passive\n) {\n // async edge case #6566: inner click event triggers patch, event handler\n // attached to outer element during patch, and triggered again. This\n // happens because browsers fire microtask ticks between event propagation.\n // the solution is simple: we save the timestamp when a handler is attached,\n // and the handler would only fire if the event passed to it was fired\n // AFTER it was attached.\n if (useMicrotaskFix) {\n var attachedTimestamp = currentFlushTimestamp;\n var original = handler;\n handler = original._wrapper = function (e) {\n if (\n // no bubbling, should always fire.\n // this is just a safety net in case event.timeStamp is unreliable in\n // certain weird environments...\n e.target === e.currentTarget ||\n // event is fired after handler attachment\n e.timeStamp >= attachedTimestamp ||\n // bail for environments that have buggy event.timeStamp implementations\n // #9462 iOS 9 bug: event.timeStamp is 0 after history.pushState\n // #9681 QtWebEngine event.timeStamp is negative value\n e.timeStamp <= 0 ||\n // #9448 bail if event is fired in another document in a multi-page\n // electron/nw.js app, since event.timeStamp will be using a different\n // starting reference\n e.target.ownerDocument !== document\n ) {\n return original.apply(this, arguments)\n }\n };\n }\n target$1.addEventListener(\n name,\n handler,\n supportsPassive\n ? { capture: capture, passive: passive }\n : capture\n );\n}\n\nfunction remove$2 (\n name,\n handler,\n capture,\n _target\n) {\n (_target || target$1).removeEventListener(\n name,\n handler._wrapper || handler,\n capture\n );\n}\n\nfunction updateDOMListeners (oldVnode, vnode) {\n if (isUndef(oldVnode.data.on) && isUndef(vnode.data.on)) {\n return\n }\n var on = vnode.data.on || {};\n var oldOn = oldVnode.data.on || {};\n target$1 = vnode.elm;\n normalizeEvents(on);\n updateListeners(on, oldOn, add$1, remove$2, createOnceHandler$1, vnode.context);\n target$1 = undefined;\n}\n\nvar events = {\n create: updateDOMListeners,\n update: updateDOMListeners\n};\n\n/* */\n\nvar svgContainer;\n\nfunction updateDOMProps (oldVnode, vnode) {\n if (isUndef(oldVnode.data.domProps) && isUndef(vnode.data.domProps)) {\n return\n }\n var key, cur;\n var elm = vnode.elm;\n var oldProps = oldVnode.data.domProps || {};\n var props = vnode.data.domProps || {};\n // clone observed objects, as the user probably wants to mutate it\n if (isDef(props.__ob__)) {\n props = vnode.data.domProps = extend({}, props);\n }\n\n for (key in oldProps) {\n if (!(key in props)) {\n elm[key] = '';\n }\n }\n\n for (key in props) {\n cur = props[key];\n // ignore children if the node has textContent or innerHTML,\n // as these will throw away existing DOM nodes and cause removal errors\n // on subsequent patches (#3360)\n if (key === 'textContent' || key === 'innerHTML') {\n if (vnode.children) { vnode.children.length = 0; }\n if (cur === oldProps[key]) { continue }\n // #6601 work around Chrome version <= 55 bug where single textNode\n // replaced by innerHTML/textContent retains its parentNode property\n if (elm.childNodes.length === 1) {\n elm.removeChild(elm.childNodes[0]);\n }\n }\n\n if (key === 'value' && elm.tagName !== 'PROGRESS') {\n // store value as _value as well since\n // non-string values will be stringified\n elm._value = cur;\n // avoid resetting cursor position when value is the same\n var strCur = isUndef(cur) ? '' : String(cur);\n if (shouldUpdateValue(elm, strCur)) {\n elm.value = strCur;\n }\n } else if (key === 'innerHTML' && isSVG(elm.tagName) && isUndef(elm.innerHTML)) {\n // IE doesn't support innerHTML for SVG elements\n svgContainer = svgContainer || document.createElement('div');\n svgContainer.innerHTML = \"<svg>\" + cur + \"</svg>\";\n var svg = svgContainer.firstChild;\n while (elm.firstChild) {\n elm.removeChild(elm.firstChild);\n }\n while (svg.firstChild) {\n elm.appendChild(svg.firstChild);\n }\n } else if (\n // skip the update if old and new VDOM state is the same.\n // `value` is handled separately because the DOM value may be temporarily\n // out of sync with VDOM state due to focus, composition and modifiers.\n // This #4521 by skipping the unnecesarry `checked` update.\n cur !== oldProps[key]\n ) {\n // some property updates can throw\n // e.g. `value` on <progress> w/ non-finite value\n try {\n elm[key] = cur;\n } catch (e) {}\n }\n }\n}\n\n// check platforms/web/util/attrs.js acceptValue\n\n\nfunction shouldUpdateValue (elm, checkVal) {\n return (!elm.composing && (\n elm.tagName === 'OPTION' ||\n isNotInFocusAndDirty(elm, checkVal) ||\n isDirtyWithModifiers(elm, checkVal)\n ))\n}\n\nfunction isNotInFocusAndDirty (elm, checkVal) {\n // return true when textbox (.number and .trim) loses focus and its value is\n // not equal to the updated value\n var notInFocus = true;\n // #6157\n // work around IE bug when accessing document.activeElement in an iframe\n try { notInFocus = document.activeElement !== elm; } catch (e) {}\n return notInFocus && elm.value !== checkVal\n}\n\nfunction isDirtyWithModifiers (elm, newVal) {\n var value = elm.value;\n var modifiers = elm._vModifiers; // injected by v-model runtime\n if (isDef(modifiers)) {\n if (modifiers.number) {\n return toNumber(value) !== toNumber(newVal)\n }\n if (modifiers.trim) {\n return value.trim() !== newVal.trim()\n }\n }\n return value !== newVal\n}\n\nvar domProps = {\n create: updateDOMProps,\n update: updateDOMProps\n};\n\n/* */\n\nvar parseStyleText = cached(function (cssText) {\n var res = {};\n var listDelimiter = /;(?![^(]*\\))/g;\n var propertyDelimiter = /:(.+)/;\n cssText.split(listDelimiter).forEach(function (item) {\n if (item) {\n var tmp = item.split(propertyDelimiter);\n tmp.length > 1 && (res[tmp[0].trim()] = tmp[1].trim());\n }\n });\n return res\n});\n\n// merge static and dynamic style data on the same vnode\nfunction normalizeStyleData (data) {\n var style = normalizeStyleBinding(data.style);\n // static style is pre-processed into an object during compilation\n // and is always a fresh object, so it's safe to merge into it\n return data.staticStyle\n ? extend(data.staticStyle, style)\n : style\n}\n\n// normalize possible array / string values into Object\nfunction normalizeStyleBinding (bindingStyle) {\n if (Array.isArray(bindingStyle)) {\n return toObject(bindingStyle)\n }\n if (typeof bindingStyle === 'string') {\n return parseStyleText(bindingStyle)\n }\n return bindingStyle\n}\n\n/**\n * parent component style should be after child's\n * so that parent component's style could override it\n */\nfunction getStyle (vnode, checkChild) {\n var res = {};\n var styleData;\n\n if (checkChild) {\n var childNode = vnode;\n while (childNode.componentInstance) {\n childNode = childNode.componentInstance._vnode;\n if (\n childNode && childNode.data &&\n (styleData = normalizeStyleData(childNode.data))\n ) {\n extend(res, styleData);\n }\n }\n }\n\n if ((styleData = normalizeStyleData(vnode.data))) {\n extend(res, styleData);\n }\n\n var parentNode = vnode;\n while ((parentNode = parentNode.parent)) {\n if (parentNode.data && (styleData = normalizeStyleData(parentNode.data))) {\n extend(res, styleData);\n }\n }\n return res\n}\n\n/* */\n\nvar cssVarRE = /^--/;\nvar importantRE = /\\s*!important$/;\nvar setProp = function (el, name, val) {\n /* istanbul ignore if */\n if (cssVarRE.test(name)) {\n el.style.setProperty(name, val);\n } else if (importantRE.test(val)) {\n el.style.setProperty(hyphenate(name), val.replace(importantRE, ''), 'important');\n } else {\n var normalizedName = normalize(name);\n if (Array.isArray(val)) {\n // Support values array created by autoprefixer, e.g.\n // {display: [\"-webkit-box\", \"-ms-flexbox\", \"flex\"]}\n // Set them one by one, and the browser will only set those it can recognize\n for (var i = 0, len = val.length; i < len; i++) {\n el.style[normalizedName] = val[i];\n }\n } else {\n el.style[normalizedName] = val;\n }\n }\n};\n\nvar vendorNames = ['Webkit', 'Moz', 'ms'];\n\nvar emptyStyle;\nvar normalize = cached(function (prop) {\n emptyStyle = emptyStyle || document.createElement('div').style;\n prop = camelize(prop);\n if (prop !== 'filter' && (prop in emptyStyle)) {\n return prop\n }\n var capName = prop.charAt(0).toUpperCase() + prop.slice(1);\n for (var i = 0; i < vendorNames.length; i++) {\n var name = vendorNames[i] + capName;\n if (name in emptyStyle) {\n return name\n }\n }\n});\n\nfunction updateStyle (oldVnode, vnode) {\n var data = vnode.data;\n var oldData = oldVnode.data;\n\n if (isUndef(data.staticStyle) && isUndef(data.style) &&\n isUndef(oldData.staticStyle) && isUndef(oldData.style)\n ) {\n return\n }\n\n var cur, name;\n var el = vnode.elm;\n var oldStaticStyle = oldData.staticStyle;\n var oldStyleBinding = oldData.normalizedStyle || oldData.style || {};\n\n // if static style exists, stylebinding already merged into it when doing normalizeStyleData\n var oldStyle = oldStaticStyle || oldStyleBinding;\n\n var style = normalizeStyleBinding(vnode.data.style) || {};\n\n // store normalized style under a different key for next diff\n // make sure to clone it if it's reactive, since the user likely wants\n // to mutate it.\n vnode.data.normalizedStyle = isDef(style.__ob__)\n ? extend({}, style)\n : style;\n\n var newStyle = getStyle(vnode, true);\n\n for (name in oldStyle) {\n if (isUndef(newStyle[name])) {\n setProp(el, name, '');\n }\n }\n for (name in newStyle) {\n cur = newStyle[name];\n if (cur !== oldStyle[name]) {\n // ie9 setting to null has no effect, must use empty string\n setProp(el, name, cur == null ? '' : cur);\n }\n }\n}\n\nvar style = {\n create: updateStyle,\n update: updateStyle\n};\n\n/* */\n\nvar whitespaceRE = /\\s+/;\n\n/**\n * Add class with compatibility for SVG since classList is not supported on\n * SVG elements in IE\n */\nfunction addClass (el, cls) {\n /* istanbul ignore if */\n if (!cls || !(cls = cls.trim())) {\n return\n }\n\n /* istanbul ignore else */\n if (el.classList) {\n if (cls.indexOf(' ') > -1) {\n cls.split(whitespaceRE).forEach(function (c) { return el.classList.add(c); });\n } else {\n el.classList.add(cls);\n }\n } else {\n var cur = \" \" + (el.getAttribute('class') || '') + \" \";\n if (cur.indexOf(' ' + cls + ' ') < 0) {\n el.setAttribute('class', (cur + cls).trim());\n }\n }\n}\n\n/**\n * Remove class with compatibility for SVG since classList is not supported on\n * SVG elements in IE\n */\nfunction removeClass (el, cls) {\n /* istanbul ignore if */\n if (!cls || !(cls = cls.trim())) {\n return\n }\n\n /* istanbul ignore else */\n if (el.classList) {\n if (cls.indexOf(' ') > -1) {\n cls.split(whitespaceRE).forEach(function (c) { return el.classList.remove(c); });\n } else {\n el.classList.remove(cls);\n }\n if (!el.classList.length) {\n el.removeAttribute('class');\n }\n } else {\n var cur = \" \" + (el.getAttribute('class') || '') + \" \";\n var tar = ' ' + cls + ' ';\n while (cur.indexOf(tar) >= 0) {\n cur = cur.replace(tar, ' ');\n }\n cur = cur.trim();\n if (cur) {\n el.setAttribute('class', cur);\n } else {\n el.removeAttribute('class');\n }\n }\n}\n\n/* */\n\nfunction resolveTransition (def$$1) {\n if (!def$$1) {\n return\n }\n /* istanbul ignore else */\n if (typeof def$$1 === 'object') {\n var res = {};\n if (def$$1.css !== false) {\n extend(res, autoCssTransition(def$$1.name || 'v'));\n }\n extend(res, def$$1);\n return res\n } else if (typeof def$$1 === 'string') {\n return autoCssTransition(def$$1)\n }\n}\n\nvar autoCssTransition = cached(function (name) {\n return {\n enterClass: (name + \"-enter\"),\n enterToClass: (name + \"-enter-to\"),\n enterActiveClass: (name + \"-enter-active\"),\n leaveClass: (name + \"-leave\"),\n leaveToClass: (name + \"-leave-to\"),\n leaveActiveClass: (name + \"-leave-active\")\n }\n});\n\nvar hasTransition = inBrowser && !isIE9;\nvar TRANSITION = 'transition';\nvar ANIMATION = 'animation';\n\n// Transition property/event sniffing\nvar transitionProp = 'transition';\nvar transitionEndEvent = 'transitionend';\nvar animationProp = 'animation';\nvar animationEndEvent = 'animationend';\nif (hasTransition) {\n /* istanbul ignore if */\n if (window.ontransitionend === undefined &&\n window.onwebkittransitionend !== undefined\n ) {\n transitionProp = 'WebkitTransition';\n transitionEndEvent = 'webkitTransitionEnd';\n }\n if (window.onanimationend === undefined &&\n window.onwebkitanimationend !== undefined\n ) {\n animationProp = 'WebkitAnimation';\n animationEndEvent = 'webkitAnimationEnd';\n }\n}\n\n// binding to window is necessary to make hot reload work in IE in strict mode\nvar raf = inBrowser\n ? window.requestAnimationFrame\n ? window.requestAnimationFrame.bind(window)\n : setTimeout\n : /* istanbul ignore next */ function (fn) { return fn(); };\n\nfunction nextFrame (fn) {\n raf(function () {\n raf(fn);\n });\n}\n\nfunction addTransitionClass (el, cls) {\n var transitionClasses = el._transitionClasses || (el._transitionClasses = []);\n if (transitionClasses.indexOf(cls) < 0) {\n transitionClasses.push(cls);\n addClass(el, cls);\n }\n}\n\nfunction removeTransitionClass (el, cls) {\n if (el._transitionClasses) {\n remove(el._transitionClasses, cls);\n }\n removeClass(el, cls);\n}\n\nfunction whenTransitionEnds (\n el,\n expectedType,\n cb\n) {\n var ref = getTransitionInfo(el, expectedType);\n var type = ref.type;\n var timeout = ref.timeout;\n var propCount = ref.propCount;\n if (!type) { return cb() }\n var event = type === TRANSITION ? transitionEndEvent : animationEndEvent;\n var ended = 0;\n var end = function () {\n el.removeEventListener(event, onEnd);\n cb();\n };\n var onEnd = function (e) {\n if (e.target === el) {\n if (++ended >= propCount) {\n end();\n }\n }\n };\n setTimeout(function () {\n if (ended < propCount) {\n end();\n }\n }, timeout + 1);\n el.addEventListener(event, onEnd);\n}\n\nvar transformRE = /\\b(transform|all)(,|$)/;\n\nfunction getTransitionInfo (el, expectedType) {\n var styles = window.getComputedStyle(el);\n // JSDOM may return undefined for transition properties\n var transitionDelays = (styles[transitionProp + 'Delay'] || '').split(', ');\n var transitionDurations = (styles[transitionProp + 'Duration'] || '').split(', ');\n var transitionTimeout = getTimeout(transitionDelays, transitionDurations);\n var animationDelays = (styles[animationProp + 'Delay'] || '').split(', ');\n var animationDurations = (styles[animationProp + 'Duration'] || '').split(', ');\n var animationTimeout = getTimeout(animationDelays, animationDurations);\n\n var type;\n var timeout = 0;\n var propCount = 0;\n /* istanbul ignore if */\n if (expectedType === TRANSITION) {\n if (transitionTimeout > 0) {\n type = TRANSITION;\n timeout = transitionTimeout;\n propCount = transitionDurations.length;\n }\n } else if (expectedType === ANIMATION) {\n if (animationTimeout > 0) {\n type = ANIMATION;\n timeout = animationTimeout;\n propCount = animationDurations.length;\n }\n } else {\n timeout = Math.max(transitionTimeout, animationTimeout);\n type = timeout > 0\n ? transitionTimeout > animationTimeout\n ? TRANSITION\n : ANIMATION\n : null;\n propCount = type\n ? type === TRANSITION\n ? transitionDurations.length\n : animationDurations.length\n : 0;\n }\n var hasTransform =\n type === TRANSITION &&\n transformRE.test(styles[transitionProp + 'Property']);\n return {\n type: type,\n timeout: timeout,\n propCount: propCount,\n hasTransform: hasTransform\n }\n}\n\nfunction getTimeout (delays, durations) {\n /* istanbul ignore next */\n while (delays.length < durations.length) {\n delays = delays.concat(delays);\n }\n\n return Math.max.apply(null, durations.map(function (d, i) {\n return toMs(d) + toMs(delays[i])\n }))\n}\n\n// Old versions of Chromium (below 61.0.3163.100) formats floating pointer numbers\n// in a locale-dependent way, using a comma instead of a dot.\n// If comma is not replaced with a dot, the input will be rounded down (i.e. acting\n// as a floor function) causing unexpected behaviors\nfunction toMs (s) {\n return Number(s.slice(0, -1).replace(',', '.')) * 1000\n}\n\n/* */\n\nfunction enter (vnode, toggleDisplay) {\n var el = vnode.elm;\n\n // call leave callback now\n if (isDef(el._leaveCb)) {\n el._leaveCb.cancelled = true;\n el._leaveCb();\n }\n\n var data = resolveTransition(vnode.data.transition);\n if (isUndef(data)) {\n return\n }\n\n /* istanbul ignore if */\n if (isDef(el._enterCb) || el.nodeType !== 1) {\n return\n }\n\n var css = data.css;\n var type = data.type;\n var enterClass = data.enterClass;\n var enterToClass = data.enterToClass;\n var enterActiveClass = data.enterActiveClass;\n var appearClass = data.appearClass;\n var appearToClass = data.appearToClass;\n var appearActiveClass = data.appearActiveClass;\n var beforeEnter = data.beforeEnter;\n var enter = data.enter;\n var afterEnter = data.afterEnter;\n var enterCancelled = data.enterCancelled;\n var beforeAppear = data.beforeAppear;\n var appear = data.appear;\n var afterAppear = data.afterAppear;\n var appearCancelled = data.appearCancelled;\n var duration = data.duration;\n\n // activeInstance will always be the <transition> component managing this\n // transition. One edge case to check is when the <transition> is placed\n // as the root node of a child component. In that case we need to check\n // <transition>'s parent for appear check.\n var context = activeInstance;\n var transitionNode = activeInstance.$vnode;\n while (transitionNode && transitionNode.parent) {\n context = transitionNode.context;\n transitionNode = transitionNode.parent;\n }\n\n var isAppear = !context._isMounted || !vnode.isRootInsert;\n\n if (isAppear && !appear && appear !== '') {\n return\n }\n\n var startClass = isAppear && appearClass\n ? appearClass\n : enterClass;\n var activeClass = isAppear && appearActiveClass\n ? appearActiveClass\n : enterActiveClass;\n var toClass = isAppear && appearToClass\n ? appearToClass\n : enterToClass;\n\n var beforeEnterHook = isAppear\n ? (beforeAppear || beforeEnter)\n : beforeEnter;\n var enterHook = isAppear\n ? (typeof appear === 'function' ? appear : enter)\n : enter;\n var afterEnterHook = isAppear\n ? (afterAppear || afterEnter)\n : afterEnter;\n var enterCancelledHook = isAppear\n ? (appearCancelled || enterCancelled)\n : enterCancelled;\n\n var explicitEnterDuration = toNumber(\n isObject(duration)\n ? duration.enter\n : duration\n );\n\n if (explicitEnterDuration != null) {\n checkDuration(explicitEnterDuration, 'enter', vnode);\n }\n\n var expectsCSS = css !== false && !isIE9;\n var userWantsControl = getHookArgumentsLength(enterHook);\n\n var cb = el._enterCb = once(function () {\n if (expectsCSS) {\n removeTransitionClass(el, toClass);\n removeTransitionClass(el, activeClass);\n }\n if (cb.cancelled) {\n if (expectsCSS) {\n removeTransitionClass(el, startClass);\n }\n enterCancelledHook && enterCancelledHook(el);\n } else {\n afterEnterHook && afterEnterHook(el);\n }\n el._enterCb = null;\n });\n\n if (!vnode.data.show) {\n // remove pending leave element on enter by injecting an insert hook\n mergeVNodeHook(vnode, 'insert', function () {\n var parent = el.parentNode;\n var pendingNode = parent && parent._pending && parent._pending[vnode.key];\n if (pendingNode &&\n pendingNode.tag === vnode.tag &&\n pendingNode.elm._leaveCb\n ) {\n pendingNode.elm._leaveCb();\n }\n enterHook && enterHook(el, cb);\n });\n }\n\n // start enter transition\n beforeEnterHook && beforeEnterHook(el);\n if (expectsCSS) {\n addTransitionClass(el, startClass);\n addTransitionClass(el, activeClass);\n nextFrame(function () {\n removeTransitionClass(el, startClass);\n if (!cb.cancelled) {\n addTransitionClass(el, toClass);\n if (!userWantsControl) {\n if (isValidDuration(explicitEnterDuration)) {\n setTimeout(cb, explicitEnterDuration);\n } else {\n whenTransitionEnds(el, type, cb);\n }\n }\n }\n });\n }\n\n if (vnode.data.show) {\n toggleDisplay && toggleDisplay();\n enterHook && enterHook(el, cb);\n }\n\n if (!expectsCSS && !userWantsControl) {\n cb();\n }\n}\n\nfunction leave (vnode, rm) {\n var el = vnode.elm;\n\n // call enter callback now\n if (isDef(el._enterCb)) {\n el._enterCb.cancelled = true;\n el._enterCb();\n }\n\n var data = resolveTransition(vnode.data.transition);\n if (isUndef(data) || el.nodeType !== 1) {\n return rm()\n }\n\n /* istanbul ignore if */\n if (isDef(el._leaveCb)) {\n return\n }\n\n var css = data.css;\n var type = data.type;\n var leaveClass = data.leaveClass;\n var leaveToClass = data.leaveToClass;\n var leaveActiveClass = data.leaveActiveClass;\n var beforeLeave = data.beforeLeave;\n var leave = data.leave;\n var afterLeave = data.afterLeave;\n var leaveCancelled = data.leaveCancelled;\n var delayLeave = data.delayLeave;\n var duration = data.duration;\n\n var expectsCSS = css !== false && !isIE9;\n var userWantsControl = getHookArgumentsLength(leave);\n\n var explicitLeaveDuration = toNumber(\n isObject(duration)\n ? duration.leave\n : duration\n );\n\n if (isDef(explicitLeaveDuration)) {\n checkDuration(explicitLeaveDuration, 'leave', vnode);\n }\n\n var cb = el._leaveCb = once(function () {\n if (el.parentNode && el.parentNode._pending) {\n el.parentNode._pending[vnode.key] = null;\n }\n if (expectsCSS) {\n removeTransitionClass(el, leaveToClass);\n removeTransitionClass(el, leaveActiveClass);\n }\n if (cb.cancelled) {\n if (expectsCSS) {\n removeTransitionClass(el, leaveClass);\n }\n leaveCancelled && leaveCancelled(el);\n } else {\n rm();\n afterLeave && afterLeave(el);\n }\n el._leaveCb = null;\n });\n\n if (delayLeave) {\n delayLeave(performLeave);\n } else {\n performLeave();\n }\n\n function performLeave () {\n // the delayed leave may have already been cancelled\n if (cb.cancelled) {\n return\n }\n // record leaving element\n if (!vnode.data.show && el.parentNode) {\n (el.parentNode._pending || (el.parentNode._pending = {}))[(vnode.key)] = vnode;\n }\n beforeLeave && beforeLeave(el);\n if (expectsCSS) {\n addTransitionClass(el, leaveClass);\n addTransitionClass(el, leaveActiveClass);\n nextFrame(function () {\n removeTransitionClass(el, leaveClass);\n if (!cb.cancelled) {\n addTransitionClass(el, leaveToClass);\n if (!userWantsControl) {\n if (isValidDuration(explicitLeaveDuration)) {\n setTimeout(cb, explicitLeaveDuration);\n } else {\n whenTransitionEnds(el, type, cb);\n }\n }\n }\n });\n }\n leave && leave(el, cb);\n if (!expectsCSS && !userWantsControl) {\n cb();\n }\n }\n}\n\n// only used in dev mode\nfunction checkDuration (val, name, vnode) {\n if (typeof val !== 'number') {\n warn(\n \"<transition> explicit \" + name + \" duration is not a valid number - \" +\n \"got \" + (JSON.stringify(val)) + \".\",\n vnode.context\n );\n } else if (isNaN(val)) {\n warn(\n \"<transition> explicit \" + name + \" duration is NaN - \" +\n 'the duration expression might be incorrect.',\n vnode.context\n );\n }\n}\n\nfunction isValidDuration (val) {\n return typeof val === 'number' && !isNaN(val)\n}\n\n/**\n * Normalize a transition hook's argument length. The hook may be:\n * - a merged hook (invoker) with the original in .fns\n * - a wrapped component method (check ._length)\n * - a plain function (.length)\n */\nfunction getHookArgumentsLength (fn) {\n if (isUndef(fn)) {\n return false\n }\n var invokerFns = fn.fns;\n if (isDef(invokerFns)) {\n // invoker\n return getHookArgumentsLength(\n Array.isArray(invokerFns)\n ? invokerFns[0]\n : invokerFns\n )\n } else {\n return (fn._length || fn.length) > 1\n }\n}\n\nfunction _enter (_, vnode) {\n if (vnode.data.show !== true) {\n enter(vnode);\n }\n}\n\nvar transition = inBrowser ? {\n create: _enter,\n activate: _enter,\n remove: function remove$$1 (vnode, rm) {\n /* istanbul ignore else */\n if (vnode.data.show !== true) {\n leave(vnode, rm);\n } else {\n rm();\n }\n }\n} : {};\n\nvar platformModules = [\n attrs,\n klass,\n events,\n domProps,\n style,\n transition\n];\n\n/* */\n\n// the directive module should be applied last, after all\n// built-in modules have been applied.\nvar modules = platformModules.concat(baseModules);\n\nvar patch = createPatchFunction({ nodeOps: nodeOps, modules: modules });\n\n/**\n * Not type checking this file because flow doesn't like attaching\n * properties to Elements.\n */\n\n/* istanbul ignore if */\nif (isIE9) {\n // http://www.matts411.com/post/internet-explorer-9-oninput/\n document.addEventListener('selectionchange', function () {\n var el = document.activeElement;\n if (el && el.vmodel) {\n trigger(el, 'input');\n }\n });\n}\n\nvar directive = {\n inserted: function inserted (el, binding, vnode, oldVnode) {\n if (vnode.tag === 'select') {\n // #6903\n if (oldVnode.elm && !oldVnode.elm._vOptions) {\n mergeVNodeHook(vnode, 'postpatch', function () {\n directive.componentUpdated(el, binding, vnode);\n });\n } else {\n setSelected(el, binding, vnode.context);\n }\n el._vOptions = [].map.call(el.options, getValue);\n } else if (vnode.tag === 'textarea' || isTextInputType(el.type)) {\n el._vModifiers = binding.modifiers;\n if (!binding.modifiers.lazy) {\n el.addEventListener('compositionstart', onCompositionStart);\n el.addEventListener('compositionend', onCompositionEnd);\n // Safari < 10.2 & UIWebView doesn't fire compositionend when\n // switching focus before confirming composition choice\n // this also fixes the issue where some browsers e.g. iOS Chrome\n // fires \"change\" instead of \"input\" on autocomplete.\n el.addEventListener('change', onCompositionEnd);\n /* istanbul ignore if */\n if (isIE9) {\n el.vmodel = true;\n }\n }\n }\n },\n\n componentUpdated: function componentUpdated (el, binding, vnode) {\n if (vnode.tag === 'select') {\n setSelected(el, binding, vnode.context);\n // in case the options rendered by v-for have changed,\n // it's possible that the value is out-of-sync with the rendered options.\n // detect such cases and filter out values that no longer has a matching\n // option in the DOM.\n var prevOptions = el._vOptions;\n var curOptions = el._vOptions = [].map.call(el.options, getValue);\n if (curOptions.some(function (o, i) { return !looseEqual(o, prevOptions[i]); })) {\n // trigger change event if\n // no matching option found for at least one value\n var needReset = el.multiple\n ? binding.value.some(function (v) { return hasNoMatchingOption(v, curOptions); })\n : binding.value !== binding.oldValue && hasNoMatchingOption(binding.value, curOptions);\n if (needReset) {\n trigger(el, 'change');\n }\n }\n }\n }\n};\n\nfunction setSelected (el, binding, vm) {\n actuallySetSelected(el, binding, vm);\n /* istanbul ignore if */\n if (isIE || isEdge) {\n setTimeout(function () {\n actuallySetSelected(el, binding, vm);\n }, 0);\n }\n}\n\nfunction actuallySetSelected (el, binding, vm) {\n var value = binding.value;\n var isMultiple = el.multiple;\n if (isMultiple && !Array.isArray(value)) {\n warn(\n \"<select multiple v-model=\\\"\" + (binding.expression) + \"\\\"> \" +\n \"expects an Array value for its binding, but got \" + (Object.prototype.toString.call(value).slice(8, -1)),\n vm\n );\n return\n }\n var selected, option;\n for (var i = 0, l = el.options.length; i < l; i++) {\n option = el.options[i];\n if (isMultiple) {\n selected = looseIndexOf(value, getValue(option)) > -1;\n if (option.selected !== selected) {\n option.selected = selected;\n }\n } else {\n if (looseEqual(getValue(option), value)) {\n if (el.selectedIndex !== i) {\n el.selectedIndex = i;\n }\n return\n }\n }\n }\n if (!isMultiple) {\n el.selectedIndex = -1;\n }\n}\n\nfunction hasNoMatchingOption (value, options) {\n return options.every(function (o) { return !looseEqual(o, value); })\n}\n\nfunction getValue (option) {\n return '_value' in option\n ? option._value\n : option.value\n}\n\nfunction onCompositionStart (e) {\n e.target.composing = true;\n}\n\nfunction onCompositionEnd (e) {\n // prevent triggering an input event for no reason\n if (!e.target.composing) { return }\n e.target.composing = false;\n trigger(e.target, 'input');\n}\n\nfunction trigger (el, type) {\n var e = document.createEvent('HTMLEvents');\n e.initEvent(type, true, true);\n el.dispatchEvent(e);\n}\n\n/* */\n\n// recursively search for possible transition defined inside the component root\nfunction locateNode (vnode) {\n return vnode.componentInstance && (!vnode.data || !vnode.data.transition)\n ? locateNode(vnode.componentInstance._vnode)\n : vnode\n}\n\nvar show = {\n bind: function bind (el, ref, vnode) {\n var value = ref.value;\n\n vnode = locateNode(vnode);\n var transition$$1 = vnode.data && vnode.data.transition;\n var originalDisplay = el.__vOriginalDisplay =\n el.style.display === 'none' ? '' : el.style.display;\n if (value && transition$$1) {\n vnode.data.show = true;\n enter(vnode, function () {\n el.style.display = originalDisplay;\n });\n } else {\n el.style.display = value ? originalDisplay : 'none';\n }\n },\n\n update: function update (el, ref, vnode) {\n var value = ref.value;\n var oldValue = ref.oldValue;\n\n /* istanbul ignore if */\n if (!value === !oldValue) { return }\n vnode = locateNode(vnode);\n var transition$$1 = vnode.data && vnode.data.transition;\n if (transition$$1) {\n vnode.data.show = true;\n if (value) {\n enter(vnode, function () {\n el.style.display = el.__vOriginalDisplay;\n });\n } else {\n leave(vnode, function () {\n el.style.display = 'none';\n });\n }\n } else {\n el.style.display = value ? el.__vOriginalDisplay : 'none';\n }\n },\n\n unbind: function unbind (\n el,\n binding,\n vnode,\n oldVnode,\n isDestroy\n ) {\n if (!isDestroy) {\n el.style.display = el.__vOriginalDisplay;\n }\n }\n};\n\nvar platformDirectives = {\n model: directive,\n show: show\n};\n\n/* */\n\nvar transitionProps = {\n name: String,\n appear: Boolean,\n css: Boolean,\n mode: String,\n type: String,\n enterClass: String,\n leaveClass: String,\n enterToClass: String,\n leaveToClass: String,\n enterActiveClass: String,\n leaveActiveClass: String,\n appearClass: String,\n appearActiveClass: String,\n appearToClass: String,\n duration: [Number, String, Object]\n};\n\n// in case the child is also an abstract component, e.g. <keep-alive>\n// we want to recursively retrieve the real component to be rendered\nfunction getRealChild (vnode) {\n var compOptions = vnode && vnode.componentOptions;\n if (compOptions && compOptions.Ctor.options.abstract) {\n return getRealChild(getFirstComponentChild(compOptions.children))\n } else {\n return vnode\n }\n}\n\nfunction extractTransitionData (comp) {\n var data = {};\n var options = comp.$options;\n // props\n for (var key in options.propsData) {\n data[key] = comp[key];\n }\n // events.\n // extract listeners and pass them directly to the transition methods\n var listeners = options._parentListeners;\n for (var key$1 in listeners) {\n data[camelize(key$1)] = listeners[key$1];\n }\n return data\n}\n\nfunction placeholder (h, rawChild) {\n if (/\\d-keep-alive$/.test(rawChild.tag)) {\n return h('keep-alive', {\n props: rawChild.componentOptions.propsData\n })\n }\n}\n\nfunction hasParentTransition (vnode) {\n while ((vnode = vnode.parent)) {\n if (vnode.data.transition) {\n return true\n }\n }\n}\n\nfunction isSameChild (child, oldChild) {\n return oldChild.key === child.key && oldChild.tag === child.tag\n}\n\nvar isNotTextNode = function (c) { return c.tag || isAsyncPlaceholder(c); };\n\nvar isVShowDirective = function (d) { return d.name === 'show'; };\n\nvar Transition = {\n name: 'transition',\n props: transitionProps,\n abstract: true,\n\n render: function render (h) {\n var this$1 = this;\n\n var children = this.$slots.default;\n if (!children) {\n return\n }\n\n // filter out text nodes (possible whitespaces)\n children = children.filter(isNotTextNode);\n /* istanbul ignore if */\n if (!children.length) {\n return\n }\n\n // warn multiple elements\n if (children.length > 1) {\n warn(\n '<transition> can only be used on a single element. Use ' +\n '<transition-group> for lists.',\n this.$parent\n );\n }\n\n var mode = this.mode;\n\n // warn invalid mode\n if (mode && mode !== 'in-out' && mode !== 'out-in'\n ) {\n warn(\n 'invalid <transition> mode: ' + mode,\n this.$parent\n );\n }\n\n var rawChild = children[0];\n\n // if this is a component root node and the component's\n // parent container node also has transition, skip.\n if (hasParentTransition(this.$vnode)) {\n return rawChild\n }\n\n // apply transition data to child\n // use getRealChild() to ignore abstract components e.g. keep-alive\n var child = getRealChild(rawChild);\n /* istanbul ignore if */\n if (!child) {\n return rawChild\n }\n\n if (this._leaving) {\n return placeholder(h, rawChild)\n }\n\n // ensure a key that is unique to the vnode type and to this transition\n // component instance. This key will be used to remove pending leaving nodes\n // during entering.\n var id = \"__transition-\" + (this._uid) + \"-\";\n child.key = child.key == null\n ? child.isComment\n ? id + 'comment'\n : id + child.tag\n : isPrimitive(child.key)\n ? (String(child.key).indexOf(id) === 0 ? child.key : id + child.key)\n : child.key;\n\n var data = (child.data || (child.data = {})).transition = extractTransitionData(this);\n var oldRawChild = this._vnode;\n var oldChild = getRealChild(oldRawChild);\n\n // mark v-show\n // so that the transition module can hand over the control to the directive\n if (child.data.directives && child.data.directives.some(isVShowDirective)) {\n child.data.show = true;\n }\n\n if (\n oldChild &&\n oldChild.data &&\n !isSameChild(child, oldChild) &&\n !isAsyncPlaceholder(oldChild) &&\n // #6687 component root is a comment node\n !(oldChild.componentInstance && oldChild.componentInstance._vnode.isComment)\n ) {\n // replace old child transition data with fresh one\n // important for dynamic transitions!\n var oldData = oldChild.data.transition = extend({}, data);\n // handle transition mode\n if (mode === 'out-in') {\n // return placeholder node and queue update when leave finishes\n this._leaving = true;\n mergeVNodeHook(oldData, 'afterLeave', function () {\n this$1._leaving = false;\n this$1.$forceUpdate();\n });\n return placeholder(h, rawChild)\n } else if (mode === 'in-out') {\n if (isAsyncPlaceholder(child)) {\n return oldRawChild\n }\n var delayedLeave;\n var performLeave = function () { delayedLeave(); };\n mergeVNodeHook(data, 'afterEnter', performLeave);\n mergeVNodeHook(data, 'enterCancelled', performLeave);\n mergeVNodeHook(oldData, 'delayLeave', function (leave) { delayedLeave = leave; });\n }\n }\n\n return rawChild\n }\n};\n\n/* */\n\nvar props = extend({\n tag: String,\n moveClass: String\n}, transitionProps);\n\ndelete props.mode;\n\nvar TransitionGroup = {\n props: props,\n\n beforeMount: function beforeMount () {\n var this$1 = this;\n\n var update = this._update;\n this._update = function (vnode, hydrating) {\n var restoreActiveInstance = setActiveInstance(this$1);\n // force removing pass\n this$1.__patch__(\n this$1._vnode,\n this$1.kept,\n false, // hydrating\n true // removeOnly (!important, avoids unnecessary moves)\n );\n this$1._vnode = this$1.kept;\n restoreActiveInstance();\n update.call(this$1, vnode, hydrating);\n };\n },\n\n render: function render (h) {\n var tag = this.tag || this.$vnode.data.tag || 'span';\n var map = Object.create(null);\n var prevChildren = this.prevChildren = this.children;\n var rawChildren = this.$slots.default || [];\n var children = this.children = [];\n var transitionData = extractTransitionData(this);\n\n for (var i = 0; i < rawChildren.length; i++) {\n var c = rawChildren[i];\n if (c.tag) {\n if (c.key != null && String(c.key).indexOf('__vlist') !== 0) {\n children.push(c);\n map[c.key] = c\n ;(c.data || (c.data = {})).transition = transitionData;\n } else {\n var opts = c.componentOptions;\n var name = opts ? (opts.Ctor.options.name || opts.tag || '') : c.tag;\n warn((\"<transition-group> children must be keyed: <\" + name + \">\"));\n }\n }\n }\n\n if (prevChildren) {\n var kept = [];\n var removed = [];\n for (var i$1 = 0; i$1 < prevChildren.length; i$1++) {\n var c$1 = prevChildren[i$1];\n c$1.data.transition = transitionData;\n c$1.data.pos = c$1.elm.getBoundingClientRect();\n if (map[c$1.key]) {\n kept.push(c$1);\n } else {\n removed.push(c$1);\n }\n }\n this.kept = h(tag, null, kept);\n this.removed = removed;\n }\n\n return h(tag, null, children)\n },\n\n updated: function updated () {\n var children = this.prevChildren;\n var moveClass = this.moveClass || ((this.name || 'v') + '-move');\n if (!children.length || !this.hasMove(children[0].elm, moveClass)) {\n return\n }\n\n // we divide the work into three loops to avoid mixing DOM reads and writes\n // in each iteration - which helps prevent layout thrashing.\n children.forEach(callPendingCbs);\n children.forEach(recordPosition);\n children.forEach(applyTranslation);\n\n // force reflow to put everything in position\n // assign to this to avoid being removed in tree-shaking\n // $flow-disable-line\n this._reflow = document.body.offsetHeight;\n\n children.forEach(function (c) {\n if (c.data.moved) {\n var el = c.elm;\n var s = el.style;\n addTransitionClass(el, moveClass);\n s.transform = s.WebkitTransform = s.transitionDuration = '';\n el.addEventListener(transitionEndEvent, el._moveCb = function cb (e) {\n if (e && e.target !== el) {\n return\n }\n if (!e || /transform$/.test(e.propertyName)) {\n el.removeEventListener(transitionEndEvent, cb);\n el._moveCb = null;\n removeTransitionClass(el, moveClass);\n }\n });\n }\n });\n },\n\n methods: {\n hasMove: function hasMove (el, moveClass) {\n /* istanbul ignore if */\n if (!hasTransition) {\n return false\n }\n /* istanbul ignore if */\n if (this._hasMove) {\n return this._hasMove\n }\n // Detect whether an element with the move class applied has\n // CSS transitions. Since the element may be inside an entering\n // transition at this very moment, we make a clone of it and remove\n // all other transition classes applied to ensure only the move class\n // is applied.\n var clone = el.cloneNode();\n if (el._transitionClasses) {\n el._transitionClasses.forEach(function (cls) { removeClass(clone, cls); });\n }\n addClass(clone, moveClass);\n clone.style.display = 'none';\n this.$el.appendChild(clone);\n var info = getTransitionInfo(clone);\n this.$el.removeChild(clone);\n return (this._hasMove = info.hasTransform)\n }\n }\n};\n\nfunction callPendingCbs (c) {\n /* istanbul ignore if */\n if (c.elm._moveCb) {\n c.elm._moveCb();\n }\n /* istanbul ignore if */\n if (c.elm._enterCb) {\n c.elm._enterCb();\n }\n}\n\nfunction recordPosition (c) {\n c.data.newPos = c.elm.getBoundingClientRect();\n}\n\nfunction applyTranslation (c) {\n var oldPos = c.data.pos;\n var newPos = c.data.newPos;\n var dx = oldPos.left - newPos.left;\n var dy = oldPos.top - newPos.top;\n if (dx || dy) {\n c.data.moved = true;\n var s = c.elm.style;\n s.transform = s.WebkitTransform = \"translate(\" + dx + \"px,\" + dy + \"px)\";\n s.transitionDuration = '0s';\n }\n}\n\nvar platformComponents = {\n Transition: Transition,\n TransitionGroup: TransitionGroup\n};\n\n/* */\n\n// install platform specific utils\nVue.config.mustUseProp = mustUseProp;\nVue.config.isReservedTag = isReservedTag;\nVue.config.isReservedAttr = isReservedAttr;\nVue.config.getTagNamespace = getTagNamespace;\nVue.config.isUnknownElement = isUnknownElement;\n\n// install platform runtime directives & components\nextend(Vue.options.directives, platformDirectives);\nextend(Vue.options.components, platformComponents);\n\n// install platform patch function\nVue.prototype.__patch__ = inBrowser ? patch : noop;\n\n// public mount method\nVue.prototype.$mount = function (\n el,\n hydrating\n) {\n el = el && inBrowser ? query(el) : undefined;\n return mountComponent(this, el, hydrating)\n};\n\n// devtools global hook\n/* istanbul ignore next */\nif (inBrowser) {\n setTimeout(function () {\n if (config.devtools) {\n if (devtools) {\n devtools.emit('init', Vue);\n } else {\n console[console.info ? 'info' : 'log'](\n 'Download the Vue Devtools extension for a better development experience:\\n' +\n 'https://github.com/vuejs/vue-devtools'\n );\n }\n }\n if (config.productionTip !== false &&\n typeof console !== 'undefined'\n ) {\n console[console.info ? 'info' : 'log'](\n \"You are running Vue in development mode.\\n\" +\n \"Make sure to turn on production mode when deploying for production.\\n\" +\n \"See more tips at https://vuejs.org/guide/deployment.html\"\n );\n }\n }, 0);\n}\n\n/* */\n\nvar defaultTagRE = /\\{\\{((?:.|\\r?\\n)+?)\\}\\}/g;\nvar regexEscapeRE = /[-.*+?^${}()|[\\]\\/\\\\]/g;\n\nvar buildRegex = cached(function (delimiters) {\n var open = delimiters[0].replace(regexEscapeRE, '\\\\$&');\n var close = delimiters[1].replace(regexEscapeRE, '\\\\$&');\n return new RegExp(open + '((?:.|\\\\n)+?)' + close, 'g')\n});\n\n\n\nfunction parseText (\n text,\n delimiters\n) {\n var tagRE = delimiters ? buildRegex(delimiters) : defaultTagRE;\n if (!tagRE.test(text)) {\n return\n }\n var tokens = [];\n var rawTokens = [];\n var lastIndex = tagRE.lastIndex = 0;\n var match, index, tokenValue;\n while ((match = tagRE.exec(text))) {\n index = match.index;\n // push text token\n if (index > lastIndex) {\n rawTokens.push(tokenValue = text.slice(lastIndex, index));\n tokens.push(JSON.stringify(tokenValue));\n }\n // tag token\n var exp = parseFilters(match[1].trim());\n tokens.push((\"_s(\" + exp + \")\"));\n rawTokens.push({ '@binding': exp });\n lastIndex = index + match[0].length;\n }\n if (lastIndex < text.length) {\n rawTokens.push(tokenValue = text.slice(lastIndex));\n tokens.push(JSON.stringify(tokenValue));\n }\n return {\n expression: tokens.join('+'),\n tokens: rawTokens\n }\n}\n\n/* */\n\nfunction transformNode (el, options) {\n var warn = options.warn || baseWarn;\n var staticClass = getAndRemoveAttr(el, 'class');\n if (staticClass) {\n var res = parseText(staticClass, options.delimiters);\n if (res) {\n warn(\n \"class=\\\"\" + staticClass + \"\\\": \" +\n 'Interpolation inside attributes has been removed. ' +\n 'Use v-bind or the colon shorthand instead. For example, ' +\n 'instead of <div class=\"{{ val }}\">, use <div :class=\"val\">.',\n el.rawAttrsMap['class']\n );\n }\n }\n if (staticClass) {\n el.staticClass = JSON.stringify(staticClass);\n }\n var classBinding = getBindingAttr(el, 'class', false /* getStatic */);\n if (classBinding) {\n el.classBinding = classBinding;\n }\n}\n\nfunction genData (el) {\n var data = '';\n if (el.staticClass) {\n data += \"staticClass:\" + (el.staticClass) + \",\";\n }\n if (el.classBinding) {\n data += \"class:\" + (el.classBinding) + \",\";\n }\n return data\n}\n\nvar klass$1 = {\n staticKeys: ['staticClass'],\n transformNode: transformNode,\n genData: genData\n};\n\n/* */\n\nfunction transformNode$1 (el, options) {\n var warn = options.warn || baseWarn;\n var staticStyle = getAndRemoveAttr(el, 'style');\n if (staticStyle) {\n /* istanbul ignore if */\n {\n var res = parseText(staticStyle, options.delimiters);\n if (res) {\n warn(\n \"style=\\\"\" + staticStyle + \"\\\": \" +\n 'Interpolation inside attributes has been removed. ' +\n 'Use v-bind or the colon shorthand instead. For example, ' +\n 'instead of <div style=\"{{ val }}\">, use <div :style=\"val\">.',\n el.rawAttrsMap['style']\n );\n }\n }\n el.staticStyle = JSON.stringify(parseStyleText(staticStyle));\n }\n\n var styleBinding = getBindingAttr(el, 'style', false /* getStatic */);\n if (styleBinding) {\n el.styleBinding = styleBinding;\n }\n}\n\nfunction genData$1 (el) {\n var data = '';\n if (el.staticStyle) {\n data += \"staticStyle:\" + (el.staticStyle) + \",\";\n }\n if (el.styleBinding) {\n data += \"style:(\" + (el.styleBinding) + \"),\";\n }\n return data\n}\n\nvar style$1 = {\n staticKeys: ['staticStyle'],\n transformNode: transformNode$1,\n genData: genData$1\n};\n\n/* */\n\nvar decoder;\n\nvar he = {\n decode: function decode (html) {\n decoder = decoder || document.createElement('div');\n decoder.innerHTML = html;\n return decoder.textContent\n }\n};\n\n/* */\n\nvar isUnaryTag = makeMap(\n 'area,base,br,col,embed,frame,hr,img,input,isindex,keygen,' +\n 'link,meta,param,source,track,wbr'\n);\n\n// Elements that you can, intentionally, leave open\n// (and which close themselves)\nvar canBeLeftOpenTag = makeMap(\n 'colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source'\n);\n\n// HTML5 tags https://html.spec.whatwg.org/multipage/indices.html#elements-3\n// Phrasing Content https://html.spec.whatwg.org/multipage/dom.html#phrasing-content\nvar isNonPhrasingTag = makeMap(\n 'address,article,aside,base,blockquote,body,caption,col,colgroup,dd,' +\n 'details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,' +\n 'h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,' +\n 'optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,' +\n 'title,tr,track'\n);\n\n/**\n * Not type-checking this file because it's mostly vendor code.\n */\n\n// Regular Expressions for parsing tags and attributes\nvar attribute = /^\\s*([^\\s\"'<>\\/=]+)(?:\\s*(=)\\s*(?:\"([^\"]*)\"+|'([^']*)'+|([^\\s\"'=<>`]+)))?/;\nvar dynamicArgAttribute = /^\\s*((?:v-[\\w-]+:|@|:|#)\\[[^=]+\\][^\\s\"'<>\\/=]*)(?:\\s*(=)\\s*(?:\"([^\"]*)\"+|'([^']*)'+|([^\\s\"'=<>`]+)))?/;\nvar ncname = \"[a-zA-Z_][\\\\-\\\\.0-9_a-zA-Z\" + (unicodeRegExp.source) + \"]*\";\nvar qnameCapture = \"((?:\" + ncname + \"\\\\:)?\" + ncname + \")\";\nvar startTagOpen = new RegExp((\"^<\" + qnameCapture));\nvar startTagClose = /^\\s*(\\/?)>/;\nvar endTag = new RegExp((\"^<\\\\/\" + qnameCapture + \"[^>]*>\"));\nvar doctype = /^<!DOCTYPE [^>]+>/i;\n// #7298: escape - to avoid being pased as HTML comment when inlined in page\nvar comment = /^<!\\--/;\nvar conditionalComment = /^<!\\[/;\n\n// Special Elements (can contain anything)\nvar isPlainTextElement = makeMap('script,style,textarea', true);\nvar reCache = {};\n\nvar decodingMap = {\n '<': '<',\n '>': '>',\n '"': '\"',\n '&': '&',\n ' ': '\\n',\n '	': '\\t',\n ''': \"'\"\n};\nvar encodedAttr = /&(?:lt|gt|quot|amp|#39);/g;\nvar encodedAttrWithNewLines = /&(?:lt|gt|quot|amp|#39|#10|#9);/g;\n\n// #5992\nvar isIgnoreNewlineTag = makeMap('pre,textarea', true);\nvar shouldIgnoreFirstNewline = function (tag, html) { return tag && isIgnoreNewlineTag(tag) && html[0] === '\\n'; };\n\nfunction decodeAttr (value, shouldDecodeNewlines) {\n var re = shouldDecodeNewlines ? encodedAttrWithNewLines : encodedAttr;\n return value.replace(re, function (match) { return decodingMap[match]; })\n}\n\nfunction parseHTML (html, options) {\n var stack = [];\n var expectHTML = options.expectHTML;\n var isUnaryTag$$1 = options.isUnaryTag || no;\n var canBeLeftOpenTag$$1 = options.canBeLeftOpenTag || no;\n var index = 0;\n var last, lastTag;\n while (html) {\n last = html;\n // Make sure we're not in a plaintext content element like script/style\n if (!lastTag || !isPlainTextElement(lastTag)) {\n var textEnd = html.indexOf('<');\n if (textEnd === 0) {\n // Comment:\n if (comment.test(html)) {\n var commentEnd = html.indexOf('-->');\n\n if (commentEnd >= 0) {\n if (options.shouldKeepComment) {\n options.comment(html.substring(4, commentEnd), index, index + commentEnd + 3);\n }\n advance(commentEnd + 3);\n continue\n }\n }\n\n // http://en.wikipedia.org/wiki/Conditional_comment#Downlevel-revealed_conditional_comment\n if (conditionalComment.test(html)) {\n var conditionalEnd = html.indexOf(']>');\n\n if (conditionalEnd >= 0) {\n advance(conditionalEnd + 2);\n continue\n }\n }\n\n // Doctype:\n var doctypeMatch = html.match(doctype);\n if (doctypeMatch) {\n advance(doctypeMatch[0].length);\n continue\n }\n\n // End tag:\n var endTagMatch = html.match(endTag);\n if (endTagMatch) {\n var curIndex = index;\n advance(endTagMatch[0].length);\n parseEndTag(endTagMatch[1], curIndex, index);\n continue\n }\n\n // Start tag:\n var startTagMatch = parseStartTag();\n if (startTagMatch) {\n handleStartTag(startTagMatch);\n if (shouldIgnoreFirstNewline(startTagMatch.tagName, html)) {\n advance(1);\n }\n continue\n }\n }\n\n var text = (void 0), rest = (void 0), next = (void 0);\n if (textEnd >= 0) {\n rest = html.slice(textEnd);\n while (\n !endTag.test(rest) &&\n !startTagOpen.test(rest) &&\n !comment.test(rest) &&\n !conditionalComment.test(rest)\n ) {\n // < in plain text, be forgiving and treat it as text\n next = rest.indexOf('<', 1);\n if (next < 0) { break }\n textEnd += next;\n rest = html.slice(textEnd);\n }\n text = html.substring(0, textEnd);\n }\n\n if (textEnd < 0) {\n text = html;\n }\n\n if (text) {\n advance(text.length);\n }\n\n if (options.chars && text) {\n options.chars(text, index - text.length, index);\n }\n } else {\n var endTagLength = 0;\n var stackedTag = lastTag.toLowerCase();\n var reStackedTag = reCache[stackedTag] || (reCache[stackedTag] = new RegExp('([\\\\s\\\\S]*?)(</' + stackedTag + '[^>]*>)', 'i'));\n var rest$1 = html.replace(reStackedTag, function (all, text, endTag) {\n endTagLength = endTag.length;\n if (!isPlainTextElement(stackedTag) && stackedTag !== 'noscript') {\n text = text\n .replace(/<!\\--([\\s\\S]*?)-->/g, '$1') // #7298\n .replace(/<!\\[CDATA\\[([\\s\\S]*?)]]>/g, '$1');\n }\n if (shouldIgnoreFirstNewline(stackedTag, text)) {\n text = text.slice(1);\n }\n if (options.chars) {\n options.chars(text);\n }\n return ''\n });\n index += html.length - rest$1.length;\n html = rest$1;\n parseEndTag(stackedTag, index - endTagLength, index);\n }\n\n if (html === last) {\n options.chars && options.chars(html);\n if (!stack.length && options.warn) {\n options.warn((\"Mal-formatted tag at end of template: \\\"\" + html + \"\\\"\"), { start: index + html.length });\n }\n break\n }\n }\n\n // Clean up any remaining tags\n parseEndTag();\n\n function advance (n) {\n index += n;\n html = html.substring(n);\n }\n\n function parseStartTag () {\n var start = html.match(startTagOpen);\n if (start) {\n var match = {\n tagName: start[1],\n attrs: [],\n start: index\n };\n advance(start[0].length);\n var end, attr;\n while (!(end = html.match(startTagClose)) && (attr = html.match(dynamicArgAttribute) || html.match(attribute))) {\n attr.start = index;\n advance(attr[0].length);\n attr.end = index;\n match.attrs.push(attr);\n }\n if (end) {\n match.unarySlash = end[1];\n advance(end[0].length);\n match.end = index;\n return match\n }\n }\n }\n\n function handleStartTag (match) {\n var tagName = match.tagName;\n var unarySlash = match.unarySlash;\n\n if (expectHTML) {\n if (lastTag === 'p' && isNonPhrasingTag(tagName)) {\n parseEndTag(lastTag);\n }\n if (canBeLeftOpenTag$$1(tagName) && lastTag === tagName) {\n parseEndTag(tagName);\n }\n }\n\n var unary = isUnaryTag$$1(tagName) || !!unarySlash;\n\n var l = match.attrs.length;\n var attrs = new Array(l);\n for (var i = 0; i < l; i++) {\n var args = match.attrs[i];\n var value = args[3] || args[4] || args[5] || '';\n var shouldDecodeNewlines = tagName === 'a' && args[1] === 'href'\n ? options.shouldDecodeNewlinesForHref\n : options.shouldDecodeNewlines;\n attrs[i] = {\n name: args[1],\n value: decodeAttr(value, shouldDecodeNewlines)\n };\n if (options.outputSourceRange) {\n attrs[i].start = args.start + args[0].match(/^\\s*/).length;\n attrs[i].end = args.end;\n }\n }\n\n if (!unary) {\n stack.push({ tag: tagName, lowerCasedTag: tagName.toLowerCase(), attrs: attrs, start: match.start, end: match.end });\n lastTag = tagName;\n }\n\n if (options.start) {\n options.start(tagName, attrs, unary, match.start, match.end);\n }\n }\n\n function parseEndTag (tagName, start, end) {\n var pos, lowerCasedTagName;\n if (start == null) { start = index; }\n if (end == null) { end = index; }\n\n // Find the closest opened tag of the same type\n if (tagName) {\n lowerCasedTagName = tagName.toLowerCase();\n for (pos = stack.length - 1; pos >= 0; pos--) {\n if (stack[pos].lowerCasedTag === lowerCasedTagName) {\n break\n }\n }\n } else {\n // If no tag name is provided, clean shop\n pos = 0;\n }\n\n if (pos >= 0) {\n // Close all the open elements, up the stack\n for (var i = stack.length - 1; i >= pos; i--) {\n if (i > pos || !tagName &&\n options.warn\n ) {\n options.warn(\n (\"tag <\" + (stack[i].tag) + \"> has no matching end tag.\"),\n { start: stack[i].start, end: stack[i].end }\n );\n }\n if (options.end) {\n options.end(stack[i].tag, start, end);\n }\n }\n\n // Remove the open elements from the stack\n stack.length = pos;\n lastTag = pos && stack[pos - 1].tag;\n } else if (lowerCasedTagName === 'br') {\n if (options.start) {\n options.start(tagName, [], true, start, end);\n }\n } else if (lowerCasedTagName === 'p') {\n if (options.start) {\n options.start(tagName, [], false, start, end);\n }\n if (options.end) {\n options.end(tagName, start, end);\n }\n }\n }\n}\n\n/* */\n\nvar onRE = /^@|^v-on:/;\nvar dirRE = /^v-|^@|^:/;\nvar forAliasRE = /([\\s\\S]*?)\\s+(?:in|of)\\s+([\\s\\S]*)/;\nvar forIteratorRE = /,([^,\\}\\]]*)(?:,([^,\\}\\]]*))?$/;\nvar stripParensRE = /^\\(|\\)$/g;\nvar dynamicArgRE = /^\\[.*\\]$/;\n\nvar argRE = /:(.*)$/;\nvar bindRE = /^:|^\\.|^v-bind:/;\nvar modifierRE = /\\.[^.\\]]+(?=[^\\]]*$)/g;\n\nvar slotRE = /^v-slot(:|$)|^#/;\n\nvar lineBreakRE = /[\\r\\n]/;\nvar whitespaceRE$1 = /\\s+/g;\n\nvar invalidAttributeRE = /[\\s\"'<>\\/=]/;\n\nvar decodeHTMLCached = cached(he.decode);\n\nvar emptySlotScopeToken = \"_empty_\";\n\n// configurable state\nvar warn$2;\nvar delimiters;\nvar transforms;\nvar preTransforms;\nvar postTransforms;\nvar platformIsPreTag;\nvar platformMustUseProp;\nvar platformGetTagNamespace;\nvar maybeComponent;\n\nfunction createASTElement (\n tag,\n attrs,\n parent\n) {\n return {\n type: 1,\n tag: tag,\n attrsList: attrs,\n attrsMap: makeAttrsMap(attrs),\n rawAttrsMap: {},\n parent: parent,\n children: []\n }\n}\n\n/**\n * Convert HTML string to AST.\n */\nfunction parse (\n template,\n options\n) {\n warn$2 = options.warn || baseWarn;\n\n platformIsPreTag = options.isPreTag || no;\n platformMustUseProp = options.mustUseProp || no;\n platformGetTagNamespace = options.getTagNamespace || no;\n var isReservedTag = options.isReservedTag || no;\n maybeComponent = function (el) { return !!el.component || !isReservedTag(el.tag); };\n\n transforms = pluckModuleFunction(options.modules, 'transformNode');\n preTransforms = pluckModuleFunction(options.modules, 'preTransformNode');\n postTransforms = pluckModuleFunction(options.modules, 'postTransformNode');\n\n delimiters = options.delimiters;\n\n var stack = [];\n var preserveWhitespace = options.preserveWhitespace !== false;\n var whitespaceOption = options.whitespace;\n var root;\n var currentParent;\n var inVPre = false;\n var inPre = false;\n var warned = false;\n\n function warnOnce (msg, range) {\n if (!warned) {\n warned = true;\n warn$2(msg, range);\n }\n }\n\n function closeElement (element) {\n trimEndingWhitespace(element);\n if (!inVPre && !element.processed) {\n element = processElement(element, options);\n }\n // tree management\n if (!stack.length && element !== root) {\n // allow root elements with v-if, v-else-if and v-else\n if (root.if && (element.elseif || element.else)) {\n {\n checkRootConstraints(element);\n }\n addIfCondition(root, {\n exp: element.elseif,\n block: element\n });\n } else {\n warnOnce(\n \"Component template should contain exactly one root element. \" +\n \"If you are using v-if on multiple elements, \" +\n \"use v-else-if to chain them instead.\",\n { start: element.start }\n );\n }\n }\n if (currentParent && !element.forbidden) {\n if (element.elseif || element.else) {\n processIfConditions(element, currentParent);\n } else {\n if (element.slotScope) {\n // scoped slot\n // keep it in the children list so that v-else(-if) conditions can\n // find it as the prev node.\n var name = element.slotTarget || '\"default\"'\n ;(currentParent.scopedSlots || (currentParent.scopedSlots = {}))[name] = element;\n }\n currentParent.children.push(element);\n element.parent = currentParent;\n }\n }\n\n // final children cleanup\n // filter out scoped slots\n element.children = element.children.filter(function (c) { return !(c).slotScope; });\n // remove trailing whitespace node again\n trimEndingWhitespace(element);\n\n // check pre state\n if (element.pre) {\n inVPre = false;\n }\n if (platformIsPreTag(element.tag)) {\n inPre = false;\n }\n // apply post-transforms\n for (var i = 0; i < postTransforms.length; i++) {\n postTransforms[i](element, options);\n }\n }\n\n function trimEndingWhitespace (el) {\n // remove trailing whitespace node\n if (!inPre) {\n var lastNode;\n while (\n (lastNode = el.children[el.children.length - 1]) &&\n lastNode.type === 3 &&\n lastNode.text === ' '\n ) {\n el.children.pop();\n }\n }\n }\n\n function checkRootConstraints (el) {\n if (el.tag === 'slot' || el.tag === 'template') {\n warnOnce(\n \"Cannot use <\" + (el.tag) + \"> as component root element because it may \" +\n 'contain multiple nodes.',\n { start: el.start }\n );\n }\n if (el.attrsMap.hasOwnProperty('v-for')) {\n warnOnce(\n 'Cannot use v-for on stateful component root element because ' +\n 'it renders multiple elements.',\n el.rawAttrsMap['v-for']\n );\n }\n }\n\n parseHTML(template, {\n warn: warn$2,\n expectHTML: options.expectHTML,\n isUnaryTag: options.isUnaryTag,\n canBeLeftOpenTag: options.canBeLeftOpenTag,\n shouldDecodeNewlines: options.shouldDecodeNewlines,\n shouldDecodeNewlinesForHref: options.shouldDecodeNewlinesForHref,\n shouldKeepComment: options.comments,\n outputSourceRange: options.outputSourceRange,\n start: function start (tag, attrs, unary, start$1, end) {\n // check namespace.\n // inherit parent ns if there is one\n var ns = (currentParent && currentParent.ns) || platformGetTagNamespace(tag);\n\n // handle IE svg bug\n /* istanbul ignore if */\n if (isIE && ns === 'svg') {\n attrs = guardIESVGBug(attrs);\n }\n\n var element = createASTElement(tag, attrs, currentParent);\n if (ns) {\n element.ns = ns;\n }\n\n {\n if (options.outputSourceRange) {\n element.start = start$1;\n element.end = end;\n element.rawAttrsMap = element.attrsList.reduce(function (cumulated, attr) {\n cumulated[attr.name] = attr;\n return cumulated\n }, {});\n }\n attrs.forEach(function (attr) {\n if (invalidAttributeRE.test(attr.name)) {\n warn$2(\n \"Invalid dynamic argument expression: attribute names cannot contain \" +\n \"spaces, quotes, <, >, / or =.\",\n {\n start: attr.start + attr.name.indexOf(\"[\"),\n end: attr.start + attr.name.length\n }\n );\n }\n });\n }\n\n if (isForbiddenTag(element) && !isServerRendering()) {\n element.forbidden = true;\n warn$2(\n 'Templates should only be responsible for mapping the state to the ' +\n 'UI. Avoid placing tags with side-effects in your templates, such as ' +\n \"<\" + tag + \">\" + ', as they will not be parsed.',\n { start: element.start }\n );\n }\n\n // apply pre-transforms\n for (var i = 0; i < preTransforms.length; i++) {\n element = preTransforms[i](element, options) || element;\n }\n\n if (!inVPre) {\n processPre(element);\n if (element.pre) {\n inVPre = true;\n }\n }\n if (platformIsPreTag(element.tag)) {\n inPre = true;\n }\n if (inVPre) {\n processRawAttrs(element);\n } else if (!element.processed) {\n // structural directives\n processFor(element);\n processIf(element);\n processOnce(element);\n }\n\n if (!root) {\n root = element;\n {\n checkRootConstraints(root);\n }\n }\n\n if (!unary) {\n currentParent = element;\n stack.push(element);\n } else {\n closeElement(element);\n }\n },\n\n end: function end (tag, start, end$1) {\n var element = stack[stack.length - 1];\n // pop stack\n stack.length -= 1;\n currentParent = stack[stack.length - 1];\n if (options.outputSourceRange) {\n element.end = end$1;\n }\n closeElement(element);\n },\n\n chars: function chars (text, start, end) {\n if (!currentParent) {\n {\n if (text === template) {\n warnOnce(\n 'Component template requires a root element, rather than just text.',\n { start: start }\n );\n } else if ((text = text.trim())) {\n warnOnce(\n (\"text \\\"\" + text + \"\\\" outside root element will be ignored.\"),\n { start: start }\n );\n }\n }\n return\n }\n // IE textarea placeholder bug\n /* istanbul ignore if */\n if (isIE &&\n currentParent.tag === 'textarea' &&\n currentParent.attrsMap.placeholder === text\n ) {\n return\n }\n var children = currentParent.children;\n if (inPre || text.trim()) {\n text = isTextTag(currentParent) ? text : decodeHTMLCached(text);\n } else if (!children.length) {\n // remove the whitespace-only node right after an opening tag\n text = '';\n } else if (whitespaceOption) {\n if (whitespaceOption === 'condense') {\n // in condense mode, remove the whitespace node if it contains\n // line break, otherwise condense to a single space\n text = lineBreakRE.test(text) ? '' : ' ';\n } else {\n text = ' ';\n }\n } else {\n text = preserveWhitespace ? ' ' : '';\n }\n if (text) {\n if (!inPre && whitespaceOption === 'condense') {\n // condense consecutive whitespaces into single space\n text = text.replace(whitespaceRE$1, ' ');\n }\n var res;\n var child;\n if (!inVPre && text !== ' ' && (res = parseText(text, delimiters))) {\n child = {\n type: 2,\n expression: res.expression,\n tokens: res.tokens,\n text: text\n };\n } else if (text !== ' ' || !children.length || children[children.length - 1].text !== ' ') {\n child = {\n type: 3,\n text: text\n };\n }\n if (child) {\n if (options.outputSourceRange) {\n child.start = start;\n child.end = end;\n }\n children.push(child);\n }\n }\n },\n comment: function comment (text, start, end) {\n // adding anyting as a sibling to the root node is forbidden\n // comments should still be allowed, but ignored\n if (currentParent) {\n var child = {\n type: 3,\n text: text,\n isComment: true\n };\n if (options.outputSourceRange) {\n child.start = start;\n child.end = end;\n }\n currentParent.children.push(child);\n }\n }\n });\n return root\n}\n\nfunction processPre (el) {\n if (getAndRemoveAttr(el, 'v-pre') != null) {\n el.pre = true;\n }\n}\n\nfunction processRawAttrs (el) {\n var list = el.attrsList;\n var len = list.length;\n if (len) {\n var attrs = el.attrs = new Array(len);\n for (var i = 0; i < len; i++) {\n attrs[i] = {\n name: list[i].name,\n value: JSON.stringify(list[i].value)\n };\n if (list[i].start != null) {\n attrs[i].start = list[i].start;\n attrs[i].end = list[i].end;\n }\n }\n } else if (!el.pre) {\n // non root node in pre blocks with no attributes\n el.plain = true;\n }\n}\n\nfunction processElement (\n element,\n options\n) {\n processKey(element);\n\n // determine whether this is a plain element after\n // removing structural attributes\n element.plain = (\n !element.key &&\n !element.scopedSlots &&\n !element.attrsList.length\n );\n\n processRef(element);\n processSlotContent(element);\n processSlotOutlet(element);\n processComponent(element);\n for (var i = 0; i < transforms.length; i++) {\n element = transforms[i](element, options) || element;\n }\n processAttrs(element);\n return element\n}\n\nfunction processKey (el) {\n var exp = getBindingAttr(el, 'key');\n if (exp) {\n {\n if (el.tag === 'template') {\n warn$2(\n \"<template> cannot be keyed. Place the key on real elements instead.\",\n getRawBindingAttr(el, 'key')\n );\n }\n if (el.for) {\n var iterator = el.iterator2 || el.iterator1;\n var parent = el.parent;\n if (iterator && iterator === exp && parent && parent.tag === 'transition-group') {\n warn$2(\n \"Do not use v-for index as key on <transition-group> children, \" +\n \"this is the same as not using keys.\",\n getRawBindingAttr(el, 'key'),\n true /* tip */\n );\n }\n }\n }\n el.key = exp;\n }\n}\n\nfunction processRef (el) {\n var ref = getBindingAttr(el, 'ref');\n if (ref) {\n el.ref = ref;\n el.refInFor = checkInFor(el);\n }\n}\n\nfunction processFor (el) {\n var exp;\n if ((exp = getAndRemoveAttr(el, 'v-for'))) {\n var res = parseFor(exp);\n if (res) {\n extend(el, res);\n } else {\n warn$2(\n (\"Invalid v-for expression: \" + exp),\n el.rawAttrsMap['v-for']\n );\n }\n }\n}\n\n\n\nfunction parseFor (exp) {\n var inMatch = exp.match(forAliasRE);\n if (!inMatch) { return }\n var res = {};\n res.for = inMatch[2].trim();\n var alias = inMatch[1].trim().replace(stripParensRE, '');\n var iteratorMatch = alias.match(forIteratorRE);\n if (iteratorMatch) {\n res.alias = alias.replace(forIteratorRE, '').trim();\n res.iterator1 = iteratorMatch[1].trim();\n if (iteratorMatch[2]) {\n res.iterator2 = iteratorMatch[2].trim();\n }\n } else {\n res.alias = alias;\n }\n return res\n}\n\nfunction processIf (el) {\n var exp = getAndRemoveAttr(el, 'v-if');\n if (exp) {\n el.if = exp;\n addIfCondition(el, {\n exp: exp,\n block: el\n });\n } else {\n if (getAndRemoveAttr(el, 'v-else') != null) {\n el.else = true;\n }\n var elseif = getAndRemoveAttr(el, 'v-else-if');\n if (elseif) {\n el.elseif = elseif;\n }\n }\n}\n\nfunction processIfConditions (el, parent) {\n var prev = findPrevElement(parent.children);\n if (prev && prev.if) {\n addIfCondition(prev, {\n exp: el.elseif,\n block: el\n });\n } else {\n warn$2(\n \"v-\" + (el.elseif ? ('else-if=\"' + el.elseif + '\"') : 'else') + \" \" +\n \"used on element <\" + (el.tag) + \"> without corresponding v-if.\",\n el.rawAttrsMap[el.elseif ? 'v-else-if' : 'v-else']\n );\n }\n}\n\nfunction findPrevElement (children) {\n var i = children.length;\n while (i--) {\n if (children[i].type === 1) {\n return children[i]\n } else {\n if (children[i].text !== ' ') {\n warn$2(\n \"text \\\"\" + (children[i].text.trim()) + \"\\\" between v-if and v-else(-if) \" +\n \"will be ignored.\",\n children[i]\n );\n }\n children.pop();\n }\n }\n}\n\nfunction addIfCondition (el, condition) {\n if (!el.ifConditions) {\n el.ifConditions = [];\n }\n el.ifConditions.push(condition);\n}\n\nfunction processOnce (el) {\n var once$$1 = getAndRemoveAttr(el, 'v-once');\n if (once$$1 != null) {\n el.once = true;\n }\n}\n\n// handle content being passed to a component as slot,\n// e.g. <template slot=\"xxx\">, <div slot-scope=\"xxx\">\nfunction processSlotContent (el) {\n var slotScope;\n if (el.tag === 'template') {\n slotScope = getAndRemoveAttr(el, 'scope');\n /* istanbul ignore if */\n if (slotScope) {\n warn$2(\n \"the \\\"scope\\\" attribute for scoped slots have been deprecated and \" +\n \"replaced by \\\"slot-scope\\\" since 2.5. The new \\\"slot-scope\\\" attribute \" +\n \"can also be used on plain elements in addition to <template> to \" +\n \"denote scoped slots.\",\n el.rawAttrsMap['scope'],\n true\n );\n }\n el.slotScope = slotScope || getAndRemoveAttr(el, 'slot-scope');\n } else if ((slotScope = getAndRemoveAttr(el, 'slot-scope'))) {\n /* istanbul ignore if */\n if (el.attrsMap['v-for']) {\n warn$2(\n \"Ambiguous combined usage of slot-scope and v-for on <\" + (el.tag) + \"> \" +\n \"(v-for takes higher priority). Use a wrapper <template> for the \" +\n \"scoped slot to make it clearer.\",\n el.rawAttrsMap['slot-scope'],\n true\n );\n }\n el.slotScope = slotScope;\n }\n\n // slot=\"xxx\"\n var slotTarget = getBindingAttr(el, 'slot');\n if (slotTarget) {\n el.slotTarget = slotTarget === '\"\"' ? '\"default\"' : slotTarget;\n el.slotTargetDynamic = !!(el.attrsMap[':slot'] || el.attrsMap['v-bind:slot']);\n // preserve slot as an attribute for native shadow DOM compat\n // only for non-scoped slots.\n if (el.tag !== 'template' && !el.slotScope) {\n addAttr(el, 'slot', slotTarget, getRawBindingAttr(el, 'slot'));\n }\n }\n\n // 2.6 v-slot syntax\n {\n if (el.tag === 'template') {\n // v-slot on <template>\n var slotBinding = getAndRemoveAttrByRegex(el, slotRE);\n if (slotBinding) {\n {\n if (el.slotTarget || el.slotScope) {\n warn$2(\n \"Unexpected mixed usage of different slot syntaxes.\",\n el\n );\n }\n if (el.parent && !maybeComponent(el.parent)) {\n warn$2(\n \"<template v-slot> can only appear at the root level inside \" +\n \"the receiving the component\",\n el\n );\n }\n }\n var ref = getSlotName(slotBinding);\n var name = ref.name;\n var dynamic = ref.dynamic;\n el.slotTarget = name;\n el.slotTargetDynamic = dynamic;\n el.slotScope = slotBinding.value || emptySlotScopeToken; // force it into a scoped slot for perf\n }\n } else {\n // v-slot on component, denotes default slot\n var slotBinding$1 = getAndRemoveAttrByRegex(el, slotRE);\n if (slotBinding$1) {\n {\n if (!maybeComponent(el)) {\n warn$2(\n \"v-slot can only be used on components or <template>.\",\n slotBinding$1\n );\n }\n if (el.slotScope || el.slotTarget) {\n warn$2(\n \"Unexpected mixed usage of different slot syntaxes.\",\n el\n );\n }\n if (el.scopedSlots) {\n warn$2(\n \"To avoid scope ambiguity, the default slot should also use \" +\n \"<template> syntax when there are other named slots.\",\n slotBinding$1\n );\n }\n }\n // add the component's children to its default slot\n var slots = el.scopedSlots || (el.scopedSlots = {});\n var ref$1 = getSlotName(slotBinding$1);\n var name$1 = ref$1.name;\n var dynamic$1 = ref$1.dynamic;\n var slotContainer = slots[name$1] = createASTElement('template', [], el);\n slotContainer.slotTarget = name$1;\n slotContainer.slotTargetDynamic = dynamic$1;\n slotContainer.children = el.children.filter(function (c) {\n if (!c.slotScope) {\n c.parent = slotContainer;\n return true\n }\n });\n slotContainer.slotScope = slotBinding$1.value || emptySlotScopeToken;\n // remove children as they are returned from scopedSlots now\n el.children = [];\n // mark el non-plain so data gets generated\n el.plain = false;\n }\n }\n }\n}\n\nfunction getSlotName (binding) {\n var name = binding.name.replace(slotRE, '');\n if (!name) {\n if (binding.name[0] !== '#') {\n name = 'default';\n } else {\n warn$2(\n \"v-slot shorthand syntax requires a slot name.\",\n binding\n );\n }\n }\n return dynamicArgRE.test(name)\n // dynamic [name]\n ? { name: name.slice(1, -1), dynamic: true }\n // static name\n : { name: (\"\\\"\" + name + \"\\\"\"), dynamic: false }\n}\n\n// handle <slot/> outlets\nfunction processSlotOutlet (el) {\n if (el.tag === 'slot') {\n el.slotName = getBindingAttr(el, 'name');\n if (el.key) {\n warn$2(\n \"`key` does not work on <slot> because slots are abstract outlets \" +\n \"and can possibly expand into multiple elements. \" +\n \"Use the key on a wrapping element instead.\",\n getRawBindingAttr(el, 'key')\n );\n }\n }\n}\n\nfunction processComponent (el) {\n var binding;\n if ((binding = getBindingAttr(el, 'is'))) {\n el.component = binding;\n }\n if (getAndRemoveAttr(el, 'inline-template') != null) {\n el.inlineTemplate = true;\n }\n}\n\nfunction processAttrs (el) {\n var list = el.attrsList;\n var i, l, name, rawName, value, modifiers, syncGen, isDynamic;\n for (i = 0, l = list.length; i < l; i++) {\n name = rawName = list[i].name;\n value = list[i].value;\n if (dirRE.test(name)) {\n // mark element as dynamic\n el.hasBindings = true;\n // modifiers\n modifiers = parseModifiers(name.replace(dirRE, ''));\n // support .foo shorthand syntax for the .prop modifier\n if (modifiers) {\n name = name.replace(modifierRE, '');\n }\n if (bindRE.test(name)) { // v-bind\n name = name.replace(bindRE, '');\n value = parseFilters(value);\n isDynamic = dynamicArgRE.test(name);\n if (isDynamic) {\n name = name.slice(1, -1);\n }\n if (\n value.trim().length === 0\n ) {\n warn$2(\n (\"The value for a v-bind expression cannot be empty. Found in \\\"v-bind:\" + name + \"\\\"\")\n );\n }\n if (modifiers) {\n if (modifiers.prop && !isDynamic) {\n name = camelize(name);\n if (name === 'innerHtml') { name = 'innerHTML'; }\n }\n if (modifiers.camel && !isDynamic) {\n name = camelize(name);\n }\n if (modifiers.sync) {\n syncGen = genAssignmentCode(value, \"$event\");\n if (!isDynamic) {\n addHandler(\n el,\n (\"update:\" + (camelize(name))),\n syncGen,\n null,\n false,\n warn$2,\n list[i]\n );\n if (hyphenate(name) !== camelize(name)) {\n addHandler(\n el,\n (\"update:\" + (hyphenate(name))),\n syncGen,\n null,\n false,\n warn$2,\n list[i]\n );\n }\n } else {\n // handler w/ dynamic event name\n addHandler(\n el,\n (\"\\\"update:\\\"+(\" + name + \")\"),\n syncGen,\n null,\n false,\n warn$2,\n list[i],\n true // dynamic\n );\n }\n }\n }\n if ((modifiers && modifiers.prop) || (\n !el.component && platformMustUseProp(el.tag, el.attrsMap.type, name)\n )) {\n addProp(el, name, value, list[i], isDynamic);\n } else {\n addAttr(el, name, value, list[i], isDynamic);\n }\n } else if (onRE.test(name)) { // v-on\n name = name.replace(onRE, '');\n isDynamic = dynamicArgRE.test(name);\n if (isDynamic) {\n name = name.slice(1, -1);\n }\n addHandler(el, name, value, modifiers, false, warn$2, list[i], isDynamic);\n } else { // normal directives\n name = name.replace(dirRE, '');\n // parse arg\n var argMatch = name.match(argRE);\n var arg = argMatch && argMatch[1];\n isDynamic = false;\n if (arg) {\n name = name.slice(0, -(arg.length + 1));\n if (dynamicArgRE.test(arg)) {\n arg = arg.slice(1, -1);\n isDynamic = true;\n }\n }\n addDirective(el, name, rawName, value, arg, isDynamic, modifiers, list[i]);\n if (name === 'model') {\n checkForAliasModel(el, value);\n }\n }\n } else {\n // literal attribute\n {\n var res = parseText(value, delimiters);\n if (res) {\n warn$2(\n name + \"=\\\"\" + value + \"\\\": \" +\n 'Interpolation inside attributes has been removed. ' +\n 'Use v-bind or the colon shorthand instead. For example, ' +\n 'instead of <div id=\"{{ val }}\">, use <div :id=\"val\">.',\n list[i]\n );\n }\n }\n addAttr(el, name, JSON.stringify(value), list[i]);\n // #6887 firefox doesn't update muted state if set via attribute\n // even immediately after element creation\n if (!el.component &&\n name === 'muted' &&\n platformMustUseProp(el.tag, el.attrsMap.type, name)) {\n addProp(el, name, 'true', list[i]);\n }\n }\n }\n}\n\nfunction checkInFor (el) {\n var parent = el;\n while (parent) {\n if (parent.for !== undefined) {\n return true\n }\n parent = parent.parent;\n }\n return false\n}\n\nfunction parseModifiers (name) {\n var match = name.match(modifierRE);\n if (match) {\n var ret = {};\n match.forEach(function (m) { ret[m.slice(1)] = true; });\n return ret\n }\n}\n\nfunction makeAttrsMap (attrs) {\n var map = {};\n for (var i = 0, l = attrs.length; i < l; i++) {\n if (\n map[attrs[i].name] && !isIE && !isEdge\n ) {\n warn$2('duplicate attribute: ' + attrs[i].name, attrs[i]);\n }\n map[attrs[i].name] = attrs[i].value;\n }\n return map\n}\n\n// for script (e.g. type=\"x/template\") or style, do not decode content\nfunction isTextTag (el) {\n return el.tag === 'script' || el.tag === 'style'\n}\n\nfunction isForbiddenTag (el) {\n return (\n el.tag === 'style' ||\n (el.tag === 'script' && (\n !el.attrsMap.type ||\n el.attrsMap.type === 'text/javascript'\n ))\n )\n}\n\nvar ieNSBug = /^xmlns:NS\\d+/;\nvar ieNSPrefix = /^NS\\d+:/;\n\n/* istanbul ignore next */\nfunction guardIESVGBug (attrs) {\n var res = [];\n for (var i = 0; i < attrs.length; i++) {\n var attr = attrs[i];\n if (!ieNSBug.test(attr.name)) {\n attr.name = attr.name.replace(ieNSPrefix, '');\n res.push(attr);\n }\n }\n return res\n}\n\nfunction checkForAliasModel (el, value) {\n var _el = el;\n while (_el) {\n if (_el.for && _el.alias === value) {\n warn$2(\n \"<\" + (el.tag) + \" v-model=\\\"\" + value + \"\\\">: \" +\n \"You are binding v-model directly to a v-for iteration alias. \" +\n \"This will not be able to modify the v-for source array because \" +\n \"writing to the alias is like modifying a function local variable. \" +\n \"Consider using an array of objects and use v-model on an object property instead.\",\n el.rawAttrsMap['v-model']\n );\n }\n _el = _el.parent;\n }\n}\n\n/* */\n\nfunction preTransformNode (el, options) {\n if (el.tag === 'input') {\n var map = el.attrsMap;\n if (!map['v-model']) {\n return\n }\n\n var typeBinding;\n if (map[':type'] || map['v-bind:type']) {\n typeBinding = getBindingAttr(el, 'type');\n }\n if (!map.type && !typeBinding && map['v-bind']) {\n typeBinding = \"(\" + (map['v-bind']) + \").type\";\n }\n\n if (typeBinding) {\n var ifCondition = getAndRemoveAttr(el, 'v-if', true);\n var ifConditionExtra = ifCondition ? (\"&&(\" + ifCondition + \")\") : \"\";\n var hasElse = getAndRemoveAttr(el, 'v-else', true) != null;\n var elseIfCondition = getAndRemoveAttr(el, 'v-else-if', true);\n // 1. checkbox\n var branch0 = cloneASTElement(el);\n // process for on the main node\n processFor(branch0);\n addRawAttr(branch0, 'type', 'checkbox');\n processElement(branch0, options);\n branch0.processed = true; // prevent it from double-processed\n branch0.if = \"(\" + typeBinding + \")==='checkbox'\" + ifConditionExtra;\n addIfCondition(branch0, {\n exp: branch0.if,\n block: branch0\n });\n // 2. add radio else-if condition\n var branch1 = cloneASTElement(el);\n getAndRemoveAttr(branch1, 'v-for', true);\n addRawAttr(branch1, 'type', 'radio');\n processElement(branch1, options);\n addIfCondition(branch0, {\n exp: \"(\" + typeBinding + \")==='radio'\" + ifConditionExtra,\n block: branch1\n });\n // 3. other\n var branch2 = cloneASTElement(el);\n getAndRemoveAttr(branch2, 'v-for', true);\n addRawAttr(branch2, ':type', typeBinding);\n processElement(branch2, options);\n addIfCondition(branch0, {\n exp: ifCondition,\n block: branch2\n });\n\n if (hasElse) {\n branch0.else = true;\n } else if (elseIfCondition) {\n branch0.elseif = elseIfCondition;\n }\n\n return branch0\n }\n }\n}\n\nfunction cloneASTElement (el) {\n return createASTElement(el.tag, el.attrsList.slice(), el.parent)\n}\n\nvar model$1 = {\n preTransformNode: preTransformNode\n};\n\nvar modules$1 = [\n klass$1,\n style$1,\n model$1\n];\n\n/* */\n\nfunction text (el, dir) {\n if (dir.value) {\n addProp(el, 'textContent', (\"_s(\" + (dir.value) + \")\"), dir);\n }\n}\n\n/* */\n\nfunction html (el, dir) {\n if (dir.value) {\n addProp(el, 'innerHTML', (\"_s(\" + (dir.value) + \")\"), dir);\n }\n}\n\nvar directives$1 = {\n model: model,\n text: text,\n html: html\n};\n\n/* */\n\nvar baseOptions = {\n expectHTML: true,\n modules: modules$1,\n directives: directives$1,\n isPreTag: isPreTag,\n isUnaryTag: isUnaryTag,\n mustUseProp: mustUseProp,\n canBeLeftOpenTag: canBeLeftOpenTag,\n isReservedTag: isReservedTag,\n getTagNamespace: getTagNamespace,\n staticKeys: genStaticKeys(modules$1)\n};\n\n/* */\n\nvar isStaticKey;\nvar isPlatformReservedTag;\n\nvar genStaticKeysCached = cached(genStaticKeys$1);\n\n/**\n * Goal of the optimizer: walk the generated template AST tree\n * and detect sub-trees that are purely static, i.e. parts of\n * the DOM that never needs to change.\n *\n * Once we detect these sub-trees, we can:\n *\n * 1. Hoist them into constants, so that we no longer need to\n * create fresh nodes for them on each re-render;\n * 2. Completely skip them in the patching process.\n */\nfunction optimize (root, options) {\n if (!root) { return }\n isStaticKey = genStaticKeysCached(options.staticKeys || '');\n isPlatformReservedTag = options.isReservedTag || no;\n // first pass: mark all non-static nodes.\n markStatic$1(root);\n // second pass: mark static roots.\n markStaticRoots(root, false);\n}\n\nfunction genStaticKeys$1 (keys) {\n return makeMap(\n 'type,tag,attrsList,attrsMap,plain,parent,children,attrs,start,end,rawAttrsMap' +\n (keys ? ',' + keys : '')\n )\n}\n\nfunction markStatic$1 (node) {\n node.static = isStatic(node);\n if (node.type === 1) {\n // do not make component slot content static. this avoids\n // 1. components not able to mutate slot nodes\n // 2. static slot content fails for hot-reloading\n if (\n !isPlatformReservedTag(node.tag) &&\n node.tag !== 'slot' &&\n node.attrsMap['inline-template'] == null\n ) {\n return\n }\n for (var i = 0, l = node.children.length; i < l; i++) {\n var child = node.children[i];\n markStatic$1(child);\n if (!child.static) {\n node.static = false;\n }\n }\n if (node.ifConditions) {\n for (var i$1 = 1, l$1 = node.ifConditions.length; i$1 < l$1; i$1++) {\n var block = node.ifConditions[i$1].block;\n markStatic$1(block);\n if (!block.static) {\n node.static = false;\n }\n }\n }\n }\n}\n\nfunction markStaticRoots (node, isInFor) {\n if (node.type === 1) {\n if (node.static || node.once) {\n node.staticInFor = isInFor;\n }\n // For a node to qualify as a static root, it should have children that\n // are not just static text. Otherwise the cost of hoisting out will\n // outweigh the benefits and it's better off to just always render it fresh.\n if (node.static && node.children.length && !(\n node.children.length === 1 &&\n node.children[0].type === 3\n )) {\n node.staticRoot = true;\n return\n } else {\n node.staticRoot = false;\n }\n if (node.children) {\n for (var i = 0, l = node.children.length; i < l; i++) {\n markStaticRoots(node.children[i], isInFor || !!node.for);\n }\n }\n if (node.ifConditions) {\n for (var i$1 = 1, l$1 = node.ifConditions.length; i$1 < l$1; i$1++) {\n markStaticRoots(node.ifConditions[i$1].block, isInFor);\n }\n }\n }\n}\n\nfunction isStatic (node) {\n if (node.type === 2) { // expression\n return false\n }\n if (node.type === 3) { // text\n return true\n }\n return !!(node.pre || (\n !node.hasBindings && // no dynamic bindings\n !node.if && !node.for && // not v-if or v-for or v-else\n !isBuiltInTag(node.tag) && // not a built-in\n isPlatformReservedTag(node.tag) && // not a component\n !isDirectChildOfTemplateFor(node) &&\n Object.keys(node).every(isStaticKey)\n ))\n}\n\nfunction isDirectChildOfTemplateFor (node) {\n while (node.parent) {\n node = node.parent;\n if (node.tag !== 'template') {\n return false\n }\n if (node.for) {\n return true\n }\n }\n return false\n}\n\n/* */\n\nvar fnExpRE = /^([\\w$_]+|\\([^)]*?\\))\\s*=>|^function\\s*(?:[\\w$]+)?\\s*\\(/;\nvar fnInvokeRE = /\\([^)]*?\\);*$/;\nvar simplePathRE = /^[A-Za-z_$][\\w$]*(?:\\.[A-Za-z_$][\\w$]*|\\['[^']*?']|\\[\"[^\"]*?\"]|\\[\\d+]|\\[[A-Za-z_$][\\w$]*])*$/;\n\n// KeyboardEvent.keyCode aliases\nvar keyCodes = {\n esc: 27,\n tab: 9,\n enter: 13,\n space: 32,\n up: 38,\n left: 37,\n right: 39,\n down: 40,\n 'delete': [8, 46]\n};\n\n// KeyboardEvent.key aliases\nvar keyNames = {\n // #7880: IE11 and Edge use `Esc` for Escape key name.\n esc: ['Esc', 'Escape'],\n tab: 'Tab',\n enter: 'Enter',\n // #9112: IE11 uses `Spacebar` for Space key name.\n space: [' ', 'Spacebar'],\n // #7806: IE11 uses key names without `Arrow` prefix for arrow keys.\n up: ['Up', 'ArrowUp'],\n left: ['Left', 'ArrowLeft'],\n right: ['Right', 'ArrowRight'],\n down: ['Down', 'ArrowDown'],\n // #9112: IE11 uses `Del` for Delete key name.\n 'delete': ['Backspace', 'Delete', 'Del']\n};\n\n// #4868: modifiers that prevent the execution of the listener\n// need to explicitly return null so that we can determine whether to remove\n// the listener for .once\nvar genGuard = function (condition) { return (\"if(\" + condition + \")return null;\"); };\n\nvar modifierCode = {\n stop: '$event.stopPropagation();',\n prevent: '$event.preventDefault();',\n self: genGuard(\"$event.target !== $event.currentTarget\"),\n ctrl: genGuard(\"!$event.ctrlKey\"),\n shift: genGuard(\"!$event.shiftKey\"),\n alt: genGuard(\"!$event.altKey\"),\n meta: genGuard(\"!$event.metaKey\"),\n left: genGuard(\"'button' in $event && $event.button !== 0\"),\n middle: genGuard(\"'button' in $event && $event.button !== 1\"),\n right: genGuard(\"'button' in $event && $event.button !== 2\")\n};\n\nfunction genHandlers (\n events,\n isNative\n) {\n var prefix = isNative ? 'nativeOn:' : 'on:';\n var staticHandlers = \"\";\n var dynamicHandlers = \"\";\n for (var name in events) {\n var handlerCode = genHandler(events[name]);\n if (events[name] && events[name].dynamic) {\n dynamicHandlers += name + \",\" + handlerCode + \",\";\n } else {\n staticHandlers += \"\\\"\" + name + \"\\\":\" + handlerCode + \",\";\n }\n }\n staticHandlers = \"{\" + (staticHandlers.slice(0, -1)) + \"}\";\n if (dynamicHandlers) {\n return prefix + \"_d(\" + staticHandlers + \",[\" + (dynamicHandlers.slice(0, -1)) + \"])\"\n } else {\n return prefix + staticHandlers\n }\n}\n\nfunction genHandler (handler) {\n if (!handler) {\n return 'function(){}'\n }\n\n if (Array.isArray(handler)) {\n return (\"[\" + (handler.map(function (handler) { return genHandler(handler); }).join(',')) + \"]\")\n }\n\n var isMethodPath = simplePathRE.test(handler.value);\n var isFunctionExpression = fnExpRE.test(handler.value);\n var isFunctionInvocation = simplePathRE.test(handler.value.replace(fnInvokeRE, ''));\n\n if (!handler.modifiers) {\n if (isMethodPath || isFunctionExpression) {\n return handler.value\n }\n return (\"function($event){\" + (isFunctionInvocation ? (\"return \" + (handler.value)) : handler.value) + \"}\") // inline statement\n } else {\n var code = '';\n var genModifierCode = '';\n var keys = [];\n for (var key in handler.modifiers) {\n if (modifierCode[key]) {\n genModifierCode += modifierCode[key];\n // left/right\n if (keyCodes[key]) {\n keys.push(key);\n }\n } else if (key === 'exact') {\n var modifiers = (handler.modifiers);\n genModifierCode += genGuard(\n ['ctrl', 'shift', 'alt', 'meta']\n .filter(function (keyModifier) { return !modifiers[keyModifier]; })\n .map(function (keyModifier) { return (\"$event.\" + keyModifier + \"Key\"); })\n .join('||')\n );\n } else {\n keys.push(key);\n }\n }\n if (keys.length) {\n code += genKeyFilter(keys);\n }\n // Make sure modifiers like prevent and stop get executed after key filtering\n if (genModifierCode) {\n code += genModifierCode;\n }\n var handlerCode = isMethodPath\n ? (\"return \" + (handler.value) + \"($event)\")\n : isFunctionExpression\n ? (\"return (\" + (handler.value) + \")($event)\")\n : isFunctionInvocation\n ? (\"return \" + (handler.value))\n : handler.value;\n return (\"function($event){\" + code + handlerCode + \"}\")\n }\n}\n\nfunction genKeyFilter (keys) {\n return (\n // make sure the key filters only apply to KeyboardEvents\n // #9441: can't use 'keyCode' in $event because Chrome autofill fires fake\n // key events that do not have keyCode property...\n \"if(!$event.type.indexOf('key')&&\" +\n (keys.map(genFilterCode).join('&&')) + \")return null;\"\n )\n}\n\nfunction genFilterCode (key) {\n var keyVal = parseInt(key, 10);\n if (keyVal) {\n return (\"$event.keyCode!==\" + keyVal)\n }\n var keyCode = keyCodes[key];\n var keyName = keyNames[key];\n return (\n \"_k($event.keyCode,\" +\n (JSON.stringify(key)) + \",\" +\n (JSON.stringify(keyCode)) + \",\" +\n \"$event.key,\" +\n \"\" + (JSON.stringify(keyName)) +\n \")\"\n )\n}\n\n/* */\n\nfunction on (el, dir) {\n if (dir.modifiers) {\n warn(\"v-on without argument does not support modifiers.\");\n }\n el.wrapListeners = function (code) { return (\"_g(\" + code + \",\" + (dir.value) + \")\"); };\n}\n\n/* */\n\nfunction bind$1 (el, dir) {\n el.wrapData = function (code) {\n return (\"_b(\" + code + \",'\" + (el.tag) + \"',\" + (dir.value) + \",\" + (dir.modifiers && dir.modifiers.prop ? 'true' : 'false') + (dir.modifiers && dir.modifiers.sync ? ',true' : '') + \")\")\n };\n}\n\n/* */\n\nvar baseDirectives = {\n on: on,\n bind: bind$1,\n cloak: noop\n};\n\n/* */\n\n\n\n\n\nvar CodegenState = function CodegenState (options) {\n this.options = options;\n this.warn = options.warn || baseWarn;\n this.transforms = pluckModuleFunction(options.modules, 'transformCode');\n this.dataGenFns = pluckModuleFunction(options.modules, 'genData');\n this.directives = extend(extend({}, baseDirectives), options.directives);\n var isReservedTag = options.isReservedTag || no;\n this.maybeComponent = function (el) { return !!el.component || !isReservedTag(el.tag); };\n this.onceId = 0;\n this.staticRenderFns = [];\n this.pre = false;\n};\n\n\n\nfunction generate (\n ast,\n options\n) {\n var state = new CodegenState(options);\n var code = ast ? genElement(ast, state) : '_c(\"div\")';\n return {\n render: (\"with(this){return \" + code + \"}\"),\n staticRenderFns: state.staticRenderFns\n }\n}\n\nfunction genElement (el, state) {\n if (el.parent) {\n el.pre = el.pre || el.parent.pre;\n }\n\n if (el.staticRoot && !el.staticProcessed) {\n return genStatic(el, state)\n } else if (el.once && !el.onceProcessed) {\n return genOnce(el, state)\n } else if (el.for && !el.forProcessed) {\n return genFor(el, state)\n } else if (el.if && !el.ifProcessed) {\n return genIf(el, state)\n } else if (el.tag === 'template' && !el.slotTarget && !state.pre) {\n return genChildren(el, state) || 'void 0'\n } else if (el.tag === 'slot') {\n return genSlot(el, state)\n } else {\n // component or element\n var code;\n if (el.component) {\n code = genComponent(el.component, el, state);\n } else {\n var data;\n if (!el.plain || (el.pre && state.maybeComponent(el))) {\n data = genData$2(el, state);\n }\n\n var children = el.inlineTemplate ? null : genChildren(el, state, true);\n code = \"_c('\" + (el.tag) + \"'\" + (data ? (\",\" + data) : '') + (children ? (\",\" + children) : '') + \")\";\n }\n // module transforms\n for (var i = 0; i < state.transforms.length; i++) {\n code = state.transforms[i](el, code);\n }\n return code\n }\n}\n\n// hoist static sub-trees out\nfunction genStatic (el, state) {\n el.staticProcessed = true;\n // Some elements (templates) need to behave differently inside of a v-pre\n // node. All pre nodes are static roots, so we can use this as a location to\n // wrap a state change and reset it upon exiting the pre node.\n var originalPreState = state.pre;\n if (el.pre) {\n state.pre = el.pre;\n }\n state.staticRenderFns.push((\"with(this){return \" + (genElement(el, state)) + \"}\"));\n state.pre = originalPreState;\n return (\"_m(\" + (state.staticRenderFns.length - 1) + (el.staticInFor ? ',true' : '') + \")\")\n}\n\n// v-once\nfunction genOnce (el, state) {\n el.onceProcessed = true;\n if (el.if && !el.ifProcessed) {\n return genIf(el, state)\n } else if (el.staticInFor) {\n var key = '';\n var parent = el.parent;\n while (parent) {\n if (parent.for) {\n key = parent.key;\n break\n }\n parent = parent.parent;\n }\n if (!key) {\n state.warn(\n \"v-once can only be used inside v-for that is keyed. \",\n el.rawAttrsMap['v-once']\n );\n return genElement(el, state)\n }\n return (\"_o(\" + (genElement(el, state)) + \",\" + (state.onceId++) + \",\" + key + \")\")\n } else {\n return genStatic(el, state)\n }\n}\n\nfunction genIf (\n el,\n state,\n altGen,\n altEmpty\n) {\n el.ifProcessed = true; // avoid recursion\n return genIfConditions(el.ifConditions.slice(), state, altGen, altEmpty)\n}\n\nfunction genIfConditions (\n conditions,\n state,\n altGen,\n altEmpty\n) {\n if (!conditions.length) {\n return altEmpty || '_e()'\n }\n\n var condition = conditions.shift();\n if (condition.exp) {\n return (\"(\" + (condition.exp) + \")?\" + (genTernaryExp(condition.block)) + \":\" + (genIfConditions(conditions, state, altGen, altEmpty)))\n } else {\n return (\"\" + (genTernaryExp(condition.block)))\n }\n\n // v-if with v-once should generate code like (a)?_m(0):_m(1)\n function genTernaryExp (el) {\n return altGen\n ? altGen(el, state)\n : el.once\n ? genOnce(el, state)\n : genElement(el, state)\n }\n}\n\nfunction genFor (\n el,\n state,\n altGen,\n altHelper\n) {\n var exp = el.for;\n var alias = el.alias;\n var iterator1 = el.iterator1 ? (\",\" + (el.iterator1)) : '';\n var iterator2 = el.iterator2 ? (\",\" + (el.iterator2)) : '';\n\n if (state.maybeComponent(el) &&\n el.tag !== 'slot' &&\n el.tag !== 'template' &&\n !el.key\n ) {\n state.warn(\n \"<\" + (el.tag) + \" v-for=\\\"\" + alias + \" in \" + exp + \"\\\">: component lists rendered with \" +\n \"v-for should have explicit keys. \" +\n \"See https://vuejs.org/guide/list.html#key for more info.\",\n el.rawAttrsMap['v-for'],\n true /* tip */\n );\n }\n\n el.forProcessed = true; // avoid recursion\n return (altHelper || '_l') + \"((\" + exp + \"),\" +\n \"function(\" + alias + iterator1 + iterator2 + \"){\" +\n \"return \" + ((altGen || genElement)(el, state)) +\n '})'\n}\n\nfunction genData$2 (el, state) {\n var data = '{';\n\n // directives first.\n // directives may mutate the el's other properties before they are generated.\n var dirs = genDirectives(el, state);\n if (dirs) { data += dirs + ','; }\n\n // key\n if (el.key) {\n data += \"key:\" + (el.key) + \",\";\n }\n // ref\n if (el.ref) {\n data += \"ref:\" + (el.ref) + \",\";\n }\n if (el.refInFor) {\n data += \"refInFor:true,\";\n }\n // pre\n if (el.pre) {\n data += \"pre:true,\";\n }\n // record original tag name for components using \"is\" attribute\n if (el.component) {\n data += \"tag:\\\"\" + (el.tag) + \"\\\",\";\n }\n // module data generation functions\n for (var i = 0; i < state.dataGenFns.length; i++) {\n data += state.dataGenFns[i](el);\n }\n // attributes\n if (el.attrs) {\n data += \"attrs:\" + (genProps(el.attrs)) + \",\";\n }\n // DOM props\n if (el.props) {\n data += \"domProps:\" + (genProps(el.props)) + \",\";\n }\n // event handlers\n if (el.events) {\n data += (genHandlers(el.events, false)) + \",\";\n }\n if (el.nativeEvents) {\n data += (genHandlers(el.nativeEvents, true)) + \",\";\n }\n // slot target\n // only for non-scoped slots\n if (el.slotTarget && !el.slotScope) {\n data += \"slot:\" + (el.slotTarget) + \",\";\n }\n // scoped slots\n if (el.scopedSlots) {\n data += (genScopedSlots(el, el.scopedSlots, state)) + \",\";\n }\n // component v-model\n if (el.model) {\n data += \"model:{value:\" + (el.model.value) + \",callback:\" + (el.model.callback) + \",expression:\" + (el.model.expression) + \"},\";\n }\n // inline-template\n if (el.inlineTemplate) {\n var inlineTemplate = genInlineTemplate(el, state);\n if (inlineTemplate) {\n data += inlineTemplate + \",\";\n }\n }\n data = data.replace(/,$/, '') + '}';\n // v-bind dynamic argument wrap\n // v-bind with dynamic arguments must be applied using the same v-bind object\n // merge helper so that class/style/mustUseProp attrs are handled correctly.\n if (el.dynamicAttrs) {\n data = \"_b(\" + data + \",\\\"\" + (el.tag) + \"\\\",\" + (genProps(el.dynamicAttrs)) + \")\";\n }\n // v-bind data wrap\n if (el.wrapData) {\n data = el.wrapData(data);\n }\n // v-on data wrap\n if (el.wrapListeners) {\n data = el.wrapListeners(data);\n }\n return data\n}\n\nfunction genDirectives (el, state) {\n var dirs = el.directives;\n if (!dirs) { return }\n var res = 'directives:[';\n var hasRuntime = false;\n var i, l, dir, needRuntime;\n for (i = 0, l = dirs.length; i < l; i++) {\n dir = dirs[i];\n needRuntime = true;\n var gen = state.directives[dir.name];\n if (gen) {\n // compile-time directive that manipulates AST.\n // returns true if it also needs a runtime counterpart.\n needRuntime = !!gen(el, dir, state.warn);\n }\n if (needRuntime) {\n hasRuntime = true;\n res += \"{name:\\\"\" + (dir.name) + \"\\\",rawName:\\\"\" + (dir.rawName) + \"\\\"\" + (dir.value ? (\",value:(\" + (dir.value) + \"),expression:\" + (JSON.stringify(dir.value))) : '') + (dir.arg ? (\",arg:\" + (dir.isDynamicArg ? dir.arg : (\"\\\"\" + (dir.arg) + \"\\\"\"))) : '') + (dir.modifiers ? (\",modifiers:\" + (JSON.stringify(dir.modifiers))) : '') + \"},\";\n }\n }\n if (hasRuntime) {\n return res.slice(0, -1) + ']'\n }\n}\n\nfunction genInlineTemplate (el, state) {\n var ast = el.children[0];\n if (el.children.length !== 1 || ast.type !== 1) {\n state.warn(\n 'Inline-template components must have exactly one child element.',\n { start: el.start }\n );\n }\n if (ast && ast.type === 1) {\n var inlineRenderFns = generate(ast, state.options);\n return (\"inlineTemplate:{render:function(){\" + (inlineRenderFns.render) + \"},staticRenderFns:[\" + (inlineRenderFns.staticRenderFns.map(function (code) { return (\"function(){\" + code + \"}\"); }).join(',')) + \"]}\")\n }\n}\n\nfunction genScopedSlots (\n el,\n slots,\n state\n) {\n // by default scoped slots are considered \"stable\", this allows child\n // components with only scoped slots to skip forced updates from parent.\n // but in some cases we have to bail-out of this optimization\n // for example if the slot contains dynamic names, has v-if or v-for on them...\n var needsForceUpdate = el.for || Object.keys(slots).some(function (key) {\n var slot = slots[key];\n return (\n slot.slotTargetDynamic ||\n slot.if ||\n slot.for ||\n containsSlotChild(slot) // is passing down slot from parent which may be dynamic\n )\n });\n\n // #9534: if a component with scoped slots is inside a conditional branch,\n // it's possible for the same component to be reused but with different\n // compiled slot content. To avoid that, we generate a unique key based on\n // the generated code of all the slot contents.\n var needsKey = !!el.if;\n\n // OR when it is inside another scoped slot or v-for (the reactivity may be\n // disconnected due to the intermediate scope variable)\n // #9438, #9506\n // TODO: this can be further optimized by properly analyzing in-scope bindings\n // and skip force updating ones that do not actually use scope variables.\n if (!needsForceUpdate) {\n var parent = el.parent;\n while (parent) {\n if (\n (parent.slotScope && parent.slotScope !== emptySlotScopeToken) ||\n parent.for\n ) {\n needsForceUpdate = true;\n break\n }\n if (parent.if) {\n needsKey = true;\n }\n parent = parent.parent;\n }\n }\n\n var generatedSlots = Object.keys(slots)\n .map(function (key) { return genScopedSlot(slots[key], state); })\n .join(',');\n\n return (\"scopedSlots:_u([\" + generatedSlots + \"]\" + (needsForceUpdate ? \",null,true\" : \"\") + (!needsForceUpdate && needsKey ? (\",null,false,\" + (hash(generatedSlots))) : \"\") + \")\")\n}\n\nfunction hash(str) {\n var hash = 5381;\n var i = str.length;\n while(i) {\n hash = (hash * 33) ^ str.charCodeAt(--i);\n }\n return hash >>> 0\n}\n\nfunction containsSlotChild (el) {\n if (el.type === 1) {\n if (el.tag === 'slot') {\n return true\n }\n return el.children.some(containsSlotChild)\n }\n return false\n}\n\nfunction genScopedSlot (\n el,\n state\n) {\n var isLegacySyntax = el.attrsMap['slot-scope'];\n if (el.if && !el.ifProcessed && !isLegacySyntax) {\n return genIf(el, state, genScopedSlot, \"null\")\n }\n if (el.for && !el.forProcessed) {\n return genFor(el, state, genScopedSlot)\n }\n var slotScope = el.slotScope === emptySlotScopeToken\n ? \"\"\n : String(el.slotScope);\n var fn = \"function(\" + slotScope + \"){\" +\n \"return \" + (el.tag === 'template'\n ? el.if && isLegacySyntax\n ? (\"(\" + (el.if) + \")?\" + (genChildren(el, state) || 'undefined') + \":undefined\")\n : genChildren(el, state) || 'undefined'\n : genElement(el, state)) + \"}\";\n // reverse proxy v-slot without scope on this.$slots\n var reverseProxy = slotScope ? \"\" : \",proxy:true\";\n return (\"{key:\" + (el.slotTarget || \"\\\"default\\\"\") + \",fn:\" + fn + reverseProxy + \"}\")\n}\n\nfunction genChildren (\n el,\n state,\n checkSkip,\n altGenElement,\n altGenNode\n) {\n var children = el.children;\n if (children.length) {\n var el$1 = children[0];\n // optimize single v-for\n if (children.length === 1 &&\n el$1.for &&\n el$1.tag !== 'template' &&\n el$1.tag !== 'slot'\n ) {\n var normalizationType = checkSkip\n ? state.maybeComponent(el$1) ? \",1\" : \",0\"\n : \"\";\n return (\"\" + ((altGenElement || genElement)(el$1, state)) + normalizationType)\n }\n var normalizationType$1 = checkSkip\n ? getNormalizationType(children, state.maybeComponent)\n : 0;\n var gen = altGenNode || genNode;\n return (\"[\" + (children.map(function (c) { return gen(c, state); }).join(',')) + \"]\" + (normalizationType$1 ? (\",\" + normalizationType$1) : ''))\n }\n}\n\n// determine the normalization needed for the children array.\n// 0: no normalization needed\n// 1: simple normalization needed (possible 1-level deep nested array)\n// 2: full normalization needed\nfunction getNormalizationType (\n children,\n maybeComponent\n) {\n var res = 0;\n for (var i = 0; i < children.length; i++) {\n var el = children[i];\n if (el.type !== 1) {\n continue\n }\n if (needsNormalization(el) ||\n (el.ifConditions && el.ifConditions.some(function (c) { return needsNormalization(c.block); }))) {\n res = 2;\n break\n }\n if (maybeComponent(el) ||\n (el.ifConditions && el.ifConditions.some(function (c) { return maybeComponent(c.block); }))) {\n res = 1;\n }\n }\n return res\n}\n\nfunction needsNormalization (el) {\n return el.for !== undefined || el.tag === 'template' || el.tag === 'slot'\n}\n\nfunction genNode (node, state) {\n if (node.type === 1) {\n return genElement(node, state)\n } else if (node.type === 3 && node.isComment) {\n return genComment(node)\n } else {\n return genText(node)\n }\n}\n\nfunction genText (text) {\n return (\"_v(\" + (text.type === 2\n ? text.expression // no need for () because already wrapped in _s()\n : transformSpecialNewlines(JSON.stringify(text.text))) + \")\")\n}\n\nfunction genComment (comment) {\n return (\"_e(\" + (JSON.stringify(comment.text)) + \")\")\n}\n\nfunction genSlot (el, state) {\n var slotName = el.slotName || '\"default\"';\n var children = genChildren(el, state);\n var res = \"_t(\" + slotName + (children ? (\",\" + children) : '');\n var attrs = el.attrs || el.dynamicAttrs\n ? genProps((el.attrs || []).concat(el.dynamicAttrs || []).map(function (attr) { return ({\n // slot props are camelized\n name: camelize(attr.name),\n value: attr.value,\n dynamic: attr.dynamic\n }); }))\n : null;\n var bind$$1 = el.attrsMap['v-bind'];\n if ((attrs || bind$$1) && !children) {\n res += \",null\";\n }\n if (attrs) {\n res += \",\" + attrs;\n }\n if (bind$$1) {\n res += (attrs ? '' : ',null') + \",\" + bind$$1;\n }\n return res + ')'\n}\n\n// componentName is el.component, take it as argument to shun flow's pessimistic refinement\nfunction genComponent (\n componentName,\n el,\n state\n) {\n var children = el.inlineTemplate ? null : genChildren(el, state, true);\n return (\"_c(\" + componentName + \",\" + (genData$2(el, state)) + (children ? (\",\" + children) : '') + \")\")\n}\n\nfunction genProps (props) {\n var staticProps = \"\";\n var dynamicProps = \"\";\n for (var i = 0; i < props.length; i++) {\n var prop = props[i];\n var value = transformSpecialNewlines(prop.value);\n if (prop.dynamic) {\n dynamicProps += (prop.name) + \",\" + value + \",\";\n } else {\n staticProps += \"\\\"\" + (prop.name) + \"\\\":\" + value + \",\";\n }\n }\n staticProps = \"{\" + (staticProps.slice(0, -1)) + \"}\";\n if (dynamicProps) {\n return (\"_d(\" + staticProps + \",[\" + (dynamicProps.slice(0, -1)) + \"])\")\n } else {\n return staticProps\n }\n}\n\n// #3895, #4268\nfunction transformSpecialNewlines (text) {\n return text\n .replace(/\\u2028/g, '\\\\u2028')\n .replace(/\\u2029/g, '\\\\u2029')\n}\n\n/* */\n\n\n\n// these keywords should not appear inside expressions, but operators like\n// typeof, instanceof and in are allowed\nvar prohibitedKeywordRE = new RegExp('\\\\b' + (\n 'do,if,for,let,new,try,var,case,else,with,await,break,catch,class,const,' +\n 'super,throw,while,yield,delete,export,import,return,switch,default,' +\n 'extends,finally,continue,debugger,function,arguments'\n).split(',').join('\\\\b|\\\\b') + '\\\\b');\n\n// these unary operators should not be used as property/method names\nvar unaryOperatorsRE = new RegExp('\\\\b' + (\n 'delete,typeof,void'\n).split(',').join('\\\\s*\\\\([^\\\\)]*\\\\)|\\\\b') + '\\\\s*\\\\([^\\\\)]*\\\\)');\n\n// strip strings in expressions\nvar stripStringRE = /'(?:[^'\\\\]|\\\\.)*'|\"(?:[^\"\\\\]|\\\\.)*\"|`(?:[^`\\\\]|\\\\.)*\\$\\{|\\}(?:[^`\\\\]|\\\\.)*`|`(?:[^`\\\\]|\\\\.)*`/g;\n\n// detect problematic expressions in a template\nfunction detectErrors (ast, warn) {\n if (ast) {\n checkNode(ast, warn);\n }\n}\n\nfunction checkNode (node, warn) {\n if (node.type === 1) {\n for (var name in node.attrsMap) {\n if (dirRE.test(name)) {\n var value = node.attrsMap[name];\n if (value) {\n var range = node.rawAttrsMap[name];\n if (name === 'v-for') {\n checkFor(node, (\"v-for=\\\"\" + value + \"\\\"\"), warn, range);\n } else if (onRE.test(name)) {\n checkEvent(value, (name + \"=\\\"\" + value + \"\\\"\"), warn, range);\n } else {\n checkExpression(value, (name + \"=\\\"\" + value + \"\\\"\"), warn, range);\n }\n }\n }\n }\n if (node.children) {\n for (var i = 0; i < node.children.length; i++) {\n checkNode(node.children[i], warn);\n }\n }\n } else if (node.type === 2) {\n checkExpression(node.expression, node.text, warn, node);\n }\n}\n\nfunction checkEvent (exp, text, warn, range) {\n var stipped = exp.replace(stripStringRE, '');\n var keywordMatch = stipped.match(unaryOperatorsRE);\n if (keywordMatch && stipped.charAt(keywordMatch.index - 1) !== '$') {\n warn(\n \"avoid using JavaScript unary operator as property name: \" +\n \"\\\"\" + (keywordMatch[0]) + \"\\\" in expression \" + (text.trim()),\n range\n );\n }\n checkExpression(exp, text, warn, range);\n}\n\nfunction checkFor (node, text, warn, range) {\n checkExpression(node.for || '', text, warn, range);\n checkIdentifier(node.alias, 'v-for alias', text, warn, range);\n checkIdentifier(node.iterator1, 'v-for iterator', text, warn, range);\n checkIdentifier(node.iterator2, 'v-for iterator', text, warn, range);\n}\n\nfunction checkIdentifier (\n ident,\n type,\n text,\n warn,\n range\n) {\n if (typeof ident === 'string') {\n try {\n new Function((\"var \" + ident + \"=_\"));\n } catch (e) {\n warn((\"invalid \" + type + \" \\\"\" + ident + \"\\\" in expression: \" + (text.trim())), range);\n }\n }\n}\n\nfunction checkExpression (exp, text, warn, range) {\n try {\n new Function((\"return \" + exp));\n } catch (e) {\n var keywordMatch = exp.replace(stripStringRE, '').match(prohibitedKeywordRE);\n if (keywordMatch) {\n warn(\n \"avoid using JavaScript keyword as property name: \" +\n \"\\\"\" + (keywordMatch[0]) + \"\\\"\\n Raw expression: \" + (text.trim()),\n range\n );\n } else {\n warn(\n \"invalid expression: \" + (e.message) + \" in\\n\\n\" +\n \" \" + exp + \"\\n\\n\" +\n \" Raw expression: \" + (text.trim()) + \"\\n\",\n range\n );\n }\n }\n}\n\n/* */\n\nvar range = 2;\n\nfunction generateCodeFrame (\n source,\n start,\n end\n) {\n if ( start === void 0 ) start = 0;\n if ( end === void 0 ) end = source.length;\n\n var lines = source.split(/\\r?\\n/);\n var count = 0;\n var res = [];\n for (var i = 0; i < lines.length; i++) {\n count += lines[i].length + 1;\n if (count >= start) {\n for (var j = i - range; j <= i + range || end > count; j++) {\n if (j < 0 || j >= lines.length) { continue }\n res.push((\"\" + (j + 1) + (repeat$1(\" \", 3 - String(j + 1).length)) + \"| \" + (lines[j])));\n var lineLength = lines[j].length;\n if (j === i) {\n // push underline\n var pad = start - (count - lineLength) + 1;\n var length = end > count ? lineLength - pad : end - start;\n res.push(\" | \" + repeat$1(\" \", pad) + repeat$1(\"^\", length));\n } else if (j > i) {\n if (end > count) {\n var length$1 = Math.min(end - count, lineLength);\n res.push(\" | \" + repeat$1(\"^\", length$1));\n }\n count += lineLength + 1;\n }\n }\n break\n }\n }\n return res.join('\\n')\n}\n\nfunction repeat$1 (str, n) {\n var result = '';\n if (n > 0) {\n while (true) { // eslint-disable-line\n if (n & 1) { result += str; }\n n >>>= 1;\n if (n <= 0) { break }\n str += str;\n }\n }\n return result\n}\n\n/* */\n\n\n\nfunction createFunction (code, errors) {\n try {\n return new Function(code)\n } catch (err) {\n errors.push({ err: err, code: code });\n return noop\n }\n}\n\nfunction createCompileToFunctionFn (compile) {\n var cache = Object.create(null);\n\n return function compileToFunctions (\n template,\n options,\n vm\n ) {\n options = extend({}, options);\n var warn$$1 = options.warn || warn;\n delete options.warn;\n\n /* istanbul ignore if */\n {\n // detect possible CSP restriction\n try {\n new Function('return 1');\n } catch (e) {\n if (e.toString().match(/unsafe-eval|CSP/)) {\n warn$$1(\n 'It seems you are using the standalone build of Vue.js in an ' +\n 'environment with Content Security Policy that prohibits unsafe-eval. ' +\n 'The template compiler cannot work in this environment. Consider ' +\n 'relaxing the policy to allow unsafe-eval or pre-compiling your ' +\n 'templates into render functions.'\n );\n }\n }\n }\n\n // check cache\n var key = options.delimiters\n ? String(options.delimiters) + template\n : template;\n if (cache[key]) {\n return cache[key]\n }\n\n // compile\n var compiled = compile(template, options);\n\n // check compilation errors/tips\n {\n if (compiled.errors && compiled.errors.length) {\n if (options.outputSourceRange) {\n compiled.errors.forEach(function (e) {\n warn$$1(\n \"Error compiling template:\\n\\n\" + (e.msg) + \"\\n\\n\" +\n generateCodeFrame(template, e.start, e.end),\n vm\n );\n });\n } else {\n warn$$1(\n \"Error compiling template:\\n\\n\" + template + \"\\n\\n\" +\n compiled.errors.map(function (e) { return (\"- \" + e); }).join('\\n') + '\\n',\n vm\n );\n }\n }\n if (compiled.tips && compiled.tips.length) {\n if (options.outputSourceRange) {\n compiled.tips.forEach(function (e) { return tip(e.msg, vm); });\n } else {\n compiled.tips.forEach(function (msg) { return tip(msg, vm); });\n }\n }\n }\n\n // turn code into functions\n var res = {};\n var fnGenErrors = [];\n res.render = createFunction(compiled.render, fnGenErrors);\n res.staticRenderFns = compiled.staticRenderFns.map(function (code) {\n return createFunction(code, fnGenErrors)\n });\n\n // check function generation errors.\n // this should only happen if there is a bug in the compiler itself.\n // mostly for codegen development use\n /* istanbul ignore if */\n {\n if ((!compiled.errors || !compiled.errors.length) && fnGenErrors.length) {\n warn$$1(\n \"Failed to generate render function:\\n\\n\" +\n fnGenErrors.map(function (ref) {\n var err = ref.err;\n var code = ref.code;\n\n return ((err.toString()) + \" in\\n\\n\" + code + \"\\n\");\n }).join('\\n'),\n vm\n );\n }\n }\n\n return (cache[key] = res)\n }\n}\n\n/* */\n\nfunction createCompilerCreator (baseCompile) {\n return function createCompiler (baseOptions) {\n function compile (\n template,\n options\n ) {\n var finalOptions = Object.create(baseOptions);\n var errors = [];\n var tips = [];\n\n var warn = function (msg, range, tip) {\n (tip ? tips : errors).push(msg);\n };\n\n if (options) {\n if (options.outputSourceRange) {\n // $flow-disable-line\n var leadingSpaceLength = template.match(/^\\s*/)[0].length;\n\n warn = function (msg, range, tip) {\n var data = { msg: msg };\n if (range) {\n if (range.start != null) {\n data.start = range.start + leadingSpaceLength;\n }\n if (range.end != null) {\n data.end = range.end + leadingSpaceLength;\n }\n }\n (tip ? tips : errors).push(data);\n };\n }\n // merge custom modules\n if (options.modules) {\n finalOptions.modules =\n (baseOptions.modules || []).concat(options.modules);\n }\n // merge custom directives\n if (options.directives) {\n finalOptions.directives = extend(\n Object.create(baseOptions.directives || null),\n options.directives\n );\n }\n // copy other options\n for (var key in options) {\n if (key !== 'modules' && key !== 'directives') {\n finalOptions[key] = options[key];\n }\n }\n }\n\n finalOptions.warn = warn;\n\n var compiled = baseCompile(template.trim(), finalOptions);\n {\n detectErrors(compiled.ast, warn);\n }\n compiled.errors = errors;\n compiled.tips = tips;\n return compiled\n }\n\n return {\n compile: compile,\n compileToFunctions: createCompileToFunctionFn(compile)\n }\n }\n}\n\n/* */\n\n// `createCompilerCreator` allows creating compilers that use alternative\n// parser/optimizer/codegen, e.g the SSR optimizing compiler.\n// Here we just export a default compiler using the default parts.\nvar createCompiler = createCompilerCreator(function baseCompile (\n template,\n options\n) {\n var ast = parse(template.trim(), options);\n if (options.optimize !== false) {\n optimize(ast, options);\n }\n var code = generate(ast, options);\n return {\n ast: ast,\n render: code.render,\n staticRenderFns: code.staticRenderFns\n }\n});\n\n/* */\n\nvar ref$1 = createCompiler(baseOptions);\nvar compile = ref$1.compile;\nvar compileToFunctions = ref$1.compileToFunctions;\n\n/* */\n\n// check whether current browser encodes a char inside attribute values\nvar div;\nfunction getShouldDecode (href) {\n div = div || document.createElement('div');\n div.innerHTML = href ? \"<a href=\\\"\\n\\\"/>\" : \"<div a=\\\"\\n\\\"/>\";\n return div.innerHTML.indexOf(' ') > 0\n}\n\n// #3663: IE encodes newlines inside attribute values while other browsers don't\nvar shouldDecodeNewlines = inBrowser ? getShouldDecode(false) : false;\n// #6828: chrome encodes content in a[href]\nvar shouldDecodeNewlinesForHref = inBrowser ? getShouldDecode(true) : false;\n\n/* */\n\nvar idToTemplate = cached(function (id) {\n var el = query(id);\n return el && el.innerHTML\n});\n\nvar mount = Vue.prototype.$mount;\nVue.prototype.$mount = function (\n el,\n hydrating\n) {\n el = el && query(el);\n\n /* istanbul ignore if */\n if (el === document.body || el === document.documentElement) {\n warn(\n \"Do not mount Vue to <html> or <body> - mount to normal elements instead.\"\n );\n return this\n }\n\n var options = this.$options;\n // resolve template/el and convert to render function\n if (!options.render) {\n var template = options.template;\n if (template) {\n if (typeof template === 'string') {\n if (template.charAt(0) === '#') {\n template = idToTemplate(template);\n /* istanbul ignore if */\n if (!template) {\n warn(\n (\"Template element not found or is empty: \" + (options.template)),\n this\n );\n }\n }\n } else if (template.nodeType) {\n template = template.innerHTML;\n } else {\n {\n warn('invalid template option:' + template, this);\n }\n return this\n }\n } else if (el) {\n template = getOuterHTML(el);\n }\n if (template) {\n /* istanbul ignore if */\n if (config.performance && mark) {\n mark('compile');\n }\n\n var ref = compileToFunctions(template, {\n outputSourceRange: \"development\" !== 'production',\n shouldDecodeNewlines: shouldDecodeNewlines,\n shouldDecodeNewlinesForHref: shouldDecodeNewlinesForHref,\n delimiters: options.delimiters,\n comments: options.comments\n }, this);\n var render = ref.render;\n var staticRenderFns = ref.staticRenderFns;\n options.render = render;\n options.staticRenderFns = staticRenderFns;\n\n /* istanbul ignore if */\n if (config.performance && mark) {\n mark('compile end');\n measure((\"vue \" + (this._name) + \" compile\"), 'compile', 'compile end');\n }\n }\n }\n return mount.call(this, el, hydrating)\n};\n\n/**\n * Get outerHTML of elements, taking care\n * of SVG elements in IE as well.\n */\nfunction getOuterHTML (el) {\n if (el.outerHTML) {\n return el.outerHTML\n } else {\n var container = document.createElement('div');\n container.appendChild(el.cloneNode(true));\n return container.innerHTML\n }\n}\n\nVue.compile = compileToFunctions;\n\nmodule.exports = Vue;\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../webpack/buildin/global.js */ \"./node_modules/webpack/buildin/global.js\"), __webpack_require__(/*! ./../../timers-browserify/main.js */ \"./node_modules/timers-browserify/main.js\").setImmediate))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdnVlL2Rpc3QvdnVlLmNvbW1vbi5kZXYuanM/NDY1MCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ2E7O0FBRWI7O0FBRUEsa0NBQWtDOztBQUVsQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixpQkFBaUI7QUFDbEM7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLCtCQUErQjtBQUNyRCxzQkFBc0IsaUJBQWlCO0FBQ3ZDOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0RBQWtELGlDQUFpQyxFQUFFO0FBQ3JGLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsZ0JBQWdCO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCLGNBQWM7O0FBRTNDOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QixVQUFVOztBQUV2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsZ0JBQWdCO0FBQ2pDLGtDQUFrQztBQUNsQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixxQkFBcUI7QUFDeEMsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHFCQUFxQjs7QUFFckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSyxHQUFHO0FBQ1I7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLG9DQUFvQztBQUNwQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUM7QUFDakMsdUNBQXVDLHdCQUF3QixFQUFFO0FBQ2pFLDBCQUEwQjs7QUFFMUI7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsWUFBWTtBQUNwQyxrQkFBa0IsWUFBWTtBQUM5QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQkFBK0I7QUFDL0I7QUFDQSx3Q0FBd0MsRUFBRTtBQUMxQztBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixvQkFBb0IsRUFBRTtBQUNyRDtBQUNBLGtDQUFrQyxPQUFPO0FBQ3pDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDBCQUEwQixTQUFTLHFCQUFxQjs7QUFFeEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQiwyQkFBMkI7QUFDOUM7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7O0FBRUQ7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLGlCQUFpQjtBQUNsQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsT0FBTztBQUMxQztBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQyxPQUFPO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEJBQThCO0FBQzlCO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlEQUFpRCxPQUFPO0FBQ3hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxpQkFBaUIsaUJBQWlCO0FBQ2xDO0FBQ0E7QUFDQSwyQkFBMkI7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxpQkFBaUIsa0JBQWtCO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQyx1QkFBdUI7QUFDekQsaUNBQWlDLHNCQUFzQjtBQUN2RDtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBLGlCQUFpQix1QkFBdUI7QUFDeEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBLG1CQUFtQixtQkFBbUI7QUFDdEMsK0JBQStCO0FBQy9CO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixZQUFZO0FBQzlCLFdBQVc7QUFDWDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4QyxPQUFPO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkI7QUFDM0I7QUFDQSxvQ0FBb0M7QUFDcEM7QUFDQSxxQ0FBcUM7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsMkJBQTJCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNB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QUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLHFCQUFxQjtBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsYUFBYSxxQkFBcUI7QUFDbEM7QUFDQSwrQ0FBK0M7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEJBQThCO0FBQzlCO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUssdUZBQXVGO0FBQzVGO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVB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TDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXlDLFNBQVM7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUMsT0FBTztBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwwQkFBMEI7O0FBRTFCLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLHFCQUFxQjtBQUN4QztBQUNBLDBDQUEwQztBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBOztBQUVBO0FB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O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUEsOEJBQThCOztBQUU5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsb0JBQW9CO0FBQ3pDO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQSw4QkFBOEI7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCO0FBQ0Esb0JBQW9CO0FBQ3BCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0IsZUFBZTtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0VBQXNFO0FBQ3RFO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDOztBQUVqQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTs7OztBQUlBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQTtBQUNBLDBDQUEwQywyQkFBMkIsRUFBRTtBQUN2RSxLQUFLO0FBQ0w7QUFDQSwwQ0FBMEMsNEJBQTRCLEVBQUU7QUFDeEUsS0FBSztBQUNMLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixlQUFlO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DLE9BQU87QUFDMUM7QUFDQSxnQkFBZ0IsWUFBWTtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLFlBQVk7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLCtCQUErQixzQkFBc0I7O0FBRXJEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxvQkFBb0I7O0FBRXBCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxnQ0FBZ0M7O0FBRWhDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMEJBQTBCO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLGFBQWE7QUFDakM7QUFDQSxxQkFBcUIsY0FBYztBQUNuQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsYUFBYSxrQkFBa0I7QUFDL0I7QUFDQSxlQUFlLG9CQUFvQjtBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMkRBQTJEO0FBQzNEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlDQUFpQztBQUNqQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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Q0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0NBQW9DLE9BQU87QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLE9BQU87QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx3REFBd0QsbUJBQW1CO0FBQzNFO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLGFBQWE7QUFDcEMsdUJBQXVCLGFBQWE7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUZBQWlGO0FBQ2pGLDRCQUE0QjtBQUM1QjtBQUNBLDJCQUEyQjtBQUMzQix3QkFBd0IsaUVBQWlFO0FBQ3pGLFlBQVksMEZBQTBGO0FBQ3RHLE1BQU0sS0FBSywwQ0FBMEM7QUFDckQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkMsa0JBQWtCO0FBQy9ELHNCQUFzQiwrQ0FBK0M7QUFDckUsaURBQWlEOztBQUVqRDtBQUNBLHNEQUFzRDtBQUN0RDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDhDQUE4QztBQUM5Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQ0FBMkM7QUFDM0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIsMkJBQTJCO0FBQ3RELGtDQUFrQztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTs7QUFFQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyw2Q0FBNkMsRUFBRTtBQUN0RDtBQUNBOztBQUVBO0FBQ0E7QUFDQSxrQ0FBa0M7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLHdCQUF3QjtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBLHVDQUF1QyxTQUFTO0FBQ2hEO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQix3QkFBd0I7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esb0RBQW9ELDRCQUE0QixFQUFFO0FBQ2xGLEtBQUs7QUFDTDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esb0RBQW9ELCtCQUErQixFQUFFO0FBQ3JGLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEMsYUFBYTs7QUFFM0Q7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2REFBNkQ7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBLGlDQUFpQyxxQ0FBcUM7O0FBRXRFO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJDQUEyQyx1Q0FBdUMsRUFBRTtBQUNwRjtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkMsMkNBQTJDLEVBQUU7QUFDMUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0MsT0FBTztBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EscUNBQXFDLDhCQUE4QixFQUFFO0FBQ3JFOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSw0QkFBNEI7QUFDNUI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwrQkFBK0I7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsa0NBQWtDLHVDQUF1Qzs7QUFFekUscUNBQXFDLDBCQUEwQjs7QUFFL0Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsOENBQThDO0FBQzlDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdEQUF3RDtBQUN4RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdDQUF3QyxnQkFBZ0I7QUFDeEQ7QUFDQTtBQUNBLGdFQUFnRSxzQkFBc0IsRUFBRTtBQUN4RjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxtQkFBbUIsd0JBQXdCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHVCQUF1QjtBQUNsQyxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QiwyQkFBMkI7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLEtBQUs7QUFDTCxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzREFBc0QseUJBQXlCLEVBQUU7QUFDakY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7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QTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixTQUFTO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLHVCQUF1QjtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FBSUE7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnRUFBZ0U7QUFDaEU7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwREFBMEQ7QUFDMUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QixPQUFPO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4QkFBOEI7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUMsb0JBQW9CO0FBQzNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLE9BQU8sNEJBQTRCO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sT0FBTztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQyxPQUFPO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQyx3QkFBd0IsRUFBRTtBQUMxRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG1DQUFtQyxPQUFPO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsa0JBQWtCO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQkFBK0I7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkMsT0FBTztBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVEQUF1RCxXQUFXO0FBQ2xFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLCtDQUErQyxPQUFPO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdURBQXVELFdBQVc7QUFDbEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHdCQUF3QjtBQUN4QjtBQUNBO0FBQ0Esd0JBQXdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsNkJBQTZCO0FBQzdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUMsMkNBQTJDLEdBQUc7O0FBRW5GO0FBQ0Esa0NBQWtDO0FBQ2xDLG9DQUFvQztBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsc0NBQXNDO0FBQzNEO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx3QkFBd0I7QUFDeEI7O0FBRUE7QUFDQSxtREFBbUQsNEJBQTRCLEVBQUU7QUFDakY7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLCtFQUErRTtBQUM3RyxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsNENBQTRDLGdDQUFnQyxFQUFFO0FBQzlFLHlDQUF5QywwQ0FBMEMsRUFBRTtBQUNyRjtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4QkFBOEIsMkJBQTJCO0FBQ3pEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseURBQXlEO0FBQ3pEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQ0FBc0MsaURBQWlEO0FBQ3ZGOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7Ozs7O0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQztBQUNwQztBQUNBLHVDQUF1QyxpREFBaUQ7QUFDeEY7QUFDQTtBQUNBO0FBQ0E7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QixvQkFBb0I7QUFDN0M7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsNkJBQTZCO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQ0FBMEMsdUNBQXVDO0FBQ2pGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QjtBQUN4QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEseUJBQXlCO0FBQ3pCO0FBQ0EscURBQXFEO0FBQ3JEO0FBQ0EsTUFBTTtBQUNOOztBQUVBO0FBQ0EsZUFBZTs7QUFFZjtBQUNBO0FBQ0E7QUFDQSxhQUFhLG9CQUFvQjs7QUFFakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQiw2QkFBNkI7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsNkdBQTZHO0FBQ2pJO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0M7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQSw4QkFBOEIsT0FBTztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsc1VBQXNVO0FBQ3JWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCLGtCQUFrQixpQ0FBaUMsNEVBQTRFLHFCQUFxQixhQUFhLEdBQUcsRUFBRSxrQkFBa0I7QUFDck47QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHlCQUF5Qix5Q0FBeUMsRUFBRTtBQUNwRTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0M7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUM7QUFDbkM7QUFDQTtBQUNBLFlBQVksMEVBQTBFO0FBQ3RGOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQThDLHNCQUFzQixFQUFFO0FBQ3RFO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLHFCQUFxQjtBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0RBQStELG9DQUFvQyxFQUFFO0FBQ3JHO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0RBQStELGdDQUFnQyxFQUFFO0FBQ2pHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1GQUFtRjtBQUNuRjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sRUFBRSxFQUFFO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixrQkFBa0I7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLG1DQUFtQztBQUNyRDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDZFQUE2RSxHQUFHOztBQUVoRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQiwwQkFBMEI7QUFDL0M7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLGtCQUFrQjtBQUNuQztBQUNBO0FBQ0EsNkJBQTZCLCtCQUErQjtBQUM1RCx5Q0FBeUM7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQixrQkFBa0IsZUFBZTtBQUNqQztBQUNBLG1CQUFtQjtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILGlCQUFpQix1QkFBdUI7QUFDeEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QjtBQUN2QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYLFNBQVM7QUFDVDtBQUNBO0FBQ0EsOENBQThDLG1CQUFtQixFQUFFO0FBQ25FO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4Qyx1QkFBdUIsRUFBRTtBQUN2RSxTQUFTO0FBQ1QsZ0RBQWdELHFCQUFxQixFQUFFO0FBQ3ZFO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx3QkFBd0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUNBQXFDO0FBQ3JDOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3Z1ZS9kaXN0L3Z1ZS5jb21tb24uZGV2LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBWdWUuanMgdjIuNi4xMFxuICogKGMpIDIwMTQtMjAxOSBFdmFuIFlvdVxuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuICovXG4ndXNlIHN0cmljdCc7XG5cbi8qICAqL1xuXG52YXIgZW1wdHlPYmplY3QgPSBPYmplY3QuZnJlZXplKHt9KTtcblxuLy8gVGhlc2UgaGVscGVycyBwcm9kdWNlIGJldHRlciBWTSBjb2RlIGluIEpTIGVuZ2luZXMgZHVlIHRvIHRoZWlyXG4vLyBleHBsaWNpdG5lc3MgYW5kIGZ1bmN0aW9uIGlubGluaW5nLlxuZnVuY3Rpb24gaXNVbmRlZiAodikge1xuICByZXR1cm4gdiA9PT0gdW5kZWZpbmVkIHx8IHYgPT09IG51bGxcbn1cblxuZnVuY3Rpb24gaXNEZWYgKHYpIHtcbiAgcmV0dXJuIHYgIT09IHVuZGVmaW5lZCAmJiB2ICE9PSBudWxsXG59XG5cbmZ1bmN0aW9uIGlzVHJ1ZSAodikge1xuICByZXR1cm4gdiA9PT0gdHJ1ZVxufVxuXG5mdW5jdGlvbiBpc0ZhbHNlICh2KSB7XG4gIHJldHVybiB2ID09PSBmYWxzZVxufVxuXG4vKipcbiAqIENoZWNrIGlmIHZhbHVlIGlzIHByaW1pdGl2ZS5cbiAqL1xuZnVuY3Rpb24gaXNQcmltaXRpdmUgKHZhbHVlKSB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyB8fFxuICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgfHxcbiAgICAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbiAgICB0eXBlb2YgdmFsdWUgPT09ICdzeW1ib2wnIHx8XG4gICAgdHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbidcbiAgKVxufVxuXG4vKipcbiAqIFF1aWNrIG9iamVjdCBjaGVjayAtIHRoaXMgaXMgcHJpbWFyaWx5IHVzZWQgdG8gdGVsbFxuICogT2JqZWN0cyBmcm9tIHByaW1pdGl2ZSB2YWx1ZXMgd2hlbiB3ZSBrbm93IHRoZSB2YWx1ZVxuICogaXMgYSBKU09OLWNvbXBsaWFudCB0eXBlLlxuICovXG5mdW5jdGlvbiBpc09iamVjdCAob2JqKSB7XG4gIHJldHVybiBvYmogIT09IG51bGwgJiYgdHlwZW9mIG9iaiA9PT0gJ29iamVjdCdcbn1cblxuLyoqXG4gKiBHZXQgdGhlIHJhdyB0eXBlIHN0cmluZyBvZiBhIHZhbHVlLCBlLmcuLCBbb2JqZWN0IE9iamVjdF0uXG4gKi9cbnZhciBfdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG5mdW5jdGlvbiB0b1Jhd1R5cGUgKHZhbHVlKSB7XG4gIHJldHVybiBfdG9TdHJpbmcuY2FsbCh2YWx1ZSkuc2xpY2UoOCwgLTEpXG59XG5cbi8qKlxuICogU3RyaWN0IG9iamVjdCB0eXBlIGNoZWNrLiBPbmx5IHJldHVybnMgdHJ1ZVxuICogZm9yIHBsYWluIEphdmFTY3JpcHQgb2JqZWN0cy5cbiAqL1xuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCAob2JqKSB7XG4gIHJldHVybiBfdG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCBPYmplY3RdJ1xufVxuXG5mdW5jdGlvbiBpc1JlZ0V4cCAodikge1xuICByZXR1cm4gX3RvU3RyaW5nLmNhbGwodikgPT09ICdbb2JqZWN0IFJlZ0V4cF0nXG59XG5cbi8qKlxuICogQ2hlY2sgaWYgdmFsIGlzIGEgdmFsaWQgYXJyYXkgaW5kZXguXG4gKi9cbmZ1bmN0aW9uIGlzVmFsaWRBcnJheUluZGV4ICh2YWwpIHtcbiAgdmFyIG4gPSBwYXJzZUZsb2F0KFN0cmluZyh2YWwpKTtcbiAgcmV0dXJuIG4gPj0gMCAmJiBNYXRoLmZsb29yKG4pID09PSBuICYmIGlzRmluaXRlKHZhbClcbn1cblxuZnVuY3Rpb24gaXNQcm9taXNlICh2YWwpIHtcbiAgcmV0dXJuIChcbiAgICBpc0RlZih2YWwpICYmXG4gICAgdHlwZW9mIHZhbC50aGVuID09PSAnZnVuY3Rpb24nICYmXG4gICAgdHlwZW9mIHZhbC5jYXRjaCA9PT0gJ2Z1bmN0aW9uJ1xuICApXG59XG5cbi8qKlxuICogQ29udmVydCBhIHZhbHVlIHRvIGEgc3RyaW5nIHRoYXQgaXMgYWN0dWFsbHkgcmVuZGVyZWQuXG4gKi9cbmZ1bmN0aW9uIHRvU3RyaW5nICh2YWwpIHtcbiAgcmV0dXJuIHZhbCA9PSBudWxsXG4gICAgPyAnJ1xuICAgIDogQXJyYXkuaXNBcnJheSh2YWwpIHx8IChpc1BsYWluT2JqZWN0KHZhbCkgJiYgdmFsLnRvU3RyaW5nID09PSBfdG9TdHJpbmcpXG4gICAgICA/IEpTT04uc3RyaW5naWZ5KHZhbCwgbnVsbCwgMilcbiAgICAgIDogU3RyaW5nKHZhbClcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGFuIGlucHV0IHZhbHVlIHRvIGEgbnVtYmVyIGZvciBwZXJzaXN0ZW5jZS5cbiAqIElmIHRoZSBjb252ZXJzaW9uIGZhaWxzLCByZXR1cm4gb3JpZ2luYWwgc3RyaW5nLlxuICovXG5mdW5jdGlvbiB0b051bWJlciAodmFsKSB7XG4gIHZhciBuID0gcGFyc2VGbG9hdCh2YWwpO1xuICByZXR1cm4gaXNOYU4obikgPyB2YWwgOiBuXG59XG5cbi8qKlxuICogTWFrZSBhIG1hcCBhbmQgcmV0dXJuIGEgZnVuY3Rpb24gZm9yIGNoZWNraW5nIGlmIGEga2V5XG4gKiBpcyBpbiB0aGF0IG1hcC5cbiAqL1xuZnVuY3Rpb24gbWFrZU1hcCAoXG4gIHN0cixcbiAgZXhwZWN0c0xvd2VyQ2FzZVxuKSB7XG4gIHZhciBtYXAgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICB2YXIgbGlzdCA9IHN0ci5zcGxpdCgnLCcpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICBtYXBbbGlzdFtpXV0gPSB0cnVlO1xuICB9XG4gIHJldHVybiBleHBlY3RzTG93ZXJDYXNlXG4gICAgPyBmdW5jdGlvbiAodmFsKSB7IHJldHVybiBtYXBbdmFsLnRvTG93ZXJDYXNlKCldOyB9XG4gICAgOiBmdW5jdGlvbiAodmFsKSB7IHJldHVybiBtYXBbdmFsXTsgfVxufVxuXG4vKipcbiAqIENoZWNrIGlmIGEgdGFnIGlzIGEgYnVpbHQtaW4gdGFnLlxuICovXG52YXIgaXNCdWlsdEluVGFnID0gbWFrZU1hcCgnc2xvdCxjb21wb25lbnQnLCB0cnVlKTtcblxuLyoqXG4gKiBDaGVjayBpZiBhbiBhdHRyaWJ1dGUgaXMgYSByZXNlcnZlZCBhdHRyaWJ1dGUuXG4gKi9cbnZhciBpc1Jlc2VydmVkQXR0cmlidXRlID0gbWFrZU1hcCgna2V5LHJlZixzbG90LHNsb3Qtc2NvcGUsaXMnKTtcblxuLyoqXG4gKiBSZW1vdmUgYW4gaXRlbSBmcm9tIGFuIGFycmF5LlxuICovXG5mdW5jdGlvbiByZW1vdmUgKGFyciwgaXRlbSkge1xuICBpZiAoYXJyLmxlbmd0aCkge1xuICAgIHZhciBpbmRleCA9IGFyci5pbmRleE9mKGl0ZW0pO1xuICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICByZXR1cm4gYXJyLnNwbGljZShpbmRleCwgMSlcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBDaGVjayB3aGV0aGVyIGFuIG9iamVjdCBoYXMgdGhlIHByb3BlcnR5LlxuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuZnVuY3Rpb24gaGFzT3duIChvYmosIGtleSkge1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSlcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBjYWNoZWQgdmVyc2lvbiBvZiBhIHB1cmUgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNhY2hlZCAoZm4pIHtcbiAgdmFyIGNhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgcmV0dXJuIChmdW5jdGlvbiBjYWNoZWRGbiAoc3RyKSB7XG4gICAgdmFyIGhpdCA9IGNhY2hlW3N0cl07XG4gICAgcmV0dXJuIGhpdCB8fCAoY2FjaGVbc3RyXSA9IGZuKHN0cikpXG4gIH0pXG59XG5cbi8qKlxuICogQ2FtZWxpemUgYSBoeXBoZW4tZGVsaW1pdGVkIHN0cmluZy5cbiAqL1xudmFyIGNhbWVsaXplUkUgPSAvLShcXHcpL2c7XG52YXIgY2FtZWxpemUgPSBjYWNoZWQoZnVuY3Rpb24gKHN0cikge1xuICByZXR1cm4gc3RyLnJlcGxhY2UoY2FtZWxpemVSRSwgZnVuY3Rpb24gKF8sIGMpIHsgcmV0dXJuIGMgPyBjLnRvVXBwZXJDYXNlKCkgOiAnJzsgfSlcbn0pO1xuXG4vKipcbiAqIENhcGl0YWxpemUgYSBzdHJpbmcuXG4gKi9cbnZhciBjYXBpdGFsaXplID0gY2FjaGVkKGZ1bmN0aW9uIChzdHIpIHtcbiAgcmV0dXJuIHN0ci5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHN0ci5zbGljZSgxKVxufSk7XG5cbi8qKlxuICogSHlwaGVuYXRlIGEgY2FtZWxDYXNlIHN0cmluZy5cbiAqL1xudmFyIGh5cGhlbmF0ZVJFID0gL1xcQihbQS1aXSkvZztcbnZhciBoeXBoZW5hdGUgPSBjYWNoZWQoZnVuY3Rpb24gKHN0cikge1xuICByZXR1cm4gc3RyLnJlcGxhY2UoaHlwaGVuYXRlUkUsICctJDEnKS50b0xvd2VyQ2FzZSgpXG59KTtcblxuLyoqXG4gKiBTaW1wbGUgYmluZCBwb2x5ZmlsbCBmb3IgZW52aXJvbm1lbnRzIHRoYXQgZG8gbm90IHN1cHBvcnQgaXQsXG4gKiBlLmcuLCBQaGFudG9tSlMgMS54LiBUZWNobmljYWxseSwgd2UgZG9uJ3QgbmVlZCB0aGlzIGFueW1vcmVcbiAqIHNpbmNlIG5hdGl2ZSBiaW5kIGlzIG5vdyBwZXJmb3JtYW50IGVub3VnaCBpbiBtb3N0IGJyb3dzZXJzLlxuICogQnV0IHJlbW92aW5nIGl0IHdvdWxkIG1lYW4gYnJlYWtpbmcgY29kZSB0aGF0IHdhcyBhYmxlIHRvIHJ1biBpblxuICogUGhhbnRvbUpTIDEueCwgc28gdGhpcyBtdXN0IGJlIGtlcHQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuXG4gKi9cblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmZ1bmN0aW9uIHBvbHlmaWxsQmluZCAoZm4sIGN0eCkge1xuICBmdW5jdGlvbiBib3VuZEZuIChhKSB7XG4gICAgdmFyIGwgPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHJldHVybiBsXG4gICAgICA/IGwgPiAxXG4gICAgICAgID8gZm4uYXBwbHkoY3R4LCBhcmd1bWVudHMpXG4gICAgICAgIDogZm4uY2FsbChjdHgsIGEpXG4gICAgICA6IGZuLmNhbGwoY3R4KVxuICB9XG5cbiAgYm91bmRGbi5fbGVuZ3RoID0gZm4ubGVuZ3RoO1xuICByZXR1cm4gYm91bmRGblxufVxuXG5mdW5jdGlvbiBuYXRpdmVCaW5kIChmbiwgY3R4KSB7XG4gIHJldHVybiBmbi5iaW5kKGN0eClcbn1cblxudmFyIGJpbmQgPSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZFxuICA/IG5hdGl2ZUJpbmRcbiAgOiBwb2x5ZmlsbEJpbmQ7XG5cbi8qKlxuICogQ29udmVydCBhbiBBcnJheS1saWtlIG9iamVjdCB0byBhIHJlYWwgQXJyYXkuXG4gKi9cbmZ1bmN0aW9uIHRvQXJyYXkgKGxpc3QsIHN0YXJ0KSB7XG4gIHN0YXJ0ID0gc3RhcnQgfHwgMDtcbiAgdmFyIGkgPSBsaXN0Lmxlbmd0aCAtIHN0YXJ0O1xuICB2YXIgcmV0ID0gbmV3IEFycmF5KGkpO1xuICB3aGlsZSAoaS0tKSB7XG4gICAgcmV0W2ldID0gbGlzdFtpICsgc3RhcnRdO1xuICB9XG4gIHJldHVybiByZXRcbn1cblxuLyoqXG4gKiBNaXggcHJvcGVydGllcyBpbnRvIHRhcmdldCBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIGV4dGVuZCAodG8sIF9mcm9tKSB7XG4gIGZvciAodmFyIGtleSBpbiBfZnJvbSkge1xuICAgIHRvW2tleV0gPSBfZnJvbVtrZXldO1xuICB9XG4gIHJldHVybiB0b1xufVxuXG4vKipcbiAqIE1lcmdlIGFuIEFycmF5IG9mIE9iamVjdHMgaW50byBhIHNpbmdsZSBPYmplY3QuXG4gKi9cbmZ1bmN0aW9uIHRvT2JqZWN0IChhcnIpIHtcbiAgdmFyIHJlcyA9IHt9O1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgIGlmIChhcnJbaV0pIHtcbiAgICAgIGV4dGVuZChyZXMsIGFycltpXSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXNcbn1cblxuLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cblxuLyoqXG4gKiBQZXJmb3JtIG5vIG9wZXJhdGlvbi5cbiAqIFN0dWJiaW5nIGFyZ3MgdG8gbWFrZSBGbG93IGhhcHB5IHdpdGhvdXQgbGVhdmluZyB1c2VsZXNzIHRyYW5zcGlsZWQgY29kZVxuICogd2l0aCAuLi5yZXN0IChodHRwczovL2Zsb3cub3JnL2Jsb2cvMjAxNy8wNS8wNy9TdHJpY3QtRnVuY3Rpb24tQ2FsbC1Bcml0eS8pLlxuICovXG5mdW5jdGlvbiBub29wIChhLCBiLCBjKSB7fVxuXG4vKipcbiAqIEFsd2F5cyByZXR1cm4gZmFsc2UuXG4gKi9cbnZhciBubyA9IGZ1bmN0aW9uIChhLCBiLCBjKSB7IHJldHVybiBmYWxzZTsgfTtcblxuLyogZXNsaW50LWVuYWJsZSBuby11bnVzZWQtdmFycyAqL1xuXG4vKipcbiAqIFJldHVybiB0aGUgc2FtZSB2YWx1ZS5cbiAqL1xudmFyIGlkZW50aXR5ID0gZnVuY3Rpb24gKF8pIHsgcmV0dXJuIF87IH07XG5cbi8qKlxuICogR2VuZXJhdGUgYSBzdHJpbmcgY29udGFpbmluZyBzdGF0aWMga2V5cyBmcm9tIGNvbXBpbGVyIG1vZHVsZXMuXG4gKi9cbmZ1bmN0aW9uIGdlblN0YXRpY0tleXMgKG1vZHVsZXMpIHtcbiAgcmV0dXJuIG1vZHVsZXMucmVkdWNlKGZ1bmN0aW9uIChrZXlzLCBtKSB7XG4gICAgcmV0dXJuIGtleXMuY29uY2F0KG0uc3RhdGljS2V5cyB8fCBbXSlcbiAgfSwgW10pLmpvaW4oJywnKVxufVxuXG4vKipcbiAqIENoZWNrIGlmIHR3byB2YWx1ZXMgYXJlIGxvb3NlbHkgZXF1YWwgLSB0aGF0IGlzLFxuICogaWYgdGhleSBhcmUgcGxhaW4gb2JqZWN0cywgZG8gdGhleSBoYXZlIHRoZSBzYW1lIHNoYXBlP1xuICovXG5mdW5jdGlvbiBsb29zZUVxdWFsIChhLCBiKSB7XG4gIGlmIChhID09PSBiKSB7IHJldHVybiB0cnVlIH1cbiAgdmFyIGlzT2JqZWN0QSA9IGlzT2JqZWN0KGEpO1xuICB2YXIgaXNPYmplY3RCID0gaXNPYmplY3QoYik7XG4gIGlmIChpc09iamVjdEEgJiYgaXNPYmplY3RCKSB7XG4gICAgdHJ5IHtcbiAgICAgIHZhciBpc0FycmF5QSA9IEFycmF5LmlzQXJyYXkoYSk7XG4gICAgICB2YXIgaXNBcnJheUIgPSBBcnJheS5pc0FycmF5KGIpO1xuICAgICAgaWYgKGlzQXJyYXlBICYmIGlzQXJyYXlCKSB7XG4gICAgICAgIHJldHVybiBhLmxlbmd0aCA9PT0gYi5sZW5ndGggJiYgYS5ldmVyeShmdW5jdGlvbiAoZSwgaSkge1xuICAgICAgICAgIHJldHVybiBsb29zZUVxdWFsKGUsIGJbaV0pXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2UgaWYgKGEgaW5zdGFuY2VvZiBEYXRlICYmIGIgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgIHJldHVybiBhLmdldFRpbWUoKSA9PT0gYi5nZXRUaW1lKClcbiAgICAgIH0gZWxzZSBpZiAoIWlzQXJyYXlBICYmICFpc0FycmF5Qikge1xuICAgICAgICB2YXIga2V5c0EgPSBPYmplY3Qua2V5cyhhKTtcbiAgICAgICAgdmFyIGtleXNCID0gT2JqZWN0LmtleXMoYik7XG4gICAgICAgIHJldHVybiBrZXlzQS5sZW5ndGggPT09IGtleXNCLmxlbmd0aCAmJiBrZXlzQS5ldmVyeShmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgcmV0dXJuIGxvb3NlRXF1YWwoYVtrZXldLCBiW2tleV0pXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9IGVsc2UgaWYgKCFpc09iamVjdEEgJiYgIWlzT2JqZWN0Qikge1xuICAgIHJldHVybiBTdHJpbmcoYSkgPT09IFN0cmluZyhiKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbi8qKlxuICogUmV0dXJuIHRoZSBmaXJzdCBpbmRleCBhdCB3aGljaCBhIGxvb3NlbHkgZXF1YWwgdmFsdWUgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgYXJyYXkgKGlmIHZhbHVlIGlzIGEgcGxhaW4gb2JqZWN0LCB0aGUgYXJyYXkgbXVzdFxuICogY29udGFpbiBhbiBvYmplY3Qgb2YgdGhlIHNhbWUgc2hhcGUpLCBvciAtMSBpZiBpdCBpcyBub3QgcHJlc2VudC5cbiAqL1xuZnVuY3Rpb24gbG9vc2VJbmRleE9mIChhcnIsIHZhbCkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgIGlmIChsb29zZUVxdWFsKGFycltpXSwgdmFsKSkgeyByZXR1cm4gaSB9XG4gIH1cbiAgcmV0dXJuIC0xXG59XG5cbi8qKlxuICogRW5zdXJlIGEgZnVuY3Rpb24gaXMgY2FsbGVkIG9ubHkgb25jZS5cbiAqL1xuZnVuY3Rpb24gb25jZSAoZm4pIHtcbiAgdmFyIGNhbGxlZCA9IGZhbHNlO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIGlmICghY2FsbGVkKSB7XG4gICAgICBjYWxsZWQgPSB0cnVlO1xuICAgICAgZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIFNTUl9BVFRSID0gJ2RhdGEtc2VydmVyLXJlbmRlcmVkJztcblxudmFyIEFTU0VUX1RZUEVTID0gW1xuICAnY29tcG9uZW50JyxcbiAgJ2RpcmVjdGl2ZScsXG4gICdmaWx0ZXInXG5dO1xuXG52YXIgTElGRUNZQ0xFX0hPT0tTID0gW1xuICAnYmVmb3JlQ3JlYXRlJyxcbiAgJ2NyZWF0ZWQnLFxuICAnYmVmb3JlTW91bnQnLFxuICAnbW91bnRlZCcsXG4gICdiZWZvcmVVcGRhdGUnLFxuICAndXBkYXRlZCcsXG4gICdiZWZvcmVEZXN0cm95JyxcbiAgJ2Rlc3Ryb3llZCcsXG4gICdhY3RpdmF0ZWQnLFxuICAnZGVhY3RpdmF0ZWQnLFxuICAnZXJyb3JDYXB0dXJlZCcsXG4gICdzZXJ2ZXJQcmVmZXRjaCdcbl07XG5cbi8qICAqL1xuXG5cblxudmFyIGNvbmZpZyA9ICh7XG4gIC8qKlxuICAgKiBPcHRpb24gbWVyZ2Ugc3RyYXRlZ2llcyAodXNlZCBpbiBjb3JlL3V0aWwvb3B0aW9ucylcbiAgICovXG4gIC8vICRmbG93LWRpc2FibGUtbGluZVxuICBvcHRpb25NZXJnZVN0cmF0ZWdpZXM6IE9iamVjdC5jcmVhdGUobnVsbCksXG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gc3VwcHJlc3Mgd2FybmluZ3MuXG4gICAqL1xuICBzaWxlbnQ6IGZhbHNlLFxuXG4gIC8qKlxuICAgKiBTaG93IHByb2R1Y3Rpb24gbW9kZSB0aXAgbWVzc2FnZSBvbiBib290P1xuICAgKi9cbiAgcHJvZHVjdGlvblRpcDogXCJkZXZlbG9wbWVudFwiICE9PSAncHJvZHVjdGlvbicsXG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZW5hYmxlIGRldnRvb2xzXG4gICAqL1xuICBkZXZ0b29sczogXCJkZXZlbG9wbWVudFwiICE9PSAncHJvZHVjdGlvbicsXG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gcmVjb3JkIHBlcmZcbiAgICovXG4gIHBlcmZvcm1hbmNlOiBmYWxzZSxcblxuICAvKipcbiAgICogRXJyb3IgaGFuZGxlciBmb3Igd2F0Y2hlciBlcnJvcnNcbiAgICovXG4gIGVycm9ySGFuZGxlcjogbnVsbCxcblxuICAvKipcbiAgICogV2FybiBoYW5kbGVyIGZvciB3YXRjaGVyIHdhcm5zXG4gICAqL1xuICB3YXJuSGFuZGxlcjogbnVsbCxcblxuICAvKipcbiAgICogSWdub3JlIGNlcnRhaW4gY3VzdG9tIGVsZW1lbnRzXG4gICAqL1xuICBpZ25vcmVkRWxlbWVudHM6IFtdLFxuXG4gIC8qKlxuICAgKiBDdXN0b20gdXNlciBrZXkgYWxpYXNlcyBmb3Igdi1vblxuICAgKi9cbiAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gIGtleUNvZGVzOiBPYmplY3QuY3JlYXRlKG51bGwpLFxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhIHRhZyBpcyByZXNlcnZlZCBzbyB0aGF0IGl0IGNhbm5vdCBiZSByZWdpc3RlcmVkIGFzIGFcbiAgICogY29tcG9uZW50LiBUaGlzIGlzIHBsYXRmb3JtLWRlcGVuZGVudCBhbmQgbWF5IGJlIG92ZXJ3cml0dGVuLlxuICAgKi9cbiAgaXNSZXNlcnZlZFRhZzogbm8sXG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGFuIGF0dHJpYnV0ZSBpcyByZXNlcnZlZCBzbyB0aGF0IGl0IGNhbm5vdCBiZSB1c2VkIGFzIGEgY29tcG9uZW50XG4gICAqIHByb3AuIFRoaXMgaXMgcGxhdGZvcm0tZGVwZW5kZW50IGFuZCBtYXkgYmUgb3ZlcndyaXR0ZW4uXG4gICAqL1xuICBpc1Jlc2VydmVkQXR0cjogbm8sXG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGEgdGFnIGlzIGFuIHVua25vd24gZWxlbWVudC5cbiAgICogUGxhdGZvcm0tZGVwZW5kZW50LlxuICAgKi9cbiAgaXNVbmtub3duRWxlbWVudDogbm8sXG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbmFtZXNwYWNlIG9mIGFuIGVsZW1lbnRcbiAgICovXG4gIGdldFRhZ05hbWVzcGFjZTogbm9vcCxcblxuICAvKipcbiAgICogUGFyc2UgdGhlIHJlYWwgdGFnIG5hbWUgZm9yIHRoZSBzcGVjaWZpYyBwbGF0Zm9ybS5cbiAgICovXG4gIHBhcnNlUGxhdGZvcm1UYWdOYW1lOiBpZGVudGl0eSxcblxuICAvKipcbiAgICogQ2hlY2sgaWYgYW4gYXR0cmlidXRlIG11c3QgYmUgYm91bmQgdXNpbmcgcHJvcGVydHksIGUuZy4gdmFsdWVcbiAgICogUGxhdGZvcm0tZGVwZW5kZW50LlxuICAgKi9cbiAgbXVzdFVzZVByb3A6IG5vLFxuXG4gIC8qKlxuICAgKiBQZXJmb3JtIHVwZGF0ZXMgYXN5bmNocm9ub3VzbHkuIEludGVuZGVkIHRvIGJlIHVzZWQgYnkgVnVlIFRlc3QgVXRpbHNcbiAgICogVGhpcyB3aWxsIHNpZ25pZmljYW50bHkgcmVkdWNlIHBlcmZvcm1hbmNlIGlmIHNldCB0byBmYWxzZS5cbiAgICovXG4gIGFzeW5jOiB0cnVlLFxuXG4gIC8qKlxuICAgKiBFeHBvc2VkIGZvciBsZWdhY3kgcmVhc29uc1xuICAgKi9cbiAgX2xpZmVjeWNsZUhvb2tzOiBMSUZFQ1lDTEVfSE9PS1Ncbn0pO1xuXG4vKiAgKi9cblxuLyoqXG4gKiB1bmljb2RlIGxldHRlcnMgdXNlZCBmb3IgcGFyc2luZyBodG1sIHRhZ3MsIGNvbXBvbmVudCBuYW1lcyBhbmQgcHJvcGVydHkgcGF0aHMuXG4gKiB1c2luZyBodHRwczovL3d3dy53My5vcmcvVFIvaHRtbDUzL3NlbWFudGljcy1zY3JpcHRpbmcuaHRtbCNwb3RlbnRpYWxjdXN0b21lbGVtZW50bmFtZVxuICogc2tpcHBpbmcgXFx1MTAwMDAtXFx1RUZGRkYgZHVlIHRvIGl0IGZyZWV6aW5nIHVwIFBoYW50b21KU1xuICovXG52YXIgdW5pY29kZVJlZ0V4cCA9IC9hLXpBLVpcXHUwMEI3XFx1MDBDMC1cXHUwMEQ2XFx1MDBEOC1cXHUwMEY2XFx1MDBGOC1cXHUwMzdEXFx1MDM3Ri1cXHUxRkZGXFx1MjAwQy1cXHUyMDBEXFx1MjAzRi1cXHUyMDQwXFx1MjA3MC1cXHUyMThGXFx1MkMwMC1cXHUyRkVGXFx1MzAwMS1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkZELztcblxuLyoqXG4gKiBDaGVjayBpZiBhIHN0cmluZyBzdGFydHMgd2l0aCAkIG9yIF9cbiAqL1xuZnVuY3Rpb24gaXNSZXNlcnZlZCAoc3RyKSB7XG4gIHZhciBjID0gKHN0ciArICcnKS5jaGFyQ29kZUF0KDApO1xuICByZXR1cm4gYyA9PT0gMHgyNCB8fCBjID09PSAweDVGXG59XG5cbi8qKlxuICogRGVmaW5lIGEgcHJvcGVydHkuXG4gKi9cbmZ1bmN0aW9uIGRlZiAob2JqLCBrZXksIHZhbCwgZW51bWVyYWJsZSkge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICB2YWx1ZTogdmFsLFxuICAgIGVudW1lcmFibGU6ICEhZW51bWVyYWJsZSxcbiAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSk7XG59XG5cbi8qKlxuICogUGFyc2Ugc2ltcGxlIHBhdGguXG4gKi9cbnZhciBiYWlsUkUgPSBuZXcgUmVnRXhwKChcIlteXCIgKyAodW5pY29kZVJlZ0V4cC5zb3VyY2UpICsgXCIuJF9cXFxcZF1cIikpO1xuZnVuY3Rpb24gcGFyc2VQYXRoIChwYXRoKSB7XG4gIGlmIChiYWlsUkUudGVzdChwYXRoKSkge1xuICAgIHJldHVyblxuICB9XG4gIHZhciBzZWdtZW50cyA9IHBhdGguc3BsaXQoJy4nKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChvYmopIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlZ21lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoIW9iaikgeyByZXR1cm4gfVxuICAgICAgb2JqID0gb2JqW3NlZ21lbnRzW2ldXTtcbiAgICB9XG4gICAgcmV0dXJuIG9ialxuICB9XG59XG5cbi8qICAqL1xuXG4vLyBjYW4gd2UgdXNlIF9fcHJvdG9fXz9cbnZhciBoYXNQcm90byA9ICdfX3Byb3RvX18nIGluIHt9O1xuXG4vLyBCcm93c2VyIGVudmlyb25tZW50IHNuaWZmaW5nXG52YXIgaW5Ccm93c2VyID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCc7XG52YXIgaW5XZWV4ID0gdHlwZW9mIFdYRW52aXJvbm1lbnQgIT09ICd1bmRlZmluZWQnICYmICEhV1hFbnZpcm9ubWVudC5wbGF0Zm9ybTtcbnZhciB3ZWV4UGxhdGZvcm0gPSBpbldlZXggJiYgV1hFbnZpcm9ubWVudC5wbGF0Zm9ybS50b0xvd2VyQ2FzZSgpO1xudmFyIFVBID0gaW5Ccm93c2VyICYmIHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCk7XG52YXIgaXNJRSA9IFVBICYmIC9tc2llfHRyaWRlbnQvLnRlc3QoVUEpO1xudmFyIGlzSUU5ID0gVUEgJiYgVUEuaW5kZXhPZignbXNpZSA5LjAnKSA+IDA7XG52YXIgaXNFZGdlID0gVUEgJiYgVUEuaW5kZXhPZignZWRnZS8nKSA+IDA7XG52YXIgaXNBbmRyb2lkID0gKFVBICYmIFVBLmluZGV4T2YoJ2FuZHJvaWQnKSA+IDApIHx8ICh3ZWV4UGxhdGZvcm0gPT09ICdhbmRyb2lkJyk7XG52YXIgaXNJT1MgPSAoVUEgJiYgL2lwaG9uZXxpcGFkfGlwb2R8aW9zLy50ZXN0KFVBKSkgfHwgKHdlZXhQbGF0Zm9ybSA9PT0gJ2lvcycpO1xudmFyIGlzQ2hyb21lID0gVUEgJiYgL2Nocm9tZVxcL1xcZCsvLnRlc3QoVUEpICYmICFpc0VkZ2U7XG52YXIgaXNQaGFudG9tSlMgPSBVQSAmJiAvcGhhbnRvbWpzLy50ZXN0KFVBKTtcbnZhciBpc0ZGID0gVUEgJiYgVUEubWF0Y2goL2ZpcmVmb3hcXC8oXFxkKykvKTtcblxuLy8gRmlyZWZveCBoYXMgYSBcIndhdGNoXCIgZnVuY3Rpb24gb24gT2JqZWN0LnByb3RvdHlwZS4uLlxudmFyIG5hdGl2ZVdhdGNoID0gKHt9KS53YXRjaDtcblxudmFyIHN1cHBvcnRzUGFzc2l2ZSA9IGZhbHNlO1xuaWYgKGluQnJvd3Nlcikge1xuICB0cnkge1xuICAgIHZhciBvcHRzID0ge307XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9wdHMsICdwYXNzaXZlJywgKHtcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0ICgpIHtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgc3VwcG9ydHNQYXNzaXZlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KSk7IC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9mbG93L2lzc3Vlcy8yODVcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigndGVzdC1wYXNzaXZlJywgbnVsbCwgb3B0cyk7XG4gIH0gY2F0Y2ggKGUpIHt9XG59XG5cbi8vIHRoaXMgbmVlZHMgdG8gYmUgbGF6eS1ldmFsZWQgYmVjYXVzZSB2dWUgbWF5IGJlIHJlcXVpcmVkIGJlZm9yZVxuLy8gdnVlLXNlcnZlci1yZW5kZXJlciBjYW4gc2V0IFZVRV9FTlZcbnZhciBfaXNTZXJ2ZXI7XG52YXIgaXNTZXJ2ZXJSZW5kZXJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gIGlmIChfaXNTZXJ2ZXIgPT09IHVuZGVmaW5lZCkge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmICghaW5Ccm93c2VyICYmICFpbldlZXggJiYgdHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIC8vIGRldGVjdCBwcmVzZW5jZSBvZiB2dWUtc2VydmVyLXJlbmRlcmVyIGFuZCBhdm9pZFxuICAgICAgLy8gV2VicGFjayBzaGltbWluZyB0aGUgcHJvY2Vzc1xuICAgICAgX2lzU2VydmVyID0gZ2xvYmFsWydwcm9jZXNzJ10gJiYgZ2xvYmFsWydwcm9jZXNzJ10uZW52LlZVRV9FTlYgPT09ICdzZXJ2ZXInO1xuICAgIH0gZWxzZSB7XG4gICAgICBfaXNTZXJ2ZXIgPSBmYWxzZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIF9pc1NlcnZlclxufTtcblxuLy8gZGV0ZWN0IGRldnRvb2xzXG52YXIgZGV2dG9vbHMgPSBpbkJyb3dzZXIgJiYgd2luZG93Ll9fVlVFX0RFVlRPT0xTX0dMT0JBTF9IT09LX187XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5mdW5jdGlvbiBpc05hdGl2ZSAoQ3Rvcikge1xuICByZXR1cm4gdHlwZW9mIEN0b3IgPT09ICdmdW5jdGlvbicgJiYgL25hdGl2ZSBjb2RlLy50ZXN0KEN0b3IudG9TdHJpbmcoKSlcbn1cblxudmFyIGhhc1N5bWJvbCA9XG4gIHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIGlzTmF0aXZlKFN5bWJvbCkgJiZcbiAgdHlwZW9mIFJlZmxlY3QgIT09ICd1bmRlZmluZWQnICYmIGlzTmF0aXZlKFJlZmxlY3Qub3duS2V5cyk7XG5cbnZhciBfU2V0O1xuLyogaXN0YW5idWwgaWdub3JlIGlmICovIC8vICRmbG93LWRpc2FibGUtbGluZVxuaWYgKHR5cGVvZiBTZXQgIT09ICd1bmRlZmluZWQnICYmIGlzTmF0aXZlKFNldCkpIHtcbiAgLy8gdXNlIG5hdGl2ZSBTZXQgd2hlbiBhdmFpbGFibGUuXG4gIF9TZXQgPSBTZXQ7XG59IGVsc2Uge1xuICAvLyBhIG5vbi1zdGFuZGFyZCBTZXQgcG9seWZpbGwgdGhhdCBvbmx5IHdvcmtzIHdpdGggcHJpbWl0aXZlIGtleXMuXG4gIF9TZXQgPSAvKkBfX1BVUkVfXyovKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBTZXQgKCkge1xuICAgICAgdGhpcy5zZXQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIH1cbiAgICBTZXQucHJvdG90eXBlLmhhcyA9IGZ1bmN0aW9uIGhhcyAoa2V5KSB7XG4gICAgICByZXR1cm4gdGhpcy5zZXRba2V5XSA9PT0gdHJ1ZVxuICAgIH07XG4gICAgU2V0LnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiBhZGQgKGtleSkge1xuICAgICAgdGhpcy5zZXRba2V5XSA9IHRydWU7XG4gICAgfTtcbiAgICBTZXQucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gY2xlYXIgKCkge1xuICAgICAgdGhpcy5zZXQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIH07XG5cbiAgICByZXR1cm4gU2V0O1xuICB9KCkpO1xufVxuXG4vKiAgKi9cblxudmFyIHdhcm4gPSBub29wO1xudmFyIHRpcCA9IG5vb3A7XG52YXIgZ2VuZXJhdGVDb21wb25lbnRUcmFjZSA9IChub29wKTsgLy8gd29yayBhcm91bmQgZmxvdyBjaGVja1xudmFyIGZvcm1hdENvbXBvbmVudE5hbWUgPSAobm9vcCk7XG5cbntcbiAgdmFyIGhhc0NvbnNvbGUgPSB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCc7XG4gIHZhciBjbGFzc2lmeVJFID0gLyg/Ol58Wy1fXSkoXFx3KS9nO1xuICB2YXIgY2xhc3NpZnkgPSBmdW5jdGlvbiAoc3RyKSB7IHJldHVybiBzdHJcbiAgICAucmVwbGFjZShjbGFzc2lmeVJFLCBmdW5jdGlvbiAoYykgeyByZXR1cm4gYy50b1VwcGVyQ2FzZSgpOyB9KVxuICAgIC5yZXBsYWNlKC9bLV9dL2csICcnKTsgfTtcblxuICB3YXJuID0gZnVuY3Rpb24gKG1zZywgdm0pIHtcbiAgICB2YXIgdHJhY2UgPSB2bSA/IGdlbmVyYXRlQ29tcG9uZW50VHJhY2Uodm0pIDogJyc7XG5cbiAgICBpZiAoY29uZmlnLndhcm5IYW5kbGVyKSB7XG4gICAgICBjb25maWcud2FybkhhbmRsZXIuY2FsbChudWxsLCBtc2csIHZtLCB0cmFjZSk7XG4gICAgfSBlbHNlIGlmIChoYXNDb25zb2xlICYmICghY29uZmlnLnNpbGVudCkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoKFwiW1Z1ZSB3YXJuXTogXCIgKyBtc2cgKyB0cmFjZSkpO1xuICAgIH1cbiAgfTtcblxuICB0aXAgPSBmdW5jdGlvbiAobXNnLCB2bSkge1xuICAgIGlmIChoYXNDb25zb2xlICYmICghY29uZmlnLnNpbGVudCkpIHtcbiAgICAgIGNvbnNvbGUud2FybihcIltWdWUgdGlwXTogXCIgKyBtc2cgKyAoXG4gICAgICAgIHZtID8gZ2VuZXJhdGVDb21wb25lbnRUcmFjZSh2bSkgOiAnJ1xuICAgICAgKSk7XG4gICAgfVxuICB9O1xuXG4gIGZvcm1hdENvbXBvbmVudE5hbWUgPSBmdW5jdGlvbiAodm0sIGluY2x1ZGVGaWxlKSB7XG4gICAgaWYgKHZtLiRyb290ID09PSB2bSkge1xuICAgICAgcmV0dXJuICc8Um9vdD4nXG4gICAgfVxuICAgIHZhciBvcHRpb25zID0gdHlwZW9mIHZtID09PSAnZnVuY3Rpb24nICYmIHZtLmNpZCAhPSBudWxsXG4gICAgICA/IHZtLm9wdGlvbnNcbiAgICAgIDogdm0uX2lzVnVlXG4gICAgICAgID8gdm0uJG9wdGlvbnMgfHwgdm0uY29uc3RydWN0b3Iub3B0aW9uc1xuICAgICAgICA6IHZtO1xuICAgIHZhciBuYW1lID0gb3B0aW9ucy5uYW1lIHx8IG9wdGlvbnMuX2NvbXBvbmVudFRhZztcbiAgICB2YXIgZmlsZSA9IG9wdGlvbnMuX19maWxlO1xuICAgIGlmICghbmFtZSAmJiBmaWxlKSB7XG4gICAgICB2YXIgbWF0Y2ggPSBmaWxlLm1hdGNoKC8oW14vXFxcXF0rKVxcLnZ1ZSQvKTtcbiAgICAgIG5hbWUgPSBtYXRjaCAmJiBtYXRjaFsxXTtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgKG5hbWUgPyAoXCI8XCIgKyAoY2xhc3NpZnkobmFtZSkpICsgXCI+XCIpIDogXCI8QW5vbnltb3VzPlwiKSArXG4gICAgICAoZmlsZSAmJiBpbmNsdWRlRmlsZSAhPT0gZmFsc2UgPyAoXCIgYXQgXCIgKyBmaWxlKSA6ICcnKVxuICAgIClcbiAgfTtcblxuICB2YXIgcmVwZWF0ID0gZnVuY3Rpb24gKHN0ciwgbikge1xuICAgIHZhciByZXMgPSAnJztcbiAgICB3aGlsZSAobikge1xuICAgICAgaWYgKG4gJSAyID09PSAxKSB7IHJlcyArPSBzdHI7IH1cbiAgICAgIGlmIChuID4gMSkgeyBzdHIgKz0gc3RyOyB9XG4gICAgICBuID4+PSAxO1xuICAgIH1cbiAgICByZXR1cm4gcmVzXG4gIH07XG5cbiAgZ2VuZXJhdGVDb21wb25lbnRUcmFjZSA9IGZ1bmN0aW9uICh2bSkge1xuICAgIGlmICh2bS5faXNWdWUgJiYgdm0uJHBhcmVudCkge1xuICAgICAgdmFyIHRyZWUgPSBbXTtcbiAgICAgIHZhciBjdXJyZW50UmVjdXJzaXZlU2VxdWVuY2UgPSAwO1xuICAgICAgd2hpbGUgKHZtKSB7XG4gICAgICAgIGlmICh0cmVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB2YXIgbGFzdCA9IHRyZWVbdHJlZS5sZW5ndGggLSAxXTtcbiAgICAgICAgICBpZiAobGFzdC5jb25zdHJ1Y3RvciA9PT0gdm0uY29uc3RydWN0b3IpIHtcbiAgICAgICAgICAgIGN1cnJlbnRSZWN1cnNpdmVTZXF1ZW5jZSsrO1xuICAgICAgICAgICAgdm0gPSB2bS4kcGFyZW50O1xuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnRSZWN1cnNpdmVTZXF1ZW5jZSA+IDApIHtcbiAgICAgICAgICAgIHRyZWVbdHJlZS5sZW5ndGggLSAxXSA9IFtsYXN0LCBjdXJyZW50UmVjdXJzaXZlU2VxdWVuY2VdO1xuICAgICAgICAgICAgY3VycmVudFJlY3Vyc2l2ZVNlcXVlbmNlID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdHJlZS5wdXNoKHZtKTtcbiAgICAgICAgdm0gPSB2bS4kcGFyZW50O1xuICAgICAgfVxuICAgICAgcmV0dXJuICdcXG5cXG5mb3VuZCBpblxcblxcbicgKyB0cmVlXG4gICAgICAgIC5tYXAoZnVuY3Rpb24gKHZtLCBpKSB7IHJldHVybiAoXCJcIiArIChpID09PSAwID8gJy0tLT4gJyA6IHJlcGVhdCgnICcsIDUgKyBpICogMikpICsgKEFycmF5LmlzQXJyYXkodm0pXG4gICAgICAgICAgICA/ICgoZm9ybWF0Q29tcG9uZW50TmFtZSh2bVswXSkpICsgXCIuLi4gKFwiICsgKHZtWzFdKSArIFwiIHJlY3Vyc2l2ZSBjYWxscylcIilcbiAgICAgICAgICAgIDogZm9ybWF0Q29tcG9uZW50TmFtZSh2bSkpKTsgfSlcbiAgICAgICAgLmpvaW4oJ1xcbicpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAoXCJcXG5cXG4oZm91bmQgaW4gXCIgKyAoZm9ybWF0Q29tcG9uZW50TmFtZSh2bSkpICsgXCIpXCIpXG4gICAgfVxuICB9O1xufVxuXG4vKiAgKi9cblxudmFyIHVpZCA9IDA7XG5cbi8qKlxuICogQSBkZXAgaXMgYW4gb2JzZXJ2YWJsZSB0aGF0IGNhbiBoYXZlIG11bHRpcGxlXG4gKiBkaXJlY3RpdmVzIHN1YnNjcmliaW5nIHRvIGl0LlxuICovXG52YXIgRGVwID0gZnVuY3Rpb24gRGVwICgpIHtcbiAgdGhpcy5pZCA9IHVpZCsrO1xuICB0aGlzLnN1YnMgPSBbXTtcbn07XG5cbkRlcC5wcm90b3R5cGUuYWRkU3ViID0gZnVuY3Rpb24gYWRkU3ViIChzdWIpIHtcbiAgdGhpcy5zdWJzLnB1c2goc3ViKTtcbn07XG5cbkRlcC5wcm90b3R5cGUucmVtb3ZlU3ViID0gZnVuY3Rpb24gcmVtb3ZlU3ViIChzdWIpIHtcbiAgcmVtb3ZlKHRoaXMuc3Vicywgc3ViKTtcbn07XG5cbkRlcC5wcm90b3R5cGUuZGVwZW5kID0gZnVuY3Rpb24gZGVwZW5kICgpIHtcbiAgaWYgKERlcC50YXJnZXQpIHtcbiAgICBEZXAudGFyZ2V0LmFkZERlcCh0aGlzKTtcbiAgfVxufTtcblxuRGVwLnByb3RvdHlwZS5ub3RpZnkgPSBmdW5jdGlvbiBub3RpZnkgKCkge1xuICAvLyBzdGFiaWxpemUgdGhlIHN1YnNjcmliZXIgbGlzdCBmaXJzdFxuICB2YXIgc3VicyA9IHRoaXMuc3Vicy5zbGljZSgpO1xuICBpZiAoIWNvbmZpZy5hc3luYykge1xuICAgIC8vIHN1YnMgYXJlbid0IHNvcnRlZCBpbiBzY2hlZHVsZXIgaWYgbm90IHJ1bm5pbmcgYXN5bmNcbiAgICAvLyB3ZSBuZWVkIHRvIHNvcnQgdGhlbSBub3cgdG8gbWFrZSBzdXJlIHRoZXkgZmlyZSBpbiBjb3JyZWN0XG4gICAgLy8gb3JkZXJcbiAgICBzdWJzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIGEuaWQgLSBiLmlkOyB9KTtcbiAgfVxuICBmb3IgKHZhciBpID0gMCwgbCA9IHN1YnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgc3Vic1tpXS51cGRhdGUoKTtcbiAgfVxufTtcblxuLy8gVGhlIGN1cnJlbnQgdGFyZ2V0IHdhdGNoZXIgYmVpbmcgZXZhbHVhdGVkLlxuLy8gVGhpcyBpcyBnbG9iYWxseSB1bmlxdWUgYmVjYXVzZSBvbmx5IG9uZSB3YXRjaGVyXG4vLyBjYW4gYmUgZXZhbHVhdGVkIGF0IGEgdGltZS5cbkRlcC50YXJnZXQgPSBudWxsO1xudmFyIHRhcmdldFN0YWNrID0gW107XG5cbmZ1bmN0aW9uIHB1c2hUYXJnZXQgKHRhcmdldCkge1xuICB0YXJnZXRTdGFjay5wdXNoKHRhcmdldCk7XG4gIERlcC50YXJnZXQgPSB0YXJnZXQ7XG59XG5cbmZ1bmN0aW9uIHBvcFRhcmdldCAoKSB7XG4gIHRhcmdldFN0YWNrLnBvcCgpO1xuICBEZXAudGFyZ2V0ID0gdGFyZ2V0U3RhY2tbdGFyZ2V0U3RhY2subGVuZ3RoIC0gMV07XG59XG5cbi8qICAqL1xuXG52YXIgVk5vZGUgPSBmdW5jdGlvbiBWTm9kZSAoXG4gIHRhZyxcbiAgZGF0YSxcbiAgY2hpbGRyZW4sXG4gIHRleHQsXG4gIGVsbSxcbiAgY29udGV4dCxcbiAgY29tcG9uZW50T3B0aW9ucyxcbiAgYXN5bmNGYWN0b3J5XG4pIHtcbiAgdGhpcy50YWcgPSB0YWc7XG4gIHRoaXMuZGF0YSA9IGRhdGE7XG4gIHRoaXMuY2hpbGRyZW4gPSBjaGlsZHJlbjtcbiAgdGhpcy50ZXh0ID0gdGV4dDtcbiAgdGhpcy5lbG0gPSBlbG07XG4gIHRoaXMubnMgPSB1bmRlZmluZWQ7XG4gIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gIHRoaXMuZm5Db250ZXh0ID0gdW5kZWZpbmVkO1xuICB0aGlzLmZuT3B0aW9ucyA9IHVuZGVmaW5lZDtcbiAgdGhpcy5mblNjb3BlSWQgPSB1bmRlZmluZWQ7XG4gIHRoaXMua2V5ID0gZGF0YSAmJiBkYXRhLmtleTtcbiAgdGhpcy5jb21wb25lbnRPcHRpb25zID0gY29tcG9uZW50T3B0aW9ucztcbiAgdGhpcy5jb21wb25lbnRJbnN0YW5jZSA9IHVuZGVmaW5lZDtcbiAgdGhpcy5wYXJlbnQgPSB1bmRlZmluZWQ7XG4gIHRoaXMucmF3ID0gZmFsc2U7XG4gIHRoaXMuaXNTdGF0aWMgPSBmYWxzZTtcbiAgdGhpcy5pc1Jvb3RJbnNlcnQgPSB0cnVlO1xuICB0aGlzLmlzQ29tbWVudCA9IGZhbHNlO1xuICB0aGlzLmlzQ2xvbmVkID0gZmFsc2U7XG4gIHRoaXMuaXNPbmNlID0gZmFsc2U7XG4gIHRoaXMuYXN5bmNGYWN0b3J5ID0gYXN5bmNGYWN0b3J5O1xuICB0aGlzLmFzeW5jTWV0YSA9IHVuZGVmaW5lZDtcbiAgdGhpcy5pc0FzeW5jUGxhY2Vob2xkZXIgPSBmYWxzZTtcbn07XG5cbnZhciBwcm90b3R5cGVBY2Nlc3NvcnMgPSB7IGNoaWxkOiB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH07XG5cbi8vIERFUFJFQ0FURUQ6IGFsaWFzIGZvciBjb21wb25lbnRJbnN0YW5jZSBmb3IgYmFja3dhcmRzIGNvbXBhdC5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5wcm90b3R5cGVBY2Nlc3NvcnMuY2hpbGQuZ2V0ID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5jb21wb25lbnRJbnN0YW5jZVxufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoIFZOb2RlLnByb3RvdHlwZSwgcHJvdG90eXBlQWNjZXNzb3JzICk7XG5cbnZhciBjcmVhdGVFbXB0eVZOb2RlID0gZnVuY3Rpb24gKHRleHQpIHtcbiAgaWYgKCB0ZXh0ID09PSB2b2lkIDAgKSB0ZXh0ID0gJyc7XG5cbiAgdmFyIG5vZGUgPSBuZXcgVk5vZGUoKTtcbiAgbm9kZS50ZXh0ID0gdGV4dDtcbiAgbm9kZS5pc0NvbW1lbnQgPSB0cnVlO1xuICByZXR1cm4gbm9kZVxufTtcblxuZnVuY3Rpb24gY3JlYXRlVGV4dFZOb2RlICh2YWwpIHtcbiAgcmV0dXJuIG5ldyBWTm9kZSh1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBTdHJpbmcodmFsKSlcbn1cblxuLy8gb3B0aW1pemVkIHNoYWxsb3cgY2xvbmVcbi8vIHVzZWQgZm9yIHN0YXRpYyBub2RlcyBhbmQgc2xvdCBub2RlcyBiZWNhdXNlIHRoZXkgbWF5IGJlIHJldXNlZCBhY3Jvc3Ncbi8vIG11bHRpcGxlIHJlbmRlcnMsIGNsb25pbmcgdGhlbSBhdm9pZHMgZXJyb3JzIHdoZW4gRE9NIG1hbmlwdWxhdGlvbnMgcmVseVxuLy8gb24gdGhlaXIgZWxtIHJlZmVyZW5jZS5cbmZ1bmN0aW9uIGNsb25lVk5vZGUgKHZub2RlKSB7XG4gIHZhciBjbG9uZWQgPSBuZXcgVk5vZGUoXG4gICAgdm5vZGUudGFnLFxuICAgIHZub2RlLmRhdGEsXG4gICAgLy8gIzc5NzVcbiAgICAvLyBjbG9uZSBjaGlsZHJlbiBhcnJheSB0byBhdm9pZCBtdXRhdGluZyBvcmlnaW5hbCBpbiBjYXNlIG9mIGNsb25pbmdcbiAgICAvLyBhIGNoaWxkLlxuICAgIHZub2RlLmNoaWxkcmVuICYmIHZub2RlLmNoaWxkcmVuLnNsaWNlKCksXG4gICAgdm5vZGUudGV4dCxcbiAgICB2bm9kZS5lbG0sXG4gICAgdm5vZGUuY29udGV4dCxcbiAgICB2bm9kZS5jb21wb25lbnRPcHRpb25zLFxuICAgIHZub2RlLmFzeW5jRmFjdG9yeVxuICApO1xuICBjbG9uZWQubnMgPSB2bm9kZS5ucztcbiAgY2xvbmVkLmlzU3RhdGljID0gdm5vZGUuaXNTdGF0aWM7XG4gIGNsb25lZC5rZXkgPSB2bm9kZS5rZXk7XG4gIGNsb25lZC5pc0NvbW1lbnQgPSB2bm9kZS5pc0NvbW1lbnQ7XG4gIGNsb25lZC5mbkNvbnRleHQgPSB2bm9kZS5mbkNvbnRleHQ7XG4gIGNsb25lZC5mbk9wdGlvbnMgPSB2bm9kZS5mbk9wdGlvbnM7XG4gIGNsb25lZC5mblNjb3BlSWQgPSB2bm9kZS5mblNjb3BlSWQ7XG4gIGNsb25lZC5hc3luY01ldGEgPSB2bm9kZS5hc3luY01ldGE7XG4gIGNsb25lZC5pc0Nsb25lZCA9IHRydWU7XG4gIHJldHVybiBjbG9uZWRcbn1cblxuLypcbiAqIG5vdCB0eXBlIGNoZWNraW5nIHRoaXMgZmlsZSBiZWNhdXNlIGZsb3cgZG9lc24ndCBwbGF5IHdlbGwgd2l0aFxuICogZHluYW1pY2FsbHkgYWNjZXNzaW5nIG1ldGhvZHMgb24gQXJyYXkgcHJvdG90eXBlXG4gKi9cblxudmFyIGFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGU7XG52YXIgYXJyYXlNZXRob2RzID0gT2JqZWN0LmNyZWF0ZShhcnJheVByb3RvKTtcblxudmFyIG1ldGhvZHNUb1BhdGNoID0gW1xuICAncHVzaCcsXG4gICdwb3AnLFxuICAnc2hpZnQnLFxuICAndW5zaGlmdCcsXG4gICdzcGxpY2UnLFxuICAnc29ydCcsXG4gICdyZXZlcnNlJ1xuXTtcblxuLyoqXG4gKiBJbnRlcmNlcHQgbXV0YXRpbmcgbWV0aG9kcyBhbmQgZW1pdCBldmVudHNcbiAqL1xubWV0aG9kc1RvUGF0Y2guZm9yRWFjaChmdW5jdGlvbiAobWV0aG9kKSB7XG4gIC8vIGNhY2hlIG9yaWdpbmFsIG1ldGhvZFxuICB2YXIgb3JpZ2luYWwgPSBhcnJheVByb3RvW21ldGhvZF07XG4gIGRlZihhcnJheU1ldGhvZHMsIG1ldGhvZCwgZnVuY3Rpb24gbXV0YXRvciAoKSB7XG4gICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgdmFyIHJlc3VsdCA9IG9yaWdpbmFsLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIHZhciBvYiA9IHRoaXMuX19vYl9fO1xuICAgIHZhciBpbnNlcnRlZDtcbiAgICBzd2l0Y2ggKG1ldGhvZCkge1xuICAgICAgY2FzZSAncHVzaCc6XG4gICAgICBjYXNlICd1bnNoaWZ0JzpcbiAgICAgICAgaW5zZXJ0ZWQgPSBhcmdzO1xuICAgICAgICBicmVha1xuICAgICAgY2FzZSAnc3BsaWNlJzpcbiAgICAgICAgaW5zZXJ0ZWQgPSBhcmdzLnNsaWNlKDIpO1xuICAgICAgICBicmVha1xuICAgIH1cbiAgICBpZiAoaW5zZXJ0ZWQpIHsgb2Iub2JzZXJ2ZUFycmF5KGluc2VydGVkKTsgfVxuICAgIC8vIG5vdGlmeSBjaGFuZ2VcbiAgICBvYi5kZXAubm90aWZ5KCk7XG4gICAgcmV0dXJuIHJlc3VsdFxuICB9KTtcbn0pO1xuXG4vKiAgKi9cblxudmFyIGFycmF5S2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGFycmF5TWV0aG9kcyk7XG5cbi8qKlxuICogSW4gc29tZSBjYXNlcyB3ZSBtYXkgd2FudCB0byBkaXNhYmxlIG9ic2VydmF0aW9uIGluc2lkZSBhIGNvbXBvbmVudCdzXG4gKiB1cGRhdGUgY29tcHV0YXRpb24uXG4gKi9cbnZhciBzaG91bGRPYnNlcnZlID0gdHJ1ZTtcblxuZnVuY3Rpb24gdG9nZ2xlT2JzZXJ2aW5nICh2YWx1ZSkge1xuICBzaG91bGRPYnNlcnZlID0gdmFsdWU7XG59XG5cbi8qKlxuICogT2JzZXJ2ZXIgY2xhc3MgdGhhdCBpcyBhdHRhY2hlZCB0byBlYWNoIG9ic2VydmVkXG4gKiBvYmplY3QuIE9uY2UgYXR0YWNoZWQsIHRoZSBvYnNlcnZlciBjb252ZXJ0cyB0aGUgdGFyZ2V0XG4gKiBvYmplY3QncyBwcm9wZXJ0eSBrZXlzIGludG8gZ2V0dGVyL3NldHRlcnMgdGhhdFxuICogY29sbGVjdCBkZXBlbmRlbmNpZXMgYW5kIGRpc3BhdGNoIHVwZGF0ZXMuXG4gKi9cbnZhciBPYnNlcnZlciA9IGZ1bmN0aW9uIE9ic2VydmVyICh2YWx1ZSkge1xuICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gIHRoaXMuZGVwID0gbmV3IERlcCgpO1xuICB0aGlzLnZtQ291bnQgPSAwO1xuICBkZWYodmFsdWUsICdfX29iX18nLCB0aGlzKTtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgaWYgKGhhc1Byb3RvKSB7XG4gICAgICBwcm90b0F1Z21lbnQodmFsdWUsIGFycmF5TWV0aG9kcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvcHlBdWdtZW50KHZhbHVlLCBhcnJheU1ldGhvZHMsIGFycmF5S2V5cyk7XG4gICAgfVxuICAgIHRoaXMub2JzZXJ2ZUFycmF5KHZhbHVlKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLndhbGsodmFsdWUpO1xuICB9XG59O1xuXG4vKipcbiAqIFdhbGsgdGhyb3VnaCBhbGwgcHJvcGVydGllcyBhbmQgY29udmVydCB0aGVtIGludG9cbiAqIGdldHRlci9zZXR0ZXJzLiBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgd2hlblxuICogdmFsdWUgdHlwZSBpcyBPYmplY3QuXG4gKi9cbk9ic2VydmVyLnByb3RvdHlwZS53YWxrID0gZnVuY3Rpb24gd2FsayAob2JqKSB7XG4gIHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgZGVmaW5lUmVhY3RpdmUkJDEob2JqLCBrZXlzW2ldKTtcbiAgfVxufTtcblxuLyoqXG4gKiBPYnNlcnZlIGEgbGlzdCBvZiBBcnJheSBpdGVtcy5cbiAqL1xuT2JzZXJ2ZXIucHJvdG90eXBlLm9ic2VydmVBcnJheSA9IGZ1bmN0aW9uIG9ic2VydmVBcnJheSAoaXRlbXMpIHtcbiAgZm9yICh2YXIgaSA9IDAsIGwgPSBpdGVtcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBvYnNlcnZlKGl0ZW1zW2ldKTtcbiAgfVxufTtcblxuLy8gaGVscGVyc1xuXG4vKipcbiAqIEF1Z21lbnQgYSB0YXJnZXQgT2JqZWN0IG9yIEFycmF5IGJ5IGludGVyY2VwdGluZ1xuICogdGhlIHByb3RvdHlwZSBjaGFpbiB1c2luZyBfX3Byb3RvX19cbiAqL1xuZnVuY3Rpb24gcHJvdG9BdWdtZW50ICh0YXJnZXQsIHNyYykge1xuICAvKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90byAqL1xuICB0YXJnZXQuX19wcm90b19fID0gc3JjO1xuICAvKiBlc2xpbnQtZW5hYmxlIG5vLXByb3RvICovXG59XG5cbi8qKlxuICogQXVnbWVudCBhIHRhcmdldCBPYmplY3Qgb3IgQXJyYXkgYnkgZGVmaW5pbmdcbiAqIGhpZGRlbiBwcm9wZXJ0aWVzLlxuICovXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuZnVuY3Rpb24gY29weUF1Z21lbnQgKHRhcmdldCwgc3JjLCBrZXlzKSB7XG4gIGZvciAodmFyIGkgPSAwLCBsID0ga2V5cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICBkZWYodGFyZ2V0LCBrZXksIHNyY1trZXldKTtcbiAgfVxufVxuXG4vKipcbiAqIEF0dGVtcHQgdG8gY3JlYXRlIGFuIG9ic2VydmVyIGluc3RhbmNlIGZvciBhIHZhbHVlLFxuICogcmV0dXJucyB0aGUgbmV3IG9ic2VydmVyIGlmIHN1Y2Nlc3NmdWxseSBvYnNlcnZlZCxcbiAqIG9yIHRoZSBleGlzdGluZyBvYnNlcnZlciBpZiB0aGUgdmFsdWUgYWxyZWFkeSBoYXMgb25lLlxuICovXG5mdW5jdGlvbiBvYnNlcnZlICh2YWx1ZSwgYXNSb290RGF0YSkge1xuICBpZiAoIWlzT2JqZWN0KHZhbHVlKSB8fCB2YWx1ZSBpbnN0YW5jZW9mIFZOb2RlKSB7XG4gICAgcmV0dXJuXG4gIH1cbiAgdmFyIG9iO1xuICBpZiAoaGFzT3duKHZhbHVlLCAnX19vYl9fJykgJiYgdmFsdWUuX19vYl9fIGluc3RhbmNlb2YgT2JzZXJ2ZXIpIHtcbiAgICBvYiA9IHZhbHVlLl9fb2JfXztcbiAgfSBlbHNlIGlmIChcbiAgICBzaG91bGRPYnNlcnZlICYmXG4gICAgIWlzU2VydmVyUmVuZGVyaW5nKCkgJiZcbiAgICAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgfHwgaXNQbGFpbk9iamVjdCh2YWx1ZSkpICYmXG4gICAgT2JqZWN0LmlzRXh0ZW5zaWJsZSh2YWx1ZSkgJiZcbiAgICAhdmFsdWUuX2lzVnVlXG4gICkge1xuICAgIG9iID0gbmV3IE9ic2VydmVyKHZhbHVlKTtcbiAgfVxuICBpZiAoYXNSb290RGF0YSAmJiBvYikge1xuICAgIG9iLnZtQ291bnQrKztcbiAgfVxuICByZXR1cm4gb2Jcbn1cblxuLyoqXG4gKiBEZWZpbmUgYSByZWFjdGl2ZSBwcm9wZXJ0eSBvbiBhbiBPYmplY3QuXG4gKi9cbmZ1bmN0aW9uIGRlZmluZVJlYWN0aXZlJCQxIChcbiAgb2JqLFxuICBrZXksXG4gIHZhbCxcbiAgY3VzdG9tU2V0dGVyLFxuICBzaGFsbG93XG4pIHtcbiAgdmFyIGRlcCA9IG5ldyBEZXAoKTtcblxuICB2YXIgcHJvcGVydHkgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwga2V5KTtcbiAgaWYgKHByb3BlcnR5ICYmIHByb3BlcnR5LmNvbmZpZ3VyYWJsZSA9PT0gZmFsc2UpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8vIGNhdGVyIGZvciBwcmUtZGVmaW5lZCBnZXR0ZXIvc2V0dGVyc1xuICB2YXIgZ2V0dGVyID0gcHJvcGVydHkgJiYgcHJvcGVydHkuZ2V0O1xuICB2YXIgc2V0dGVyID0gcHJvcGVydHkgJiYgcHJvcGVydHkuc2V0O1xuICBpZiAoKCFnZXR0ZXIgfHwgc2V0dGVyKSAmJiBhcmd1bWVudHMubGVuZ3RoID09PSAyKSB7XG4gICAgdmFsID0gb2JqW2tleV07XG4gIH1cblxuICB2YXIgY2hpbGRPYiA9ICFzaGFsbG93ICYmIG9ic2VydmUodmFsKTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiByZWFjdGl2ZUdldHRlciAoKSB7XG4gICAgICB2YXIgdmFsdWUgPSBnZXR0ZXIgPyBnZXR0ZXIuY2FsbChvYmopIDogdmFsO1xuICAgICAgaWYgKERlcC50YXJnZXQpIHtcbiAgICAgICAgZGVwLmRlcGVuZCgpO1xuICAgICAgICBpZiAoY2hpbGRPYikge1xuICAgICAgICAgIGNoaWxkT2IuZGVwLmRlcGVuZCgpO1xuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgZGVwZW5kQXJyYXkodmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbHVlXG4gICAgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uIHJlYWN0aXZlU2V0dGVyIChuZXdWYWwpIHtcbiAgICAgIHZhciB2YWx1ZSA9IGdldHRlciA/IGdldHRlci5jYWxsKG9iaikgOiB2YWw7XG4gICAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby1zZWxmLWNvbXBhcmUgKi9cbiAgICAgIGlmIChuZXdWYWwgPT09IHZhbHVlIHx8IChuZXdWYWwgIT09IG5ld1ZhbCAmJiB2YWx1ZSAhPT0gdmFsdWUpKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgLyogZXNsaW50LWVuYWJsZSBuby1zZWxmLWNvbXBhcmUgKi9cbiAgICAgIGlmIChjdXN0b21TZXR0ZXIpIHtcbiAgICAgICAgY3VzdG9tU2V0dGVyKCk7XG4gICAgICB9XG4gICAgICAvLyAjNzk4MTogZm9yIGFjY2Vzc29yIHByb3BlcnRpZXMgd2l0aG91dCBzZXR0ZXJcbiAgICAgIGlmIChnZXR0ZXIgJiYgIXNldHRlcikgeyByZXR1cm4gfVxuICAgICAgaWYgKHNldHRlcikge1xuICAgICAgICBzZXR0ZXIuY2FsbChvYmosIG5ld1ZhbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWwgPSBuZXdWYWw7XG4gICAgICB9XG4gICAgICBjaGlsZE9iID0gIXNoYWxsb3cgJiYgb2JzZXJ2ZShuZXdWYWwpO1xuICAgICAgZGVwLm5vdGlmeSgpO1xuICAgIH1cbiAgfSk7XG59XG5cbi8qKlxuICogU2V0IGEgcHJvcGVydHkgb24gYW4gb2JqZWN0LiBBZGRzIHRoZSBuZXcgcHJvcGVydHkgYW5kXG4gKiB0cmlnZ2VycyBjaGFuZ2Ugbm90aWZpY2F0aW9uIGlmIHRoZSBwcm9wZXJ0eSBkb2Vzbid0XG4gKiBhbHJlYWR5IGV4aXN0LlxuICovXG5mdW5jdGlvbiBzZXQgKHRhcmdldCwga2V5LCB2YWwpIHtcbiAgaWYgKGlzVW5kZWYodGFyZ2V0KSB8fCBpc1ByaW1pdGl2ZSh0YXJnZXQpXG4gICkge1xuICAgIHdhcm4oKFwiQ2Fubm90IHNldCByZWFjdGl2ZSBwcm9wZXJ0eSBvbiB1bmRlZmluZWQsIG51bGwsIG9yIHByaW1pdGl2ZSB2YWx1ZTogXCIgKyAoKHRhcmdldCkpKSk7XG4gIH1cbiAgaWYgKEFycmF5LmlzQXJyYXkodGFyZ2V0KSAmJiBpc1ZhbGlkQXJyYXlJbmRleChrZXkpKSB7XG4gICAgdGFyZ2V0Lmxlbmd0aCA9IE1hdGgubWF4KHRhcmdldC5sZW5ndGgsIGtleSk7XG4gICAgdGFyZ2V0LnNwbGljZShrZXksIDEsIHZhbCk7XG4gICAgcmV0dXJuIHZhbFxuICB9XG4gIGlmIChrZXkgaW4gdGFyZ2V0ICYmICEoa2V5IGluIE9iamVjdC5wcm90b3R5cGUpKSB7XG4gICAgdGFyZ2V0W2tleV0gPSB2YWw7XG4gICAgcmV0dXJuIHZhbFxuICB9XG4gIHZhciBvYiA9ICh0YXJnZXQpLl9fb2JfXztcbiAgaWYgKHRhcmdldC5faXNWdWUgfHwgKG9iICYmIG9iLnZtQ291bnQpKSB7XG4gICAgd2FybihcbiAgICAgICdBdm9pZCBhZGRpbmcgcmVhY3RpdmUgcHJvcGVydGllcyB0byBhIFZ1ZSBpbnN0YW5jZSBvciBpdHMgcm9vdCAkZGF0YSAnICtcbiAgICAgICdhdCBydW50aW1lIC0gZGVjbGFyZSBpdCB1cGZyb250IGluIHRoZSBkYXRhIG9wdGlvbi4nXG4gICAgKTtcbiAgICByZXR1cm4gdmFsXG4gIH1cbiAgaWYgKCFvYikge1xuICAgIHRhcmdldFtrZXldID0gdmFsO1xuICAgIHJldHVybiB2YWxcbiAgfVxuICBkZWZpbmVSZWFjdGl2ZSQkMShvYi52YWx1ZSwga2V5LCB2YWwpO1xuICBvYi5kZXAubm90aWZ5KCk7XG4gIHJldHVybiB2YWxcbn1cblxuLyoqXG4gKiBEZWxldGUgYSBwcm9wZXJ0eSBhbmQgdHJpZ2dlciBjaGFuZ2UgaWYgbmVjZXNzYXJ5LlxuICovXG5mdW5jdGlvbiBkZWwgKHRhcmdldCwga2V5KSB7XG4gIGlmIChpc1VuZGVmKHRhcmdldCkgfHwgaXNQcmltaXRpdmUodGFyZ2V0KVxuICApIHtcbiAgICB3YXJuKChcIkNhbm5vdCBkZWxldGUgcmVhY3RpdmUgcHJvcGVydHkgb24gdW5kZWZpbmVkLCBudWxsLCBvciBwcmltaXRpdmUgdmFsdWU6IFwiICsgKCh0YXJnZXQpKSkpO1xuICB9XG4gIGlmIChBcnJheS5pc0FycmF5KHRhcmdldCkgJiYgaXNWYWxpZEFycmF5SW5kZXgoa2V5KSkge1xuICAgIHRhcmdldC5zcGxpY2Uoa2V5LCAxKTtcbiAgICByZXR1cm5cbiAgfVxuICB2YXIgb2IgPSAodGFyZ2V0KS5fX29iX187XG4gIGlmICh0YXJnZXQuX2lzVnVlIHx8IChvYiAmJiBvYi52bUNvdW50KSkge1xuICAgIHdhcm4oXG4gICAgICAnQXZvaWQgZGVsZXRpbmcgcHJvcGVydGllcyBvbiBhIFZ1ZSBpbnN0YW5jZSBvciBpdHMgcm9vdCAkZGF0YSAnICtcbiAgICAgICctIGp1c3Qgc2V0IGl0IHRvIG51bGwuJ1xuICAgICk7XG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKCFoYXNPd24odGFyZ2V0LCBrZXkpKSB7XG4gICAgcmV0dXJuXG4gIH1cbiAgZGVsZXRlIHRhcmdldFtrZXldO1xuICBpZiAoIW9iKSB7XG4gICAgcmV0dXJuXG4gIH1cbiAgb2IuZGVwLm5vdGlmeSgpO1xufVxuXG4vKipcbiAqIENvbGxlY3QgZGVwZW5kZW5jaWVzIG9uIGFycmF5IGVsZW1lbnRzIHdoZW4gdGhlIGFycmF5IGlzIHRvdWNoZWQsIHNpbmNlXG4gKiB3ZSBjYW5ub3QgaW50ZXJjZXB0IGFycmF5IGVsZW1lbnQgYWNjZXNzIGxpa2UgcHJvcGVydHkgZ2V0dGVycy5cbiAqL1xuZnVuY3Rpb24gZGVwZW5kQXJyYXkgKHZhbHVlKSB7XG4gIGZvciAodmFyIGUgPSAodm9pZCAwKSwgaSA9IDAsIGwgPSB2YWx1ZS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBlID0gdmFsdWVbaV07XG4gICAgZSAmJiBlLl9fb2JfXyAmJiBlLl9fb2JfXy5kZXAuZGVwZW5kKCk7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZSkpIHtcbiAgICAgIGRlcGVuZEFycmF5KGUpO1xuICAgIH1cbiAgfVxufVxuXG4vKiAgKi9cblxuLyoqXG4gKiBPcHRpb24gb3ZlcndyaXRpbmcgc3RyYXRlZ2llcyBhcmUgZnVuY3Rpb25zIHRoYXQgaGFuZGxlXG4gKiBob3cgdG8gbWVyZ2UgYSBwYXJlbnQgb3B0aW9uIHZhbHVlIGFuZCBhIGNoaWxkIG9wdGlvblxuICogdmFsdWUgaW50byB0aGUgZmluYWwgdmFsdWUuXG4gKi9cbnZhciBzdHJhdHMgPSBjb25maWcub3B0aW9uTWVyZ2VTdHJhdGVnaWVzO1xuXG4vKipcbiAqIE9wdGlvbnMgd2l0aCByZXN0cmljdGlvbnNcbiAqL1xue1xuICBzdHJhdHMuZWwgPSBzdHJhdHMucHJvcHNEYXRhID0gZnVuY3Rpb24gKHBhcmVudCwgY2hpbGQsIHZtLCBrZXkpIHtcbiAgICBpZiAoIXZtKSB7XG4gICAgICB3YXJuKFxuICAgICAgICBcIm9wdGlvbiBcXFwiXCIgKyBrZXkgKyBcIlxcXCIgY2FuIG9ubHkgYmUgdXNlZCBkdXJpbmcgaW5zdGFuY2UgXCIgK1xuICAgICAgICAnY3JlYXRpb24gd2l0aCB0aGUgYG5ld2Aga2V5d29yZC4nXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gZGVmYXVsdFN0cmF0KHBhcmVudCwgY2hpbGQpXG4gIH07XG59XG5cbi8qKlxuICogSGVscGVyIHRoYXQgcmVjdXJzaXZlbHkgbWVyZ2VzIHR3byBkYXRhIG9iamVjdHMgdG9nZXRoZXIuXG4gKi9cbmZ1bmN0aW9uIG1lcmdlRGF0YSAodG8sIGZyb20pIHtcbiAgaWYgKCFmcm9tKSB7IHJldHVybiB0byB9XG4gIHZhciBrZXksIHRvVmFsLCBmcm9tVmFsO1xuXG4gIHZhciBrZXlzID0gaGFzU3ltYm9sXG4gICAgPyBSZWZsZWN0Lm93bktleXMoZnJvbSlcbiAgICA6IE9iamVjdC5rZXlzKGZyb20pO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgIGtleSA9IGtleXNbaV07XG4gICAgLy8gaW4gY2FzZSB0aGUgb2JqZWN0IGlzIGFscmVhZHkgb2JzZXJ2ZWQuLi5cbiAgICBpZiAoa2V5ID09PSAnX19vYl9fJykgeyBjb250aW51ZSB9XG4gICAgdG9WYWwgPSB0b1trZXldO1xuICAgIGZyb21WYWwgPSBmcm9tW2tleV07XG4gICAgaWYgKCFoYXNPd24odG8sIGtleSkpIHtcbiAgICAgIHNldCh0bywga2V5LCBmcm9tVmFsKTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgdG9WYWwgIT09IGZyb21WYWwgJiZcbiAgICAgIGlzUGxhaW5PYmplY3QodG9WYWwpICYmXG4gICAgICBpc1BsYWluT2JqZWN0KGZyb21WYWwpXG4gICAgKSB7XG4gICAgICBtZXJnZURhdGEodG9WYWwsIGZyb21WYWwpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdG9cbn1cblxuLyoqXG4gKiBEYXRhXG4gKi9cbmZ1bmN0aW9uIG1lcmdlRGF0YU9yRm4gKFxuICBwYXJlbnRWYWwsXG4gIGNoaWxkVmFsLFxuICB2bVxuKSB7XG4gIGlmICghdm0pIHtcbiAgICAvLyBpbiBhIFZ1ZS5leHRlbmQgbWVyZ2UsIGJvdGggc2hvdWxkIGJlIGZ1bmN0aW9uc1xuICAgIGlmICghY2hpbGRWYWwpIHtcbiAgICAgIHJldHVybiBwYXJlbnRWYWxcbiAgICB9XG4gICAgaWYgKCFwYXJlbnRWYWwpIHtcbiAgICAgIHJldHVybiBjaGlsZFZhbFxuICAgIH1cbiAgICAvLyB3aGVuIHBhcmVudFZhbCAmIGNoaWxkVmFsIGFyZSBib3RoIHByZXNlbnQsXG4gICAgLy8gd2UgbmVlZCB0byByZXR1cm4gYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlXG4gICAgLy8gbWVyZ2VkIHJlc3VsdCBvZiBib3RoIGZ1bmN0aW9ucy4uLiBubyBuZWVkIHRvXG4gICAgLy8gY2hlY2sgaWYgcGFyZW50VmFsIGlzIGEgZnVuY3Rpb24gaGVyZSBiZWNhdXNlXG4gICAgLy8gaXQgaGFzIHRvIGJlIGEgZnVuY3Rpb24gdG8gcGFzcyBwcmV2aW91cyBtZXJnZXMuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIG1lcmdlZERhdGFGbiAoKSB7XG4gICAgICByZXR1cm4gbWVyZ2VEYXRhKFxuICAgICAgICB0eXBlb2YgY2hpbGRWYWwgPT09ICdmdW5jdGlvbicgPyBjaGlsZFZhbC5jYWxsKHRoaXMsIHRoaXMpIDogY2hpbGRWYWwsXG4gICAgICAgIHR5cGVvZiBwYXJlbnRWYWwgPT09ICdmdW5jdGlvbicgPyBwYXJlbnRWYWwuY2FsbCh0aGlzLCB0aGlzKSA6IHBhcmVudFZhbFxuICAgICAgKVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gbWVyZ2VkSW5zdGFuY2VEYXRhRm4gKCkge1xuICAgICAgLy8gaW5zdGFuY2UgbWVyZ2VcbiAgICAgIHZhciBpbnN0YW5jZURhdGEgPSB0eXBlb2YgY2hpbGRWYWwgPT09ICdmdW5jdGlvbidcbiAgICAgICAgPyBjaGlsZFZhbC5jYWxsKHZtLCB2bSlcbiAgICAgICAgOiBjaGlsZFZhbDtcbiAgICAgIHZhciBkZWZhdWx0RGF0YSA9IHR5cGVvZiBwYXJlbnRWYWwgPT09ICdmdW5jdGlvbidcbiAgICAgICAgPyBwYXJlbnRWYWwuY2FsbCh2bSwgdm0pXG4gICAgICAgIDogcGFyZW50VmFsO1xuICAgICAgaWYgKGluc3RhbmNlRGF0YSkge1xuICAgICAgICByZXR1cm4gbWVyZ2VEYXRhKGluc3RhbmNlRGF0YSwgZGVmYXVsdERhdGEpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZGVmYXVsdERhdGFcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuc3RyYXRzLmRhdGEgPSBmdW5jdGlvbiAoXG4gIHBhcmVudFZhbCxcbiAgY2hpbGRWYWwsXG4gIHZtXG4pIHtcbiAgaWYgKCF2bSkge1xuICAgIGlmIChjaGlsZFZhbCAmJiB0eXBlb2YgY2hpbGRWYWwgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHdhcm4oXG4gICAgICAgICdUaGUgXCJkYXRhXCIgb3B0aW9uIHNob3VsZCBiZSBhIGZ1bmN0aW9uICcgK1xuICAgICAgICAndGhhdCByZXR1cm5zIGEgcGVyLWluc3RhbmNlIHZhbHVlIGluIGNvbXBvbmVudCAnICtcbiAgICAgICAgJ2RlZmluaXRpb25zLicsXG4gICAgICAgIHZtXG4gICAgICApO1xuXG4gICAgICByZXR1cm4gcGFyZW50VmFsXG4gICAgfVxuICAgIHJldHVybiBtZXJnZURhdGFPckZuKHBhcmVudFZhbCwgY2hpbGRWYWwpXG4gIH1cblxuICByZXR1cm4gbWVyZ2VEYXRhT3JGbihwYXJlbnRWYWwsIGNoaWxkVmFsLCB2bSlcbn07XG5cbi8qKlxuICogSG9va3MgYW5kIHByb3BzIGFyZSBtZXJnZWQgYXMgYXJyYXlzLlxuICovXG5mdW5jdGlvbiBtZXJnZUhvb2sgKFxuICBwYXJlbnRWYWwsXG4gIGNoaWxkVmFsXG4pIHtcbiAgdmFyIHJlcyA9IGNoaWxkVmFsXG4gICAgPyBwYXJlbnRWYWxcbiAgICAgID8gcGFyZW50VmFsLmNvbmNhdChjaGlsZFZhbClcbiAgICAgIDogQXJyYXkuaXNBcnJheShjaGlsZFZhbClcbiAgICAgICAgPyBjaGlsZFZhbFxuICAgICAgICA6IFtjaGlsZFZhbF1cbiAgICA6IHBhcmVudFZhbDtcbiAgcmV0dXJuIHJlc1xuICAgID8gZGVkdXBlSG9va3MocmVzKVxuICAgIDogcmVzXG59XG5cbmZ1bmN0aW9uIGRlZHVwZUhvb2tzIChob29rcykge1xuICB2YXIgcmVzID0gW107XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgaG9va3MubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAocmVzLmluZGV4T2YoaG9va3NbaV0pID09PSAtMSkge1xuICAgICAgcmVzLnB1c2goaG9va3NbaV0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbkxJRkVDWUNMRV9IT09LUy5mb3JFYWNoKGZ1bmN0aW9uIChob29rKSB7XG4gIHN0cmF0c1tob29rXSA9IG1lcmdlSG9vaztcbn0pO1xuXG4vKipcbiAqIEFzc2V0c1xuICpcbiAqIFdoZW4gYSB2bSBpcyBwcmVzZW50IChpbnN0YW5jZSBjcmVhdGlvbiksIHdlIG5lZWQgdG8gZG9cbiAqIGEgdGhyZWUtd2F5IG1lcmdlIGJldHdlZW4gY29uc3RydWN0b3Igb3B0aW9ucywgaW5zdGFuY2VcbiAqIG9wdGlvbnMgYW5kIHBhcmVudCBvcHRpb25zLlxuICovXG5mdW5jdGlvbiBtZXJnZUFzc2V0cyAoXG4gIHBhcmVudFZhbCxcbiAgY2hpbGRWYWwsXG4gIHZtLFxuICBrZXlcbikge1xuICB2YXIgcmVzID0gT2JqZWN0LmNyZWF0ZShwYXJlbnRWYWwgfHwgbnVsbCk7XG4gIGlmIChjaGlsZFZhbCkge1xuICAgIGFzc2VydE9iamVjdFR5cGUoa2V5LCBjaGlsZFZhbCwgdm0pO1xuICAgIHJldHVybiBleHRlbmQocmVzLCBjaGlsZFZhbClcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gcmVzXG4gIH1cbn1cblxuQVNTRVRfVFlQRVMuZm9yRWFjaChmdW5jdGlvbiAodHlwZSkge1xuICBzdHJhdHNbdHlwZSArICdzJ10gPSBtZXJnZUFzc2V0cztcbn0pO1xuXG4vKipcbiAqIFdhdGNoZXJzLlxuICpcbiAqIFdhdGNoZXJzIGhhc2hlcyBzaG91bGQgbm90IG92ZXJ3cml0ZSBvbmVcbiAqIGFub3RoZXIsIHNvIHdlIG1lcmdlIHRoZW0gYXMgYXJyYXlzLlxuICovXG5zdHJhdHMud2F0Y2ggPSBmdW5jdGlvbiAoXG4gIHBhcmVudFZhbCxcbiAgY2hpbGRWYWwsXG4gIHZtLFxuICBrZXlcbikge1xuICAvLyB3b3JrIGFyb3VuZCBGaXJlZm94J3MgT2JqZWN0LnByb3RvdHlwZS53YXRjaC4uLlxuICBpZiAocGFyZW50VmFsID09PSBuYXRpdmVXYXRjaCkgeyBwYXJlbnRWYWwgPSB1bmRlZmluZWQ7IH1cbiAgaWYgKGNoaWxkVmFsID09PSBuYXRpdmVXYXRjaCkgeyBjaGlsZFZhbCA9IHVuZGVmaW5lZDsgfVxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKCFjaGlsZFZhbCkgeyByZXR1cm4gT2JqZWN0LmNyZWF0ZShwYXJlbnRWYWwgfHwgbnVsbCkgfVxuICB7XG4gICAgYXNzZXJ0T2JqZWN0VHlwZShrZXksIGNoaWxkVmFsLCB2bSk7XG4gIH1cbiAgaWYgKCFwYXJlbnRWYWwpIHsgcmV0dXJuIGNoaWxkVmFsIH1cbiAgdmFyIHJldCA9IHt9O1xuICBleHRlbmQocmV0LCBwYXJlbnRWYWwpO1xuICBmb3IgKHZhciBrZXkkMSBpbiBjaGlsZFZhbCkge1xuICAgIHZhciBwYXJlbnQgPSByZXRba2V5JDFdO1xuICAgIHZhciBjaGlsZCA9IGNoaWxkVmFsW2tleSQxXTtcbiAgICBpZiAocGFyZW50ICYmICFBcnJheS5pc0FycmF5KHBhcmVudCkpIHtcbiAgICAgIHBhcmVudCA9IFtwYXJlbnRdO1xuICAgIH1cbiAgICByZXRba2V5JDFdID0gcGFyZW50XG4gICAgICA/IHBhcmVudC5jb25jYXQoY2hpbGQpXG4gICAgICA6IEFycmF5LmlzQXJyYXkoY2hpbGQpID8gY2hpbGQgOiBbY2hpbGRdO1xuICB9XG4gIHJldHVybiByZXRcbn07XG5cbi8qKlxuICogT3RoZXIgb2JqZWN0IGhhc2hlcy5cbiAqL1xuc3RyYXRzLnByb3BzID1cbnN0cmF0cy5tZXRob2RzID1cbnN0cmF0cy5pbmplY3QgPVxuc3RyYXRzLmNvbXB1dGVkID0gZnVuY3Rpb24gKFxuICBwYXJlbnRWYWwsXG4gIGNoaWxkVmFsLFxuICB2bSxcbiAga2V5XG4pIHtcbiAgaWYgKGNoaWxkVmFsICYmIFwiZGV2ZWxvcG1lbnRcIiAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgYXNzZXJ0T2JqZWN0VHlwZShrZXksIGNoaWxkVmFsLCB2bSk7XG4gIH1cbiAgaWYgKCFwYXJlbnRWYWwpIHsgcmV0dXJuIGNoaWxkVmFsIH1cbiAgdmFyIHJldCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIGV4dGVuZChyZXQsIHBhcmVudFZhbCk7XG4gIGlmIChjaGlsZFZhbCkgeyBleHRlbmQocmV0LCBjaGlsZFZhbCk7IH1cbiAgcmV0dXJuIHJldFxufTtcbnN0cmF0cy5wcm92aWRlID0gbWVyZ2VEYXRhT3JGbjtcblxuLyoqXG4gKiBEZWZhdWx0IHN0cmF0ZWd5LlxuICovXG52YXIgZGVmYXVsdFN0cmF0ID0gZnVuY3Rpb24gKHBhcmVudFZhbCwgY2hpbGRWYWwpIHtcbiAgcmV0dXJuIGNoaWxkVmFsID09PSB1bmRlZmluZWRcbiAgICA/IHBhcmVudFZhbFxuICAgIDogY2hpbGRWYWxcbn07XG5cbi8qKlxuICogVmFsaWRhdGUgY29tcG9uZW50IG5hbWVzXG4gKi9cbmZ1bmN0aW9uIGNoZWNrQ29tcG9uZW50cyAob3B0aW9ucykge1xuICBmb3IgKHZhciBrZXkgaW4gb3B0aW9ucy5jb21wb25lbnRzKSB7XG4gICAgdmFsaWRhdGVDb21wb25lbnROYW1lKGtleSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVDb21wb25lbnROYW1lIChuYW1lKSB7XG4gIGlmICghbmV3IFJlZ0V4cCgoXCJeW2EtekEtWl1bXFxcXC1cXFxcLjAtOV9cIiArICh1bmljb2RlUmVnRXhwLnNvdXJjZSkgKyBcIl0qJFwiKSkudGVzdChuYW1lKSkge1xuICAgIHdhcm4oXG4gICAgICAnSW52YWxpZCBjb21wb25lbnQgbmFtZTogXCInICsgbmFtZSArICdcIi4gQ29tcG9uZW50IG5hbWVzICcgK1xuICAgICAgJ3Nob3VsZCBjb25mb3JtIHRvIHZhbGlkIGN1c3RvbSBlbGVtZW50IG5hbWUgaW4gaHRtbDUgc3BlY2lmaWNhdGlvbi4nXG4gICAgKTtcbiAgfVxuICBpZiAoaXNCdWlsdEluVGFnKG5hbWUpIHx8IGNvbmZpZy5pc1Jlc2VydmVkVGFnKG5hbWUpKSB7XG4gICAgd2FybihcbiAgICAgICdEbyBub3QgdXNlIGJ1aWx0LWluIG9yIHJlc2VydmVkIEhUTUwgZWxlbWVudHMgYXMgY29tcG9uZW50ICcgK1xuICAgICAgJ2lkOiAnICsgbmFtZVxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBFbnN1cmUgYWxsIHByb3BzIG9wdGlvbiBzeW50YXggYXJlIG5vcm1hbGl6ZWQgaW50byB0aGVcbiAqIE9iamVjdC1iYXNlZCBmb3JtYXQuXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZVByb3BzIChvcHRpb25zLCB2bSkge1xuICB2YXIgcHJvcHMgPSBvcHRpb25zLnByb3BzO1xuICBpZiAoIXByb3BzKSB7IHJldHVybiB9XG4gIHZhciByZXMgPSB7fTtcbiAgdmFyIGksIHZhbCwgbmFtZTtcbiAgaWYgKEFycmF5LmlzQXJyYXkocHJvcHMpKSB7XG4gICAgaSA9IHByb3BzLmxlbmd0aDtcbiAgICB3aGlsZSAoaS0tKSB7XG4gICAgICB2YWwgPSBwcm9wc1tpXTtcbiAgICAgIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJykge1xuICAgICAgICBuYW1lID0gY2FtZWxpemUodmFsKTtcbiAgICAgICAgcmVzW25hbWVdID0geyB0eXBlOiBudWxsIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB3YXJuKCdwcm9wcyBtdXN0IGJlIHN0cmluZ3Mgd2hlbiB1c2luZyBhcnJheSBzeW50YXguJyk7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzUGxhaW5PYmplY3QocHJvcHMpKSB7XG4gICAgZm9yICh2YXIga2V5IGluIHByb3BzKSB7XG4gICAgICB2YWwgPSBwcm9wc1trZXldO1xuICAgICAgbmFtZSA9IGNhbWVsaXplKGtleSk7XG4gICAgICByZXNbbmFtZV0gPSBpc1BsYWluT2JqZWN0KHZhbClcbiAgICAgICAgPyB2YWxcbiAgICAgICAgOiB7IHR5cGU6IHZhbCB9O1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB3YXJuKFxuICAgICAgXCJJbnZhbGlkIHZhbHVlIGZvciBvcHRpb24gXFxcInByb3BzXFxcIjogZXhwZWN0ZWQgYW4gQXJyYXkgb3IgYW4gT2JqZWN0LCBcIiArXG4gICAgICBcImJ1dCBnb3QgXCIgKyAodG9SYXdUeXBlKHByb3BzKSkgKyBcIi5cIixcbiAgICAgIHZtXG4gICAgKTtcbiAgfVxuICBvcHRpb25zLnByb3BzID0gcmVzO1xufVxuXG4vKipcbiAqIE5vcm1hbGl6ZSBhbGwgaW5qZWN0aW9ucyBpbnRvIE9iamVjdC1iYXNlZCBmb3JtYXRcbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplSW5qZWN0IChvcHRpb25zLCB2bSkge1xuICB2YXIgaW5qZWN0ID0gb3B0aW9ucy5pbmplY3Q7XG4gIGlmICghaW5qZWN0KSB7IHJldHVybiB9XG4gIHZhciBub3JtYWxpemVkID0gb3B0aW9ucy5pbmplY3QgPSB7fTtcbiAgaWYgKEFycmF5LmlzQXJyYXkoaW5qZWN0KSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW5qZWN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBub3JtYWxpemVkW2luamVjdFtpXV0gPSB7IGZyb206IGluamVjdFtpXSB9O1xuICAgIH1cbiAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KGluamVjdCkpIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gaW5qZWN0KSB7XG4gICAgICB2YXIgdmFsID0gaW5qZWN0W2tleV07XG4gICAgICBub3JtYWxpemVkW2tleV0gPSBpc1BsYWluT2JqZWN0KHZhbClcbiAgICAgICAgPyBleHRlbmQoeyBmcm9tOiBrZXkgfSwgdmFsKVxuICAgICAgICA6IHsgZnJvbTogdmFsIH07XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHdhcm4oXG4gICAgICBcIkludmFsaWQgdmFsdWUgZm9yIG9wdGlvbiBcXFwiaW5qZWN0XFxcIjogZXhwZWN0ZWQgYW4gQXJyYXkgb3IgYW4gT2JqZWN0LCBcIiArXG4gICAgICBcImJ1dCBnb3QgXCIgKyAodG9SYXdUeXBlKGluamVjdCkpICsgXCIuXCIsXG4gICAgICB2bVxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBOb3JtYWxpemUgcmF3IGZ1bmN0aW9uIGRpcmVjdGl2ZXMgaW50byBvYmplY3QgZm9ybWF0LlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVEaXJlY3RpdmVzIChvcHRpb25zKSB7XG4gIHZhciBkaXJzID0gb3B0aW9ucy5kaXJlY3RpdmVzO1xuICBpZiAoZGlycykge1xuICAgIGZvciAodmFyIGtleSBpbiBkaXJzKSB7XG4gICAgICB2YXIgZGVmJCQxID0gZGlyc1trZXldO1xuICAgICAgaWYgKHR5cGVvZiBkZWYkJDEgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgZGlyc1trZXldID0geyBiaW5kOiBkZWYkJDEsIHVwZGF0ZTogZGVmJCQxIH07XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGFzc2VydE9iamVjdFR5cGUgKG5hbWUsIHZhbHVlLCB2bSkge1xuICBpZiAoIWlzUGxhaW5PYmplY3QodmFsdWUpKSB7XG4gICAgd2FybihcbiAgICAgIFwiSW52YWxpZCB2YWx1ZSBmb3Igb3B0aW9uIFxcXCJcIiArIG5hbWUgKyBcIlxcXCI6IGV4cGVjdGVkIGFuIE9iamVjdCwgXCIgK1xuICAgICAgXCJidXQgZ290IFwiICsgKHRvUmF3VHlwZSh2YWx1ZSkpICsgXCIuXCIsXG4gICAgICB2bVxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBNZXJnZSB0d28gb3B0aW9uIG9iamVjdHMgaW50byBhIG5ldyBvbmUuXG4gKiBDb3JlIHV0aWxpdHkgdXNlZCBpbiBib3RoIGluc3RhbnRpYXRpb24gYW5kIGluaGVyaXRhbmNlLlxuICovXG5mdW5jdGlvbiBtZXJnZU9wdGlvbnMgKFxuICBwYXJlbnQsXG4gIGNoaWxkLFxuICB2bVxuKSB7XG4gIHtcbiAgICBjaGVja0NvbXBvbmVudHMoY2hpbGQpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBjaGlsZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNoaWxkID0gY2hpbGQub3B0aW9ucztcbiAgfVxuXG4gIG5vcm1hbGl6ZVByb3BzKGNoaWxkLCB2bSk7XG4gIG5vcm1hbGl6ZUluamVjdChjaGlsZCwgdm0pO1xuICBub3JtYWxpemVEaXJlY3RpdmVzKGNoaWxkKTtcblxuICAvLyBBcHBseSBleHRlbmRzIGFuZCBtaXhpbnMgb24gdGhlIGNoaWxkIG9wdGlvbnMsXG4gIC8vIGJ1dCBvbmx5IGlmIGl0IGlzIGEgcmF3IG9wdGlvbnMgb2JqZWN0IHRoYXQgaXNuJ3RcbiAgLy8gdGhlIHJlc3VsdCBvZiBhbm90aGVyIG1lcmdlT3B0aW9ucyBjYWxsLlxuICAvLyBPbmx5IG1lcmdlZCBvcHRpb25zIGhhcyB0aGUgX2Jhc2UgcHJvcGVydHkuXG4gIGlmICghY2hpbGQuX2Jhc2UpIHtcbiAgICBpZiAoY2hpbGQuZXh0ZW5kcykge1xuICAgICAgcGFyZW50ID0gbWVyZ2VPcHRpb25zKHBhcmVudCwgY2hpbGQuZXh0ZW5kcywgdm0pO1xuICAgIH1cbiAgICBpZiAoY2hpbGQubWl4aW5zKSB7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGNoaWxkLm1peGlucy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgcGFyZW50ID0gbWVyZ2VPcHRpb25zKHBhcmVudCwgY2hpbGQubWl4aW5zW2ldLCB2bSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIG9wdGlvbnMgPSB7fTtcbiAgdmFyIGtleTtcbiAgZm9yIChrZXkgaW4gcGFyZW50KSB7XG4gICAgbWVyZ2VGaWVsZChrZXkpO1xuICB9XG4gIGZvciAoa2V5IGluIGNoaWxkKSB7XG4gICAgaWYgKCFoYXNPd24ocGFyZW50LCBrZXkpKSB7XG4gICAgICBtZXJnZUZpZWxkKGtleSk7XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIG1lcmdlRmllbGQgKGtleSkge1xuICAgIHZhciBzdHJhdCA9IHN0cmF0c1trZXldIHx8IGRlZmF1bHRTdHJhdDtcbiAgICBvcHRpb25zW2tleV0gPSBzdHJhdChwYXJlbnRba2V5XSwgY2hpbGRba2V5XSwgdm0sIGtleSk7XG4gIH1cbiAgcmV0dXJuIG9wdGlvbnNcbn1cblxuLyoqXG4gKiBSZXNvbHZlIGFuIGFzc2V0LlxuICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGJlY2F1c2UgY2hpbGQgaW5zdGFuY2VzIG5lZWQgYWNjZXNzXG4gKiB0byBhc3NldHMgZGVmaW5lZCBpbiBpdHMgYW5jZXN0b3IgY2hhaW4uXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVBc3NldCAoXG4gIG9wdGlvbnMsXG4gIHR5cGUsXG4gIGlkLFxuICB3YXJuTWlzc2luZ1xuKSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAodHlwZW9mIGlkICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVyblxuICB9XG4gIHZhciBhc3NldHMgPSBvcHRpb25zW3R5cGVdO1xuICAvLyBjaGVjayBsb2NhbCByZWdpc3RyYXRpb24gdmFyaWF0aW9ucyBmaXJzdFxuICBpZiAoaGFzT3duKGFzc2V0cywgaWQpKSB7IHJldHVybiBhc3NldHNbaWRdIH1cbiAgdmFyIGNhbWVsaXplZElkID0gY2FtZWxpemUoaWQpO1xuICBpZiAoaGFzT3duKGFzc2V0cywgY2FtZWxpemVkSWQpKSB7IHJldHVybiBhc3NldHNbY2FtZWxpemVkSWRdIH1cbiAgdmFyIFBhc2NhbENhc2VJZCA9IGNhcGl0YWxpemUoY2FtZWxpemVkSWQpO1xuICBpZiAoaGFzT3duKGFzc2V0cywgUGFzY2FsQ2FzZUlkKSkgeyByZXR1cm4gYXNzZXRzW1Bhc2NhbENhc2VJZF0gfVxuICAvLyBmYWxsYmFjayB0byBwcm90b3R5cGUgY2hhaW5cbiAgdmFyIHJlcyA9IGFzc2V0c1tpZF0gfHwgYXNzZXRzW2NhbWVsaXplZElkXSB8fCBhc3NldHNbUGFzY2FsQ2FzZUlkXTtcbiAgaWYgKHdhcm5NaXNzaW5nICYmICFyZXMpIHtcbiAgICB3YXJuKFxuICAgICAgJ0ZhaWxlZCB0byByZXNvbHZlICcgKyB0eXBlLnNsaWNlKDAsIC0xKSArICc6ICcgKyBpZCxcbiAgICAgIG9wdGlvbnNcbiAgICApO1xuICB9XG4gIHJldHVybiByZXNcbn1cblxuLyogICovXG5cblxuXG5mdW5jdGlvbiB2YWxpZGF0ZVByb3AgKFxuICBrZXksXG4gIHByb3BPcHRpb25zLFxuICBwcm9wc0RhdGEsXG4gIHZtXG4pIHtcbiAgdmFyIHByb3AgPSBwcm9wT3B0aW9uc1trZXldO1xuICB2YXIgYWJzZW50ID0gIWhhc093bihwcm9wc0RhdGEsIGtleSk7XG4gIHZhciB2YWx1ZSA9IHByb3BzRGF0YVtrZXldO1xuICAvLyBib29sZWFuIGNhc3RpbmdcbiAgdmFyIGJvb2xlYW5JbmRleCA9IGdldFR5cGVJbmRleChCb29sZWFuLCBwcm9wLnR5cGUpO1xuICBpZiAoYm9vbGVhbkluZGV4ID4gLTEpIHtcbiAgICBpZiAoYWJzZW50ICYmICFoYXNPd24ocHJvcCwgJ2RlZmF1bHQnKSkge1xuICAgICAgdmFsdWUgPSBmYWxzZTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlID09PSAnJyB8fCB2YWx1ZSA9PT0gaHlwaGVuYXRlKGtleSkpIHtcbiAgICAgIC8vIG9ubHkgY2FzdCBlbXB0eSBzdHJpbmcgLyBzYW1lIG5hbWUgdG8gYm9vbGVhbiBpZlxuICAgICAgLy8gYm9vbGVhbiBoYXMgaGlnaGVyIHByaW9yaXR5XG4gICAgICB2YXIgc3RyaW5nSW5kZXggPSBnZXRUeXBlSW5kZXgoU3RyaW5nLCBwcm9wLnR5cGUpO1xuICAgICAgaWYgKHN0cmluZ0luZGV4IDwgMCB8fCBib29sZWFuSW5kZXggPCBzdHJpbmdJbmRleCkge1xuICAgICAgICB2YWx1ZSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8vIGNoZWNrIGRlZmF1bHQgdmFsdWVcbiAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICB2YWx1ZSA9IGdldFByb3BEZWZhdWx0VmFsdWUodm0sIHByb3AsIGtleSk7XG4gICAgLy8gc2luY2UgdGhlIGRlZmF1bHQgdmFsdWUgaXMgYSBmcmVzaCBjb3B5LFxuICAgIC8vIG1ha2Ugc3VyZSB0byBvYnNlcnZlIGl0LlxuICAgIHZhciBwcmV2U2hvdWxkT2JzZXJ2ZSA9IHNob3VsZE9ic2VydmU7XG4gICAgdG9nZ2xlT2JzZXJ2aW5nKHRydWUpO1xuICAgIG9ic2VydmUodmFsdWUpO1xuICAgIHRvZ2dsZU9ic2VydmluZyhwcmV2U2hvdWxkT2JzZXJ2ZSk7XG4gIH1cbiAge1xuICAgIGFzc2VydFByb3AocHJvcCwga2V5LCB2YWx1ZSwgdm0sIGFic2VudCk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlXG59XG5cbi8qKlxuICogR2V0IHRoZSBkZWZhdWx0IHZhbHVlIG9mIGEgcHJvcC5cbiAqL1xuZnVuY3Rpb24gZ2V0UHJvcERlZmF1bHRWYWx1ZSAodm0sIHByb3AsIGtleSkge1xuICAvLyBubyBkZWZhdWx0LCByZXR1cm4gdW5kZWZpbmVkXG4gIGlmICghaGFzT3duKHByb3AsICdkZWZhdWx0JykpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH1cbiAgdmFyIGRlZiA9IHByb3AuZGVmYXVsdDtcbiAgLy8gd2FybiBhZ2FpbnN0IG5vbi1mYWN0b3J5IGRlZmF1bHRzIGZvciBPYmplY3QgJiBBcnJheVxuICBpZiAoaXNPYmplY3QoZGVmKSkge1xuICAgIHdhcm4oXG4gICAgICAnSW52YWxpZCBkZWZhdWx0IHZhbHVlIGZvciBwcm9wIFwiJyArIGtleSArICdcIjogJyArXG4gICAgICAnUHJvcHMgd2l0aCB0eXBlIE9iamVjdC9BcnJheSBtdXN0IHVzZSBhIGZhY3RvcnkgZnVuY3Rpb24gJyArXG4gICAgICAndG8gcmV0dXJuIHRoZSBkZWZhdWx0IHZhbHVlLicsXG4gICAgICB2bVxuICAgICk7XG4gIH1cbiAgLy8gdGhlIHJhdyBwcm9wIHZhbHVlIHdhcyBhbHNvIHVuZGVmaW5lZCBmcm9tIHByZXZpb3VzIHJlbmRlcixcbiAgLy8gcmV0dXJuIHByZXZpb3VzIGRlZmF1bHQgdmFsdWUgdG8gYXZvaWQgdW5uZWNlc3Nhcnkgd2F0Y2hlciB0cmlnZ2VyXG4gIGlmICh2bSAmJiB2bS4kb3B0aW9ucy5wcm9wc0RhdGEgJiZcbiAgICB2bS4kb3B0aW9ucy5wcm9wc0RhdGFba2V5XSA9PT0gdW5kZWZpbmVkICYmXG4gICAgdm0uX3Byb3BzW2tleV0gIT09IHVuZGVmaW5lZFxuICApIHtcbiAgICByZXR1cm4gdm0uX3Byb3BzW2tleV1cbiAgfVxuICAvLyBjYWxsIGZhY3RvcnkgZnVuY3Rpb24gZm9yIG5vbi1GdW5jdGlvbiB0eXBlc1xuICAvLyBhIHZhbHVlIGlzIEZ1bmN0aW9uIGlmIGl0cyBwcm90b3R5cGUgaXMgZnVuY3Rpb24gZXZlbiBhY3Jvc3MgZGlmZmVyZW50IGV4ZWN1dGlvbiBjb250ZXh0XG4gIHJldHVybiB0eXBlb2YgZGVmID09PSAnZnVuY3Rpb24nICYmIGdldFR5cGUocHJvcC50eXBlKSAhPT0gJ0Z1bmN0aW9uJ1xuICAgID8gZGVmLmNhbGwodm0pXG4gICAgOiBkZWZcbn1cblxuLyoqXG4gKiBBc3NlcnQgd2hldGhlciBhIHByb3AgaXMgdmFsaWQuXG4gKi9cbmZ1bmN0aW9uIGFzc2VydFByb3AgKFxuICBwcm9wLFxuICBuYW1lLFxuICB2YWx1ZSxcbiAgdm0sXG4gIGFic2VudFxuKSB7XG4gIGlmIChwcm9wLnJlcXVpcmVkICYmIGFic2VudCkge1xuICAgIHdhcm4oXG4gICAgICAnTWlzc2luZyByZXF1aXJlZCBwcm9wOiBcIicgKyBuYW1lICsgJ1wiJyxcbiAgICAgIHZtXG4gICAgKTtcbiAgICByZXR1cm5cbiAgfVxuICBpZiAodmFsdWUgPT0gbnVsbCAmJiAhcHJvcC5yZXF1aXJlZCkge1xuICAgIHJldHVyblxuICB9XG4gIHZhciB0eXBlID0gcHJvcC50eXBlO1xuICB2YXIgdmFsaWQgPSAhdHlwZSB8fCB0eXBlID09PSB0cnVlO1xuICB2YXIgZXhwZWN0ZWRUeXBlcyA9IFtdO1xuICBpZiAodHlwZSkge1xuICAgIGlmICghQXJyYXkuaXNBcnJheSh0eXBlKSkge1xuICAgICAgdHlwZSA9IFt0eXBlXTtcbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0eXBlLmxlbmd0aCAmJiAhdmFsaWQ7IGkrKykge1xuICAgICAgdmFyIGFzc2VydGVkVHlwZSA9IGFzc2VydFR5cGUodmFsdWUsIHR5cGVbaV0pO1xuICAgICAgZXhwZWN0ZWRUeXBlcy5wdXNoKGFzc2VydGVkVHlwZS5leHBlY3RlZFR5cGUgfHwgJycpO1xuICAgICAgdmFsaWQgPSBhc3NlcnRlZFR5cGUudmFsaWQ7XG4gICAgfVxuICB9XG5cbiAgaWYgKCF2YWxpZCkge1xuICAgIHdhcm4oXG4gICAgICBnZXRJbnZhbGlkVHlwZU1lc3NhZ2UobmFtZSwgdmFsdWUsIGV4cGVjdGVkVHlwZXMpLFxuICAgICAgdm1cbiAgICApO1xuICAgIHJldHVyblxuICB9XG4gIHZhciB2YWxpZGF0b3IgPSBwcm9wLnZhbGlkYXRvcjtcbiAgaWYgKHZhbGlkYXRvcikge1xuICAgIGlmICghdmFsaWRhdG9yKHZhbHVlKSkge1xuICAgICAgd2FybihcbiAgICAgICAgJ0ludmFsaWQgcHJvcDogY3VzdG9tIHZhbGlkYXRvciBjaGVjayBmYWlsZWQgZm9yIHByb3AgXCInICsgbmFtZSArICdcIi4nLFxuICAgICAgICB2bVxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIHNpbXBsZUNoZWNrUkUgPSAvXihTdHJpbmd8TnVtYmVyfEJvb2xlYW58RnVuY3Rpb258U3ltYm9sKSQvO1xuXG5mdW5jdGlvbiBhc3NlcnRUeXBlICh2YWx1ZSwgdHlwZSkge1xuICB2YXIgdmFsaWQ7XG4gIHZhciBleHBlY3RlZFR5cGUgPSBnZXRUeXBlKHR5cGUpO1xuICBpZiAoc2ltcGxlQ2hlY2tSRS50ZXN0KGV4cGVjdGVkVHlwZSkpIHtcbiAgICB2YXIgdCA9IHR5cGVvZiB2YWx1ZTtcbiAgICB2YWxpZCA9IHQgPT09IGV4cGVjdGVkVHlwZS50b0xvd2VyQ2FzZSgpO1xuICAgIC8vIGZvciBwcmltaXRpdmUgd3JhcHBlciBvYmplY3RzXG4gICAgaWYgKCF2YWxpZCAmJiB0ID09PSAnb2JqZWN0Jykge1xuICAgICAgdmFsaWQgPSB2YWx1ZSBpbnN0YW5jZW9mIHR5cGU7XG4gICAgfVxuICB9IGVsc2UgaWYgKGV4cGVjdGVkVHlwZSA9PT0gJ09iamVjdCcpIHtcbiAgICB2YWxpZCA9IGlzUGxhaW5PYmplY3QodmFsdWUpO1xuICB9IGVsc2UgaWYgKGV4cGVjdGVkVHlwZSA9PT0gJ0FycmF5Jykge1xuICAgIHZhbGlkID0gQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG4gIH0gZWxzZSB7XG4gICAgdmFsaWQgPSB2YWx1ZSBpbnN0YW5jZW9mIHR5cGU7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB2YWxpZDogdmFsaWQsXG4gICAgZXhwZWN0ZWRUeXBlOiBleHBlY3RlZFR5cGVcbiAgfVxufVxuXG4vKipcbiAqIFVzZSBmdW5jdGlvbiBzdHJpbmcgbmFtZSB0byBjaGVjayBidWlsdC1pbiB0eXBlcyxcbiAqIGJlY2F1c2UgYSBzaW1wbGUgZXF1YWxpdHkgY2hlY2sgd2lsbCBmYWlsIHdoZW4gcnVubmluZ1xuICogYWNyb3NzIGRpZmZlcmVudCB2bXMgLyBpZnJhbWVzLlxuICovXG5mdW5jdGlvbiBnZXRUeXBlIChmbikge1xuICB2YXIgbWF0Y2ggPSBmbiAmJiBmbi50b1N0cmluZygpLm1hdGNoKC9eXFxzKmZ1bmN0aW9uIChcXHcrKS8pO1xuICByZXR1cm4gbWF0Y2ggPyBtYXRjaFsxXSA6ICcnXG59XG5cbmZ1bmN0aW9uIGlzU2FtZVR5cGUgKGEsIGIpIHtcbiAgcmV0dXJuIGdldFR5cGUoYSkgPT09IGdldFR5cGUoYilcbn1cblxuZnVuY3Rpb24gZ2V0VHlwZUluZGV4ICh0eXBlLCBleHBlY3RlZFR5cGVzKSB7XG4gIGlmICghQXJyYXkuaXNBcnJheShleHBlY3RlZFR5cGVzKSkge1xuICAgIHJldHVybiBpc1NhbWVUeXBlKGV4cGVjdGVkVHlwZXMsIHR5cGUpID8gMCA6IC0xXG4gIH1cbiAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGV4cGVjdGVkVHlwZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICBpZiAoaXNTYW1lVHlwZShleHBlY3RlZFR5cGVzW2ldLCB0eXBlKSkge1xuICAgICAgcmV0dXJuIGlcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xXG59XG5cbmZ1bmN0aW9uIGdldEludmFsaWRUeXBlTWVzc2FnZSAobmFtZSwgdmFsdWUsIGV4cGVjdGVkVHlwZXMpIHtcbiAgdmFyIG1lc3NhZ2UgPSBcIkludmFsaWQgcHJvcDogdHlwZSBjaGVjayBmYWlsZWQgZm9yIHByb3AgXFxcIlwiICsgbmFtZSArIFwiXFxcIi5cIiArXG4gICAgXCIgRXhwZWN0ZWQgXCIgKyAoZXhwZWN0ZWRUeXBlcy5tYXAoY2FwaXRhbGl6ZSkuam9pbignLCAnKSk7XG4gIHZhciBleHBlY3RlZFR5cGUgPSBleHBlY3RlZFR5cGVzWzBdO1xuICB2YXIgcmVjZWl2ZWRUeXBlID0gdG9SYXdUeXBlKHZhbHVlKTtcbiAgdmFyIGV4cGVjdGVkVmFsdWUgPSBzdHlsZVZhbHVlKHZhbHVlLCBleHBlY3RlZFR5cGUpO1xuICB2YXIgcmVjZWl2ZWRWYWx1ZSA9IHN0eWxlVmFsdWUodmFsdWUsIHJlY2VpdmVkVHlwZSk7XG4gIC8vIGNoZWNrIGlmIHdlIG5lZWQgdG8gc3BlY2lmeSBleHBlY3RlZCB2YWx1ZVxuICBpZiAoZXhwZWN0ZWRUeXBlcy5sZW5ndGggPT09IDEgJiZcbiAgICAgIGlzRXhwbGljYWJsZShleHBlY3RlZFR5cGUpICYmXG4gICAgICAhaXNCb29sZWFuKGV4cGVjdGVkVHlwZSwgcmVjZWl2ZWRUeXBlKSkge1xuICAgIG1lc3NhZ2UgKz0gXCIgd2l0aCB2YWx1ZSBcIiArIGV4cGVjdGVkVmFsdWU7XG4gIH1cbiAgbWVzc2FnZSArPSBcIiwgZ290IFwiICsgcmVjZWl2ZWRUeXBlICsgXCIgXCI7XG4gIC8vIGNoZWNrIGlmIHdlIG5lZWQgdG8gc3BlY2lmeSByZWNlaXZlZCB2YWx1ZVxuICBpZiAoaXNFeHBsaWNhYmxlKHJlY2VpdmVkVHlwZSkpIHtcbiAgICBtZXNzYWdlICs9IFwid2l0aCB2YWx1ZSBcIiArIHJlY2VpdmVkVmFsdWUgKyBcIi5cIjtcbiAgfVxuICByZXR1cm4gbWVzc2FnZVxufVxuXG5mdW5jdGlvbiBzdHlsZVZhbHVlICh2YWx1ZSwgdHlwZSkge1xuICBpZiAodHlwZSA9PT0gJ1N0cmluZycpIHtcbiAgICByZXR1cm4gKFwiXFxcIlwiICsgdmFsdWUgKyBcIlxcXCJcIilcbiAgfSBlbHNlIGlmICh0eXBlID09PSAnTnVtYmVyJykge1xuICAgIHJldHVybiAoXCJcIiArIChOdW1iZXIodmFsdWUpKSlcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gKFwiXCIgKyB2YWx1ZSlcbiAgfVxufVxuXG5mdW5jdGlvbiBpc0V4cGxpY2FibGUgKHZhbHVlKSB7XG4gIHZhciBleHBsaWNpdFR5cGVzID0gWydzdHJpbmcnLCAnbnVtYmVyJywgJ2Jvb2xlYW4nXTtcbiAgcmV0dXJuIGV4cGxpY2l0VHlwZXMuc29tZShmdW5jdGlvbiAoZWxlbSkgeyByZXR1cm4gdmFsdWUudG9Mb3dlckNhc2UoKSA9PT0gZWxlbTsgfSlcbn1cblxuZnVuY3Rpb24gaXNCb29sZWFuICgpIHtcbiAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICByZXR1cm4gYXJncy5zb21lKGZ1bmN0aW9uIChlbGVtKSB7IHJldHVybiBlbGVtLnRvTG93ZXJDYXNlKCkgPT09ICdib29sZWFuJzsgfSlcbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIGhhbmRsZUVycm9yIChlcnIsIHZtLCBpbmZvKSB7XG4gIC8vIERlYWN0aXZhdGUgZGVwcyB0cmFja2luZyB3aGlsZSBwcm9jZXNzaW5nIGVycm9yIGhhbmRsZXIgdG8gYXZvaWQgcG9zc2libGUgaW5maW5pdGUgcmVuZGVyaW5nLlxuICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWV4L2lzc3Vlcy8xNTA1XG4gIHB1c2hUYXJnZXQoKTtcbiAgdHJ5IHtcbiAgICBpZiAodm0pIHtcbiAgICAgIHZhciBjdXIgPSB2bTtcbiAgICAgIHdoaWxlICgoY3VyID0gY3VyLiRwYXJlbnQpKSB7XG4gICAgICAgIHZhciBob29rcyA9IGN1ci4kb3B0aW9ucy5lcnJvckNhcHR1cmVkO1xuICAgICAgICBpZiAoaG9va3MpIHtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhvb2tzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICB2YXIgY2FwdHVyZSA9IGhvb2tzW2ldLmNhbGwoY3VyLCBlcnIsIHZtLCBpbmZvKSA9PT0gZmFsc2U7XG4gICAgICAgICAgICAgIGlmIChjYXB0dXJlKSB7IHJldHVybiB9XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgIGdsb2JhbEhhbmRsZUVycm9yKGUsIGN1ciwgJ2Vycm9yQ2FwdHVyZWQgaG9vaycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBnbG9iYWxIYW5kbGVFcnJvcihlcnIsIHZtLCBpbmZvKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBwb3BUYXJnZXQoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbnZva2VXaXRoRXJyb3JIYW5kbGluZyAoXG4gIGhhbmRsZXIsXG4gIGNvbnRleHQsXG4gIGFyZ3MsXG4gIHZtLFxuICBpbmZvXG4pIHtcbiAgdmFyIHJlcztcbiAgdHJ5IHtcbiAgICByZXMgPSBhcmdzID8gaGFuZGxlci5hcHBseShjb250ZXh0LCBhcmdzKSA6IGhhbmRsZXIuY2FsbChjb250ZXh0KTtcbiAgICBpZiAocmVzICYmICFyZXMuX2lzVnVlICYmIGlzUHJvbWlzZShyZXMpICYmICFyZXMuX2hhbmRsZWQpIHtcbiAgICAgIHJlcy5jYXRjaChmdW5jdGlvbiAoZSkgeyByZXR1cm4gaGFuZGxlRXJyb3IoZSwgdm0sIGluZm8gKyBcIiAoUHJvbWlzZS9hc3luYylcIik7IH0pO1xuICAgICAgLy8gaXNzdWUgIzk1MTFcbiAgICAgIC8vIGF2b2lkIGNhdGNoIHRyaWdnZXJpbmcgbXVsdGlwbGUgdGltZXMgd2hlbiBuZXN0ZWQgY2FsbHNcbiAgICAgIHJlcy5faGFuZGxlZCA9IHRydWU7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgaGFuZGxlRXJyb3IoZSwgdm0sIGluZm8pO1xuICB9XG4gIHJldHVybiByZXNcbn1cblxuZnVuY3Rpb24gZ2xvYmFsSGFuZGxlRXJyb3IgKGVyciwgdm0sIGluZm8pIHtcbiAgaWYgKGNvbmZpZy5lcnJvckhhbmRsZXIpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGNvbmZpZy5lcnJvckhhbmRsZXIuY2FsbChudWxsLCBlcnIsIHZtLCBpbmZvKVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIGlmIHRoZSB1c2VyIGludGVudGlvbmFsbHkgdGhyb3dzIHRoZSBvcmlnaW5hbCBlcnJvciBpbiB0aGUgaGFuZGxlcixcbiAgICAgIC8vIGRvIG5vdCBsb2cgaXQgdHdpY2VcbiAgICAgIGlmIChlICE9PSBlcnIpIHtcbiAgICAgICAgbG9nRXJyb3IoZSwgbnVsbCwgJ2NvbmZpZy5lcnJvckhhbmRsZXInKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgbG9nRXJyb3IoZXJyLCB2bSwgaW5mbyk7XG59XG5cbmZ1bmN0aW9uIGxvZ0Vycm9yIChlcnIsIHZtLCBpbmZvKSB7XG4gIHtcbiAgICB3YXJuKChcIkVycm9yIGluIFwiICsgaW5mbyArIFwiOiBcXFwiXCIgKyAoZXJyLnRvU3RyaW5nKCkpICsgXCJcXFwiXCIpLCB2bSk7XG4gIH1cbiAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKChpbkJyb3dzZXIgfHwgaW5XZWV4KSAmJiB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBjb25zb2xlLmVycm9yKGVycik7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgZXJyXG4gIH1cbn1cblxuLyogICovXG5cbnZhciBpc1VzaW5nTWljcm9UYXNrID0gZmFsc2U7XG5cbnZhciBjYWxsYmFja3MgPSBbXTtcbnZhciBwZW5kaW5nID0gZmFsc2U7XG5cbmZ1bmN0aW9uIGZsdXNoQ2FsbGJhY2tzICgpIHtcbiAgcGVuZGluZyA9IGZhbHNlO1xuICB2YXIgY29waWVzID0gY2FsbGJhY2tzLnNsaWNlKDApO1xuICBjYWxsYmFja3MubGVuZ3RoID0gMDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb3BpZXMubGVuZ3RoOyBpKyspIHtcbiAgICBjb3BpZXNbaV0oKTtcbiAgfVxufVxuXG4vLyBIZXJlIHdlIGhhdmUgYXN5bmMgZGVmZXJyaW5nIHdyYXBwZXJzIHVzaW5nIG1pY3JvdGFza3MuXG4vLyBJbiAyLjUgd2UgdXNlZCAobWFjcm8pIHRhc2tzIChpbiBjb21iaW5hdGlvbiB3aXRoIG1pY3JvdGFza3MpLlxuLy8gSG93ZXZlciwgaXQgaGFzIHN1YnRsZSBwcm9ibGVtcyB3aGVuIHN0YXRlIGlzIGNoYW5nZWQgcmlnaHQgYmVmb3JlIHJlcGFpbnRcbi8vIChlLmcuICM2ODEzLCBvdXQtaW4gdHJhbnNpdGlvbnMpLlxuLy8gQWxzbywgdXNpbmcgKG1hY3JvKSB0YXNrcyBpbiBldmVudCBoYW5kbGVyIHdvdWxkIGNhdXNlIHNvbWUgd2VpcmQgYmVoYXZpb3JzXG4vLyB0aGF0IGNhbm5vdCBiZSBjaXJjdW12ZW50ZWQgKGUuZy4gIzcxMDksICM3MTUzLCAjNzU0NiwgIzc4MzQsICM4MTA5KS5cbi8vIFNvIHdlIG5vdyB1c2UgbWljcm90YXNrcyBldmVyeXdoZXJlLCBhZ2Fpbi5cbi8vIEEgbWFqb3IgZHJhd2JhY2sgb2YgdGhpcyB0cmFkZW9mZiBpcyB0aGF0IHRoZXJlIGFyZSBzb21lIHNjZW5hcmlvc1xuLy8gd2hlcmUgbWljcm90YXNrcyBoYXZlIHRvbyBoaWdoIGEgcHJpb3JpdHkgYW5kIGZpcmUgaW4gYmV0d2VlbiBzdXBwb3NlZGx5XG4vLyBzZXF1ZW50aWFsIGV2ZW50cyAoZS5nLiAjNDUyMSwgIzY2OTAsIHdoaWNoIGhhdmUgd29ya2Fyb3VuZHMpXG4vLyBvciBldmVuIGJldHdlZW4gYnViYmxpbmcgb2YgdGhlIHNhbWUgZXZlbnQgKCM2NTY2KS5cbnZhciB0aW1lckZ1bmM7XG5cbi8vIFRoZSBuZXh0VGljayBiZWhhdmlvciBsZXZlcmFnZXMgdGhlIG1pY3JvdGFzayBxdWV1ZSwgd2hpY2ggY2FuIGJlIGFjY2Vzc2VkXG4vLyB2aWEgZWl0aGVyIG5hdGl2ZSBQcm9taXNlLnRoZW4gb3IgTXV0YXRpb25PYnNlcnZlci5cbi8vIE11dGF0aW9uT2JzZXJ2ZXIgaGFzIHdpZGVyIHN1cHBvcnQsIGhvd2V2ZXIgaXQgaXMgc2VyaW91c2x5IGJ1Z2dlZCBpblxuLy8gVUlXZWJWaWV3IGluIGlPUyA+PSA5LjMuMyB3aGVuIHRyaWdnZXJlZCBpbiB0b3VjaCBldmVudCBoYW5kbGVycy4gSXRcbi8vIGNvbXBsZXRlbHkgc3RvcHMgd29ya2luZyBhZnRlciB0cmlnZ2VyaW5nIGEgZmV3IHRpbWVzLi4uIHNvLCBpZiBuYXRpdmVcbi8vIFByb21pc2UgaXMgYXZhaWxhYmxlLCB3ZSB3aWxsIHVzZSBpdDpcbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0LCAkZmxvdy1kaXNhYmxlLWxpbmUgKi9cbmlmICh0eXBlb2YgUHJvbWlzZSAhPT0gJ3VuZGVmaW5lZCcgJiYgaXNOYXRpdmUoUHJvbWlzZSkpIHtcbiAgdmFyIHAgPSBQcm9taXNlLnJlc29sdmUoKTtcbiAgdGltZXJGdW5jID0gZnVuY3Rpb24gKCkge1xuICAgIHAudGhlbihmbHVzaENhbGxiYWNrcyk7XG4gICAgLy8gSW4gcHJvYmxlbWF0aWMgVUlXZWJWaWV3cywgUHJvbWlzZS50aGVuIGRvZXNuJ3QgY29tcGxldGVseSBicmVhaywgYnV0XG4gICAgLy8gaXQgY2FuIGdldCBzdHVjayBpbiBhIHdlaXJkIHN0YXRlIHdoZXJlIGNhbGxiYWNrcyBhcmUgcHVzaGVkIGludG8gdGhlXG4gICAgLy8gbWljcm90YXNrIHF1ZXVlIGJ1dCB0aGUgcXVldWUgaXNuJ3QgYmVpbmcgZmx1c2hlZCwgdW50aWwgdGhlIGJyb3dzZXJcbiAgICAvLyBuZWVkcyB0byBkbyBzb21lIG90aGVyIHdvcmssIGUuZy4gaGFuZGxlIGEgdGltZXIuIFRoZXJlZm9yZSB3ZSBjYW5cbiAgICAvLyBcImZvcmNlXCIgdGhlIG1pY3JvdGFzayBxdWV1ZSB0byBiZSBmbHVzaGVkIGJ5IGFkZGluZyBhbiBlbXB0eSB0aW1lci5cbiAgICBpZiAoaXNJT1MpIHsgc2V0VGltZW91dChub29wKTsgfVxuICB9O1xuICBpc1VzaW5nTWljcm9UYXNrID0gdHJ1ZTtcbn0gZWxzZSBpZiAoIWlzSUUgJiYgdHlwZW9mIE11dGF0aW9uT2JzZXJ2ZXIgIT09ICd1bmRlZmluZWQnICYmIChcbiAgaXNOYXRpdmUoTXV0YXRpb25PYnNlcnZlcikgfHxcbiAgLy8gUGhhbnRvbUpTIGFuZCBpT1MgNy54XG4gIE11dGF0aW9uT2JzZXJ2ZXIudG9TdHJpbmcoKSA9PT0gJ1tvYmplY3QgTXV0YXRpb25PYnNlcnZlckNvbnN0cnVjdG9yXSdcbikpIHtcbiAgLy8gVXNlIE11dGF0aW9uT2JzZXJ2ZXIgd2hlcmUgbmF0aXZlIFByb21pc2UgaXMgbm90IGF2YWlsYWJsZSxcbiAgLy8gZS5nLiBQaGFudG9tSlMsIGlPUzcsIEFuZHJvaWQgNC40XG4gIC8vICgjNjQ2NiBNdXRhdGlvbk9ic2VydmVyIGlzIHVucmVsaWFibGUgaW4gSUUxMSlcbiAgdmFyIGNvdW50ZXIgPSAxO1xuICB2YXIgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihmbHVzaENhbGxiYWNrcyk7XG4gIHZhciB0ZXh0Tm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKFN0cmluZyhjb3VudGVyKSk7XG4gIG9ic2VydmVyLm9ic2VydmUodGV4dE5vZGUsIHtcbiAgICBjaGFyYWN0ZXJEYXRhOiB0cnVlXG4gIH0pO1xuICB0aW1lckZ1bmMgPSBmdW5jdGlvbiAoKSB7XG4gICAgY291bnRlciA9IChjb3VudGVyICsgMSkgJSAyO1xuICAgIHRleHROb2RlLmRhdGEgPSBTdHJpbmcoY291bnRlcik7XG4gIH07XG4gIGlzVXNpbmdNaWNyb1Rhc2sgPSB0cnVlO1xufSBlbHNlIGlmICh0eXBlb2Ygc2V0SW1tZWRpYXRlICE9PSAndW5kZWZpbmVkJyAmJiBpc05hdGl2ZShzZXRJbW1lZGlhdGUpKSB7XG4gIC8vIEZhbGxiYWNrIHRvIHNldEltbWVkaWF0ZS5cbiAgLy8gVGVjaGluaWNhbGx5IGl0IGxldmVyYWdlcyB0aGUgKG1hY3JvKSB0YXNrIHF1ZXVlLFxuICAvLyBidXQgaXQgaXMgc3RpbGwgYSBiZXR0ZXIgY2hvaWNlIHRoYW4gc2V0VGltZW91dC5cbiAgdGltZXJGdW5jID0gZnVuY3Rpb24gKCkge1xuICAgIHNldEltbWVkaWF0ZShmbHVzaENhbGxiYWNrcyk7XG4gIH07XG59IGVsc2Uge1xuICAvLyBGYWxsYmFjayB0byBzZXRUaW1lb3V0LlxuICB0aW1lckZ1bmMgPSBmdW5jdGlvbiAoKSB7XG4gICAgc2V0VGltZW91dChmbHVzaENhbGxiYWNrcywgMCk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIG5leHRUaWNrIChjYiwgY3R4KSB7XG4gIHZhciBfcmVzb2x2ZTtcbiAgY2FsbGJhY2tzLnB1c2goZnVuY3Rpb24gKCkge1xuICAgIGlmIChjYikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY2IuY2FsbChjdHgpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBoYW5kbGVFcnJvcihlLCBjdHgsICduZXh0VGljaycpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoX3Jlc29sdmUpIHtcbiAgICAgIF9yZXNvbHZlKGN0eCk7XG4gICAgfVxuICB9KTtcbiAgaWYgKCFwZW5kaW5nKSB7XG4gICAgcGVuZGluZyA9IHRydWU7XG4gICAgdGltZXJGdW5jKCk7XG4gIH1cbiAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gIGlmICghY2IgJiYgdHlwZW9mIFByb21pc2UgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICBfcmVzb2x2ZSA9IHJlc29sdmU7XG4gICAgfSlcbiAgfVxufVxuXG4vKiAgKi9cblxudmFyIG1hcms7XG52YXIgbWVhc3VyZTtcblxue1xuICB2YXIgcGVyZiA9IGluQnJvd3NlciAmJiB3aW5kb3cucGVyZm9ybWFuY2U7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoXG4gICAgcGVyZiAmJlxuICAgIHBlcmYubWFyayAmJlxuICAgIHBlcmYubWVhc3VyZSAmJlxuICAgIHBlcmYuY2xlYXJNYXJrcyAmJlxuICAgIHBlcmYuY2xlYXJNZWFzdXJlc1xuICApIHtcbiAgICBtYXJrID0gZnVuY3Rpb24gKHRhZykgeyByZXR1cm4gcGVyZi5tYXJrKHRhZyk7IH07XG4gICAgbWVhc3VyZSA9IGZ1bmN0aW9uIChuYW1lLCBzdGFydFRhZywgZW5kVGFnKSB7XG4gICAgICBwZXJmLm1lYXN1cmUobmFtZSwgc3RhcnRUYWcsIGVuZFRhZyk7XG4gICAgICBwZXJmLmNsZWFyTWFya3Moc3RhcnRUYWcpO1xuICAgICAgcGVyZi5jbGVhck1hcmtzKGVuZFRhZyk7XG4gICAgICAvLyBwZXJmLmNsZWFyTWVhc3VyZXMobmFtZSlcbiAgICB9O1xuICB9XG59XG5cbi8qIG5vdCB0eXBlIGNoZWNraW5nIHRoaXMgZmlsZSBiZWNhdXNlIGZsb3cgZG9lc24ndCBwbGF5IHdlbGwgd2l0aCBQcm94eSAqL1xuXG52YXIgaW5pdFByb3h5O1xuXG57XG4gIHZhciBhbGxvd2VkR2xvYmFscyA9IG1ha2VNYXAoXG4gICAgJ0luZmluaXR5LHVuZGVmaW5lZCxOYU4saXNGaW5pdGUsaXNOYU4sJyArXG4gICAgJ3BhcnNlRmxvYXQscGFyc2VJbnQsZGVjb2RlVVJJLGRlY29kZVVSSUNvbXBvbmVudCxlbmNvZGVVUkksZW5jb2RlVVJJQ29tcG9uZW50LCcgK1xuICAgICdNYXRoLE51bWJlcixEYXRlLEFycmF5LE9iamVjdCxCb29sZWFuLFN0cmluZyxSZWdFeHAsTWFwLFNldCxKU09OLEludGwsJyArXG4gICAgJ3JlcXVpcmUnIC8vIGZvciBXZWJwYWNrL0Jyb3dzZXJpZnlcbiAgKTtcblxuICB2YXIgd2Fybk5vblByZXNlbnQgPSBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHtcbiAgICB3YXJuKFxuICAgICAgXCJQcm9wZXJ0eSBvciBtZXRob2QgXFxcIlwiICsga2V5ICsgXCJcXFwiIGlzIG5vdCBkZWZpbmVkIG9uIHRoZSBpbnN0YW5jZSBidXQgXCIgK1xuICAgICAgJ3JlZmVyZW5jZWQgZHVyaW5nIHJlbmRlci4gTWFrZSBzdXJlIHRoYXQgdGhpcyBwcm9wZXJ0eSBpcyByZWFjdGl2ZSwgJyArXG4gICAgICAnZWl0aGVyIGluIHRoZSBkYXRhIG9wdGlvbiwgb3IgZm9yIGNsYXNzLWJhc2VkIGNvbXBvbmVudHMsIGJ5ICcgK1xuICAgICAgJ2luaXRpYWxpemluZyB0aGUgcHJvcGVydHkuICcgK1xuICAgICAgJ1NlZTogaHR0cHM6Ly92dWVqcy5vcmcvdjIvZ3VpZGUvcmVhY3Rpdml0eS5odG1sI0RlY2xhcmluZy1SZWFjdGl2ZS1Qcm9wZXJ0aWVzLicsXG4gICAgICB0YXJnZXRcbiAgICApO1xuICB9O1xuXG4gIHZhciB3YXJuUmVzZXJ2ZWRQcmVmaXggPSBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHtcbiAgICB3YXJuKFxuICAgICAgXCJQcm9wZXJ0eSBcXFwiXCIgKyBrZXkgKyBcIlxcXCIgbXVzdCBiZSBhY2Nlc3NlZCB3aXRoIFxcXCIkZGF0YS5cIiArIGtleSArIFwiXFxcIiBiZWNhdXNlIFwiICtcbiAgICAgICdwcm9wZXJ0aWVzIHN0YXJ0aW5nIHdpdGggXCIkXCIgb3IgXCJfXCIgYXJlIG5vdCBwcm94aWVkIGluIHRoZSBWdWUgaW5zdGFuY2UgdG8gJyArXG4gICAgICAncHJldmVudCBjb25mbGljdHMgd2l0aCBWdWUgaW50ZXJuYWxzJyArXG4gICAgICAnU2VlOiBodHRwczovL3Z1ZWpzLm9yZy92Mi9hcGkvI2RhdGEnLFxuICAgICAgdGFyZ2V0XG4gICAgKTtcbiAgfTtcblxuICB2YXIgaGFzUHJveHkgPVxuICAgIHR5cGVvZiBQcm94eSAhPT0gJ3VuZGVmaW5lZCcgJiYgaXNOYXRpdmUoUHJveHkpO1xuXG4gIGlmIChoYXNQcm94eSkge1xuICAgIHZhciBpc0J1aWx0SW5Nb2RpZmllciA9IG1ha2VNYXAoJ3N0b3AscHJldmVudCxzZWxmLGN0cmwsc2hpZnQsYWx0LG1ldGEsZXhhY3QnKTtcbiAgICBjb25maWcua2V5Q29kZXMgPSBuZXcgUHJveHkoY29uZmlnLmtleUNvZGVzLCB7XG4gICAgICBzZXQ6IGZ1bmN0aW9uIHNldCAodGFyZ2V0LCBrZXksIHZhbHVlKSB7XG4gICAgICAgIGlmIChpc0J1aWx0SW5Nb2RpZmllcihrZXkpKSB7XG4gICAgICAgICAgd2FybigoXCJBdm9pZCBvdmVyd3JpdGluZyBidWlsdC1pbiBtb2RpZmllciBpbiBjb25maWcua2V5Q29kZXM6IC5cIiArIGtleSkpO1xuICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRhcmdldFtrZXldID0gdmFsdWU7XG4gICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgdmFyIGhhc0hhbmRsZXIgPSB7XG4gICAgaGFzOiBmdW5jdGlvbiBoYXMgKHRhcmdldCwga2V5KSB7XG4gICAgICB2YXIgaGFzID0ga2V5IGluIHRhcmdldDtcbiAgICAgIHZhciBpc0FsbG93ZWQgPSBhbGxvd2VkR2xvYmFscyhrZXkpIHx8XG4gICAgICAgICh0eXBlb2Yga2V5ID09PSAnc3RyaW5nJyAmJiBrZXkuY2hhckF0KDApID09PSAnXycgJiYgIShrZXkgaW4gdGFyZ2V0LiRkYXRhKSk7XG4gICAgICBpZiAoIWhhcyAmJiAhaXNBbGxvd2VkKSB7XG4gICAgICAgIGlmIChrZXkgaW4gdGFyZ2V0LiRkYXRhKSB7IHdhcm5SZXNlcnZlZFByZWZpeCh0YXJnZXQsIGtleSk7IH1cbiAgICAgICAgZWxzZSB7IHdhcm5Ob25QcmVzZW50KHRhcmdldCwga2V5KTsgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGhhcyB8fCAhaXNBbGxvd2VkXG4gICAgfVxuICB9O1xuXG4gIHZhciBnZXRIYW5kbGVyID0ge1xuICAgIGdldDogZnVuY3Rpb24gZ2V0ICh0YXJnZXQsIGtleSkge1xuICAgICAgaWYgKHR5cGVvZiBrZXkgPT09ICdzdHJpbmcnICYmICEoa2V5IGluIHRhcmdldCkpIHtcbiAgICAgICAgaWYgKGtleSBpbiB0YXJnZXQuJGRhdGEpIHsgd2FyblJlc2VydmVkUHJlZml4KHRhcmdldCwga2V5KTsgfVxuICAgICAgICBlbHNlIHsgd2Fybk5vblByZXNlbnQodGFyZ2V0LCBrZXkpOyB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdGFyZ2V0W2tleV1cbiAgICB9XG4gIH07XG5cbiAgaW5pdFByb3h5ID0gZnVuY3Rpb24gaW5pdFByb3h5ICh2bSkge1xuICAgIGlmIChoYXNQcm94eSkge1xuICAgICAgLy8gZGV0ZXJtaW5lIHdoaWNoIHByb3h5IGhhbmRsZXIgdG8gdXNlXG4gICAgICB2YXIgb3B0aW9ucyA9IHZtLiRvcHRpb25zO1xuICAgICAgdmFyIGhhbmRsZXJzID0gb3B0aW9ucy5yZW5kZXIgJiYgb3B0aW9ucy5yZW5kZXIuX3dpdGhTdHJpcHBlZFxuICAgICAgICA/IGdldEhhbmRsZXJcbiAgICAgICAgOiBoYXNIYW5kbGVyO1xuICAgICAgdm0uX3JlbmRlclByb3h5ID0gbmV3IFByb3h5KHZtLCBoYW5kbGVycyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZtLl9yZW5kZXJQcm94eSA9IHZtO1xuICAgIH1cbiAgfTtcbn1cblxuLyogICovXG5cbnZhciBzZWVuT2JqZWN0cyA9IG5ldyBfU2V0KCk7XG5cbi8qKlxuICogUmVjdXJzaXZlbHkgdHJhdmVyc2UgYW4gb2JqZWN0IHRvIGV2b2tlIGFsbCBjb252ZXJ0ZWRcbiAqIGdldHRlcnMsIHNvIHRoYXQgZXZlcnkgbmVzdGVkIHByb3BlcnR5IGluc2lkZSB0aGUgb2JqZWN0XG4gKiBpcyBjb2xsZWN0ZWQgYXMgYSBcImRlZXBcIiBkZXBlbmRlbmN5LlxuICovXG5mdW5jdGlvbiB0cmF2ZXJzZSAodmFsKSB7XG4gIF90cmF2ZXJzZSh2YWwsIHNlZW5PYmplY3RzKTtcbiAgc2Vlbk9iamVjdHMuY2xlYXIoKTtcbn1cblxuZnVuY3Rpb24gX3RyYXZlcnNlICh2YWwsIHNlZW4pIHtcbiAgdmFyIGksIGtleXM7XG4gIHZhciBpc0EgPSBBcnJheS5pc0FycmF5KHZhbCk7XG4gIGlmICgoIWlzQSAmJiAhaXNPYmplY3QodmFsKSkgfHwgT2JqZWN0LmlzRnJvemVuKHZhbCkgfHwgdmFsIGluc3RhbmNlb2YgVk5vZGUpIHtcbiAgICByZXR1cm5cbiAgfVxuICBpZiAodmFsLl9fb2JfXykge1xuICAgIHZhciBkZXBJZCA9IHZhbC5fX29iX18uZGVwLmlkO1xuICAgIGlmIChzZWVuLmhhcyhkZXBJZCkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBzZWVuLmFkZChkZXBJZCk7XG4gIH1cbiAgaWYgKGlzQSkge1xuICAgIGkgPSB2YWwubGVuZ3RoO1xuICAgIHdoaWxlIChpLS0pIHsgX3RyYXZlcnNlKHZhbFtpXSwgc2Vlbik7IH1cbiAgfSBlbHNlIHtcbiAgICBrZXlzID0gT2JqZWN0LmtleXModmFsKTtcbiAgICBpID0ga2V5cy5sZW5ndGg7XG4gICAgd2hpbGUgKGktLSkgeyBfdHJhdmVyc2UodmFsW2tleXNbaV1dLCBzZWVuKTsgfVxuICB9XG59XG5cbi8qICAqL1xuXG52YXIgbm9ybWFsaXplRXZlbnQgPSBjYWNoZWQoZnVuY3Rpb24gKG5hbWUpIHtcbiAgdmFyIHBhc3NpdmUgPSBuYW1lLmNoYXJBdCgwKSA9PT0gJyYnO1xuICBuYW1lID0gcGFzc2l2ZSA/IG5hbWUuc2xpY2UoMSkgOiBuYW1lO1xuICB2YXIgb25jZSQkMSA9IG5hbWUuY2hhckF0KDApID09PSAnfic7IC8vIFByZWZpeGVkIGxhc3QsIGNoZWNrZWQgZmlyc3RcbiAgbmFtZSA9IG9uY2UkJDEgPyBuYW1lLnNsaWNlKDEpIDogbmFtZTtcbiAgdmFyIGNhcHR1cmUgPSBuYW1lLmNoYXJBdCgwKSA9PT0gJyEnO1xuICBuYW1lID0gY2FwdHVyZSA/IG5hbWUuc2xpY2UoMSkgOiBuYW1lO1xuICByZXR1cm4ge1xuICAgIG5hbWU6IG5hbWUsXG4gICAgb25jZTogb25jZSQkMSxcbiAgICBjYXB0dXJlOiBjYXB0dXJlLFxuICAgIHBhc3NpdmU6IHBhc3NpdmVcbiAgfVxufSk7XG5cbmZ1bmN0aW9uIGNyZWF0ZUZuSW52b2tlciAoZm5zLCB2bSkge1xuICBmdW5jdGlvbiBpbnZva2VyICgpIHtcbiAgICB2YXIgYXJndW1lbnRzJDEgPSBhcmd1bWVudHM7XG5cbiAgICB2YXIgZm5zID0gaW52b2tlci5mbnM7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZm5zKSkge1xuICAgICAgdmFyIGNsb25lZCA9IGZucy5zbGljZSgpO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjbG9uZWQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaW52b2tlV2l0aEVycm9ySGFuZGxpbmcoY2xvbmVkW2ldLCBudWxsLCBhcmd1bWVudHMkMSwgdm0sIFwidi1vbiBoYW5kbGVyXCIpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyByZXR1cm4gaGFuZGxlciByZXR1cm4gdmFsdWUgZm9yIHNpbmdsZSBoYW5kbGVyc1xuICAgICAgcmV0dXJuIGludm9rZVdpdGhFcnJvckhhbmRsaW5nKGZucywgbnVsbCwgYXJndW1lbnRzLCB2bSwgXCJ2LW9uIGhhbmRsZXJcIilcbiAgICB9XG4gIH1cbiAgaW52b2tlci5mbnMgPSBmbnM7XG4gIHJldHVybiBpbnZva2VyXG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUxpc3RlbmVycyAoXG4gIG9uLFxuICBvbGRPbixcbiAgYWRkLFxuICByZW1vdmUkJDEsXG4gIGNyZWF0ZU9uY2VIYW5kbGVyLFxuICB2bVxuKSB7XG4gIHZhciBuYW1lLCBkZWYkJDEsIGN1ciwgb2xkLCBldmVudDtcbiAgZm9yIChuYW1lIGluIG9uKSB7XG4gICAgZGVmJCQxID0gY3VyID0gb25bbmFtZV07XG4gICAgb2xkID0gb2xkT25bbmFtZV07XG4gICAgZXZlbnQgPSBub3JtYWxpemVFdmVudChuYW1lKTtcbiAgICBpZiAoaXNVbmRlZihjdXIpKSB7XG4gICAgICB3YXJuKFxuICAgICAgICBcIkludmFsaWQgaGFuZGxlciBmb3IgZXZlbnQgXFxcIlwiICsgKGV2ZW50Lm5hbWUpICsgXCJcXFwiOiBnb3QgXCIgKyBTdHJpbmcoY3VyKSxcbiAgICAgICAgdm1cbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChpc1VuZGVmKG9sZCkpIHtcbiAgICAgIGlmIChpc1VuZGVmKGN1ci5mbnMpKSB7XG4gICAgICAgIGN1ciA9IG9uW25hbWVdID0gY3JlYXRlRm5JbnZva2VyKGN1ciwgdm0pO1xuICAgICAgfVxuICAgICAgaWYgKGlzVHJ1ZShldmVudC5vbmNlKSkge1xuICAgICAgICBjdXIgPSBvbltuYW1lXSA9IGNyZWF0ZU9uY2VIYW5kbGVyKGV2ZW50Lm5hbWUsIGN1ciwgZXZlbnQuY2FwdHVyZSk7XG4gICAgICB9XG4gICAgICBhZGQoZXZlbnQubmFtZSwgY3VyLCBldmVudC5jYXB0dXJlLCBldmVudC5wYXNzaXZlLCBldmVudC5wYXJhbXMpO1xuICAgIH0gZWxzZSBpZiAoY3VyICE9PSBvbGQpIHtcbiAgICAgIG9sZC5mbnMgPSBjdXI7XG4gICAgICBvbltuYW1lXSA9IG9sZDtcbiAgICB9XG4gIH1cbiAgZm9yIChuYW1lIGluIG9sZE9uKSB7XG4gICAgaWYgKGlzVW5kZWYob25bbmFtZV0pKSB7XG4gICAgICBldmVudCA9IG5vcm1hbGl6ZUV2ZW50KG5hbWUpO1xuICAgICAgcmVtb3ZlJCQxKGV2ZW50Lm5hbWUsIG9sZE9uW25hbWVdLCBldmVudC5jYXB0dXJlKTtcbiAgICB9XG4gIH1cbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIG1lcmdlVk5vZGVIb29rIChkZWYsIGhvb2tLZXksIGhvb2spIHtcbiAgaWYgKGRlZiBpbnN0YW5jZW9mIFZOb2RlKSB7XG4gICAgZGVmID0gZGVmLmRhdGEuaG9vayB8fCAoZGVmLmRhdGEuaG9vayA9IHt9KTtcbiAgfVxuICB2YXIgaW52b2tlcjtcbiAgdmFyIG9sZEhvb2sgPSBkZWZbaG9va0tleV07XG5cbiAgZnVuY3Rpb24gd3JhcHBlZEhvb2sgKCkge1xuICAgIGhvb2suYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAvLyBpbXBvcnRhbnQ6IHJlbW92ZSBtZXJnZWQgaG9vayB0byBlbnN1cmUgaXQncyBjYWxsZWQgb25seSBvbmNlXG4gICAgLy8gYW5kIHByZXZlbnQgbWVtb3J5IGxlYWtcbiAgICByZW1vdmUoaW52b2tlci5mbnMsIHdyYXBwZWRIb29rKTtcbiAgfVxuXG4gIGlmIChpc1VuZGVmKG9sZEhvb2spKSB7XG4gICAgLy8gbm8gZXhpc3RpbmcgaG9va1xuICAgIGludm9rZXIgPSBjcmVhdGVGbkludm9rZXIoW3dyYXBwZWRIb29rXSk7XG4gIH0gZWxzZSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKGlzRGVmKG9sZEhvb2suZm5zKSAmJiBpc1RydWUob2xkSG9vay5tZXJnZWQpKSB7XG4gICAgICAvLyBhbHJlYWR5IGEgbWVyZ2VkIGludm9rZXJcbiAgICAgIGludm9rZXIgPSBvbGRIb29rO1xuICAgICAgaW52b2tlci5mbnMucHVzaCh3cmFwcGVkSG9vayk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGV4aXN0aW5nIHBsYWluIGhvb2tcbiAgICAgIGludm9rZXIgPSBjcmVhdGVGbkludm9rZXIoW29sZEhvb2ssIHdyYXBwZWRIb29rXSk7XG4gICAgfVxuICB9XG5cbiAgaW52b2tlci5tZXJnZWQgPSB0cnVlO1xuICBkZWZbaG9va0tleV0gPSBpbnZva2VyO1xufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gZXh0cmFjdFByb3BzRnJvbVZOb2RlRGF0YSAoXG4gIGRhdGEsXG4gIEN0b3IsXG4gIHRhZ1xuKSB7XG4gIC8vIHdlIGFyZSBvbmx5IGV4dHJhY3RpbmcgcmF3IHZhbHVlcyBoZXJlLlxuICAvLyB2YWxpZGF0aW9uIGFuZCBkZWZhdWx0IHZhbHVlcyBhcmUgaGFuZGxlZCBpbiB0aGUgY2hpbGRcbiAgLy8gY29tcG9uZW50IGl0c2VsZi5cbiAgdmFyIHByb3BPcHRpb25zID0gQ3Rvci5vcHRpb25zLnByb3BzO1xuICBpZiAoaXNVbmRlZihwcm9wT3B0aW9ucykpIHtcbiAgICByZXR1cm5cbiAgfVxuICB2YXIgcmVzID0ge307XG4gIHZhciBhdHRycyA9IGRhdGEuYXR0cnM7XG4gIHZhciBwcm9wcyA9IGRhdGEucHJvcHM7XG4gIGlmIChpc0RlZihhdHRycykgfHwgaXNEZWYocHJvcHMpKSB7XG4gICAgZm9yICh2YXIga2V5IGluIHByb3BPcHRpb25zKSB7XG4gICAgICB2YXIgYWx0S2V5ID0gaHlwaGVuYXRlKGtleSk7XG4gICAgICB7XG4gICAgICAgIHZhciBrZXlJbkxvd2VyQ2FzZSA9IGtleS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAoXG4gICAgICAgICAga2V5ICE9PSBrZXlJbkxvd2VyQ2FzZSAmJlxuICAgICAgICAgIGF0dHJzICYmIGhhc093bihhdHRycywga2V5SW5Mb3dlckNhc2UpXG4gICAgICAgICkge1xuICAgICAgICAgIHRpcChcbiAgICAgICAgICAgIFwiUHJvcCBcXFwiXCIgKyBrZXlJbkxvd2VyQ2FzZSArIFwiXFxcIiBpcyBwYXNzZWQgdG8gY29tcG9uZW50IFwiICtcbiAgICAgICAgICAgIChmb3JtYXRDb21wb25lbnROYW1lKHRhZyB8fCBDdG9yKSkgKyBcIiwgYnV0IHRoZSBkZWNsYXJlZCBwcm9wIG5hbWUgaXNcIiArXG4gICAgICAgICAgICBcIiBcXFwiXCIgKyBrZXkgKyBcIlxcXCIuIFwiICtcbiAgICAgICAgICAgIFwiTm90ZSB0aGF0IEhUTUwgYXR0cmlidXRlcyBhcmUgY2FzZS1pbnNlbnNpdGl2ZSBhbmQgY2FtZWxDYXNlZCBcIiArXG4gICAgICAgICAgICBcInByb3BzIG5lZWQgdG8gdXNlIHRoZWlyIGtlYmFiLWNhc2UgZXF1aXZhbGVudHMgd2hlbiB1c2luZyBpbi1ET00gXCIgK1xuICAgICAgICAgICAgXCJ0ZW1wbGF0ZXMuIFlvdSBzaG91bGQgcHJvYmFibHkgdXNlIFxcXCJcIiArIGFsdEtleSArIFwiXFxcIiBpbnN0ZWFkIG9mIFxcXCJcIiArIGtleSArIFwiXFxcIi5cIlxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNoZWNrUHJvcChyZXMsIHByb3BzLCBrZXksIGFsdEtleSwgdHJ1ZSkgfHxcbiAgICAgIGNoZWNrUHJvcChyZXMsIGF0dHJzLCBrZXksIGFsdEtleSwgZmFsc2UpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbmZ1bmN0aW9uIGNoZWNrUHJvcCAoXG4gIHJlcyxcbiAgaGFzaCxcbiAga2V5LFxuICBhbHRLZXksXG4gIHByZXNlcnZlXG4pIHtcbiAgaWYgKGlzRGVmKGhhc2gpKSB7XG4gICAgaWYgKGhhc093bihoYXNoLCBrZXkpKSB7XG4gICAgICByZXNba2V5XSA9IGhhc2hba2V5XTtcbiAgICAgIGlmICghcHJlc2VydmUpIHtcbiAgICAgICAgZGVsZXRlIGhhc2hba2V5XTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlXG4gICAgfSBlbHNlIGlmIChoYXNPd24oaGFzaCwgYWx0S2V5KSkge1xuICAgICAgcmVzW2tleV0gPSBoYXNoW2FsdEtleV07XG4gICAgICBpZiAoIXByZXNlcnZlKSB7XG4gICAgICAgIGRlbGV0ZSBoYXNoW2FsdEtleV07XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2Vcbn1cblxuLyogICovXG5cbi8vIFRoZSB0ZW1wbGF0ZSBjb21waWxlciBhdHRlbXB0cyB0byBtaW5pbWl6ZSB0aGUgbmVlZCBmb3Igbm9ybWFsaXphdGlvbiBieVxuLy8gc3RhdGljYWxseSBhbmFseXppbmcgdGhlIHRlbXBsYXRlIGF0IGNvbXBpbGUgdGltZS5cbi8vXG4vLyBGb3IgcGxhaW4gSFRNTCBtYXJrdXAsIG5vcm1hbGl6YXRpb24gY2FuIGJlIGNvbXBsZXRlbHkgc2tpcHBlZCBiZWNhdXNlIHRoZVxuLy8gZ2VuZXJhdGVkIHJlbmRlciBmdW5jdGlvbiBpcyBndWFyYW50ZWVkIHRvIHJldHVybiBBcnJheTxWTm9kZT4uIFRoZXJlIGFyZVxuLy8gdHdvIGNhc2VzIHdoZXJlIGV4dHJhIG5vcm1hbGl6YXRpb24gaXMgbmVlZGVkOlxuXG4vLyAxLiBXaGVuIHRoZSBjaGlsZHJlbiBjb250YWlucyBjb21wb25lbnRzIC0gYmVjYXVzZSBhIGZ1bmN0aW9uYWwgY29tcG9uZW50XG4vLyBtYXkgcmV0dXJuIGFuIEFycmF5IGluc3RlYWQgb2YgYSBzaW5nbGUgcm9vdC4gSW4gdGhpcyBjYXNlLCBqdXN0IGEgc2ltcGxlXG4vLyBub3JtYWxpemF0aW9uIGlzIG5lZWRlZCAtIGlmIGFueSBjaGlsZCBpcyBhbiBBcnJheSwgd2UgZmxhdHRlbiB0aGUgd2hvbGVcbi8vIHRoaW5nIHdpdGggQXJyYXkucHJvdG90eXBlLmNvbmNhdC4gSXQgaXMgZ3VhcmFudGVlZCB0byBiZSBvbmx5IDEtbGV2ZWwgZGVlcFxuLy8gYmVjYXVzZSBmdW5jdGlvbmFsIGNvbXBvbmVudHMgYWxyZWFkeSBub3JtYWxpemUgdGhlaXIgb3duIGNoaWxkcmVuLlxuZnVuY3Rpb24gc2ltcGxlTm9ybWFsaXplQ2hpbGRyZW4gKGNoaWxkcmVuKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJlbltpXSkpIHtcbiAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLCBjaGlsZHJlbilcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNoaWxkcmVuXG59XG5cbi8vIDIuIFdoZW4gdGhlIGNoaWxkcmVuIGNvbnRhaW5zIGNvbnN0cnVjdHMgdGhhdCBhbHdheXMgZ2VuZXJhdGVkIG5lc3RlZCBBcnJheXMsXG4vLyBlLmcuIDx0ZW1wbGF0ZT4sIDxzbG90Piwgdi1mb3IsIG9yIHdoZW4gdGhlIGNoaWxkcmVuIGlzIHByb3ZpZGVkIGJ5IHVzZXJcbi8vIHdpdGggaGFuZC13cml0dGVuIHJlbmRlciBmdW5jdGlvbnMgLyBKU1guIEluIHN1Y2ggY2FzZXMgYSBmdWxsIG5vcm1hbGl6YXRpb25cbi8vIGlzIG5lZWRlZCB0byBjYXRlciB0byBhbGwgcG9zc2libGUgdHlwZXMgb2YgY2hpbGRyZW4gdmFsdWVzLlxuZnVuY3Rpb24gbm9ybWFsaXplQ2hpbGRyZW4gKGNoaWxkcmVuKSB7XG4gIHJldHVybiBpc1ByaW1pdGl2ZShjaGlsZHJlbilcbiAgICA/IFtjcmVhdGVUZXh0Vk5vZGUoY2hpbGRyZW4pXVxuICAgIDogQXJyYXkuaXNBcnJheShjaGlsZHJlbilcbiAgICAgID8gbm9ybWFsaXplQXJyYXlDaGlsZHJlbihjaGlsZHJlbilcbiAgICAgIDogdW5kZWZpbmVkXG59XG5cbmZ1bmN0aW9uIGlzVGV4dE5vZGUgKG5vZGUpIHtcbiAgcmV0dXJuIGlzRGVmKG5vZGUpICYmIGlzRGVmKG5vZGUudGV4dCkgJiYgaXNGYWxzZShub2RlLmlzQ29tbWVudClcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplQXJyYXlDaGlsZHJlbiAoY2hpbGRyZW4sIG5lc3RlZEluZGV4KSB7XG4gIHZhciByZXMgPSBbXTtcbiAgdmFyIGksIGMsIGxhc3RJbmRleCwgbGFzdDtcbiAgZm9yIChpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgYyA9IGNoaWxkcmVuW2ldO1xuICAgIGlmIChpc1VuZGVmKGMpIHx8IHR5cGVvZiBjID09PSAnYm9vbGVhbicpIHsgY29udGludWUgfVxuICAgIGxhc3RJbmRleCA9IHJlcy5sZW5ndGggLSAxO1xuICAgIGxhc3QgPSByZXNbbGFzdEluZGV4XTtcbiAgICAvLyAgbmVzdGVkXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYykpIHtcbiAgICAgIGlmIChjLmxlbmd0aCA+IDApIHtcbiAgICAgICAgYyA9IG5vcm1hbGl6ZUFycmF5Q2hpbGRyZW4oYywgKChuZXN0ZWRJbmRleCB8fCAnJykgKyBcIl9cIiArIGkpKTtcbiAgICAgICAgLy8gbWVyZ2UgYWRqYWNlbnQgdGV4dCBub2Rlc1xuICAgICAgICBpZiAoaXNUZXh0Tm9kZShjWzBdKSAmJiBpc1RleHROb2RlKGxhc3QpKSB7XG4gICAgICAgICAgcmVzW2xhc3RJbmRleF0gPSBjcmVhdGVUZXh0Vk5vZGUobGFzdC50ZXh0ICsgKGNbMF0pLnRleHQpO1xuICAgICAgICAgIGMuc2hpZnQoKTtcbiAgICAgICAgfVxuICAgICAgICByZXMucHVzaC5hcHBseShyZXMsIGMpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNQcmltaXRpdmUoYykpIHtcbiAgICAgIGlmIChpc1RleHROb2RlKGxhc3QpKSB7XG4gICAgICAgIC8vIG1lcmdlIGFkamFjZW50IHRleHQgbm9kZXNcbiAgICAgICAgLy8gdGhpcyBpcyBuZWNlc3NhcnkgZm9yIFNTUiBoeWRyYXRpb24gYmVjYXVzZSB0ZXh0IG5vZGVzIGFyZVxuICAgICAgICAvLyBlc3NlbnRpYWxseSBtZXJnZWQgd2hlbiByZW5kZXJlZCB0byBIVE1MIHN0cmluZ3NcbiAgICAgICAgcmVzW2xhc3RJbmRleF0gPSBjcmVhdGVUZXh0Vk5vZGUobGFzdC50ZXh0ICsgYyk7XG4gICAgICB9IGVsc2UgaWYgKGMgIT09ICcnKSB7XG4gICAgICAgIC8vIGNvbnZlcnQgcHJpbWl0aXZlIHRvIHZub2RlXG4gICAgICAgIHJlcy5wdXNoKGNyZWF0ZVRleHRWTm9kZShjKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChpc1RleHROb2RlKGMpICYmIGlzVGV4dE5vZGUobGFzdCkpIHtcbiAgICAgICAgLy8gbWVyZ2UgYWRqYWNlbnQgdGV4dCBub2Rlc1xuICAgICAgICByZXNbbGFzdEluZGV4XSA9IGNyZWF0ZVRleHRWTm9kZShsYXN0LnRleHQgKyBjLnRleHQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gZGVmYXVsdCBrZXkgZm9yIG5lc3RlZCBhcnJheSBjaGlsZHJlbiAobGlrZWx5IGdlbmVyYXRlZCBieSB2LWZvcilcbiAgICAgICAgaWYgKGlzVHJ1ZShjaGlsZHJlbi5faXNWTGlzdCkgJiZcbiAgICAgICAgICBpc0RlZihjLnRhZykgJiZcbiAgICAgICAgICBpc1VuZGVmKGMua2V5KSAmJlxuICAgICAgICAgIGlzRGVmKG5lc3RlZEluZGV4KSkge1xuICAgICAgICAgIGMua2V5ID0gXCJfX3ZsaXN0XCIgKyBuZXN0ZWRJbmRleCArIFwiX1wiICsgaSArIFwiX19cIjtcbiAgICAgICAgfVxuICAgICAgICByZXMucHVzaChjKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gaW5pdFByb3ZpZGUgKHZtKSB7XG4gIHZhciBwcm92aWRlID0gdm0uJG9wdGlvbnMucHJvdmlkZTtcbiAgaWYgKHByb3ZpZGUpIHtcbiAgICB2bS5fcHJvdmlkZWQgPSB0eXBlb2YgcHJvdmlkZSA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgPyBwcm92aWRlLmNhbGwodm0pXG4gICAgICA6IHByb3ZpZGU7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW5pdEluamVjdGlvbnMgKHZtKSB7XG4gIHZhciByZXN1bHQgPSByZXNvbHZlSW5qZWN0KHZtLiRvcHRpb25zLmluamVjdCwgdm0pO1xuICBpZiAocmVzdWx0KSB7XG4gICAgdG9nZ2xlT2JzZXJ2aW5nKGZhbHNlKTtcbiAgICBPYmplY3Qua2V5cyhyZXN1bHQpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgIHtcbiAgICAgICAgZGVmaW5lUmVhY3RpdmUkJDEodm0sIGtleSwgcmVzdWx0W2tleV0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB3YXJuKFxuICAgICAgICAgICAgXCJBdm9pZCBtdXRhdGluZyBhbiBpbmplY3RlZCB2YWx1ZSBkaXJlY3RseSBzaW5jZSB0aGUgY2hhbmdlcyB3aWxsIGJlIFwiICtcbiAgICAgICAgICAgIFwib3ZlcndyaXR0ZW4gd2hlbmV2ZXIgdGhlIHByb3ZpZGVkIGNvbXBvbmVudCByZS1yZW5kZXJzLiBcIiArXG4gICAgICAgICAgICBcImluamVjdGlvbiBiZWluZyBtdXRhdGVkOiBcXFwiXCIgKyBrZXkgKyBcIlxcXCJcIixcbiAgICAgICAgICAgIHZtXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdG9nZ2xlT2JzZXJ2aW5nKHRydWUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVJbmplY3QgKGluamVjdCwgdm0pIHtcbiAgaWYgKGluamVjdCkge1xuICAgIC8vIGluamVjdCBpcyA6YW55IGJlY2F1c2UgZmxvdyBpcyBub3Qgc21hcnQgZW5vdWdoIHRvIGZpZ3VyZSBvdXQgY2FjaGVkXG4gICAgdmFyIHJlc3VsdCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgdmFyIGtleXMgPSBoYXNTeW1ib2xcbiAgICAgID8gUmVmbGVjdC5vd25LZXlzKGluamVjdClcbiAgICAgIDogT2JqZWN0LmtleXMoaW5qZWN0KTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgICAvLyAjNjU3NCBpbiBjYXNlIHRoZSBpbmplY3Qgb2JqZWN0IGlzIG9ic2VydmVkLi4uXG4gICAgICBpZiAoa2V5ID09PSAnX19vYl9fJykgeyBjb250aW51ZSB9XG4gICAgICB2YXIgcHJvdmlkZUtleSA9IGluamVjdFtrZXldLmZyb207XG4gICAgICB2YXIgc291cmNlID0gdm07XG4gICAgICB3aGlsZSAoc291cmNlKSB7XG4gICAgICAgIGlmIChzb3VyY2UuX3Byb3ZpZGVkICYmIGhhc093bihzb3VyY2UuX3Byb3ZpZGVkLCBwcm92aWRlS2V5KSkge1xuICAgICAgICAgIHJlc3VsdFtrZXldID0gc291cmNlLl9wcm92aWRlZFtwcm92aWRlS2V5XTtcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIHNvdXJjZSA9IHNvdXJjZS4kcGFyZW50O1xuICAgICAgfVxuICAgICAgaWYgKCFzb3VyY2UpIHtcbiAgICAgICAgaWYgKCdkZWZhdWx0JyBpbiBpbmplY3Rba2V5XSkge1xuICAgICAgICAgIHZhciBwcm92aWRlRGVmYXVsdCA9IGluamVjdFtrZXldLmRlZmF1bHQ7XG4gICAgICAgICAgcmVzdWx0W2tleV0gPSB0eXBlb2YgcHJvdmlkZURlZmF1bHQgPT09ICdmdW5jdGlvbidcbiAgICAgICAgICAgID8gcHJvdmlkZURlZmF1bHQuY2FsbCh2bSlcbiAgICAgICAgICAgIDogcHJvdmlkZURlZmF1bHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgd2FybigoXCJJbmplY3Rpb24gXFxcIlwiICsga2V5ICsgXCJcXFwiIG5vdCBmb3VuZFwiKSwgdm0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHRcbiAgfVxufVxuXG4vKiAgKi9cblxuXG5cbi8qKlxuICogUnVudGltZSBoZWxwZXIgZm9yIHJlc29sdmluZyByYXcgY2hpbGRyZW4gVk5vZGVzIGludG8gYSBzbG90IG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZVNsb3RzIChcbiAgY2hpbGRyZW4sXG4gIGNvbnRleHRcbikge1xuICBpZiAoIWNoaWxkcmVuIHx8ICFjaGlsZHJlbi5sZW5ndGgpIHtcbiAgICByZXR1cm4ge31cbiAgfVxuICB2YXIgc2xvdHMgPSB7fTtcbiAgZm9yICh2YXIgaSA9IDAsIGwgPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICB2YXIgY2hpbGQgPSBjaGlsZHJlbltpXTtcbiAgICB2YXIgZGF0YSA9IGNoaWxkLmRhdGE7XG4gICAgLy8gcmVtb3ZlIHNsb3QgYXR0cmlidXRlIGlmIHRoZSBub2RlIGlzIHJlc29sdmVkIGFzIGEgVnVlIHNsb3Qgbm9kZVxuICAgIGlmIChkYXRhICYmIGRhdGEuYXR0cnMgJiYgZGF0YS5hdHRycy5zbG90KSB7XG4gICAgICBkZWxldGUgZGF0YS5hdHRycy5zbG90O1xuICAgIH1cbiAgICAvLyBuYW1lZCBzbG90cyBzaG91bGQgb25seSBiZSByZXNwZWN0ZWQgaWYgdGhlIHZub2RlIHdhcyByZW5kZXJlZCBpbiB0aGVcbiAgICAvLyBzYW1lIGNvbnRleHQuXG4gICAgaWYgKChjaGlsZC5jb250ZXh0ID09PSBjb250ZXh0IHx8IGNoaWxkLmZuQ29udGV4dCA9PT0gY29udGV4dCkgJiZcbiAgICAgIGRhdGEgJiYgZGF0YS5zbG90ICE9IG51bGxcbiAgICApIHtcbiAgICAgIHZhciBuYW1lID0gZGF0YS5zbG90O1xuICAgICAgdmFyIHNsb3QgPSAoc2xvdHNbbmFtZV0gfHwgKHNsb3RzW25hbWVdID0gW10pKTtcbiAgICAgIGlmIChjaGlsZC50YWcgPT09ICd0ZW1wbGF0ZScpIHtcbiAgICAgICAgc2xvdC5wdXNoLmFwcGx5KHNsb3QsIGNoaWxkLmNoaWxkcmVuIHx8IFtdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNsb3QucHVzaChjaGlsZCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIChzbG90cy5kZWZhdWx0IHx8IChzbG90cy5kZWZhdWx0ID0gW10pKS5wdXNoKGNoaWxkKTtcbiAgICB9XG4gIH1cbiAgLy8gaWdub3JlIHNsb3RzIHRoYXQgY29udGFpbnMgb25seSB3aGl0ZXNwYWNlXG4gIGZvciAodmFyIG5hbWUkMSBpbiBzbG90cykge1xuICAgIGlmIChzbG90c1tuYW1lJDFdLmV2ZXJ5KGlzV2hpdGVzcGFjZSkpIHtcbiAgICAgIGRlbGV0ZSBzbG90c1tuYW1lJDFdO1xuICAgIH1cbiAgfVxuICByZXR1cm4gc2xvdHNcbn1cblxuZnVuY3Rpb24gaXNXaGl0ZXNwYWNlIChub2RlKSB7XG4gIHJldHVybiAobm9kZS5pc0NvbW1lbnQgJiYgIW5vZGUuYXN5bmNGYWN0b3J5KSB8fCBub2RlLnRleHQgPT09ICcgJ1xufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gbm9ybWFsaXplU2NvcGVkU2xvdHMgKFxuICBzbG90cyxcbiAgbm9ybWFsU2xvdHMsXG4gIHByZXZTbG90c1xuKSB7XG4gIHZhciByZXM7XG4gIHZhciBoYXNOb3JtYWxTbG90cyA9IE9iamVjdC5rZXlzKG5vcm1hbFNsb3RzKS5sZW5ndGggPiAwO1xuICB2YXIgaXNTdGFibGUgPSBzbG90cyA/ICEhc2xvdHMuJHN0YWJsZSA6ICFoYXNOb3JtYWxTbG90cztcbiAgdmFyIGtleSA9IHNsb3RzICYmIHNsb3RzLiRrZXk7XG4gIGlmICghc2xvdHMpIHtcbiAgICByZXMgPSB7fTtcbiAgfSBlbHNlIGlmIChzbG90cy5fbm9ybWFsaXplZCkge1xuICAgIC8vIGZhc3QgcGF0aCAxOiBjaGlsZCBjb21wb25lbnQgcmUtcmVuZGVyIG9ubHksIHBhcmVudCBkaWQgbm90IGNoYW5nZVxuICAgIHJldHVybiBzbG90cy5fbm9ybWFsaXplZFxuICB9IGVsc2UgaWYgKFxuICAgIGlzU3RhYmxlICYmXG4gICAgcHJldlNsb3RzICYmXG4gICAgcHJldlNsb3RzICE9PSBlbXB0eU9iamVjdCAmJlxuICAgIGtleSA9PT0gcHJldlNsb3RzLiRrZXkgJiZcbiAgICAhaGFzTm9ybWFsU2xvdHMgJiZcbiAgICAhcHJldlNsb3RzLiRoYXNOb3JtYWxcbiAgKSB7XG4gICAgLy8gZmFzdCBwYXRoIDI6IHN0YWJsZSBzY29wZWQgc2xvdHMgdy8gbm8gbm9ybWFsIHNsb3RzIHRvIHByb3h5LFxuICAgIC8vIG9ubHkgbmVlZCB0byBub3JtYWxpemUgb25jZVxuICAgIHJldHVybiBwcmV2U2xvdHNcbiAgfSBlbHNlIHtcbiAgICByZXMgPSB7fTtcbiAgICBmb3IgKHZhciBrZXkkMSBpbiBzbG90cykge1xuICAgICAgaWYgKHNsb3RzW2tleSQxXSAmJiBrZXkkMVswXSAhPT0gJyQnKSB7XG4gICAgICAgIHJlc1trZXkkMV0gPSBub3JtYWxpemVTY29wZWRTbG90KG5vcm1hbFNsb3RzLCBrZXkkMSwgc2xvdHNba2V5JDFdKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgLy8gZXhwb3NlIG5vcm1hbCBzbG90cyBvbiBzY29wZWRTbG90c1xuICBmb3IgKHZhciBrZXkkMiBpbiBub3JtYWxTbG90cykge1xuICAgIGlmICghKGtleSQyIGluIHJlcykpIHtcbiAgICAgIHJlc1trZXkkMl0gPSBwcm94eU5vcm1hbFNsb3Qobm9ybWFsU2xvdHMsIGtleSQyKTtcbiAgICB9XG4gIH1cbiAgLy8gYXZvcmlheiBzZWVtcyB0byBtb2NrIGEgbm9uLWV4dGVuc2libGUgJHNjb3BlZFNsb3RzIG9iamVjdFxuICAvLyBhbmQgd2hlbiB0aGF0IGlzIHBhc3NlZCBkb3duIHRoaXMgd291bGQgY2F1c2UgYW4gZXJyb3JcbiAgaWYgKHNsb3RzICYmIE9iamVjdC5pc0V4dGVuc2libGUoc2xvdHMpKSB7XG4gICAgKHNsb3RzKS5fbm9ybWFsaXplZCA9IHJlcztcbiAgfVxuICBkZWYocmVzLCAnJHN0YWJsZScsIGlzU3RhYmxlKTtcbiAgZGVmKHJlcywgJyRrZXknLCBrZXkpO1xuICBkZWYocmVzLCAnJGhhc05vcm1hbCcsIGhhc05vcm1hbFNsb3RzKTtcbiAgcmV0dXJuIHJlc1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVTY29wZWRTbG90KG5vcm1hbFNsb3RzLCBrZXksIGZuKSB7XG4gIHZhciBub3JtYWxpemVkID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciByZXMgPSBhcmd1bWVudHMubGVuZ3RoID8gZm4uYXBwbHkobnVsbCwgYXJndW1lbnRzKSA6IGZuKHt9KTtcbiAgICByZXMgPSByZXMgJiYgdHlwZW9mIHJlcyA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkocmVzKVxuICAgICAgPyBbcmVzXSAvLyBzaW5nbGUgdm5vZGVcbiAgICAgIDogbm9ybWFsaXplQ2hpbGRyZW4ocmVzKTtcbiAgICByZXR1cm4gcmVzICYmIChcbiAgICAgIHJlcy5sZW5ndGggPT09IDAgfHxcbiAgICAgIChyZXMubGVuZ3RoID09PSAxICYmIHJlc1swXS5pc0NvbW1lbnQpIC8vICM5NjU4XG4gICAgKSA/IHVuZGVmaW5lZFxuICAgICAgOiByZXNcbiAgfTtcbiAgLy8gdGhpcyBpcyBhIHNsb3QgdXNpbmcgdGhlIG5ldyB2LXNsb3Qgc3ludGF4IHdpdGhvdXQgc2NvcGUuIGFsdGhvdWdoIGl0IGlzXG4gIC8vIGNvbXBpbGVkIGFzIGEgc2NvcGVkIHNsb3QsIHJlbmRlciBmbiB1c2VycyB3b3VsZCBleHBlY3QgaXQgdG8gYmUgcHJlc2VudFxuICAvLyBvbiB0aGlzLiRzbG90cyBiZWNhdXNlIHRoZSB1c2FnZSBpcyBzZW1hbnRpY2FsbHkgYSBub3JtYWwgc2xvdC5cbiAgaWYgKGZuLnByb3h5KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG5vcm1hbFNsb3RzLCBrZXksIHtcbiAgICAgIGdldDogbm9ybWFsaXplZCxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gbm9ybWFsaXplZFxufVxuXG5mdW5jdGlvbiBwcm94eU5vcm1hbFNsb3Qoc2xvdHMsIGtleSkge1xuICByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gc2xvdHNba2V5XTsgfVxufVxuXG4vKiAgKi9cblxuLyoqXG4gKiBSdW50aW1lIGhlbHBlciBmb3IgcmVuZGVyaW5nIHYtZm9yIGxpc3RzLlxuICovXG5mdW5jdGlvbiByZW5kZXJMaXN0IChcbiAgdmFsLFxuICByZW5kZXJcbikge1xuICB2YXIgcmV0LCBpLCBsLCBrZXlzLCBrZXk7XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbCkgfHwgdHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcbiAgICByZXQgPSBuZXcgQXJyYXkodmFsLmxlbmd0aCk7XG4gICAgZm9yIChpID0gMCwgbCA9IHZhbC5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIHJldFtpXSA9IHJlbmRlcih2YWxbaV0sIGkpO1xuICAgIH1cbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xuICAgIHJldCA9IG5ldyBBcnJheSh2YWwpO1xuICAgIGZvciAoaSA9IDA7IGkgPCB2YWw7IGkrKykge1xuICAgICAgcmV0W2ldID0gcmVuZGVyKGkgKyAxLCBpKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoaXNPYmplY3QodmFsKSkge1xuICAgIGlmIChoYXNTeW1ib2wgJiYgdmFsW1N5bWJvbC5pdGVyYXRvcl0pIHtcbiAgICAgIHJldCA9IFtdO1xuICAgICAgdmFyIGl0ZXJhdG9yID0gdmFsW1N5bWJvbC5pdGVyYXRvcl0oKTtcbiAgICAgIHZhciByZXN1bHQgPSBpdGVyYXRvci5uZXh0KCk7XG4gICAgICB3aGlsZSAoIXJlc3VsdC5kb25lKSB7XG4gICAgICAgIHJldC5wdXNoKHJlbmRlcihyZXN1bHQudmFsdWUsIHJldC5sZW5ndGgpKTtcbiAgICAgICAgcmVzdWx0ID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBrZXlzID0gT2JqZWN0LmtleXModmFsKTtcbiAgICAgIHJldCA9IG5ldyBBcnJheShrZXlzLmxlbmd0aCk7XG4gICAgICBmb3IgKGkgPSAwLCBsID0ga2V5cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgcmV0W2ldID0gcmVuZGVyKHZhbFtrZXldLCBrZXksIGkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoIWlzRGVmKHJldCkpIHtcbiAgICByZXQgPSBbXTtcbiAgfVxuICAocmV0KS5faXNWTGlzdCA9IHRydWU7XG4gIHJldHVybiByZXRcbn1cblxuLyogICovXG5cbi8qKlxuICogUnVudGltZSBoZWxwZXIgZm9yIHJlbmRlcmluZyA8c2xvdD5cbiAqL1xuZnVuY3Rpb24gcmVuZGVyU2xvdCAoXG4gIG5hbWUsXG4gIGZhbGxiYWNrLFxuICBwcm9wcyxcbiAgYmluZE9iamVjdFxuKSB7XG4gIHZhciBzY29wZWRTbG90Rm4gPSB0aGlzLiRzY29wZWRTbG90c1tuYW1lXTtcbiAgdmFyIG5vZGVzO1xuICBpZiAoc2NvcGVkU2xvdEZuKSB7IC8vIHNjb3BlZCBzbG90XG4gICAgcHJvcHMgPSBwcm9wcyB8fCB7fTtcbiAgICBpZiAoYmluZE9iamVjdCkge1xuICAgICAgaWYgKCFpc09iamVjdChiaW5kT2JqZWN0KSkge1xuICAgICAgICB3YXJuKFxuICAgICAgICAgICdzbG90IHYtYmluZCB3aXRob3V0IGFyZ3VtZW50IGV4cGVjdHMgYW4gT2JqZWN0JyxcbiAgICAgICAgICB0aGlzXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBwcm9wcyA9IGV4dGVuZChleHRlbmQoe30sIGJpbmRPYmplY3QpLCBwcm9wcyk7XG4gICAgfVxuICAgIG5vZGVzID0gc2NvcGVkU2xvdEZuKHByb3BzKSB8fCBmYWxsYmFjaztcbiAgfSBlbHNlIHtcbiAgICBub2RlcyA9IHRoaXMuJHNsb3RzW25hbWVdIHx8IGZhbGxiYWNrO1xuICB9XG5cbiAgdmFyIHRhcmdldCA9IHByb3BzICYmIHByb3BzLnNsb3Q7XG4gIGlmICh0YXJnZXQpIHtcbiAgICByZXR1cm4gdGhpcy4kY3JlYXRlRWxlbWVudCgndGVtcGxhdGUnLCB7IHNsb3Q6IHRhcmdldCB9LCBub2RlcylcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbm9kZXNcbiAgfVxufVxuXG4vKiAgKi9cblxuLyoqXG4gKiBSdW50aW1lIGhlbHBlciBmb3IgcmVzb2x2aW5nIGZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZUZpbHRlciAoaWQpIHtcbiAgcmV0dXJuIHJlc29sdmVBc3NldCh0aGlzLiRvcHRpb25zLCAnZmlsdGVycycsIGlkLCB0cnVlKSB8fCBpZGVudGl0eVxufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gaXNLZXlOb3RNYXRjaCAoZXhwZWN0LCBhY3R1YWwpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoZXhwZWN0KSkge1xuICAgIHJldHVybiBleHBlY3QuaW5kZXhPZihhY3R1YWwpID09PSAtMVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBleHBlY3QgIT09IGFjdHVhbFxuICB9XG59XG5cbi8qKlxuICogUnVudGltZSBoZWxwZXIgZm9yIGNoZWNraW5nIGtleUNvZGVzIGZyb20gY29uZmlnLlxuICogZXhwb3NlZCBhcyBWdWUucHJvdG90eXBlLl9rXG4gKiBwYXNzaW5nIGluIGV2ZW50S2V5TmFtZSBhcyBsYXN0IGFyZ3VtZW50IHNlcGFyYXRlbHkgZm9yIGJhY2t3YXJkcyBjb21wYXRcbiAqL1xuZnVuY3Rpb24gY2hlY2tLZXlDb2RlcyAoXG4gIGV2ZW50S2V5Q29kZSxcbiAga2V5LFxuICBidWlsdEluS2V5Q29kZSxcbiAgZXZlbnRLZXlOYW1lLFxuICBidWlsdEluS2V5TmFtZVxuKSB7XG4gIHZhciBtYXBwZWRLZXlDb2RlID0gY29uZmlnLmtleUNvZGVzW2tleV0gfHwgYnVpbHRJbktleUNvZGU7XG4gIGlmIChidWlsdEluS2V5TmFtZSAmJiBldmVudEtleU5hbWUgJiYgIWNvbmZpZy5rZXlDb2Rlc1trZXldKSB7XG4gICAgcmV0dXJuIGlzS2V5Tm90TWF0Y2goYnVpbHRJbktleU5hbWUsIGV2ZW50S2V5TmFtZSlcbiAgfSBlbHNlIGlmIChtYXBwZWRLZXlDb2RlKSB7XG4gICAgcmV0dXJuIGlzS2V5Tm90TWF0Y2gobWFwcGVkS2V5Q29kZSwgZXZlbnRLZXlDb2RlKVxuICB9IGVsc2UgaWYgKGV2ZW50S2V5TmFtZSkge1xuICAgIHJldHVybiBoeXBoZW5hdGUoZXZlbnRLZXlOYW1lKSAhPT0ga2V5XG4gIH1cbn1cblxuLyogICovXG5cbi8qKlxuICogUnVudGltZSBoZWxwZXIgZm9yIG1lcmdpbmcgdi1iaW5kPVwib2JqZWN0XCIgaW50byBhIFZOb2RlJ3MgZGF0YS5cbiAqL1xuZnVuY3Rpb24gYmluZE9iamVjdFByb3BzIChcbiAgZGF0YSxcbiAgdGFnLFxuICB2YWx1ZSxcbiAgYXNQcm9wLFxuICBpc1N5bmNcbikge1xuICBpZiAodmFsdWUpIHtcbiAgICBpZiAoIWlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgd2FybihcbiAgICAgICAgJ3YtYmluZCB3aXRob3V0IGFyZ3VtZW50IGV4cGVjdHMgYW4gT2JqZWN0IG9yIEFycmF5IHZhbHVlJyxcbiAgICAgICAgdGhpc1xuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHZhbHVlID0gdG9PYmplY3QodmFsdWUpO1xuICAgICAgfVxuICAgICAgdmFyIGhhc2g7XG4gICAgICB2YXIgbG9vcCA9IGZ1bmN0aW9uICgga2V5ICkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAga2V5ID09PSAnY2xhc3MnIHx8XG4gICAgICAgICAga2V5ID09PSAnc3R5bGUnIHx8XG4gICAgICAgICAgaXNSZXNlcnZlZEF0dHJpYnV0ZShrZXkpXG4gICAgICAgICkge1xuICAgICAgICAgIGhhc2ggPSBkYXRhO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciB0eXBlID0gZGF0YS5hdHRycyAmJiBkYXRhLmF0dHJzLnR5cGU7XG4gICAgICAgICAgaGFzaCA9IGFzUHJvcCB8fCBjb25maWcubXVzdFVzZVByb3AodGFnLCB0eXBlLCBrZXkpXG4gICAgICAgICAgICA/IGRhdGEuZG9tUHJvcHMgfHwgKGRhdGEuZG9tUHJvcHMgPSB7fSlcbiAgICAgICAgICAgIDogZGF0YS5hdHRycyB8fCAoZGF0YS5hdHRycyA9IHt9KTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgY2FtZWxpemVkS2V5ID0gY2FtZWxpemUoa2V5KTtcbiAgICAgICAgdmFyIGh5cGhlbmF0ZWRLZXkgPSBoeXBoZW5hdGUoa2V5KTtcbiAgICAgICAgaWYgKCEoY2FtZWxpemVkS2V5IGluIGhhc2gpICYmICEoaHlwaGVuYXRlZEtleSBpbiBoYXNoKSkge1xuICAgICAgICAgIGhhc2hba2V5XSA9IHZhbHVlW2tleV07XG5cbiAgICAgICAgICBpZiAoaXNTeW5jKSB7XG4gICAgICAgICAgICB2YXIgb24gPSBkYXRhLm9uIHx8IChkYXRhLm9uID0ge30pO1xuICAgICAgICAgICAgb25bKFwidXBkYXRlOlwiICsga2V5KV0gPSBmdW5jdGlvbiAoJGV2ZW50KSB7XG4gICAgICAgICAgICAgIHZhbHVlW2tleV0gPSAkZXZlbnQ7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgZm9yICh2YXIga2V5IGluIHZhbHVlKSBsb29wKCBrZXkgKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGRhdGFcbn1cblxuLyogICovXG5cbi8qKlxuICogUnVudGltZSBoZWxwZXIgZm9yIHJlbmRlcmluZyBzdGF0aWMgdHJlZXMuXG4gKi9cbmZ1bmN0aW9uIHJlbmRlclN0YXRpYyAoXG4gIGluZGV4LFxuICBpc0luRm9yXG4pIHtcbiAgdmFyIGNhY2hlZCA9IHRoaXMuX3N0YXRpY1RyZWVzIHx8ICh0aGlzLl9zdGF0aWNUcmVlcyA9IFtdKTtcbiAgdmFyIHRyZWUgPSBjYWNoZWRbaW5kZXhdO1xuICAvLyBpZiBoYXMgYWxyZWFkeS1yZW5kZXJlZCBzdGF0aWMgdHJlZSBhbmQgbm90IGluc2lkZSB2LWZvcixcbiAgLy8gd2UgY2FuIHJldXNlIHRoZSBzYW1lIHRyZWUuXG4gIGlmICh0cmVlICYmICFpc0luRm9yKSB7XG4gICAgcmV0dXJuIHRyZWVcbiAgfVxuICAvLyBvdGhlcndpc2UsIHJlbmRlciBhIGZyZXNoIHRyZWUuXG4gIHRyZWUgPSBjYWNoZWRbaW5kZXhdID0gdGhpcy4kb3B0aW9ucy5zdGF0aWNSZW5kZXJGbnNbaW5kZXhdLmNhbGwoXG4gICAgdGhpcy5fcmVuZGVyUHJveHksXG4gICAgbnVsbCxcbiAgICB0aGlzIC8vIGZvciByZW5kZXIgZm5zIGdlbmVyYXRlZCBmb3IgZnVuY3Rpb25hbCBjb21wb25lbnQgdGVtcGxhdGVzXG4gICk7XG4gIG1hcmtTdGF0aWModHJlZSwgKFwiX19zdGF0aWNfX1wiICsgaW5kZXgpLCBmYWxzZSk7XG4gIHJldHVybiB0cmVlXG59XG5cbi8qKlxuICogUnVudGltZSBoZWxwZXIgZm9yIHYtb25jZS5cbiAqIEVmZmVjdGl2ZWx5IGl0IG1lYW5zIG1hcmtpbmcgdGhlIG5vZGUgYXMgc3RhdGljIHdpdGggYSB1bmlxdWUga2V5LlxuICovXG5mdW5jdGlvbiBtYXJrT25jZSAoXG4gIHRyZWUsXG4gIGluZGV4LFxuICBrZXlcbikge1xuICBtYXJrU3RhdGljKHRyZWUsIChcIl9fb25jZV9fXCIgKyBpbmRleCArIChrZXkgPyAoXCJfXCIgKyBrZXkpIDogXCJcIikpLCB0cnVlKTtcbiAgcmV0dXJuIHRyZWVcbn1cblxuZnVuY3Rpb24gbWFya1N0YXRpYyAoXG4gIHRyZWUsXG4gIGtleSxcbiAgaXNPbmNlXG4pIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodHJlZSkpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRyZWUubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0cmVlW2ldICYmIHR5cGVvZiB0cmVlW2ldICE9PSAnc3RyaW5nJykge1xuICAgICAgICBtYXJrU3RhdGljTm9kZSh0cmVlW2ldLCAoa2V5ICsgXCJfXCIgKyBpKSwgaXNPbmNlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbWFya1N0YXRpY05vZGUodHJlZSwga2V5LCBpc09uY2UpO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1hcmtTdGF0aWNOb2RlIChub2RlLCBrZXksIGlzT25jZSkge1xuICBub2RlLmlzU3RhdGljID0gdHJ1ZTtcbiAgbm9kZS5rZXkgPSBrZXk7XG4gIG5vZGUuaXNPbmNlID0gaXNPbmNlO1xufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gYmluZE9iamVjdExpc3RlbmVycyAoZGF0YSwgdmFsdWUpIHtcbiAgaWYgKHZhbHVlKSB7XG4gICAgaWYgKCFpc1BsYWluT2JqZWN0KHZhbHVlKSkge1xuICAgICAgd2FybihcbiAgICAgICAgJ3Ytb24gd2l0aG91dCBhcmd1bWVudCBleHBlY3RzIGFuIE9iamVjdCB2YWx1ZScsXG4gICAgICAgIHRoaXNcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBvbiA9IGRhdGEub24gPSBkYXRhLm9uID8gZXh0ZW5kKHt9LCBkYXRhLm9uKSA6IHt9O1xuICAgICAgZm9yICh2YXIga2V5IGluIHZhbHVlKSB7XG4gICAgICAgIHZhciBleGlzdGluZyA9IG9uW2tleV07XG4gICAgICAgIHZhciBvdXJzID0gdmFsdWVba2V5XTtcbiAgICAgICAgb25ba2V5XSA9IGV4aXN0aW5nID8gW10uY29uY2F0KGV4aXN0aW5nLCBvdXJzKSA6IG91cnM7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBkYXRhXG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiByZXNvbHZlU2NvcGVkU2xvdHMgKFxuICBmbnMsIC8vIHNlZSBmbG93L3Zub2RlXG4gIHJlcyxcbiAgLy8gdGhlIGZvbGxvd2luZyBhcmUgYWRkZWQgaW4gMi42XG4gIGhhc0R5bmFtaWNLZXlzLFxuICBjb250ZW50SGFzaEtleVxuKSB7XG4gIHJlcyA9IHJlcyB8fCB7ICRzdGFibGU6ICFoYXNEeW5hbWljS2V5cyB9O1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGZucy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBzbG90ID0gZm5zW2ldO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHNsb3QpKSB7XG4gICAgICByZXNvbHZlU2NvcGVkU2xvdHMoc2xvdCwgcmVzLCBoYXNEeW5hbWljS2V5cyk7XG4gICAgfSBlbHNlIGlmIChzbG90KSB7XG4gICAgICAvLyBtYXJrZXIgZm9yIHJldmVyc2UgcHJveHlpbmcgdi1zbG90IHdpdGhvdXQgc2NvcGUgb24gdGhpcy4kc2xvdHNcbiAgICAgIGlmIChzbG90LnByb3h5KSB7XG4gICAgICAgIHNsb3QuZm4ucHJveHkgPSB0cnVlO1xuICAgICAgfVxuICAgICAgcmVzW3Nsb3Qua2V5XSA9IHNsb3QuZm47XG4gICAgfVxuICB9XG4gIGlmIChjb250ZW50SGFzaEtleSkge1xuICAgIChyZXMpLiRrZXkgPSBjb250ZW50SGFzaEtleTtcbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBiaW5kRHluYW1pY0tleXMgKGJhc2VPYmosIHZhbHVlcykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkgKz0gMikge1xuICAgIHZhciBrZXkgPSB2YWx1ZXNbaV07XG4gICAgaWYgKHR5cGVvZiBrZXkgPT09ICdzdHJpbmcnICYmIGtleSkge1xuICAgICAgYmFzZU9ialt2YWx1ZXNbaV1dID0gdmFsdWVzW2kgKyAxXTtcbiAgICB9IGVsc2UgaWYgKGtleSAhPT0gJycgJiYga2V5ICE9PSBudWxsKSB7XG4gICAgICAvLyBudWxsIGlzIGEgc3BlaWNhbCB2YWx1ZSBmb3IgZXhwbGljaXRseSByZW1vdmluZyBhIGJpbmRpbmdcbiAgICAgIHdhcm4oXG4gICAgICAgIChcIkludmFsaWQgdmFsdWUgZm9yIGR5bmFtaWMgZGlyZWN0aXZlIGFyZ3VtZW50IChleHBlY3RlZCBzdHJpbmcgb3IgbnVsbCk6IFwiICsga2V5KSxcbiAgICAgICAgdGhpc1xuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGJhc2VPYmpcbn1cblxuLy8gaGVscGVyIHRvIGR5bmFtaWNhbGx5IGFwcGVuZCBtb2RpZmllciBydW50aW1lIG1hcmtlcnMgdG8gZXZlbnQgbmFtZXMuXG4vLyBlbnN1cmUgb25seSBhcHBlbmQgd2hlbiB2YWx1ZSBpcyBhbHJlYWR5IHN0cmluZywgb3RoZXJ3aXNlIGl0IHdpbGwgYmUgY2FzdFxuLy8gdG8gc3RyaW5nIGFuZCBjYXVzZSB0aGUgdHlwZSBjaGVjayB0byBtaXNzLlxuZnVuY3Rpb24gcHJlcGVuZE1vZGlmaWVyICh2YWx1ZSwgc3ltYm9sKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gc3ltYm9sICsgdmFsdWUgOiB2YWx1ZVxufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gaW5zdGFsbFJlbmRlckhlbHBlcnMgKHRhcmdldCkge1xuICB0YXJnZXQuX28gPSBtYXJrT25jZTtcbiAgdGFyZ2V0Ll9uID0gdG9OdW1iZXI7XG4gIHRhcmdldC5fcyA9IHRvU3RyaW5nO1xuICB0YXJnZXQuX2wgPSByZW5kZXJMaXN0O1xuICB0YXJnZXQuX3QgPSByZW5kZXJTbG90O1xuICB0YXJnZXQuX3EgPSBsb29zZUVxdWFsO1xuICB0YXJnZXQuX2kgPSBsb29zZUluZGV4T2Y7XG4gIHRhcmdldC5fbSA9IHJlbmRlclN0YXRpYztcbiAgdGFyZ2V0Ll9mID0gcmVzb2x2ZUZpbHRlcjtcbiAgdGFyZ2V0Ll9rID0gY2hlY2tLZXlDb2RlcztcbiAgdGFyZ2V0Ll9iID0gYmluZE9iamVjdFByb3BzO1xuICB0YXJnZXQuX3YgPSBjcmVhdGVUZXh0Vk5vZGU7XG4gIHRhcmdldC5fZSA9IGNyZWF0ZUVtcHR5Vk5vZGU7XG4gIHRhcmdldC5fdSA9IHJlc29sdmVTY29wZWRTbG90cztcbiAgdGFyZ2V0Ll9nID0gYmluZE9iamVjdExpc3RlbmVycztcbiAgdGFyZ2V0Ll9kID0gYmluZER5bmFtaWNLZXlzO1xuICB0YXJnZXQuX3AgPSBwcmVwZW5kTW9kaWZpZXI7XG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBGdW5jdGlvbmFsUmVuZGVyQ29udGV4dCAoXG4gIGRhdGEsXG4gIHByb3BzLFxuICBjaGlsZHJlbixcbiAgcGFyZW50LFxuICBDdG9yXG4pIHtcbiAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgdmFyIG9wdGlvbnMgPSBDdG9yLm9wdGlvbnM7XG4gIC8vIGVuc3VyZSB0aGUgY3JlYXRlRWxlbWVudCBmdW5jdGlvbiBpbiBmdW5jdGlvbmFsIGNvbXBvbmVudHNcbiAgLy8gZ2V0cyBhIHVuaXF1ZSBjb250ZXh0IC0gdGhpcyBpcyBuZWNlc3NhcnkgZm9yIGNvcnJlY3QgbmFtZWQgc2xvdCBjaGVja1xuICB2YXIgY29udGV4dFZtO1xuICBpZiAoaGFzT3duKHBhcmVudCwgJ191aWQnKSkge1xuICAgIGNvbnRleHRWbSA9IE9iamVjdC5jcmVhdGUocGFyZW50KTtcbiAgICAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbiAgICBjb250ZXh0Vm0uX29yaWdpbmFsID0gcGFyZW50O1xuICB9IGVsc2Uge1xuICAgIC8vIHRoZSBjb250ZXh0IHZtIHBhc3NlZCBpbiBpcyBhIGZ1bmN0aW9uYWwgY29udGV4dCBhcyB3ZWxsLlxuICAgIC8vIGluIHRoaXMgY2FzZSB3ZSB3YW50IHRvIG1ha2Ugc3VyZSB3ZSBhcmUgYWJsZSB0byBnZXQgYSBob2xkIHRvIHRoZVxuICAgIC8vIHJlYWwgY29udGV4dCBpbnN0YW5jZS5cbiAgICBjb250ZXh0Vm0gPSBwYXJlbnQ7XG4gICAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gICAgcGFyZW50ID0gcGFyZW50Ll9vcmlnaW5hbDtcbiAgfVxuICB2YXIgaXNDb21waWxlZCA9IGlzVHJ1ZShvcHRpb25zLl9jb21waWxlZCk7XG4gIHZhciBuZWVkTm9ybWFsaXphdGlvbiA9ICFpc0NvbXBpbGVkO1xuXG4gIHRoaXMuZGF0YSA9IGRhdGE7XG4gIHRoaXMucHJvcHMgPSBwcm9wcztcbiAgdGhpcy5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICB0aGlzLnBhcmVudCA9IHBhcmVudDtcbiAgdGhpcy5saXN0ZW5lcnMgPSBkYXRhLm9uIHx8IGVtcHR5T2JqZWN0O1xuICB0aGlzLmluamVjdGlvbnMgPSByZXNvbHZlSW5qZWN0KG9wdGlvbnMuaW5qZWN0LCBwYXJlbnQpO1xuICB0aGlzLnNsb3RzID0gZnVuY3Rpb24gKCkge1xuICAgIGlmICghdGhpcyQxLiRzbG90cykge1xuICAgICAgbm9ybWFsaXplU2NvcGVkU2xvdHMoXG4gICAgICAgIGRhdGEuc2NvcGVkU2xvdHMsXG4gICAgICAgIHRoaXMkMS4kc2xvdHMgPSByZXNvbHZlU2xvdHMoY2hpbGRyZW4sIHBhcmVudClcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzJDEuJHNsb3RzXG4gIH07XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdzY29wZWRTbG90cycsICh7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCAoKSB7XG4gICAgICByZXR1cm4gbm9ybWFsaXplU2NvcGVkU2xvdHMoZGF0YS5zY29wZWRTbG90cywgdGhpcy5zbG90cygpKVxuICAgIH1cbiAgfSkpO1xuXG4gIC8vIHN1cHBvcnQgZm9yIGNvbXBpbGVkIGZ1bmN0aW9uYWwgdGVtcGxhdGVcbiAgaWYgKGlzQ29tcGlsZWQpIHtcbiAgICAvLyBleHBvc2luZyAkb3B0aW9ucyBmb3IgcmVuZGVyU3RhdGljKClcbiAgICB0aGlzLiRvcHRpb25zID0gb3B0aW9ucztcbiAgICAvLyBwcmUtcmVzb2x2ZSBzbG90cyBmb3IgcmVuZGVyU2xvdCgpXG4gICAgdGhpcy4kc2xvdHMgPSB0aGlzLnNsb3RzKCk7XG4gICAgdGhpcy4kc2NvcGVkU2xvdHMgPSBub3JtYWxpemVTY29wZWRTbG90cyhkYXRhLnNjb3BlZFNsb3RzLCB0aGlzLiRzbG90cyk7XG4gIH1cblxuICBpZiAob3B0aW9ucy5fc2NvcGVJZCkge1xuICAgIHRoaXMuX2MgPSBmdW5jdGlvbiAoYSwgYiwgYywgZCkge1xuICAgICAgdmFyIHZub2RlID0gY3JlYXRlRWxlbWVudChjb250ZXh0Vm0sIGEsIGIsIGMsIGQsIG5lZWROb3JtYWxpemF0aW9uKTtcbiAgICAgIGlmICh2bm9kZSAmJiAhQXJyYXkuaXNBcnJheSh2bm9kZSkpIHtcbiAgICAgICAgdm5vZGUuZm5TY29wZUlkID0gb3B0aW9ucy5fc2NvcGVJZDtcbiAgICAgICAgdm5vZGUuZm5Db250ZXh0ID0gcGFyZW50O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHZub2RlXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLl9jID0gZnVuY3Rpb24gKGEsIGIsIGMsIGQpIHsgcmV0dXJuIGNyZWF0ZUVsZW1lbnQoY29udGV4dFZtLCBhLCBiLCBjLCBkLCBuZWVkTm9ybWFsaXphdGlvbik7IH07XG4gIH1cbn1cblxuaW5zdGFsbFJlbmRlckhlbHBlcnMoRnVuY3Rpb25hbFJlbmRlckNvbnRleHQucHJvdG90eXBlKTtcblxuZnVuY3Rpb24gY3JlYXRlRnVuY3Rpb25hbENvbXBvbmVudCAoXG4gIEN0b3IsXG4gIHByb3BzRGF0YSxcbiAgZGF0YSxcbiAgY29udGV4dFZtLFxuICBjaGlsZHJlblxuKSB7XG4gIHZhciBvcHRpb25zID0gQ3Rvci5vcHRpb25zO1xuICB2YXIgcHJvcHMgPSB7fTtcbiAgdmFyIHByb3BPcHRpb25zID0gb3B0aW9ucy5wcm9wcztcbiAgaWYgKGlzRGVmKHByb3BPcHRpb25zKSkge1xuICAgIGZvciAodmFyIGtleSBpbiBwcm9wT3B0aW9ucykge1xuICAgICAgcHJvcHNba2V5XSA9IHZhbGlkYXRlUHJvcChrZXksIHByb3BPcHRpb25zLCBwcm9wc0RhdGEgfHwgZW1wdHlPYmplY3QpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoaXNEZWYoZGF0YS5hdHRycykpIHsgbWVyZ2VQcm9wcyhwcm9wcywgZGF0YS5hdHRycyk7IH1cbiAgICBpZiAoaXNEZWYoZGF0YS5wcm9wcykpIHsgbWVyZ2VQcm9wcyhwcm9wcywgZGF0YS5wcm9wcyk7IH1cbiAgfVxuXG4gIHZhciByZW5kZXJDb250ZXh0ID0gbmV3IEZ1bmN0aW9uYWxSZW5kZXJDb250ZXh0KFxuICAgIGRhdGEsXG4gICAgcHJvcHMsXG4gICAgY2hpbGRyZW4sXG4gICAgY29udGV4dFZtLFxuICAgIEN0b3JcbiAgKTtcblxuICB2YXIgdm5vZGUgPSBvcHRpb25zLnJlbmRlci5jYWxsKG51bGwsIHJlbmRlckNvbnRleHQuX2MsIHJlbmRlckNvbnRleHQpO1xuXG4gIGlmICh2bm9kZSBpbnN0YW5jZW9mIFZOb2RlKSB7XG4gICAgcmV0dXJuIGNsb25lQW5kTWFya0Z1bmN0aW9uYWxSZXN1bHQodm5vZGUsIGRhdGEsIHJlbmRlckNvbnRleHQucGFyZW50LCBvcHRpb25zLCByZW5kZXJDb250ZXh0KVxuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodm5vZGUpKSB7XG4gICAgdmFyIHZub2RlcyA9IG5vcm1hbGl6ZUNoaWxkcmVuKHZub2RlKSB8fCBbXTtcbiAgICB2YXIgcmVzID0gbmV3IEFycmF5KHZub2Rlcy5sZW5ndGgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdm5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICByZXNbaV0gPSBjbG9uZUFuZE1hcmtGdW5jdGlvbmFsUmVzdWx0KHZub2Rlc1tpXSwgZGF0YSwgcmVuZGVyQ29udGV4dC5wYXJlbnQsIG9wdGlvbnMsIHJlbmRlckNvbnRleHQpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzXG4gIH1cbn1cblxuZnVuY3Rpb24gY2xvbmVBbmRNYXJrRnVuY3Rpb25hbFJlc3VsdCAodm5vZGUsIGRhdGEsIGNvbnRleHRWbSwgb3B0aW9ucywgcmVuZGVyQ29udGV4dCkge1xuICAvLyAjNzgxNyBjbG9uZSBub2RlIGJlZm9yZSBzZXR0aW5nIGZuQ29udGV4dCwgb3RoZXJ3aXNlIGlmIHRoZSBub2RlIGlzIHJldXNlZFxuICAvLyAoZS5nLiBpdCB3YXMgZnJvbSBhIGNhY2hlZCBub3JtYWwgc2xvdCkgdGhlIGZuQ29udGV4dCBjYXVzZXMgbmFtZWQgc2xvdHNcbiAgLy8gdGhhdCBzaG91bGQgbm90IGJlIG1hdGNoZWQgdG8gbWF0Y2guXG4gIHZhciBjbG9uZSA9IGNsb25lVk5vZGUodm5vZGUpO1xuICBjbG9uZS5mbkNvbnRleHQgPSBjb250ZXh0Vm07XG4gIGNsb25lLmZuT3B0aW9ucyA9IG9wdGlvbnM7XG4gIHtcbiAgICAoY2xvbmUuZGV2dG9vbHNNZXRhID0gY2xvbmUuZGV2dG9vbHNNZXRhIHx8IHt9KS5yZW5kZXJDb250ZXh0ID0gcmVuZGVyQ29udGV4dDtcbiAgfVxuICBpZiAoZGF0YS5zbG90KSB7XG4gICAgKGNsb25lLmRhdGEgfHwgKGNsb25lLmRhdGEgPSB7fSkpLnNsb3QgPSBkYXRhLnNsb3Q7XG4gIH1cbiAgcmV0dXJuIGNsb25lXG59XG5cbmZ1bmN0aW9uIG1lcmdlUHJvcHMgKHRvLCBmcm9tKSB7XG4gIGZvciAodmFyIGtleSBpbiBmcm9tKSB7XG4gICAgdG9bY2FtZWxpemUoa2V5KV0gPSBmcm9tW2tleV07XG4gIH1cbn1cblxuLyogICovXG5cbi8qICAqL1xuXG4vKiAgKi9cblxuLyogICovXG5cbi8vIGlubGluZSBob29rcyB0byBiZSBpbnZva2VkIG9uIGNvbXBvbmVudCBWTm9kZXMgZHVyaW5nIHBhdGNoXG52YXIgY29tcG9uZW50Vk5vZGVIb29rcyA9IHtcbiAgaW5pdDogZnVuY3Rpb24gaW5pdCAodm5vZGUsIGh5ZHJhdGluZykge1xuICAgIGlmIChcbiAgICAgIHZub2RlLmNvbXBvbmVudEluc3RhbmNlICYmXG4gICAgICAhdm5vZGUuY29tcG9uZW50SW5zdGFuY2UuX2lzRGVzdHJveWVkICYmXG4gICAgICB2bm9kZS5kYXRhLmtlZXBBbGl2ZVxuICAgICkge1xuICAgICAgLy8ga2VwdC1hbGl2ZSBjb21wb25lbnRzLCB0cmVhdCBhcyBhIHBhdGNoXG4gICAgICB2YXIgbW91bnRlZE5vZGUgPSB2bm9kZTsgLy8gd29yayBhcm91bmQgZmxvd1xuICAgICAgY29tcG9uZW50Vk5vZGVIb29rcy5wcmVwYXRjaChtb3VudGVkTm9kZSwgbW91bnRlZE5vZGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgY2hpbGQgPSB2bm9kZS5jb21wb25lbnRJbnN0YW5jZSA9IGNyZWF0ZUNvbXBvbmVudEluc3RhbmNlRm9yVm5vZGUoXG4gICAgICAgIHZub2RlLFxuICAgICAgICBhY3RpdmVJbnN0YW5jZVxuICAgICAgKTtcbiAgICAgIGNoaWxkLiRtb3VudChoeWRyYXRpbmcgPyB2bm9kZS5lbG0gOiB1bmRlZmluZWQsIGh5ZHJhdGluZyk7XG4gICAgfVxuICB9LFxuXG4gIHByZXBhdGNoOiBmdW5jdGlvbiBwcmVwYXRjaCAob2xkVm5vZGUsIHZub2RlKSB7XG4gICAgdmFyIG9wdGlvbnMgPSB2bm9kZS5jb21wb25lbnRPcHRpb25zO1xuICAgIHZhciBjaGlsZCA9IHZub2RlLmNvbXBvbmVudEluc3RhbmNlID0gb2xkVm5vZGUuY29tcG9uZW50SW5zdGFuY2U7XG4gICAgdXBkYXRlQ2hpbGRDb21wb25lbnQoXG4gICAgICBjaGlsZCxcbiAgICAgIG9wdGlvbnMucHJvcHNEYXRhLCAvLyB1cGRhdGVkIHByb3BzXG4gICAgICBvcHRpb25zLmxpc3RlbmVycywgLy8gdXBkYXRlZCBsaXN0ZW5lcnNcbiAgICAgIHZub2RlLCAvLyBuZXcgcGFyZW50IHZub2RlXG4gICAgICBvcHRpb25zLmNoaWxkcmVuIC8vIG5ldyBjaGlsZHJlblxuICAgICk7XG4gIH0sXG5cbiAgaW5zZXJ0OiBmdW5jdGlvbiBpbnNlcnQgKHZub2RlKSB7XG4gICAgdmFyIGNvbnRleHQgPSB2bm9kZS5jb250ZXh0O1xuICAgIHZhciBjb21wb25lbnRJbnN0YW5jZSA9IHZub2RlLmNvbXBvbmVudEluc3RhbmNlO1xuICAgIGlmICghY29tcG9uZW50SW5zdGFuY2UuX2lzTW91bnRlZCkge1xuICAgICAgY29tcG9uZW50SW5zdGFuY2UuX2lzTW91bnRlZCA9IHRydWU7XG4gICAgICBjYWxsSG9vayhjb21wb25lbnRJbnN0YW5jZSwgJ21vdW50ZWQnKTtcbiAgICB9XG4gICAgaWYgKHZub2RlLmRhdGEua2VlcEFsaXZlKSB7XG4gICAgICBpZiAoY29udGV4dC5faXNNb3VudGVkKSB7XG4gICAgICAgIC8vIHZ1ZS1yb3V0ZXIjMTIxMlxuICAgICAgICAvLyBEdXJpbmcgdXBkYXRlcywgYSBrZXB0LWFsaXZlIGNvbXBvbmVudCdzIGNoaWxkIGNvbXBvbmVudHMgbWF5XG4gICAgICAgIC8vIGNoYW5nZSwgc28gZGlyZWN0bHkgd2Fsa2luZyB0aGUgdHJlZSBoZXJlIG1heSBjYWxsIGFjdGl2YXRlZCBob29rc1xuICAgICAgICAvLyBvbiBpbmNvcnJlY3QgY2hpbGRyZW4uIEluc3RlYWQgd2UgcHVzaCB0aGVtIGludG8gYSBxdWV1ZSB3aGljaCB3aWxsXG4gICAgICAgIC8vIGJlIHByb2Nlc3NlZCBhZnRlciB0aGUgd2hvbGUgcGF0Y2ggcHJvY2VzcyBlbmRlZC5cbiAgICAgICAgcXVldWVBY3RpdmF0ZWRDb21wb25lbnQoY29tcG9uZW50SW5zdGFuY2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWN0aXZhdGVDaGlsZENvbXBvbmVudChjb21wb25lbnRJbnN0YW5jZSwgdHJ1ZSAvKiBkaXJlY3QgKi8pO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBkZXN0cm95OiBmdW5jdGlvbiBkZXN0cm95ICh2bm9kZSkge1xuICAgIHZhciBjb21wb25lbnRJbnN0YW5jZSA9IHZub2RlLmNvbXBvbmVudEluc3RhbmNlO1xuICAgIGlmICghY29tcG9uZW50SW5zdGFuY2UuX2lzRGVzdHJveWVkKSB7XG4gICAgICBpZiAoIXZub2RlLmRhdGEua2VlcEFsaXZlKSB7XG4gICAgICAgIGNvbXBvbmVudEluc3RhbmNlLiRkZXN0cm95KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWFjdGl2YXRlQ2hpbGRDb21wb25lbnQoY29tcG9uZW50SW5zdGFuY2UsIHRydWUgLyogZGlyZWN0ICovKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG5cbnZhciBob29rc1RvTWVyZ2UgPSBPYmplY3Qua2V5cyhjb21wb25lbnRWTm9kZUhvb2tzKTtcblxuZnVuY3Rpb24gY3JlYXRlQ29tcG9uZW50IChcbiAgQ3RvcixcbiAgZGF0YSxcbiAgY29udGV4dCxcbiAgY2hpbGRyZW4sXG4gIHRhZ1xuKSB7XG4gIGlmIChpc1VuZGVmKEN0b3IpKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICB2YXIgYmFzZUN0b3IgPSBjb250ZXh0LiRvcHRpb25zLl9iYXNlO1xuXG4gIC8vIHBsYWluIG9wdGlvbnMgb2JqZWN0OiB0dXJuIGl0IGludG8gYSBjb25zdHJ1Y3RvclxuICBpZiAoaXNPYmplY3QoQ3RvcikpIHtcbiAgICBDdG9yID0gYmFzZUN0b3IuZXh0ZW5kKEN0b3IpO1xuICB9XG5cbiAgLy8gaWYgYXQgdGhpcyBzdGFnZSBpdCdzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIGFuIGFzeW5jIGNvbXBvbmVudCBmYWN0b3J5LFxuICAvLyByZWplY3QuXG4gIGlmICh0eXBlb2YgQ3RvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHtcbiAgICAgIHdhcm4oKFwiSW52YWxpZCBDb21wb25lbnQgZGVmaW5pdGlvbjogXCIgKyAoU3RyaW5nKEN0b3IpKSksIGNvbnRleHQpO1xuICAgIH1cbiAgICByZXR1cm5cbiAgfVxuXG4gIC8vIGFzeW5jIGNvbXBvbmVudFxuICB2YXIgYXN5bmNGYWN0b3J5O1xuICBpZiAoaXNVbmRlZihDdG9yLmNpZCkpIHtcbiAgICBhc3luY0ZhY3RvcnkgPSBDdG9yO1xuICAgIEN0b3IgPSByZXNvbHZlQXN5bmNDb21wb25lbnQoYXN5bmNGYWN0b3J5LCBiYXNlQ3Rvcik7XG4gICAgaWYgKEN0b3IgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gcmV0dXJuIGEgcGxhY2Vob2xkZXIgbm9kZSBmb3IgYXN5bmMgY29tcG9uZW50LCB3aGljaCBpcyByZW5kZXJlZFxuICAgICAgLy8gYXMgYSBjb21tZW50IG5vZGUgYnV0IHByZXNlcnZlcyBhbGwgdGhlIHJhdyBpbmZvcm1hdGlvbiBmb3IgdGhlIG5vZGUuXG4gICAgICAvLyB0aGUgaW5mb3JtYXRpb24gd2lsbCBiZSB1c2VkIGZvciBhc3luYyBzZXJ2ZXItcmVuZGVyaW5nIGFuZCBoeWRyYXRpb24uXG4gICAgICByZXR1cm4gY3JlYXRlQXN5bmNQbGFjZWhvbGRlcihcbiAgICAgICAgYXN5bmNGYWN0b3J5LFxuICAgICAgICBkYXRhLFxuICAgICAgICBjb250ZXh0LFxuICAgICAgICBjaGlsZHJlbixcbiAgICAgICAgdGFnXG4gICAgICApXG4gICAgfVxuICB9XG5cbiAgZGF0YSA9IGRhdGEgfHwge307XG5cbiAgLy8gcmVzb2x2ZSBjb25zdHJ1Y3RvciBvcHRpb25zIGluIGNhc2UgZ2xvYmFsIG1peGlucyBhcmUgYXBwbGllZCBhZnRlclxuICAvLyBjb21wb25lbnQgY29uc3RydWN0b3IgY3JlYXRpb25cbiAgcmVzb2x2ZUNvbnN0cnVjdG9yT3B0aW9ucyhDdG9yKTtcblxuICAvLyB0cmFuc2Zvcm0gY29tcG9uZW50IHYtbW9kZWwgZGF0YSBpbnRvIHByb3BzICYgZXZlbnRzXG4gIGlmIChpc0RlZihkYXRhLm1vZGVsKSkge1xuICAgIHRyYW5zZm9ybU1vZGVsKEN0b3Iub3B0aW9ucywgZGF0YSk7XG4gIH1cblxuICAvLyBleHRyYWN0IHByb3BzXG4gIHZhciBwcm9wc0RhdGEgPSBleHRyYWN0UHJvcHNGcm9tVk5vZGVEYXRhKGRhdGEsIEN0b3IsIHRhZyk7XG5cbiAgLy8gZnVuY3Rpb25hbCBjb21wb25lbnRcbiAgaWYgKGlzVHJ1ZShDdG9yLm9wdGlvbnMuZnVuY3Rpb25hbCkpIHtcbiAgICByZXR1cm4gY3JlYXRlRnVuY3Rpb25hbENvbXBvbmVudChDdG9yLCBwcm9wc0RhdGEsIGRhdGEsIGNvbnRleHQsIGNoaWxkcmVuKVxuICB9XG5cbiAgLy8gZXh0cmFjdCBsaXN0ZW5lcnMsIHNpbmNlIHRoZXNlIG5lZWRzIHRvIGJlIHRyZWF0ZWQgYXNcbiAgLy8gY2hpbGQgY29tcG9uZW50IGxpc3RlbmVycyBpbnN0ZWFkIG9mIERPTSBsaXN0ZW5lcnNcbiAgdmFyIGxpc3RlbmVycyA9IGRhdGEub247XG4gIC8vIHJlcGxhY2Ugd2l0aCBsaXN0ZW5lcnMgd2l0aCAubmF0aXZlIG1vZGlmaWVyXG4gIC8vIHNvIGl0IGdldHMgcHJvY2Vzc2VkIGR1cmluZyBwYXJlbnQgY29tcG9uZW50IHBhdGNoLlxuICBkYXRhLm9uID0gZGF0YS5uYXRpdmVPbjtcblxuICBpZiAoaXNUcnVlKEN0b3Iub3B0aW9ucy5hYnN0cmFjdCkpIHtcbiAgICAvLyBhYnN0cmFjdCBjb21wb25lbnRzIGRvIG5vdCBrZWVwIGFueXRoaW5nXG4gICAgLy8gb3RoZXIgdGhhbiBwcm9wcyAmIGxpc3RlbmVycyAmIHNsb3RcblxuICAgIC8vIHdvcmsgYXJvdW5kIGZsb3dcbiAgICB2YXIgc2xvdCA9IGRhdGEuc2xvdDtcbiAgICBkYXRhID0ge307XG4gICAgaWYgKHNsb3QpIHtcbiAgICAgIGRhdGEuc2xvdCA9IHNsb3Q7XG4gICAgfVxuICB9XG5cbiAgLy8gaW5zdGFsbCBjb21wb25lbnQgbWFuYWdlbWVudCBob29rcyBvbnRvIHRoZSBwbGFjZWhvbGRlciBub2RlXG4gIGluc3RhbGxDb21wb25lbnRIb29rcyhkYXRhKTtcblxuICAvLyByZXR1cm4gYSBwbGFjZWhvbGRlciB2bm9kZVxuICB2YXIgbmFtZSA9IEN0b3Iub3B0aW9ucy5uYW1lIHx8IHRhZztcbiAgdmFyIHZub2RlID0gbmV3IFZOb2RlKFxuICAgIChcInZ1ZS1jb21wb25lbnQtXCIgKyAoQ3Rvci5jaWQpICsgKG5hbWUgPyAoXCItXCIgKyBuYW1lKSA6ICcnKSksXG4gICAgZGF0YSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgY29udGV4dCxcbiAgICB7IEN0b3I6IEN0b3IsIHByb3BzRGF0YTogcHJvcHNEYXRhLCBsaXN0ZW5lcnM6IGxpc3RlbmVycywgdGFnOiB0YWcsIGNoaWxkcmVuOiBjaGlsZHJlbiB9LFxuICAgIGFzeW5jRmFjdG9yeVxuICApO1xuXG4gIHJldHVybiB2bm9kZVxufVxuXG5mdW5jdGlvbiBjcmVhdGVDb21wb25lbnRJbnN0YW5jZUZvclZub2RlIChcbiAgdm5vZGUsIC8vIHdlIGtub3cgaXQncyBNb3VudGVkQ29tcG9uZW50Vk5vZGUgYnV0IGZsb3cgZG9lc24ndFxuICBwYXJlbnQgLy8gYWN0aXZlSW5zdGFuY2UgaW4gbGlmZWN5Y2xlIHN0YXRlXG4pIHtcbiAgdmFyIG9wdGlvbnMgPSB7XG4gICAgX2lzQ29tcG9uZW50OiB0cnVlLFxuICAgIF9wYXJlbnRWbm9kZTogdm5vZGUsXG4gICAgcGFyZW50OiBwYXJlbnRcbiAgfTtcbiAgLy8gY2hlY2sgaW5saW5lLXRlbXBsYXRlIHJlbmRlciBmdW5jdGlvbnNcbiAgdmFyIGlubGluZVRlbXBsYXRlID0gdm5vZGUuZGF0YS5pbmxpbmVUZW1wbGF0ZTtcbiAgaWYgKGlzRGVmKGlubGluZVRlbXBsYXRlKSkge1xuICAgIG9wdGlvbnMucmVuZGVyID0gaW5saW5lVGVtcGxhdGUucmVuZGVyO1xuICAgIG9wdGlvbnMuc3RhdGljUmVuZGVyRm5zID0gaW5saW5lVGVtcGxhdGUuc3RhdGljUmVuZGVyRm5zO1xuICB9XG4gIHJldHVybiBuZXcgdm5vZGUuY29tcG9uZW50T3B0aW9ucy5DdG9yKG9wdGlvbnMpXG59XG5cbmZ1bmN0aW9uIGluc3RhbGxDb21wb25lbnRIb29rcyAoZGF0YSkge1xuICB2YXIgaG9va3MgPSBkYXRhLmhvb2sgfHwgKGRhdGEuaG9vayA9IHt9KTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBob29rc1RvTWVyZ2UubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIga2V5ID0gaG9va3NUb01lcmdlW2ldO1xuICAgIHZhciBleGlzdGluZyA9IGhvb2tzW2tleV07XG4gICAgdmFyIHRvTWVyZ2UgPSBjb21wb25lbnRWTm9kZUhvb2tzW2tleV07XG4gICAgaWYgKGV4aXN0aW5nICE9PSB0b01lcmdlICYmICEoZXhpc3RpbmcgJiYgZXhpc3RpbmcuX21lcmdlZCkpIHtcbiAgICAgIGhvb2tzW2tleV0gPSBleGlzdGluZyA/IG1lcmdlSG9vayQxKHRvTWVyZ2UsIGV4aXN0aW5nKSA6IHRvTWVyZ2U7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIG1lcmdlSG9vayQxIChmMSwgZjIpIHtcbiAgdmFyIG1lcmdlZCA9IGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgLy8gZmxvdyBjb21wbGFpbnMgYWJvdXQgZXh0cmEgYXJncyB3aGljaCBpcyB3aHkgd2UgdXNlIGFueVxuICAgIGYxKGEsIGIpO1xuICAgIGYyKGEsIGIpO1xuICB9O1xuICBtZXJnZWQuX21lcmdlZCA9IHRydWU7XG4gIHJldHVybiBtZXJnZWRcbn1cblxuLy8gdHJhbnNmb3JtIGNvbXBvbmVudCB2LW1vZGVsIGluZm8gKHZhbHVlIGFuZCBjYWxsYmFjaykgaW50b1xuLy8gcHJvcCBhbmQgZXZlbnQgaGFuZGxlciByZXNwZWN0aXZlbHkuXG5mdW5jdGlvbiB0cmFuc2Zvcm1Nb2RlbCAob3B0aW9ucywgZGF0YSkge1xuICB2YXIgcHJvcCA9IChvcHRpb25zLm1vZGVsICYmIG9wdGlvbnMubW9kZWwucHJvcCkgfHwgJ3ZhbHVlJztcbiAgdmFyIGV2ZW50ID0gKG9wdGlvbnMubW9kZWwgJiYgb3B0aW9ucy5tb2RlbC5ldmVudCkgfHwgJ2lucHV0J1xuICA7KGRhdGEuYXR0cnMgfHwgKGRhdGEuYXR0cnMgPSB7fSkpW3Byb3BdID0gZGF0YS5tb2RlbC52YWx1ZTtcbiAgdmFyIG9uID0gZGF0YS5vbiB8fCAoZGF0YS5vbiA9IHt9KTtcbiAgdmFyIGV4aXN0aW5nID0gb25bZXZlbnRdO1xuICB2YXIgY2FsbGJhY2sgPSBkYXRhLm1vZGVsLmNhbGxiYWNrO1xuICBpZiAoaXNEZWYoZXhpc3RpbmcpKSB7XG4gICAgaWYgKFxuICAgICAgQXJyYXkuaXNBcnJheShleGlzdGluZylcbiAgICAgICAgPyBleGlzdGluZy5pbmRleE9mKGNhbGxiYWNrKSA9PT0gLTFcbiAgICAgICAgOiBleGlzdGluZyAhPT0gY2FsbGJhY2tcbiAgICApIHtcbiAgICAgIG9uW2V2ZW50XSA9IFtjYWxsYmFja10uY29uY2F0KGV4aXN0aW5nKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgb25bZXZlbnRdID0gY2FsbGJhY2s7XG4gIH1cbn1cblxuLyogICovXG5cbnZhciBTSU1QTEVfTk9STUFMSVpFID0gMTtcbnZhciBBTFdBWVNfTk9STUFMSVpFID0gMjtcblxuLy8gd3JhcHBlciBmdW5jdGlvbiBmb3IgcHJvdmlkaW5nIGEgbW9yZSBmbGV4aWJsZSBpbnRlcmZhY2Vcbi8vIHdpdGhvdXQgZ2V0dGluZyB5ZWxsZWQgYXQgYnkgZmxvd1xuZnVuY3Rpb24gY3JlYXRlRWxlbWVudCAoXG4gIGNvbnRleHQsXG4gIHRhZyxcbiAgZGF0YSxcbiAgY2hpbGRyZW4sXG4gIG5vcm1hbGl6YXRpb25UeXBlLFxuICBhbHdheXNOb3JtYWxpemVcbikge1xuICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSB8fCBpc1ByaW1pdGl2ZShkYXRhKSkge1xuICAgIG5vcm1hbGl6YXRpb25UeXBlID0gY2hpbGRyZW47XG4gICAgY2hpbGRyZW4gPSBkYXRhO1xuICAgIGRhdGEgPSB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKGlzVHJ1ZShhbHdheXNOb3JtYWxpemUpKSB7XG4gICAgbm9ybWFsaXphdGlvblR5cGUgPSBBTFdBWVNfTk9STUFMSVpFO1xuICB9XG4gIHJldHVybiBfY3JlYXRlRWxlbWVudChjb250ZXh0LCB0YWcsIGRhdGEsIGNoaWxkcmVuLCBub3JtYWxpemF0aW9uVHlwZSlcbn1cblxuZnVuY3Rpb24gX2NyZWF0ZUVsZW1lbnQgKFxuICBjb250ZXh0LFxuICB0YWcsXG4gIGRhdGEsXG4gIGNoaWxkcmVuLFxuICBub3JtYWxpemF0aW9uVHlwZVxuKSB7XG4gIGlmIChpc0RlZihkYXRhKSAmJiBpc0RlZigoZGF0YSkuX19vYl9fKSkge1xuICAgIHdhcm4oXG4gICAgICBcIkF2b2lkIHVzaW5nIG9ic2VydmVkIGRhdGEgb2JqZWN0IGFzIHZub2RlIGRhdGE6IFwiICsgKEpTT04uc3RyaW5naWZ5KGRhdGEpKSArIFwiXFxuXCIgK1xuICAgICAgJ0Fsd2F5cyBjcmVhdGUgZnJlc2ggdm5vZGUgZGF0YSBvYmplY3RzIGluIGVhY2ggcmVuZGVyIScsXG4gICAgICBjb250ZXh0XG4gICAgKTtcbiAgICByZXR1cm4gY3JlYXRlRW1wdHlWTm9kZSgpXG4gIH1cbiAgLy8gb2JqZWN0IHN5bnRheCBpbiB2LWJpbmRcbiAgaWYgKGlzRGVmKGRhdGEpICYmIGlzRGVmKGRhdGEuaXMpKSB7XG4gICAgdGFnID0gZGF0YS5pcztcbiAgfVxuICBpZiAoIXRhZykge1xuICAgIC8vIGluIGNhc2Ugb2YgY29tcG9uZW50IDppcyBzZXQgdG8gZmFsc3kgdmFsdWVcbiAgICByZXR1cm4gY3JlYXRlRW1wdHlWTm9kZSgpXG4gIH1cbiAgLy8gd2FybiBhZ2FpbnN0IG5vbi1wcmltaXRpdmUga2V5XG4gIGlmIChpc0RlZihkYXRhKSAmJiBpc0RlZihkYXRhLmtleSkgJiYgIWlzUHJpbWl0aXZlKGRhdGEua2V5KVxuICApIHtcbiAgICB7XG4gICAgICB3YXJuKFxuICAgICAgICAnQXZvaWQgdXNpbmcgbm9uLXByaW1pdGl2ZSB2YWx1ZSBhcyBrZXksICcgK1xuICAgICAgICAndXNlIHN0cmluZy9udW1iZXIgdmFsdWUgaW5zdGVhZC4nLFxuICAgICAgICBjb250ZXh0XG4gICAgICApO1xuICAgIH1cbiAgfVxuICAvLyBzdXBwb3J0IHNpbmdsZSBmdW5jdGlvbiBjaGlsZHJlbiBhcyBkZWZhdWx0IHNjb3BlZCBzbG90XG4gIGlmIChBcnJheS5pc0FycmF5KGNoaWxkcmVuKSAmJlxuICAgIHR5cGVvZiBjaGlsZHJlblswXSA9PT0gJ2Z1bmN0aW9uJ1xuICApIHtcbiAgICBkYXRhID0gZGF0YSB8fCB7fTtcbiAgICBkYXRhLnNjb3BlZFNsb3RzID0geyBkZWZhdWx0OiBjaGlsZHJlblswXSB9O1xuICAgIGNoaWxkcmVuLmxlbmd0aCA9IDA7XG4gIH1cbiAgaWYgKG5vcm1hbGl6YXRpb25UeXBlID09PSBBTFdBWVNfTk9STUFMSVpFKSB7XG4gICAgY2hpbGRyZW4gPSBub3JtYWxpemVDaGlsZHJlbihjaGlsZHJlbik7XG4gIH0gZWxzZSBpZiAobm9ybWFsaXphdGlvblR5cGUgPT09IFNJTVBMRV9OT1JNQUxJWkUpIHtcbiAgICBjaGlsZHJlbiA9IHNpbXBsZU5vcm1hbGl6ZUNoaWxkcmVuKGNoaWxkcmVuKTtcbiAgfVxuICB2YXIgdm5vZGUsIG5zO1xuICBpZiAodHlwZW9mIHRhZyA9PT0gJ3N0cmluZycpIHtcbiAgICB2YXIgQ3RvcjtcbiAgICBucyA9IChjb250ZXh0LiR2bm9kZSAmJiBjb250ZXh0LiR2bm9kZS5ucykgfHwgY29uZmlnLmdldFRhZ05hbWVzcGFjZSh0YWcpO1xuICAgIGlmIChjb25maWcuaXNSZXNlcnZlZFRhZyh0YWcpKSB7XG4gICAgICAvLyBwbGF0Zm9ybSBidWlsdC1pbiBlbGVtZW50c1xuICAgICAgdm5vZGUgPSBuZXcgVk5vZGUoXG4gICAgICAgIGNvbmZpZy5wYXJzZVBsYXRmb3JtVGFnTmFtZSh0YWcpLCBkYXRhLCBjaGlsZHJlbixcbiAgICAgICAgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGNvbnRleHRcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmICgoIWRhdGEgfHwgIWRhdGEucHJlKSAmJiBpc0RlZihDdG9yID0gcmVzb2x2ZUFzc2V0KGNvbnRleHQuJG9wdGlvbnMsICdjb21wb25lbnRzJywgdGFnKSkpIHtcbiAgICAgIC8vIGNvbXBvbmVudFxuICAgICAgdm5vZGUgPSBjcmVhdGVDb21wb25lbnQoQ3RvciwgZGF0YSwgY29udGV4dCwgY2hpbGRyZW4sIHRhZyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHVua25vd24gb3IgdW5saXN0ZWQgbmFtZXNwYWNlZCBlbGVtZW50c1xuICAgICAgLy8gY2hlY2sgYXQgcnVudGltZSBiZWNhdXNlIGl0IG1heSBnZXQgYXNzaWduZWQgYSBuYW1lc3BhY2Ugd2hlbiBpdHNcbiAgICAgIC8vIHBhcmVudCBub3JtYWxpemVzIGNoaWxkcmVuXG4gICAgICB2bm9kZSA9IG5ldyBWTm9kZShcbiAgICAgICAgdGFnLCBkYXRhLCBjaGlsZHJlbixcbiAgICAgICAgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGNvbnRleHRcbiAgICAgICk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIGRpcmVjdCBjb21wb25lbnQgb3B0aW9ucyAvIGNvbnN0cnVjdG9yXG4gICAgdm5vZGUgPSBjcmVhdGVDb21wb25lbnQodGFnLCBkYXRhLCBjb250ZXh0LCBjaGlsZHJlbik7XG4gIH1cbiAgaWYgKEFycmF5LmlzQXJyYXkodm5vZGUpKSB7XG4gICAgcmV0dXJuIHZub2RlXG4gIH0gZWxzZSBpZiAoaXNEZWYodm5vZGUpKSB7XG4gICAgaWYgKGlzRGVmKG5zKSkgeyBhcHBseU5TKHZub2RlLCBucyk7IH1cbiAgICBpZiAoaXNEZWYoZGF0YSkpIHsgcmVnaXN0ZXJEZWVwQmluZGluZ3MoZGF0YSk7IH1cbiAgICByZXR1cm4gdm5vZGVcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gY3JlYXRlRW1wdHlWTm9kZSgpXG4gIH1cbn1cblxuZnVuY3Rpb24gYXBwbHlOUyAodm5vZGUsIG5zLCBmb3JjZSkge1xuICB2bm9kZS5ucyA9IG5zO1xuICBpZiAodm5vZGUudGFnID09PSAnZm9yZWlnbk9iamVjdCcpIHtcbiAgICAvLyB1c2UgZGVmYXVsdCBuYW1lc3BhY2UgaW5zaWRlIGZvcmVpZ25PYmplY3RcbiAgICBucyA9IHVuZGVmaW5lZDtcbiAgICBmb3JjZSA9IHRydWU7XG4gIH1cbiAgaWYgKGlzRGVmKHZub2RlLmNoaWxkcmVuKSkge1xuICAgIGZvciAodmFyIGkgPSAwLCBsID0gdm5vZGUuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICB2YXIgY2hpbGQgPSB2bm9kZS5jaGlsZHJlbltpXTtcbiAgICAgIGlmIChpc0RlZihjaGlsZC50YWcpICYmIChcbiAgICAgICAgaXNVbmRlZihjaGlsZC5ucykgfHwgKGlzVHJ1ZShmb3JjZSkgJiYgY2hpbGQudGFnICE9PSAnc3ZnJykpKSB7XG4gICAgICAgIGFwcGx5TlMoY2hpbGQsIG5zLCBmb3JjZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8vIHJlZiAjNTMxOFxuLy8gbmVjZXNzYXJ5IHRvIGVuc3VyZSBwYXJlbnQgcmUtcmVuZGVyIHdoZW4gZGVlcCBiaW5kaW5ncyBsaWtlIDpzdHlsZSBhbmRcbi8vIDpjbGFzcyBhcmUgdXNlZCBvbiBzbG90IG5vZGVzXG5mdW5jdGlvbiByZWdpc3RlckRlZXBCaW5kaW5ncyAoZGF0YSkge1xuICBpZiAoaXNPYmplY3QoZGF0YS5zdHlsZSkpIHtcbiAgICB0cmF2ZXJzZShkYXRhLnN0eWxlKTtcbiAgfVxuICBpZiAoaXNPYmplY3QoZGF0YS5jbGFzcykpIHtcbiAgICB0cmF2ZXJzZShkYXRhLmNsYXNzKTtcbiAgfVxufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gaW5pdFJlbmRlciAodm0pIHtcbiAgdm0uX3Zub2RlID0gbnVsbDsgLy8gdGhlIHJvb3Qgb2YgdGhlIGNoaWxkIHRyZWVcbiAgdm0uX3N0YXRpY1RyZWVzID0gbnVsbDsgLy8gdi1vbmNlIGNhY2hlZCB0cmVlc1xuICB2YXIgb3B0aW9ucyA9IHZtLiRvcHRpb25zO1xuICB2YXIgcGFyZW50Vm5vZGUgPSB2bS4kdm5vZGUgPSBvcHRpb25zLl9wYXJlbnRWbm9kZTsgLy8gdGhlIHBsYWNlaG9sZGVyIG5vZGUgaW4gcGFyZW50IHRyZWVcbiAgdmFyIHJlbmRlckNvbnRleHQgPSBwYXJlbnRWbm9kZSAmJiBwYXJlbnRWbm9kZS5jb250ZXh0O1xuICB2bS4kc2xvdHMgPSByZXNvbHZlU2xvdHMob3B0aW9ucy5fcmVuZGVyQ2hpbGRyZW4sIHJlbmRlckNvbnRleHQpO1xuICB2bS4kc2NvcGVkU2xvdHMgPSBlbXB0eU9iamVjdDtcbiAgLy8gYmluZCB0aGUgY3JlYXRlRWxlbWVudCBmbiB0byB0aGlzIGluc3RhbmNlXG4gIC8vIHNvIHRoYXQgd2UgZ2V0IHByb3BlciByZW5kZXIgY29udGV4dCBpbnNpZGUgaXQuXG4gIC8vIGFyZ3Mgb3JkZXI6IHRhZywgZGF0YSwgY2hpbGRyZW4sIG5vcm1hbGl6YXRpb25UeXBlLCBhbHdheXNOb3JtYWxpemVcbiAgLy8gaW50ZXJuYWwgdmVyc2lvbiBpcyB1c2VkIGJ5IHJlbmRlciBmdW5jdGlvbnMgY29tcGlsZWQgZnJvbSB0ZW1wbGF0ZXNcbiAgdm0uX2MgPSBmdW5jdGlvbiAoYSwgYiwgYywgZCkgeyByZXR1cm4gY3JlYXRlRWxlbWVudCh2bSwgYSwgYiwgYywgZCwgZmFsc2UpOyB9O1xuICAvLyBub3JtYWxpemF0aW9uIGlzIGFsd2F5cyBhcHBsaWVkIGZvciB0aGUgcHVibGljIHZlcnNpb24sIHVzZWQgaW5cbiAgLy8gdXNlci13cml0dGVuIHJlbmRlciBmdW5jdGlvbnMuXG4gIHZtLiRjcmVhdGVFbGVtZW50ID0gZnVuY3Rpb24gKGEsIGIsIGMsIGQpIHsgcmV0dXJuIGNyZWF0ZUVsZW1lbnQodm0sIGEsIGIsIGMsIGQsIHRydWUpOyB9O1xuXG4gIC8vICRhdHRycyAmICRsaXN0ZW5lcnMgYXJlIGV4cG9zZWQgZm9yIGVhc2llciBIT0MgY3JlYXRpb24uXG4gIC8vIHRoZXkgbmVlZCB0byBiZSByZWFjdGl2ZSBzbyB0aGF0IEhPQ3MgdXNpbmcgdGhlbSBhcmUgYWx3YXlzIHVwZGF0ZWRcbiAgdmFyIHBhcmVudERhdGEgPSBwYXJlbnRWbm9kZSAmJiBwYXJlbnRWbm9kZS5kYXRhO1xuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIHtcbiAgICBkZWZpbmVSZWFjdGl2ZSQkMSh2bSwgJyRhdHRycycsIHBhcmVudERhdGEgJiYgcGFyZW50RGF0YS5hdHRycyB8fCBlbXB0eU9iamVjdCwgZnVuY3Rpb24gKCkge1xuICAgICAgIWlzVXBkYXRpbmdDaGlsZENvbXBvbmVudCAmJiB3YXJuKFwiJGF0dHJzIGlzIHJlYWRvbmx5LlwiLCB2bSk7XG4gICAgfSwgdHJ1ZSk7XG4gICAgZGVmaW5lUmVhY3RpdmUkJDEodm0sICckbGlzdGVuZXJzJywgb3B0aW9ucy5fcGFyZW50TGlzdGVuZXJzIHx8IGVtcHR5T2JqZWN0LCBmdW5jdGlvbiAoKSB7XG4gICAgICAhaXNVcGRhdGluZ0NoaWxkQ29tcG9uZW50ICYmIHdhcm4oXCIkbGlzdGVuZXJzIGlzIHJlYWRvbmx5LlwiLCB2bSk7XG4gICAgfSwgdHJ1ZSk7XG4gIH1cbn1cblxudmFyIGN1cnJlbnRSZW5kZXJpbmdJbnN0YW5jZSA9IG51bGw7XG5cbmZ1bmN0aW9uIHJlbmRlck1peGluIChWdWUpIHtcbiAgLy8gaW5zdGFsbCBydW50aW1lIGNvbnZlbmllbmNlIGhlbHBlcnNcbiAgaW5zdGFsbFJlbmRlckhlbHBlcnMoVnVlLnByb3RvdHlwZSk7XG5cbiAgVnVlLnByb3RvdHlwZS4kbmV4dFRpY2sgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICByZXR1cm4gbmV4dFRpY2soZm4sIHRoaXMpXG4gIH07XG5cbiAgVnVlLnByb3RvdHlwZS5fcmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciB2bSA9IHRoaXM7XG4gICAgdmFyIHJlZiA9IHZtLiRvcHRpb25zO1xuICAgIHZhciByZW5kZXIgPSByZWYucmVuZGVyO1xuICAgIHZhciBfcGFyZW50Vm5vZGUgPSByZWYuX3BhcmVudFZub2RlO1xuXG4gICAgaWYgKF9wYXJlbnRWbm9kZSkge1xuICAgICAgdm0uJHNjb3BlZFNsb3RzID0gbm9ybWFsaXplU2NvcGVkU2xvdHMoXG4gICAgICAgIF9wYXJlbnRWbm9kZS5kYXRhLnNjb3BlZFNsb3RzLFxuICAgICAgICB2bS4kc2xvdHMsXG4gICAgICAgIHZtLiRzY29wZWRTbG90c1xuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBzZXQgcGFyZW50IHZub2RlLiB0aGlzIGFsbG93cyByZW5kZXIgZnVuY3Rpb25zIHRvIGhhdmUgYWNjZXNzXG4gICAgLy8gdG8gdGhlIGRhdGEgb24gdGhlIHBsYWNlaG9sZGVyIG5vZGUuXG4gICAgdm0uJHZub2RlID0gX3BhcmVudFZub2RlO1xuICAgIC8vIHJlbmRlciBzZWxmXG4gICAgdmFyIHZub2RlO1xuICAgIHRyeSB7XG4gICAgICAvLyBUaGVyZSdzIG5vIG5lZWQgdG8gbWFpbnRhaW4gYSBzdGFjayBiZWNhdWVzIGFsbCByZW5kZXIgZm5zIGFyZSBjYWxsZWRcbiAgICAgIC8vIHNlcGFyYXRlbHkgZnJvbSBvbmUgYW5vdGhlci4gTmVzdGVkIGNvbXBvbmVudCdzIHJlbmRlciBmbnMgYXJlIGNhbGxlZFxuICAgICAgLy8gd2hlbiBwYXJlbnQgY29tcG9uZW50IGlzIHBhdGNoZWQuXG4gICAgICBjdXJyZW50UmVuZGVyaW5nSW5zdGFuY2UgPSB2bTtcbiAgICAgIHZub2RlID0gcmVuZGVyLmNhbGwodm0uX3JlbmRlclByb3h5LCB2bS4kY3JlYXRlRWxlbWVudCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaGFuZGxlRXJyb3IoZSwgdm0sIFwicmVuZGVyXCIpO1xuICAgICAgLy8gcmV0dXJuIGVycm9yIHJlbmRlciByZXN1bHQsXG4gICAgICAvLyBvciBwcmV2aW91cyB2bm9kZSB0byBwcmV2ZW50IHJlbmRlciBlcnJvciBjYXVzaW5nIGJsYW5rIGNvbXBvbmVudFxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgIGlmICh2bS4kb3B0aW9ucy5yZW5kZXJFcnJvcikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHZub2RlID0gdm0uJG9wdGlvbnMucmVuZGVyRXJyb3IuY2FsbCh2bS5fcmVuZGVyUHJveHksIHZtLiRjcmVhdGVFbGVtZW50LCBlKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGhhbmRsZUVycm9yKGUsIHZtLCBcInJlbmRlckVycm9yXCIpO1xuICAgICAgICAgIHZub2RlID0gdm0uX3Zub2RlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2bm9kZSA9IHZtLl92bm9kZTtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgY3VycmVudFJlbmRlcmluZ0luc3RhbmNlID0gbnVsbDtcbiAgICB9XG4gICAgLy8gaWYgdGhlIHJldHVybmVkIGFycmF5IGNvbnRhaW5zIG9ubHkgYSBzaW5nbGUgbm9kZSwgYWxsb3cgaXRcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2bm9kZSkgJiYgdm5vZGUubGVuZ3RoID09PSAxKSB7XG4gICAgICB2bm9kZSA9IHZub2RlWzBdO1xuICAgIH1cbiAgICAvLyByZXR1cm4gZW1wdHkgdm5vZGUgaW4gY2FzZSB0aGUgcmVuZGVyIGZ1bmN0aW9uIGVycm9yZWQgb3V0XG4gICAgaWYgKCEodm5vZGUgaW5zdGFuY2VvZiBWTm9kZSkpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZub2RlKSkge1xuICAgICAgICB3YXJuKFxuICAgICAgICAgICdNdWx0aXBsZSByb290IG5vZGVzIHJldHVybmVkIGZyb20gcmVuZGVyIGZ1bmN0aW9uLiBSZW5kZXIgZnVuY3Rpb24gJyArXG4gICAgICAgICAgJ3Nob3VsZCByZXR1cm4gYSBzaW5nbGUgcm9vdCBub2RlLicsXG4gICAgICAgICAgdm1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHZub2RlID0gY3JlYXRlRW1wdHlWTm9kZSgpO1xuICAgIH1cbiAgICAvLyBzZXQgcGFyZW50XG4gICAgdm5vZGUucGFyZW50ID0gX3BhcmVudFZub2RlO1xuICAgIHJldHVybiB2bm9kZVxuICB9O1xufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gZW5zdXJlQ3RvciAoY29tcCwgYmFzZSkge1xuICBpZiAoXG4gICAgY29tcC5fX2VzTW9kdWxlIHx8XG4gICAgKGhhc1N5bWJvbCAmJiBjb21wW1N5bWJvbC50b1N0cmluZ1RhZ10gPT09ICdNb2R1bGUnKVxuICApIHtcbiAgICBjb21wID0gY29tcC5kZWZhdWx0O1xuICB9XG4gIHJldHVybiBpc09iamVjdChjb21wKVxuICAgID8gYmFzZS5leHRlbmQoY29tcClcbiAgICA6IGNvbXBcbn1cblxuZnVuY3Rpb24gY3JlYXRlQXN5bmNQbGFjZWhvbGRlciAoXG4gIGZhY3RvcnksXG4gIGRhdGEsXG4gIGNvbnRleHQsXG4gIGNoaWxkcmVuLFxuICB0YWdcbikge1xuICB2YXIgbm9kZSA9IGNyZWF0ZUVtcHR5Vk5vZGUoKTtcbiAgbm9kZS5hc3luY0ZhY3RvcnkgPSBmYWN0b3J5O1xuICBub2RlLmFzeW5jTWV0YSA9IHsgZGF0YTogZGF0YSwgY29udGV4dDogY29udGV4dCwgY2hpbGRyZW46IGNoaWxkcmVuLCB0YWc6IHRhZyB9O1xuICByZXR1cm4gbm9kZVxufVxuXG5mdW5jdGlvbiByZXNvbHZlQXN5bmNDb21wb25lbnQgKFxuICBmYWN0b3J5LFxuICBiYXNlQ3RvclxuKSB7XG4gIGlmIChpc1RydWUoZmFjdG9yeS5lcnJvcikgJiYgaXNEZWYoZmFjdG9yeS5lcnJvckNvbXApKSB7XG4gICAgcmV0dXJuIGZhY3RvcnkuZXJyb3JDb21wXG4gIH1cblxuICBpZiAoaXNEZWYoZmFjdG9yeS5yZXNvbHZlZCkpIHtcbiAgICByZXR1cm4gZmFjdG9yeS5yZXNvbHZlZFxuICB9XG5cbiAgdmFyIG93bmVyID0gY3VycmVudFJlbmRlcmluZ0luc3RhbmNlO1xuICBpZiAob3duZXIgJiYgaXNEZWYoZmFjdG9yeS5vd25lcnMpICYmIGZhY3Rvcnkub3duZXJzLmluZGV4T2Yob3duZXIpID09PSAtMSkge1xuICAgIC8vIGFscmVhZHkgcGVuZGluZ1xuICAgIGZhY3Rvcnkub3duZXJzLnB1c2gob3duZXIpO1xuICB9XG5cbiAgaWYgKGlzVHJ1ZShmYWN0b3J5LmxvYWRpbmcpICYmIGlzRGVmKGZhY3RvcnkubG9hZGluZ0NvbXApKSB7XG4gICAgcmV0dXJuIGZhY3RvcnkubG9hZGluZ0NvbXBcbiAgfVxuXG4gIGlmIChvd25lciAmJiAhaXNEZWYoZmFjdG9yeS5vd25lcnMpKSB7XG4gICAgdmFyIG93bmVycyA9IGZhY3Rvcnkub3duZXJzID0gW293bmVyXTtcbiAgICB2YXIgc3luYyA9IHRydWU7XG4gICAgdmFyIHRpbWVyTG9hZGluZyA9IG51bGw7XG4gICAgdmFyIHRpbWVyVGltZW91dCA9IG51bGxcblxuICAgIDsob3duZXIpLiRvbignaG9vazpkZXN0cm95ZWQnLCBmdW5jdGlvbiAoKSB7IHJldHVybiByZW1vdmUob3duZXJzLCBvd25lcik7IH0pO1xuXG4gICAgdmFyIGZvcmNlUmVuZGVyID0gZnVuY3Rpb24gKHJlbmRlckNvbXBsZXRlZCkge1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBvd25lcnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIChvd25lcnNbaV0pLiRmb3JjZVVwZGF0ZSgpO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVuZGVyQ29tcGxldGVkKSB7XG4gICAgICAgIG93bmVycy5sZW5ndGggPSAwO1xuICAgICAgICBpZiAodGltZXJMb2FkaW5nICE9PSBudWxsKSB7XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyTG9hZGluZyk7XG4gICAgICAgICAgdGltZXJMb2FkaW5nID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGltZXJUaW1lb3V0ICE9PSBudWxsKSB7XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyVGltZW91dCk7XG4gICAgICAgICAgdGltZXJUaW1lb3V0ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICB2YXIgcmVzb2x2ZSA9IG9uY2UoZnVuY3Rpb24gKHJlcykge1xuICAgICAgLy8gY2FjaGUgcmVzb2x2ZWRcbiAgICAgIGZhY3RvcnkucmVzb2x2ZWQgPSBlbnN1cmVDdG9yKHJlcywgYmFzZUN0b3IpO1xuICAgICAgLy8gaW52b2tlIGNhbGxiYWNrcyBvbmx5IGlmIHRoaXMgaXMgbm90IGEgc3luY2hyb25vdXMgcmVzb2x2ZVxuICAgICAgLy8gKGFzeW5jIHJlc29sdmVzIGFyZSBzaGltbWVkIGFzIHN5bmNocm9ub3VzIGR1cmluZyBTU1IpXG4gICAgICBpZiAoIXN5bmMpIHtcbiAgICAgICAgZm9yY2VSZW5kZXIodHJ1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvd25lcnMubGVuZ3RoID0gMDtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHZhciByZWplY3QgPSBvbmNlKGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgIHdhcm4oXG4gICAgICAgIFwiRmFpbGVkIHRvIHJlc29sdmUgYXN5bmMgY29tcG9uZW50OiBcIiArIChTdHJpbmcoZmFjdG9yeSkpICtcbiAgICAgICAgKHJlYXNvbiA/IChcIlxcblJlYXNvbjogXCIgKyByZWFzb24pIDogJycpXG4gICAgICApO1xuICAgICAgaWYgKGlzRGVmKGZhY3RvcnkuZXJyb3JDb21wKSkge1xuICAgICAgICBmYWN0b3J5LmVycm9yID0gdHJ1ZTtcbiAgICAgICAgZm9yY2VSZW5kZXIodHJ1ZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB2YXIgcmVzID0gZmFjdG9yeShyZXNvbHZlLCByZWplY3QpO1xuXG4gICAgaWYgKGlzT2JqZWN0KHJlcykpIHtcbiAgICAgIGlmIChpc1Byb21pc2UocmVzKSkge1xuICAgICAgICAvLyAoKSA9PiBQcm9taXNlXG4gICAgICAgIGlmIChpc1VuZGVmKGZhY3RvcnkucmVzb2x2ZWQpKSB7XG4gICAgICAgICAgcmVzLnRoZW4ocmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpc1Byb21pc2UocmVzLmNvbXBvbmVudCkpIHtcbiAgICAgICAgcmVzLmNvbXBvbmVudC50aGVuKHJlc29sdmUsIHJlamVjdCk7XG5cbiAgICAgICAgaWYgKGlzRGVmKHJlcy5lcnJvcikpIHtcbiAgICAgICAgICBmYWN0b3J5LmVycm9yQ29tcCA9IGVuc3VyZUN0b3IocmVzLmVycm9yLCBiYXNlQ3Rvcik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNEZWYocmVzLmxvYWRpbmcpKSB7XG4gICAgICAgICAgZmFjdG9yeS5sb2FkaW5nQ29tcCA9IGVuc3VyZUN0b3IocmVzLmxvYWRpbmcsIGJhc2VDdG9yKTtcbiAgICAgICAgICBpZiAocmVzLmRlbGF5ID09PSAwKSB7XG4gICAgICAgICAgICBmYWN0b3J5LmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aW1lckxvYWRpbmcgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgdGltZXJMb2FkaW5nID0gbnVsbDtcbiAgICAgICAgICAgICAgaWYgKGlzVW5kZWYoZmFjdG9yeS5yZXNvbHZlZCkgJiYgaXNVbmRlZihmYWN0b3J5LmVycm9yKSkge1xuICAgICAgICAgICAgICAgIGZhY3RvcnkubG9hZGluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgZm9yY2VSZW5kZXIoZmFsc2UpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCByZXMuZGVsYXkgfHwgMjAwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNEZWYocmVzLnRpbWVvdXQpKSB7XG4gICAgICAgICAgdGltZXJUaW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB0aW1lclRpbWVvdXQgPSBudWxsO1xuICAgICAgICAgICAgaWYgKGlzVW5kZWYoZmFjdG9yeS5yZXNvbHZlZCkpIHtcbiAgICAgICAgICAgICAgcmVqZWN0KFxuICAgICAgICAgICAgICAgIFwidGltZW91dCAoXCIgKyAocmVzLnRpbWVvdXQpICsgXCJtcylcIlxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sIHJlcy50aW1lb3V0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHN5bmMgPSBmYWxzZTtcbiAgICAvLyByZXR1cm4gaW4gY2FzZSByZXNvbHZlZCBzeW5jaHJvbm91c2x5XG4gICAgcmV0dXJuIGZhY3RvcnkubG9hZGluZ1xuICAgICAgPyBmYWN0b3J5LmxvYWRpbmdDb21wXG4gICAgICA6IGZhY3RvcnkucmVzb2x2ZWRcbiAgfVxufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gaXNBc3luY1BsYWNlaG9sZGVyIChub2RlKSB7XG4gIHJldHVybiBub2RlLmlzQ29tbWVudCAmJiBub2RlLmFzeW5jRmFjdG9yeVxufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gZ2V0Rmlyc3RDb21wb25lbnRDaGlsZCAoY2hpbGRyZW4pIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGMgPSBjaGlsZHJlbltpXTtcbiAgICAgIGlmIChpc0RlZihjKSAmJiAoaXNEZWYoYy5jb21wb25lbnRPcHRpb25zKSB8fCBpc0FzeW5jUGxhY2Vob2xkZXIoYykpKSB7XG4gICAgICAgIHJldHVybiBjXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qICAqL1xuXG4vKiAgKi9cblxuZnVuY3Rpb24gaW5pdEV2ZW50cyAodm0pIHtcbiAgdm0uX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIHZtLl9oYXNIb29rRXZlbnQgPSBmYWxzZTtcbiAgLy8gaW5pdCBwYXJlbnQgYXR0YWNoZWQgZXZlbnRzXG4gIHZhciBsaXN0ZW5lcnMgPSB2bS4kb3B0aW9ucy5fcGFyZW50TGlzdGVuZXJzO1xuICBpZiAobGlzdGVuZXJzKSB7XG4gICAgdXBkYXRlQ29tcG9uZW50TGlzdGVuZXJzKHZtLCBsaXN0ZW5lcnMpO1xuICB9XG59XG5cbnZhciB0YXJnZXQ7XG5cbmZ1bmN0aW9uIGFkZCAoZXZlbnQsIGZuKSB7XG4gIHRhcmdldC4kb24oZXZlbnQsIGZuKTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlJDEgKGV2ZW50LCBmbikge1xuICB0YXJnZXQuJG9mZihldmVudCwgZm4pO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVPbmNlSGFuZGxlciAoZXZlbnQsIGZuKSB7XG4gIHZhciBfdGFyZ2V0ID0gdGFyZ2V0O1xuICByZXR1cm4gZnVuY3Rpb24gb25jZUhhbmRsZXIgKCkge1xuICAgIHZhciByZXMgPSBmbi5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgIGlmIChyZXMgIT09IG51bGwpIHtcbiAgICAgIF90YXJnZXQuJG9mZihldmVudCwgb25jZUhhbmRsZXIpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB1cGRhdGVDb21wb25lbnRMaXN0ZW5lcnMgKFxuICB2bSxcbiAgbGlzdGVuZXJzLFxuICBvbGRMaXN0ZW5lcnNcbikge1xuICB0YXJnZXQgPSB2bTtcbiAgdXBkYXRlTGlzdGVuZXJzKGxpc3RlbmVycywgb2xkTGlzdGVuZXJzIHx8IHt9LCBhZGQsIHJlbW92ZSQxLCBjcmVhdGVPbmNlSGFuZGxlciwgdm0pO1xuICB0YXJnZXQgPSB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGV2ZW50c01peGluIChWdWUpIHtcbiAgdmFyIGhvb2tSRSA9IC9eaG9vazovO1xuICBWdWUucHJvdG90eXBlLiRvbiA9IGZ1bmN0aW9uIChldmVudCwgZm4pIHtcbiAgICB2YXIgdm0gPSB0aGlzO1xuICAgIGlmIChBcnJheS5pc0FycmF5KGV2ZW50KSkge1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBldmVudC5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgdm0uJG9uKGV2ZW50W2ldLCBmbik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICh2bS5fZXZlbnRzW2V2ZW50XSB8fCAodm0uX2V2ZW50c1tldmVudF0gPSBbXSkpLnB1c2goZm4pO1xuICAgICAgLy8gb3B0aW1pemUgaG9vazpldmVudCBjb3N0IGJ5IHVzaW5nIGEgYm9vbGVhbiBmbGFnIG1hcmtlZCBhdCByZWdpc3RyYXRpb25cbiAgICAgIC8vIGluc3RlYWQgb2YgYSBoYXNoIGxvb2t1cFxuICAgICAgaWYgKGhvb2tSRS50ZXN0KGV2ZW50KSkge1xuICAgICAgICB2bS5faGFzSG9va0V2ZW50ID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHZtXG4gIH07XG5cbiAgVnVlLnByb3RvdHlwZS4kb25jZSA9IGZ1bmN0aW9uIChldmVudCwgZm4pIHtcbiAgICB2YXIgdm0gPSB0aGlzO1xuICAgIGZ1bmN0aW9uIG9uICgpIHtcbiAgICAgIHZtLiRvZmYoZXZlbnQsIG9uKTtcbiAgICAgIGZuLmFwcGx5KHZtLCBhcmd1bWVudHMpO1xuICAgIH1cbiAgICBvbi5mbiA9IGZuO1xuICAgIHZtLiRvbihldmVudCwgb24pO1xuICAgIHJldHVybiB2bVxuICB9O1xuXG4gIFZ1ZS5wcm90b3R5cGUuJG9mZiA9IGZ1bmN0aW9uIChldmVudCwgZm4pIHtcbiAgICB2YXIgdm0gPSB0aGlzO1xuICAgIC8vIGFsbFxuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgdm0uX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICByZXR1cm4gdm1cbiAgICB9XG4gICAgLy8gYXJyYXkgb2YgZXZlbnRzXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZXZlbnQpKSB7XG4gICAgICBmb3IgKHZhciBpJDEgPSAwLCBsID0gZXZlbnQubGVuZ3RoOyBpJDEgPCBsOyBpJDErKykge1xuICAgICAgICB2bS4kb2ZmKGV2ZW50W2kkMV0sIGZuKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2bVxuICAgIH1cbiAgICAvLyBzcGVjaWZpYyBldmVudFxuICAgIHZhciBjYnMgPSB2bS5fZXZlbnRzW2V2ZW50XTtcbiAgICBpZiAoIWNicykge1xuICAgICAgcmV0dXJuIHZtXG4gICAgfVxuICAgIGlmICghZm4pIHtcbiAgICAgIHZtLl9ldmVudHNbZXZlbnRdID0gbnVsbDtcbiAgICAgIHJldHVybiB2bVxuICAgIH1cbiAgICAvLyBzcGVjaWZpYyBoYW5kbGVyXG4gICAgdmFyIGNiO1xuICAgIHZhciBpID0gY2JzLmxlbmd0aDtcbiAgICB3aGlsZSAoaS0tKSB7XG4gICAgICBjYiA9IGNic1tpXTtcbiAgICAgIGlmIChjYiA9PT0gZm4gfHwgY2IuZm4gPT09IGZuKSB7XG4gICAgICAgIGNicy5zcGxpY2UoaSwgMSk7XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2bVxuICB9O1xuXG4gIFZ1ZS5wcm90b3R5cGUuJGVtaXQgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICB2YXIgdm0gPSB0aGlzO1xuICAgIHtcbiAgICAgIHZhciBsb3dlckNhc2VFdmVudCA9IGV2ZW50LnRvTG93ZXJDYXNlKCk7XG4gICAgICBpZiAobG93ZXJDYXNlRXZlbnQgIT09IGV2ZW50ICYmIHZtLl9ldmVudHNbbG93ZXJDYXNlRXZlbnRdKSB7XG4gICAgICAgIHRpcChcbiAgICAgICAgICBcIkV2ZW50IFxcXCJcIiArIGxvd2VyQ2FzZUV2ZW50ICsgXCJcXFwiIGlzIGVtaXR0ZWQgaW4gY29tcG9uZW50IFwiICtcbiAgICAgICAgICAoZm9ybWF0Q29tcG9uZW50TmFtZSh2bSkpICsgXCIgYnV0IHRoZSBoYW5kbGVyIGlzIHJlZ2lzdGVyZWQgZm9yIFxcXCJcIiArIGV2ZW50ICsgXCJcXFwiLiBcIiArXG4gICAgICAgICAgXCJOb3RlIHRoYXQgSFRNTCBhdHRyaWJ1dGVzIGFyZSBjYXNlLWluc2Vuc2l0aXZlIGFuZCB5b3UgY2Fubm90IHVzZSBcIiArXG4gICAgICAgICAgXCJ2LW9uIHRvIGxpc3RlbiB0byBjYW1lbENhc2UgZXZlbnRzIHdoZW4gdXNpbmcgaW4tRE9NIHRlbXBsYXRlcy4gXCIgK1xuICAgICAgICAgIFwiWW91IHNob3VsZCBwcm9iYWJseSB1c2UgXFxcIlwiICsgKGh5cGhlbmF0ZShldmVudCkpICsgXCJcXFwiIGluc3RlYWQgb2YgXFxcIlwiICsgZXZlbnQgKyBcIlxcXCIuXCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdmFyIGNicyA9IHZtLl9ldmVudHNbZXZlbnRdO1xuICAgIGlmIChjYnMpIHtcbiAgICAgIGNicyA9IGNicy5sZW5ndGggPiAxID8gdG9BcnJheShjYnMpIDogY2JzO1xuICAgICAgdmFyIGFyZ3MgPSB0b0FycmF5KGFyZ3VtZW50cywgMSk7XG4gICAgICB2YXIgaW5mbyA9IFwiZXZlbnQgaGFuZGxlciBmb3IgXFxcIlwiICsgZXZlbnQgKyBcIlxcXCJcIjtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gY2JzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICBpbnZva2VXaXRoRXJyb3JIYW5kbGluZyhjYnNbaV0sIHZtLCBhcmdzLCB2bSwgaW5mbyk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2bVxuICB9O1xufVxuXG4vKiAgKi9cblxudmFyIGFjdGl2ZUluc3RhbmNlID0gbnVsbDtcbnZhciBpc1VwZGF0aW5nQ2hpbGRDb21wb25lbnQgPSBmYWxzZTtcblxuZnVuY3Rpb24gc2V0QWN0aXZlSW5zdGFuY2Uodm0pIHtcbiAgdmFyIHByZXZBY3RpdmVJbnN0YW5jZSA9IGFjdGl2ZUluc3RhbmNlO1xuICBhY3RpdmVJbnN0YW5jZSA9IHZtO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIGFjdGl2ZUluc3RhbmNlID0gcHJldkFjdGl2ZUluc3RhbmNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGluaXRMaWZlY3ljbGUgKHZtKSB7XG4gIHZhciBvcHRpb25zID0gdm0uJG9wdGlvbnM7XG5cbiAgLy8gbG9jYXRlIGZpcnN0IG5vbi1hYnN0cmFjdCBwYXJlbnRcbiAgdmFyIHBhcmVudCA9IG9wdGlvbnMucGFyZW50O1xuICBpZiAocGFyZW50ICYmICFvcHRpb25zLmFic3RyYWN0KSB7XG4gICAgd2hpbGUgKHBhcmVudC4kb3B0aW9ucy5hYnN0cmFjdCAmJiBwYXJlbnQuJHBhcmVudCkge1xuICAgICAgcGFyZW50ID0gcGFyZW50LiRwYXJlbnQ7XG4gICAgfVxuICAgIHBhcmVudC4kY2hpbGRyZW4ucHVzaCh2bSk7XG4gIH1cblxuICB2bS4kcGFyZW50ID0gcGFyZW50O1xuICB2bS4kcm9vdCA9IHBhcmVudCA/IHBhcmVudC4kcm9vdCA6IHZtO1xuXG4gIHZtLiRjaGlsZHJlbiA9IFtdO1xuICB2bS4kcmVmcyA9IHt9O1xuXG4gIHZtLl93YXRjaGVyID0gbnVsbDtcbiAgdm0uX2luYWN0aXZlID0gbnVsbDtcbiAgdm0uX2RpcmVjdEluYWN0aXZlID0gZmFsc2U7XG4gIHZtLl9pc01vdW50ZWQgPSBmYWxzZTtcbiAgdm0uX2lzRGVzdHJveWVkID0gZmFsc2U7XG4gIHZtLl9pc0JlaW5nRGVzdHJveWVkID0gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGxpZmVjeWNsZU1peGluIChWdWUpIHtcbiAgVnVlLnByb3RvdHlwZS5fdXBkYXRlID0gZnVuY3Rpb24gKHZub2RlLCBoeWRyYXRpbmcpIHtcbiAgICB2YXIgdm0gPSB0aGlzO1xuICAgIHZhciBwcmV2RWwgPSB2bS4kZWw7XG4gICAgdmFyIHByZXZWbm9kZSA9IHZtLl92bm9kZTtcbiAgICB2YXIgcmVzdG9yZUFjdGl2ZUluc3RhbmNlID0gc2V0QWN0aXZlSW5zdGFuY2Uodm0pO1xuICAgIHZtLl92bm9kZSA9IHZub2RlO1xuICAgIC8vIFZ1ZS5wcm90b3R5cGUuX19wYXRjaF9fIGlzIGluamVjdGVkIGluIGVudHJ5IHBvaW50c1xuICAgIC8vIGJhc2VkIG9uIHRoZSByZW5kZXJpbmcgYmFja2VuZCB1c2VkLlxuICAgIGlmICghcHJldlZub2RlKSB7XG4gICAgICAvLyBpbml0aWFsIHJlbmRlclxuICAgICAgdm0uJGVsID0gdm0uX19wYXRjaF9fKHZtLiRlbCwgdm5vZGUsIGh5ZHJhdGluZywgZmFsc2UgLyogcmVtb3ZlT25seSAqLyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHVwZGF0ZXNcbiAgICAgIHZtLiRlbCA9IHZtLl9fcGF0Y2hfXyhwcmV2Vm5vZGUsIHZub2RlKTtcbiAgICB9XG4gICAgcmVzdG9yZUFjdGl2ZUluc3RhbmNlKCk7XG4gICAgLy8gdXBkYXRlIF9fdnVlX18gcmVmZXJlbmNlXG4gICAgaWYgKHByZXZFbCkge1xuICAgICAgcHJldkVsLl9fdnVlX18gPSBudWxsO1xuICAgIH1cbiAgICBpZiAodm0uJGVsKSB7XG4gICAgICB2bS4kZWwuX192dWVfXyA9IHZtO1xuICAgIH1cbiAgICAvLyBpZiBwYXJlbnQgaXMgYW4gSE9DLCB1cGRhdGUgaXRzICRlbCBhcyB3ZWxsXG4gICAgaWYgKHZtLiR2bm9kZSAmJiB2bS4kcGFyZW50ICYmIHZtLiR2bm9kZSA9PT0gdm0uJHBhcmVudC5fdm5vZGUpIHtcbiAgICAgIHZtLiRwYXJlbnQuJGVsID0gdm0uJGVsO1xuICAgIH1cbiAgICAvLyB1cGRhdGVkIGhvb2sgaXMgY2FsbGVkIGJ5IHRoZSBzY2hlZHVsZXIgdG8gZW5zdXJlIHRoYXQgY2hpbGRyZW4gYXJlXG4gICAgLy8gdXBkYXRlZCBpbiBhIHBhcmVudCdzIHVwZGF0ZWQgaG9vay5cbiAgfTtcblxuICBWdWUucHJvdG90eXBlLiRmb3JjZVVwZGF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdm0gPSB0aGlzO1xuICAgIGlmICh2bS5fd2F0Y2hlcikge1xuICAgICAgdm0uX3dhdGNoZXIudXBkYXRlKCk7XG4gICAgfVxuICB9O1xuXG4gIFZ1ZS5wcm90b3R5cGUuJGRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHZtID0gdGhpcztcbiAgICBpZiAodm0uX2lzQmVpbmdEZXN0cm95ZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBjYWxsSG9vayh2bSwgJ2JlZm9yZURlc3Ryb3knKTtcbiAgICB2bS5faXNCZWluZ0Rlc3Ryb3llZCA9IHRydWU7XG4gICAgLy8gcmVtb3ZlIHNlbGYgZnJvbSBwYXJlbnRcbiAgICB2YXIgcGFyZW50ID0gdm0uJHBhcmVudDtcbiAgICBpZiAocGFyZW50ICYmICFwYXJlbnQuX2lzQmVpbmdEZXN0cm95ZWQgJiYgIXZtLiRvcHRpb25zLmFic3RyYWN0KSB7XG4gICAgICByZW1vdmUocGFyZW50LiRjaGlsZHJlbiwgdm0pO1xuICAgIH1cbiAgICAvLyB0ZWFyZG93biB3YXRjaGVyc1xuICAgIGlmICh2bS5fd2F0Y2hlcikge1xuICAgICAgdm0uX3dhdGNoZXIudGVhcmRvd24oKTtcbiAgICB9XG4gICAgdmFyIGkgPSB2bS5fd2F0Y2hlcnMubGVuZ3RoO1xuICAgIHdoaWxlIChpLS0pIHtcbiAgICAgIHZtLl93YXRjaGVyc1tpXS50ZWFyZG93bigpO1xuICAgIH1cbiAgICAvLyByZW1vdmUgcmVmZXJlbmNlIGZyb20gZGF0YSBvYlxuICAgIC8vIGZyb3plbiBvYmplY3QgbWF5IG5vdCBoYXZlIG9ic2VydmVyLlxuICAgIGlmICh2bS5fZGF0YS5fX29iX18pIHtcbiAgICAgIHZtLl9kYXRhLl9fb2JfXy52bUNvdW50LS07XG4gICAgfVxuICAgIC8vIGNhbGwgdGhlIGxhc3QgaG9vay4uLlxuICAgIHZtLl9pc0Rlc3Ryb3llZCA9IHRydWU7XG4gICAgLy8gaW52b2tlIGRlc3Ryb3kgaG9va3Mgb24gY3VycmVudCByZW5kZXJlZCB0cmVlXG4gICAgdm0uX19wYXRjaF9fKHZtLl92bm9kZSwgbnVsbCk7XG4gICAgLy8gZmlyZSBkZXN0cm95ZWQgaG9va1xuICAgIGNhbGxIb29rKHZtLCAnZGVzdHJveWVkJyk7XG4gICAgLy8gdHVybiBvZmYgYWxsIGluc3RhbmNlIGxpc3RlbmVycy5cbiAgICB2bS4kb2ZmKCk7XG4gICAgLy8gcmVtb3ZlIF9fdnVlX18gcmVmZXJlbmNlXG4gICAgaWYgKHZtLiRlbCkge1xuICAgICAgdm0uJGVsLl9fdnVlX18gPSBudWxsO1xuICAgIH1cbiAgICAvLyByZWxlYXNlIGNpcmN1bGFyIHJlZmVyZW5jZSAoIzY3NTkpXG4gICAgaWYgKHZtLiR2bm9kZSkge1xuICAgICAgdm0uJHZub2RlLnBhcmVudCA9IG51bGw7XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBtb3VudENvbXBvbmVudCAoXG4gIHZtLFxuICBlbCxcbiAgaHlkcmF0aW5nXG4pIHtcbiAgdm0uJGVsID0gZWw7XG4gIGlmICghdm0uJG9wdGlvbnMucmVuZGVyKSB7XG4gICAgdm0uJG9wdGlvbnMucmVuZGVyID0gY3JlYXRlRW1wdHlWTm9kZTtcbiAgICB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgIGlmICgodm0uJG9wdGlvbnMudGVtcGxhdGUgJiYgdm0uJG9wdGlvbnMudGVtcGxhdGUuY2hhckF0KDApICE9PSAnIycpIHx8XG4gICAgICAgIHZtLiRvcHRpb25zLmVsIHx8IGVsKSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgJ1lvdSBhcmUgdXNpbmcgdGhlIHJ1bnRpbWUtb25seSBidWlsZCBvZiBWdWUgd2hlcmUgdGhlIHRlbXBsYXRlICcgK1xuICAgICAgICAgICdjb21waWxlciBpcyBub3QgYXZhaWxhYmxlLiBFaXRoZXIgcHJlLWNvbXBpbGUgdGhlIHRlbXBsYXRlcyBpbnRvICcgK1xuICAgICAgICAgICdyZW5kZXIgZnVuY3Rpb25zLCBvciB1c2UgdGhlIGNvbXBpbGVyLWluY2x1ZGVkIGJ1aWxkLicsXG4gICAgICAgICAgdm1cbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgJ0ZhaWxlZCB0byBtb3VudCBjb21wb25lbnQ6IHRlbXBsYXRlIG9yIHJlbmRlciBmdW5jdGlvbiBub3QgZGVmaW5lZC4nLFxuICAgICAgICAgIHZtXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGNhbGxIb29rKHZtLCAnYmVmb3JlTW91bnQnKTtcblxuICB2YXIgdXBkYXRlQ29tcG9uZW50O1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKGNvbmZpZy5wZXJmb3JtYW5jZSAmJiBtYXJrKSB7XG4gICAgdXBkYXRlQ29tcG9uZW50ID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIG5hbWUgPSB2bS5fbmFtZTtcbiAgICAgIHZhciBpZCA9IHZtLl91aWQ7XG4gICAgICB2YXIgc3RhcnRUYWcgPSBcInZ1ZS1wZXJmLXN0YXJ0OlwiICsgaWQ7XG4gICAgICB2YXIgZW5kVGFnID0gXCJ2dWUtcGVyZi1lbmQ6XCIgKyBpZDtcblxuICAgICAgbWFyayhzdGFydFRhZyk7XG4gICAgICB2YXIgdm5vZGUgPSB2bS5fcmVuZGVyKCk7XG4gICAgICBtYXJrKGVuZFRhZyk7XG4gICAgICBtZWFzdXJlKChcInZ1ZSBcIiArIG5hbWUgKyBcIiByZW5kZXJcIiksIHN0YXJ0VGFnLCBlbmRUYWcpO1xuXG4gICAgICBtYXJrKHN0YXJ0VGFnKTtcbiAgICAgIHZtLl91cGRhdGUodm5vZGUsIGh5ZHJhdGluZyk7XG4gICAgICBtYXJrKGVuZFRhZyk7XG4gICAgICBtZWFzdXJlKChcInZ1ZSBcIiArIG5hbWUgKyBcIiBwYXRjaFwiKSwgc3RhcnRUYWcsIGVuZFRhZyk7XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICB1cGRhdGVDb21wb25lbnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2bS5fdXBkYXRlKHZtLl9yZW5kZXIoKSwgaHlkcmF0aW5nKTtcbiAgICB9O1xuICB9XG5cbiAgLy8gd2Ugc2V0IHRoaXMgdG8gdm0uX3dhdGNoZXIgaW5zaWRlIHRoZSB3YXRjaGVyJ3MgY29uc3RydWN0b3JcbiAgLy8gc2luY2UgdGhlIHdhdGNoZXIncyBpbml0aWFsIHBhdGNoIG1heSBjYWxsICRmb3JjZVVwZGF0ZSAoZS5nLiBpbnNpZGUgY2hpbGRcbiAgLy8gY29tcG9uZW50J3MgbW91bnRlZCBob29rKSwgd2hpY2ggcmVsaWVzIG9uIHZtLl93YXRjaGVyIGJlaW5nIGFscmVhZHkgZGVmaW5lZFxuICBuZXcgV2F0Y2hlcih2bSwgdXBkYXRlQ29tcG9uZW50LCBub29wLCB7XG4gICAgYmVmb3JlOiBmdW5jdGlvbiBiZWZvcmUgKCkge1xuICAgICAgaWYgKHZtLl9pc01vdW50ZWQgJiYgIXZtLl9pc0Rlc3Ryb3llZCkge1xuICAgICAgICBjYWxsSG9vayh2bSwgJ2JlZm9yZVVwZGF0ZScpO1xuICAgICAgfVxuICAgIH1cbiAgfSwgdHJ1ZSAvKiBpc1JlbmRlcldhdGNoZXIgKi8pO1xuICBoeWRyYXRpbmcgPSBmYWxzZTtcblxuICAvLyBtYW51YWxseSBtb3VudGVkIGluc3RhbmNlLCBjYWxsIG1vdW50ZWQgb24gc2VsZlxuICAvLyBtb3VudGVkIGlzIGNhbGxlZCBmb3IgcmVuZGVyLWNyZWF0ZWQgY2hpbGQgY29tcG9uZW50cyBpbiBpdHMgaW5zZXJ0ZWQgaG9va1xuICBpZiAodm0uJHZub2RlID09IG51bGwpIHtcbiAgICB2bS5faXNNb3VudGVkID0gdHJ1ZTtcbiAgICBjYWxsSG9vayh2bSwgJ21vdW50ZWQnKTtcbiAgfVxuICByZXR1cm4gdm1cbn1cblxuZnVuY3Rpb24gdXBkYXRlQ2hpbGRDb21wb25lbnQgKFxuICB2bSxcbiAgcHJvcHNEYXRhLFxuICBsaXN0ZW5lcnMsXG4gIHBhcmVudFZub2RlLFxuICByZW5kZXJDaGlsZHJlblxuKSB7XG4gIHtcbiAgICBpc1VwZGF0aW5nQ2hpbGRDb21wb25lbnQgPSB0cnVlO1xuICB9XG5cbiAgLy8gZGV0ZXJtaW5lIHdoZXRoZXIgY29tcG9uZW50IGhhcyBzbG90IGNoaWxkcmVuXG4gIC8vIHdlIG5lZWQgdG8gZG8gdGhpcyBiZWZvcmUgb3ZlcndyaXRpbmcgJG9wdGlvbnMuX3JlbmRlckNoaWxkcmVuLlxuXG4gIC8vIGNoZWNrIGlmIHRoZXJlIGFyZSBkeW5hbWljIHNjb3BlZFNsb3RzIChoYW5kLXdyaXR0ZW4gb3IgY29tcGlsZWQgYnV0IHdpdGhcbiAgLy8gZHluYW1pYyBzbG90IG5hbWVzKS4gU3RhdGljIHNjb3BlZCBzbG90cyBjb21waWxlZCBmcm9tIHRlbXBsYXRlIGhhcyB0aGVcbiAgLy8gXCIkc3RhYmxlXCIgbWFya2VyLlxuICB2YXIgbmV3U2NvcGVkU2xvdHMgPSBwYXJlbnRWbm9kZS5kYXRhLnNjb3BlZFNsb3RzO1xuICB2YXIgb2xkU2NvcGVkU2xvdHMgPSB2bS4kc2NvcGVkU2xvdHM7XG4gIHZhciBoYXNEeW5hbWljU2NvcGVkU2xvdCA9ICEhKFxuICAgIChuZXdTY29wZWRTbG90cyAmJiAhbmV3U2NvcGVkU2xvdHMuJHN0YWJsZSkgfHxcbiAgICAob2xkU2NvcGVkU2xvdHMgIT09IGVtcHR5T2JqZWN0ICYmICFvbGRTY29wZWRTbG90cy4kc3RhYmxlKSB8fFxuICAgIChuZXdTY29wZWRTbG90cyAmJiB2bS4kc2NvcGVkU2xvdHMuJGtleSAhPT0gbmV3U2NvcGVkU2xvdHMuJGtleSlcbiAgKTtcblxuICAvLyBBbnkgc3RhdGljIHNsb3QgY2hpbGRyZW4gZnJvbSB0aGUgcGFyZW50IG1heSBoYXZlIGNoYW5nZWQgZHVyaW5nIHBhcmVudCdzXG4gIC8vIHVwZGF0ZS4gRHluYW1pYyBzY29wZWQgc2xvdHMgbWF5IGFsc28gaGF2ZSBjaGFuZ2VkLiBJbiBzdWNoIGNhc2VzLCBhIGZvcmNlZFxuICAvLyB1cGRhdGUgaXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSBjb3JyZWN0bmVzcy5cbiAgdmFyIG5lZWRzRm9yY2VVcGRhdGUgPSAhIShcbiAgICByZW5kZXJDaGlsZHJlbiB8fCAgICAgICAgICAgICAgIC8vIGhhcyBuZXcgc3RhdGljIHNsb3RzXG4gICAgdm0uJG9wdGlvbnMuX3JlbmRlckNoaWxkcmVuIHx8ICAvLyBoYXMgb2xkIHN0YXRpYyBzbG90c1xuICAgIGhhc0R5bmFtaWNTY29wZWRTbG90XG4gICk7XG5cbiAgdm0uJG9wdGlvbnMuX3BhcmVudFZub2RlID0gcGFyZW50Vm5vZGU7XG4gIHZtLiR2bm9kZSA9IHBhcmVudFZub2RlOyAvLyB1cGRhdGUgdm0ncyBwbGFjZWhvbGRlciBub2RlIHdpdGhvdXQgcmUtcmVuZGVyXG5cbiAgaWYgKHZtLl92bm9kZSkgeyAvLyB1cGRhdGUgY2hpbGQgdHJlZSdzIHBhcmVudFxuICAgIHZtLl92bm9kZS5wYXJlbnQgPSBwYXJlbnRWbm9kZTtcbiAgfVxuICB2bS4kb3B0aW9ucy5fcmVuZGVyQ2hpbGRyZW4gPSByZW5kZXJDaGlsZHJlbjtcblxuICAvLyB1cGRhdGUgJGF0dHJzIGFuZCAkbGlzdGVuZXJzIGhhc2hcbiAgLy8gdGhlc2UgYXJlIGFsc28gcmVhY3RpdmUgc28gdGhleSBtYXkgdHJpZ2dlciBjaGlsZCB1cGRhdGUgaWYgdGhlIGNoaWxkXG4gIC8vIHVzZWQgdGhlbSBkdXJpbmcgcmVuZGVyXG4gIHZtLiRhdHRycyA9IHBhcmVudFZub2RlLmRhdGEuYXR0cnMgfHwgZW1wdHlPYmplY3Q7XG4gIHZtLiRsaXN0ZW5lcnMgPSBsaXN0ZW5lcnMgfHwgZW1wdHlPYmplY3Q7XG5cbiAgLy8gdXBkYXRlIHByb3BzXG4gIGlmIChwcm9wc0RhdGEgJiYgdm0uJG9wdGlvbnMucHJvcHMpIHtcbiAgICB0b2dnbGVPYnNlcnZpbmcoZmFsc2UpO1xuICAgIHZhciBwcm9wcyA9IHZtLl9wcm9wcztcbiAgICB2YXIgcHJvcEtleXMgPSB2bS4kb3B0aW9ucy5fcHJvcEtleXMgfHwgW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wS2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGtleSA9IHByb3BLZXlzW2ldO1xuICAgICAgdmFyIHByb3BPcHRpb25zID0gdm0uJG9wdGlvbnMucHJvcHM7IC8vIHd0ZiBmbG93P1xuICAgICAgcHJvcHNba2V5XSA9IHZhbGlkYXRlUHJvcChrZXksIHByb3BPcHRpb25zLCBwcm9wc0RhdGEsIHZtKTtcbiAgICB9XG4gICAgdG9nZ2xlT2JzZXJ2aW5nKHRydWUpO1xuICAgIC8vIGtlZXAgYSBjb3B5IG9mIHJhdyBwcm9wc0RhdGFcbiAgICB2bS4kb3B0aW9ucy5wcm9wc0RhdGEgPSBwcm9wc0RhdGE7XG4gIH1cblxuICAvLyB1cGRhdGUgbGlzdGVuZXJzXG4gIGxpc3RlbmVycyA9IGxpc3RlbmVycyB8fCBlbXB0eU9iamVjdDtcbiAgdmFyIG9sZExpc3RlbmVycyA9IHZtLiRvcHRpb25zLl9wYXJlbnRMaXN0ZW5lcnM7XG4gIHZtLiRvcHRpb25zLl9wYXJlbnRMaXN0ZW5lcnMgPSBsaXN0ZW5lcnM7XG4gIHVwZGF0ZUNvbXBvbmVudExpc3RlbmVycyh2bSwgbGlzdGVuZXJzLCBvbGRMaXN0ZW5lcnMpO1xuXG4gIC8vIHJlc29sdmUgc2xvdHMgKyBmb3JjZSB1cGRhdGUgaWYgaGFzIGNoaWxkcmVuXG4gIGlmIChuZWVkc0ZvcmNlVXBkYXRlKSB7XG4gICAgdm0uJHNsb3RzID0gcmVzb2x2ZVNsb3RzKHJlbmRlckNoaWxkcmVuLCBwYXJlbnRWbm9kZS5jb250ZXh0KTtcbiAgICB2bS4kZm9yY2VVcGRhdGUoKTtcbiAgfVxuXG4gIHtcbiAgICBpc1VwZGF0aW5nQ2hpbGRDb21wb25lbnQgPSBmYWxzZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc0luSW5hY3RpdmVUcmVlICh2bSkge1xuICB3aGlsZSAodm0gJiYgKHZtID0gdm0uJHBhcmVudCkpIHtcbiAgICBpZiAodm0uX2luYWN0aXZlKSB7IHJldHVybiB0cnVlIH1cbiAgfVxuICByZXR1cm4gZmFsc2Vcbn1cblxuZnVuY3Rpb24gYWN0aXZhdGVDaGlsZENvbXBvbmVudCAodm0sIGRpcmVjdCkge1xuICBpZiAoZGlyZWN0KSB7XG4gICAgdm0uX2RpcmVjdEluYWN0aXZlID0gZmFsc2U7XG4gICAgaWYgKGlzSW5JbmFjdGl2ZVRyZWUodm0pKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gIH0gZWxzZSBpZiAodm0uX2RpcmVjdEluYWN0aXZlKSB7XG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKHZtLl9pbmFjdGl2ZSB8fCB2bS5faW5hY3RpdmUgPT09IG51bGwpIHtcbiAgICB2bS5faW5hY3RpdmUgPSBmYWxzZTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZtLiRjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgYWN0aXZhdGVDaGlsZENvbXBvbmVudCh2bS4kY2hpbGRyZW5baV0pO1xuICAgIH1cbiAgICBjYWxsSG9vayh2bSwgJ2FjdGl2YXRlZCcpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGRlYWN0aXZhdGVDaGlsZENvbXBvbmVudCAodm0sIGRpcmVjdCkge1xuICBpZiAoZGlyZWN0KSB7XG4gICAgdm0uX2RpcmVjdEluYWN0aXZlID0gdHJ1ZTtcbiAgICBpZiAoaXNJbkluYWN0aXZlVHJlZSh2bSkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgfVxuICBpZiAoIXZtLl9pbmFjdGl2ZSkge1xuICAgIHZtLl9pbmFjdGl2ZSA9IHRydWU7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2bS4kY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIGRlYWN0aXZhdGVDaGlsZENvbXBvbmVudCh2bS4kY2hpbGRyZW5baV0pO1xuICAgIH1cbiAgICBjYWxsSG9vayh2bSwgJ2RlYWN0aXZhdGVkJyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY2FsbEhvb2sgKHZtLCBob29rKSB7XG4gIC8vICM3NTczIGRpc2FibGUgZGVwIGNvbGxlY3Rpb24gd2hlbiBpbnZva2luZyBsaWZlY3ljbGUgaG9va3NcbiAgcHVzaFRhcmdldCgpO1xuICB2YXIgaGFuZGxlcnMgPSB2bS4kb3B0aW9uc1tob29rXTtcbiAgdmFyIGluZm8gPSBob29rICsgXCIgaG9va1wiO1xuICBpZiAoaGFuZGxlcnMpIHtcbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IGhhbmRsZXJzLmxlbmd0aDsgaSA8IGo7IGkrKykge1xuICAgICAgaW52b2tlV2l0aEVycm9ySGFuZGxpbmcoaGFuZGxlcnNbaV0sIHZtLCBudWxsLCB2bSwgaW5mbyk7XG4gICAgfVxuICB9XG4gIGlmICh2bS5faGFzSG9va0V2ZW50KSB7XG4gICAgdm0uJGVtaXQoJ2hvb2s6JyArIGhvb2spO1xuICB9XG4gIHBvcFRhcmdldCgpO1xufVxuXG4vKiAgKi9cblxudmFyIE1BWF9VUERBVEVfQ09VTlQgPSAxMDA7XG5cbnZhciBxdWV1ZSA9IFtdO1xudmFyIGFjdGl2YXRlZENoaWxkcmVuID0gW107XG52YXIgaGFzID0ge307XG52YXIgY2lyY3VsYXIgPSB7fTtcbnZhciB3YWl0aW5nID0gZmFsc2U7XG52YXIgZmx1c2hpbmcgPSBmYWxzZTtcbnZhciBpbmRleCA9IDA7XG5cbi8qKlxuICogUmVzZXQgdGhlIHNjaGVkdWxlcidzIHN0YXRlLlxuICovXG5mdW5jdGlvbiByZXNldFNjaGVkdWxlclN0YXRlICgpIHtcbiAgaW5kZXggPSBxdWV1ZS5sZW5ndGggPSBhY3RpdmF0ZWRDaGlsZHJlbi5sZW5ndGggPSAwO1xuICBoYXMgPSB7fTtcbiAge1xuICAgIGNpcmN1bGFyID0ge307XG4gIH1cbiAgd2FpdGluZyA9IGZsdXNoaW5nID0gZmFsc2U7XG59XG5cbi8vIEFzeW5jIGVkZ2UgY2FzZSAjNjU2NiByZXF1aXJlcyBzYXZpbmcgdGhlIHRpbWVzdGFtcCB3aGVuIGV2ZW50IGxpc3RlbmVycyBhcmVcbi8vIGF0dGFjaGVkLiBIb3dldmVyLCBjYWxsaW5nIHBlcmZvcm1hbmNlLm5vdygpIGhhcyBhIHBlcmYgb3ZlcmhlYWQgZXNwZWNpYWxseVxuLy8gaWYgdGhlIHBhZ2UgaGFzIHRob3VzYW5kcyBvZiBldmVudCBsaXN0ZW5lcnMuIEluc3RlYWQsIHdlIHRha2UgYSB0aW1lc3RhbXBcbi8vIGV2ZXJ5IHRpbWUgdGhlIHNjaGVkdWxlciBmbHVzaGVzIGFuZCB1c2UgdGhhdCBmb3IgYWxsIGV2ZW50IGxpc3RlbmVyc1xuLy8gYXR0YWNoZWQgZHVyaW5nIHRoYXQgZmx1c2guXG52YXIgY3VycmVudEZsdXNoVGltZXN0YW1wID0gMDtcblxuLy8gQXN5bmMgZWRnZSBjYXNlIGZpeCByZXF1aXJlcyBzdG9yaW5nIGFuIGV2ZW50IGxpc3RlbmVyJ3MgYXR0YWNoIHRpbWVzdGFtcC5cbnZhciBnZXROb3cgPSBEYXRlLm5vdztcblxuLy8gRGV0ZXJtaW5lIHdoYXQgZXZlbnQgdGltZXN0YW1wIHRoZSBicm93c2VyIGlzIHVzaW5nLiBBbm5veWluZ2x5LCB0aGVcbi8vIHRpbWVzdGFtcCBjYW4gZWl0aGVyIGJlIGhpLXJlcyAocmVsYXRpdmUgdG8gcGFnZSBsb2FkKSBvciBsb3ctcmVzXG4vLyAocmVsYXRpdmUgdG8gVU5JWCBlcG9jaCksIHNvIGluIG9yZGVyIHRvIGNvbXBhcmUgdGltZSB3ZSBoYXZlIHRvIHVzZSB0aGVcbi8vIHNhbWUgdGltZXN0YW1wIHR5cGUgd2hlbiBzYXZpbmcgdGhlIGZsdXNoIHRpbWVzdGFtcC5cbi8vIEFsbCBJRSB2ZXJzaW9ucyB1c2UgbG93LXJlcyBldmVudCB0aW1lc3RhbXBzLCBhbmQgaGF2ZSBwcm9ibGVtYXRpYyBjbG9ja1xuLy8gaW1wbGVtZW50YXRpb25zICgjOTYzMilcbmlmIChpbkJyb3dzZXIgJiYgIWlzSUUpIHtcbiAgdmFyIHBlcmZvcm1hbmNlID0gd2luZG93LnBlcmZvcm1hbmNlO1xuICBpZiAoXG4gICAgcGVyZm9ybWFuY2UgJiZcbiAgICB0eXBlb2YgcGVyZm9ybWFuY2Uubm93ID09PSAnZnVuY3Rpb24nICYmXG4gICAgZ2V0Tm93KCkgPiBkb2N1bWVudC5jcmVhdGVFdmVudCgnRXZlbnQnKS50aW1lU3RhbXBcbiAgKSB7XG4gICAgLy8gaWYgdGhlIGV2ZW50IHRpbWVzdGFtcCwgYWx0aG91Z2ggZXZhbHVhdGVkIEFGVEVSIHRoZSBEYXRlLm5vdygpLCBpc1xuICAgIC8vIHNtYWxsZXIgdGhhbiBpdCwgaXQgbWVhbnMgdGhlIGV2ZW50IGlzIHVzaW5nIGEgaGktcmVzIHRpbWVzdGFtcCxcbiAgICAvLyBhbmQgd2UgbmVlZCB0byB1c2UgdGhlIGhpLXJlcyB2ZXJzaW9uIGZvciBldmVudCBsaXN0ZW5lciB0aW1lc3RhbXBzIGFzXG4gICAgLy8gd2VsbC5cbiAgICBnZXROb3cgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBwZXJmb3JtYW5jZS5ub3coKTsgfTtcbiAgfVxufVxuXG4vKipcbiAqIEZsdXNoIGJvdGggcXVldWVzIGFuZCBydW4gdGhlIHdhdGNoZXJzLlxuICovXG5mdW5jdGlvbiBmbHVzaFNjaGVkdWxlclF1ZXVlICgpIHtcbiAgY3VycmVudEZsdXNoVGltZXN0YW1wID0gZ2V0Tm93KCk7XG4gIGZsdXNoaW5nID0gdHJ1ZTtcbiAgdmFyIHdhdGNoZXIsIGlkO1xuXG4gIC8vIFNvcnQgcXVldWUgYmVmb3JlIGZsdXNoLlxuICAvLyBUaGlzIGVuc3VyZXMgdGhhdDpcbiAgLy8gMS4gQ29tcG9uZW50cyBhcmUgdXBkYXRlZCBmcm9tIHBhcmVudCB0byBjaGlsZC4gKGJlY2F1c2UgcGFyZW50IGlzIGFsd2F5c1xuICAvLyAgICBjcmVhdGVkIGJlZm9yZSB0aGUgY2hpbGQpXG4gIC8vIDIuIEEgY29tcG9uZW50J3MgdXNlciB3YXRjaGVycyBhcmUgcnVuIGJlZm9yZSBpdHMgcmVuZGVyIHdhdGNoZXIgKGJlY2F1c2VcbiAgLy8gICAgdXNlciB3YXRjaGVycyBhcmUgY3JlYXRlZCBiZWZvcmUgdGhlIHJlbmRlciB3YXRjaGVyKVxuICAvLyAzLiBJZiBhIGNvbXBvbmVudCBpcyBkZXN0cm95ZWQgZHVyaW5nIGEgcGFyZW50IGNvbXBvbmVudCdzIHdhdGNoZXIgcnVuLFxuICAvLyAgICBpdHMgd2F0Y2hlcnMgY2FuIGJlIHNraXBwZWQuXG4gIHF1ZXVlLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIGEuaWQgLSBiLmlkOyB9KTtcblxuICAvLyBkbyBub3QgY2FjaGUgbGVuZ3RoIGJlY2F1c2UgbW9yZSB3YXRjaGVycyBtaWdodCBiZSBwdXNoZWRcbiAgLy8gYXMgd2UgcnVuIGV4aXN0aW5nIHdhdGNoZXJzXG4gIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IHF1ZXVlLmxlbmd0aDsgaW5kZXgrKykge1xuICAgIHdhdGNoZXIgPSBxdWV1ZVtpbmRleF07XG4gICAgaWYgKHdhdGNoZXIuYmVmb3JlKSB7XG4gICAgICB3YXRjaGVyLmJlZm9yZSgpO1xuICAgIH1cbiAgICBpZCA9IHdhdGNoZXIuaWQ7XG4gICAgaGFzW2lkXSA9IG51bGw7XG4gICAgd2F0Y2hlci5ydW4oKTtcbiAgICAvLyBpbiBkZXYgYnVpbGQsIGNoZWNrIGFuZCBzdG9wIGNpcmN1bGFyIHVwZGF0ZXMuXG4gICAgaWYgKGhhc1tpZF0gIT0gbnVsbCkge1xuICAgICAgY2lyY3VsYXJbaWRdID0gKGNpcmN1bGFyW2lkXSB8fCAwKSArIDE7XG4gICAgICBpZiAoY2lyY3VsYXJbaWRdID4gTUFYX1VQREFURV9DT1VOVCkge1xuICAgICAgICB3YXJuKFxuICAgICAgICAgICdZb3UgbWF5IGhhdmUgYW4gaW5maW5pdGUgdXBkYXRlIGxvb3AgJyArIChcbiAgICAgICAgICAgIHdhdGNoZXIudXNlclxuICAgICAgICAgICAgICA/IChcImluIHdhdGNoZXIgd2l0aCBleHByZXNzaW9uIFxcXCJcIiArICh3YXRjaGVyLmV4cHJlc3Npb24pICsgXCJcXFwiXCIpXG4gICAgICAgICAgICAgIDogXCJpbiBhIGNvbXBvbmVudCByZW5kZXIgZnVuY3Rpb24uXCJcbiAgICAgICAgICApLFxuICAgICAgICAgIHdhdGNoZXIudm1cbiAgICAgICAgKTtcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBrZWVwIGNvcGllcyBvZiBwb3N0IHF1ZXVlcyBiZWZvcmUgcmVzZXR0aW5nIHN0YXRlXG4gIHZhciBhY3RpdmF0ZWRRdWV1ZSA9IGFjdGl2YXRlZENoaWxkcmVuLnNsaWNlKCk7XG4gIHZhciB1cGRhdGVkUXVldWUgPSBxdWV1ZS5zbGljZSgpO1xuXG4gIHJlc2V0U2NoZWR1bGVyU3RhdGUoKTtcblxuICAvLyBjYWxsIGNvbXBvbmVudCB1cGRhdGVkIGFuZCBhY3RpdmF0ZWQgaG9va3NcbiAgY2FsbEFjdGl2YXRlZEhvb2tzKGFjdGl2YXRlZFF1ZXVlKTtcbiAgY2FsbFVwZGF0ZWRIb29rcyh1cGRhdGVkUXVldWUpO1xuXG4gIC8vIGRldnRvb2wgaG9va1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKGRldnRvb2xzICYmIGNvbmZpZy5kZXZ0b29scykge1xuICAgIGRldnRvb2xzLmVtaXQoJ2ZsdXNoJyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY2FsbFVwZGF0ZWRIb29rcyAocXVldWUpIHtcbiAgdmFyIGkgPSBxdWV1ZS5sZW5ndGg7XG4gIHdoaWxlIChpLS0pIHtcbiAgICB2YXIgd2F0Y2hlciA9IHF1ZXVlW2ldO1xuICAgIHZhciB2bSA9IHdhdGNoZXIudm07XG4gICAgaWYgKHZtLl93YXRjaGVyID09PSB3YXRjaGVyICYmIHZtLl9pc01vdW50ZWQgJiYgIXZtLl9pc0Rlc3Ryb3llZCkge1xuICAgICAgY2FsbEhvb2sodm0sICd1cGRhdGVkJyk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUXVldWUgYSBrZXB0LWFsaXZlIGNvbXBvbmVudCB0aGF0IHdhcyBhY3RpdmF0ZWQgZHVyaW5nIHBhdGNoLlxuICogVGhlIHF1ZXVlIHdpbGwgYmUgcHJvY2Vzc2VkIGFmdGVyIHRoZSBlbnRpcmUgdHJlZSBoYXMgYmVlbiBwYXRjaGVkLlxuICovXG5mdW5jdGlvbiBxdWV1ZUFjdGl2YXRlZENvbXBvbmVudCAodm0pIHtcbiAgLy8gc2V0dGluZyBfaW5hY3RpdmUgdG8gZmFsc2UgaGVyZSBzbyB0aGF0IGEgcmVuZGVyIGZ1bmN0aW9uIGNhblxuICAvLyByZWx5IG9uIGNoZWNraW5nIHdoZXRoZXIgaXQncyBpbiBhbiBpbmFjdGl2ZSB0cmVlIChlLmcuIHJvdXRlci12aWV3KVxuICB2bS5faW5hY3RpdmUgPSBmYWxzZTtcbiAgYWN0aXZhdGVkQ2hpbGRyZW4ucHVzaCh2bSk7XG59XG5cbmZ1bmN0aW9uIGNhbGxBY3RpdmF0ZWRIb29rcyAocXVldWUpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWV1ZS5sZW5ndGg7IGkrKykge1xuICAgIHF1ZXVlW2ldLl9pbmFjdGl2ZSA9IHRydWU7XG4gICAgYWN0aXZhdGVDaGlsZENvbXBvbmVudChxdWV1ZVtpXSwgdHJ1ZSAvKiB0cnVlICovKTtcbiAgfVxufVxuXG4vKipcbiAqIFB1c2ggYSB3YXRjaGVyIGludG8gdGhlIHdhdGNoZXIgcXVldWUuXG4gKiBKb2JzIHdpdGggZHVwbGljYXRlIElEcyB3aWxsIGJlIHNraXBwZWQgdW5sZXNzIGl0J3NcbiAqIHB1c2hlZCB3aGVuIHRoZSBxdWV1ZSBpcyBiZWluZyBmbHVzaGVkLlxuICovXG5mdW5jdGlvbiBxdWV1ZVdhdGNoZXIgKHdhdGNoZXIpIHtcbiAgdmFyIGlkID0gd2F0Y2hlci5pZDtcbiAgaWYgKGhhc1tpZF0gPT0gbnVsbCkge1xuICAgIGhhc1tpZF0gPSB0cnVlO1xuICAgIGlmICghZmx1c2hpbmcpIHtcbiAgICAgIHF1ZXVlLnB1c2god2F0Y2hlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGlmIGFscmVhZHkgZmx1c2hpbmcsIHNwbGljZSB0aGUgd2F0Y2hlciBiYXNlZCBvbiBpdHMgaWRcbiAgICAgIC8vIGlmIGFscmVhZHkgcGFzdCBpdHMgaWQsIGl0IHdpbGwgYmUgcnVuIG5leHQgaW1tZWRpYXRlbHkuXG4gICAgICB2YXIgaSA9IHF1ZXVlLmxlbmd0aCAtIDE7XG4gICAgICB3aGlsZSAoaSA+IGluZGV4ICYmIHF1ZXVlW2ldLmlkID4gd2F0Y2hlci5pZCkge1xuICAgICAgICBpLS07XG4gICAgICB9XG4gICAgICBxdWV1ZS5zcGxpY2UoaSArIDEsIDAsIHdhdGNoZXIpO1xuICAgIH1cbiAgICAvLyBxdWV1ZSB0aGUgZmx1c2hcbiAgICBpZiAoIXdhaXRpbmcpIHtcbiAgICAgIHdhaXRpbmcgPSB0cnVlO1xuXG4gICAgICBpZiAoIWNvbmZpZy5hc3luYykge1xuICAgICAgICBmbHVzaFNjaGVkdWxlclF1ZXVlKCk7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgbmV4dFRpY2soZmx1c2hTY2hlZHVsZXJRdWV1ZSk7XG4gICAgfVxuICB9XG59XG5cbi8qICAqL1xuXG5cblxudmFyIHVpZCQyID0gMDtcblxuLyoqXG4gKiBBIHdhdGNoZXIgcGFyc2VzIGFuIGV4cHJlc3Npb24sIGNvbGxlY3RzIGRlcGVuZGVuY2llcyxcbiAqIGFuZCBmaXJlcyBjYWxsYmFjayB3aGVuIHRoZSBleHByZXNzaW9uIHZhbHVlIGNoYW5nZXMuXG4gKiBUaGlzIGlzIHVzZWQgZm9yIGJvdGggdGhlICR3YXRjaCgpIGFwaSBhbmQgZGlyZWN0aXZlcy5cbiAqL1xudmFyIFdhdGNoZXIgPSBmdW5jdGlvbiBXYXRjaGVyIChcbiAgdm0sXG4gIGV4cE9yRm4sXG4gIGNiLFxuICBvcHRpb25zLFxuICBpc1JlbmRlcldhdGNoZXJcbikge1xuICB0aGlzLnZtID0gdm07XG4gIGlmIChpc1JlbmRlcldhdGNoZXIpIHtcbiAgICB2bS5fd2F0Y2hlciA9IHRoaXM7XG4gIH1cbiAgdm0uX3dhdGNoZXJzLnB1c2godGhpcyk7XG4gIC8vIG9wdGlvbnNcbiAgaWYgKG9wdGlvbnMpIHtcbiAgICB0aGlzLmRlZXAgPSAhIW9wdGlvbnMuZGVlcDtcbiAgICB0aGlzLnVzZXIgPSAhIW9wdGlvbnMudXNlcjtcbiAgICB0aGlzLmxhenkgPSAhIW9wdGlvbnMubGF6eTtcbiAgICB0aGlzLnN5bmMgPSAhIW9wdGlvbnMuc3luYztcbiAgICB0aGlzLmJlZm9yZSA9IG9wdGlvbnMuYmVmb3JlO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuZGVlcCA9IHRoaXMudXNlciA9IHRoaXMubGF6eSA9IHRoaXMuc3luYyA9IGZhbHNlO1xuICB9XG4gIHRoaXMuY2IgPSBjYjtcbiAgdGhpcy5pZCA9ICsrdWlkJDI7IC8vIHVpZCBmb3IgYmF0Y2hpbmdcbiAgdGhpcy5hY3RpdmUgPSB0cnVlO1xuICB0aGlzLmRpcnR5ID0gdGhpcy5sYXp5OyAvLyBmb3IgbGF6eSB3YXRjaGVyc1xuICB0aGlzLmRlcHMgPSBbXTtcbiAgdGhpcy5uZXdEZXBzID0gW107XG4gIHRoaXMuZGVwSWRzID0gbmV3IF9TZXQoKTtcbiAgdGhpcy5uZXdEZXBJZHMgPSBuZXcgX1NldCgpO1xuICB0aGlzLmV4cHJlc3Npb24gPSBleHBPckZuLnRvU3RyaW5nKCk7XG4gIC8vIHBhcnNlIGV4cHJlc3Npb24gZm9yIGdldHRlclxuICBpZiAodHlwZW9mIGV4cE9yRm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICB0aGlzLmdldHRlciA9IGV4cE9yRm47XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5nZXR0ZXIgPSBwYXJzZVBhdGgoZXhwT3JGbik7XG4gICAgaWYgKCF0aGlzLmdldHRlcikge1xuICAgICAgdGhpcy5nZXR0ZXIgPSBub29wO1xuICAgICAgd2FybihcbiAgICAgICAgXCJGYWlsZWQgd2F0Y2hpbmcgcGF0aDogXFxcIlwiICsgZXhwT3JGbiArIFwiXFxcIiBcIiArXG4gICAgICAgICdXYXRjaGVyIG9ubHkgYWNjZXB0cyBzaW1wbGUgZG90LWRlbGltaXRlZCBwYXRocy4gJyArXG4gICAgICAgICdGb3IgZnVsbCBjb250cm9sLCB1c2UgYSBmdW5jdGlvbiBpbnN0ZWFkLicsXG4gICAgICAgIHZtXG4gICAgICApO1xuICAgIH1cbiAgfVxuICB0aGlzLnZhbHVlID0gdGhpcy5sYXp5XG4gICAgPyB1bmRlZmluZWRcbiAgICA6IHRoaXMuZ2V0KCk7XG59O1xuXG4vKipcbiAqIEV2YWx1YXRlIHRoZSBnZXR0ZXIsIGFuZCByZS1jb2xsZWN0IGRlcGVuZGVuY2llcy5cbiAqL1xuV2F0Y2hlci5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gZ2V0ICgpIHtcbiAgcHVzaFRhcmdldCh0aGlzKTtcbiAgdmFyIHZhbHVlO1xuICB2YXIgdm0gPSB0aGlzLnZtO1xuICB0cnkge1xuICAgIHZhbHVlID0gdGhpcy5nZXR0ZXIuY2FsbCh2bSwgdm0pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgaWYgKHRoaXMudXNlcikge1xuICAgICAgaGFuZGxlRXJyb3IoZSwgdm0sIChcImdldHRlciBmb3Igd2F0Y2hlciBcXFwiXCIgKyAodGhpcy5leHByZXNzaW9uKSArIFwiXFxcIlwiKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IGVcbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgLy8gXCJ0b3VjaFwiIGV2ZXJ5IHByb3BlcnR5IHNvIHRoZXkgYXJlIGFsbCB0cmFja2VkIGFzXG4gICAgLy8gZGVwZW5kZW5jaWVzIGZvciBkZWVwIHdhdGNoaW5nXG4gICAgaWYgKHRoaXMuZGVlcCkge1xuICAgICAgdHJhdmVyc2UodmFsdWUpO1xuICAgIH1cbiAgICBwb3BUYXJnZXQoKTtcbiAgICB0aGlzLmNsZWFudXBEZXBzKCk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlXG59O1xuXG4vKipcbiAqIEFkZCBhIGRlcGVuZGVuY3kgdG8gdGhpcyBkaXJlY3RpdmUuXG4gKi9cbldhdGNoZXIucHJvdG90eXBlLmFkZERlcCA9IGZ1bmN0aW9uIGFkZERlcCAoZGVwKSB7XG4gIHZhciBpZCA9IGRlcC5pZDtcbiAgaWYgKCF0aGlzLm5ld0RlcElkcy5oYXMoaWQpKSB7XG4gICAgdGhpcy5uZXdEZXBJZHMuYWRkKGlkKTtcbiAgICB0aGlzLm5ld0RlcHMucHVzaChkZXApO1xuICAgIGlmICghdGhpcy5kZXBJZHMuaGFzKGlkKSkge1xuICAgICAgZGVwLmFkZFN1Yih0aGlzKTtcbiAgICB9XG4gIH1cbn07XG5cbi8qKlxuICogQ2xlYW4gdXAgZm9yIGRlcGVuZGVuY3kgY29sbGVjdGlvbi5cbiAqL1xuV2F0Y2hlci5wcm90b3R5cGUuY2xlYW51cERlcHMgPSBmdW5jdGlvbiBjbGVhbnVwRGVwcyAoKSB7XG4gIHZhciBpID0gdGhpcy5kZXBzLmxlbmd0aDtcbiAgd2hpbGUgKGktLSkge1xuICAgIHZhciBkZXAgPSB0aGlzLmRlcHNbaV07XG4gICAgaWYgKCF0aGlzLm5ld0RlcElkcy5oYXMoZGVwLmlkKSkge1xuICAgICAgZGVwLnJlbW92ZVN1Yih0aGlzKTtcbiAgICB9XG4gIH1cbiAgdmFyIHRtcCA9IHRoaXMuZGVwSWRzO1xuICB0aGlzLmRlcElkcyA9IHRoaXMubmV3RGVwSWRzO1xuICB0aGlzLm5ld0RlcElkcyA9IHRtcDtcbiAgdGhpcy5uZXdEZXBJZHMuY2xlYXIoKTtcbiAgdG1wID0gdGhpcy5kZXBzO1xuICB0aGlzLmRlcHMgPSB0aGlzLm5ld0RlcHM7XG4gIHRoaXMubmV3RGVwcyA9IHRtcDtcbiAgdGhpcy5uZXdEZXBzLmxlbmd0aCA9IDA7XG59O1xuXG4vKipcbiAqIFN1YnNjcmliZXIgaW50ZXJmYWNlLlxuICogV2lsbCBiZSBjYWxsZWQgd2hlbiBhIGRlcGVuZGVuY3kgY2hhbmdlcy5cbiAqL1xuV2F0Y2hlci5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlICgpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKHRoaXMubGF6eSkge1xuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICB9IGVsc2UgaWYgKHRoaXMuc3luYykge1xuICAgIHRoaXMucnVuKCk7XG4gIH0gZWxzZSB7XG4gICAgcXVldWVXYXRjaGVyKHRoaXMpO1xuICB9XG59O1xuXG4vKipcbiAqIFNjaGVkdWxlciBqb2IgaW50ZXJmYWNlLlxuICogV2lsbCBiZSBjYWxsZWQgYnkgdGhlIHNjaGVkdWxlci5cbiAqL1xuV2F0Y2hlci5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gcnVuICgpIHtcbiAgaWYgKHRoaXMuYWN0aXZlKSB7XG4gICAgdmFyIHZhbHVlID0gdGhpcy5nZXQoKTtcbiAgICBpZiAoXG4gICAgICB2YWx1ZSAhPT0gdGhpcy52YWx1ZSB8fFxuICAgICAgLy8gRGVlcCB3YXRjaGVycyBhbmQgd2F0Y2hlcnMgb24gT2JqZWN0L0FycmF5cyBzaG91bGQgZmlyZSBldmVuXG4gICAgICAvLyB3aGVuIHRoZSB2YWx1ZSBpcyB0aGUgc2FtZSwgYmVjYXVzZSB0aGUgdmFsdWUgbWF5XG4gICAgICAvLyBoYXZlIG11dGF0ZWQuXG4gICAgICBpc09iamVjdCh2YWx1ZSkgfHxcbiAgICAgIHRoaXMuZGVlcFxuICAgICkge1xuICAgICAgLy8gc2V0IG5ldyB2YWx1ZVxuICAgICAgdmFyIG9sZFZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgIGlmICh0aGlzLnVzZXIpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0aGlzLmNiLmNhbGwodGhpcy52bSwgdmFsdWUsIG9sZFZhbHVlKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGhhbmRsZUVycm9yKGUsIHRoaXMudm0sIChcImNhbGxiYWNrIGZvciB3YXRjaGVyIFxcXCJcIiArICh0aGlzLmV4cHJlc3Npb24pICsgXCJcXFwiXCIpKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jYi5jYWxsKHRoaXMudm0sIHZhbHVlLCBvbGRWYWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59O1xuXG4vKipcbiAqIEV2YWx1YXRlIHRoZSB2YWx1ZSBvZiB0aGUgd2F0Y2hlci5cbiAqIFRoaXMgb25seSBnZXRzIGNhbGxlZCBmb3IgbGF6eSB3YXRjaGVycy5cbiAqL1xuV2F0Y2hlci5wcm90b3R5cGUuZXZhbHVhdGUgPSBmdW5jdGlvbiBldmFsdWF0ZSAoKSB7XG4gIHRoaXMudmFsdWUgPSB0aGlzLmdldCgpO1xuICB0aGlzLmRpcnR5ID0gZmFsc2U7XG59O1xuXG4vKipcbiAqIERlcGVuZCBvbiBhbGwgZGVwcyBjb2xsZWN0ZWQgYnkgdGhpcyB3YXRjaGVyLlxuICovXG5XYXRjaGVyLnByb3RvdHlwZS5kZXBlbmQgPSBmdW5jdGlvbiBkZXBlbmQgKCkge1xuICB2YXIgaSA9IHRoaXMuZGVwcy5sZW5ndGg7XG4gIHdoaWxlIChpLS0pIHtcbiAgICB0aGlzLmRlcHNbaV0uZGVwZW5kKCk7XG4gIH1cbn07XG5cbi8qKlxuICogUmVtb3ZlIHNlbGYgZnJvbSBhbGwgZGVwZW5kZW5jaWVzJyBzdWJzY3JpYmVyIGxpc3QuXG4gKi9cbldhdGNoZXIucHJvdG90eXBlLnRlYXJkb3duID0gZnVuY3Rpb24gdGVhcmRvd24gKCkge1xuICBpZiAodGhpcy5hY3RpdmUpIHtcbiAgICAvLyByZW1vdmUgc2VsZiBmcm9tIHZtJ3Mgd2F0Y2hlciBsaXN0XG4gICAgLy8gdGhpcyBpcyBhIHNvbWV3aGF0IGV4cGVuc2l2ZSBvcGVyYXRpb24gc28gd2Ugc2tpcCBpdFxuICAgIC8vIGlmIHRoZSB2bSBpcyBiZWluZyBkZXN0cm95ZWQuXG4gICAgaWYgKCF0aGlzLnZtLl9pc0JlaW5nRGVzdHJveWVkKSB7XG4gICAgICByZW1vdmUodGhpcy52bS5fd2F0Y2hlcnMsIHRoaXMpO1xuICAgIH1cbiAgICB2YXIgaSA9IHRoaXMuZGVwcy5sZW5ndGg7XG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgdGhpcy5kZXBzW2ldLnJlbW92ZVN1Yih0aGlzKTtcbiAgICB9XG4gICAgdGhpcy5hY3RpdmUgPSBmYWxzZTtcbiAgfVxufTtcblxuLyogICovXG5cbnZhciBzaGFyZWRQcm9wZXJ0eURlZmluaXRpb24gPSB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBub29wLFxuICBzZXQ6IG5vb3Bcbn07XG5cbmZ1bmN0aW9uIHByb3h5ICh0YXJnZXQsIHNvdXJjZUtleSwga2V5KSB7XG4gIHNoYXJlZFByb3BlcnR5RGVmaW5pdGlvbi5nZXQgPSBmdW5jdGlvbiBwcm94eUdldHRlciAoKSB7XG4gICAgcmV0dXJuIHRoaXNbc291cmNlS2V5XVtrZXldXG4gIH07XG4gIHNoYXJlZFByb3BlcnR5RGVmaW5pdGlvbi5zZXQgPSBmdW5jdGlvbiBwcm94eVNldHRlciAodmFsKSB7XG4gICAgdGhpc1tzb3VyY2VLZXldW2tleV0gPSB2YWw7XG4gIH07XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc2hhcmVkUHJvcGVydHlEZWZpbml0aW9uKTtcbn1cblxuZnVuY3Rpb24gaW5pdFN0YXRlICh2bSkge1xuICB2bS5fd2F0Y2hlcnMgPSBbXTtcbiAgdmFyIG9wdHMgPSB2bS4kb3B0aW9ucztcbiAgaWYgKG9wdHMucHJvcHMpIHsgaW5pdFByb3BzKHZtLCBvcHRzLnByb3BzKTsgfVxuICBpZiAob3B0cy5tZXRob2RzKSB7IGluaXRNZXRob2RzKHZtLCBvcHRzLm1ldGhvZHMpOyB9XG4gIGlmIChvcHRzLmRhdGEpIHtcbiAgICBpbml0RGF0YSh2bSk7XG4gIH0gZWxzZSB7XG4gICAgb2JzZXJ2ZSh2bS5fZGF0YSA9IHt9LCB0cnVlIC8qIGFzUm9vdERhdGEgKi8pO1xuICB9XG4gIGlmIChvcHRzLmNvbXB1dGVkKSB7IGluaXRDb21wdXRlZCh2bSwgb3B0cy5jb21wdXRlZCk7IH1cbiAgaWYgKG9wdHMud2F0Y2ggJiYgb3B0cy53YXRjaCAhPT0gbmF0aXZlV2F0Y2gpIHtcbiAgICBpbml0V2F0Y2godm0sIG9wdHMud2F0Y2gpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGluaXRQcm9wcyAodm0sIHByb3BzT3B0aW9ucykge1xuICB2YXIgcHJvcHNEYXRhID0gdm0uJG9wdGlvbnMucHJvcHNEYXRhIHx8IHt9O1xuICB2YXIgcHJvcHMgPSB2bS5fcHJvcHMgPSB7fTtcbiAgLy8gY2FjaGUgcHJvcCBrZXlzIHNvIHRoYXQgZnV0dXJlIHByb3BzIHVwZGF0ZXMgY2FuIGl0ZXJhdGUgdXNpbmcgQXJyYXlcbiAgLy8gaW5zdGVhZCBvZiBkeW5hbWljIG9iamVjdCBrZXkgZW51bWVyYXRpb24uXG4gIHZhciBrZXlzID0gdm0uJG9wdGlvbnMuX3Byb3BLZXlzID0gW107XG4gIHZhciBpc1Jvb3QgPSAhdm0uJHBhcmVudDtcbiAgLy8gcm9vdCBpbnN0YW5jZSBwcm9wcyBzaG91bGQgYmUgY29udmVydGVkXG4gIGlmICghaXNSb290KSB7XG4gICAgdG9nZ2xlT2JzZXJ2aW5nKGZhbHNlKTtcbiAgfVxuICB2YXIgbG9vcCA9IGZ1bmN0aW9uICgga2V5ICkge1xuICAgIGtleXMucHVzaChrZXkpO1xuICAgIHZhciB2YWx1ZSA9IHZhbGlkYXRlUHJvcChrZXksIHByb3BzT3B0aW9ucywgcHJvcHNEYXRhLCB2bSk7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICB7XG4gICAgICB2YXIgaHlwaGVuYXRlZEtleSA9IGh5cGhlbmF0ZShrZXkpO1xuICAgICAgaWYgKGlzUmVzZXJ2ZWRBdHRyaWJ1dGUoaHlwaGVuYXRlZEtleSkgfHxcbiAgICAgICAgICBjb25maWcuaXNSZXNlcnZlZEF0dHIoaHlwaGVuYXRlZEtleSkpIHtcbiAgICAgICAgd2FybihcbiAgICAgICAgICAoXCJcXFwiXCIgKyBoeXBoZW5hdGVkS2V5ICsgXCJcXFwiIGlzIGEgcmVzZXJ2ZWQgYXR0cmlidXRlIGFuZCBjYW5ub3QgYmUgdXNlZCBhcyBjb21wb25lbnQgcHJvcC5cIiksXG4gICAgICAgICAgdm1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGRlZmluZVJlYWN0aXZlJCQxKHByb3BzLCBrZXksIHZhbHVlLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghaXNSb290ICYmICFpc1VwZGF0aW5nQ2hpbGRDb21wb25lbnQpIHtcbiAgICAgICAgICB3YXJuKFxuICAgICAgICAgICAgXCJBdm9pZCBtdXRhdGluZyBhIHByb3AgZGlyZWN0bHkgc2luY2UgdGhlIHZhbHVlIHdpbGwgYmUgXCIgK1xuICAgICAgICAgICAgXCJvdmVyd3JpdHRlbiB3aGVuZXZlciB0aGUgcGFyZW50IGNvbXBvbmVudCByZS1yZW5kZXJzLiBcIiArXG4gICAgICAgICAgICBcIkluc3RlYWQsIHVzZSBhIGRhdGEgb3IgY29tcHV0ZWQgcHJvcGVydHkgYmFzZWQgb24gdGhlIHByb3AncyBcIiArXG4gICAgICAgICAgICBcInZhbHVlLiBQcm9wIGJlaW5nIG11dGF0ZWQ6IFxcXCJcIiArIGtleSArIFwiXFxcIlwiLFxuICAgICAgICAgICAgdm1cbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgLy8gc3RhdGljIHByb3BzIGFyZSBhbHJlYWR5IHByb3hpZWQgb24gdGhlIGNvbXBvbmVudCdzIHByb3RvdHlwZVxuICAgIC8vIGR1cmluZyBWdWUuZXh0ZW5kKCkuIFdlIG9ubHkgbmVlZCB0byBwcm94eSBwcm9wcyBkZWZpbmVkIGF0XG4gICAgLy8gaW5zdGFudGlhdGlvbiBoZXJlLlxuICAgIGlmICghKGtleSBpbiB2bSkpIHtcbiAgICAgIHByb3h5KHZtLCBcIl9wcm9wc1wiLCBrZXkpO1xuICAgIH1cbiAgfTtcblxuICBmb3IgKHZhciBrZXkgaW4gcHJvcHNPcHRpb25zKSBsb29wKCBrZXkgKTtcbiAgdG9nZ2xlT2JzZXJ2aW5nKHRydWUpO1xufVxuXG5mdW5jdGlvbiBpbml0RGF0YSAodm0pIHtcbiAgdmFyIGRhdGEgPSB2bS4kb3B0aW9ucy5kYXRhO1xuICBkYXRhID0gdm0uX2RhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ2Z1bmN0aW9uJ1xuICAgID8gZ2V0RGF0YShkYXRhLCB2bSlcbiAgICA6IGRhdGEgfHwge307XG4gIGlmICghaXNQbGFpbk9iamVjdChkYXRhKSkge1xuICAgIGRhdGEgPSB7fTtcbiAgICB3YXJuKFxuICAgICAgJ2RhdGEgZnVuY3Rpb25zIHNob3VsZCByZXR1cm4gYW4gb2JqZWN0OlxcbicgK1xuICAgICAgJ2h0dHBzOi8vdnVlanMub3JnL3YyL2d1aWRlL2NvbXBvbmVudHMuaHRtbCNkYXRhLU11c3QtQmUtYS1GdW5jdGlvbicsXG4gICAgICB2bVxuICAgICk7XG4gIH1cbiAgLy8gcHJveHkgZGF0YSBvbiBpbnN0YW5jZVxuICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKGRhdGEpO1xuICB2YXIgcHJvcHMgPSB2bS4kb3B0aW9ucy5wcm9wcztcbiAgdmFyIG1ldGhvZHMgPSB2bS4kb3B0aW9ucy5tZXRob2RzO1xuICB2YXIgaSA9IGtleXMubGVuZ3RoO1xuICB3aGlsZSAoaS0tKSB7XG4gICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAge1xuICAgICAgaWYgKG1ldGhvZHMgJiYgaGFzT3duKG1ldGhvZHMsIGtleSkpIHtcbiAgICAgICAgd2FybihcbiAgICAgICAgICAoXCJNZXRob2QgXFxcIlwiICsga2V5ICsgXCJcXFwiIGhhcyBhbHJlYWR5IGJlZW4gZGVmaW5lZCBhcyBhIGRhdGEgcHJvcGVydHkuXCIpLFxuICAgICAgICAgIHZtXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChwcm9wcyAmJiBoYXNPd24ocHJvcHMsIGtleSkpIHtcbiAgICAgIHdhcm4oXG4gICAgICAgIFwiVGhlIGRhdGEgcHJvcGVydHkgXFxcIlwiICsga2V5ICsgXCJcXFwiIGlzIGFscmVhZHkgZGVjbGFyZWQgYXMgYSBwcm9wLiBcIiArXG4gICAgICAgIFwiVXNlIHByb3AgZGVmYXVsdCB2YWx1ZSBpbnN0ZWFkLlwiLFxuICAgICAgICB2bVxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKCFpc1Jlc2VydmVkKGtleSkpIHtcbiAgICAgIHByb3h5KHZtLCBcIl9kYXRhXCIsIGtleSk7XG4gICAgfVxuICB9XG4gIC8vIG9ic2VydmUgZGF0YVxuICBvYnNlcnZlKGRhdGEsIHRydWUgLyogYXNSb290RGF0YSAqLyk7XG59XG5cbmZ1bmN0aW9uIGdldERhdGEgKGRhdGEsIHZtKSB7XG4gIC8vICM3NTczIGRpc2FibGUgZGVwIGNvbGxlY3Rpb24gd2hlbiBpbnZva2luZyBkYXRhIGdldHRlcnNcbiAgcHVzaFRhcmdldCgpO1xuICB0cnkge1xuICAgIHJldHVybiBkYXRhLmNhbGwodm0sIHZtKVxuICB9IGNhdGNoIChlKSB7XG4gICAgaGFuZGxlRXJyb3IoZSwgdm0sIFwiZGF0YSgpXCIpO1xuICAgIHJldHVybiB7fVxuICB9IGZpbmFsbHkge1xuICAgIHBvcFRhcmdldCgpO1xuICB9XG59XG5cbnZhciBjb21wdXRlZFdhdGNoZXJPcHRpb25zID0geyBsYXp5OiB0cnVlIH07XG5cbmZ1bmN0aW9uIGluaXRDb21wdXRlZCAodm0sIGNvbXB1dGVkKSB7XG4gIC8vICRmbG93LWRpc2FibGUtbGluZVxuICB2YXIgd2F0Y2hlcnMgPSB2bS5fY29tcHV0ZWRXYXRjaGVycyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIC8vIGNvbXB1dGVkIHByb3BlcnRpZXMgYXJlIGp1c3QgZ2V0dGVycyBkdXJpbmcgU1NSXG4gIHZhciBpc1NTUiA9IGlzU2VydmVyUmVuZGVyaW5nKCk7XG5cbiAgZm9yICh2YXIga2V5IGluIGNvbXB1dGVkKSB7XG4gICAgdmFyIHVzZXJEZWYgPSBjb21wdXRlZFtrZXldO1xuICAgIHZhciBnZXR0ZXIgPSB0eXBlb2YgdXNlckRlZiA9PT0gJ2Z1bmN0aW9uJyA/IHVzZXJEZWYgOiB1c2VyRGVmLmdldDtcbiAgICBpZiAoZ2V0dGVyID09IG51bGwpIHtcbiAgICAgIHdhcm4oXG4gICAgICAgIChcIkdldHRlciBpcyBtaXNzaW5nIGZvciBjb21wdXRlZCBwcm9wZXJ0eSBcXFwiXCIgKyBrZXkgKyBcIlxcXCIuXCIpLFxuICAgICAgICB2bVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoIWlzU1NSKSB7XG4gICAgICAvLyBjcmVhdGUgaW50ZXJuYWwgd2F0Y2hlciBmb3IgdGhlIGNvbXB1dGVkIHByb3BlcnR5LlxuICAgICAgd2F0Y2hlcnNba2V5XSA9IG5ldyBXYXRjaGVyKFxuICAgICAgICB2bSxcbiAgICAgICAgZ2V0dGVyIHx8IG5vb3AsXG4gICAgICAgIG5vb3AsXG4gICAgICAgIGNvbXB1dGVkV2F0Y2hlck9wdGlvbnNcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gY29tcG9uZW50LWRlZmluZWQgY29tcHV0ZWQgcHJvcGVydGllcyBhcmUgYWxyZWFkeSBkZWZpbmVkIG9uIHRoZVxuICAgIC8vIGNvbXBvbmVudCBwcm90b3R5cGUuIFdlIG9ubHkgbmVlZCB0byBkZWZpbmUgY29tcHV0ZWQgcHJvcGVydGllcyBkZWZpbmVkXG4gICAgLy8gYXQgaW5zdGFudGlhdGlvbiBoZXJlLlxuICAgIGlmICghKGtleSBpbiB2bSkpIHtcbiAgICAgIGRlZmluZUNvbXB1dGVkKHZtLCBrZXksIHVzZXJEZWYpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoa2V5IGluIHZtLiRkYXRhKSB7XG4gICAgICAgIHdhcm4oKFwiVGhlIGNvbXB1dGVkIHByb3BlcnR5IFxcXCJcIiArIGtleSArIFwiXFxcIiBpcyBhbHJlYWR5IGRlZmluZWQgaW4gZGF0YS5cIiksIHZtKTtcbiAgICAgIH0gZWxzZSBpZiAodm0uJG9wdGlvbnMucHJvcHMgJiYga2V5IGluIHZtLiRvcHRpb25zLnByb3BzKSB7XG4gICAgICAgIHdhcm4oKFwiVGhlIGNvbXB1dGVkIHByb3BlcnR5IFxcXCJcIiArIGtleSArIFwiXFxcIiBpcyBhbHJlYWR5IGRlZmluZWQgYXMgYSBwcm9wLlwiKSwgdm0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBkZWZpbmVDb21wdXRlZCAoXG4gIHRhcmdldCxcbiAga2V5LFxuICB1c2VyRGVmXG4pIHtcbiAgdmFyIHNob3VsZENhY2hlID0gIWlzU2VydmVyUmVuZGVyaW5nKCk7XG4gIGlmICh0eXBlb2YgdXNlckRlZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHNoYXJlZFByb3BlcnR5RGVmaW5pdGlvbi5nZXQgPSBzaG91bGRDYWNoZVxuICAgICAgPyBjcmVhdGVDb21wdXRlZEdldHRlcihrZXkpXG4gICAgICA6IGNyZWF0ZUdldHRlckludm9rZXIodXNlckRlZik7XG4gICAgc2hhcmVkUHJvcGVydHlEZWZpbml0aW9uLnNldCA9IG5vb3A7XG4gIH0gZWxzZSB7XG4gICAgc2hhcmVkUHJvcGVydHlEZWZpbml0aW9uLmdldCA9IHVzZXJEZWYuZ2V0XG4gICAgICA/IHNob3VsZENhY2hlICYmIHVzZXJEZWYuY2FjaGUgIT09IGZhbHNlXG4gICAgICAgID8gY3JlYXRlQ29tcHV0ZWRHZXR0ZXIoa2V5KVxuICAgICAgICA6IGNyZWF0ZUdldHRlckludm9rZXIodXNlckRlZi5nZXQpXG4gICAgICA6IG5vb3A7XG4gICAgc2hhcmVkUHJvcGVydHlEZWZpbml0aW9uLnNldCA9IHVzZXJEZWYuc2V0IHx8IG5vb3A7XG4gIH1cbiAgaWYgKHNoYXJlZFByb3BlcnR5RGVmaW5pdGlvbi5zZXQgPT09IG5vb3ApIHtcbiAgICBzaGFyZWRQcm9wZXJ0eURlZmluaXRpb24uc2V0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgd2FybihcbiAgICAgICAgKFwiQ29tcHV0ZWQgcHJvcGVydHkgXFxcIlwiICsga2V5ICsgXCJcXFwiIHdhcyBhc3NpZ25lZCB0byBidXQgaXQgaGFzIG5vIHNldHRlci5cIiksXG4gICAgICAgIHRoaXNcbiAgICAgICk7XG4gICAgfTtcbiAgfVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNoYXJlZFByb3BlcnR5RGVmaW5pdGlvbik7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUNvbXB1dGVkR2V0dGVyIChrZXkpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGNvbXB1dGVkR2V0dGVyICgpIHtcbiAgICB2YXIgd2F0Y2hlciA9IHRoaXMuX2NvbXB1dGVkV2F0Y2hlcnMgJiYgdGhpcy5fY29tcHV0ZWRXYXRjaGVyc1trZXldO1xuICAgIGlmICh3YXRjaGVyKSB7XG4gICAgICBpZiAod2F0Y2hlci5kaXJ0eSkge1xuICAgICAgICB3YXRjaGVyLmV2YWx1YXRlKCk7XG4gICAgICB9XG4gICAgICBpZiAoRGVwLnRhcmdldCkge1xuICAgICAgICB3YXRjaGVyLmRlcGVuZCgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHdhdGNoZXIudmFsdWVcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlR2V0dGVySW52b2tlcihmbikge1xuICByZXR1cm4gZnVuY3Rpb24gY29tcHV0ZWRHZXR0ZXIgKCkge1xuICAgIHJldHVybiBmbi5jYWxsKHRoaXMsIHRoaXMpXG4gIH1cbn1cblxuZnVuY3Rpb24gaW5pdE1ldGhvZHMgKHZtLCBtZXRob2RzKSB7XG4gIHZhciBwcm9wcyA9IHZtLiRvcHRpb25zLnByb3BzO1xuICBmb3IgKHZhciBrZXkgaW4gbWV0aG9kcykge1xuICAgIHtcbiAgICAgIGlmICh0eXBlb2YgbWV0aG9kc1trZXldICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgXCJNZXRob2QgXFxcIlwiICsga2V5ICsgXCJcXFwiIGhhcyB0eXBlIFxcXCJcIiArICh0eXBlb2YgbWV0aG9kc1trZXldKSArIFwiXFxcIiBpbiB0aGUgY29tcG9uZW50IGRlZmluaXRpb24uIFwiICtcbiAgICAgICAgICBcIkRpZCB5b3UgcmVmZXJlbmNlIHRoZSBmdW5jdGlvbiBjb3JyZWN0bHk/XCIsXG4gICAgICAgICAgdm1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wcyAmJiBoYXNPd24ocHJvcHMsIGtleSkpIHtcbiAgICAgICAgd2FybihcbiAgICAgICAgICAoXCJNZXRob2QgXFxcIlwiICsga2V5ICsgXCJcXFwiIGhhcyBhbHJlYWR5IGJlZW4gZGVmaW5lZCBhcyBhIHByb3AuXCIpLFxuICAgICAgICAgIHZtXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoKGtleSBpbiB2bSkgJiYgaXNSZXNlcnZlZChrZXkpKSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgXCJNZXRob2QgXFxcIlwiICsga2V5ICsgXCJcXFwiIGNvbmZsaWN0cyB3aXRoIGFuIGV4aXN0aW5nIFZ1ZSBpbnN0YW5jZSBtZXRob2QuIFwiICtcbiAgICAgICAgICBcIkF2b2lkIGRlZmluaW5nIGNvbXBvbmVudCBtZXRob2RzIHRoYXQgc3RhcnQgd2l0aCBfIG9yICQuXCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdm1ba2V5XSA9IHR5cGVvZiBtZXRob2RzW2tleV0gIT09ICdmdW5jdGlvbicgPyBub29wIDogYmluZChtZXRob2RzW2tleV0sIHZtKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbml0V2F0Y2ggKHZtLCB3YXRjaCkge1xuICBmb3IgKHZhciBrZXkgaW4gd2F0Y2gpIHtcbiAgICB2YXIgaGFuZGxlciA9IHdhdGNoW2tleV07XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoaGFuZGxlcikpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaGFuZGxlci5sZW5ndGg7IGkrKykge1xuICAgICAgICBjcmVhdGVXYXRjaGVyKHZtLCBrZXksIGhhbmRsZXJbaV0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjcmVhdGVXYXRjaGVyKHZtLCBrZXksIGhhbmRsZXIpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVXYXRjaGVyIChcbiAgdm0sXG4gIGV4cE9yRm4sXG4gIGhhbmRsZXIsXG4gIG9wdGlvbnNcbikge1xuICBpZiAoaXNQbGFpbk9iamVjdChoYW5kbGVyKSkge1xuICAgIG9wdGlvbnMgPSBoYW5kbGVyO1xuICAgIGhhbmRsZXIgPSBoYW5kbGVyLmhhbmRsZXI7XG4gIH1cbiAgaWYgKHR5cGVvZiBoYW5kbGVyID09PSAnc3RyaW5nJykge1xuICAgIGhhbmRsZXIgPSB2bVtoYW5kbGVyXTtcbiAgfVxuICByZXR1cm4gdm0uJHdhdGNoKGV4cE9yRm4sIGhhbmRsZXIsIG9wdGlvbnMpXG59XG5cbmZ1bmN0aW9uIHN0YXRlTWl4aW4gKFZ1ZSkge1xuICAvLyBmbG93IHNvbWVob3cgaGFzIHByb2JsZW1zIHdpdGggZGlyZWN0bHkgZGVjbGFyZWQgZGVmaW5pdGlvbiBvYmplY3RcbiAgLy8gd2hlbiB1c2luZyBPYmplY3QuZGVmaW5lUHJvcGVydHksIHNvIHdlIGhhdmUgdG8gcHJvY2VkdXJhbGx5IGJ1aWxkIHVwXG4gIC8vIHRoZSBvYmplY3QgaGVyZS5cbiAgdmFyIGRhdGFEZWYgPSB7fTtcbiAgZGF0YURlZi5nZXQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLl9kYXRhIH07XG4gIHZhciBwcm9wc0RlZiA9IHt9O1xuICBwcm9wc0RlZi5nZXQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLl9wcm9wcyB9O1xuICB7XG4gICAgZGF0YURlZi5zZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB3YXJuKFxuICAgICAgICAnQXZvaWQgcmVwbGFjaW5nIGluc3RhbmNlIHJvb3QgJGRhdGEuICcgK1xuICAgICAgICAnVXNlIG5lc3RlZCBkYXRhIHByb3BlcnRpZXMgaW5zdGVhZC4nLFxuICAgICAgICB0aGlzXG4gICAgICApO1xuICAgIH07XG4gICAgcHJvcHNEZWYuc2V0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgd2FybihcIiRwcm9wcyBpcyByZWFkb25seS5cIiwgdGhpcyk7XG4gICAgfTtcbiAgfVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVnVlLnByb3RvdHlwZSwgJyRkYXRhJywgZGF0YURlZik7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShWdWUucHJvdG90eXBlLCAnJHByb3BzJywgcHJvcHNEZWYpO1xuXG4gIFZ1ZS5wcm90b3R5cGUuJHNldCA9IHNldDtcbiAgVnVlLnByb3RvdHlwZS4kZGVsZXRlID0gZGVsO1xuXG4gIFZ1ZS5wcm90b3R5cGUuJHdhdGNoID0gZnVuY3Rpb24gKFxuICAgIGV4cE9yRm4sXG4gICAgY2IsXG4gICAgb3B0aW9uc1xuICApIHtcbiAgICB2YXIgdm0gPSB0aGlzO1xuICAgIGlmIChpc1BsYWluT2JqZWN0KGNiKSkge1xuICAgICAgcmV0dXJuIGNyZWF0ZVdhdGNoZXIodm0sIGV4cE9yRm4sIGNiLCBvcHRpb25zKVxuICAgIH1cbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICBvcHRpb25zLnVzZXIgPSB0cnVlO1xuICAgIHZhciB3YXRjaGVyID0gbmV3IFdhdGNoZXIodm0sIGV4cE9yRm4sIGNiLCBvcHRpb25zKTtcbiAgICBpZiAob3B0aW9ucy5pbW1lZGlhdGUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNiLmNhbGwodm0sIHdhdGNoZXIudmFsdWUpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaGFuZGxlRXJyb3IoZXJyb3IsIHZtLCAoXCJjYWxsYmFjayBmb3IgaW1tZWRpYXRlIHdhdGNoZXIgXFxcIlwiICsgKHdhdGNoZXIuZXhwcmVzc2lvbikgKyBcIlxcXCJcIikpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24gdW53YXRjaEZuICgpIHtcbiAgICAgIHdhdGNoZXIudGVhcmRvd24oKTtcbiAgICB9XG4gIH07XG59XG5cbi8qICAqL1xuXG52YXIgdWlkJDMgPSAwO1xuXG5mdW5jdGlvbiBpbml0TWl4aW4gKFZ1ZSkge1xuICBWdWUucHJvdG90eXBlLl9pbml0ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgdm0gPSB0aGlzO1xuICAgIC8vIGEgdWlkXG4gICAgdm0uX3VpZCA9IHVpZCQzKys7XG5cbiAgICB2YXIgc3RhcnRUYWcsIGVuZFRhZztcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoY29uZmlnLnBlcmZvcm1hbmNlICYmIG1hcmspIHtcbiAgICAgIHN0YXJ0VGFnID0gXCJ2dWUtcGVyZi1zdGFydDpcIiArICh2bS5fdWlkKTtcbiAgICAgIGVuZFRhZyA9IFwidnVlLXBlcmYtZW5kOlwiICsgKHZtLl91aWQpO1xuICAgICAgbWFyayhzdGFydFRhZyk7XG4gICAgfVxuXG4gICAgLy8gYSBmbGFnIHRvIGF2b2lkIHRoaXMgYmVpbmcgb2JzZXJ2ZWRcbiAgICB2bS5faXNWdWUgPSB0cnVlO1xuICAgIC8vIG1lcmdlIG9wdGlvbnNcbiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLl9pc0NvbXBvbmVudCkge1xuICAgICAgLy8gb3B0aW1pemUgaW50ZXJuYWwgY29tcG9uZW50IGluc3RhbnRpYXRpb25cbiAgICAgIC8vIHNpbmNlIGR5bmFtaWMgb3B0aW9ucyBtZXJnaW5nIGlzIHByZXR0eSBzbG93LCBhbmQgbm9uZSBvZiB0aGVcbiAgICAgIC8vIGludGVybmFsIGNvbXBvbmVudCBvcHRpb25zIG5lZWRzIHNwZWNpYWwgdHJlYXRtZW50LlxuICAgICAgaW5pdEludGVybmFsQ29tcG9uZW50KHZtLCBvcHRpb25zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdm0uJG9wdGlvbnMgPSBtZXJnZU9wdGlvbnMoXG4gICAgICAgIHJlc29sdmVDb25zdHJ1Y3Rvck9wdGlvbnModm0uY29uc3RydWN0b3IpLFxuICAgICAgICBvcHRpb25zIHx8IHt9LFxuICAgICAgICB2bVxuICAgICAgKTtcbiAgICB9XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICB7XG4gICAgICBpbml0UHJveHkodm0pO1xuICAgIH1cbiAgICAvLyBleHBvc2UgcmVhbCBzZWxmXG4gICAgdm0uX3NlbGYgPSB2bTtcbiAgICBpbml0TGlmZWN5Y2xlKHZtKTtcbiAgICBpbml0RXZlbnRzKHZtKTtcbiAgICBpbml0UmVuZGVyKHZtKTtcbiAgICBjYWxsSG9vayh2bSwgJ2JlZm9yZUNyZWF0ZScpO1xuICAgIGluaXRJbmplY3Rpb25zKHZtKTsgLy8gcmVzb2x2ZSBpbmplY3Rpb25zIGJlZm9yZSBkYXRhL3Byb3BzXG4gICAgaW5pdFN0YXRlKHZtKTtcbiAgICBpbml0UHJvdmlkZSh2bSk7IC8vIHJlc29sdmUgcHJvdmlkZSBhZnRlciBkYXRhL3Byb3BzXG4gICAgY2FsbEhvb2sodm0sICdjcmVhdGVkJyk7XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoY29uZmlnLnBlcmZvcm1hbmNlICYmIG1hcmspIHtcbiAgICAgIHZtLl9uYW1lID0gZm9ybWF0Q29tcG9uZW50TmFtZSh2bSwgZmFsc2UpO1xuICAgICAgbWFyayhlbmRUYWcpO1xuICAgICAgbWVhc3VyZSgoXCJ2dWUgXCIgKyAodm0uX25hbWUpICsgXCIgaW5pdFwiKSwgc3RhcnRUYWcsIGVuZFRhZyk7XG4gICAgfVxuXG4gICAgaWYgKHZtLiRvcHRpb25zLmVsKSB7XG4gICAgICB2bS4kbW91bnQodm0uJG9wdGlvbnMuZWwpO1xuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gaW5pdEludGVybmFsQ29tcG9uZW50ICh2bSwgb3B0aW9ucykge1xuICB2YXIgb3B0cyA9IHZtLiRvcHRpb25zID0gT2JqZWN0LmNyZWF0ZSh2bS5jb25zdHJ1Y3Rvci5vcHRpb25zKTtcbiAgLy8gZG9pbmcgdGhpcyBiZWNhdXNlIGl0J3MgZmFzdGVyIHRoYW4gZHluYW1pYyBlbnVtZXJhdGlvbi5cbiAgdmFyIHBhcmVudFZub2RlID0gb3B0aW9ucy5fcGFyZW50Vm5vZGU7XG4gIG9wdHMucGFyZW50ID0gb3B0aW9ucy5wYXJlbnQ7XG4gIG9wdHMuX3BhcmVudFZub2RlID0gcGFyZW50Vm5vZGU7XG5cbiAgdmFyIHZub2RlQ29tcG9uZW50T3B0aW9ucyA9IHBhcmVudFZub2RlLmNvbXBvbmVudE9wdGlvbnM7XG4gIG9wdHMucHJvcHNEYXRhID0gdm5vZGVDb21wb25lbnRPcHRpb25zLnByb3BzRGF0YTtcbiAgb3B0cy5fcGFyZW50TGlzdGVuZXJzID0gdm5vZGVDb21wb25lbnRPcHRpb25zLmxpc3RlbmVycztcbiAgb3B0cy5fcmVuZGVyQ2hpbGRyZW4gPSB2bm9kZUNvbXBvbmVudE9wdGlvbnMuY2hpbGRyZW47XG4gIG9wdHMuX2NvbXBvbmVudFRhZyA9IHZub2RlQ29tcG9uZW50T3B0aW9ucy50YWc7XG5cbiAgaWYgKG9wdGlvbnMucmVuZGVyKSB7XG4gICAgb3B0cy5yZW5kZXIgPSBvcHRpb25zLnJlbmRlcjtcbiAgICBvcHRzLnN0YXRpY1JlbmRlckZucyA9IG9wdGlvbnMuc3RhdGljUmVuZGVyRm5zO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVDb25zdHJ1Y3Rvck9wdGlvbnMgKEN0b3IpIHtcbiAgdmFyIG9wdGlvbnMgPSBDdG9yLm9wdGlvbnM7XG4gIGlmIChDdG9yLnN1cGVyKSB7XG4gICAgdmFyIHN1cGVyT3B0aW9ucyA9IHJlc29sdmVDb25zdHJ1Y3Rvck9wdGlvbnMoQ3Rvci5zdXBlcik7XG4gICAgdmFyIGNhY2hlZFN1cGVyT3B0aW9ucyA9IEN0b3Iuc3VwZXJPcHRpb25zO1xuICAgIGlmIChzdXBlck9wdGlvbnMgIT09IGNhY2hlZFN1cGVyT3B0aW9ucykge1xuICAgICAgLy8gc3VwZXIgb3B0aW9uIGNoYW5nZWQsXG4gICAgICAvLyBuZWVkIHRvIHJlc29sdmUgbmV3IG9wdGlvbnMuXG4gICAgICBDdG9yLnN1cGVyT3B0aW9ucyA9IHN1cGVyT3B0aW9ucztcbiAgICAgIC8vIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgbGF0ZS1tb2RpZmllZC9hdHRhY2hlZCBvcHRpb25zICgjNDk3NilcbiAgICAgIHZhciBtb2RpZmllZE9wdGlvbnMgPSByZXNvbHZlTW9kaWZpZWRPcHRpb25zKEN0b3IpO1xuICAgICAgLy8gdXBkYXRlIGJhc2UgZXh0ZW5kIG9wdGlvbnNcbiAgICAgIGlmIChtb2RpZmllZE9wdGlvbnMpIHtcbiAgICAgICAgZXh0ZW5kKEN0b3IuZXh0ZW5kT3B0aW9ucywgbW9kaWZpZWRPcHRpb25zKTtcbiAgICAgIH1cbiAgICAgIG9wdGlvbnMgPSBDdG9yLm9wdGlvbnMgPSBtZXJnZU9wdGlvbnMoc3VwZXJPcHRpb25zLCBDdG9yLmV4dGVuZE9wdGlvbnMpO1xuICAgICAgaWYgKG9wdGlvbnMubmFtZSkge1xuICAgICAgICBvcHRpb25zLmNvbXBvbmVudHNbb3B0aW9ucy5uYW1lXSA9IEN0b3I7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBvcHRpb25zXG59XG5cbmZ1bmN0aW9uIHJlc29sdmVNb2RpZmllZE9wdGlvbnMgKEN0b3IpIHtcbiAgdmFyIG1vZGlmaWVkO1xuICB2YXIgbGF0ZXN0ID0gQ3Rvci5vcHRpb25zO1xuICB2YXIgc2VhbGVkID0gQ3Rvci5zZWFsZWRPcHRpb25zO1xuICBmb3IgKHZhciBrZXkgaW4gbGF0ZXN0KSB7XG4gICAgaWYgKGxhdGVzdFtrZXldICE9PSBzZWFsZWRba2V5XSkge1xuICAgICAgaWYgKCFtb2RpZmllZCkgeyBtb2RpZmllZCA9IHt9OyB9XG4gICAgICBtb2RpZmllZFtrZXldID0gbGF0ZXN0W2tleV07XG4gICAgfVxuICB9XG4gIHJldHVybiBtb2RpZmllZFxufVxuXG5mdW5jdGlvbiBWdWUgKG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFZ1ZSlcbiAgKSB7XG4gICAgd2FybignVnVlIGlzIGEgY29uc3RydWN0b3IgYW5kIHNob3VsZCBiZSBjYWxsZWQgd2l0aCB0aGUgYG5ld2Aga2V5d29yZCcpO1xuICB9XG4gIHRoaXMuX2luaXQob3B0aW9ucyk7XG59XG5cbmluaXRNaXhpbihWdWUpO1xuc3RhdGVNaXhpbihWdWUpO1xuZXZlbnRzTWl4aW4oVnVlKTtcbmxpZmVjeWNsZU1peGluKFZ1ZSk7XG5yZW5kZXJNaXhpbihWdWUpO1xuXG4vKiAgKi9cblxuZnVuY3Rpb24gaW5pdFVzZSAoVnVlKSB7XG4gIFZ1ZS51c2UgPSBmdW5jdGlvbiAocGx1Z2luKSB7XG4gICAgdmFyIGluc3RhbGxlZFBsdWdpbnMgPSAodGhpcy5faW5zdGFsbGVkUGx1Z2lucyB8fCAodGhpcy5faW5zdGFsbGVkUGx1Z2lucyA9IFtdKSk7XG4gICAgaWYgKGluc3RhbGxlZFBsdWdpbnMuaW5kZXhPZihwbHVnaW4pID4gLTEpIHtcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfVxuXG4gICAgLy8gYWRkaXRpb25hbCBwYXJhbWV0ZXJzXG4gICAgdmFyIGFyZ3MgPSB0b0FycmF5KGFyZ3VtZW50cywgMSk7XG4gICAgYXJncy51bnNoaWZ0KHRoaXMpO1xuICAgIGlmICh0eXBlb2YgcGx1Z2luLmluc3RhbGwgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHBsdWdpbi5pbnN0YWxsLmFwcGx5KHBsdWdpbiwgYXJncyk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgcGx1Z2luID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBwbHVnaW4uYXBwbHkobnVsbCwgYXJncyk7XG4gICAgfVxuICAgIGluc3RhbGxlZFBsdWdpbnMucHVzaChwbHVnaW4pO1xuICAgIHJldHVybiB0aGlzXG4gIH07XG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBpbml0TWl4aW4kMSAoVnVlKSB7XG4gIFZ1ZS5taXhpbiA9IGZ1bmN0aW9uIChtaXhpbikge1xuICAgIHRoaXMub3B0aW9ucyA9IG1lcmdlT3B0aW9ucyh0aGlzLm9wdGlvbnMsIG1peGluKTtcbiAgICByZXR1cm4gdGhpc1xuICB9O1xufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gaW5pdEV4dGVuZCAoVnVlKSB7XG4gIC8qKlxuICAgKiBFYWNoIGluc3RhbmNlIGNvbnN0cnVjdG9yLCBpbmNsdWRpbmcgVnVlLCBoYXMgYSB1bmlxdWVcbiAgICogY2lkLiBUaGlzIGVuYWJsZXMgdXMgdG8gY3JlYXRlIHdyYXBwZWQgXCJjaGlsZFxuICAgKiBjb25zdHJ1Y3RvcnNcIiBmb3IgcHJvdG90eXBhbCBpbmhlcml0YW5jZSBhbmQgY2FjaGUgdGhlbS5cbiAgICovXG4gIFZ1ZS5jaWQgPSAwO1xuICB2YXIgY2lkID0gMTtcblxuICAvKipcbiAgICogQ2xhc3MgaW5oZXJpdGFuY2VcbiAgICovXG4gIFZ1ZS5leHRlbmQgPSBmdW5jdGlvbiAoZXh0ZW5kT3B0aW9ucykge1xuICAgIGV4dGVuZE9wdGlvbnMgPSBleHRlbmRPcHRpb25zIHx8IHt9O1xuICAgIHZhciBTdXBlciA9IHRoaXM7XG4gICAgdmFyIFN1cGVySWQgPSBTdXBlci5jaWQ7XG4gICAgdmFyIGNhY2hlZEN0b3JzID0gZXh0ZW5kT3B0aW9ucy5fQ3RvciB8fCAoZXh0ZW5kT3B0aW9ucy5fQ3RvciA9IHt9KTtcbiAgICBpZiAoY2FjaGVkQ3RvcnNbU3VwZXJJZF0pIHtcbiAgICAgIHJldHVybiBjYWNoZWRDdG9yc1tTdXBlcklkXVxuICAgIH1cblxuICAgIHZhciBuYW1lID0gZXh0ZW5kT3B0aW9ucy5uYW1lIHx8IFN1cGVyLm9wdGlvbnMubmFtZTtcbiAgICBpZiAobmFtZSkge1xuICAgICAgdmFsaWRhdGVDb21wb25lbnROYW1lKG5hbWUpO1xuICAgIH1cblxuICAgIHZhciBTdWIgPSBmdW5jdGlvbiBWdWVDb21wb25lbnQgKG9wdGlvbnMpIHtcbiAgICAgIHRoaXMuX2luaXQob3B0aW9ucyk7XG4gICAgfTtcbiAgICBTdWIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTdXBlci5wcm90b3R5cGUpO1xuICAgIFN1Yi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTdWI7XG4gICAgU3ViLmNpZCA9IGNpZCsrO1xuICAgIFN1Yi5vcHRpb25zID0gbWVyZ2VPcHRpb25zKFxuICAgICAgU3VwZXIub3B0aW9ucyxcbiAgICAgIGV4dGVuZE9wdGlvbnNcbiAgICApO1xuICAgIFN1Ylsnc3VwZXInXSA9IFN1cGVyO1xuXG4gICAgLy8gRm9yIHByb3BzIGFuZCBjb21wdXRlZCBwcm9wZXJ0aWVzLCB3ZSBkZWZpbmUgdGhlIHByb3h5IGdldHRlcnMgb25cbiAgICAvLyB0aGUgVnVlIGluc3RhbmNlcyBhdCBleHRlbnNpb24gdGltZSwgb24gdGhlIGV4dGVuZGVkIHByb3RvdHlwZS4gVGhpc1xuICAgIC8vIGF2b2lkcyBPYmplY3QuZGVmaW5lUHJvcGVydHkgY2FsbHMgZm9yIGVhY2ggaW5zdGFuY2UgY3JlYXRlZC5cbiAgICBpZiAoU3ViLm9wdGlvbnMucHJvcHMpIHtcbiAgICAgIGluaXRQcm9wcyQxKFN1Yik7XG4gICAgfVxuICAgIGlmIChTdWIub3B0aW9ucy5jb21wdXRlZCkge1xuICAgICAgaW5pdENvbXB1dGVkJDEoU3ViKTtcbiAgICB9XG5cbiAgICAvLyBhbGxvdyBmdXJ0aGVyIGV4dGVuc2lvbi9taXhpbi9wbHVnaW4gdXNhZ2VcbiAgICBTdWIuZXh0ZW5kID0gU3VwZXIuZXh0ZW5kO1xuICAgIFN1Yi5taXhpbiA9IFN1cGVyLm1peGluO1xuICAgIFN1Yi51c2UgPSBTdXBlci51c2U7XG5cbiAgICAvLyBjcmVhdGUgYXNzZXQgcmVnaXN0ZXJzLCBzbyBleHRlbmRlZCBjbGFzc2VzXG4gICAgLy8gY2FuIGhhdmUgdGhlaXIgcHJpdmF0ZSBhc3NldHMgdG9vLlxuICAgIEFTU0VUX1RZUEVTLmZvckVhY2goZnVuY3Rpb24gKHR5cGUpIHtcbiAgICAgIFN1Ylt0eXBlXSA9IFN1cGVyW3R5cGVdO1xuICAgIH0pO1xuICAgIC8vIGVuYWJsZSByZWN1cnNpdmUgc2VsZi1sb29rdXBcbiAgICBpZiAobmFtZSkge1xuICAgICAgU3ViLm9wdGlvbnMuY29tcG9uZW50c1tuYW1lXSA9IFN1YjtcbiAgICB9XG5cbiAgICAvLyBrZWVwIGEgcmVmZXJlbmNlIHRvIHRoZSBzdXBlciBvcHRpb25zIGF0IGV4dGVuc2lvbiB0aW1lLlxuICAgIC8vIGxhdGVyIGF0IGluc3RhbnRpYXRpb24gd2UgY2FuIGNoZWNrIGlmIFN1cGVyJ3Mgb3B0aW9ucyBoYXZlXG4gICAgLy8gYmVlbiB1cGRhdGVkLlxuICAgIFN1Yi5zdXBlck9wdGlvbnMgPSBTdXBlci5vcHRpb25zO1xuICAgIFN1Yi5leHRlbmRPcHRpb25zID0gZXh0ZW5kT3B0aW9ucztcbiAgICBTdWIuc2VhbGVkT3B0aW9ucyA9IGV4dGVuZCh7fSwgU3ViLm9wdGlvbnMpO1xuXG4gICAgLy8gY2FjaGUgY29uc3RydWN0b3JcbiAgICBjYWNoZWRDdG9yc1tTdXBlcklkXSA9IFN1YjtcbiAgICByZXR1cm4gU3ViXG4gIH07XG59XG5cbmZ1bmN0aW9uIGluaXRQcm9wcyQxIChDb21wKSB7XG4gIHZhciBwcm9wcyA9IENvbXAub3B0aW9ucy5wcm9wcztcbiAgZm9yICh2YXIga2V5IGluIHByb3BzKSB7XG4gICAgcHJveHkoQ29tcC5wcm90b3R5cGUsIFwiX3Byb3BzXCIsIGtleSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW5pdENvbXB1dGVkJDEgKENvbXApIHtcbiAgdmFyIGNvbXB1dGVkID0gQ29tcC5vcHRpb25zLmNvbXB1dGVkO1xuICBmb3IgKHZhciBrZXkgaW4gY29tcHV0ZWQpIHtcbiAgICBkZWZpbmVDb21wdXRlZChDb21wLnByb3RvdHlwZSwga2V5LCBjb21wdXRlZFtrZXldKTtcbiAgfVxufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gaW5pdEFzc2V0UmVnaXN0ZXJzIChWdWUpIHtcbiAgLyoqXG4gICAqIENyZWF0ZSBhc3NldCByZWdpc3RyYXRpb24gbWV0aG9kcy5cbiAgICovXG4gIEFTU0VUX1RZUEVTLmZvckVhY2goZnVuY3Rpb24gKHR5cGUpIHtcbiAgICBWdWVbdHlwZV0gPSBmdW5jdGlvbiAoXG4gICAgICBpZCxcbiAgICAgIGRlZmluaXRpb25cbiAgICApIHtcbiAgICAgIGlmICghZGVmaW5pdGlvbikge1xuICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25zW3R5cGUgKyAncyddW2lkXVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgIGlmICh0eXBlID09PSAnY29tcG9uZW50Jykge1xuICAgICAgICAgIHZhbGlkYXRlQ29tcG9uZW50TmFtZShpZCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGUgPT09ICdjb21wb25lbnQnICYmIGlzUGxhaW5PYmplY3QoZGVmaW5pdGlvbikpIHtcbiAgICAgICAgICBkZWZpbml0aW9uLm5hbWUgPSBkZWZpbml0aW9uLm5hbWUgfHwgaWQ7XG4gICAgICAgICAgZGVmaW5pdGlvbiA9IHRoaXMub3B0aW9ucy5fYmFzZS5leHRlbmQoZGVmaW5pdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGUgPT09ICdkaXJlY3RpdmUnICYmIHR5cGVvZiBkZWZpbml0aW9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgZGVmaW5pdGlvbiA9IHsgYmluZDogZGVmaW5pdGlvbiwgdXBkYXRlOiBkZWZpbml0aW9uIH07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vcHRpb25zW3R5cGUgKyAncyddW2lkXSA9IGRlZmluaXRpb247XG4gICAgICAgIHJldHVybiBkZWZpbml0aW9uXG4gICAgICB9XG4gICAgfTtcbiAgfSk7XG59XG5cbi8qICAqL1xuXG5cblxuZnVuY3Rpb24gZ2V0Q29tcG9uZW50TmFtZSAob3B0cykge1xuICByZXR1cm4gb3B0cyAmJiAob3B0cy5DdG9yLm9wdGlvbnMubmFtZSB8fCBvcHRzLnRhZylcbn1cblxuZnVuY3Rpb24gbWF0Y2hlcyAocGF0dGVybiwgbmFtZSkge1xuICBpZiAoQXJyYXkuaXNBcnJheShwYXR0ZXJuKSkge1xuICAgIHJldHVybiBwYXR0ZXJuLmluZGV4T2YobmFtZSkgPiAtMVxuICB9IGVsc2UgaWYgKHR5cGVvZiBwYXR0ZXJuID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBwYXR0ZXJuLnNwbGl0KCcsJykuaW5kZXhPZihuYW1lKSA+IC0xXG4gIH0gZWxzZSBpZiAoaXNSZWdFeHAocGF0dGVybikpIHtcbiAgICByZXR1cm4gcGF0dGVybi50ZXN0KG5hbWUpXG4gIH1cbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgcmV0dXJuIGZhbHNlXG59XG5cbmZ1bmN0aW9uIHBydW5lQ2FjaGUgKGtlZXBBbGl2ZUluc3RhbmNlLCBmaWx0ZXIpIHtcbiAgdmFyIGNhY2hlID0ga2VlcEFsaXZlSW5zdGFuY2UuY2FjaGU7XG4gIHZhciBrZXlzID0ga2VlcEFsaXZlSW5zdGFuY2Uua2V5cztcbiAgdmFyIF92bm9kZSA9IGtlZXBBbGl2ZUluc3RhbmNlLl92bm9kZTtcbiAgZm9yICh2YXIga2V5IGluIGNhY2hlKSB7XG4gICAgdmFyIGNhY2hlZE5vZGUgPSBjYWNoZVtrZXldO1xuICAgIGlmIChjYWNoZWROb2RlKSB7XG4gICAgICB2YXIgbmFtZSA9IGdldENvbXBvbmVudE5hbWUoY2FjaGVkTm9kZS5jb21wb25lbnRPcHRpb25zKTtcbiAgICAgIGlmIChuYW1lICYmICFmaWx0ZXIobmFtZSkpIHtcbiAgICAgICAgcHJ1bmVDYWNoZUVudHJ5KGNhY2hlLCBrZXksIGtleXMsIF92bm9kZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHBydW5lQ2FjaGVFbnRyeSAoXG4gIGNhY2hlLFxuICBrZXksXG4gIGtleXMsXG4gIGN1cnJlbnRcbikge1xuICB2YXIgY2FjaGVkJCQxID0gY2FjaGVba2V5XTtcbiAgaWYgKGNhY2hlZCQkMSAmJiAoIWN1cnJlbnQgfHwgY2FjaGVkJCQxLnRhZyAhPT0gY3VycmVudC50YWcpKSB7XG4gICAgY2FjaGVkJCQxLmNvbXBvbmVudEluc3RhbmNlLiRkZXN0cm95KCk7XG4gIH1cbiAgY2FjaGVba2V5XSA9IG51bGw7XG4gIHJlbW92ZShrZXlzLCBrZXkpO1xufVxuXG52YXIgcGF0dGVyblR5cGVzID0gW1N0cmluZywgUmVnRXhwLCBBcnJheV07XG5cbnZhciBLZWVwQWxpdmUgPSB7XG4gIG5hbWU6ICdrZWVwLWFsaXZlJyxcbiAgYWJzdHJhY3Q6IHRydWUsXG5cbiAgcHJvcHM6IHtcbiAgICBpbmNsdWRlOiBwYXR0ZXJuVHlwZXMsXG4gICAgZXhjbHVkZTogcGF0dGVyblR5cGVzLFxuICAgIG1heDogW1N0cmluZywgTnVtYmVyXVxuICB9LFxuXG4gIGNyZWF0ZWQ6IGZ1bmN0aW9uIGNyZWF0ZWQgKCkge1xuICAgIHRoaXMuY2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHRoaXMua2V5cyA9IFtdO1xuICB9LFxuXG4gIGRlc3Ryb3llZDogZnVuY3Rpb24gZGVzdHJveWVkICgpIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5jYWNoZSkge1xuICAgICAgcHJ1bmVDYWNoZUVudHJ5KHRoaXMuY2FjaGUsIGtleSwgdGhpcy5rZXlzKTtcbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZDogZnVuY3Rpb24gbW91bnRlZCAoKSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICB0aGlzLiR3YXRjaCgnaW5jbHVkZScsIGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgIHBydW5lQ2FjaGUodGhpcyQxLCBmdW5jdGlvbiAobmFtZSkgeyByZXR1cm4gbWF0Y2hlcyh2YWwsIG5hbWUpOyB9KTtcbiAgICB9KTtcbiAgICB0aGlzLiR3YXRjaCgnZXhjbHVkZScsIGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgIHBydW5lQ2FjaGUodGhpcyQxLCBmdW5jdGlvbiAobmFtZSkgeyByZXR1cm4gIW1hdGNoZXModmFsLCBuYW1lKTsgfSk7XG4gICAgfSk7XG4gIH0sXG5cbiAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIgKCkge1xuICAgIHZhciBzbG90ID0gdGhpcy4kc2xvdHMuZGVmYXVsdDtcbiAgICB2YXIgdm5vZGUgPSBnZXRGaXJzdENvbXBvbmVudENoaWxkKHNsb3QpO1xuICAgIHZhciBjb21wb25lbnRPcHRpb25zID0gdm5vZGUgJiYgdm5vZGUuY29tcG9uZW50T3B0aW9ucztcbiAgICBpZiAoY29tcG9uZW50T3B0aW9ucykge1xuICAgICAgLy8gY2hlY2sgcGF0dGVyblxuICAgICAgdmFyIG5hbWUgPSBnZXRDb21wb25lbnROYW1lKGNvbXBvbmVudE9wdGlvbnMpO1xuICAgICAgdmFyIHJlZiA9IHRoaXM7XG4gICAgICB2YXIgaW5jbHVkZSA9IHJlZi5pbmNsdWRlO1xuICAgICAgdmFyIGV4Y2x1ZGUgPSByZWYuZXhjbHVkZTtcbiAgICAgIGlmIChcbiAgICAgICAgLy8gbm90IGluY2x1ZGVkXG4gICAgICAgIChpbmNsdWRlICYmICghbmFtZSB8fCAhbWF0Y2hlcyhpbmNsdWRlLCBuYW1lKSkpIHx8XG4gICAgICAgIC8vIGV4Y2x1ZGVkXG4gICAgICAgIChleGNsdWRlICYmIG5hbWUgJiYgbWF0Y2hlcyhleGNsdWRlLCBuYW1lKSlcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gdm5vZGVcbiAgICAgIH1cblxuICAgICAgdmFyIHJlZiQxID0gdGhpcztcbiAgICAgIHZhciBjYWNoZSA9IHJlZiQxLmNhY2hlO1xuICAgICAgdmFyIGtleXMgPSByZWYkMS5rZXlzO1xuICAgICAgdmFyIGtleSA9IHZub2RlLmtleSA9PSBudWxsXG4gICAgICAgIC8vIHNhbWUgY29uc3RydWN0b3IgbWF5IGdldCByZWdpc3RlcmVkIGFzIGRpZmZlcmVudCBsb2NhbCBjb21wb25lbnRzXG4gICAgICAgIC8vIHNvIGNpZCBhbG9uZSBpcyBub3QgZW5vdWdoICgjMzI2OSlcbiAgICAgICAgPyBjb21wb25lbnRPcHRpb25zLkN0b3IuY2lkICsgKGNvbXBvbmVudE9wdGlvbnMudGFnID8gKFwiOjpcIiArIChjb21wb25lbnRPcHRpb25zLnRhZykpIDogJycpXG4gICAgICAgIDogdm5vZGUua2V5O1xuICAgICAgaWYgKGNhY2hlW2tleV0pIHtcbiAgICAgICAgdm5vZGUuY29tcG9uZW50SW5zdGFuY2UgPSBjYWNoZVtrZXldLmNvbXBvbmVudEluc3RhbmNlO1xuICAgICAgICAvLyBtYWtlIGN1cnJlbnQga2V5IGZyZXNoZXN0XG4gICAgICAgIHJlbW92ZShrZXlzLCBrZXkpO1xuICAgICAgICBrZXlzLnB1c2goa2V5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhY2hlW2tleV0gPSB2bm9kZTtcbiAgICAgICAga2V5cy5wdXNoKGtleSk7XG4gICAgICAgIC8vIHBydW5lIG9sZGVzdCBlbnRyeVxuICAgICAgICBpZiAodGhpcy5tYXggJiYga2V5cy5sZW5ndGggPiBwYXJzZUludCh0aGlzLm1heCkpIHtcbiAgICAgICAgICBwcnVuZUNhY2hlRW50cnkoY2FjaGUsIGtleXNbMF0sIGtleXMsIHRoaXMuX3Zub2RlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2bm9kZS5kYXRhLmtlZXBBbGl2ZSA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiB2bm9kZSB8fCAoc2xvdCAmJiBzbG90WzBdKVxuICB9XG59O1xuXG52YXIgYnVpbHRJbkNvbXBvbmVudHMgPSB7XG4gIEtlZXBBbGl2ZTogS2VlcEFsaXZlXG59O1xuXG4vKiAgKi9cblxuZnVuY3Rpb24gaW5pdEdsb2JhbEFQSSAoVnVlKSB7XG4gIC8vIGNvbmZpZ1xuICB2YXIgY29uZmlnRGVmID0ge307XG4gIGNvbmZpZ0RlZi5nZXQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBjb25maWc7IH07XG4gIHtcbiAgICBjb25maWdEZWYuc2V0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgd2FybihcbiAgICAgICAgJ0RvIG5vdCByZXBsYWNlIHRoZSBWdWUuY29uZmlnIG9iamVjdCwgc2V0IGluZGl2aWR1YWwgZmllbGRzIGluc3RlYWQuJ1xuICAgICAgKTtcbiAgICB9O1xuICB9XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShWdWUsICdjb25maWcnLCBjb25maWdEZWYpO1xuXG4gIC8vIGV4cG9zZWQgdXRpbCBtZXRob2RzLlxuICAvLyBOT1RFOiB0aGVzZSBhcmUgbm90IGNvbnNpZGVyZWQgcGFydCBvZiB0aGUgcHVibGljIEFQSSAtIGF2b2lkIHJlbHlpbmcgb25cbiAgLy8gdGhlbSB1bmxlc3MgeW91IGFyZSBhd2FyZSBvZiB0aGUgcmlzay5cbiAgVnVlLnV0aWwgPSB7XG4gICAgd2Fybjogd2FybixcbiAgICBleHRlbmQ6IGV4dGVuZCxcbiAgICBtZXJnZU9wdGlvbnM6IG1lcmdlT3B0aW9ucyxcbiAgICBkZWZpbmVSZWFjdGl2ZTogZGVmaW5lUmVhY3RpdmUkJDFcbiAgfTtcblxuICBWdWUuc2V0ID0gc2V0O1xuICBWdWUuZGVsZXRlID0gZGVsO1xuICBWdWUubmV4dFRpY2sgPSBuZXh0VGljaztcblxuICAvLyAyLjYgZXhwbGljaXQgb2JzZXJ2YWJsZSBBUElcbiAgVnVlLm9ic2VydmFibGUgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgb2JzZXJ2ZShvYmopO1xuICAgIHJldHVybiBvYmpcbiAgfTtcblxuICBWdWUub3B0aW9ucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIEFTU0VUX1RZUEVTLmZvckVhY2goZnVuY3Rpb24gKHR5cGUpIHtcbiAgICBWdWUub3B0aW9uc1t0eXBlICsgJ3MnXSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIH0pO1xuXG4gIC8vIHRoaXMgaXMgdXNlZCB0byBpZGVudGlmeSB0aGUgXCJiYXNlXCIgY29uc3RydWN0b3IgdG8gZXh0ZW5kIGFsbCBwbGFpbi1vYmplY3RcbiAgLy8gY29tcG9uZW50cyB3aXRoIGluIFdlZXgncyBtdWx0aS1pbnN0YW5jZSBzY2VuYXJpb3MuXG4gIFZ1ZS5vcHRpb25zLl9iYXNlID0gVnVlO1xuXG4gIGV4dGVuZChWdWUub3B0aW9ucy5jb21wb25lbnRzLCBidWlsdEluQ29tcG9uZW50cyk7XG5cbiAgaW5pdFVzZShWdWUpO1xuICBpbml0TWl4aW4kMShWdWUpO1xuICBpbml0RXh0ZW5kKFZ1ZSk7XG4gIGluaXRBc3NldFJlZ2lzdGVycyhWdWUpO1xufVxuXG5pbml0R2xvYmFsQVBJKFZ1ZSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShWdWUucHJvdG90eXBlLCAnJGlzU2VydmVyJywge1xuICBnZXQ6IGlzU2VydmVyUmVuZGVyaW5nXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFZ1ZS5wcm90b3R5cGUsICckc3NyQ29udGV4dCcsIHtcbiAgZ2V0OiBmdW5jdGlvbiBnZXQgKCkge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgcmV0dXJuIHRoaXMuJHZub2RlICYmIHRoaXMuJHZub2RlLnNzckNvbnRleHRcbiAgfVxufSk7XG5cbi8vIGV4cG9zZSBGdW5jdGlvbmFsUmVuZGVyQ29udGV4dCBmb3Igc3NyIHJ1bnRpbWUgaGVscGVyIGluc3RhbGxhdGlvblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFZ1ZSwgJ0Z1bmN0aW9uYWxSZW5kZXJDb250ZXh0Jywge1xuICB2YWx1ZTogRnVuY3Rpb25hbFJlbmRlckNvbnRleHRcbn0pO1xuXG5WdWUudmVyc2lvbiA9ICcyLjYuMTAnO1xuXG4vKiAgKi9cblxuLy8gdGhlc2UgYXJlIHJlc2VydmVkIGZvciB3ZWIgYmVjYXVzZSB0aGV5IGFyZSBkaXJlY3RseSBjb21waWxlZCBhd2F5XG4vLyBkdXJpbmcgdGVtcGxhdGUgY29tcGlsYXRpb25cbnZhciBpc1Jlc2VydmVkQXR0ciA9IG1ha2VNYXAoJ3N0eWxlLGNsYXNzJyk7XG5cbi8vIGF0dHJpYnV0ZXMgdGhhdCBzaG91bGQgYmUgdXNpbmcgcHJvcHMgZm9yIGJpbmRpbmdcbnZhciBhY2NlcHRWYWx1ZSA9IG1ha2VNYXAoJ2lucHV0LHRleHRhcmVhLG9wdGlvbixzZWxlY3QscHJvZ3Jlc3MnKTtcbnZhciBtdXN0VXNlUHJvcCA9IGZ1bmN0aW9uICh0YWcsIHR5cGUsIGF0dHIpIHtcbiAgcmV0dXJuIChcbiAgICAoYXR0ciA9PT0gJ3ZhbHVlJyAmJiBhY2NlcHRWYWx1ZSh0YWcpKSAmJiB0eXBlICE9PSAnYnV0dG9uJyB8fFxuICAgIChhdHRyID09PSAnc2VsZWN0ZWQnICYmIHRhZyA9PT0gJ29wdGlvbicpIHx8XG4gICAgKGF0dHIgPT09ICdjaGVja2VkJyAmJiB0YWcgPT09ICdpbnB1dCcpIHx8XG4gICAgKGF0dHIgPT09ICdtdXRlZCcgJiYgdGFnID09PSAndmlkZW8nKVxuICApXG59O1xuXG52YXIgaXNFbnVtZXJhdGVkQXR0ciA9IG1ha2VNYXAoJ2NvbnRlbnRlZGl0YWJsZSxkcmFnZ2FibGUsc3BlbGxjaGVjaycpO1xuXG52YXIgaXNWYWxpZENvbnRlbnRFZGl0YWJsZVZhbHVlID0gbWFrZU1hcCgnZXZlbnRzLGNhcmV0LHR5cGluZyxwbGFpbnRleHQtb25seScpO1xuXG52YXIgY29udmVydEVudW1lcmF0ZWRWYWx1ZSA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHJldHVybiBpc0ZhbHN5QXR0clZhbHVlKHZhbHVlKSB8fCB2YWx1ZSA9PT0gJ2ZhbHNlJ1xuICAgID8gJ2ZhbHNlJ1xuICAgIC8vIGFsbG93IGFyYml0cmFyeSBzdHJpbmcgdmFsdWUgZm9yIGNvbnRlbnRlZGl0YWJsZVxuICAgIDoga2V5ID09PSAnY29udGVudGVkaXRhYmxlJyAmJiBpc1ZhbGlkQ29udGVudEVkaXRhYmxlVmFsdWUodmFsdWUpXG4gICAgICA/IHZhbHVlXG4gICAgICA6ICd0cnVlJ1xufTtcblxudmFyIGlzQm9vbGVhbkF0dHIgPSBtYWtlTWFwKFxuICAnYWxsb3dmdWxsc2NyZWVuLGFzeW5jLGF1dG9mb2N1cyxhdXRvcGxheSxjaGVja2VkLGNvbXBhY3QsY29udHJvbHMsZGVjbGFyZSwnICtcbiAgJ2RlZmF1bHQsZGVmYXVsdGNoZWNrZWQsZGVmYXVsdG11dGVkLGRlZmF1bHRzZWxlY3RlZCxkZWZlcixkaXNhYmxlZCwnICtcbiAgJ2VuYWJsZWQsZm9ybW5vdmFsaWRhdGUsaGlkZGVuLGluZGV0ZXJtaW5hdGUsaW5lcnQsaXNtYXAsaXRlbXNjb3BlLGxvb3AsbXVsdGlwbGUsJyArXG4gICdtdXRlZCxub2hyZWYsbm9yZXNpemUsbm9zaGFkZSxub3ZhbGlkYXRlLG5vd3JhcCxvcGVuLHBhdXNlb25leGl0LHJlYWRvbmx5LCcgK1xuICAncmVxdWlyZWQscmV2ZXJzZWQsc2NvcGVkLHNlYW1sZXNzLHNlbGVjdGVkLHNvcnRhYmxlLHRyYW5zbGF0ZSwnICtcbiAgJ3RydWVzcGVlZCx0eXBlbXVzdG1hdGNoLHZpc2libGUnXG4pO1xuXG52YXIgeGxpbmtOUyA9ICdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rJztcblxudmFyIGlzWGxpbmsgPSBmdW5jdGlvbiAobmFtZSkge1xuICByZXR1cm4gbmFtZS5jaGFyQXQoNSkgPT09ICc6JyAmJiBuYW1lLnNsaWNlKDAsIDUpID09PSAneGxpbmsnXG59O1xuXG52YXIgZ2V0WGxpbmtQcm9wID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgcmV0dXJuIGlzWGxpbmsobmFtZSkgPyBuYW1lLnNsaWNlKDYsIG5hbWUubGVuZ3RoKSA6ICcnXG59O1xuXG52YXIgaXNGYWxzeUF0dHJWYWx1ZSA9IGZ1bmN0aW9uICh2YWwpIHtcbiAgcmV0dXJuIHZhbCA9PSBudWxsIHx8IHZhbCA9PT0gZmFsc2Vcbn07XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBnZW5DbGFzc0ZvclZub2RlICh2bm9kZSkge1xuICB2YXIgZGF0YSA9IHZub2RlLmRhdGE7XG4gIHZhciBwYXJlbnROb2RlID0gdm5vZGU7XG4gIHZhciBjaGlsZE5vZGUgPSB2bm9kZTtcbiAgd2hpbGUgKGlzRGVmKGNoaWxkTm9kZS5jb21wb25lbnRJbnN0YW5jZSkpIHtcbiAgICBjaGlsZE5vZGUgPSBjaGlsZE5vZGUuY29tcG9uZW50SW5zdGFuY2UuX3Zub2RlO1xuICAgIGlmIChjaGlsZE5vZGUgJiYgY2hpbGROb2RlLmRhdGEpIHtcbiAgICAgIGRhdGEgPSBtZXJnZUNsYXNzRGF0YShjaGlsZE5vZGUuZGF0YSwgZGF0YSk7XG4gICAgfVxuICB9XG4gIHdoaWxlIChpc0RlZihwYXJlbnROb2RlID0gcGFyZW50Tm9kZS5wYXJlbnQpKSB7XG4gICAgaWYgKHBhcmVudE5vZGUgJiYgcGFyZW50Tm9kZS5kYXRhKSB7XG4gICAgICBkYXRhID0gbWVyZ2VDbGFzc0RhdGEoZGF0YSwgcGFyZW50Tm9kZS5kYXRhKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlbmRlckNsYXNzKGRhdGEuc3RhdGljQ2xhc3MsIGRhdGEuY2xhc3MpXG59XG5cbmZ1bmN0aW9uIG1lcmdlQ2xhc3NEYXRhIChjaGlsZCwgcGFyZW50KSB7XG4gIHJldHVybiB7XG4gICAgc3RhdGljQ2xhc3M6IGNvbmNhdChjaGlsZC5zdGF0aWNDbGFzcywgcGFyZW50LnN0YXRpY0NsYXNzKSxcbiAgICBjbGFzczogaXNEZWYoY2hpbGQuY2xhc3MpXG4gICAgICA/IFtjaGlsZC5jbGFzcywgcGFyZW50LmNsYXNzXVxuICAgICAgOiBwYXJlbnQuY2xhc3NcbiAgfVxufVxuXG5mdW5jdGlvbiByZW5kZXJDbGFzcyAoXG4gIHN0YXRpY0NsYXNzLFxuICBkeW5hbWljQ2xhc3Ncbikge1xuICBpZiAoaXNEZWYoc3RhdGljQ2xhc3MpIHx8IGlzRGVmKGR5bmFtaWNDbGFzcykpIHtcbiAgICByZXR1cm4gY29uY2F0KHN0YXRpY0NsYXNzLCBzdHJpbmdpZnlDbGFzcyhkeW5hbWljQ2xhc3MpKVxuICB9XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIHJldHVybiAnJ1xufVxuXG5mdW5jdGlvbiBjb25jYXQgKGEsIGIpIHtcbiAgcmV0dXJuIGEgPyBiID8gKGEgKyAnICcgKyBiKSA6IGEgOiAoYiB8fCAnJylcbn1cblxuZnVuY3Rpb24gc3RyaW5naWZ5Q2xhc3MgKHZhbHVlKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiBzdHJpbmdpZnlBcnJheSh2YWx1ZSlcbiAgfVxuICBpZiAoaXNPYmplY3QodmFsdWUpKSB7XG4gICAgcmV0dXJuIHN0cmluZ2lmeU9iamVjdCh2YWx1ZSlcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB2YWx1ZVxuICB9XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIHJldHVybiAnJ1xufVxuXG5mdW5jdGlvbiBzdHJpbmdpZnlBcnJheSAodmFsdWUpIHtcbiAgdmFyIHJlcyA9ICcnO1xuICB2YXIgc3RyaW5naWZpZWQ7XG4gIGZvciAodmFyIGkgPSAwLCBsID0gdmFsdWUubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgaWYgKGlzRGVmKHN0cmluZ2lmaWVkID0gc3RyaW5naWZ5Q2xhc3ModmFsdWVbaV0pKSAmJiBzdHJpbmdpZmllZCAhPT0gJycpIHtcbiAgICAgIGlmIChyZXMpIHsgcmVzICs9ICcgJzsgfVxuICAgICAgcmVzICs9IHN0cmluZ2lmaWVkO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbmZ1bmN0aW9uIHN0cmluZ2lmeU9iamVjdCAodmFsdWUpIHtcbiAgdmFyIHJlcyA9ICcnO1xuICBmb3IgKHZhciBrZXkgaW4gdmFsdWUpIHtcbiAgICBpZiAodmFsdWVba2V5XSkge1xuICAgICAgaWYgKHJlcykgeyByZXMgKz0gJyAnOyB9XG4gICAgICByZXMgKz0ga2V5O1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbi8qICAqL1xuXG52YXIgbmFtZXNwYWNlTWFwID0ge1xuICBzdmc6ICdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsXG4gIG1hdGg6ICdodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MJ1xufTtcblxudmFyIGlzSFRNTFRhZyA9IG1ha2VNYXAoXG4gICdodG1sLGJvZHksYmFzZSxoZWFkLGxpbmssbWV0YSxzdHlsZSx0aXRsZSwnICtcbiAgJ2FkZHJlc3MsYXJ0aWNsZSxhc2lkZSxmb290ZXIsaGVhZGVyLGgxLGgyLGgzLGg0LGg1LGg2LGhncm91cCxuYXYsc2VjdGlvbiwnICtcbiAgJ2RpdixkZCxkbCxkdCxmaWdjYXB0aW9uLGZpZ3VyZSxwaWN0dXJlLGhyLGltZyxsaSxtYWluLG9sLHAscHJlLHVsLCcgK1xuICAnYSxiLGFiYnIsYmRpLGJkbyxicixjaXRlLGNvZGUsZGF0YSxkZm4sZW0saSxrYmQsbWFyayxxLHJwLHJ0LHJ0YyxydWJ5LCcgK1xuICAncyxzYW1wLHNtYWxsLHNwYW4sc3Ryb25nLHN1YixzdXAsdGltZSx1LHZhcix3YnIsYXJlYSxhdWRpbyxtYXAsdHJhY2ssdmlkZW8sJyArXG4gICdlbWJlZCxvYmplY3QscGFyYW0sc291cmNlLGNhbnZhcyxzY3JpcHQsbm9zY3JpcHQsZGVsLGlucywnICtcbiAgJ2NhcHRpb24sY29sLGNvbGdyb3VwLHRhYmxlLHRoZWFkLHRib2R5LHRkLHRoLHRyLCcgK1xuICAnYnV0dG9uLGRhdGFsaXN0LGZpZWxkc2V0LGZvcm0saW5wdXQsbGFiZWwsbGVnZW5kLG1ldGVyLG9wdGdyb3VwLG9wdGlvbiwnICtcbiAgJ291dHB1dCxwcm9ncmVzcyxzZWxlY3QsdGV4dGFyZWEsJyArXG4gICdkZXRhaWxzLGRpYWxvZyxtZW51LG1lbnVpdGVtLHN1bW1hcnksJyArXG4gICdjb250ZW50LGVsZW1lbnQsc2hhZG93LHRlbXBsYXRlLGJsb2NrcXVvdGUsaWZyYW1lLHRmb290J1xuKTtcblxuLy8gdGhpcyBtYXAgaXMgaW50ZW50aW9uYWxseSBzZWxlY3RpdmUsIG9ubHkgY292ZXJpbmcgU1ZHIGVsZW1lbnRzIHRoYXQgbWF5XG4vLyBjb250YWluIGNoaWxkIGVsZW1lbnRzLlxudmFyIGlzU1ZHID0gbWFrZU1hcChcbiAgJ3N2ZyxhbmltYXRlLGNpcmNsZSxjbGlwcGF0aCxjdXJzb3IsZGVmcyxkZXNjLGVsbGlwc2UsZmlsdGVyLGZvbnQtZmFjZSwnICtcbiAgJ2ZvcmVpZ25PYmplY3QsZyxnbHlwaCxpbWFnZSxsaW5lLG1hcmtlcixtYXNrLG1pc3NpbmctZ2x5cGgscGF0aCxwYXR0ZXJuLCcgK1xuICAncG9seWdvbixwb2x5bGluZSxyZWN0LHN3aXRjaCxzeW1ib2wsdGV4dCx0ZXh0cGF0aCx0c3Bhbix1c2UsdmlldycsXG4gIHRydWVcbik7XG5cbnZhciBpc1ByZVRhZyA9IGZ1bmN0aW9uICh0YWcpIHsgcmV0dXJuIHRhZyA9PT0gJ3ByZSc7IH07XG5cbnZhciBpc1Jlc2VydmVkVGFnID0gZnVuY3Rpb24gKHRhZykge1xuICByZXR1cm4gaXNIVE1MVGFnKHRhZykgfHwgaXNTVkcodGFnKVxufTtcblxuZnVuY3Rpb24gZ2V0VGFnTmFtZXNwYWNlICh0YWcpIHtcbiAgaWYgKGlzU1ZHKHRhZykpIHtcbiAgICByZXR1cm4gJ3N2ZydcbiAgfVxuICAvLyBiYXNpYyBzdXBwb3J0IGZvciBNYXRoTUxcbiAgLy8gbm90ZSBpdCBkb2Vzbid0IHN1cHBvcnQgb3RoZXIgTWF0aE1MIGVsZW1lbnRzIGJlaW5nIGNvbXBvbmVudCByb290c1xuICBpZiAodGFnID09PSAnbWF0aCcpIHtcbiAgICByZXR1cm4gJ21hdGgnXG4gIH1cbn1cblxudmFyIHVua25vd25FbGVtZW50Q2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuZnVuY3Rpb24gaXNVbmtub3duRWxlbWVudCAodGFnKSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoIWluQnJvd3Nlcikge1xuICAgIHJldHVybiB0cnVlXG4gIH1cbiAgaWYgKGlzUmVzZXJ2ZWRUYWcodGFnKSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIHRhZyA9IHRhZy50b0xvd2VyQ2FzZSgpO1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKHVua25vd25FbGVtZW50Q2FjaGVbdGFnXSAhPSBudWxsKSB7XG4gICAgcmV0dXJuIHVua25vd25FbGVtZW50Q2FjaGVbdGFnXVxuICB9XG4gIHZhciBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnKTtcbiAgaWYgKHRhZy5pbmRleE9mKCctJykgPiAtMSkge1xuICAgIC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzI4MjEwMzY0LzEwNzAyNDRcbiAgICByZXR1cm4gKHVua25vd25FbGVtZW50Q2FjaGVbdGFnXSA9IChcbiAgICAgIGVsLmNvbnN0cnVjdG9yID09PSB3aW5kb3cuSFRNTFVua25vd25FbGVtZW50IHx8XG4gICAgICBlbC5jb25zdHJ1Y3RvciA9PT0gd2luZG93LkhUTUxFbGVtZW50XG4gICAgKSlcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gKHVua25vd25FbGVtZW50Q2FjaGVbdGFnXSA9IC9IVE1MVW5rbm93bkVsZW1lbnQvLnRlc3QoZWwudG9TdHJpbmcoKSkpXG4gIH1cbn1cblxudmFyIGlzVGV4dElucHV0VHlwZSA9IG1ha2VNYXAoJ3RleHQsbnVtYmVyLHBhc3N3b3JkLHNlYXJjaCxlbWFpbCx0ZWwsdXJsJyk7XG5cbi8qICAqL1xuXG4vKipcbiAqIFF1ZXJ5IGFuIGVsZW1lbnQgc2VsZWN0b3IgaWYgaXQncyBub3QgYW4gZWxlbWVudCBhbHJlYWR5LlxuICovXG5mdW5jdGlvbiBxdWVyeSAoZWwpIHtcbiAgaWYgKHR5cGVvZiBlbCA9PT0gJ3N0cmluZycpIHtcbiAgICB2YXIgc2VsZWN0ZWQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGVsKTtcbiAgICBpZiAoIXNlbGVjdGVkKSB7XG4gICAgICB3YXJuKFxuICAgICAgICAnQ2Fubm90IGZpbmQgZWxlbWVudDogJyArIGVsXG4gICAgICApO1xuICAgICAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpXG4gICAgfVxuICAgIHJldHVybiBzZWxlY3RlZFxuICB9IGVsc2Uge1xuICAgIHJldHVybiBlbFxuICB9XG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBjcmVhdGVFbGVtZW50JDEgKHRhZ05hbWUsIHZub2RlKSB7XG4gIHZhciBlbG0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpO1xuICBpZiAodGFnTmFtZSAhPT0gJ3NlbGVjdCcpIHtcbiAgICByZXR1cm4gZWxtXG4gIH1cbiAgLy8gZmFsc2Ugb3IgbnVsbCB3aWxsIHJlbW92ZSB0aGUgYXR0cmlidXRlIGJ1dCB1bmRlZmluZWQgd2lsbCBub3RcbiAgaWYgKHZub2RlLmRhdGEgJiYgdm5vZGUuZGF0YS5hdHRycyAmJiB2bm9kZS5kYXRhLmF0dHJzLm11bHRpcGxlICE9PSB1bmRlZmluZWQpIHtcbiAgICBlbG0uc2V0QXR0cmlidXRlKCdtdWx0aXBsZScsICdtdWx0aXBsZScpO1xuICB9XG4gIHJldHVybiBlbG1cbn1cblxuZnVuY3Rpb24gY3JlYXRlRWxlbWVudE5TIChuYW1lc3BhY2UsIHRhZ05hbWUpIHtcbiAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhuYW1lc3BhY2VNYXBbbmFtZXNwYWNlXSwgdGFnTmFtZSlcbn1cblxuZnVuY3Rpb24gY3JlYXRlVGV4dE5vZGUgKHRleHQpIHtcbiAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRleHQpXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUNvbW1lbnQgKHRleHQpIHtcbiAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZUNvbW1lbnQodGV4dClcbn1cblxuZnVuY3Rpb24gaW5zZXJ0QmVmb3JlIChwYXJlbnROb2RlLCBuZXdOb2RlLCByZWZlcmVuY2VOb2RlKSB7XG4gIHBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKG5ld05vZGUsIHJlZmVyZW5jZU5vZGUpO1xufVxuXG5mdW5jdGlvbiByZW1vdmVDaGlsZCAobm9kZSwgY2hpbGQpIHtcbiAgbm9kZS5yZW1vdmVDaGlsZChjaGlsZCk7XG59XG5cbmZ1bmN0aW9uIGFwcGVuZENoaWxkIChub2RlLCBjaGlsZCkge1xuICBub2RlLmFwcGVuZENoaWxkKGNoaWxkKTtcbn1cblxuZnVuY3Rpb24gcGFyZW50Tm9kZSAobm9kZSkge1xuICByZXR1cm4gbm9kZS5wYXJlbnROb2RlXG59XG5cbmZ1bmN0aW9uIG5leHRTaWJsaW5nIChub2RlKSB7XG4gIHJldHVybiBub2RlLm5leHRTaWJsaW5nXG59XG5cbmZ1bmN0aW9uIHRhZ05hbWUgKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUudGFnTmFtZVxufVxuXG5mdW5jdGlvbiBzZXRUZXh0Q29udGVudCAobm9kZSwgdGV4dCkge1xuICBub2RlLnRleHRDb250ZW50ID0gdGV4dDtcbn1cblxuZnVuY3Rpb24gc2V0U3R5bGVTY29wZSAobm9kZSwgc2NvcGVJZCkge1xuICBub2RlLnNldEF0dHJpYnV0ZShzY29wZUlkLCAnJyk7XG59XG5cbnZhciBub2RlT3BzID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICBjcmVhdGVFbGVtZW50OiBjcmVhdGVFbGVtZW50JDEsXG4gIGNyZWF0ZUVsZW1lbnROUzogY3JlYXRlRWxlbWVudE5TLFxuICBjcmVhdGVUZXh0Tm9kZTogY3JlYXRlVGV4dE5vZGUsXG4gIGNyZWF0ZUNvbW1lbnQ6IGNyZWF0ZUNvbW1lbnQsXG4gIGluc2VydEJlZm9yZTogaW5zZXJ0QmVmb3JlLFxuICByZW1vdmVDaGlsZDogcmVtb3ZlQ2hpbGQsXG4gIGFwcGVuZENoaWxkOiBhcHBlbmRDaGlsZCxcbiAgcGFyZW50Tm9kZTogcGFyZW50Tm9kZSxcbiAgbmV4dFNpYmxpbmc6IG5leHRTaWJsaW5nLFxuICB0YWdOYW1lOiB0YWdOYW1lLFxuICBzZXRUZXh0Q29udGVudDogc2V0VGV4dENvbnRlbnQsXG4gIHNldFN0eWxlU2NvcGU6IHNldFN0eWxlU2NvcGVcbn0pO1xuXG4vKiAgKi9cblxudmFyIHJlZiA9IHtcbiAgY3JlYXRlOiBmdW5jdGlvbiBjcmVhdGUgKF8sIHZub2RlKSB7XG4gICAgcmVnaXN0ZXJSZWYodm5vZGUpO1xuICB9LFxuICB1cGRhdGU6IGZ1bmN0aW9uIHVwZGF0ZSAob2xkVm5vZGUsIHZub2RlKSB7XG4gICAgaWYgKG9sZFZub2RlLmRhdGEucmVmICE9PSB2bm9kZS5kYXRhLnJlZikge1xuICAgICAgcmVnaXN0ZXJSZWYob2xkVm5vZGUsIHRydWUpO1xuICAgICAgcmVnaXN0ZXJSZWYodm5vZGUpO1xuICAgIH1cbiAgfSxcbiAgZGVzdHJveTogZnVuY3Rpb24gZGVzdHJveSAodm5vZGUpIHtcbiAgICByZWdpc3RlclJlZih2bm9kZSwgdHJ1ZSk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIHJlZ2lzdGVyUmVmICh2bm9kZSwgaXNSZW1vdmFsKSB7XG4gIHZhciBrZXkgPSB2bm9kZS5kYXRhLnJlZjtcbiAgaWYgKCFpc0RlZihrZXkpKSB7IHJldHVybiB9XG5cbiAgdmFyIHZtID0gdm5vZGUuY29udGV4dDtcbiAgdmFyIHJlZiA9IHZub2RlLmNvbXBvbmVudEluc3RhbmNlIHx8IHZub2RlLmVsbTtcbiAgdmFyIHJlZnMgPSB2bS4kcmVmcztcbiAgaWYgKGlzUmVtb3ZhbCkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHJlZnNba2V5XSkpIHtcbiAgICAgIHJlbW92ZShyZWZzW2tleV0sIHJlZik7XG4gICAgfSBlbHNlIGlmIChyZWZzW2tleV0gPT09IHJlZikge1xuICAgICAgcmVmc1trZXldID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAodm5vZGUuZGF0YS5yZWZJbkZvcikge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHJlZnNba2V5XSkpIHtcbiAgICAgICAgcmVmc1trZXldID0gW3JlZl07XG4gICAgICB9IGVsc2UgaWYgKHJlZnNba2V5XS5pbmRleE9mKHJlZikgPCAwKSB7XG4gICAgICAgIC8vICRmbG93LWRpc2FibGUtbGluZVxuICAgICAgICByZWZzW2tleV0ucHVzaChyZWYpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZWZzW2tleV0gPSByZWY7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogVmlydHVhbCBET00gcGF0Y2hpbmcgYWxnb3JpdGhtIGJhc2VkIG9uIFNuYWJiZG9tIGJ5XG4gKiBTaW1vbiBGcmlpcyBWaW5kdW0gKEBwYWxkZXBpbmQpXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2VcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9wYWxkZXBpbmQvc25hYmJkb20vYmxvYi9tYXN0ZXIvTElDRU5TRVxuICpcbiAqIG1vZGlmaWVkIGJ5IEV2YW4gWW91IChAeXl4OTkwODAzKVxuICpcbiAqIE5vdCB0eXBlLWNoZWNraW5nIHRoaXMgYmVjYXVzZSB0aGlzIGZpbGUgaXMgcGVyZi1jcml0aWNhbCBhbmQgdGhlIGNvc3RcbiAqIG9mIG1ha2luZyBmbG93IHVuZGVyc3RhbmQgaXQgaXMgbm90IHdvcnRoIGl0LlxuICovXG5cbnZhciBlbXB0eU5vZGUgPSBuZXcgVk5vZGUoJycsIHt9LCBbXSk7XG5cbnZhciBob29rcyA9IFsnY3JlYXRlJywgJ2FjdGl2YXRlJywgJ3VwZGF0ZScsICdyZW1vdmUnLCAnZGVzdHJveSddO1xuXG5mdW5jdGlvbiBzYW1lVm5vZGUgKGEsIGIpIHtcbiAgcmV0dXJuIChcbiAgICBhLmtleSA9PT0gYi5rZXkgJiYgKFxuICAgICAgKFxuICAgICAgICBhLnRhZyA9PT0gYi50YWcgJiZcbiAgICAgICAgYS5pc0NvbW1lbnQgPT09IGIuaXNDb21tZW50ICYmXG4gICAgICAgIGlzRGVmKGEuZGF0YSkgPT09IGlzRGVmKGIuZGF0YSkgJiZcbiAgICAgICAgc2FtZUlucHV0VHlwZShhLCBiKVxuICAgICAgKSB8fCAoXG4gICAgICAgIGlzVHJ1ZShhLmlzQXN5bmNQbGFjZWhvbGRlcikgJiZcbiAgICAgICAgYS5hc3luY0ZhY3RvcnkgPT09IGIuYXN5bmNGYWN0b3J5ICYmXG4gICAgICAgIGlzVW5kZWYoYi5hc3luY0ZhY3RvcnkuZXJyb3IpXG4gICAgICApXG4gICAgKVxuICApXG59XG5cbmZ1bmN0aW9uIHNhbWVJbnB1dFR5cGUgKGEsIGIpIHtcbiAgaWYgKGEudGFnICE9PSAnaW5wdXQnKSB7IHJldHVybiB0cnVlIH1cbiAgdmFyIGk7XG4gIHZhciB0eXBlQSA9IGlzRGVmKGkgPSBhLmRhdGEpICYmIGlzRGVmKGkgPSBpLmF0dHJzKSAmJiBpLnR5cGU7XG4gIHZhciB0eXBlQiA9IGlzRGVmKGkgPSBiLmRhdGEpICYmIGlzRGVmKGkgPSBpLmF0dHJzKSAmJiBpLnR5cGU7XG4gIHJldHVybiB0eXBlQSA9PT0gdHlwZUIgfHwgaXNUZXh0SW5wdXRUeXBlKHR5cGVBKSAmJiBpc1RleHRJbnB1dFR5cGUodHlwZUIpXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUtleVRvT2xkSWR4IChjaGlsZHJlbiwgYmVnaW5JZHgsIGVuZElkeCkge1xuICB2YXIgaSwga2V5O1xuICB2YXIgbWFwID0ge307XG4gIGZvciAoaSA9IGJlZ2luSWR4OyBpIDw9IGVuZElkeDsgKytpKSB7XG4gICAga2V5ID0gY2hpbGRyZW5baV0ua2V5O1xuICAgIGlmIChpc0RlZihrZXkpKSB7IG1hcFtrZXldID0gaTsgfVxuICB9XG4gIHJldHVybiBtYXBcbn1cblxuZnVuY3Rpb24gY3JlYXRlUGF0Y2hGdW5jdGlvbiAoYmFja2VuZCkge1xuICB2YXIgaSwgajtcbiAgdmFyIGNicyA9IHt9O1xuXG4gIHZhciBtb2R1bGVzID0gYmFja2VuZC5tb2R1bGVzO1xuICB2YXIgbm9kZU9wcyA9IGJhY2tlbmQubm9kZU9wcztcblxuICBmb3IgKGkgPSAwOyBpIDwgaG9va3MubGVuZ3RoOyArK2kpIHtcbiAgICBjYnNbaG9va3NbaV1dID0gW107XG4gICAgZm9yIChqID0gMDsgaiA8IG1vZHVsZXMubGVuZ3RoOyArK2opIHtcbiAgICAgIGlmIChpc0RlZihtb2R1bGVzW2pdW2hvb2tzW2ldXSkpIHtcbiAgICAgICAgY2JzW2hvb2tzW2ldXS5wdXNoKG1vZHVsZXNbal1baG9va3NbaV1dKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBlbXB0eU5vZGVBdCAoZWxtKSB7XG4gICAgcmV0dXJuIG5ldyBWTm9kZShub2RlT3BzLnRhZ05hbWUoZWxtKS50b0xvd2VyQ2FzZSgpLCB7fSwgW10sIHVuZGVmaW5lZCwgZWxtKVxuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlUm1DYiAoY2hpbGRFbG0sIGxpc3RlbmVycykge1xuICAgIGZ1bmN0aW9uIHJlbW92ZSQkMSAoKSB7XG4gICAgICBpZiAoLS1yZW1vdmUkJDEubGlzdGVuZXJzID09PSAwKSB7XG4gICAgICAgIHJlbW92ZU5vZGUoY2hpbGRFbG0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZW1vdmUkJDEubGlzdGVuZXJzID0gbGlzdGVuZXJzO1xuICAgIHJldHVybiByZW1vdmUkJDFcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbW92ZU5vZGUgKGVsKSB7XG4gICAgdmFyIHBhcmVudCA9IG5vZGVPcHMucGFyZW50Tm9kZShlbCk7XG4gICAgLy8gZWxlbWVudCBtYXkgaGF2ZSBhbHJlYWR5IGJlZW4gcmVtb3ZlZCBkdWUgdG8gdi1odG1sIC8gdi10ZXh0XG4gICAgaWYgKGlzRGVmKHBhcmVudCkpIHtcbiAgICAgIG5vZGVPcHMucmVtb3ZlQ2hpbGQocGFyZW50LCBlbCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaXNVbmtub3duRWxlbWVudCQkMSAodm5vZGUsIGluVlByZSkge1xuICAgIHJldHVybiAoXG4gICAgICAhaW5WUHJlICYmXG4gICAgICAhdm5vZGUubnMgJiZcbiAgICAgICEoXG4gICAgICAgIGNvbmZpZy5pZ25vcmVkRWxlbWVudHMubGVuZ3RoICYmXG4gICAgICAgIGNvbmZpZy5pZ25vcmVkRWxlbWVudHMuc29tZShmdW5jdGlvbiAoaWdub3JlKSB7XG4gICAgICAgICAgcmV0dXJuIGlzUmVnRXhwKGlnbm9yZSlcbiAgICAgICAgICAgID8gaWdub3JlLnRlc3Qodm5vZGUudGFnKVxuICAgICAgICAgICAgOiBpZ25vcmUgPT09IHZub2RlLnRhZ1xuICAgICAgICB9KVxuICAgICAgKSAmJlxuICAgICAgY29uZmlnLmlzVW5rbm93bkVsZW1lbnQodm5vZGUudGFnKVxuICAgIClcbiAgfVxuXG4gIHZhciBjcmVhdGluZ0VsbUluVlByZSA9IDA7XG5cbiAgZnVuY3Rpb24gY3JlYXRlRWxtIChcbiAgICB2bm9kZSxcbiAgICBpbnNlcnRlZFZub2RlUXVldWUsXG4gICAgcGFyZW50RWxtLFxuICAgIHJlZkVsbSxcbiAgICBuZXN0ZWQsXG4gICAgb3duZXJBcnJheSxcbiAgICBpbmRleFxuICApIHtcbiAgICBpZiAoaXNEZWYodm5vZGUuZWxtKSAmJiBpc0RlZihvd25lckFycmF5KSkge1xuICAgICAgLy8gVGhpcyB2bm9kZSB3YXMgdXNlZCBpbiBhIHByZXZpb3VzIHJlbmRlciFcbiAgICAgIC8vIG5vdyBpdCdzIHVzZWQgYXMgYSBuZXcgbm9kZSwgb3ZlcndyaXRpbmcgaXRzIGVsbSB3b3VsZCBjYXVzZVxuICAgICAgLy8gcG90ZW50aWFsIHBhdGNoIGVycm9ycyBkb3duIHRoZSByb2FkIHdoZW4gaXQncyB1c2VkIGFzIGFuIGluc2VydGlvblxuICAgICAgLy8gcmVmZXJlbmNlIG5vZGUuIEluc3RlYWQsIHdlIGNsb25lIHRoZSBub2RlIG9uLWRlbWFuZCBiZWZvcmUgY3JlYXRpbmdcbiAgICAgIC8vIGFzc29jaWF0ZWQgRE9NIGVsZW1lbnQgZm9yIGl0LlxuICAgICAgdm5vZGUgPSBvd25lckFycmF5W2luZGV4XSA9IGNsb25lVk5vZGUodm5vZGUpO1xuICAgIH1cblxuICAgIHZub2RlLmlzUm9vdEluc2VydCA9ICFuZXN0ZWQ7IC8vIGZvciB0cmFuc2l0aW9uIGVudGVyIGNoZWNrXG4gICAgaWYgKGNyZWF0ZUNvbXBvbmVudCh2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBwYXJlbnRFbG0sIHJlZkVsbSkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHZhciBkYXRhID0gdm5vZGUuZGF0YTtcbiAgICB2YXIgY2hpbGRyZW4gPSB2bm9kZS5jaGlsZHJlbjtcbiAgICB2YXIgdGFnID0gdm5vZGUudGFnO1xuICAgIGlmIChpc0RlZih0YWcpKSB7XG4gICAgICB7XG4gICAgICAgIGlmIChkYXRhICYmIGRhdGEucHJlKSB7XG4gICAgICAgICAgY3JlYXRpbmdFbG1JblZQcmUrKztcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNVbmtub3duRWxlbWVudCQkMSh2bm9kZSwgY3JlYXRpbmdFbG1JblZQcmUpKSB7XG4gICAgICAgICAgd2FybihcbiAgICAgICAgICAgICdVbmtub3duIGN1c3RvbSBlbGVtZW50OiA8JyArIHRhZyArICc+IC0gZGlkIHlvdSAnICtcbiAgICAgICAgICAgICdyZWdpc3RlciB0aGUgY29tcG9uZW50IGNvcnJlY3RseT8gRm9yIHJlY3Vyc2l2ZSBjb21wb25lbnRzLCAnICtcbiAgICAgICAgICAgICdtYWtlIHN1cmUgdG8gcHJvdmlkZSB0aGUgXCJuYW1lXCIgb3B0aW9uLicsXG4gICAgICAgICAgICB2bm9kZS5jb250ZXh0XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2bm9kZS5lbG0gPSB2bm9kZS5uc1xuICAgICAgICA/IG5vZGVPcHMuY3JlYXRlRWxlbWVudE5TKHZub2RlLm5zLCB0YWcpXG4gICAgICAgIDogbm9kZU9wcy5jcmVhdGVFbGVtZW50KHRhZywgdm5vZGUpO1xuICAgICAgc2V0U2NvcGUodm5vZGUpO1xuXG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgIHtcbiAgICAgICAgY3JlYXRlQ2hpbGRyZW4odm5vZGUsIGNoaWxkcmVuLCBpbnNlcnRlZFZub2RlUXVldWUpO1xuICAgICAgICBpZiAoaXNEZWYoZGF0YSkpIHtcbiAgICAgICAgICBpbnZva2VDcmVhdGVIb29rcyh2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKTtcbiAgICAgICAgfVxuICAgICAgICBpbnNlcnQocGFyZW50RWxtLCB2bm9kZS5lbG0sIHJlZkVsbSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhICYmIGRhdGEucHJlKSB7XG4gICAgICAgIGNyZWF0aW5nRWxtSW5WUHJlLS07XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc1RydWUodm5vZGUuaXNDb21tZW50KSkge1xuICAgICAgdm5vZGUuZWxtID0gbm9kZU9wcy5jcmVhdGVDb21tZW50KHZub2RlLnRleHQpO1xuICAgICAgaW5zZXJ0KHBhcmVudEVsbSwgdm5vZGUuZWxtLCByZWZFbG0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB2bm9kZS5lbG0gPSBub2RlT3BzLmNyZWF0ZVRleHROb2RlKHZub2RlLnRleHQpO1xuICAgICAgaW5zZXJ0KHBhcmVudEVsbSwgdm5vZGUuZWxtLCByZWZFbG0pO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUNvbXBvbmVudCAodm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgcGFyZW50RWxtLCByZWZFbG0pIHtcbiAgICB2YXIgaSA9IHZub2RlLmRhdGE7XG4gICAgaWYgKGlzRGVmKGkpKSB7XG4gICAgICB2YXIgaXNSZWFjdGl2YXRlZCA9IGlzRGVmKHZub2RlLmNvbXBvbmVudEluc3RhbmNlKSAmJiBpLmtlZXBBbGl2ZTtcbiAgICAgIGlmIChpc0RlZihpID0gaS5ob29rKSAmJiBpc0RlZihpID0gaS5pbml0KSkge1xuICAgICAgICBpKHZub2RlLCBmYWxzZSAvKiBoeWRyYXRpbmcgKi8pO1xuICAgICAgfVxuICAgICAgLy8gYWZ0ZXIgY2FsbGluZyB0aGUgaW5pdCBob29rLCBpZiB0aGUgdm5vZGUgaXMgYSBjaGlsZCBjb21wb25lbnRcbiAgICAgIC8vIGl0IHNob3VsZCd2ZSBjcmVhdGVkIGEgY2hpbGQgaW5zdGFuY2UgYW5kIG1vdW50ZWQgaXQuIHRoZSBjaGlsZFxuICAgICAgLy8gY29tcG9uZW50IGFsc28gaGFzIHNldCB0aGUgcGxhY2Vob2xkZXIgdm5vZGUncyBlbG0uXG4gICAgICAvLyBpbiB0aGF0IGNhc2Ugd2UgY2FuIGp1c3QgcmV0dXJuIHRoZSBlbGVtZW50IGFuZCBiZSBkb25lLlxuICAgICAgaWYgKGlzRGVmKHZub2RlLmNvbXBvbmVudEluc3RhbmNlKSkge1xuICAgICAgICBpbml0Q29tcG9uZW50KHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUpO1xuICAgICAgICBpbnNlcnQocGFyZW50RWxtLCB2bm9kZS5lbG0sIHJlZkVsbSk7XG4gICAgICAgIGlmIChpc1RydWUoaXNSZWFjdGl2YXRlZCkpIHtcbiAgICAgICAgICByZWFjdGl2YXRlQ29tcG9uZW50KHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIHBhcmVudEVsbSwgcmVmRWxtKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGluaXRDb21wb25lbnQgKHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUpIHtcbiAgICBpZiAoaXNEZWYodm5vZGUuZGF0YS5wZW5kaW5nSW5zZXJ0KSkge1xuICAgICAgaW5zZXJ0ZWRWbm9kZVF1ZXVlLnB1c2guYXBwbHkoaW5zZXJ0ZWRWbm9kZVF1ZXVlLCB2bm9kZS5kYXRhLnBlbmRpbmdJbnNlcnQpO1xuICAgICAgdm5vZGUuZGF0YS5wZW5kaW5nSW5zZXJ0ID0gbnVsbDtcbiAgICB9XG4gICAgdm5vZGUuZWxtID0gdm5vZGUuY29tcG9uZW50SW5zdGFuY2UuJGVsO1xuICAgIGlmIChpc1BhdGNoYWJsZSh2bm9kZSkpIHtcbiAgICAgIGludm9rZUNyZWF0ZUhvb2tzKHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUpO1xuICAgICAgc2V0U2NvcGUodm5vZGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBlbXB0eSBjb21wb25lbnQgcm9vdC5cbiAgICAgIC8vIHNraXAgYWxsIGVsZW1lbnQtcmVsYXRlZCBtb2R1bGVzIGV4Y2VwdCBmb3IgcmVmICgjMzQ1NSlcbiAgICAgIHJlZ2lzdGVyUmVmKHZub2RlKTtcbiAgICAgIC8vIG1ha2Ugc3VyZSB0byBpbnZva2UgdGhlIGluc2VydCBob29rXG4gICAgICBpbnNlcnRlZFZub2RlUXVldWUucHVzaCh2bm9kZSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVhY3RpdmF0ZUNvbXBvbmVudCAodm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgcGFyZW50RWxtLCByZWZFbG0pIHtcbiAgICB2YXIgaTtcbiAgICAvLyBoYWNrIGZvciAjNDMzOTogYSByZWFjdGl2YXRlZCBjb21wb25lbnQgd2l0aCBpbm5lciB0cmFuc2l0aW9uXG4gICAgLy8gZG9lcyBub3QgdHJpZ2dlciBiZWNhdXNlIHRoZSBpbm5lciBub2RlJ3MgY3JlYXRlZCBob29rcyBhcmUgbm90IGNhbGxlZFxuICAgIC8vIGFnYWluLiBJdCdzIG5vdCBpZGVhbCB0byBpbnZvbHZlIG1vZHVsZS1zcGVjaWZpYyBsb2dpYyBpbiBoZXJlIGJ1dFxuICAgIC8vIHRoZXJlIGRvZXNuJ3Qgc2VlbSB0byBiZSBhIGJldHRlciB3YXkgdG8gZG8gaXQuXG4gICAgdmFyIGlubmVyTm9kZSA9IHZub2RlO1xuICAgIHdoaWxlIChpbm5lck5vZGUuY29tcG9uZW50SW5zdGFuY2UpIHtcbiAgICAgIGlubmVyTm9kZSA9IGlubmVyTm9kZS5jb21wb25lbnRJbnN0YW5jZS5fdm5vZGU7XG4gICAgICBpZiAoaXNEZWYoaSA9IGlubmVyTm9kZS5kYXRhKSAmJiBpc0RlZihpID0gaS50cmFuc2l0aW9uKSkge1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY2JzLmFjdGl2YXRlLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgY2JzLmFjdGl2YXRlW2ldKGVtcHR5Tm9kZSwgaW5uZXJOb2RlKTtcbiAgICAgICAgfVxuICAgICAgICBpbnNlcnRlZFZub2RlUXVldWUucHVzaChpbm5lck5vZGUpO1xuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICAvLyB1bmxpa2UgYSBuZXdseSBjcmVhdGVkIGNvbXBvbmVudCxcbiAgICAvLyBhIHJlYWN0aXZhdGVkIGtlZXAtYWxpdmUgY29tcG9uZW50IGRvZXNuJ3QgaW5zZXJ0IGl0c2VsZlxuICAgIGluc2VydChwYXJlbnRFbG0sIHZub2RlLmVsbSwgcmVmRWxtKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGluc2VydCAocGFyZW50LCBlbG0sIHJlZiQkMSkge1xuICAgIGlmIChpc0RlZihwYXJlbnQpKSB7XG4gICAgICBpZiAoaXNEZWYocmVmJCQxKSkge1xuICAgICAgICBpZiAobm9kZU9wcy5wYXJlbnROb2RlKHJlZiQkMSkgPT09IHBhcmVudCkge1xuICAgICAgICAgIG5vZGVPcHMuaW5zZXJ0QmVmb3JlKHBhcmVudCwgZWxtLCByZWYkJDEpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub2RlT3BzLmFwcGVuZENoaWxkKHBhcmVudCwgZWxtKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVDaGlsZHJlbiAodm5vZGUsIGNoaWxkcmVuLCBpbnNlcnRlZFZub2RlUXVldWUpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHtcbiAgICAgIHtcbiAgICAgICAgY2hlY2tEdXBsaWNhdGVLZXlzKGNoaWxkcmVuKTtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgY3JlYXRlRWxtKGNoaWxkcmVuW2ldLCBpbnNlcnRlZFZub2RlUXVldWUsIHZub2RlLmVsbSwgbnVsbCwgdHJ1ZSwgY2hpbGRyZW4sIGkpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNQcmltaXRpdmUodm5vZGUudGV4dCkpIHtcbiAgICAgIG5vZGVPcHMuYXBwZW5kQ2hpbGQodm5vZGUuZWxtLCBub2RlT3BzLmNyZWF0ZVRleHROb2RlKFN0cmluZyh2bm9kZS50ZXh0KSkpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGlzUGF0Y2hhYmxlICh2bm9kZSkge1xuICAgIHdoaWxlICh2bm9kZS5jb21wb25lbnRJbnN0YW5jZSkge1xuICAgICAgdm5vZGUgPSB2bm9kZS5jb21wb25lbnRJbnN0YW5jZS5fdm5vZGU7XG4gICAgfVxuICAgIHJldHVybiBpc0RlZih2bm9kZS50YWcpXG4gIH1cblxuICBmdW5jdGlvbiBpbnZva2VDcmVhdGVIb29rcyAodm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSkge1xuICAgIGZvciAodmFyIGkkMSA9IDA7IGkkMSA8IGNicy5jcmVhdGUubGVuZ3RoOyArK2kkMSkge1xuICAgICAgY2JzLmNyZWF0ZVtpJDFdKGVtcHR5Tm9kZSwgdm5vZGUpO1xuICAgIH1cbiAgICBpID0gdm5vZGUuZGF0YS5ob29rOyAvLyBSZXVzZSB2YXJpYWJsZVxuICAgIGlmIChpc0RlZihpKSkge1xuICAgICAgaWYgKGlzRGVmKGkuY3JlYXRlKSkgeyBpLmNyZWF0ZShlbXB0eU5vZGUsIHZub2RlKTsgfVxuICAgICAgaWYgKGlzRGVmKGkuaW5zZXJ0KSkgeyBpbnNlcnRlZFZub2RlUXVldWUucHVzaCh2bm9kZSk7IH1cbiAgICB9XG4gIH1cblxuICAvLyBzZXQgc2NvcGUgaWQgYXR0cmlidXRlIGZvciBzY29wZWQgQ1NTLlxuICAvLyB0aGlzIGlzIGltcGxlbWVudGVkIGFzIGEgc3BlY2lhbCBjYXNlIHRvIGF2b2lkIHRoZSBvdmVyaGVhZFxuICAvLyBvZiBnb2luZyB0aHJvdWdoIHRoZSBub3JtYWwgYXR0cmlidXRlIHBhdGNoaW5nIHByb2Nlc3MuXG4gIGZ1bmN0aW9uIHNldFNjb3BlICh2bm9kZSkge1xuICAgIHZhciBpO1xuICAgIGlmIChpc0RlZihpID0gdm5vZGUuZm5TY29wZUlkKSkge1xuICAgICAgbm9kZU9wcy5zZXRTdHlsZVNjb3BlKHZub2RlLmVsbSwgaSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBhbmNlc3RvciA9IHZub2RlO1xuICAgICAgd2hpbGUgKGFuY2VzdG9yKSB7XG4gICAgICAgIGlmIChpc0RlZihpID0gYW5jZXN0b3IuY29udGV4dCkgJiYgaXNEZWYoaSA9IGkuJG9wdGlvbnMuX3Njb3BlSWQpKSB7XG4gICAgICAgICAgbm9kZU9wcy5zZXRTdHlsZVNjb3BlKHZub2RlLmVsbSwgaSk7XG4gICAgICAgIH1cbiAgICAgICAgYW5jZXN0b3IgPSBhbmNlc3Rvci5wYXJlbnQ7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIGZvciBzbG90IGNvbnRlbnQgdGhleSBzaG91bGQgYWxzbyBnZXQgdGhlIHNjb3BlSWQgZnJvbSB0aGUgaG9zdCBpbnN0YW5jZS5cbiAgICBpZiAoaXNEZWYoaSA9IGFjdGl2ZUluc3RhbmNlKSAmJlxuICAgICAgaSAhPT0gdm5vZGUuY29udGV4dCAmJlxuICAgICAgaSAhPT0gdm5vZGUuZm5Db250ZXh0ICYmXG4gICAgICBpc0RlZihpID0gaS4kb3B0aW9ucy5fc2NvcGVJZClcbiAgICApIHtcbiAgICAgIG5vZGVPcHMuc2V0U3R5bGVTY29wZSh2bm9kZS5lbG0sIGkpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGFkZFZub2RlcyAocGFyZW50RWxtLCByZWZFbG0sIHZub2Rlcywgc3RhcnRJZHgsIGVuZElkeCwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKSB7XG4gICAgZm9yICg7IHN0YXJ0SWR4IDw9IGVuZElkeDsgKytzdGFydElkeCkge1xuICAgICAgY3JlYXRlRWxtKHZub2Rlc1tzdGFydElkeF0sIGluc2VydGVkVm5vZGVRdWV1ZSwgcGFyZW50RWxtLCByZWZFbG0sIGZhbHNlLCB2bm9kZXMsIHN0YXJ0SWR4KTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBpbnZva2VEZXN0cm95SG9vayAodm5vZGUpIHtcbiAgICB2YXIgaSwgajtcbiAgICB2YXIgZGF0YSA9IHZub2RlLmRhdGE7XG4gICAgaWYgKGlzRGVmKGRhdGEpKSB7XG4gICAgICBpZiAoaXNEZWYoaSA9IGRhdGEuaG9vaykgJiYgaXNEZWYoaSA9IGkuZGVzdHJveSkpIHsgaSh2bm9kZSk7IH1cbiAgICAgIGZvciAoaSA9IDA7IGkgPCBjYnMuZGVzdHJveS5sZW5ndGg7ICsraSkgeyBjYnMuZGVzdHJveVtpXSh2bm9kZSk7IH1cbiAgICB9XG4gICAgaWYgKGlzRGVmKGkgPSB2bm9kZS5jaGlsZHJlbikpIHtcbiAgICAgIGZvciAoaiA9IDA7IGogPCB2bm9kZS5jaGlsZHJlbi5sZW5ndGg7ICsraikge1xuICAgICAgICBpbnZva2VEZXN0cm95SG9vayh2bm9kZS5jaGlsZHJlbltqXSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVtb3ZlVm5vZGVzIChwYXJlbnRFbG0sIHZub2Rlcywgc3RhcnRJZHgsIGVuZElkeCkge1xuICAgIGZvciAoOyBzdGFydElkeCA8PSBlbmRJZHg7ICsrc3RhcnRJZHgpIHtcbiAgICAgIHZhciBjaCA9IHZub2Rlc1tzdGFydElkeF07XG4gICAgICBpZiAoaXNEZWYoY2gpKSB7XG4gICAgICAgIGlmIChpc0RlZihjaC50YWcpKSB7XG4gICAgICAgICAgcmVtb3ZlQW5kSW52b2tlUmVtb3ZlSG9vayhjaCk7XG4gICAgICAgICAgaW52b2tlRGVzdHJveUhvb2soY2gpO1xuICAgICAgICB9IGVsc2UgeyAvLyBUZXh0IG5vZGVcbiAgICAgICAgICByZW1vdmVOb2RlKGNoLmVsbSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByZW1vdmVBbmRJbnZva2VSZW1vdmVIb29rICh2bm9kZSwgcm0pIHtcbiAgICBpZiAoaXNEZWYocm0pIHx8IGlzRGVmKHZub2RlLmRhdGEpKSB7XG4gICAgICB2YXIgaTtcbiAgICAgIHZhciBsaXN0ZW5lcnMgPSBjYnMucmVtb3ZlLmxlbmd0aCArIDE7XG4gICAgICBpZiAoaXNEZWYocm0pKSB7XG4gICAgICAgIC8vIHdlIGhhdmUgYSByZWN1cnNpdmVseSBwYXNzZWQgZG93biBybSBjYWxsYmFja1xuICAgICAgICAvLyBpbmNyZWFzZSB0aGUgbGlzdGVuZXJzIGNvdW50XG4gICAgICAgIHJtLmxpc3RlbmVycyArPSBsaXN0ZW5lcnM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBkaXJlY3RseSByZW1vdmluZ1xuICAgICAgICBybSA9IGNyZWF0ZVJtQ2Iodm5vZGUuZWxtLCBsaXN0ZW5lcnMpO1xuICAgICAgfVxuICAgICAgLy8gcmVjdXJzaXZlbHkgaW52b2tlIGhvb2tzIG9uIGNoaWxkIGNvbXBvbmVudCByb290IG5vZGVcbiAgICAgIGlmIChpc0RlZihpID0gdm5vZGUuY29tcG9uZW50SW5zdGFuY2UpICYmIGlzRGVmKGkgPSBpLl92bm9kZSkgJiYgaXNEZWYoaS5kYXRhKSkge1xuICAgICAgICByZW1vdmVBbmRJbnZva2VSZW1vdmVIb29rKGksIHJtKTtcbiAgICAgIH1cbiAgICAgIGZvciAoaSA9IDA7IGkgPCBjYnMucmVtb3ZlLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGNicy5yZW1vdmVbaV0odm5vZGUsIHJtKTtcbiAgICAgIH1cbiAgICAgIGlmIChpc0RlZihpID0gdm5vZGUuZGF0YS5ob29rKSAmJiBpc0RlZihpID0gaS5yZW1vdmUpKSB7XG4gICAgICAgIGkodm5vZGUsIHJtKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJtKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlbW92ZU5vZGUodm5vZGUuZWxtKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVDaGlsZHJlbiAocGFyZW50RWxtLCBvbGRDaCwgbmV3Q2gsIGluc2VydGVkVm5vZGVRdWV1ZSwgcmVtb3ZlT25seSkge1xuICAgIHZhciBvbGRTdGFydElkeCA9IDA7XG4gICAgdmFyIG5ld1N0YXJ0SWR4ID0gMDtcbiAgICB2YXIgb2xkRW5kSWR4ID0gb2xkQ2gubGVuZ3RoIC0gMTtcbiAgICB2YXIgb2xkU3RhcnRWbm9kZSA9IG9sZENoWzBdO1xuICAgIHZhciBvbGRFbmRWbm9kZSA9IG9sZENoW29sZEVuZElkeF07XG4gICAgdmFyIG5ld0VuZElkeCA9IG5ld0NoLmxlbmd0aCAtIDE7XG4gICAgdmFyIG5ld1N0YXJ0Vm5vZGUgPSBuZXdDaFswXTtcbiAgICB2YXIgbmV3RW5kVm5vZGUgPSBuZXdDaFtuZXdFbmRJZHhdO1xuICAgIHZhciBvbGRLZXlUb0lkeCwgaWR4SW5PbGQsIHZub2RlVG9Nb3ZlLCByZWZFbG07XG5cbiAgICAvLyByZW1vdmVPbmx5IGlzIGEgc3BlY2lhbCBmbGFnIHVzZWQgb25seSBieSA8dHJhbnNpdGlvbi1ncm91cD5cbiAgICAvLyB0byBlbnN1cmUgcmVtb3ZlZCBlbGVtZW50cyBzdGF5IGluIGNvcnJlY3QgcmVsYXRpdmUgcG9zaXRpb25zXG4gICAgLy8gZHVyaW5nIGxlYXZpbmcgdHJhbnNpdGlvbnNcbiAgICB2YXIgY2FuTW92ZSA9ICFyZW1vdmVPbmx5O1xuXG4gICAge1xuICAgICAgY2hlY2tEdXBsaWNhdGVLZXlzKG5ld0NoKTtcbiAgICB9XG5cbiAgICB3aGlsZSAob2xkU3RhcnRJZHggPD0gb2xkRW5kSWR4ICYmIG5ld1N0YXJ0SWR4IDw9IG5ld0VuZElkeCkge1xuICAgICAgaWYgKGlzVW5kZWYob2xkU3RhcnRWbm9kZSkpIHtcbiAgICAgICAgb2xkU3RhcnRWbm9kZSA9IG9sZENoWysrb2xkU3RhcnRJZHhdOyAvLyBWbm9kZSBoYXMgYmVlbiBtb3ZlZCBsZWZ0XG4gICAgICB9IGVsc2UgaWYgKGlzVW5kZWYob2xkRW5kVm5vZGUpKSB7XG4gICAgICAgIG9sZEVuZFZub2RlID0gb2xkQ2hbLS1vbGRFbmRJZHhdO1xuICAgICAgfSBlbHNlIGlmIChzYW1lVm5vZGUob2xkU3RhcnRWbm9kZSwgbmV3U3RhcnRWbm9kZSkpIHtcbiAgICAgICAgcGF0Y2hWbm9kZShvbGRTdGFydFZub2RlLCBuZXdTdGFydFZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIG5ld0NoLCBuZXdTdGFydElkeCk7XG4gICAgICAgIG9sZFN0YXJ0Vm5vZGUgPSBvbGRDaFsrK29sZFN0YXJ0SWR4XTtcbiAgICAgICAgbmV3U3RhcnRWbm9kZSA9IG5ld0NoWysrbmV3U3RhcnRJZHhdO1xuICAgICAgfSBlbHNlIGlmIChzYW1lVm5vZGUob2xkRW5kVm5vZGUsIG5ld0VuZFZub2RlKSkge1xuICAgICAgICBwYXRjaFZub2RlKG9sZEVuZFZub2RlLCBuZXdFbmRWbm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBuZXdDaCwgbmV3RW5kSWR4KTtcbiAgICAgICAgb2xkRW5kVm5vZGUgPSBvbGRDaFstLW9sZEVuZElkeF07XG4gICAgICAgIG5ld0VuZFZub2RlID0gbmV3Q2hbLS1uZXdFbmRJZHhdO1xuICAgICAgfSBlbHNlIGlmIChzYW1lVm5vZGUob2xkU3RhcnRWbm9kZSwgbmV3RW5kVm5vZGUpKSB7IC8vIFZub2RlIG1vdmVkIHJpZ2h0XG4gICAgICAgIHBhdGNoVm5vZGUob2xkU3RhcnRWbm9kZSwgbmV3RW5kVm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgbmV3Q2gsIG5ld0VuZElkeCk7XG4gICAgICAgIGNhbk1vdmUgJiYgbm9kZU9wcy5pbnNlcnRCZWZvcmUocGFyZW50RWxtLCBvbGRTdGFydFZub2RlLmVsbSwgbm9kZU9wcy5uZXh0U2libGluZyhvbGRFbmRWbm9kZS5lbG0pKTtcbiAgICAgICAgb2xkU3RhcnRWbm9kZSA9IG9sZENoWysrb2xkU3RhcnRJZHhdO1xuICAgICAgICBuZXdFbmRWbm9kZSA9IG5ld0NoWy0tbmV3RW5kSWR4XTtcbiAgICAgIH0gZWxzZSBpZiAoc2FtZVZub2RlKG9sZEVuZFZub2RlLCBuZXdTdGFydFZub2RlKSkgeyAvLyBWbm9kZSBtb3ZlZCBsZWZ0XG4gICAgICAgIHBhdGNoVm5vZGUob2xkRW5kVm5vZGUsIG5ld1N0YXJ0Vm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgbmV3Q2gsIG5ld1N0YXJ0SWR4KTtcbiAgICAgICAgY2FuTW92ZSAmJiBub2RlT3BzLmluc2VydEJlZm9yZShwYXJlbnRFbG0sIG9sZEVuZFZub2RlLmVsbSwgb2xkU3RhcnRWbm9kZS5lbG0pO1xuICAgICAgICBvbGRFbmRWbm9kZSA9IG9sZENoWy0tb2xkRW5kSWR4XTtcbiAgICAgICAgbmV3U3RhcnRWbm9kZSA9IG5ld0NoWysrbmV3U3RhcnRJZHhdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGlzVW5kZWYob2xkS2V5VG9JZHgpKSB7IG9sZEtleVRvSWR4ID0gY3JlYXRlS2V5VG9PbGRJZHgob2xkQ2gsIG9sZFN0YXJ0SWR4LCBvbGRFbmRJZHgpOyB9XG4gICAgICAgIGlkeEluT2xkID0gaXNEZWYobmV3U3RhcnRWbm9kZS5rZXkpXG4gICAgICAgICAgPyBvbGRLZXlUb0lkeFtuZXdTdGFydFZub2RlLmtleV1cbiAgICAgICAgICA6IGZpbmRJZHhJbk9sZChuZXdTdGFydFZub2RlLCBvbGRDaCwgb2xkU3RhcnRJZHgsIG9sZEVuZElkeCk7XG4gICAgICAgIGlmIChpc1VuZGVmKGlkeEluT2xkKSkgeyAvLyBOZXcgZWxlbWVudFxuICAgICAgICAgIGNyZWF0ZUVsbShuZXdTdGFydFZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIHBhcmVudEVsbSwgb2xkU3RhcnRWbm9kZS5lbG0sIGZhbHNlLCBuZXdDaCwgbmV3U3RhcnRJZHgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZub2RlVG9Nb3ZlID0gb2xkQ2hbaWR4SW5PbGRdO1xuICAgICAgICAgIGlmIChzYW1lVm5vZGUodm5vZGVUb01vdmUsIG5ld1N0YXJ0Vm5vZGUpKSB7XG4gICAgICAgICAgICBwYXRjaFZub2RlKHZub2RlVG9Nb3ZlLCBuZXdTdGFydFZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIG5ld0NoLCBuZXdTdGFydElkeCk7XG4gICAgICAgICAgICBvbGRDaFtpZHhJbk9sZF0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBjYW5Nb3ZlICYmIG5vZGVPcHMuaW5zZXJ0QmVmb3JlKHBhcmVudEVsbSwgdm5vZGVUb01vdmUuZWxtLCBvbGRTdGFydFZub2RlLmVsbSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHNhbWUga2V5IGJ1dCBkaWZmZXJlbnQgZWxlbWVudC4gdHJlYXQgYXMgbmV3IGVsZW1lbnRcbiAgICAgICAgICAgIGNyZWF0ZUVsbShuZXdTdGFydFZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIHBhcmVudEVsbSwgb2xkU3RhcnRWbm9kZS5lbG0sIGZhbHNlLCBuZXdDaCwgbmV3U3RhcnRJZHgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBuZXdTdGFydFZub2RlID0gbmV3Q2hbKytuZXdTdGFydElkeF07XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChvbGRTdGFydElkeCA+IG9sZEVuZElkeCkge1xuICAgICAgcmVmRWxtID0gaXNVbmRlZihuZXdDaFtuZXdFbmRJZHggKyAxXSkgPyBudWxsIDogbmV3Q2hbbmV3RW5kSWR4ICsgMV0uZWxtO1xuICAgICAgYWRkVm5vZGVzKHBhcmVudEVsbSwgcmVmRWxtLCBuZXdDaCwgbmV3U3RhcnRJZHgsIG5ld0VuZElkeCwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKTtcbiAgICB9IGVsc2UgaWYgKG5ld1N0YXJ0SWR4ID4gbmV3RW5kSWR4KSB7XG4gICAgICByZW1vdmVWbm9kZXMocGFyZW50RWxtLCBvbGRDaCwgb2xkU3RhcnRJZHgsIG9sZEVuZElkeCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY2hlY2tEdXBsaWNhdGVLZXlzIChjaGlsZHJlbikge1xuICAgIHZhciBzZWVuS2V5cyA9IHt9O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB2bm9kZSA9IGNoaWxkcmVuW2ldO1xuICAgICAgdmFyIGtleSA9IHZub2RlLmtleTtcbiAgICAgIGlmIChpc0RlZihrZXkpKSB7XG4gICAgICAgIGlmIChzZWVuS2V5c1trZXldKSB7XG4gICAgICAgICAgd2FybihcbiAgICAgICAgICAgIChcIkR1cGxpY2F0ZSBrZXlzIGRldGVjdGVkOiAnXCIgKyBrZXkgKyBcIicuIFRoaXMgbWF5IGNhdXNlIGFuIHVwZGF0ZSBlcnJvci5cIiksXG4gICAgICAgICAgICB2bm9kZS5jb250ZXh0XG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZWVuS2V5c1trZXldID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGZpbmRJZHhJbk9sZCAobm9kZSwgb2xkQ2gsIHN0YXJ0LCBlbmQpIHtcbiAgICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykge1xuICAgICAgdmFyIGMgPSBvbGRDaFtpXTtcbiAgICAgIGlmIChpc0RlZihjKSAmJiBzYW1lVm5vZGUobm9kZSwgYykpIHsgcmV0dXJuIGkgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHBhdGNoVm5vZGUgKFxuICAgIG9sZFZub2RlLFxuICAgIHZub2RlLFxuICAgIGluc2VydGVkVm5vZGVRdWV1ZSxcbiAgICBvd25lckFycmF5LFxuICAgIGluZGV4LFxuICAgIHJlbW92ZU9ubHlcbiAgKSB7XG4gICAgaWYgKG9sZFZub2RlID09PSB2bm9kZSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGlzRGVmKHZub2RlLmVsbSkgJiYgaXNEZWYob3duZXJBcnJheSkpIHtcbiAgICAgIC8vIGNsb25lIHJldXNlZCB2bm9kZVxuICAgICAgdm5vZGUgPSBvd25lckFycmF5W2luZGV4XSA9IGNsb25lVk5vZGUodm5vZGUpO1xuICAgIH1cblxuICAgIHZhciBlbG0gPSB2bm9kZS5lbG0gPSBvbGRWbm9kZS5lbG07XG5cbiAgICBpZiAoaXNUcnVlKG9sZFZub2RlLmlzQXN5bmNQbGFjZWhvbGRlcikpIHtcbiAgICAgIGlmIChpc0RlZih2bm9kZS5hc3luY0ZhY3RvcnkucmVzb2x2ZWQpKSB7XG4gICAgICAgIGh5ZHJhdGUob2xkVm5vZGUuZWxtLCB2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZub2RlLmlzQXN5bmNQbGFjZWhvbGRlciA9IHRydWU7XG4gICAgICB9XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyByZXVzZSBlbGVtZW50IGZvciBzdGF0aWMgdHJlZXMuXG4gICAgLy8gbm90ZSB3ZSBvbmx5IGRvIHRoaXMgaWYgdGhlIHZub2RlIGlzIGNsb25lZCAtXG4gICAgLy8gaWYgdGhlIG5ldyBub2RlIGlzIG5vdCBjbG9uZWQgaXQgbWVhbnMgdGhlIHJlbmRlciBmdW5jdGlvbnMgaGF2ZSBiZWVuXG4gICAgLy8gcmVzZXQgYnkgdGhlIGhvdC1yZWxvYWQtYXBpIGFuZCB3ZSBuZWVkIHRvIGRvIGEgcHJvcGVyIHJlLXJlbmRlci5cbiAgICBpZiAoaXNUcnVlKHZub2RlLmlzU3RhdGljKSAmJlxuICAgICAgaXNUcnVlKG9sZFZub2RlLmlzU3RhdGljKSAmJlxuICAgICAgdm5vZGUua2V5ID09PSBvbGRWbm9kZS5rZXkgJiZcbiAgICAgIChpc1RydWUodm5vZGUuaXNDbG9uZWQpIHx8IGlzVHJ1ZSh2bm9kZS5pc09uY2UpKVxuICAgICkge1xuICAgICAgdm5vZGUuY29tcG9uZW50SW5zdGFuY2UgPSBvbGRWbm9kZS5jb21wb25lbnRJbnN0YW5jZTtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHZhciBpO1xuICAgIHZhciBkYXRhID0gdm5vZGUuZGF0YTtcbiAgICBpZiAoaXNEZWYoZGF0YSkgJiYgaXNEZWYoaSA9IGRhdGEuaG9vaykgJiYgaXNEZWYoaSA9IGkucHJlcGF0Y2gpKSB7XG4gICAgICBpKG9sZFZub2RlLCB2bm9kZSk7XG4gICAgfVxuXG4gICAgdmFyIG9sZENoID0gb2xkVm5vZGUuY2hpbGRyZW47XG4gICAgdmFyIGNoID0gdm5vZGUuY2hpbGRyZW47XG4gICAgaWYgKGlzRGVmKGRhdGEpICYmIGlzUGF0Y2hhYmxlKHZub2RlKSkge1xuICAgICAgZm9yIChpID0gMDsgaSA8IGNicy51cGRhdGUubGVuZ3RoOyArK2kpIHsgY2JzLnVwZGF0ZVtpXShvbGRWbm9kZSwgdm5vZGUpOyB9XG4gICAgICBpZiAoaXNEZWYoaSA9IGRhdGEuaG9vaykgJiYgaXNEZWYoaSA9IGkudXBkYXRlKSkgeyBpKG9sZFZub2RlLCB2bm9kZSk7IH1cbiAgICB9XG4gICAgaWYgKGlzVW5kZWYodm5vZGUudGV4dCkpIHtcbiAgICAgIGlmIChpc0RlZihvbGRDaCkgJiYgaXNEZWYoY2gpKSB7XG4gICAgICAgIGlmIChvbGRDaCAhPT0gY2gpIHsgdXBkYXRlQ2hpbGRyZW4oZWxtLCBvbGRDaCwgY2gsIGluc2VydGVkVm5vZGVRdWV1ZSwgcmVtb3ZlT25seSk7IH1cbiAgICAgIH0gZWxzZSBpZiAoaXNEZWYoY2gpKSB7XG4gICAgICAgIHtcbiAgICAgICAgICBjaGVja0R1cGxpY2F0ZUtleXMoY2gpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0RlZihvbGRWbm9kZS50ZXh0KSkgeyBub2RlT3BzLnNldFRleHRDb250ZW50KGVsbSwgJycpOyB9XG4gICAgICAgIGFkZFZub2RlcyhlbG0sIG51bGwsIGNoLCAwLCBjaC5sZW5ndGggLSAxLCBpbnNlcnRlZFZub2RlUXVldWUpO1xuICAgICAgfSBlbHNlIGlmIChpc0RlZihvbGRDaCkpIHtcbiAgICAgICAgcmVtb3ZlVm5vZGVzKGVsbSwgb2xkQ2gsIDAsIG9sZENoLmxlbmd0aCAtIDEpO1xuICAgICAgfSBlbHNlIGlmIChpc0RlZihvbGRWbm9kZS50ZXh0KSkge1xuICAgICAgICBub2RlT3BzLnNldFRleHRDb250ZW50KGVsbSwgJycpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAob2xkVm5vZGUudGV4dCAhPT0gdm5vZGUudGV4dCkge1xuICAgICAgbm9kZU9wcy5zZXRUZXh0Q29udGVudChlbG0sIHZub2RlLnRleHQpO1xuICAgIH1cbiAgICBpZiAoaXNEZWYoZGF0YSkpIHtcbiAgICAgIGlmIChpc0RlZihpID0gZGF0YS5ob29rKSAmJiBpc0RlZihpID0gaS5wb3N0cGF0Y2gpKSB7IGkob2xkVm5vZGUsIHZub2RlKTsgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGludm9rZUluc2VydEhvb2sgKHZub2RlLCBxdWV1ZSwgaW5pdGlhbCkge1xuICAgIC8vIGRlbGF5IGluc2VydCBob29rcyBmb3IgY29tcG9uZW50IHJvb3Qgbm9kZXMsIGludm9rZSB0aGVtIGFmdGVyIHRoZVxuICAgIC8vIGVsZW1lbnQgaXMgcmVhbGx5IGluc2VydGVkXG4gICAgaWYgKGlzVHJ1ZShpbml0aWFsKSAmJiBpc0RlZih2bm9kZS5wYXJlbnQpKSB7XG4gICAgICB2bm9kZS5wYXJlbnQuZGF0YS5wZW5kaW5nSW5zZXJ0ID0gcXVldWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVldWUubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgcXVldWVbaV0uZGF0YS5ob29rLmluc2VydChxdWV1ZVtpXSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIGh5ZHJhdGlvbkJhaWxlZCA9IGZhbHNlO1xuICAvLyBsaXN0IG9mIG1vZHVsZXMgdGhhdCBjYW4gc2tpcCBjcmVhdGUgaG9vayBkdXJpbmcgaHlkcmF0aW9uIGJlY2F1c2UgdGhleVxuICAvLyBhcmUgYWxyZWFkeSByZW5kZXJlZCBvbiB0aGUgY2xpZW50IG9yIGhhcyBubyBuZWVkIGZvciBpbml0aWFsaXphdGlvblxuICAvLyBOb3RlOiBzdHlsZSBpcyBleGNsdWRlZCBiZWNhdXNlIGl0IHJlbGllcyBvbiBpbml0aWFsIGNsb25lIGZvciBmdXR1cmVcbiAgLy8gZGVlcCB1cGRhdGVzICgjNzA2MykuXG4gIHZhciBpc1JlbmRlcmVkTW9kdWxlID0gbWFrZU1hcCgnYXR0cnMsY2xhc3Msc3RhdGljQ2xhc3Msc3RhdGljU3R5bGUsa2V5Jyk7XG5cbiAgLy8gTm90ZTogdGhpcyBpcyBhIGJyb3dzZXItb25seSBmdW5jdGlvbiBzbyB3ZSBjYW4gYXNzdW1lIGVsbXMgYXJlIERPTSBub2Rlcy5cbiAgZnVuY3Rpb24gaHlkcmF0ZSAoZWxtLCB2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBpblZQcmUpIHtcbiAgICB2YXIgaTtcbiAgICB2YXIgdGFnID0gdm5vZGUudGFnO1xuICAgIHZhciBkYXRhID0gdm5vZGUuZGF0YTtcbiAgICB2YXIgY2hpbGRyZW4gPSB2bm9kZS5jaGlsZHJlbjtcbiAgICBpblZQcmUgPSBpblZQcmUgfHwgKGRhdGEgJiYgZGF0YS5wcmUpO1xuICAgIHZub2RlLmVsbSA9IGVsbTtcblxuICAgIGlmIChpc1RydWUodm5vZGUuaXNDb21tZW50KSAmJiBpc0RlZih2bm9kZS5hc3luY0ZhY3RvcnkpKSB7XG4gICAgICB2bm9kZS5pc0FzeW5jUGxhY2Vob2xkZXIgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gICAgLy8gYXNzZXJ0IG5vZGUgbWF0Y2hcbiAgICB7XG4gICAgICBpZiAoIWFzc2VydE5vZGVNYXRjaChlbG0sIHZub2RlLCBpblZQcmUpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaXNEZWYoZGF0YSkpIHtcbiAgICAgIGlmIChpc0RlZihpID0gZGF0YS5ob29rKSAmJiBpc0RlZihpID0gaS5pbml0KSkgeyBpKHZub2RlLCB0cnVlIC8qIGh5ZHJhdGluZyAqLyk7IH1cbiAgICAgIGlmIChpc0RlZihpID0gdm5vZGUuY29tcG9uZW50SW5zdGFuY2UpKSB7XG4gICAgICAgIC8vIGNoaWxkIGNvbXBvbmVudC4gaXQgc2hvdWxkIGhhdmUgaHlkcmF0ZWQgaXRzIG93biB0cmVlLlxuICAgICAgICBpbml0Q29tcG9uZW50KHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUpO1xuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaXNEZWYodGFnKSkge1xuICAgICAgaWYgKGlzRGVmKGNoaWxkcmVuKSkge1xuICAgICAgICAvLyBlbXB0eSBlbGVtZW50LCBhbGxvdyBjbGllbnQgdG8gcGljayB1cCBhbmQgcG9wdWxhdGUgY2hpbGRyZW5cbiAgICAgICAgaWYgKCFlbG0uaGFzQ2hpbGROb2RlcygpKSB7XG4gICAgICAgICAgY3JlYXRlQ2hpbGRyZW4odm5vZGUsIGNoaWxkcmVuLCBpbnNlcnRlZFZub2RlUXVldWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHYtaHRtbCBhbmQgZG9tUHJvcHM6IGlubmVySFRNTFxuICAgICAgICAgIGlmIChpc0RlZihpID0gZGF0YSkgJiYgaXNEZWYoaSA9IGkuZG9tUHJvcHMpICYmIGlzRGVmKGkgPSBpLmlubmVySFRNTCkpIHtcbiAgICAgICAgICAgIGlmIChpICE9PSBlbG0uaW5uZXJIVE1MKSB7XG4gICAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgICAgICAgIWh5ZHJhdGlvbkJhaWxlZFxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBoeWRyYXRpb25CYWlsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignUGFyZW50OiAnLCBlbG0pO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2Fybignc2VydmVyIGlubmVySFRNTDogJywgaSk7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdjbGllbnQgaW5uZXJIVE1MOiAnLCBlbG0uaW5uZXJIVE1MKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gaXRlcmF0ZSBhbmQgY29tcGFyZSBjaGlsZHJlbiBsaXN0c1xuICAgICAgICAgICAgdmFyIGNoaWxkcmVuTWF0Y2ggPSB0cnVlO1xuICAgICAgICAgICAgdmFyIGNoaWxkTm9kZSA9IGVsbS5maXJzdENoaWxkO1xuICAgICAgICAgICAgZm9yICh2YXIgaSQxID0gMDsgaSQxIDwgY2hpbGRyZW4ubGVuZ3RoOyBpJDErKykge1xuICAgICAgICAgICAgICBpZiAoIWNoaWxkTm9kZSB8fCAhaHlkcmF0ZShjaGlsZE5vZGUsIGNoaWxkcmVuW2kkMV0sIGluc2VydGVkVm5vZGVRdWV1ZSwgaW5WUHJlKSkge1xuICAgICAgICAgICAgICAgIGNoaWxkcmVuTWF0Y2ggPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNoaWxkTm9kZSA9IGNoaWxkTm9kZS5uZXh0U2libGluZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGlmIGNoaWxkTm9kZSBpcyBub3QgbnVsbCwgaXQgbWVhbnMgdGhlIGFjdHVhbCBjaGlsZE5vZGVzIGxpc3QgaXNcbiAgICAgICAgICAgIC8vIGxvbmdlciB0aGFuIHRoZSB2aXJ0dWFsIGNoaWxkcmVuIGxpc3QuXG4gICAgICAgICAgICBpZiAoIWNoaWxkcmVuTWF0Y2ggfHwgY2hpbGROb2RlKSB7XG4gICAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgICAgICAgIWh5ZHJhdGlvbkJhaWxlZFxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBoeWRyYXRpb25CYWlsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignUGFyZW50OiAnLCBlbG0pO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignTWlzbWF0Y2hpbmcgY2hpbGROb2RlcyB2cy4gVk5vZGVzOiAnLCBlbG0uY2hpbGROb2RlcywgY2hpbGRyZW4pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGlzRGVmKGRhdGEpKSB7XG4gICAgICAgIHZhciBmdWxsSW52b2tlID0gZmFsc2U7XG4gICAgICAgIGZvciAodmFyIGtleSBpbiBkYXRhKSB7XG4gICAgICAgICAgaWYgKCFpc1JlbmRlcmVkTW9kdWxlKGtleSkpIHtcbiAgICAgICAgICAgIGZ1bGxJbnZva2UgPSB0cnVlO1xuICAgICAgICAgICAgaW52b2tlQ3JlYXRlSG9va3Modm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSk7XG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIWZ1bGxJbnZva2UgJiYgZGF0YVsnY2xhc3MnXSkge1xuICAgICAgICAgIC8vIGVuc3VyZSBjb2xsZWN0aW5nIGRlcHMgZm9yIGRlZXAgY2xhc3MgYmluZGluZ3MgZm9yIGZ1dHVyZSB1cGRhdGVzXG4gICAgICAgICAgdHJhdmVyc2UoZGF0YVsnY2xhc3MnXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGVsbS5kYXRhICE9PSB2bm9kZS50ZXh0KSB7XG4gICAgICBlbG0uZGF0YSA9IHZub2RlLnRleHQ7XG4gICAgfVxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBmdW5jdGlvbiBhc3NlcnROb2RlTWF0Y2ggKG5vZGUsIHZub2RlLCBpblZQcmUpIHtcbiAgICBpZiAoaXNEZWYodm5vZGUudGFnKSkge1xuICAgICAgcmV0dXJuIHZub2RlLnRhZy5pbmRleE9mKCd2dWUtY29tcG9uZW50JykgPT09IDAgfHwgKFxuICAgICAgICAhaXNVbmtub3duRWxlbWVudCQkMSh2bm9kZSwgaW5WUHJlKSAmJlxuICAgICAgICB2bm9kZS50YWcudG9Mb3dlckNhc2UoKSA9PT0gKG5vZGUudGFnTmFtZSAmJiBub2RlLnRhZ05hbWUudG9Mb3dlckNhc2UoKSlcbiAgICAgIClcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5vZGUubm9kZVR5cGUgPT09ICh2bm9kZS5pc0NvbW1lbnQgPyA4IDogMylcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gcGF0Y2ggKG9sZFZub2RlLCB2bm9kZSwgaHlkcmF0aW5nLCByZW1vdmVPbmx5KSB7XG4gICAgaWYgKGlzVW5kZWYodm5vZGUpKSB7XG4gICAgICBpZiAoaXNEZWYob2xkVm5vZGUpKSB7IGludm9rZURlc3Ryb3lIb29rKG9sZFZub2RlKTsgfVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdmFyIGlzSW5pdGlhbFBhdGNoID0gZmFsc2U7XG4gICAgdmFyIGluc2VydGVkVm5vZGVRdWV1ZSA9IFtdO1xuXG4gICAgaWYgKGlzVW5kZWYob2xkVm5vZGUpKSB7XG4gICAgICAvLyBlbXB0eSBtb3VudCAobGlrZWx5IGFzIGNvbXBvbmVudCksIGNyZWF0ZSBuZXcgcm9vdCBlbGVtZW50XG4gICAgICBpc0luaXRpYWxQYXRjaCA9IHRydWU7XG4gICAgICBjcmVhdGVFbG0odm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBpc1JlYWxFbGVtZW50ID0gaXNEZWYob2xkVm5vZGUubm9kZVR5cGUpO1xuICAgICAgaWYgKCFpc1JlYWxFbGVtZW50ICYmIHNhbWVWbm9kZShvbGRWbm9kZSwgdm5vZGUpKSB7XG4gICAgICAgIC8vIHBhdGNoIGV4aXN0aW5nIHJvb3Qgbm9kZVxuICAgICAgICBwYXRjaFZub2RlKG9sZFZub2RlLCB2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBudWxsLCBudWxsLCByZW1vdmVPbmx5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChpc1JlYWxFbGVtZW50KSB7XG4gICAgICAgICAgLy8gbW91bnRpbmcgdG8gYSByZWFsIGVsZW1lbnRcbiAgICAgICAgICAvLyBjaGVjayBpZiB0aGlzIGlzIHNlcnZlci1yZW5kZXJlZCBjb250ZW50IGFuZCBpZiB3ZSBjYW4gcGVyZm9ybVxuICAgICAgICAgIC8vIGEgc3VjY2Vzc2Z1bCBoeWRyYXRpb24uXG4gICAgICAgICAgaWYgKG9sZFZub2RlLm5vZGVUeXBlID09PSAxICYmIG9sZFZub2RlLmhhc0F0dHJpYnV0ZShTU1JfQVRUUikpIHtcbiAgICAgICAgICAgIG9sZFZub2RlLnJlbW92ZUF0dHJpYnV0ZShTU1JfQVRUUik7XG4gICAgICAgICAgICBoeWRyYXRpbmcgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaXNUcnVlKGh5ZHJhdGluZykpIHtcbiAgICAgICAgICAgIGlmIChoeWRyYXRlKG9sZFZub2RlLCB2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKSkge1xuICAgICAgICAgICAgICBpbnZva2VJbnNlcnRIb29rKHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIHRydWUpO1xuICAgICAgICAgICAgICByZXR1cm4gb2xkVm5vZGVcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHdhcm4oXG4gICAgICAgICAgICAgICAgJ1RoZSBjbGllbnQtc2lkZSByZW5kZXJlZCB2aXJ0dWFsIERPTSB0cmVlIGlzIG5vdCBtYXRjaGluZyAnICtcbiAgICAgICAgICAgICAgICAnc2VydmVyLXJlbmRlcmVkIGNvbnRlbnQuIFRoaXMgaXMgbGlrZWx5IGNhdXNlZCBieSBpbmNvcnJlY3QgJyArXG4gICAgICAgICAgICAgICAgJ0hUTUwgbWFya3VwLCBmb3IgZXhhbXBsZSBuZXN0aW5nIGJsb2NrLWxldmVsIGVsZW1lbnRzIGluc2lkZSAnICtcbiAgICAgICAgICAgICAgICAnPHA+LCBvciBtaXNzaW5nIDx0Ym9keT4uIEJhaWxpbmcgaHlkcmF0aW9uIGFuZCBwZXJmb3JtaW5nICcgK1xuICAgICAgICAgICAgICAgICdmdWxsIGNsaWVudC1zaWRlIHJlbmRlci4nXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIGVpdGhlciBub3Qgc2VydmVyLXJlbmRlcmVkLCBvciBoeWRyYXRpb24gZmFpbGVkLlxuICAgICAgICAgIC8vIGNyZWF0ZSBhbiBlbXB0eSBub2RlIGFuZCByZXBsYWNlIGl0XG4gICAgICAgICAgb2xkVm5vZGUgPSBlbXB0eU5vZGVBdChvbGRWbm9kZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyByZXBsYWNpbmcgZXhpc3RpbmcgZWxlbWVudFxuICAgICAgICB2YXIgb2xkRWxtID0gb2xkVm5vZGUuZWxtO1xuICAgICAgICB2YXIgcGFyZW50RWxtID0gbm9kZU9wcy5wYXJlbnROb2RlKG9sZEVsbSk7XG5cbiAgICAgICAgLy8gY3JlYXRlIG5ldyBub2RlXG4gICAgICAgIGNyZWF0ZUVsbShcbiAgICAgICAgICB2bm9kZSxcbiAgICAgICAgICBpbnNlcnRlZFZub2RlUXVldWUsXG4gICAgICAgICAgLy8gZXh0cmVtZWx5IHJhcmUgZWRnZSBjYXNlOiBkbyBub3QgaW5zZXJ0IGlmIG9sZCBlbGVtZW50IGlzIGluIGFcbiAgICAgICAgICAvLyBsZWF2aW5nIHRyYW5zaXRpb24uIE9ubHkgaGFwcGVucyB3aGVuIGNvbWJpbmluZyB0cmFuc2l0aW9uICtcbiAgICAgICAgICAvLyBrZWVwLWFsaXZlICsgSE9Dcy4gKCM0NTkwKVxuICAgICAgICAgIG9sZEVsbS5fbGVhdmVDYiA/IG51bGwgOiBwYXJlbnRFbG0sXG4gICAgICAgICAgbm9kZU9wcy5uZXh0U2libGluZyhvbGRFbG0pXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gdXBkYXRlIHBhcmVudCBwbGFjZWhvbGRlciBub2RlIGVsZW1lbnQsIHJlY3Vyc2l2ZWx5XG4gICAgICAgIGlmIChpc0RlZih2bm9kZS5wYXJlbnQpKSB7XG4gICAgICAgICAgdmFyIGFuY2VzdG9yID0gdm5vZGUucGFyZW50O1xuICAgICAgICAgIHZhciBwYXRjaGFibGUgPSBpc1BhdGNoYWJsZSh2bm9kZSk7XG4gICAgICAgICAgd2hpbGUgKGFuY2VzdG9yKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNicy5kZXN0cm95Lmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgIGNicy5kZXN0cm95W2ldKGFuY2VzdG9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFuY2VzdG9yLmVsbSA9IHZub2RlLmVsbTtcbiAgICAgICAgICAgIGlmIChwYXRjaGFibGUpIHtcbiAgICAgICAgICAgICAgZm9yICh2YXIgaSQxID0gMDsgaSQxIDwgY2JzLmNyZWF0ZS5sZW5ndGg7ICsraSQxKSB7XG4gICAgICAgICAgICAgICAgY2JzLmNyZWF0ZVtpJDFdKGVtcHR5Tm9kZSwgYW5jZXN0b3IpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIC8vICM2NTEzXG4gICAgICAgICAgICAgIC8vIGludm9rZSBpbnNlcnQgaG9va3MgdGhhdCBtYXkgaGF2ZSBiZWVuIG1lcmdlZCBieSBjcmVhdGUgaG9va3MuXG4gICAgICAgICAgICAgIC8vIGUuZy4gZm9yIGRpcmVjdGl2ZXMgdGhhdCB1c2VzIHRoZSBcImluc2VydGVkXCIgaG9vay5cbiAgICAgICAgICAgICAgdmFyIGluc2VydCA9IGFuY2VzdG9yLmRhdGEuaG9vay5pbnNlcnQ7XG4gICAgICAgICAgICAgIGlmIChpbnNlcnQubWVyZ2VkKSB7XG4gICAgICAgICAgICAgICAgLy8gc3RhcnQgYXQgaW5kZXggMSB0byBhdm9pZCByZS1pbnZva2luZyBjb21wb25lbnQgbW91bnRlZCBob29rXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSQyID0gMTsgaSQyIDwgaW5zZXJ0LmZucy5sZW5ndGg7IGkkMisrKSB7XG4gICAgICAgICAgICAgICAgICBpbnNlcnQuZm5zW2kkMl0oKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJlZ2lzdGVyUmVmKGFuY2VzdG9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFuY2VzdG9yID0gYW5jZXN0b3IucGFyZW50O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGRlc3Ryb3kgb2xkIG5vZGVcbiAgICAgICAgaWYgKGlzRGVmKHBhcmVudEVsbSkpIHtcbiAgICAgICAgICByZW1vdmVWbm9kZXMocGFyZW50RWxtLCBbb2xkVm5vZGVdLCAwLCAwKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0RlZihvbGRWbm9kZS50YWcpKSB7XG4gICAgICAgICAgaW52b2tlRGVzdHJveUhvb2sob2xkVm5vZGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaW52b2tlSW5zZXJ0SG9vayh2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBpc0luaXRpYWxQYXRjaCk7XG4gICAgcmV0dXJuIHZub2RlLmVsbVxuICB9XG59XG5cbi8qICAqL1xuXG52YXIgZGlyZWN0aXZlcyA9IHtcbiAgY3JlYXRlOiB1cGRhdGVEaXJlY3RpdmVzLFxuICB1cGRhdGU6IHVwZGF0ZURpcmVjdGl2ZXMsXG4gIGRlc3Ryb3k6IGZ1bmN0aW9uIHVuYmluZERpcmVjdGl2ZXMgKHZub2RlKSB7XG4gICAgdXBkYXRlRGlyZWN0aXZlcyh2bm9kZSwgZW1wdHlOb2RlKTtcbiAgfVxufTtcblxuZnVuY3Rpb24gdXBkYXRlRGlyZWN0aXZlcyAob2xkVm5vZGUsIHZub2RlKSB7XG4gIGlmIChvbGRWbm9kZS5kYXRhLmRpcmVjdGl2ZXMgfHwgdm5vZGUuZGF0YS5kaXJlY3RpdmVzKSB7XG4gICAgX3VwZGF0ZShvbGRWbm9kZSwgdm5vZGUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIF91cGRhdGUgKG9sZFZub2RlLCB2bm9kZSkge1xuICB2YXIgaXNDcmVhdGUgPSBvbGRWbm9kZSA9PT0gZW1wdHlOb2RlO1xuICB2YXIgaXNEZXN0cm95ID0gdm5vZGUgPT09IGVtcHR5Tm9kZTtcbiAgdmFyIG9sZERpcnMgPSBub3JtYWxpemVEaXJlY3RpdmVzJDEob2xkVm5vZGUuZGF0YS5kaXJlY3RpdmVzLCBvbGRWbm9kZS5jb250ZXh0KTtcbiAgdmFyIG5ld0RpcnMgPSBub3JtYWxpemVEaXJlY3RpdmVzJDEodm5vZGUuZGF0YS5kaXJlY3RpdmVzLCB2bm9kZS5jb250ZXh0KTtcblxuICB2YXIgZGlyc1dpdGhJbnNlcnQgPSBbXTtcbiAgdmFyIGRpcnNXaXRoUG9zdHBhdGNoID0gW107XG5cbiAgdmFyIGtleSwgb2xkRGlyLCBkaXI7XG4gIGZvciAoa2V5IGluIG5ld0RpcnMpIHtcbiAgICBvbGREaXIgPSBvbGREaXJzW2tleV07XG4gICAgZGlyID0gbmV3RGlyc1trZXldO1xuICAgIGlmICghb2xkRGlyKSB7XG4gICAgICAvLyBuZXcgZGlyZWN0aXZlLCBiaW5kXG4gICAgICBjYWxsSG9vayQxKGRpciwgJ2JpbmQnLCB2bm9kZSwgb2xkVm5vZGUpO1xuICAgICAgaWYgKGRpci5kZWYgJiYgZGlyLmRlZi5pbnNlcnRlZCkge1xuICAgICAgICBkaXJzV2l0aEluc2VydC5wdXNoKGRpcik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGV4aXN0aW5nIGRpcmVjdGl2ZSwgdXBkYXRlXG4gICAgICBkaXIub2xkVmFsdWUgPSBvbGREaXIudmFsdWU7XG4gICAgICBkaXIub2xkQXJnID0gb2xkRGlyLmFyZztcbiAgICAgIGNhbGxIb29rJDEoZGlyLCAndXBkYXRlJywgdm5vZGUsIG9sZFZub2RlKTtcbiAgICAgIGlmIChkaXIuZGVmICYmIGRpci5kZWYuY29tcG9uZW50VXBkYXRlZCkge1xuICAgICAgICBkaXJzV2l0aFBvc3RwYXRjaC5wdXNoKGRpcik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGRpcnNXaXRoSW5zZXJ0Lmxlbmd0aCkge1xuICAgIHZhciBjYWxsSW5zZXJ0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkaXJzV2l0aEluc2VydC5sZW5ndGg7IGkrKykge1xuICAgICAgICBjYWxsSG9vayQxKGRpcnNXaXRoSW5zZXJ0W2ldLCAnaW5zZXJ0ZWQnLCB2bm9kZSwgb2xkVm5vZGUpO1xuICAgICAgfVxuICAgIH07XG4gICAgaWYgKGlzQ3JlYXRlKSB7XG4gICAgICBtZXJnZVZOb2RlSG9vayh2bm9kZSwgJ2luc2VydCcsIGNhbGxJbnNlcnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjYWxsSW5zZXJ0KCk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGRpcnNXaXRoUG9zdHBhdGNoLmxlbmd0aCkge1xuICAgIG1lcmdlVk5vZGVIb29rKHZub2RlLCAncG9zdHBhdGNoJywgZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkaXJzV2l0aFBvc3RwYXRjaC5sZW5ndGg7IGkrKykge1xuICAgICAgICBjYWxsSG9vayQxKGRpcnNXaXRoUG9zdHBhdGNoW2ldLCAnY29tcG9uZW50VXBkYXRlZCcsIHZub2RlLCBvbGRWbm9kZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBpZiAoIWlzQ3JlYXRlKSB7XG4gICAgZm9yIChrZXkgaW4gb2xkRGlycykge1xuICAgICAgaWYgKCFuZXdEaXJzW2tleV0pIHtcbiAgICAgICAgLy8gbm8gbG9uZ2VyIHByZXNlbnQsIHVuYmluZFxuICAgICAgICBjYWxsSG9vayQxKG9sZERpcnNba2V5XSwgJ3VuYmluZCcsIG9sZFZub2RlLCBvbGRWbm9kZSwgaXNEZXN0cm95KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxudmFyIGVtcHR5TW9kaWZpZXJzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuZnVuY3Rpb24gbm9ybWFsaXplRGlyZWN0aXZlcyQxIChcbiAgZGlycyxcbiAgdm1cbikge1xuICB2YXIgcmVzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgaWYgKCFkaXJzKSB7XG4gICAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gICAgcmV0dXJuIHJlc1xuICB9XG4gIHZhciBpLCBkaXI7XG4gIGZvciAoaSA9IDA7IGkgPCBkaXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgZGlyID0gZGlyc1tpXTtcbiAgICBpZiAoIWRpci5tb2RpZmllcnMpIHtcbiAgICAgIC8vICRmbG93LWRpc2FibGUtbGluZVxuICAgICAgZGlyLm1vZGlmaWVycyA9IGVtcHR5TW9kaWZpZXJzO1xuICAgIH1cbiAgICByZXNbZ2V0UmF3RGlyTmFtZShkaXIpXSA9IGRpcjtcbiAgICBkaXIuZGVmID0gcmVzb2x2ZUFzc2V0KHZtLiRvcHRpb25zLCAnZGlyZWN0aXZlcycsIGRpci5uYW1lLCB0cnVlKTtcbiAgfVxuICAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbiAgcmV0dXJuIHJlc1xufVxuXG5mdW5jdGlvbiBnZXRSYXdEaXJOYW1lIChkaXIpIHtcbiAgcmV0dXJuIGRpci5yYXdOYW1lIHx8ICgoZGlyLm5hbWUpICsgXCIuXCIgKyAoT2JqZWN0LmtleXMoZGlyLm1vZGlmaWVycyB8fCB7fSkuam9pbignLicpKSlcbn1cblxuZnVuY3Rpb24gY2FsbEhvb2skMSAoZGlyLCBob29rLCB2bm9kZSwgb2xkVm5vZGUsIGlzRGVzdHJveSkge1xuICB2YXIgZm4gPSBkaXIuZGVmICYmIGRpci5kZWZbaG9va107XG4gIGlmIChmbikge1xuICAgIHRyeSB7XG4gICAgICBmbih2bm9kZS5lbG0sIGRpciwgdm5vZGUsIG9sZFZub2RlLCBpc0Rlc3Ryb3kpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGhhbmRsZUVycm9yKGUsIHZub2RlLmNvbnRleHQsIChcImRpcmVjdGl2ZSBcIiArIChkaXIubmFtZSkgKyBcIiBcIiArIGhvb2sgKyBcIiBob29rXCIpKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIGJhc2VNb2R1bGVzID0gW1xuICByZWYsXG4gIGRpcmVjdGl2ZXNcbl07XG5cbi8qICAqL1xuXG5mdW5jdGlvbiB1cGRhdGVBdHRycyAob2xkVm5vZGUsIHZub2RlKSB7XG4gIHZhciBvcHRzID0gdm5vZGUuY29tcG9uZW50T3B0aW9ucztcbiAgaWYgKGlzRGVmKG9wdHMpICYmIG9wdHMuQ3Rvci5vcHRpb25zLmluaGVyaXRBdHRycyA9PT0gZmFsc2UpIHtcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoaXNVbmRlZihvbGRWbm9kZS5kYXRhLmF0dHJzKSAmJiBpc1VuZGVmKHZub2RlLmRhdGEuYXR0cnMpKSB7XG4gICAgcmV0dXJuXG4gIH1cbiAgdmFyIGtleSwgY3VyLCBvbGQ7XG4gIHZhciBlbG0gPSB2bm9kZS5lbG07XG4gIHZhciBvbGRBdHRycyA9IG9sZFZub2RlLmRhdGEuYXR0cnMgfHwge307XG4gIHZhciBhdHRycyA9IHZub2RlLmRhdGEuYXR0cnMgfHwge307XG4gIC8vIGNsb25lIG9ic2VydmVkIG9iamVjdHMsIGFzIHRoZSB1c2VyIHByb2JhYmx5IHdhbnRzIHRvIG11dGF0ZSBpdFxuICBpZiAoaXNEZWYoYXR0cnMuX19vYl9fKSkge1xuICAgIGF0dHJzID0gdm5vZGUuZGF0YS5hdHRycyA9IGV4dGVuZCh7fSwgYXR0cnMpO1xuICB9XG5cbiAgZm9yIChrZXkgaW4gYXR0cnMpIHtcbiAgICBjdXIgPSBhdHRyc1trZXldO1xuICAgIG9sZCA9IG9sZEF0dHJzW2tleV07XG4gICAgaWYgKG9sZCAhPT0gY3VyKSB7XG4gICAgICBzZXRBdHRyKGVsbSwga2V5LCBjdXIpO1xuICAgIH1cbiAgfVxuICAvLyAjNDM5MTogaW4gSUU5LCBzZXR0aW5nIHR5cGUgY2FuIHJlc2V0IHZhbHVlIGZvciBpbnB1dFt0eXBlPXJhZGlvXVxuICAvLyAjNjY2NjogSUUvRWRnZSBmb3JjZXMgcHJvZ3Jlc3MgdmFsdWUgZG93biB0byAxIGJlZm9yZSBzZXR0aW5nIGEgbWF4XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoKGlzSUUgfHwgaXNFZGdlKSAmJiBhdHRycy52YWx1ZSAhPT0gb2xkQXR0cnMudmFsdWUpIHtcbiAgICBzZXRBdHRyKGVsbSwgJ3ZhbHVlJywgYXR0cnMudmFsdWUpO1xuICB9XG4gIGZvciAoa2V5IGluIG9sZEF0dHJzKSB7XG4gICAgaWYgKGlzVW5kZWYoYXR0cnNba2V5XSkpIHtcbiAgICAgIGlmIChpc1hsaW5rKGtleSkpIHtcbiAgICAgICAgZWxtLnJlbW92ZUF0dHJpYnV0ZU5TKHhsaW5rTlMsIGdldFhsaW5rUHJvcChrZXkpKTtcbiAgICAgIH0gZWxzZSBpZiAoIWlzRW51bWVyYXRlZEF0dHIoa2V5KSkge1xuICAgICAgICBlbG0ucmVtb3ZlQXR0cmlidXRlKGtleSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHNldEF0dHIgKGVsLCBrZXksIHZhbHVlKSB7XG4gIGlmIChlbC50YWdOYW1lLmluZGV4T2YoJy0nKSA+IC0xKSB7XG4gICAgYmFzZVNldEF0dHIoZWwsIGtleSwgdmFsdWUpO1xuICB9IGVsc2UgaWYgKGlzQm9vbGVhbkF0dHIoa2V5KSkge1xuICAgIC8vIHNldCBhdHRyaWJ1dGUgZm9yIGJsYW5rIHZhbHVlXG4gICAgLy8gZS5nLiA8b3B0aW9uIGRpc2FibGVkPlNlbGVjdCBvbmU8L29wdGlvbj5cbiAgICBpZiAoaXNGYWxzeUF0dHJWYWx1ZSh2YWx1ZSkpIHtcbiAgICAgIGVsLnJlbW92ZUF0dHJpYnV0ZShrZXkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB0ZWNobmljYWxseSBhbGxvd2Z1bGxzY3JlZW4gaXMgYSBib29sZWFuIGF0dHJpYnV0ZSBmb3IgPGlmcmFtZT4sXG4gICAgICAvLyBidXQgRmxhc2ggZXhwZWN0cyBhIHZhbHVlIG9mIFwidHJ1ZVwiIHdoZW4gdXNlZCBvbiA8ZW1iZWQ+IHRhZ1xuICAgICAgdmFsdWUgPSBrZXkgPT09ICdhbGxvd2Z1bGxzY3JlZW4nICYmIGVsLnRhZ05hbWUgPT09ICdFTUJFRCdcbiAgICAgICAgPyAndHJ1ZSdcbiAgICAgICAgOiBrZXk7XG4gICAgICBlbC5zZXRBdHRyaWJ1dGUoa2V5LCB2YWx1ZSk7XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzRW51bWVyYXRlZEF0dHIoa2V5KSkge1xuICAgIGVsLnNldEF0dHJpYnV0ZShrZXksIGNvbnZlcnRFbnVtZXJhdGVkVmFsdWUoa2V5LCB2YWx1ZSkpO1xuICB9IGVsc2UgaWYgKGlzWGxpbmsoa2V5KSkge1xuICAgIGlmIChpc0ZhbHN5QXR0clZhbHVlKHZhbHVlKSkge1xuICAgICAgZWwucmVtb3ZlQXR0cmlidXRlTlMoeGxpbmtOUywgZ2V0WGxpbmtQcm9wKGtleSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbC5zZXRBdHRyaWJ1dGVOUyh4bGlua05TLCBrZXksIHZhbHVlKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgYmFzZVNldEF0dHIoZWwsIGtleSwgdmFsdWUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGJhc2VTZXRBdHRyIChlbCwga2V5LCB2YWx1ZSkge1xuICBpZiAoaXNGYWxzeUF0dHJWYWx1ZSh2YWx1ZSkpIHtcbiAgICBlbC5yZW1vdmVBdHRyaWJ1dGUoa2V5KTtcbiAgfSBlbHNlIHtcbiAgICAvLyAjNzEzODogSUUxMCAmIDExIGZpcmVzIGlucHV0IGV2ZW50IHdoZW4gc2V0dGluZyBwbGFjZWhvbGRlciBvblxuICAgIC8vIDx0ZXh0YXJlYT4uLi4gYmxvY2sgdGhlIGZpcnN0IGlucHV0IGV2ZW50IGFuZCByZW1vdmUgdGhlIGJsb2NrZXJcbiAgICAvLyBpbW1lZGlhdGVseS5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoXG4gICAgICBpc0lFICYmICFpc0lFOSAmJlxuICAgICAgZWwudGFnTmFtZSA9PT0gJ1RFWFRBUkVBJyAmJlxuICAgICAga2V5ID09PSAncGxhY2Vob2xkZXInICYmIHZhbHVlICE9PSAnJyAmJiAhZWwuX19pZXBoXG4gICAgKSB7XG4gICAgICB2YXIgYmxvY2tlciA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2lucHV0JywgYmxvY2tlcik7XG4gICAgICB9O1xuICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCBibG9ja2VyKTtcbiAgICAgIC8vICRmbG93LWRpc2FibGUtbGluZVxuICAgICAgZWwuX19pZXBoID0gdHJ1ZTsgLyogSUUgcGxhY2Vob2xkZXIgcGF0Y2hlZCAqL1xuICAgIH1cbiAgICBlbC5zZXRBdHRyaWJ1dGUoa2V5LCB2YWx1ZSk7XG4gIH1cbn1cblxudmFyIGF0dHJzID0ge1xuICBjcmVhdGU6IHVwZGF0ZUF0dHJzLFxuICB1cGRhdGU6IHVwZGF0ZUF0dHJzXG59O1xuXG4vKiAgKi9cblxuZnVuY3Rpb24gdXBkYXRlQ2xhc3MgKG9sZFZub2RlLCB2bm9kZSkge1xuICB2YXIgZWwgPSB2bm9kZS5lbG07XG4gIHZhciBkYXRhID0gdm5vZGUuZGF0YTtcbiAgdmFyIG9sZERhdGEgPSBvbGRWbm9kZS5kYXRhO1xuICBpZiAoXG4gICAgaXNVbmRlZihkYXRhLnN0YXRpY0NsYXNzKSAmJlxuICAgIGlzVW5kZWYoZGF0YS5jbGFzcykgJiYgKFxuICAgICAgaXNVbmRlZihvbGREYXRhKSB8fCAoXG4gICAgICAgIGlzVW5kZWYob2xkRGF0YS5zdGF0aWNDbGFzcykgJiZcbiAgICAgICAgaXNVbmRlZihvbGREYXRhLmNsYXNzKVxuICAgICAgKVxuICAgIClcbiAgKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICB2YXIgY2xzID0gZ2VuQ2xhc3NGb3JWbm9kZSh2bm9kZSk7XG5cbiAgLy8gaGFuZGxlIHRyYW5zaXRpb24gY2xhc3Nlc1xuICB2YXIgdHJhbnNpdGlvbkNsYXNzID0gZWwuX3RyYW5zaXRpb25DbGFzc2VzO1xuICBpZiAoaXNEZWYodHJhbnNpdGlvbkNsYXNzKSkge1xuICAgIGNscyA9IGNvbmNhdChjbHMsIHN0cmluZ2lmeUNsYXNzKHRyYW5zaXRpb25DbGFzcykpO1xuICB9XG5cbiAgLy8gc2V0IHRoZSBjbGFzc1xuICBpZiAoY2xzICE9PSBlbC5fcHJldkNsYXNzKSB7XG4gICAgZWwuc2V0QXR0cmlidXRlKCdjbGFzcycsIGNscyk7XG4gICAgZWwuX3ByZXZDbGFzcyA9IGNscztcbiAgfVxufVxuXG52YXIga2xhc3MgPSB7XG4gIGNyZWF0ZTogdXBkYXRlQ2xhc3MsXG4gIHVwZGF0ZTogdXBkYXRlQ2xhc3Ncbn07XG5cbi8qICAqL1xuXG52YXIgdmFsaWREaXZpc2lvbkNoYXJSRSA9IC9bXFx3KS4rXFwtXyRcXF1dLztcblxuZnVuY3Rpb24gcGFyc2VGaWx0ZXJzIChleHApIHtcbiAgdmFyIGluU2luZ2xlID0gZmFsc2U7XG4gIHZhciBpbkRvdWJsZSA9IGZhbHNlO1xuICB2YXIgaW5UZW1wbGF0ZVN0cmluZyA9IGZhbHNlO1xuICB2YXIgaW5SZWdleCA9IGZhbHNlO1xuICB2YXIgY3VybHkgPSAwO1xuICB2YXIgc3F1YXJlID0gMDtcbiAgdmFyIHBhcmVuID0gMDtcbiAgdmFyIGxhc3RGaWx0ZXJJbmRleCA9IDA7XG4gIHZhciBjLCBwcmV2LCBpLCBleHByZXNzaW9uLCBmaWx0ZXJzO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBleHAubGVuZ3RoOyBpKyspIHtcbiAgICBwcmV2ID0gYztcbiAgICBjID0gZXhwLmNoYXJDb2RlQXQoaSk7XG4gICAgaWYgKGluU2luZ2xlKSB7XG4gICAgICBpZiAoYyA9PT0gMHgyNyAmJiBwcmV2ICE9PSAweDVDKSB7IGluU2luZ2xlID0gZmFsc2U7IH1cbiAgICB9IGVsc2UgaWYgKGluRG91YmxlKSB7XG4gICAgICBpZiAoYyA9PT0gMHgyMiAmJiBwcmV2ICE9PSAweDVDKSB7IGluRG91YmxlID0gZmFsc2U7IH1cbiAgICB9IGVsc2UgaWYgKGluVGVtcGxhdGVTdHJpbmcpIHtcbiAgICAgIGlmIChjID09PSAweDYwICYmIHByZXYgIT09IDB4NUMpIHsgaW5UZW1wbGF0ZVN0cmluZyA9IGZhbHNlOyB9XG4gICAgfSBlbHNlIGlmIChpblJlZ2V4KSB7XG4gICAgICBpZiAoYyA9PT0gMHgyZiAmJiBwcmV2ICE9PSAweDVDKSB7IGluUmVnZXggPSBmYWxzZTsgfVxuICAgIH0gZWxzZSBpZiAoXG4gICAgICBjID09PSAweDdDICYmIC8vIHBpcGVcbiAgICAgIGV4cC5jaGFyQ29kZUF0KGkgKyAxKSAhPT0gMHg3QyAmJlxuICAgICAgZXhwLmNoYXJDb2RlQXQoaSAtIDEpICE9PSAweDdDICYmXG4gICAgICAhY3VybHkgJiYgIXNxdWFyZSAmJiAhcGFyZW5cbiAgICApIHtcbiAgICAgIGlmIChleHByZXNzaW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gZmlyc3QgZmlsdGVyLCBlbmQgb2YgZXhwcmVzc2lvblxuICAgICAgICBsYXN0RmlsdGVySW5kZXggPSBpICsgMTtcbiAgICAgICAgZXhwcmVzc2lvbiA9IGV4cC5zbGljZSgwLCBpKS50cmltKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwdXNoRmlsdGVyKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHN3aXRjaCAoYykge1xuICAgICAgICBjYXNlIDB4MjI6IGluRG91YmxlID0gdHJ1ZTsgYnJlYWsgICAgICAgICAvLyBcIlxuICAgICAgICBjYXNlIDB4Mjc6IGluU2luZ2xlID0gdHJ1ZTsgYnJlYWsgICAgICAgICAvLyAnXG4gICAgICAgIGNhc2UgMHg2MDogaW5UZW1wbGF0ZVN0cmluZyA9IHRydWU7IGJyZWFrIC8vIGBcbiAgICAgICAgY2FzZSAweDI4OiBwYXJlbisrOyBicmVhayAgICAgICAgICAgICAgICAgLy8gKFxuICAgICAgICBjYXNlIDB4Mjk6IHBhcmVuLS07IGJyZWFrICAgICAgICAgICAgICAgICAvLyApXG4gICAgICAgIGNhc2UgMHg1Qjogc3F1YXJlKys7IGJyZWFrICAgICAgICAgICAgICAgIC8vIFtcbiAgICAgICAgY2FzZSAweDVEOiBzcXVhcmUtLTsgYnJlYWsgICAgICAgICAgICAgICAgLy8gXVxuICAgICAgICBjYXNlIDB4N0I6IGN1cmx5Kys7IGJyZWFrICAgICAgICAgICAgICAgICAvLyB7XG4gICAgICAgIGNhc2UgMHg3RDogY3VybHktLTsgYnJlYWsgICAgICAgICAgICAgICAgIC8vIH1cbiAgICAgIH1cbiAgICAgIGlmIChjID09PSAweDJmKSB7IC8vIC9cbiAgICAgICAgdmFyIGogPSBpIC0gMTtcbiAgICAgICAgdmFyIHAgPSAodm9pZCAwKTtcbiAgICAgICAgLy8gZmluZCBmaXJzdCBub24td2hpdGVzcGFjZSBwcmV2IGNoYXJcbiAgICAgICAgZm9yICg7IGogPj0gMDsgai0tKSB7XG4gICAgICAgICAgcCA9IGV4cC5jaGFyQXQoaik7XG4gICAgICAgICAgaWYgKHAgIT09ICcgJykgeyBicmVhayB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFwIHx8ICF2YWxpZERpdmlzaW9uQ2hhclJFLnRlc3QocCkpIHtcbiAgICAgICAgICBpblJlZ2V4ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChleHByZXNzaW9uID09PSB1bmRlZmluZWQpIHtcbiAgICBleHByZXNzaW9uID0gZXhwLnNsaWNlKDAsIGkpLnRyaW0oKTtcbiAgfSBlbHNlIGlmIChsYXN0RmlsdGVySW5kZXggIT09IDApIHtcbiAgICBwdXNoRmlsdGVyKCk7XG4gIH1cblxuICBmdW5jdGlvbiBwdXNoRmlsdGVyICgpIHtcbiAgICAoZmlsdGVycyB8fCAoZmlsdGVycyA9IFtdKSkucHVzaChleHAuc2xpY2UobGFzdEZpbHRlckluZGV4LCBpKS50cmltKCkpO1xuICAgIGxhc3RGaWx0ZXJJbmRleCA9IGkgKyAxO1xuICB9XG5cbiAgaWYgKGZpbHRlcnMpIHtcbiAgICBmb3IgKGkgPSAwOyBpIDwgZmlsdGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgZXhwcmVzc2lvbiA9IHdyYXBGaWx0ZXIoZXhwcmVzc2lvbiwgZmlsdGVyc1tpXSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGV4cHJlc3Npb25cbn1cblxuZnVuY3Rpb24gd3JhcEZpbHRlciAoZXhwLCBmaWx0ZXIpIHtcbiAgdmFyIGkgPSBmaWx0ZXIuaW5kZXhPZignKCcpO1xuICBpZiAoaSA8IDApIHtcbiAgICAvLyBfZjogcmVzb2x2ZUZpbHRlclxuICAgIHJldHVybiAoXCJfZihcXFwiXCIgKyBmaWx0ZXIgKyBcIlxcXCIpKFwiICsgZXhwICsgXCIpXCIpXG4gIH0gZWxzZSB7XG4gICAgdmFyIG5hbWUgPSBmaWx0ZXIuc2xpY2UoMCwgaSk7XG4gICAgdmFyIGFyZ3MgPSBmaWx0ZXIuc2xpY2UoaSArIDEpO1xuICAgIHJldHVybiAoXCJfZihcXFwiXCIgKyBuYW1lICsgXCJcXFwiKShcIiArIGV4cCArIChhcmdzICE9PSAnKScgPyAnLCcgKyBhcmdzIDogYXJncykpXG4gIH1cbn1cblxuLyogICovXG5cblxuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xuZnVuY3Rpb24gYmFzZVdhcm4gKG1zZywgcmFuZ2UpIHtcbiAgY29uc29sZS5lcnJvcigoXCJbVnVlIGNvbXBpbGVyXTogXCIgKyBtc2cpKTtcbn1cbi8qIGVzbGludC1lbmFibGUgbm8tdW51c2VkLXZhcnMgKi9cblxuZnVuY3Rpb24gcGx1Y2tNb2R1bGVGdW5jdGlvbiAoXG4gIG1vZHVsZXMsXG4gIGtleVxuKSB7XG4gIHJldHVybiBtb2R1bGVzXG4gICAgPyBtb2R1bGVzLm1hcChmdW5jdGlvbiAobSkgeyByZXR1cm4gbVtrZXldOyB9KS5maWx0ZXIoZnVuY3Rpb24gKF8pIHsgcmV0dXJuIF87IH0pXG4gICAgOiBbXVxufVxuXG5mdW5jdGlvbiBhZGRQcm9wIChlbCwgbmFtZSwgdmFsdWUsIHJhbmdlLCBkeW5hbWljKSB7XG4gIChlbC5wcm9wcyB8fCAoZWwucHJvcHMgPSBbXSkpLnB1c2gocmFuZ2VTZXRJdGVtKHsgbmFtZTogbmFtZSwgdmFsdWU6IHZhbHVlLCBkeW5hbWljOiBkeW5hbWljIH0sIHJhbmdlKSk7XG4gIGVsLnBsYWluID0gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGFkZEF0dHIgKGVsLCBuYW1lLCB2YWx1ZSwgcmFuZ2UsIGR5bmFtaWMpIHtcbiAgdmFyIGF0dHJzID0gZHluYW1pY1xuICAgID8gKGVsLmR5bmFtaWNBdHRycyB8fCAoZWwuZHluYW1pY0F0dHJzID0gW10pKVxuICAgIDogKGVsLmF0dHJzIHx8IChlbC5hdHRycyA9IFtdKSk7XG4gIGF0dHJzLnB1c2gocmFuZ2VTZXRJdGVtKHsgbmFtZTogbmFtZSwgdmFsdWU6IHZhbHVlLCBkeW5hbWljOiBkeW5hbWljIH0sIHJhbmdlKSk7XG4gIGVsLnBsYWluID0gZmFsc2U7XG59XG5cbi8vIGFkZCBhIHJhdyBhdHRyICh1c2UgdGhpcyBpbiBwcmVUcmFuc2Zvcm1zKVxuZnVuY3Rpb24gYWRkUmF3QXR0ciAoZWwsIG5hbWUsIHZhbHVlLCByYW5nZSkge1xuICBlbC5hdHRyc01hcFtuYW1lXSA9IHZhbHVlO1xuICBlbC5hdHRyc0xpc3QucHVzaChyYW5nZVNldEl0ZW0oeyBuYW1lOiBuYW1lLCB2YWx1ZTogdmFsdWUgfSwgcmFuZ2UpKTtcbn1cblxuZnVuY3Rpb24gYWRkRGlyZWN0aXZlIChcbiAgZWwsXG4gIG5hbWUsXG4gIHJhd05hbWUsXG4gIHZhbHVlLFxuICBhcmcsXG4gIGlzRHluYW1pY0FyZyxcbiAgbW9kaWZpZXJzLFxuICByYW5nZVxuKSB7XG4gIChlbC5kaXJlY3RpdmVzIHx8IChlbC5kaXJlY3RpdmVzID0gW10pKS5wdXNoKHJhbmdlU2V0SXRlbSh7XG4gICAgbmFtZTogbmFtZSxcbiAgICByYXdOYW1lOiByYXdOYW1lLFxuICAgIHZhbHVlOiB2YWx1ZSxcbiAgICBhcmc6IGFyZyxcbiAgICBpc0R5bmFtaWNBcmc6IGlzRHluYW1pY0FyZyxcbiAgICBtb2RpZmllcnM6IG1vZGlmaWVyc1xuICB9LCByYW5nZSkpO1xuICBlbC5wbGFpbiA9IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBwcmVwZW5kTW9kaWZpZXJNYXJrZXIgKHN5bWJvbCwgbmFtZSwgZHluYW1pYykge1xuICByZXR1cm4gZHluYW1pY1xuICAgID8gKFwiX3AoXCIgKyBuYW1lICsgXCIsXFxcIlwiICsgc3ltYm9sICsgXCJcXFwiKVwiKVxuICAgIDogc3ltYm9sICsgbmFtZSAvLyBtYXJrIHRoZSBldmVudCBhcyBjYXB0dXJlZFxufVxuXG5mdW5jdGlvbiBhZGRIYW5kbGVyIChcbiAgZWwsXG4gIG5hbWUsXG4gIHZhbHVlLFxuICBtb2RpZmllcnMsXG4gIGltcG9ydGFudCxcbiAgd2FybixcbiAgcmFuZ2UsXG4gIGR5bmFtaWNcbikge1xuICBtb2RpZmllcnMgPSBtb2RpZmllcnMgfHwgZW1wdHlPYmplY3Q7XG4gIC8vIHdhcm4gcHJldmVudCBhbmQgcGFzc2l2ZSBtb2RpZmllclxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKFxuICAgIHdhcm4gJiZcbiAgICBtb2RpZmllcnMucHJldmVudCAmJiBtb2RpZmllcnMucGFzc2l2ZVxuICApIHtcbiAgICB3YXJuKFxuICAgICAgJ3Bhc3NpdmUgYW5kIHByZXZlbnQgY2FuXFwndCBiZSB1c2VkIHRvZ2V0aGVyLiAnICtcbiAgICAgICdQYXNzaXZlIGhhbmRsZXIgY2FuXFwndCBwcmV2ZW50IGRlZmF1bHQgZXZlbnQuJyxcbiAgICAgIHJhbmdlXG4gICAgKTtcbiAgfVxuXG4gIC8vIG5vcm1hbGl6ZSBjbGljay5yaWdodCBhbmQgY2xpY2subWlkZGxlIHNpbmNlIHRoZXkgZG9uJ3QgYWN0dWFsbHkgZmlyZVxuICAvLyB0aGlzIGlzIHRlY2huaWNhbGx5IGJyb3dzZXItc3BlY2lmaWMsIGJ1dCBhdCBsZWFzdCBmb3Igbm93IGJyb3dzZXJzIGFyZVxuICAvLyB0aGUgb25seSB0YXJnZXQgZW52cyB0aGF0IGhhdmUgcmlnaHQvbWlkZGxlIGNsaWNrcy5cbiAgaWYgKG1vZGlmaWVycy5yaWdodCkge1xuICAgIGlmIChkeW5hbWljKSB7XG4gICAgICBuYW1lID0gXCIoXCIgKyBuYW1lICsgXCIpPT09J2NsaWNrJz8nY29udGV4dG1lbnUnOihcIiArIG5hbWUgKyBcIilcIjtcbiAgICB9IGVsc2UgaWYgKG5hbWUgPT09ICdjbGljaycpIHtcbiAgICAgIG5hbWUgPSAnY29udGV4dG1lbnUnO1xuICAgICAgZGVsZXRlIG1vZGlmaWVycy5yaWdodDtcbiAgICB9XG4gIH0gZWxzZSBpZiAobW9kaWZpZXJzLm1pZGRsZSkge1xuICAgIGlmIChkeW5hbWljKSB7XG4gICAgICBuYW1lID0gXCIoXCIgKyBuYW1lICsgXCIpPT09J2NsaWNrJz8nbW91c2V1cCc6KFwiICsgbmFtZSArIFwiKVwiO1xuICAgIH0gZWxzZSBpZiAobmFtZSA9PT0gJ2NsaWNrJykge1xuICAgICAgbmFtZSA9ICdtb3VzZXVwJztcbiAgICB9XG4gIH1cblxuICAvLyBjaGVjayBjYXB0dXJlIG1vZGlmaWVyXG4gIGlmIChtb2RpZmllcnMuY2FwdHVyZSkge1xuICAgIGRlbGV0ZSBtb2RpZmllcnMuY2FwdHVyZTtcbiAgICBuYW1lID0gcHJlcGVuZE1vZGlmaWVyTWFya2VyKCchJywgbmFtZSwgZHluYW1pYyk7XG4gIH1cbiAgaWYgKG1vZGlmaWVycy5vbmNlKSB7XG4gICAgZGVsZXRlIG1vZGlmaWVycy5vbmNlO1xuICAgIG5hbWUgPSBwcmVwZW5kTW9kaWZpZXJNYXJrZXIoJ34nLCBuYW1lLCBkeW5hbWljKTtcbiAgfVxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKG1vZGlmaWVycy5wYXNzaXZlKSB7XG4gICAgZGVsZXRlIG1vZGlmaWVycy5wYXNzaXZlO1xuICAgIG5hbWUgPSBwcmVwZW5kTW9kaWZpZXJNYXJrZXIoJyYnLCBuYW1lLCBkeW5hbWljKTtcbiAgfVxuXG4gIHZhciBldmVudHM7XG4gIGlmIChtb2RpZmllcnMubmF0aXZlKSB7XG4gICAgZGVsZXRlIG1vZGlmaWVycy5uYXRpdmU7XG4gICAgZXZlbnRzID0gZWwubmF0aXZlRXZlbnRzIHx8IChlbC5uYXRpdmVFdmVudHMgPSB7fSk7XG4gIH0gZWxzZSB7XG4gICAgZXZlbnRzID0gZWwuZXZlbnRzIHx8IChlbC5ldmVudHMgPSB7fSk7XG4gIH1cblxuICB2YXIgbmV3SGFuZGxlciA9IHJhbmdlU2V0SXRlbSh7IHZhbHVlOiB2YWx1ZS50cmltKCksIGR5bmFtaWM6IGR5bmFtaWMgfSwgcmFuZ2UpO1xuICBpZiAobW9kaWZpZXJzICE9PSBlbXB0eU9iamVjdCkge1xuICAgIG5ld0hhbmRsZXIubW9kaWZpZXJzID0gbW9kaWZpZXJzO1xuICB9XG5cbiAgdmFyIGhhbmRsZXJzID0gZXZlbnRzW25hbWVdO1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKEFycmF5LmlzQXJyYXkoaGFuZGxlcnMpKSB7XG4gICAgaW1wb3J0YW50ID8gaGFuZGxlcnMudW5zaGlmdChuZXdIYW5kbGVyKSA6IGhhbmRsZXJzLnB1c2gobmV3SGFuZGxlcik7XG4gIH0gZWxzZSBpZiAoaGFuZGxlcnMpIHtcbiAgICBldmVudHNbbmFtZV0gPSBpbXBvcnRhbnQgPyBbbmV3SGFuZGxlciwgaGFuZGxlcnNdIDogW2hhbmRsZXJzLCBuZXdIYW5kbGVyXTtcbiAgfSBlbHNlIHtcbiAgICBldmVudHNbbmFtZV0gPSBuZXdIYW5kbGVyO1xuICB9XG5cbiAgZWwucGxhaW4gPSBmYWxzZTtcbn1cblxuZnVuY3Rpb24gZ2V0UmF3QmluZGluZ0F0dHIgKFxuICBlbCxcbiAgbmFtZVxuKSB7XG4gIHJldHVybiBlbC5yYXdBdHRyc01hcFsnOicgKyBuYW1lXSB8fFxuICAgIGVsLnJhd0F0dHJzTWFwWyd2LWJpbmQ6JyArIG5hbWVdIHx8XG4gICAgZWwucmF3QXR0cnNNYXBbbmFtZV1cbn1cblxuZnVuY3Rpb24gZ2V0QmluZGluZ0F0dHIgKFxuICBlbCxcbiAgbmFtZSxcbiAgZ2V0U3RhdGljXG4pIHtcbiAgdmFyIGR5bmFtaWNWYWx1ZSA9XG4gICAgZ2V0QW5kUmVtb3ZlQXR0cihlbCwgJzonICsgbmFtZSkgfHxcbiAgICBnZXRBbmRSZW1vdmVBdHRyKGVsLCAndi1iaW5kOicgKyBuYW1lKTtcbiAgaWYgKGR5bmFtaWNWYWx1ZSAhPSBudWxsKSB7XG4gICAgcmV0dXJuIHBhcnNlRmlsdGVycyhkeW5hbWljVmFsdWUpXG4gIH0gZWxzZSBpZiAoZ2V0U3RhdGljICE9PSBmYWxzZSkge1xuICAgIHZhciBzdGF0aWNWYWx1ZSA9IGdldEFuZFJlbW92ZUF0dHIoZWwsIG5hbWUpO1xuICAgIGlmIChzdGF0aWNWYWx1ZSAhPSBudWxsKSB7XG4gICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoc3RhdGljVmFsdWUpXG4gICAgfVxuICB9XG59XG5cbi8vIG5vdGU6IHRoaXMgb25seSByZW1vdmVzIHRoZSBhdHRyIGZyb20gdGhlIEFycmF5IChhdHRyc0xpc3QpIHNvIHRoYXQgaXRcbi8vIGRvZXNuJ3QgZ2V0IHByb2Nlc3NlZCBieSBwcm9jZXNzQXR0cnMuXG4vLyBCeSBkZWZhdWx0IGl0IGRvZXMgTk9UIHJlbW92ZSBpdCBmcm9tIHRoZSBtYXAgKGF0dHJzTWFwKSBiZWNhdXNlIHRoZSBtYXAgaXNcbi8vIG5lZWRlZCBkdXJpbmcgY29kZWdlbi5cbmZ1bmN0aW9uIGdldEFuZFJlbW92ZUF0dHIgKFxuICBlbCxcbiAgbmFtZSxcbiAgcmVtb3ZlRnJvbU1hcFxuKSB7XG4gIHZhciB2YWw7XG4gIGlmICgodmFsID0gZWwuYXR0cnNNYXBbbmFtZV0pICE9IG51bGwpIHtcbiAgICB2YXIgbGlzdCA9IGVsLmF0dHJzTGlzdDtcbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IGxpc3QubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICBpZiAobGlzdFtpXS5uYW1lID09PSBuYW1lKSB7XG4gICAgICAgIGxpc3Quc3BsaWNlKGksIDEpO1xuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAocmVtb3ZlRnJvbU1hcCkge1xuICAgIGRlbGV0ZSBlbC5hdHRyc01hcFtuYW1lXTtcbiAgfVxuICByZXR1cm4gdmFsXG59XG5cbmZ1bmN0aW9uIGdldEFuZFJlbW92ZUF0dHJCeVJlZ2V4IChcbiAgZWwsXG4gIG5hbWVcbikge1xuICB2YXIgbGlzdCA9IGVsLmF0dHJzTGlzdDtcbiAgZm9yICh2YXIgaSA9IDAsIGwgPSBsaXN0Lmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIHZhciBhdHRyID0gbGlzdFtpXTtcbiAgICBpZiAobmFtZS50ZXN0KGF0dHIubmFtZSkpIHtcbiAgICAgIGxpc3Quc3BsaWNlKGksIDEpO1xuICAgICAgcmV0dXJuIGF0dHJcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcmFuZ2VTZXRJdGVtIChcbiAgaXRlbSxcbiAgcmFuZ2Vcbikge1xuICBpZiAocmFuZ2UpIHtcbiAgICBpZiAocmFuZ2Uuc3RhcnQgIT0gbnVsbCkge1xuICAgICAgaXRlbS5zdGFydCA9IHJhbmdlLnN0YXJ0O1xuICAgIH1cbiAgICBpZiAocmFuZ2UuZW5kICE9IG51bGwpIHtcbiAgICAgIGl0ZW0uZW5kID0gcmFuZ2UuZW5kO1xuICAgIH1cbiAgfVxuICByZXR1cm4gaXRlbVxufVxuXG4vKiAgKi9cblxuLyoqXG4gKiBDcm9zcy1wbGF0Zm9ybSBjb2RlIGdlbmVyYXRpb24gZm9yIGNvbXBvbmVudCB2LW1vZGVsXG4gKi9cbmZ1bmN0aW9uIGdlbkNvbXBvbmVudE1vZGVsIChcbiAgZWwsXG4gIHZhbHVlLFxuICBtb2RpZmllcnNcbikge1xuICB2YXIgcmVmID0gbW9kaWZpZXJzIHx8IHt9O1xuICB2YXIgbnVtYmVyID0gcmVmLm51bWJlcjtcbiAgdmFyIHRyaW0gPSByZWYudHJpbTtcblxuICB2YXIgYmFzZVZhbHVlRXhwcmVzc2lvbiA9ICckJHYnO1xuICB2YXIgdmFsdWVFeHByZXNzaW9uID0gYmFzZVZhbHVlRXhwcmVzc2lvbjtcbiAgaWYgKHRyaW0pIHtcbiAgICB2YWx1ZUV4cHJlc3Npb24gPVxuICAgICAgXCIodHlwZW9mIFwiICsgYmFzZVZhbHVlRXhwcmVzc2lvbiArIFwiID09PSAnc3RyaW5nJ1wiICtcbiAgICAgIFwiPyBcIiArIGJhc2VWYWx1ZUV4cHJlc3Npb24gKyBcIi50cmltKClcIiArXG4gICAgICBcIjogXCIgKyBiYXNlVmFsdWVFeHByZXNzaW9uICsgXCIpXCI7XG4gIH1cbiAgaWYgKG51bWJlcikge1xuICAgIHZhbHVlRXhwcmVzc2lvbiA9IFwiX24oXCIgKyB2YWx1ZUV4cHJlc3Npb24gKyBcIilcIjtcbiAgfVxuICB2YXIgYXNzaWdubWVudCA9IGdlbkFzc2lnbm1lbnRDb2RlKHZhbHVlLCB2YWx1ZUV4cHJlc3Npb24pO1xuXG4gIGVsLm1vZGVsID0ge1xuICAgIHZhbHVlOiAoXCIoXCIgKyB2YWx1ZSArIFwiKVwiKSxcbiAgICBleHByZXNzaW9uOiBKU09OLnN0cmluZ2lmeSh2YWx1ZSksXG4gICAgY2FsbGJhY2s6IChcImZ1bmN0aW9uIChcIiArIGJhc2VWYWx1ZUV4cHJlc3Npb24gKyBcIikge1wiICsgYXNzaWdubWVudCArIFwifVwiKVxuICB9O1xufVxuXG4vKipcbiAqIENyb3NzLXBsYXRmb3JtIGNvZGVnZW4gaGVscGVyIGZvciBnZW5lcmF0aW5nIHYtbW9kZWwgdmFsdWUgYXNzaWdubWVudCBjb2RlLlxuICovXG5mdW5jdGlvbiBnZW5Bc3NpZ25tZW50Q29kZSAoXG4gIHZhbHVlLFxuICBhc3NpZ25tZW50XG4pIHtcbiAgdmFyIHJlcyA9IHBhcnNlTW9kZWwodmFsdWUpO1xuICBpZiAocmVzLmtleSA9PT0gbnVsbCkge1xuICAgIHJldHVybiAodmFsdWUgKyBcIj1cIiArIGFzc2lnbm1lbnQpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIChcIiRzZXQoXCIgKyAocmVzLmV4cCkgKyBcIiwgXCIgKyAocmVzLmtleSkgKyBcIiwgXCIgKyBhc3NpZ25tZW50ICsgXCIpXCIpXG4gIH1cbn1cblxuLyoqXG4gKiBQYXJzZSBhIHYtbW9kZWwgZXhwcmVzc2lvbiBpbnRvIGEgYmFzZSBwYXRoIGFuZCBhIGZpbmFsIGtleSBzZWdtZW50LlxuICogSGFuZGxlcyBib3RoIGRvdC1wYXRoIGFuZCBwb3NzaWJsZSBzcXVhcmUgYnJhY2tldHMuXG4gKlxuICogUG9zc2libGUgY2FzZXM6XG4gKlxuICogLSB0ZXN0XG4gKiAtIHRlc3Rba2V5XVxuICogLSB0ZXN0W3Rlc3QxW2tleV1dXG4gKiAtIHRlc3RbXCJhXCJdW2tleV1cbiAqIC0geHh4LnRlc3RbYVthXS50ZXN0MVtrZXldXVxuICogLSB0ZXN0Lnh4eC5hW1wiYXNhXCJdW3Rlc3QxW2tleV1dXG4gKlxuICovXG5cbnZhciBsZW4sIHN0ciwgY2hyLCBpbmRleCQxLCBleHByZXNzaW9uUG9zLCBleHByZXNzaW9uRW5kUG9zO1xuXG5cblxuZnVuY3Rpb24gcGFyc2VNb2RlbCAodmFsKSB7XG4gIC8vIEZpeCBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlL3B1bGwvNzczMFxuICAvLyBhbGxvdyB2LW1vZGVsPVwib2JqLnZhbCBcIiAodHJhaWxpbmcgd2hpdGVzcGFjZSlcbiAgdmFsID0gdmFsLnRyaW0oKTtcbiAgbGVuID0gdmFsLmxlbmd0aDtcblxuICBpZiAodmFsLmluZGV4T2YoJ1snKSA8IDAgfHwgdmFsLmxhc3RJbmRleE9mKCddJykgPCBsZW4gLSAxKSB7XG4gICAgaW5kZXgkMSA9IHZhbC5sYXN0SW5kZXhPZignLicpO1xuICAgIGlmIChpbmRleCQxID4gLTEpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGV4cDogdmFsLnNsaWNlKDAsIGluZGV4JDEpLFxuICAgICAgICBrZXk6ICdcIicgKyB2YWwuc2xpY2UoaW5kZXgkMSArIDEpICsgJ1wiJ1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBleHA6IHZhbCxcbiAgICAgICAga2V5OiBudWxsXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc3RyID0gdmFsO1xuICBpbmRleCQxID0gZXhwcmVzc2lvblBvcyA9IGV4cHJlc3Npb25FbmRQb3MgPSAwO1xuXG4gIHdoaWxlICghZW9mKCkpIHtcbiAgICBjaHIgPSBuZXh0KCk7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKGlzU3RyaW5nU3RhcnQoY2hyKSkge1xuICAgICAgcGFyc2VTdHJpbmcoY2hyKTtcbiAgICB9IGVsc2UgaWYgKGNociA9PT0gMHg1Qikge1xuICAgICAgcGFyc2VCcmFja2V0KGNocik7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBleHA6IHZhbC5zbGljZSgwLCBleHByZXNzaW9uUG9zKSxcbiAgICBrZXk6IHZhbC5zbGljZShleHByZXNzaW9uUG9zICsgMSwgZXhwcmVzc2lvbkVuZFBvcylcbiAgfVxufVxuXG5mdW5jdGlvbiBuZXh0ICgpIHtcbiAgcmV0dXJuIHN0ci5jaGFyQ29kZUF0KCsraW5kZXgkMSlcbn1cblxuZnVuY3Rpb24gZW9mICgpIHtcbiAgcmV0dXJuIGluZGV4JDEgPj0gbGVuXG59XG5cbmZ1bmN0aW9uIGlzU3RyaW5nU3RhcnQgKGNocikge1xuICByZXR1cm4gY2hyID09PSAweDIyIHx8IGNociA9PT0gMHgyN1xufVxuXG5mdW5jdGlvbiBwYXJzZUJyYWNrZXQgKGNocikge1xuICB2YXIgaW5CcmFja2V0ID0gMTtcbiAgZXhwcmVzc2lvblBvcyA9IGluZGV4JDE7XG4gIHdoaWxlICghZW9mKCkpIHtcbiAgICBjaHIgPSBuZXh0KCk7XG4gICAgaWYgKGlzU3RyaW5nU3RhcnQoY2hyKSkge1xuICAgICAgcGFyc2VTdHJpbmcoY2hyKTtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGlmIChjaHIgPT09IDB4NUIpIHsgaW5CcmFja2V0Kys7IH1cbiAgICBpZiAoY2hyID09PSAweDVEKSB7IGluQnJhY2tldC0tOyB9XG4gICAgaWYgKGluQnJhY2tldCA9PT0gMCkge1xuICAgICAgZXhwcmVzc2lvbkVuZFBvcyA9IGluZGV4JDE7XG4gICAgICBicmVha1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZVN0cmluZyAoY2hyKSB7XG4gIHZhciBzdHJpbmdRdW90ZSA9IGNocjtcbiAgd2hpbGUgKCFlb2YoKSkge1xuICAgIGNociA9IG5leHQoKTtcbiAgICBpZiAoY2hyID09PSBzdHJpbmdRdW90ZSkge1xuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cbn1cblxuLyogICovXG5cbnZhciB3YXJuJDE7XG5cbi8vIGluIHNvbWUgY2FzZXMsIHRoZSBldmVudCB1c2VkIGhhcyB0byBiZSBkZXRlcm1pbmVkIGF0IHJ1bnRpbWVcbi8vIHNvIHdlIHVzZWQgc29tZSByZXNlcnZlZCB0b2tlbnMgZHVyaW5nIGNvbXBpbGUuXG52YXIgUkFOR0VfVE9LRU4gPSAnX19yJztcbnZhciBDSEVDS0JPWF9SQURJT19UT0tFTiA9ICdfX2MnO1xuXG5mdW5jdGlvbiBtb2RlbCAoXG4gIGVsLFxuICBkaXIsXG4gIF93YXJuXG4pIHtcbiAgd2FybiQxID0gX3dhcm47XG4gIHZhciB2YWx1ZSA9IGRpci52YWx1ZTtcbiAgdmFyIG1vZGlmaWVycyA9IGRpci5tb2RpZmllcnM7XG4gIHZhciB0YWcgPSBlbC50YWc7XG4gIHZhciB0eXBlID0gZWwuYXR0cnNNYXAudHlwZTtcblxuICB7XG4gICAgLy8gaW5wdXRzIHdpdGggdHlwZT1cImZpbGVcIiBhcmUgcmVhZCBvbmx5IGFuZCBzZXR0aW5nIHRoZSBpbnB1dCdzXG4gICAgLy8gdmFsdWUgd2lsbCB0aHJvdyBhbiBlcnJvci5cbiAgICBpZiAodGFnID09PSAnaW5wdXQnICYmIHR5cGUgPT09ICdmaWxlJykge1xuICAgICAgd2FybiQxKFxuICAgICAgICBcIjxcIiArIChlbC50YWcpICsgXCIgdi1tb2RlbD1cXFwiXCIgKyB2YWx1ZSArIFwiXFxcIiB0eXBlPVxcXCJmaWxlXFxcIj46XFxuXCIgK1xuICAgICAgICBcIkZpbGUgaW5wdXRzIGFyZSByZWFkIG9ubHkuIFVzZSBhIHYtb246Y2hhbmdlIGxpc3RlbmVyIGluc3RlYWQuXCIsXG4gICAgICAgIGVsLnJhd0F0dHJzTWFwWyd2LW1vZGVsJ11cbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGVsLmNvbXBvbmVudCkge1xuICAgIGdlbkNvbXBvbmVudE1vZGVsKGVsLCB2YWx1ZSwgbW9kaWZpZXJzKTtcbiAgICAvLyBjb21wb25lbnQgdi1tb2RlbCBkb2Vzbid0IG5lZWQgZXh0cmEgcnVudGltZVxuICAgIHJldHVybiBmYWxzZVxuICB9IGVsc2UgaWYgKHRhZyA9PT0gJ3NlbGVjdCcpIHtcbiAgICBnZW5TZWxlY3QoZWwsIHZhbHVlLCBtb2RpZmllcnMpO1xuICB9IGVsc2UgaWYgKHRhZyA9PT0gJ2lucHV0JyAmJiB0eXBlID09PSAnY2hlY2tib3gnKSB7XG4gICAgZ2VuQ2hlY2tib3hNb2RlbChlbCwgdmFsdWUsIG1vZGlmaWVycyk7XG4gIH0gZWxzZSBpZiAodGFnID09PSAnaW5wdXQnICYmIHR5cGUgPT09ICdyYWRpbycpIHtcbiAgICBnZW5SYWRpb01vZGVsKGVsLCB2YWx1ZSwgbW9kaWZpZXJzKTtcbiAgfSBlbHNlIGlmICh0YWcgPT09ICdpbnB1dCcgfHwgdGFnID09PSAndGV4dGFyZWEnKSB7XG4gICAgZ2VuRGVmYXVsdE1vZGVsKGVsLCB2YWx1ZSwgbW9kaWZpZXJzKTtcbiAgfSBlbHNlIGlmICghY29uZmlnLmlzUmVzZXJ2ZWRUYWcodGFnKSkge1xuICAgIGdlbkNvbXBvbmVudE1vZGVsKGVsLCB2YWx1ZSwgbW9kaWZpZXJzKTtcbiAgICAvLyBjb21wb25lbnQgdi1tb2RlbCBkb2Vzbid0IG5lZWQgZXh0cmEgcnVudGltZVxuICAgIHJldHVybiBmYWxzZVxuICB9IGVsc2Uge1xuICAgIHdhcm4kMShcbiAgICAgIFwiPFwiICsgKGVsLnRhZykgKyBcIiB2LW1vZGVsPVxcXCJcIiArIHZhbHVlICsgXCJcXFwiPjogXCIgK1xuICAgICAgXCJ2LW1vZGVsIGlzIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBlbGVtZW50IHR5cGUuIFwiICtcbiAgICAgICdJZiB5b3UgYXJlIHdvcmtpbmcgd2l0aCBjb250ZW50ZWRpdGFibGUsIGl0XFwncyByZWNvbW1lbmRlZCB0byAnICtcbiAgICAgICd3cmFwIGEgbGlicmFyeSBkZWRpY2F0ZWQgZm9yIHRoYXQgcHVycG9zZSBpbnNpZGUgYSBjdXN0b20gY29tcG9uZW50LicsXG4gICAgICBlbC5yYXdBdHRyc01hcFsndi1tb2RlbCddXG4gICAgKTtcbiAgfVxuXG4gIC8vIGVuc3VyZSBydW50aW1lIGRpcmVjdGl2ZSBtZXRhZGF0YVxuICByZXR1cm4gdHJ1ZVxufVxuXG5mdW5jdGlvbiBnZW5DaGVja2JveE1vZGVsIChcbiAgZWwsXG4gIHZhbHVlLFxuICBtb2RpZmllcnNcbikge1xuICB2YXIgbnVtYmVyID0gbW9kaWZpZXJzICYmIG1vZGlmaWVycy5udW1iZXI7XG4gIHZhciB2YWx1ZUJpbmRpbmcgPSBnZXRCaW5kaW5nQXR0cihlbCwgJ3ZhbHVlJykgfHwgJ251bGwnO1xuICB2YXIgdHJ1ZVZhbHVlQmluZGluZyA9IGdldEJpbmRpbmdBdHRyKGVsLCAndHJ1ZS12YWx1ZScpIHx8ICd0cnVlJztcbiAgdmFyIGZhbHNlVmFsdWVCaW5kaW5nID0gZ2V0QmluZGluZ0F0dHIoZWwsICdmYWxzZS12YWx1ZScpIHx8ICdmYWxzZSc7XG4gIGFkZFByb3AoZWwsICdjaGVja2VkJyxcbiAgICBcIkFycmF5LmlzQXJyYXkoXCIgKyB2YWx1ZSArIFwiKVwiICtcbiAgICBcIj9faShcIiArIHZhbHVlICsgXCIsXCIgKyB2YWx1ZUJpbmRpbmcgKyBcIik+LTFcIiArIChcbiAgICAgIHRydWVWYWx1ZUJpbmRpbmcgPT09ICd0cnVlJ1xuICAgICAgICA/IChcIjooXCIgKyB2YWx1ZSArIFwiKVwiKVxuICAgICAgICA6IChcIjpfcShcIiArIHZhbHVlICsgXCIsXCIgKyB0cnVlVmFsdWVCaW5kaW5nICsgXCIpXCIpXG4gICAgKVxuICApO1xuICBhZGRIYW5kbGVyKGVsLCAnY2hhbmdlJyxcbiAgICBcInZhciAkJGE9XCIgKyB2YWx1ZSArIFwiLFwiICtcbiAgICAgICAgJyQkZWw9JGV2ZW50LnRhcmdldCwnICtcbiAgICAgICAgXCIkJGM9JCRlbC5jaGVja2VkPyhcIiArIHRydWVWYWx1ZUJpbmRpbmcgKyBcIik6KFwiICsgZmFsc2VWYWx1ZUJpbmRpbmcgKyBcIik7XCIgK1xuICAgICdpZihBcnJheS5pc0FycmF5KCQkYSkpeycgK1xuICAgICAgXCJ2YXIgJCR2PVwiICsgKG51bWJlciA/ICdfbignICsgdmFsdWVCaW5kaW5nICsgJyknIDogdmFsdWVCaW5kaW5nKSArIFwiLFwiICtcbiAgICAgICAgICAnJCRpPV9pKCQkYSwkJHYpOycgK1xuICAgICAgXCJpZigkJGVsLmNoZWNrZWQpeyQkaTwwJiYoXCIgKyAoZ2VuQXNzaWdubWVudENvZGUodmFsdWUsICckJGEuY29uY2F0KFskJHZdKScpKSArIFwiKX1cIiArXG4gICAgICBcImVsc2V7JCRpPi0xJiYoXCIgKyAoZ2VuQXNzaWdubWVudENvZGUodmFsdWUsICckJGEuc2xpY2UoMCwkJGkpLmNvbmNhdCgkJGEuc2xpY2UoJCRpKzEpKScpKSArIFwiKX1cIiArXG4gICAgXCJ9ZWxzZXtcIiArIChnZW5Bc3NpZ25tZW50Q29kZSh2YWx1ZSwgJyQkYycpKSArIFwifVwiLFxuICAgIG51bGwsIHRydWVcbiAgKTtcbn1cblxuZnVuY3Rpb24gZ2VuUmFkaW9Nb2RlbCAoXG4gIGVsLFxuICB2YWx1ZSxcbiAgbW9kaWZpZXJzXG4pIHtcbiAgdmFyIG51bWJlciA9IG1vZGlmaWVycyAmJiBtb2RpZmllcnMubnVtYmVyO1xuICB2YXIgdmFsdWVCaW5kaW5nID0gZ2V0QmluZGluZ0F0dHIoZWwsICd2YWx1ZScpIHx8ICdudWxsJztcbiAgdmFsdWVCaW5kaW5nID0gbnVtYmVyID8gKFwiX24oXCIgKyB2YWx1ZUJpbmRpbmcgKyBcIilcIikgOiB2YWx1ZUJpbmRpbmc7XG4gIGFkZFByb3AoZWwsICdjaGVja2VkJywgKFwiX3EoXCIgKyB2YWx1ZSArIFwiLFwiICsgdmFsdWVCaW5kaW5nICsgXCIpXCIpKTtcbiAgYWRkSGFuZGxlcihlbCwgJ2NoYW5nZScsIGdlbkFzc2lnbm1lbnRDb2RlKHZhbHVlLCB2YWx1ZUJpbmRpbmcpLCBudWxsLCB0cnVlKTtcbn1cblxuZnVuY3Rpb24gZ2VuU2VsZWN0IChcbiAgZWwsXG4gIHZhbHVlLFxuICBtb2RpZmllcnNcbikge1xuICB2YXIgbnVtYmVyID0gbW9kaWZpZXJzICYmIG1vZGlmaWVycy5udW1iZXI7XG4gIHZhciBzZWxlY3RlZFZhbCA9IFwiQXJyYXkucHJvdG90eXBlLmZpbHRlclwiICtcbiAgICBcIi5jYWxsKCRldmVudC50YXJnZXQub3B0aW9ucyxmdW5jdGlvbihvKXtyZXR1cm4gby5zZWxlY3RlZH0pXCIgK1xuICAgIFwiLm1hcChmdW5jdGlvbihvKXt2YXIgdmFsID0gXFxcIl92YWx1ZVxcXCIgaW4gbyA/IG8uX3ZhbHVlIDogby52YWx1ZTtcIiArXG4gICAgXCJyZXR1cm4gXCIgKyAobnVtYmVyID8gJ19uKHZhbCknIDogJ3ZhbCcpICsgXCJ9KVwiO1xuXG4gIHZhciBhc3NpZ25tZW50ID0gJyRldmVudC50YXJnZXQubXVsdGlwbGUgPyAkJHNlbGVjdGVkVmFsIDogJCRzZWxlY3RlZFZhbFswXSc7XG4gIHZhciBjb2RlID0gXCJ2YXIgJCRzZWxlY3RlZFZhbCA9IFwiICsgc2VsZWN0ZWRWYWwgKyBcIjtcIjtcbiAgY29kZSA9IGNvZGUgKyBcIiBcIiArIChnZW5Bc3NpZ25tZW50Q29kZSh2YWx1ZSwgYXNzaWdubWVudCkpO1xuICBhZGRIYW5kbGVyKGVsLCAnY2hhbmdlJywgY29kZSwgbnVsbCwgdHJ1ZSk7XG59XG5cbmZ1bmN0aW9uIGdlbkRlZmF1bHRNb2RlbCAoXG4gIGVsLFxuICB2YWx1ZSxcbiAgbW9kaWZpZXJzXG4pIHtcbiAgdmFyIHR5cGUgPSBlbC5hdHRyc01hcC50eXBlO1xuXG4gIC8vIHdhcm4gaWYgdi1iaW5kOnZhbHVlIGNvbmZsaWN0cyB3aXRoIHYtbW9kZWxcbiAgLy8gZXhjZXB0IGZvciBpbnB1dHMgd2l0aCB2LWJpbmQ6dHlwZVxuICB7XG4gICAgdmFyIHZhbHVlJDEgPSBlbC5hdHRyc01hcFsndi1iaW5kOnZhbHVlJ10gfHwgZWwuYXR0cnNNYXBbJzp2YWx1ZSddO1xuICAgIHZhciB0eXBlQmluZGluZyA9IGVsLmF0dHJzTWFwWyd2LWJpbmQ6dHlwZSddIHx8IGVsLmF0dHJzTWFwWyc6dHlwZSddO1xuICAgIGlmICh2YWx1ZSQxICYmICF0eXBlQmluZGluZykge1xuICAgICAgdmFyIGJpbmRpbmcgPSBlbC5hdHRyc01hcFsndi1iaW5kOnZhbHVlJ10gPyAndi1iaW5kOnZhbHVlJyA6ICc6dmFsdWUnO1xuICAgICAgd2FybiQxKFxuICAgICAgICBiaW5kaW5nICsgXCI9XFxcIlwiICsgdmFsdWUkMSArIFwiXFxcIiBjb25mbGljdHMgd2l0aCB2LW1vZGVsIG9uIHRoZSBzYW1lIGVsZW1lbnQgXCIgK1xuICAgICAgICAnYmVjYXVzZSB0aGUgbGF0dGVyIGFscmVhZHkgZXhwYW5kcyB0byBhIHZhbHVlIGJpbmRpbmcgaW50ZXJuYWxseScsXG4gICAgICAgIGVsLnJhd0F0dHJzTWFwW2JpbmRpbmddXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHZhciByZWYgPSBtb2RpZmllcnMgfHwge307XG4gIHZhciBsYXp5ID0gcmVmLmxhenk7XG4gIHZhciBudW1iZXIgPSByZWYubnVtYmVyO1xuICB2YXIgdHJpbSA9IHJlZi50cmltO1xuICB2YXIgbmVlZENvbXBvc2l0aW9uR3VhcmQgPSAhbGF6eSAmJiB0eXBlICE9PSAncmFuZ2UnO1xuICB2YXIgZXZlbnQgPSBsYXp5XG4gICAgPyAnY2hhbmdlJ1xuICAgIDogdHlwZSA9PT0gJ3JhbmdlJ1xuICAgICAgPyBSQU5HRV9UT0tFTlxuICAgICAgOiAnaW5wdXQnO1xuXG4gIHZhciB2YWx1ZUV4cHJlc3Npb24gPSAnJGV2ZW50LnRhcmdldC52YWx1ZSc7XG4gIGlmICh0cmltKSB7XG4gICAgdmFsdWVFeHByZXNzaW9uID0gXCIkZXZlbnQudGFyZ2V0LnZhbHVlLnRyaW0oKVwiO1xuICB9XG4gIGlmIChudW1iZXIpIHtcbiAgICB2YWx1ZUV4cHJlc3Npb24gPSBcIl9uKFwiICsgdmFsdWVFeHByZXNzaW9uICsgXCIpXCI7XG4gIH1cblxuICB2YXIgY29kZSA9IGdlbkFzc2lnbm1lbnRDb2RlKHZhbHVlLCB2YWx1ZUV4cHJlc3Npb24pO1xuICBpZiAobmVlZENvbXBvc2l0aW9uR3VhcmQpIHtcbiAgICBjb2RlID0gXCJpZigkZXZlbnQudGFyZ2V0LmNvbXBvc2luZylyZXR1cm47XCIgKyBjb2RlO1xuICB9XG5cbiAgYWRkUHJvcChlbCwgJ3ZhbHVlJywgKFwiKFwiICsgdmFsdWUgKyBcIilcIikpO1xuICBhZGRIYW5kbGVyKGVsLCBldmVudCwgY29kZSwgbnVsbCwgdHJ1ZSk7XG4gIGlmICh0cmltIHx8IG51bWJlcikge1xuICAgIGFkZEhhbmRsZXIoZWwsICdibHVyJywgJyRmb3JjZVVwZGF0ZSgpJyk7XG4gIH1cbn1cblxuLyogICovXG5cbi8vIG5vcm1hbGl6ZSB2LW1vZGVsIGV2ZW50IHRva2VucyB0aGF0IGNhbiBvbmx5IGJlIGRldGVybWluZWQgYXQgcnVudGltZS5cbi8vIGl0J3MgaW1wb3J0YW50IHRvIHBsYWNlIHRoZSBldmVudCBhcyB0aGUgZmlyc3QgaW4gdGhlIGFycmF5IGJlY2F1c2Vcbi8vIHRoZSB3aG9sZSBwb2ludCBpcyBlbnN1cmluZyB0aGUgdi1tb2RlbCBjYWxsYmFjayBnZXRzIGNhbGxlZCBiZWZvcmVcbi8vIHVzZXItYXR0YWNoZWQgaGFuZGxlcnMuXG5mdW5jdGlvbiBub3JtYWxpemVFdmVudHMgKG9uKSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoaXNEZWYob25bUkFOR0VfVE9LRU5dKSkge1xuICAgIC8vIElFIGlucHV0W3R5cGU9cmFuZ2VdIG9ubHkgc3VwcG9ydHMgYGNoYW5nZWAgZXZlbnRcbiAgICB2YXIgZXZlbnQgPSBpc0lFID8gJ2NoYW5nZScgOiAnaW5wdXQnO1xuICAgIG9uW2V2ZW50XSA9IFtdLmNvbmNhdChvbltSQU5HRV9UT0tFTl0sIG9uW2V2ZW50XSB8fCBbXSk7XG4gICAgZGVsZXRlIG9uW1JBTkdFX1RPS0VOXTtcbiAgfVxuICAvLyBUaGlzIHdhcyBvcmlnaW5hbGx5IGludGVuZGVkIHRvIGZpeCAjNDUyMSBidXQgbm8gbG9uZ2VyIG5lY2Vzc2FyeVxuICAvLyBhZnRlciAyLjUuIEtlZXBpbmcgaXQgZm9yIGJhY2t3YXJkcyBjb21wYXQgd2l0aCBnZW5lcmF0ZWQgY29kZSBmcm9tIDwgMi40XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoaXNEZWYob25bQ0hFQ0tCT1hfUkFESU9fVE9LRU5dKSkge1xuICAgIG9uLmNoYW5nZSA9IFtdLmNvbmNhdChvbltDSEVDS0JPWF9SQURJT19UT0tFTl0sIG9uLmNoYW5nZSB8fCBbXSk7XG4gICAgZGVsZXRlIG9uW0NIRUNLQk9YX1JBRElPX1RPS0VOXTtcbiAgfVxufVxuXG52YXIgdGFyZ2V0JDE7XG5cbmZ1bmN0aW9uIGNyZWF0ZU9uY2VIYW5kbGVyJDEgKGV2ZW50LCBoYW5kbGVyLCBjYXB0dXJlKSB7XG4gIHZhciBfdGFyZ2V0ID0gdGFyZ2V0JDE7IC8vIHNhdmUgY3VycmVudCB0YXJnZXQgZWxlbWVudCBpbiBjbG9zdXJlXG4gIHJldHVybiBmdW5jdGlvbiBvbmNlSGFuZGxlciAoKSB7XG4gICAgdmFyIHJlcyA9IGhhbmRsZXIuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICBpZiAocmVzICE9PSBudWxsKSB7XG4gICAgICByZW1vdmUkMihldmVudCwgb25jZUhhbmRsZXIsIGNhcHR1cmUsIF90YXJnZXQpO1xuICAgIH1cbiAgfVxufVxuXG4vLyAjOTQ0NjogRmlyZWZveCA8PSA1MyAoaW4gcGFydGljdWxhciwgRVNSIDUyKSBoYXMgaW5jb3JyZWN0IEV2ZW50LnRpbWVTdGFtcFxuLy8gaW1wbGVtZW50YXRpb24gYW5kIGRvZXMgbm90IGZpcmUgbWljcm90YXNrcyBpbiBiZXR3ZWVuIGV2ZW50IHByb3BhZ2F0aW9uLCBzb1xuLy8gc2FmZSB0byBleGNsdWRlLlxudmFyIHVzZU1pY3JvdGFza0ZpeCA9IGlzVXNpbmdNaWNyb1Rhc2sgJiYgIShpc0ZGICYmIE51bWJlcihpc0ZGWzFdKSA8PSA1Myk7XG5cbmZ1bmN0aW9uIGFkZCQxIChcbiAgbmFtZSxcbiAgaGFuZGxlcixcbiAgY2FwdHVyZSxcbiAgcGFzc2l2ZVxuKSB7XG4gIC8vIGFzeW5jIGVkZ2UgY2FzZSAjNjU2NjogaW5uZXIgY2xpY2sgZXZlbnQgdHJpZ2dlcnMgcGF0Y2gsIGV2ZW50IGhhbmRsZXJcbiAgLy8gYXR0YWNoZWQgdG8gb3V0ZXIgZWxlbWVudCBkdXJpbmcgcGF0Y2gsIGFuZCB0cmlnZ2VyZWQgYWdhaW4uIFRoaXNcbiAgLy8gaGFwcGVucyBiZWNhdXNlIGJyb3dzZXJzIGZpcmUgbWljcm90YXNrIHRpY2tzIGJldHdlZW4gZXZlbnQgcHJvcGFnYXRpb24uXG4gIC8vIHRoZSBzb2x1dGlvbiBpcyBzaW1wbGU6IHdlIHNhdmUgdGhlIHRpbWVzdGFtcCB3aGVuIGEgaGFuZGxlciBpcyBhdHRhY2hlZCxcbiAgLy8gYW5kIHRoZSBoYW5kbGVyIHdvdWxkIG9ubHkgZmlyZSBpZiB0aGUgZXZlbnQgcGFzc2VkIHRvIGl0IHdhcyBmaXJlZFxuICAvLyBBRlRFUiBpdCB3YXMgYXR0YWNoZWQuXG4gIGlmICh1c2VNaWNyb3Rhc2tGaXgpIHtcbiAgICB2YXIgYXR0YWNoZWRUaW1lc3RhbXAgPSBjdXJyZW50Rmx1c2hUaW1lc3RhbXA7XG4gICAgdmFyIG9yaWdpbmFsID0gaGFuZGxlcjtcbiAgICBoYW5kbGVyID0gb3JpZ2luYWwuX3dyYXBwZXIgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgaWYgKFxuICAgICAgICAvLyBubyBidWJibGluZywgc2hvdWxkIGFsd2F5cyBmaXJlLlxuICAgICAgICAvLyB0aGlzIGlzIGp1c3QgYSBzYWZldHkgbmV0IGluIGNhc2UgZXZlbnQudGltZVN0YW1wIGlzIHVucmVsaWFibGUgaW5cbiAgICAgICAgLy8gY2VydGFpbiB3ZWlyZCBlbnZpcm9ubWVudHMuLi5cbiAgICAgICAgZS50YXJnZXQgPT09IGUuY3VycmVudFRhcmdldCB8fFxuICAgICAgICAvLyBldmVudCBpcyBmaXJlZCBhZnRlciBoYW5kbGVyIGF0dGFjaG1lbnRcbiAgICAgICAgZS50aW1lU3RhbXAgPj0gYXR0YWNoZWRUaW1lc3RhbXAgfHxcbiAgICAgICAgLy8gYmFpbCBmb3IgZW52aXJvbm1lbnRzIHRoYXQgaGF2ZSBidWdneSBldmVudC50aW1lU3RhbXAgaW1wbGVtZW50YXRpb25zXG4gICAgICAgIC8vICM5NDYyIGlPUyA5IGJ1ZzogZXZlbnQudGltZVN0YW1wIGlzIDAgYWZ0ZXIgaGlzdG9yeS5wdXNoU3RhdGVcbiAgICAgICAgLy8gIzk2ODEgUXRXZWJFbmdpbmUgZXZlbnQudGltZVN0YW1wIGlzIG5lZ2F0aXZlIHZhbHVlXG4gICAgICAgIGUudGltZVN0YW1wIDw9IDAgfHxcbiAgICAgICAgLy8gIzk0NDggYmFpbCBpZiBldmVudCBpcyBmaXJlZCBpbiBhbm90aGVyIGRvY3VtZW50IGluIGEgbXVsdGktcGFnZVxuICAgICAgICAvLyBlbGVjdHJvbi9udy5qcyBhcHAsIHNpbmNlIGV2ZW50LnRpbWVTdGFtcCB3aWxsIGJlIHVzaW5nIGEgZGlmZmVyZW50XG4gICAgICAgIC8vIHN0YXJ0aW5nIHJlZmVyZW5jZVxuICAgICAgICBlLnRhcmdldC5vd25lckRvY3VtZW50ICE9PSBkb2N1bWVudFxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBvcmlnaW5hbC5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICB9XG4gICAgfTtcbiAgfVxuICB0YXJnZXQkMS5hZGRFdmVudExpc3RlbmVyKFxuICAgIG5hbWUsXG4gICAgaGFuZGxlcixcbiAgICBzdXBwb3J0c1Bhc3NpdmVcbiAgICAgID8geyBjYXB0dXJlOiBjYXB0dXJlLCBwYXNzaXZlOiBwYXNzaXZlIH1cbiAgICAgIDogY2FwdHVyZVxuICApO1xufVxuXG5mdW5jdGlvbiByZW1vdmUkMiAoXG4gIG5hbWUsXG4gIGhhbmRsZXIsXG4gIGNhcHR1cmUsXG4gIF90YXJnZXRcbikge1xuICAoX3RhcmdldCB8fCB0YXJnZXQkMSkucmVtb3ZlRXZlbnRMaXN0ZW5lcihcbiAgICBuYW1lLFxuICAgIGhhbmRsZXIuX3dyYXBwZXIgfHwgaGFuZGxlcixcbiAgICBjYXB0dXJlXG4gICk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZURPTUxpc3RlbmVycyAob2xkVm5vZGUsIHZub2RlKSB7XG4gIGlmIChpc1VuZGVmKG9sZFZub2RlLmRhdGEub24pICYmIGlzVW5kZWYodm5vZGUuZGF0YS5vbikpIHtcbiAgICByZXR1cm5cbiAgfVxuICB2YXIgb24gPSB2bm9kZS5kYXRhLm9uIHx8IHt9O1xuICB2YXIgb2xkT24gPSBvbGRWbm9kZS5kYXRhLm9uIHx8IHt9O1xuICB0YXJnZXQkMSA9IHZub2RlLmVsbTtcbiAgbm9ybWFsaXplRXZlbnRzKG9uKTtcbiAgdXBkYXRlTGlzdGVuZXJzKG9uLCBvbGRPbiwgYWRkJDEsIHJlbW92ZSQyLCBjcmVhdGVPbmNlSGFuZGxlciQxLCB2bm9kZS5jb250ZXh0KTtcbiAgdGFyZ2V0JDEgPSB1bmRlZmluZWQ7XG59XG5cbnZhciBldmVudHMgPSB7XG4gIGNyZWF0ZTogdXBkYXRlRE9NTGlzdGVuZXJzLFxuICB1cGRhdGU6IHVwZGF0ZURPTUxpc3RlbmVyc1xufTtcblxuLyogICovXG5cbnZhciBzdmdDb250YWluZXI7XG5cbmZ1bmN0aW9uIHVwZGF0ZURPTVByb3BzIChvbGRWbm9kZSwgdm5vZGUpIHtcbiAgaWYgKGlzVW5kZWYob2xkVm5vZGUuZGF0YS5kb21Qcm9wcykgJiYgaXNVbmRlZih2bm9kZS5kYXRhLmRvbVByb3BzKSkge1xuICAgIHJldHVyblxuICB9XG4gIHZhciBrZXksIGN1cjtcbiAgdmFyIGVsbSA9IHZub2RlLmVsbTtcbiAgdmFyIG9sZFByb3BzID0gb2xkVm5vZGUuZGF0YS5kb21Qcm9wcyB8fCB7fTtcbiAgdmFyIHByb3BzID0gdm5vZGUuZGF0YS5kb21Qcm9wcyB8fCB7fTtcbiAgLy8gY2xvbmUgb2JzZXJ2ZWQgb2JqZWN0cywgYXMgdGhlIHVzZXIgcHJvYmFibHkgd2FudHMgdG8gbXV0YXRlIGl0XG4gIGlmIChpc0RlZihwcm9wcy5fX29iX18pKSB7XG4gICAgcHJvcHMgPSB2bm9kZS5kYXRhLmRvbVByb3BzID0gZXh0ZW5kKHt9LCBwcm9wcyk7XG4gIH1cblxuICBmb3IgKGtleSBpbiBvbGRQcm9wcykge1xuICAgIGlmICghKGtleSBpbiBwcm9wcykpIHtcbiAgICAgIGVsbVtrZXldID0gJyc7XG4gICAgfVxuICB9XG5cbiAgZm9yIChrZXkgaW4gcHJvcHMpIHtcbiAgICBjdXIgPSBwcm9wc1trZXldO1xuICAgIC8vIGlnbm9yZSBjaGlsZHJlbiBpZiB0aGUgbm9kZSBoYXMgdGV4dENvbnRlbnQgb3IgaW5uZXJIVE1MLFxuICAgIC8vIGFzIHRoZXNlIHdpbGwgdGhyb3cgYXdheSBleGlzdGluZyBET00gbm9kZXMgYW5kIGNhdXNlIHJlbW92YWwgZXJyb3JzXG4gICAgLy8gb24gc3Vic2VxdWVudCBwYXRjaGVzICgjMzM2MClcbiAgICBpZiAoa2V5ID09PSAndGV4dENvbnRlbnQnIHx8IGtleSA9PT0gJ2lubmVySFRNTCcpIHtcbiAgICAgIGlmICh2bm9kZS5jaGlsZHJlbikgeyB2bm9kZS5jaGlsZHJlbi5sZW5ndGggPSAwOyB9XG4gICAgICBpZiAoY3VyID09PSBvbGRQcm9wc1trZXldKSB7IGNvbnRpbnVlIH1cbiAgICAgIC8vICM2NjAxIHdvcmsgYXJvdW5kIENocm9tZSB2ZXJzaW9uIDw9IDU1IGJ1ZyB3aGVyZSBzaW5nbGUgdGV4dE5vZGVcbiAgICAgIC8vIHJlcGxhY2VkIGJ5IGlubmVySFRNTC90ZXh0Q29udGVudCByZXRhaW5zIGl0cyBwYXJlbnROb2RlIHByb3BlcnR5XG4gICAgICBpZiAoZWxtLmNoaWxkTm9kZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIGVsbS5yZW1vdmVDaGlsZChlbG0uY2hpbGROb2Rlc1swXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gJ3ZhbHVlJyAmJiBlbG0udGFnTmFtZSAhPT0gJ1BST0dSRVNTJykge1xuICAgICAgLy8gc3RvcmUgdmFsdWUgYXMgX3ZhbHVlIGFzIHdlbGwgc2luY2VcbiAgICAgIC8vIG5vbi1zdHJpbmcgdmFsdWVzIHdpbGwgYmUgc3RyaW5naWZpZWRcbiAgICAgIGVsbS5fdmFsdWUgPSBjdXI7XG4gICAgICAvLyBhdm9pZCByZXNldHRpbmcgY3Vyc29yIHBvc2l0aW9uIHdoZW4gdmFsdWUgaXMgdGhlIHNhbWVcbiAgICAgIHZhciBzdHJDdXIgPSBpc1VuZGVmKGN1cikgPyAnJyA6IFN0cmluZyhjdXIpO1xuICAgICAgaWYgKHNob3VsZFVwZGF0ZVZhbHVlKGVsbSwgc3RyQ3VyKSkge1xuICAgICAgICBlbG0udmFsdWUgPSBzdHJDdXI7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChrZXkgPT09ICdpbm5lckhUTUwnICYmIGlzU1ZHKGVsbS50YWdOYW1lKSAmJiBpc1VuZGVmKGVsbS5pbm5lckhUTUwpKSB7XG4gICAgICAvLyBJRSBkb2Vzbid0IHN1cHBvcnQgaW5uZXJIVE1MIGZvciBTVkcgZWxlbWVudHNcbiAgICAgIHN2Z0NvbnRhaW5lciA9IHN2Z0NvbnRhaW5lciB8fCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIHN2Z0NvbnRhaW5lci5pbm5lckhUTUwgPSBcIjxzdmc+XCIgKyBjdXIgKyBcIjwvc3ZnPlwiO1xuICAgICAgdmFyIHN2ZyA9IHN2Z0NvbnRhaW5lci5maXJzdENoaWxkO1xuICAgICAgd2hpbGUgKGVsbS5maXJzdENoaWxkKSB7XG4gICAgICAgIGVsbS5yZW1vdmVDaGlsZChlbG0uZmlyc3RDaGlsZCk7XG4gICAgICB9XG4gICAgICB3aGlsZSAoc3ZnLmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgZWxtLmFwcGVuZENoaWxkKHN2Zy5maXJzdENoaWxkKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKFxuICAgICAgLy8gc2tpcCB0aGUgdXBkYXRlIGlmIG9sZCBhbmQgbmV3IFZET00gc3RhdGUgaXMgdGhlIHNhbWUuXG4gICAgICAvLyBgdmFsdWVgIGlzIGhhbmRsZWQgc2VwYXJhdGVseSBiZWNhdXNlIHRoZSBET00gdmFsdWUgbWF5IGJlIHRlbXBvcmFyaWx5XG4gICAgICAvLyBvdXQgb2Ygc3luYyB3aXRoIFZET00gc3RhdGUgZHVlIHRvIGZvY3VzLCBjb21wb3NpdGlvbiBhbmQgbW9kaWZpZXJzLlxuICAgICAgLy8gVGhpcyAgIzQ1MjEgYnkgc2tpcHBpbmcgdGhlIHVubmVjZXNhcnJ5IGBjaGVja2VkYCB1cGRhdGUuXG4gICAgICBjdXIgIT09IG9sZFByb3BzW2tleV1cbiAgICApIHtcbiAgICAgIC8vIHNvbWUgcHJvcGVydHkgdXBkYXRlcyBjYW4gdGhyb3dcbiAgICAgIC8vIGUuZy4gYHZhbHVlYCBvbiA8cHJvZ3Jlc3M+IHcvIG5vbi1maW5pdGUgdmFsdWVcbiAgICAgIHRyeSB7XG4gICAgICAgIGVsbVtrZXldID0gY3VyO1xuICAgICAgfSBjYXRjaCAoZSkge31cbiAgICB9XG4gIH1cbn1cblxuLy8gY2hlY2sgcGxhdGZvcm1zL3dlYi91dGlsL2F0dHJzLmpzIGFjY2VwdFZhbHVlXG5cblxuZnVuY3Rpb24gc2hvdWxkVXBkYXRlVmFsdWUgKGVsbSwgY2hlY2tWYWwpIHtcbiAgcmV0dXJuICghZWxtLmNvbXBvc2luZyAmJiAoXG4gICAgZWxtLnRhZ05hbWUgPT09ICdPUFRJT04nIHx8XG4gICAgaXNOb3RJbkZvY3VzQW5kRGlydHkoZWxtLCBjaGVja1ZhbCkgfHxcbiAgICBpc0RpcnR5V2l0aE1vZGlmaWVycyhlbG0sIGNoZWNrVmFsKVxuICApKVxufVxuXG5mdW5jdGlvbiBpc05vdEluRm9jdXNBbmREaXJ0eSAoZWxtLCBjaGVja1ZhbCkge1xuICAvLyByZXR1cm4gdHJ1ZSB3aGVuIHRleHRib3ggKC5udW1iZXIgYW5kIC50cmltKSBsb3NlcyBmb2N1cyBhbmQgaXRzIHZhbHVlIGlzXG4gIC8vIG5vdCBlcXVhbCB0byB0aGUgdXBkYXRlZCB2YWx1ZVxuICB2YXIgbm90SW5Gb2N1cyA9IHRydWU7XG4gIC8vICM2MTU3XG4gIC8vIHdvcmsgYXJvdW5kIElFIGJ1ZyB3aGVuIGFjY2Vzc2luZyBkb2N1bWVudC5hY3RpdmVFbGVtZW50IGluIGFuIGlmcmFtZVxuICB0cnkgeyBub3RJbkZvY3VzID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAhPT0gZWxtOyB9IGNhdGNoIChlKSB7fVxuICByZXR1cm4gbm90SW5Gb2N1cyAmJiBlbG0udmFsdWUgIT09IGNoZWNrVmFsXG59XG5cbmZ1bmN0aW9uIGlzRGlydHlXaXRoTW9kaWZpZXJzIChlbG0sIG5ld1ZhbCkge1xuICB2YXIgdmFsdWUgPSBlbG0udmFsdWU7XG4gIHZhciBtb2RpZmllcnMgPSBlbG0uX3ZNb2RpZmllcnM7IC8vIGluamVjdGVkIGJ5IHYtbW9kZWwgcnVudGltZVxuICBpZiAoaXNEZWYobW9kaWZpZXJzKSkge1xuICAgIGlmIChtb2RpZmllcnMubnVtYmVyKSB7XG4gICAgICByZXR1cm4gdG9OdW1iZXIodmFsdWUpICE9PSB0b051bWJlcihuZXdWYWwpXG4gICAgfVxuICAgIGlmIChtb2RpZmllcnMudHJpbSkge1xuICAgICAgcmV0dXJuIHZhbHVlLnRyaW0oKSAhPT0gbmV3VmFsLnRyaW0oKVxuICAgIH1cbiAgfVxuICByZXR1cm4gdmFsdWUgIT09IG5ld1ZhbFxufVxuXG52YXIgZG9tUHJvcHMgPSB7XG4gIGNyZWF0ZTogdXBkYXRlRE9NUHJvcHMsXG4gIHVwZGF0ZTogdXBkYXRlRE9NUHJvcHNcbn07XG5cbi8qICAqL1xuXG52YXIgcGFyc2VTdHlsZVRleHQgPSBjYWNoZWQoZnVuY3Rpb24gKGNzc1RleHQpIHtcbiAgdmFyIHJlcyA9IHt9O1xuICB2YXIgbGlzdERlbGltaXRlciA9IC87KD8hW14oXSpcXCkpL2c7XG4gIHZhciBwcm9wZXJ0eURlbGltaXRlciA9IC86KC4rKS87XG4gIGNzc1RleHQuc3BsaXQobGlzdERlbGltaXRlcikuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkge1xuICAgIGlmIChpdGVtKSB7XG4gICAgICB2YXIgdG1wID0gaXRlbS5zcGxpdChwcm9wZXJ0eURlbGltaXRlcik7XG4gICAgICB0bXAubGVuZ3RoID4gMSAmJiAocmVzW3RtcFswXS50cmltKCldID0gdG1wWzFdLnRyaW0oKSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlc1xufSk7XG5cbi8vIG1lcmdlIHN0YXRpYyBhbmQgZHluYW1pYyBzdHlsZSBkYXRhIG9uIHRoZSBzYW1lIHZub2RlXG5mdW5jdGlvbiBub3JtYWxpemVTdHlsZURhdGEgKGRhdGEpIHtcbiAgdmFyIHN0eWxlID0gbm9ybWFsaXplU3R5bGVCaW5kaW5nKGRhdGEuc3R5bGUpO1xuICAvLyBzdGF0aWMgc3R5bGUgaXMgcHJlLXByb2Nlc3NlZCBpbnRvIGFuIG9iamVjdCBkdXJpbmcgY29tcGlsYXRpb25cbiAgLy8gYW5kIGlzIGFsd2F5cyBhIGZyZXNoIG9iamVjdCwgc28gaXQncyBzYWZlIHRvIG1lcmdlIGludG8gaXRcbiAgcmV0dXJuIGRhdGEuc3RhdGljU3R5bGVcbiAgICA/IGV4dGVuZChkYXRhLnN0YXRpY1N0eWxlLCBzdHlsZSlcbiAgICA6IHN0eWxlXG59XG5cbi8vIG5vcm1hbGl6ZSBwb3NzaWJsZSBhcnJheSAvIHN0cmluZyB2YWx1ZXMgaW50byBPYmplY3RcbmZ1bmN0aW9uIG5vcm1hbGl6ZVN0eWxlQmluZGluZyAoYmluZGluZ1N0eWxlKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGJpbmRpbmdTdHlsZSkpIHtcbiAgICByZXR1cm4gdG9PYmplY3QoYmluZGluZ1N0eWxlKVxuICB9XG4gIGlmICh0eXBlb2YgYmluZGluZ1N0eWxlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBwYXJzZVN0eWxlVGV4dChiaW5kaW5nU3R5bGUpXG4gIH1cbiAgcmV0dXJuIGJpbmRpbmdTdHlsZVxufVxuXG4vKipcbiAqIHBhcmVudCBjb21wb25lbnQgc3R5bGUgc2hvdWxkIGJlIGFmdGVyIGNoaWxkJ3NcbiAqIHNvIHRoYXQgcGFyZW50IGNvbXBvbmVudCdzIHN0eWxlIGNvdWxkIG92ZXJyaWRlIGl0XG4gKi9cbmZ1bmN0aW9uIGdldFN0eWxlICh2bm9kZSwgY2hlY2tDaGlsZCkge1xuICB2YXIgcmVzID0ge307XG4gIHZhciBzdHlsZURhdGE7XG5cbiAgaWYgKGNoZWNrQ2hpbGQpIHtcbiAgICB2YXIgY2hpbGROb2RlID0gdm5vZGU7XG4gICAgd2hpbGUgKGNoaWxkTm9kZS5jb21wb25lbnRJbnN0YW5jZSkge1xuICAgICAgY2hpbGROb2RlID0gY2hpbGROb2RlLmNvbXBvbmVudEluc3RhbmNlLl92bm9kZTtcbiAgICAgIGlmIChcbiAgICAgICAgY2hpbGROb2RlICYmIGNoaWxkTm9kZS5kYXRhICYmXG4gICAgICAgIChzdHlsZURhdGEgPSBub3JtYWxpemVTdHlsZURhdGEoY2hpbGROb2RlLmRhdGEpKVxuICAgICAgKSB7XG4gICAgICAgIGV4dGVuZChyZXMsIHN0eWxlRGF0YSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKChzdHlsZURhdGEgPSBub3JtYWxpemVTdHlsZURhdGEodm5vZGUuZGF0YSkpKSB7XG4gICAgZXh0ZW5kKHJlcywgc3R5bGVEYXRhKTtcbiAgfVxuXG4gIHZhciBwYXJlbnROb2RlID0gdm5vZGU7XG4gIHdoaWxlICgocGFyZW50Tm9kZSA9IHBhcmVudE5vZGUucGFyZW50KSkge1xuICAgIGlmIChwYXJlbnROb2RlLmRhdGEgJiYgKHN0eWxlRGF0YSA9IG5vcm1hbGl6ZVN0eWxlRGF0YShwYXJlbnROb2RlLmRhdGEpKSkge1xuICAgICAgZXh0ZW5kKHJlcywgc3R5bGVEYXRhKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG4vKiAgKi9cblxudmFyIGNzc1ZhclJFID0gL14tLS87XG52YXIgaW1wb3J0YW50UkUgPSAvXFxzKiFpbXBvcnRhbnQkLztcbnZhciBzZXRQcm9wID0gZnVuY3Rpb24gKGVsLCBuYW1lLCB2YWwpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmIChjc3NWYXJSRS50ZXN0KG5hbWUpKSB7XG4gICAgZWwuc3R5bGUuc2V0UHJvcGVydHkobmFtZSwgdmFsKTtcbiAgfSBlbHNlIGlmIChpbXBvcnRhbnRSRS50ZXN0KHZhbCkpIHtcbiAgICBlbC5zdHlsZS5zZXRQcm9wZXJ0eShoeXBoZW5hdGUobmFtZSksIHZhbC5yZXBsYWNlKGltcG9ydGFudFJFLCAnJyksICdpbXBvcnRhbnQnKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgbm9ybWFsaXplZE5hbWUgPSBub3JtYWxpemUobmFtZSk7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgICAgLy8gU3VwcG9ydCB2YWx1ZXMgYXJyYXkgY3JlYXRlZCBieSBhdXRvcHJlZml4ZXIsIGUuZy5cbiAgICAgIC8vIHtkaXNwbGF5OiBbXCItd2Via2l0LWJveFwiLCBcIi1tcy1mbGV4Ym94XCIsIFwiZmxleFwiXX1cbiAgICAgIC8vIFNldCB0aGVtIG9uZSBieSBvbmUsIGFuZCB0aGUgYnJvd3NlciB3aWxsIG9ubHkgc2V0IHRob3NlIGl0IGNhbiByZWNvZ25pemVcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSB2YWwubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgZWwuc3R5bGVbbm9ybWFsaXplZE5hbWVdID0gdmFsW2ldO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBlbC5zdHlsZVtub3JtYWxpemVkTmFtZV0gPSB2YWw7XG4gICAgfVxuICB9XG59O1xuXG52YXIgdmVuZG9yTmFtZXMgPSBbJ1dlYmtpdCcsICdNb3onLCAnbXMnXTtcblxudmFyIGVtcHR5U3R5bGU7XG52YXIgbm9ybWFsaXplID0gY2FjaGVkKGZ1bmN0aW9uIChwcm9wKSB7XG4gIGVtcHR5U3R5bGUgPSBlbXB0eVN0eWxlIHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLnN0eWxlO1xuICBwcm9wID0gY2FtZWxpemUocHJvcCk7XG4gIGlmIChwcm9wICE9PSAnZmlsdGVyJyAmJiAocHJvcCBpbiBlbXB0eVN0eWxlKSkge1xuICAgIHJldHVybiBwcm9wXG4gIH1cbiAgdmFyIGNhcE5hbWUgPSBwcm9wLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgcHJvcC5zbGljZSgxKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB2ZW5kb3JOYW1lcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBuYW1lID0gdmVuZG9yTmFtZXNbaV0gKyBjYXBOYW1lO1xuICAgIGlmIChuYW1lIGluIGVtcHR5U3R5bGUpIHtcbiAgICAgIHJldHVybiBuYW1lXG4gICAgfVxuICB9XG59KTtcblxuZnVuY3Rpb24gdXBkYXRlU3R5bGUgKG9sZFZub2RlLCB2bm9kZSkge1xuICB2YXIgZGF0YSA9IHZub2RlLmRhdGE7XG4gIHZhciBvbGREYXRhID0gb2xkVm5vZGUuZGF0YTtcblxuICBpZiAoaXNVbmRlZihkYXRhLnN0YXRpY1N0eWxlKSAmJiBpc1VuZGVmKGRhdGEuc3R5bGUpICYmXG4gICAgaXNVbmRlZihvbGREYXRhLnN0YXRpY1N0eWxlKSAmJiBpc1VuZGVmKG9sZERhdGEuc3R5bGUpXG4gICkge1xuICAgIHJldHVyblxuICB9XG5cbiAgdmFyIGN1ciwgbmFtZTtcbiAgdmFyIGVsID0gdm5vZGUuZWxtO1xuICB2YXIgb2xkU3RhdGljU3R5bGUgPSBvbGREYXRhLnN0YXRpY1N0eWxlO1xuICB2YXIgb2xkU3R5bGVCaW5kaW5nID0gb2xkRGF0YS5ub3JtYWxpemVkU3R5bGUgfHwgb2xkRGF0YS5zdHlsZSB8fCB7fTtcblxuICAvLyBpZiBzdGF0aWMgc3R5bGUgZXhpc3RzLCBzdHlsZWJpbmRpbmcgYWxyZWFkeSBtZXJnZWQgaW50byBpdCB3aGVuIGRvaW5nIG5vcm1hbGl6ZVN0eWxlRGF0YVxuICB2YXIgb2xkU3R5bGUgPSBvbGRTdGF0aWNTdHlsZSB8fCBvbGRTdHlsZUJpbmRpbmc7XG5cbiAgdmFyIHN0eWxlID0gbm9ybWFsaXplU3R5bGVCaW5kaW5nKHZub2RlLmRhdGEuc3R5bGUpIHx8IHt9O1xuXG4gIC8vIHN0b3JlIG5vcm1hbGl6ZWQgc3R5bGUgdW5kZXIgYSBkaWZmZXJlbnQga2V5IGZvciBuZXh0IGRpZmZcbiAgLy8gbWFrZSBzdXJlIHRvIGNsb25lIGl0IGlmIGl0J3MgcmVhY3RpdmUsIHNpbmNlIHRoZSB1c2VyIGxpa2VseSB3YW50c1xuICAvLyB0byBtdXRhdGUgaXQuXG4gIHZub2RlLmRhdGEubm9ybWFsaXplZFN0eWxlID0gaXNEZWYoc3R5bGUuX19vYl9fKVxuICAgID8gZXh0ZW5kKHt9LCBzdHlsZSlcbiAgICA6IHN0eWxlO1xuXG4gIHZhciBuZXdTdHlsZSA9IGdldFN0eWxlKHZub2RlLCB0cnVlKTtcblxuICBmb3IgKG5hbWUgaW4gb2xkU3R5bGUpIHtcbiAgICBpZiAoaXNVbmRlZihuZXdTdHlsZVtuYW1lXSkpIHtcbiAgICAgIHNldFByb3AoZWwsIG5hbWUsICcnKTtcbiAgICB9XG4gIH1cbiAgZm9yIChuYW1lIGluIG5ld1N0eWxlKSB7XG4gICAgY3VyID0gbmV3U3R5bGVbbmFtZV07XG4gICAgaWYgKGN1ciAhPT0gb2xkU3R5bGVbbmFtZV0pIHtcbiAgICAgIC8vIGllOSBzZXR0aW5nIHRvIG51bGwgaGFzIG5vIGVmZmVjdCwgbXVzdCB1c2UgZW1wdHkgc3RyaW5nXG4gICAgICBzZXRQcm9wKGVsLCBuYW1lLCBjdXIgPT0gbnVsbCA/ICcnIDogY3VyKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIHN0eWxlID0ge1xuICBjcmVhdGU6IHVwZGF0ZVN0eWxlLFxuICB1cGRhdGU6IHVwZGF0ZVN0eWxlXG59O1xuXG4vKiAgKi9cblxudmFyIHdoaXRlc3BhY2VSRSA9IC9cXHMrLztcblxuLyoqXG4gKiBBZGQgY2xhc3Mgd2l0aCBjb21wYXRpYmlsaXR5IGZvciBTVkcgc2luY2UgY2xhc3NMaXN0IGlzIG5vdCBzdXBwb3J0ZWQgb25cbiAqIFNWRyBlbGVtZW50cyBpbiBJRVxuICovXG5mdW5jdGlvbiBhZGRDbGFzcyAoZWwsIGNscykge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKCFjbHMgfHwgIShjbHMgPSBjbHMudHJpbSgpKSkge1xuICAgIHJldHVyblxuICB9XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKGVsLmNsYXNzTGlzdCkge1xuICAgIGlmIChjbHMuaW5kZXhPZignICcpID4gLTEpIHtcbiAgICAgIGNscy5zcGxpdCh3aGl0ZXNwYWNlUkUpLmZvckVhY2goZnVuY3Rpb24gKGMpIHsgcmV0dXJuIGVsLmNsYXNzTGlzdC5hZGQoYyk7IH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbC5jbGFzc0xpc3QuYWRkKGNscyk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBjdXIgPSBcIiBcIiArIChlbC5nZXRBdHRyaWJ1dGUoJ2NsYXNzJykgfHwgJycpICsgXCIgXCI7XG4gICAgaWYgKGN1ci5pbmRleE9mKCcgJyArIGNscyArICcgJykgPCAwKSB7XG4gICAgICBlbC5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgKGN1ciArIGNscykudHJpbSgpKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBSZW1vdmUgY2xhc3Mgd2l0aCBjb21wYXRpYmlsaXR5IGZvciBTVkcgc2luY2UgY2xhc3NMaXN0IGlzIG5vdCBzdXBwb3J0ZWQgb25cbiAqIFNWRyBlbGVtZW50cyBpbiBJRVxuICovXG5mdW5jdGlvbiByZW1vdmVDbGFzcyAoZWwsIGNscykge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKCFjbHMgfHwgIShjbHMgPSBjbHMudHJpbSgpKSkge1xuICAgIHJldHVyblxuICB9XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKGVsLmNsYXNzTGlzdCkge1xuICAgIGlmIChjbHMuaW5kZXhPZignICcpID4gLTEpIHtcbiAgICAgIGNscy5zcGxpdCh3aGl0ZXNwYWNlUkUpLmZvckVhY2goZnVuY3Rpb24gKGMpIHsgcmV0dXJuIGVsLmNsYXNzTGlzdC5yZW1vdmUoYyk7IH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbC5jbGFzc0xpc3QucmVtb3ZlKGNscyk7XG4gICAgfVxuICAgIGlmICghZWwuY2xhc3NMaXN0Lmxlbmd0aCkge1xuICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKCdjbGFzcycpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YXIgY3VyID0gXCIgXCIgKyAoZWwuZ2V0QXR0cmlidXRlKCdjbGFzcycpIHx8ICcnKSArIFwiIFwiO1xuICAgIHZhciB0YXIgPSAnICcgKyBjbHMgKyAnICc7XG4gICAgd2hpbGUgKGN1ci5pbmRleE9mKHRhcikgPj0gMCkge1xuICAgICAgY3VyID0gY3VyLnJlcGxhY2UodGFyLCAnICcpO1xuICAgIH1cbiAgICBjdXIgPSBjdXIudHJpbSgpO1xuICAgIGlmIChjdXIpIHtcbiAgICAgIGVsLnNldEF0dHJpYnV0ZSgnY2xhc3MnLCBjdXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbC5yZW1vdmVBdHRyaWJ1dGUoJ2NsYXNzJyk7XG4gICAgfVxuICB9XG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiByZXNvbHZlVHJhbnNpdGlvbiAoZGVmJCQxKSB7XG4gIGlmICghZGVmJCQxKSB7XG4gICAgcmV0dXJuXG4gIH1cbiAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKHR5cGVvZiBkZWYkJDEgPT09ICdvYmplY3QnKSB7XG4gICAgdmFyIHJlcyA9IHt9O1xuICAgIGlmIChkZWYkJDEuY3NzICE9PSBmYWxzZSkge1xuICAgICAgZXh0ZW5kKHJlcywgYXV0b0Nzc1RyYW5zaXRpb24oZGVmJCQxLm5hbWUgfHwgJ3YnKSk7XG4gICAgfVxuICAgIGV4dGVuZChyZXMsIGRlZiQkMSk7XG4gICAgcmV0dXJuIHJlc1xuICB9IGVsc2UgaWYgKHR5cGVvZiBkZWYkJDEgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGF1dG9Dc3NUcmFuc2l0aW9uKGRlZiQkMSlcbiAgfVxufVxuXG52YXIgYXV0b0Nzc1RyYW5zaXRpb24gPSBjYWNoZWQoZnVuY3Rpb24gKG5hbWUpIHtcbiAgcmV0dXJuIHtcbiAgICBlbnRlckNsYXNzOiAobmFtZSArIFwiLWVudGVyXCIpLFxuICAgIGVudGVyVG9DbGFzczogKG5hbWUgKyBcIi1lbnRlci10b1wiKSxcbiAgICBlbnRlckFjdGl2ZUNsYXNzOiAobmFtZSArIFwiLWVudGVyLWFjdGl2ZVwiKSxcbiAgICBsZWF2ZUNsYXNzOiAobmFtZSArIFwiLWxlYXZlXCIpLFxuICAgIGxlYXZlVG9DbGFzczogKG5hbWUgKyBcIi1sZWF2ZS10b1wiKSxcbiAgICBsZWF2ZUFjdGl2ZUNsYXNzOiAobmFtZSArIFwiLWxlYXZlLWFjdGl2ZVwiKVxuICB9XG59KTtcblxudmFyIGhhc1RyYW5zaXRpb24gPSBpbkJyb3dzZXIgJiYgIWlzSUU5O1xudmFyIFRSQU5TSVRJT04gPSAndHJhbnNpdGlvbic7XG52YXIgQU5JTUFUSU9OID0gJ2FuaW1hdGlvbic7XG5cbi8vIFRyYW5zaXRpb24gcHJvcGVydHkvZXZlbnQgc25pZmZpbmdcbnZhciB0cmFuc2l0aW9uUHJvcCA9ICd0cmFuc2l0aW9uJztcbnZhciB0cmFuc2l0aW9uRW5kRXZlbnQgPSAndHJhbnNpdGlvbmVuZCc7XG52YXIgYW5pbWF0aW9uUHJvcCA9ICdhbmltYXRpb24nO1xudmFyIGFuaW1hdGlvbkVuZEV2ZW50ID0gJ2FuaW1hdGlvbmVuZCc7XG5pZiAoaGFzVHJhbnNpdGlvbikge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKHdpbmRvdy5vbnRyYW5zaXRpb25lbmQgPT09IHVuZGVmaW5lZCAmJlxuICAgIHdpbmRvdy5vbndlYmtpdHRyYW5zaXRpb25lbmQgIT09IHVuZGVmaW5lZFxuICApIHtcbiAgICB0cmFuc2l0aW9uUHJvcCA9ICdXZWJraXRUcmFuc2l0aW9uJztcbiAgICB0cmFuc2l0aW9uRW5kRXZlbnQgPSAnd2Via2l0VHJhbnNpdGlvbkVuZCc7XG4gIH1cbiAgaWYgKHdpbmRvdy5vbmFuaW1hdGlvbmVuZCA9PT0gdW5kZWZpbmVkICYmXG4gICAgd2luZG93Lm9ud2Via2l0YW5pbWF0aW9uZW5kICE9PSB1bmRlZmluZWRcbiAgKSB7XG4gICAgYW5pbWF0aW9uUHJvcCA9ICdXZWJraXRBbmltYXRpb24nO1xuICAgIGFuaW1hdGlvbkVuZEV2ZW50ID0gJ3dlYmtpdEFuaW1hdGlvbkVuZCc7XG4gIH1cbn1cblxuLy8gYmluZGluZyB0byB3aW5kb3cgaXMgbmVjZXNzYXJ5IHRvIG1ha2UgaG90IHJlbG9hZCB3b3JrIGluIElFIGluIHN0cmljdCBtb2RlXG52YXIgcmFmID0gaW5Ccm93c2VyXG4gID8gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZVxuICAgID8gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdylcbiAgICA6IHNldFRpbWVvdXRcbiAgOiAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqLyBmdW5jdGlvbiAoZm4pIHsgcmV0dXJuIGZuKCk7IH07XG5cbmZ1bmN0aW9uIG5leHRGcmFtZSAoZm4pIHtcbiAgcmFmKGZ1bmN0aW9uICgpIHtcbiAgICByYWYoZm4pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gYWRkVHJhbnNpdGlvbkNsYXNzIChlbCwgY2xzKSB7XG4gIHZhciB0cmFuc2l0aW9uQ2xhc3NlcyA9IGVsLl90cmFuc2l0aW9uQ2xhc3NlcyB8fCAoZWwuX3RyYW5zaXRpb25DbGFzc2VzID0gW10pO1xuICBpZiAodHJhbnNpdGlvbkNsYXNzZXMuaW5kZXhPZihjbHMpIDwgMCkge1xuICAgIHRyYW5zaXRpb25DbGFzc2VzLnB1c2goY2xzKTtcbiAgICBhZGRDbGFzcyhlbCwgY2xzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZW1vdmVUcmFuc2l0aW9uQ2xhc3MgKGVsLCBjbHMpIHtcbiAgaWYgKGVsLl90cmFuc2l0aW9uQ2xhc3Nlcykge1xuICAgIHJlbW92ZShlbC5fdHJhbnNpdGlvbkNsYXNzZXMsIGNscyk7XG4gIH1cbiAgcmVtb3ZlQ2xhc3MoZWwsIGNscyk7XG59XG5cbmZ1bmN0aW9uIHdoZW5UcmFuc2l0aW9uRW5kcyAoXG4gIGVsLFxuICBleHBlY3RlZFR5cGUsXG4gIGNiXG4pIHtcbiAgdmFyIHJlZiA9IGdldFRyYW5zaXRpb25JbmZvKGVsLCBleHBlY3RlZFR5cGUpO1xuICB2YXIgdHlwZSA9IHJlZi50eXBlO1xuICB2YXIgdGltZW91dCA9IHJlZi50aW1lb3V0O1xuICB2YXIgcHJvcENvdW50ID0gcmVmLnByb3BDb3VudDtcbiAgaWYgKCF0eXBlKSB7IHJldHVybiBjYigpIH1cbiAgdmFyIGV2ZW50ID0gdHlwZSA9PT0gVFJBTlNJVElPTiA/IHRyYW5zaXRpb25FbmRFdmVudCA6IGFuaW1hdGlvbkVuZEV2ZW50O1xuICB2YXIgZW5kZWQgPSAwO1xuICB2YXIgZW5kID0gZnVuY3Rpb24gKCkge1xuICAgIGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnQsIG9uRW5kKTtcbiAgICBjYigpO1xuICB9O1xuICB2YXIgb25FbmQgPSBmdW5jdGlvbiAoZSkge1xuICAgIGlmIChlLnRhcmdldCA9PT0gZWwpIHtcbiAgICAgIGlmICgrK2VuZGVkID49IHByb3BDb3VudCkge1xuICAgICAgICBlbmQoKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgIGlmIChlbmRlZCA8IHByb3BDb3VudCkge1xuICAgICAgZW5kKCk7XG4gICAgfVxuICB9LCB0aW1lb3V0ICsgMSk7XG4gIGVsLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQsIG9uRW5kKTtcbn1cblxudmFyIHRyYW5zZm9ybVJFID0gL1xcYih0cmFuc2Zvcm18YWxsKSgsfCQpLztcblxuZnVuY3Rpb24gZ2V0VHJhbnNpdGlvbkluZm8gKGVsLCBleHBlY3RlZFR5cGUpIHtcbiAgdmFyIHN0eWxlcyA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsKTtcbiAgLy8gSlNET00gbWF5IHJldHVybiB1bmRlZmluZWQgZm9yIHRyYW5zaXRpb24gcHJvcGVydGllc1xuICB2YXIgdHJhbnNpdGlvbkRlbGF5cyA9IChzdHlsZXNbdHJhbnNpdGlvblByb3AgKyAnRGVsYXknXSB8fCAnJykuc3BsaXQoJywgJyk7XG4gIHZhciB0cmFuc2l0aW9uRHVyYXRpb25zID0gKHN0eWxlc1t0cmFuc2l0aW9uUHJvcCArICdEdXJhdGlvbiddIHx8ICcnKS5zcGxpdCgnLCAnKTtcbiAgdmFyIHRyYW5zaXRpb25UaW1lb3V0ID0gZ2V0VGltZW91dCh0cmFuc2l0aW9uRGVsYXlzLCB0cmFuc2l0aW9uRHVyYXRpb25zKTtcbiAgdmFyIGFuaW1hdGlvbkRlbGF5cyA9IChzdHlsZXNbYW5pbWF0aW9uUHJvcCArICdEZWxheSddIHx8ICcnKS5zcGxpdCgnLCAnKTtcbiAgdmFyIGFuaW1hdGlvbkR1cmF0aW9ucyA9IChzdHlsZXNbYW5pbWF0aW9uUHJvcCArICdEdXJhdGlvbiddIHx8ICcnKS5zcGxpdCgnLCAnKTtcbiAgdmFyIGFuaW1hdGlvblRpbWVvdXQgPSBnZXRUaW1lb3V0KGFuaW1hdGlvbkRlbGF5cywgYW5pbWF0aW9uRHVyYXRpb25zKTtcblxuICB2YXIgdHlwZTtcbiAgdmFyIHRpbWVvdXQgPSAwO1xuICB2YXIgcHJvcENvdW50ID0gMDtcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmIChleHBlY3RlZFR5cGUgPT09IFRSQU5TSVRJT04pIHtcbiAgICBpZiAodHJhbnNpdGlvblRpbWVvdXQgPiAwKSB7XG4gICAgICB0eXBlID0gVFJBTlNJVElPTjtcbiAgICAgIHRpbWVvdXQgPSB0cmFuc2l0aW9uVGltZW91dDtcbiAgICAgIHByb3BDb3VudCA9IHRyYW5zaXRpb25EdXJhdGlvbnMubGVuZ3RoO1xuICAgIH1cbiAgfSBlbHNlIGlmIChleHBlY3RlZFR5cGUgPT09IEFOSU1BVElPTikge1xuICAgIGlmIChhbmltYXRpb25UaW1lb3V0ID4gMCkge1xuICAgICAgdHlwZSA9IEFOSU1BVElPTjtcbiAgICAgIHRpbWVvdXQgPSBhbmltYXRpb25UaW1lb3V0O1xuICAgICAgcHJvcENvdW50ID0gYW5pbWF0aW9uRHVyYXRpb25zLmxlbmd0aDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGltZW91dCA9IE1hdGgubWF4KHRyYW5zaXRpb25UaW1lb3V0LCBhbmltYXRpb25UaW1lb3V0KTtcbiAgICB0eXBlID0gdGltZW91dCA+IDBcbiAgICAgID8gdHJhbnNpdGlvblRpbWVvdXQgPiBhbmltYXRpb25UaW1lb3V0XG4gICAgICAgID8gVFJBTlNJVElPTlxuICAgICAgICA6IEFOSU1BVElPTlxuICAgICAgOiBudWxsO1xuICAgIHByb3BDb3VudCA9IHR5cGVcbiAgICAgID8gdHlwZSA9PT0gVFJBTlNJVElPTlxuICAgICAgICA/IHRyYW5zaXRpb25EdXJhdGlvbnMubGVuZ3RoXG4gICAgICAgIDogYW5pbWF0aW9uRHVyYXRpb25zLmxlbmd0aFxuICAgICAgOiAwO1xuICB9XG4gIHZhciBoYXNUcmFuc2Zvcm0gPVxuICAgIHR5cGUgPT09IFRSQU5TSVRJT04gJiZcbiAgICB0cmFuc2Zvcm1SRS50ZXN0KHN0eWxlc1t0cmFuc2l0aW9uUHJvcCArICdQcm9wZXJ0eSddKTtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiB0eXBlLFxuICAgIHRpbWVvdXQ6IHRpbWVvdXQsXG4gICAgcHJvcENvdW50OiBwcm9wQ291bnQsXG4gICAgaGFzVHJhbnNmb3JtOiBoYXNUcmFuc2Zvcm1cbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRUaW1lb3V0IChkZWxheXMsIGR1cmF0aW9ucykge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICB3aGlsZSAoZGVsYXlzLmxlbmd0aCA8IGR1cmF0aW9ucy5sZW5ndGgpIHtcbiAgICBkZWxheXMgPSBkZWxheXMuY29uY2F0KGRlbGF5cyk7XG4gIH1cblxuICByZXR1cm4gTWF0aC5tYXguYXBwbHkobnVsbCwgZHVyYXRpb25zLm1hcChmdW5jdGlvbiAoZCwgaSkge1xuICAgIHJldHVybiB0b01zKGQpICsgdG9NcyhkZWxheXNbaV0pXG4gIH0pKVxufVxuXG4vLyBPbGQgdmVyc2lvbnMgb2YgQ2hyb21pdW0gKGJlbG93IDYxLjAuMzE2My4xMDApIGZvcm1hdHMgZmxvYXRpbmcgcG9pbnRlciBudW1iZXJzXG4vLyBpbiBhIGxvY2FsZS1kZXBlbmRlbnQgd2F5LCB1c2luZyBhIGNvbW1hIGluc3RlYWQgb2YgYSBkb3QuXG4vLyBJZiBjb21tYSBpcyBub3QgcmVwbGFjZWQgd2l0aCBhIGRvdCwgdGhlIGlucHV0IHdpbGwgYmUgcm91bmRlZCBkb3duIChpLmUuIGFjdGluZ1xuLy8gYXMgYSBmbG9vciBmdW5jdGlvbikgY2F1c2luZyB1bmV4cGVjdGVkIGJlaGF2aW9yc1xuZnVuY3Rpb24gdG9NcyAocykge1xuICByZXR1cm4gTnVtYmVyKHMuc2xpY2UoMCwgLTEpLnJlcGxhY2UoJywnLCAnLicpKSAqIDEwMDBcbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIGVudGVyICh2bm9kZSwgdG9nZ2xlRGlzcGxheSkge1xuICB2YXIgZWwgPSB2bm9kZS5lbG07XG5cbiAgLy8gY2FsbCBsZWF2ZSBjYWxsYmFjayBub3dcbiAgaWYgKGlzRGVmKGVsLl9sZWF2ZUNiKSkge1xuICAgIGVsLl9sZWF2ZUNiLmNhbmNlbGxlZCA9IHRydWU7XG4gICAgZWwuX2xlYXZlQ2IoKTtcbiAgfVxuXG4gIHZhciBkYXRhID0gcmVzb2x2ZVRyYW5zaXRpb24odm5vZGUuZGF0YS50cmFuc2l0aW9uKTtcbiAgaWYgKGlzVW5kZWYoZGF0YSkpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoaXNEZWYoZWwuX2VudGVyQ2IpIHx8IGVsLm5vZGVUeXBlICE9PSAxKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICB2YXIgY3NzID0gZGF0YS5jc3M7XG4gIHZhciB0eXBlID0gZGF0YS50eXBlO1xuICB2YXIgZW50ZXJDbGFzcyA9IGRhdGEuZW50ZXJDbGFzcztcbiAgdmFyIGVudGVyVG9DbGFzcyA9IGRhdGEuZW50ZXJUb0NsYXNzO1xuICB2YXIgZW50ZXJBY3RpdmVDbGFzcyA9IGRhdGEuZW50ZXJBY3RpdmVDbGFzcztcbiAgdmFyIGFwcGVhckNsYXNzID0gZGF0YS5hcHBlYXJDbGFzcztcbiAgdmFyIGFwcGVhclRvQ2xhc3MgPSBkYXRhLmFwcGVhclRvQ2xhc3M7XG4gIHZhciBhcHBlYXJBY3RpdmVDbGFzcyA9IGRhdGEuYXBwZWFyQWN0aXZlQ2xhc3M7XG4gIHZhciBiZWZvcmVFbnRlciA9IGRhdGEuYmVmb3JlRW50ZXI7XG4gIHZhciBlbnRlciA9IGRhdGEuZW50ZXI7XG4gIHZhciBhZnRlckVudGVyID0gZGF0YS5hZnRlckVudGVyO1xuICB2YXIgZW50ZXJDYW5jZWxsZWQgPSBkYXRhLmVudGVyQ2FuY2VsbGVkO1xuICB2YXIgYmVmb3JlQXBwZWFyID0gZGF0YS5iZWZvcmVBcHBlYXI7XG4gIHZhciBhcHBlYXIgPSBkYXRhLmFwcGVhcjtcbiAgdmFyIGFmdGVyQXBwZWFyID0gZGF0YS5hZnRlckFwcGVhcjtcbiAgdmFyIGFwcGVhckNhbmNlbGxlZCA9IGRhdGEuYXBwZWFyQ2FuY2VsbGVkO1xuICB2YXIgZHVyYXRpb24gPSBkYXRhLmR1cmF0aW9uO1xuXG4gIC8vIGFjdGl2ZUluc3RhbmNlIHdpbGwgYWx3YXlzIGJlIHRoZSA8dHJhbnNpdGlvbj4gY29tcG9uZW50IG1hbmFnaW5nIHRoaXNcbiAgLy8gdHJhbnNpdGlvbi4gT25lIGVkZ2UgY2FzZSB0byBjaGVjayBpcyB3aGVuIHRoZSA8dHJhbnNpdGlvbj4gaXMgcGxhY2VkXG4gIC8vIGFzIHRoZSByb290IG5vZGUgb2YgYSBjaGlsZCBjb21wb25lbnQuIEluIHRoYXQgY2FzZSB3ZSBuZWVkIHRvIGNoZWNrXG4gIC8vIDx0cmFuc2l0aW9uPidzIHBhcmVudCBmb3IgYXBwZWFyIGNoZWNrLlxuICB2YXIgY29udGV4dCA9IGFjdGl2ZUluc3RhbmNlO1xuICB2YXIgdHJhbnNpdGlvbk5vZGUgPSBhY3RpdmVJbnN0YW5jZS4kdm5vZGU7XG4gIHdoaWxlICh0cmFuc2l0aW9uTm9kZSAmJiB0cmFuc2l0aW9uTm9kZS5wYXJlbnQpIHtcbiAgICBjb250ZXh0ID0gdHJhbnNpdGlvbk5vZGUuY29udGV4dDtcbiAgICB0cmFuc2l0aW9uTm9kZSA9IHRyYW5zaXRpb25Ob2RlLnBhcmVudDtcbiAgfVxuXG4gIHZhciBpc0FwcGVhciA9ICFjb250ZXh0Ll9pc01vdW50ZWQgfHwgIXZub2RlLmlzUm9vdEluc2VydDtcblxuICBpZiAoaXNBcHBlYXIgJiYgIWFwcGVhciAmJiBhcHBlYXIgIT09ICcnKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICB2YXIgc3RhcnRDbGFzcyA9IGlzQXBwZWFyICYmIGFwcGVhckNsYXNzXG4gICAgPyBhcHBlYXJDbGFzc1xuICAgIDogZW50ZXJDbGFzcztcbiAgdmFyIGFjdGl2ZUNsYXNzID0gaXNBcHBlYXIgJiYgYXBwZWFyQWN0aXZlQ2xhc3NcbiAgICA/IGFwcGVhckFjdGl2ZUNsYXNzXG4gICAgOiBlbnRlckFjdGl2ZUNsYXNzO1xuICB2YXIgdG9DbGFzcyA9IGlzQXBwZWFyICYmIGFwcGVhclRvQ2xhc3NcbiAgICA/IGFwcGVhclRvQ2xhc3NcbiAgICA6IGVudGVyVG9DbGFzcztcblxuICB2YXIgYmVmb3JlRW50ZXJIb29rID0gaXNBcHBlYXJcbiAgICA/IChiZWZvcmVBcHBlYXIgfHwgYmVmb3JlRW50ZXIpXG4gICAgOiBiZWZvcmVFbnRlcjtcbiAgdmFyIGVudGVySG9vayA9IGlzQXBwZWFyXG4gICAgPyAodHlwZW9mIGFwcGVhciA9PT0gJ2Z1bmN0aW9uJyA/IGFwcGVhciA6IGVudGVyKVxuICAgIDogZW50ZXI7XG4gIHZhciBhZnRlckVudGVySG9vayA9IGlzQXBwZWFyXG4gICAgPyAoYWZ0ZXJBcHBlYXIgfHwgYWZ0ZXJFbnRlcilcbiAgICA6IGFmdGVyRW50ZXI7XG4gIHZhciBlbnRlckNhbmNlbGxlZEhvb2sgPSBpc0FwcGVhclxuICAgID8gKGFwcGVhckNhbmNlbGxlZCB8fCBlbnRlckNhbmNlbGxlZClcbiAgICA6IGVudGVyQ2FuY2VsbGVkO1xuXG4gIHZhciBleHBsaWNpdEVudGVyRHVyYXRpb24gPSB0b051bWJlcihcbiAgICBpc09iamVjdChkdXJhdGlvbilcbiAgICAgID8gZHVyYXRpb24uZW50ZXJcbiAgICAgIDogZHVyYXRpb25cbiAgKTtcblxuICBpZiAoZXhwbGljaXRFbnRlckR1cmF0aW9uICE9IG51bGwpIHtcbiAgICBjaGVja0R1cmF0aW9uKGV4cGxpY2l0RW50ZXJEdXJhdGlvbiwgJ2VudGVyJywgdm5vZGUpO1xuICB9XG5cbiAgdmFyIGV4cGVjdHNDU1MgPSBjc3MgIT09IGZhbHNlICYmICFpc0lFOTtcbiAgdmFyIHVzZXJXYW50c0NvbnRyb2wgPSBnZXRIb29rQXJndW1lbnRzTGVuZ3RoKGVudGVySG9vayk7XG5cbiAgdmFyIGNiID0gZWwuX2VudGVyQ2IgPSBvbmNlKGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoZXhwZWN0c0NTUykge1xuICAgICAgcmVtb3ZlVHJhbnNpdGlvbkNsYXNzKGVsLCB0b0NsYXNzKTtcbiAgICAgIHJlbW92ZVRyYW5zaXRpb25DbGFzcyhlbCwgYWN0aXZlQ2xhc3MpO1xuICAgIH1cbiAgICBpZiAoY2IuY2FuY2VsbGVkKSB7XG4gICAgICBpZiAoZXhwZWN0c0NTUykge1xuICAgICAgICByZW1vdmVUcmFuc2l0aW9uQ2xhc3MoZWwsIHN0YXJ0Q2xhc3MpO1xuICAgICAgfVxuICAgICAgZW50ZXJDYW5jZWxsZWRIb29rICYmIGVudGVyQ2FuY2VsbGVkSG9vayhlbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFmdGVyRW50ZXJIb29rICYmIGFmdGVyRW50ZXJIb29rKGVsKTtcbiAgICB9XG4gICAgZWwuX2VudGVyQ2IgPSBudWxsO1xuICB9KTtcblxuICBpZiAoIXZub2RlLmRhdGEuc2hvdykge1xuICAgIC8vIHJlbW92ZSBwZW5kaW5nIGxlYXZlIGVsZW1lbnQgb24gZW50ZXIgYnkgaW5qZWN0aW5nIGFuIGluc2VydCBob29rXG4gICAgbWVyZ2VWTm9kZUhvb2sodm5vZGUsICdpbnNlcnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgcGFyZW50ID0gZWwucGFyZW50Tm9kZTtcbiAgICAgIHZhciBwZW5kaW5nTm9kZSA9IHBhcmVudCAmJiBwYXJlbnQuX3BlbmRpbmcgJiYgcGFyZW50Ll9wZW5kaW5nW3Zub2RlLmtleV07XG4gICAgICBpZiAocGVuZGluZ05vZGUgJiZcbiAgICAgICAgcGVuZGluZ05vZGUudGFnID09PSB2bm9kZS50YWcgJiZcbiAgICAgICAgcGVuZGluZ05vZGUuZWxtLl9sZWF2ZUNiXG4gICAgICApIHtcbiAgICAgICAgcGVuZGluZ05vZGUuZWxtLl9sZWF2ZUNiKCk7XG4gICAgICB9XG4gICAgICBlbnRlckhvb2sgJiYgZW50ZXJIb29rKGVsLCBjYik7XG4gICAgfSk7XG4gIH1cblxuICAvLyBzdGFydCBlbnRlciB0cmFuc2l0aW9uXG4gIGJlZm9yZUVudGVySG9vayAmJiBiZWZvcmVFbnRlckhvb2soZWwpO1xuICBpZiAoZXhwZWN0c0NTUykge1xuICAgIGFkZFRyYW5zaXRpb25DbGFzcyhlbCwgc3RhcnRDbGFzcyk7XG4gICAgYWRkVHJhbnNpdGlvbkNsYXNzKGVsLCBhY3RpdmVDbGFzcyk7XG4gICAgbmV4dEZyYW1lKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJlbW92ZVRyYW5zaXRpb25DbGFzcyhlbCwgc3RhcnRDbGFzcyk7XG4gICAgICBpZiAoIWNiLmNhbmNlbGxlZCkge1xuICAgICAgICBhZGRUcmFuc2l0aW9uQ2xhc3MoZWwsIHRvQ2xhc3MpO1xuICAgICAgICBpZiAoIXVzZXJXYW50c0NvbnRyb2wpIHtcbiAgICAgICAgICBpZiAoaXNWYWxpZER1cmF0aW9uKGV4cGxpY2l0RW50ZXJEdXJhdGlvbikpIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoY2IsIGV4cGxpY2l0RW50ZXJEdXJhdGlvbik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHdoZW5UcmFuc2l0aW9uRW5kcyhlbCwgdHlwZSwgY2IpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgaWYgKHZub2RlLmRhdGEuc2hvdykge1xuICAgIHRvZ2dsZURpc3BsYXkgJiYgdG9nZ2xlRGlzcGxheSgpO1xuICAgIGVudGVySG9vayAmJiBlbnRlckhvb2soZWwsIGNiKTtcbiAgfVxuXG4gIGlmICghZXhwZWN0c0NTUyAmJiAhdXNlcldhbnRzQ29udHJvbCkge1xuICAgIGNiKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gbGVhdmUgKHZub2RlLCBybSkge1xuICB2YXIgZWwgPSB2bm9kZS5lbG07XG5cbiAgLy8gY2FsbCBlbnRlciBjYWxsYmFjayBub3dcbiAgaWYgKGlzRGVmKGVsLl9lbnRlckNiKSkge1xuICAgIGVsLl9lbnRlckNiLmNhbmNlbGxlZCA9IHRydWU7XG4gICAgZWwuX2VudGVyQ2IoKTtcbiAgfVxuXG4gIHZhciBkYXRhID0gcmVzb2x2ZVRyYW5zaXRpb24odm5vZGUuZGF0YS50cmFuc2l0aW9uKTtcbiAgaWYgKGlzVW5kZWYoZGF0YSkgfHwgZWwubm9kZVR5cGUgIT09IDEpIHtcbiAgICByZXR1cm4gcm0oKVxuICB9XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmIChpc0RlZihlbC5fbGVhdmVDYikpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIHZhciBjc3MgPSBkYXRhLmNzcztcbiAgdmFyIHR5cGUgPSBkYXRhLnR5cGU7XG4gIHZhciBsZWF2ZUNsYXNzID0gZGF0YS5sZWF2ZUNsYXNzO1xuICB2YXIgbGVhdmVUb0NsYXNzID0gZGF0YS5sZWF2ZVRvQ2xhc3M7XG4gIHZhciBsZWF2ZUFjdGl2ZUNsYXNzID0gZGF0YS5sZWF2ZUFjdGl2ZUNsYXNzO1xuICB2YXIgYmVmb3JlTGVhdmUgPSBkYXRhLmJlZm9yZUxlYXZlO1xuICB2YXIgbGVhdmUgPSBkYXRhLmxlYXZlO1xuICB2YXIgYWZ0ZXJMZWF2ZSA9IGRhdGEuYWZ0ZXJMZWF2ZTtcbiAgdmFyIGxlYXZlQ2FuY2VsbGVkID0gZGF0YS5sZWF2ZUNhbmNlbGxlZDtcbiAgdmFyIGRlbGF5TGVhdmUgPSBkYXRhLmRlbGF5TGVhdmU7XG4gIHZhciBkdXJhdGlvbiA9IGRhdGEuZHVyYXRpb247XG5cbiAgdmFyIGV4cGVjdHNDU1MgPSBjc3MgIT09IGZhbHNlICYmICFpc0lFOTtcbiAgdmFyIHVzZXJXYW50c0NvbnRyb2wgPSBnZXRIb29rQXJndW1lbnRzTGVuZ3RoKGxlYXZlKTtcblxuICB2YXIgZXhwbGljaXRMZWF2ZUR1cmF0aW9uID0gdG9OdW1iZXIoXG4gICAgaXNPYmplY3QoZHVyYXRpb24pXG4gICAgICA/IGR1cmF0aW9uLmxlYXZlXG4gICAgICA6IGR1cmF0aW9uXG4gICk7XG5cbiAgaWYgKGlzRGVmKGV4cGxpY2l0TGVhdmVEdXJhdGlvbikpIHtcbiAgICBjaGVja0R1cmF0aW9uKGV4cGxpY2l0TGVhdmVEdXJhdGlvbiwgJ2xlYXZlJywgdm5vZGUpO1xuICB9XG5cbiAgdmFyIGNiID0gZWwuX2xlYXZlQ2IgPSBvbmNlKGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoZWwucGFyZW50Tm9kZSAmJiBlbC5wYXJlbnROb2RlLl9wZW5kaW5nKSB7XG4gICAgICBlbC5wYXJlbnROb2RlLl9wZW5kaW5nW3Zub2RlLmtleV0gPSBudWxsO1xuICAgIH1cbiAgICBpZiAoZXhwZWN0c0NTUykge1xuICAgICAgcmVtb3ZlVHJhbnNpdGlvbkNsYXNzKGVsLCBsZWF2ZVRvQ2xhc3MpO1xuICAgICAgcmVtb3ZlVHJhbnNpdGlvbkNsYXNzKGVsLCBsZWF2ZUFjdGl2ZUNsYXNzKTtcbiAgICB9XG4gICAgaWYgKGNiLmNhbmNlbGxlZCkge1xuICAgICAgaWYgKGV4cGVjdHNDU1MpIHtcbiAgICAgICAgcmVtb3ZlVHJhbnNpdGlvbkNsYXNzKGVsLCBsZWF2ZUNsYXNzKTtcbiAgICAgIH1cbiAgICAgIGxlYXZlQ2FuY2VsbGVkICYmIGxlYXZlQ2FuY2VsbGVkKGVsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcm0oKTtcbiAgICAgIGFmdGVyTGVhdmUgJiYgYWZ0ZXJMZWF2ZShlbCk7XG4gICAgfVxuICAgIGVsLl9sZWF2ZUNiID0gbnVsbDtcbiAgfSk7XG5cbiAgaWYgKGRlbGF5TGVhdmUpIHtcbiAgICBkZWxheUxlYXZlKHBlcmZvcm1MZWF2ZSk7XG4gIH0gZWxzZSB7XG4gICAgcGVyZm9ybUxlYXZlKCk7XG4gIH1cblxuICBmdW5jdGlvbiBwZXJmb3JtTGVhdmUgKCkge1xuICAgIC8vIHRoZSBkZWxheWVkIGxlYXZlIG1heSBoYXZlIGFscmVhZHkgYmVlbiBjYW5jZWxsZWRcbiAgICBpZiAoY2IuY2FuY2VsbGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgLy8gcmVjb3JkIGxlYXZpbmcgZWxlbWVudFxuICAgIGlmICghdm5vZGUuZGF0YS5zaG93ICYmIGVsLnBhcmVudE5vZGUpIHtcbiAgICAgIChlbC5wYXJlbnROb2RlLl9wZW5kaW5nIHx8IChlbC5wYXJlbnROb2RlLl9wZW5kaW5nID0ge30pKVsodm5vZGUua2V5KV0gPSB2bm9kZTtcbiAgICB9XG4gICAgYmVmb3JlTGVhdmUgJiYgYmVmb3JlTGVhdmUoZWwpO1xuICAgIGlmIChleHBlY3RzQ1NTKSB7XG4gICAgICBhZGRUcmFuc2l0aW9uQ2xhc3MoZWwsIGxlYXZlQ2xhc3MpO1xuICAgICAgYWRkVHJhbnNpdGlvbkNsYXNzKGVsLCBsZWF2ZUFjdGl2ZUNsYXNzKTtcbiAgICAgIG5leHRGcmFtZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJlbW92ZVRyYW5zaXRpb25DbGFzcyhlbCwgbGVhdmVDbGFzcyk7XG4gICAgICAgIGlmICghY2IuY2FuY2VsbGVkKSB7XG4gICAgICAgICAgYWRkVHJhbnNpdGlvbkNsYXNzKGVsLCBsZWF2ZVRvQ2xhc3MpO1xuICAgICAgICAgIGlmICghdXNlcldhbnRzQ29udHJvbCkge1xuICAgICAgICAgICAgaWYgKGlzVmFsaWREdXJhdGlvbihleHBsaWNpdExlYXZlRHVyYXRpb24pKSB7XG4gICAgICAgICAgICAgIHNldFRpbWVvdXQoY2IsIGV4cGxpY2l0TGVhdmVEdXJhdGlvbik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB3aGVuVHJhbnNpdGlvbkVuZHMoZWwsIHR5cGUsIGNiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBsZWF2ZSAmJiBsZWF2ZShlbCwgY2IpO1xuICAgIGlmICghZXhwZWN0c0NTUyAmJiAhdXNlcldhbnRzQ29udHJvbCkge1xuICAgICAgY2IoKTtcbiAgICB9XG4gIH1cbn1cblxuLy8gb25seSB1c2VkIGluIGRldiBtb2RlXG5mdW5jdGlvbiBjaGVja0R1cmF0aW9uICh2YWwsIG5hbWUsIHZub2RlKSB7XG4gIGlmICh0eXBlb2YgdmFsICE9PSAnbnVtYmVyJykge1xuICAgIHdhcm4oXG4gICAgICBcIjx0cmFuc2l0aW9uPiBleHBsaWNpdCBcIiArIG5hbWUgKyBcIiBkdXJhdGlvbiBpcyBub3QgYSB2YWxpZCBudW1iZXIgLSBcIiArXG4gICAgICBcImdvdCBcIiArIChKU09OLnN0cmluZ2lmeSh2YWwpKSArIFwiLlwiLFxuICAgICAgdm5vZGUuY29udGV4dFxuICAgICk7XG4gIH0gZWxzZSBpZiAoaXNOYU4odmFsKSkge1xuICAgIHdhcm4oXG4gICAgICBcIjx0cmFuc2l0aW9uPiBleHBsaWNpdCBcIiArIG5hbWUgKyBcIiBkdXJhdGlvbiBpcyBOYU4gLSBcIiArXG4gICAgICAndGhlIGR1cmF0aW9uIGV4cHJlc3Npb24gbWlnaHQgYmUgaW5jb3JyZWN0LicsXG4gICAgICB2bm9kZS5jb250ZXh0XG4gICAgKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc1ZhbGlkRHVyYXRpb24gKHZhbCkge1xuICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ251bWJlcicgJiYgIWlzTmFOKHZhbClcbn1cblxuLyoqXG4gKiBOb3JtYWxpemUgYSB0cmFuc2l0aW9uIGhvb2sncyBhcmd1bWVudCBsZW5ndGguIFRoZSBob29rIG1heSBiZTpcbiAqIC0gYSBtZXJnZWQgaG9vayAoaW52b2tlcikgd2l0aCB0aGUgb3JpZ2luYWwgaW4gLmZuc1xuICogLSBhIHdyYXBwZWQgY29tcG9uZW50IG1ldGhvZCAoY2hlY2sgLl9sZW5ndGgpXG4gKiAtIGEgcGxhaW4gZnVuY3Rpb24gKC5sZW5ndGgpXG4gKi9cbmZ1bmN0aW9uIGdldEhvb2tBcmd1bWVudHNMZW5ndGggKGZuKSB7XG4gIGlmIChpc1VuZGVmKGZuKSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIHZhciBpbnZva2VyRm5zID0gZm4uZm5zO1xuICBpZiAoaXNEZWYoaW52b2tlckZucykpIHtcbiAgICAvLyBpbnZva2VyXG4gICAgcmV0dXJuIGdldEhvb2tBcmd1bWVudHNMZW5ndGgoXG4gICAgICBBcnJheS5pc0FycmF5KGludm9rZXJGbnMpXG4gICAgICAgID8gaW52b2tlckZuc1swXVxuICAgICAgICA6IGludm9rZXJGbnNcbiAgICApXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIChmbi5fbGVuZ3RoIHx8IGZuLmxlbmd0aCkgPiAxXG4gIH1cbn1cblxuZnVuY3Rpb24gX2VudGVyIChfLCB2bm9kZSkge1xuICBpZiAodm5vZGUuZGF0YS5zaG93ICE9PSB0cnVlKSB7XG4gICAgZW50ZXIodm5vZGUpO1xuICB9XG59XG5cbnZhciB0cmFuc2l0aW9uID0gaW5Ccm93c2VyID8ge1xuICBjcmVhdGU6IF9lbnRlcixcbiAgYWN0aXZhdGU6IF9lbnRlcixcbiAgcmVtb3ZlOiBmdW5jdGlvbiByZW1vdmUkJDEgKHZub2RlLCBybSkge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHZub2RlLmRhdGEuc2hvdyAhPT0gdHJ1ZSkge1xuICAgICAgbGVhdmUodm5vZGUsIHJtKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcm0oKTtcbiAgICB9XG4gIH1cbn0gOiB7fTtcblxudmFyIHBsYXRmb3JtTW9kdWxlcyA9IFtcbiAgYXR0cnMsXG4gIGtsYXNzLFxuICBldmVudHMsXG4gIGRvbVByb3BzLFxuICBzdHlsZSxcbiAgdHJhbnNpdGlvblxuXTtcblxuLyogICovXG5cbi8vIHRoZSBkaXJlY3RpdmUgbW9kdWxlIHNob3VsZCBiZSBhcHBsaWVkIGxhc3QsIGFmdGVyIGFsbFxuLy8gYnVpbHQtaW4gbW9kdWxlcyBoYXZlIGJlZW4gYXBwbGllZC5cbnZhciBtb2R1bGVzID0gcGxhdGZvcm1Nb2R1bGVzLmNvbmNhdChiYXNlTW9kdWxlcyk7XG5cbnZhciBwYXRjaCA9IGNyZWF0ZVBhdGNoRnVuY3Rpb24oeyBub2RlT3BzOiBub2RlT3BzLCBtb2R1bGVzOiBtb2R1bGVzIH0pO1xuXG4vKipcbiAqIE5vdCB0eXBlIGNoZWNraW5nIHRoaXMgZmlsZSBiZWNhdXNlIGZsb3cgZG9lc24ndCBsaWtlIGF0dGFjaGluZ1xuICogcHJvcGVydGllcyB0byBFbGVtZW50cy5cbiAqL1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbmlmIChpc0lFOSkge1xuICAvLyBodHRwOi8vd3d3Lm1hdHRzNDExLmNvbS9wb3N0L2ludGVybmV0LWV4cGxvcmVyLTktb25pbnB1dC9cbiAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignc2VsZWN0aW9uY2hhbmdlJywgZnVuY3Rpb24gKCkge1xuICAgIHZhciBlbCA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gICAgaWYgKGVsICYmIGVsLnZtb2RlbCkge1xuICAgICAgdHJpZ2dlcihlbCwgJ2lucHV0Jyk7XG4gICAgfVxuICB9KTtcbn1cblxudmFyIGRpcmVjdGl2ZSA9IHtcbiAgaW5zZXJ0ZWQ6IGZ1bmN0aW9uIGluc2VydGVkIChlbCwgYmluZGluZywgdm5vZGUsIG9sZFZub2RlKSB7XG4gICAgaWYgKHZub2RlLnRhZyA9PT0gJ3NlbGVjdCcpIHtcbiAgICAgIC8vICM2OTAzXG4gICAgICBpZiAob2xkVm5vZGUuZWxtICYmICFvbGRWbm9kZS5lbG0uX3ZPcHRpb25zKSB7XG4gICAgICAgIG1lcmdlVk5vZGVIb29rKHZub2RlLCAncG9zdHBhdGNoJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGRpcmVjdGl2ZS5jb21wb25lbnRVcGRhdGVkKGVsLCBiaW5kaW5nLCB2bm9kZSk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2V0U2VsZWN0ZWQoZWwsIGJpbmRpbmcsIHZub2RlLmNvbnRleHQpO1xuICAgICAgfVxuICAgICAgZWwuX3ZPcHRpb25zID0gW10ubWFwLmNhbGwoZWwub3B0aW9ucywgZ2V0VmFsdWUpO1xuICAgIH0gZWxzZSBpZiAodm5vZGUudGFnID09PSAndGV4dGFyZWEnIHx8IGlzVGV4dElucHV0VHlwZShlbC50eXBlKSkge1xuICAgICAgZWwuX3ZNb2RpZmllcnMgPSBiaW5kaW5nLm1vZGlmaWVycztcbiAgICAgIGlmICghYmluZGluZy5tb2RpZmllcnMubGF6eSkge1xuICAgICAgICBlbC5hZGRFdmVudExpc3RlbmVyKCdjb21wb3NpdGlvbnN0YXJ0Jywgb25Db21wb3NpdGlvblN0YXJ0KTtcbiAgICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcignY29tcG9zaXRpb25lbmQnLCBvbkNvbXBvc2l0aW9uRW5kKTtcbiAgICAgICAgLy8gU2FmYXJpIDwgMTAuMiAmIFVJV2ViVmlldyBkb2Vzbid0IGZpcmUgY29tcG9zaXRpb25lbmQgd2hlblxuICAgICAgICAvLyBzd2l0Y2hpbmcgZm9jdXMgYmVmb3JlIGNvbmZpcm1pbmcgY29tcG9zaXRpb24gY2hvaWNlXG4gICAgICAgIC8vIHRoaXMgYWxzbyBmaXhlcyB0aGUgaXNzdWUgd2hlcmUgc29tZSBicm93c2VycyBlLmcuIGlPUyBDaHJvbWVcbiAgICAgICAgLy8gZmlyZXMgXCJjaGFuZ2VcIiBpbnN0ZWFkIG9mIFwiaW5wdXRcIiBvbiBhdXRvY29tcGxldGUuXG4gICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIG9uQ29tcG9zaXRpb25FbmQpO1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgaWYgKGlzSUU5KSB7XG4gICAgICAgICAgZWwudm1vZGVsID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBjb21wb25lbnRVcGRhdGVkOiBmdW5jdGlvbiBjb21wb25lbnRVcGRhdGVkIChlbCwgYmluZGluZywgdm5vZGUpIHtcbiAgICBpZiAodm5vZGUudGFnID09PSAnc2VsZWN0Jykge1xuICAgICAgc2V0U2VsZWN0ZWQoZWwsIGJpbmRpbmcsIHZub2RlLmNvbnRleHQpO1xuICAgICAgLy8gaW4gY2FzZSB0aGUgb3B0aW9ucyByZW5kZXJlZCBieSB2LWZvciBoYXZlIGNoYW5nZWQsXG4gICAgICAvLyBpdCdzIHBvc3NpYmxlIHRoYXQgdGhlIHZhbHVlIGlzIG91dC1vZi1zeW5jIHdpdGggdGhlIHJlbmRlcmVkIG9wdGlvbnMuXG4gICAgICAvLyBkZXRlY3Qgc3VjaCBjYXNlcyBhbmQgZmlsdGVyIG91dCB2YWx1ZXMgdGhhdCBubyBsb25nZXIgaGFzIGEgbWF0Y2hpbmdcbiAgICAgIC8vIG9wdGlvbiBpbiB0aGUgRE9NLlxuICAgICAgdmFyIHByZXZPcHRpb25zID0gZWwuX3ZPcHRpb25zO1xuICAgICAgdmFyIGN1ck9wdGlvbnMgPSBlbC5fdk9wdGlvbnMgPSBbXS5tYXAuY2FsbChlbC5vcHRpb25zLCBnZXRWYWx1ZSk7XG4gICAgICBpZiAoY3VyT3B0aW9ucy5zb21lKGZ1bmN0aW9uIChvLCBpKSB7IHJldHVybiAhbG9vc2VFcXVhbChvLCBwcmV2T3B0aW9uc1tpXSk7IH0pKSB7XG4gICAgICAgIC8vIHRyaWdnZXIgY2hhbmdlIGV2ZW50IGlmXG4gICAgICAgIC8vIG5vIG1hdGNoaW5nIG9wdGlvbiBmb3VuZCBmb3IgYXQgbGVhc3Qgb25lIHZhbHVlXG4gICAgICAgIHZhciBuZWVkUmVzZXQgPSBlbC5tdWx0aXBsZVxuICAgICAgICAgID8gYmluZGluZy52YWx1ZS5zb21lKGZ1bmN0aW9uICh2KSB7IHJldHVybiBoYXNOb01hdGNoaW5nT3B0aW9uKHYsIGN1ck9wdGlvbnMpOyB9KVxuICAgICAgICAgIDogYmluZGluZy52YWx1ZSAhPT0gYmluZGluZy5vbGRWYWx1ZSAmJiBoYXNOb01hdGNoaW5nT3B0aW9uKGJpbmRpbmcudmFsdWUsIGN1ck9wdGlvbnMpO1xuICAgICAgICBpZiAobmVlZFJlc2V0KSB7XG4gICAgICAgICAgdHJpZ2dlcihlbCwgJ2NoYW5nZScpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59O1xuXG5mdW5jdGlvbiBzZXRTZWxlY3RlZCAoZWwsIGJpbmRpbmcsIHZtKSB7XG4gIGFjdHVhbGx5U2V0U2VsZWN0ZWQoZWwsIGJpbmRpbmcsIHZtKTtcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmIChpc0lFIHx8IGlzRWRnZSkge1xuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgYWN0dWFsbHlTZXRTZWxlY3RlZChlbCwgYmluZGluZywgdm0pO1xuICAgIH0sIDApO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFjdHVhbGx5U2V0U2VsZWN0ZWQgKGVsLCBiaW5kaW5nLCB2bSkge1xuICB2YXIgdmFsdWUgPSBiaW5kaW5nLnZhbHVlO1xuICB2YXIgaXNNdWx0aXBsZSA9IGVsLm11bHRpcGxlO1xuICBpZiAoaXNNdWx0aXBsZSAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICB3YXJuKFxuICAgICAgXCI8c2VsZWN0IG11bHRpcGxlIHYtbW9kZWw9XFxcIlwiICsgKGJpbmRpbmcuZXhwcmVzc2lvbikgKyBcIlxcXCI+IFwiICtcbiAgICAgIFwiZXhwZWN0cyBhbiBBcnJheSB2YWx1ZSBmb3IgaXRzIGJpbmRpbmcsIGJ1dCBnb3QgXCIgKyAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKS5zbGljZSg4LCAtMSkpLFxuICAgICAgdm1cbiAgICApO1xuICAgIHJldHVyblxuICB9XG4gIHZhciBzZWxlY3RlZCwgb3B0aW9uO1xuICBmb3IgKHZhciBpID0gMCwgbCA9IGVsLm9wdGlvbnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgb3B0aW9uID0gZWwub3B0aW9uc1tpXTtcbiAgICBpZiAoaXNNdWx0aXBsZSkge1xuICAgICAgc2VsZWN0ZWQgPSBsb29zZUluZGV4T2YodmFsdWUsIGdldFZhbHVlKG9wdGlvbikpID4gLTE7XG4gICAgICBpZiAob3B0aW9uLnNlbGVjdGVkICE9PSBzZWxlY3RlZCkge1xuICAgICAgICBvcHRpb24uc2VsZWN0ZWQgPSBzZWxlY3RlZDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGxvb3NlRXF1YWwoZ2V0VmFsdWUob3B0aW9uKSwgdmFsdWUpKSB7XG4gICAgICAgIGlmIChlbC5zZWxlY3RlZEluZGV4ICE9PSBpKSB7XG4gICAgICAgICAgZWwuc2VsZWN0ZWRJbmRleCA9IGk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmICghaXNNdWx0aXBsZSkge1xuICAgIGVsLnNlbGVjdGVkSW5kZXggPSAtMTtcbiAgfVxufVxuXG5mdW5jdGlvbiBoYXNOb01hdGNoaW5nT3B0aW9uICh2YWx1ZSwgb3B0aW9ucykge1xuICByZXR1cm4gb3B0aW9ucy5ldmVyeShmdW5jdGlvbiAobykgeyByZXR1cm4gIWxvb3NlRXF1YWwobywgdmFsdWUpOyB9KVxufVxuXG5mdW5jdGlvbiBnZXRWYWx1ZSAob3B0aW9uKSB7XG4gIHJldHVybiAnX3ZhbHVlJyBpbiBvcHRpb25cbiAgICA/IG9wdGlvbi5fdmFsdWVcbiAgICA6IG9wdGlvbi52YWx1ZVxufVxuXG5mdW5jdGlvbiBvbkNvbXBvc2l0aW9uU3RhcnQgKGUpIHtcbiAgZS50YXJnZXQuY29tcG9zaW5nID0gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gb25Db21wb3NpdGlvbkVuZCAoZSkge1xuICAvLyBwcmV2ZW50IHRyaWdnZXJpbmcgYW4gaW5wdXQgZXZlbnQgZm9yIG5vIHJlYXNvblxuICBpZiAoIWUudGFyZ2V0LmNvbXBvc2luZykgeyByZXR1cm4gfVxuICBlLnRhcmdldC5jb21wb3NpbmcgPSBmYWxzZTtcbiAgdHJpZ2dlcihlLnRhcmdldCwgJ2lucHV0Jyk7XG59XG5cbmZ1bmN0aW9uIHRyaWdnZXIgKGVsLCB0eXBlKSB7XG4gIHZhciBlID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0hUTUxFdmVudHMnKTtcbiAgZS5pbml0RXZlbnQodHlwZSwgdHJ1ZSwgdHJ1ZSk7XG4gIGVsLmRpc3BhdGNoRXZlbnQoZSk7XG59XG5cbi8qICAqL1xuXG4vLyByZWN1cnNpdmVseSBzZWFyY2ggZm9yIHBvc3NpYmxlIHRyYW5zaXRpb24gZGVmaW5lZCBpbnNpZGUgdGhlIGNvbXBvbmVudCByb290XG5mdW5jdGlvbiBsb2NhdGVOb2RlICh2bm9kZSkge1xuICByZXR1cm4gdm5vZGUuY29tcG9uZW50SW5zdGFuY2UgJiYgKCF2bm9kZS5kYXRhIHx8ICF2bm9kZS5kYXRhLnRyYW5zaXRpb24pXG4gICAgPyBsb2NhdGVOb2RlKHZub2RlLmNvbXBvbmVudEluc3RhbmNlLl92bm9kZSlcbiAgICA6IHZub2RlXG59XG5cbnZhciBzaG93ID0ge1xuICBiaW5kOiBmdW5jdGlvbiBiaW5kIChlbCwgcmVmLCB2bm9kZSkge1xuICAgIHZhciB2YWx1ZSA9IHJlZi52YWx1ZTtcblxuICAgIHZub2RlID0gbG9jYXRlTm9kZSh2bm9kZSk7XG4gICAgdmFyIHRyYW5zaXRpb24kJDEgPSB2bm9kZS5kYXRhICYmIHZub2RlLmRhdGEudHJhbnNpdGlvbjtcbiAgICB2YXIgb3JpZ2luYWxEaXNwbGF5ID0gZWwuX192T3JpZ2luYWxEaXNwbGF5ID1cbiAgICAgIGVsLnN0eWxlLmRpc3BsYXkgPT09ICdub25lJyA/ICcnIDogZWwuc3R5bGUuZGlzcGxheTtcbiAgICBpZiAodmFsdWUgJiYgdHJhbnNpdGlvbiQkMSkge1xuICAgICAgdm5vZGUuZGF0YS5zaG93ID0gdHJ1ZTtcbiAgICAgIGVudGVyKHZub2RlLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGVsLnN0eWxlLmRpc3BsYXkgPSBvcmlnaW5hbERpc3BsYXk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZWwuc3R5bGUuZGlzcGxheSA9IHZhbHVlID8gb3JpZ2luYWxEaXNwbGF5IDogJ25vbmUnO1xuICAgIH1cbiAgfSxcblxuICB1cGRhdGU6IGZ1bmN0aW9uIHVwZGF0ZSAoZWwsIHJlZiwgdm5vZGUpIHtcbiAgICB2YXIgdmFsdWUgPSByZWYudmFsdWU7XG4gICAgdmFyIG9sZFZhbHVlID0gcmVmLm9sZFZhbHVlO1xuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKCF2YWx1ZSA9PT0gIW9sZFZhbHVlKSB7IHJldHVybiB9XG4gICAgdm5vZGUgPSBsb2NhdGVOb2RlKHZub2RlKTtcbiAgICB2YXIgdHJhbnNpdGlvbiQkMSA9IHZub2RlLmRhdGEgJiYgdm5vZGUuZGF0YS50cmFuc2l0aW9uO1xuICAgIGlmICh0cmFuc2l0aW9uJCQxKSB7XG4gICAgICB2bm9kZS5kYXRhLnNob3cgPSB0cnVlO1xuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIGVudGVyKHZub2RlLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgZWwuc3R5bGUuZGlzcGxheSA9IGVsLl9fdk9yaWdpbmFsRGlzcGxheTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZWF2ZSh2bm9kZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGVsLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBlbC5zdHlsZS5kaXNwbGF5ID0gdmFsdWUgPyBlbC5fX3ZPcmlnaW5hbERpc3BsYXkgOiAnbm9uZSc7XG4gICAgfVxuICB9LFxuXG4gIHVuYmluZDogZnVuY3Rpb24gdW5iaW5kIChcbiAgICBlbCxcbiAgICBiaW5kaW5nLFxuICAgIHZub2RlLFxuICAgIG9sZFZub2RlLFxuICAgIGlzRGVzdHJveVxuICApIHtcbiAgICBpZiAoIWlzRGVzdHJveSkge1xuICAgICAgZWwuc3R5bGUuZGlzcGxheSA9IGVsLl9fdk9yaWdpbmFsRGlzcGxheTtcbiAgICB9XG4gIH1cbn07XG5cbnZhciBwbGF0Zm9ybURpcmVjdGl2ZXMgPSB7XG4gIG1vZGVsOiBkaXJlY3RpdmUsXG4gIHNob3c6IHNob3dcbn07XG5cbi8qICAqL1xuXG52YXIgdHJhbnNpdGlvblByb3BzID0ge1xuICBuYW1lOiBTdHJpbmcsXG4gIGFwcGVhcjogQm9vbGVhbixcbiAgY3NzOiBCb29sZWFuLFxuICBtb2RlOiBTdHJpbmcsXG4gIHR5cGU6IFN0cmluZyxcbiAgZW50ZXJDbGFzczogU3RyaW5nLFxuICBsZWF2ZUNsYXNzOiBTdHJpbmcsXG4gIGVudGVyVG9DbGFzczogU3RyaW5nLFxuICBsZWF2ZVRvQ2xhc3M6IFN0cmluZyxcbiAgZW50ZXJBY3RpdmVDbGFzczogU3RyaW5nLFxuICBsZWF2ZUFjdGl2ZUNsYXNzOiBTdHJpbmcsXG4gIGFwcGVhckNsYXNzOiBTdHJpbmcsXG4gIGFwcGVhckFjdGl2ZUNsYXNzOiBTdHJpbmcsXG4gIGFwcGVhclRvQ2xhc3M6IFN0cmluZyxcbiAgZHVyYXRpb246IFtOdW1iZXIsIFN0cmluZywgT2JqZWN0XVxufTtcblxuLy8gaW4gY2FzZSB0aGUgY2hpbGQgaXMgYWxzbyBhbiBhYnN0cmFjdCBjb21wb25lbnQsIGUuZy4gPGtlZXAtYWxpdmU+XG4vLyB3ZSB3YW50IHRvIHJlY3Vyc2l2ZWx5IHJldHJpZXZlIHRoZSByZWFsIGNvbXBvbmVudCB0byBiZSByZW5kZXJlZFxuZnVuY3Rpb24gZ2V0UmVhbENoaWxkICh2bm9kZSkge1xuICB2YXIgY29tcE9wdGlvbnMgPSB2bm9kZSAmJiB2bm9kZS5jb21wb25lbnRPcHRpb25zO1xuICBpZiAoY29tcE9wdGlvbnMgJiYgY29tcE9wdGlvbnMuQ3Rvci5vcHRpb25zLmFic3RyYWN0KSB7XG4gICAgcmV0dXJuIGdldFJlYWxDaGlsZChnZXRGaXJzdENvbXBvbmVudENoaWxkKGNvbXBPcHRpb25zLmNoaWxkcmVuKSlcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdm5vZGVcbiAgfVxufVxuXG5mdW5jdGlvbiBleHRyYWN0VHJhbnNpdGlvbkRhdGEgKGNvbXApIHtcbiAgdmFyIGRhdGEgPSB7fTtcbiAgdmFyIG9wdGlvbnMgPSBjb21wLiRvcHRpb25zO1xuICAvLyBwcm9wc1xuICBmb3IgKHZhciBrZXkgaW4gb3B0aW9ucy5wcm9wc0RhdGEpIHtcbiAgICBkYXRhW2tleV0gPSBjb21wW2tleV07XG4gIH1cbiAgLy8gZXZlbnRzLlxuICAvLyBleHRyYWN0IGxpc3RlbmVycyBhbmQgcGFzcyB0aGVtIGRpcmVjdGx5IHRvIHRoZSB0cmFuc2l0aW9uIG1ldGhvZHNcbiAgdmFyIGxpc3RlbmVycyA9IG9wdGlvbnMuX3BhcmVudExpc3RlbmVycztcbiAgZm9yICh2YXIga2V5JDEgaW4gbGlzdGVuZXJzKSB7XG4gICAgZGF0YVtjYW1lbGl6ZShrZXkkMSldID0gbGlzdGVuZXJzW2tleSQxXTtcbiAgfVxuICByZXR1cm4gZGF0YVxufVxuXG5mdW5jdGlvbiBwbGFjZWhvbGRlciAoaCwgcmF3Q2hpbGQpIHtcbiAgaWYgKC9cXGQta2VlcC1hbGl2ZSQvLnRlc3QocmF3Q2hpbGQudGFnKSkge1xuICAgIHJldHVybiBoKCdrZWVwLWFsaXZlJywge1xuICAgICAgcHJvcHM6IHJhd0NoaWxkLmNvbXBvbmVudE9wdGlvbnMucHJvcHNEYXRhXG4gICAgfSlcbiAgfVxufVxuXG5mdW5jdGlvbiBoYXNQYXJlbnRUcmFuc2l0aW9uICh2bm9kZSkge1xuICB3aGlsZSAoKHZub2RlID0gdm5vZGUucGFyZW50KSkge1xuICAgIGlmICh2bm9kZS5kYXRhLnRyYW5zaXRpb24pIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGlzU2FtZUNoaWxkIChjaGlsZCwgb2xkQ2hpbGQpIHtcbiAgcmV0dXJuIG9sZENoaWxkLmtleSA9PT0gY2hpbGQua2V5ICYmIG9sZENoaWxkLnRhZyA9PT0gY2hpbGQudGFnXG59XG5cbnZhciBpc05vdFRleHROb2RlID0gZnVuY3Rpb24gKGMpIHsgcmV0dXJuIGMudGFnIHx8IGlzQXN5bmNQbGFjZWhvbGRlcihjKTsgfTtcblxudmFyIGlzVlNob3dEaXJlY3RpdmUgPSBmdW5jdGlvbiAoZCkgeyByZXR1cm4gZC5uYW1lID09PSAnc2hvdyc7IH07XG5cbnZhciBUcmFuc2l0aW9uID0ge1xuICBuYW1lOiAndHJhbnNpdGlvbicsXG4gIHByb3BzOiB0cmFuc2l0aW9uUHJvcHMsXG4gIGFic3RyYWN0OiB0cnVlLFxuXG4gIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyIChoKSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLiRzbG90cy5kZWZhdWx0O1xuICAgIGlmICghY2hpbGRyZW4pIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIGZpbHRlciBvdXQgdGV4dCBub2RlcyAocG9zc2libGUgd2hpdGVzcGFjZXMpXG4gICAgY2hpbGRyZW4gPSBjaGlsZHJlbi5maWx0ZXIoaXNOb3RUZXh0Tm9kZSk7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKCFjaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIHdhcm4gbXVsdGlwbGUgZWxlbWVudHNcbiAgICBpZiAoY2hpbGRyZW4ubGVuZ3RoID4gMSkge1xuICAgICAgd2FybihcbiAgICAgICAgJzx0cmFuc2l0aW9uPiBjYW4gb25seSBiZSB1c2VkIG9uIGEgc2luZ2xlIGVsZW1lbnQuIFVzZSAnICtcbiAgICAgICAgJzx0cmFuc2l0aW9uLWdyb3VwPiBmb3IgbGlzdHMuJyxcbiAgICAgICAgdGhpcy4kcGFyZW50XG4gICAgICApO1xuICAgIH1cblxuICAgIHZhciBtb2RlID0gdGhpcy5tb2RlO1xuXG4gICAgLy8gd2FybiBpbnZhbGlkIG1vZGVcbiAgICBpZiAobW9kZSAmJiBtb2RlICE9PSAnaW4tb3V0JyAmJiBtb2RlICE9PSAnb3V0LWluJ1xuICAgICkge1xuICAgICAgd2FybihcbiAgICAgICAgJ2ludmFsaWQgPHRyYW5zaXRpb24+IG1vZGU6ICcgKyBtb2RlLFxuICAgICAgICB0aGlzLiRwYXJlbnRcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdmFyIHJhd0NoaWxkID0gY2hpbGRyZW5bMF07XG5cbiAgICAvLyBpZiB0aGlzIGlzIGEgY29tcG9uZW50IHJvb3Qgbm9kZSBhbmQgdGhlIGNvbXBvbmVudCdzXG4gICAgLy8gcGFyZW50IGNvbnRhaW5lciBub2RlIGFsc28gaGFzIHRyYW5zaXRpb24sIHNraXAuXG4gICAgaWYgKGhhc1BhcmVudFRyYW5zaXRpb24odGhpcy4kdm5vZGUpKSB7XG4gICAgICByZXR1cm4gcmF3Q2hpbGRcbiAgICB9XG5cbiAgICAvLyBhcHBseSB0cmFuc2l0aW9uIGRhdGEgdG8gY2hpbGRcbiAgICAvLyB1c2UgZ2V0UmVhbENoaWxkKCkgdG8gaWdub3JlIGFic3RyYWN0IGNvbXBvbmVudHMgZS5nLiBrZWVwLWFsaXZlXG4gICAgdmFyIGNoaWxkID0gZ2V0UmVhbENoaWxkKHJhd0NoaWxkKTtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoIWNoaWxkKSB7XG4gICAgICByZXR1cm4gcmF3Q2hpbGRcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fbGVhdmluZykge1xuICAgICAgcmV0dXJuIHBsYWNlaG9sZGVyKGgsIHJhd0NoaWxkKVxuICAgIH1cblxuICAgIC8vIGVuc3VyZSBhIGtleSB0aGF0IGlzIHVuaXF1ZSB0byB0aGUgdm5vZGUgdHlwZSBhbmQgdG8gdGhpcyB0cmFuc2l0aW9uXG4gICAgLy8gY29tcG9uZW50IGluc3RhbmNlLiBUaGlzIGtleSB3aWxsIGJlIHVzZWQgdG8gcmVtb3ZlIHBlbmRpbmcgbGVhdmluZyBub2Rlc1xuICAgIC8vIGR1cmluZyBlbnRlcmluZy5cbiAgICB2YXIgaWQgPSBcIl9fdHJhbnNpdGlvbi1cIiArICh0aGlzLl91aWQpICsgXCItXCI7XG4gICAgY2hpbGQua2V5ID0gY2hpbGQua2V5ID09IG51bGxcbiAgICAgID8gY2hpbGQuaXNDb21tZW50XG4gICAgICAgID8gaWQgKyAnY29tbWVudCdcbiAgICAgICAgOiBpZCArIGNoaWxkLnRhZ1xuICAgICAgOiBpc1ByaW1pdGl2ZShjaGlsZC5rZXkpXG4gICAgICAgID8gKFN0cmluZyhjaGlsZC5rZXkpLmluZGV4T2YoaWQpID09PSAwID8gY2hpbGQua2V5IDogaWQgKyBjaGlsZC5rZXkpXG4gICAgICAgIDogY2hpbGQua2V5O1xuXG4gICAgdmFyIGRhdGEgPSAoY2hpbGQuZGF0YSB8fCAoY2hpbGQuZGF0YSA9IHt9KSkudHJhbnNpdGlvbiA9IGV4dHJhY3RUcmFuc2l0aW9uRGF0YSh0aGlzKTtcbiAgICB2YXIgb2xkUmF3Q2hpbGQgPSB0aGlzLl92bm9kZTtcbiAgICB2YXIgb2xkQ2hpbGQgPSBnZXRSZWFsQ2hpbGQob2xkUmF3Q2hpbGQpO1xuXG4gICAgLy8gbWFyayB2LXNob3dcbiAgICAvLyBzbyB0aGF0IHRoZSB0cmFuc2l0aW9uIG1vZHVsZSBjYW4gaGFuZCBvdmVyIHRoZSBjb250cm9sIHRvIHRoZSBkaXJlY3RpdmVcbiAgICBpZiAoY2hpbGQuZGF0YS5kaXJlY3RpdmVzICYmIGNoaWxkLmRhdGEuZGlyZWN0aXZlcy5zb21lKGlzVlNob3dEaXJlY3RpdmUpKSB7XG4gICAgICBjaGlsZC5kYXRhLnNob3cgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIG9sZENoaWxkICYmXG4gICAgICBvbGRDaGlsZC5kYXRhICYmXG4gICAgICAhaXNTYW1lQ2hpbGQoY2hpbGQsIG9sZENoaWxkKSAmJlxuICAgICAgIWlzQXN5bmNQbGFjZWhvbGRlcihvbGRDaGlsZCkgJiZcbiAgICAgIC8vICM2Njg3IGNvbXBvbmVudCByb290IGlzIGEgY29tbWVudCBub2RlXG4gICAgICAhKG9sZENoaWxkLmNvbXBvbmVudEluc3RhbmNlICYmIG9sZENoaWxkLmNvbXBvbmVudEluc3RhbmNlLl92bm9kZS5pc0NvbW1lbnQpXG4gICAgKSB7XG4gICAgICAvLyByZXBsYWNlIG9sZCBjaGlsZCB0cmFuc2l0aW9uIGRhdGEgd2l0aCBmcmVzaCBvbmVcbiAgICAgIC8vIGltcG9ydGFudCBmb3IgZHluYW1pYyB0cmFuc2l0aW9ucyFcbiAgICAgIHZhciBvbGREYXRhID0gb2xkQ2hpbGQuZGF0YS50cmFuc2l0aW9uID0gZXh0ZW5kKHt9LCBkYXRhKTtcbiAgICAgIC8vIGhhbmRsZSB0cmFuc2l0aW9uIG1vZGVcbiAgICAgIGlmIChtb2RlID09PSAnb3V0LWluJykge1xuICAgICAgICAvLyByZXR1cm4gcGxhY2Vob2xkZXIgbm9kZSBhbmQgcXVldWUgdXBkYXRlIHdoZW4gbGVhdmUgZmluaXNoZXNcbiAgICAgICAgdGhpcy5fbGVhdmluZyA9IHRydWU7XG4gICAgICAgIG1lcmdlVk5vZGVIb29rKG9sZERhdGEsICdhZnRlckxlYXZlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHRoaXMkMS5fbGVhdmluZyA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMkMS4kZm9yY2VVcGRhdGUoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBwbGFjZWhvbGRlcihoLCByYXdDaGlsZClcbiAgICAgIH0gZWxzZSBpZiAobW9kZSA9PT0gJ2luLW91dCcpIHtcbiAgICAgICAgaWYgKGlzQXN5bmNQbGFjZWhvbGRlcihjaGlsZCkpIHtcbiAgICAgICAgICByZXR1cm4gb2xkUmF3Q2hpbGRcbiAgICAgICAgfVxuICAgICAgICB2YXIgZGVsYXllZExlYXZlO1xuICAgICAgICB2YXIgcGVyZm9ybUxlYXZlID0gZnVuY3Rpb24gKCkgeyBkZWxheWVkTGVhdmUoKTsgfTtcbiAgICAgICAgbWVyZ2VWTm9kZUhvb2soZGF0YSwgJ2FmdGVyRW50ZXInLCBwZXJmb3JtTGVhdmUpO1xuICAgICAgICBtZXJnZVZOb2RlSG9vayhkYXRhLCAnZW50ZXJDYW5jZWxsZWQnLCBwZXJmb3JtTGVhdmUpO1xuICAgICAgICBtZXJnZVZOb2RlSG9vayhvbGREYXRhLCAnZGVsYXlMZWF2ZScsIGZ1bmN0aW9uIChsZWF2ZSkgeyBkZWxheWVkTGVhdmUgPSBsZWF2ZTsgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJhd0NoaWxkXG4gIH1cbn07XG5cbi8qICAqL1xuXG52YXIgcHJvcHMgPSBleHRlbmQoe1xuICB0YWc6IFN0cmluZyxcbiAgbW92ZUNsYXNzOiBTdHJpbmdcbn0sIHRyYW5zaXRpb25Qcm9wcyk7XG5cbmRlbGV0ZSBwcm9wcy5tb2RlO1xuXG52YXIgVHJhbnNpdGlvbkdyb3VwID0ge1xuICBwcm9wczogcHJvcHMsXG5cbiAgYmVmb3JlTW91bnQ6IGZ1bmN0aW9uIGJlZm9yZU1vdW50ICgpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgIHZhciB1cGRhdGUgPSB0aGlzLl91cGRhdGU7XG4gICAgdGhpcy5fdXBkYXRlID0gZnVuY3Rpb24gKHZub2RlLCBoeWRyYXRpbmcpIHtcbiAgICAgIHZhciByZXN0b3JlQWN0aXZlSW5zdGFuY2UgPSBzZXRBY3RpdmVJbnN0YW5jZSh0aGlzJDEpO1xuICAgICAgLy8gZm9yY2UgcmVtb3ZpbmcgcGFzc1xuICAgICAgdGhpcyQxLl9fcGF0Y2hfXyhcbiAgICAgICAgdGhpcyQxLl92bm9kZSxcbiAgICAgICAgdGhpcyQxLmtlcHQsXG4gICAgICAgIGZhbHNlLCAvLyBoeWRyYXRpbmdcbiAgICAgICAgdHJ1ZSAvLyByZW1vdmVPbmx5ICghaW1wb3J0YW50LCBhdm9pZHMgdW5uZWNlc3NhcnkgbW92ZXMpXG4gICAgICApO1xuICAgICAgdGhpcyQxLl92bm9kZSA9IHRoaXMkMS5rZXB0O1xuICAgICAgcmVzdG9yZUFjdGl2ZUluc3RhbmNlKCk7XG4gICAgICB1cGRhdGUuY2FsbCh0aGlzJDEsIHZub2RlLCBoeWRyYXRpbmcpO1xuICAgIH07XG4gIH0sXG5cbiAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIgKGgpIHtcbiAgICB2YXIgdGFnID0gdGhpcy50YWcgfHwgdGhpcy4kdm5vZGUuZGF0YS50YWcgfHwgJ3NwYW4nO1xuICAgIHZhciBtYXAgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHZhciBwcmV2Q2hpbGRyZW4gPSB0aGlzLnByZXZDaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW47XG4gICAgdmFyIHJhd0NoaWxkcmVuID0gdGhpcy4kc2xvdHMuZGVmYXVsdCB8fCBbXTtcbiAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuID0gW107XG4gICAgdmFyIHRyYW5zaXRpb25EYXRhID0gZXh0cmFjdFRyYW5zaXRpb25EYXRhKHRoaXMpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByYXdDaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGMgPSByYXdDaGlsZHJlbltpXTtcbiAgICAgIGlmIChjLnRhZykge1xuICAgICAgICBpZiAoYy5rZXkgIT0gbnVsbCAmJiBTdHJpbmcoYy5rZXkpLmluZGV4T2YoJ19fdmxpc3QnKSAhPT0gMCkge1xuICAgICAgICAgIGNoaWxkcmVuLnB1c2goYyk7XG4gICAgICAgICAgbWFwW2Mua2V5XSA9IGNcbiAgICAgICAgICA7KGMuZGF0YSB8fCAoYy5kYXRhID0ge30pKS50cmFuc2l0aW9uID0gdHJhbnNpdGlvbkRhdGE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIG9wdHMgPSBjLmNvbXBvbmVudE9wdGlvbnM7XG4gICAgICAgICAgdmFyIG5hbWUgPSBvcHRzID8gKG9wdHMuQ3Rvci5vcHRpb25zLm5hbWUgfHwgb3B0cy50YWcgfHwgJycpIDogYy50YWc7XG4gICAgICAgICAgd2FybigoXCI8dHJhbnNpdGlvbi1ncm91cD4gY2hpbGRyZW4gbXVzdCBiZSBrZXllZDogPFwiICsgbmFtZSArIFwiPlwiKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocHJldkNoaWxkcmVuKSB7XG4gICAgICB2YXIga2VwdCA9IFtdO1xuICAgICAgdmFyIHJlbW92ZWQgPSBbXTtcbiAgICAgIGZvciAodmFyIGkkMSA9IDA7IGkkMSA8IHByZXZDaGlsZHJlbi5sZW5ndGg7IGkkMSsrKSB7XG4gICAgICAgIHZhciBjJDEgPSBwcmV2Q2hpbGRyZW5baSQxXTtcbiAgICAgICAgYyQxLmRhdGEudHJhbnNpdGlvbiA9IHRyYW5zaXRpb25EYXRhO1xuICAgICAgICBjJDEuZGF0YS5wb3MgPSBjJDEuZWxtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBpZiAobWFwW2MkMS5rZXldKSB7XG4gICAgICAgICAga2VwdC5wdXNoKGMkMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVtb3ZlZC5wdXNoKGMkMSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMua2VwdCA9IGgodGFnLCBudWxsLCBrZXB0KTtcbiAgICAgIHRoaXMucmVtb3ZlZCA9IHJlbW92ZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIGgodGFnLCBudWxsLCBjaGlsZHJlbilcbiAgfSxcblxuICB1cGRhdGVkOiBmdW5jdGlvbiB1cGRhdGVkICgpIHtcbiAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLnByZXZDaGlsZHJlbjtcbiAgICB2YXIgbW92ZUNsYXNzID0gdGhpcy5tb3ZlQ2xhc3MgfHwgKCh0aGlzLm5hbWUgfHwgJ3YnKSArICctbW92ZScpO1xuICAgIGlmICghY2hpbGRyZW4ubGVuZ3RoIHx8ICF0aGlzLmhhc01vdmUoY2hpbGRyZW5bMF0uZWxtLCBtb3ZlQ2xhc3MpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyB3ZSBkaXZpZGUgdGhlIHdvcmsgaW50byB0aHJlZSBsb29wcyB0byBhdm9pZCBtaXhpbmcgRE9NIHJlYWRzIGFuZCB3cml0ZXNcbiAgICAvLyBpbiBlYWNoIGl0ZXJhdGlvbiAtIHdoaWNoIGhlbHBzIHByZXZlbnQgbGF5b3V0IHRocmFzaGluZy5cbiAgICBjaGlsZHJlbi5mb3JFYWNoKGNhbGxQZW5kaW5nQ2JzKTtcbiAgICBjaGlsZHJlbi5mb3JFYWNoKHJlY29yZFBvc2l0aW9uKTtcbiAgICBjaGlsZHJlbi5mb3JFYWNoKGFwcGx5VHJhbnNsYXRpb24pO1xuXG4gICAgLy8gZm9yY2UgcmVmbG93IHRvIHB1dCBldmVyeXRoaW5nIGluIHBvc2l0aW9uXG4gICAgLy8gYXNzaWduIHRvIHRoaXMgdG8gYXZvaWQgYmVpbmcgcmVtb3ZlZCBpbiB0cmVlLXNoYWtpbmdcbiAgICAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbiAgICB0aGlzLl9yZWZsb3cgPSBkb2N1bWVudC5ib2R5Lm9mZnNldEhlaWdodDtcblxuICAgIGNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24gKGMpIHtcbiAgICAgIGlmIChjLmRhdGEubW92ZWQpIHtcbiAgICAgICAgdmFyIGVsID0gYy5lbG07XG4gICAgICAgIHZhciBzID0gZWwuc3R5bGU7XG4gICAgICAgIGFkZFRyYW5zaXRpb25DbGFzcyhlbCwgbW92ZUNsYXNzKTtcbiAgICAgICAgcy50cmFuc2Zvcm0gPSBzLldlYmtpdFRyYW5zZm9ybSA9IHMudHJhbnNpdGlvbkR1cmF0aW9uID0gJyc7XG4gICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIodHJhbnNpdGlvbkVuZEV2ZW50LCBlbC5fbW92ZUNiID0gZnVuY3Rpb24gY2IgKGUpIHtcbiAgICAgICAgICBpZiAoZSAmJiBlLnRhcmdldCAhPT0gZWwpIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIWUgfHwgL3RyYW5zZm9ybSQvLnRlc3QoZS5wcm9wZXJ0eU5hbWUpKSB7XG4gICAgICAgICAgICBlbC5yZW1vdmVFdmVudExpc3RlbmVyKHRyYW5zaXRpb25FbmRFdmVudCwgY2IpO1xuICAgICAgICAgICAgZWwuX21vdmVDYiA9IG51bGw7XG4gICAgICAgICAgICByZW1vdmVUcmFuc2l0aW9uQ2xhc3MoZWwsIG1vdmVDbGFzcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgaGFzTW92ZTogZnVuY3Rpb24gaGFzTW92ZSAoZWwsIG1vdmVDbGFzcykge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAoIWhhc1RyYW5zaXRpb24pIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgIGlmICh0aGlzLl9oYXNNb3ZlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oYXNNb3ZlXG4gICAgICB9XG4gICAgICAvLyBEZXRlY3Qgd2hldGhlciBhbiBlbGVtZW50IHdpdGggdGhlIG1vdmUgY2xhc3MgYXBwbGllZCBoYXNcbiAgICAgIC8vIENTUyB0cmFuc2l0aW9ucy4gU2luY2UgdGhlIGVsZW1lbnQgbWF5IGJlIGluc2lkZSBhbiBlbnRlcmluZ1xuICAgICAgLy8gdHJhbnNpdGlvbiBhdCB0aGlzIHZlcnkgbW9tZW50LCB3ZSBtYWtlIGEgY2xvbmUgb2YgaXQgYW5kIHJlbW92ZVxuICAgICAgLy8gYWxsIG90aGVyIHRyYW5zaXRpb24gY2xhc3NlcyBhcHBsaWVkIHRvIGVuc3VyZSBvbmx5IHRoZSBtb3ZlIGNsYXNzXG4gICAgICAvLyBpcyBhcHBsaWVkLlxuICAgICAgdmFyIGNsb25lID0gZWwuY2xvbmVOb2RlKCk7XG4gICAgICBpZiAoZWwuX3RyYW5zaXRpb25DbGFzc2VzKSB7XG4gICAgICAgIGVsLl90cmFuc2l0aW9uQ2xhc3Nlcy5mb3JFYWNoKGZ1bmN0aW9uIChjbHMpIHsgcmVtb3ZlQ2xhc3MoY2xvbmUsIGNscyk7IH0pO1xuICAgICAgfVxuICAgICAgYWRkQ2xhc3MoY2xvbmUsIG1vdmVDbGFzcyk7XG4gICAgICBjbG9uZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgdGhpcy4kZWwuYXBwZW5kQ2hpbGQoY2xvbmUpO1xuICAgICAgdmFyIGluZm8gPSBnZXRUcmFuc2l0aW9uSW5mbyhjbG9uZSk7XG4gICAgICB0aGlzLiRlbC5yZW1vdmVDaGlsZChjbG9uZSk7XG4gICAgICByZXR1cm4gKHRoaXMuX2hhc01vdmUgPSBpbmZvLmhhc1RyYW5zZm9ybSlcbiAgICB9XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGNhbGxQZW5kaW5nQ2JzIChjKSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoYy5lbG0uX21vdmVDYikge1xuICAgIGMuZWxtLl9tb3ZlQ2IoKTtcbiAgfVxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKGMuZWxtLl9lbnRlckNiKSB7XG4gICAgYy5lbG0uX2VudGVyQ2IoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZWNvcmRQb3NpdGlvbiAoYykge1xuICBjLmRhdGEubmV3UG9zID0gYy5lbG0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG59XG5cbmZ1bmN0aW9uIGFwcGx5VHJhbnNsYXRpb24gKGMpIHtcbiAgdmFyIG9sZFBvcyA9IGMuZGF0YS5wb3M7XG4gIHZhciBuZXdQb3MgPSBjLmRhdGEubmV3UG9zO1xuICB2YXIgZHggPSBvbGRQb3MubGVmdCAtIG5ld1Bvcy5sZWZ0O1xuICB2YXIgZHkgPSBvbGRQb3MudG9wIC0gbmV3UG9zLnRvcDtcbiAgaWYgKGR4IHx8IGR5KSB7XG4gICAgYy5kYXRhLm1vdmVkID0gdHJ1ZTtcbiAgICB2YXIgcyA9IGMuZWxtLnN0eWxlO1xuICAgIHMudHJhbnNmb3JtID0gcy5XZWJraXRUcmFuc2Zvcm0gPSBcInRyYW5zbGF0ZShcIiArIGR4ICsgXCJweCxcIiArIGR5ICsgXCJweClcIjtcbiAgICBzLnRyYW5zaXRpb25EdXJhdGlvbiA9ICcwcyc7XG4gIH1cbn1cblxudmFyIHBsYXRmb3JtQ29tcG9uZW50cyA9IHtcbiAgVHJhbnNpdGlvbjogVHJhbnNpdGlvbixcbiAgVHJhbnNpdGlvbkdyb3VwOiBUcmFuc2l0aW9uR3JvdXBcbn07XG5cbi8qICAqL1xuXG4vLyBpbnN0YWxsIHBsYXRmb3JtIHNwZWNpZmljIHV0aWxzXG5WdWUuY29uZmlnLm11c3RVc2VQcm9wID0gbXVzdFVzZVByb3A7XG5WdWUuY29uZmlnLmlzUmVzZXJ2ZWRUYWcgPSBpc1Jlc2VydmVkVGFnO1xuVnVlLmNvbmZpZy5pc1Jlc2VydmVkQXR0ciA9IGlzUmVzZXJ2ZWRBdHRyO1xuVnVlLmNvbmZpZy5nZXRUYWdOYW1lc3BhY2UgPSBnZXRUYWdOYW1lc3BhY2U7XG5WdWUuY29uZmlnLmlzVW5rbm93bkVsZW1lbnQgPSBpc1Vua25vd25FbGVtZW50O1xuXG4vLyBpbnN0YWxsIHBsYXRmb3JtIHJ1bnRpbWUgZGlyZWN0aXZlcyAmIGNvbXBvbmVudHNcbmV4dGVuZChWdWUub3B0aW9ucy5kaXJlY3RpdmVzLCBwbGF0Zm9ybURpcmVjdGl2ZXMpO1xuZXh0ZW5kKFZ1ZS5vcHRpb25zLmNvbXBvbmVudHMsIHBsYXRmb3JtQ29tcG9uZW50cyk7XG5cbi8vIGluc3RhbGwgcGxhdGZvcm0gcGF0Y2ggZnVuY3Rpb25cblZ1ZS5wcm90b3R5cGUuX19wYXRjaF9fID0gaW5Ccm93c2VyID8gcGF0Y2ggOiBub29wO1xuXG4vLyBwdWJsaWMgbW91bnQgbWV0aG9kXG5WdWUucHJvdG90eXBlLiRtb3VudCA9IGZ1bmN0aW9uIChcbiAgZWwsXG4gIGh5ZHJhdGluZ1xuKSB7XG4gIGVsID0gZWwgJiYgaW5Ccm93c2VyID8gcXVlcnkoZWwpIDogdW5kZWZpbmVkO1xuICByZXR1cm4gbW91bnRDb21wb25lbnQodGhpcywgZWwsIGh5ZHJhdGluZylcbn07XG5cbi8vIGRldnRvb2xzIGdsb2JhbCBob29rXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuaWYgKGluQnJvd3Nlcikge1xuICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoY29uZmlnLmRldnRvb2xzKSB7XG4gICAgICBpZiAoZGV2dG9vbHMpIHtcbiAgICAgICAgZGV2dG9vbHMuZW1pdCgnaW5pdCcsIFZ1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlW2NvbnNvbGUuaW5mbyA/ICdpbmZvJyA6ICdsb2cnXShcbiAgICAgICAgICAnRG93bmxvYWQgdGhlIFZ1ZSBEZXZ0b29scyBleHRlbnNpb24gZm9yIGEgYmV0dGVyIGRldmVsb3BtZW50IGV4cGVyaWVuY2U6XFxuJyArXG4gICAgICAgICAgJ2h0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWUtZGV2dG9vbHMnXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjb25maWcucHJvZHVjdGlvblRpcCAhPT0gZmFsc2UgJiZcbiAgICAgIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJ1xuICAgICkge1xuICAgICAgY29uc29sZVtjb25zb2xlLmluZm8gPyAnaW5mbycgOiAnbG9nJ10oXG4gICAgICAgIFwiWW91IGFyZSBydW5uaW5nIFZ1ZSBpbiBkZXZlbG9wbWVudCBtb2RlLlxcblwiICtcbiAgICAgICAgXCJNYWtlIHN1cmUgdG8gdHVybiBvbiBwcm9kdWN0aW9uIG1vZGUgd2hlbiBkZXBsb3lpbmcgZm9yIHByb2R1Y3Rpb24uXFxuXCIgK1xuICAgICAgICBcIlNlZSBtb3JlIHRpcHMgYXQgaHR0cHM6Ly92dWVqcy5vcmcvZ3VpZGUvZGVwbG95bWVudC5odG1sXCJcbiAgICAgICk7XG4gICAgfVxuICB9LCAwKTtcbn1cblxuLyogICovXG5cbnZhciBkZWZhdWx0VGFnUkUgPSAvXFx7XFx7KCg/Oi58XFxyP1xcbikrPylcXH1cXH0vZztcbnZhciByZWdleEVzY2FwZVJFID0gL1stLiorP14ke30oKXxbXFxdXFwvXFxcXF0vZztcblxudmFyIGJ1aWxkUmVnZXggPSBjYWNoZWQoZnVuY3Rpb24gKGRlbGltaXRlcnMpIHtcbiAgdmFyIG9wZW4gPSBkZWxpbWl0ZXJzWzBdLnJlcGxhY2UocmVnZXhFc2NhcGVSRSwgJ1xcXFwkJicpO1xuICB2YXIgY2xvc2UgPSBkZWxpbWl0ZXJzWzFdLnJlcGxhY2UocmVnZXhFc2NhcGVSRSwgJ1xcXFwkJicpO1xuICByZXR1cm4gbmV3IFJlZ0V4cChvcGVuICsgJygoPzoufFxcXFxuKSs/KScgKyBjbG9zZSwgJ2cnKVxufSk7XG5cblxuXG5mdW5jdGlvbiBwYXJzZVRleHQgKFxuICB0ZXh0LFxuICBkZWxpbWl0ZXJzXG4pIHtcbiAgdmFyIHRhZ1JFID0gZGVsaW1pdGVycyA/IGJ1aWxkUmVnZXgoZGVsaW1pdGVycykgOiBkZWZhdWx0VGFnUkU7XG4gIGlmICghdGFnUkUudGVzdCh0ZXh0KSkge1xuICAgIHJldHVyblxuICB9XG4gIHZhciB0b2tlbnMgPSBbXTtcbiAgdmFyIHJhd1Rva2VucyA9IFtdO1xuICB2YXIgbGFzdEluZGV4ID0gdGFnUkUubGFzdEluZGV4ID0gMDtcbiAgdmFyIG1hdGNoLCBpbmRleCwgdG9rZW5WYWx1ZTtcbiAgd2hpbGUgKChtYXRjaCA9IHRhZ1JFLmV4ZWModGV4dCkpKSB7XG4gICAgaW5kZXggPSBtYXRjaC5pbmRleDtcbiAgICAvLyBwdXNoIHRleHQgdG9rZW5cbiAgICBpZiAoaW5kZXggPiBsYXN0SW5kZXgpIHtcbiAgICAgIHJhd1Rva2Vucy5wdXNoKHRva2VuVmFsdWUgPSB0ZXh0LnNsaWNlKGxhc3RJbmRleCwgaW5kZXgpKTtcbiAgICAgIHRva2Vucy5wdXNoKEpTT04uc3RyaW5naWZ5KHRva2VuVmFsdWUpKTtcbiAgICB9XG4gICAgLy8gdGFnIHRva2VuXG4gICAgdmFyIGV4cCA9IHBhcnNlRmlsdGVycyhtYXRjaFsxXS50cmltKCkpO1xuICAgIHRva2Vucy5wdXNoKChcIl9zKFwiICsgZXhwICsgXCIpXCIpKTtcbiAgICByYXdUb2tlbnMucHVzaCh7ICdAYmluZGluZyc6IGV4cCB9KTtcbiAgICBsYXN0SW5kZXggPSBpbmRleCArIG1hdGNoWzBdLmxlbmd0aDtcbiAgfVxuICBpZiAobGFzdEluZGV4IDwgdGV4dC5sZW5ndGgpIHtcbiAgICByYXdUb2tlbnMucHVzaCh0b2tlblZhbHVlID0gdGV4dC5zbGljZShsYXN0SW5kZXgpKTtcbiAgICB0b2tlbnMucHVzaChKU09OLnN0cmluZ2lmeSh0b2tlblZhbHVlKSk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBleHByZXNzaW9uOiB0b2tlbnMuam9pbignKycpLFxuICAgIHRva2VuczogcmF3VG9rZW5zXG4gIH1cbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIHRyYW5zZm9ybU5vZGUgKGVsLCBvcHRpb25zKSB7XG4gIHZhciB3YXJuID0gb3B0aW9ucy53YXJuIHx8IGJhc2VXYXJuO1xuICB2YXIgc3RhdGljQ2xhc3MgPSBnZXRBbmRSZW1vdmVBdHRyKGVsLCAnY2xhc3MnKTtcbiAgaWYgKHN0YXRpY0NsYXNzKSB7XG4gICAgdmFyIHJlcyA9IHBhcnNlVGV4dChzdGF0aWNDbGFzcywgb3B0aW9ucy5kZWxpbWl0ZXJzKTtcbiAgICBpZiAocmVzKSB7XG4gICAgICB3YXJuKFxuICAgICAgICBcImNsYXNzPVxcXCJcIiArIHN0YXRpY0NsYXNzICsgXCJcXFwiOiBcIiArXG4gICAgICAgICdJbnRlcnBvbGF0aW9uIGluc2lkZSBhdHRyaWJ1dGVzIGhhcyBiZWVuIHJlbW92ZWQuICcgK1xuICAgICAgICAnVXNlIHYtYmluZCBvciB0aGUgY29sb24gc2hvcnRoYW5kIGluc3RlYWQuIEZvciBleGFtcGxlLCAnICtcbiAgICAgICAgJ2luc3RlYWQgb2YgPGRpdiBjbGFzcz1cInt7IHZhbCB9fVwiPiwgdXNlIDxkaXYgOmNsYXNzPVwidmFsXCI+LicsXG4gICAgICAgIGVsLnJhd0F0dHJzTWFwWydjbGFzcyddXG4gICAgICApO1xuICAgIH1cbiAgfVxuICBpZiAoc3RhdGljQ2xhc3MpIHtcbiAgICBlbC5zdGF0aWNDbGFzcyA9IEpTT04uc3RyaW5naWZ5KHN0YXRpY0NsYXNzKTtcbiAgfVxuICB2YXIgY2xhc3NCaW5kaW5nID0gZ2V0QmluZGluZ0F0dHIoZWwsICdjbGFzcycsIGZhbHNlIC8qIGdldFN0YXRpYyAqLyk7XG4gIGlmIChjbGFzc0JpbmRpbmcpIHtcbiAgICBlbC5jbGFzc0JpbmRpbmcgPSBjbGFzc0JpbmRpbmc7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2VuRGF0YSAoZWwpIHtcbiAgdmFyIGRhdGEgPSAnJztcbiAgaWYgKGVsLnN0YXRpY0NsYXNzKSB7XG4gICAgZGF0YSArPSBcInN0YXRpY0NsYXNzOlwiICsgKGVsLnN0YXRpY0NsYXNzKSArIFwiLFwiO1xuICB9XG4gIGlmIChlbC5jbGFzc0JpbmRpbmcpIHtcbiAgICBkYXRhICs9IFwiY2xhc3M6XCIgKyAoZWwuY2xhc3NCaW5kaW5nKSArIFwiLFwiO1xuICB9XG4gIHJldHVybiBkYXRhXG59XG5cbnZhciBrbGFzcyQxID0ge1xuICBzdGF0aWNLZXlzOiBbJ3N0YXRpY0NsYXNzJ10sXG4gIHRyYW5zZm9ybU5vZGU6IHRyYW5zZm9ybU5vZGUsXG4gIGdlbkRhdGE6IGdlbkRhdGFcbn07XG5cbi8qICAqL1xuXG5mdW5jdGlvbiB0cmFuc2Zvcm1Ob2RlJDEgKGVsLCBvcHRpb25zKSB7XG4gIHZhciB3YXJuID0gb3B0aW9ucy53YXJuIHx8IGJhc2VXYXJuO1xuICB2YXIgc3RhdGljU3R5bGUgPSBnZXRBbmRSZW1vdmVBdHRyKGVsLCAnc3R5bGUnKTtcbiAgaWYgKHN0YXRpY1N0eWxlKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAge1xuICAgICAgdmFyIHJlcyA9IHBhcnNlVGV4dChzdGF0aWNTdHlsZSwgb3B0aW9ucy5kZWxpbWl0ZXJzKTtcbiAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgd2FybihcbiAgICAgICAgICBcInN0eWxlPVxcXCJcIiArIHN0YXRpY1N0eWxlICsgXCJcXFwiOiBcIiArXG4gICAgICAgICAgJ0ludGVycG9sYXRpb24gaW5zaWRlIGF0dHJpYnV0ZXMgaGFzIGJlZW4gcmVtb3ZlZC4gJyArXG4gICAgICAgICAgJ1VzZSB2LWJpbmQgb3IgdGhlIGNvbG9uIHNob3J0aGFuZCBpbnN0ZWFkLiBGb3IgZXhhbXBsZSwgJyArXG4gICAgICAgICAgJ2luc3RlYWQgb2YgPGRpdiBzdHlsZT1cInt7IHZhbCB9fVwiPiwgdXNlIDxkaXYgOnN0eWxlPVwidmFsXCI+LicsXG4gICAgICAgICAgZWwucmF3QXR0cnNNYXBbJ3N0eWxlJ11cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWwuc3RhdGljU3R5bGUgPSBKU09OLnN0cmluZ2lmeShwYXJzZVN0eWxlVGV4dChzdGF0aWNTdHlsZSkpO1xuICB9XG5cbiAgdmFyIHN0eWxlQmluZGluZyA9IGdldEJpbmRpbmdBdHRyKGVsLCAnc3R5bGUnLCBmYWxzZSAvKiBnZXRTdGF0aWMgKi8pO1xuICBpZiAoc3R5bGVCaW5kaW5nKSB7XG4gICAgZWwuc3R5bGVCaW5kaW5nID0gc3R5bGVCaW5kaW5nO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdlbkRhdGEkMSAoZWwpIHtcbiAgdmFyIGRhdGEgPSAnJztcbiAgaWYgKGVsLnN0YXRpY1N0eWxlKSB7XG4gICAgZGF0YSArPSBcInN0YXRpY1N0eWxlOlwiICsgKGVsLnN0YXRpY1N0eWxlKSArIFwiLFwiO1xuICB9XG4gIGlmIChlbC5zdHlsZUJpbmRpbmcpIHtcbiAgICBkYXRhICs9IFwic3R5bGU6KFwiICsgKGVsLnN0eWxlQmluZGluZykgKyBcIiksXCI7XG4gIH1cbiAgcmV0dXJuIGRhdGFcbn1cblxudmFyIHN0eWxlJDEgPSB7XG4gIHN0YXRpY0tleXM6IFsnc3RhdGljU3R5bGUnXSxcbiAgdHJhbnNmb3JtTm9kZTogdHJhbnNmb3JtTm9kZSQxLFxuICBnZW5EYXRhOiBnZW5EYXRhJDFcbn07XG5cbi8qICAqL1xuXG52YXIgZGVjb2RlcjtcblxudmFyIGhlID0ge1xuICBkZWNvZGU6IGZ1bmN0aW9uIGRlY29kZSAoaHRtbCkge1xuICAgIGRlY29kZXIgPSBkZWNvZGVyIHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIGRlY29kZXIuaW5uZXJIVE1MID0gaHRtbDtcbiAgICByZXR1cm4gZGVjb2Rlci50ZXh0Q29udGVudFxuICB9XG59O1xuXG4vKiAgKi9cblxudmFyIGlzVW5hcnlUYWcgPSBtYWtlTWFwKFxuICAnYXJlYSxiYXNlLGJyLGNvbCxlbWJlZCxmcmFtZSxocixpbWcsaW5wdXQsaXNpbmRleCxrZXlnZW4sJyArXG4gICdsaW5rLG1ldGEscGFyYW0sc291cmNlLHRyYWNrLHdicidcbik7XG5cbi8vIEVsZW1lbnRzIHRoYXQgeW91IGNhbiwgaW50ZW50aW9uYWxseSwgbGVhdmUgb3BlblxuLy8gKGFuZCB3aGljaCBjbG9zZSB0aGVtc2VsdmVzKVxudmFyIGNhbkJlTGVmdE9wZW5UYWcgPSBtYWtlTWFwKFxuICAnY29sZ3JvdXAsZGQsZHQsbGksb3B0aW9ucyxwLHRkLHRmb290LHRoLHRoZWFkLHRyLHNvdXJjZSdcbik7XG5cbi8vIEhUTUw1IHRhZ3MgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvaW5kaWNlcy5odG1sI2VsZW1lbnRzLTNcbi8vIFBocmFzaW5nIENvbnRlbnQgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZG9tLmh0bWwjcGhyYXNpbmctY29udGVudFxudmFyIGlzTm9uUGhyYXNpbmdUYWcgPSBtYWtlTWFwKFxuICAnYWRkcmVzcyxhcnRpY2xlLGFzaWRlLGJhc2UsYmxvY2txdW90ZSxib2R5LGNhcHRpb24sY29sLGNvbGdyb3VwLGRkLCcgK1xuICAnZGV0YWlscyxkaWFsb2csZGl2LGRsLGR0LGZpZWxkc2V0LGZpZ2NhcHRpb24sZmlndXJlLGZvb3Rlcixmb3JtLCcgK1xuICAnaDEsaDIsaDMsaDQsaDUsaDYsaGVhZCxoZWFkZXIsaGdyb3VwLGhyLGh0bWwsbGVnZW5kLGxpLG1lbnVpdGVtLG1ldGEsJyArXG4gICdvcHRncm91cCxvcHRpb24scGFyYW0scnAscnQsc291cmNlLHN0eWxlLHN1bW1hcnksdGJvZHksdGQsdGZvb3QsdGgsdGhlYWQsJyArXG4gICd0aXRsZSx0cix0cmFjaydcbik7XG5cbi8qKlxuICogTm90IHR5cGUtY2hlY2tpbmcgdGhpcyBmaWxlIGJlY2F1c2UgaXQncyBtb3N0bHkgdmVuZG9yIGNvZGUuXG4gKi9cblxuLy8gUmVndWxhciBFeHByZXNzaW9ucyBmb3IgcGFyc2luZyB0YWdzIGFuZCBhdHRyaWJ1dGVzXG52YXIgYXR0cmlidXRlID0gL15cXHMqKFteXFxzXCInPD5cXC89XSspKD86XFxzKig9KVxccyooPzpcIihbXlwiXSopXCIrfCcoW14nXSopJyt8KFteXFxzXCInPTw+YF0rKSkpPy87XG52YXIgZHluYW1pY0FyZ0F0dHJpYnV0ZSA9IC9eXFxzKigoPzp2LVtcXHctXSs6fEB8OnwjKVxcW1tePV0rXFxdW15cXHNcIic8PlxcLz1dKikoPzpcXHMqKD0pXFxzKig/OlwiKFteXCJdKilcIit8JyhbXiddKiknK3woW15cXHNcIic9PD5gXSspKSk/LztcbnZhciBuY25hbWUgPSBcIlthLXpBLVpfXVtcXFxcLVxcXFwuMC05X2EtekEtWlwiICsgKHVuaWNvZGVSZWdFeHAuc291cmNlKSArIFwiXSpcIjtcbnZhciBxbmFtZUNhcHR1cmUgPSBcIigoPzpcIiArIG5jbmFtZSArIFwiXFxcXDopP1wiICsgbmNuYW1lICsgXCIpXCI7XG52YXIgc3RhcnRUYWdPcGVuID0gbmV3IFJlZ0V4cCgoXCJePFwiICsgcW5hbWVDYXB0dXJlKSk7XG52YXIgc3RhcnRUYWdDbG9zZSA9IC9eXFxzKihcXC8/KT4vO1xudmFyIGVuZFRhZyA9IG5ldyBSZWdFeHAoKFwiXjxcXFxcL1wiICsgcW5hbWVDYXB0dXJlICsgXCJbXj5dKj5cIikpO1xudmFyIGRvY3R5cGUgPSAvXjwhRE9DVFlQRSBbXj5dKz4vaTtcbi8vICM3Mjk4OiBlc2NhcGUgLSB0byBhdm9pZCBiZWluZyBwYXNlZCBhcyBIVE1MIGNvbW1lbnQgd2hlbiBpbmxpbmVkIGluIHBhZ2VcbnZhciBjb21tZW50ID0gL148IVxcLS0vO1xudmFyIGNvbmRpdGlvbmFsQ29tbWVudCA9IC9ePCFcXFsvO1xuXG4vLyBTcGVjaWFsIEVsZW1lbnRzIChjYW4gY29udGFpbiBhbnl0aGluZylcbnZhciBpc1BsYWluVGV4dEVsZW1lbnQgPSBtYWtlTWFwKCdzY3JpcHQsc3R5bGUsdGV4dGFyZWEnLCB0cnVlKTtcbnZhciByZUNhY2hlID0ge307XG5cbnZhciBkZWNvZGluZ01hcCA9IHtcbiAgJyZsdDsnOiAnPCcsXG4gICcmZ3Q7JzogJz4nLFxuICAnJnF1b3Q7JzogJ1wiJyxcbiAgJyZhbXA7JzogJyYnLFxuICAnJiMxMDsnOiAnXFxuJyxcbiAgJyYjOTsnOiAnXFx0JyxcbiAgJyYjMzk7JzogXCInXCJcbn07XG52YXIgZW5jb2RlZEF0dHIgPSAvJig/Omx0fGd0fHF1b3R8YW1wfCMzOSk7L2c7XG52YXIgZW5jb2RlZEF0dHJXaXRoTmV3TGluZXMgPSAvJig/Omx0fGd0fHF1b3R8YW1wfCMzOXwjMTB8IzkpOy9nO1xuXG4vLyAjNTk5MlxudmFyIGlzSWdub3JlTmV3bGluZVRhZyA9IG1ha2VNYXAoJ3ByZSx0ZXh0YXJlYScsIHRydWUpO1xudmFyIHNob3VsZElnbm9yZUZpcnN0TmV3bGluZSA9IGZ1bmN0aW9uICh0YWcsIGh0bWwpIHsgcmV0dXJuIHRhZyAmJiBpc0lnbm9yZU5ld2xpbmVUYWcodGFnKSAmJiBodG1sWzBdID09PSAnXFxuJzsgfTtcblxuZnVuY3Rpb24gZGVjb2RlQXR0ciAodmFsdWUsIHNob3VsZERlY29kZU5ld2xpbmVzKSB7XG4gIHZhciByZSA9IHNob3VsZERlY29kZU5ld2xpbmVzID8gZW5jb2RlZEF0dHJXaXRoTmV3TGluZXMgOiBlbmNvZGVkQXR0cjtcbiAgcmV0dXJuIHZhbHVlLnJlcGxhY2UocmUsIGZ1bmN0aW9uIChtYXRjaCkgeyByZXR1cm4gZGVjb2RpbmdNYXBbbWF0Y2hdOyB9KVxufVxuXG5mdW5jdGlvbiBwYXJzZUhUTUwgKGh0bWwsIG9wdGlvbnMpIHtcbiAgdmFyIHN0YWNrID0gW107XG4gIHZhciBleHBlY3RIVE1MID0gb3B0aW9ucy5leHBlY3RIVE1MO1xuICB2YXIgaXNVbmFyeVRhZyQkMSA9IG9wdGlvbnMuaXNVbmFyeVRhZyB8fCBubztcbiAgdmFyIGNhbkJlTGVmdE9wZW5UYWckJDEgPSBvcHRpb25zLmNhbkJlTGVmdE9wZW5UYWcgfHwgbm87XG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciBsYXN0LCBsYXN0VGFnO1xuICB3aGlsZSAoaHRtbCkge1xuICAgIGxhc3QgPSBodG1sO1xuICAgIC8vIE1ha2Ugc3VyZSB3ZSdyZSBub3QgaW4gYSBwbGFpbnRleHQgY29udGVudCBlbGVtZW50IGxpa2Ugc2NyaXB0L3N0eWxlXG4gICAgaWYgKCFsYXN0VGFnIHx8ICFpc1BsYWluVGV4dEVsZW1lbnQobGFzdFRhZykpIHtcbiAgICAgIHZhciB0ZXh0RW5kID0gaHRtbC5pbmRleE9mKCc8Jyk7XG4gICAgICBpZiAodGV4dEVuZCA9PT0gMCkge1xuICAgICAgICAvLyBDb21tZW50OlxuICAgICAgICBpZiAoY29tbWVudC50ZXN0KGh0bWwpKSB7XG4gICAgICAgICAgdmFyIGNvbW1lbnRFbmQgPSBodG1sLmluZGV4T2YoJy0tPicpO1xuXG4gICAgICAgICAgaWYgKGNvbW1lbnRFbmQgPj0gMCkge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMuc2hvdWxkS2VlcENvbW1lbnQpIHtcbiAgICAgICAgICAgICAgb3B0aW9ucy5jb21tZW50KGh0bWwuc3Vic3RyaW5nKDQsIGNvbW1lbnRFbmQpLCBpbmRleCwgaW5kZXggKyBjb21tZW50RW5kICsgMyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhZHZhbmNlKGNvbW1lbnRFbmQgKyAzKTtcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Db25kaXRpb25hbF9jb21tZW50I0Rvd25sZXZlbC1yZXZlYWxlZF9jb25kaXRpb25hbF9jb21tZW50XG4gICAgICAgIGlmIChjb25kaXRpb25hbENvbW1lbnQudGVzdChodG1sKSkge1xuICAgICAgICAgIHZhciBjb25kaXRpb25hbEVuZCA9IGh0bWwuaW5kZXhPZignXT4nKTtcblxuICAgICAgICAgIGlmIChjb25kaXRpb25hbEVuZCA+PSAwKSB7XG4gICAgICAgICAgICBhZHZhbmNlKGNvbmRpdGlvbmFsRW5kICsgMik7XG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIERvY3R5cGU6XG4gICAgICAgIHZhciBkb2N0eXBlTWF0Y2ggPSBodG1sLm1hdGNoKGRvY3R5cGUpO1xuICAgICAgICBpZiAoZG9jdHlwZU1hdGNoKSB7XG4gICAgICAgICAgYWR2YW5jZShkb2N0eXBlTWF0Y2hbMF0ubGVuZ3RoKTtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gRW5kIHRhZzpcbiAgICAgICAgdmFyIGVuZFRhZ01hdGNoID0gaHRtbC5tYXRjaChlbmRUYWcpO1xuICAgICAgICBpZiAoZW5kVGFnTWF0Y2gpIHtcbiAgICAgICAgICB2YXIgY3VySW5kZXggPSBpbmRleDtcbiAgICAgICAgICBhZHZhbmNlKGVuZFRhZ01hdGNoWzBdLmxlbmd0aCk7XG4gICAgICAgICAgcGFyc2VFbmRUYWcoZW5kVGFnTWF0Y2hbMV0sIGN1ckluZGV4LCBpbmRleCk7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFN0YXJ0IHRhZzpcbiAgICAgICAgdmFyIHN0YXJ0VGFnTWF0Y2ggPSBwYXJzZVN0YXJ0VGFnKCk7XG4gICAgICAgIGlmIChzdGFydFRhZ01hdGNoKSB7XG4gICAgICAgICAgaGFuZGxlU3RhcnRUYWcoc3RhcnRUYWdNYXRjaCk7XG4gICAgICAgICAgaWYgKHNob3VsZElnbm9yZUZpcnN0TmV3bGluZShzdGFydFRhZ01hdGNoLnRhZ05hbWUsIGh0bWwpKSB7XG4gICAgICAgICAgICBhZHZhbmNlKDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciB0ZXh0ID0gKHZvaWQgMCksIHJlc3QgPSAodm9pZCAwKSwgbmV4dCA9ICh2b2lkIDApO1xuICAgICAgaWYgKHRleHRFbmQgPj0gMCkge1xuICAgICAgICByZXN0ID0gaHRtbC5zbGljZSh0ZXh0RW5kKTtcbiAgICAgICAgd2hpbGUgKFxuICAgICAgICAgICFlbmRUYWcudGVzdChyZXN0KSAmJlxuICAgICAgICAgICFzdGFydFRhZ09wZW4udGVzdChyZXN0KSAmJlxuICAgICAgICAgICFjb21tZW50LnRlc3QocmVzdCkgJiZcbiAgICAgICAgICAhY29uZGl0aW9uYWxDb21tZW50LnRlc3QocmVzdClcbiAgICAgICAgKSB7XG4gICAgICAgICAgLy8gPCBpbiBwbGFpbiB0ZXh0LCBiZSBmb3JnaXZpbmcgYW5kIHRyZWF0IGl0IGFzIHRleHRcbiAgICAgICAgICBuZXh0ID0gcmVzdC5pbmRleE9mKCc8JywgMSk7XG4gICAgICAgICAgaWYgKG5leHQgPCAwKSB7IGJyZWFrIH1cbiAgICAgICAgICB0ZXh0RW5kICs9IG5leHQ7XG4gICAgICAgICAgcmVzdCA9IGh0bWwuc2xpY2UodGV4dEVuZCk7XG4gICAgICAgIH1cbiAgICAgICAgdGV4dCA9IGh0bWwuc3Vic3RyaW5nKDAsIHRleHRFbmQpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGV4dEVuZCA8IDApIHtcbiAgICAgICAgdGV4dCA9IGh0bWw7XG4gICAgICB9XG5cbiAgICAgIGlmICh0ZXh0KSB7XG4gICAgICAgIGFkdmFuY2UodGV4dC5sZW5ndGgpO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5jaGFycyAmJiB0ZXh0KSB7XG4gICAgICAgIG9wdGlvbnMuY2hhcnModGV4dCwgaW5kZXggLSB0ZXh0Lmxlbmd0aCwgaW5kZXgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgZW5kVGFnTGVuZ3RoID0gMDtcbiAgICAgIHZhciBzdGFja2VkVGFnID0gbGFzdFRhZy50b0xvd2VyQ2FzZSgpO1xuICAgICAgdmFyIHJlU3RhY2tlZFRhZyA9IHJlQ2FjaGVbc3RhY2tlZFRhZ10gfHwgKHJlQ2FjaGVbc3RhY2tlZFRhZ10gPSBuZXcgUmVnRXhwKCcoW1xcXFxzXFxcXFNdKj8pKDwvJyArIHN0YWNrZWRUYWcgKyAnW14+XSo+KScsICdpJykpO1xuICAgICAgdmFyIHJlc3QkMSA9IGh0bWwucmVwbGFjZShyZVN0YWNrZWRUYWcsIGZ1bmN0aW9uIChhbGwsIHRleHQsIGVuZFRhZykge1xuICAgICAgICBlbmRUYWdMZW5ndGggPSBlbmRUYWcubGVuZ3RoO1xuICAgICAgICBpZiAoIWlzUGxhaW5UZXh0RWxlbWVudChzdGFja2VkVGFnKSAmJiBzdGFja2VkVGFnICE9PSAnbm9zY3JpcHQnKSB7XG4gICAgICAgICAgdGV4dCA9IHRleHRcbiAgICAgICAgICAgIC5yZXBsYWNlKC88IVxcLS0oW1xcc1xcU10qPyktLT4vZywgJyQxJykgLy8gIzcyOThcbiAgICAgICAgICAgIC5yZXBsYWNlKC88IVxcW0NEQVRBXFxbKFtcXHNcXFNdKj8pXV0+L2csICckMScpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzaG91bGRJZ25vcmVGaXJzdE5ld2xpbmUoc3RhY2tlZFRhZywgdGV4dCkpIHtcbiAgICAgICAgICB0ZXh0ID0gdGV4dC5zbGljZSgxKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5jaGFycykge1xuICAgICAgICAgIG9wdGlvbnMuY2hhcnModGV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICcnXG4gICAgICB9KTtcbiAgICAgIGluZGV4ICs9IGh0bWwubGVuZ3RoIC0gcmVzdCQxLmxlbmd0aDtcbiAgICAgIGh0bWwgPSByZXN0JDE7XG4gICAgICBwYXJzZUVuZFRhZyhzdGFja2VkVGFnLCBpbmRleCAtIGVuZFRhZ0xlbmd0aCwgaW5kZXgpO1xuICAgIH1cblxuICAgIGlmIChodG1sID09PSBsYXN0KSB7XG4gICAgICBvcHRpb25zLmNoYXJzICYmIG9wdGlvbnMuY2hhcnMoaHRtbCk7XG4gICAgICBpZiAoIXN0YWNrLmxlbmd0aCAmJiBvcHRpb25zLndhcm4pIHtcbiAgICAgICAgb3B0aW9ucy53YXJuKChcIk1hbC1mb3JtYXR0ZWQgdGFnIGF0IGVuZCBvZiB0ZW1wbGF0ZTogXFxcIlwiICsgaHRtbCArIFwiXFxcIlwiKSwgeyBzdGFydDogaW5kZXggKyBodG1sLmxlbmd0aCB9KTtcbiAgICAgIH1cbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgLy8gQ2xlYW4gdXAgYW55IHJlbWFpbmluZyB0YWdzXG4gIHBhcnNlRW5kVGFnKCk7XG5cbiAgZnVuY3Rpb24gYWR2YW5jZSAobikge1xuICAgIGluZGV4ICs9IG47XG4gICAgaHRtbCA9IGh0bWwuc3Vic3RyaW5nKG4pO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VTdGFydFRhZyAoKSB7XG4gICAgdmFyIHN0YXJ0ID0gaHRtbC5tYXRjaChzdGFydFRhZ09wZW4pO1xuICAgIGlmIChzdGFydCkge1xuICAgICAgdmFyIG1hdGNoID0ge1xuICAgICAgICB0YWdOYW1lOiBzdGFydFsxXSxcbiAgICAgICAgYXR0cnM6IFtdLFxuICAgICAgICBzdGFydDogaW5kZXhcbiAgICAgIH07XG4gICAgICBhZHZhbmNlKHN0YXJ0WzBdLmxlbmd0aCk7XG4gICAgICB2YXIgZW5kLCBhdHRyO1xuICAgICAgd2hpbGUgKCEoZW5kID0gaHRtbC5tYXRjaChzdGFydFRhZ0Nsb3NlKSkgJiYgKGF0dHIgPSBodG1sLm1hdGNoKGR5bmFtaWNBcmdBdHRyaWJ1dGUpIHx8IGh0bWwubWF0Y2goYXR0cmlidXRlKSkpIHtcbiAgICAgICAgYXR0ci5zdGFydCA9IGluZGV4O1xuICAgICAgICBhZHZhbmNlKGF0dHJbMF0ubGVuZ3RoKTtcbiAgICAgICAgYXR0ci5lbmQgPSBpbmRleDtcbiAgICAgICAgbWF0Y2guYXR0cnMucHVzaChhdHRyKTtcbiAgICAgIH1cbiAgICAgIGlmIChlbmQpIHtcbiAgICAgICAgbWF0Y2gudW5hcnlTbGFzaCA9IGVuZFsxXTtcbiAgICAgICAgYWR2YW5jZShlbmRbMF0ubGVuZ3RoKTtcbiAgICAgICAgbWF0Y2guZW5kID0gaW5kZXg7XG4gICAgICAgIHJldHVybiBtYXRjaFxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZVN0YXJ0VGFnIChtYXRjaCkge1xuICAgIHZhciB0YWdOYW1lID0gbWF0Y2gudGFnTmFtZTtcbiAgICB2YXIgdW5hcnlTbGFzaCA9IG1hdGNoLnVuYXJ5U2xhc2g7XG5cbiAgICBpZiAoZXhwZWN0SFRNTCkge1xuICAgICAgaWYgKGxhc3RUYWcgPT09ICdwJyAmJiBpc05vblBocmFzaW5nVGFnKHRhZ05hbWUpKSB7XG4gICAgICAgIHBhcnNlRW5kVGFnKGxhc3RUYWcpO1xuICAgICAgfVxuICAgICAgaWYgKGNhbkJlTGVmdE9wZW5UYWckJDEodGFnTmFtZSkgJiYgbGFzdFRhZyA9PT0gdGFnTmFtZSkge1xuICAgICAgICBwYXJzZUVuZFRhZyh0YWdOYW1lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgdW5hcnkgPSBpc1VuYXJ5VGFnJCQxKHRhZ05hbWUpIHx8ICEhdW5hcnlTbGFzaDtcblxuICAgIHZhciBsID0gbWF0Y2guYXR0cnMubGVuZ3RoO1xuICAgIHZhciBhdHRycyA9IG5ldyBBcnJheShsKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGw7IGkrKykge1xuICAgICAgdmFyIGFyZ3MgPSBtYXRjaC5hdHRyc1tpXTtcbiAgICAgIHZhciB2YWx1ZSA9IGFyZ3NbM10gfHwgYXJnc1s0XSB8fCBhcmdzWzVdIHx8ICcnO1xuICAgICAgdmFyIHNob3VsZERlY29kZU5ld2xpbmVzID0gdGFnTmFtZSA9PT0gJ2EnICYmIGFyZ3NbMV0gPT09ICdocmVmJ1xuICAgICAgICA/IG9wdGlvbnMuc2hvdWxkRGVjb2RlTmV3bGluZXNGb3JIcmVmXG4gICAgICAgIDogb3B0aW9ucy5zaG91bGREZWNvZGVOZXdsaW5lcztcbiAgICAgIGF0dHJzW2ldID0ge1xuICAgICAgICBuYW1lOiBhcmdzWzFdLFxuICAgICAgICB2YWx1ZTogZGVjb2RlQXR0cih2YWx1ZSwgc2hvdWxkRGVjb2RlTmV3bGluZXMpXG4gICAgICB9O1xuICAgICAgaWYgKG9wdGlvbnMub3V0cHV0U291cmNlUmFuZ2UpIHtcbiAgICAgICAgYXR0cnNbaV0uc3RhcnQgPSBhcmdzLnN0YXJ0ICsgYXJnc1swXS5tYXRjaCgvXlxccyovKS5sZW5ndGg7XG4gICAgICAgIGF0dHJzW2ldLmVuZCA9IGFyZ3MuZW5kO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghdW5hcnkpIHtcbiAgICAgIHN0YWNrLnB1c2goeyB0YWc6IHRhZ05hbWUsIGxvd2VyQ2FzZWRUYWc6IHRhZ05hbWUudG9Mb3dlckNhc2UoKSwgYXR0cnM6IGF0dHJzLCBzdGFydDogbWF0Y2guc3RhcnQsIGVuZDogbWF0Y2guZW5kIH0pO1xuICAgICAgbGFzdFRhZyA9IHRhZ05hbWU7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuc3RhcnQpIHtcbiAgICAgIG9wdGlvbnMuc3RhcnQodGFnTmFtZSwgYXR0cnMsIHVuYXJ5LCBtYXRjaC5zdGFydCwgbWF0Y2guZW5kKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZUVuZFRhZyAodGFnTmFtZSwgc3RhcnQsIGVuZCkge1xuICAgIHZhciBwb3MsIGxvd2VyQ2FzZWRUYWdOYW1lO1xuICAgIGlmIChzdGFydCA9PSBudWxsKSB7IHN0YXJ0ID0gaW5kZXg7IH1cbiAgICBpZiAoZW5kID09IG51bGwpIHsgZW5kID0gaW5kZXg7IH1cblxuICAgIC8vIEZpbmQgdGhlIGNsb3Nlc3Qgb3BlbmVkIHRhZyBvZiB0aGUgc2FtZSB0eXBlXG4gICAgaWYgKHRhZ05hbWUpIHtcbiAgICAgIGxvd2VyQ2FzZWRUYWdOYW1lID0gdGFnTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgZm9yIChwb3MgPSBzdGFjay5sZW5ndGggLSAxOyBwb3MgPj0gMDsgcG9zLS0pIHtcbiAgICAgICAgaWYgKHN0YWNrW3Bvc10ubG93ZXJDYXNlZFRhZyA9PT0gbG93ZXJDYXNlZFRhZ05hbWUpIHtcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIElmIG5vIHRhZyBuYW1lIGlzIHByb3ZpZGVkLCBjbGVhbiBzaG9wXG4gICAgICBwb3MgPSAwO1xuICAgIH1cblxuICAgIGlmIChwb3MgPj0gMCkge1xuICAgICAgLy8gQ2xvc2UgYWxsIHRoZSBvcGVuIGVsZW1lbnRzLCB1cCB0aGUgc3RhY2tcbiAgICAgIGZvciAodmFyIGkgPSBzdGFjay5sZW5ndGggLSAxOyBpID49IHBvczsgaS0tKSB7XG4gICAgICAgIGlmIChpID4gcG9zIHx8ICF0YWdOYW1lICYmXG4gICAgICAgICAgb3B0aW9ucy53YXJuXG4gICAgICAgICkge1xuICAgICAgICAgIG9wdGlvbnMud2FybihcbiAgICAgICAgICAgIChcInRhZyA8XCIgKyAoc3RhY2tbaV0udGFnKSArIFwiPiBoYXMgbm8gbWF0Y2hpbmcgZW5kIHRhZy5cIiksXG4gICAgICAgICAgICB7IHN0YXJ0OiBzdGFja1tpXS5zdGFydCwgZW5kOiBzdGFja1tpXS5lbmQgfVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuZW5kKSB7XG4gICAgICAgICAgb3B0aW9ucy5lbmQoc3RhY2tbaV0udGFnLCBzdGFydCwgZW5kKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBSZW1vdmUgdGhlIG9wZW4gZWxlbWVudHMgZnJvbSB0aGUgc3RhY2tcbiAgICAgIHN0YWNrLmxlbmd0aCA9IHBvcztcbiAgICAgIGxhc3RUYWcgPSBwb3MgJiYgc3RhY2tbcG9zIC0gMV0udGFnO1xuICAgIH0gZWxzZSBpZiAobG93ZXJDYXNlZFRhZ05hbWUgPT09ICdicicpIHtcbiAgICAgIGlmIChvcHRpb25zLnN0YXJ0KSB7XG4gICAgICAgIG9wdGlvbnMuc3RhcnQodGFnTmFtZSwgW10sIHRydWUsIHN0YXJ0LCBlbmQpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobG93ZXJDYXNlZFRhZ05hbWUgPT09ICdwJykge1xuICAgICAgaWYgKG9wdGlvbnMuc3RhcnQpIHtcbiAgICAgICAgb3B0aW9ucy5zdGFydCh0YWdOYW1lLCBbXSwgZmFsc2UsIHN0YXJ0LCBlbmQpO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbnMuZW5kKSB7XG4gICAgICAgIG9wdGlvbnMuZW5kKHRhZ05hbWUsIHN0YXJ0LCBlbmQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKiAgKi9cblxudmFyIG9uUkUgPSAvXkB8XnYtb246LztcbnZhciBkaXJSRSA9IC9edi18XkB8XjovO1xudmFyIGZvckFsaWFzUkUgPSAvKFtcXHNcXFNdKj8pXFxzKyg/OmlufG9mKVxccysoW1xcc1xcU10qKS87XG52YXIgZm9ySXRlcmF0b3JSRSA9IC8sKFteLFxcfVxcXV0qKSg/OiwoW14sXFx9XFxdXSopKT8kLztcbnZhciBzdHJpcFBhcmVuc1JFID0gL15cXCh8XFwpJC9nO1xudmFyIGR5bmFtaWNBcmdSRSA9IC9eXFxbLipcXF0kLztcblxudmFyIGFyZ1JFID0gLzooLiopJC87XG52YXIgYmluZFJFID0gL146fF5cXC58XnYtYmluZDovO1xudmFyIG1vZGlmaWVyUkUgPSAvXFwuW14uXFxdXSsoPz1bXlxcXV0qJCkvZztcblxudmFyIHNsb3RSRSA9IC9edi1zbG90KDp8JCl8XiMvO1xuXG52YXIgbGluZUJyZWFrUkUgPSAvW1xcclxcbl0vO1xudmFyIHdoaXRlc3BhY2VSRSQxID0gL1xccysvZztcblxudmFyIGludmFsaWRBdHRyaWJ1dGVSRSA9IC9bXFxzXCInPD5cXC89XS87XG5cbnZhciBkZWNvZGVIVE1MQ2FjaGVkID0gY2FjaGVkKGhlLmRlY29kZSk7XG5cbnZhciBlbXB0eVNsb3RTY29wZVRva2VuID0gXCJfZW1wdHlfXCI7XG5cbi8vIGNvbmZpZ3VyYWJsZSBzdGF0ZVxudmFyIHdhcm4kMjtcbnZhciBkZWxpbWl0ZXJzO1xudmFyIHRyYW5zZm9ybXM7XG52YXIgcHJlVHJhbnNmb3JtcztcbnZhciBwb3N0VHJhbnNmb3JtcztcbnZhciBwbGF0Zm9ybUlzUHJlVGFnO1xudmFyIHBsYXRmb3JtTXVzdFVzZVByb3A7XG52YXIgcGxhdGZvcm1HZXRUYWdOYW1lc3BhY2U7XG52YXIgbWF5YmVDb21wb25lbnQ7XG5cbmZ1bmN0aW9uIGNyZWF0ZUFTVEVsZW1lbnQgKFxuICB0YWcsXG4gIGF0dHJzLFxuICBwYXJlbnRcbikge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IDEsXG4gICAgdGFnOiB0YWcsXG4gICAgYXR0cnNMaXN0OiBhdHRycyxcbiAgICBhdHRyc01hcDogbWFrZUF0dHJzTWFwKGF0dHJzKSxcbiAgICByYXdBdHRyc01hcDoge30sXG4gICAgcGFyZW50OiBwYXJlbnQsXG4gICAgY2hpbGRyZW46IFtdXG4gIH1cbn1cblxuLyoqXG4gKiBDb252ZXJ0IEhUTUwgc3RyaW5nIHRvIEFTVC5cbiAqL1xuZnVuY3Rpb24gcGFyc2UgKFxuICB0ZW1wbGF0ZSxcbiAgb3B0aW9uc1xuKSB7XG4gIHdhcm4kMiA9IG9wdGlvbnMud2FybiB8fCBiYXNlV2FybjtcblxuICBwbGF0Zm9ybUlzUHJlVGFnID0gb3B0aW9ucy5pc1ByZVRhZyB8fCBubztcbiAgcGxhdGZvcm1NdXN0VXNlUHJvcCA9IG9wdGlvbnMubXVzdFVzZVByb3AgfHwgbm87XG4gIHBsYXRmb3JtR2V0VGFnTmFtZXNwYWNlID0gb3B0aW9ucy5nZXRUYWdOYW1lc3BhY2UgfHwgbm87XG4gIHZhciBpc1Jlc2VydmVkVGFnID0gb3B0aW9ucy5pc1Jlc2VydmVkVGFnIHx8IG5vO1xuICBtYXliZUNvbXBvbmVudCA9IGZ1bmN0aW9uIChlbCkgeyByZXR1cm4gISFlbC5jb21wb25lbnQgfHwgIWlzUmVzZXJ2ZWRUYWcoZWwudGFnKTsgfTtcblxuICB0cmFuc2Zvcm1zID0gcGx1Y2tNb2R1bGVGdW5jdGlvbihvcHRpb25zLm1vZHVsZXMsICd0cmFuc2Zvcm1Ob2RlJyk7XG4gIHByZVRyYW5zZm9ybXMgPSBwbHVja01vZHVsZUZ1bmN0aW9uKG9wdGlvbnMubW9kdWxlcywgJ3ByZVRyYW5zZm9ybU5vZGUnKTtcbiAgcG9zdFRyYW5zZm9ybXMgPSBwbHVja01vZHVsZUZ1bmN0aW9uKG9wdGlvbnMubW9kdWxlcywgJ3Bvc3RUcmFuc2Zvcm1Ob2RlJyk7XG5cbiAgZGVsaW1pdGVycyA9IG9wdGlvbnMuZGVsaW1pdGVycztcblxuICB2YXIgc3RhY2sgPSBbXTtcbiAgdmFyIHByZXNlcnZlV2hpdGVzcGFjZSA9IG9wdGlvbnMucHJlc2VydmVXaGl0ZXNwYWNlICE9PSBmYWxzZTtcbiAgdmFyIHdoaXRlc3BhY2VPcHRpb24gPSBvcHRpb25zLndoaXRlc3BhY2U7XG4gIHZhciByb290O1xuICB2YXIgY3VycmVudFBhcmVudDtcbiAgdmFyIGluVlByZSA9IGZhbHNlO1xuICB2YXIgaW5QcmUgPSBmYWxzZTtcbiAgdmFyIHdhcm5lZCA9IGZhbHNlO1xuXG4gIGZ1bmN0aW9uIHdhcm5PbmNlIChtc2csIHJhbmdlKSB7XG4gICAgaWYgKCF3YXJuZWQpIHtcbiAgICAgIHdhcm5lZCA9IHRydWU7XG4gICAgICB3YXJuJDIobXNnLCByYW5nZSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY2xvc2VFbGVtZW50IChlbGVtZW50KSB7XG4gICAgdHJpbUVuZGluZ1doaXRlc3BhY2UoZWxlbWVudCk7XG4gICAgaWYgKCFpblZQcmUgJiYgIWVsZW1lbnQucHJvY2Vzc2VkKSB7XG4gICAgICBlbGVtZW50ID0gcHJvY2Vzc0VsZW1lbnQoZWxlbWVudCwgb3B0aW9ucyk7XG4gICAgfVxuICAgIC8vIHRyZWUgbWFuYWdlbWVudFxuICAgIGlmICghc3RhY2subGVuZ3RoICYmIGVsZW1lbnQgIT09IHJvb3QpIHtcbiAgICAgIC8vIGFsbG93IHJvb3QgZWxlbWVudHMgd2l0aCB2LWlmLCB2LWVsc2UtaWYgYW5kIHYtZWxzZVxuICAgICAgaWYgKHJvb3QuaWYgJiYgKGVsZW1lbnQuZWxzZWlmIHx8IGVsZW1lbnQuZWxzZSkpIHtcbiAgICAgICAge1xuICAgICAgICAgIGNoZWNrUm9vdENvbnN0cmFpbnRzKGVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICAgIGFkZElmQ29uZGl0aW9uKHJvb3QsIHtcbiAgICAgICAgICBleHA6IGVsZW1lbnQuZWxzZWlmLFxuICAgICAgICAgIGJsb2NrOiBlbGVtZW50XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd2Fybk9uY2UoXG4gICAgICAgICAgXCJDb21wb25lbnQgdGVtcGxhdGUgc2hvdWxkIGNvbnRhaW4gZXhhY3RseSBvbmUgcm9vdCBlbGVtZW50LiBcIiArXG4gICAgICAgICAgXCJJZiB5b3UgYXJlIHVzaW5nIHYtaWYgb24gbXVsdGlwbGUgZWxlbWVudHMsIFwiICtcbiAgICAgICAgICBcInVzZSB2LWVsc2UtaWYgdG8gY2hhaW4gdGhlbSBpbnN0ZWFkLlwiLFxuICAgICAgICAgIHsgc3RhcnQ6IGVsZW1lbnQuc3RhcnQgfVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoY3VycmVudFBhcmVudCAmJiAhZWxlbWVudC5mb3JiaWRkZW4pIHtcbiAgICAgIGlmIChlbGVtZW50LmVsc2VpZiB8fCBlbGVtZW50LmVsc2UpIHtcbiAgICAgICAgcHJvY2Vzc0lmQ29uZGl0aW9ucyhlbGVtZW50LCBjdXJyZW50UGFyZW50KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChlbGVtZW50LnNsb3RTY29wZSkge1xuICAgICAgICAgIC8vIHNjb3BlZCBzbG90XG4gICAgICAgICAgLy8ga2VlcCBpdCBpbiB0aGUgY2hpbGRyZW4gbGlzdCBzbyB0aGF0IHYtZWxzZSgtaWYpIGNvbmRpdGlvbnMgY2FuXG4gICAgICAgICAgLy8gZmluZCBpdCBhcyB0aGUgcHJldiBub2RlLlxuICAgICAgICAgIHZhciBuYW1lID0gZWxlbWVudC5zbG90VGFyZ2V0IHx8ICdcImRlZmF1bHRcIidcbiAgICAgICAgICA7KGN1cnJlbnRQYXJlbnQuc2NvcGVkU2xvdHMgfHwgKGN1cnJlbnRQYXJlbnQuc2NvcGVkU2xvdHMgPSB7fSkpW25hbWVdID0gZWxlbWVudDtcbiAgICAgICAgfVxuICAgICAgICBjdXJyZW50UGFyZW50LmNoaWxkcmVuLnB1c2goZWxlbWVudCk7XG4gICAgICAgIGVsZW1lbnQucGFyZW50ID0gY3VycmVudFBhcmVudDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBmaW5hbCBjaGlsZHJlbiBjbGVhbnVwXG4gICAgLy8gZmlsdGVyIG91dCBzY29wZWQgc2xvdHNcbiAgICBlbGVtZW50LmNoaWxkcmVuID0gZWxlbWVudC5jaGlsZHJlbi5maWx0ZXIoZnVuY3Rpb24gKGMpIHsgcmV0dXJuICEoYykuc2xvdFNjb3BlOyB9KTtcbiAgICAvLyByZW1vdmUgdHJhaWxpbmcgd2hpdGVzcGFjZSBub2RlIGFnYWluXG4gICAgdHJpbUVuZGluZ1doaXRlc3BhY2UoZWxlbWVudCk7XG5cbiAgICAvLyBjaGVjayBwcmUgc3RhdGVcbiAgICBpZiAoZWxlbWVudC5wcmUpIHtcbiAgICAgIGluVlByZSA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAocGxhdGZvcm1Jc1ByZVRhZyhlbGVtZW50LnRhZykpIHtcbiAgICAgIGluUHJlID0gZmFsc2U7XG4gICAgfVxuICAgIC8vIGFwcGx5IHBvc3QtdHJhbnNmb3Jtc1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcG9zdFRyYW5zZm9ybXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHBvc3RUcmFuc2Zvcm1zW2ldKGVsZW1lbnQsIG9wdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHRyaW1FbmRpbmdXaGl0ZXNwYWNlIChlbCkge1xuICAgIC8vIHJlbW92ZSB0cmFpbGluZyB3aGl0ZXNwYWNlIG5vZGVcbiAgICBpZiAoIWluUHJlKSB7XG4gICAgICB2YXIgbGFzdE5vZGU7XG4gICAgICB3aGlsZSAoXG4gICAgICAgIChsYXN0Tm9kZSA9IGVsLmNoaWxkcmVuW2VsLmNoaWxkcmVuLmxlbmd0aCAtIDFdKSAmJlxuICAgICAgICBsYXN0Tm9kZS50eXBlID09PSAzICYmXG4gICAgICAgIGxhc3ROb2RlLnRleHQgPT09ICcgJ1xuICAgICAgKSB7XG4gICAgICAgIGVsLmNoaWxkcmVuLnBvcCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNoZWNrUm9vdENvbnN0cmFpbnRzIChlbCkge1xuICAgIGlmIChlbC50YWcgPT09ICdzbG90JyB8fCBlbC50YWcgPT09ICd0ZW1wbGF0ZScpIHtcbiAgICAgIHdhcm5PbmNlKFxuICAgICAgICBcIkNhbm5vdCB1c2UgPFwiICsgKGVsLnRhZykgKyBcIj4gYXMgY29tcG9uZW50IHJvb3QgZWxlbWVudCBiZWNhdXNlIGl0IG1heSBcIiArXG4gICAgICAgICdjb250YWluIG11bHRpcGxlIG5vZGVzLicsXG4gICAgICAgIHsgc3RhcnQ6IGVsLnN0YXJ0IH1cbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChlbC5hdHRyc01hcC5oYXNPd25Qcm9wZXJ0eSgndi1mb3InKSkge1xuICAgICAgd2Fybk9uY2UoXG4gICAgICAgICdDYW5ub3QgdXNlIHYtZm9yIG9uIHN0YXRlZnVsIGNvbXBvbmVudCByb290IGVsZW1lbnQgYmVjYXVzZSAnICtcbiAgICAgICAgJ2l0IHJlbmRlcnMgbXVsdGlwbGUgZWxlbWVudHMuJyxcbiAgICAgICAgZWwucmF3QXR0cnNNYXBbJ3YtZm9yJ11cbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcGFyc2VIVE1MKHRlbXBsYXRlLCB7XG4gICAgd2Fybjogd2FybiQyLFxuICAgIGV4cGVjdEhUTUw6IG9wdGlvbnMuZXhwZWN0SFRNTCxcbiAgICBpc1VuYXJ5VGFnOiBvcHRpb25zLmlzVW5hcnlUYWcsXG4gICAgY2FuQmVMZWZ0T3BlblRhZzogb3B0aW9ucy5jYW5CZUxlZnRPcGVuVGFnLFxuICAgIHNob3VsZERlY29kZU5ld2xpbmVzOiBvcHRpb25zLnNob3VsZERlY29kZU5ld2xpbmVzLFxuICAgIHNob3VsZERlY29kZU5ld2xpbmVzRm9ySHJlZjogb3B0aW9ucy5zaG91bGREZWNvZGVOZXdsaW5lc0ZvckhyZWYsXG4gICAgc2hvdWxkS2VlcENvbW1lbnQ6IG9wdGlvbnMuY29tbWVudHMsXG4gICAgb3V0cHV0U291cmNlUmFuZ2U6IG9wdGlvbnMub3V0cHV0U291cmNlUmFuZ2UsXG4gICAgc3RhcnQ6IGZ1bmN0aW9uIHN0YXJ0ICh0YWcsIGF0dHJzLCB1bmFyeSwgc3RhcnQkMSwgZW5kKSB7XG4gICAgICAvLyBjaGVjayBuYW1lc3BhY2UuXG4gICAgICAvLyBpbmhlcml0IHBhcmVudCBucyBpZiB0aGVyZSBpcyBvbmVcbiAgICAgIHZhciBucyA9IChjdXJyZW50UGFyZW50ICYmIGN1cnJlbnRQYXJlbnQubnMpIHx8IHBsYXRmb3JtR2V0VGFnTmFtZXNwYWNlKHRhZyk7XG5cbiAgICAgIC8vIGhhbmRsZSBJRSBzdmcgYnVnXG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgIGlmIChpc0lFICYmIG5zID09PSAnc3ZnJykge1xuICAgICAgICBhdHRycyA9IGd1YXJkSUVTVkdCdWcoYXR0cnMpO1xuICAgICAgfVxuXG4gICAgICB2YXIgZWxlbWVudCA9IGNyZWF0ZUFTVEVsZW1lbnQodGFnLCBhdHRycywgY3VycmVudFBhcmVudCk7XG4gICAgICBpZiAobnMpIHtcbiAgICAgICAgZWxlbWVudC5ucyA9IG5zO1xuICAgICAgfVxuXG4gICAgICB7XG4gICAgICAgIGlmIChvcHRpb25zLm91dHB1dFNvdXJjZVJhbmdlKSB7XG4gICAgICAgICAgZWxlbWVudC5zdGFydCA9IHN0YXJ0JDE7XG4gICAgICAgICAgZWxlbWVudC5lbmQgPSBlbmQ7XG4gICAgICAgICAgZWxlbWVudC5yYXdBdHRyc01hcCA9IGVsZW1lbnQuYXR0cnNMaXN0LnJlZHVjZShmdW5jdGlvbiAoY3VtdWxhdGVkLCBhdHRyKSB7XG4gICAgICAgICAgICBjdW11bGF0ZWRbYXR0ci5uYW1lXSA9IGF0dHI7XG4gICAgICAgICAgICByZXR1cm4gY3VtdWxhdGVkXG4gICAgICAgICAgfSwge30pO1xuICAgICAgICB9XG4gICAgICAgIGF0dHJzLmZvckVhY2goZnVuY3Rpb24gKGF0dHIpIHtcbiAgICAgICAgICBpZiAoaW52YWxpZEF0dHJpYnV0ZVJFLnRlc3QoYXR0ci5uYW1lKSkge1xuICAgICAgICAgICAgd2FybiQyKFxuICAgICAgICAgICAgICBcIkludmFsaWQgZHluYW1pYyBhcmd1bWVudCBleHByZXNzaW9uOiBhdHRyaWJ1dGUgbmFtZXMgY2Fubm90IGNvbnRhaW4gXCIgK1xuICAgICAgICAgICAgICBcInNwYWNlcywgcXVvdGVzLCA8LCA+LCAvIG9yID0uXCIsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzdGFydDogYXR0ci5zdGFydCArIGF0dHIubmFtZS5pbmRleE9mKFwiW1wiKSxcbiAgICAgICAgICAgICAgICBlbmQ6IGF0dHIuc3RhcnQgKyBhdHRyLm5hbWUubGVuZ3RoXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzRm9yYmlkZGVuVGFnKGVsZW1lbnQpICYmICFpc1NlcnZlclJlbmRlcmluZygpKSB7XG4gICAgICAgIGVsZW1lbnQuZm9yYmlkZGVuID0gdHJ1ZTtcbiAgICAgICAgd2FybiQyKFxuICAgICAgICAgICdUZW1wbGF0ZXMgc2hvdWxkIG9ubHkgYmUgcmVzcG9uc2libGUgZm9yIG1hcHBpbmcgdGhlIHN0YXRlIHRvIHRoZSAnICtcbiAgICAgICAgICAnVUkuIEF2b2lkIHBsYWNpbmcgdGFncyB3aXRoIHNpZGUtZWZmZWN0cyBpbiB5b3VyIHRlbXBsYXRlcywgc3VjaCBhcyAnICtcbiAgICAgICAgICBcIjxcIiArIHRhZyArIFwiPlwiICsgJywgYXMgdGhleSB3aWxsIG5vdCBiZSBwYXJzZWQuJyxcbiAgICAgICAgICB7IHN0YXJ0OiBlbGVtZW50LnN0YXJ0IH1cbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgLy8gYXBwbHkgcHJlLXRyYW5zZm9ybXNcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJlVHJhbnNmb3Jtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBlbGVtZW50ID0gcHJlVHJhbnNmb3Jtc1tpXShlbGVtZW50LCBvcHRpb25zKSB8fCBlbGVtZW50O1xuICAgICAgfVxuXG4gICAgICBpZiAoIWluVlByZSkge1xuICAgICAgICBwcm9jZXNzUHJlKGVsZW1lbnQpO1xuICAgICAgICBpZiAoZWxlbWVudC5wcmUpIHtcbiAgICAgICAgICBpblZQcmUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocGxhdGZvcm1Jc1ByZVRhZyhlbGVtZW50LnRhZykpIHtcbiAgICAgICAgaW5QcmUgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKGluVlByZSkge1xuICAgICAgICBwcm9jZXNzUmF3QXR0cnMoZWxlbWVudCk7XG4gICAgICB9IGVsc2UgaWYgKCFlbGVtZW50LnByb2Nlc3NlZCkge1xuICAgICAgICAvLyBzdHJ1Y3R1cmFsIGRpcmVjdGl2ZXNcbiAgICAgICAgcHJvY2Vzc0ZvcihlbGVtZW50KTtcbiAgICAgICAgcHJvY2Vzc0lmKGVsZW1lbnQpO1xuICAgICAgICBwcm9jZXNzT25jZShlbGVtZW50KTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFyb290KSB7XG4gICAgICAgIHJvb3QgPSBlbGVtZW50O1xuICAgICAgICB7XG4gICAgICAgICAgY2hlY2tSb290Q29uc3RyYWludHMocm9vdCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCF1bmFyeSkge1xuICAgICAgICBjdXJyZW50UGFyZW50ID0gZWxlbWVudDtcbiAgICAgICAgc3RhY2sucHVzaChlbGVtZW50KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNsb3NlRWxlbWVudChlbGVtZW50KTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZW5kOiBmdW5jdGlvbiBlbmQgKHRhZywgc3RhcnQsIGVuZCQxKSB7XG4gICAgICB2YXIgZWxlbWVudCA9IHN0YWNrW3N0YWNrLmxlbmd0aCAtIDFdO1xuICAgICAgLy8gcG9wIHN0YWNrXG4gICAgICBzdGFjay5sZW5ndGggLT0gMTtcbiAgICAgIGN1cnJlbnRQYXJlbnQgPSBzdGFja1tzdGFjay5sZW5ndGggLSAxXTtcbiAgICAgIGlmIChvcHRpb25zLm91dHB1dFNvdXJjZVJhbmdlKSB7XG4gICAgICAgIGVsZW1lbnQuZW5kID0gZW5kJDE7XG4gICAgICB9XG4gICAgICBjbG9zZUVsZW1lbnQoZWxlbWVudCk7XG4gICAgfSxcblxuICAgIGNoYXJzOiBmdW5jdGlvbiBjaGFycyAodGV4dCwgc3RhcnQsIGVuZCkge1xuICAgICAgaWYgKCFjdXJyZW50UGFyZW50KSB7XG4gICAgICAgIHtcbiAgICAgICAgICBpZiAodGV4dCA9PT0gdGVtcGxhdGUpIHtcbiAgICAgICAgICAgIHdhcm5PbmNlKFxuICAgICAgICAgICAgICAnQ29tcG9uZW50IHRlbXBsYXRlIHJlcXVpcmVzIGEgcm9vdCBlbGVtZW50LCByYXRoZXIgdGhhbiBqdXN0IHRleHQuJyxcbiAgICAgICAgICAgICAgeyBzdGFydDogc3RhcnQgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKCh0ZXh0ID0gdGV4dC50cmltKCkpKSB7XG4gICAgICAgICAgICB3YXJuT25jZShcbiAgICAgICAgICAgICAgKFwidGV4dCBcXFwiXCIgKyB0ZXh0ICsgXCJcXFwiIG91dHNpZGUgcm9vdCBlbGVtZW50IHdpbGwgYmUgaWdub3JlZC5cIiksXG4gICAgICAgICAgICAgIHsgc3RhcnQ6IHN0YXJ0IH1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgLy8gSUUgdGV4dGFyZWEgcGxhY2Vob2xkZXIgYnVnXG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgIGlmIChpc0lFICYmXG4gICAgICAgIGN1cnJlbnRQYXJlbnQudGFnID09PSAndGV4dGFyZWEnICYmXG4gICAgICAgIGN1cnJlbnRQYXJlbnQuYXR0cnNNYXAucGxhY2Vob2xkZXIgPT09IHRleHRcbiAgICAgICkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIHZhciBjaGlsZHJlbiA9IGN1cnJlbnRQYXJlbnQuY2hpbGRyZW47XG4gICAgICBpZiAoaW5QcmUgfHwgdGV4dC50cmltKCkpIHtcbiAgICAgICAgdGV4dCA9IGlzVGV4dFRhZyhjdXJyZW50UGFyZW50KSA/IHRleHQgOiBkZWNvZGVIVE1MQ2FjaGVkKHRleHQpO1xuICAgICAgfSBlbHNlIGlmICghY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAgIC8vIHJlbW92ZSB0aGUgd2hpdGVzcGFjZS1vbmx5IG5vZGUgcmlnaHQgYWZ0ZXIgYW4gb3BlbmluZyB0YWdcbiAgICAgICAgdGV4dCA9ICcnO1xuICAgICAgfSBlbHNlIGlmICh3aGl0ZXNwYWNlT3B0aW9uKSB7XG4gICAgICAgIGlmICh3aGl0ZXNwYWNlT3B0aW9uID09PSAnY29uZGVuc2UnKSB7XG4gICAgICAgICAgLy8gaW4gY29uZGVuc2UgbW9kZSwgcmVtb3ZlIHRoZSB3aGl0ZXNwYWNlIG5vZGUgaWYgaXQgY29udGFpbnNcbiAgICAgICAgICAvLyBsaW5lIGJyZWFrLCBvdGhlcndpc2UgY29uZGVuc2UgdG8gYSBzaW5nbGUgc3BhY2VcbiAgICAgICAgICB0ZXh0ID0gbGluZUJyZWFrUkUudGVzdCh0ZXh0KSA/ICcnIDogJyAnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRleHQgPSAnICc7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRleHQgPSBwcmVzZXJ2ZVdoaXRlc3BhY2UgPyAnICcgOiAnJztcbiAgICAgIH1cbiAgICAgIGlmICh0ZXh0KSB7XG4gICAgICAgIGlmICghaW5QcmUgJiYgd2hpdGVzcGFjZU9wdGlvbiA9PT0gJ2NvbmRlbnNlJykge1xuICAgICAgICAgIC8vIGNvbmRlbnNlIGNvbnNlY3V0aXZlIHdoaXRlc3BhY2VzIGludG8gc2luZ2xlIHNwYWNlXG4gICAgICAgICAgdGV4dCA9IHRleHQucmVwbGFjZSh3aGl0ZXNwYWNlUkUkMSwgJyAnKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcmVzO1xuICAgICAgICB2YXIgY2hpbGQ7XG4gICAgICAgIGlmICghaW5WUHJlICYmIHRleHQgIT09ICcgJyAmJiAocmVzID0gcGFyc2VUZXh0KHRleHQsIGRlbGltaXRlcnMpKSkge1xuICAgICAgICAgIGNoaWxkID0ge1xuICAgICAgICAgICAgdHlwZTogMixcbiAgICAgICAgICAgIGV4cHJlc3Npb246IHJlcy5leHByZXNzaW9uLFxuICAgICAgICAgICAgdG9rZW5zOiByZXMudG9rZW5zLFxuICAgICAgICAgICAgdGV4dDogdGV4dFxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAodGV4dCAhPT0gJyAnIHx8ICFjaGlsZHJlbi5sZW5ndGggfHwgY2hpbGRyZW5bY2hpbGRyZW4ubGVuZ3RoIC0gMV0udGV4dCAhPT0gJyAnKSB7XG4gICAgICAgICAgY2hpbGQgPSB7XG4gICAgICAgICAgICB0eXBlOiAzLFxuICAgICAgICAgICAgdGV4dDogdGV4dFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoaWxkKSB7XG4gICAgICAgICAgaWYgKG9wdGlvbnMub3V0cHV0U291cmNlUmFuZ2UpIHtcbiAgICAgICAgICAgIGNoaWxkLnN0YXJ0ID0gc3RhcnQ7XG4gICAgICAgICAgICBjaGlsZC5lbmQgPSBlbmQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNoaWxkcmVuLnB1c2goY2hpbGQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBjb21tZW50OiBmdW5jdGlvbiBjb21tZW50ICh0ZXh0LCBzdGFydCwgZW5kKSB7XG4gICAgICAvLyBhZGRpbmcgYW55dGluZyBhcyBhIHNpYmxpbmcgdG8gdGhlIHJvb3Qgbm9kZSBpcyBmb3JiaWRkZW5cbiAgICAgIC8vIGNvbW1lbnRzIHNob3VsZCBzdGlsbCBiZSBhbGxvd2VkLCBidXQgaWdub3JlZFxuICAgICAgaWYgKGN1cnJlbnRQYXJlbnQpIHtcbiAgICAgICAgdmFyIGNoaWxkID0ge1xuICAgICAgICAgIHR5cGU6IDMsXG4gICAgICAgICAgdGV4dDogdGV4dCxcbiAgICAgICAgICBpc0NvbW1lbnQ6IHRydWVcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKG9wdGlvbnMub3V0cHV0U291cmNlUmFuZ2UpIHtcbiAgICAgICAgICBjaGlsZC5zdGFydCA9IHN0YXJ0O1xuICAgICAgICAgIGNoaWxkLmVuZCA9IGVuZDtcbiAgICAgICAgfVxuICAgICAgICBjdXJyZW50UGFyZW50LmNoaWxkcmVuLnB1c2goY2hpbGQpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHJldHVybiByb290XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NQcmUgKGVsKSB7XG4gIGlmIChnZXRBbmRSZW1vdmVBdHRyKGVsLCAndi1wcmUnKSAhPSBudWxsKSB7XG4gICAgZWwucHJlID0gdHJ1ZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwcm9jZXNzUmF3QXR0cnMgKGVsKSB7XG4gIHZhciBsaXN0ID0gZWwuYXR0cnNMaXN0O1xuICB2YXIgbGVuID0gbGlzdC5sZW5ndGg7XG4gIGlmIChsZW4pIHtcbiAgICB2YXIgYXR0cnMgPSBlbC5hdHRycyA9IG5ldyBBcnJheShsZW4pO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGF0dHJzW2ldID0ge1xuICAgICAgICBuYW1lOiBsaXN0W2ldLm5hbWUsXG4gICAgICAgIHZhbHVlOiBKU09OLnN0cmluZ2lmeShsaXN0W2ldLnZhbHVlKVxuICAgICAgfTtcbiAgICAgIGlmIChsaXN0W2ldLnN0YXJ0ICE9IG51bGwpIHtcbiAgICAgICAgYXR0cnNbaV0uc3RhcnQgPSBsaXN0W2ldLnN0YXJ0O1xuICAgICAgICBhdHRyc1tpXS5lbmQgPSBsaXN0W2ldLmVuZDtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAoIWVsLnByZSkge1xuICAgIC8vIG5vbiByb290IG5vZGUgaW4gcHJlIGJsb2NrcyB3aXRoIG5vIGF0dHJpYnV0ZXNcbiAgICBlbC5wbGFpbiA9IHRydWU7XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJvY2Vzc0VsZW1lbnQgKFxuICBlbGVtZW50LFxuICBvcHRpb25zXG4pIHtcbiAgcHJvY2Vzc0tleShlbGVtZW50KTtcblxuICAvLyBkZXRlcm1pbmUgd2hldGhlciB0aGlzIGlzIGEgcGxhaW4gZWxlbWVudCBhZnRlclxuICAvLyByZW1vdmluZyBzdHJ1Y3R1cmFsIGF0dHJpYnV0ZXNcbiAgZWxlbWVudC5wbGFpbiA9IChcbiAgICAhZWxlbWVudC5rZXkgJiZcbiAgICAhZWxlbWVudC5zY29wZWRTbG90cyAmJlxuICAgICFlbGVtZW50LmF0dHJzTGlzdC5sZW5ndGhcbiAgKTtcblxuICBwcm9jZXNzUmVmKGVsZW1lbnQpO1xuICBwcm9jZXNzU2xvdENvbnRlbnQoZWxlbWVudCk7XG4gIHByb2Nlc3NTbG90T3V0bGV0KGVsZW1lbnQpO1xuICBwcm9jZXNzQ29tcG9uZW50KGVsZW1lbnQpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHRyYW5zZm9ybXMubGVuZ3RoOyBpKyspIHtcbiAgICBlbGVtZW50ID0gdHJhbnNmb3Jtc1tpXShlbGVtZW50LCBvcHRpb25zKSB8fCBlbGVtZW50O1xuICB9XG4gIHByb2Nlc3NBdHRycyhlbGVtZW50KTtcbiAgcmV0dXJuIGVsZW1lbnRcbn1cblxuZnVuY3Rpb24gcHJvY2Vzc0tleSAoZWwpIHtcbiAgdmFyIGV4cCA9IGdldEJpbmRpbmdBdHRyKGVsLCAna2V5Jyk7XG4gIGlmIChleHApIHtcbiAgICB7XG4gICAgICBpZiAoZWwudGFnID09PSAndGVtcGxhdGUnKSB7XG4gICAgICAgIHdhcm4kMihcbiAgICAgICAgICBcIjx0ZW1wbGF0ZT4gY2Fubm90IGJlIGtleWVkLiBQbGFjZSB0aGUga2V5IG9uIHJlYWwgZWxlbWVudHMgaW5zdGVhZC5cIixcbiAgICAgICAgICBnZXRSYXdCaW5kaW5nQXR0cihlbCwgJ2tleScpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoZWwuZm9yKSB7XG4gICAgICAgIHZhciBpdGVyYXRvciA9IGVsLml0ZXJhdG9yMiB8fCBlbC5pdGVyYXRvcjE7XG4gICAgICAgIHZhciBwYXJlbnQgPSBlbC5wYXJlbnQ7XG4gICAgICAgIGlmIChpdGVyYXRvciAmJiBpdGVyYXRvciA9PT0gZXhwICYmIHBhcmVudCAmJiBwYXJlbnQudGFnID09PSAndHJhbnNpdGlvbi1ncm91cCcpIHtcbiAgICAgICAgICB3YXJuJDIoXG4gICAgICAgICAgICBcIkRvIG5vdCB1c2Ugdi1mb3IgaW5kZXggYXMga2V5IG9uIDx0cmFuc2l0aW9uLWdyb3VwPiBjaGlsZHJlbiwgXCIgK1xuICAgICAgICAgICAgXCJ0aGlzIGlzIHRoZSBzYW1lIGFzIG5vdCB1c2luZyBrZXlzLlwiLFxuICAgICAgICAgICAgZ2V0UmF3QmluZGluZ0F0dHIoZWwsICdrZXknKSxcbiAgICAgICAgICAgIHRydWUgLyogdGlwICovXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBlbC5rZXkgPSBleHA7XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJvY2Vzc1JlZiAoZWwpIHtcbiAgdmFyIHJlZiA9IGdldEJpbmRpbmdBdHRyKGVsLCAncmVmJyk7XG4gIGlmIChyZWYpIHtcbiAgICBlbC5yZWYgPSByZWY7XG4gICAgZWwucmVmSW5Gb3IgPSBjaGVja0luRm9yKGVsKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwcm9jZXNzRm9yIChlbCkge1xuICB2YXIgZXhwO1xuICBpZiAoKGV4cCA9IGdldEFuZFJlbW92ZUF0dHIoZWwsICd2LWZvcicpKSkge1xuICAgIHZhciByZXMgPSBwYXJzZUZvcihleHApO1xuICAgIGlmIChyZXMpIHtcbiAgICAgIGV4dGVuZChlbCwgcmVzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgd2FybiQyKFxuICAgICAgICAoXCJJbnZhbGlkIHYtZm9yIGV4cHJlc3Npb246IFwiICsgZXhwKSxcbiAgICAgICAgZWwucmF3QXR0cnNNYXBbJ3YtZm9yJ11cbiAgICAgICk7XG4gICAgfVxuICB9XG59XG5cblxuXG5mdW5jdGlvbiBwYXJzZUZvciAoZXhwKSB7XG4gIHZhciBpbk1hdGNoID0gZXhwLm1hdGNoKGZvckFsaWFzUkUpO1xuICBpZiAoIWluTWF0Y2gpIHsgcmV0dXJuIH1cbiAgdmFyIHJlcyA9IHt9O1xuICByZXMuZm9yID0gaW5NYXRjaFsyXS50cmltKCk7XG4gIHZhciBhbGlhcyA9IGluTWF0Y2hbMV0udHJpbSgpLnJlcGxhY2Uoc3RyaXBQYXJlbnNSRSwgJycpO1xuICB2YXIgaXRlcmF0b3JNYXRjaCA9IGFsaWFzLm1hdGNoKGZvckl0ZXJhdG9yUkUpO1xuICBpZiAoaXRlcmF0b3JNYXRjaCkge1xuICAgIHJlcy5hbGlhcyA9IGFsaWFzLnJlcGxhY2UoZm9ySXRlcmF0b3JSRSwgJycpLnRyaW0oKTtcbiAgICByZXMuaXRlcmF0b3IxID0gaXRlcmF0b3JNYXRjaFsxXS50cmltKCk7XG4gICAgaWYgKGl0ZXJhdG9yTWF0Y2hbMl0pIHtcbiAgICAgIHJlcy5pdGVyYXRvcjIgPSBpdGVyYXRvck1hdGNoWzJdLnRyaW0oKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcmVzLmFsaWFzID0gYWxpYXM7XG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG5mdW5jdGlvbiBwcm9jZXNzSWYgKGVsKSB7XG4gIHZhciBleHAgPSBnZXRBbmRSZW1vdmVBdHRyKGVsLCAndi1pZicpO1xuICBpZiAoZXhwKSB7XG4gICAgZWwuaWYgPSBleHA7XG4gICAgYWRkSWZDb25kaXRpb24oZWwsIHtcbiAgICAgIGV4cDogZXhwLFxuICAgICAgYmxvY2s6IGVsXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKGdldEFuZFJlbW92ZUF0dHIoZWwsICd2LWVsc2UnKSAhPSBudWxsKSB7XG4gICAgICBlbC5lbHNlID0gdHJ1ZTtcbiAgICB9XG4gICAgdmFyIGVsc2VpZiA9IGdldEFuZFJlbW92ZUF0dHIoZWwsICd2LWVsc2UtaWYnKTtcbiAgICBpZiAoZWxzZWlmKSB7XG4gICAgICBlbC5lbHNlaWYgPSBlbHNlaWY7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NJZkNvbmRpdGlvbnMgKGVsLCBwYXJlbnQpIHtcbiAgdmFyIHByZXYgPSBmaW5kUHJldkVsZW1lbnQocGFyZW50LmNoaWxkcmVuKTtcbiAgaWYgKHByZXYgJiYgcHJldi5pZikge1xuICAgIGFkZElmQ29uZGl0aW9uKHByZXYsIHtcbiAgICAgIGV4cDogZWwuZWxzZWlmLFxuICAgICAgYmxvY2s6IGVsXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgd2FybiQyKFxuICAgICAgXCJ2LVwiICsgKGVsLmVsc2VpZiA/ICgnZWxzZS1pZj1cIicgKyBlbC5lbHNlaWYgKyAnXCInKSA6ICdlbHNlJykgKyBcIiBcIiArXG4gICAgICBcInVzZWQgb24gZWxlbWVudCA8XCIgKyAoZWwudGFnKSArIFwiPiB3aXRob3V0IGNvcnJlc3BvbmRpbmcgdi1pZi5cIixcbiAgICAgIGVsLnJhd0F0dHJzTWFwW2VsLmVsc2VpZiA/ICd2LWVsc2UtaWYnIDogJ3YtZWxzZSddXG4gICAgKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBmaW5kUHJldkVsZW1lbnQgKGNoaWxkcmVuKSB7XG4gIHZhciBpID0gY2hpbGRyZW4ubGVuZ3RoO1xuICB3aGlsZSAoaS0tKSB7XG4gICAgaWYgKGNoaWxkcmVuW2ldLnR5cGUgPT09IDEpIHtcbiAgICAgIHJldHVybiBjaGlsZHJlbltpXVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoY2hpbGRyZW5baV0udGV4dCAhPT0gJyAnKSB7XG4gICAgICAgIHdhcm4kMihcbiAgICAgICAgICBcInRleHQgXFxcIlwiICsgKGNoaWxkcmVuW2ldLnRleHQudHJpbSgpKSArIFwiXFxcIiBiZXR3ZWVuIHYtaWYgYW5kIHYtZWxzZSgtaWYpIFwiICtcbiAgICAgICAgICBcIndpbGwgYmUgaWdub3JlZC5cIixcbiAgICAgICAgICBjaGlsZHJlbltpXVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgY2hpbGRyZW4ucG9wKCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGFkZElmQ29uZGl0aW9uIChlbCwgY29uZGl0aW9uKSB7XG4gIGlmICghZWwuaWZDb25kaXRpb25zKSB7XG4gICAgZWwuaWZDb25kaXRpb25zID0gW107XG4gIH1cbiAgZWwuaWZDb25kaXRpb25zLnB1c2goY29uZGl0aW9uKTtcbn1cblxuZnVuY3Rpb24gcHJvY2Vzc09uY2UgKGVsKSB7XG4gIHZhciBvbmNlJCQxID0gZ2V0QW5kUmVtb3ZlQXR0cihlbCwgJ3Ytb25jZScpO1xuICBpZiAob25jZSQkMSAhPSBudWxsKSB7XG4gICAgZWwub25jZSA9IHRydWU7XG4gIH1cbn1cblxuLy8gaGFuZGxlIGNvbnRlbnQgYmVpbmcgcGFzc2VkIHRvIGEgY29tcG9uZW50IGFzIHNsb3QsXG4vLyBlLmcuIDx0ZW1wbGF0ZSBzbG90PVwieHh4XCI+LCA8ZGl2IHNsb3Qtc2NvcGU9XCJ4eHhcIj5cbmZ1bmN0aW9uIHByb2Nlc3NTbG90Q29udGVudCAoZWwpIHtcbiAgdmFyIHNsb3RTY29wZTtcbiAgaWYgKGVsLnRhZyA9PT0gJ3RlbXBsYXRlJykge1xuICAgIHNsb3RTY29wZSA9IGdldEFuZFJlbW92ZUF0dHIoZWwsICdzY29wZScpO1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChzbG90U2NvcGUpIHtcbiAgICAgIHdhcm4kMihcbiAgICAgICAgXCJ0aGUgXFxcInNjb3BlXFxcIiBhdHRyaWJ1dGUgZm9yIHNjb3BlZCBzbG90cyBoYXZlIGJlZW4gZGVwcmVjYXRlZCBhbmQgXCIgK1xuICAgICAgICBcInJlcGxhY2VkIGJ5IFxcXCJzbG90LXNjb3BlXFxcIiBzaW5jZSAyLjUuIFRoZSBuZXcgXFxcInNsb3Qtc2NvcGVcXFwiIGF0dHJpYnV0ZSBcIiArXG4gICAgICAgIFwiY2FuIGFsc28gYmUgdXNlZCBvbiBwbGFpbiBlbGVtZW50cyBpbiBhZGRpdGlvbiB0byA8dGVtcGxhdGU+IHRvIFwiICtcbiAgICAgICAgXCJkZW5vdGUgc2NvcGVkIHNsb3RzLlwiLFxuICAgICAgICBlbC5yYXdBdHRyc01hcFsnc2NvcGUnXSxcbiAgICAgICAgdHJ1ZVxuICAgICAgKTtcbiAgICB9XG4gICAgZWwuc2xvdFNjb3BlID0gc2xvdFNjb3BlIHx8IGdldEFuZFJlbW92ZUF0dHIoZWwsICdzbG90LXNjb3BlJyk7XG4gIH0gZWxzZSBpZiAoKHNsb3RTY29wZSA9IGdldEFuZFJlbW92ZUF0dHIoZWwsICdzbG90LXNjb3BlJykpKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKGVsLmF0dHJzTWFwWyd2LWZvciddKSB7XG4gICAgICB3YXJuJDIoXG4gICAgICAgIFwiQW1iaWd1b3VzIGNvbWJpbmVkIHVzYWdlIG9mIHNsb3Qtc2NvcGUgYW5kIHYtZm9yIG9uIDxcIiArIChlbC50YWcpICsgXCI+IFwiICtcbiAgICAgICAgXCIodi1mb3IgdGFrZXMgaGlnaGVyIHByaW9yaXR5KS4gVXNlIGEgd3JhcHBlciA8dGVtcGxhdGU+IGZvciB0aGUgXCIgK1xuICAgICAgICBcInNjb3BlZCBzbG90IHRvIG1ha2UgaXQgY2xlYXJlci5cIixcbiAgICAgICAgZWwucmF3QXR0cnNNYXBbJ3Nsb3Qtc2NvcGUnXSxcbiAgICAgICAgdHJ1ZVxuICAgICAgKTtcbiAgICB9XG4gICAgZWwuc2xvdFNjb3BlID0gc2xvdFNjb3BlO1xuICB9XG5cbiAgLy8gc2xvdD1cInh4eFwiXG4gIHZhciBzbG90VGFyZ2V0ID0gZ2V0QmluZGluZ0F0dHIoZWwsICdzbG90Jyk7XG4gIGlmIChzbG90VGFyZ2V0KSB7XG4gICAgZWwuc2xvdFRhcmdldCA9IHNsb3RUYXJnZXQgPT09ICdcIlwiJyA/ICdcImRlZmF1bHRcIicgOiBzbG90VGFyZ2V0O1xuICAgIGVsLnNsb3RUYXJnZXREeW5hbWljID0gISEoZWwuYXR0cnNNYXBbJzpzbG90J10gfHwgZWwuYXR0cnNNYXBbJ3YtYmluZDpzbG90J10pO1xuICAgIC8vIHByZXNlcnZlIHNsb3QgYXMgYW4gYXR0cmlidXRlIGZvciBuYXRpdmUgc2hhZG93IERPTSBjb21wYXRcbiAgICAvLyBvbmx5IGZvciBub24tc2NvcGVkIHNsb3RzLlxuICAgIGlmIChlbC50YWcgIT09ICd0ZW1wbGF0ZScgJiYgIWVsLnNsb3RTY29wZSkge1xuICAgICAgYWRkQXR0cihlbCwgJ3Nsb3QnLCBzbG90VGFyZ2V0LCBnZXRSYXdCaW5kaW5nQXR0cihlbCwgJ3Nsb3QnKSk7XG4gICAgfVxuICB9XG5cbiAgLy8gMi42IHYtc2xvdCBzeW50YXhcbiAge1xuICAgIGlmIChlbC50YWcgPT09ICd0ZW1wbGF0ZScpIHtcbiAgICAgIC8vIHYtc2xvdCBvbiA8dGVtcGxhdGU+XG4gICAgICB2YXIgc2xvdEJpbmRpbmcgPSBnZXRBbmRSZW1vdmVBdHRyQnlSZWdleChlbCwgc2xvdFJFKTtcbiAgICAgIGlmIChzbG90QmluZGluZykge1xuICAgICAgICB7XG4gICAgICAgICAgaWYgKGVsLnNsb3RUYXJnZXQgfHwgZWwuc2xvdFNjb3BlKSB7XG4gICAgICAgICAgICB3YXJuJDIoXG4gICAgICAgICAgICAgIFwiVW5leHBlY3RlZCBtaXhlZCB1c2FnZSBvZiBkaWZmZXJlbnQgc2xvdCBzeW50YXhlcy5cIixcbiAgICAgICAgICAgICAgZWxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChlbC5wYXJlbnQgJiYgIW1heWJlQ29tcG9uZW50KGVsLnBhcmVudCkpIHtcbiAgICAgICAgICAgIHdhcm4kMihcbiAgICAgICAgICAgICAgXCI8dGVtcGxhdGUgdi1zbG90PiBjYW4gb25seSBhcHBlYXIgYXQgdGhlIHJvb3QgbGV2ZWwgaW5zaWRlIFwiICtcbiAgICAgICAgICAgICAgXCJ0aGUgcmVjZWl2aW5nIHRoZSBjb21wb25lbnRcIixcbiAgICAgICAgICAgICAgZWxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHZhciByZWYgPSBnZXRTbG90TmFtZShzbG90QmluZGluZyk7XG4gICAgICAgIHZhciBuYW1lID0gcmVmLm5hbWU7XG4gICAgICAgIHZhciBkeW5hbWljID0gcmVmLmR5bmFtaWM7XG4gICAgICAgIGVsLnNsb3RUYXJnZXQgPSBuYW1lO1xuICAgICAgICBlbC5zbG90VGFyZ2V0RHluYW1pYyA9IGR5bmFtaWM7XG4gICAgICAgIGVsLnNsb3RTY29wZSA9IHNsb3RCaW5kaW5nLnZhbHVlIHx8IGVtcHR5U2xvdFNjb3BlVG9rZW47IC8vIGZvcmNlIGl0IGludG8gYSBzY29wZWQgc2xvdCBmb3IgcGVyZlxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyB2LXNsb3Qgb24gY29tcG9uZW50LCBkZW5vdGVzIGRlZmF1bHQgc2xvdFxuICAgICAgdmFyIHNsb3RCaW5kaW5nJDEgPSBnZXRBbmRSZW1vdmVBdHRyQnlSZWdleChlbCwgc2xvdFJFKTtcbiAgICAgIGlmIChzbG90QmluZGluZyQxKSB7XG4gICAgICAgIHtcbiAgICAgICAgICBpZiAoIW1heWJlQ29tcG9uZW50KGVsKSkge1xuICAgICAgICAgICAgd2FybiQyKFxuICAgICAgICAgICAgICBcInYtc2xvdCBjYW4gb25seSBiZSB1c2VkIG9uIGNvbXBvbmVudHMgb3IgPHRlbXBsYXRlPi5cIixcbiAgICAgICAgICAgICAgc2xvdEJpbmRpbmckMVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGVsLnNsb3RTY29wZSB8fCBlbC5zbG90VGFyZ2V0KSB7XG4gICAgICAgICAgICB3YXJuJDIoXG4gICAgICAgICAgICAgIFwiVW5leHBlY3RlZCBtaXhlZCB1c2FnZSBvZiBkaWZmZXJlbnQgc2xvdCBzeW50YXhlcy5cIixcbiAgICAgICAgICAgICAgZWxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChlbC5zY29wZWRTbG90cykge1xuICAgICAgICAgICAgd2FybiQyKFxuICAgICAgICAgICAgICBcIlRvIGF2b2lkIHNjb3BlIGFtYmlndWl0eSwgdGhlIGRlZmF1bHQgc2xvdCBzaG91bGQgYWxzbyB1c2UgXCIgK1xuICAgICAgICAgICAgICBcIjx0ZW1wbGF0ZT4gc3ludGF4IHdoZW4gdGhlcmUgYXJlIG90aGVyIG5hbWVkIHNsb3RzLlwiLFxuICAgICAgICAgICAgICBzbG90QmluZGluZyQxXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBhZGQgdGhlIGNvbXBvbmVudCdzIGNoaWxkcmVuIHRvIGl0cyBkZWZhdWx0IHNsb3RcbiAgICAgICAgdmFyIHNsb3RzID0gZWwuc2NvcGVkU2xvdHMgfHwgKGVsLnNjb3BlZFNsb3RzID0ge30pO1xuICAgICAgICB2YXIgcmVmJDEgPSBnZXRTbG90TmFtZShzbG90QmluZGluZyQxKTtcbiAgICAgICAgdmFyIG5hbWUkMSA9IHJlZiQxLm5hbWU7XG4gICAgICAgIHZhciBkeW5hbWljJDEgPSByZWYkMS5keW5hbWljO1xuICAgICAgICB2YXIgc2xvdENvbnRhaW5lciA9IHNsb3RzW25hbWUkMV0gPSBjcmVhdGVBU1RFbGVtZW50KCd0ZW1wbGF0ZScsIFtdLCBlbCk7XG4gICAgICAgIHNsb3RDb250YWluZXIuc2xvdFRhcmdldCA9IG5hbWUkMTtcbiAgICAgICAgc2xvdENvbnRhaW5lci5zbG90VGFyZ2V0RHluYW1pYyA9IGR5bmFtaWMkMTtcbiAgICAgICAgc2xvdENvbnRhaW5lci5jaGlsZHJlbiA9IGVsLmNoaWxkcmVuLmZpbHRlcihmdW5jdGlvbiAoYykge1xuICAgICAgICAgIGlmICghYy5zbG90U2NvcGUpIHtcbiAgICAgICAgICAgIGMucGFyZW50ID0gc2xvdENvbnRhaW5lcjtcbiAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgc2xvdENvbnRhaW5lci5zbG90U2NvcGUgPSBzbG90QmluZGluZyQxLnZhbHVlIHx8IGVtcHR5U2xvdFNjb3BlVG9rZW47XG4gICAgICAgIC8vIHJlbW92ZSBjaGlsZHJlbiBhcyB0aGV5IGFyZSByZXR1cm5lZCBmcm9tIHNjb3BlZFNsb3RzIG5vd1xuICAgICAgICBlbC5jaGlsZHJlbiA9IFtdO1xuICAgICAgICAvLyBtYXJrIGVsIG5vbi1wbGFpbiBzbyBkYXRhIGdldHMgZ2VuZXJhdGVkXG4gICAgICAgIGVsLnBsYWluID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGdldFNsb3ROYW1lIChiaW5kaW5nKSB7XG4gIHZhciBuYW1lID0gYmluZGluZy5uYW1lLnJlcGxhY2Uoc2xvdFJFLCAnJyk7XG4gIGlmICghbmFtZSkge1xuICAgIGlmIChiaW5kaW5nLm5hbWVbMF0gIT09ICcjJykge1xuICAgICAgbmFtZSA9ICdkZWZhdWx0JztcbiAgICB9IGVsc2Uge1xuICAgICAgd2FybiQyKFxuICAgICAgICBcInYtc2xvdCBzaG9ydGhhbmQgc3ludGF4IHJlcXVpcmVzIGEgc2xvdCBuYW1lLlwiLFxuICAgICAgICBiaW5kaW5nXG4gICAgICApO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZHluYW1pY0FyZ1JFLnRlc3QobmFtZSlcbiAgICAvLyBkeW5hbWljIFtuYW1lXVxuICAgID8geyBuYW1lOiBuYW1lLnNsaWNlKDEsIC0xKSwgZHluYW1pYzogdHJ1ZSB9XG4gICAgLy8gc3RhdGljIG5hbWVcbiAgICA6IHsgbmFtZTogKFwiXFxcIlwiICsgbmFtZSArIFwiXFxcIlwiKSwgZHluYW1pYzogZmFsc2UgfVxufVxuXG4vLyBoYW5kbGUgPHNsb3QvPiBvdXRsZXRzXG5mdW5jdGlvbiBwcm9jZXNzU2xvdE91dGxldCAoZWwpIHtcbiAgaWYgKGVsLnRhZyA9PT0gJ3Nsb3QnKSB7XG4gICAgZWwuc2xvdE5hbWUgPSBnZXRCaW5kaW5nQXR0cihlbCwgJ25hbWUnKTtcbiAgICBpZiAoZWwua2V5KSB7XG4gICAgICB3YXJuJDIoXG4gICAgICAgIFwiYGtleWAgZG9lcyBub3Qgd29yayBvbiA8c2xvdD4gYmVjYXVzZSBzbG90cyBhcmUgYWJzdHJhY3Qgb3V0bGV0cyBcIiArXG4gICAgICAgIFwiYW5kIGNhbiBwb3NzaWJseSBleHBhbmQgaW50byBtdWx0aXBsZSBlbGVtZW50cy4gXCIgK1xuICAgICAgICBcIlVzZSB0aGUga2V5IG9uIGEgd3JhcHBpbmcgZWxlbWVudCBpbnN0ZWFkLlwiLFxuICAgICAgICBnZXRSYXdCaW5kaW5nQXR0cihlbCwgJ2tleScpXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBwcm9jZXNzQ29tcG9uZW50IChlbCkge1xuICB2YXIgYmluZGluZztcbiAgaWYgKChiaW5kaW5nID0gZ2V0QmluZGluZ0F0dHIoZWwsICdpcycpKSkge1xuICAgIGVsLmNvbXBvbmVudCA9IGJpbmRpbmc7XG4gIH1cbiAgaWYgKGdldEFuZFJlbW92ZUF0dHIoZWwsICdpbmxpbmUtdGVtcGxhdGUnKSAhPSBudWxsKSB7XG4gICAgZWwuaW5saW5lVGVtcGxhdGUgPSB0cnVlO1xuICB9XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NBdHRycyAoZWwpIHtcbiAgdmFyIGxpc3QgPSBlbC5hdHRyc0xpc3Q7XG4gIHZhciBpLCBsLCBuYW1lLCByYXdOYW1lLCB2YWx1ZSwgbW9kaWZpZXJzLCBzeW5jR2VuLCBpc0R5bmFtaWM7XG4gIGZvciAoaSA9IDAsIGwgPSBsaXN0Lmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIG5hbWUgPSByYXdOYW1lID0gbGlzdFtpXS5uYW1lO1xuICAgIHZhbHVlID0gbGlzdFtpXS52YWx1ZTtcbiAgICBpZiAoZGlyUkUudGVzdChuYW1lKSkge1xuICAgICAgLy8gbWFyayBlbGVtZW50IGFzIGR5bmFtaWNcbiAgICAgIGVsLmhhc0JpbmRpbmdzID0gdHJ1ZTtcbiAgICAgIC8vIG1vZGlmaWVyc1xuICAgICAgbW9kaWZpZXJzID0gcGFyc2VNb2RpZmllcnMobmFtZS5yZXBsYWNlKGRpclJFLCAnJykpO1xuICAgICAgLy8gc3VwcG9ydCAuZm9vIHNob3J0aGFuZCBzeW50YXggZm9yIHRoZSAucHJvcCBtb2RpZmllclxuICAgICAgaWYgKG1vZGlmaWVycykge1xuICAgICAgICBuYW1lID0gbmFtZS5yZXBsYWNlKG1vZGlmaWVyUkUsICcnKTtcbiAgICAgIH1cbiAgICAgIGlmIChiaW5kUkUudGVzdChuYW1lKSkgeyAvLyB2LWJpbmRcbiAgICAgICAgbmFtZSA9IG5hbWUucmVwbGFjZShiaW5kUkUsICcnKTtcbiAgICAgICAgdmFsdWUgPSBwYXJzZUZpbHRlcnModmFsdWUpO1xuICAgICAgICBpc0R5bmFtaWMgPSBkeW5hbWljQXJnUkUudGVzdChuYW1lKTtcbiAgICAgICAgaWYgKGlzRHluYW1pYykge1xuICAgICAgICAgIG5hbWUgPSBuYW1lLnNsaWNlKDEsIC0xKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgdmFsdWUudHJpbSgpLmxlbmd0aCA9PT0gMFxuICAgICAgICApIHtcbiAgICAgICAgICB3YXJuJDIoXG4gICAgICAgICAgICAoXCJUaGUgdmFsdWUgZm9yIGEgdi1iaW5kIGV4cHJlc3Npb24gY2Fubm90IGJlIGVtcHR5LiBGb3VuZCBpbiBcXFwidi1iaW5kOlwiICsgbmFtZSArIFwiXFxcIlwiKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1vZGlmaWVycykge1xuICAgICAgICAgIGlmIChtb2RpZmllcnMucHJvcCAmJiAhaXNEeW5hbWljKSB7XG4gICAgICAgICAgICBuYW1lID0gY2FtZWxpemUobmFtZSk7XG4gICAgICAgICAgICBpZiAobmFtZSA9PT0gJ2lubmVySHRtbCcpIHsgbmFtZSA9ICdpbm5lckhUTUwnOyB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChtb2RpZmllcnMuY2FtZWwgJiYgIWlzRHluYW1pYykge1xuICAgICAgICAgICAgbmFtZSA9IGNhbWVsaXplKG5hbWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobW9kaWZpZXJzLnN5bmMpIHtcbiAgICAgICAgICAgIHN5bmNHZW4gPSBnZW5Bc3NpZ25tZW50Q29kZSh2YWx1ZSwgXCIkZXZlbnRcIik7XG4gICAgICAgICAgICBpZiAoIWlzRHluYW1pYykge1xuICAgICAgICAgICAgICBhZGRIYW5kbGVyKFxuICAgICAgICAgICAgICAgIGVsLFxuICAgICAgICAgICAgICAgIChcInVwZGF0ZTpcIiArIChjYW1lbGl6ZShuYW1lKSkpLFxuICAgICAgICAgICAgICAgIHN5bmNHZW4sXG4gICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICAgICB3YXJuJDIsXG4gICAgICAgICAgICAgICAgbGlzdFtpXVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBpZiAoaHlwaGVuYXRlKG5hbWUpICE9PSBjYW1lbGl6ZShuYW1lKSkge1xuICAgICAgICAgICAgICAgIGFkZEhhbmRsZXIoXG4gICAgICAgICAgICAgICAgICBlbCxcbiAgICAgICAgICAgICAgICAgIChcInVwZGF0ZTpcIiArIChoeXBoZW5hdGUobmFtZSkpKSxcbiAgICAgICAgICAgICAgICAgIHN5bmNHZW4sXG4gICAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgICAgICB3YXJuJDIsXG4gICAgICAgICAgICAgICAgICBsaXN0W2ldXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gaGFuZGxlciB3LyBkeW5hbWljIGV2ZW50IG5hbWVcbiAgICAgICAgICAgICAgYWRkSGFuZGxlcihcbiAgICAgICAgICAgICAgICBlbCxcbiAgICAgICAgICAgICAgICAoXCJcXFwidXBkYXRlOlxcXCIrKFwiICsgbmFtZSArIFwiKVwiKSxcbiAgICAgICAgICAgICAgICBzeW5jR2VuLFxuICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgICAgd2FybiQyLFxuICAgICAgICAgICAgICAgIGxpc3RbaV0sXG4gICAgICAgICAgICAgICAgdHJ1ZSAvLyBkeW5hbWljXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICgobW9kaWZpZXJzICYmIG1vZGlmaWVycy5wcm9wKSB8fCAoXG4gICAgICAgICAgIWVsLmNvbXBvbmVudCAmJiBwbGF0Zm9ybU11c3RVc2VQcm9wKGVsLnRhZywgZWwuYXR0cnNNYXAudHlwZSwgbmFtZSlcbiAgICAgICAgKSkge1xuICAgICAgICAgIGFkZFByb3AoZWwsIG5hbWUsIHZhbHVlLCBsaXN0W2ldLCBpc0R5bmFtaWMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFkZEF0dHIoZWwsIG5hbWUsIHZhbHVlLCBsaXN0W2ldLCBpc0R5bmFtaWMpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKG9uUkUudGVzdChuYW1lKSkgeyAvLyB2LW9uXG4gICAgICAgIG5hbWUgPSBuYW1lLnJlcGxhY2Uob25SRSwgJycpO1xuICAgICAgICBpc0R5bmFtaWMgPSBkeW5hbWljQXJnUkUudGVzdChuYW1lKTtcbiAgICAgICAgaWYgKGlzRHluYW1pYykge1xuICAgICAgICAgIG5hbWUgPSBuYW1lLnNsaWNlKDEsIC0xKTtcbiAgICAgICAgfVxuICAgICAgICBhZGRIYW5kbGVyKGVsLCBuYW1lLCB2YWx1ZSwgbW9kaWZpZXJzLCBmYWxzZSwgd2FybiQyLCBsaXN0W2ldLCBpc0R5bmFtaWMpO1xuICAgICAgfSBlbHNlIHsgLy8gbm9ybWFsIGRpcmVjdGl2ZXNcbiAgICAgICAgbmFtZSA9IG5hbWUucmVwbGFjZShkaXJSRSwgJycpO1xuICAgICAgICAvLyBwYXJzZSBhcmdcbiAgICAgICAgdmFyIGFyZ01hdGNoID0gbmFtZS5tYXRjaChhcmdSRSk7XG4gICAgICAgIHZhciBhcmcgPSBhcmdNYXRjaCAmJiBhcmdNYXRjaFsxXTtcbiAgICAgICAgaXNEeW5hbWljID0gZmFsc2U7XG4gICAgICAgIGlmIChhcmcpIHtcbiAgICAgICAgICBuYW1lID0gbmFtZS5zbGljZSgwLCAtKGFyZy5sZW5ndGggKyAxKSk7XG4gICAgICAgICAgaWYgKGR5bmFtaWNBcmdSRS50ZXN0KGFyZykpIHtcbiAgICAgICAgICAgIGFyZyA9IGFyZy5zbGljZSgxLCAtMSk7XG4gICAgICAgICAgICBpc0R5bmFtaWMgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBhZGREaXJlY3RpdmUoZWwsIG5hbWUsIHJhd05hbWUsIHZhbHVlLCBhcmcsIGlzRHluYW1pYywgbW9kaWZpZXJzLCBsaXN0W2ldKTtcbiAgICAgICAgaWYgKG5hbWUgPT09ICdtb2RlbCcpIHtcbiAgICAgICAgICBjaGVja0ZvckFsaWFzTW9kZWwoZWwsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBsaXRlcmFsIGF0dHJpYnV0ZVxuICAgICAge1xuICAgICAgICB2YXIgcmVzID0gcGFyc2VUZXh0KHZhbHVlLCBkZWxpbWl0ZXJzKTtcbiAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgIHdhcm4kMihcbiAgICAgICAgICAgIG5hbWUgKyBcIj1cXFwiXCIgKyB2YWx1ZSArIFwiXFxcIjogXCIgK1xuICAgICAgICAgICAgJ0ludGVycG9sYXRpb24gaW5zaWRlIGF0dHJpYnV0ZXMgaGFzIGJlZW4gcmVtb3ZlZC4gJyArXG4gICAgICAgICAgICAnVXNlIHYtYmluZCBvciB0aGUgY29sb24gc2hvcnRoYW5kIGluc3RlYWQuIEZvciBleGFtcGxlLCAnICtcbiAgICAgICAgICAgICdpbnN0ZWFkIG9mIDxkaXYgaWQ9XCJ7eyB2YWwgfX1cIj4sIHVzZSA8ZGl2IDppZD1cInZhbFwiPi4nLFxuICAgICAgICAgICAgbGlzdFtpXVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGFkZEF0dHIoZWwsIG5hbWUsIEpTT04uc3RyaW5naWZ5KHZhbHVlKSwgbGlzdFtpXSk7XG4gICAgICAvLyAjNjg4NyBmaXJlZm94IGRvZXNuJ3QgdXBkYXRlIG11dGVkIHN0YXRlIGlmIHNldCB2aWEgYXR0cmlidXRlXG4gICAgICAvLyBldmVuIGltbWVkaWF0ZWx5IGFmdGVyIGVsZW1lbnQgY3JlYXRpb25cbiAgICAgIGlmICghZWwuY29tcG9uZW50ICYmXG4gICAgICAgICAgbmFtZSA9PT0gJ211dGVkJyAmJlxuICAgICAgICAgIHBsYXRmb3JtTXVzdFVzZVByb3AoZWwudGFnLCBlbC5hdHRyc01hcC50eXBlLCBuYW1lKSkge1xuICAgICAgICBhZGRQcm9wKGVsLCBuYW1lLCAndHJ1ZScsIGxpc3RbaV0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjaGVja0luRm9yIChlbCkge1xuICB2YXIgcGFyZW50ID0gZWw7XG4gIHdoaWxlIChwYXJlbnQpIHtcbiAgICBpZiAocGFyZW50LmZvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50O1xuICB9XG4gIHJldHVybiBmYWxzZVxufVxuXG5mdW5jdGlvbiBwYXJzZU1vZGlmaWVycyAobmFtZSkge1xuICB2YXIgbWF0Y2ggPSBuYW1lLm1hdGNoKG1vZGlmaWVyUkUpO1xuICBpZiAobWF0Y2gpIHtcbiAgICB2YXIgcmV0ID0ge307XG4gICAgbWF0Y2guZm9yRWFjaChmdW5jdGlvbiAobSkgeyByZXRbbS5zbGljZSgxKV0gPSB0cnVlOyB9KTtcbiAgICByZXR1cm4gcmV0XG4gIH1cbn1cblxuZnVuY3Rpb24gbWFrZUF0dHJzTWFwIChhdHRycykge1xuICB2YXIgbWFwID0ge307XG4gIGZvciAodmFyIGkgPSAwLCBsID0gYXR0cnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgaWYgKFxuICAgICAgbWFwW2F0dHJzW2ldLm5hbWVdICYmICFpc0lFICYmICFpc0VkZ2VcbiAgICApIHtcbiAgICAgIHdhcm4kMignZHVwbGljYXRlIGF0dHJpYnV0ZTogJyArIGF0dHJzW2ldLm5hbWUsIGF0dHJzW2ldKTtcbiAgICB9XG4gICAgbWFwW2F0dHJzW2ldLm5hbWVdID0gYXR0cnNbaV0udmFsdWU7XG4gIH1cbiAgcmV0dXJuIG1hcFxufVxuXG4vLyBmb3Igc2NyaXB0IChlLmcuIHR5cGU9XCJ4L3RlbXBsYXRlXCIpIG9yIHN0eWxlLCBkbyBub3QgZGVjb2RlIGNvbnRlbnRcbmZ1bmN0aW9uIGlzVGV4dFRhZyAoZWwpIHtcbiAgcmV0dXJuIGVsLnRhZyA9PT0gJ3NjcmlwdCcgfHwgZWwudGFnID09PSAnc3R5bGUnXG59XG5cbmZ1bmN0aW9uIGlzRm9yYmlkZGVuVGFnIChlbCkge1xuICByZXR1cm4gKFxuICAgIGVsLnRhZyA9PT0gJ3N0eWxlJyB8fFxuICAgIChlbC50YWcgPT09ICdzY3JpcHQnICYmIChcbiAgICAgICFlbC5hdHRyc01hcC50eXBlIHx8XG4gICAgICBlbC5hdHRyc01hcC50eXBlID09PSAndGV4dC9qYXZhc2NyaXB0J1xuICAgICkpXG4gIClcbn1cblxudmFyIGllTlNCdWcgPSAvXnhtbG5zOk5TXFxkKy87XG52YXIgaWVOU1ByZWZpeCA9IC9eTlNcXGQrOi87XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5mdW5jdGlvbiBndWFyZElFU1ZHQnVnIChhdHRycykge1xuICB2YXIgcmVzID0gW107XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cnMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgYXR0ciA9IGF0dHJzW2ldO1xuICAgIGlmICghaWVOU0J1Zy50ZXN0KGF0dHIubmFtZSkpIHtcbiAgICAgIGF0dHIubmFtZSA9IGF0dHIubmFtZS5yZXBsYWNlKGllTlNQcmVmaXgsICcnKTtcbiAgICAgIHJlcy5wdXNoKGF0dHIpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbmZ1bmN0aW9uIGNoZWNrRm9yQWxpYXNNb2RlbCAoZWwsIHZhbHVlKSB7XG4gIHZhciBfZWwgPSBlbDtcbiAgd2hpbGUgKF9lbCkge1xuICAgIGlmIChfZWwuZm9yICYmIF9lbC5hbGlhcyA9PT0gdmFsdWUpIHtcbiAgICAgIHdhcm4kMihcbiAgICAgICAgXCI8XCIgKyAoZWwudGFnKSArIFwiIHYtbW9kZWw9XFxcIlwiICsgdmFsdWUgKyBcIlxcXCI+OiBcIiArXG4gICAgICAgIFwiWW91IGFyZSBiaW5kaW5nIHYtbW9kZWwgZGlyZWN0bHkgdG8gYSB2LWZvciBpdGVyYXRpb24gYWxpYXMuIFwiICtcbiAgICAgICAgXCJUaGlzIHdpbGwgbm90IGJlIGFibGUgdG8gbW9kaWZ5IHRoZSB2LWZvciBzb3VyY2UgYXJyYXkgYmVjYXVzZSBcIiArXG4gICAgICAgIFwid3JpdGluZyB0byB0aGUgYWxpYXMgaXMgbGlrZSBtb2RpZnlpbmcgYSBmdW5jdGlvbiBsb2NhbCB2YXJpYWJsZS4gXCIgK1xuICAgICAgICBcIkNvbnNpZGVyIHVzaW5nIGFuIGFycmF5IG9mIG9iamVjdHMgYW5kIHVzZSB2LW1vZGVsIG9uIGFuIG9iamVjdCBwcm9wZXJ0eSBpbnN0ZWFkLlwiLFxuICAgICAgICBlbC5yYXdBdHRyc01hcFsndi1tb2RlbCddXG4gICAgICApO1xuICAgIH1cbiAgICBfZWwgPSBfZWwucGFyZW50O1xuICB9XG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBwcmVUcmFuc2Zvcm1Ob2RlIChlbCwgb3B0aW9ucykge1xuICBpZiAoZWwudGFnID09PSAnaW5wdXQnKSB7XG4gICAgdmFyIG1hcCA9IGVsLmF0dHJzTWFwO1xuICAgIGlmICghbWFwWyd2LW1vZGVsJ10pIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHZhciB0eXBlQmluZGluZztcbiAgICBpZiAobWFwWyc6dHlwZSddIHx8IG1hcFsndi1iaW5kOnR5cGUnXSkge1xuICAgICAgdHlwZUJpbmRpbmcgPSBnZXRCaW5kaW5nQXR0cihlbCwgJ3R5cGUnKTtcbiAgICB9XG4gICAgaWYgKCFtYXAudHlwZSAmJiAhdHlwZUJpbmRpbmcgJiYgbWFwWyd2LWJpbmQnXSkge1xuICAgICAgdHlwZUJpbmRpbmcgPSBcIihcIiArIChtYXBbJ3YtYmluZCddKSArIFwiKS50eXBlXCI7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVCaW5kaW5nKSB7XG4gICAgICB2YXIgaWZDb25kaXRpb24gPSBnZXRBbmRSZW1vdmVBdHRyKGVsLCAndi1pZicsIHRydWUpO1xuICAgICAgdmFyIGlmQ29uZGl0aW9uRXh0cmEgPSBpZkNvbmRpdGlvbiA/IChcIiYmKFwiICsgaWZDb25kaXRpb24gKyBcIilcIikgOiBcIlwiO1xuICAgICAgdmFyIGhhc0Vsc2UgPSBnZXRBbmRSZW1vdmVBdHRyKGVsLCAndi1lbHNlJywgdHJ1ZSkgIT0gbnVsbDtcbiAgICAgIHZhciBlbHNlSWZDb25kaXRpb24gPSBnZXRBbmRSZW1vdmVBdHRyKGVsLCAndi1lbHNlLWlmJywgdHJ1ZSk7XG4gICAgICAvLyAxLiBjaGVja2JveFxuICAgICAgdmFyIGJyYW5jaDAgPSBjbG9uZUFTVEVsZW1lbnQoZWwpO1xuICAgICAgLy8gcHJvY2VzcyBmb3Igb24gdGhlIG1haW4gbm9kZVxuICAgICAgcHJvY2Vzc0ZvcihicmFuY2gwKTtcbiAgICAgIGFkZFJhd0F0dHIoYnJhbmNoMCwgJ3R5cGUnLCAnY2hlY2tib3gnKTtcbiAgICAgIHByb2Nlc3NFbGVtZW50KGJyYW5jaDAsIG9wdGlvbnMpO1xuICAgICAgYnJhbmNoMC5wcm9jZXNzZWQgPSB0cnVlOyAvLyBwcmV2ZW50IGl0IGZyb20gZG91YmxlLXByb2Nlc3NlZFxuICAgICAgYnJhbmNoMC5pZiA9IFwiKFwiICsgdHlwZUJpbmRpbmcgKyBcIik9PT0nY2hlY2tib3gnXCIgKyBpZkNvbmRpdGlvbkV4dHJhO1xuICAgICAgYWRkSWZDb25kaXRpb24oYnJhbmNoMCwge1xuICAgICAgICBleHA6IGJyYW5jaDAuaWYsXG4gICAgICAgIGJsb2NrOiBicmFuY2gwXG4gICAgICB9KTtcbiAgICAgIC8vIDIuIGFkZCByYWRpbyBlbHNlLWlmIGNvbmRpdGlvblxuICAgICAgdmFyIGJyYW5jaDEgPSBjbG9uZUFTVEVsZW1lbnQoZWwpO1xuICAgICAgZ2V0QW5kUmVtb3ZlQXR0cihicmFuY2gxLCAndi1mb3InLCB0cnVlKTtcbiAgICAgIGFkZFJhd0F0dHIoYnJhbmNoMSwgJ3R5cGUnLCAncmFkaW8nKTtcbiAgICAgIHByb2Nlc3NFbGVtZW50KGJyYW5jaDEsIG9wdGlvbnMpO1xuICAgICAgYWRkSWZDb25kaXRpb24oYnJhbmNoMCwge1xuICAgICAgICBleHA6IFwiKFwiICsgdHlwZUJpbmRpbmcgKyBcIik9PT0ncmFkaW8nXCIgKyBpZkNvbmRpdGlvbkV4dHJhLFxuICAgICAgICBibG9jazogYnJhbmNoMVxuICAgICAgfSk7XG4gICAgICAvLyAzLiBvdGhlclxuICAgICAgdmFyIGJyYW5jaDIgPSBjbG9uZUFTVEVsZW1lbnQoZWwpO1xuICAgICAgZ2V0QW5kUmVtb3ZlQXR0cihicmFuY2gyLCAndi1mb3InLCB0cnVlKTtcbiAgICAgIGFkZFJhd0F0dHIoYnJhbmNoMiwgJzp0eXBlJywgdHlwZUJpbmRpbmcpO1xuICAgICAgcHJvY2Vzc0VsZW1lbnQoYnJhbmNoMiwgb3B0aW9ucyk7XG4gICAgICBhZGRJZkNvbmRpdGlvbihicmFuY2gwLCB7XG4gICAgICAgIGV4cDogaWZDb25kaXRpb24sXG4gICAgICAgIGJsb2NrOiBicmFuY2gyXG4gICAgICB9KTtcblxuICAgICAgaWYgKGhhc0Vsc2UpIHtcbiAgICAgICAgYnJhbmNoMC5lbHNlID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAoZWxzZUlmQ29uZGl0aW9uKSB7XG4gICAgICAgIGJyYW5jaDAuZWxzZWlmID0gZWxzZUlmQ29uZGl0aW9uO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYnJhbmNoMFxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjbG9uZUFTVEVsZW1lbnQgKGVsKSB7XG4gIHJldHVybiBjcmVhdGVBU1RFbGVtZW50KGVsLnRhZywgZWwuYXR0cnNMaXN0LnNsaWNlKCksIGVsLnBhcmVudClcbn1cblxudmFyIG1vZGVsJDEgPSB7XG4gIHByZVRyYW5zZm9ybU5vZGU6IHByZVRyYW5zZm9ybU5vZGVcbn07XG5cbnZhciBtb2R1bGVzJDEgPSBbXG4gIGtsYXNzJDEsXG4gIHN0eWxlJDEsXG4gIG1vZGVsJDFcbl07XG5cbi8qICAqL1xuXG5mdW5jdGlvbiB0ZXh0IChlbCwgZGlyKSB7XG4gIGlmIChkaXIudmFsdWUpIHtcbiAgICBhZGRQcm9wKGVsLCAndGV4dENvbnRlbnQnLCAoXCJfcyhcIiArIChkaXIudmFsdWUpICsgXCIpXCIpLCBkaXIpO1xuICB9XG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBodG1sIChlbCwgZGlyKSB7XG4gIGlmIChkaXIudmFsdWUpIHtcbiAgICBhZGRQcm9wKGVsLCAnaW5uZXJIVE1MJywgKFwiX3MoXCIgKyAoZGlyLnZhbHVlKSArIFwiKVwiKSwgZGlyKTtcbiAgfVxufVxuXG52YXIgZGlyZWN0aXZlcyQxID0ge1xuICBtb2RlbDogbW9kZWwsXG4gIHRleHQ6IHRleHQsXG4gIGh0bWw6IGh0bWxcbn07XG5cbi8qICAqL1xuXG52YXIgYmFzZU9wdGlvbnMgPSB7XG4gIGV4cGVjdEhUTUw6IHRydWUsXG4gIG1vZHVsZXM6IG1vZHVsZXMkMSxcbiAgZGlyZWN0aXZlczogZGlyZWN0aXZlcyQxLFxuICBpc1ByZVRhZzogaXNQcmVUYWcsXG4gIGlzVW5hcnlUYWc6IGlzVW5hcnlUYWcsXG4gIG11c3RVc2VQcm9wOiBtdXN0VXNlUHJvcCxcbiAgY2FuQmVMZWZ0T3BlblRhZzogY2FuQmVMZWZ0T3BlblRhZyxcbiAgaXNSZXNlcnZlZFRhZzogaXNSZXNlcnZlZFRhZyxcbiAgZ2V0VGFnTmFtZXNwYWNlOiBnZXRUYWdOYW1lc3BhY2UsXG4gIHN0YXRpY0tleXM6IGdlblN0YXRpY0tleXMobW9kdWxlcyQxKVxufTtcblxuLyogICovXG5cbnZhciBpc1N0YXRpY0tleTtcbnZhciBpc1BsYXRmb3JtUmVzZXJ2ZWRUYWc7XG5cbnZhciBnZW5TdGF0aWNLZXlzQ2FjaGVkID0gY2FjaGVkKGdlblN0YXRpY0tleXMkMSk7XG5cbi8qKlxuICogR29hbCBvZiB0aGUgb3B0aW1pemVyOiB3YWxrIHRoZSBnZW5lcmF0ZWQgdGVtcGxhdGUgQVNUIHRyZWVcbiAqIGFuZCBkZXRlY3Qgc3ViLXRyZWVzIHRoYXQgYXJlIHB1cmVseSBzdGF0aWMsIGkuZS4gcGFydHMgb2ZcbiAqIHRoZSBET00gdGhhdCBuZXZlciBuZWVkcyB0byBjaGFuZ2UuXG4gKlxuICogT25jZSB3ZSBkZXRlY3QgdGhlc2Ugc3ViLXRyZWVzLCB3ZSBjYW46XG4gKlxuICogMS4gSG9pc3QgdGhlbSBpbnRvIGNvbnN0YW50cywgc28gdGhhdCB3ZSBubyBsb25nZXIgbmVlZCB0b1xuICogICAgY3JlYXRlIGZyZXNoIG5vZGVzIGZvciB0aGVtIG9uIGVhY2ggcmUtcmVuZGVyO1xuICogMi4gQ29tcGxldGVseSBza2lwIHRoZW0gaW4gdGhlIHBhdGNoaW5nIHByb2Nlc3MuXG4gKi9cbmZ1bmN0aW9uIG9wdGltaXplIChyb290LCBvcHRpb25zKSB7XG4gIGlmICghcm9vdCkgeyByZXR1cm4gfVxuICBpc1N0YXRpY0tleSA9IGdlblN0YXRpY0tleXNDYWNoZWQob3B0aW9ucy5zdGF0aWNLZXlzIHx8ICcnKTtcbiAgaXNQbGF0Zm9ybVJlc2VydmVkVGFnID0gb3B0aW9ucy5pc1Jlc2VydmVkVGFnIHx8IG5vO1xuICAvLyBmaXJzdCBwYXNzOiBtYXJrIGFsbCBub24tc3RhdGljIG5vZGVzLlxuICBtYXJrU3RhdGljJDEocm9vdCk7XG4gIC8vIHNlY29uZCBwYXNzOiBtYXJrIHN0YXRpYyByb290cy5cbiAgbWFya1N0YXRpY1Jvb3RzKHJvb3QsIGZhbHNlKTtcbn1cblxuZnVuY3Rpb24gZ2VuU3RhdGljS2V5cyQxIChrZXlzKSB7XG4gIHJldHVybiBtYWtlTWFwKFxuICAgICd0eXBlLHRhZyxhdHRyc0xpc3QsYXR0cnNNYXAscGxhaW4scGFyZW50LGNoaWxkcmVuLGF0dHJzLHN0YXJ0LGVuZCxyYXdBdHRyc01hcCcgK1xuICAgIChrZXlzID8gJywnICsga2V5cyA6ICcnKVxuICApXG59XG5cbmZ1bmN0aW9uIG1hcmtTdGF0aWMkMSAobm9kZSkge1xuICBub2RlLnN0YXRpYyA9IGlzU3RhdGljKG5vZGUpO1xuICBpZiAobm9kZS50eXBlID09PSAxKSB7XG4gICAgLy8gZG8gbm90IG1ha2UgY29tcG9uZW50IHNsb3QgY29udGVudCBzdGF0aWMuIHRoaXMgYXZvaWRzXG4gICAgLy8gMS4gY29tcG9uZW50cyBub3QgYWJsZSB0byBtdXRhdGUgc2xvdCBub2Rlc1xuICAgIC8vIDIuIHN0YXRpYyBzbG90IGNvbnRlbnQgZmFpbHMgZm9yIGhvdC1yZWxvYWRpbmdcbiAgICBpZiAoXG4gICAgICAhaXNQbGF0Zm9ybVJlc2VydmVkVGFnKG5vZGUudGFnKSAmJlxuICAgICAgbm9kZS50YWcgIT09ICdzbG90JyAmJlxuICAgICAgbm9kZS5hdHRyc01hcFsnaW5saW5lLXRlbXBsYXRlJ10gPT0gbnVsbFxuICAgICkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwLCBsID0gbm9kZS5jaGlsZHJlbi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIHZhciBjaGlsZCA9IG5vZGUuY2hpbGRyZW5baV07XG4gICAgICBtYXJrU3RhdGljJDEoY2hpbGQpO1xuICAgICAgaWYgKCFjaGlsZC5zdGF0aWMpIHtcbiAgICAgICAgbm9kZS5zdGF0aWMgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKG5vZGUuaWZDb25kaXRpb25zKSB7XG4gICAgICBmb3IgKHZhciBpJDEgPSAxLCBsJDEgPSBub2RlLmlmQ29uZGl0aW9ucy5sZW5ndGg7IGkkMSA8IGwkMTsgaSQxKyspIHtcbiAgICAgICAgdmFyIGJsb2NrID0gbm9kZS5pZkNvbmRpdGlvbnNbaSQxXS5ibG9jaztcbiAgICAgICAgbWFya1N0YXRpYyQxKGJsb2NrKTtcbiAgICAgICAgaWYgKCFibG9jay5zdGF0aWMpIHtcbiAgICAgICAgICBub2RlLnN0YXRpYyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIG1hcmtTdGF0aWNSb290cyAobm9kZSwgaXNJbkZvcikge1xuICBpZiAobm9kZS50eXBlID09PSAxKSB7XG4gICAgaWYgKG5vZGUuc3RhdGljIHx8IG5vZGUub25jZSkge1xuICAgICAgbm9kZS5zdGF0aWNJbkZvciA9IGlzSW5Gb3I7XG4gICAgfVxuICAgIC8vIEZvciBhIG5vZGUgdG8gcXVhbGlmeSBhcyBhIHN0YXRpYyByb290LCBpdCBzaG91bGQgaGF2ZSBjaGlsZHJlbiB0aGF0XG4gICAgLy8gYXJlIG5vdCBqdXN0IHN0YXRpYyB0ZXh0LiBPdGhlcndpc2UgdGhlIGNvc3Qgb2YgaG9pc3Rpbmcgb3V0IHdpbGxcbiAgICAvLyBvdXR3ZWlnaCB0aGUgYmVuZWZpdHMgYW5kIGl0J3MgYmV0dGVyIG9mZiB0byBqdXN0IGFsd2F5cyByZW5kZXIgaXQgZnJlc2guXG4gICAgaWYgKG5vZGUuc3RhdGljICYmIG5vZGUuY2hpbGRyZW4ubGVuZ3RoICYmICEoXG4gICAgICBub2RlLmNoaWxkcmVuLmxlbmd0aCA9PT0gMSAmJlxuICAgICAgbm9kZS5jaGlsZHJlblswXS50eXBlID09PSAzXG4gICAgKSkge1xuICAgICAgbm9kZS5zdGF0aWNSb290ID0gdHJ1ZTtcbiAgICAgIHJldHVyblxuICAgIH0gZWxzZSB7XG4gICAgICBub2RlLnN0YXRpY1Jvb3QgPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gbm9kZS5jaGlsZHJlbi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgbWFya1N0YXRpY1Jvb3RzKG5vZGUuY2hpbGRyZW5baV0sIGlzSW5Gb3IgfHwgISFub2RlLmZvcik7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChub2RlLmlmQ29uZGl0aW9ucykge1xuICAgICAgZm9yICh2YXIgaSQxID0gMSwgbCQxID0gbm9kZS5pZkNvbmRpdGlvbnMubGVuZ3RoOyBpJDEgPCBsJDE7IGkkMSsrKSB7XG4gICAgICAgIG1hcmtTdGF0aWNSb290cyhub2RlLmlmQ29uZGl0aW9uc1tpJDFdLmJsb2NrLCBpc0luRm9yKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNTdGF0aWMgKG5vZGUpIHtcbiAgaWYgKG5vZGUudHlwZSA9PT0gMikgeyAvLyBleHByZXNzaW9uXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgaWYgKG5vZGUudHlwZSA9PT0gMykgeyAvLyB0ZXh0XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuICByZXR1cm4gISEobm9kZS5wcmUgfHwgKFxuICAgICFub2RlLmhhc0JpbmRpbmdzICYmIC8vIG5vIGR5bmFtaWMgYmluZGluZ3NcbiAgICAhbm9kZS5pZiAmJiAhbm9kZS5mb3IgJiYgLy8gbm90IHYtaWYgb3Igdi1mb3Igb3Igdi1lbHNlXG4gICAgIWlzQnVpbHRJblRhZyhub2RlLnRhZykgJiYgLy8gbm90IGEgYnVpbHQtaW5cbiAgICBpc1BsYXRmb3JtUmVzZXJ2ZWRUYWcobm9kZS50YWcpICYmIC8vIG5vdCBhIGNvbXBvbmVudFxuICAgICFpc0RpcmVjdENoaWxkT2ZUZW1wbGF0ZUZvcihub2RlKSAmJlxuICAgIE9iamVjdC5rZXlzKG5vZGUpLmV2ZXJ5KGlzU3RhdGljS2V5KVxuICApKVxufVxuXG5mdW5jdGlvbiBpc0RpcmVjdENoaWxkT2ZUZW1wbGF0ZUZvciAobm9kZSkge1xuICB3aGlsZSAobm9kZS5wYXJlbnQpIHtcbiAgICBub2RlID0gbm9kZS5wYXJlbnQ7XG4gICAgaWYgKG5vZGUudGFnICE9PSAndGVtcGxhdGUnKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gICAgaWYgKG5vZGUuZm9yKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2Vcbn1cblxuLyogICovXG5cbnZhciBmbkV4cFJFID0gL14oW1xcdyRfXSt8XFwoW14pXSo/XFwpKVxccyo9PnxeZnVuY3Rpb25cXHMqKD86W1xcdyRdKyk/XFxzKlxcKC87XG52YXIgZm5JbnZva2VSRSA9IC9cXChbXildKj9cXCk7KiQvO1xudmFyIHNpbXBsZVBhdGhSRSA9IC9eW0EtWmEtel8kXVtcXHckXSooPzpcXC5bQS1aYS16XyRdW1xcdyRdKnxcXFsnW14nXSo/J118XFxbXCJbXlwiXSo/XCJdfFxcW1xcZCtdfFxcW1tBLVphLXpfJF1bXFx3JF0qXSkqJC87XG5cbi8vIEtleWJvYXJkRXZlbnQua2V5Q29kZSBhbGlhc2VzXG52YXIga2V5Q29kZXMgPSB7XG4gIGVzYzogMjcsXG4gIHRhYjogOSxcbiAgZW50ZXI6IDEzLFxuICBzcGFjZTogMzIsXG4gIHVwOiAzOCxcbiAgbGVmdDogMzcsXG4gIHJpZ2h0OiAzOSxcbiAgZG93bjogNDAsXG4gICdkZWxldGUnOiBbOCwgNDZdXG59O1xuXG4vLyBLZXlib2FyZEV2ZW50LmtleSBhbGlhc2VzXG52YXIga2V5TmFtZXMgPSB7XG4gIC8vICM3ODgwOiBJRTExIGFuZCBFZGdlIHVzZSBgRXNjYCBmb3IgRXNjYXBlIGtleSBuYW1lLlxuICBlc2M6IFsnRXNjJywgJ0VzY2FwZSddLFxuICB0YWI6ICdUYWInLFxuICBlbnRlcjogJ0VudGVyJyxcbiAgLy8gIzkxMTI6IElFMTEgdXNlcyBgU3BhY2ViYXJgIGZvciBTcGFjZSBrZXkgbmFtZS5cbiAgc3BhY2U6IFsnICcsICdTcGFjZWJhciddLFxuICAvLyAjNzgwNjogSUUxMSB1c2VzIGtleSBuYW1lcyB3aXRob3V0IGBBcnJvd2AgcHJlZml4IGZvciBhcnJvdyBrZXlzLlxuICB1cDogWydVcCcsICdBcnJvd1VwJ10sXG4gIGxlZnQ6IFsnTGVmdCcsICdBcnJvd0xlZnQnXSxcbiAgcmlnaHQ6IFsnUmlnaHQnLCAnQXJyb3dSaWdodCddLFxuICBkb3duOiBbJ0Rvd24nLCAnQXJyb3dEb3duJ10sXG4gIC8vICM5MTEyOiBJRTExIHVzZXMgYERlbGAgZm9yIERlbGV0ZSBrZXkgbmFtZS5cbiAgJ2RlbGV0ZSc6IFsnQmFja3NwYWNlJywgJ0RlbGV0ZScsICdEZWwnXVxufTtcblxuLy8gIzQ4Njg6IG1vZGlmaWVycyB0aGF0IHByZXZlbnQgdGhlIGV4ZWN1dGlvbiBvZiB0aGUgbGlzdGVuZXJcbi8vIG5lZWQgdG8gZXhwbGljaXRseSByZXR1cm4gbnVsbCBzbyB0aGF0IHdlIGNhbiBkZXRlcm1pbmUgd2hldGhlciB0byByZW1vdmVcbi8vIHRoZSBsaXN0ZW5lciBmb3IgLm9uY2VcbnZhciBnZW5HdWFyZCA9IGZ1bmN0aW9uIChjb25kaXRpb24pIHsgcmV0dXJuIChcImlmKFwiICsgY29uZGl0aW9uICsgXCIpcmV0dXJuIG51bGw7XCIpOyB9O1xuXG52YXIgbW9kaWZpZXJDb2RlID0ge1xuICBzdG9wOiAnJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOycsXG4gIHByZXZlbnQ6ICckZXZlbnQucHJldmVudERlZmF1bHQoKTsnLFxuICBzZWxmOiBnZW5HdWFyZChcIiRldmVudC50YXJnZXQgIT09ICRldmVudC5jdXJyZW50VGFyZ2V0XCIpLFxuICBjdHJsOiBnZW5HdWFyZChcIiEkZXZlbnQuY3RybEtleVwiKSxcbiAgc2hpZnQ6IGdlbkd1YXJkKFwiISRldmVudC5zaGlmdEtleVwiKSxcbiAgYWx0OiBnZW5HdWFyZChcIiEkZXZlbnQuYWx0S2V5XCIpLFxuICBtZXRhOiBnZW5HdWFyZChcIiEkZXZlbnQubWV0YUtleVwiKSxcbiAgbGVmdDogZ2VuR3VhcmQoXCInYnV0dG9uJyBpbiAkZXZlbnQgJiYgJGV2ZW50LmJ1dHRvbiAhPT0gMFwiKSxcbiAgbWlkZGxlOiBnZW5HdWFyZChcIididXR0b24nIGluICRldmVudCAmJiAkZXZlbnQuYnV0dG9uICE9PSAxXCIpLFxuICByaWdodDogZ2VuR3VhcmQoXCInYnV0dG9uJyBpbiAkZXZlbnQgJiYgJGV2ZW50LmJ1dHRvbiAhPT0gMlwiKVxufTtcblxuZnVuY3Rpb24gZ2VuSGFuZGxlcnMgKFxuICBldmVudHMsXG4gIGlzTmF0aXZlXG4pIHtcbiAgdmFyIHByZWZpeCA9IGlzTmF0aXZlID8gJ25hdGl2ZU9uOicgOiAnb246JztcbiAgdmFyIHN0YXRpY0hhbmRsZXJzID0gXCJcIjtcbiAgdmFyIGR5bmFtaWNIYW5kbGVycyA9IFwiXCI7XG4gIGZvciAodmFyIG5hbWUgaW4gZXZlbnRzKSB7XG4gICAgdmFyIGhhbmRsZXJDb2RlID0gZ2VuSGFuZGxlcihldmVudHNbbmFtZV0pO1xuICAgIGlmIChldmVudHNbbmFtZV0gJiYgZXZlbnRzW25hbWVdLmR5bmFtaWMpIHtcbiAgICAgIGR5bmFtaWNIYW5kbGVycyArPSBuYW1lICsgXCIsXCIgKyBoYW5kbGVyQ29kZSArIFwiLFwiO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0aWNIYW5kbGVycyArPSBcIlxcXCJcIiArIG5hbWUgKyBcIlxcXCI6XCIgKyBoYW5kbGVyQ29kZSArIFwiLFwiO1xuICAgIH1cbiAgfVxuICBzdGF0aWNIYW5kbGVycyA9IFwie1wiICsgKHN0YXRpY0hhbmRsZXJzLnNsaWNlKDAsIC0xKSkgKyBcIn1cIjtcbiAgaWYgKGR5bmFtaWNIYW5kbGVycykge1xuICAgIHJldHVybiBwcmVmaXggKyBcIl9kKFwiICsgc3RhdGljSGFuZGxlcnMgKyBcIixbXCIgKyAoZHluYW1pY0hhbmRsZXJzLnNsaWNlKDAsIC0xKSkgKyBcIl0pXCJcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gcHJlZml4ICsgc3RhdGljSGFuZGxlcnNcbiAgfVxufVxuXG5mdW5jdGlvbiBnZW5IYW5kbGVyIChoYW5kbGVyKSB7XG4gIGlmICghaGFuZGxlcikge1xuICAgIHJldHVybiAnZnVuY3Rpb24oKXt9J1xuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkoaGFuZGxlcikpIHtcbiAgICByZXR1cm4gKFwiW1wiICsgKGhhbmRsZXIubWFwKGZ1bmN0aW9uIChoYW5kbGVyKSB7IHJldHVybiBnZW5IYW5kbGVyKGhhbmRsZXIpOyB9KS5qb2luKCcsJykpICsgXCJdXCIpXG4gIH1cblxuICB2YXIgaXNNZXRob2RQYXRoID0gc2ltcGxlUGF0aFJFLnRlc3QoaGFuZGxlci52YWx1ZSk7XG4gIHZhciBpc0Z1bmN0aW9uRXhwcmVzc2lvbiA9IGZuRXhwUkUudGVzdChoYW5kbGVyLnZhbHVlKTtcbiAgdmFyIGlzRnVuY3Rpb25JbnZvY2F0aW9uID0gc2ltcGxlUGF0aFJFLnRlc3QoaGFuZGxlci52YWx1ZS5yZXBsYWNlKGZuSW52b2tlUkUsICcnKSk7XG5cbiAgaWYgKCFoYW5kbGVyLm1vZGlmaWVycykge1xuICAgIGlmIChpc01ldGhvZFBhdGggfHwgaXNGdW5jdGlvbkV4cHJlc3Npb24pIHtcbiAgICAgIHJldHVybiBoYW5kbGVyLnZhbHVlXG4gICAgfVxuICAgIHJldHVybiAoXCJmdW5jdGlvbigkZXZlbnQpe1wiICsgKGlzRnVuY3Rpb25JbnZvY2F0aW9uID8gKFwicmV0dXJuIFwiICsgKGhhbmRsZXIudmFsdWUpKSA6IGhhbmRsZXIudmFsdWUpICsgXCJ9XCIpIC8vIGlubGluZSBzdGF0ZW1lbnRcbiAgfSBlbHNlIHtcbiAgICB2YXIgY29kZSA9ICcnO1xuICAgIHZhciBnZW5Nb2RpZmllckNvZGUgPSAnJztcbiAgICB2YXIga2V5cyA9IFtdO1xuICAgIGZvciAodmFyIGtleSBpbiBoYW5kbGVyLm1vZGlmaWVycykge1xuICAgICAgaWYgKG1vZGlmaWVyQ29kZVtrZXldKSB7XG4gICAgICAgIGdlbk1vZGlmaWVyQ29kZSArPSBtb2RpZmllckNvZGVba2V5XTtcbiAgICAgICAgLy8gbGVmdC9yaWdodFxuICAgICAgICBpZiAoa2V5Q29kZXNba2V5XSkge1xuICAgICAgICAgIGtleXMucHVzaChrZXkpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ2V4YWN0Jykge1xuICAgICAgICB2YXIgbW9kaWZpZXJzID0gKGhhbmRsZXIubW9kaWZpZXJzKTtcbiAgICAgICAgZ2VuTW9kaWZpZXJDb2RlICs9IGdlbkd1YXJkKFxuICAgICAgICAgIFsnY3RybCcsICdzaGlmdCcsICdhbHQnLCAnbWV0YSddXG4gICAgICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uIChrZXlNb2RpZmllcikgeyByZXR1cm4gIW1vZGlmaWVyc1trZXlNb2RpZmllcl07IH0pXG4gICAgICAgICAgICAubWFwKGZ1bmN0aW9uIChrZXlNb2RpZmllcikgeyByZXR1cm4gKFwiJGV2ZW50LlwiICsga2V5TW9kaWZpZXIgKyBcIktleVwiKTsgfSlcbiAgICAgICAgICAgIC5qb2luKCd8fCcpXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBrZXlzLnB1c2goa2V5KTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGtleXMubGVuZ3RoKSB7XG4gICAgICBjb2RlICs9IGdlbktleUZpbHRlcihrZXlzKTtcbiAgICB9XG4gICAgLy8gTWFrZSBzdXJlIG1vZGlmaWVycyBsaWtlIHByZXZlbnQgYW5kIHN0b3AgZ2V0IGV4ZWN1dGVkIGFmdGVyIGtleSBmaWx0ZXJpbmdcbiAgICBpZiAoZ2VuTW9kaWZpZXJDb2RlKSB7XG4gICAgICBjb2RlICs9IGdlbk1vZGlmaWVyQ29kZTtcbiAgICB9XG4gICAgdmFyIGhhbmRsZXJDb2RlID0gaXNNZXRob2RQYXRoXG4gICAgICA/IChcInJldHVybiBcIiArIChoYW5kbGVyLnZhbHVlKSArIFwiKCRldmVudClcIilcbiAgICAgIDogaXNGdW5jdGlvbkV4cHJlc3Npb25cbiAgICAgICAgPyAoXCJyZXR1cm4gKFwiICsgKGhhbmRsZXIudmFsdWUpICsgXCIpKCRldmVudClcIilcbiAgICAgICAgOiBpc0Z1bmN0aW9uSW52b2NhdGlvblxuICAgICAgICAgID8gKFwicmV0dXJuIFwiICsgKGhhbmRsZXIudmFsdWUpKVxuICAgICAgICAgIDogaGFuZGxlci52YWx1ZTtcbiAgICByZXR1cm4gKFwiZnVuY3Rpb24oJGV2ZW50KXtcIiArIGNvZGUgKyBoYW5kbGVyQ29kZSArIFwifVwiKVxuICB9XG59XG5cbmZ1bmN0aW9uIGdlbktleUZpbHRlciAoa2V5cykge1xuICByZXR1cm4gKFxuICAgIC8vIG1ha2Ugc3VyZSB0aGUga2V5IGZpbHRlcnMgb25seSBhcHBseSB0byBLZXlib2FyZEV2ZW50c1xuICAgIC8vICM5NDQxOiBjYW4ndCB1c2UgJ2tleUNvZGUnIGluICRldmVudCBiZWNhdXNlIENocm9tZSBhdXRvZmlsbCBmaXJlcyBmYWtlXG4gICAgLy8ga2V5IGV2ZW50cyB0aGF0IGRvIG5vdCBoYXZlIGtleUNvZGUgcHJvcGVydHkuLi5cbiAgICBcImlmKCEkZXZlbnQudHlwZS5pbmRleE9mKCdrZXknKSYmXCIgK1xuICAgIChrZXlzLm1hcChnZW5GaWx0ZXJDb2RlKS5qb2luKCcmJicpKSArIFwiKXJldHVybiBudWxsO1wiXG4gIClcbn1cblxuZnVuY3Rpb24gZ2VuRmlsdGVyQ29kZSAoa2V5KSB7XG4gIHZhciBrZXlWYWwgPSBwYXJzZUludChrZXksIDEwKTtcbiAgaWYgKGtleVZhbCkge1xuICAgIHJldHVybiAoXCIkZXZlbnQua2V5Q29kZSE9PVwiICsga2V5VmFsKVxuICB9XG4gIHZhciBrZXlDb2RlID0ga2V5Q29kZXNba2V5XTtcbiAgdmFyIGtleU5hbWUgPSBrZXlOYW1lc1trZXldO1xuICByZXR1cm4gKFxuICAgIFwiX2soJGV2ZW50LmtleUNvZGUsXCIgK1xuICAgIChKU09OLnN0cmluZ2lmeShrZXkpKSArIFwiLFwiICtcbiAgICAoSlNPTi5zdHJpbmdpZnkoa2V5Q29kZSkpICsgXCIsXCIgK1xuICAgIFwiJGV2ZW50LmtleSxcIiArXG4gICAgXCJcIiArIChKU09OLnN0cmluZ2lmeShrZXlOYW1lKSkgK1xuICAgIFwiKVwiXG4gIClcbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIG9uIChlbCwgZGlyKSB7XG4gIGlmIChkaXIubW9kaWZpZXJzKSB7XG4gICAgd2FybihcInYtb24gd2l0aG91dCBhcmd1bWVudCBkb2VzIG5vdCBzdXBwb3J0IG1vZGlmaWVycy5cIik7XG4gIH1cbiAgZWwud3JhcExpc3RlbmVycyA9IGZ1bmN0aW9uIChjb2RlKSB7IHJldHVybiAoXCJfZyhcIiArIGNvZGUgKyBcIixcIiArIChkaXIudmFsdWUpICsgXCIpXCIpOyB9O1xufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gYmluZCQxIChlbCwgZGlyKSB7XG4gIGVsLndyYXBEYXRhID0gZnVuY3Rpb24gKGNvZGUpIHtcbiAgICByZXR1cm4gKFwiX2IoXCIgKyBjb2RlICsgXCIsJ1wiICsgKGVsLnRhZykgKyBcIicsXCIgKyAoZGlyLnZhbHVlKSArIFwiLFwiICsgKGRpci5tb2RpZmllcnMgJiYgZGlyLm1vZGlmaWVycy5wcm9wID8gJ3RydWUnIDogJ2ZhbHNlJykgKyAoZGlyLm1vZGlmaWVycyAmJiBkaXIubW9kaWZpZXJzLnN5bmMgPyAnLHRydWUnIDogJycpICsgXCIpXCIpXG4gIH07XG59XG5cbi8qICAqL1xuXG52YXIgYmFzZURpcmVjdGl2ZXMgPSB7XG4gIG9uOiBvbixcbiAgYmluZDogYmluZCQxLFxuICBjbG9hazogbm9vcFxufTtcblxuLyogICovXG5cblxuXG5cblxudmFyIENvZGVnZW5TdGF0ZSA9IGZ1bmN0aW9uIENvZGVnZW5TdGF0ZSAob3B0aW9ucykge1xuICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICB0aGlzLndhcm4gPSBvcHRpb25zLndhcm4gfHwgYmFzZVdhcm47XG4gIHRoaXMudHJhbnNmb3JtcyA9IHBsdWNrTW9kdWxlRnVuY3Rpb24ob3B0aW9ucy5tb2R1bGVzLCAndHJhbnNmb3JtQ29kZScpO1xuICB0aGlzLmRhdGFHZW5GbnMgPSBwbHVja01vZHVsZUZ1bmN0aW9uKG9wdGlvbnMubW9kdWxlcywgJ2dlbkRhdGEnKTtcbiAgdGhpcy5kaXJlY3RpdmVzID0gZXh0ZW5kKGV4dGVuZCh7fSwgYmFzZURpcmVjdGl2ZXMpLCBvcHRpb25zLmRpcmVjdGl2ZXMpO1xuICB2YXIgaXNSZXNlcnZlZFRhZyA9IG9wdGlvbnMuaXNSZXNlcnZlZFRhZyB8fCBubztcbiAgdGhpcy5tYXliZUNvbXBvbmVudCA9IGZ1bmN0aW9uIChlbCkgeyByZXR1cm4gISFlbC5jb21wb25lbnQgfHwgIWlzUmVzZXJ2ZWRUYWcoZWwudGFnKTsgfTtcbiAgdGhpcy5vbmNlSWQgPSAwO1xuICB0aGlzLnN0YXRpY1JlbmRlckZucyA9IFtdO1xuICB0aGlzLnByZSA9IGZhbHNlO1xufTtcblxuXG5cbmZ1bmN0aW9uIGdlbmVyYXRlIChcbiAgYXN0LFxuICBvcHRpb25zXG4pIHtcbiAgdmFyIHN0YXRlID0gbmV3IENvZGVnZW5TdGF0ZShvcHRpb25zKTtcbiAgdmFyIGNvZGUgPSBhc3QgPyBnZW5FbGVtZW50KGFzdCwgc3RhdGUpIDogJ19jKFwiZGl2XCIpJztcbiAgcmV0dXJuIHtcbiAgICByZW5kZXI6IChcIndpdGgodGhpcyl7cmV0dXJuIFwiICsgY29kZSArIFwifVwiKSxcbiAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRlLnN0YXRpY1JlbmRlckZuc1xuICB9XG59XG5cbmZ1bmN0aW9uIGdlbkVsZW1lbnQgKGVsLCBzdGF0ZSkge1xuICBpZiAoZWwucGFyZW50KSB7XG4gICAgZWwucHJlID0gZWwucHJlIHx8IGVsLnBhcmVudC5wcmU7XG4gIH1cblxuICBpZiAoZWwuc3RhdGljUm9vdCAmJiAhZWwuc3RhdGljUHJvY2Vzc2VkKSB7XG4gICAgcmV0dXJuIGdlblN0YXRpYyhlbCwgc3RhdGUpXG4gIH0gZWxzZSBpZiAoZWwub25jZSAmJiAhZWwub25jZVByb2Nlc3NlZCkge1xuICAgIHJldHVybiBnZW5PbmNlKGVsLCBzdGF0ZSlcbiAgfSBlbHNlIGlmIChlbC5mb3IgJiYgIWVsLmZvclByb2Nlc3NlZCkge1xuICAgIHJldHVybiBnZW5Gb3IoZWwsIHN0YXRlKVxuICB9IGVsc2UgaWYgKGVsLmlmICYmICFlbC5pZlByb2Nlc3NlZCkge1xuICAgIHJldHVybiBnZW5JZihlbCwgc3RhdGUpXG4gIH0gZWxzZSBpZiAoZWwudGFnID09PSAndGVtcGxhdGUnICYmICFlbC5zbG90VGFyZ2V0ICYmICFzdGF0ZS5wcmUpIHtcbiAgICByZXR1cm4gZ2VuQ2hpbGRyZW4oZWwsIHN0YXRlKSB8fCAndm9pZCAwJ1xuICB9IGVsc2UgaWYgKGVsLnRhZyA9PT0gJ3Nsb3QnKSB7XG4gICAgcmV0dXJuIGdlblNsb3QoZWwsIHN0YXRlKVxuICB9IGVsc2Uge1xuICAgIC8vIGNvbXBvbmVudCBvciBlbGVtZW50XG4gICAgdmFyIGNvZGU7XG4gICAgaWYgKGVsLmNvbXBvbmVudCkge1xuICAgICAgY29kZSA9IGdlbkNvbXBvbmVudChlbC5jb21wb25lbnQsIGVsLCBzdGF0ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBkYXRhO1xuICAgICAgaWYgKCFlbC5wbGFpbiB8fCAoZWwucHJlICYmIHN0YXRlLm1heWJlQ29tcG9uZW50KGVsKSkpIHtcbiAgICAgICAgZGF0YSA9IGdlbkRhdGEkMihlbCwgc3RhdGUpO1xuICAgICAgfVxuXG4gICAgICB2YXIgY2hpbGRyZW4gPSBlbC5pbmxpbmVUZW1wbGF0ZSA/IG51bGwgOiBnZW5DaGlsZHJlbihlbCwgc3RhdGUsIHRydWUpO1xuICAgICAgY29kZSA9IFwiX2MoJ1wiICsgKGVsLnRhZykgKyBcIidcIiArIChkYXRhID8gKFwiLFwiICsgZGF0YSkgOiAnJykgKyAoY2hpbGRyZW4gPyAoXCIsXCIgKyBjaGlsZHJlbikgOiAnJykgKyBcIilcIjtcbiAgICB9XG4gICAgLy8gbW9kdWxlIHRyYW5zZm9ybXNcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0YXRlLnRyYW5zZm9ybXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvZGUgPSBzdGF0ZS50cmFuc2Zvcm1zW2ldKGVsLCBjb2RlKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvZGVcbiAgfVxufVxuXG4vLyBob2lzdCBzdGF0aWMgc3ViLXRyZWVzIG91dFxuZnVuY3Rpb24gZ2VuU3RhdGljIChlbCwgc3RhdGUpIHtcbiAgZWwuc3RhdGljUHJvY2Vzc2VkID0gdHJ1ZTtcbiAgLy8gU29tZSBlbGVtZW50cyAodGVtcGxhdGVzKSBuZWVkIHRvIGJlaGF2ZSBkaWZmZXJlbnRseSBpbnNpZGUgb2YgYSB2LXByZVxuICAvLyBub2RlLiAgQWxsIHByZSBub2RlcyBhcmUgc3RhdGljIHJvb3RzLCBzbyB3ZSBjYW4gdXNlIHRoaXMgYXMgYSBsb2NhdGlvbiB0b1xuICAvLyB3cmFwIGEgc3RhdGUgY2hhbmdlIGFuZCByZXNldCBpdCB1cG9uIGV4aXRpbmcgdGhlIHByZSBub2RlLlxuICB2YXIgb3JpZ2luYWxQcmVTdGF0ZSA9IHN0YXRlLnByZTtcbiAgaWYgKGVsLnByZSkge1xuICAgIHN0YXRlLnByZSA9IGVsLnByZTtcbiAgfVxuICBzdGF0ZS5zdGF0aWNSZW5kZXJGbnMucHVzaCgoXCJ3aXRoKHRoaXMpe3JldHVybiBcIiArIChnZW5FbGVtZW50KGVsLCBzdGF0ZSkpICsgXCJ9XCIpKTtcbiAgc3RhdGUucHJlID0gb3JpZ2luYWxQcmVTdGF0ZTtcbiAgcmV0dXJuIChcIl9tKFwiICsgKHN0YXRlLnN0YXRpY1JlbmRlckZucy5sZW5ndGggLSAxKSArIChlbC5zdGF0aWNJbkZvciA/ICcsdHJ1ZScgOiAnJykgKyBcIilcIilcbn1cblxuLy8gdi1vbmNlXG5mdW5jdGlvbiBnZW5PbmNlIChlbCwgc3RhdGUpIHtcbiAgZWwub25jZVByb2Nlc3NlZCA9IHRydWU7XG4gIGlmIChlbC5pZiAmJiAhZWwuaWZQcm9jZXNzZWQpIHtcbiAgICByZXR1cm4gZ2VuSWYoZWwsIHN0YXRlKVxuICB9IGVsc2UgaWYgKGVsLnN0YXRpY0luRm9yKSB7XG4gICAgdmFyIGtleSA9ICcnO1xuICAgIHZhciBwYXJlbnQgPSBlbC5wYXJlbnQ7XG4gICAgd2hpbGUgKHBhcmVudCkge1xuICAgICAgaWYgKHBhcmVudC5mb3IpIHtcbiAgICAgICAga2V5ID0gcGFyZW50LmtleTtcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnQ7XG4gICAgfVxuICAgIGlmICgha2V5KSB7XG4gICAgICBzdGF0ZS53YXJuKFxuICAgICAgICBcInYtb25jZSBjYW4gb25seSBiZSB1c2VkIGluc2lkZSB2LWZvciB0aGF0IGlzIGtleWVkLiBcIixcbiAgICAgICAgZWwucmF3QXR0cnNNYXBbJ3Ytb25jZSddXG4gICAgICApO1xuICAgICAgcmV0dXJuIGdlbkVsZW1lbnQoZWwsIHN0YXRlKVxuICAgIH1cbiAgICByZXR1cm4gKFwiX28oXCIgKyAoZ2VuRWxlbWVudChlbCwgc3RhdGUpKSArIFwiLFwiICsgKHN0YXRlLm9uY2VJZCsrKSArIFwiLFwiICsga2V5ICsgXCIpXCIpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGdlblN0YXRpYyhlbCwgc3RhdGUpXG4gIH1cbn1cblxuZnVuY3Rpb24gZ2VuSWYgKFxuICBlbCxcbiAgc3RhdGUsXG4gIGFsdEdlbixcbiAgYWx0RW1wdHlcbikge1xuICBlbC5pZlByb2Nlc3NlZCA9IHRydWU7IC8vIGF2b2lkIHJlY3Vyc2lvblxuICByZXR1cm4gZ2VuSWZDb25kaXRpb25zKGVsLmlmQ29uZGl0aW9ucy5zbGljZSgpLCBzdGF0ZSwgYWx0R2VuLCBhbHRFbXB0eSlcbn1cblxuZnVuY3Rpb24gZ2VuSWZDb25kaXRpb25zIChcbiAgY29uZGl0aW9ucyxcbiAgc3RhdGUsXG4gIGFsdEdlbixcbiAgYWx0RW1wdHlcbikge1xuICBpZiAoIWNvbmRpdGlvbnMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGFsdEVtcHR5IHx8ICdfZSgpJ1xuICB9XG5cbiAgdmFyIGNvbmRpdGlvbiA9IGNvbmRpdGlvbnMuc2hpZnQoKTtcbiAgaWYgKGNvbmRpdGlvbi5leHApIHtcbiAgICByZXR1cm4gKFwiKFwiICsgKGNvbmRpdGlvbi5leHApICsgXCIpP1wiICsgKGdlblRlcm5hcnlFeHAoY29uZGl0aW9uLmJsb2NrKSkgKyBcIjpcIiArIChnZW5JZkNvbmRpdGlvbnMoY29uZGl0aW9ucywgc3RhdGUsIGFsdEdlbiwgYWx0RW1wdHkpKSlcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gKFwiXCIgKyAoZ2VuVGVybmFyeUV4cChjb25kaXRpb24uYmxvY2spKSlcbiAgfVxuXG4gIC8vIHYtaWYgd2l0aCB2LW9uY2Ugc2hvdWxkIGdlbmVyYXRlIGNvZGUgbGlrZSAoYSk/X20oMCk6X20oMSlcbiAgZnVuY3Rpb24gZ2VuVGVybmFyeUV4cCAoZWwpIHtcbiAgICByZXR1cm4gYWx0R2VuXG4gICAgICA/IGFsdEdlbihlbCwgc3RhdGUpXG4gICAgICA6IGVsLm9uY2VcbiAgICAgICAgPyBnZW5PbmNlKGVsLCBzdGF0ZSlcbiAgICAgICAgOiBnZW5FbGVtZW50KGVsLCBzdGF0ZSlcbiAgfVxufVxuXG5mdW5jdGlvbiBnZW5Gb3IgKFxuICBlbCxcbiAgc3RhdGUsXG4gIGFsdEdlbixcbiAgYWx0SGVscGVyXG4pIHtcbiAgdmFyIGV4cCA9IGVsLmZvcjtcbiAgdmFyIGFsaWFzID0gZWwuYWxpYXM7XG4gIHZhciBpdGVyYXRvcjEgPSBlbC5pdGVyYXRvcjEgPyAoXCIsXCIgKyAoZWwuaXRlcmF0b3IxKSkgOiAnJztcbiAgdmFyIGl0ZXJhdG9yMiA9IGVsLml0ZXJhdG9yMiA/IChcIixcIiArIChlbC5pdGVyYXRvcjIpKSA6ICcnO1xuXG4gIGlmIChzdGF0ZS5tYXliZUNvbXBvbmVudChlbCkgJiZcbiAgICBlbC50YWcgIT09ICdzbG90JyAmJlxuICAgIGVsLnRhZyAhPT0gJ3RlbXBsYXRlJyAmJlxuICAgICFlbC5rZXlcbiAgKSB7XG4gICAgc3RhdGUud2FybihcbiAgICAgIFwiPFwiICsgKGVsLnRhZykgKyBcIiB2LWZvcj1cXFwiXCIgKyBhbGlhcyArIFwiIGluIFwiICsgZXhwICsgXCJcXFwiPjogY29tcG9uZW50IGxpc3RzIHJlbmRlcmVkIHdpdGggXCIgK1xuICAgICAgXCJ2LWZvciBzaG91bGQgaGF2ZSBleHBsaWNpdCBrZXlzLiBcIiArXG4gICAgICBcIlNlZSBodHRwczovL3Z1ZWpzLm9yZy9ndWlkZS9saXN0Lmh0bWwja2V5IGZvciBtb3JlIGluZm8uXCIsXG4gICAgICBlbC5yYXdBdHRyc01hcFsndi1mb3InXSxcbiAgICAgIHRydWUgLyogdGlwICovXG4gICAgKTtcbiAgfVxuXG4gIGVsLmZvclByb2Nlc3NlZCA9IHRydWU7IC8vIGF2b2lkIHJlY3Vyc2lvblxuICByZXR1cm4gKGFsdEhlbHBlciB8fCAnX2wnKSArIFwiKChcIiArIGV4cCArIFwiKSxcIiArXG4gICAgXCJmdW5jdGlvbihcIiArIGFsaWFzICsgaXRlcmF0b3IxICsgaXRlcmF0b3IyICsgXCIpe1wiICtcbiAgICAgIFwicmV0dXJuIFwiICsgKChhbHRHZW4gfHwgZ2VuRWxlbWVudCkoZWwsIHN0YXRlKSkgK1xuICAgICd9KSdcbn1cblxuZnVuY3Rpb24gZ2VuRGF0YSQyIChlbCwgc3RhdGUpIHtcbiAgdmFyIGRhdGEgPSAneyc7XG5cbiAgLy8gZGlyZWN0aXZlcyBmaXJzdC5cbiAgLy8gZGlyZWN0aXZlcyBtYXkgbXV0YXRlIHRoZSBlbCdzIG90aGVyIHByb3BlcnRpZXMgYmVmb3JlIHRoZXkgYXJlIGdlbmVyYXRlZC5cbiAgdmFyIGRpcnMgPSBnZW5EaXJlY3RpdmVzKGVsLCBzdGF0ZSk7XG4gIGlmIChkaXJzKSB7IGRhdGEgKz0gZGlycyArICcsJzsgfVxuXG4gIC8vIGtleVxuICBpZiAoZWwua2V5KSB7XG4gICAgZGF0YSArPSBcImtleTpcIiArIChlbC5rZXkpICsgXCIsXCI7XG4gIH1cbiAgLy8gcmVmXG4gIGlmIChlbC5yZWYpIHtcbiAgICBkYXRhICs9IFwicmVmOlwiICsgKGVsLnJlZikgKyBcIixcIjtcbiAgfVxuICBpZiAoZWwucmVmSW5Gb3IpIHtcbiAgICBkYXRhICs9IFwicmVmSW5Gb3I6dHJ1ZSxcIjtcbiAgfVxuICAvLyBwcmVcbiAgaWYgKGVsLnByZSkge1xuICAgIGRhdGEgKz0gXCJwcmU6dHJ1ZSxcIjtcbiAgfVxuICAvLyByZWNvcmQgb3JpZ2luYWwgdGFnIG5hbWUgZm9yIGNvbXBvbmVudHMgdXNpbmcgXCJpc1wiIGF0dHJpYnV0ZVxuICBpZiAoZWwuY29tcG9uZW50KSB7XG4gICAgZGF0YSArPSBcInRhZzpcXFwiXCIgKyAoZWwudGFnKSArIFwiXFxcIixcIjtcbiAgfVxuICAvLyBtb2R1bGUgZGF0YSBnZW5lcmF0aW9uIGZ1bmN0aW9uc1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0YXRlLmRhdGFHZW5GbnMubGVuZ3RoOyBpKyspIHtcbiAgICBkYXRhICs9IHN0YXRlLmRhdGFHZW5GbnNbaV0oZWwpO1xuICB9XG4gIC8vIGF0dHJpYnV0ZXNcbiAgaWYgKGVsLmF0dHJzKSB7XG4gICAgZGF0YSArPSBcImF0dHJzOlwiICsgKGdlblByb3BzKGVsLmF0dHJzKSkgKyBcIixcIjtcbiAgfVxuICAvLyBET00gcHJvcHNcbiAgaWYgKGVsLnByb3BzKSB7XG4gICAgZGF0YSArPSBcImRvbVByb3BzOlwiICsgKGdlblByb3BzKGVsLnByb3BzKSkgKyBcIixcIjtcbiAgfVxuICAvLyBldmVudCBoYW5kbGVyc1xuICBpZiAoZWwuZXZlbnRzKSB7XG4gICAgZGF0YSArPSAoZ2VuSGFuZGxlcnMoZWwuZXZlbnRzLCBmYWxzZSkpICsgXCIsXCI7XG4gIH1cbiAgaWYgKGVsLm5hdGl2ZUV2ZW50cykge1xuICAgIGRhdGEgKz0gKGdlbkhhbmRsZXJzKGVsLm5hdGl2ZUV2ZW50cywgdHJ1ZSkpICsgXCIsXCI7XG4gIH1cbiAgLy8gc2xvdCB0YXJnZXRcbiAgLy8gb25seSBmb3Igbm9uLXNjb3BlZCBzbG90c1xuICBpZiAoZWwuc2xvdFRhcmdldCAmJiAhZWwuc2xvdFNjb3BlKSB7XG4gICAgZGF0YSArPSBcInNsb3Q6XCIgKyAoZWwuc2xvdFRhcmdldCkgKyBcIixcIjtcbiAgfVxuICAvLyBzY29wZWQgc2xvdHNcbiAgaWYgKGVsLnNjb3BlZFNsb3RzKSB7XG4gICAgZGF0YSArPSAoZ2VuU2NvcGVkU2xvdHMoZWwsIGVsLnNjb3BlZFNsb3RzLCBzdGF0ZSkpICsgXCIsXCI7XG4gIH1cbiAgLy8gY29tcG9uZW50IHYtbW9kZWxcbiAgaWYgKGVsLm1vZGVsKSB7XG4gICAgZGF0YSArPSBcIm1vZGVsOnt2YWx1ZTpcIiArIChlbC5tb2RlbC52YWx1ZSkgKyBcIixjYWxsYmFjazpcIiArIChlbC5tb2RlbC5jYWxsYmFjaykgKyBcIixleHByZXNzaW9uOlwiICsgKGVsLm1vZGVsLmV4cHJlc3Npb24pICsgXCJ9LFwiO1xuICB9XG4gIC8vIGlubGluZS10ZW1wbGF0ZVxuICBpZiAoZWwuaW5saW5lVGVtcGxhdGUpIHtcbiAgICB2YXIgaW5saW5lVGVtcGxhdGUgPSBnZW5JbmxpbmVUZW1wbGF0ZShlbCwgc3RhdGUpO1xuICAgIGlmIChpbmxpbmVUZW1wbGF0ZSkge1xuICAgICAgZGF0YSArPSBpbmxpbmVUZW1wbGF0ZSArIFwiLFwiO1xuICAgIH1cbiAgfVxuICBkYXRhID0gZGF0YS5yZXBsYWNlKC8sJC8sICcnKSArICd9JztcbiAgLy8gdi1iaW5kIGR5bmFtaWMgYXJndW1lbnQgd3JhcFxuICAvLyB2LWJpbmQgd2l0aCBkeW5hbWljIGFyZ3VtZW50cyBtdXN0IGJlIGFwcGxpZWQgdXNpbmcgdGhlIHNhbWUgdi1iaW5kIG9iamVjdFxuICAvLyBtZXJnZSBoZWxwZXIgc28gdGhhdCBjbGFzcy9zdHlsZS9tdXN0VXNlUHJvcCBhdHRycyBhcmUgaGFuZGxlZCBjb3JyZWN0bHkuXG4gIGlmIChlbC5keW5hbWljQXR0cnMpIHtcbiAgICBkYXRhID0gXCJfYihcIiArIGRhdGEgKyBcIixcXFwiXCIgKyAoZWwudGFnKSArIFwiXFxcIixcIiArIChnZW5Qcm9wcyhlbC5keW5hbWljQXR0cnMpKSArIFwiKVwiO1xuICB9XG4gIC8vIHYtYmluZCBkYXRhIHdyYXBcbiAgaWYgKGVsLndyYXBEYXRhKSB7XG4gICAgZGF0YSA9IGVsLndyYXBEYXRhKGRhdGEpO1xuICB9XG4gIC8vIHYtb24gZGF0YSB3cmFwXG4gIGlmIChlbC53cmFwTGlzdGVuZXJzKSB7XG4gICAgZGF0YSA9IGVsLndyYXBMaXN0ZW5lcnMoZGF0YSk7XG4gIH1cbiAgcmV0dXJuIGRhdGFcbn1cblxuZnVuY3Rpb24gZ2VuRGlyZWN0aXZlcyAoZWwsIHN0YXRlKSB7XG4gIHZhciBkaXJzID0gZWwuZGlyZWN0aXZlcztcbiAgaWYgKCFkaXJzKSB7IHJldHVybiB9XG4gIHZhciByZXMgPSAnZGlyZWN0aXZlczpbJztcbiAgdmFyIGhhc1J1bnRpbWUgPSBmYWxzZTtcbiAgdmFyIGksIGwsIGRpciwgbmVlZFJ1bnRpbWU7XG4gIGZvciAoaSA9IDAsIGwgPSBkaXJzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGRpciA9IGRpcnNbaV07XG4gICAgbmVlZFJ1bnRpbWUgPSB0cnVlO1xuICAgIHZhciBnZW4gPSBzdGF0ZS5kaXJlY3RpdmVzW2Rpci5uYW1lXTtcbiAgICBpZiAoZ2VuKSB7XG4gICAgICAvLyBjb21waWxlLXRpbWUgZGlyZWN0aXZlIHRoYXQgbWFuaXB1bGF0ZXMgQVNULlxuICAgICAgLy8gcmV0dXJucyB0cnVlIGlmIGl0IGFsc28gbmVlZHMgYSBydW50aW1lIGNvdW50ZXJwYXJ0LlxuICAgICAgbmVlZFJ1bnRpbWUgPSAhIWdlbihlbCwgZGlyLCBzdGF0ZS53YXJuKTtcbiAgICB9XG4gICAgaWYgKG5lZWRSdW50aW1lKSB7XG4gICAgICBoYXNSdW50aW1lID0gdHJ1ZTtcbiAgICAgIHJlcyArPSBcIntuYW1lOlxcXCJcIiArIChkaXIubmFtZSkgKyBcIlxcXCIscmF3TmFtZTpcXFwiXCIgKyAoZGlyLnJhd05hbWUpICsgXCJcXFwiXCIgKyAoZGlyLnZhbHVlID8gKFwiLHZhbHVlOihcIiArIChkaXIudmFsdWUpICsgXCIpLGV4cHJlc3Npb246XCIgKyAoSlNPTi5zdHJpbmdpZnkoZGlyLnZhbHVlKSkpIDogJycpICsgKGRpci5hcmcgPyAoXCIsYXJnOlwiICsgKGRpci5pc0R5bmFtaWNBcmcgPyBkaXIuYXJnIDogKFwiXFxcIlwiICsgKGRpci5hcmcpICsgXCJcXFwiXCIpKSkgOiAnJykgKyAoZGlyLm1vZGlmaWVycyA/IChcIixtb2RpZmllcnM6XCIgKyAoSlNPTi5zdHJpbmdpZnkoZGlyLm1vZGlmaWVycykpKSA6ICcnKSArIFwifSxcIjtcbiAgICB9XG4gIH1cbiAgaWYgKGhhc1J1bnRpbWUpIHtcbiAgICByZXR1cm4gcmVzLnNsaWNlKDAsIC0xKSArICddJ1xuICB9XG59XG5cbmZ1bmN0aW9uIGdlbklubGluZVRlbXBsYXRlIChlbCwgc3RhdGUpIHtcbiAgdmFyIGFzdCA9IGVsLmNoaWxkcmVuWzBdO1xuICBpZiAoZWwuY2hpbGRyZW4ubGVuZ3RoICE9PSAxIHx8IGFzdC50eXBlICE9PSAxKSB7XG4gICAgc3RhdGUud2FybihcbiAgICAgICdJbmxpbmUtdGVtcGxhdGUgY29tcG9uZW50cyBtdXN0IGhhdmUgZXhhY3RseSBvbmUgY2hpbGQgZWxlbWVudC4nLFxuICAgICAgeyBzdGFydDogZWwuc3RhcnQgfVxuICAgICk7XG4gIH1cbiAgaWYgKGFzdCAmJiBhc3QudHlwZSA9PT0gMSkge1xuICAgIHZhciBpbmxpbmVSZW5kZXJGbnMgPSBnZW5lcmF0ZShhc3QsIHN0YXRlLm9wdGlvbnMpO1xuICAgIHJldHVybiAoXCJpbmxpbmVUZW1wbGF0ZTp7cmVuZGVyOmZ1bmN0aW9uKCl7XCIgKyAoaW5saW5lUmVuZGVyRm5zLnJlbmRlcikgKyBcIn0sc3RhdGljUmVuZGVyRm5zOltcIiArIChpbmxpbmVSZW5kZXJGbnMuc3RhdGljUmVuZGVyRm5zLm1hcChmdW5jdGlvbiAoY29kZSkgeyByZXR1cm4gKFwiZnVuY3Rpb24oKXtcIiArIGNvZGUgKyBcIn1cIik7IH0pLmpvaW4oJywnKSkgKyBcIl19XCIpXG4gIH1cbn1cblxuZnVuY3Rpb24gZ2VuU2NvcGVkU2xvdHMgKFxuICBlbCxcbiAgc2xvdHMsXG4gIHN0YXRlXG4pIHtcbiAgLy8gYnkgZGVmYXVsdCBzY29wZWQgc2xvdHMgYXJlIGNvbnNpZGVyZWQgXCJzdGFibGVcIiwgdGhpcyBhbGxvd3MgY2hpbGRcbiAgLy8gY29tcG9uZW50cyB3aXRoIG9ubHkgc2NvcGVkIHNsb3RzIHRvIHNraXAgZm9yY2VkIHVwZGF0ZXMgZnJvbSBwYXJlbnQuXG4gIC8vIGJ1dCBpbiBzb21lIGNhc2VzIHdlIGhhdmUgdG8gYmFpbC1vdXQgb2YgdGhpcyBvcHRpbWl6YXRpb25cbiAgLy8gZm9yIGV4YW1wbGUgaWYgdGhlIHNsb3QgY29udGFpbnMgZHluYW1pYyBuYW1lcywgaGFzIHYtaWYgb3Igdi1mb3Igb24gdGhlbS4uLlxuICB2YXIgbmVlZHNGb3JjZVVwZGF0ZSA9IGVsLmZvciB8fCBPYmplY3Qua2V5cyhzbG90cykuc29tZShmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIHNsb3QgPSBzbG90c1trZXldO1xuICAgIHJldHVybiAoXG4gICAgICBzbG90LnNsb3RUYXJnZXREeW5hbWljIHx8XG4gICAgICBzbG90LmlmIHx8XG4gICAgICBzbG90LmZvciB8fFxuICAgICAgY29udGFpbnNTbG90Q2hpbGQoc2xvdCkgLy8gaXMgcGFzc2luZyBkb3duIHNsb3QgZnJvbSBwYXJlbnQgd2hpY2ggbWF5IGJlIGR5bmFtaWNcbiAgICApXG4gIH0pO1xuXG4gIC8vICM5NTM0OiBpZiBhIGNvbXBvbmVudCB3aXRoIHNjb3BlZCBzbG90cyBpcyBpbnNpZGUgYSBjb25kaXRpb25hbCBicmFuY2gsXG4gIC8vIGl0J3MgcG9zc2libGUgZm9yIHRoZSBzYW1lIGNvbXBvbmVudCB0byBiZSByZXVzZWQgYnV0IHdpdGggZGlmZmVyZW50XG4gIC8vIGNvbXBpbGVkIHNsb3QgY29udGVudC4gVG8gYXZvaWQgdGhhdCwgd2UgZ2VuZXJhdGUgYSB1bmlxdWUga2V5IGJhc2VkIG9uXG4gIC8vIHRoZSBnZW5lcmF0ZWQgY29kZSBvZiBhbGwgdGhlIHNsb3QgY29udGVudHMuXG4gIHZhciBuZWVkc0tleSA9ICEhZWwuaWY7XG5cbiAgLy8gT1Igd2hlbiBpdCBpcyBpbnNpZGUgYW5vdGhlciBzY29wZWQgc2xvdCBvciB2LWZvciAodGhlIHJlYWN0aXZpdHkgbWF5IGJlXG4gIC8vIGRpc2Nvbm5lY3RlZCBkdWUgdG8gdGhlIGludGVybWVkaWF0ZSBzY29wZSB2YXJpYWJsZSlcbiAgLy8gIzk0MzgsICM5NTA2XG4gIC8vIFRPRE86IHRoaXMgY2FuIGJlIGZ1cnRoZXIgb3B0aW1pemVkIGJ5IHByb3Blcmx5IGFuYWx5emluZyBpbi1zY29wZSBiaW5kaW5nc1xuICAvLyBhbmQgc2tpcCBmb3JjZSB1cGRhdGluZyBvbmVzIHRoYXQgZG8gbm90IGFjdHVhbGx5IHVzZSBzY29wZSB2YXJpYWJsZXMuXG4gIGlmICghbmVlZHNGb3JjZVVwZGF0ZSkge1xuICAgIHZhciBwYXJlbnQgPSBlbC5wYXJlbnQ7XG4gICAgd2hpbGUgKHBhcmVudCkge1xuICAgICAgaWYgKFxuICAgICAgICAocGFyZW50LnNsb3RTY29wZSAmJiBwYXJlbnQuc2xvdFNjb3BlICE9PSBlbXB0eVNsb3RTY29wZVRva2VuKSB8fFxuICAgICAgICBwYXJlbnQuZm9yXG4gICAgICApIHtcbiAgICAgICAgbmVlZHNGb3JjZVVwZGF0ZSA9IHRydWU7XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBpZiAocGFyZW50LmlmKSB7XG4gICAgICAgIG5lZWRzS2V5ID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnQ7XG4gICAgfVxuICB9XG5cbiAgdmFyIGdlbmVyYXRlZFNsb3RzID0gT2JqZWN0LmtleXMoc2xvdHMpXG4gICAgLm1hcChmdW5jdGlvbiAoa2V5KSB7IHJldHVybiBnZW5TY29wZWRTbG90KHNsb3RzW2tleV0sIHN0YXRlKTsgfSlcbiAgICAuam9pbignLCcpO1xuXG4gIHJldHVybiAoXCJzY29wZWRTbG90czpfdShbXCIgKyBnZW5lcmF0ZWRTbG90cyArIFwiXVwiICsgKG5lZWRzRm9yY2VVcGRhdGUgPyBcIixudWxsLHRydWVcIiA6IFwiXCIpICsgKCFuZWVkc0ZvcmNlVXBkYXRlICYmIG5lZWRzS2V5ID8gKFwiLG51bGwsZmFsc2UsXCIgKyAoaGFzaChnZW5lcmF0ZWRTbG90cykpKSA6IFwiXCIpICsgXCIpXCIpXG59XG5cbmZ1bmN0aW9uIGhhc2goc3RyKSB7XG4gIHZhciBoYXNoID0gNTM4MTtcbiAgdmFyIGkgPSBzdHIubGVuZ3RoO1xuICB3aGlsZShpKSB7XG4gICAgaGFzaCA9IChoYXNoICogMzMpIF4gc3RyLmNoYXJDb2RlQXQoLS1pKTtcbiAgfVxuICByZXR1cm4gaGFzaCA+Pj4gMFxufVxuXG5mdW5jdGlvbiBjb250YWluc1Nsb3RDaGlsZCAoZWwpIHtcbiAgaWYgKGVsLnR5cGUgPT09IDEpIHtcbiAgICBpZiAoZWwudGFnID09PSAnc2xvdCcpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIHJldHVybiBlbC5jaGlsZHJlbi5zb21lKGNvbnRhaW5zU2xvdENoaWxkKVxuICB9XG4gIHJldHVybiBmYWxzZVxufVxuXG5mdW5jdGlvbiBnZW5TY29wZWRTbG90IChcbiAgZWwsXG4gIHN0YXRlXG4pIHtcbiAgdmFyIGlzTGVnYWN5U3ludGF4ID0gZWwuYXR0cnNNYXBbJ3Nsb3Qtc2NvcGUnXTtcbiAgaWYgKGVsLmlmICYmICFlbC5pZlByb2Nlc3NlZCAmJiAhaXNMZWdhY3lTeW50YXgpIHtcbiAgICByZXR1cm4gZ2VuSWYoZWwsIHN0YXRlLCBnZW5TY29wZWRTbG90LCBcIm51bGxcIilcbiAgfVxuICBpZiAoZWwuZm9yICYmICFlbC5mb3JQcm9jZXNzZWQpIHtcbiAgICByZXR1cm4gZ2VuRm9yKGVsLCBzdGF0ZSwgZ2VuU2NvcGVkU2xvdClcbiAgfVxuICB2YXIgc2xvdFNjb3BlID0gZWwuc2xvdFNjb3BlID09PSBlbXB0eVNsb3RTY29wZVRva2VuXG4gICAgPyBcIlwiXG4gICAgOiBTdHJpbmcoZWwuc2xvdFNjb3BlKTtcbiAgdmFyIGZuID0gXCJmdW5jdGlvbihcIiArIHNsb3RTY29wZSArIFwiKXtcIiArXG4gICAgXCJyZXR1cm4gXCIgKyAoZWwudGFnID09PSAndGVtcGxhdGUnXG4gICAgICA/IGVsLmlmICYmIGlzTGVnYWN5U3ludGF4XG4gICAgICAgID8gKFwiKFwiICsgKGVsLmlmKSArIFwiKT9cIiArIChnZW5DaGlsZHJlbihlbCwgc3RhdGUpIHx8ICd1bmRlZmluZWQnKSArIFwiOnVuZGVmaW5lZFwiKVxuICAgICAgICA6IGdlbkNoaWxkcmVuKGVsLCBzdGF0ZSkgfHwgJ3VuZGVmaW5lZCdcbiAgICAgIDogZ2VuRWxlbWVudChlbCwgc3RhdGUpKSArIFwifVwiO1xuICAvLyByZXZlcnNlIHByb3h5IHYtc2xvdCB3aXRob3V0IHNjb3BlIG9uIHRoaXMuJHNsb3RzXG4gIHZhciByZXZlcnNlUHJveHkgPSBzbG90U2NvcGUgPyBcIlwiIDogXCIscHJveHk6dHJ1ZVwiO1xuICByZXR1cm4gKFwie2tleTpcIiArIChlbC5zbG90VGFyZ2V0IHx8IFwiXFxcImRlZmF1bHRcXFwiXCIpICsgXCIsZm46XCIgKyBmbiArIHJldmVyc2VQcm94eSArIFwifVwiKVxufVxuXG5mdW5jdGlvbiBnZW5DaGlsZHJlbiAoXG4gIGVsLFxuICBzdGF0ZSxcbiAgY2hlY2tTa2lwLFxuICBhbHRHZW5FbGVtZW50LFxuICBhbHRHZW5Ob2RlXG4pIHtcbiAgdmFyIGNoaWxkcmVuID0gZWwuY2hpbGRyZW47XG4gIGlmIChjaGlsZHJlbi5sZW5ndGgpIHtcbiAgICB2YXIgZWwkMSA9IGNoaWxkcmVuWzBdO1xuICAgIC8vIG9wdGltaXplIHNpbmdsZSB2LWZvclxuICAgIGlmIChjaGlsZHJlbi5sZW5ndGggPT09IDEgJiZcbiAgICAgIGVsJDEuZm9yICYmXG4gICAgICBlbCQxLnRhZyAhPT0gJ3RlbXBsYXRlJyAmJlxuICAgICAgZWwkMS50YWcgIT09ICdzbG90J1xuICAgICkge1xuICAgICAgdmFyIG5vcm1hbGl6YXRpb25UeXBlID0gY2hlY2tTa2lwXG4gICAgICAgID8gc3RhdGUubWF5YmVDb21wb25lbnQoZWwkMSkgPyBcIiwxXCIgOiBcIiwwXCJcbiAgICAgICAgOiBcIlwiO1xuICAgICAgcmV0dXJuIChcIlwiICsgKChhbHRHZW5FbGVtZW50IHx8IGdlbkVsZW1lbnQpKGVsJDEsIHN0YXRlKSkgKyBub3JtYWxpemF0aW9uVHlwZSlcbiAgICB9XG4gICAgdmFyIG5vcm1hbGl6YXRpb25UeXBlJDEgPSBjaGVja1NraXBcbiAgICAgID8gZ2V0Tm9ybWFsaXphdGlvblR5cGUoY2hpbGRyZW4sIHN0YXRlLm1heWJlQ29tcG9uZW50KVxuICAgICAgOiAwO1xuICAgIHZhciBnZW4gPSBhbHRHZW5Ob2RlIHx8IGdlbk5vZGU7XG4gICAgcmV0dXJuIChcIltcIiArIChjaGlsZHJlbi5tYXAoZnVuY3Rpb24gKGMpIHsgcmV0dXJuIGdlbihjLCBzdGF0ZSk7IH0pLmpvaW4oJywnKSkgKyBcIl1cIiArIChub3JtYWxpemF0aW9uVHlwZSQxID8gKFwiLFwiICsgbm9ybWFsaXphdGlvblR5cGUkMSkgOiAnJykpXG4gIH1cbn1cblxuLy8gZGV0ZXJtaW5lIHRoZSBub3JtYWxpemF0aW9uIG5lZWRlZCBmb3IgdGhlIGNoaWxkcmVuIGFycmF5LlxuLy8gMDogbm8gbm9ybWFsaXphdGlvbiBuZWVkZWRcbi8vIDE6IHNpbXBsZSBub3JtYWxpemF0aW9uIG5lZWRlZCAocG9zc2libGUgMS1sZXZlbCBkZWVwIG5lc3RlZCBhcnJheSlcbi8vIDI6IGZ1bGwgbm9ybWFsaXphdGlvbiBuZWVkZWRcbmZ1bmN0aW9uIGdldE5vcm1hbGl6YXRpb25UeXBlIChcbiAgY2hpbGRyZW4sXG4gIG1heWJlQ29tcG9uZW50XG4pIHtcbiAgdmFyIHJlcyA9IDA7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgZWwgPSBjaGlsZHJlbltpXTtcbiAgICBpZiAoZWwudHlwZSAhPT0gMSkge1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgaWYgKG5lZWRzTm9ybWFsaXphdGlvbihlbCkgfHxcbiAgICAgICAgKGVsLmlmQ29uZGl0aW9ucyAmJiBlbC5pZkNvbmRpdGlvbnMuc29tZShmdW5jdGlvbiAoYykgeyByZXR1cm4gbmVlZHNOb3JtYWxpemF0aW9uKGMuYmxvY2spOyB9KSkpIHtcbiAgICAgIHJlcyA9IDI7XG4gICAgICBicmVha1xuICAgIH1cbiAgICBpZiAobWF5YmVDb21wb25lbnQoZWwpIHx8XG4gICAgICAgIChlbC5pZkNvbmRpdGlvbnMgJiYgZWwuaWZDb25kaXRpb25zLnNvbWUoZnVuY3Rpb24gKGMpIHsgcmV0dXJuIG1heWJlQ29tcG9uZW50KGMuYmxvY2spOyB9KSkpIHtcbiAgICAgIHJlcyA9IDE7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXNcbn1cblxuZnVuY3Rpb24gbmVlZHNOb3JtYWxpemF0aW9uIChlbCkge1xuICByZXR1cm4gZWwuZm9yICE9PSB1bmRlZmluZWQgfHwgZWwudGFnID09PSAndGVtcGxhdGUnIHx8IGVsLnRhZyA9PT0gJ3Nsb3QnXG59XG5cbmZ1bmN0aW9uIGdlbk5vZGUgKG5vZGUsIHN0YXRlKSB7XG4gIGlmIChub2RlLnR5cGUgPT09IDEpIHtcbiAgICByZXR1cm4gZ2VuRWxlbWVudChub2RlLCBzdGF0ZSlcbiAgfSBlbHNlIGlmIChub2RlLnR5cGUgPT09IDMgJiYgbm9kZS5pc0NvbW1lbnQpIHtcbiAgICByZXR1cm4gZ2VuQ29tbWVudChub2RlKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBnZW5UZXh0KG5vZGUpXG4gIH1cbn1cblxuZnVuY3Rpb24gZ2VuVGV4dCAodGV4dCkge1xuICByZXR1cm4gKFwiX3YoXCIgKyAodGV4dC50eXBlID09PSAyXG4gICAgPyB0ZXh0LmV4cHJlc3Npb24gLy8gbm8gbmVlZCBmb3IgKCkgYmVjYXVzZSBhbHJlYWR5IHdyYXBwZWQgaW4gX3MoKVxuICAgIDogdHJhbnNmb3JtU3BlY2lhbE5ld2xpbmVzKEpTT04uc3RyaW5naWZ5KHRleHQudGV4dCkpKSArIFwiKVwiKVxufVxuXG5mdW5jdGlvbiBnZW5Db21tZW50IChjb21tZW50KSB7XG4gIHJldHVybiAoXCJfZShcIiArIChKU09OLnN0cmluZ2lmeShjb21tZW50LnRleHQpKSArIFwiKVwiKVxufVxuXG5mdW5jdGlvbiBnZW5TbG90IChlbCwgc3RhdGUpIHtcbiAgdmFyIHNsb3ROYW1lID0gZWwuc2xvdE5hbWUgfHwgJ1wiZGVmYXVsdFwiJztcbiAgdmFyIGNoaWxkcmVuID0gZ2VuQ2hpbGRyZW4oZWwsIHN0YXRlKTtcbiAgdmFyIHJlcyA9IFwiX3QoXCIgKyBzbG90TmFtZSArIChjaGlsZHJlbiA/IChcIixcIiArIGNoaWxkcmVuKSA6ICcnKTtcbiAgdmFyIGF0dHJzID0gZWwuYXR0cnMgfHwgZWwuZHluYW1pY0F0dHJzXG4gICAgPyBnZW5Qcm9wcygoZWwuYXR0cnMgfHwgW10pLmNvbmNhdChlbC5keW5hbWljQXR0cnMgfHwgW10pLm1hcChmdW5jdGlvbiAoYXR0cikgeyByZXR1cm4gKHtcbiAgICAgICAgLy8gc2xvdCBwcm9wcyBhcmUgY2FtZWxpemVkXG4gICAgICAgIG5hbWU6IGNhbWVsaXplKGF0dHIubmFtZSksXG4gICAgICAgIHZhbHVlOiBhdHRyLnZhbHVlLFxuICAgICAgICBkeW5hbWljOiBhdHRyLmR5bmFtaWNcbiAgICAgIH0pOyB9KSlcbiAgICA6IG51bGw7XG4gIHZhciBiaW5kJCQxID0gZWwuYXR0cnNNYXBbJ3YtYmluZCddO1xuICBpZiAoKGF0dHJzIHx8IGJpbmQkJDEpICYmICFjaGlsZHJlbikge1xuICAgIHJlcyArPSBcIixudWxsXCI7XG4gIH1cbiAgaWYgKGF0dHJzKSB7XG4gICAgcmVzICs9IFwiLFwiICsgYXR0cnM7XG4gIH1cbiAgaWYgKGJpbmQkJDEpIHtcbiAgICByZXMgKz0gKGF0dHJzID8gJycgOiAnLG51bGwnKSArIFwiLFwiICsgYmluZCQkMTtcbiAgfVxuICByZXR1cm4gcmVzICsgJyknXG59XG5cbi8vIGNvbXBvbmVudE5hbWUgaXMgZWwuY29tcG9uZW50LCB0YWtlIGl0IGFzIGFyZ3VtZW50IHRvIHNodW4gZmxvdydzIHBlc3NpbWlzdGljIHJlZmluZW1lbnRcbmZ1bmN0aW9uIGdlbkNvbXBvbmVudCAoXG4gIGNvbXBvbmVudE5hbWUsXG4gIGVsLFxuICBzdGF0ZVxuKSB7XG4gIHZhciBjaGlsZHJlbiA9IGVsLmlubGluZVRlbXBsYXRlID8gbnVsbCA6IGdlbkNoaWxkcmVuKGVsLCBzdGF0ZSwgdHJ1ZSk7XG4gIHJldHVybiAoXCJfYyhcIiArIGNvbXBvbmVudE5hbWUgKyBcIixcIiArIChnZW5EYXRhJDIoZWwsIHN0YXRlKSkgKyAoY2hpbGRyZW4gPyAoXCIsXCIgKyBjaGlsZHJlbikgOiAnJykgKyBcIilcIilcbn1cblxuZnVuY3Rpb24gZ2VuUHJvcHMgKHByb3BzKSB7XG4gIHZhciBzdGF0aWNQcm9wcyA9IFwiXCI7XG4gIHZhciBkeW5hbWljUHJvcHMgPSBcIlwiO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHByb3AgPSBwcm9wc1tpXTtcbiAgICB2YXIgdmFsdWUgPSB0cmFuc2Zvcm1TcGVjaWFsTmV3bGluZXMocHJvcC52YWx1ZSk7XG4gICAgaWYgKHByb3AuZHluYW1pYykge1xuICAgICAgZHluYW1pY1Byb3BzICs9IChwcm9wLm5hbWUpICsgXCIsXCIgKyB2YWx1ZSArIFwiLFwiO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0aWNQcm9wcyArPSBcIlxcXCJcIiArIChwcm9wLm5hbWUpICsgXCJcXFwiOlwiICsgdmFsdWUgKyBcIixcIjtcbiAgICB9XG4gIH1cbiAgc3RhdGljUHJvcHMgPSBcIntcIiArIChzdGF0aWNQcm9wcy5zbGljZSgwLCAtMSkpICsgXCJ9XCI7XG4gIGlmIChkeW5hbWljUHJvcHMpIHtcbiAgICByZXR1cm4gKFwiX2QoXCIgKyBzdGF0aWNQcm9wcyArIFwiLFtcIiArIChkeW5hbWljUHJvcHMuc2xpY2UoMCwgLTEpKSArIFwiXSlcIilcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gc3RhdGljUHJvcHNcbiAgfVxufVxuXG4vLyAjMzg5NSwgIzQyNjhcbmZ1bmN0aW9uIHRyYW5zZm9ybVNwZWNpYWxOZXdsaW5lcyAodGV4dCkge1xuICByZXR1cm4gdGV4dFxuICAgIC5yZXBsYWNlKC9cXHUyMDI4L2csICdcXFxcdTIwMjgnKVxuICAgIC5yZXBsYWNlKC9cXHUyMDI5L2csICdcXFxcdTIwMjknKVxufVxuXG4vKiAgKi9cblxuXG5cbi8vIHRoZXNlIGtleXdvcmRzIHNob3VsZCBub3QgYXBwZWFyIGluc2lkZSBleHByZXNzaW9ucywgYnV0IG9wZXJhdG9ycyBsaWtlXG4vLyB0eXBlb2YsIGluc3RhbmNlb2YgYW5kIGluIGFyZSBhbGxvd2VkXG52YXIgcHJvaGliaXRlZEtleXdvcmRSRSA9IG5ldyBSZWdFeHAoJ1xcXFxiJyArIChcbiAgJ2RvLGlmLGZvcixsZXQsbmV3LHRyeSx2YXIsY2FzZSxlbHNlLHdpdGgsYXdhaXQsYnJlYWssY2F0Y2gsY2xhc3MsY29uc3QsJyArXG4gICdzdXBlcix0aHJvdyx3aGlsZSx5aWVsZCxkZWxldGUsZXhwb3J0LGltcG9ydCxyZXR1cm4sc3dpdGNoLGRlZmF1bHQsJyArXG4gICdleHRlbmRzLGZpbmFsbHksY29udGludWUsZGVidWdnZXIsZnVuY3Rpb24sYXJndW1lbnRzJ1xuKS5zcGxpdCgnLCcpLmpvaW4oJ1xcXFxifFxcXFxiJykgKyAnXFxcXGInKTtcblxuLy8gdGhlc2UgdW5hcnkgb3BlcmF0b3JzIHNob3VsZCBub3QgYmUgdXNlZCBhcyBwcm9wZXJ0eS9tZXRob2QgbmFtZXNcbnZhciB1bmFyeU9wZXJhdG9yc1JFID0gbmV3IFJlZ0V4cCgnXFxcXGInICsgKFxuICAnZGVsZXRlLHR5cGVvZix2b2lkJ1xuKS5zcGxpdCgnLCcpLmpvaW4oJ1xcXFxzKlxcXFwoW15cXFxcKV0qXFxcXCl8XFxcXGInKSArICdcXFxccypcXFxcKFteXFxcXCldKlxcXFwpJyk7XG5cbi8vIHN0cmlwIHN0cmluZ3MgaW4gZXhwcmVzc2lvbnNcbnZhciBzdHJpcFN0cmluZ1JFID0gLycoPzpbXidcXFxcXXxcXFxcLikqJ3xcIig/OlteXCJcXFxcXXxcXFxcLikqXCJ8YCg/OlteYFxcXFxdfFxcXFwuKSpcXCRcXHt8XFx9KD86W15gXFxcXF18XFxcXC4pKmB8YCg/OlteYFxcXFxdfFxcXFwuKSpgL2c7XG5cbi8vIGRldGVjdCBwcm9ibGVtYXRpYyBleHByZXNzaW9ucyBpbiBhIHRlbXBsYXRlXG5mdW5jdGlvbiBkZXRlY3RFcnJvcnMgKGFzdCwgd2Fybikge1xuICBpZiAoYXN0KSB7XG4gICAgY2hlY2tOb2RlKGFzdCwgd2Fybik7XG4gIH1cbn1cblxuZnVuY3Rpb24gY2hlY2tOb2RlIChub2RlLCB3YXJuKSB7XG4gIGlmIChub2RlLnR5cGUgPT09IDEpIHtcbiAgICBmb3IgKHZhciBuYW1lIGluIG5vZGUuYXR0cnNNYXApIHtcbiAgICAgIGlmIChkaXJSRS50ZXN0KG5hbWUpKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IG5vZGUuYXR0cnNNYXBbbmFtZV07XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgIHZhciByYW5nZSA9IG5vZGUucmF3QXR0cnNNYXBbbmFtZV07XG4gICAgICAgICAgaWYgKG5hbWUgPT09ICd2LWZvcicpIHtcbiAgICAgICAgICAgIGNoZWNrRm9yKG5vZGUsIChcInYtZm9yPVxcXCJcIiArIHZhbHVlICsgXCJcXFwiXCIpLCB3YXJuLCByYW5nZSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChvblJFLnRlc3QobmFtZSkpIHtcbiAgICAgICAgICAgIGNoZWNrRXZlbnQodmFsdWUsIChuYW1lICsgXCI9XFxcIlwiICsgdmFsdWUgKyBcIlxcXCJcIiksIHdhcm4sIHJhbmdlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2hlY2tFeHByZXNzaW9uKHZhbHVlLCAobmFtZSArIFwiPVxcXCJcIiArIHZhbHVlICsgXCJcXFwiXCIpLCB3YXJuLCByYW5nZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGUuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY2hlY2tOb2RlKG5vZGUuY2hpbGRyZW5baV0sIHdhcm4pO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmIChub2RlLnR5cGUgPT09IDIpIHtcbiAgICBjaGVja0V4cHJlc3Npb24obm9kZS5leHByZXNzaW9uLCBub2RlLnRleHQsIHdhcm4sIG5vZGUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNoZWNrRXZlbnQgKGV4cCwgdGV4dCwgd2FybiwgcmFuZ2UpIHtcbiAgdmFyIHN0aXBwZWQgPSBleHAucmVwbGFjZShzdHJpcFN0cmluZ1JFLCAnJyk7XG4gIHZhciBrZXl3b3JkTWF0Y2ggPSBzdGlwcGVkLm1hdGNoKHVuYXJ5T3BlcmF0b3JzUkUpO1xuICBpZiAoa2V5d29yZE1hdGNoICYmIHN0aXBwZWQuY2hhckF0KGtleXdvcmRNYXRjaC5pbmRleCAtIDEpICE9PSAnJCcpIHtcbiAgICB3YXJuKFxuICAgICAgXCJhdm9pZCB1c2luZyBKYXZhU2NyaXB0IHVuYXJ5IG9wZXJhdG9yIGFzIHByb3BlcnR5IG5hbWU6IFwiICtcbiAgICAgIFwiXFxcIlwiICsgKGtleXdvcmRNYXRjaFswXSkgKyBcIlxcXCIgaW4gZXhwcmVzc2lvbiBcIiArICh0ZXh0LnRyaW0oKSksXG4gICAgICByYW5nZVxuICAgICk7XG4gIH1cbiAgY2hlY2tFeHByZXNzaW9uKGV4cCwgdGV4dCwgd2FybiwgcmFuZ2UpO1xufVxuXG5mdW5jdGlvbiBjaGVja0ZvciAobm9kZSwgdGV4dCwgd2FybiwgcmFuZ2UpIHtcbiAgY2hlY2tFeHByZXNzaW9uKG5vZGUuZm9yIHx8ICcnLCB0ZXh0LCB3YXJuLCByYW5nZSk7XG4gIGNoZWNrSWRlbnRpZmllcihub2RlLmFsaWFzLCAndi1mb3IgYWxpYXMnLCB0ZXh0LCB3YXJuLCByYW5nZSk7XG4gIGNoZWNrSWRlbnRpZmllcihub2RlLml0ZXJhdG9yMSwgJ3YtZm9yIGl0ZXJhdG9yJywgdGV4dCwgd2FybiwgcmFuZ2UpO1xuICBjaGVja0lkZW50aWZpZXIobm9kZS5pdGVyYXRvcjIsICd2LWZvciBpdGVyYXRvcicsIHRleHQsIHdhcm4sIHJhbmdlKTtcbn1cblxuZnVuY3Rpb24gY2hlY2tJZGVudGlmaWVyIChcbiAgaWRlbnQsXG4gIHR5cGUsXG4gIHRleHQsXG4gIHdhcm4sXG4gIHJhbmdlXG4pIHtcbiAgaWYgKHR5cGVvZiBpZGVudCA9PT0gJ3N0cmluZycpIHtcbiAgICB0cnkge1xuICAgICAgbmV3IEZ1bmN0aW9uKChcInZhciBcIiArIGlkZW50ICsgXCI9X1wiKSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgd2FybigoXCJpbnZhbGlkIFwiICsgdHlwZSArIFwiIFxcXCJcIiArIGlkZW50ICsgXCJcXFwiIGluIGV4cHJlc3Npb246IFwiICsgKHRleHQudHJpbSgpKSksIHJhbmdlKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY2hlY2tFeHByZXNzaW9uIChleHAsIHRleHQsIHdhcm4sIHJhbmdlKSB7XG4gIHRyeSB7XG4gICAgbmV3IEZ1bmN0aW9uKChcInJldHVybiBcIiArIGV4cCkpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdmFyIGtleXdvcmRNYXRjaCA9IGV4cC5yZXBsYWNlKHN0cmlwU3RyaW5nUkUsICcnKS5tYXRjaChwcm9oaWJpdGVkS2V5d29yZFJFKTtcbiAgICBpZiAoa2V5d29yZE1hdGNoKSB7XG4gICAgICB3YXJuKFxuICAgICAgICBcImF2b2lkIHVzaW5nIEphdmFTY3JpcHQga2V5d29yZCBhcyBwcm9wZXJ0eSBuYW1lOiBcIiArXG4gICAgICAgIFwiXFxcIlwiICsgKGtleXdvcmRNYXRjaFswXSkgKyBcIlxcXCJcXG4gIFJhdyBleHByZXNzaW9uOiBcIiArICh0ZXh0LnRyaW0oKSksXG4gICAgICAgIHJhbmdlXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB3YXJuKFxuICAgICAgICBcImludmFsaWQgZXhwcmVzc2lvbjogXCIgKyAoZS5tZXNzYWdlKSArIFwiIGluXFxuXFxuXCIgK1xuICAgICAgICBcIiAgICBcIiArIGV4cCArIFwiXFxuXFxuXCIgK1xuICAgICAgICBcIiAgUmF3IGV4cHJlc3Npb246IFwiICsgKHRleHQudHJpbSgpKSArIFwiXFxuXCIsXG4gICAgICAgIHJhbmdlXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuXG4vKiAgKi9cblxudmFyIHJhbmdlID0gMjtcblxuZnVuY3Rpb24gZ2VuZXJhdGVDb2RlRnJhbWUgKFxuICBzb3VyY2UsXG4gIHN0YXJ0LFxuICBlbmRcbikge1xuICBpZiAoIHN0YXJ0ID09PSB2b2lkIDAgKSBzdGFydCA9IDA7XG4gIGlmICggZW5kID09PSB2b2lkIDAgKSBlbmQgPSBzb3VyY2UubGVuZ3RoO1xuXG4gIHZhciBsaW5lcyA9IHNvdXJjZS5zcGxpdCgvXFxyP1xcbi8pO1xuICB2YXIgY291bnQgPSAwO1xuICB2YXIgcmVzID0gW107XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcbiAgICBjb3VudCArPSBsaW5lc1tpXS5sZW5ndGggKyAxO1xuICAgIGlmIChjb3VudCA+PSBzdGFydCkge1xuICAgICAgZm9yICh2YXIgaiA9IGkgLSByYW5nZTsgaiA8PSBpICsgcmFuZ2UgfHwgZW5kID4gY291bnQ7IGorKykge1xuICAgICAgICBpZiAoaiA8IDAgfHwgaiA+PSBsaW5lcy5sZW5ndGgpIHsgY29udGludWUgfVxuICAgICAgICByZXMucHVzaCgoXCJcIiArIChqICsgMSkgKyAocmVwZWF0JDEoXCIgXCIsIDMgLSBTdHJpbmcoaiArIDEpLmxlbmd0aCkpICsgXCJ8ICBcIiArIChsaW5lc1tqXSkpKTtcbiAgICAgICAgdmFyIGxpbmVMZW5ndGggPSBsaW5lc1tqXS5sZW5ndGg7XG4gICAgICAgIGlmIChqID09PSBpKSB7XG4gICAgICAgICAgLy8gcHVzaCB1bmRlcmxpbmVcbiAgICAgICAgICB2YXIgcGFkID0gc3RhcnQgLSAoY291bnQgLSBsaW5lTGVuZ3RoKSArIDE7XG4gICAgICAgICAgdmFyIGxlbmd0aCA9IGVuZCA+IGNvdW50ID8gbGluZUxlbmd0aCAtIHBhZCA6IGVuZCAtIHN0YXJ0O1xuICAgICAgICAgIHJlcy5wdXNoKFwiICAgfCAgXCIgKyByZXBlYXQkMShcIiBcIiwgcGFkKSArIHJlcGVhdCQxKFwiXlwiLCBsZW5ndGgpKTtcbiAgICAgICAgfSBlbHNlIGlmIChqID4gaSkge1xuICAgICAgICAgIGlmIChlbmQgPiBjb3VudCkge1xuICAgICAgICAgICAgdmFyIGxlbmd0aCQxID0gTWF0aC5taW4oZW5kIC0gY291bnQsIGxpbmVMZW5ndGgpO1xuICAgICAgICAgICAgcmVzLnB1c2goXCIgICB8ICBcIiArIHJlcGVhdCQxKFwiXlwiLCBsZW5ndGgkMSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb3VudCArPSBsaW5lTGVuZ3RoICsgMTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlcy5qb2luKCdcXG4nKVxufVxuXG5mdW5jdGlvbiByZXBlYXQkMSAoc3RyLCBuKSB7XG4gIHZhciByZXN1bHQgPSAnJztcbiAgaWYgKG4gPiAwKSB7XG4gICAgd2hpbGUgKHRydWUpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgICAgaWYgKG4gJiAxKSB7IHJlc3VsdCArPSBzdHI7IH1cbiAgICAgIG4gPj4+PSAxO1xuICAgICAgaWYgKG4gPD0gMCkgeyBicmVhayB9XG4gICAgICBzdHIgKz0gc3RyO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0XG59XG5cbi8qICAqL1xuXG5cblxuZnVuY3Rpb24gY3JlYXRlRnVuY3Rpb24gKGNvZGUsIGVycm9ycykge1xuICB0cnkge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb24oY29kZSlcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgZXJyb3JzLnB1c2goeyBlcnI6IGVyciwgY29kZTogY29kZSB9KTtcbiAgICByZXR1cm4gbm9vcFxuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUNvbXBpbGVUb0Z1bmN0aW9uRm4gKGNvbXBpbGUpIHtcbiAgdmFyIGNhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICByZXR1cm4gZnVuY3Rpb24gY29tcGlsZVRvRnVuY3Rpb25zIChcbiAgICB0ZW1wbGF0ZSxcbiAgICBvcHRpb25zLFxuICAgIHZtXG4gICkge1xuICAgIG9wdGlvbnMgPSBleHRlbmQoe30sIG9wdGlvbnMpO1xuICAgIHZhciB3YXJuJCQxID0gb3B0aW9ucy53YXJuIHx8IHdhcm47XG4gICAgZGVsZXRlIG9wdGlvbnMud2FybjtcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIHtcbiAgICAgIC8vIGRldGVjdCBwb3NzaWJsZSBDU1AgcmVzdHJpY3Rpb25cbiAgICAgIHRyeSB7XG4gICAgICAgIG5ldyBGdW5jdGlvbigncmV0dXJuIDEnKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKGUudG9TdHJpbmcoKS5tYXRjaCgvdW5zYWZlLWV2YWx8Q1NQLykpIHtcbiAgICAgICAgICB3YXJuJCQxKFxuICAgICAgICAgICAgJ0l0IHNlZW1zIHlvdSBhcmUgdXNpbmcgdGhlIHN0YW5kYWxvbmUgYnVpbGQgb2YgVnVlLmpzIGluIGFuICcgK1xuICAgICAgICAgICAgJ2Vudmlyb25tZW50IHdpdGggQ29udGVudCBTZWN1cml0eSBQb2xpY3kgdGhhdCBwcm9oaWJpdHMgdW5zYWZlLWV2YWwuICcgK1xuICAgICAgICAgICAgJ1RoZSB0ZW1wbGF0ZSBjb21waWxlciBjYW5ub3Qgd29yayBpbiB0aGlzIGVudmlyb25tZW50LiBDb25zaWRlciAnICtcbiAgICAgICAgICAgICdyZWxheGluZyB0aGUgcG9saWN5IHRvIGFsbG93IHVuc2FmZS1ldmFsIG9yIHByZS1jb21waWxpbmcgeW91ciAnICtcbiAgICAgICAgICAgICd0ZW1wbGF0ZXMgaW50byByZW5kZXIgZnVuY3Rpb25zLidcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gY2hlY2sgY2FjaGVcbiAgICB2YXIga2V5ID0gb3B0aW9ucy5kZWxpbWl0ZXJzXG4gICAgICA/IFN0cmluZyhvcHRpb25zLmRlbGltaXRlcnMpICsgdGVtcGxhdGVcbiAgICAgIDogdGVtcGxhdGU7XG4gICAgaWYgKGNhY2hlW2tleV0pIHtcbiAgICAgIHJldHVybiBjYWNoZVtrZXldXG4gICAgfVxuXG4gICAgLy8gY29tcGlsZVxuICAgIHZhciBjb21waWxlZCA9IGNvbXBpbGUodGVtcGxhdGUsIG9wdGlvbnMpO1xuXG4gICAgLy8gY2hlY2sgY29tcGlsYXRpb24gZXJyb3JzL3RpcHNcbiAgICB7XG4gICAgICBpZiAoY29tcGlsZWQuZXJyb3JzICYmIGNvbXBpbGVkLmVycm9ycy5sZW5ndGgpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMub3V0cHV0U291cmNlUmFuZ2UpIHtcbiAgICAgICAgICBjb21waWxlZC5lcnJvcnMuZm9yRWFjaChmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgd2FybiQkMShcbiAgICAgICAgICAgICAgXCJFcnJvciBjb21waWxpbmcgdGVtcGxhdGU6XFxuXFxuXCIgKyAoZS5tc2cpICsgXCJcXG5cXG5cIiArXG4gICAgICAgICAgICAgIGdlbmVyYXRlQ29kZUZyYW1lKHRlbXBsYXRlLCBlLnN0YXJ0LCBlLmVuZCksXG4gICAgICAgICAgICAgIHZtXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHdhcm4kJDEoXG4gICAgICAgICAgICBcIkVycm9yIGNvbXBpbGluZyB0ZW1wbGF0ZTpcXG5cXG5cIiArIHRlbXBsYXRlICsgXCJcXG5cXG5cIiArXG4gICAgICAgICAgICBjb21waWxlZC5lcnJvcnMubWFwKGZ1bmN0aW9uIChlKSB7IHJldHVybiAoXCItIFwiICsgZSk7IH0pLmpvaW4oJ1xcbicpICsgJ1xcbicsXG4gICAgICAgICAgICB2bVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChjb21waWxlZC50aXBzICYmIGNvbXBpbGVkLnRpcHMubGVuZ3RoKSB7XG4gICAgICAgIGlmIChvcHRpb25zLm91dHB1dFNvdXJjZVJhbmdlKSB7XG4gICAgICAgICAgY29tcGlsZWQudGlwcy5mb3JFYWNoKGZ1bmN0aW9uIChlKSB7IHJldHVybiB0aXAoZS5tc2csIHZtKTsgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29tcGlsZWQudGlwcy5mb3JFYWNoKGZ1bmN0aW9uIChtc2cpIHsgcmV0dXJuIHRpcChtc2csIHZtKTsgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyB0dXJuIGNvZGUgaW50byBmdW5jdGlvbnNcbiAgICB2YXIgcmVzID0ge307XG4gICAgdmFyIGZuR2VuRXJyb3JzID0gW107XG4gICAgcmVzLnJlbmRlciA9IGNyZWF0ZUZ1bmN0aW9uKGNvbXBpbGVkLnJlbmRlciwgZm5HZW5FcnJvcnMpO1xuICAgIHJlcy5zdGF0aWNSZW5kZXJGbnMgPSBjb21waWxlZC5zdGF0aWNSZW5kZXJGbnMubWFwKGZ1bmN0aW9uIChjb2RlKSB7XG4gICAgICByZXR1cm4gY3JlYXRlRnVuY3Rpb24oY29kZSwgZm5HZW5FcnJvcnMpXG4gICAgfSk7XG5cbiAgICAvLyBjaGVjayBmdW5jdGlvbiBnZW5lcmF0aW9uIGVycm9ycy5cbiAgICAvLyB0aGlzIHNob3VsZCBvbmx5IGhhcHBlbiBpZiB0aGVyZSBpcyBhIGJ1ZyBpbiB0aGUgY29tcGlsZXIgaXRzZWxmLlxuICAgIC8vIG1vc3RseSBmb3IgY29kZWdlbiBkZXZlbG9wbWVudCB1c2VcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICB7XG4gICAgICBpZiAoKCFjb21waWxlZC5lcnJvcnMgfHwgIWNvbXBpbGVkLmVycm9ycy5sZW5ndGgpICYmIGZuR2VuRXJyb3JzLmxlbmd0aCkge1xuICAgICAgICB3YXJuJCQxKFxuICAgICAgICAgIFwiRmFpbGVkIHRvIGdlbmVyYXRlIHJlbmRlciBmdW5jdGlvbjpcXG5cXG5cIiArXG4gICAgICAgICAgZm5HZW5FcnJvcnMubWFwKGZ1bmN0aW9uIChyZWYpIHtcbiAgICAgICAgICAgIHZhciBlcnIgPSByZWYuZXJyO1xuICAgICAgICAgICAgdmFyIGNvZGUgPSByZWYuY29kZTtcblxuICAgICAgICAgICAgcmV0dXJuICgoZXJyLnRvU3RyaW5nKCkpICsgXCIgaW5cXG5cXG5cIiArIGNvZGUgKyBcIlxcblwiKTtcbiAgICAgICAgfSkuam9pbignXFxuJyksXG4gICAgICAgICAgdm1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gKGNhY2hlW2tleV0gPSByZXMpXG4gIH1cbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIGNyZWF0ZUNvbXBpbGVyQ3JlYXRvciAoYmFzZUNvbXBpbGUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGNyZWF0ZUNvbXBpbGVyIChiYXNlT3B0aW9ucykge1xuICAgIGZ1bmN0aW9uIGNvbXBpbGUgKFxuICAgICAgdGVtcGxhdGUsXG4gICAgICBvcHRpb25zXG4gICAgKSB7XG4gICAgICB2YXIgZmluYWxPcHRpb25zID0gT2JqZWN0LmNyZWF0ZShiYXNlT3B0aW9ucyk7XG4gICAgICB2YXIgZXJyb3JzID0gW107XG4gICAgICB2YXIgdGlwcyA9IFtdO1xuXG4gICAgICB2YXIgd2FybiA9IGZ1bmN0aW9uIChtc2csIHJhbmdlLCB0aXApIHtcbiAgICAgICAgKHRpcCA/IHRpcHMgOiBlcnJvcnMpLnB1c2gobXNnKTtcbiAgICAgIH07XG5cbiAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgIGlmIChvcHRpb25zLm91dHB1dFNvdXJjZVJhbmdlKSB7XG4gICAgICAgICAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gICAgICAgICAgdmFyIGxlYWRpbmdTcGFjZUxlbmd0aCA9IHRlbXBsYXRlLm1hdGNoKC9eXFxzKi8pWzBdLmxlbmd0aDtcblxuICAgICAgICAgIHdhcm4gPSBmdW5jdGlvbiAobXNnLCByYW5nZSwgdGlwKSB7XG4gICAgICAgICAgICB2YXIgZGF0YSA9IHsgbXNnOiBtc2cgfTtcbiAgICAgICAgICAgIGlmIChyYW5nZSkge1xuICAgICAgICAgICAgICBpZiAocmFuZ2Uuc3RhcnQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGRhdGEuc3RhcnQgPSByYW5nZS5zdGFydCArIGxlYWRpbmdTcGFjZUxlbmd0aDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAocmFuZ2UuZW5kICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBkYXRhLmVuZCA9IHJhbmdlLmVuZCArIGxlYWRpbmdTcGFjZUxlbmd0aDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgKHRpcCA/IHRpcHMgOiBlcnJvcnMpLnB1c2goZGF0YSk7XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICAvLyBtZXJnZSBjdXN0b20gbW9kdWxlc1xuICAgICAgICBpZiAob3B0aW9ucy5tb2R1bGVzKSB7XG4gICAgICAgICAgZmluYWxPcHRpb25zLm1vZHVsZXMgPVxuICAgICAgICAgICAgKGJhc2VPcHRpb25zLm1vZHVsZXMgfHwgW10pLmNvbmNhdChvcHRpb25zLm1vZHVsZXMpO1xuICAgICAgICB9XG4gICAgICAgIC8vIG1lcmdlIGN1c3RvbSBkaXJlY3RpdmVzXG4gICAgICAgIGlmIChvcHRpb25zLmRpcmVjdGl2ZXMpIHtcbiAgICAgICAgICBmaW5hbE9wdGlvbnMuZGlyZWN0aXZlcyA9IGV4dGVuZChcbiAgICAgICAgICAgIE9iamVjdC5jcmVhdGUoYmFzZU9wdGlvbnMuZGlyZWN0aXZlcyB8fCBudWxsKSxcbiAgICAgICAgICAgIG9wdGlvbnMuZGlyZWN0aXZlc1xuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY29weSBvdGhlciBvcHRpb25zXG4gICAgICAgIGZvciAodmFyIGtleSBpbiBvcHRpb25zKSB7XG4gICAgICAgICAgaWYgKGtleSAhPT0gJ21vZHVsZXMnICYmIGtleSAhPT0gJ2RpcmVjdGl2ZXMnKSB7XG4gICAgICAgICAgICBmaW5hbE9wdGlvbnNba2V5XSA9IG9wdGlvbnNba2V5XTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZmluYWxPcHRpb25zLndhcm4gPSB3YXJuO1xuXG4gICAgICB2YXIgY29tcGlsZWQgPSBiYXNlQ29tcGlsZSh0ZW1wbGF0ZS50cmltKCksIGZpbmFsT3B0aW9ucyk7XG4gICAgICB7XG4gICAgICAgIGRldGVjdEVycm9ycyhjb21waWxlZC5hc3QsIHdhcm4pO1xuICAgICAgfVxuICAgICAgY29tcGlsZWQuZXJyb3JzID0gZXJyb3JzO1xuICAgICAgY29tcGlsZWQudGlwcyA9IHRpcHM7XG4gICAgICByZXR1cm4gY29tcGlsZWRcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgY29tcGlsZTogY29tcGlsZSxcbiAgICAgIGNvbXBpbGVUb0Z1bmN0aW9uczogY3JlYXRlQ29tcGlsZVRvRnVuY3Rpb25Gbihjb21waWxlKVxuICAgIH1cbiAgfVxufVxuXG4vKiAgKi9cblxuLy8gYGNyZWF0ZUNvbXBpbGVyQ3JlYXRvcmAgYWxsb3dzIGNyZWF0aW5nIGNvbXBpbGVycyB0aGF0IHVzZSBhbHRlcm5hdGl2ZVxuLy8gcGFyc2VyL29wdGltaXplci9jb2RlZ2VuLCBlLmcgdGhlIFNTUiBvcHRpbWl6aW5nIGNvbXBpbGVyLlxuLy8gSGVyZSB3ZSBqdXN0IGV4cG9ydCBhIGRlZmF1bHQgY29tcGlsZXIgdXNpbmcgdGhlIGRlZmF1bHQgcGFydHMuXG52YXIgY3JlYXRlQ29tcGlsZXIgPSBjcmVhdGVDb21waWxlckNyZWF0b3IoZnVuY3Rpb24gYmFzZUNvbXBpbGUgKFxuICB0ZW1wbGF0ZSxcbiAgb3B0aW9uc1xuKSB7XG4gIHZhciBhc3QgPSBwYXJzZSh0ZW1wbGF0ZS50cmltKCksIG9wdGlvbnMpO1xuICBpZiAob3B0aW9ucy5vcHRpbWl6ZSAhPT0gZmFsc2UpIHtcbiAgICBvcHRpbWl6ZShhc3QsIG9wdGlvbnMpO1xuICB9XG4gIHZhciBjb2RlID0gZ2VuZXJhdGUoYXN0LCBvcHRpb25zKTtcbiAgcmV0dXJuIHtcbiAgICBhc3Q6IGFzdCxcbiAgICByZW5kZXI6IGNvZGUucmVuZGVyLFxuICAgIHN0YXRpY1JlbmRlckZuczogY29kZS5zdGF0aWNSZW5kZXJGbnNcbiAgfVxufSk7XG5cbi8qICAqL1xuXG52YXIgcmVmJDEgPSBjcmVhdGVDb21waWxlcihiYXNlT3B0aW9ucyk7XG52YXIgY29tcGlsZSA9IHJlZiQxLmNvbXBpbGU7XG52YXIgY29tcGlsZVRvRnVuY3Rpb25zID0gcmVmJDEuY29tcGlsZVRvRnVuY3Rpb25zO1xuXG4vKiAgKi9cblxuLy8gY2hlY2sgd2hldGhlciBjdXJyZW50IGJyb3dzZXIgZW5jb2RlcyBhIGNoYXIgaW5zaWRlIGF0dHJpYnV0ZSB2YWx1ZXNcbnZhciBkaXY7XG5mdW5jdGlvbiBnZXRTaG91bGREZWNvZGUgKGhyZWYpIHtcbiAgZGl2ID0gZGl2IHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICBkaXYuaW5uZXJIVE1MID0gaHJlZiA/IFwiPGEgaHJlZj1cXFwiXFxuXFxcIi8+XCIgOiBcIjxkaXYgYT1cXFwiXFxuXFxcIi8+XCI7XG4gIHJldHVybiBkaXYuaW5uZXJIVE1MLmluZGV4T2YoJyYjMTA7JykgPiAwXG59XG5cbi8vICMzNjYzOiBJRSBlbmNvZGVzIG5ld2xpbmVzIGluc2lkZSBhdHRyaWJ1dGUgdmFsdWVzIHdoaWxlIG90aGVyIGJyb3dzZXJzIGRvbid0XG52YXIgc2hvdWxkRGVjb2RlTmV3bGluZXMgPSBpbkJyb3dzZXIgPyBnZXRTaG91bGREZWNvZGUoZmFsc2UpIDogZmFsc2U7XG4vLyAjNjgyODogY2hyb21lIGVuY29kZXMgY29udGVudCBpbiBhW2hyZWZdXG52YXIgc2hvdWxkRGVjb2RlTmV3bGluZXNGb3JIcmVmID0gaW5Ccm93c2VyID8gZ2V0U2hvdWxkRGVjb2RlKHRydWUpIDogZmFsc2U7XG5cbi8qICAqL1xuXG52YXIgaWRUb1RlbXBsYXRlID0gY2FjaGVkKGZ1bmN0aW9uIChpZCkge1xuICB2YXIgZWwgPSBxdWVyeShpZCk7XG4gIHJldHVybiBlbCAmJiBlbC5pbm5lckhUTUxcbn0pO1xuXG52YXIgbW91bnQgPSBWdWUucHJvdG90eXBlLiRtb3VudDtcblZ1ZS5wcm90b3R5cGUuJG1vdW50ID0gZnVuY3Rpb24gKFxuICBlbCxcbiAgaHlkcmF0aW5nXG4pIHtcbiAgZWwgPSBlbCAmJiBxdWVyeShlbCk7XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmIChlbCA9PT0gZG9jdW1lbnQuYm9keSB8fCBlbCA9PT0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgd2FybihcbiAgICAgIFwiRG8gbm90IG1vdW50IFZ1ZSB0byA8aHRtbD4gb3IgPGJvZHk+IC0gbW91bnQgdG8gbm9ybWFsIGVsZW1lbnRzIGluc3RlYWQuXCJcbiAgICApO1xuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICB2YXIgb3B0aW9ucyA9IHRoaXMuJG9wdGlvbnM7XG4gIC8vIHJlc29sdmUgdGVtcGxhdGUvZWwgYW5kIGNvbnZlcnQgdG8gcmVuZGVyIGZ1bmN0aW9uXG4gIGlmICghb3B0aW9ucy5yZW5kZXIpIHtcbiAgICB2YXIgdGVtcGxhdGUgPSBvcHRpb25zLnRlbXBsYXRlO1xuICAgIGlmICh0ZW1wbGF0ZSkge1xuICAgICAgaWYgKHR5cGVvZiB0ZW1wbGF0ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgaWYgKHRlbXBsYXRlLmNoYXJBdCgwKSA9PT0gJyMnKSB7XG4gICAgICAgICAgdGVtcGxhdGUgPSBpZFRvVGVtcGxhdGUodGVtcGxhdGUpO1xuICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgIGlmICghdGVtcGxhdGUpIHtcbiAgICAgICAgICAgIHdhcm4oXG4gICAgICAgICAgICAgIChcIlRlbXBsYXRlIGVsZW1lbnQgbm90IGZvdW5kIG9yIGlzIGVtcHR5OiBcIiArIChvcHRpb25zLnRlbXBsYXRlKSksXG4gICAgICAgICAgICAgIHRoaXNcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHRlbXBsYXRlLm5vZGVUeXBlKSB7XG4gICAgICAgIHRlbXBsYXRlID0gdGVtcGxhdGUuaW5uZXJIVE1MO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAge1xuICAgICAgICAgIHdhcm4oJ2ludmFsaWQgdGVtcGxhdGUgb3B0aW9uOicgKyB0ZW1wbGF0ZSwgdGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXNcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGVsKSB7XG4gICAgICB0ZW1wbGF0ZSA9IGdldE91dGVySFRNTChlbCk7XG4gICAgfVxuICAgIGlmICh0ZW1wbGF0ZSkge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAoY29uZmlnLnBlcmZvcm1hbmNlICYmIG1hcmspIHtcbiAgICAgICAgbWFyaygnY29tcGlsZScpO1xuICAgICAgfVxuXG4gICAgICB2YXIgcmVmID0gY29tcGlsZVRvRnVuY3Rpb25zKHRlbXBsYXRlLCB7XG4gICAgICAgIG91dHB1dFNvdXJjZVJhbmdlOiBcImRldmVsb3BtZW50XCIgIT09ICdwcm9kdWN0aW9uJyxcbiAgICAgICAgc2hvdWxkRGVjb2RlTmV3bGluZXM6IHNob3VsZERlY29kZU5ld2xpbmVzLFxuICAgICAgICBzaG91bGREZWNvZGVOZXdsaW5lc0ZvckhyZWY6IHNob3VsZERlY29kZU5ld2xpbmVzRm9ySHJlZixcbiAgICAgICAgZGVsaW1pdGVyczogb3B0aW9ucy5kZWxpbWl0ZXJzLFxuICAgICAgICBjb21tZW50czogb3B0aW9ucy5jb21tZW50c1xuICAgICAgfSwgdGhpcyk7XG4gICAgICB2YXIgcmVuZGVyID0gcmVmLnJlbmRlcjtcbiAgICAgIHZhciBzdGF0aWNSZW5kZXJGbnMgPSByZWYuc3RhdGljUmVuZGVyRm5zO1xuICAgICAgb3B0aW9ucy5yZW5kZXIgPSByZW5kZXI7XG4gICAgICBvcHRpb25zLnN0YXRpY1JlbmRlckZucyA9IHN0YXRpY1JlbmRlckZucztcblxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAoY29uZmlnLnBlcmZvcm1hbmNlICYmIG1hcmspIHtcbiAgICAgICAgbWFyaygnY29tcGlsZSBlbmQnKTtcbiAgICAgICAgbWVhc3VyZSgoXCJ2dWUgXCIgKyAodGhpcy5fbmFtZSkgKyBcIiBjb21waWxlXCIpLCAnY29tcGlsZScsICdjb21waWxlIGVuZCcpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gbW91bnQuY2FsbCh0aGlzLCBlbCwgaHlkcmF0aW5nKVxufTtcblxuLyoqXG4gKiBHZXQgb3V0ZXJIVE1MIG9mIGVsZW1lbnRzLCB0YWtpbmcgY2FyZVxuICogb2YgU1ZHIGVsZW1lbnRzIGluIElFIGFzIHdlbGwuXG4gKi9cbmZ1bmN0aW9uIGdldE91dGVySFRNTCAoZWwpIHtcbiAgaWYgKGVsLm91dGVySFRNTCkge1xuICAgIHJldHVybiBlbC5vdXRlckhUTUxcbiAgfSBlbHNlIHtcbiAgICB2YXIgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgY29udGFpbmVyLmFwcGVuZENoaWxkKGVsLmNsb25lTm9kZSh0cnVlKSk7XG4gICAgcmV0dXJuIGNvbnRhaW5lci5pbm5lckhUTUxcbiAgfVxufVxuXG5WdWUuY29tcGlsZSA9IGNvbXBpbGVUb0Z1bmN0aW9ucztcblxubW9kdWxlLmV4cG9ydHMgPSBWdWU7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/vue/dist/vue.common.dev.js\n");
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/vue/dist/vue.common.js":
|
||
/*!*********************************************!*\
|
||
!*** ./node_modules/vue/dist/vue.common.js ***!
|
||
\*********************************************/
|
||
/*! no static exports found */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
eval("if (false) {} else {\n module.exports = __webpack_require__(/*! ./vue.common.dev.js */ \"./node_modules/vue/dist/vue.common.dev.js\")\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdnVlL2Rpc3QvdnVlLmNvbW1vbi5qcz81ZWU1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLElBQUksS0FBcUMsRUFBRSxFQUUxQztBQUNELG1CQUFtQixtQkFBTyxDQUFDLHNFQUFxQjtBQUNoRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy92dWUvZGlzdC92dWUuY29tbW9uLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL3Z1ZS5jb21tb24ucHJvZC5qcycpXG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vdnVlLmNvbW1vbi5kZXYuanMnKVxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/vue/dist/vue.common.js\n");
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/webpack/buildin/global.js":
|
||
/*!***********************************!*\
|
||
!*** (webpack)/buildin/global.js ***!
|
||
\***********************************/
|
||
/*! no static exports found */
|
||
/***/ (function(module, exports) {
|
||
|
||
eval("var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vKHdlYnBhY2spL2J1aWxkaW4vZ2xvYmFsLmpzP2NkMDAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSw0Q0FBNEM7O0FBRTVDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3dlYnBhY2svYnVpbGRpbi9nbG9iYWwuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgZztcblxuLy8gVGhpcyB3b3JrcyBpbiBub24tc3RyaWN0IG1vZGVcbmcgPSAoZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzO1xufSkoKTtcblxudHJ5IHtcblx0Ly8gVGhpcyB3b3JrcyBpZiBldmFsIGlzIGFsbG93ZWQgKHNlZSBDU1ApXG5cdGcgPSBnIHx8IG5ldyBGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCk7XG59IGNhdGNoIChlKSB7XG5cdC8vIFRoaXMgd29ya3MgaWYgdGhlIHdpbmRvdyByZWZlcmVuY2UgaXMgYXZhaWxhYmxlXG5cdGlmICh0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiKSBnID0gd2luZG93O1xufVxuXG4vLyBnIGNhbiBzdGlsbCBiZSB1bmRlZmluZWQsIGJ1dCBub3RoaW5nIHRvIGRvIGFib3V0IGl0Li4uXG4vLyBXZSByZXR1cm4gdW5kZWZpbmVkLCBpbnN0ZWFkIG9mIG5vdGhpbmcgaGVyZSwgc28gaXQnc1xuLy8gZWFzaWVyIHRvIGhhbmRsZSB0aGlzIGNhc2UuIGlmKCFnbG9iYWwpIHsgLi4ufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGc7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/webpack/buildin/global.js\n");
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/webpack/buildin/module.js":
|
||
/*!***********************************!*\
|
||
!*** (webpack)/buildin/module.js ***!
|
||
\***********************************/
|
||
/*! no static exports found */
|
||
/***/ (function(module, exports) {
|
||
|
||
eval("module.exports = function(module) {\n\tif (!module.webpackPolyfill) {\n\t\tmodule.deprecate = function() {};\n\t\tmodule.paths = [];\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vKHdlYnBhY2spL2J1aWxkaW4vbW9kdWxlLmpzP2NlZDIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3dlYnBhY2svYnVpbGRpbi9tb2R1bGUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuXHRpZiAoIW1vZHVsZS53ZWJwYWNrUG9seWZpbGwpIHtcblx0XHRtb2R1bGUuZGVwcmVjYXRlID0gZnVuY3Rpb24oKSB7fTtcblx0XHRtb2R1bGUucGF0aHMgPSBbXTtcblx0XHQvLyBtb2R1bGUucGFyZW50ID0gdW5kZWZpbmVkIGJ5IGRlZmF1bHRcblx0XHRpZiAoIW1vZHVsZS5jaGlsZHJlbikgbW9kdWxlLmNoaWxkcmVuID0gW107XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZSwgXCJsb2FkZWRcIiwge1xuXHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdGdldDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiBtb2R1bGUubDtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLCBcImlkXCIsIHtcblx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gbW9kdWxlLmk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0bW9kdWxlLndlYnBhY2tQb2x5ZmlsbCA9IDE7XG5cdH1cblx0cmV0dXJuIG1vZHVsZTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/webpack/buildin/module.js\n");
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./test/js/src/index.js":
|
||
/*!******************************!*\
|
||
!*** ./test/js/src/index.js ***!
|
||
\******************************/
|
||
/*! no exports provided */
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.common.js\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _dist_vue_context__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../dist/vue-context */ \"./dist/vue-context.js\");\n/* harmony import */ var _dist_vue_context__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_dist_vue_context__WEBPACK_IMPORTED_MODULE_1__);\n\n\nnew vue__WEBPACK_IMPORTED_MODULE_0___default.a({\n components: {\n VueContext: _dist_vue_context__WEBPACK_IMPORTED_MODULE_1__[\"VueContext\"]\n },\n data: {\n close: true\n },\n methods: {\n onClick: function onClick(data) {// console.log(data);\n },\n onClose: function onClose() {\n console.log('closing');\n },\n onOpen: function onOpen(event, data, top, left) {\n console.log(data, top, left);\n }\n }\n}).$mount('#app');//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi90ZXN0L2pzL3NyYy9pbmRleC5qcz84YTkyIl0sIm5hbWVzIjpbIlZ1ZSIsImNvbXBvbmVudHMiLCJWdWVDb250ZXh0IiwiZGF0YSIsImNsb3NlIiwibWV0aG9kcyIsIm9uQ2xpY2siLCJvbkNsb3NlIiwiY29uc29sZSIsImxvZyIsIm9uT3BlbiIsImV2ZW50IiwidG9wIiwibGVmdCIsIiRtb3VudCJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFFQSxJQUFJQSwwQ0FBSixDQUFRO0FBQ0pDLFlBQVUsRUFBRTtBQUNSQyxjQUFVLEVBQVZBLDREQUFVQTtBQURGLEdBRFI7QUFLSkMsTUFBSSxFQUFFO0FBQ0ZDLFNBQUssRUFBRTtBQURMLEdBTEY7QUFTSkMsU0FBTyxFQUFFO0FBQ0xDLFdBREssbUJBQ0lILElBREosRUFDVSxDQUNYO0FBQ0gsS0FISTtBQUtMSSxXQUxLLHFCQUtNO0FBQ1BDLGFBQU8sQ0FBQ0MsR0FBUixDQUFZLFNBQVo7QUFDSCxLQVBJO0FBU0xDLFVBVEssa0JBU0dDLEtBVEgsRUFTVVIsSUFUVixFQVNnQlMsR0FUaEIsRUFTcUJDLElBVHJCLEVBUzJCO0FBQzVCTCxhQUFPLENBQUNDLEdBQVIsQ0FBWU4sSUFBWixFQUFrQlMsR0FBbEIsRUFBdUJDLElBQXZCO0FBQ0g7QUFYSTtBQVRMLENBQVIsRUFzQkdDLE1BdEJILENBc0JVLE1BdEJWIiwiZmlsZSI6Ii4vdGVzdC9qcy9zcmMvaW5kZXguanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgVnVlIGZyb20gJ3Z1ZSc7XHJcbmltcG9ydCB7IFZ1ZUNvbnRleHQgfSBmcm9tICcuLi8uLi8uLi9kaXN0L3Z1ZS1jb250ZXh0JztcclxuXHJcbm5ldyBWdWUoe1xyXG4gICAgY29tcG9uZW50czoge1xyXG4gICAgICAgIFZ1ZUNvbnRleHRcclxuICAgIH0sXHJcblxyXG4gICAgZGF0YToge1xyXG4gICAgICAgIGNsb3NlOiB0cnVlXHJcbiAgICB9LFxyXG5cclxuICAgIG1ldGhvZHM6IHtcclxuICAgICAgICBvbkNsaWNrIChkYXRhKSB7XHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGRhdGEpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIG9uQ2xvc2UgKCkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnY2xvc2luZycpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIG9uT3BlbiAoZXZlbnQsIGRhdGEsIHRvcCwgbGVmdCkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhkYXRhLCB0b3AsIGxlZnQpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbn0pLiRtb3VudCgnI2FwcCcpO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./test/js/src/index.js\n");
|
||
|
||
/***/ }),
|
||
|
||
/***/ 0:
|
||
/*!************************************!*\
|
||
!*** multi ./test/js/src/index.js ***!
|
||
\************************************/
|
||
/*! no static exports found */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
module.exports = __webpack_require__(/*! C:\Users\wilkr\Documents\projects\npm\vue-context\test\js\src\index.js */"./test/js/src/index.js");
|
||
|
||
|
||
/***/ })
|
||
|
||
/******/ }); |