MediaWiki:Gadget-JSX.js
Google Chrome、Microsoft Edge、Mozilla Firefox、Safari:按住⇧ Shift,同时单击“刷新”。
Copyright © The author
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
- Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
- Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
- Neither the name of The author nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
This software is provided by The author and contributors "as is" and any express or implied warranties, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose are disclaimed. In no event shall The author and contributors be liable for any direct, indirect, incidental, special, exemplary, or consequential damages (including, but not limited to, procurement of substitute goods or services; loss of use, data, or profits; or business interruption) however caused and on any theory of liability, whether in contract, strict liability, or tort (including negligence or otherwise) arising in any way out of the use of this software, even if advised of the possibility of such damage.
/**
* SPDX-License-Identifier: BSD-3-Clause
* _addText: '{{Gadget Header|license=BSD|attribution=proteriax}}'
*
* @base {@link https://github.com/alex-kinokon/jsx-dom}
* @source {@link https://git.qiuwen.net.cn/InterfaceAdmin/QiuwenGadgets/src/branch/master/src/React}
* @license BSD-3-Clause {@link https://github.com/alex-kinokon/jsx-dom/blob/master/LICENSE}
*/
/**
* BSD 3-Clause License
*
* Copyright (c) proteriax
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/**
* +------------------------------------------------------------+
* | === WARNING: GLOBAL GADGET FILE === |
* +------------------------------------------------------------+
* | All changes should be made in the repository, |
* | otherwise they will be lost. |
* +------------------------------------------------------------+
* | Changes to this page may affect many users. |
* | Please discuss changes by opening an issue before editing. |
* +------------------------------------------------------------+
*/
/* <nowiki> */
(() => {
"use strict";
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __esm = (fn, res) => function __init() {
return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
};
var __commonJS = (cb, mod) => function __require() {
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/global-this.js
var require_global_this = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/global-this.js"(exports2, module2) {
"use strict";
var check = function(it) {
return it && it.Math === Math && it;
};
module2.exports = // eslint-disable-next-line es/no-global-this -- safe
check(typeof globalThis == "object" && globalThis) || check(typeof window == "object" && window) || // eslint-disable-next-line no-restricted-globals -- safe
check(typeof self == "object" && self) || check(typeof global == "object" && global) || check(typeof exports2 == "object" && exports2) || // eslint-disable-next-line no-new-func -- fallback
/* @__PURE__ */ function() {
return this;
}() || Function("return this")();
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/fails.js
var require_fails = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/fails.js"(exports2, module2) {
"use strict";
module2.exports = function(exec) {
try {
return !!exec();
} catch (error) {
return true;
}
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/descriptors.js
var require_descriptors = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/descriptors.js"(exports2, module2) {
"use strict";
var fails = require_fails();
module2.exports = !fails(function() {
return Object.defineProperty({}, 1, { get: function() {
return 7;
} })[1] !== 7;
});
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/function-bind-native.js
var require_function_bind_native = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/function-bind-native.js"(exports2, module2) {
"use strict";
var fails = require_fails();
module2.exports = !fails(function() {
var test = function() {
}.bind();
return typeof test != "function" || test.hasOwnProperty("prototype");
});
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/function-call.js
var require_function_call = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/function-call.js"(exports2, module2) {
"use strict";
var NATIVE_BIND = require_function_bind_native();
var call = Function.prototype.call;
module2.exports = NATIVE_BIND ? call.bind(call) : function() {
return call.apply(call, arguments);
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/object-property-is-enumerable.js
var require_object_property_is_enumerable = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/object-property-is-enumerable.js"(exports2) {
"use strict";
var $propertyIsEnumerable = {}.propertyIsEnumerable;
var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;
var NASHORN_BUG = getOwnPropertyDescriptor && !$propertyIsEnumerable.call({ 1: 2 }, 1);
exports2.f = NASHORN_BUG ? function propertyIsEnumerable(V) {
var descriptor = getOwnPropertyDescriptor(this, V);
return !!descriptor && descriptor.enumerable;
} : $propertyIsEnumerable;
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/create-property-descriptor.js
var require_create_property_descriptor = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/create-property-descriptor.js"(exports2, module2) {
"use strict";
module2.exports = function(bitmap, value) {
return {
enumerable: !(bitmap & 1),
configurable: !(bitmap & 2),
writable: !(bitmap & 4),
value
};
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/function-uncurry-this.js
var require_function_uncurry_this = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/function-uncurry-this.js"(exports2, module2) {
"use strict";
var NATIVE_BIND = require_function_bind_native();
var FunctionPrototype = Function.prototype;
var call = FunctionPrototype.call;
var uncurryThisWithBind = NATIVE_BIND && FunctionPrototype.bind.bind(call, call);
module2.exports = NATIVE_BIND ? uncurryThisWithBind : function(fn) {
return function() {
return call.apply(fn, arguments);
};
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/classof-raw.js
var require_classof_raw = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/classof-raw.js"(exports2, module2) {
"use strict";
var uncurryThis = require_function_uncurry_this();
var toString = uncurryThis({}.toString);
var stringSlice = uncurryThis("".slice);
module2.exports = function(it) {
return stringSlice(toString(it), 8, -1);
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/indexed-object.js
var require_indexed_object = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/indexed-object.js"(exports2, module2) {
"use strict";
var uncurryThis = require_function_uncurry_this();
var fails = require_fails();
var classof = require_classof_raw();
var $Object = Object;
var split = uncurryThis("".split);
module2.exports = fails(function() {
return !$Object("z").propertyIsEnumerable(0);
}) ? function(it) {
return classof(it) === "String" ? split(it, "") : $Object(it);
} : $Object;
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/is-null-or-undefined.js
var require_is_null_or_undefined = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/is-null-or-undefined.js"(exports2, module2) {
"use strict";
module2.exports = function(it) {
return it === null || it === void 0;
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/require-object-coercible.js
var require_require_object_coercible = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/require-object-coercible.js"(exports2, module2) {
"use strict";
var isNullOrUndefined = require_is_null_or_undefined();
var $TypeError = TypeError;
module2.exports = function(it) {
if (isNullOrUndefined(it)) throw new $TypeError("Can't call method on " + it);
return it;
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/to-indexed-object.js
var require_to_indexed_object = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/to-indexed-object.js"(exports2, module2) {
"use strict";
var IndexedObject = require_indexed_object();
var requireObjectCoercible = require_require_object_coercible();
module2.exports = function(it) {
return IndexedObject(requireObjectCoercible(it));
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/is-callable.js
var require_is_callable = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/is-callable.js"(exports2, module2) {
"use strict";
var documentAll = typeof document == "object" && document.all;
module2.exports = typeof documentAll == "undefined" && documentAll !== void 0 ? function(argument) {
return typeof argument == "function" || argument === documentAll;
} : function(argument) {
return typeof argument == "function";
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/is-object.js
var require_is_object = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/is-object.js"(exports2, module2) {
"use strict";
var isCallable = require_is_callable();
module2.exports = function(it) {
return typeof it == "object" ? it !== null : isCallable(it);
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/get-built-in.js
var require_get_built_in = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/get-built-in.js"(exports2, module2) {
"use strict";
var globalThis2 = require_global_this();
var isCallable = require_is_callable();
var aFunction = function(argument) {
return isCallable(argument) ? argument : void 0;
};
module2.exports = function(namespace, method) {
return arguments.length < 2 ? aFunction(globalThis2[namespace]) : globalThis2[namespace] && globalThis2[namespace][method];
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/object-is-prototype-of.js
var require_object_is_prototype_of = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/object-is-prototype-of.js"(exports2, module2) {
"use strict";
var uncurryThis = require_function_uncurry_this();
module2.exports = uncurryThis({}.isPrototypeOf);
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/environment-user-agent.js
var require_environment_user_agent = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/environment-user-agent.js"(exports2, module2) {
"use strict";
var globalThis2 = require_global_this();
var navigator2 = globalThis2.navigator;
var userAgent = navigator2 && navigator2.userAgent;
module2.exports = userAgent ? String(userAgent) : "";
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/environment-v8-version.js
var require_environment_v8_version = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/environment-v8-version.js"(exports2, module2) {
"use strict";
var globalThis2 = require_global_this();
var userAgent = require_environment_user_agent();
var process2 = globalThis2.process;
var Deno2 = globalThis2.Deno;
var versions = process2 && process2.versions || Deno2 && Deno2.version;
var v8 = versions && versions.v8;
var match;
var version;
if (v8) {
match = v8.split(".");
version = match[0] > 0 && match[0] < 4 ? 1 : +(match[0] + match[1]);
}
if (!version && userAgent) {
match = userAgent.match(/Edge\/(\d+)/);
if (!match || match[1] >= 74) {
match = userAgent.match(/Chrome\/(\d+)/);
if (match) version = +match[1];
}
}
module2.exports = version;
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/symbol-constructor-detection.js
var require_symbol_constructor_detection = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/symbol-constructor-detection.js"(exports2, module2) {
"use strict";
var V8_VERSION = require_environment_v8_version();
var fails = require_fails();
var globalThis2 = require_global_this();
var $String = globalThis2.String;
module2.exports = !!Object.getOwnPropertySymbols && !fails(function() {
var symbol = Symbol("symbol detection");
return !$String(symbol) || !(Object(symbol) instanceof Symbol) || // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances
!Symbol.sham && V8_VERSION && V8_VERSION < 41;
});
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/use-symbol-as-uid.js
var require_use_symbol_as_uid = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/use-symbol-as-uid.js"(exports2, module2) {
"use strict";
var NATIVE_SYMBOL = require_symbol_constructor_detection();
module2.exports = NATIVE_SYMBOL && !Symbol.sham && typeof Symbol.iterator == "symbol";
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/is-symbol.js
var require_is_symbol = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/is-symbol.js"(exports2, module2) {
"use strict";
var getBuiltIn = require_get_built_in();
var isCallable = require_is_callable();
var isPrototypeOf = require_object_is_prototype_of();
var USE_SYMBOL_AS_UID = require_use_symbol_as_uid();
var $Object = Object;
module2.exports = USE_SYMBOL_AS_UID ? function(it) {
return typeof it == "symbol";
} : function(it) {
var $Symbol = getBuiltIn("Symbol");
return isCallable($Symbol) && isPrototypeOf($Symbol.prototype, $Object(it));
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/try-to-string.js
var require_try_to_string = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/try-to-string.js"(exports2, module2) {
"use strict";
var $String = String;
module2.exports = function(argument) {
try {
return $String(argument);
} catch (error) {
return "Object";
}
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/a-callable.js
var require_a_callable = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/a-callable.js"(exports2, module2) {
"use strict";
var isCallable = require_is_callable();
var tryToString = require_try_to_string();
var $TypeError = TypeError;
module2.exports = function(argument) {
if (isCallable(argument)) return argument;
throw new $TypeError(tryToString(argument) + " is not a function");
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/get-method.js
var require_get_method = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/get-method.js"(exports2, module2) {
"use strict";
var aCallable = require_a_callable();
var isNullOrUndefined = require_is_null_or_undefined();
module2.exports = function(V, P) {
var func = V[P];
return isNullOrUndefined(func) ? void 0 : aCallable(func);
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/ordinary-to-primitive.js
var require_ordinary_to_primitive = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/ordinary-to-primitive.js"(exports2, module2) {
"use strict";
var call = require_function_call();
var isCallable = require_is_callable();
var isObject2 = require_is_object();
var $TypeError = TypeError;
module2.exports = function(input, pref) {
var fn, val;
if (pref === "string" && isCallable(fn = input.toString) && !isObject2(val = call(fn, input))) return val;
if (isCallable(fn = input.valueOf) && !isObject2(val = call(fn, input))) return val;
if (pref !== "string" && isCallable(fn = input.toString) && !isObject2(val = call(fn, input))) return val;
throw new $TypeError("Can't convert object to primitive value");
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/is-pure.js
var require_is_pure = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/is-pure.js"(exports2, module2) {
"use strict";
module2.exports = false;
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/define-global-property.js
var require_define_global_property = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/define-global-property.js"(exports2, module2) {
"use strict";
var globalThis2 = require_global_this();
var defineProperty = Object.defineProperty;
module2.exports = function(key, value) {
try {
defineProperty(globalThis2, key, { value, configurable: true, writable: true });
} catch (error) {
globalThis2[key] = value;
}
return value;
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/shared-store.js
var require_shared_store = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/shared-store.js"(exports2, module2) {
"use strict";
var IS_PURE = require_is_pure();
var globalThis2 = require_global_this();
var defineGlobalProperty = require_define_global_property();
var SHARED = "__core-js_shared__";
var store = module2.exports = globalThis2[SHARED] || defineGlobalProperty(SHARED, {});
(store.versions || (store.versions = [])).push({
version: "3.41.0",
mode: IS_PURE ? "pure" : "global",
copyright: "© 2014-2025 Denis Pushkarev (zloirock.ru)",
license: "https://github.com/zloirock/core-js/blob/v3.41.0/LICENSE",
source: "https://github.com/zloirock/core-js"
});
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/shared.js
var require_shared = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/shared.js"(exports2, module2) {
"use strict";
var store = require_shared_store();
module2.exports = function(key, value) {
return store[key] || (store[key] = value || {});
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/to-object.js
var require_to_object = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/to-object.js"(exports2, module2) {
"use strict";
var requireObjectCoercible = require_require_object_coercible();
var $Object = Object;
module2.exports = function(argument) {
return $Object(requireObjectCoercible(argument));
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/has-own-property.js
var require_has_own_property = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/has-own-property.js"(exports2, module2) {
"use strict";
var uncurryThis = require_function_uncurry_this();
var toObject = require_to_object();
var hasOwnProperty = uncurryThis({}.hasOwnProperty);
module2.exports = Object.hasOwn || function hasOwn(it, key) {
return hasOwnProperty(toObject(it), key);
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/uid.js
var require_uid = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/uid.js"(exports2, module2) {
"use strict";
var uncurryThis = require_function_uncurry_this();
var id = 0;
var postfix = Math.random();
var toString = uncurryThis(1 .toString);
module2.exports = function(key) {
return "Symbol(" + (key === void 0 ? "" : key) + ")_" + toString(++id + postfix, 36);
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/well-known-symbol.js
var require_well_known_symbol = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/well-known-symbol.js"(exports2, module2) {
"use strict";
var globalThis2 = require_global_this();
var shared = require_shared();
var hasOwn = require_has_own_property();
var uid = require_uid();
var NATIVE_SYMBOL = require_symbol_constructor_detection();
var USE_SYMBOL_AS_UID = require_use_symbol_as_uid();
var Symbol2 = globalThis2.Symbol;
var WellKnownSymbolsStore = shared("wks");
var createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol2["for"] || Symbol2 : Symbol2 && Symbol2.withoutSetter || uid;
module2.exports = function(name) {
if (!hasOwn(WellKnownSymbolsStore, name)) {
WellKnownSymbolsStore[name] = NATIVE_SYMBOL && hasOwn(Symbol2, name) ? Symbol2[name] : createWellKnownSymbol("Symbol." + name);
}
return WellKnownSymbolsStore[name];
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/to-primitive.js
var require_to_primitive = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/to-primitive.js"(exports2, module2) {
"use strict";
var call = require_function_call();
var isObject2 = require_is_object();
var isSymbol = require_is_symbol();
var getMethod = require_get_method();
var ordinaryToPrimitive = require_ordinary_to_primitive();
var wellKnownSymbol = require_well_known_symbol();
var $TypeError = TypeError;
var TO_PRIMITIVE = wellKnownSymbol("toPrimitive");
module2.exports = function(input, pref) {
if (!isObject2(input) || isSymbol(input)) return input;
var exoticToPrim = getMethod(input, TO_PRIMITIVE);
var result;
if (exoticToPrim) {
if (pref === void 0) pref = "default";
result = call(exoticToPrim, input, pref);
if (!isObject2(result) || isSymbol(result)) return result;
throw new $TypeError("Can't convert object to primitive value");
}
if (pref === void 0) pref = "number";
return ordinaryToPrimitive(input, pref);
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/to-property-key.js
var require_to_property_key = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/to-property-key.js"(exports2, module2) {
"use strict";
var toPrimitive = require_to_primitive();
var isSymbol = require_is_symbol();
module2.exports = function(argument) {
var key = toPrimitive(argument, "string");
return isSymbol(key) ? key : key + "";
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/document-create-element.js
var require_document_create_element = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/document-create-element.js"(exports2, module2) {
"use strict";
var globalThis2 = require_global_this();
var isObject2 = require_is_object();
var document2 = globalThis2.document;
var EXISTS = isObject2(document2) && isObject2(document2.createElement);
module2.exports = function(it) {
return EXISTS ? document2.createElement(it) : {};
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/ie8-dom-define.js
var require_ie8_dom_define = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/ie8-dom-define.js"(exports2, module2) {
"use strict";
var DESCRIPTORS = require_descriptors();
var fails = require_fails();
var createElement2 = require_document_create_element();
module2.exports = !DESCRIPTORS && !fails(function() {
return Object.defineProperty(createElement2("div"), "a", {
get: function() {
return 7;
}
}).a !== 7;
});
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/object-get-own-property-descriptor.js
var require_object_get_own_property_descriptor = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/object-get-own-property-descriptor.js"(exports2) {
"use strict";
var DESCRIPTORS = require_descriptors();
var call = require_function_call();
var propertyIsEnumerableModule = require_object_property_is_enumerable();
var createPropertyDescriptor = require_create_property_descriptor();
var toIndexedObject = require_to_indexed_object();
var toPropertyKey = require_to_property_key();
var hasOwn = require_has_own_property();
var IE8_DOM_DEFINE = require_ie8_dom_define();
var $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;
exports2.f = DESCRIPTORS ? $getOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {
O = toIndexedObject(O);
P = toPropertyKey(P);
if (IE8_DOM_DEFINE) try {
return $getOwnPropertyDescriptor(O, P);
} catch (error) {
}
if (hasOwn(O, P)) return createPropertyDescriptor(!call(propertyIsEnumerableModule.f, O, P), O[P]);
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/v8-prototype-define-bug.js
var require_v8_prototype_define_bug = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/v8-prototype-define-bug.js"(exports2, module2) {
"use strict";
var DESCRIPTORS = require_descriptors();
var fails = require_fails();
module2.exports = DESCRIPTORS && fails(function() {
return Object.defineProperty(function() {
}, "prototype", {
value: 42,
writable: false
}).prototype !== 42;
});
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/an-object.js
var require_an_object = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/an-object.js"(exports2, module2) {
"use strict";
var isObject2 = require_is_object();
var $String = String;
var $TypeError = TypeError;
module2.exports = function(argument) {
if (isObject2(argument)) return argument;
throw new $TypeError($String(argument) + " is not an object");
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/object-define-property.js
var require_object_define_property = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/object-define-property.js"(exports2) {
"use strict";
var DESCRIPTORS = require_descriptors();
var IE8_DOM_DEFINE = require_ie8_dom_define();
var V8_PROTOTYPE_DEFINE_BUG = require_v8_prototype_define_bug();
var anObject = require_an_object();
var toPropertyKey = require_to_property_key();
var $TypeError = TypeError;
var $defineProperty = Object.defineProperty;
var $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;
var ENUMERABLE = "enumerable";
var CONFIGURABLE = "configurable";
var WRITABLE = "writable";
exports2.f = DESCRIPTORS ? V8_PROTOTYPE_DEFINE_BUG ? function defineProperty(O, P, Attributes) {
anObject(O);
P = toPropertyKey(P);
anObject(Attributes);
if (typeof O === "function" && P === "prototype" && "value" in Attributes && WRITABLE in Attributes && !Attributes[WRITABLE]) {
var current = $getOwnPropertyDescriptor(O, P);
if (current && current[WRITABLE]) {
O[P] = Attributes.value;
Attributes = {
configurable: CONFIGURABLE in Attributes ? Attributes[CONFIGURABLE] : current[CONFIGURABLE],
enumerable: ENUMERABLE in Attributes ? Attributes[ENUMERABLE] : current[ENUMERABLE],
writable: false
};
}
}
return $defineProperty(O, P, Attributes);
} : $defineProperty : function defineProperty(O, P, Attributes) {
anObject(O);
P = toPropertyKey(P);
anObject(Attributes);
if (IE8_DOM_DEFINE) try {
return $defineProperty(O, P, Attributes);
} catch (error) {
}
if ("get" in Attributes || "set" in Attributes) throw new $TypeError("Accessors not supported");
if ("value" in Attributes) O[P] = Attributes.value;
return O;
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/create-non-enumerable-property.js
var require_create_non_enumerable_property = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/create-non-enumerable-property.js"(exports2, module2) {
"use strict";
var DESCRIPTORS = require_descriptors();
var definePropertyModule = require_object_define_property();
var createPropertyDescriptor = require_create_property_descriptor();
module2.exports = DESCRIPTORS ? function(object, key, value) {
return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));
} : function(object, key, value) {
object[key] = value;
return object;
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/function-name.js
var require_function_name = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/function-name.js"(exports2, module2) {
"use strict";
var DESCRIPTORS = require_descriptors();
var hasOwn = require_has_own_property();
var FunctionPrototype = Function.prototype;
var getDescriptor = DESCRIPTORS && Object.getOwnPropertyDescriptor;
var EXISTS = hasOwn(FunctionPrototype, "name");
var PROPER = EXISTS && function something() {
}.name === "something";
var CONFIGURABLE = EXISTS && (!DESCRIPTORS || DESCRIPTORS && getDescriptor(FunctionPrototype, "name").configurable);
module2.exports = {
EXISTS,
PROPER,
CONFIGURABLE
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/inspect-source.js
var require_inspect_source = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/inspect-source.js"(exports2, module2) {
"use strict";
var uncurryThis = require_function_uncurry_this();
var isCallable = require_is_callable();
var store = require_shared_store();
var functionToString = uncurryThis(Function.toString);
if (!isCallable(store.inspectSource)) {
store.inspectSource = function(it) {
return functionToString(it);
};
}
module2.exports = store.inspectSource;
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/weak-map-basic-detection.js
var require_weak_map_basic_detection = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/weak-map-basic-detection.js"(exports2, module2) {
"use strict";
var globalThis2 = require_global_this();
var isCallable = require_is_callable();
var WeakMap2 = globalThis2.WeakMap;
module2.exports = isCallable(WeakMap2) && /native code/.test(String(WeakMap2));
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/shared-key.js
var require_shared_key = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/shared-key.js"(exports2, module2) {
"use strict";
var shared = require_shared();
var uid = require_uid();
var keys2 = shared("keys");
module2.exports = function(key) {
return keys2[key] || (keys2[key] = uid(key));
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/hidden-keys.js
var require_hidden_keys = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/hidden-keys.js"(exports2, module2) {
"use strict";
module2.exports = {};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/internal-state.js
var require_internal_state = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/internal-state.js"(exports2, module2) {
"use strict";
var NATIVE_WEAK_MAP = require_weak_map_basic_detection();
var globalThis2 = require_global_this();
var isObject2 = require_is_object();
var createNonEnumerableProperty = require_create_non_enumerable_property();
var hasOwn = require_has_own_property();
var shared = require_shared_store();
var sharedKey = require_shared_key();
var hiddenKeys = require_hidden_keys();
var OBJECT_ALREADY_INITIALIZED = "Object already initialized";
var TypeError2 = globalThis2.TypeError;
var WeakMap2 = globalThis2.WeakMap;
var set;
var get2;
var has;
var enforce = function(it) {
return has(it) ? get2(it) : set(it, {});
};
var getterFor = function(TYPE) {
return function(it) {
var state;
if (!isObject2(it) || (state = get2(it)).type !== TYPE) {
throw new TypeError2("Incompatible receiver, " + TYPE + " required");
}
return state;
};
};
if (NATIVE_WEAK_MAP || shared.state) {
store = shared.state || (shared.state = new WeakMap2());
store.get = store.get;
store.has = store.has;
store.set = store.set;
set = function(it, metadata) {
if (store.has(it)) throw new TypeError2(OBJECT_ALREADY_INITIALIZED);
metadata.facade = it;
store.set(it, metadata);
return metadata;
};
get2 = function(it) {
return store.get(it) || {};
};
has = function(it) {
return store.has(it);
};
} else {
STATE = sharedKey("state");
hiddenKeys[STATE] = true;
set = function(it, metadata) {
if (hasOwn(it, STATE)) throw new TypeError2(OBJECT_ALREADY_INITIALIZED);
metadata.facade = it;
createNonEnumerableProperty(it, STATE, metadata);
return metadata;
};
get2 = function(it) {
return hasOwn(it, STATE) ? it[STATE] : {};
};
has = function(it) {
return hasOwn(it, STATE);
};
}
var store;
var STATE;
module2.exports = {
set,
get: get2,
has,
enforce,
getterFor
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/make-built-in.js
var require_make_built_in = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/make-built-in.js"(exports2, module2) {
"use strict";
var uncurryThis = require_function_uncurry_this();
var fails = require_fails();
var isCallable = require_is_callable();
var hasOwn = require_has_own_property();
var DESCRIPTORS = require_descriptors();
var CONFIGURABLE_FUNCTION_NAME = require_function_name().CONFIGURABLE;
var inspectSource = require_inspect_source();
var InternalStateModule = require_internal_state();
var enforceInternalState = InternalStateModule.enforce;
var getInternalState = InternalStateModule.get;
var $String = String;
var defineProperty = Object.defineProperty;
var stringSlice = uncurryThis("".slice);
var replace = uncurryThis("".replace);
var join = uncurryThis([].join);
var CONFIGURABLE_LENGTH = DESCRIPTORS && !fails(function() {
return defineProperty(function() {
}, "length", { value: 8 }).length !== 8;
});
var TEMPLATE = String(String).split("String");
var makeBuiltIn = module2.exports = function(value, name, options) {
if (stringSlice($String(name), 0, 7) === "Symbol(") {
name = "[" + replace($String(name), /^Symbol\(([^)]*)\).*$/, "$1") + "]";
}
if (options && options.getter) name = "get " + name;
if (options && options.setter) name = "set " + name;
if (!hasOwn(value, "name") || CONFIGURABLE_FUNCTION_NAME && value.name !== name) {
if (DESCRIPTORS) defineProperty(value, "name", { value: name, configurable: true });
else value.name = name;
}
if (CONFIGURABLE_LENGTH && options && hasOwn(options, "arity") && value.length !== options.arity) {
defineProperty(value, "length", { value: options.arity });
}
try {
if (options && hasOwn(options, "constructor") && options.constructor) {
if (DESCRIPTORS) defineProperty(value, "prototype", { writable: false });
} else if (value.prototype) value.prototype = void 0;
} catch (error) {
}
var state = enforceInternalState(value);
if (!hasOwn(state, "source")) {
state.source = join(TEMPLATE, typeof name == "string" ? name : "");
}
return value;
};
Function.prototype.toString = makeBuiltIn(function toString() {
return isCallable(this) && getInternalState(this).source || inspectSource(this);
}, "toString");
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/define-built-in.js
var require_define_built_in = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/define-built-in.js"(exports2, module2) {
"use strict";
var isCallable = require_is_callable();
var definePropertyModule = require_object_define_property();
var makeBuiltIn = require_make_built_in();
var defineGlobalProperty = require_define_global_property();
module2.exports = function(O, key, value, options) {
if (!options) options = {};
var simple = options.enumerable;
var name = options.name !== void 0 ? options.name : key;
if (isCallable(value)) makeBuiltIn(value, name, options);
if (options.global) {
if (simple) O[key] = value;
else defineGlobalProperty(key, value);
} else {
try {
if (!options.unsafe) delete O[key];
else if (O[key]) simple = true;
} catch (error) {
}
if (simple) O[key] = value;
else definePropertyModule.f(O, key, {
value,
enumerable: false,
configurable: !options.nonConfigurable,
writable: !options.nonWritable
});
}
return O;
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/math-trunc.js
var require_math_trunc = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/math-trunc.js"(exports2, module2) {
"use strict";
var ceil = Math.ceil;
var floor = Math.floor;
module2.exports = Math.trunc || function trunc(x) {
var n = +x;
return (n > 0 ? floor : ceil)(n);
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/to-integer-or-infinity.js
var require_to_integer_or_infinity = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/to-integer-or-infinity.js"(exports2, module2) {
"use strict";
var trunc = require_math_trunc();
module2.exports = function(argument) {
var number = +argument;
return number !== number || number === 0 ? 0 : trunc(number);
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/to-absolute-index.js
var require_to_absolute_index = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/to-absolute-index.js"(exports2, module2) {
"use strict";
var toIntegerOrInfinity = require_to_integer_or_infinity();
var max = Math.max;
var min = Math.min;
module2.exports = function(index, length) {
var integer = toIntegerOrInfinity(index);
return integer < 0 ? max(integer + length, 0) : min(integer, length);
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/to-length.js
var require_to_length = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/to-length.js"(exports2, module2) {
"use strict";
var toIntegerOrInfinity = require_to_integer_or_infinity();
var min = Math.min;
module2.exports = function(argument) {
var len = toIntegerOrInfinity(argument);
return len > 0 ? min(len, 9007199254740991) : 0;
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/length-of-array-like.js
var require_length_of_array_like = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/length-of-array-like.js"(exports2, module2) {
"use strict";
var toLength = require_to_length();
module2.exports = function(obj) {
return toLength(obj.length);
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/array-includes.js
var require_array_includes = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/array-includes.js"(exports2, module2) {
"use strict";
var toIndexedObject = require_to_indexed_object();
var toAbsoluteIndex = require_to_absolute_index();
var lengthOfArrayLike = require_length_of_array_like();
var createMethod = function(IS_INCLUDES) {
return function($this, el, fromIndex) {
var O = toIndexedObject($this);
var length = lengthOfArrayLike(O);
if (length === 0) return !IS_INCLUDES && -1;
var index = toAbsoluteIndex(fromIndex, length);
var value;
if (IS_INCLUDES && el !== el) while (length > index) {
value = O[index++];
if (value !== value) return true;
}
else for (; length > index; index++) {
if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0;
}
return !IS_INCLUDES && -1;
};
};
module2.exports = {
// `Array.prototype.includes` method
// https://tc39.es/ecma262/#sec-array.prototype.includes
includes: createMethod(true),
// `Array.prototype.indexOf` method
// https://tc39.es/ecma262/#sec-array.prototype.indexof
indexOf: createMethod(false)
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/object-keys-internal.js
var require_object_keys_internal = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/object-keys-internal.js"(exports2, module2) {
"use strict";
var uncurryThis = require_function_uncurry_this();
var hasOwn = require_has_own_property();
var toIndexedObject = require_to_indexed_object();
var indexOf = require_array_includes().indexOf;
var hiddenKeys = require_hidden_keys();
var push = uncurryThis([].push);
module2.exports = function(object, names) {
var O = toIndexedObject(object);
var i = 0;
var result = [];
var key;
for (key in O) !hasOwn(hiddenKeys, key) && hasOwn(O, key) && push(result, key);
while (names.length > i) if (hasOwn(O, key = names[i++])) {
~indexOf(result, key) || push(result, key);
}
return result;
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/enum-bug-keys.js
var require_enum_bug_keys = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/enum-bug-keys.js"(exports2, module2) {
"use strict";
module2.exports = [
"constructor",
"hasOwnProperty",
"isPrototypeOf",
"propertyIsEnumerable",
"toLocaleString",
"toString",
"valueOf"
];
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/object-get-own-property-names.js
var require_object_get_own_property_names = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/object-get-own-property-names.js"(exports2) {
"use strict";
var internalObjectKeys = require_object_keys_internal();
var enumBugKeys = require_enum_bug_keys();
var hiddenKeys = enumBugKeys.concat("length", "prototype");
exports2.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {
return internalObjectKeys(O, hiddenKeys);
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/object-get-own-property-symbols.js
var require_object_get_own_property_symbols = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/object-get-own-property-symbols.js"(exports2) {
"use strict";
exports2.f = Object.getOwnPropertySymbols;
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/own-keys.js
var require_own_keys = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/own-keys.js"(exports2, module2) {
"use strict";
var getBuiltIn = require_get_built_in();
var uncurryThis = require_function_uncurry_this();
var getOwnPropertyNamesModule = require_object_get_own_property_names();
var getOwnPropertySymbolsModule = require_object_get_own_property_symbols();
var anObject = require_an_object();
var concat = uncurryThis([].concat);
module2.exports = getBuiltIn("Reflect", "ownKeys") || function ownKeys2(it) {
var keys2 = getOwnPropertyNamesModule.f(anObject(it));
var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;
return getOwnPropertySymbols ? concat(keys2, getOwnPropertySymbols(it)) : keys2;
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/copy-constructor-properties.js
var require_copy_constructor_properties = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/copy-constructor-properties.js"(exports2, module2) {
"use strict";
var hasOwn = require_has_own_property();
var ownKeys2 = require_own_keys();
var getOwnPropertyDescriptorModule = require_object_get_own_property_descriptor();
var definePropertyModule = require_object_define_property();
module2.exports = function(target, source, exceptions) {
var keys2 = ownKeys2(source);
var defineProperty = definePropertyModule.f;
var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;
for (var i = 0; i < keys2.length; i++) {
var key = keys2[i];
if (!hasOwn(target, key) && !(exceptions && hasOwn(exceptions, key))) {
defineProperty(target, key, getOwnPropertyDescriptor(source, key));
}
}
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/is-forced.js
var require_is_forced = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/is-forced.js"(exports2, module2) {
"use strict";
var fails = require_fails();
var isCallable = require_is_callable();
var replacement = /#|\.prototype\./;
var isForced = function(feature, detection) {
var value = data[normalize(feature)];
return value === POLYFILL ? true : value === NATIVE ? false : isCallable(detection) ? fails(detection) : !!detection;
};
var normalize = isForced.normalize = function(string) {
return String(string).replace(replacement, ".").toLowerCase();
};
var data = isForced.data = {};
var NATIVE = isForced.NATIVE = "N";
var POLYFILL = isForced.POLYFILL = "P";
module2.exports = isForced;
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/export.js
var require_export = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/export.js"(exports2, module2) {
"use strict";
var globalThis2 = require_global_this();
var getOwnPropertyDescriptor = require_object_get_own_property_descriptor().f;
var createNonEnumerableProperty = require_create_non_enumerable_property();
var defineBuiltIn = require_define_built_in();
var defineGlobalProperty = require_define_global_property();
var copyConstructorProperties = require_copy_constructor_properties();
var isForced = require_is_forced();
module2.exports = function(options, source) {
var TARGET = options.target;
var GLOBAL = options.global;
var STATIC = options.stat;
var FORCED, target, key, targetProperty, sourceProperty, descriptor;
if (GLOBAL) {
target = globalThis2;
} else if (STATIC) {
target = globalThis2[TARGET] || defineGlobalProperty(TARGET, {});
} else {
target = globalThis2[TARGET] && globalThis2[TARGET].prototype;
}
if (target) for (key in source) {
sourceProperty = source[key];
if (options.dontCallGetSet) {
descriptor = getOwnPropertyDescriptor(target, key);
targetProperty = descriptor && descriptor.value;
} else targetProperty = target[key];
FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? "." : "#") + key, options.forced);
if (!FORCED && targetProperty !== void 0) {
if (typeof sourceProperty == typeof targetProperty) continue;
copyConstructorProperties(sourceProperty, targetProperty);
}
if (options.sham || targetProperty && targetProperty.sham) {
createNonEnumerableProperty(sourceProperty, "sham", true);
}
defineBuiltIn(target, key, sourceProperty, options);
}
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/to-string-tag-support.js
var require_to_string_tag_support = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/to-string-tag-support.js"(exports2, module2) {
"use strict";
var wellKnownSymbol = require_well_known_symbol();
var TO_STRING_TAG = wellKnownSymbol("toStringTag");
var test = {};
test[TO_STRING_TAG] = "z";
module2.exports = String(test) === "[object z]";
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/classof.js
var require_classof = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/classof.js"(exports2, module2) {
"use strict";
var TO_STRING_TAG_SUPPORT = require_to_string_tag_support();
var isCallable = require_is_callable();
var classofRaw = require_classof_raw();
var wellKnownSymbol = require_well_known_symbol();
var TO_STRING_TAG = wellKnownSymbol("toStringTag");
var $Object = Object;
var CORRECT_ARGUMENTS = classofRaw(/* @__PURE__ */ function() {
return arguments;
}()) === "Arguments";
var tryGet = function(it, key) {
try {
return it[key];
} catch (error) {
}
};
module2.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function(it) {
var O, tag, result;
return it === void 0 ? "Undefined" : it === null ? "Null" : typeof (tag = tryGet(O = $Object(it), TO_STRING_TAG)) == "string" ? tag : CORRECT_ARGUMENTS ? classofRaw(O) : (result = classofRaw(O)) === "Object" && isCallable(O.callee) ? "Arguments" : result;
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/to-string.js
var require_to_string = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/to-string.js"(exports2, module2) {
"use strict";
var classof = require_classof();
var $String = String;
module2.exports = function(argument) {
if (classof(argument) === "Symbol") throw new TypeError("Cannot convert a Symbol value to a string");
return $String(argument);
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/object-keys.js
var require_object_keys = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/object-keys.js"(exports2, module2) {
"use strict";
var internalObjectKeys = require_object_keys_internal();
var enumBugKeys = require_enum_bug_keys();
module2.exports = Object.keys || function keys2(O) {
return internalObjectKeys(O, enumBugKeys);
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/object-define-properties.js
var require_object_define_properties = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/object-define-properties.js"(exports2) {
"use strict";
var DESCRIPTORS = require_descriptors();
var V8_PROTOTYPE_DEFINE_BUG = require_v8_prototype_define_bug();
var definePropertyModule = require_object_define_property();
var anObject = require_an_object();
var toIndexedObject = require_to_indexed_object();
var objectKeys = require_object_keys();
exports2.f = DESCRIPTORS && !V8_PROTOTYPE_DEFINE_BUG ? Object.defineProperties : function defineProperties(O, Properties) {
anObject(O);
var props = toIndexedObject(Properties);
var keys2 = objectKeys(Properties);
var length = keys2.length;
var index = 0;
var key;
while (length > index) definePropertyModule.f(O, key = keys2[index++], props[key]);
return O;
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/html.js
var require_html = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/html.js"(exports2, module2) {
"use strict";
var getBuiltIn = require_get_built_in();
module2.exports = getBuiltIn("document", "documentElement");
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/object-create.js
var require_object_create = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/object-create.js"(exports2, module2) {
"use strict";
var anObject = require_an_object();
var definePropertiesModule = require_object_define_properties();
var enumBugKeys = require_enum_bug_keys();
var hiddenKeys = require_hidden_keys();
var html = require_html();
var documentCreateElement = require_document_create_element();
var sharedKey = require_shared_key();
var GT = ">";
var LT = "<";
var PROTOTYPE = "prototype";
var SCRIPT = "script";
var IE_PROTO = sharedKey("IE_PROTO");
var EmptyConstructor = function() {
};
var scriptTag = function(content) {
return LT + SCRIPT + GT + content + LT + "/" + SCRIPT + GT;
};
var NullProtoObjectViaActiveX = function(activeXDocument2) {
activeXDocument2.write(scriptTag(""));
activeXDocument2.close();
var temp = activeXDocument2.parentWindow.Object;
activeXDocument2 = null;
return temp;
};
var NullProtoObjectViaIFrame = function() {
var iframe = documentCreateElement("iframe");
var JS = "java" + SCRIPT + ":";
var iframeDocument;
iframe.style.display = "none";
html.appendChild(iframe);
iframe.src = String(JS);
iframeDocument = iframe.contentWindow.document;
iframeDocument.open();
iframeDocument.write(scriptTag("document.F=Object"));
iframeDocument.close();
return iframeDocument.F;
};
var activeXDocument;
var NullProtoObject = function() {
try {
activeXDocument = new ActiveXObject("htmlfile");
} catch (error) {
}
NullProtoObject = typeof document != "undefined" ? document.domain && activeXDocument ? NullProtoObjectViaActiveX(activeXDocument) : NullProtoObjectViaIFrame() : NullProtoObjectViaActiveX(activeXDocument);
var length = enumBugKeys.length;
while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]];
return NullProtoObject();
};
hiddenKeys[IE_PROTO] = true;
module2.exports = Object.create || function create(O, Properties) {
var result;
if (O !== null) {
EmptyConstructor[PROTOTYPE] = anObject(O);
result = new EmptyConstructor();
EmptyConstructor[PROTOTYPE] = null;
result[IE_PROTO] = O;
} else result = NullProtoObject();
return Properties === void 0 ? result : definePropertiesModule.f(result, Properties);
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/array-slice.js
var require_array_slice = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/array-slice.js"(exports2, module2) {
"use strict";
var uncurryThis = require_function_uncurry_this();
module2.exports = uncurryThis([].slice);
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/object-get-own-property-names-external.js
var require_object_get_own_property_names_external = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/object-get-own-property-names-external.js"(exports2, module2) {
"use strict";
var classof = require_classof_raw();
var toIndexedObject = require_to_indexed_object();
var $getOwnPropertyNames = require_object_get_own_property_names().f;
var arraySlice = require_array_slice();
var windowNames = typeof window == "object" && window && Object.getOwnPropertyNames ? Object.getOwnPropertyNames(window) : [];
var getWindowNames = function(it) {
try {
return $getOwnPropertyNames(it);
} catch (error) {
return arraySlice(windowNames);
}
};
module2.exports.f = function getOwnPropertyNames(it) {
return windowNames && classof(it) === "Window" ? getWindowNames(it) : $getOwnPropertyNames(toIndexedObject(it));
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/define-built-in-accessor.js
var require_define_built_in_accessor = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/define-built-in-accessor.js"(exports2, module2) {
"use strict";
var makeBuiltIn = require_make_built_in();
var defineProperty = require_object_define_property();
module2.exports = function(target, name, descriptor) {
if (descriptor.get) makeBuiltIn(descriptor.get, name, { getter: true });
if (descriptor.set) makeBuiltIn(descriptor.set, name, { setter: true });
return defineProperty.f(target, name, descriptor);
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/well-known-symbol-wrapped.js
var require_well_known_symbol_wrapped = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/well-known-symbol-wrapped.js"(exports2) {
"use strict";
var wellKnownSymbol = require_well_known_symbol();
exports2.f = wellKnownSymbol;
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/path.js
var require_path = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/path.js"(exports2, module2) {
"use strict";
var globalThis2 = require_global_this();
module2.exports = globalThis2;
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/well-known-symbol-define.js
var require_well_known_symbol_define = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/well-known-symbol-define.js"(exports2, module2) {
"use strict";
var path = require_path();
var hasOwn = require_has_own_property();
var wrappedWellKnownSymbolModule = require_well_known_symbol_wrapped();
var defineProperty = require_object_define_property().f;
module2.exports = function(NAME) {
var Symbol2 = path.Symbol || (path.Symbol = {});
if (!hasOwn(Symbol2, NAME)) defineProperty(Symbol2, NAME, {
value: wrappedWellKnownSymbolModule.f(NAME)
});
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/symbol-define-to-primitive.js
var require_symbol_define_to_primitive = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/symbol-define-to-primitive.js"(exports2, module2) {
"use strict";
var call = require_function_call();
var getBuiltIn = require_get_built_in();
var wellKnownSymbol = require_well_known_symbol();
var defineBuiltIn = require_define_built_in();
module2.exports = function() {
var Symbol2 = getBuiltIn("Symbol");
var SymbolPrototype = Symbol2 && Symbol2.prototype;
var valueOf = SymbolPrototype && SymbolPrototype.valueOf;
var TO_PRIMITIVE = wellKnownSymbol("toPrimitive");
if (SymbolPrototype && !SymbolPrototype[TO_PRIMITIVE]) {
defineBuiltIn(SymbolPrototype, TO_PRIMITIVE, function(hint) {
return call(valueOf, this);
}, { arity: 1 });
}
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/set-to-string-tag.js
var require_set_to_string_tag = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/set-to-string-tag.js"(exports2, module2) {
"use strict";
var defineProperty = require_object_define_property().f;
var hasOwn = require_has_own_property();
var wellKnownSymbol = require_well_known_symbol();
var TO_STRING_TAG = wellKnownSymbol("toStringTag");
module2.exports = function(target, TAG, STATIC) {
if (target && !STATIC) target = target.prototype;
if (target && !hasOwn(target, TO_STRING_TAG)) {
defineProperty(target, TO_STRING_TAG, { configurable: true, value: TAG });
}
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/function-uncurry-this-clause.js
var require_function_uncurry_this_clause = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/function-uncurry-this-clause.js"(exports2, module2) {
"use strict";
var classofRaw = require_classof_raw();
var uncurryThis = require_function_uncurry_this();
module2.exports = function(fn) {
if (classofRaw(fn) === "Function") return uncurryThis(fn);
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/function-bind-context.js
var require_function_bind_context = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/function-bind-context.js"(exports2, module2) {
"use strict";
var uncurryThis = require_function_uncurry_this_clause();
var aCallable = require_a_callable();
var NATIVE_BIND = require_function_bind_native();
var bind = uncurryThis(uncurryThis.bind);
module2.exports = function(fn, that) {
aCallable(fn);
return that === void 0 ? fn : NATIVE_BIND ? bind(fn, that) : function() {
return fn.apply(that, arguments);
};
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/is-array.js
var require_is_array = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/is-array.js"(exports2, module2) {
"use strict";
var classof = require_classof_raw();
module2.exports = Array.isArray || function isArray(argument) {
return classof(argument) === "Array";
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/is-constructor.js
var require_is_constructor = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/is-constructor.js"(exports2, module2) {
"use strict";
var uncurryThis = require_function_uncurry_this();
var fails = require_fails();
var isCallable = require_is_callable();
var classof = require_classof();
var getBuiltIn = require_get_built_in();
var inspectSource = require_inspect_source();
var noop = function() {
};
var construct = getBuiltIn("Reflect", "construct");
var constructorRegExp = /^\s*(?:class|function)\b/;
var exec = uncurryThis(constructorRegExp.exec);
var INCORRECT_TO_STRING = !constructorRegExp.test(noop);
var isConstructorModern = function isConstructor(argument) {
if (!isCallable(argument)) return false;
try {
construct(noop, [], argument);
return true;
} catch (error) {
return false;
}
};
var isConstructorLegacy = function isConstructor(argument) {
if (!isCallable(argument)) return false;
switch (classof(argument)) {
case "AsyncFunction":
case "GeneratorFunction":
case "AsyncGeneratorFunction":
return false;
}
try {
return INCORRECT_TO_STRING || !!exec(constructorRegExp, inspectSource(argument));
} catch (error) {
return true;
}
};
isConstructorLegacy.sham = true;
module2.exports = !construct || fails(function() {
var called;
return isConstructorModern(isConstructorModern.call) || !isConstructorModern(Object) || !isConstructorModern(function() {
called = true;
}) || called;
}) ? isConstructorLegacy : isConstructorModern;
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/array-species-constructor.js
var require_array_species_constructor = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/array-species-constructor.js"(exports2, module2) {
"use strict";
var isArray = require_is_array();
var isConstructor = require_is_constructor();
var isObject2 = require_is_object();
var wellKnownSymbol = require_well_known_symbol();
var SPECIES = wellKnownSymbol("species");
var $Array = Array;
module2.exports = function(originalArray) {
var C;
if (isArray(originalArray)) {
C = originalArray.constructor;
if (isConstructor(C) && (C === $Array || isArray(C.prototype))) C = void 0;
else if (isObject2(C)) {
C = C[SPECIES];
if (C === null) C = void 0;
}
}
return C === void 0 ? $Array : C;
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/array-species-create.js
var require_array_species_create = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/array-species-create.js"(exports2, module2) {
"use strict";
var arraySpeciesConstructor = require_array_species_constructor();
module2.exports = function(originalArray, length) {
return new (arraySpeciesConstructor(originalArray))(length === 0 ? 0 : length);
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/array-iteration.js
var require_array_iteration = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/array-iteration.js"(exports2, module2) {
"use strict";
var bind = require_function_bind_context();
var uncurryThis = require_function_uncurry_this();
var IndexedObject = require_indexed_object();
var toObject = require_to_object();
var lengthOfArrayLike = require_length_of_array_like();
var arraySpeciesCreate = require_array_species_create();
var push = uncurryThis([].push);
var createMethod = function(TYPE) {
var IS_MAP = TYPE === 1;
var IS_FILTER = TYPE === 2;
var IS_SOME = TYPE === 3;
var IS_EVERY = TYPE === 4;
var IS_FIND_INDEX = TYPE === 6;
var IS_FILTER_REJECT = TYPE === 7;
var NO_HOLES = TYPE === 5 || IS_FIND_INDEX;
return function($this, callbackfn, that, specificCreate) {
var O = toObject($this);
var self2 = IndexedObject(O);
var length = lengthOfArrayLike(self2);
var boundFunction = bind(callbackfn, that);
var index = 0;
var create = specificCreate || arraySpeciesCreate;
var target = IS_MAP ? create($this, length) : IS_FILTER || IS_FILTER_REJECT ? create($this, 0) : void 0;
var value, result;
for (; length > index; index++) if (NO_HOLES || index in self2) {
value = self2[index];
result = boundFunction(value, index, O);
if (TYPE) {
if (IS_MAP) target[index] = result;
else if (result) switch (TYPE) {
case 3:
return true;
// some
case 5:
return value;
// find
case 6:
return index;
// findIndex
case 2:
push(target, value);
}
else switch (TYPE) {
case 4:
return false;
// every
case 7:
push(target, value);
}
}
}
return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : target;
};
};
module2.exports = {
// `Array.prototype.forEach` method
// https://tc39.es/ecma262/#sec-array.prototype.foreach
forEach: createMethod(0),
// `Array.prototype.map` method
// https://tc39.es/ecma262/#sec-array.prototype.map
map: createMethod(1),
// `Array.prototype.filter` method
// https://tc39.es/ecma262/#sec-array.prototype.filter
filter: createMethod(2),
// `Array.prototype.some` method
// https://tc39.es/ecma262/#sec-array.prototype.some
some: createMethod(3),
// `Array.prototype.every` method
// https://tc39.es/ecma262/#sec-array.prototype.every
every: createMethod(4),
// `Array.prototype.find` method
// https://tc39.es/ecma262/#sec-array.prototype.find
find: createMethod(5),
// `Array.prototype.findIndex` method
// https://tc39.es/ecma262/#sec-array.prototype.findIndex
findIndex: createMethod(6),
// `Array.prototype.filterReject` method
// https://github.com/tc39/proposal-array-filtering
filterReject: createMethod(7)
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.symbol.constructor.js
var require_es_symbol_constructor = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.symbol.constructor.js"() {
"use strict";
var $ = require_export();
var globalThis2 = require_global_this();
var call = require_function_call();
var uncurryThis = require_function_uncurry_this();
var IS_PURE = require_is_pure();
var DESCRIPTORS = require_descriptors();
var NATIVE_SYMBOL = require_symbol_constructor_detection();
var fails = require_fails();
var hasOwn = require_has_own_property();
var isPrototypeOf = require_object_is_prototype_of();
var anObject = require_an_object();
var toIndexedObject = require_to_indexed_object();
var toPropertyKey = require_to_property_key();
var $toString = require_to_string();
var createPropertyDescriptor = require_create_property_descriptor();
var nativeObjectCreate = require_object_create();
var objectKeys = require_object_keys();
var getOwnPropertyNamesModule = require_object_get_own_property_names();
var getOwnPropertyNamesExternal = require_object_get_own_property_names_external();
var getOwnPropertySymbolsModule = require_object_get_own_property_symbols();
var getOwnPropertyDescriptorModule = require_object_get_own_property_descriptor();
var definePropertyModule = require_object_define_property();
var definePropertiesModule = require_object_define_properties();
var propertyIsEnumerableModule = require_object_property_is_enumerable();
var defineBuiltIn = require_define_built_in();
var defineBuiltInAccessor = require_define_built_in_accessor();
var shared = require_shared();
var sharedKey = require_shared_key();
var hiddenKeys = require_hidden_keys();
var uid = require_uid();
var wellKnownSymbol = require_well_known_symbol();
var wrappedWellKnownSymbolModule = require_well_known_symbol_wrapped();
var defineWellKnownSymbol = require_well_known_symbol_define();
var defineSymbolToPrimitive = require_symbol_define_to_primitive();
var setToStringTag = require_set_to_string_tag();
var InternalStateModule = require_internal_state();
var $forEach = require_array_iteration().forEach;
var HIDDEN = sharedKey("hidden");
var SYMBOL = "Symbol";
var PROTOTYPE = "prototype";
var setInternalState = InternalStateModule.set;
var getInternalState = InternalStateModule.getterFor(SYMBOL);
var ObjectPrototype = Object[PROTOTYPE];
var $Symbol = globalThis2.Symbol;
var SymbolPrototype = $Symbol && $Symbol[PROTOTYPE];
var RangeError = globalThis2.RangeError;
var TypeError2 = globalThis2.TypeError;
var QObject = globalThis2.QObject;
var nativeGetOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;
var nativeDefineProperty = definePropertyModule.f;
var nativeGetOwnPropertyNames = getOwnPropertyNamesExternal.f;
var nativePropertyIsEnumerable = propertyIsEnumerableModule.f;
var push = uncurryThis([].push);
var AllSymbols = shared("symbols");
var ObjectPrototypeSymbols = shared("op-symbols");
var WellKnownSymbolsStore = shared("wks");
var USE_SETTER = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;
var fallbackDefineProperty = function(O, P, Attributes) {
var ObjectPrototypeDescriptor = nativeGetOwnPropertyDescriptor(ObjectPrototype, P);
if (ObjectPrototypeDescriptor) delete ObjectPrototype[P];
nativeDefineProperty(O, P, Attributes);
if (ObjectPrototypeDescriptor && O !== ObjectPrototype) {
nativeDefineProperty(ObjectPrototype, P, ObjectPrototypeDescriptor);
}
};
var setSymbolDescriptor = DESCRIPTORS && fails(function() {
return nativeObjectCreate(nativeDefineProperty({}, "a", {
get: function() {
return nativeDefineProperty(this, "a", { value: 7 }).a;
}
})).a !== 7;
}) ? fallbackDefineProperty : nativeDefineProperty;
var wrap = function(tag, description) {
var symbol = AllSymbols[tag] = nativeObjectCreate(SymbolPrototype);
setInternalState(symbol, {
type: SYMBOL,
tag,
description
});
if (!DESCRIPTORS) symbol.description = description;
return symbol;
};
var $defineProperty = function defineProperty(O, P, Attributes) {
if (O === ObjectPrototype) $defineProperty(ObjectPrototypeSymbols, P, Attributes);
anObject(O);
var key = toPropertyKey(P);
anObject(Attributes);
if (hasOwn(AllSymbols, key)) {
if (!Attributes.enumerable) {
if (!hasOwn(O, HIDDEN)) nativeDefineProperty(O, HIDDEN, createPropertyDescriptor(1, nativeObjectCreate(null)));
O[HIDDEN][key] = true;
} else {
if (hasOwn(O, HIDDEN) && O[HIDDEN][key]) O[HIDDEN][key] = false;
Attributes = nativeObjectCreate(Attributes, { enumerable: createPropertyDescriptor(0, false) });
}
return setSymbolDescriptor(O, key, Attributes);
}
return nativeDefineProperty(O, key, Attributes);
};
var $defineProperties = function defineProperties(O, Properties) {
anObject(O);
var properties = toIndexedObject(Properties);
var keys2 = objectKeys(properties).concat($getOwnPropertySymbols(properties));
$forEach(keys2, function(key) {
if (!DESCRIPTORS || call($propertyIsEnumerable, properties, key)) $defineProperty(O, key, properties[key]);
});
return O;
};
var $create = function create(O, Properties) {
return Properties === void 0 ? nativeObjectCreate(O) : $defineProperties(nativeObjectCreate(O), Properties);
};
var $propertyIsEnumerable = function propertyIsEnumerable(V) {
var P = toPropertyKey(V);
var enumerable = call(nativePropertyIsEnumerable, this, P);
if (this === ObjectPrototype && hasOwn(AllSymbols, P) && !hasOwn(ObjectPrototypeSymbols, P)) return false;
return enumerable || !hasOwn(this, P) || !hasOwn(AllSymbols, P) || hasOwn(this, HIDDEN) && this[HIDDEN][P] ? enumerable : true;
};
var $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(O, P) {
var it = toIndexedObject(O);
var key = toPropertyKey(P);
if (it === ObjectPrototype && hasOwn(AllSymbols, key) && !hasOwn(ObjectPrototypeSymbols, key)) return;
var descriptor = nativeGetOwnPropertyDescriptor(it, key);
if (descriptor && hasOwn(AllSymbols, key) && !(hasOwn(it, HIDDEN) && it[HIDDEN][key])) {
descriptor.enumerable = true;
}
return descriptor;
};
var $getOwnPropertyNames = function getOwnPropertyNames(O) {
var names = nativeGetOwnPropertyNames(toIndexedObject(O));
var result = [];
$forEach(names, function(key) {
if (!hasOwn(AllSymbols, key) && !hasOwn(hiddenKeys, key)) push(result, key);
});
return result;
};
var $getOwnPropertySymbols = function(O) {
var IS_OBJECT_PROTOTYPE = O === ObjectPrototype;
var names = nativeGetOwnPropertyNames(IS_OBJECT_PROTOTYPE ? ObjectPrototypeSymbols : toIndexedObject(O));
var result = [];
$forEach(names, function(key) {
if (hasOwn(AllSymbols, key) && (!IS_OBJECT_PROTOTYPE || hasOwn(ObjectPrototype, key))) {
push(result, AllSymbols[key]);
}
});
return result;
};
if (!NATIVE_SYMBOL) {
$Symbol = function Symbol2() {
if (isPrototypeOf(SymbolPrototype, this)) throw new TypeError2("Symbol is not a constructor");
var description = !arguments.length || arguments[0] === void 0 ? void 0 : $toString(arguments[0]);
var tag = uid(description);
var setter = function(value) {
var $this = this === void 0 ? globalThis2 : this;
if ($this === ObjectPrototype) call(setter, ObjectPrototypeSymbols, value);
if (hasOwn($this, HIDDEN) && hasOwn($this[HIDDEN], tag)) $this[HIDDEN][tag] = false;
var descriptor = createPropertyDescriptor(1, value);
try {
setSymbolDescriptor($this, tag, descriptor);
} catch (error) {
if (!(error instanceof RangeError)) throw error;
fallbackDefineProperty($this, tag, descriptor);
}
};
if (DESCRIPTORS && USE_SETTER) setSymbolDescriptor(ObjectPrototype, tag, { configurable: true, set: setter });
return wrap(tag, description);
};
SymbolPrototype = $Symbol[PROTOTYPE];
defineBuiltIn(SymbolPrototype, "toString", function toString() {
return getInternalState(this).tag;
});
defineBuiltIn($Symbol, "withoutSetter", function(description) {
return wrap(uid(description), description);
});
propertyIsEnumerableModule.f = $propertyIsEnumerable;
definePropertyModule.f = $defineProperty;
definePropertiesModule.f = $defineProperties;
getOwnPropertyDescriptorModule.f = $getOwnPropertyDescriptor;
getOwnPropertyNamesModule.f = getOwnPropertyNamesExternal.f = $getOwnPropertyNames;
getOwnPropertySymbolsModule.f = $getOwnPropertySymbols;
wrappedWellKnownSymbolModule.f = function(name) {
return wrap(wellKnownSymbol(name), name);
};
if (DESCRIPTORS) {
defineBuiltInAccessor(SymbolPrototype, "description", {
configurable: true,
get: function description() {
return getInternalState(this).description;
}
});
if (!IS_PURE) {
defineBuiltIn(ObjectPrototype, "propertyIsEnumerable", $propertyIsEnumerable, { unsafe: true });
}
}
}
$({ global: true, constructor: true, wrap: true, forced: !NATIVE_SYMBOL, sham: !NATIVE_SYMBOL }, {
Symbol: $Symbol
});
$forEach(objectKeys(WellKnownSymbolsStore), function(name) {
defineWellKnownSymbol(name);
});
$({ target: SYMBOL, stat: true, forced: !NATIVE_SYMBOL }, {
useSetter: function() {
USE_SETTER = true;
},
useSimple: function() {
USE_SETTER = false;
}
});
$({ target: "Object", stat: true, forced: !NATIVE_SYMBOL, sham: !DESCRIPTORS }, {
// `Object.create` method
// https://tc39.es/ecma262/#sec-object.create
create: $create,
// `Object.defineProperty` method
// https://tc39.es/ecma262/#sec-object.defineproperty
defineProperty: $defineProperty,
// `Object.defineProperties` method
// https://tc39.es/ecma262/#sec-object.defineproperties
defineProperties: $defineProperties,
// `Object.getOwnPropertyDescriptor` method
// https://tc39.es/ecma262/#sec-object.getownpropertydescriptors
getOwnPropertyDescriptor: $getOwnPropertyDescriptor
});
$({ target: "Object", stat: true, forced: !NATIVE_SYMBOL }, {
// `Object.getOwnPropertyNames` method
// https://tc39.es/ecma262/#sec-object.getownpropertynames
getOwnPropertyNames: $getOwnPropertyNames
});
defineSymbolToPrimitive();
setToStringTag($Symbol, SYMBOL);
hiddenKeys[HIDDEN] = true;
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/symbol-registry-detection.js
var require_symbol_registry_detection = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/symbol-registry-detection.js"(exports2, module2) {
"use strict";
var NATIVE_SYMBOL = require_symbol_constructor_detection();
module2.exports = NATIVE_SYMBOL && !!Symbol["for"] && !!Symbol.keyFor;
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.symbol.for.js
var require_es_symbol_for = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.symbol.for.js"() {
"use strict";
var $ = require_export();
var getBuiltIn = require_get_built_in();
var hasOwn = require_has_own_property();
var toString = require_to_string();
var shared = require_shared();
var NATIVE_SYMBOL_REGISTRY = require_symbol_registry_detection();
var StringToSymbolRegistry = shared("string-to-symbol-registry");
var SymbolToStringRegistry = shared("symbol-to-string-registry");
$({ target: "Symbol", stat: true, forced: !NATIVE_SYMBOL_REGISTRY }, {
"for": function(key) {
var string = toString(key);
if (hasOwn(StringToSymbolRegistry, string)) return StringToSymbolRegistry[string];
var symbol = getBuiltIn("Symbol")(string);
StringToSymbolRegistry[string] = symbol;
SymbolToStringRegistry[symbol] = string;
return symbol;
}
});
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.symbol.key-for.js
var require_es_symbol_key_for = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.symbol.key-for.js"() {
"use strict";
var $ = require_export();
var hasOwn = require_has_own_property();
var isSymbol = require_is_symbol();
var tryToString = require_try_to_string();
var shared = require_shared();
var NATIVE_SYMBOL_REGISTRY = require_symbol_registry_detection();
var SymbolToStringRegistry = shared("symbol-to-string-registry");
$({ target: "Symbol", stat: true, forced: !NATIVE_SYMBOL_REGISTRY }, {
keyFor: function keyFor(sym) {
if (!isSymbol(sym)) throw new TypeError(tryToString(sym) + " is not a symbol");
if (hasOwn(SymbolToStringRegistry, sym)) return SymbolToStringRegistry[sym];
}
});
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/function-apply.js
var require_function_apply = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/function-apply.js"(exports2, module2) {
"use strict";
var NATIVE_BIND = require_function_bind_native();
var FunctionPrototype = Function.prototype;
var apply = FunctionPrototype.apply;
var call = FunctionPrototype.call;
module2.exports = typeof Reflect == "object" && Reflect.apply || (NATIVE_BIND ? call.bind(apply) : function() {
return call.apply(apply, arguments);
});
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/get-json-replacer-function.js
var require_get_json_replacer_function = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/get-json-replacer-function.js"(exports2, module2) {
"use strict";
var uncurryThis = require_function_uncurry_this();
var isArray = require_is_array();
var isCallable = require_is_callable();
var classof = require_classof_raw();
var toString = require_to_string();
var push = uncurryThis([].push);
module2.exports = function(replacer) {
if (isCallable(replacer)) return replacer;
if (!isArray(replacer)) return;
var rawLength = replacer.length;
var keys2 = [];
for (var i = 0; i < rawLength; i++) {
var element = replacer[i];
if (typeof element == "string") push(keys2, element);
else if (typeof element == "number" || classof(element) === "Number" || classof(element) === "String") push(keys2, toString(element));
}
var keysLength = keys2.length;
var root = true;
return function(key, value) {
if (root) {
root = false;
return value;
}
if (isArray(this)) return value;
for (var j = 0; j < keysLength; j++) if (keys2[j] === key) return value;
};
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.json.stringify.js
var require_es_json_stringify = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.json.stringify.js"() {
"use strict";
var $ = require_export();
var getBuiltIn = require_get_built_in();
var apply = require_function_apply();
var call = require_function_call();
var uncurryThis = require_function_uncurry_this();
var fails = require_fails();
var isCallable = require_is_callable();
var isSymbol = require_is_symbol();
var arraySlice = require_array_slice();
var getReplacerFunction = require_get_json_replacer_function();
var NATIVE_SYMBOL = require_symbol_constructor_detection();
var $String = String;
var $stringify = getBuiltIn("JSON", "stringify");
var exec = uncurryThis(/./.exec);
var charAt = uncurryThis("".charAt);
var charCodeAt = uncurryThis("".charCodeAt);
var replace = uncurryThis("".replace);
var numberToString = uncurryThis(1 .toString);
var tester = /[\uD800-\uDFFF]/g;
var low = /^[\uD800-\uDBFF]$/;
var hi = /^[\uDC00-\uDFFF]$/;
var WRONG_SYMBOLS_CONVERSION = !NATIVE_SYMBOL || fails(function() {
var symbol = getBuiltIn("Symbol")("stringify detection");
return $stringify([symbol]) !== "[null]" || $stringify({ a: symbol }) !== "{}" || $stringify(Object(symbol)) !== "{}";
});
var ILL_FORMED_UNICODE = fails(function() {
return $stringify("\uDF06\uD834") !== '"\\udf06\\ud834"' || $stringify("\uDEAD") !== '"\\udead"';
});
var stringifyWithSymbolsFix = function(it, replacer) {
var args = arraySlice(arguments);
var $replacer = getReplacerFunction(replacer);
if (!isCallable($replacer) && (it === void 0 || isSymbol(it))) return;
args[1] = function(key, value) {
if (isCallable($replacer)) value = call($replacer, this, $String(key), value);
if (!isSymbol(value)) return value;
};
return apply($stringify, null, args);
};
var fixIllFormed = function(match, offset, string) {
var prev = charAt(string, offset - 1);
var next = charAt(string, offset + 1);
if (exec(low, match) && !exec(hi, next) || exec(hi, match) && !exec(low, prev)) {
return "\\u" + numberToString(charCodeAt(match, 0), 16);
}
return match;
};
if ($stringify) {
$({ target: "JSON", stat: true, arity: 3, forced: WRONG_SYMBOLS_CONVERSION || ILL_FORMED_UNICODE }, {
// eslint-disable-next-line no-unused-vars -- required for `.length`
stringify: function stringify(it, replacer, space) {
var args = arraySlice(arguments);
var result = apply(WRONG_SYMBOLS_CONVERSION ? stringifyWithSymbolsFix : $stringify, null, args);
return ILL_FORMED_UNICODE && typeof result == "string" ? replace(result, tester, fixIllFormed) : result;
}
});
}
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.object.get-own-property-symbols.js
var require_es_object_get_own_property_symbols = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.object.get-own-property-symbols.js"() {
"use strict";
var $ = require_export();
var NATIVE_SYMBOL = require_symbol_constructor_detection();
var fails = require_fails();
var getOwnPropertySymbolsModule = require_object_get_own_property_symbols();
var toObject = require_to_object();
var FORCED = !NATIVE_SYMBOL || fails(function() {
getOwnPropertySymbolsModule.f(1);
});
$({ target: "Object", stat: true, forced: FORCED }, {
getOwnPropertySymbols: function getOwnPropertySymbols(it) {
var $getOwnPropertySymbols = getOwnPropertySymbolsModule.f;
return $getOwnPropertySymbols ? $getOwnPropertySymbols(toObject(it)) : [];
}
});
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.symbol.js
var require_es_symbol = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.symbol.js"() {
"use strict";
require_es_symbol_constructor();
require_es_symbol_for();
require_es_symbol_key_for();
require_es_json_stringify();
require_es_object_get_own_property_symbols();
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.symbol.description.js
var require_es_symbol_description = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.symbol.description.js"() {
"use strict";
var $ = require_export();
var DESCRIPTORS = require_descriptors();
var globalThis2 = require_global_this();
var uncurryThis = require_function_uncurry_this();
var hasOwn = require_has_own_property();
var isCallable = require_is_callable();
var isPrototypeOf = require_object_is_prototype_of();
var toString = require_to_string();
var defineBuiltInAccessor = require_define_built_in_accessor();
var copyConstructorProperties = require_copy_constructor_properties();
var NativeSymbol = globalThis2.Symbol;
var SymbolPrototype = NativeSymbol && NativeSymbol.prototype;
if (DESCRIPTORS && isCallable(NativeSymbol) && (!("description" in SymbolPrototype) || // Safari 12 bug
NativeSymbol().description !== void 0)) {
EmptyStringDescriptionStore = {};
SymbolWrapper = function Symbol2() {
var description = arguments.length < 1 || arguments[0] === void 0 ? void 0 : toString(arguments[0]);
var result = isPrototypeOf(SymbolPrototype, this) ? new NativeSymbol(description) : description === void 0 ? NativeSymbol() : NativeSymbol(description);
if (description === "") EmptyStringDescriptionStore[result] = true;
return result;
};
copyConstructorProperties(SymbolWrapper, NativeSymbol);
SymbolWrapper.prototype = SymbolPrototype;
SymbolPrototype.constructor = SymbolWrapper;
NATIVE_SYMBOL = String(NativeSymbol("description detection")) === "Symbol(description detection)";
thisSymbolValue = uncurryThis(SymbolPrototype.valueOf);
symbolDescriptiveString = uncurryThis(SymbolPrototype.toString);
regexp = /^Symbol\((.*)\)[^)]+$/;
replace = uncurryThis("".replace);
stringSlice = uncurryThis("".slice);
defineBuiltInAccessor(SymbolPrototype, "description", {
configurable: true,
get: function description() {
var symbol = thisSymbolValue(this);
if (hasOwn(EmptyStringDescriptionStore, symbol)) return "";
var string = symbolDescriptiveString(symbol);
var desc = NATIVE_SYMBOL ? stringSlice(string, 7, -1) : replace(string, regexp, "$1");
return desc === "" ? void 0 : desc;
}
});
$({ global: true, constructor: true, forced: true }, {
Symbol: SymbolWrapper
});
}
var EmptyStringDescriptionStore;
var SymbolWrapper;
var NATIVE_SYMBOL;
var thisSymbolValue;
var symbolDescriptiveString;
var regexp;
var replace;
var stringSlice;
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.symbol.to-primitive.js
var require_es_symbol_to_primitive = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.symbol.to-primitive.js"() {
"use strict";
var defineWellKnownSymbol = require_well_known_symbol_define();
var defineSymbolToPrimitive = require_symbol_define_to_primitive();
defineWellKnownSymbol("toPrimitive");
defineSymbolToPrimitive();
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/array-set-length.js
var require_array_set_length = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/array-set-length.js"(exports2, module2) {
"use strict";
var DESCRIPTORS = require_descriptors();
var isArray = require_is_array();
var $TypeError = TypeError;
var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;
var SILENT_ON_NON_WRITABLE_LENGTH_SET = DESCRIPTORS && !function() {
if (this !== void 0) return true;
try {
Object.defineProperty([], "length", { writable: false }).length = 1;
} catch (error) {
return error instanceof TypeError;
}
}();
module2.exports = SILENT_ON_NON_WRITABLE_LENGTH_SET ? function(O, length) {
if (isArray(O) && !getOwnPropertyDescriptor(O, "length").writable) {
throw new $TypeError("Cannot set read only .length");
}
return O.length = length;
} : function(O, length) {
return O.length = length;
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/does-not-exceed-safe-integer.js
var require_does_not_exceed_safe_integer = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/does-not-exceed-safe-integer.js"(exports2, module2) {
"use strict";
var $TypeError = TypeError;
var MAX_SAFE_INTEGER = 9007199254740991;
module2.exports = function(it) {
if (it > MAX_SAFE_INTEGER) throw $TypeError("Maximum allowed index exceeded");
return it;
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.array.push.js
var require_es_array_push = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.array.push.js"() {
"use strict";
var $ = require_export();
var toObject = require_to_object();
var lengthOfArrayLike = require_length_of_array_like();
var setArrayLength = require_array_set_length();
var doesNotExceedSafeInteger = require_does_not_exceed_safe_integer();
var fails = require_fails();
var INCORRECT_TO_LENGTH = fails(function() {
return [].push.call({ length: 4294967296 }, 1) !== 4294967297;
});
var properErrorOnNonWritableLength = function() {
try {
Object.defineProperty([], "length", { writable: false }).push();
} catch (error) {
return error instanceof TypeError;
}
};
var FORCED = INCORRECT_TO_LENGTH || !properErrorOnNonWritableLength();
$({ target: "Array", proto: true, arity: 1, forced: FORCED }, {
// eslint-disable-next-line no-unused-vars -- required for `.length`
push: function push(item) {
var O = toObject(this);
var len = lengthOfArrayLike(O);
var argCount = arguments.length;
doesNotExceedSafeInteger(len + argCount);
for (var i = 0; i < argCount; i++) {
O[len] = arguments[i];
len++;
}
setArrayLength(O, len);
return len;
}
});
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/date-to-primitive.js
var require_date_to_primitive = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/date-to-primitive.js"(exports2, module2) {
"use strict";
var anObject = require_an_object();
var ordinaryToPrimitive = require_ordinary_to_primitive();
var $TypeError = TypeError;
module2.exports = function(hint) {
anObject(this);
if (hint === "string" || hint === "default") hint = "string";
else if (hint !== "number") throw new $TypeError("Incorrect hint");
return ordinaryToPrimitive(this, hint);
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.date.to-primitive.js
var require_es_date_to_primitive = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.date.to-primitive.js"() {
"use strict";
var hasOwn = require_has_own_property();
var defineBuiltIn = require_define_built_in();
var dateToPrimitive = require_date_to_primitive();
var wellKnownSymbol = require_well_known_symbol();
var TO_PRIMITIVE = wellKnownSymbol("toPrimitive");
var DatePrototype = Date.prototype;
if (!hasOwn(DatePrototype, TO_PRIMITIVE)) {
defineBuiltIn(DatePrototype, TO_PRIMITIVE, dateToPrimitive);
}
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/function-uncurry-this-accessor.js
var require_function_uncurry_this_accessor = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/function-uncurry-this-accessor.js"(exports2, module2) {
"use strict";
var uncurryThis = require_function_uncurry_this();
var aCallable = require_a_callable();
module2.exports = function(object, key, method) {
try {
return uncurryThis(aCallable(Object.getOwnPropertyDescriptor(object, key)[method]));
} catch (error) {
}
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/is-possible-prototype.js
var require_is_possible_prototype = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/is-possible-prototype.js"(exports2, module2) {
"use strict";
var isObject2 = require_is_object();
module2.exports = function(argument) {
return isObject2(argument) || argument === null;
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/a-possible-prototype.js
var require_a_possible_prototype = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/a-possible-prototype.js"(exports2, module2) {
"use strict";
var isPossiblePrototype = require_is_possible_prototype();
var $String = String;
var $TypeError = TypeError;
module2.exports = function(argument) {
if (isPossiblePrototype(argument)) return argument;
throw new $TypeError("Can't set " + $String(argument) + " as a prototype");
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/object-set-prototype-of.js
var require_object_set_prototype_of = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/object-set-prototype-of.js"(exports2, module2) {
"use strict";
var uncurryThisAccessor = require_function_uncurry_this_accessor();
var isObject2 = require_is_object();
var requireObjectCoercible = require_require_object_coercible();
var aPossiblePrototype = require_a_possible_prototype();
module2.exports = Object.setPrototypeOf || ("__proto__" in {} ? function() {
var CORRECT_SETTER = false;
var test = {};
var setter;
try {
setter = uncurryThisAccessor(Object.prototype, "__proto__", "set");
setter(test, []);
CORRECT_SETTER = test instanceof Array;
} catch (error) {
}
return function setPrototypeOf(O, proto) {
requireObjectCoercible(O);
aPossiblePrototype(proto);
if (!isObject2(O)) return O;
if (CORRECT_SETTER) setter(O, proto);
else O.__proto__ = proto;
return O;
};
}() : void 0);
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/inherit-if-required.js
var require_inherit_if_required = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/inherit-if-required.js"(exports2, module2) {
"use strict";
var isCallable = require_is_callable();
var isObject2 = require_is_object();
var setPrototypeOf = require_object_set_prototype_of();
module2.exports = function($this, dummy, Wrapper) {
var NewTarget, NewTargetPrototype;
if (
// it can work only with native `setPrototypeOf`
setPrototypeOf && // we haven't completely correct pre-ES6 way for getting `new.target`, so use this
isCallable(NewTarget = dummy.constructor) && NewTarget !== Wrapper && isObject2(NewTargetPrototype = NewTarget.prototype) && NewTargetPrototype !== Wrapper.prototype
) setPrototypeOf($this, NewTargetPrototype);
return $this;
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/this-number-value.js
var require_this_number_value = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/this-number-value.js"(exports2, module2) {
"use strict";
var uncurryThis = require_function_uncurry_this();
module2.exports = uncurryThis(1 .valueOf);
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/whitespaces.js
var require_whitespaces = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/whitespaces.js"(exports2, module2) {
"use strict";
module2.exports = " \n\v\f\r \u2028\u2029\uFEFF";
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/string-trim.js
var require_string_trim = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/string-trim.js"(exports2, module2) {
"use strict";
var uncurryThis = require_function_uncurry_this();
var requireObjectCoercible = require_require_object_coercible();
var toString = require_to_string();
var whitespaces = require_whitespaces();
var replace = uncurryThis("".replace);
var ltrim = RegExp("^[" + whitespaces + "]+");
var rtrim = RegExp("(^|[^" + whitespaces + "])[" + whitespaces + "]+$");
var createMethod = function(TYPE) {
return function($this) {
var string = toString(requireObjectCoercible($this));
if (TYPE & 1) string = replace(string, ltrim, "");
if (TYPE & 2) string = replace(string, rtrim, "$1");
return string;
};
};
module2.exports = {
// `String.prototype.{ trimLeft, trimStart }` methods
// https://tc39.es/ecma262/#sec-string.prototype.trimstart
start: createMethod(1),
// `String.prototype.{ trimRight, trimEnd }` methods
// https://tc39.es/ecma262/#sec-string.prototype.trimend
end: createMethod(2),
// `String.prototype.trim` method
// https://tc39.es/ecma262/#sec-string.prototype.trim
trim: createMethod(3)
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.number.constructor.js
var require_es_number_constructor = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.number.constructor.js"() {
"use strict";
var $ = require_export();
var IS_PURE = require_is_pure();
var DESCRIPTORS = require_descriptors();
var globalThis2 = require_global_this();
var path = require_path();
var uncurryThis = require_function_uncurry_this();
var isForced = require_is_forced();
var hasOwn = require_has_own_property();
var inheritIfRequired = require_inherit_if_required();
var isPrototypeOf = require_object_is_prototype_of();
var isSymbol = require_is_symbol();
var toPrimitive = require_to_primitive();
var fails = require_fails();
var getOwnPropertyNames = require_object_get_own_property_names().f;
var getOwnPropertyDescriptor = require_object_get_own_property_descriptor().f;
var defineProperty = require_object_define_property().f;
var thisNumberValue = require_this_number_value();
var trim = require_string_trim().trim;
var NUMBER = "Number";
var NativeNumber = globalThis2[NUMBER];
var PureNumberNamespace = path[NUMBER];
var NumberPrototype = NativeNumber.prototype;
var TypeError2 = globalThis2.TypeError;
var stringSlice = uncurryThis("".slice);
var charCodeAt = uncurryThis("".charCodeAt);
var toNumeric = function(value) {
var primValue = toPrimitive(value, "number");
return typeof primValue == "bigint" ? primValue : toNumber(primValue);
};
var toNumber = function(argument) {
var it = toPrimitive(argument, "number");
var first, third, radix, maxCode, digits, length, index, code;
if (isSymbol(it)) throw new TypeError2("Cannot convert a Symbol value to a number");
if (typeof it == "string" && it.length > 2) {
it = trim(it);
first = charCodeAt(it, 0);
if (first === 43 || first === 45) {
third = charCodeAt(it, 2);
if (third === 88 || third === 120) return NaN;
} else if (first === 48) {
switch (charCodeAt(it, 1)) {
// fast equal of /^0b[01]+$/i
case 66:
case 98:
radix = 2;
maxCode = 49;
break;
// fast equal of /^0o[0-7]+$/i
case 79:
case 111:
radix = 8;
maxCode = 55;
break;
default:
return +it;
}
digits = stringSlice(it, 2);
length = digits.length;
for (index = 0; index < length; index++) {
code = charCodeAt(digits, index);
if (code < 48 || code > maxCode) return NaN;
}
return parseInt(digits, radix);
}
}
return +it;
};
var FORCED = isForced(NUMBER, !NativeNumber(" 0o1") || !NativeNumber("0b1") || NativeNumber("+0x1"));
var calledWithNew = function(dummy) {
return isPrototypeOf(NumberPrototype, dummy) && fails(function() {
thisNumberValue(dummy);
});
};
var NumberWrapper = function Number2(value) {
var n = arguments.length < 1 ? 0 : NativeNumber(toNumeric(value));
return calledWithNew(this) ? inheritIfRequired(Object(n), this, NumberWrapper) : n;
};
NumberWrapper.prototype = NumberPrototype;
if (FORCED && !IS_PURE) NumberPrototype.constructor = NumberWrapper;
$({ global: true, constructor: true, wrap: true, forced: FORCED }, {
Number: NumberWrapper
});
var copyConstructorProperties = function(target, source) {
for (var keys2 = DESCRIPTORS ? getOwnPropertyNames(source) : (
// ES3:
"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,isFinite,isInteger,isNaN,isSafeInteger,parseFloat,parseInt,fromString,range".split(",")
), j = 0, key; keys2.length > j; j++) {
if (hasOwn(source, key = keys2[j]) && !hasOwn(target, key)) {
defineProperty(target, key, getOwnPropertyDescriptor(source, key));
}
}
};
if (IS_PURE && PureNumberNamespace) copyConstructorProperties(path[NUMBER], PureNumberNamespace);
if (FORCED || IS_PURE) copyConstructorProperties(path[NUMBER], NativeNumber);
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/regexp-flags.js
var require_regexp_flags = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/regexp-flags.js"(exports2, module2) {
"use strict";
var anObject = require_an_object();
module2.exports = function() {
var that = anObject(this);
var result = "";
if (that.hasIndices) result += "d";
if (that.global) result += "g";
if (that.ignoreCase) result += "i";
if (that.multiline) result += "m";
if (that.dotAll) result += "s";
if (that.unicode) result += "u";
if (that.unicodeSets) result += "v";
if (that.sticky) result += "y";
return result;
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/regexp-get-flags.js
var require_regexp_get_flags = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/regexp-get-flags.js"(exports2, module2) {
"use strict";
var call = require_function_call();
var hasOwn = require_has_own_property();
var isPrototypeOf = require_object_is_prototype_of();
var regExpFlags = require_regexp_flags();
var RegExpPrototype = RegExp.prototype;
module2.exports = function(R) {
var flags = R.flags;
return flags === void 0 && !("flags" in RegExpPrototype) && !hasOwn(R, "flags") && isPrototypeOf(RegExpPrototype, R) ? call(regExpFlags, R) : flags;
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.regexp.to-string.js
var require_es_regexp_to_string = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.regexp.to-string.js"() {
"use strict";
var PROPER_FUNCTION_NAME = require_function_name().PROPER;
var defineBuiltIn = require_define_built_in();
var anObject = require_an_object();
var $toString = require_to_string();
var fails = require_fails();
var getRegExpFlags = require_regexp_get_flags();
var TO_STRING = "toString";
var RegExpPrototype = RegExp.prototype;
var nativeToString = RegExpPrototype[TO_STRING];
var NOT_GENERIC = fails(function() {
return nativeToString.call({ source: "a", flags: "b" }) !== "/a/b";
});
var INCORRECT_NAME = PROPER_FUNCTION_NAME && nativeToString.name !== TO_STRING;
if (NOT_GENERIC || INCORRECT_NAME) {
defineBuiltIn(RegExpPrototype, TO_STRING, function toString() {
var R = anObject(this);
var pattern = $toString(R.source);
var flags = $toString(getRegExpFlags(R));
return "/" + pattern + "/" + flags;
}, { unsafe: true });
}
}
});
// node_modules/.pnpm/[email protected]/node_modules/proxy-polyfill/proxy.min.js
var require_proxy_min = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/proxy-polyfill/proxy.min.js"() {
(function() {
function n() {
function v() {
return null;
}
function l(a) {
return a ? "object" === typeof a || "function" === typeof a : false;
}
function p(a) {
if (null !== a && !l(a)) throw new TypeError("Object prototype may only be an Object or null: " + a);
}
var q = null, e = Object, w = !!e.create || !({ __proto__: null } instanceof e), A = e.create || (w ? function(a) {
p(a);
return { __proto__: a };
} : function(a) {
function c() {
}
p(a);
if (null === a) throw new SyntaxError("Native Object.create is required to create objects with null prototype");
c.prototype = a;
return new c();
}), B = e.getPrototypeOf || ([].__proto__ === Array.prototype ? function(a) {
a = a.__proto__;
return l(a) ? a : null;
} : v);
var m = function(a, c) {
function k() {
}
if (void 0 === (this && this instanceof m ? this.constructor : void 0)) throw new TypeError("Constructor Proxy requires 'new'");
if (!l(a) || !l(c)) throw new TypeError("Cannot create proxy with a non-object as target or handler");
q = function() {
a = null;
k = function(b) {
throw new TypeError("Cannot perform '" + b + "' on a proxy that has been revoked");
};
};
setTimeout(function() {
q = null;
}, 0);
var g = c;
c = { get: null, set: null, apply: null, construct: null };
for (var h2 in g) {
if (!(h2 in c)) throw new TypeError("Proxy polyfill does not support trap '" + h2 + "'");
c[h2] = g[h2];
}
"function" === typeof g && (c.apply = g.apply.bind(g));
g = B(a);
var r = false, t = false;
if ("function" === typeof a) {
var f = function() {
var b = this && this.constructor === f, d = Array.prototype.slice.call(arguments);
k(b ? "construct" : "apply");
return b && c.construct ? c.construct.call(this, a, d) : !b && c.apply ? c.apply(a, this, d) : b ? (d.unshift(a), new (a.bind.apply(a, d))()) : a.apply(
this,
d
);
};
r = true;
} else a instanceof Array ? (f = [], t = true) : f = w || null !== g ? A(g) : {};
var x = c.get ? function(b) {
k("get");
return c.get(this, b, f);
} : function(b) {
k("get");
return this[b];
}, C = c.set ? function(b, d) {
k("set");
c.set(this, b, d, f);
} : function(b, d) {
k("set");
this[b] = d;
}, y = {};
e.getOwnPropertyNames(a).forEach(function(b) {
if (!((r || t) && b in f)) {
var d = e.getOwnPropertyDescriptor(a, b);
e.defineProperty(f, b, { enumerable: !!d.enumerable, get: x.bind(a, b), set: C.bind(a, b) });
y[b] = true;
}
});
h2 = true;
if (r || t) {
var D = e.setPrototypeOf || ([].__proto__ === Array.prototype ? function(b, d) {
p(d);
b.__proto__ = d;
return b;
} : v);
g && D(f, g) || (h2 = false);
}
if (c.get || !h2) for (var u in a) y[u] || e.defineProperty(f, u, { get: x.bind(a, u) });
e.seal(a);
e.seal(f);
return f;
};
m.revocable = function(a, c) {
return { proxy: new m(a, c), revoke: q };
};
return m;
}
;
var z = "undefined" !== typeof process && "[object process]" === {}.toString.call(process) || "undefined" !== typeof navigator && "ReactNative" === navigator.product ? global : self;
z.Proxy || (z.Proxy = n(), z.Proxy.revocable = z.Proxy.revocable);
})();
}
});
// node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/modules/NodeList.prototype.forEach.js
var require_NodeList_prototype_forEach = __commonJS({
"node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/modules/NodeList.prototype.forEach.js"() {
(function(undefined2) {
if (!("forEach" in NodeList.prototype)) {
NodeList.prototype.forEach = Array.prototype.forEach;
}
}).call("object" === typeof window && window || "object" === typeof self && self || "object" === typeof global && global || {});
}
});
// node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/helpers/_Iterator.js
var Iterator, Iterator_default;
var init_Iterator = __esm({
"node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/helpers/_Iterator.js"() {
Iterator = function() {
var clear = function() {
this.length = 0;
return this;
};
var callable = function(fn) {
if (typeof fn !== "function") throw new TypeError(fn + " is not a function");
return fn;
};
var Iterator2 = function(list, context) {
if (!(this instanceof Iterator2)) {
return new Iterator2(list, context);
}
Object.defineProperties(this, {
__list__: {
writable: true,
value: list
},
__context__: {
writable: true,
value: context
},
__nextIndex__: {
writable: true,
value: 0
}
});
if (!context) return;
callable(context.on);
context.on("_add", this._onAdd.bind(this));
context.on("_delete", this._onDelete.bind(this));
context.on("_clear", this._onClear.bind(this));
};
Object.defineProperties(Iterator2.prototype, Object.assign({
constructor: {
value: Iterator2,
configurable: true,
enumerable: false,
writable: true
},
_next: {
value: function() {
var i;
if (!this.__list__) return;
if (this.__redo__) {
i = this.__redo__.shift();
if (i !== void 0) return i;
}
if (this.__nextIndex__ < this.__list__.length) return this.__nextIndex__++;
this._unBind();
},
configurable: true,
enumerable: false,
writable: true
},
next: {
value: function() {
return this._createResult(this._next());
},
configurable: true,
enumerable: false,
writable: true
},
_createResult: {
value: function(i) {
if (i === void 0) return {
done: true,
value: void 0
};
return {
done: false,
value: this._resolve(i)
};
},
configurable: true,
enumerable: false,
writable: true
},
_resolve: {
value: function(i) {
return this.__list__[i];
},
configurable: true,
enumerable: false,
writable: true
},
_unBind: {
value: function() {
this.__list__ = null;
delete this.__redo__;
if (!this.__context__) return;
this.__context__.off("_add", this._onAdd.bind(this));
this.__context__.off("_delete", this._onDelete.bind(this));
this.__context__.off("_clear", this._onClear.bind(this));
this.__context__ = null;
},
configurable: true,
enumerable: false,
writable: true
},
toString: {
value: function() {
return "[object Iterator]";
},
configurable: true,
enumerable: false,
writable: true
}
}, {
_onAdd: {
value: function(index) {
if (index >= this.__nextIndex__) return;
++this.__nextIndex__;
if (!this.__redo__) {
Object.defineProperty(this, "__redo__", {
value: [index],
configurable: true,
enumerable: false,
writable: false
});
return;
}
this.__redo__.forEach(function(redo, i) {
if (redo >= index) this.__redo__[i] = ++redo;
}, this);
this.__redo__.push(index);
},
configurable: true,
enumerable: false,
writable: true
},
_onDelete: {
value: function(index) {
var i;
if (index >= this.__nextIndex__) return;
--this.__nextIndex__;
if (!this.__redo__) return;
i = this.__redo__.indexOf(index);
if (i !== -1) this.__redo__.splice(i, 1);
this.__redo__.forEach(function(redo, i2) {
if (redo > index) this.__redo__[i2] = --redo;
}, this);
},
configurable: true,
enumerable: false,
writable: true
},
_onClear: {
value: function() {
if (this.__redo__) clear.call(this.__redo__);
this.__nextIndex__ = 0;
},
configurable: true,
enumerable: false,
writable: true
}
}));
Object.defineProperty(Iterator2.prototype, Symbol.iterator, {
value: function() {
return this;
},
configurable: true,
enumerable: false,
writable: true
});
Object.defineProperty(Iterator2.prototype, Symbol.toStringTag, {
value: "Iterator",
configurable: false,
enumerable: false,
writable: true
});
return Iterator2;
}();
Iterator_default = Iterator;
}
});
// node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/helpers/_ArrayIterator.js
var ArrayIterator, ArrayIterator_default;
var init_ArrayIterator = __esm({
"node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/helpers/_ArrayIterator.js"() {
init_Iterator();
ArrayIterator = function() {
var ArrayIterator2 = function(arr, kind) {
if (!(this instanceof ArrayIterator2)) return new ArrayIterator2(arr, kind);
Iterator_default.call(this, arr);
if (!kind) kind = "value";
else if (String.prototype.includes.call(kind, "key+value")) kind = "key+value";
else if (String.prototype.includes.call(kind, "key")) kind = "key";
else kind = "value";
Object.defineProperty(this, "__kind__", {
value: kind,
configurable: false,
enumerable: false,
writable: false
});
};
if (Object.setPrototypeOf) Object.setPrototypeOf(ArrayIterator2, Iterator_default.prototype);
ArrayIterator2.prototype = Object.create(Iterator_default.prototype, {
constructor: {
value: ArrayIterator2,
configurable: true,
enumerable: false,
writable: true
},
_resolve: {
value: function(i) {
if (this.__kind__ === "value") return this.__list__[i];
if (this.__kind__ === "key+value") return [i, this.__list__[i]];
return i;
},
configurable: true,
enumerable: false,
writable: true
},
toString: {
value: function() {
return "[object Array Iterator]";
},
configurable: true,
enumerable: false,
writable: true
}
});
Object.defineProperty(ArrayIterator2.prototype, Symbol.toStringTag, {
value: "Array Iterator",
writable: false,
enumerable: false,
configurable: true
});
return ArrayIterator2;
}();
ArrayIterator_default = ArrayIterator;
}
});
// node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/modules/NodeList.prototype.@@iterator.js
var NodeList_prototype_iterator_exports = {};
var init_NodeList_prototype_iterator = __esm({
"node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/modules/NodeList.prototype.@@iterator.js"() {
init_ArrayIterator();
init_Iterator();
(function(undefined2) {
if (!("Symbol" in self && "iterator" in self.Symbol && function() {
var e = document.createDocumentFragment();
return e.appendChild(document.createElement("div")), !!e.childNodes[self.Symbol.iterator];
}())) {
NodeList.prototype[Symbol.iterator] = function() {
return new ArrayIterator_default(this);
};
}
}).call("object" === typeof window && window || "object" === typeof self && self || "object" === typeof global && global || {});
}
});
// node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/modules/Event.js
var require_Event = __commonJS({
"node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/modules/Event.js"() {
(function(undefined2) {
if (!function() {
if (!("Event" in self)) return false;
try {
return new Event("click"), true;
} catch (n) {
return false;
}
}()) {
(function() {
if (typeof document === "undefined" || typeof window === "undefined") return;
var existingProto = window.Event && window.Event.prototype || null;
function Event2(type, eventInitDict) {
if (!type) {
throw new Error("Not enough arguments");
}
var event;
if ("createEvent" in document) {
event = document.createEvent("Event");
var bubbles = eventInitDict && eventInitDict.bubbles !== undefined2 ? eventInitDict.bubbles : false;
var cancelable = eventInitDict && eventInitDict.cancelable !== undefined2 ? eventInitDict.cancelable : false;
event.initEvent(type, bubbles, cancelable);
return event;
}
event = document.createEventObject();
event.type = type;
event.bubbles = eventInitDict && eventInitDict.bubbles !== undefined2 ? eventInitDict.bubbles : false;
event.cancelable = eventInitDict && eventInitDict.cancelable !== undefined2 ? eventInitDict.cancelable : false;
return event;
}
Event2.NONE = 0;
Event2.CAPTURING_PHASE = 1;
Event2.AT_TARGET = 2;
Event2.BUBBLING_PHASE = 3;
window.Event = Window.prototype.Event = Event2;
if (existingProto) {
Object.defineProperty(window.Event, "prototype", {
configurable: false,
enumerable: false,
writable: true,
value: existingProto
});
}
if (!("createEvent" in document)) {
window.addEventListener = Window.prototype.addEventListener = Document.prototype.addEventListener = Element.prototype.addEventListener = function addEventListener() {
var element = this, type = arguments[0], listener = arguments[1];
if (!element._events) {
element._events = {};
}
if (!element._events[type]) {
element._events[type] = function(event) {
var list = element._events[event.type].list, events = list.slice(), index = -1, length = events.length, eventElement;
event.preventDefault = function preventDefault2() {
if (event.cancelable !== false) {
event.returnValue = false;
}
};
event.stopPropagation = function stopPropagation2() {
event.cancelBubble = true;
};
event.stopImmediatePropagation = function stopImmediatePropagation() {
event.cancelBubble = true;
event.cancelImmediate = true;
};
event.currentTarget = element;
event.relatedTarget = event.fromElement || null;
event.target = event.target || event.srcElement || element;
event.timeStamp = (/* @__PURE__ */ new Date()).getTime();
if (event.clientX) {
event.pageX = event.clientX + document.documentElement.scrollLeft;
event.pageY = event.clientY + document.documentElement.scrollTop;
}
while (++index < length && !event.cancelImmediate) {
if (index in events) {
eventElement = events[index];
if (list.includes(eventElement) && typeof eventElement === "function") {
eventElement.call(element, event);
}
}
}
};
element._events[type].list = [];
if (element.attachEvent) {
element.attachEvent("on" + type, element._events[type]);
}
}
element._events[type].list.push(listener);
};
window.removeEventListener = Window.prototype.removeEventListener = Document.prototype.removeEventListener = Element.prototype.removeEventListener = function removeEventListener() {
var element = this, type = arguments[0], listener = arguments[1], index;
if (element._events && element._events[type] && element._events[type].list) {
index = element._events[type].list.indexOf(listener);
if (index !== -1) {
element._events[type].list.splice(index, 1);
if (!element._events[type].list.length) {
if (element.detachEvent) {
element.detachEvent("on" + type, element._events[type]);
}
delete element._events[type];
}
}
}
};
window.dispatchEvent = Window.prototype.dispatchEvent = Document.prototype.dispatchEvent = Element.prototype.dispatchEvent = function dispatchEvent(event) {
if (!arguments.length) {
throw new Error("Not enough arguments");
}
if (!event || typeof event.type !== "string") {
throw new Error("DOM Events Exception 0");
}
var element = this, type = event.type;
try {
if (!event.bubbles) {
event.cancelBubble = true;
var cancelBubbleEvent = function(event2) {
event2.cancelBubble = true;
(element || window).detachEvent("on" + type, cancelBubbleEvent);
};
this.attachEvent("on" + type, cancelBubbleEvent);
}
this.fireEvent("on" + type, event);
} catch (error) {
event.target = element;
do {
event.currentTarget = element;
if ("_events" in element && typeof element._events[type] === "function") {
element._events[type].call(element, event);
}
if (typeof element["on" + type] === "function") {
element["on" + type].call(element, event);
}
element = element.nodeType === 9 ? element.parentWindow : element.parentNode;
} while (element && !event.cancelBubble);
}
return true;
};
document.attachEvent("onreadystatechange", function() {
if (document.readyState === "complete") {
document.dispatchEvent(new Event2("DOMContentLoaded", {
bubbles: true
}));
}
});
}
})();
}
}).call("object" === typeof window && window || "object" === typeof self && self || "object" === typeof global && global || {});
}
});
// node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/modules/CustomEvent.js
var require_CustomEvent = __commonJS({
"node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/modules/CustomEvent.js"() {
(function(undefined2) {
if (!("CustomEvent" in self && ("function" == typeof self.CustomEvent || -1 < self.CustomEvent.toString().indexOf("CustomEventConstructor")))) {
self.CustomEvent = function CustomEvent2(type, eventInitDict) {
if (!type) {
throw Error('TypeError: Failed to construct "CustomEvent": An event name must be provided.');
}
var event;
eventInitDict = eventInitDict || { bubbles: false, cancelable: false, detail: null };
try {
event = document.createEvent("CustomEvent");
event.initCustomEvent(type, eventInitDict.bubbles, eventInitDict.cancelable, eventInitDict.detail);
} catch (error) {
event = document.createEvent("Event");
event.initEvent(type, eventInitDict.bubbles, eventInitDict.cancelable);
event.detail = eventInitDict.detail;
}
return event;
};
CustomEvent.prototype = Event.prototype;
}
}).call("object" === typeof window && window || "object" === typeof self && self || "object" === typeof global && global || {});
}
});
// node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/modules/DocumentFragment.js
var require_DocumentFragment = __commonJS({
"node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/modules/DocumentFragment.js"() {
(function(undefined2) {
if (!("DocumentFragment" in self && function() {
try {
return new DocumentFragment(), true;
} catch (n) {
return false;
}
}())) {
(function(global2) {
global2.DocumentFragment = function DocumentFragment2() {
return document.createDocumentFragment();
};
var fragment = document.createDocumentFragment();
global2.DocumentFragment.prototype = Object.create(fragment.constructor.prototype);
})(self);
}
}).call("object" === typeof window && window || "object" === typeof self && self || "object" === typeof global && global || {});
}
});
// node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/modules/Element.prototype.matches.js
var require_Element_prototype_matches = __commonJS({
"node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/modules/Element.prototype.matches.js"() {
(function(undefined2) {
if (!("document" in self && "matches" in document.documentElement)) {
Element.prototype.matches = Element.prototype.webkitMatchesSelector || Element.prototype.oMatchesSelector || Element.prototype.msMatchesSelector || Element.prototype.mozMatchesSelector || function matches(selector) {
var element = this;
var elements = (element.document || element.ownerDocument).querySelectorAll(selector);
var index = 0;
while (elements[index] && elements[index] !== element) {
++index;
}
return !!elements[index];
};
}
}).call("object" === typeof window && window || "object" === typeof self && self || "object" === typeof global && global || {});
}
});
// node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/modules/HTMLTemplateElement.js
var require_HTMLTemplateElement = __commonJS({
"node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/modules/HTMLTemplateElement.js"() {
/**
* @license
* Copyright (c) 2016 The Polymer Project Authors. All rights reserved.
* This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
* The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
* The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
* Code distributed by Google as part of the polymer project is also
* subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
*/
(function() {
"use strict";
var needsTemplate = typeof HTMLTemplateElement === "undefined";
var brokenDocFragment = !(document.createDocumentFragment().cloneNode() instanceof DocumentFragment);
var needsDocFrag = false;
if (/Trident/.test(navigator.userAgent)) {
(function() {
needsDocFrag = true;
var origCloneNode = Node.prototype.cloneNode;
Node.prototype.cloneNode = function cloneNode2(deep) {
var newDom = origCloneNode.call(this, deep);
if (this instanceof DocumentFragment) {
newDom.__proto__ = DocumentFragment.prototype;
}
return newDom;
};
DocumentFragment.prototype.querySelectorAll = HTMLElement.prototype.querySelectorAll;
DocumentFragment.prototype.querySelector = HTMLElement.prototype.querySelector;
Object.defineProperties(DocumentFragment.prototype, {
"nodeType": {
get: function() {
return Node.DOCUMENT_FRAGMENT_NODE;
},
configurable: true
},
"localName": {
get: function() {
return void 0;
},
configurable: true
},
"nodeName": {
get: function() {
return "#document-fragment";
},
configurable: true
}
});
var origInsertBefore = Node.prototype.insertBefore;
function insertBefore(newNode, refNode) {
if (newNode instanceof DocumentFragment) {
var child;
while (child = newNode.firstChild) {
origInsertBefore.call(this, child, refNode);
}
} else {
origInsertBefore.call(this, newNode, refNode);
}
return newNode;
}
Node.prototype.insertBefore = insertBefore;
var origAppendChild = Node.prototype.appendChild;
Node.prototype.appendChild = function appendChild2(child) {
if (child instanceof DocumentFragment) {
insertBefore.call(this, child, null);
} else {
origAppendChild.call(this, child);
}
return child;
};
var origRemoveChild = Node.prototype.removeChild;
var origReplaceChild = Node.prototype.replaceChild;
Node.prototype.replaceChild = function replaceChild(newChild, oldChild) {
if (newChild instanceof DocumentFragment) {
insertBefore.call(this, newChild, oldChild);
origRemoveChild.call(this, oldChild);
} else {
origReplaceChild.call(this, newChild, oldChild);
}
return oldChild;
};
Document.prototype.createDocumentFragment = function createDocumentFragment() {
var frag = this.createElement("df");
frag.__proto__ = DocumentFragment.prototype;
return frag;
};
var origImportNode = Document.prototype.importNode;
Document.prototype.importNode = function importNode2(impNode, deep) {
deep = deep || false;
var newNode = origImportNode.call(this, impNode, deep);
if (impNode instanceof DocumentFragment) {
newNode.__proto__ = DocumentFragment.prototype;
}
return newNode;
};
})();
}
var capturedCloneNode = Node.prototype.cloneNode;
var capturedCreateElement = Document.prototype.createElement;
var capturedImportNode = Document.prototype.importNode;
var capturedRemoveChild = Node.prototype.removeChild;
var capturedAppendChild = Node.prototype.appendChild;
var capturedReplaceChild = Node.prototype.replaceChild;
var capturedParseFromString = DOMParser.prototype.parseFromString;
var capturedHTMLElementInnerHTML = Object.getOwnPropertyDescriptor(
window.HTMLElement.prototype,
"innerHTML"
) || {
/**
* @this {!HTMLElement}
* @return {string}
*/
get: function() {
return this.innerHTML;
},
/**
* @this {!HTMLElement}
* @param {string}
*/
set: function(text) {
this.innerHTML = text;
}
};
var capturedChildNodes = Object.getOwnPropertyDescriptor(
window.Node.prototype,
"childNodes"
) || {
/**
* @this {!Node}
* @return {!NodeList}
*/
get: function() {
return this.childNodes;
}
};
var elementQuerySelectorAll = Element.prototype.querySelectorAll;
var docQuerySelectorAll = Document.prototype.querySelectorAll;
var fragQuerySelectorAll = DocumentFragment.prototype.querySelectorAll;
var scriptSelector = 'script:not([type]),script[type="application/javascript"],script[type="text/javascript"]';
function QSA(node, selector) {
if (!node.childNodes.length) {
return [];
}
switch (node.nodeType) {
case Node.DOCUMENT_NODE:
return docQuerySelectorAll.call(node, selector);
case Node.DOCUMENT_FRAGMENT_NODE:
return fragQuerySelectorAll.call(node, selector);
default:
return elementQuerySelectorAll.call(node, selector);
}
}
var needsCloning = function() {
if (!needsTemplate) {
var t = document.createElement("template");
var t2 = document.createElement("template");
t2.content.appendChild(document.createElement("div"));
t.content.appendChild(t2);
var clone = t.cloneNode(true);
return clone.content.childNodes.length === 0 || clone.content.firstChild.content.childNodes.length === 0 || brokenDocFragment;
}
}();
var TEMPLATE_TAG = "template";
var PolyfilledHTMLTemplateElement = function() {
};
if (needsTemplate) {
var contentDoc = document.implementation.createHTMLDocument("template");
var canDecorate = true;
var templateStyle = document.createElement("style");
templateStyle.textContent = TEMPLATE_TAG + "{display:none;}";
var head = document.head;
head.insertBefore(templateStyle, head.firstElementChild);
PolyfilledHTMLTemplateElement.prototype = Object.create(
HTMLElement.prototype
);
var canProtoPatch = !document.createElement("div").hasOwnProperty("innerHTML");
PolyfilledHTMLTemplateElement.decorate = function(template) {
if (template.content || template.namespaceURI !== document.documentElement.namespaceURI) {
return;
}
template.content = contentDoc.createDocumentFragment();
var child;
while (child = template.firstChild) {
capturedAppendChild.call(template.content, child);
}
if (canProtoPatch) {
template.__proto__ = PolyfilledHTMLTemplateElement.prototype;
} else {
template.cloneNode = function(deep) {
return PolyfilledHTMLTemplateElement._cloneNode(this, deep);
};
if (canDecorate) {
try {
defineInnerHTML(template);
defineOuterHTML(template);
} catch (err) {
canDecorate = false;
}
}
}
PolyfilledHTMLTemplateElement.bootstrap(template.content);
};
var topLevelWrappingMap = {
"option": ["select"],
"thead": ["table"],
"col": ["colgroup", "table"],
"tr": ["tbody", "table"],
"th": ["tr", "tbody", "table"],
"td": ["tr", "tbody", "table"]
};
var getTagName = function(text) {
return (/<([a-z][^/\0>\x20\t\r\n\f]+)/i.exec(text) || [
"",
""
])[1].toLowerCase();
};
var defineInnerHTML = function defineInnerHTML2(obj) {
Object.defineProperty(obj, "innerHTML", {
get: function() {
return getInnerHTML(this);
},
set: function(text) {
var wrap = topLevelWrappingMap[getTagName(text)];
if (wrap) {
for (var i = 0; i < wrap.length; i++) {
text = "<" + wrap[i] + ">" + text + "</" + wrap[i] + ">";
}
}
contentDoc.body.innerHTML = text;
PolyfilledHTMLTemplateElement.bootstrap(contentDoc);
while (this.content.firstChild) {
capturedRemoveChild.call(this.content, this.content.firstChild);
}
var body = contentDoc.body;
if (wrap) {
for (var j = 0; j < wrap.length; j++) {
body = body.lastChild;
}
}
while (body.firstChild) {
capturedAppendChild.call(this.content, body.firstChild);
}
},
configurable: true
});
};
var defineOuterHTML = function defineOuterHTML2(obj) {
Object.defineProperty(obj, "outerHTML", {
get: function() {
return `<${TEMPLATE_TAG}>${this.innerHTML}</${TEMPLATE_TAG}>`;
},
set: function(innerHTML) {
if (this.parentNode) {
contentDoc.body.innerHTML = innerHTML;
var docFrag = this.ownerDocument.createDocumentFragment();
while (contentDoc.body.firstChild) {
capturedAppendChild.call(docFrag, contentDoc.body.firstChild);
}
capturedReplaceChild.call(this.parentNode, docFrag, this);
} else {
throw new Error(
"Failed to set the 'outerHTML' property on 'Element': This element has no parent node."
);
}
},
configurable: true
});
};
defineInnerHTML(PolyfilledHTMLTemplateElement.prototype);
defineOuterHTML(PolyfilledHTMLTemplateElement.prototype);
PolyfilledHTMLTemplateElement.bootstrap = function bootstrap(doc) {
var templates = QSA(doc, TEMPLATE_TAG);
for (var i = 0, l = templates.length, t; i < l && (t = templates[i]); i++) {
PolyfilledHTMLTemplateElement.decorate(t);
}
};
document.addEventListener("DOMContentLoaded", function() {
PolyfilledHTMLTemplateElement.bootstrap(document);
});
Document.prototype.createElement = function createElement2() {
var el = capturedCreateElement.apply(this, arguments);
if (el.localName === "template") {
PolyfilledHTMLTemplateElement.decorate(el);
}
return el;
};
DOMParser.prototype.parseFromString = function() {
var el = capturedParseFromString.apply(this, arguments);
PolyfilledHTMLTemplateElement.bootstrap(el);
return el;
};
Object.defineProperty(HTMLElement.prototype, "innerHTML", {
get: function() {
return getInnerHTML(this);
},
set: function(text) {
capturedHTMLElementInnerHTML.set.call(this, text);
PolyfilledHTMLTemplateElement.bootstrap(this);
},
configurable: true,
enumerable: true
});
var escapeAttrRegExp = /[&\u00A0"]/g;
var escapeDataRegExp = /[&\u00A0<>]/g;
var escapeReplace = function(c) {
switch (c) {
case "&":
return "&";
case "<":
return "<";
case ">":
return ">";
case '"':
return """;
case " ":
return " ";
}
};
var escapeAttr = function(s) {
return s.replace(escapeAttrRegExp, escapeReplace);
};
var escapeData = function(s) {
return s.replace(escapeDataRegExp, escapeReplace);
};
var makeSet = function(arr) {
var set = {};
for (var i = 0; i < arr.length; i++) {
set[arr[i]] = true;
}
return set;
};
var voidElements = makeSet([
"area",
"base",
"br",
"col",
"command",
"embed",
"hr",
"img",
"input",
"keygen",
"link",
"meta",
"param",
"source",
"track",
"wbr"
]);
var plaintextParents = makeSet([
"style",
"script",
"xmp",
"iframe",
"noembed",
"noframes",
"plaintext",
"noscript"
]);
var getOuterHTML = function(node, parentNode, callback) {
switch (node.nodeType) {
case Node.ELEMENT_NODE: {
var tagName = node.localName;
var s = "<" + tagName;
var attrs = node.attributes;
for (var i = 0, attr2; attr2 = attrs[i]; i++) {
s += " " + attr2.name + '="' + escapeAttr(attr2.value) + '"';
}
s += ">";
if (voidElements[tagName]) {
return s;
}
return s + getInnerHTML(node, callback) + "</" + tagName + ">";
}
case Node.TEXT_NODE: {
var data = (
/** @type {Text} */
node.data
);
if (parentNode && plaintextParents[parentNode.localName]) {
return data;
}
return escapeData(data);
}
case Node.COMMENT_NODE: {
return "<!--" + /** @type {Comment} */
node.data + "-->";
}
default: {
window.console.error(node);
throw new Error("not implemented");
}
}
};
var getInnerHTML = function(node, callback) {
if (node.localName === "template") {
node = /** @type {HTMLTemplateElement} */
node.content;
}
var s = "";
var c$ = callback ? callback(node) : capturedChildNodes.get.call(node);
for (var i = 0, l = c$.length, child; i < l && (child = c$[i]); i++) {
s += getOuterHTML(child, node, callback);
}
return s;
};
}
if (needsTemplate || needsCloning) {
PolyfilledHTMLTemplateElement._cloneNode = function _cloneNode(template, deep) {
var clone = capturedCloneNode.call(template, false);
if (this.decorate) {
this.decorate(clone);
}
if (deep) {
capturedAppendChild.call(
clone.content,
capturedCloneNode.call(template.content, true)
);
fixClonedDom(clone.content, template.content);
}
return clone;
};
var fixClonedDom = function fixClonedDom2(clone, source) {
if (!source.querySelectorAll) {
return;
}
var s$ = QSA(source, TEMPLATE_TAG);
if (s$.length === 0) {
return;
}
var t$ = QSA(clone, TEMPLATE_TAG);
for (var i = 0, l = t$.length, t, s; i < l; i++) {
s = s$[i];
t = t$[i];
if (PolyfilledHTMLTemplateElement && PolyfilledHTMLTemplateElement.decorate) {
PolyfilledHTMLTemplateElement.decorate(s);
}
capturedReplaceChild.call(t.parentNode, cloneNode.call(s, true), t);
}
};
var fixClonedScripts = function fixClonedScripts2(fragment) {
var scripts = QSA(fragment, scriptSelector);
for (var ns, s, i = 0; i < scripts.length; i++) {
s = scripts[i];
ns = capturedCreateElement.call(document, "script");
ns.textContent = s.textContent;
var attrs = s.attributes;
for (var ai = 0, a; ai < attrs.length; ai++) {
a = attrs[ai];
ns.setAttribute(a.name, a.value);
}
capturedReplaceChild.call(s.parentNode, ns, s);
}
};
var cloneNode = Node.prototype.cloneNode = function cloneNode2(deep) {
var dom;
if (!needsDocFrag && brokenDocFragment && this instanceof DocumentFragment) {
if (!deep) {
return this.ownerDocument.createDocumentFragment();
} else {
dom = importNode.call(this.ownerDocument, this, true);
}
} else if (this.nodeType === Node.ELEMENT_NODE && this.localName === TEMPLATE_TAG && this.namespaceURI == document.documentElement.namespaceURI) {
dom = PolyfilledHTMLTemplateElement._cloneNode(this, deep);
} else {
dom = capturedCloneNode.call(this, deep);
}
if (deep) {
fixClonedDom(dom, this);
}
return dom;
};
var importNode = Document.prototype.importNode = function importNode2(element, deep) {
deep = deep || false;
if (element.localName === TEMPLATE_TAG) {
return PolyfilledHTMLTemplateElement._cloneNode(element, deep);
} else {
var dom = capturedImportNode.call(this, element, deep);
if (deep) {
fixClonedDom(dom, element);
fixClonedScripts(dom);
}
return dom;
}
};
}
if (needsTemplate) {
window.HTMLTemplateElement = PolyfilledHTMLTemplateElement;
}
})();
}
});
// node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/modules/MutationObserver.js
var require_MutationObserver = __commonJS({
"node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/modules/MutationObserver.js"() {
(function(undefined2) {
if (!("MutationObserver" in self)) {
/*!
* Shim for MutationObserver interface
* Author: Graeme Yeates (github.com/megawac)
* Repository: https://github.com/megawac/MutationObserver.js
* License: WTFPL V2, 2004 (wtfpl.net).
* Though credit and staring the repo will make me feel pretty, you can modify and redistribute as you please.
* Attempts to follow spec (https://www.w3.org/TR/dom/#mutation-observers) as closely as possible for native javascript
* See https://github.com/WebKit/webkit/blob/master/Source/WebCore/dom/MutationObserver.cpp for current webkit source c++ implementation
*/
if (!window.MutationObserver) {
window.MutationObserver = function(undefined3) {
"use strict";
function MutationObserver2(listener) {
this._watched = [];
this._listener = listener;
}
function startMutationChecker(observer) {
(function check() {
var mutations = observer.takeRecords();
if (mutations.length) {
observer._listener(mutations, observer);
}
observer._timeout = setTimeout(check, MutationObserver2._period);
})();
}
MutationObserver2._period = 30;
MutationObserver2.prototype = {
/**
* see https://dom.spec.whatwg.org/#dom-mutationobserver-observe
* not going to throw here but going to follow the current spec config sets
* @param {Node|null} $target
* @param {Object|null} config : MutationObserverInit configuration dictionary
* @expose
* @return undefined
*/
observe: function($target, config) {
var settings = {
attr: !!(config.attributes || config.attributeFilter || config.attributeOldValue),
// some browsers enforce that subtree must be set with childList, attributes or characterData.
// We don't care as spec doesn't specify this rule.
kids: !!config.childList,
descendents: !!config.subtree,
charData: !!(config.characterData || config.characterDataOldValue)
};
var watched = this._watched;
for (var i = 0; i < watched.length; i++) {
if (watched[i].tar === $target) watched.splice(i, 1);
}
if (config.attributeFilter) {
settings.afilter = reduce(config.attributeFilter, function(a, b) {
a[b] = true;
return a;
}, {});
}
watched.push({
tar: $target,
fn: createMutationSearcher($target, settings)
});
if (!this._timeout) {
startMutationChecker(this);
}
},
/**
* Finds mutations since last check and empties the "record queue" i.e. mutations will only be found once
* @expose
* @return {Array.<MutationRecord>}
*/
takeRecords: function() {
var mutations = [];
var watched = this._watched;
for (var i = 0; i < watched.length; i++) {
watched[i].fn(mutations);
}
return mutations;
},
/**
* @expose
* @return undefined
*/
disconnect: function() {
this._watched = [];
clearTimeout(this._timeout);
this._timeout = null;
}
};
function MutationRecord(data) {
var settings = {
// technically these should be on proto so hasOwnProperty will return false for non explicitly props
type: null,
target: null,
addedNodes: [],
removedNodes: [],
previousSibling: null,
nextSibling: null,
attributeName: null,
attributeNamespace: null,
oldValue: null
};
for (var prop in data) {
if (has(settings, prop) && data[prop] !== undefined3) settings[prop] = data[prop];
}
return settings;
}
function createMutationSearcher($target, config) {
var $oldstate = clone($target, config);
return function(mutations) {
var olen = mutations.length, dirty;
if (config.charData && $target.nodeType === 3 && $target.nodeValue !== $oldstate.charData) {
mutations.push(new MutationRecord({
type: "characterData",
target: $target,
oldValue: $oldstate.charData
}));
}
if (config.attr && $oldstate.attr) {
findAttributeMutations(mutations, $target, $oldstate.attr, config.afilter);
}
if (config.kids || config.descendents) {
dirty = searchSubtree(mutations, $target, $oldstate, config);
}
if (dirty || mutations.length !== olen) {
$oldstate = clone($target, config);
}
};
}
var hasAttributeBug = document.createElement("i");
hasAttributeBug.style.top = 0;
hasAttributeBug = hasAttributeBug.attributes.style.value != "null";
function getAttributeSimple(el, attr2) {
return attr2.value;
}
function getAttributeWithStyleHack(el, attr2) {
return attr2.name !== "style" ? attr2.value : el.style.cssText;
}
var getAttributeValue = hasAttributeBug ? getAttributeSimple : getAttributeWithStyleHack;
function findAttributeMutations(mutations, $target, $oldstate, filter) {
var checked = {};
var attributes2 = $target.attributes;
var attr2;
var name;
var i = attributes2.length;
while (i--) {
attr2 = attributes2[i];
name = attr2.name;
if (!filter || has(filter, name)) {
if (getAttributeValue($target, attr2) !== $oldstate[name]) {
mutations.push(MutationRecord({
type: "attributes",
target: $target,
attributeName: name,
oldValue: $oldstate[name],
attributeNamespace: attr2.namespaceURI
// in ie<8 it incorrectly will return undefined
}));
}
checked[name] = true;
}
}
for (name in $oldstate) {
if (!checked[name]) {
mutations.push(MutationRecord({
target: $target,
type: "attributes",
attributeName: name,
oldValue: $oldstate[name]
}));
}
}
}
function searchSubtree(mutations, $target, $oldstate, config) {
var dirty;
function resolveConflicts(conflicts, node, $kids, $oldkids, numAddedNodes) {
var distance = conflicts.length - 1;
var counter2 = -~((distance - numAddedNodes) / 2);
var $cur;
var oldstruct;
var conflict;
while (conflict = conflicts.pop()) {
$cur = $kids[conflict.i];
oldstruct = $oldkids[conflict.j];
if (config.kids && counter2 && Math.abs(conflict.i - conflict.j) >= distance) {
mutations.push(MutationRecord({
type: "childList",
target: node,
addedNodes: [$cur],
removedNodes: [$cur],
// haha don't rely on this please
nextSibling: $cur.nextSibling,
previousSibling: $cur.previousSibling
}));
counter2--;
}
if (config.attr && oldstruct.attr) findAttributeMutations(mutations, $cur, oldstruct.attr, config.afilter);
if (config.charData && $cur.nodeType === 3 && $cur.nodeValue !== oldstruct.charData) {
mutations.push(MutationRecord({
type: "characterData",
target: $cur,
oldValue: oldstruct.charData
}));
}
if (config.descendents) findMutations($cur, oldstruct);
}
}
function findMutations(node, old) {
var $kids = node.childNodes;
var $oldkids = old.kids;
var klen = $kids.length;
var olen = $oldkids ? $oldkids.length : 0;
var map2;
var conflicts;
var id;
var idx;
var oldstruct;
var $cur;
var $old;
var numAddedNodes = 0;
var i = 0, j = 0;
while (i < klen || j < olen) {
$cur = $kids[i];
oldstruct = $oldkids[j];
$old = oldstruct && oldstruct.node;
if ($cur === $old) {
if (config.attr && oldstruct.attr) findAttributeMutations(mutations, $cur, oldstruct.attr, config.afilter);
if (config.charData && oldstruct.charData !== undefined3 && $cur.nodeValue !== oldstruct.charData) {
mutations.push(MutationRecord({
type: "characterData",
target: $cur,
oldValue: oldstruct.charData
}));
}
if (conflicts) resolveConflicts(conflicts, node, $kids, $oldkids, numAddedNodes);
if (config.descendents && ($cur.childNodes.length || oldstruct.kids && oldstruct.kids.length)) findMutations($cur, oldstruct);
i++;
j++;
} else {
dirty = true;
if (!map2) {
map2 = {};
conflicts = [];
}
if ($cur) {
if (!map2[id = getElementId($cur)]) {
map2[id] = true;
if ((idx = indexOfCustomNode($oldkids, $cur, j)) === -1) {
if (config.kids) {
mutations.push(MutationRecord({
type: "childList",
target: node,
addedNodes: [$cur],
// $cur is a new node
nextSibling: $cur.nextSibling,
previousSibling: $cur.previousSibling
}));
numAddedNodes++;
}
} else {
conflicts.push({
// add conflict
i,
j: idx
});
}
}
i++;
}
if ($old && // special case: the changes may have been resolved: i and j appear congurent so we can continue using the expected case
$old !== $kids[i]) {
if (!map2[id = getElementId($old)]) {
map2[id] = true;
if ((idx = indexOf($kids, $old, i)) === -1) {
if (config.kids) {
mutations.push(MutationRecord({
type: "childList",
target: old.node,
removedNodes: [$old],
nextSibling: $oldkids[j + 1],
// praise no indexoutofbounds exception
previousSibling: $oldkids[j - 1]
}));
numAddedNodes--;
}
} else {
conflicts.push({
i: idx,
j
});
}
}
j++;
}
}
}
if (conflicts) resolveConflicts(conflicts, node, $kids, $oldkids, numAddedNodes);
}
findMutations($target, $oldstate);
return dirty;
}
function clone($target, config) {
var recurse = true;
return function copy($target2) {
var elestruct = {
/** @type {Node} */
node: $target2
};
if (config.charData && ($target2.nodeType === 3 || $target2.nodeType === 8)) {
elestruct.charData = $target2.nodeValue;
} else {
if (config.attr && recurse && $target2.nodeType === 1) {
elestruct.attr = reduce($target2.attributes, function(memo2, attr2) {
if (!config.afilter || config.afilter[attr2.name]) {
memo2[attr2.name] = getAttributeValue($target2, attr2);
}
return memo2;
}, {});
}
if (recurse && (config.kids || config.charData || config.attr && config.descendents)) {
elestruct.kids = map($target2.childNodes, copy);
}
recurse = config.descendents;
}
return elestruct;
}($target);
}
function indexOfCustomNode(set, $node, idx) {
return indexOf(set, $node, idx, JSCompiler_renameProperty("node"));
}
var counter = 1;
var expando = "mo_id";
function getElementId($ele) {
try {
return $ele.id || ($ele[expando] = $ele[expando] || counter++);
} catch (o_O) {
try {
return $ele.nodeValue;
} catch (shitie) {
return counter++;
}
}
}
function map(set, iterator) {
var results = [];
for (var index = 0; index < set.length; index++) {
results[index] = iterator(set[index], index, set);
}
return results;
}
function reduce(set, iterator, memo2) {
for (var index = 0; index < set.length; index++) {
memo2 = iterator(memo2, set[index], index, set);
}
return memo2;
}
function indexOf(set, item, idx, prop) {
for (; idx < set.length; idx++) {
if ((prop ? set[idx][prop] : set[idx]) === item) return idx;
}
return -1;
}
function has(obj, prop) {
return obj[prop] !== undefined3;
}
function JSCompiler_renameProperty(a) {
return a;
}
return MutationObserver2;
}(void 0);
}
}
}).call("object" === typeof window && window || "object" === typeof self && self || "object" === typeof global && global || {});
}
});
// node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/modules/Node.prototype.contains.js
var require_Node_prototype_contains = __commonJS({
"node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/modules/Node.prototype.contains.js"() {
(function(undefined2) {
if (!document.contains) {
(function() {
function contains(node) {
if (!(0 in arguments)) {
throw new TypeError("1 argument is required");
}
do {
if (this === node) {
return true;
}
} while (node = node && node.parentNode);
return false;
}
if ("HTMLElement" in self && "contains" in HTMLElement.prototype) {
try {
delete HTMLElement.prototype.contains;
} catch (e) {
}
}
if ("Node" in self) {
Node.prototype.contains = contains;
} else {
document.contains = Element.prototype.contains = contains;
}
})();
}
}).call("object" === typeof window && window || "object" === typeof self && self || "object" === typeof global && global || {});
}
});
// node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/modules/~shadydom.js
var require_shadydom = __commonJS({
"node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/modules/~shadydom.js"(exports2) {
(function() {
try {
window["ShadyDOM"] = window["ShadyDOM"] || {};
window["ShadyDOM"]["querySelectorImplementation"] = window["ShadyDOM"]["querySelectorImplementation"] || "native";
} catch (err) {
}
})();
(function() {
"use strict";
var n;
function aa(a) {
var b = 0;
return function() {
return b < a.length ? { done: false, value: a[b++] } : { done: true };
};
}
function p(a) {
var b = "undefined" != typeof Symbol && Symbol.iterator && a[Symbol.iterator];
return b ? b.call(a) : { next: aa(a) };
}
function q(a) {
if (!(a instanceof Array)) {
a = p(a);
for (var b, c = []; !(b = a.next()).done; ) c.push(b.value);
a = c;
}
return a;
}
function ba(a) {
a = ["object" == typeof globalThis && globalThis, a, "object" == typeof window && window, "object" == typeof self && self, "object" == typeof global && global];
for (var b = 0; b < a.length; ++b) {
var c = a[b];
if (c && c.Math == Math) return c;
}
throw Error("Cannot find global object");
}
var ca = ba(this);
function da() {
}
da.prototype.toJSON = function() {
return {};
};
function t(a) {
a.__shady || (a.__shady = new da());
return a.__shady;
}
function u(a) {
return a && a.__shady;
}
;
var v = window.ShadyDOM || {};
v.da = !(!Element.prototype.attachShadow || !Node.prototype.getRootNode);
var ea = Object.getOwnPropertyDescriptor(Node.prototype, "firstChild");
v.i = !!(ea && ea.configurable && ea.get);
v.N = v.force || !v.da;
v.l = v.noPatch || false;
v.C = v.preferPerformance;
v.O = "on-demand" === v.l;
var fa;
var ha = v.querySelectorImplementation;
fa = -1 < ["native", "selectorEngine"].indexOf(ha) ? ha : void 0;
v.ga = fa;
v.V = navigator.userAgent.match("Trident");
function ia() {
return Document.prototype.msElementsFromPoint ? "msElementsFromPoint" : "elementsFromPoint";
}
function w(a) {
return (a = u(a)) && void 0 !== a.firstChild;
}
function x(a) {
return a instanceof ShadowRoot;
}
function ja(a) {
return (a = (a = u(a)) && a.root) && ka(a);
}
var y = Element.prototype, la = y.matches || y.matchesSelector || y.mozMatchesSelector || y.msMatchesSelector || y.oMatchesSelector || y.webkitMatchesSelector, ma = document.createTextNode(""), na = 0, oa = [];
new MutationObserver(function() {
for (; oa.length; ) try {
oa.shift()();
} catch (a) {
throw ma.textContent = na++, a;
}
}).observe(ma, { characterData: true });
function pa(a) {
oa.push(a);
ma.textContent = na++;
}
var qa = document.contains ? function(a, b) {
return a.__shady_native_contains(b);
} : function(a, b) {
return a === b || a.documentElement && a.documentElement.__shady_native_contains(b);
};
function ra(a, b) {
for (; b; ) {
if (b == a) return true;
b = b.__shady_parentNode;
}
return false;
}
function z(a) {
for (var b = a.length - 1; 0 <= b; b--) {
var c = a[b], d = c.getAttribute("id") || c.getAttribute("name");
d && "length" !== d && isNaN(d) && (a[d] = c);
}
a.item = function(e) {
return a[e];
};
a.namedItem = function(e) {
if ("length" !== e && isNaN(e) && a[e]) return a[e];
for (var f = p(a), g = f.next(); !g.done; g = f.next()) if (g = g.value, (g.getAttribute("id") || g.getAttribute("name")) == e) return g;
return null;
};
return a;
}
function sa(a) {
var b = [];
for (a = a.__shady_native_firstChild; a; a = a.__shady_native_nextSibling) b.push(a);
return b;
}
function ta(a) {
var b = [];
for (a = a.__shady_firstChild; a; a = a.__shady_nextSibling) b.push(a);
return b;
}
function ua(a, b, c) {
c.configurable = true;
if (c.value) a[b] = c.value;
else try {
Object.defineProperty(a, b, c);
} catch (d) {
}
}
function A(a, b, c, d) {
c = void 0 === c ? "" : c;
for (var e in b) d && 0 <= d.indexOf(e) || ua(a, c + e, b[e]);
}
function va(a, b) {
for (var c in b) c in a && ua(a, c, b[c]);
}
function B(a) {
var b = {};
Object.getOwnPropertyNames(a).forEach(function(c) {
b[c] = Object.getOwnPropertyDescriptor(a, c);
});
return b;
}
function wa(a, b) {
for (var c = Object.getOwnPropertyNames(b), d = 0, e; d < c.length; d++) e = c[d], a[e] = b[e];
}
function xa(a) {
return a instanceof Node ? a : document.createTextNode("" + a);
}
function D(a) {
for (var b = [], c = 0; c < arguments.length; ++c) b[c] = arguments[c];
if (1 === b.length) return xa(b[0]);
c = document.createDocumentFragment();
b = p(b);
for (var d = b.next(); !d.done; d = b.next()) c.appendChild(xa(d.value));
return c;
}
function ya(a) {
var b;
for (b = void 0 === b ? 1 : b; 0 < b; b--) a = a.reduce(function(c, d) {
Array.isArray(d) ? c.push.apply(c, q(d)) : c.push(d);
return c;
}, []);
return a;
}
function za(a) {
var b = [], c = /* @__PURE__ */ new Set();
a = p(a);
for (var d = a.next(); !d.done; d = a.next()) d = d.value, c.has(d) || (b.push(d), c.add(d));
return b;
}
;
var E = [], Aa;
function Ba(a) {
Aa || (Aa = true, pa(F));
E.push(a);
}
function F() {
Aa = false;
for (var a = !!E.length; E.length; ) E.shift()();
return a;
}
F.list = E;
function Ca() {
this.g = false;
this.addedNodes = [];
this.removedNodes = [];
this.H = /* @__PURE__ */ new Set();
}
function Da(a) {
a.g || (a.g = true, pa(function() {
a.flush();
}));
}
Ca.prototype.flush = function() {
if (this.g) {
this.g = false;
var a = this.takeRecords();
a.length && this.H.forEach(function(b) {
b(a);
});
}
};
Ca.prototype.takeRecords = function() {
if (this.addedNodes.length || this.removedNodes.length) {
var a = [{ addedNodes: this.addedNodes, removedNodes: this.removedNodes }];
this.addedNodes = [];
this.removedNodes = [];
return a;
}
return [];
};
function Ea(a, b) {
var c = t(a);
c.B || (c.B = new Ca());
c.B.H.add(b);
var d = c.B;
return { Z: b, ba: d, aa: a, takeRecords: function() {
return d.takeRecords();
} };
}
function Fa(a) {
var b = a && a.ba;
b && (b.H.delete(a.Z), b.H.size || (t(a.aa).B = null));
}
function Ga(a, b) {
var c = b.getRootNode();
return a.map(function(d) {
var e = c === d.target.getRootNode();
if (e && d.addedNodes) {
if (e = [].slice.call(d.addedNodes).filter(function(f) {
return c === f.getRootNode();
}), e.length) return d = Object.create(d), Object.defineProperty(d, "addedNodes", { value: e, configurable: true }), d;
} else if (e) return d;
}).filter(function(d) {
return d;
});
}
;
var Ha = /[&\u00A0"]/g, Ia = /[&\u00A0<>]/g;
function Ja(a) {
switch (a) {
case "&":
return "&";
case "<":
return "<";
case ">":
return ">";
case '"':
return """;
case " ":
return " ";
}
}
function Ka(a) {
for (var b = {}, c = 0; c < a.length; c++) b[a[c]] = true;
return b;
}
var La = Ka("area base br col command embed hr img input keygen link meta param source track wbr".split(" ")), Ma = Ka("style script xmp iframe noembed noframes plaintext noscript".split(" "));
function Na(a, b) {
"template" === a.localName && (a = a.content);
for (var c = "", d = b ? b(a) : a.childNodes, e = 0, f = d.length, g = void 0; e < f && (g = d[e]); e++) {
a: {
var h2 = g;
var k = a, l = b;
switch (h2.nodeType) {
case Node.ELEMENT_NODE:
k = h2.localName;
for (var m = "<" + k, r = h2.attributes, C = 0, S; S = r[C]; C++) m += " " + S.name + '="' + S.value.replace(Ha, Ja) + '"';
m += ">";
h2 = La[k] ? m : m + Na(h2, l) + "</" + k + ">";
break a;
case Node.TEXT_NODE:
h2 = h2.data;
h2 = k && Ma[k.localName] ? h2 : h2.replace(Ia, Ja);
break a;
case Node.COMMENT_NODE:
h2 = "<!--" + h2.data + "-->";
break a;
default:
throw window.console.error(h2), Error("not implemented");
}
}
c += h2;
}
return c;
}
;
var G = v.i, Oa = { querySelector: function(a) {
return this.__shady_native_querySelector(a);
}, querySelectorAll: function(a) {
return this.__shady_native_querySelectorAll(a);
} }, Pa = {};
function Qa(a) {
Pa[a] = function(b) {
return b["__shady_native_" + a];
};
}
function H(a, b) {
A(a, b, "__shady_native_");
for (var c in b) Qa(c);
}
function I(a, b) {
b = void 0 === b ? [] : b;
for (var c = 0; c < b.length; c++) {
var d = b[c], e = Object.getOwnPropertyDescriptor(a, d);
e && (Object.defineProperty(a, "__shady_native_" + d, e), e.value ? Oa[d] || (Oa[d] = e.value) : Qa(d));
}
}
var J = document.createTreeWalker(document, NodeFilter.SHOW_ALL, null, false), K = document.createTreeWalker(document, NodeFilter.SHOW_ELEMENT, null, false), Ra = document.implementation.createHTMLDocument("inert");
function Sa(a) {
for (var b; b = a.__shady_native_firstChild; ) a.__shady_native_removeChild(b);
}
var Ta = ["firstElementChild", "lastElementChild", "children", "childElementCount"], Ua = ["querySelector", "querySelectorAll", "append", "prepend", "replaceChildren"];
function Va() {
var a = ["dispatchEvent", "addEventListener", "removeEventListener"];
window.EventTarget ? (I(window.EventTarget.prototype, a), void 0 === window.__shady_native_addEventListener && I(Window.prototype, a)) : (I(Node.prototype, a), I(Window.prototype, a), I(XMLHttpRequest.prototype, a));
G ? I(Node.prototype, "parentNode firstChild lastChild previousSibling nextSibling childNodes parentElement textContent".split(" ")) : H(Node.prototype, { parentNode: { get: function() {
J.currentNode = this;
return J.parentNode();
} }, firstChild: { get: function() {
J.currentNode = this;
return J.firstChild();
} }, lastChild: { get: function() {
J.currentNode = this;
return J.lastChild();
} }, previousSibling: { get: function() {
J.currentNode = this;
return J.previousSibling();
} }, nextSibling: { get: function() {
J.currentNode = this;
return J.nextSibling();
} }, childNodes: { get: function() {
var b = [];
J.currentNode = this;
for (var c = J.firstChild(); c; ) b.push(c), c = J.nextSibling();
return b;
} }, parentElement: { get: function() {
K.currentNode = this;
return K.parentNode();
} }, textContent: { get: function() {
switch (this.nodeType) {
case Node.ELEMENT_NODE:
case Node.DOCUMENT_FRAGMENT_NODE:
for (var b = document.createTreeWalker(this, NodeFilter.SHOW_TEXT, null, false), c = "", d; d = b.nextNode(); ) c += d.nodeValue;
return c;
default:
return this.nodeValue;
}
}, set: function(b) {
if ("undefined" === typeof b || null === b) b = "";
switch (this.nodeType) {
case Node.ELEMENT_NODE:
case Node.DOCUMENT_FRAGMENT_NODE:
Sa(this);
(0 < b.length || this.nodeType === Node.ELEMENT_NODE) && this.__shady_native_insertBefore(document.createTextNode(b), void 0);
break;
default:
this.nodeValue = b;
}
} } });
I(Node.prototype, "appendChild insertBefore removeChild replaceChild cloneNode contains".split(" "));
I(HTMLElement.prototype, ["parentElement", "contains"]);
a = { firstElementChild: { get: function() {
K.currentNode = this;
return K.firstChild();
} }, lastElementChild: { get: function() {
K.currentNode = this;
return K.lastChild();
} }, children: { get: function() {
var b = [];
K.currentNode = this;
for (var c = K.firstChild(); c; ) b.push(c), c = K.nextSibling();
return z(b);
} }, childElementCount: { get: function() {
return this.children ? this.children.length : 0;
} } };
G ? (I(Element.prototype, Ta), I(Element.prototype, [
"previousElementSibling",
"nextElementSibling",
"innerHTML",
"className"
]), I(HTMLElement.prototype, ["children", "innerHTML", "className"])) : (H(Element.prototype, a), H(Element.prototype, { previousElementSibling: { get: function() {
K.currentNode = this;
return K.previousSibling();
} }, nextElementSibling: { get: function() {
K.currentNode = this;
return K.nextSibling();
} }, innerHTML: { get: function() {
return Na(this, sa);
}, set: function(b) {
var c = "template" === this.localName ? this.content : this;
Sa(c);
var d = this.localName || "div";
d = this.namespaceURI && this.namespaceURI !== Ra.namespaceURI ? Ra.createElementNS(this.namespaceURI, d) : Ra.createElement(d);
d.innerHTML = b;
for (b = "template" === this.localName ? d.content : d; d = b.__shady_native_firstChild; ) c.__shady_native_insertBefore(d, void 0);
} }, className: { get: function() {
return this.getAttribute("class") || "";
}, set: function(b) {
this.setAttribute("class", b);
} } }));
I(Element.prototype, "setAttribute getAttribute hasAttribute removeAttribute toggleAttribute focus blur".split(" "));
I(Element.prototype, Ua);
I(HTMLElement.prototype, ["focus", "blur"]);
window.HTMLTemplateElement && I(window.HTMLTemplateElement.prototype, ["innerHTML"]);
G ? I(DocumentFragment.prototype, Ta) : H(DocumentFragment.prototype, a);
I(DocumentFragment.prototype, Ua);
G ? (I(Document.prototype, Ta), I(Document.prototype, ["activeElement"])) : H(Document.prototype, a);
I(Document.prototype, ["importNode", "getElementById", "elementFromPoint", ia()]);
I(Document.prototype, Ua);
}
;
var Wa = B({ get childNodes() {
return this.__shady_childNodes;
}, get firstChild() {
return this.__shady_firstChild;
}, get lastChild() {
return this.__shady_lastChild;
}, get childElementCount() {
return this.__shady_childElementCount;
}, get children() {
return this.__shady_children;
}, get firstElementChild() {
return this.__shady_firstElementChild;
}, get lastElementChild() {
return this.__shady_lastElementChild;
}, get shadowRoot() {
return this.__shady_shadowRoot;
} }), Xa = B({ get textContent() {
return this.__shady_textContent;
}, set textContent(a) {
this.__shady_textContent = a;
}, get innerHTML() {
return this.__shady_innerHTML;
}, set innerHTML(a) {
this.__shady_innerHTML = a;
} }), Ya = B({ get parentElement() {
return this.__shady_parentElement;
}, get parentNode() {
return this.__shady_parentNode;
}, get nextSibling() {
return this.__shady_nextSibling;
}, get previousSibling() {
return this.__shady_previousSibling;
}, get nextElementSibling() {
return this.__shady_nextElementSibling;
}, get previousElementSibling() {
return this.__shady_previousElementSibling;
}, get className() {
return this.__shady_className;
}, set className(a) {
this.__shady_className = a;
} });
function Za(a) {
for (var b in a) {
var c = a[b];
c && (c.enumerable = false);
}
}
Za(Wa);
Za(Xa);
Za(Ya);
var $a = v.i || true === v.l, ab = $a ? function() {
} : function(a) {
var b = t(a);
b.X || (b.X = true, va(a, Ya));
}, bb = $a ? function() {
} : function(a) {
var b = t(a);
b.W || (b.W = true, va(a, Wa), window.customElements && window.customElements.polyfillWrapFlushCallback && !v.l || va(a, Xa));
};
var L = "__eventWrappers" + Date.now(), cb = function() {
var a = Object.getOwnPropertyDescriptor(Event.prototype, "composed");
return a ? function(b) {
return a.get.call(b);
} : null;
}(), db = function() {
function a() {
}
var b = false, c = { get capture() {
b = true;
return false;
} };
window.addEventListener("test", a, c);
window.removeEventListener("test", a, c);
return b;
}();
function eb(a) {
if (null === a || "object" !== typeof a && "function" !== typeof a) {
var b = !!a;
var c = false;
} else {
b = !!a.capture;
c = !!a.once;
var d = a.o;
}
return { U: d, capture: b, once: c, T: db ? a : b };
}
var fb = {
blur: true,
focus: true,
focusin: true,
focusout: true,
click: true,
dblclick: true,
mousedown: true,
mouseenter: true,
mouseleave: true,
mousemove: true,
mouseout: true,
mouseover: true,
mouseup: true,
wheel: true,
beforeinput: true,
input: true,
keydown: true,
keyup: true,
compositionstart: true,
compositionupdate: true,
compositionend: true,
touchstart: true,
touchend: true,
touchmove: true,
touchcancel: true,
pointerover: true,
pointerenter: true,
pointerdown: true,
pointermove: true,
pointerup: true,
pointercancel: true,
pointerout: true,
pointerleave: true,
gotpointercapture: true,
lostpointercapture: true,
dragstart: true,
drag: true,
dragenter: true,
dragleave: true,
dragover: true,
drop: true,
dragend: true,
DOMActivate: true,
DOMFocusIn: true,
DOMFocusOut: true,
keypress: true
}, gb = { DOMAttrModified: true, DOMAttributeNameChanged: true, DOMCharacterDataModified: true, DOMElementNameChanged: true, DOMNodeInserted: true, DOMNodeInsertedIntoDocument: true, DOMNodeRemoved: true, DOMNodeRemovedFromDocument: true, DOMSubtreeModified: true };
function hb(a) {
return a instanceof Node ? a.__shady_getRootNode() : a;
}
function M(a, b) {
var c = [], d = a;
for (a = hb(a); d; ) c.push(d), d = d.__shady_assignedSlot ? d.__shady_assignedSlot : d.nodeType === Node.DOCUMENT_FRAGMENT_NODE && d.host && (b || d !== a) ? d.host : d.__shady_parentNode;
c[c.length - 1] === document && c.push(window);
return c;
}
function ib(a) {
a.__composedPath || (a.__composedPath = M(a.target, true));
return a.__composedPath;
}
function jb(a, b) {
if (!x) return a;
a = M(a, true);
for (var c = 0, d, e = void 0, f, g = void 0; c < b.length; c++) if (d = b[c], f = hb(d), f !== e && (g = a.indexOf(f), e = f), !x(f) || -1 < g) return d;
}
var kb = { get composed() {
void 0 === this.__composed && (cb ? this.__composed = "focusin" === this.type || "focusout" === this.type || cb(this) : false !== this.isTrusted && (this.__composed = fb[this.type]));
return this.__composed || false;
}, composedPath: function() {
this.__composedPath || (this.__composedPath = M(this.__target, this.composed));
return this.__composedPath;
}, get target() {
return jb(this.currentTarget || this.__previousCurrentTarget, this.composedPath());
}, get relatedTarget() {
if (!this.__relatedTarget) return null;
this.__relatedTargetComposedPath || (this.__relatedTargetComposedPath = M(this.__relatedTarget, true));
return jb(this.currentTarget || this.__previousCurrentTarget, this.__relatedTargetComposedPath);
}, stopPropagation: function() {
Event.prototype.stopPropagation.call(this);
this.K = true;
}, stopImmediatePropagation: function() {
Event.prototype.stopImmediatePropagation.call(this);
this.K = this.__immediatePropagationStopped = true;
} }, lb = v.i && Object.getOwnPropertyDescriptor(Event.prototype, "eventPhase");
lb && (Object.defineProperty(kb, "eventPhase", { get: function() {
return this.currentTarget === this.target ? Event.AT_TARGET : this.__shady_native_eventPhase;
}, enumerable: true, configurable: true }), Object.defineProperty(kb, "__shady_native_eventPhase", lb));
function mb(a) {
function b(c, d) {
c = new a(c, d);
c.__composed = d && !!d.composed;
return c;
}
b.__proto__ = a;
b.prototype = a.prototype;
return b;
}
var nb = { focus: true, blur: true };
function ob(a) {
return a.__target !== a.target || a.__relatedTarget !== a.relatedTarget;
}
function pb(a, b, c) {
if (c = b.__handlers && b.__handlers[a.type] && b.__handlers[a.type][c]) for (var d = 0, e; (e = c[d]) && (!ob(a) || a.target !== a.relatedTarget) && (e.call(b, a), !a.__immediatePropagationStopped); d++) ;
}
var qb = new Event("e").hasOwnProperty("currentTarget");
function rb(a) {
a = qb ? Object.create(a) : a;
var b = a.composedPath(), c = b.map(function(m) {
return jb(m, b);
}), d = a.bubbles, e = Object.getOwnPropertyDescriptor(a, "currentTarget");
Object.defineProperty(a, "currentTarget", { configurable: true, enumerable: true, get: function() {
return k;
} });
var f = Event.CAPTURING_PHASE, g = Object.getOwnPropertyDescriptor(a, "eventPhase");
Object.defineProperty(a, "eventPhase", { configurable: true, enumerable: true, get: function() {
return f;
} });
try {
for (var h2 = b.length - 1; 0 <= h2; h2--) {
var k = b[h2];
f = k === c[h2] ? Event.AT_TARGET : Event.CAPTURING_PHASE;
pb(a, k, "capture");
if (a.K) return;
}
for (h2 = 0; h2 < b.length; h2++) {
k = b[h2];
var l = k === c[h2];
if (l || d) {
if (f = l ? Event.AT_TARGET : Event.BUBBLING_PHASE, pb(a, k, "bubble"), a.K) break;
}
}
} finally {
qb || (e ? Object.defineProperty(a, "currentTarget", e) : delete a.currentTarget, g ? Object.defineProperty(a, "eventPhase", g) : delete a.eventPhase);
}
}
function sb(a, b, c, d) {
for (var e = 0; e < a.length; e++) {
var f = a[e], g = f.type, h2 = f.capture;
if (b === f.node && c === g && d === h2) return e;
}
return -1;
}
function tb(a) {
F();
return !v.C && this instanceof Node && !qa(document, this) ? (a.__target || ub(a, this), rb(a)) : this.__shady_native_dispatchEvent(a);
}
function vb(a, b, c) {
var d = this, e = eb(c), f = e.capture, g = e.once, h2 = e.U;
e = e.T;
if (b) {
var k = typeof b;
if ("function" === k || "object" === k) {
if ("object" !== k || b.handleEvent && "function" === typeof b.handleEvent) {
if (gb[a]) return this.__shady_native_addEventListener(a, b, e);
var l = h2 || this;
if (h2 = b[L]) {
if (-1 < sb(h2, l, a, f)) return;
} else b[L] = [];
h2 = function(m) {
g && d.__shady_removeEventListener(a, b, c);
m.__target || ub(m);
if (l !== d) {
var r = Object.getOwnPropertyDescriptor(m, "currentTarget");
Object.defineProperty(m, "currentTarget", {
get: function() {
return l;
},
configurable: true
});
var C = Object.getOwnPropertyDescriptor(m, "eventPhase");
Object.defineProperty(m, "eventPhase", { configurable: true, enumerable: true, get: function() {
return f ? Event.CAPTURING_PHASE : Event.BUBBLING_PHASE;
} });
}
m.__previousCurrentTarget = m.currentTarget;
if (!x(l) && "slot" !== l.localName || -1 != m.composedPath().indexOf(l)) {
if (m.composed || -1 < m.composedPath().indexOf(l)) {
if (ob(m) && m.target === m.relatedTarget) m.eventPhase === Event.BUBBLING_PHASE && m.stopImmediatePropagation();
else if (m.eventPhase === Event.CAPTURING_PHASE || m.bubbles || m.target === l || l instanceof Window) {
var S = "function" === k ? b.call(l, m) : b.handleEvent && b.handleEvent(m);
l !== d && (r ? (Object.defineProperty(m, "currentTarget", r), r = null) : delete m.currentTarget, C ? (Object.defineProperty(m, "eventPhase", C), C = null) : delete m.eventPhase);
return S;
}
}
}
};
b[L].push({ node: l, type: a, capture: f, fa: h2 });
this.__handlers = this.__handlers || {};
this.__handlers[a] = this.__handlers[a] || { capture: [], bubble: [] };
this.__handlers[a][f ? "capture" : "bubble"].push(h2);
nb[a] || this.__shady_native_addEventListener(
a,
h2,
e
);
}
}
}
}
function wb(a, b, c) {
if (b) {
var d = eb(c);
c = d.capture;
var e = d.U;
d = d.T;
if (gb[a]) return this.__shady_native_removeEventListener(a, b, d);
var f = e || this;
e = void 0;
var g = null;
try {
g = b[L];
} catch (h2) {
}
g && (f = sb(g, f, a, c), -1 < f && (e = g.splice(f, 1)[0].fa, g.length || (b[L] = void 0)));
this.__shady_native_removeEventListener(a, e || b, d);
e && this.__handlers && this.__handlers[a] && (a = this.__handlers[a][c ? "capture" : "bubble"], b = a.indexOf(e), -1 < b && a.splice(b, 1));
}
}
function xb() {
for (var a in nb) window.__shady_native_addEventListener(a, function(b) {
b.__target || (ub(b), rb(b));
}, true);
}
var yb = B(kb);
function ub(a, b) {
b = void 0 === b ? a.target : b;
a.__target = b;
a.__relatedTarget = a.relatedTarget;
if (v.i) {
b = Object.getPrototypeOf(a);
if (!b.hasOwnProperty("__shady_patchedProto")) {
var c = Object.create(b);
c.__shady_sourceProto = b;
A(c, yb);
b.__shady_patchedProto = c;
}
a.__proto__ = b.__shady_patchedProto;
} else A(a, yb);
}
var zb = mb(Event), Ab = mb(CustomEvent), Bb = mb(MouseEvent);
function Cb() {
if (!cb && Object.getOwnPropertyDescriptor(Event.prototype, "isTrusted")) {
var a = function() {
var b = new MouseEvent("click", { bubbles: true, cancelable: true, composed: true });
this.__shady_dispatchEvent(b);
};
Element.prototype.click ? Element.prototype.click = a : HTMLElement.prototype.click && (HTMLElement.prototype.click = a);
}
}
var Db = Object.getOwnPropertyNames(Element.prototype).filter(function(a) {
return "on" === a.substring(0, 2);
}), Eb = Object.getOwnPropertyNames(HTMLElement.prototype).filter(function(a) {
return "on" === a.substring(0, 2);
});
function Fb(a) {
return { set: function(b) {
var c = t(this), d = a.substring(2);
c.m || (c.m = {});
c.m[a] && this.removeEventListener(d, c.m[a]);
this.__shady_addEventListener(d, b);
c.m[a] = b;
}, get: function() {
var b = u(this);
return b && b.m && b.m[a];
}, configurable: true };
}
;
function N(a, b) {
return { index: a, D: [], G: b };
}
function Gb(a, b, c, d) {
var e = 0, f = 0, g = 0, h2 = 0, k = Math.min(b - e, d - f);
if (0 == e && 0 == f) a: {
for (g = 0; g < k; g++) if (a[g] !== c[g]) break a;
g = k;
}
if (b == a.length && d == c.length) {
h2 = a.length;
for (var l = c.length, m = 0; m < k - g && Hb(a[--h2], c[--l]); ) m++;
h2 = m;
}
e += g;
f += g;
b -= h2;
d -= h2;
if (0 == b - e && 0 == d - f) return [];
if (e == b) {
for (b = N(e, 0); f < d; ) b.D.push(c[f++]);
return [b];
}
if (f == d) return [N(e, b - e)];
k = e;
g = f;
d = d - g + 1;
h2 = b - k + 1;
b = Array(d);
for (l = 0; l < d; l++) b[l] = Array(h2), b[l][0] = l;
for (l = 0; l < h2; l++) b[0][l] = l;
for (l = 1; l < d; l++) for (m = 1; m < h2; m++) if (a[k + m - 1] === c[g + l - 1]) b[l][m] = b[l - 1][m - 1];
else {
var r = b[l - 1][m] + 1, C = b[l][m - 1] + 1;
b[l][m] = r < C ? r : C;
}
k = b.length - 1;
g = b[0].length - 1;
d = b[k][g];
for (a = []; 0 < k || 0 < g; ) 0 == k ? (a.push(2), g--) : 0 == g ? (a.push(3), k--) : (h2 = b[k - 1][g - 1], l = b[k - 1][g], m = b[k][g - 1], r = l < m ? l < h2 ? l : h2 : m < h2 ? m : h2, r == h2 ? (h2 == d ? a.push(0) : (a.push(1), d = h2), k--, g--) : r == l ? (a.push(3), k--, d = l) : (a.push(2), g--, d = m));
a.reverse();
b = void 0;
k = [];
for (g = 0; g < a.length; g++) switch (a[g]) {
case 0:
b && (k.push(b), b = void 0);
e++;
f++;
break;
case 1:
b || (b = N(e, 0));
b.G++;
e++;
b.D.push(c[f]);
f++;
break;
case 2:
b || (b = N(e, 0));
b.G++;
e++;
break;
case 3:
b || (b = N(e, 0)), b.D.push(c[f]), f++;
}
b && k.push(b);
return k;
}
function Hb(a, b) {
return a === b;
}
;
var Ib = B({ dispatchEvent: tb, addEventListener: vb, removeEventListener: wb });
var Jb = null;
function O() {
Jb || (Jb = window.ShadyCSS && window.ShadyCSS.ScopingShim);
return Jb || null;
}
function Kb(a, b, c) {
var d = O();
return d && "class" === b ? (d.setElementClass(a, c), true) : false;
}
function Lb(a, b) {
var c = O();
c && c.unscopeNode(a, b);
}
function Mb(a, b) {
var c = O();
if (!c) return true;
if (a.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {
c = true;
for (a = a.__shady_firstChild; a; a = a.__shady_nextSibling) c = c && Mb(a, b);
return c;
}
return a.nodeType !== Node.ELEMENT_NODE ? true : c.currentScopeForNode(a) === b;
}
function Nb(a) {
if (a.nodeType !== Node.ELEMENT_NODE) return "";
var b = O();
return b ? b.currentScopeForNode(a) : "";
}
function Ob(a, b) {
if (a) for (a.nodeType === Node.ELEMENT_NODE && b(a), a = a.__shady_firstChild; a; a = a.__shady_nextSibling) a.nodeType === Node.ELEMENT_NODE && Ob(a, b);
}
;
var Pb = window.document, Qb = v.C, Rb = Object.getOwnPropertyDescriptor(Node.prototype, "isConnected"), Sb = Rb && Rb.get;
function Tb(a) {
for (var b; b = a.__shady_firstChild; ) a.__shady_removeChild(b);
}
function Ub(a) {
var b = u(a);
if (b && void 0 !== b.J) for (b = a.__shady_firstChild; b; b = b.__shady_nextSibling) Ub(b);
if (a = u(a)) a.J = void 0;
}
function Vb(a) {
var b = a;
if (a && "slot" === a.localName) {
var c = u(a);
(c = c && c.u) && (b = c.length ? c[0] : Vb(a.__shady_nextSibling));
}
return b;
}
function Wb(a, b, c) {
if (a = (a = u(a)) && a.B) {
if (b) if (b.nodeType === Node.DOCUMENT_FRAGMENT_NODE) for (var d = 0, e = b.childNodes.length; d < e; d++) a.addedNodes.push(b.childNodes[d]);
else a.addedNodes.push(b);
c && a.removedNodes.push(c);
Da(a);
}
}
var ac = B({
get parentNode() {
var a = u(this);
a = a && a.parentNode;
return void 0 !== a ? a : this.__shady_native_parentNode;
},
get firstChild() {
var a = u(this);
a = a && a.firstChild;
return void 0 !== a ? a : this.__shady_native_firstChild;
},
get lastChild() {
var a = u(this);
a = a && a.lastChild;
return void 0 !== a ? a : this.__shady_native_lastChild;
},
get nextSibling() {
var a = u(this);
a = a && a.nextSibling;
return void 0 !== a ? a : this.__shady_native_nextSibling;
},
get previousSibling() {
var a = u(this);
a = a && a.previousSibling;
return void 0 !== a ? a : this.__shady_native_previousSibling;
},
get childNodes() {
if (w(this)) {
var a = u(this);
if (!a.childNodes) {
a.childNodes = [];
for (var b = this.__shady_firstChild; b; b = b.__shady_nextSibling) a.childNodes.push(b);
}
var c = a.childNodes;
} else c = this.__shady_native_childNodes;
c.item = function(d) {
return c[d];
};
return c;
},
get parentElement() {
var a = u(this);
(a = a && a.parentNode) && a.nodeType !== Node.ELEMENT_NODE && (a = null);
return void 0 !== a ? a : this.__shady_native_parentElement;
},
get isConnected() {
if (Sb && Sb.call(this)) return true;
if (this.nodeType == Node.DOCUMENT_FRAGMENT_NODE) return false;
var a = this.ownerDocument;
if (null === a || qa(a, this)) return true;
for (a = this; a && !(a instanceof Document); ) a = a.__shady_parentNode || (x(a) ? a.host : void 0);
return !!(a && a instanceof Document);
},
get textContent() {
if (w(this)) {
for (var a = [], b = this.__shady_firstChild; b; b = b.__shady_nextSibling) b.nodeType !== Node.COMMENT_NODE && a.push(b.__shady_textContent);
return a.join("");
}
return this.__shady_native_textContent;
},
set textContent(a) {
if ("undefined" === typeof a || null === a) a = "";
switch (this.nodeType) {
case Node.ELEMENT_NODE:
case Node.DOCUMENT_FRAGMENT_NODE:
if (!w(this) && v.i) {
var b = this.__shady_firstChild;
(b != this.__shady_lastChild || b && b.nodeType != Node.TEXT_NODE) && Tb(this);
this.__shady_native_textContent = a;
} else Tb(this), (0 < a.length || this.nodeType === Node.ELEMENT_NODE) && this.__shady_insertBefore(document.createTextNode(a));
break;
default:
this.nodeValue = a;
}
},
insertBefore: function(a, b) {
if (this.ownerDocument !== Pb && a.ownerDocument !== Pb) return this.__shady_native_insertBefore(a, b), a;
if (a === this) throw Error("Failed to execute 'appendChild' on 'Node': The new child element contains the parent.");
if (b) {
var c = u(b);
c = c && c.parentNode;
if (void 0 !== c && c !== this || void 0 === c && b.__shady_native_parentNode !== this) throw Error("Failed to execute 'insertBefore' on 'Node': The node before which the new node is to be inserted is not a child of this node.");
}
if (b === a) return a;
Wb(this, a);
var d = [], e = (c = P(this)) ? c.host.localName : Nb(this), f = a.__shady_parentNode;
if (f) {
var g = Nb(a);
var h2 = !!c || !P(a) || Qb && void 0 !== this.__noInsertionPoint;
f.__shady_removeChild(a, h2);
}
f = true;
var k = (!Qb || void 0 === a.__noInsertionPoint && void 0 === this.__noInsertionPoint) && !Mb(a, e), l = c && !a.__noInsertionPoint && (!Qb || a.nodeType === Node.DOCUMENT_FRAGMENT_NODE);
if (l || k) k && (g = g || Nb(a)), Ob(a, function(m) {
l && "slot" === m.localName && d.push(m);
if (k) {
var r = g;
O() && (r && Lb(m, r), (r = O()) && r.scopeNode(m, e));
}
});
d.length && (Xb(c), c.j.push.apply(c.j, q(d)), Q(c));
w(this) && (Yb(a, this, b), h2 = u(this), h2.root ? (f = false, ja(this) && Q(h2.root)) : c && "slot" === this.localName && (f = false, Q(c)));
f ? (c = x(this) ? this.host : this, b ? (b = Vb(b), c.__shady_native_insertBefore(a, b)) : c.__shady_native_appendChild(a)) : a.ownerDocument !== this.ownerDocument && this.ownerDocument.adoptNode(a);
return a;
},
appendChild: function(a) {
if (this != a || !x(a)) return this.__shady_insertBefore(a);
},
removeChild: function(a, b) {
b = void 0 === b ? false : b;
if (this.ownerDocument !== Pb) return this.__shady_native_removeChild(a);
if (a.__shady_parentNode !== this) throw Error("The node to be removed is not a child of this node: " + a);
Wb(this, null, a);
var c = P(a), d = c && Zb(c, a), e = u(this);
if (w(this) && ($b(a, this), ja(this))) {
Q(e.root);
var f = true;
}
if (O() && !b && c && a.nodeType !== Node.TEXT_NODE) {
var g = Nb(a);
Ob(a, function(h2) {
Lb(h2, g);
});
}
Ub(a);
c && ((b = "slot" === this.localName) && (f = true), (d || b) && Q(c));
f || (f = x(this) ? this.host : this, (!e.root && "slot" !== a.localName || f === a.__shady_native_parentNode) && f.__shady_native_removeChild(a));
return a;
},
replaceChild: function(a, b) {
this.__shady_insertBefore(a, b);
this.__shady_removeChild(b);
return a;
},
cloneNode: function(a) {
if ("template" == this.localName) return this.__shady_native_cloneNode(a);
var b = this.__shady_native_cloneNode(false);
if (a && b.nodeType !== Node.ATTRIBUTE_NODE) {
a = this.__shady_firstChild;
for (var c; a; a = a.__shady_nextSibling) c = a.__shady_cloneNode(true), b.__shady_appendChild(c);
}
return b;
},
getRootNode: function(a) {
if (this && this.nodeType) {
var b = t(this), c = b.J;
void 0 === c && (x(this) ? (c = this, b.J = c) : (c = (c = this.__shady_parentNode) ? c.__shady_getRootNode(a) : this, document.documentElement.__shady_native_contains(this) && (b.J = c)));
return c;
}
},
contains: function(a) {
return ra(this, a);
}
});
var R = B({ get assignedSlot() {
var a = this.__shady_parentNode;
(a = a && a.__shady_shadowRoot) && bc(a);
return (a = u(this)) && a.assignedSlot || null;
} });
var cc = /* @__PURE__ */ new Map();
[["(", { end: ")", I: true }], ["[", { end: "]", I: true }], ['"', { end: '"', I: false }], ["'", { end: "'", I: false }]].forEach(function(a) {
var b = p(a);
a = b.next().value;
b = b.next().value;
cc.set(a, b);
});
function dc(a, b, c, d) {
for (d = void 0 === d ? true : d; b < a.length; b++) if ("\\" === a[b] && b < a.length - 1 && "\n" !== a[b + 1]) b++;
else {
if (-1 !== c.indexOf(a[b])) return b;
if (d && cc.has(a[b])) {
var e = cc.get(a[b]);
b = dc(a, b + 1, [e.end], e.I);
}
}
return a.length;
}
function ec(a) {
function b() {
if (0 < d.length) {
for (; " " === d[d.length - 1]; ) d.pop();
c.push({ S: d.filter(function(k, l) {
return 0 === l % 2;
}), ca: d.filter(function(k, l) {
return 1 === l % 2;
}) });
d.length = 0;
}
}
for (var c = [], d = [], e = 0; e < a.length; ) {
var f = d[d.length - 1], g = dc(a, e, [",", " ", ">", "+", "~"]), h2 = g === e ? a[e] : a.substring(e, g);
if ("," === h2) b();
else if (-1 === [void 0, " ", ">", "+", "~"].indexOf(f) || " " !== h2) " " === f && -1 !== [">", "+", "~"].indexOf(h2) ? d[d.length - 1] = h2 : d.push(h2);
e = g + (g === e ? 1 : 0);
}
b();
return c;
}
;
function fc(a, b, c) {
var d = [];
gc(a, b, c, d);
return d;
}
function gc(a, b, c, d) {
for (a = a.__shady_firstChild; a; a = a.__shady_nextSibling) {
var e;
if (e = a.nodeType === Node.ELEMENT_NODE) {
e = a;
var f = b, g = c, h2 = d, k = f(e);
k && h2.push(e);
g && g(k) ? e = k : (gc(e, f, g, h2), e = void 0);
}
if (e) break;
}
}
var hc = { get firstElementChild() {
var a = u(this);
if (a && void 0 !== a.firstChild) {
for (a = this.__shady_firstChild; a && a.nodeType !== Node.ELEMENT_NODE; ) a = a.__shady_nextSibling;
return a;
}
return this.__shady_native_firstElementChild;
}, get lastElementChild() {
var a = u(this);
if (a && void 0 !== a.lastChild) {
for (a = this.__shady_lastChild; a && a.nodeType !== Node.ELEMENT_NODE; ) a = a.__shady_previousSibling;
return a;
}
return this.__shady_native_lastElementChild;
}, get children() {
return w(this) ? z(Array.prototype.filter.call(ta(this), function(a) {
return a.nodeType === Node.ELEMENT_NODE;
})) : this.__shady_native_children;
}, get childElementCount() {
var a = this.__shady_children;
return a ? a.length : 0;
} }, T = B((hc.append = function(a) {
for (var b = [], c = 0; c < arguments.length; ++c) b[c] = arguments[c];
this.__shady_insertBefore(D.apply(null, q(b)), null);
}, hc.prepend = function(a) {
for (var b = [], c = 0; c < arguments.length; ++c) b[c] = arguments[c];
this.__shady_insertBefore(D.apply(null, q(b)), this.__shady_firstChild);
}, hc.replaceChildren = function(a) {
for (var b = [], c = 0; c < arguments.length; ++c) b[c] = arguments[c];
for (; null !== (c = this.__shady_firstChild); ) this.__shady_removeChild(c);
this.__shady_insertBefore(D.apply(null, q(b)), null);
}, hc));
function ic(a, b) {
function c(e, f) {
return (e === a || -1 === f.indexOf(":scope")) && la.call(e, f);
}
var d = ec(b);
if (1 > d.length) return [];
for (b = ya(fc(a, function() {
return true;
}).map(function(e) {
return ya(d.map(function(f) {
var g = f.S, h2 = g.length - 1;
return c(e, g[h2]) ? { target: e, v: f, A: e, index: h2 } : [];
}));
})); b.some(function(e) {
return 0 < e.index;
}); ) b = ya(b.map(function(e) {
if (0 >= e.index) return e;
var f = e.target, g = e.A, h2 = e.v;
e = e.index - 1;
var k = h2.ca[e], l = h2.S[e];
if (" " === k) {
k = [];
for (g = g.__shady_parentElement; g; g = g.__shady_parentElement) c(
g,
l
) && k.push({ target: f, v: h2, A: g, index: e });
return k;
}
if (">" === k) return g = g.__shady_parentElement, c(g, l) ? { target: f, v: h2, A: g, index: e } : [];
if ("+" === k) return (g = g.__shady_previousElementSibling) && c(g, l) ? { target: f, v: h2, A: g, index: e } : [];
if ("~" === k) {
k = [];
for (g = g.__shady_previousElementSibling; g; g = g.__shady_previousElementSibling) c(g, l) && k.push({ target: f, v: h2, A: g, index: e });
return k;
}
throw Error("Unrecognized combinator: '" + k + "'.");
}));
return za(b.map(function(e) {
return e.target;
}));
}
var U = v.querySelectorImplementation, jc = B({ querySelector: function(a) {
if ("native" === U) {
var b = Array.prototype.slice.call((this instanceof ShadowRoot ? this.host : this).__shady_native_querySelectorAll(a)), c = this.__shady_getRootNode();
b = p(b);
for (var d = b.next(); !d.done; d = b.next()) if (d = d.value, d.__shady_getRootNode() == c) return d;
return null;
}
if ("selectorEngine" === U) return ic(this, a)[0] || null;
if (void 0 === U) return fc(this, function(e) {
return la.call(e, a);
}, function(e) {
return !!e;
})[0] || null;
throw Error("Unrecognized value of ShadyDOM.querySelectorImplementation: '" + (U + "'"));
}, querySelectorAll: function(a, b) {
if (b || "native" === U) {
b = Array.prototype.slice.call((this instanceof ShadowRoot ? this.host : this).__shady_native_querySelectorAll(a));
var c = this.__shady_getRootNode();
return z(b.filter(function(d) {
return d.__shady_getRootNode() == c;
}));
}
if ("selectorEngine" === U) return z(ic(this, a));
if (void 0 === U) return z(fc(this, function(d) {
return la.call(d, a);
}));
throw Error("Unrecognized value of ShadyDOM.querySelectorImplementation: '" + (U + "'"));
} }), kc = v.C && !v.l ? wa({}, T) : T;
wa(T, jc);
var lc = B({ after: function(a) {
for (var b = [], c = 0; c < arguments.length; ++c) b[c] = arguments[c];
c = this.__shady_parentNode;
if (null !== c) {
var d = this.__shady_nextSibling;
c.__shady_insertBefore(D.apply(null, q(b)), d);
}
}, before: function(a) {
for (var b = [], c = 0; c < arguments.length; ++c) b[c] = arguments[c];
c = this.__shady_parentNode;
null !== c && c.__shady_insertBefore(D.apply(null, q(b)), this);
}, remove: function() {
var a = this.__shady_parentNode;
null !== a && a.__shady_removeChild(this);
}, replaceWith: function(a) {
for (var b = [], c = 0; c < arguments.length; ++c) b[c] = arguments[c];
c = this.__shady_parentNode;
if (null !== c) {
var d = this.__shady_nextSibling;
c.__shady_removeChild(this);
c.__shady_insertBefore(D.apply(null, q(b)), d);
}
} });
var mc = window.document;
function nc(a, b) {
if ("slot" === b) a = a.__shady_parentNode, ja(a) && Q(u(a).root);
else if ("slot" === a.localName && "name" === b && (b = P(a))) {
if (b.g) {
oc(b);
var c = a.Y, d = pc(a);
if (d !== c) {
c = b.h[c];
var e = c.indexOf(a);
0 <= e && c.splice(e, 1);
c = b.h[d] || (b.h[d] = []);
c.push(a);
1 < c.length && (b.h[d] = qc(c));
}
}
Q(b);
}
}
var rc = B({
get previousElementSibling() {
var a = u(this);
if (a && void 0 !== a.previousSibling) {
for (a = this.__shady_previousSibling; a && a.nodeType !== Node.ELEMENT_NODE; ) a = a.__shady_previousSibling;
return a;
}
return this.__shady_native_previousElementSibling;
},
get nextElementSibling() {
var a = u(this);
if (a && void 0 !== a.nextSibling) {
for (a = this.__shady_nextSibling; a && a.nodeType !== Node.ELEMENT_NODE; ) a = a.__shady_nextSibling;
return a;
}
return this.__shady_native_nextElementSibling;
},
get slot() {
return this.getAttribute("slot");
},
set slot(a) {
this.__shady_setAttribute("slot", a);
},
get className() {
return this.getAttribute("class") || "";
},
set className(a) {
this.__shady_setAttribute("class", a);
},
setAttribute: function(a, b) {
this.ownerDocument !== mc ? this.__shady_native_setAttribute(a, b) : Kb(this, a, b) || (this.__shady_native_setAttribute(a, b), nc(this, a));
},
removeAttribute: function(a) {
this.ownerDocument !== mc ? this.__shady_native_removeAttribute(a) : Kb(this, a, "") ? "" === this.getAttribute(a) && this.__shady_native_removeAttribute(a) : (this.__shady_native_removeAttribute(a), nc(this, a));
},
toggleAttribute: function(a, b) {
if (this.ownerDocument !== mc) return this.__shady_native_toggleAttribute(a, b);
if (!Kb(this, a, "")) return b = this.__shady_native_toggleAttribute(a, b), nc(this, a), b;
if ("" === this.getAttribute(a) && !b) return this.__shady_native_toggleAttribute(a, b);
}
});
v.C || Db.forEach(function(a) {
rc[a] = Fb(a);
});
var wc = B({ attachShadow: function(a) {
if (!this) throw Error("Must provide a host.");
if (!a) throw Error("Not enough arguments.");
if (a.shadyUpgradeFragment && !v.V) {
var b = a.shadyUpgradeFragment;
b.__proto__ = ShadowRoot.prototype;
sc(b, this, a);
tc(b, b);
a = b.__noInsertionPoint ? null : b.querySelectorAll("slot");
b.__noInsertionPoint = void 0;
if (a && a.length) {
var c = b;
Xb(c);
c.j.push.apply(c.j, q(a));
Q(b);
}
b.host.__shady_native_appendChild(b);
} else b = new uc(vc, this, a);
return this.__CE_shadowRoot = b;
}, get shadowRoot() {
var a = u(this);
return a && a.ea || null;
} });
wa(rc, wc);
var xc = document.implementation.createHTMLDocument("inert"), yc = B({ get innerHTML() {
return w(this) ? Na("template" === this.localName ? this.content : this, ta) : this.__shady_native_innerHTML;
}, set innerHTML(a) {
if ("template" === this.localName) this.__shady_native_innerHTML = a;
else {
Tb(this);
var b = this.localName || "div";
b = this.namespaceURI && this.namespaceURI !== xc.namespaceURI ? xc.createElementNS(this.namespaceURI, b) : xc.createElement(b);
for (v.i ? b.__shady_native_innerHTML = a : b.innerHTML = a; a = b.__shady_firstChild; ) this.__shady_insertBefore(a);
}
} });
var zc = B({ blur: function() {
var a = u(this);
(a = (a = a && a.root) && a.activeElement) ? a.__shady_blur() : this.__shady_native_blur();
} });
v.C || Eb.forEach(function(a) {
zc[a] = Fb(a);
});
var Ac = B({ assignedNodes: function(a) {
if ("slot" === this.localName) {
var b = this.__shady_getRootNode();
b && x(b) && bc(b);
return (b = u(this)) ? (a && a.flatten ? b.u : b.assignedNodes) || [] : [];
}
}, addEventListener: function(a, b, c) {
if ("slot" !== this.localName || "slotchange" === a) vb.call(this, a, b, c);
else {
"object" !== typeof c && (c = { capture: !!c });
var d = this.__shady_parentNode;
if (!d) throw Error("ShadyDOM cannot attach event to slot unless it has a `parentNode`");
c.o = this;
d.__shady_addEventListener(a, b, c);
}
}, removeEventListener: function(a, b, c) {
if ("slot" !== this.localName || "slotchange" === a) wb.call(this, a, b, c);
else {
"object" !== typeof c && (c = { capture: !!c });
var d = this.__shady_parentNode;
if (!d) throw Error("ShadyDOM cannot attach event to slot unless it has a `parentNode`");
c.o = this;
d.__shady_removeEventListener(a, b, c);
}
} });
var Bc = B({ getElementById: function(a) {
return "" === a ? null : fc(this, function(b) {
return b.id == a;
}, function(b) {
return !!b;
})[0] || null;
} });
function Cc(a, b) {
for (var c; b && !a.has(c = b.__shady_getRootNode()); ) b = c.host;
return b;
}
function Dc(a) {
var b = /* @__PURE__ */ new Set();
for (b.add(a); x(a) && a.host; ) a = a.host.__shady_getRootNode(), b.add(a);
return b;
}
var Ec = "__shady_native_" + ia(), Fc = B({ get activeElement() {
var a = v.i ? document.__shady_native_activeElement : document.activeElement;
if (!a || !a.nodeType) return null;
var b = !!x(this);
if (!(this === document || b && this.host !== a && this.host.__shady_native_contains(a))) return null;
for (b = P(a); b && b !== this; ) a = b.host, b = P(a);
return this === document ? b ? null : a : b === this ? a : null;
}, elementsFromPoint: function(a, b) {
a = document[Ec](a, b);
if (this === document && v.useNativeDocumentEFP) return a;
a = [].slice.call(a);
b = Dc(this);
for (var c = /* @__PURE__ */ new Set(), d = 0; d < a.length; d++) c.add(Cc(b, a[d]));
var e = [];
c.forEach(function(f) {
return e.push(f);
});
return e;
}, elementFromPoint: function(a, b) {
return this === document && v.useNativeDocumentEFP ? this.__shady_native_elementFromPoint(a, b) : this.__shady_elementsFromPoint(a, b)[0] || null;
} });
var Gc = window.document, Hc = B({ importNode: function(a, b) {
if (a.ownerDocument !== Gc || "template" === a.localName) return this.__shady_native_importNode(a, b);
var c = this.__shady_native_importNode(a, false);
if (b) for (a = a.__shady_firstChild; a; a = a.__shady_nextSibling) b = this.__shady_importNode(a, true), c.__shady_appendChild(b);
return c;
} });
var Ic = B({ dispatchEvent: tb, addEventListener: vb.bind(window), removeEventListener: wb.bind(window) });
var V = {};
Object.getOwnPropertyDescriptor(HTMLElement.prototype, "parentElement") && (V.parentElement = ac.parentElement);
Object.getOwnPropertyDescriptor(HTMLElement.prototype, "contains") && (V.contains = ac.contains);
Object.getOwnPropertyDescriptor(HTMLElement.prototype, "children") && (V.children = T.children);
Object.getOwnPropertyDescriptor(HTMLElement.prototype, "innerHTML") && (V.innerHTML = yc.innerHTML);
Object.getOwnPropertyDescriptor(HTMLElement.prototype, "className") && (V.className = rc.className);
var W = { EventTarget: [Ib], Node: [ac, window.EventTarget ? null : Ib], Text: [R], Comment: [R], CDATASection: [R], ProcessingInstruction: [R], Element: [rc, T, lc, R, !v.i || "innerHTML" in Element.prototype ? yc : null, window.HTMLSlotElement ? null : Ac], HTMLElement: [zc, V], HTMLSlotElement: [Ac], DocumentFragment: [kc, Bc], Document: [Hc, kc, Bc, Fc], Window: [Ic], CharacterData: [lc], XMLHttpRequest: [window.EventTarget ? null : Ib] }, Jc = v.i ? null : ["innerHTML", "textContent"];
function X(a, b, c, d) {
b.forEach(function(e) {
return a && e && A(a, e, c, d);
});
}
function Kc(a) {
var b = a ? null : Jc, c;
for (c in W) X(window[c] && window[c].prototype, W[c], a, b);
}
["Text", "Comment", "CDATASection", "ProcessingInstruction"].forEach(function(a) {
var b = window[a], c = Object.create(b.prototype);
c.__shady_protoIsPatched = true;
X(c, W.EventTarget);
X(c, W.Node);
W[a] && X(c, W[a]);
b.prototype.__shady_patchedProto = c;
});
function Lc(a) {
a.__shady_protoIsPatched = true;
X(a, W.EventTarget);
X(a, W.Node);
X(a, W.Element);
X(a, W.HTMLElement);
X(a, W.HTMLSlotElement);
return a;
}
;
var Mc = v.O, Nc = v.i;
function Oc(a, b) {
if (Mc && !a.__shady_protoIsPatched && !x(a)) {
var c = Object.getPrototypeOf(a), d = c.hasOwnProperty("__shady_patchedProto") && c.__shady_patchedProto;
d || (d = Object.create(c), Lc(d), c.__shady_patchedProto = d);
Object.setPrototypeOf(a, d);
}
Nc || (1 === b ? ab(a) : 2 === b && bb(a));
}
function Pc(a, b, c, d) {
Oc(a, 1);
d = d || null;
var e = t(a), f = d ? t(d) : null;
e.previousSibling = d ? f.previousSibling : b.__shady_lastChild;
if (f = u(e.previousSibling)) f.nextSibling = a;
if (f = u(e.nextSibling = d)) f.previousSibling = a;
e.parentNode = b;
d ? d === c.firstChild && (c.firstChild = a) : (c.lastChild = a, c.firstChild || (c.firstChild = a));
c.childNodes = null;
}
function Yb(a, b, c) {
Oc(b, 2);
var d = t(b);
void 0 !== d.firstChild && (d.childNodes = null);
if (a.nodeType === Node.DOCUMENT_FRAGMENT_NODE) for (a = a.__shady_native_firstChild; a; a = a.__shady_native_nextSibling) Pc(a, b, d, c);
else Pc(a, b, d, c);
}
function $b(a, b) {
var c = t(a);
b = t(b);
a === b.firstChild && (b.firstChild = c.nextSibling);
a === b.lastChild && (b.lastChild = c.previousSibling);
a = c.previousSibling;
var d = c.nextSibling;
a && (t(a).nextSibling = d);
d && (t(d).previousSibling = a);
c.parentNode = c.previousSibling = c.nextSibling = void 0;
void 0 !== b.childNodes && (b.childNodes = null);
}
function tc(a, b) {
var c = t(a);
if (b || void 0 === c.firstChild) {
c.childNodes = null;
var d = c.firstChild = a.__shady_native_firstChild;
c.lastChild = a.__shady_native_lastChild;
Oc(a, 2);
c = d;
for (d = void 0; c; c = c.__shady_native_nextSibling) {
var e = t(c);
e.parentNode = b || a;
e.nextSibling = c.__shady_native_nextSibling;
e.previousSibling = d || null;
d = c;
Oc(c, 1);
}
}
}
;
var Qc = B({ addEventListener: function(a, b, c) {
"object" !== typeof c && (c = { capture: !!c });
c.o = c.o || this;
this.host.__shady_addEventListener(a, b, c);
}, removeEventListener: function(a, b, c) {
"object" !== typeof c && (c = { capture: !!c });
c.o = c.o || this;
this.host.__shady_removeEventListener(a, b, c);
} });
function Rc(a, b) {
A(a, Qc, b);
A(a, Fc, b);
A(a, yc, b);
A(a, T, b);
v.l && !b ? (A(a, ac, b), A(a, Bc, b)) : v.i || (A(a, Ya), A(a, Wa), A(a, Xa));
}
;
var vc = {}, Y = v.deferConnectionCallbacks && "loading" === document.readyState, Sc;
function Tc(a) {
var b = [];
do
b.unshift(a);
while (a = a.__shady_parentNode);
return b;
}
function uc(a, b, c) {
if (a !== vc) throw new TypeError("Illegal constructor");
this.g = null;
sc(this, b, c);
}
function sc(a, b, c) {
a.host = b;
a.mode = c && c.mode;
tc(a.host);
b = t(a.host);
b.root = a;
b.ea = "closed" !== a.mode ? a : null;
b = t(a);
b.firstChild = b.lastChild = b.parentNode = b.nextSibling = b.previousSibling = null;
if (v.preferPerformance) for (; b = a.host.__shady_native_firstChild; ) a.host.__shady_native_removeChild(b);
else Q(a);
}
function Q(a) {
a.s || (a.s = true, Ba(function() {
return bc(a);
}));
}
function bc(a) {
var b;
if (b = a.s) {
for (var c; a; ) a: {
a.s && (c = a), b = a;
a = b.host.__shady_getRootNode();
if (x(a) && (b = u(b.host)) && 0 < b.F) break a;
a = void 0;
}
b = c;
}
(c = b) && c._renderSelf();
}
uc.prototype._renderSelf = function() {
var a = Y;
Y = true;
this.s = false;
if (this.g) {
oc(this);
for (var b = 0, c; b < this.g.length; b++) {
c = this.g[b];
var d = u(c), e = d.assignedNodes;
d.assignedNodes = [];
d.u = [];
if (d.R = e) for (d = 0; d < e.length; d++) {
var f = u(e[d]);
f.L = f.assignedSlot;
f.assignedSlot === c && (f.assignedSlot = null);
}
}
for (b = this.host.__shady_firstChild; b; b = b.__shady_nextSibling) Uc(this, b);
for (b = 0; b < this.g.length; b++) {
c = this.g[b];
e = u(c);
if (!e.assignedNodes.length) for (d = c.__shady_firstChild; d; d = d.__shady_nextSibling) Uc(this, d, c);
(d = (d = u(c.__shady_parentNode)) && d.root) && (ka(d) || d.s) && d._renderSelf();
Vc(this, e.u, e.assignedNodes);
if (d = e.R) {
for (f = 0; f < d.length; f++) u(d[f]).L = null;
e.R = null;
d.length > e.assignedNodes.length && (e.M = true);
}
e.M && (e.M = false, Wc(this, c));
}
c = this.g;
b = [];
for (e = 0; e < c.length; e++) d = c[e].__shady_parentNode, (f = u(d)) && f.root || !(0 > b.indexOf(d)) || b.push(d);
for (c = 0; c < b.length; c++) {
f = b[c];
e = f === this ? this.host : f;
d = [];
for (f = f.__shady_firstChild; f; f = f.__shady_nextSibling) if ("slot" == f.localName) for (var g = u(f).u, h2 = 0; h2 < g.length; h2++) d.push(g[h2]);
else d.push(f);
f = sa(e);
g = Gb(d, d.length, f, f.length);
for (var k = h2 = 0, l = void 0; h2 < g.length && (l = g[h2]); h2++) {
for (var m = 0, r = void 0; m < l.D.length && (r = l.D[m]); m++) r.__shady_native_parentNode === e && e.__shady_native_removeChild(r), f.splice(l.index + k, 1);
k -= l.G;
}
k = 0;
for (l = void 0; k < g.length && (l = g[k]); k++) for (h2 = f[l.index], m = l.index; m < l.index + l.G; m++) r = d[m], e.__shady_native_insertBefore(r, h2), f.splice(m, 0, r);
}
}
if (!v.preferPerformance && !this.P) for (b = this.host.__shady_firstChild; b; b = b.__shady_nextSibling) c = u(b), b.__shady_native_parentNode !== this.host || "slot" !== b.localName && c.assignedSlot || this.host.__shady_native_removeChild(b);
this.P = true;
Y = a;
Sc && Sc();
};
function Uc(a, b, c) {
var d = t(b), e = d.L;
d.L = null;
c || (c = (a = a.h[b.__shady_slot || "__catchall"]) && a[0]);
c ? (t(c).assignedNodes.push(b), d.assignedSlot = c) : d.assignedSlot = void 0;
e !== d.assignedSlot && d.assignedSlot && (t(d.assignedSlot).M = true);
}
function Vc(a, b, c) {
for (var d = 0, e = void 0; d < c.length && (e = c[d]); d++) if ("slot" == e.localName) {
var f = u(e).assignedNodes;
f && f.length && Vc(a, b, f);
} else b.push(c[d]);
}
function Wc(a, b) {
b.__shady_native_dispatchEvent(new Event("slotchange"));
b = u(b);
b.assignedSlot && Wc(a, b.assignedSlot);
}
function Xb(a) {
a.j = a.j || [];
a.g = a.g || [];
a.h = a.h || {};
}
function oc(a) {
if (a.j && a.j.length) {
for (var b = a.j, c, d = 0; d < b.length; d++) {
var e = b[d];
tc(e);
var f = e.__shady_parentNode;
tc(f);
f = u(f);
f.F = (f.F || 0) + 1;
f = pc(e);
a.h[f] ? (c = c || {}, c[f] = true, a.h[f].push(e)) : a.h[f] = [e];
a.g.push(e);
}
if (c) for (var g in c) a.h[g] = qc(a.h[g]);
a.j = [];
}
}
function pc(a) {
var b = a.name || a.getAttribute("name") || "__catchall";
return a.Y = b;
}
function qc(a) {
return a.sort(function(b, c) {
b = Tc(b);
for (var d = Tc(c), e = 0; e < b.length; e++) {
c = b[e];
var f = d[e];
if (c !== f) return b = ta(c.__shady_parentNode), b.indexOf(c) - b.indexOf(f);
}
});
}
function Zb(a, b) {
if (a.g) {
oc(a);
var c = a.h, d;
for (d in c) for (var e = c[d], f = 0; f < e.length; f++) {
var g = e[f];
if (ra(b, g)) {
e.splice(f, 1);
var h2 = a.g.indexOf(g);
0 <= h2 && (a.g.splice(h2, 1), (h2 = u(g.__shady_parentNode)) && h2.F && h2.F--);
f--;
g = u(g);
if (h2 = g.u) for (var k = 0; k < h2.length; k++) {
var l = h2[k], m = l.__shady_native_parentNode;
m && m.__shady_native_removeChild(l);
}
g.u = [];
g.assignedNodes = [];
h2 = true;
}
}
return h2;
}
}
function ka(a) {
oc(a);
return !(!a.g || !a.g.length);
}
(function(a) {
a.__proto__ = DocumentFragment.prototype;
Rc(a, "__shady_");
Rc(a);
Object.defineProperties(a, { nodeType: { value: Node.DOCUMENT_FRAGMENT_NODE, configurable: true }, nodeName: { value: "#document-fragment", configurable: true }, nodeValue: { value: null, configurable: true } });
["localName", "namespaceURI", "prefix"].forEach(function(b) {
Object.defineProperty(a, b, { value: void 0, configurable: true });
});
["ownerDocument", "baseURI", "isConnected"].forEach(function(b) {
Object.defineProperty(a, b, {
get: function() {
return this.host[b];
},
configurable: true
});
});
})(uc.prototype);
if (window.customElements && window.customElements.define && v.N && !v.preferPerformance) {
var Xc = /* @__PURE__ */ new Map();
Sc = function() {
var a = [];
Xc.forEach(function(d, e) {
a.push([e, d]);
});
Xc.clear();
for (var b = 0; b < a.length; b++) {
var c = a[b][0];
a[b][1] ? c.__shadydom_connectedCallback() : c.__shadydom_disconnectedCallback();
}
};
Y && document.addEventListener("readystatechange", function() {
Y = false;
Sc();
}, { once: true });
var Yc = function(a, b, c) {
var d = 0, e = "__isConnected" + d++;
if (b || c) a.prototype.connectedCallback = a.prototype.__shadydom_connectedCallback = function() {
Y ? Xc.set(this, true) : this[e] || (this[e] = true, b && b.call(this));
}, a.prototype.disconnectedCallback = a.prototype.__shadydom_disconnectedCallback = function() {
Y ? this.isConnected || Xc.set(this, false) : this[e] && (this[e] = false, c && c.call(this));
};
return a;
}, Zc = window.customElements.define, $c = function(a, b) {
var c = b.prototype.connectedCallback, d = b.prototype.disconnectedCallback;
Zc.call(window.customElements, a, Yc(b, c, d));
b.prototype.connectedCallback = c;
b.prototype.disconnectedCallback = d;
};
window.customElements.define = $c;
Object.defineProperty(window.CustomElementRegistry.prototype, "define", { value: $c, configurable: true });
}
function P(a) {
a = a.__shady_getRootNode();
if (x(a)) return a;
}
;
function Z(a) {
this.node = a;
}
n = Z.prototype;
n.addEventListener = function(a, b, c) {
return this.node.__shady_addEventListener(a, b, c);
};
n.removeEventListener = function(a, b, c) {
return this.node.__shady_removeEventListener(a, b, c);
};
n.appendChild = function(a) {
return this.node.__shady_appendChild(a);
};
n.insertBefore = function(a, b) {
return this.node.__shady_insertBefore(a, b);
};
n.removeChild = function(a) {
return this.node.__shady_removeChild(a);
};
n.replaceChild = function(a, b) {
return this.node.__shady_replaceChild(a, b);
};
n.cloneNode = function(a) {
return this.node.__shady_cloneNode(a);
};
n.getRootNode = function(a) {
return this.node.__shady_getRootNode(a);
};
n.contains = function(a) {
return this.node.__shady_contains(a);
};
n.dispatchEvent = function(a) {
return this.node.__shady_dispatchEvent(a);
};
n.setAttribute = function(a, b) {
this.node.__shady_setAttribute(a, b);
};
n.getAttribute = function(a) {
return this.node.__shady_native_getAttribute(a);
};
n.removeAttribute = function(a) {
this.node.__shady_removeAttribute(a);
};
n.toggleAttribute = function(a, b) {
return this.node.__shady_toggleAttribute(a, b);
};
n.attachShadow = function(a) {
return this.node.__shady_attachShadow(a);
};
n.focus = function() {
this.node.__shady_native_focus();
};
n.blur = function() {
this.node.__shady_blur();
};
n.importNode = function(a, b) {
if (this.node.nodeType === Node.DOCUMENT_NODE) return this.node.__shady_importNode(a, b);
};
n.getElementById = function(a) {
if (this.node.nodeType === Node.DOCUMENT_NODE) return this.node.__shady_getElementById(a);
};
n.elementsFromPoint = function(a, b) {
return this.node.__shady_elementsFromPoint(a, b);
};
n.elementFromPoint = function(a, b) {
return this.node.__shady_elementFromPoint(a, b);
};
n.querySelector = function(a) {
return this.node.__shady_querySelector(a);
};
n.querySelectorAll = function(a, b) {
return this.node.__shady_querySelectorAll(a, b);
};
n.assignedNodes = function(a) {
if ("slot" === this.node.localName) return this.node.__shady_assignedNodes(a);
};
n.append = function(a) {
for (var b = [], c = 0; c < arguments.length; ++c) b[c] = arguments[c];
return this.node.__shady_append.apply(this.node, q(b));
};
n.prepend = function(a) {
for (var b = [], c = 0; c < arguments.length; ++c) b[c] = arguments[c];
return this.node.__shady_prepend.apply(this.node, q(b));
};
n.after = function(a) {
for (var b = [], c = 0; c < arguments.length; ++c) b[c] = arguments[c];
return this.node.__shady_after.apply(this.node, q(b));
};
n.before = function(a) {
for (var b = [], c = 0; c < arguments.length; ++c) b[c] = arguments[c];
return this.node.__shady_before.apply(this.node, q(b));
};
n.remove = function() {
return this.node.__shady_remove();
};
n.replaceWith = function(a) {
for (var b = [], c = 0; c < arguments.length; ++c) b[c] = arguments[c];
return this.node.__shady_replaceWith.apply(this.node, q(b));
};
ca.Object.defineProperties(Z.prototype, {
activeElement: { configurable: true, enumerable: true, get: function() {
if (x(this.node) || this.node.nodeType === Node.DOCUMENT_NODE) return this.node.__shady_activeElement;
} },
_activeElement: { configurable: true, enumerable: true, get: function() {
return this.activeElement;
} },
host: { configurable: true, enumerable: true, get: function() {
if (x(this.node)) return this.node.host;
} },
parentNode: { configurable: true, enumerable: true, get: function() {
return this.node.__shady_parentNode;
} },
firstChild: {
configurable: true,
enumerable: true,
get: function() {
return this.node.__shady_firstChild;
}
},
lastChild: { configurable: true, enumerable: true, get: function() {
return this.node.__shady_lastChild;
} },
nextSibling: { configurable: true, enumerable: true, get: function() {
return this.node.__shady_nextSibling;
} },
previousSibling: { configurable: true, enumerable: true, get: function() {
return this.node.__shady_previousSibling;
} },
childNodes: { configurable: true, enumerable: true, get: function() {
return this.node.__shady_childNodes;
} },
parentElement: {
configurable: true,
enumerable: true,
get: function() {
return this.node.__shady_parentElement;
}
},
firstElementChild: { configurable: true, enumerable: true, get: function() {
return this.node.__shady_firstElementChild;
} },
lastElementChild: { configurable: true, enumerable: true, get: function() {
return this.node.__shady_lastElementChild;
} },
nextElementSibling: { configurable: true, enumerable: true, get: function() {
return this.node.__shady_nextElementSibling;
} },
previousElementSibling: { configurable: true, enumerable: true, get: function() {
return this.node.__shady_previousElementSibling;
} },
children: { configurable: true, enumerable: true, get: function() {
return this.node.__shady_children;
} },
childElementCount: { configurable: true, enumerable: true, get: function() {
return this.node.__shady_childElementCount;
} },
shadowRoot: { configurable: true, enumerable: true, get: function() {
return this.node.__shady_shadowRoot;
} },
assignedSlot: { configurable: true, enumerable: true, get: function() {
return this.node.__shady_assignedSlot;
} },
isConnected: { configurable: true, enumerable: true, get: function() {
return this.node.__shady_isConnected;
} },
innerHTML: {
configurable: true,
enumerable: true,
get: function() {
return this.node.__shady_innerHTML;
},
set: function(a) {
this.node.__shady_innerHTML = a;
}
},
textContent: { configurable: true, enumerable: true, get: function() {
return this.node.__shady_textContent;
}, set: function(a) {
this.node.__shady_textContent = a;
} },
slot: { configurable: true, enumerable: true, get: function() {
return this.node.__shady_slot;
}, set: function(a) {
this.node.__shady_slot = a;
} },
className: { configurable: true, enumerable: true, get: function() {
return this.node.__shady_className;
}, set: function(a) {
this.node.__shady_className = a;
} }
});
function ad(a) {
Object.defineProperty(Z.prototype, a, { get: function() {
return this.node["__shady_" + a];
}, set: function(b) {
this.node["__shady_" + a] = b;
}, configurable: true });
}
Db.forEach(function(a) {
return ad(a);
});
Eb.forEach(function(a) {
return ad(a);
});
var bd = /* @__PURE__ */ new WeakMap();
function cd(a) {
if (x(a) || a instanceof Z) return a;
var b = bd.get(a);
b || (b = new Z(a), bd.set(a, b));
return b;
}
;
if (v.N) {
var dd = v.i ? function(a) {
return a;
} : function(a) {
bb(a);
ab(a);
return a;
};
window.ShadyDOM = {
inUse: v.N,
patch: dd,
isShadyRoot: x,
enqueue: Ba,
flush: F,
flushInitial: function(a) {
!a.P && a.s && bc(a);
},
settings: v,
filterMutations: Ga,
observeChildren: Ea,
unobserveChildren: Fa,
deferConnectionCallbacks: v.deferConnectionCallbacks,
preferPerformance: v.preferPerformance,
handlesDynamicScoping: true,
wrap: v.l ? cd : dd,
wrapIfNeeded: true === v.l ? cd : function(a) {
return a;
},
Wrapper: Z,
composedPath: ib,
noPatch: v.l,
patchOnDemand: v.O,
nativeMethods: Oa,
nativeTree: Pa,
patchElementProto: Lc,
querySelectorImplementation: v.querySelectorImplementation
};
Va();
Kc("__shady_");
Object.defineProperty(document, "_activeElement", Fc.activeElement);
A(Window.prototype, Ic, "__shady_");
v.l ? v.O && A(Element.prototype, wc) : (Kc(), Cb());
xb();
window.Event = zb;
window.CustomEvent = Ab;
window.MouseEvent = Bb;
window.ShadowRoot = uc;
}
;
}).call(exports2);
}
});
// node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/helpers/_DOMTokenList.js
var _DOMTokenList, DOMTokenList_default;
var init_DOMTokenList = __esm({
"node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/helpers/_DOMTokenList.js"() {
_DOMTokenList = function() {
var dpSupport = true;
var defineGetter = function(object, name, fn, configurable) {
if (Object.defineProperty)
Object.defineProperty(object, name, {
configurable: false === dpSupport ? true : !!configurable,
get: fn
});
else object.__defineGetter__(name, fn);
};
try {
defineGetter({}, "support");
} catch (e) {
dpSupport = false;
}
var _DOMTokenList2 = function(el, prop) {
var that = this;
var tokens = [];
var tokenMap = {};
var length = 0;
var maxLength = 0;
var addIndexGetter = function(i) {
defineGetter(that, i, function() {
preop();
return tokens[i];
}, false);
};
var reindex = function() {
if (length >= maxLength)
for (; maxLength < length; ++maxLength) {
addIndexGetter(maxLength);
}
};
var preop = function() {
var error;
var i;
var args = arguments;
var rSpace = /\s+/;
if (args.length) {
for (i = 0; i < args.length; ++i)
if (rSpace.test(args[i])) {
error = new SyntaxError('String "' + args[i] + '" contains an invalid character');
error.code = 5;
error.name = "InvalidCharacterError";
throw error;
}
}
if (typeof el[prop] === "object") {
tokens = ("" + el[prop].baseVal).replace(/^\s+|\s+$/g, "").split(rSpace);
} else {
tokens = ("" + el[prop]).replace(/^\s+|\s+$/g, "").split(rSpace);
}
if ("" === tokens[0]) tokens = [];
tokenMap = {};
for (i = 0; i < tokens.length; ++i)
tokenMap[tokens[i]] = true;
length = tokens.length;
reindex();
};
preop();
defineGetter(that, "length", function() {
preop();
return length;
});
that.toLocaleString = that.toString = function() {
preop();
return tokens.join(" ");
};
that.item = function(idx) {
preop();
return tokens[idx];
};
that.contains = function(token) {
preop();
return !!tokenMap[token];
};
that.add = function() {
preop.apply(that, args = arguments);
for (var args, token, i = 0, l = args.length; i < l; ++i) {
token = args[i];
if (!tokenMap[token]) {
tokens.push(token);
tokenMap[token] = true;
}
}
if (length !== tokens.length) {
length = tokens.length >>> 0;
if (typeof el[prop] === "object") {
el[prop].baseVal = tokens.join(" ");
} else {
el[prop] = tokens.join(" ");
}
reindex();
}
};
that.remove = function() {
preop.apply(that, args = arguments);
for (var args, ignore = {}, i = 0, t = []; i < args.length; ++i) {
ignore[args[i]] = true;
delete tokenMap[args[i]];
}
for (i = 0; i < tokens.length; ++i)
if (!ignore[tokens[i]]) t.push(tokens[i]);
tokens = t;
length = t.length >>> 0;
if (typeof el[prop] === "object") {
el[prop].baseVal = tokens.join(" ");
} else {
el[prop] = tokens.join(" ");
}
reindex();
};
that.toggle = function(token, force) {
preop.apply(that, [token]);
if (void 0 !== force) {
if (force) {
that.add(token);
return true;
} else {
that.remove(token);
return false;
}
}
if (tokenMap[token]) {
that.remove(token);
return false;
}
that.add(token);
return true;
};
that.forEach = Array.prototype.forEach;
return that;
};
return _DOMTokenList2;
}();
DOMTokenList_default = _DOMTokenList;
}
});
// node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/modules/DOMTokenList.js
var DOMTokenList_exports = {};
var init_DOMTokenList2 = __esm({
"node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/modules/DOMTokenList.js"() {
init_DOMTokenList();
(function(undefined2) {
if (!("DOMTokenList" in self && function(e) {
return !("classList" in e) || !e.classList.toggle("x", false) && !e.className;
}(document.createElement("x")))) {
(function(global2) {
var nativeImpl = "DOMTokenList" in global2 && global2.DOMTokenList;
if (!nativeImpl || !!document.createElementNS && !!document.createElementNS("http://www.w3.org/2000/svg", "svg") && !(document.createElementNS("http://www.w3.org/2000/svg", "svg").classList instanceof DOMTokenList)) {
global2.DOMTokenList = DOMTokenList_default;
}
(function() {
var e = document.createElement("span");
if (!("classList" in e)) return;
e.classList.toggle("x", false);
if (!e.classList.contains("x")) return;
e.classList.constructor.prototype.toggle = function toggle(token) {
var force = arguments[1];
if (force === undefined2) {
var add = !this.contains(token);
this[add ? "add" : "remove"](token);
return add;
}
force = !!force;
this[force ? "add" : "remove"](token);
return force;
};
})();
(function() {
var e = document.createElement("span");
if (!("classList" in e)) return;
e.classList.add("a", "b");
if (e.classList.contains("b")) return;
var native = e.classList.constructor.prototype.add;
e.classList.constructor.prototype.add = function() {
var args = arguments;
var l = arguments.length;
for (var i = 0; i < l; i++) {
native.call(this, args[i]);
}
};
})();
(function() {
var e = document.createElement("span");
if (!("classList" in e)) return;
e.classList.add("a");
e.classList.add("b");
e.classList.remove("a", "b");
if (!e.classList.contains("b")) return;
var native = e.classList.constructor.prototype.remove;
e.classList.constructor.prototype.remove = function() {
var args = arguments;
var l = arguments.length;
for (var i = 0; i < l; i++) {
native.call(this, args[i]);
}
};
})();
})(self);
}
}).call("object" === typeof window && window || "object" === typeof self && self || "object" === typeof global && global || {});
}
});
// node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/modules/DOMTokenList.prototype.replace.js
var DOMTokenList_prototype_replace_exports = {};
var init_DOMTokenList_prototype_replace = __esm({
"node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/modules/DOMTokenList.prototype.replace.js"() {
init_DOMTokenList();
(function(undefined2) {
if (!("replace" in (document.createElement("div").classList || {}))) {
(function() {
var classList = document.createElement("div").classList;
classList && (classList.constructor.prototype.replace = function(token, newToken) {
var tokenString = "" + token, newTokenString = "" + newToken;
try {
new DOMException();
} catch (e) {
self.DOMException = function(message, name) {
if (!(this instanceof DOMException)) return new DOMException(message, name);
this.message = message;
this.name = name;
};
}
var error;
if (!(tokenString && newTokenString)) error = "SyntaxError";
if (!error && (/\s/.test(tokenString) || /\s/.test(newTokenString))) error = "InvalidCharacterError";
if (error) throw new DOMException("DOMTokenList.replace was provided tokens '" + tokenString + "' and '" + newTokenString + "'", error);
if (!this.contains(tokenString)) return false;
var tokensTobeMoved = [];
var newTokenFound = false;
for (var i = 0; i < this.length; ++i)
if (newTokenString === this.item(i)) newTokenFound = true;
else if (tokenString === this.item(i)) break;
for (; i < this.length; ++i) tokensTobeMoved.push(this.item(i));
for (i = 0; i < tokensTobeMoved.length; ++i) {
var currentToken = tokensTobeMoved[i];
currentToken !== newTokenString && this.remove(currentToken);
currentToken !== tokenString && this.add(currentToken);
currentToken === tokenString && !newTokenFound && (this.remove(newTokenString), this.add(newTokenString));
}
return true;
});
})();
}
}).call("object" === typeof window && window || "object" === typeof self && self || "object" === typeof global && global || {});
}
});
// node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/modules/DOMTokenList.prototype.forEach.js
var DOMTokenList_prototype_forEach_exports = {};
var init_DOMTokenList_prototype_forEach = __esm({
"node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/modules/DOMTokenList.prototype.forEach.js"() {
init_DOMTokenList();
(function(undefined2) {
if (!("DOMTokenList" in self && "forEach" in self.DOMTokenList.prototype)) {
(function(global2) {
global2.DOMTokenList.prototype.forEach = global2.Array.prototype.forEach;
var e = document.createElement("span");
if (e.classList && e.classList.constructor && e.classList.constructor.prototype && !e.classList.constructor.prototype.forEach) {
e.classList.constructor.prototype.forEach = global2.Array.prototype.forEach;
}
})(self);
}
}).call("object" === typeof window && window || "object" === typeof self && self || "object" === typeof global && global || {});
}
});
// node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/modules/DOMTokenList.prototype.@@iterator.js
var DOMTokenList_prototype_iterator_exports = {};
var init_DOMTokenList_prototype_iterator = __esm({
"node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/modules/DOMTokenList.prototype.@@iterator.js"() {
init_ArrayIterator();
init_Iterator();
init_DOMTokenList();
(function(undefined2) {
if (!("Symbol" in self && "iterator" in self.Symbol && function() {
try {
var t = document.createElement("div");
return !(!t.classList || !t.classList[self.Symbol.iterator]);
} catch (t2) {
return false;
}
}())) {
(function(global2) {
global2.DOMTokenList.prototype[global2.Symbol.iterator] = function() {
return new ArrayIterator_default(this);
};
var e = document.createElement("span");
if (e.classList && e.classList.constructor && e.classList.constructor.prototype && !e.classList.constructor.prototype[global2.Symbol.iterator]) {
e.classList.constructor.prototype[global2.Symbol.iterator] = function() {
return new ArrayIterator_default(this);
};
}
})(self);
}
}).call("object" === typeof window && window || "object" === typeof self && self || "object" === typeof global && global || {});
}
});
// node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/helpers/_mutation.js
var init_mutation = __esm({
"node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/helpers/_mutation.js"() {
}
});
// node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/modules/Element.prototype.remove.js
var Element_prototype_remove_exports = {};
var init_Element_prototype_remove = __esm({
"node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/modules/Element.prototype.remove.js"() {
init_mutation();
(function(undefined2) {
if (!("Element" in self && "remove" in Element.prototype)) {
Document.prototype.remove = Element.prototype.remove = function remove() {
if (this.parentNode) {
this.parentNode.removeChild(this);
}
};
if ("Text" in self) {
Text.prototype.remove = Element.prototype.remove;
}
(function() {
var originalRemove = HTMLSelectElement.prototype.remove;
HTMLSelectElement.prototype.remove = function remove(index) {
if (arguments.length === 0) {
return Element.prototype.remove.call(this);
}
return originalRemove.call(this, index);
};
})();
}
}).call("object" === typeof window && window || "object" === typeof self && self || "object" === typeof global && global || {});
}
});
// node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/modules/CharacterData.prototype.remove.js
var CharacterData_prototype_remove_exports = {};
var init_CharacterData_prototype_remove = __esm({
"node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/modules/CharacterData.prototype.remove.js"() {
init_mutation();
(function(undefined2) {
if (!("remove" in CharacterData.prototype)) {
CharacterData.prototype.remove = Element.prototype.remove;
}
}).call("object" === typeof window && window || "object" === typeof self && self || "object" === typeof global && global || {});
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.symbol.iterator.js
var require_es_symbol_iterator = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.symbol.iterator.js"() {
"use strict";
var defineWellKnownSymbol = require_well_known_symbol_define();
defineWellKnownSymbol("iterator");
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/proxy-accessor.js
var require_proxy_accessor = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/proxy-accessor.js"(exports2, module2) {
"use strict";
var defineProperty = require_object_define_property().f;
module2.exports = function(Target, Source, key) {
key in Target || defineProperty(Target, key, {
configurable: true,
get: function() {
return Source[key];
},
set: function(it) {
Source[key] = it;
}
});
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/normalize-string-argument.js
var require_normalize_string_argument = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/normalize-string-argument.js"(exports2, module2) {
"use strict";
var toString = require_to_string();
module2.exports = function(argument, $default) {
return argument === void 0 ? arguments.length < 2 ? "" : $default : toString(argument);
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/install-error-cause.js
var require_install_error_cause = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/install-error-cause.js"(exports2, module2) {
"use strict";
var isObject2 = require_is_object();
var createNonEnumerableProperty = require_create_non_enumerable_property();
module2.exports = function(O, options) {
if (isObject2(options) && "cause" in options) {
createNonEnumerableProperty(O, "cause", options.cause);
}
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/error-stack-clear.js
var require_error_stack_clear = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/error-stack-clear.js"(exports2, module2) {
"use strict";
var uncurryThis = require_function_uncurry_this();
var $Error = Error;
var replace = uncurryThis("".replace);
var TEST = function(arg) {
return String(new $Error(arg).stack);
}("zxcasd");
var V8_OR_CHAKRA_STACK_ENTRY = /\n\s*at [^:]*:[^\n]*/;
var IS_V8_OR_CHAKRA_STACK = V8_OR_CHAKRA_STACK_ENTRY.test(TEST);
module2.exports = function(stack, dropEntries) {
if (IS_V8_OR_CHAKRA_STACK && typeof stack == "string" && !$Error.prepareStackTrace) {
while (dropEntries--) stack = replace(stack, V8_OR_CHAKRA_STACK_ENTRY, "");
}
return stack;
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/error-stack-installable.js
var require_error_stack_installable = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/error-stack-installable.js"(exports2, module2) {
"use strict";
var fails = require_fails();
var createPropertyDescriptor = require_create_property_descriptor();
module2.exports = !fails(function() {
var error = new Error("a");
if (!("stack" in error)) return true;
Object.defineProperty(error, "stack", createPropertyDescriptor(1, 7));
return error.stack !== 7;
});
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/error-stack-install.js
var require_error_stack_install = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/error-stack-install.js"(exports2, module2) {
"use strict";
var createNonEnumerableProperty = require_create_non_enumerable_property();
var clearErrorStack = require_error_stack_clear();
var ERROR_STACK_INSTALLABLE = require_error_stack_installable();
var captureStackTrace = Error.captureStackTrace;
module2.exports = function(error, C, stack, dropEntries) {
if (ERROR_STACK_INSTALLABLE) {
if (captureStackTrace) captureStackTrace(error, C);
else createNonEnumerableProperty(error, "stack", clearErrorStack(stack, dropEntries));
}
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/wrap-error-constructor-with-cause.js
var require_wrap_error_constructor_with_cause = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/wrap-error-constructor-with-cause.js"(exports2, module2) {
"use strict";
var getBuiltIn = require_get_built_in();
var hasOwn = require_has_own_property();
var createNonEnumerableProperty = require_create_non_enumerable_property();
var isPrototypeOf = require_object_is_prototype_of();
var setPrototypeOf = require_object_set_prototype_of();
var copyConstructorProperties = require_copy_constructor_properties();
var proxyAccessor = require_proxy_accessor();
var inheritIfRequired = require_inherit_if_required();
var normalizeStringArgument = require_normalize_string_argument();
var installErrorCause = require_install_error_cause();
var installErrorStack = require_error_stack_install();
var DESCRIPTORS = require_descriptors();
var IS_PURE = require_is_pure();
module2.exports = function(FULL_NAME, wrapper, FORCED, IS_AGGREGATE_ERROR) {
var STACK_TRACE_LIMIT = "stackTraceLimit";
var OPTIONS_POSITION = IS_AGGREGATE_ERROR ? 2 : 1;
var path = FULL_NAME.split(".");
var ERROR_NAME = path[path.length - 1];
var OriginalError = getBuiltIn.apply(null, path);
if (!OriginalError) return;
var OriginalErrorPrototype = OriginalError.prototype;
if (!IS_PURE && hasOwn(OriginalErrorPrototype, "cause")) delete OriginalErrorPrototype.cause;
if (!FORCED) return OriginalError;
var BaseError = getBuiltIn("Error");
var WrappedError = wrapper(function(a, b) {
var message = normalizeStringArgument(IS_AGGREGATE_ERROR ? b : a, void 0);
var result = IS_AGGREGATE_ERROR ? new OriginalError(a) : new OriginalError();
if (message !== void 0) createNonEnumerableProperty(result, "message", message);
installErrorStack(result, WrappedError, result.stack, 2);
if (this && isPrototypeOf(OriginalErrorPrototype, this)) inheritIfRequired(result, this, WrappedError);
if (arguments.length > OPTIONS_POSITION) installErrorCause(result, arguments[OPTIONS_POSITION]);
return result;
});
WrappedError.prototype = OriginalErrorPrototype;
if (ERROR_NAME !== "Error") {
if (setPrototypeOf) setPrototypeOf(WrappedError, BaseError);
else copyConstructorProperties(WrappedError, BaseError, { name: true });
} else if (DESCRIPTORS && STACK_TRACE_LIMIT in OriginalError) {
proxyAccessor(WrappedError, OriginalError, STACK_TRACE_LIMIT);
proxyAccessor(WrappedError, OriginalError, "prepareStackTrace");
}
copyConstructorProperties(WrappedError, OriginalError);
if (!IS_PURE) try {
if (OriginalErrorPrototype.name !== ERROR_NAME) {
createNonEnumerableProperty(OriginalErrorPrototype, "name", ERROR_NAME);
}
OriginalErrorPrototype.constructor = WrappedError;
} catch (error) {
}
return WrappedError;
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.error.cause.js
var require_es_error_cause = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.error.cause.js"() {
"use strict";
var $ = require_export();
var globalThis2 = require_global_this();
var apply = require_function_apply();
var wrapErrorConstructorWithCause = require_wrap_error_constructor_with_cause();
var WEB_ASSEMBLY = "WebAssembly";
var WebAssembly = globalThis2[WEB_ASSEMBLY];
var FORCED = new Error("e", { cause: 7 }).cause !== 7;
var exportGlobalErrorCauseWrapper = function(ERROR_NAME, wrapper) {
var O = {};
O[ERROR_NAME] = wrapErrorConstructorWithCause(ERROR_NAME, wrapper, FORCED);
$({ global: true, constructor: true, arity: 1, forced: FORCED }, O);
};
var exportWebAssemblyErrorCauseWrapper = function(ERROR_NAME, wrapper) {
if (WebAssembly && WebAssembly[ERROR_NAME]) {
var O = {};
O[ERROR_NAME] = wrapErrorConstructorWithCause(WEB_ASSEMBLY + "." + ERROR_NAME, wrapper, FORCED);
$({ target: WEB_ASSEMBLY, stat: true, constructor: true, arity: 1, forced: FORCED }, O);
}
};
exportGlobalErrorCauseWrapper("Error", function(init) {
return function Error2(message) {
return apply(init, this, arguments);
};
});
exportGlobalErrorCauseWrapper("EvalError", function(init) {
return function EvalError(message) {
return apply(init, this, arguments);
};
});
exportGlobalErrorCauseWrapper("RangeError", function(init) {
return function RangeError(message) {
return apply(init, this, arguments);
};
});
exportGlobalErrorCauseWrapper("ReferenceError", function(init) {
return function ReferenceError2(message) {
return apply(init, this, arguments);
};
});
exportGlobalErrorCauseWrapper("SyntaxError", function(init) {
return function SyntaxError2(message) {
return apply(init, this, arguments);
};
});
exportGlobalErrorCauseWrapper("TypeError", function(init) {
return function TypeError2(message) {
return apply(init, this, arguments);
};
});
exportGlobalErrorCauseWrapper("URIError", function(init) {
return function URIError(message) {
return apply(init, this, arguments);
};
});
exportWebAssemblyErrorCauseWrapper("CompileError", function(init) {
return function CompileError(message) {
return apply(init, this, arguments);
};
});
exportWebAssemblyErrorCauseWrapper("LinkError", function(init) {
return function LinkError(message) {
return apply(init, this, arguments);
};
});
exportWebAssemblyErrorCauseWrapper("RuntimeError", function(init) {
return function RuntimeError(message) {
return apply(init, this, arguments);
};
});
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/error-to-string.js
var require_error_to_string = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/error-to-string.js"(exports2, module2) {
"use strict";
var DESCRIPTORS = require_descriptors();
var fails = require_fails();
var anObject = require_an_object();
var normalizeStringArgument = require_normalize_string_argument();
var nativeErrorToString = Error.prototype.toString;
var INCORRECT_TO_STRING = fails(function() {
if (DESCRIPTORS) {
var object = Object.create(Object.defineProperty({}, "name", { get: function() {
return this === object;
} }));
if (nativeErrorToString.call(object) !== "true") return true;
}
return nativeErrorToString.call({ message: 1, name: 2 }) !== "2: 1" || nativeErrorToString.call({}) !== "Error";
});
module2.exports = INCORRECT_TO_STRING ? function toString() {
var O = anObject(this);
var name = normalizeStringArgument(O.name, "Error");
var message = normalizeStringArgument(O.message);
return !name ? message : !message ? name : name + ": " + message;
} : nativeErrorToString;
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.error.to-string.js
var require_es_error_to_string = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.error.to-string.js"() {
"use strict";
var defineBuiltIn = require_define_built_in();
var errorToString = require_error_to_string();
var ErrorPrototype = Error.prototype;
if (ErrorPrototype.toString !== errorToString) {
defineBuiltIn(ErrorPrototype, "toString", errorToString);
}
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/array-method-has-species-support.js
var require_array_method_has_species_support = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/array-method-has-species-support.js"(exports2, module2) {
"use strict";
var fails = require_fails();
var wellKnownSymbol = require_well_known_symbol();
var V8_VERSION = require_environment_v8_version();
var SPECIES = wellKnownSymbol("species");
module2.exports = function(METHOD_NAME) {
return V8_VERSION >= 51 || !fails(function() {
var array = [];
var constructor = array.constructor = {};
constructor[SPECIES] = function() {
return { foo: 1 };
};
return array[METHOD_NAME](Boolean).foo !== 1;
});
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.array.filter.js
var require_es_array_filter = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.array.filter.js"() {
"use strict";
var $ = require_export();
var $filter = require_array_iteration().filter;
var arrayMethodHasSpeciesSupport = require_array_method_has_species_support();
var HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport("filter");
$({ target: "Array", proto: true, forced: !HAS_SPECIES_SUPPORT }, {
filter: function filter(callbackfn) {
return $filter(this, callbackfn, arguments.length > 1 ? arguments[1] : void 0);
}
});
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/array-method-is-strict.js
var require_array_method_is_strict = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/array-method-is-strict.js"(exports2, module2) {
"use strict";
var fails = require_fails();
module2.exports = function(METHOD_NAME, argument) {
var method = [][METHOD_NAME];
return !!method && fails(function() {
method.call(null, argument || function() {
return 1;
}, 1);
});
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/array-for-each.js
var require_array_for_each = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/array-for-each.js"(exports2, module2) {
"use strict";
var $forEach = require_array_iteration().forEach;
var arrayMethodIsStrict = require_array_method_is_strict();
var STRICT_METHOD = arrayMethodIsStrict("forEach");
module2.exports = !STRICT_METHOD ? function forEach2(callbackfn) {
return $forEach(this, callbackfn, arguments.length > 1 ? arguments[1] : void 0);
} : [].forEach;
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.array.for-each.js
var require_es_array_for_each = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.array.for-each.js"() {
"use strict";
var $ = require_export();
var forEach2 = require_array_for_each();
$({ target: "Array", proto: true, forced: [].forEach !== forEach2 }, {
forEach: forEach2
});
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/iterator-close.js
var require_iterator_close = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/iterator-close.js"(exports2, module2) {
"use strict";
var call = require_function_call();
var anObject = require_an_object();
var getMethod = require_get_method();
module2.exports = function(iterator, kind, value) {
var innerResult, innerError;
anObject(iterator);
try {
innerResult = getMethod(iterator, "return");
if (!innerResult) {
if (kind === "throw") throw value;
return value;
}
innerResult = call(innerResult, iterator);
} catch (error) {
innerError = true;
innerResult = error;
}
if (kind === "throw") throw value;
if (innerError) throw innerResult;
anObject(innerResult);
return value;
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/call-with-safe-iteration-closing.js
var require_call_with_safe_iteration_closing = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/call-with-safe-iteration-closing.js"(exports2, module2) {
"use strict";
var anObject = require_an_object();
var iteratorClose = require_iterator_close();
module2.exports = function(iterator, fn, value, ENTRIES) {
try {
return ENTRIES ? fn(anObject(value)[0], value[1]) : fn(value);
} catch (error) {
iteratorClose(iterator, "throw", error);
}
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/iterators.js
var require_iterators = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/iterators.js"(exports2, module2) {
"use strict";
module2.exports = {};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/is-array-iterator-method.js
var require_is_array_iterator_method = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/is-array-iterator-method.js"(exports2, module2) {
"use strict";
var wellKnownSymbol = require_well_known_symbol();
var Iterators = require_iterators();
var ITERATOR = wellKnownSymbol("iterator");
var ArrayPrototype = Array.prototype;
module2.exports = function(it) {
return it !== void 0 && (Iterators.Array === it || ArrayPrototype[ITERATOR] === it);
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/create-property.js
var require_create_property = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/create-property.js"(exports2, module2) {
"use strict";
var DESCRIPTORS = require_descriptors();
var definePropertyModule = require_object_define_property();
var createPropertyDescriptor = require_create_property_descriptor();
module2.exports = function(object, key, value) {
if (DESCRIPTORS) definePropertyModule.f(object, key, createPropertyDescriptor(0, value));
else object[key] = value;
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/get-iterator-method.js
var require_get_iterator_method = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/get-iterator-method.js"(exports2, module2) {
"use strict";
var classof = require_classof();
var getMethod = require_get_method();
var isNullOrUndefined = require_is_null_or_undefined();
var Iterators = require_iterators();
var wellKnownSymbol = require_well_known_symbol();
var ITERATOR = wellKnownSymbol("iterator");
module2.exports = function(it) {
if (!isNullOrUndefined(it)) return getMethod(it, ITERATOR) || getMethod(it, "@@iterator") || Iterators[classof(it)];
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/get-iterator.js
var require_get_iterator = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/get-iterator.js"(exports2, module2) {
"use strict";
var call = require_function_call();
var aCallable = require_a_callable();
var anObject = require_an_object();
var tryToString = require_try_to_string();
var getIteratorMethod = require_get_iterator_method();
var $TypeError = TypeError;
module2.exports = function(argument, usingIterator) {
var iteratorMethod = arguments.length < 2 ? getIteratorMethod(argument) : usingIterator;
if (aCallable(iteratorMethod)) return anObject(call(iteratorMethod, argument));
throw new $TypeError(tryToString(argument) + " is not iterable");
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/array-from.js
var require_array_from = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/array-from.js"(exports2, module2) {
"use strict";
var bind = require_function_bind_context();
var call = require_function_call();
var toObject = require_to_object();
var callWithSafeIterationClosing = require_call_with_safe_iteration_closing();
var isArrayIteratorMethod = require_is_array_iterator_method();
var isConstructor = require_is_constructor();
var lengthOfArrayLike = require_length_of_array_like();
var createProperty = require_create_property();
var getIterator = require_get_iterator();
var getIteratorMethod = require_get_iterator_method();
var $Array = Array;
module2.exports = function from(arrayLike) {
var O = toObject(arrayLike);
var IS_CONSTRUCTOR = isConstructor(this);
var argumentsLength = arguments.length;
var mapfn = argumentsLength > 1 ? arguments[1] : void 0;
var mapping = mapfn !== void 0;
if (mapping) mapfn = bind(mapfn, argumentsLength > 2 ? arguments[2] : void 0);
var iteratorMethod = getIteratorMethod(O);
var index = 0;
var length, result, step, iterator, next, value;
if (iteratorMethod && !(this === $Array && isArrayIteratorMethod(iteratorMethod))) {
result = IS_CONSTRUCTOR ? new this() : [];
iterator = getIterator(O, iteratorMethod);
next = iterator.next;
for (; !(step = call(next, iterator)).done; index++) {
value = mapping ? callWithSafeIterationClosing(iterator, mapfn, [step.value, index], true) : step.value;
createProperty(result, index, value);
}
} else {
length = lengthOfArrayLike(O);
result = IS_CONSTRUCTOR ? new this(length) : $Array(length);
for (; length > index; index++) {
value = mapping ? mapfn(O[index], index) : O[index];
createProperty(result, index, value);
}
}
result.length = index;
return result;
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/check-correctness-of-iteration.js
var require_check_correctness_of_iteration = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/check-correctness-of-iteration.js"(exports2, module2) {
"use strict";
var wellKnownSymbol = require_well_known_symbol();
var ITERATOR = wellKnownSymbol("iterator");
var SAFE_CLOSING = false;
try {
called = 0;
iteratorWithReturn = {
next: function() {
return { done: !!called++ };
},
"return": function() {
SAFE_CLOSING = true;
}
};
iteratorWithReturn[ITERATOR] = function() {
return this;
};
Array.from(iteratorWithReturn, function() {
throw 2;
});
} catch (error) {
}
var called;
var iteratorWithReturn;
module2.exports = function(exec, SKIP_CLOSING) {
try {
if (!SKIP_CLOSING && !SAFE_CLOSING) return false;
} catch (error) {
return false;
}
var ITERATION_SUPPORT = false;
try {
var object = {};
object[ITERATOR] = function() {
return {
next: function() {
return { done: ITERATION_SUPPORT = true };
}
};
};
exec(object);
} catch (error) {
}
return ITERATION_SUPPORT;
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.array.from.js
var require_es_array_from = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.array.from.js"() {
"use strict";
var $ = require_export();
var from = require_array_from();
var checkCorrectnessOfIteration = require_check_correctness_of_iteration();
var INCORRECT_ITERATION = !checkCorrectnessOfIteration(function(iterable) {
Array.from(iterable);
});
$({ target: "Array", stat: true, forced: INCORRECT_ITERATION }, {
from
});
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/add-to-unscopables.js
var require_add_to_unscopables = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/add-to-unscopables.js"(exports2, module2) {
"use strict";
var wellKnownSymbol = require_well_known_symbol();
var create = require_object_create();
var defineProperty = require_object_define_property().f;
var UNSCOPABLES = wellKnownSymbol("unscopables");
var ArrayPrototype = Array.prototype;
if (ArrayPrototype[UNSCOPABLES] === void 0) {
defineProperty(ArrayPrototype, UNSCOPABLES, {
configurable: true,
value: create(null)
});
}
module2.exports = function(key) {
ArrayPrototype[UNSCOPABLES][key] = true;
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.array.includes.js
var require_es_array_includes = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.array.includes.js"() {
"use strict";
var $ = require_export();
var $includes = require_array_includes().includes;
var fails = require_fails();
var addToUnscopables = require_add_to_unscopables();
var BROKEN_ON_SPARSE = fails(function() {
return !Array(1).includes();
});
$({ target: "Array", proto: true, forced: BROKEN_ON_SPARSE }, {
includes: function includes(el) {
return $includes(this, el, arguments.length > 1 ? arguments[1] : void 0);
}
});
addToUnscopables("includes");
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.array.index-of.js
var require_es_array_index_of = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.array.index-of.js"() {
"use strict";
var $ = require_export();
var uncurryThis = require_function_uncurry_this_clause();
var $indexOf = require_array_includes().indexOf;
var arrayMethodIsStrict = require_array_method_is_strict();
var nativeIndexOf = uncurryThis([].indexOf);
var NEGATIVE_ZERO = !!nativeIndexOf && 1 / nativeIndexOf([1], 1, -0) < 0;
var FORCED = NEGATIVE_ZERO || !arrayMethodIsStrict("indexOf");
$({ target: "Array", proto: true, forced: FORCED }, {
indexOf: function indexOf(searchElement) {
var fromIndex = arguments.length > 1 ? arguments[1] : void 0;
return NEGATIVE_ZERO ? nativeIndexOf(this, searchElement, fromIndex) || 0 : $indexOf(this, searchElement, fromIndex);
}
});
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/correct-prototype-getter.js
var require_correct_prototype_getter = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/correct-prototype-getter.js"(exports2, module2) {
"use strict";
var fails = require_fails();
module2.exports = !fails(function() {
function F() {
}
F.prototype.constructor = null;
return Object.getPrototypeOf(new F()) !== F.prototype;
});
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/object-get-prototype-of.js
var require_object_get_prototype_of = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/object-get-prototype-of.js"(exports2, module2) {
"use strict";
var hasOwn = require_has_own_property();
var isCallable = require_is_callable();
var toObject = require_to_object();
var sharedKey = require_shared_key();
var CORRECT_PROTOTYPE_GETTER = require_correct_prototype_getter();
var IE_PROTO = sharedKey("IE_PROTO");
var $Object = Object;
var ObjectPrototype = $Object.prototype;
module2.exports = CORRECT_PROTOTYPE_GETTER ? $Object.getPrototypeOf : function(O) {
var object = toObject(O);
if (hasOwn(object, IE_PROTO)) return object[IE_PROTO];
var constructor = object.constructor;
if (isCallable(constructor) && object instanceof constructor) {
return constructor.prototype;
}
return object instanceof $Object ? ObjectPrototype : null;
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/iterators-core.js
var require_iterators_core = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/iterators-core.js"(exports2, module2) {
"use strict";
var fails = require_fails();
var isCallable = require_is_callable();
var isObject2 = require_is_object();
var create = require_object_create();
var getPrototypeOf = require_object_get_prototype_of();
var defineBuiltIn = require_define_built_in();
var wellKnownSymbol = require_well_known_symbol();
var IS_PURE = require_is_pure();
var ITERATOR = wellKnownSymbol("iterator");
var BUGGY_SAFARI_ITERATORS = false;
var IteratorPrototype;
var PrototypeOfArrayIteratorPrototype;
var arrayIterator;
if ([].keys) {
arrayIterator = [].keys();
if (!("next" in arrayIterator)) BUGGY_SAFARI_ITERATORS = true;
else {
PrototypeOfArrayIteratorPrototype = getPrototypeOf(getPrototypeOf(arrayIterator));
if (PrototypeOfArrayIteratorPrototype !== Object.prototype) IteratorPrototype = PrototypeOfArrayIteratorPrototype;
}
}
var NEW_ITERATOR_PROTOTYPE = !isObject2(IteratorPrototype) || fails(function() {
var test = {};
return IteratorPrototype[ITERATOR].call(test) !== test;
});
if (NEW_ITERATOR_PROTOTYPE) IteratorPrototype = {};
else if (IS_PURE) IteratorPrototype = create(IteratorPrototype);
if (!isCallable(IteratorPrototype[ITERATOR])) {
defineBuiltIn(IteratorPrototype, ITERATOR, function() {
return this;
});
}
module2.exports = {
IteratorPrototype,
BUGGY_SAFARI_ITERATORS
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/iterator-create-constructor.js
var require_iterator_create_constructor = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/iterator-create-constructor.js"(exports2, module2) {
"use strict";
var IteratorPrototype = require_iterators_core().IteratorPrototype;
var create = require_object_create();
var createPropertyDescriptor = require_create_property_descriptor();
var setToStringTag = require_set_to_string_tag();
var Iterators = require_iterators();
var returnThis = function() {
return this;
};
module2.exports = function(IteratorConstructor, NAME, next, ENUMERABLE_NEXT) {
var TO_STRING_TAG = NAME + " Iterator";
IteratorConstructor.prototype = create(IteratorPrototype, { next: createPropertyDescriptor(+!ENUMERABLE_NEXT, next) });
setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true);
Iterators[TO_STRING_TAG] = returnThis;
return IteratorConstructor;
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/iterator-define.js
var require_iterator_define = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/iterator-define.js"(exports2, module2) {
"use strict";
var $ = require_export();
var call = require_function_call();
var IS_PURE = require_is_pure();
var FunctionName = require_function_name();
var isCallable = require_is_callable();
var createIteratorConstructor = require_iterator_create_constructor();
var getPrototypeOf = require_object_get_prototype_of();
var setPrototypeOf = require_object_set_prototype_of();
var setToStringTag = require_set_to_string_tag();
var createNonEnumerableProperty = require_create_non_enumerable_property();
var defineBuiltIn = require_define_built_in();
var wellKnownSymbol = require_well_known_symbol();
var Iterators = require_iterators();
var IteratorsCore = require_iterators_core();
var PROPER_FUNCTION_NAME = FunctionName.PROPER;
var CONFIGURABLE_FUNCTION_NAME = FunctionName.CONFIGURABLE;
var IteratorPrototype = IteratorsCore.IteratorPrototype;
var BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS;
var ITERATOR = wellKnownSymbol("iterator");
var KEYS = "keys";
var VALUES = "values";
var ENTRIES = "entries";
var returnThis = function() {
return this;
};
module2.exports = function(Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) {
createIteratorConstructor(IteratorConstructor, NAME, next);
var getIterationMethod = function(KIND) {
if (KIND === DEFAULT && defaultIterator) return defaultIterator;
if (!BUGGY_SAFARI_ITERATORS && KIND && KIND in IterablePrototype) return IterablePrototype[KIND];
switch (KIND) {
case KEYS:
return function keys2() {
return new IteratorConstructor(this, KIND);
};
case VALUES:
return function values() {
return new IteratorConstructor(this, KIND);
};
case ENTRIES:
return function entries() {
return new IteratorConstructor(this, KIND);
};
}
return function() {
return new IteratorConstructor(this);
};
};
var TO_STRING_TAG = NAME + " Iterator";
var INCORRECT_VALUES_NAME = false;
var IterablePrototype = Iterable.prototype;
var nativeIterator = IterablePrototype[ITERATOR] || IterablePrototype["@@iterator"] || DEFAULT && IterablePrototype[DEFAULT];
var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT);
var anyNativeIterator = NAME === "Array" ? IterablePrototype.entries || nativeIterator : nativeIterator;
var CurrentIteratorPrototype, methods, KEY;
if (anyNativeIterator) {
CurrentIteratorPrototype = getPrototypeOf(anyNativeIterator.call(new Iterable()));
if (CurrentIteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) {
if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) {
if (setPrototypeOf) {
setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype);
} else if (!isCallable(CurrentIteratorPrototype[ITERATOR])) {
defineBuiltIn(CurrentIteratorPrototype, ITERATOR, returnThis);
}
}
setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true, true);
if (IS_PURE) Iterators[TO_STRING_TAG] = returnThis;
}
}
if (PROPER_FUNCTION_NAME && DEFAULT === VALUES && nativeIterator && nativeIterator.name !== VALUES) {
if (!IS_PURE && CONFIGURABLE_FUNCTION_NAME) {
createNonEnumerableProperty(IterablePrototype, "name", VALUES);
} else {
INCORRECT_VALUES_NAME = true;
defaultIterator = function values() {
return call(nativeIterator, this);
};
}
}
if (DEFAULT) {
methods = {
values: getIterationMethod(VALUES),
keys: IS_SET ? defaultIterator : getIterationMethod(KEYS),
entries: getIterationMethod(ENTRIES)
};
if (FORCED) for (KEY in methods) {
if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) {
defineBuiltIn(IterablePrototype, KEY, methods[KEY]);
}
}
else $({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods);
}
if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) {
defineBuiltIn(IterablePrototype, ITERATOR, defaultIterator, { name: DEFAULT });
}
Iterators[NAME] = defaultIterator;
return methods;
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/create-iter-result-object.js
var require_create_iter_result_object = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/create-iter-result-object.js"(exports2, module2) {
"use strict";
module2.exports = function(value, done) {
return { value, done };
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.array.iterator.js
var require_es_array_iterator = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.array.iterator.js"(exports2, module2) {
"use strict";
var toIndexedObject = require_to_indexed_object();
var addToUnscopables = require_add_to_unscopables();
var Iterators = require_iterators();
var InternalStateModule = require_internal_state();
var defineProperty = require_object_define_property().f;
var defineIterator = require_iterator_define();
var createIterResultObject = require_create_iter_result_object();
var IS_PURE = require_is_pure();
var DESCRIPTORS = require_descriptors();
var ARRAY_ITERATOR = "Array Iterator";
var setInternalState = InternalStateModule.set;
var getInternalState = InternalStateModule.getterFor(ARRAY_ITERATOR);
module2.exports = defineIterator(Array, "Array", function(iterated, kind) {
setInternalState(this, {
type: ARRAY_ITERATOR,
target: toIndexedObject(iterated),
// target
index: 0,
// next index
kind
// kind
});
}, function() {
var state = getInternalState(this);
var target = state.target;
var index = state.index++;
if (!target || index >= target.length) {
state.target = null;
return createIterResultObject(void 0, true);
}
switch (state.kind) {
case "keys":
return createIterResultObject(index, false);
case "values":
return createIterResultObject(target[index], false);
}
return createIterResultObject([index, target[index]], false);
}, "values");
var values = Iterators.Arguments = Iterators.Array;
addToUnscopables("keys");
addToUnscopables("values");
addToUnscopables("entries");
if (!IS_PURE && DESCRIPTORS && values.name !== "values") try {
defineProperty(values, "name", { value: "values" });
} catch (error) {
}
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.array.join.js
var require_es_array_join = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.array.join.js"() {
"use strict";
var $ = require_export();
var uncurryThis = require_function_uncurry_this();
var IndexedObject = require_indexed_object();
var toIndexedObject = require_to_indexed_object();
var arrayMethodIsStrict = require_array_method_is_strict();
var nativeJoin = uncurryThis([].join);
var ES3_STRINGS = IndexedObject !== Object;
var FORCED = ES3_STRINGS || !arrayMethodIsStrict("join", ",");
$({ target: "Array", proto: true, forced: FORCED }, {
join: function join(separator) {
return nativeJoin(toIndexedObject(this), separator === void 0 ? "," : separator);
}
});
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.array.map.js
var require_es_array_map = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.array.map.js"() {
"use strict";
var $ = require_export();
var $map = require_array_iteration().map;
var arrayMethodHasSpeciesSupport = require_array_method_has_species_support();
var HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport("map");
$({ target: "Array", proto: true, forced: !HAS_SPECIES_SUPPORT }, {
map: function map(callbackfn) {
return $map(this, callbackfn, arguments.length > 1 ? arguments[1] : void 0);
}
});
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/array-reduce.js
var require_array_reduce = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/array-reduce.js"(exports2, module2) {
"use strict";
var aCallable = require_a_callable();
var toObject = require_to_object();
var IndexedObject = require_indexed_object();
var lengthOfArrayLike = require_length_of_array_like();
var $TypeError = TypeError;
var REDUCE_EMPTY = "Reduce of empty array with no initial value";
var createMethod = function(IS_RIGHT) {
return function(that, callbackfn, argumentsLength, memo2) {
var O = toObject(that);
var self2 = IndexedObject(O);
var length = lengthOfArrayLike(O);
aCallable(callbackfn);
if (length === 0 && argumentsLength < 2) throw new $TypeError(REDUCE_EMPTY);
var index = IS_RIGHT ? length - 1 : 0;
var i = IS_RIGHT ? -1 : 1;
if (argumentsLength < 2) while (true) {
if (index in self2) {
memo2 = self2[index];
index += i;
break;
}
index += i;
if (IS_RIGHT ? index < 0 : length <= index) {
throw new $TypeError(REDUCE_EMPTY);
}
}
for (; IS_RIGHT ? index >= 0 : length > index; index += i) if (index in self2) {
memo2 = callbackfn(memo2, self2[index], index, O);
}
return memo2;
};
};
module2.exports = {
// `Array.prototype.reduce` method
// https://tc39.es/ecma262/#sec-array.prototype.reduce
left: createMethod(false),
// `Array.prototype.reduceRight` method
// https://tc39.es/ecma262/#sec-array.prototype.reduceright
right: createMethod(true)
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/environment.js
var require_environment = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/environment.js"(exports2, module2) {
"use strict";
var globalThis2 = require_global_this();
var userAgent = require_environment_user_agent();
var classof = require_classof_raw();
var userAgentStartsWith = function(string) {
return userAgent.slice(0, string.length) === string;
};
module2.exports = function() {
if (userAgentStartsWith("Bun/")) return "BUN";
if (userAgentStartsWith("Cloudflare-Workers")) return "CLOUDFLARE";
if (userAgentStartsWith("Deno/")) return "DENO";
if (userAgentStartsWith("Node.js/")) return "NODE";
if (globalThis2.Bun && typeof Bun.version == "string") return "BUN";
if (globalThis2.Deno && typeof Deno.version == "object") return "DENO";
if (classof(globalThis2.process) === "process") return "NODE";
if (globalThis2.window && globalThis2.document) return "BROWSER";
return "REST";
}();
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/environment-is-node.js
var require_environment_is_node = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/environment-is-node.js"(exports2, module2) {
"use strict";
var ENVIRONMENT = require_environment();
module2.exports = ENVIRONMENT === "NODE";
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.array.reduce.js
var require_es_array_reduce = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.array.reduce.js"() {
"use strict";
var $ = require_export();
var $reduce = require_array_reduce().left;
var arrayMethodIsStrict = require_array_method_is_strict();
var CHROME_VERSION = require_environment_v8_version();
var IS_NODE = require_environment_is_node();
var CHROME_BUG = !IS_NODE && CHROME_VERSION > 79 && CHROME_VERSION < 83;
var FORCED = CHROME_BUG || !arrayMethodIsStrict("reduce");
$({ target: "Array", proto: true, forced: FORCED }, {
reduce: function reduce(callbackfn) {
var length = arguments.length;
return $reduce(this, callbackfn, length, length > 1 ? arguments[1] : void 0);
}
});
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.array.slice.js
var require_es_array_slice = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.array.slice.js"() {
"use strict";
var $ = require_export();
var isArray = require_is_array();
var isConstructor = require_is_constructor();
var isObject2 = require_is_object();
var toAbsoluteIndex = require_to_absolute_index();
var lengthOfArrayLike = require_length_of_array_like();
var toIndexedObject = require_to_indexed_object();
var createProperty = require_create_property();
var wellKnownSymbol = require_well_known_symbol();
var arrayMethodHasSpeciesSupport = require_array_method_has_species_support();
var nativeSlice = require_array_slice();
var HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport("slice");
var SPECIES = wellKnownSymbol("species");
var $Array = Array;
var max = Math.max;
$({ target: "Array", proto: true, forced: !HAS_SPECIES_SUPPORT }, {
slice: function slice(start, end) {
var O = toIndexedObject(this);
var length = lengthOfArrayLike(O);
var k = toAbsoluteIndex(start, length);
var fin = toAbsoluteIndex(end === void 0 ? length : end, length);
var Constructor, result, n;
if (isArray(O)) {
Constructor = O.constructor;
if (isConstructor(Constructor) && (Constructor === $Array || isArray(Constructor.prototype))) {
Constructor = void 0;
} else if (isObject2(Constructor)) {
Constructor = Constructor[SPECIES];
if (Constructor === null) Constructor = void 0;
}
if (Constructor === $Array || Constructor === void 0) {
return nativeSlice(O, k, fin);
}
}
result = new (Constructor === void 0 ? $Array : Constructor)(max(fin - k, 0));
for (n = 0; k < fin; k++, n++) if (k in O) createProperty(result, n, O[k]);
result.length = n;
return result;
}
});
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/delete-property-or-throw.js
var require_delete_property_or_throw = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/delete-property-or-throw.js"(exports2, module2) {
"use strict";
var tryToString = require_try_to_string();
var $TypeError = TypeError;
module2.exports = function(O, P) {
if (!delete O[P]) throw new $TypeError("Cannot delete property " + tryToString(P) + " of " + tryToString(O));
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.array.unshift.js
var require_es_array_unshift = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.array.unshift.js"() {
"use strict";
var $ = require_export();
var toObject = require_to_object();
var lengthOfArrayLike = require_length_of_array_like();
var setArrayLength = require_array_set_length();
var deletePropertyOrThrow = require_delete_property_or_throw();
var doesNotExceedSafeInteger = require_does_not_exceed_safe_integer();
var INCORRECT_RESULT = [].unshift(0) !== 1;
var properErrorOnNonWritableLength = function() {
try {
Object.defineProperty([], "length", { writable: false }).unshift();
} catch (error) {
return error instanceof TypeError;
}
};
var FORCED = INCORRECT_RESULT || !properErrorOnNonWritableLength();
$({ target: "Array", proto: true, arity: 1, forced: FORCED }, {
// eslint-disable-next-line no-unused-vars -- required for `.length`
unshift: function unshift(item) {
var O = toObject(this);
var len = lengthOfArrayLike(O);
var argCount = arguments.length;
if (argCount) {
doesNotExceedSafeInteger(len + argCount);
var k = len;
while (k--) {
var to = k + argCount;
if (k in O) O[to] = O[k];
else deletePropertyOrThrow(O, to);
}
for (var j = 0; j < argCount; j++) {
O[j] = arguments[j];
}
}
return setArrayLength(O, len + argCount);
}
});
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/an-instance.js
var require_an_instance = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/an-instance.js"(exports2, module2) {
"use strict";
var isPrototypeOf = require_object_is_prototype_of();
var $TypeError = TypeError;
module2.exports = function(it, Prototype) {
if (isPrototypeOf(Prototype, it)) return it;
throw new $TypeError("Incorrect invocation");
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.iterator.constructor.js
var require_es_iterator_constructor = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.iterator.constructor.js"() {
"use strict";
var $ = require_export();
var globalThis2 = require_global_this();
var anInstance = require_an_instance();
var anObject = require_an_object();
var isCallable = require_is_callable();
var getPrototypeOf = require_object_get_prototype_of();
var defineBuiltInAccessor = require_define_built_in_accessor();
var createProperty = require_create_property();
var fails = require_fails();
var hasOwn = require_has_own_property();
var wellKnownSymbol = require_well_known_symbol();
var IteratorPrototype = require_iterators_core().IteratorPrototype;
var DESCRIPTORS = require_descriptors();
var IS_PURE = require_is_pure();
var CONSTRUCTOR = "constructor";
var ITERATOR = "Iterator";
var TO_STRING_TAG = wellKnownSymbol("toStringTag");
var $TypeError = TypeError;
var NativeIterator = globalThis2[ITERATOR];
var FORCED = IS_PURE || !isCallable(NativeIterator) || NativeIterator.prototype !== IteratorPrototype || !fails(function() {
NativeIterator({});
});
var IteratorConstructor = function Iterator2() {
anInstance(this, IteratorPrototype);
if (getPrototypeOf(this) === IteratorPrototype) throw new $TypeError("Abstract class Iterator not directly constructable");
};
var defineIteratorPrototypeAccessor = function(key, value) {
if (DESCRIPTORS) {
defineBuiltInAccessor(IteratorPrototype, key, {
configurable: true,
get: function() {
return value;
},
set: function(replacement) {
anObject(this);
if (this === IteratorPrototype) throw new $TypeError("You can't redefine this property");
if (hasOwn(this, key)) this[key] = replacement;
else createProperty(this, key, replacement);
}
});
} else IteratorPrototype[key] = value;
};
if (!hasOwn(IteratorPrototype, TO_STRING_TAG)) defineIteratorPrototypeAccessor(TO_STRING_TAG, ITERATOR);
if (FORCED || !hasOwn(IteratorPrototype, CONSTRUCTOR) || IteratorPrototype[CONSTRUCTOR] === Object) {
defineIteratorPrototypeAccessor(CONSTRUCTOR, IteratorConstructor);
}
IteratorConstructor.prototype = IteratorPrototype;
$({ global: true, constructor: true, forced: FORCED }, {
Iterator: IteratorConstructor
});
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/get-iterator-direct.js
var require_get_iterator_direct = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/get-iterator-direct.js"(exports2, module2) {
"use strict";
module2.exports = function(obj) {
return {
iterator: obj,
next: obj.next,
done: false
};
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/define-built-ins.js
var require_define_built_ins = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/define-built-ins.js"(exports2, module2) {
"use strict";
var defineBuiltIn = require_define_built_in();
module2.exports = function(target, src, options) {
for (var key in src) defineBuiltIn(target, key, src[key], options);
return target;
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/iterator-create-proxy.js
var require_iterator_create_proxy = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/iterator-create-proxy.js"(exports2, module2) {
"use strict";
var call = require_function_call();
var create = require_object_create();
var createNonEnumerableProperty = require_create_non_enumerable_property();
var defineBuiltIns = require_define_built_ins();
var wellKnownSymbol = require_well_known_symbol();
var InternalStateModule = require_internal_state();
var getMethod = require_get_method();
var IteratorPrototype = require_iterators_core().IteratorPrototype;
var createIterResultObject = require_create_iter_result_object();
var iteratorClose = require_iterator_close();
var TO_STRING_TAG = wellKnownSymbol("toStringTag");
var ITERATOR_HELPER = "IteratorHelper";
var WRAP_FOR_VALID_ITERATOR = "WrapForValidIterator";
var setInternalState = InternalStateModule.set;
var createIteratorProxyPrototype = function(IS_ITERATOR) {
var getInternalState = InternalStateModule.getterFor(IS_ITERATOR ? WRAP_FOR_VALID_ITERATOR : ITERATOR_HELPER);
return defineBuiltIns(create(IteratorPrototype), {
next: function next() {
var state = getInternalState(this);
if (IS_ITERATOR) return state.nextHandler();
if (state.done) return createIterResultObject(void 0, true);
try {
var result = state.nextHandler();
return state.returnHandlerResult ? result : createIterResultObject(result, state.done);
} catch (error) {
state.done = true;
throw error;
}
},
"return": function() {
var state = getInternalState(this);
var iterator = state.iterator;
state.done = true;
if (IS_ITERATOR) {
var returnMethod = getMethod(iterator, "return");
return returnMethod ? call(returnMethod, iterator) : createIterResultObject(void 0, true);
}
if (state.inner) try {
iteratorClose(state.inner.iterator, "normal");
} catch (error) {
return iteratorClose(iterator, "throw", error);
}
if (iterator) iteratorClose(iterator, "normal");
return createIterResultObject(void 0, true);
}
});
};
var WrapForValidIteratorPrototype = createIteratorProxyPrototype(true);
var IteratorHelperPrototype = createIteratorProxyPrototype(false);
createNonEnumerableProperty(IteratorHelperPrototype, TO_STRING_TAG, "Iterator Helper");
module2.exports = function(nextHandler, IS_ITERATOR, RETURN_HANDLER_RESULT) {
var IteratorProxy = function Iterator2(record, state) {
if (state) {
state.iterator = record.iterator;
state.next = record.next;
} else state = record;
state.type = IS_ITERATOR ? WRAP_FOR_VALID_ITERATOR : ITERATOR_HELPER;
state.returnHandlerResult = !!RETURN_HANDLER_RESULT;
state.nextHandler = nextHandler;
state.counter = 0;
state.done = false;
setInternalState(this, state);
};
IteratorProxy.prototype = IS_ITERATOR ? WrapForValidIteratorPrototype : IteratorHelperPrototype;
return IteratorProxy;
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.iterator.filter.js
var require_es_iterator_filter = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.iterator.filter.js"() {
"use strict";
var $ = require_export();
var call = require_function_call();
var aCallable = require_a_callable();
var anObject = require_an_object();
var getIteratorDirect = require_get_iterator_direct();
var createIteratorProxy = require_iterator_create_proxy();
var callWithSafeIterationClosing = require_call_with_safe_iteration_closing();
var IS_PURE = require_is_pure();
var IteratorProxy = createIteratorProxy(function() {
var iterator = this.iterator;
var predicate = this.predicate;
var next = this.next;
var result, done, value;
while (true) {
result = anObject(call(next, iterator));
done = this.done = !!result.done;
if (done) return;
value = result.value;
if (callWithSafeIterationClosing(iterator, predicate, [value, this.counter++], true)) return value;
}
});
$({ target: "Iterator", proto: true, real: true, forced: IS_PURE }, {
filter: function filter(predicate) {
anObject(this);
aCallable(predicate);
return new IteratorProxy(getIteratorDirect(this), {
predicate
});
}
});
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/iterate.js
var require_iterate = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/iterate.js"(exports2, module2) {
"use strict";
var bind = require_function_bind_context();
var call = require_function_call();
var anObject = require_an_object();
var tryToString = require_try_to_string();
var isArrayIteratorMethod = require_is_array_iterator_method();
var lengthOfArrayLike = require_length_of_array_like();
var isPrototypeOf = require_object_is_prototype_of();
var getIterator = require_get_iterator();
var getIteratorMethod = require_get_iterator_method();
var iteratorClose = require_iterator_close();
var $TypeError = TypeError;
var Result = function(stopped, result) {
this.stopped = stopped;
this.result = result;
};
var ResultPrototype = Result.prototype;
module2.exports = function(iterable, unboundFunction, options) {
var that = options && options.that;
var AS_ENTRIES = !!(options && options.AS_ENTRIES);
var IS_RECORD = !!(options && options.IS_RECORD);
var IS_ITERATOR = !!(options && options.IS_ITERATOR);
var INTERRUPTED = !!(options && options.INTERRUPTED);
var fn = bind(unboundFunction, that);
var iterator, iterFn, index, length, result, next, step;
var stop = function(condition) {
if (iterator) iteratorClose(iterator, "normal", condition);
return new Result(true, condition);
};
var callFn = function(value) {
if (AS_ENTRIES) {
anObject(value);
return INTERRUPTED ? fn(value[0], value[1], stop) : fn(value[0], value[1]);
}
return INTERRUPTED ? fn(value, stop) : fn(value);
};
if (IS_RECORD) {
iterator = iterable.iterator;
} else if (IS_ITERATOR) {
iterator = iterable;
} else {
iterFn = getIteratorMethod(iterable);
if (!iterFn) throw new $TypeError(tryToString(iterable) + " is not iterable");
if (isArrayIteratorMethod(iterFn)) {
for (index = 0, length = lengthOfArrayLike(iterable); length > index; index++) {
result = callFn(iterable[index]);
if (result && isPrototypeOf(ResultPrototype, result)) return result;
}
return new Result(false);
}
iterator = getIterator(iterable, iterFn);
}
next = IS_RECORD ? iterable.next : iterator.next;
while (!(step = call(next, iterator)).done) {
try {
result = callFn(step.value);
} catch (error) {
iteratorClose(iterator, "throw", error);
}
if (typeof result == "object" && result && isPrototypeOf(ResultPrototype, result)) return result;
}
return new Result(false);
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.iterator.for-each.js
var require_es_iterator_for_each = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.iterator.for-each.js"() {
"use strict";
var $ = require_export();
var iterate = require_iterate();
var aCallable = require_a_callable();
var anObject = require_an_object();
var getIteratorDirect = require_get_iterator_direct();
$({ target: "Iterator", proto: true, real: true }, {
forEach: function forEach2(fn) {
anObject(this);
aCallable(fn);
var record = getIteratorDirect(this);
var counter = 0;
iterate(record, function(value) {
fn(value, counter++);
}, { IS_RECORD: true });
}
});
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/iterator-map.js
var require_iterator_map = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/iterator-map.js"(exports2, module2) {
"use strict";
var call = require_function_call();
var aCallable = require_a_callable();
var anObject = require_an_object();
var getIteratorDirect = require_get_iterator_direct();
var createIteratorProxy = require_iterator_create_proxy();
var callWithSafeIterationClosing = require_call_with_safe_iteration_closing();
var IteratorProxy = createIteratorProxy(function() {
var iterator = this.iterator;
var result = anObject(call(this.next, iterator));
var done = this.done = !!result.done;
if (!done) return callWithSafeIterationClosing(iterator, this.mapper, [result.value, this.counter++], true);
});
module2.exports = function map(mapper) {
anObject(this);
aCallable(mapper);
return new IteratorProxy(getIteratorDirect(this), {
mapper
});
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.iterator.map.js
var require_es_iterator_map = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.iterator.map.js"() {
"use strict";
var $ = require_export();
var map = require_iterator_map();
var IS_PURE = require_is_pure();
$({ target: "Iterator", proto: true, real: true, forced: IS_PURE }, {
map
});
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.iterator.reduce.js
var require_es_iterator_reduce = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.iterator.reduce.js"() {
"use strict";
var $ = require_export();
var iterate = require_iterate();
var aCallable = require_a_callable();
var anObject = require_an_object();
var getIteratorDirect = require_get_iterator_direct();
var $TypeError = TypeError;
$({ target: "Iterator", proto: true, real: true }, {
reduce: function reduce(reducer) {
anObject(this);
aCallable(reducer);
var record = getIteratorDirect(this);
var noInitial = arguments.length < 2;
var accumulator = noInitial ? void 0 : arguments[1];
var counter = 0;
iterate(record, function(value) {
if (noInitial) {
noInitial = false;
accumulator = value;
} else {
accumulator = reducer(accumulator, value, counter);
}
counter++;
}, { IS_RECORD: true });
if (noInitial) throw new $TypeError("Reduce of empty iterator with no initial value");
return accumulator;
}
});
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/array-buffer-non-extensible.js
var require_array_buffer_non_extensible = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/array-buffer-non-extensible.js"(exports2, module2) {
"use strict";
var fails = require_fails();
module2.exports = fails(function() {
if (typeof ArrayBuffer == "function") {
var buffer = new ArrayBuffer(8);
if (Object.isExtensible(buffer)) Object.defineProperty(buffer, "a", { value: 8 });
}
});
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/object-is-extensible.js
var require_object_is_extensible = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/object-is-extensible.js"(exports2, module2) {
"use strict";
var fails = require_fails();
var isObject2 = require_is_object();
var classof = require_classof_raw();
var ARRAY_BUFFER_NON_EXTENSIBLE = require_array_buffer_non_extensible();
var $isExtensible = Object.isExtensible;
var FAILS_ON_PRIMITIVES = fails(function() {
$isExtensible(1);
});
module2.exports = FAILS_ON_PRIMITIVES || ARRAY_BUFFER_NON_EXTENSIBLE ? function isExtensible(it) {
if (!isObject2(it)) return false;
if (ARRAY_BUFFER_NON_EXTENSIBLE && classof(it) === "ArrayBuffer") return false;
return $isExtensible ? $isExtensible(it) : true;
} : $isExtensible;
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/freezing.js
var require_freezing = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/freezing.js"(exports2, module2) {
"use strict";
var fails = require_fails();
module2.exports = !fails(function() {
return Object.isExtensible(Object.preventExtensions({}));
});
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/internal-metadata.js
var require_internal_metadata = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/internal-metadata.js"(exports2, module2) {
"use strict";
var $ = require_export();
var uncurryThis = require_function_uncurry_this();
var hiddenKeys = require_hidden_keys();
var isObject2 = require_is_object();
var hasOwn = require_has_own_property();
var defineProperty = require_object_define_property().f;
var getOwnPropertyNamesModule = require_object_get_own_property_names();
var getOwnPropertyNamesExternalModule = require_object_get_own_property_names_external();
var isExtensible = require_object_is_extensible();
var uid = require_uid();
var FREEZING = require_freezing();
var REQUIRED = false;
var METADATA = uid("meta");
var id = 0;
var setMetadata = function(it) {
defineProperty(it, METADATA, { value: {
objectID: "O" + id++,
// object ID
weakData: {}
// weak collections IDs
} });
};
var fastKey = function(it, create) {
if (!isObject2(it)) return typeof it == "symbol" ? it : (typeof it == "string" ? "S" : "P") + it;
if (!hasOwn(it, METADATA)) {
if (!isExtensible(it)) return "F";
if (!create) return "E";
setMetadata(it);
}
return it[METADATA].objectID;
};
var getWeakData = function(it, create) {
if (!hasOwn(it, METADATA)) {
if (!isExtensible(it)) return true;
if (!create) return false;
setMetadata(it);
}
return it[METADATA].weakData;
};
var onFreeze = function(it) {
if (FREEZING && REQUIRED && isExtensible(it) && !hasOwn(it, METADATA)) setMetadata(it);
return it;
};
var enable = function() {
meta.enable = function() {
};
REQUIRED = true;
var getOwnPropertyNames = getOwnPropertyNamesModule.f;
var splice = uncurryThis([].splice);
var test = {};
test[METADATA] = 1;
if (getOwnPropertyNames(test).length) {
getOwnPropertyNamesModule.f = function(it) {
var result = getOwnPropertyNames(it);
for (var i = 0, length = result.length; i < length; i++) {
if (result[i] === METADATA) {
splice(result, i, 1);
break;
}
}
return result;
};
$({ target: "Object", stat: true, forced: true }, {
getOwnPropertyNames: getOwnPropertyNamesExternalModule.f
});
}
};
var meta = module2.exports = {
enable,
fastKey,
getWeakData,
onFreeze
};
hiddenKeys[METADATA] = true;
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/collection.js
var require_collection = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/collection.js"(exports2, module2) {
"use strict";
var $ = require_export();
var globalThis2 = require_global_this();
var uncurryThis = require_function_uncurry_this();
var isForced = require_is_forced();
var defineBuiltIn = require_define_built_in();
var InternalMetadataModule = require_internal_metadata();
var iterate = require_iterate();
var anInstance = require_an_instance();
var isCallable = require_is_callable();
var isNullOrUndefined = require_is_null_or_undefined();
var isObject2 = require_is_object();
var fails = require_fails();
var checkCorrectnessOfIteration = require_check_correctness_of_iteration();
var setToStringTag = require_set_to_string_tag();
var inheritIfRequired = require_inherit_if_required();
module2.exports = function(CONSTRUCTOR_NAME, wrapper, common) {
var IS_MAP = CONSTRUCTOR_NAME.indexOf("Map") !== -1;
var IS_WEAK = CONSTRUCTOR_NAME.indexOf("Weak") !== -1;
var ADDER = IS_MAP ? "set" : "add";
var NativeConstructor = globalThis2[CONSTRUCTOR_NAME];
var NativePrototype = NativeConstructor && NativeConstructor.prototype;
var Constructor = NativeConstructor;
var exported = {};
var fixMethod = function(KEY) {
var uncurriedNativeMethod = uncurryThis(NativePrototype[KEY]);
defineBuiltIn(
NativePrototype,
KEY,
KEY === "add" ? function add(value) {
uncurriedNativeMethod(this, value === 0 ? 0 : value);
return this;
} : KEY === "delete" ? function(key) {
return IS_WEAK && !isObject2(key) ? false : uncurriedNativeMethod(this, key === 0 ? 0 : key);
} : KEY === "get" ? function get2(key) {
return IS_WEAK && !isObject2(key) ? void 0 : uncurriedNativeMethod(this, key === 0 ? 0 : key);
} : KEY === "has" ? function has(key) {
return IS_WEAK && !isObject2(key) ? false : uncurriedNativeMethod(this, key === 0 ? 0 : key);
} : function set(key, value) {
uncurriedNativeMethod(this, key === 0 ? 0 : key, value);
return this;
}
);
};
var REPLACE = isForced(
CONSTRUCTOR_NAME,
!isCallable(NativeConstructor) || !(IS_WEAK || NativePrototype.forEach && !fails(function() {
new NativeConstructor().entries().next();
}))
);
if (REPLACE) {
Constructor = common.getConstructor(wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER);
InternalMetadataModule.enable();
} else if (isForced(CONSTRUCTOR_NAME, true)) {
var instance = new Constructor();
var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) !== instance;
var THROWS_ON_PRIMITIVES = fails(function() {
instance.has(1);
});
var ACCEPT_ITERABLES = checkCorrectnessOfIteration(function(iterable) {
new NativeConstructor(iterable);
});
var BUGGY_ZERO = !IS_WEAK && fails(function() {
var $instance = new NativeConstructor();
var index = 5;
while (index--) $instance[ADDER](index, index);
return !$instance.has(-0);
});
if (!ACCEPT_ITERABLES) {
Constructor = wrapper(function(dummy, iterable) {
anInstance(dummy, NativePrototype);
var that = inheritIfRequired(new NativeConstructor(), dummy, Constructor);
if (!isNullOrUndefined(iterable)) iterate(iterable, that[ADDER], { that, AS_ENTRIES: IS_MAP });
return that;
});
Constructor.prototype = NativePrototype;
NativePrototype.constructor = Constructor;
}
if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {
fixMethod("delete");
fixMethod("has");
IS_MAP && fixMethod("get");
}
if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);
if (IS_WEAK && NativePrototype.clear) delete NativePrototype.clear;
}
exported[CONSTRUCTOR_NAME] = Constructor;
$({ global: true, constructor: true, forced: Constructor !== NativeConstructor }, exported);
setToStringTag(Constructor, CONSTRUCTOR_NAME);
if (!IS_WEAK) common.setStrong(Constructor, CONSTRUCTOR_NAME, IS_MAP);
return Constructor;
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/set-species.js
var require_set_species = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/set-species.js"(exports2, module2) {
"use strict";
var getBuiltIn = require_get_built_in();
var defineBuiltInAccessor = require_define_built_in_accessor();
var wellKnownSymbol = require_well_known_symbol();
var DESCRIPTORS = require_descriptors();
var SPECIES = wellKnownSymbol("species");
module2.exports = function(CONSTRUCTOR_NAME) {
var Constructor = getBuiltIn(CONSTRUCTOR_NAME);
if (DESCRIPTORS && Constructor && !Constructor[SPECIES]) {
defineBuiltInAccessor(Constructor, SPECIES, {
configurable: true,
get: function() {
return this;
}
});
}
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/collection-strong.js
var require_collection_strong = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/collection-strong.js"(exports2, module2) {
"use strict";
var create = require_object_create();
var defineBuiltInAccessor = require_define_built_in_accessor();
var defineBuiltIns = require_define_built_ins();
var bind = require_function_bind_context();
var anInstance = require_an_instance();
var isNullOrUndefined = require_is_null_or_undefined();
var iterate = require_iterate();
var defineIterator = require_iterator_define();
var createIterResultObject = require_create_iter_result_object();
var setSpecies = require_set_species();
var DESCRIPTORS = require_descriptors();
var fastKey = require_internal_metadata().fastKey;
var InternalStateModule = require_internal_state();
var setInternalState = InternalStateModule.set;
var internalStateGetterFor = InternalStateModule.getterFor;
module2.exports = {
getConstructor: function(wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER) {
var Constructor = wrapper(function(that, iterable) {
anInstance(that, Prototype);
setInternalState(that, {
type: CONSTRUCTOR_NAME,
index: create(null),
first: null,
last: null,
size: 0
});
if (!DESCRIPTORS) that.size = 0;
if (!isNullOrUndefined(iterable)) iterate(iterable, that[ADDER], { that, AS_ENTRIES: IS_MAP });
});
var Prototype = Constructor.prototype;
var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME);
var define = function(that, key, value) {
var state = getInternalState(that);
var entry = getEntry(that, key);
var previous, index;
if (entry) {
entry.value = value;
} else {
state.last = entry = {
index: index = fastKey(key, true),
key,
value,
previous: previous = state.last,
next: null,
removed: false
};
if (!state.first) state.first = entry;
if (previous) previous.next = entry;
if (DESCRIPTORS) state.size++;
else that.size++;
if (index !== "F") state.index[index] = entry;
}
return that;
};
var getEntry = function(that, key) {
var state = getInternalState(that);
var index = fastKey(key);
var entry;
if (index !== "F") return state.index[index];
for (entry = state.first; entry; entry = entry.next) {
if (entry.key === key) return entry;
}
};
defineBuiltIns(Prototype, {
// `{ Map, Set }.prototype.clear()` methods
// https://tc39.es/ecma262/#sec-map.prototype.clear
// https://tc39.es/ecma262/#sec-set.prototype.clear
clear: function clear() {
var that = this;
var state = getInternalState(that);
var entry = state.first;
while (entry) {
entry.removed = true;
if (entry.previous) entry.previous = entry.previous.next = null;
entry = entry.next;
}
state.first = state.last = null;
state.index = create(null);
if (DESCRIPTORS) state.size = 0;
else that.size = 0;
},
// `{ Map, Set }.prototype.delete(key)` methods
// https://tc39.es/ecma262/#sec-map.prototype.delete
// https://tc39.es/ecma262/#sec-set.prototype.delete
"delete": function(key) {
var that = this;
var state = getInternalState(that);
var entry = getEntry(that, key);
if (entry) {
var next = entry.next;
var prev = entry.previous;
delete state.index[entry.index];
entry.removed = true;
if (prev) prev.next = next;
if (next) next.previous = prev;
if (state.first === entry) state.first = next;
if (state.last === entry) state.last = prev;
if (DESCRIPTORS) state.size--;
else that.size--;
}
return !!entry;
},
// `{ Map, Set }.prototype.forEach(callbackfn, thisArg = undefined)` methods
// https://tc39.es/ecma262/#sec-map.prototype.foreach
// https://tc39.es/ecma262/#sec-set.prototype.foreach
forEach: function forEach2(callbackfn) {
var state = getInternalState(this);
var boundFunction = bind(callbackfn, arguments.length > 1 ? arguments[1] : void 0);
var entry;
while (entry = entry ? entry.next : state.first) {
boundFunction(entry.value, entry.key, this);
while (entry && entry.removed) entry = entry.previous;
}
},
// `{ Map, Set}.prototype.has(key)` methods
// https://tc39.es/ecma262/#sec-map.prototype.has
// https://tc39.es/ecma262/#sec-set.prototype.has
has: function has(key) {
return !!getEntry(this, key);
}
});
defineBuiltIns(Prototype, IS_MAP ? {
// `Map.prototype.get(key)` method
// https://tc39.es/ecma262/#sec-map.prototype.get
get: function get2(key) {
var entry = getEntry(this, key);
return entry && entry.value;
},
// `Map.prototype.set(key, value)` method
// https://tc39.es/ecma262/#sec-map.prototype.set
set: function set(key, value) {
return define(this, key === 0 ? 0 : key, value);
}
} : {
// `Set.prototype.add(value)` method
// https://tc39.es/ecma262/#sec-set.prototype.add
add: function add(value) {
return define(this, value = value === 0 ? 0 : value, value);
}
});
if (DESCRIPTORS) defineBuiltInAccessor(Prototype, "size", {
configurable: true,
get: function() {
return getInternalState(this).size;
}
});
return Constructor;
},
setStrong: function(Constructor, CONSTRUCTOR_NAME, IS_MAP) {
var ITERATOR_NAME = CONSTRUCTOR_NAME + " Iterator";
var getInternalCollectionState = internalStateGetterFor(CONSTRUCTOR_NAME);
var getInternalIteratorState = internalStateGetterFor(ITERATOR_NAME);
defineIterator(Constructor, CONSTRUCTOR_NAME, function(iterated, kind) {
setInternalState(this, {
type: ITERATOR_NAME,
target: iterated,
state: getInternalCollectionState(iterated),
kind,
last: null
});
}, function() {
var state = getInternalIteratorState(this);
var kind = state.kind;
var entry = state.last;
while (entry && entry.removed) entry = entry.previous;
if (!state.target || !(state.last = entry = entry ? entry.next : state.state.first)) {
state.target = null;
return createIterResultObject(void 0, true);
}
if (kind === "keys") return createIterResultObject(entry.key, false);
if (kind === "values") return createIterResultObject(entry.value, false);
return createIterResultObject([entry.key, entry.value], false);
}, IS_MAP ? "entries" : "values", !IS_MAP, true);
setSpecies(CONSTRUCTOR_NAME);
}
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.map.constructor.js
var require_es_map_constructor = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.map.constructor.js"() {
"use strict";
var collection = require_collection();
var collectionStrong = require_collection_strong();
collection("Map", function(init) {
return function Map2() {
return init(this, arguments.length ? arguments[0] : void 0);
};
}, collectionStrong);
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.map.js
var require_es_map = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.map.js"() {
"use strict";
require_es_map_constructor();
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.object.define-properties.js
var require_es_object_define_properties = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.object.define-properties.js"() {
"use strict";
var $ = require_export();
var DESCRIPTORS = require_descriptors();
var defineProperties = require_object_define_properties().f;
$({ target: "Object", stat: true, forced: Object.defineProperties !== defineProperties, sham: !DESCRIPTORS }, {
defineProperties
});
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.object.define-property.js
var require_es_object_define_property = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.object.define-property.js"() {
"use strict";
var $ = require_export();
var DESCRIPTORS = require_descriptors();
var defineProperty = require_object_define_property().f;
$({ target: "Object", stat: true, forced: Object.defineProperty !== defineProperty, sham: !DESCRIPTORS }, {
defineProperty
});
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.object.get-own-property-descriptor.js
var require_es_object_get_own_property_descriptor = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.object.get-own-property-descriptor.js"() {
"use strict";
var $ = require_export();
var fails = require_fails();
var toIndexedObject = require_to_indexed_object();
var nativeGetOwnPropertyDescriptor = require_object_get_own_property_descriptor().f;
var DESCRIPTORS = require_descriptors();
var FORCED = !DESCRIPTORS || fails(function() {
nativeGetOwnPropertyDescriptor(1);
});
$({ target: "Object", stat: true, forced: FORCED, sham: !DESCRIPTORS }, {
getOwnPropertyDescriptor: function getOwnPropertyDescriptor(it, key) {
return nativeGetOwnPropertyDescriptor(toIndexedObject(it), key);
}
});
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.object.get-own-property-descriptors.js
var require_es_object_get_own_property_descriptors = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.object.get-own-property-descriptors.js"() {
"use strict";
var $ = require_export();
var DESCRIPTORS = require_descriptors();
var ownKeys2 = require_own_keys();
var toIndexedObject = require_to_indexed_object();
var getOwnPropertyDescriptorModule = require_object_get_own_property_descriptor();
var createProperty = require_create_property();
$({ target: "Object", stat: true, sham: !DESCRIPTORS }, {
getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {
var O = toIndexedObject(object);
var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;
var keys2 = ownKeys2(O);
var result = {};
var index = 0;
var key, descriptor;
while (keys2.length > index) {
descriptor = getOwnPropertyDescriptor(O, key = keys2[index++]);
if (descriptor !== void 0) createProperty(result, key, descriptor);
}
return result;
}
});
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.object.get-own-property-names.js
var require_es_object_get_own_property_names = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.object.get-own-property-names.js"() {
"use strict";
var $ = require_export();
var fails = require_fails();
var getOwnPropertyNames = require_object_get_own_property_names_external().f;
var FAILS_ON_PRIMITIVES = fails(function() {
return !Object.getOwnPropertyNames(1);
});
$({ target: "Object", stat: true, forced: FAILS_ON_PRIMITIVES }, {
getOwnPropertyNames
});
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.object.keys.js
var require_es_object_keys = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.object.keys.js"() {
"use strict";
var $ = require_export();
var toObject = require_to_object();
var nativeKeys = require_object_keys();
var fails = require_fails();
var FAILS_ON_PRIMITIVES = fails(function() {
nativeKeys(1);
});
$({ target: "Object", stat: true, forced: FAILS_ON_PRIMITIVES }, {
keys: function keys2(it) {
return nativeKeys(toObject(it));
}
});
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.object.seal.js
var require_es_object_seal = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.object.seal.js"() {
"use strict";
var $ = require_export();
var isObject2 = require_is_object();
var onFreeze = require_internal_metadata().onFreeze;
var FREEZING = require_freezing();
var fails = require_fails();
var $seal = Object.seal;
var FAILS_ON_PRIMITIVES = fails(function() {
$seal(1);
});
$({ target: "Object", stat: true, forced: FAILS_ON_PRIMITIVES, sham: !FREEZING }, {
seal: function seal(it) {
return $seal && isObject2(it) ? $seal(onFreeze(it)) : it;
}
});
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/object-to-string.js
var require_object_to_string = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/object-to-string.js"(exports2, module2) {
"use strict";
var TO_STRING_TAG_SUPPORT = require_to_string_tag_support();
var classof = require_classof();
module2.exports = TO_STRING_TAG_SUPPORT ? {}.toString : function toString() {
return "[object " + classof(this) + "]";
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.object.to-string.js
var require_es_object_to_string = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.object.to-string.js"() {
"use strict";
var TO_STRING_TAG_SUPPORT = require_to_string_tag_support();
var defineBuiltIn = require_define_built_in();
var toString = require_object_to_string();
if (!TO_STRING_TAG_SUPPORT) {
defineBuiltIn(Object.prototype, "toString", toString, { unsafe: true });
}
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/regexp-sticky-helpers.js
var require_regexp_sticky_helpers = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/regexp-sticky-helpers.js"(exports2, module2) {
"use strict";
var fails = require_fails();
var globalThis2 = require_global_this();
var $RegExp = globalThis2.RegExp;
var UNSUPPORTED_Y = fails(function() {
var re = $RegExp("a", "y");
re.lastIndex = 2;
return re.exec("abcd") !== null;
});
var MISSED_STICKY = UNSUPPORTED_Y || fails(function() {
return !$RegExp("a", "y").sticky;
});
var BROKEN_CARET = UNSUPPORTED_Y || fails(function() {
var re = $RegExp("^r", "gy");
re.lastIndex = 2;
return re.exec("str") !== null;
});
module2.exports = {
BROKEN_CARET,
MISSED_STICKY,
UNSUPPORTED_Y
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/regexp-unsupported-dot-all.js
var require_regexp_unsupported_dot_all = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/regexp-unsupported-dot-all.js"(exports2, module2) {
"use strict";
var fails = require_fails();
var globalThis2 = require_global_this();
var $RegExp = globalThis2.RegExp;
module2.exports = fails(function() {
var re = $RegExp(".", "s");
return !(re.dotAll && re.test("\n") && re.flags === "s");
});
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/regexp-unsupported-ncg.js
var require_regexp_unsupported_ncg = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/regexp-unsupported-ncg.js"(exports2, module2) {
"use strict";
var fails = require_fails();
var globalThis2 = require_global_this();
var $RegExp = globalThis2.RegExp;
module2.exports = fails(function() {
var re = $RegExp("(?<a>b)", "g");
return re.exec("b").groups.a !== "b" || "b".replace(re, "$<a>c") !== "bc";
});
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/regexp-exec.js
var require_regexp_exec = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/regexp-exec.js"(exports2, module2) {
"use strict";
var call = require_function_call();
var uncurryThis = require_function_uncurry_this();
var toString = require_to_string();
var regexpFlags = require_regexp_flags();
var stickyHelpers = require_regexp_sticky_helpers();
var shared = require_shared();
var create = require_object_create();
var getInternalState = require_internal_state().get;
var UNSUPPORTED_DOT_ALL = require_regexp_unsupported_dot_all();
var UNSUPPORTED_NCG = require_regexp_unsupported_ncg();
var nativeReplace = shared("native-string-replace", String.prototype.replace);
var nativeExec = RegExp.prototype.exec;
var patchedExec = nativeExec;
var charAt = uncurryThis("".charAt);
var indexOf = uncurryThis("".indexOf);
var replace = uncurryThis("".replace);
var stringSlice = uncurryThis("".slice);
var UPDATES_LAST_INDEX_WRONG = function() {
var re1 = /a/;
var re2 = /b*/g;
call(nativeExec, re1, "a");
call(nativeExec, re2, "a");
return re1.lastIndex !== 0 || re2.lastIndex !== 0;
}();
var UNSUPPORTED_Y = stickyHelpers.BROKEN_CARET;
var NPCG_INCLUDED = /()??/.exec("")[1] !== void 0;
var PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED || UNSUPPORTED_Y || UNSUPPORTED_DOT_ALL || UNSUPPORTED_NCG;
if (PATCH) {
patchedExec = function exec(string) {
var re = this;
var state = getInternalState(re);
var str = toString(string);
var raw = state.raw;
var result, reCopy, lastIndex, match, i, object, group;
if (raw) {
raw.lastIndex = re.lastIndex;
result = call(patchedExec, raw, str);
re.lastIndex = raw.lastIndex;
return result;
}
var groups = state.groups;
var sticky = UNSUPPORTED_Y && re.sticky;
var flags = call(regexpFlags, re);
var source = re.source;
var charsAdded = 0;
var strCopy = str;
if (sticky) {
flags = replace(flags, "y", "");
if (indexOf(flags, "g") === -1) {
flags += "g";
}
strCopy = stringSlice(str, re.lastIndex);
if (re.lastIndex > 0 && (!re.multiline || re.multiline && charAt(str, re.lastIndex - 1) !== "\n")) {
source = "(?: " + source + ")";
strCopy = " " + strCopy;
charsAdded++;
}
reCopy = new RegExp("^(?:" + source + ")", flags);
}
if (NPCG_INCLUDED) {
reCopy = new RegExp("^" + source + "$(?!\\s)", flags);
}
if (UPDATES_LAST_INDEX_WRONG) lastIndex = re.lastIndex;
match = call(nativeExec, sticky ? reCopy : re, strCopy);
if (sticky) {
if (match) {
match.input = stringSlice(match.input, charsAdded);
match[0] = stringSlice(match[0], charsAdded);
match.index = re.lastIndex;
re.lastIndex += match[0].length;
} else re.lastIndex = 0;
} else if (UPDATES_LAST_INDEX_WRONG && match) {
re.lastIndex = re.global ? match.index + match[0].length : lastIndex;
}
if (NPCG_INCLUDED && match && match.length > 1) {
call(nativeReplace, match[0], reCopy, function() {
for (i = 1; i < arguments.length - 2; i++) {
if (arguments[i] === void 0) match[i] = void 0;
}
});
}
if (match && groups) {
match.groups = object = create(null);
for (i = 0; i < groups.length; i++) {
group = groups[i];
object[group[0]] = match[group[1]];
}
}
return match;
};
}
module2.exports = patchedExec;
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.regexp.exec.js
var require_es_regexp_exec = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.regexp.exec.js"() {
"use strict";
var $ = require_export();
var exec = require_regexp_exec();
$({ target: "RegExp", proto: true, forced: /./.exec !== exec }, {
exec
});
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.regexp.test.js
var require_es_regexp_test = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.regexp.test.js"() {
"use strict";
require_es_regexp_exec();
var $ = require_export();
var call = require_function_call();
var isCallable = require_is_callable();
var anObject = require_an_object();
var toString = require_to_string();
var DELEGATES_TO_EXEC = function() {
var execCalled = false;
var re = /[ac]/;
re.exec = function() {
execCalled = true;
return /./.exec.apply(this, arguments);
};
return re.test("abc") === true && execCalled;
}();
var nativeTest = /./.test;
$({ target: "RegExp", proto: true, forced: !DELEGATES_TO_EXEC }, {
test: function(S) {
var R = anObject(this);
var string = toString(S);
var exec = R.exec;
if (!isCallable(exec)) return call(nativeTest, R, string);
var result = call(exec, R, string);
if (result === null) return false;
anObject(result);
return true;
}
});
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/is-regexp.js
var require_is_regexp = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/is-regexp.js"(exports2, module2) {
"use strict";
var isObject2 = require_is_object();
var classof = require_classof_raw();
var wellKnownSymbol = require_well_known_symbol();
var MATCH = wellKnownSymbol("match");
module2.exports = function(it) {
var isRegExp;
return isObject2(it) && ((isRegExp = it[MATCH]) !== void 0 ? !!isRegExp : classof(it) === "RegExp");
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/not-a-regexp.js
var require_not_a_regexp = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/not-a-regexp.js"(exports2, module2) {
"use strict";
var isRegExp = require_is_regexp();
var $TypeError = TypeError;
module2.exports = function(it) {
if (isRegExp(it)) {
throw new $TypeError("The method doesn't accept regular expressions");
}
return it;
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/correct-is-regexp-logic.js
var require_correct_is_regexp_logic = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/correct-is-regexp-logic.js"(exports2, module2) {
"use strict";
var wellKnownSymbol = require_well_known_symbol();
var MATCH = wellKnownSymbol("match");
module2.exports = function(METHOD_NAME) {
var regexp = /./;
try {
"/./"[METHOD_NAME](regexp);
} catch (error1) {
try {
regexp[MATCH] = false;
return "/./"[METHOD_NAME](regexp);
} catch (error2) {
}
}
return false;
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.string.ends-with.js
var require_es_string_ends_with = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.string.ends-with.js"() {
"use strict";
var $ = require_export();
var uncurryThis = require_function_uncurry_this_clause();
var getOwnPropertyDescriptor = require_object_get_own_property_descriptor().f;
var toLength = require_to_length();
var toString = require_to_string();
var notARegExp = require_not_a_regexp();
var requireObjectCoercible = require_require_object_coercible();
var correctIsRegExpLogic = require_correct_is_regexp_logic();
var IS_PURE = require_is_pure();
var slice = uncurryThis("".slice);
var min = Math.min;
var CORRECT_IS_REGEXP_LOGIC = correctIsRegExpLogic("endsWith");
var MDN_POLYFILL_BUG = !IS_PURE && !CORRECT_IS_REGEXP_LOGIC && !!function() {
var descriptor = getOwnPropertyDescriptor(String.prototype, "endsWith");
return descriptor && !descriptor.writable;
}();
$({ target: "String", proto: true, forced: !MDN_POLYFILL_BUG && !CORRECT_IS_REGEXP_LOGIC }, {
endsWith: function endsWith(searchString) {
var that = toString(requireObjectCoercible(this));
notARegExp(searchString);
var endPosition = arguments.length > 1 ? arguments[1] : void 0;
var len = that.length;
var end = endPosition === void 0 ? len : min(toLength(endPosition), len);
var search = toString(searchString);
return slice(that, end - search.length, end) === search;
}
});
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.string.includes.js
var require_es_string_includes = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.string.includes.js"() {
"use strict";
var $ = require_export();
var uncurryThis = require_function_uncurry_this();
var notARegExp = require_not_a_regexp();
var requireObjectCoercible = require_require_object_coercible();
var toString = require_to_string();
var correctIsRegExpLogic = require_correct_is_regexp_logic();
var stringIndexOf = uncurryThis("".indexOf);
$({ target: "String", proto: true, forced: !correctIsRegExpLogic("includes") }, {
includes: function includes(searchString) {
return !!~stringIndexOf(
toString(requireObjectCoercible(this)),
toString(notARegExp(searchString)),
arguments.length > 1 ? arguments[1] : void 0
);
}
});
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/string-multibyte.js
var require_string_multibyte = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/string-multibyte.js"(exports2, module2) {
"use strict";
var uncurryThis = require_function_uncurry_this();
var toIntegerOrInfinity = require_to_integer_or_infinity();
var toString = require_to_string();
var requireObjectCoercible = require_require_object_coercible();
var charAt = uncurryThis("".charAt);
var charCodeAt = uncurryThis("".charCodeAt);
var stringSlice = uncurryThis("".slice);
var createMethod = function(CONVERT_TO_STRING) {
return function($this, pos) {
var S = toString(requireObjectCoercible($this));
var position = toIntegerOrInfinity(pos);
var size = S.length;
var first, second;
if (position < 0 || position >= size) return CONVERT_TO_STRING ? "" : void 0;
first = charCodeAt(S, position);
return first < 55296 || first > 56319 || position + 1 === size || (second = charCodeAt(S, position + 1)) < 56320 || second > 57343 ? CONVERT_TO_STRING ? charAt(S, position) : first : CONVERT_TO_STRING ? stringSlice(S, position, position + 2) : (first - 55296 << 10) + (second - 56320) + 65536;
};
};
module2.exports = {
// `String.prototype.codePointAt` method
// https://tc39.es/ecma262/#sec-string.prototype.codepointat
codeAt: createMethod(false),
// `String.prototype.at` method
// https://github.com/mathiasbynens/String.prototype.at
charAt: createMethod(true)
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.string.iterator.js
var require_es_string_iterator = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.string.iterator.js"() {
"use strict";
var charAt = require_string_multibyte().charAt;
var toString = require_to_string();
var InternalStateModule = require_internal_state();
var defineIterator = require_iterator_define();
var createIterResultObject = require_create_iter_result_object();
var STRING_ITERATOR = "String Iterator";
var setInternalState = InternalStateModule.set;
var getInternalState = InternalStateModule.getterFor(STRING_ITERATOR);
defineIterator(String, "String", function(iterated) {
setInternalState(this, {
type: STRING_ITERATOR,
string: toString(iterated),
index: 0
});
}, function next() {
var state = getInternalState(this);
var string = state.string;
var index = state.index;
var point;
if (index >= string.length) return createIterResultObject(void 0, true);
point = charAt(string, index);
state.index += point.length;
return createIterResultObject(point, false);
});
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/fix-regexp-well-known-symbol-logic.js
var require_fix_regexp_well_known_symbol_logic = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/fix-regexp-well-known-symbol-logic.js"(exports2, module2) {
"use strict";
require_es_regexp_exec();
var call = require_function_call();
var defineBuiltIn = require_define_built_in();
var regexpExec = require_regexp_exec();
var fails = require_fails();
var wellKnownSymbol = require_well_known_symbol();
var createNonEnumerableProperty = require_create_non_enumerable_property();
var SPECIES = wellKnownSymbol("species");
var RegExpPrototype = RegExp.prototype;
module2.exports = function(KEY, exec, FORCED, SHAM) {
var SYMBOL = wellKnownSymbol(KEY);
var DELEGATES_TO_SYMBOL = !fails(function() {
var O = {};
O[SYMBOL] = function() {
return 7;
};
return ""[KEY](O) !== 7;
});
var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL && !fails(function() {
var execCalled = false;
var re = /a/;
if (KEY === "split") {
re = {};
re.constructor = {};
re.constructor[SPECIES] = function() {
return re;
};
re.flags = "";
re[SYMBOL] = /./[SYMBOL];
}
re.exec = function() {
execCalled = true;
return null;
};
re[SYMBOL]("");
return !execCalled;
});
if (!DELEGATES_TO_SYMBOL || !DELEGATES_TO_EXEC || FORCED) {
var nativeRegExpMethod = /./[SYMBOL];
var methods = exec(SYMBOL, ""[KEY], function(nativeMethod, regexp, str, arg2, forceStringMethod) {
var $exec = regexp.exec;
if ($exec === regexpExec || $exec === RegExpPrototype.exec) {
if (DELEGATES_TO_SYMBOL && !forceStringMethod) {
return { done: true, value: call(nativeRegExpMethod, regexp, str, arg2) };
}
return { done: true, value: call(nativeMethod, str, regexp, arg2) };
}
return { done: false };
});
defineBuiltIn(String.prototype, KEY, methods[0]);
defineBuiltIn(RegExpPrototype, SYMBOL, methods[1]);
}
if (SHAM) createNonEnumerableProperty(RegExpPrototype[SYMBOL], "sham", true);
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/advance-string-index.js
var require_advance_string_index = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/advance-string-index.js"(exports2, module2) {
"use strict";
var charAt = require_string_multibyte().charAt;
module2.exports = function(S, index, unicode) {
return index + (unicode ? charAt(S, index).length : 1);
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/get-substitution.js
var require_get_substitution = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/get-substitution.js"(exports2, module2) {
"use strict";
var uncurryThis = require_function_uncurry_this();
var toObject = require_to_object();
var floor = Math.floor;
var charAt = uncurryThis("".charAt);
var replace = uncurryThis("".replace);
var stringSlice = uncurryThis("".slice);
var SUBSTITUTION_SYMBOLS = /\$([$&'`]|\d{1,2}|<[^>]*>)/g;
var SUBSTITUTION_SYMBOLS_NO_NAMED = /\$([$&'`]|\d{1,2})/g;
module2.exports = function(matched, str, position, captures, namedCaptures, replacement) {
var tailPos = position + matched.length;
var m = captures.length;
var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED;
if (namedCaptures !== void 0) {
namedCaptures = toObject(namedCaptures);
symbols = SUBSTITUTION_SYMBOLS;
}
return replace(replacement, symbols, function(match, ch) {
var capture;
switch (charAt(ch, 0)) {
case "$":
return "$";
case "&":
return matched;
case "`":
return stringSlice(str, 0, position);
case "'":
return stringSlice(str, tailPos);
case "<":
capture = namedCaptures[stringSlice(ch, 1, -1)];
break;
default:
var n = +ch;
if (n === 0) return match;
if (n > m) {
var f = floor(n / 10);
if (f === 0) return match;
if (f <= m) return captures[f - 1] === void 0 ? charAt(ch, 1) : captures[f - 1] + charAt(ch, 1);
return match;
}
capture = captures[n - 1];
}
return capture === void 0 ? "" : capture;
});
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/regexp-exec-abstract.js
var require_regexp_exec_abstract = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/internals/regexp-exec-abstract.js"(exports2, module2) {
"use strict";
var call = require_function_call();
var anObject = require_an_object();
var isCallable = require_is_callable();
var classof = require_classof_raw();
var regexpExec = require_regexp_exec();
var $TypeError = TypeError;
module2.exports = function(R, S) {
var exec = R.exec;
if (isCallable(exec)) {
var result = call(exec, R, S);
if (result !== null) anObject(result);
return result;
}
if (classof(R) === "RegExp") return call(regexpExec, R, S);
throw new $TypeError("RegExp#exec called on incompatible receiver");
};
}
});
// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.string.replace.js
var require_es_string_replace = __commonJS({
"node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.string.replace.js"() {
"use strict";
var apply = require_function_apply();
var call = require_function_call();
var uncurryThis = require_function_uncurry_this();
var fixRegExpWellKnownSymbolLogic = require_fix_regexp_well_known_symbol_logic();
var fails = require_fails();
var anObject = require_an_object();
var isCallable = require_is_callable();
var isNullOrUndefined = require_is_null_or_undefined();
var toIntegerOrInfinity = require_to_integer_or_infinity();
var toLength = require_to_length();
var toString = require_to_string();
var requireObjectCoercible = require_require_object_coercible();
var advanceStringIndex = require_advance_string_index();
var getMethod = require_get_method();
var getSubstitution = require_get_substitution();
var regExpExec = require_regexp_exec_abstract();
var wellKnownSymbol = require_well_known_symbol();
var REPLACE = wellKnownSymbol("replace");
var max = Math.max;
var min = Math.min;
var concat = uncurryThis([].concat);
var push = uncurryThis([].push);
var stringIndexOf = uncurryThis("".indexOf);
var stringSlice = uncurryThis("".slice);
var maybeToString = function(it) {
return it === void 0 ? it : String(it);
};
var REPLACE_KEEPS_$0 = function() {
return "a".replace(/./, "$0") === "$0";
}();
var REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE = function() {
if (/./[REPLACE]) {
return /./[REPLACE]("a", "$0") === "";
}
return false;
}();
var REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function() {
var re = /./;
re.exec = function() {
var result = [];
result.groups = { a: "7" };
return result;
};
return "".replace(re, "$<a>") !== "7";
});
fixRegExpWellKnownSymbolLogic("replace", function(_, nativeReplace, maybeCallNative) {
var UNSAFE_SUBSTITUTE = REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE ? "$" : "$0";
return [
// `String.prototype.replace` method
// https://tc39.es/ecma262/#sec-string.prototype.replace
function replace(searchValue, replaceValue) {
var O = requireObjectCoercible(this);
var replacer = isNullOrUndefined(searchValue) ? void 0 : getMethod(searchValue, REPLACE);
return replacer ? call(replacer, searchValue, O, replaceValue) : call(nativeReplace, toString(O), searchValue, replaceValue);
},
// `RegExp.prototype[@@replace]` method
// https://tc39.es/ecma262/#sec-regexp.prototype-@@replace
function(string, replaceValue) {
var rx = anObject(this);
var S = toString(string);
if (typeof replaceValue == "string" && stringIndexOf(replaceValue, UNSAFE_SUBSTITUTE) === -1 && stringIndexOf(replaceValue, "$<") === -1) {
var res = maybeCallNative(nativeReplace, rx, S, replaceValue);
if (res.done) return res.value;
}
var functionalReplace = isCallable(replaceValue);
if (!functionalReplace) replaceValue = toString(replaceValue);
var global2 = rx.global;
var fullUnicode;
if (global2) {
fullUnicode = rx.unicode;
rx.lastIndex = 0;
}
var results = [];
var result;
while (true) {
result = regExpExec(rx, S);
if (result === null) break;
push(results, result);
if (!global2) break;
var matchStr = toString(result[0]);
if (matchStr === "") rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);
}
var accumulatedResult = "";
var nextSourcePosition = 0;
for (var i = 0; i < results.length; i++) {
result = results[i];
var matched = toString(result[0]);
var position = max(min(toIntegerOrInfinity(result.index), S.length), 0);
var captures = [];
var replacement;
for (var j = 1; j < result.length; j++) push(captures, maybeToString(result[j]));
var namedCaptures = result.groups;
if (functionalReplace) {
var replacerArgs = concat([matched], captures, position, S);
if (namedCaptures !== void 0) push(replacerArgs, namedCaptures);
replacement = toString(apply(replaceValue, void 0, replacerArgs));
} else {
replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);
}
if (position >= nextSourcePosition) {
accumulatedResult += stringSlice(S, nextSourcePosition, position) + replacement;
nextSourcePosition = position + matched.length;
}
}
return accumulatedResult + stringSlice(S, nextSourcePosition);
}
];
}, !REPLACE_SUPPORTS_NAMED_GROUPS || !REPLACE_KEEPS_$0 || REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE);
}
});
// dist/JSX/JSX.js
require_es_symbol();
require_es_symbol_description();
require_es_symbol_to_primitive();
require_es_array_push();
require_es_date_to_primitive();
require_es_number_constructor();
require_es_regexp_to_string();
require_proxy_min();
require_NodeList_prototype_forEach();
init_NodeList_prototype_iterator();
require_Event();
require_CustomEvent();
require_DocumentFragment();
require_Element_prototype_matches();
require_HTMLTemplateElement();
require_MutationObserver();
require_Node_prototype_contains();
require_shadydom();
init_DOMTokenList2();
init_DOMTokenList_prototype_replace();
init_DOMTokenList_prototype_forEach();
init_DOMTokenList_prototype_iterator();
init_Element_prototype_remove();
init_CharacterData_prototype_remove();
require_es_symbol_iterator();
require_es_error_cause();
require_es_error_to_string();
require_es_array_filter();
require_es_array_for_each();
require_es_array_from();
require_es_array_includes();
require_es_array_index_of();
require_es_array_iterator();
require_es_array_join();
require_es_array_map();
require_es_array_reduce();
require_es_array_slice();
require_es_array_unshift();
require_es_iterator_constructor();
require_es_iterator_filter();
require_es_iterator_for_each();
require_es_iterator_map();
require_es_iterator_reduce();
require_es_map();
require_es_object_define_properties();
require_es_object_define_property();
require_es_object_get_own_property_descriptor();
require_es_object_get_own_property_descriptors();
require_es_object_get_own_property_names();
require_es_object_keys();
require_es_object_seal();
require_es_object_to_string();
require_es_regexp_exec();
require_es_regexp_test();
require_es_string_ends_with();
require_es_string_includes();
require_es_string_iterator();
require_es_string_replace();
var _Class;
var _excluded = ["children", "ref"];
var _excluded2 = ["children"];
var _excluded3 = ["children"];
var _excluded4 = ["ref"];
var _excluded5 = ["style"];
function _toConsumableArray(r) {
return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread();
}
function _nonIterableSpread() {
throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
}
function _iterableToArray(r) {
if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r);
}
function _arrayWithoutHoles(r) {
if (Array.isArray(r)) return _arrayLikeToArray(r);
}
function ownKeys(e, r) {
var t = Object.keys(e);
if (Object.getOwnPropertySymbols) {
var o = Object.getOwnPropertySymbols(e);
r && (o = o.filter(function(r2) {
return Object.getOwnPropertyDescriptor(e, r2).enumerable;
})), t.push.apply(t, o);
}
return t;
}
function _objectSpread(e) {
for (var r = 1; r < arguments.length; r++) {
var t = null != arguments[r] ? arguments[r] : {};
r % 2 ? ownKeys(Object(t), true).forEach(function(r2) {
_defineProperty(e, r2, t[r2]);
}) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function(r2) {
Object.defineProperty(e, r2, Object.getOwnPropertyDescriptor(t, r2));
});
}
return e;
}
function _classCallCheck(a, n) {
if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function");
}
function _defineProperties(e, r) {
for (var t = 0; t < r.length; t++) {
var o = r[t];
o.enumerable = o.enumerable || false, o.configurable = true, "value" in o && (o.writable = true), Object.defineProperty(e, _toPropertyKey(o.key), o);
}
}
function _createClass(e, r, t) {
return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: false }), e;
}
function _defineProperty(e, r, t) {
return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e;
}
function _toPropertyKey(t) {
var i = _toPrimitive(t, "string");
return "symbol" == _typeof(i) ? i : i + "";
}
function _toPrimitive(t, r) {
if ("object" != _typeof(t) || !t) return t;
var e = t[Symbol.toPrimitive];
if (void 0 !== e) {
var i = e.call(t, r || "default");
if ("object" != _typeof(i)) return i;
throw new TypeError("@@toPrimitive must return a primitive value.");
}
return ("string" === r ? String : Number)(t);
}
function _objectWithoutProperties(e, t) {
if (null == e) return {};
var o, r, i = _objectWithoutPropertiesLoose(e, t);
if (Object.getOwnPropertySymbols) {
var n = Object.getOwnPropertySymbols(e);
for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]);
}
return i;
}
function _objectWithoutPropertiesLoose(r, e) {
if (null == r) return {};
var t = {};
for (var n in r) if ({}.hasOwnProperty.call(r, n)) {
if (-1 !== e.indexOf(n)) continue;
t[n] = r[n];
}
return t;
}
function _createForOfIteratorHelper(r, e) {
var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"];
if (!t) {
if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) {
t && (r = t);
var _n = 0, F = function F2() {
};
return { s: F, n: function n() {
return _n >= r.length ? { done: true } : { done: false, value: r[_n++] };
}, e: function e2(r2) {
throw r2;
}, f: F };
}
throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
}
var o, a = true, u = false;
return { s: function s() {
t = t.call(r);
}, n: function n() {
var r2 = t.next();
return a = r2.done, r2;
}, e: function e2(r2) {
u = true, o = r2;
}, f: function f() {
try {
a || null == t.return || t.return();
} finally {
if (u) throw o;
}
} };
}
function _unsupportedIterableToArray(r, a) {
if (r) {
if ("string" == typeof r) return _arrayLikeToArray(r, a);
var t = {}.toString.call(r).slice(8, -1);
return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0;
}
}
function _arrayLikeToArray(r, a) {
(null == a || a > r.length) && (a = r.length);
for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];
return n;
}
function _typeof(o) {
"@babel/helpers - typeof";
return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(o2) {
return typeof o2;
} : function(o2) {
return o2 && "function" == typeof Symbol && o2.constructor === Symbol && o2 !== Symbol.prototype ? "symbol" : typeof o2;
}, _typeof(o);
}
var __defProp2 = Object.defineProperty;
var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor;
var __getOwnPropNames2 = Object.getOwnPropertyNames;
var __hasOwnProp2 = Object.prototype.hasOwnProperty;
var __export = function __export2(target, all) {
for (var name in all) __defProp2(target, name, {
get: all[name],
enumerable: true
});
};
var __copyProps2 = function __copyProps3(to, from, except, desc) {
if (from && _typeof(from) === "object" || typeof from === "function") {
var _iterator = _createForOfIteratorHelper(__getOwnPropNames2(from)), _step;
try {
var _loop = function _loop2() {
var key = _step.value;
if (!__hasOwnProp2.call(to, key) && key !== except) __defProp2(to, key, {
get: function get2() {
return from[key];
},
enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable
});
};
for (_iterator.s(); !(_step = _iterator.n()).done; ) {
_loop();
}
} catch (err) {
_iterator.e(err);
} finally {
_iterator.f();
}
}
return to;
};
var __toCommonJS2 = function __toCommonJS3(mod) {
return __copyProps2(__defProp2({}, "__esModule", {
value: true
}), mod);
};
//! src/JSX/JSX.ts
var JSX_exports = {};
__export(JSX_exports, {
Component: function Component() {
return _Component;
},
Fragment: function Fragment() {
return _Fragment;
},
PureComponent: function PureComponent() {
return _Component;
},
SVGNamespace: function SVGNamespace() {
return _SVGNamespace;
},
ShadowRoot: function ShadowRoot2() {
return _ShadowRoot;
},
StrictMode: function StrictMode() {
return _Fragment;
},
className: function className() {
return _className;
},
createElement: function createElement() {
return _createElement;
},
createFactory: function createFactory() {
return _createFactory;
},
createRef: function createRef() {
return _createRef;
},
forwardRef: function forwardRef() {
return _forwardRef;
},
h: function h() {
return _createElement;
},
isRef: function isRef() {
return _isRef;
},
jsx: function jsx() {
return _jsx;
},
jsxs: function jsxs() {
return _jsx;
},
memo: function memo() {
return identity;
},
preventDefault: function preventDefault() {
return _preventDefault;
},
stopPropagation: function stopPropagation() {
return _stopPropagation;
},
styled: function styled() {
return _styled;
},
useCallback: function useCallback() {
return identity;
},
useClassList: function useClassList() {
return _useClassList;
},
useImperativeHandle: function useImperativeHandle() {
return _useImperativeHandle;
},
useMemo: function useMemo() {
return _useMemo;
},
useRef: function useRef() {
return _createRef;
},
useText: function useText() {
return _useText;
}
});
module.exports = __toCommonJS2(JSX_exports);
var keys = Object.keys;
function identity(value) {
return value;
}
function isBoolean(val) {
return typeof val === "boolean";
}
function isElement(val) {
return val && typeof val.nodeType === "number";
}
function isString(val) {
return typeof val === "string";
}
function isNumber(val) {
return typeof val === "number";
}
function isObject(val) {
return _typeof(val) === "object" ? val !== null : isFunction(val);
}
function isFunction(val) {
return typeof val === "function";
}
function isComponentClass(Component2) {
return !!(Component2 && Component2.isComponent);
}
function isArrayLike(obj) {
return isObject(obj) && typeof obj.length === "number" && typeof obj.nodeType !== "number";
}
function forEach(value, fn) {
if (!value) return;
var _iterator2 = _createForOfIteratorHelper(keys(value)), _step2;
try {
for (_iterator2.s(); !(_step2 = _iterator2.n()).done; ) {
var key = _step2.value;
fn(value[key], key);
}
} catch (err) {
_iterator2.e(err);
} finally {
_iterator2.f();
}
}
function _createRef() {
return Object.seal({
current: null
});
}
function _isRef(maybeRef) {
return isObject(maybeRef) && "current" in maybeRef;
}
var isUnitlessNumber = {
animationIterationCount: 0,
borderImageOutset: 0,
borderImageSlice: 0,
borderImageWidth: 0,
boxFlex: 0,
boxFlexGroup: 0,
boxOrdinalGroup: 0,
columnCount: 0,
columns: 0,
flex: 0,
flexGrow: 0,
flexPositive: 0,
flexShrink: 0,
flexNegative: 0,
flexOrder: 0,
gridArea: 0,
gridRow: 0,
gridRowEnd: 0,
gridRowSpan: 0,
gridRowStart: 0,
gridColumn: 0,
gridColumnEnd: 0,
gridColumnSpan: 0,
gridColumnStart: 0,
fontWeight: 0,
lineClamp: 0,
lineHeight: 0,
opacity: 0,
order: 0,
orphans: 0,
tabSize: 0,
widows: 0,
zIndex: 0,
zoom: 0,
// SVG-related properties
fillOpacity: 0,
floodOpacity: 0,
stopOpacity: 0,
strokeDasharray: 0,
strokeDashoffset: 0,
strokeMiterlimit: 0,
strokeOpacity: 0,
strokeWidth: 0
};
function prefixKey(prefix, key) {
return prefix + key.charAt(0).toUpperCase() + key.substring(1);
}
var prefixes = ["Webkit", "ms", "Moz", "O"];
keys(isUnitlessNumber).forEach(function(prop) {
prefixes.forEach(function(prefix) {
isUnitlessNumber[prefixKey(prefix, prop)] = 0;
});
});
var jsxDomType = Symbol.for("jsx-dom:type");
var JsxDomType = /* @__PURE__ */ function(JsxDomType2) {
JsxDomType2["ShadowRoot"] = "ShadowRoot";
return JsxDomType2;
}(JsxDomType || {});
function _ShadowRoot(_ref) {
var children = _ref.children, ref = _ref.ref, attr2 = _objectWithoutProperties(_ref, _excluded);
return _defineProperty(_defineProperty(_defineProperty(_defineProperty({}, jsxDomType, JsxDomType.ShadowRoot), "ref", ref), "attr", attr2), "children", children);
}
function isShadowRoot(el) {
return el != null && el[jsxDomType] === JsxDomType.ShadowRoot;
}
var _SVGNamespace = "http://www.w3.org/2000/svg";
var XLinkNamespace = "http://www.w3.org/1999/xlink";
var XMLNamespace = "http://www.w3.org/XML/1998/namespace";
function isVisibleChild(value) {
return !isBoolean(value) && value != null;
}
function _className(value) {
if (Array.isArray(value)) {
return value.map(_className).filter(Boolean).join(" ");
} else if (isObject(value)) {
if (Symbol.iterator in value) {
return _className(Array.from(value));
}
return keys(value).filter(function(k) {
return value[k];
}).join(" ");
} else if (isVisibleChild(value)) {
return "" + value;
} else {
return "";
}
}
var svg = {
animate: 0,
circle: 0,
clipPath: 0,
defs: 0,
desc: 0,
ellipse: 0,
feBlend: 0,
feColorMatrix: 0,
feComponentTransfer: 0,
feComposite: 0,
feConvolveMatrix: 0,
feDiffuseLighting: 0,
feDisplacementMap: 0,
feDistantLight: 0,
feFlood: 0,
feFuncA: 0,
feFuncB: 0,
feFuncG: 0,
feFuncR: 0,
feGaussianBlur: 0,
feImage: 0,
feMerge: 0,
feMergeNode: 0,
feMorphology: 0,
feOffset: 0,
fePointLight: 0,
feSpecularLighting: 0,
feSpotLight: 0,
feTile: 0,
feTurbulence: 0,
filter: 0,
foreignObject: 0,
g: 0,
image: 0,
line: 0,
linearGradient: 0,
marker: 0,
mask: 0,
metadata: 0,
path: 0,
pattern: 0,
polygon: 0,
polyline: 0,
radialGradient: 0,
rect: 0,
stop: 0,
svg: 0,
switch: 0,
symbol: 0,
text: 0,
textPath: 0,
tspan: 0,
use: 0,
view: 0
};
var nonPresentationSVGAttributes = /^(a(ll|t|u)|base[FP]|c(al|lipPathU|on)|di|ed|ex|filter[RU]|g(lyphR|r)|ke|l(en|im)|ma(rker[HUW]|s)|n|pat|pr|point[^e]|re[^n]|s[puy]|st[^or]|ta|textL|vi|xC|y|z)/;
function _createFactory(tag) {
return _createElement.bind(null, tag);
}
function _Fragment(attr2) {
var fragment = document.createDocumentFragment();
appendChild(attr2.children, fragment);
return fragment;
}
var _Component = (_Class = /* @__PURE__ */ function() {
function _Component2(props) {
_classCallCheck(this, _Component2);
this.props = props;
}
return _createClass(_Component2, [{
key: "render",
value: function render() {
return null;
}
}]);
}(), _defineProperty(_Class, "isComponent", true), _Class);
function initComponentClass(Class, attr2, children) {
attr2 = _objectSpread(_objectSpread({}, attr2), {}, {
children
});
var instance = new Class(attr2);
var node = instance.render();
if ("ref" in attr2) {
attachRef(attr2.ref, instance);
}
return node;
}
function _jsx(tag, _ref) {
var children = _ref.children, attr2 = _objectWithoutProperties(_ref, _excluded2);
if (!attr2.namespaceURI && svg[tag] === 0) {
attr2 = _objectSpread(_objectSpread({}, attr2), {}, {
namespaceURI: _SVGNamespace
});
}
var node;
if (isString(tag)) {
node = attr2.namespaceURI ? document.createElementNS(attr2.namespaceURI, tag) : document.createElement(tag);
attributes(attr2, node);
appendChild(children, node);
if (node instanceof window.HTMLSelectElement && attr2.value != null) {
if (attr2.multiple === true && Array.isArray(attr2.value)) {
var values = attr2.value.map(function(value) {
return String(value);
});
node.querySelectorAll("option").forEach(function(option) {
return option.selected = values.includes(option.value);
});
} else {
node.value = attr2.value;
}
}
attachRef(attr2.ref, node);
} else if (isFunction(tag)) {
if (isObject(tag.defaultProps)) {
attr2 = _objectSpread(_objectSpread({}, tag.defaultProps), attr2);
}
node = isComponentClass(tag) ? initComponentClass(tag, attr2, children) : tag(_objectSpread(_objectSpread({}, attr2), {}, {
children
}));
} else {
throw new TypeError("Invalid JSX element type: ".concat(tag));
}
return node;
}
function _createElement(tag, attr2) {
for (var _len = arguments.length, children = new Array(_len > 2 ? _len - 2 : 0), _key2 = 2; _key2 < _len; _key2++) {
children[_key2 - 2] = arguments[_key2];
}
if (isString(attr2) || Array.isArray(attr2)) {
children.unshift(attr2);
attr2 = {};
}
attr2 = attr2 || {};
if (attr2.children != null && !children.length) {
var _attr = attr2;
children = _attr.children;
attr2 = _objectWithoutProperties(_attr, _excluded3);
_attr;
}
return _jsx(tag, _objectSpread(_objectSpread({}, attr2), {}, {
children
}), attr2.key);
}
function attachRef(ref, node) {
if (_isRef(ref)) {
ref.current = node;
} else if (isFunction(ref)) {
ref(node);
}
}
function appendChild(child, node) {
if (isArrayLike(child)) {
appendChildren(child, node);
} else if (isString(child) || isNumber(child)) {
appendChildToNode(document.createTextNode(child), node);
} else if (child === null) {
appendChildToNode(document.createComment(""), node);
} else if (isElement(child)) {
appendChildToNode(child, node);
} else if (isShadowRoot(child)) {
var shadowRoot = node.attachShadow(child.attr);
appendChild(child.children, shadowRoot);
attachRef(child.ref, shadowRoot);
}
}
function appendChildren(children, node) {
for (var _i = 0, _arr = _toConsumableArray(children); _i < _arr.length; _i++) {
var child = _arr[_i];
appendChild(child, node);
}
return node;
}
function appendChildToNode(child, node) {
if (node instanceof window.HTMLTemplateElement) {
node.content.appendChild(child);
} else {
node.appendChild(child);
}
}
function normalizeAttribute(s, separator) {
return s.replace(/[A-Z]/g, function(match) {
return separator + match.toLowerCase();
});
}
function style(node, value) {
if (value == null || value === false) ;
else if (Array.isArray(value)) {
value.forEach(function(v) {
return style(node, v);
});
} else if (isString(value)) {
node.setAttribute("style", value);
} else if (isObject(value)) {
forEach(value, function(val, key) {
if (key.indexOf("-") === 0) {
node.style.setProperty(key, val);
} else if (isNumber(val) && isUnitlessNumber[key] !== 0) {
node.style[key] = val + "px";
} else {
node.style[key] = val;
}
});
}
}
function attribute(key, value, node) {
switch (key) {
case "xlinkActuate":
case "xlinkArcrole":
case "xlinkHref":
case "xlinkRole":
case "xlinkShow":
case "xlinkTitle":
case "xlinkType":
attrNS(node, XLinkNamespace, normalizeAttribute(key, ":"), value);
return;
case "xmlnsXlink":
attr(node, normalizeAttribute(key, ":"), value);
return;
case "xmlBase":
case "xmlLang":
case "xmlSpace":
attrNS(node, XMLNamespace, normalizeAttribute(key, ":"), value);
return;
}
switch (key) {
case "htmlFor":
attr(node, "for", value);
return;
case "dataset":
forEach(value, function(dataValue, dataKey) {
if (dataValue != null) {
node.dataset[dataKey] = dataValue;
}
});
return;
case "innerHTML":
case "innerText":
case "textContent":
if (isVisibleChild(value)) {
node[key] = value;
}
return;
case "dangerouslySetInnerHTML":
if (isObject(value)) {
node.innerHTML = value["__html"];
}
return;
case "value":
if (value == null || node instanceof window.HTMLSelectElement) {
return;
} else if (node instanceof window.HTMLTextAreaElement) {
node.value = value;
return;
}
break;
case "spellCheck":
node.spellcheck = value;
return;
case "class":
case "className":
if (isFunction(value)) {
value(node);
} else {
attr(node, "class", _className(value));
}
return;
case "ref":
case "namespaceURI":
return;
case "style":
style(node, value);
return;
case "on":
case "onCapture":
forEach(value, function(eventHandler, eventName2) {
node.addEventListener(eventName2, eventHandler, key === "onCapture");
});
return;
}
if (isFunction(value)) {
if (key[0] === "o" && key[1] === "n") {
var attribute2 = key.toLowerCase();
var useCapture = attribute2.endsWith("capture");
if (attribute2 === "ondoubleclick") {
attribute2 = "ondblclick";
} else if (useCapture && attribute2 === "ondoubleclickcapture") {
attribute2 = "ondblclickcapture";
}
if (!useCapture && node[attribute2] === null) {
node[attribute2] = value;
} else if (useCapture) {
node.addEventListener(attribute2.substring(2, attribute2.length - 7), value, true);
} else {
var eventName;
if (attribute2 in window) {
var standardEventName = attribute2.substring(2);
eventName = standardEventName;
} else {
var customEventName = attribute2[2] + key.slice(3);
eventName = customEventName;
}
node.addEventListener(eventName, value);
}
}
} else if (isObject(value)) {
node[key] = value;
} else if (value === true) {
attr(node, key, "");
} else if (value !== false && value != null) {
if (node instanceof SVGElement && !nonPresentationSVGAttributes.test(key)) {
attr(node, normalizeAttribute(key, "-"), value);
} else {
attr(node, key, value);
}
}
}
function attr(node, key, value) {
node.setAttribute(key, value);
}
function attrNS(node, namespace, key, value) {
node.setAttributeNS(namespace, key, value);
}
function attributes(attr2, node) {
var _iterator3 = _createForOfIteratorHelper(keys(attr2)), _step3;
try {
for (_iterator3.s(); !(_step3 = _iterator3.n()).done; ) {
var key = _step3.value;
attribute(key, attr2[key], node);
}
} catch (err) {
_iterator3.e(err);
} finally {
_iterator3.f();
}
return node;
}
function _useText(initialValue) {
var text = new Text();
Object.defineProperty(text, "toString", {
value: function value() {
return this.textContent;
}
});
function setText(value) {
text.textContent = value;
}
if (initialValue != null) {
setText(initialValue);
}
return [text, setText];
}
function _useClassList(initialValue) {
var div = document.createElement("div");
if (initialValue != null) {
div.className = _className(initialValue);
}
var list = div.classList;
function ClassList(value) {
value.setAttribute("class", list.value);
list = value.classList;
}
Object.defineProperties(ClassList, Object.getOwnPropertyDescriptors({
get size() {
return list.length;
},
get value() {
return list.value;
},
add: function add() {
var _list;
(_list = list).add.apply(_list, arguments);
},
remove: function remove() {
var _list2;
(_list2 = list).remove.apply(_list2, arguments);
},
toggle: function toggle(token, force) {
list.toggle(token, force);
},
contains: function contains(token) {
return list.contains(token);
}
}));
return ClassList;
}
function _useMemo(factory) {
return factory();
}
function _forwardRef(render) {
return function(_ref) {
var ref = _ref.ref, props = _objectWithoutProperties(_ref, _excluded4);
return render(props, ref !== null && ref !== void 0 ? ref : _createRef());
};
}
function _useImperativeHandle(ref, init) {
attachRef(ref, init());
}
var cache = /* @__PURE__ */ new Map();
var createStyledComponent = function createStyledComponent2(name) {
return function(list) {
for (var _len = arguments.length, interpolations = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
interpolations[_key - 1] = arguments[_key];
}
return function(_ref) {
var style2 = _ref.style, props = _objectWithoutProperties(_ref, _excluded5);
var lastIndex = list.length - 1;
var css = list.slice(0, lastIndex).reduce(function(p, s, i) {
var interpolation = interpolations[i];
var current = typeof interpolation === "function" ? interpolation(props) : interpolation;
return p + s + current;
}, "") + list[lastIndex];
return _createElement(name, _objectSpread({
style: [css, style2]
}, props));
};
};
};
var baseStyled = function baseStyled2(customComponent) {
return createStyledComponent(customComponent);
};
var _styled = /* @__PURE__ */ new Proxy(baseStyled, {
get: function get(_, name) {
return setIfAbsent(cache, name, function() {
return createStyledComponent(name);
});
}
});
function setIfAbsent(map, key, getValue) {
if (map.has(key)) {
return map.get(key);
} else {
var value = getValue(key);
map.set(key, value);
return value;
}
}
function _preventDefault(event) {
event.preventDefault();
return event;
}
function _stopPropagation(event) {
event.stopPropagation();
return event;
}
})();
/* </nowiki> */
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nbG9iYWwtdGhpcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ZhaWxzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVzY3JpcHRvcnMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2xhc3NvZi1yYXcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbmRleGVkLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1jYWxsYWJsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1idWlsdC1pbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbnZpcm9ubWVudC11c2VyLWFnZW50LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdjgtdmVyc2lvbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXN5bWJvbC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RyeS10by1zdHJpbmcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hLWNhbGxhYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LW1ldGhvZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29yZGluYXJ5LXRvLXByaW1pdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXB1cmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tb2JqZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3VpZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pZTgtZG9tLWRlZmluZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy92OC1wcm90b3R5cGUtZGVmaW5lLWJ1Zy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FuLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1uYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy93ZWFrLW1hcC1iYXNpYy1kZXRlY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zaGFyZWQta2V5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGlkZGVuLWtleXMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL21ha2UtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9tYXRoLXRydW5jLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tbGVuZ3RoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1pbmNsdWRlcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW51bS1idWcta2V5cy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL293bi1rZXlzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtZm9yY2VkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZXhwb3J0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2xhc3NvZi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLXN0cmluZy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1rZXlzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0aWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaHRtbC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1jcmVhdGUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1zbGljZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLWV4dGVybmFsLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLWFjY2Vzc29yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtd3JhcHBlZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3BhdGguanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zeW1ib2wtZGVmaW5lLXRvLXByaW1pdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLWNsYXVzZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLWFycmF5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtY29uc3RydWN0b3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNvbnN0cnVjdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jcmVhdGUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3ltYm9sLmNvbnN0cnVjdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc3ltYm9sLXJlZ2lzdHJ5LWRldGVjdGlvbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zeW1ib2wuZm9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN5bWJvbC5rZXktZm9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tYXBwbHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtanNvbi1yZXBsYWNlci1mdW5jdGlvbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5qc29uLnN0cmluZ2lmeS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN5bWJvbC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zeW1ib2wuZGVzY3JpcHRpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3ltYm9sLnRvLXByaW1pdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LXNldC1sZW5ndGguanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kb2VzLW5vdC1leGNlZWQtc2FmZS1pbnRlZ2VyLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnB1c2guanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kYXRlLXRvLXByaW1pdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5kYXRlLnRvLXByaW1pdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy1hY2Nlc3Nvci5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXBvc3NpYmxlLXByb3RvdHlwZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2EtcG9zc2libGUtcHJvdG90eXBlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LXNldC1wcm90b3R5cGUtb2YuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbmhlcml0LWlmLXJlcXVpcmVkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdGhpcy1udW1iZXItdmFsdWUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy93aGl0ZXNwYWNlcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3N0cmluZy10cmltLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLm51bWJlci5jb25zdHJ1Y3Rvci5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZ2V4cC1mbGFncy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZ2V4cC1nZXQtZmxhZ3MuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMucmVnZXhwLnRvLXN0cmluZy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vcHJveHktcG9seWZpbGxAMC4zLjIvbm9kZV9tb2R1bGVzL3Byb3h5LXBvbHlmaWxsL3Byb3h5Lm1pbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vQG1yaGVucnkrY29yZS13ZWJAMS4yLjQvbm9kZV9tb2R1bGVzL0BtcmhlbnJ5L2NvcmUtd2ViL21vZHVsZXMvTm9kZUxpc3QucHJvdG90eXBlLmZvckVhY2guanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL0BtcmhlbnJ5K2NvcmUtd2ViQDEuMi40L25vZGVfbW9kdWxlcy9AbXJoZW5yeS9jb3JlLXdlYi9oZWxwZXJzL19JdGVyYXRvci5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vQG1yaGVucnkrY29yZS13ZWJAMS4yLjQvbm9kZV9tb2R1bGVzL0BtcmhlbnJ5L2NvcmUtd2ViL2hlbHBlcnMvX0FycmF5SXRlcmF0b3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL0BtcmhlbnJ5K2NvcmUtd2ViQDEuMi40L25vZGVfbW9kdWxlcy9AbXJoZW5yeS9jb3JlLXdlYi9tb2R1bGVzL05vZGVMaXN0LnByb3RvdHlwZS5AQGl0ZXJhdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9AbXJoZW5yeStjb3JlLXdlYkAxLjIuNC9ub2RlX21vZHVsZXMvQG1yaGVucnkvY29yZS13ZWIvbW9kdWxlcy9FdmVudC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vQG1yaGVucnkrY29yZS13ZWJAMS4yLjQvbm9kZV9tb2R1bGVzL0BtcmhlbnJ5L2NvcmUtd2ViL21vZHVsZXMvQ3VzdG9tRXZlbnQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL0BtcmhlbnJ5K2NvcmUtd2ViQDEuMi40L25vZGVfbW9kdWxlcy9AbXJoZW5yeS9jb3JlLXdlYi9tb2R1bGVzL0RvY3VtZW50RnJhZ21lbnQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL0BtcmhlbnJ5K2NvcmUtd2ViQDEuMi40L25vZGVfbW9kdWxlcy9AbXJoZW5yeS9jb3JlLXdlYi9tb2R1bGVzL0VsZW1lbnQucHJvdG90eXBlLm1hdGNoZXMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL0BtcmhlbnJ5K2NvcmUtd2ViQDEuMi40L25vZGVfbW9kdWxlcy9AbXJoZW5yeS9jb3JlLXdlYi9tb2R1bGVzL0hUTUxUZW1wbGF0ZUVsZW1lbnQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL0BtcmhlbnJ5K2NvcmUtd2ViQDEuMi40L25vZGVfbW9kdWxlcy9AbXJoZW5yeS9jb3JlLXdlYi9tb2R1bGVzL011dGF0aW9uT2JzZXJ2ZXIuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL0BtcmhlbnJ5K2NvcmUtd2ViQDEuMi40L25vZGVfbW9kdWxlcy9AbXJoZW5yeS9jb3JlLXdlYi9tb2R1bGVzL05vZGUucHJvdG90eXBlLmNvbnRhaW5zLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9AbXJoZW5yeStjb3JlLXdlYkAxLjIuNC9ub2RlX21vZHVsZXMvQG1yaGVucnkvY29yZS13ZWIvbW9kdWxlcy9+c2hhZHlkb20uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL0BtcmhlbnJ5K2NvcmUtd2ViQDEuMi40L25vZGVfbW9kdWxlcy9AbXJoZW5yeS9jb3JlLXdlYi9oZWxwZXJzL19ET01Ub2tlbkxpc3QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL0BtcmhlbnJ5K2NvcmUtd2ViQDEuMi40L25vZGVfbW9kdWxlcy9AbXJoZW5yeS9jb3JlLXdlYi9tb2R1bGVzL0RPTVRva2VuTGlzdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vQG1yaGVucnkrY29yZS13ZWJAMS4yLjQvbm9kZV9tb2R1bGVzL0BtcmhlbnJ5L2NvcmUtd2ViL21vZHVsZXMvRE9NVG9rZW5MaXN0LnByb3RvdHlwZS5yZXBsYWNlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9AbXJoZW5yeStjb3JlLXdlYkAxLjIuNC9ub2RlX21vZHVsZXMvQG1yaGVucnkvY29yZS13ZWIvbW9kdWxlcy9ET01Ub2tlbkxpc3QucHJvdG90eXBlLmZvckVhY2guanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL0BtcmhlbnJ5K2NvcmUtd2ViQDEuMi40L25vZGVfbW9kdWxlcy9AbXJoZW5yeS9jb3JlLXdlYi9tb2R1bGVzL0RPTVRva2VuTGlzdC5wcm90b3R5cGUuQEBpdGVyYXRvci5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vQG1yaGVucnkrY29yZS13ZWJAMS4yLjQvbm9kZV9tb2R1bGVzL0BtcmhlbnJ5L2NvcmUtd2ViL2hlbHBlcnMvX211dGF0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9AbXJoZW5yeStjb3JlLXdlYkAxLjIuNC9ub2RlX21vZHVsZXMvQG1yaGVucnkvY29yZS13ZWIvbW9kdWxlcy9FbGVtZW50LnByb3RvdHlwZS5yZW1vdmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL0BtcmhlbnJ5K2NvcmUtd2ViQDEuMi40L25vZGVfbW9kdWxlcy9AbXJoZW5yeS9jb3JlLXdlYi9tb2R1bGVzL0NoYXJhY3RlckRhdGEucHJvdG90eXBlLnJlbW92ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zeW1ib2wuaXRlcmF0b3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9wcm94eS1hY2Nlc3Nvci5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL25vcm1hbGl6ZS1zdHJpbmctYXJndW1lbnQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbnN0YWxsLWVycm9yLWNhdXNlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZXJyb3Itc3RhY2stY2xlYXIuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lcnJvci1zdGFjay1pbnN0YWxsYWJsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Vycm9yLXN0YWNrLWluc3RhbGwuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy93cmFwLWVycm9yLWNvbnN0cnVjdG9yLXdpdGgtY2F1c2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuZXJyb3IuY2F1c2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lcnJvci10by1zdHJpbmcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuZXJyb3IudG8tc3RyaW5nLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWhhcy1zcGVjaWVzLXN1cHBvcnQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuZmlsdGVyLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWlzLXN0cmljdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LWZvci1lYWNoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmZvci1lYWNoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXRlcmF0b3ItY2xvc2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jYWxsLXdpdGgtc2FmZS1pdGVyYXRpb24tY2xvc2luZy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2l0ZXJhdG9ycy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLWFycmF5LWl0ZXJhdG9yLW1ldGhvZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1pdGVyYXRvci1tZXRob2QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtaXRlcmF0b3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1mcm9tLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2hlY2stY29ycmVjdG5lc3Mtb2YtaXRlcmF0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmZyb20uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hZGQtdG8tdW5zY29wYWJsZXMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuaW5jbHVkZXMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuaW5kZXgtb2YuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jb3JyZWN0LXByb3RvdHlwZS1nZXR0ZXIuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2l0ZXJhdG9ycy1jb3JlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXRlcmF0b3ItY3JlYXRlLWNvbnN0cnVjdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXRlcmF0b3ItZGVmaW5lLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY3JlYXRlLWl0ZXItcmVzdWx0LW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvci5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5qb2luLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5Lm1hcC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LXJlZHVjZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Vudmlyb25tZW50LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW52aXJvbm1lbnQtaXMtbm9kZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5yZWR1Y2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuc2xpY2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWxldGUtcHJvcGVydHktb3ItdGhyb3cuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkudW5zaGlmdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FuLWluc3RhbmNlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLml0ZXJhdG9yLmNvbnN0cnVjdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLWRpcmVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbnMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pdGVyYXRvci1jcmVhdGUtcHJveHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuaXRlcmF0b3IuZmlsdGVyLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXRlcmF0ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5pdGVyYXRvci5mb3ItZWFjaC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2l0ZXJhdG9yLW1hcC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5pdGVyYXRvci5tYXAuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuaXRlcmF0b3IucmVkdWNlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktYnVmZmVyLW5vbi1leHRlbnNpYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWlzLWV4dGVuc2libGUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mcmVlemluZy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ludGVybmFsLW1ldGFkYXRhLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY29sbGVjdGlvbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NldC1zcGVjaWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY29sbGVjdGlvbi1zdHJvbmcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMubWFwLmNvbnN0cnVjdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLm1hcC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QuZGVmaW5lLXByb3BlcnRpZXMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LmRlZmluZS1wcm9wZXJ0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3JzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC5nZXQtb3duLXByb3BlcnR5LW5hbWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC5rZXlzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC5zZWFsLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LXRvLXN0cmluZy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVnZXhwLXN0aWNreS1oZWxwZXJzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVnZXhwLXVuc3VwcG9ydGVkLWRvdC1hbGwuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZWdleHAtdW5zdXBwb3J0ZWQtbmNnLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVnZXhwLWV4ZWMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMucmVnZXhwLmV4ZWMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMucmVnZXhwLnRlc3QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1yZWdleHAuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9ub3QtYS1yZWdleHAuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jb3JyZWN0LWlzLXJlZ2V4cC1sb2dpYy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcuZW5kcy13aXRoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5pbmNsdWRlcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3N0cmluZy1tdWx0aWJ5dGUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLml0ZXJhdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZml4LXJlZ2V4cC13ZWxsLWtub3duLXN5bWJvbC1sb2dpYy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FkdmFuY2Utc3RyaW5nLWluZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LXN1YnN0aXR1dGlvbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZ2V4cC1leGVjLWFic3RyYWN0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5yZXBsYWNlLmpzIiwgInNyYy9KU1gvSlNYLnRzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9qc3gtZG9tQDguMS42L25vZGVfbW9kdWxlcy9qc3gtZG9tL2luZGV4LmpzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIndXNlIHN0cmljdCc7XG52YXIgY2hlY2sgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ICYmIGl0Lk1hdGggPT09IE1hdGggJiYgaXQ7XG59O1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvODYjaXNzdWVjb21tZW50LTExNTc1OTAyOFxubW9kdWxlLmV4cG9ydHMgPVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tZ2xvYmFsLXRoaXMgLS0gc2FmZVxuICBjaGVjayh0eXBlb2YgZ2xvYmFsVGhpcyA9PSAnb2JqZWN0JyAmJiBnbG9iYWxUaGlzKSB8fFxuICBjaGVjayh0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnICYmIHdpbmRvdykgfHxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFscyAtLSBzYWZlXG4gIGNoZWNrKHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIHNlbGYpIHx8XG4gIGNoZWNrKHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsKSB8fFxuICBjaGVjayh0eXBlb2YgdGhpcyA9PSAnb2JqZWN0JyAmJiB0aGlzKSB8fFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmMgLS0gZmFsbGJhY2tcbiAgKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0pKCkgfHwgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICEhZXhlYygpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG4vLyBEZXRlY3QgSUU4J3MgaW5jb21wbGV0ZSBkZWZpbmVQcm9wZXJ0eSBpbXBsZW1lbnRhdGlvblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sIDEsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9IH0pWzFdICE9PSA3O1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWZ1bmN0aW9uLXByb3RvdHlwZS1iaW5kIC0tIHNhZmVcbiAgdmFyIHRlc3QgPSAoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KS5iaW5kKCk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnMgLS0gc2FmZVxuICByZXR1cm4gdHlwZW9mIHRlc3QgIT0gJ2Z1bmN0aW9uJyB8fCB0ZXN0Lmhhc093blByb3BlcnR5KCdwcm90b3R5cGUnKTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfQklORCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZScpO1xuXG52YXIgY2FsbCA9IEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWZ1bmN0aW9uLXByb3RvdHlwZS1iaW5kIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX0JJTkQgPyBjYWxsLmJpbmQoY2FsbCkgOiBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBjYWxsLmFwcGx5KGNhbGwsIGFyZ3VtZW50cyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkcHJvcGVydHlJc0VudW1lcmFibGUgPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG4vLyBOYXNob3JuIH4gSkRLOCBidWdcbnZhciBOQVNIT1JOX0JVRyA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvciAmJiAhJHByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoeyAxOiAyIH0sIDEpO1xuXG4vLyBgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZWAgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5wcm90b3R5cGUucHJvcGVydHlpc2VudW1lcmFibGVcbmV4cG9ydHMuZiA9IE5BU0hPUk5fQlVHID8gZnVuY3Rpb24gcHJvcGVydHlJc0VudW1lcmFibGUoVikge1xuICB2YXIgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzLCBWKTtcbiAgcmV0dXJuICEhZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLmVudW1lcmFibGU7XG59IDogJHByb3BlcnR5SXNFbnVtZXJhYmxlO1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGJpdG1hcCwgdmFsdWUpIHtcbiAgcmV0dXJuIHtcbiAgICBlbnVtZXJhYmxlOiAhKGJpdG1hcCAmIDEpLFxuICAgIGNvbmZpZ3VyYWJsZTogIShiaXRtYXAgJiAyKSxcbiAgICB3cml0YWJsZTogIShiaXRtYXAgJiA0KSxcbiAgICB2YWx1ZTogdmFsdWVcbiAgfTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9CSU5EID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlJyk7XG5cbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbnZhciBjYWxsID0gRnVuY3Rpb25Qcm90b3R5cGUuY2FsbDtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1mdW5jdGlvbi1wcm90b3R5cGUtYmluZCAtLSBzYWZlXG52YXIgdW5jdXJyeVRoaXNXaXRoQmluZCA9IE5BVElWRV9CSU5EICYmIEZ1bmN0aW9uUHJvdG90eXBlLmJpbmQuYmluZChjYWxsLCBjYWxsKTtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfQklORCA/IHVuY3VycnlUaGlzV2l0aEJpbmQgOiBmdW5jdGlvbiAoZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gY2FsbC5hcHBseShmbiwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG52YXIgdG9TdHJpbmcgPSB1bmN1cnJ5VGhpcyh7fS50b1N0cmluZyk7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBzdHJpbmdTbGljZSh0b1N0cmluZyhpdCksIDgsIC0xKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcbnZhciBzcGxpdCA9IHVuY3VycnlUaGlzKCcnLnNwbGl0KTtcblxuLy8gZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBhbmQgbm9uLWVudW1lcmFibGUgb2xkIFY4IHN0cmluZ3Ncbm1vZHVsZS5leHBvcnRzID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyB0aHJvd3MgYW4gZXJyb3IgaW4gcmhpbm8sIHNlZSBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9yaGluby9pc3N1ZXMvMzQ2XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnMgLS0gc2FmZVxuICByZXR1cm4gISRPYmplY3QoJ3onKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKTtcbn0pID8gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBjbGFzc29mKGl0KSA9PT0gJ1N0cmluZycgPyBzcGxpdChpdCwgJycpIDogJE9iamVjdChpdCk7XG59IDogJE9iamVjdDtcbiIsICIndXNlIHN0cmljdCc7XG4vLyB3ZSBjYW4ndCB1c2UganVzdCBgaXQgPT0gbnVsbGAgc2luY2Ugb2YgYGRvY3VtZW50LmFsbGAgc3BlY2lhbCBjYXNlXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLUlzSFRNTEREQS1pbnRlcm5hbC1zbG90LWFlY1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ID09PSBudWxsIHx8IGl0ID09PSB1bmRlZmluZWQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYFJlcXVpcmVPYmplY3RDb2VyY2libGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZXF1aXJlb2JqZWN0Y29lcmNpYmxlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXNOdWxsT3JVbmRlZmluZWQoaXQpKSB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uIFwiICsgaXQpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIHRvT2JqZWN0IHdpdGggZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBzdHJpbmdzXG52YXIgSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbmRleGVkLW9iamVjdCcpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBJbmRleGVkT2JqZWN0KHJlcXVpcmVPYmplY3RDb2VyY2libGUoaXQpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1Jc0hUTUxEREEtaW50ZXJuYWwtc2xvdFxudmFyIGRvY3VtZW50QWxsID0gdHlwZW9mIGRvY3VtZW50ID09ICdvYmplY3QnICYmIGRvY3VtZW50LmFsbDtcblxuLy8gYElzQ2FsbGFibGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc2NhbGxhYmxlXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uby10eXBlb2YtdW5kZWZpbmVkIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG5tb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBkb2N1bWVudEFsbCA9PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudEFsbCAhPT0gdW5kZWZpbmVkID8gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT0gJ2Z1bmN0aW9uJyB8fCBhcmd1bWVudCA9PT0gZG9jdW1lbnRBbGw7XG59IDogZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT0gJ2Z1bmN0aW9uJztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnb2JqZWN0JyA/IGl0ICE9PSBudWxsIDogaXNDYWxsYWJsZShpdCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG52YXIgYUZ1bmN0aW9uID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiBpc0NhbGxhYmxlKGFyZ3VtZW50KSA/IGFyZ3VtZW50IDogdW5kZWZpbmVkO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZXNwYWNlLCBtZXRob2QpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPCAyID8gYUZ1bmN0aW9uKGdsb2JhbFRoaXNbbmFtZXNwYWNlXSkgOiBnbG9iYWxUaGlzW25hbWVzcGFjZV0gJiYgZ2xvYmFsVGhpc1tuYW1lc3BhY2VdW21ldGhvZF07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSB1bmN1cnJ5VGhpcyh7fS5pc1Byb3RvdHlwZU9mKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xuXG52YXIgbmF2aWdhdG9yID0gZ2xvYmFsVGhpcy5uYXZpZ2F0b3I7XG52YXIgdXNlckFnZW50ID0gbmF2aWdhdG9yICYmIG5hdmlnYXRvci51c2VyQWdlbnQ7XG5cbm1vZHVsZS5leHBvcnRzID0gdXNlckFnZW50ID8gU3RyaW5nKHVzZXJBZ2VudCkgOiAnJztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC11c2VyLWFnZW50Jyk7XG5cbnZhciBwcm9jZXNzID0gZ2xvYmFsVGhpcy5wcm9jZXNzO1xudmFyIERlbm8gPSBnbG9iYWxUaGlzLkRlbm87XG52YXIgdmVyc2lvbnMgPSBwcm9jZXNzICYmIHByb2Nlc3MudmVyc2lvbnMgfHwgRGVubyAmJiBEZW5vLnZlcnNpb247XG52YXIgdjggPSB2ZXJzaW9ucyAmJiB2ZXJzaW9ucy52ODtcbnZhciBtYXRjaCwgdmVyc2lvbjtcblxuaWYgKHY4KSB7XG4gIG1hdGNoID0gdjguc3BsaXQoJy4nKTtcbiAgLy8gaW4gb2xkIENocm9tZSwgdmVyc2lvbnMgb2YgVjggaXNuJ3QgVjggPSBDaHJvbWUgLyAxMFxuICAvLyBidXQgdGhlaXIgY29ycmVjdCB2ZXJzaW9ucyBhcmUgbm90IGludGVyZXN0aW5nIGZvciB1c1xuICB2ZXJzaW9uID0gbWF0Y2hbMF0gPiAwICYmIG1hdGNoWzBdIDwgNCA/IDEgOiArKG1hdGNoWzBdICsgbWF0Y2hbMV0pO1xufVxuXG4vLyBCcm93c2VyRlMgTm9kZUpTIGBwcm9jZXNzYCBwb2x5ZmlsbCBpbmNvcnJlY3RseSBzZXQgYC52OGAgdG8gYDAuMGBcbi8vIHNvIGNoZWNrIGB1c2VyQWdlbnRgIGV2ZW4gaWYgYC52OGAgZXhpc3RzLCBidXQgMFxuaWYgKCF2ZXJzaW9uICYmIHVzZXJBZ2VudCkge1xuICBtYXRjaCA9IHVzZXJBZ2VudC5tYXRjaCgvRWRnZVxcLyhcXGQrKS8pO1xuICBpZiAoIW1hdGNoIHx8IG1hdGNoWzFdID49IDc0KSB7XG4gICAgbWF0Y2ggPSB1c2VyQWdlbnQubWF0Y2goL0Nocm9tZVxcLyhcXGQrKS8pO1xuICAgIGlmIChtYXRjaCkgdmVyc2lvbiA9ICttYXRjaFsxXTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHZlcnNpb247XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tc3ltYm9sIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nICovXG52YXIgVjhfVkVSU0lPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC12OC12ZXJzaW9uJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG5cbnZhciAkU3RyaW5nID0gZ2xvYmFsVGhpcy5TdHJpbmc7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlzeW1ib2xzIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG5tb2R1bGUuZXhwb3J0cyA9ICEhT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgc3ltYm9sID0gU3ltYm9sKCdzeW1ib2wgZGV0ZWN0aW9uJyk7XG4gIC8vIENocm9tZSAzOCBTeW1ib2wgaGFzIGluY29ycmVjdCB0b1N0cmluZyBjb252ZXJzaW9uXG4gIC8vIGBnZXQtb3duLXByb3BlcnR5LXN5bWJvbHNgIHBvbHlmaWxsIHN5bWJvbHMgY29udmVydGVkIHRvIG9iamVjdCBhcmUgbm90IFN5bWJvbCBpbnN0YW5jZXNcbiAgLy8gbmI6IERvIG5vdCBjYWxsIGBTdHJpbmdgIGRpcmVjdGx5IHRvIGF2b2lkIHRoaXMgYmVpbmcgb3B0aW1pemVkIG91dCB0byBgc3ltYm9sKycnYCB3aGljaCB3aWxsLFxuICAvLyBvZiBjb3Vyc2UsIGZhaWwuXG4gIHJldHVybiAhJFN0cmluZyhzeW1ib2wpIHx8ICEoT2JqZWN0KHN5bWJvbCkgaW5zdGFuY2VvZiBTeW1ib2wpIHx8XG4gICAgLy8gQ2hyb21lIDM4LTQwIHN5bWJvbHMgYXJlIG5vdCBpbmhlcml0ZWQgZnJvbSBET00gY29sbGVjdGlvbnMgcHJvdG90eXBlcyB0byBpbnN0YW5jZXNcbiAgICAhU3ltYm9sLnNoYW0gJiYgVjhfVkVSU0lPTiAmJiBWOF9WRVJTSU9OIDwgNDE7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1zeW1ib2wgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmcgKi9cbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfU1lNQk9MICYmXG4gICFTeW1ib2wuc2hhbSAmJlxuICB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09ICdzeW1ib2wnO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBVU0VfU1lNQk9MX0FTX1VJRCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZCcpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcblxubW9kdWxlLmV4cG9ydHMgPSBVU0VfU1lNQk9MX0FTX1VJRCA/IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09ICdzeW1ib2wnO1xufSA6IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgJFN5bWJvbCA9IGdldEJ1aWx0SW4oJ1N5bWJvbCcpO1xuICByZXR1cm4gaXNDYWxsYWJsZSgkU3ltYm9sKSAmJiBpc1Byb3RvdHlwZU9mKCRTeW1ib2wucHJvdG90eXBlLCAkT2JqZWN0KGl0KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkU3RyaW5nID0gU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB0cnkge1xuICAgIHJldHVybiAkU3RyaW5nKGFyZ3VtZW50KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gJ09iamVjdCc7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgQXNzZXJ0OiBJc0NhbGxhYmxlKGFyZ3VtZW50KSBpcyB0cnVlYFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGlzQ2FsbGFibGUoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKHRyeVRvU3RyaW5nKGFyZ3VtZW50KSArICcgaXMgbm90IGEgZnVuY3Rpb24nKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQnKTtcblxuLy8gYEdldE1ldGhvZGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWdldG1ldGhvZFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoViwgUCkge1xuICB2YXIgZnVuYyA9IFZbUF07XG4gIHJldHVybiBpc051bGxPclVuZGVmaW5lZChmdW5jKSA/IHVuZGVmaW5lZCA6IGFDYWxsYWJsZShmdW5jKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBPcmRpbmFyeVRvUHJpbWl0aXZlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb3JkaW5hcnl0b3ByaW1pdGl2ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5wdXQsIHByZWYpIHtcbiAgdmFyIGZuLCB2YWw7XG4gIGlmIChwcmVmID09PSAnc3RyaW5nJyAmJiBpc0NhbGxhYmxlKGZuID0gaW5wdXQudG9TdHJpbmcpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICBpZiAoaXNDYWxsYWJsZShmbiA9IGlucHV0LnZhbHVlT2YpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICBpZiAocHJlZiAhPT0gJ3N0cmluZycgJiYgaXNDYWxsYWJsZShmbiA9IGlucHV0LnRvU3RyaW5nKSAmJiAhaXNPYmplY3QodmFsID0gY2FsbChmbiwgaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZmFsc2U7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgdHJ5IHtcbiAgICBkZWZpbmVQcm9wZXJ0eShnbG9iYWxUaGlzLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGdsb2JhbFRoaXNba2V5XSA9IHZhbHVlO1xuICB9IHJldHVybiB2YWx1ZTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBkZWZpbmVHbG9iYWxQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5Jyk7XG5cbnZhciBTSEFSRUQgPSAnX19jb3JlLWpzX3NoYXJlZF9fJztcbnZhciBzdG9yZSA9IG1vZHVsZS5leHBvcnRzID0gZ2xvYmFsVGhpc1tTSEFSRURdIHx8IGRlZmluZUdsb2JhbFByb3BlcnR5KFNIQVJFRCwge30pO1xuXG4oc3RvcmUudmVyc2lvbnMgfHwgKHN0b3JlLnZlcnNpb25zID0gW10pKS5wdXNoKHtcbiAgdmVyc2lvbjogJzMuNDEuMCcsXG4gIG1vZGU6IElTX1BVUkUgPyAncHVyZScgOiAnZ2xvYmFsJyxcbiAgY29weXJpZ2h0OiAnwqkgMjAxNC0yMDI1IERlbmlzIFB1c2hrYXJldiAoemxvaXJvY2sucnUpJyxcbiAgbGljZW5zZTogJ2h0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2Jsb2IvdjMuNDEuMC9MSUNFTlNFJyxcbiAgc291cmNlOiAnaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMnXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgc3RvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIHN0b3JlW2tleV0gfHwgKHN0b3JlW2tleV0gPSB2YWx1ZSB8fCB7fSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcblxuLy8gYFRvT2JqZWN0YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9vYmplY3Rcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiAkT2JqZWN0KHJlcXVpcmVPYmplY3RDb2VyY2libGUoYXJndW1lbnQpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xuXG52YXIgaGFzT3duUHJvcGVydHkgPSB1bmN1cnJ5VGhpcyh7fS5oYXNPd25Qcm9wZXJ0eSk7XG5cbi8vIGBIYXNPd25Qcm9wZXJ0eWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWhhc293bnByb3BlcnR5XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWhhc293biAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5oYXNPd24gfHwgZnVuY3Rpb24gaGFzT3duKGl0LCBrZXkpIHtcbiAgcmV0dXJuIGhhc093blByb3BlcnR5KHRvT2JqZWN0KGl0KSwga2V5KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG52YXIgaWQgPSAwO1xudmFyIHBvc3RmaXggPSBNYXRoLnJhbmRvbSgpO1xudmFyIHRvU3RyaW5nID0gdW5jdXJyeVRoaXMoMS4wLnRvU3RyaW5nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiAnU3ltYm9sKCcgKyAoa2V5ID09PSB1bmRlZmluZWQgPyAnJyA6IGtleSkgKyAnKV8nICsgdG9TdHJpbmcoKytpZCArIHBvc3RmaXgsIDM2KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG52YXIgVVNFX1NZTUJPTF9BU19VSUQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQnKTtcblxudmFyIFN5bWJvbCA9IGdsb2JhbFRoaXMuU3ltYm9sO1xudmFyIFdlbGxLbm93blN5bWJvbHNTdG9yZSA9IHNoYXJlZCgnd2tzJyk7XG52YXIgY3JlYXRlV2VsbEtub3duU3ltYm9sID0gVVNFX1NZTUJPTF9BU19VSUQgPyBTeW1ib2xbJ2ZvciddIHx8IFN5bWJvbCA6IFN5bWJvbCAmJiBTeW1ib2wud2l0aG91dFNldHRlciB8fCB1aWQ7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgaWYgKCFoYXNPd24oV2VsbEtub3duU3ltYm9sc1N0b3JlLCBuYW1lKSkge1xuICAgIFdlbGxLbm93blN5bWJvbHNTdG9yZVtuYW1lXSA9IE5BVElWRV9TWU1CT0wgJiYgaGFzT3duKFN5bWJvbCwgbmFtZSlcbiAgICAgID8gU3ltYm9sW25hbWVdXG4gICAgICA6IGNyZWF0ZVdlbGxLbm93blN5bWJvbCgnU3ltYm9sLicgKyBuYW1lKTtcbiAgfSByZXR1cm4gV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtc3ltYm9sJyk7XG52YXIgZ2V0TWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1tZXRob2QnKTtcbnZhciBvcmRpbmFyeVRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29yZGluYXJ5LXRvLXByaW1pdGl2ZScpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbnZhciBUT19QUklNSVRJVkUgPSB3ZWxsS25vd25TeW1ib2woJ3RvUHJpbWl0aXZlJyk7XG5cbi8vIGBUb1ByaW1pdGl2ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvcHJpbWl0aXZlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbnB1dCwgcHJlZikge1xuICBpZiAoIWlzT2JqZWN0KGlucHV0KSB8fCBpc1N5bWJvbChpbnB1dCkpIHJldHVybiBpbnB1dDtcbiAgdmFyIGV4b3RpY1RvUHJpbSA9IGdldE1ldGhvZChpbnB1dCwgVE9fUFJJTUlUSVZFKTtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKGV4b3RpY1RvUHJpbSkge1xuICAgIGlmIChwcmVmID09PSB1bmRlZmluZWQpIHByZWYgPSAnZGVmYXVsdCc7XG4gICAgcmVzdWx0ID0gY2FsbChleG90aWNUb1ByaW0sIGlucHV0LCBwcmVmKTtcbiAgICBpZiAoIWlzT2JqZWN0KHJlc3VsdCkgfHwgaXNTeW1ib2wocmVzdWx0KSkgcmV0dXJuIHJlc3VsdDtcbiAgICB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbiAgfVxuICBpZiAocHJlZiA9PT0gdW5kZWZpbmVkKSBwcmVmID0gJ251bWJlcic7XG4gIHJldHVybiBvcmRpbmFyeVRvUHJpbWl0aXZlKGlucHV0LCBwcmVmKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByaW1pdGl2ZScpO1xudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCcpO1xuXG4vLyBgVG9Qcm9wZXJ0eUtleWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvcHJvcGVydHlrZXlcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHZhciBrZXkgPSB0b1ByaW1pdGl2ZShhcmd1bWVudCwgJ3N0cmluZycpO1xuICByZXR1cm4gaXNTeW1ib2woa2V5KSA/IGtleSA6IGtleSArICcnO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgZG9jdW1lbnQgPSBnbG9iYWxUaGlzLmRvY3VtZW50O1xuLy8gdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgaXMgJ29iamVjdCcgaW4gb2xkIElFXG52YXIgRVhJU1RTID0gaXNPYmplY3QoZG9jdW1lbnQpICYmIGlzT2JqZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gRVhJU1RTID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChpdCkgOiB7fTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjcmVhdGVFbGVtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50Jyk7XG5cbi8vIFRoYW5rcyB0byBJRTggZm9yIGl0cyBmdW5ueSBkZWZpbmVQcm9wZXJ0eVxubW9kdWxlLmV4cG9ydHMgPSAhREVTQ1JJUFRPUlMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGNyZWF0ZUVsZW1lbnQoJ2RpdicpLCAnYScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH1cbiAgfSkuYSAhPT0gNztcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1wcm9wZXJ0eS1pcy1lbnVtZXJhYmxlJyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXknKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lJyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yXG5leHBvcnRzLmYgPSBERVNDUklQVE9SUyA/ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCkge1xuICBPID0gdG9JbmRleGVkT2JqZWN0KE8pO1xuICBQID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIGlmIChoYXNPd24oTywgUCkpIHJldHVybiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoIWNhbGwocHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUuZiwgTywgUCksIE9bUF0pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG4vLyBWOCB+IENocm9tZSAzNi1cbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMzMzRcbm1vZHVsZS5leHBvcnRzID0gREVTQ1JJUFRPUlMgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9LCAncHJvdG90eXBlJywge1xuICAgIHZhbHVlOiA0MixcbiAgICB3cml0YWJsZTogZmFsc2VcbiAgfSkucHJvdG90eXBlICE9PSA0Mjtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyICRTdHJpbmcgPSBTdHJpbmc7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYEFzc2VydDogVHlwZShhcmd1bWVudCkgaXMgT2JqZWN0YFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGlzT2JqZWN0KGFyZ3VtZW50KSkgcmV0dXJuIGFyZ3VtZW50O1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcigkU3RyaW5nKGFyZ3VtZW50KSArICcgaXMgbm90IGFuIG9iamVjdCcpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pZTgtZG9tLWRlZmluZScpO1xudmFyIFY4X1BST1RPVFlQRV9ERUZJTkVfQlVHID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Y4LXByb3RvdHlwZS1kZWZpbmUtYnVnJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXknKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbnZhciAkZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgRU5VTUVSQUJMRSA9ICdlbnVtZXJhYmxlJztcbnZhciBDT05GSUdVUkFCTEUgPSAnY29uZmlndXJhYmxlJztcbnZhciBXUklUQUJMRSA9ICd3cml0YWJsZSc7XG5cbi8vIGBPYmplY3QuZGVmaW5lUHJvcGVydHlgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydHlcbmV4cG9ydHMuZiA9IERFU0NSSVBUT1JTID8gVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmICh0eXBlb2YgTyA9PT0gJ2Z1bmN0aW9uJyAmJiBQID09PSAncHJvdG90eXBlJyAmJiAndmFsdWUnIGluIEF0dHJpYnV0ZXMgJiYgV1JJVEFCTEUgaW4gQXR0cmlidXRlcyAmJiAhQXR0cmlidXRlc1tXUklUQUJMRV0pIHtcbiAgICB2YXIgY3VycmVudCA9ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCk7XG4gICAgaWYgKGN1cnJlbnQgJiYgY3VycmVudFtXUklUQUJMRV0pIHtcbiAgICAgIE9bUF0gPSBBdHRyaWJ1dGVzLnZhbHVlO1xuICAgICAgQXR0cmlidXRlcyA9IHtcbiAgICAgICAgY29uZmlndXJhYmxlOiBDT05GSUdVUkFCTEUgaW4gQXR0cmlidXRlcyA/IEF0dHJpYnV0ZXNbQ09ORklHVVJBQkxFXSA6IGN1cnJlbnRbQ09ORklHVVJBQkxFXSxcbiAgICAgICAgZW51bWVyYWJsZTogRU5VTUVSQUJMRSBpbiBBdHRyaWJ1dGVzID8gQXR0cmlidXRlc1tFTlVNRVJBQkxFXSA6IGN1cnJlbnRbRU5VTUVSQUJMRV0sXG4gICAgICAgIHdyaXRhYmxlOiBmYWxzZVxuICAgICAgfTtcbiAgICB9XG4gIH0gcmV0dXJuICRkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKTtcbn0gOiAkZGVmaW5lUHJvcGVydHkgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gJGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIGlmICgnZ2V0JyBpbiBBdHRyaWJ1dGVzIHx8ICdzZXQnIGluIEF0dHJpYnV0ZXMpIHRocm93IG5ldyAkVHlwZUVycm9yKCdBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCcpO1xuICBpZiAoJ3ZhbHVlJyBpbiBBdHRyaWJ1dGVzKSBPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgcmV0dXJuIE87XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBERVNDUklQVE9SUyA/IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5TW9kdWxlLmYob2JqZWN0LCBrZXksIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCB2YWx1ZSkpO1xufSA6IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgcmV0dXJuIG9iamVjdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcblxudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyIGdldERlc2NyaXB0b3IgPSBERVNDUklQVE9SUyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG52YXIgRVhJU1RTID0gaGFzT3duKEZ1bmN0aW9uUHJvdG90eXBlLCAnbmFtZScpO1xuLy8gYWRkaXRpb25hbCBwcm90ZWN0aW9uIGZyb20gbWluaWZpZWQgLyBtYW5nbGVkIC8gZHJvcHBlZCBmdW5jdGlvbiBuYW1lc1xudmFyIFBST1BFUiA9IEVYSVNUUyAmJiAoZnVuY3Rpb24gc29tZXRoaW5nKCkgeyAvKiBlbXB0eSAqLyB9KS5uYW1lID09PSAnc29tZXRoaW5nJztcbnZhciBDT05GSUdVUkFCTEUgPSBFWElTVFMgJiYgKCFERVNDUklQVE9SUyB8fCAoREVTQ1JJUFRPUlMgJiYgZ2V0RGVzY3JpcHRvcihGdW5jdGlvblByb3RvdHlwZSwgJ25hbWUnKS5jb25maWd1cmFibGUpKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEVYSVNUUzogRVhJU1RTLFxuICBQUk9QRVI6IFBST1BFUixcbiAgQ09ORklHVVJBQkxFOiBDT05GSUdVUkFCTEVcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBzdG9yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcblxudmFyIGZ1bmN0aW9uVG9TdHJpbmcgPSB1bmN1cnJ5VGhpcyhGdW5jdGlvbi50b1N0cmluZyk7XG5cbi8vIHRoaXMgaGVscGVyIGJyb2tlbiBpbiBgY29yZS1qc0AzLjQuMS0zLjQuNGAsIHNvIHdlIGNhbid0IHVzZSBgc2hhcmVkYCBoZWxwZXJcbmlmICghaXNDYWxsYWJsZShzdG9yZS5pbnNwZWN0U291cmNlKSkge1xuICBzdG9yZS5pbnNwZWN0U291cmNlID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uVG9TdHJpbmcoaXQpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0b3JlLmluc3BlY3RTb3VyY2U7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciBXZWFrTWFwID0gZ2xvYmFsVGhpcy5XZWFrTWFwO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQ2FsbGFibGUoV2Vha01hcCkgJiYgL25hdGl2ZSBjb2RlLy50ZXN0KFN0cmluZyhXZWFrTWFwKSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG5cbnZhciBrZXlzID0gc2hhcmVkKCdrZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4ga2V5c1trZXldIHx8IChrZXlzW2tleV0gPSB1aWQoa2V5KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0ge307XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9XRUFLX01BUCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWFrLW1hcC1iYXNpYy1kZXRlY3Rpb24nKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xuXG52YXIgT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQgPSAnT2JqZWN0IGFscmVhZHkgaW5pdGlhbGl6ZWQnO1xudmFyIFR5cGVFcnJvciA9IGdsb2JhbFRoaXMuVHlwZUVycm9yO1xudmFyIFdlYWtNYXAgPSBnbG9iYWxUaGlzLldlYWtNYXA7XG52YXIgc2V0LCBnZXQsIGhhcztcblxudmFyIGVuZm9yY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGhhcyhpdCkgPyBnZXQoaXQpIDogc2V0KGl0LCB7fSk7XG59O1xuXG52YXIgZ2V0dGVyRm9yID0gZnVuY3Rpb24gKFRZUEUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChpdCkge1xuICAgIHZhciBzdGF0ZTtcbiAgICBpZiAoIWlzT2JqZWN0KGl0KSB8fCAoc3RhdGUgPSBnZXQoaXQpKS50eXBlICE9PSBUWVBFKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbmNvbXBhdGlibGUgcmVjZWl2ZXIsICcgKyBUWVBFICsgJyByZXF1aXJlZCcpO1xuICAgIH0gcmV0dXJuIHN0YXRlO1xuICB9O1xufTtcblxuaWYgKE5BVElWRV9XRUFLX01BUCB8fCBzaGFyZWQuc3RhdGUpIHtcbiAgdmFyIHN0b3JlID0gc2hhcmVkLnN0YXRlIHx8IChzaGFyZWQuc3RhdGUgPSBuZXcgV2Vha01hcCgpKTtcbiAgLyogZXNsaW50LWRpc2FibGUgbm8tc2VsZi1hc3NpZ24gLS0gcHJvdG90eXBlIG1ldGhvZHMgcHJvdGVjdGlvbiAqL1xuICBzdG9yZS5nZXQgPSBzdG9yZS5nZXQ7XG4gIHN0b3JlLmhhcyA9IHN0b3JlLmhhcztcbiAgc3RvcmUuc2V0ID0gc3RvcmUuc2V0O1xuICAvKiBlc2xpbnQtZW5hYmxlIG5vLXNlbGYtYXNzaWduIC0tIHByb3RvdHlwZSBtZXRob2RzIHByb3RlY3Rpb24gKi9cbiAgc2V0ID0gZnVuY3Rpb24gKGl0LCBtZXRhZGF0YSkge1xuICAgIGlmIChzdG9yZS5oYXMoaXQpKSB0aHJvdyBuZXcgVHlwZUVycm9yKE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEKTtcbiAgICBtZXRhZGF0YS5mYWNhZGUgPSBpdDtcbiAgICBzdG9yZS5zZXQoaXQsIG1ldGFkYXRhKTtcbiAgICByZXR1cm4gbWV0YWRhdGE7XG4gIH07XG4gIGdldCA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBzdG9yZS5nZXQoaXQpIHx8IHt9O1xuICB9O1xuICBoYXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gc3RvcmUuaGFzKGl0KTtcbiAgfTtcbn0gZWxzZSB7XG4gIHZhciBTVEFURSA9IHNoYXJlZEtleSgnc3RhdGUnKTtcbiAgaGlkZGVuS2V5c1tTVEFURV0gPSB0cnVlO1xuICBzZXQgPSBmdW5jdGlvbiAoaXQsIG1ldGFkYXRhKSB7XG4gICAgaWYgKGhhc093bihpdCwgU1RBVEUpKSB0aHJvdyBuZXcgVHlwZUVycm9yKE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEKTtcbiAgICBtZXRhZGF0YS5mYWNhZGUgPSBpdDtcbiAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoaXQsIFNUQVRFLCBtZXRhZGF0YSk7XG4gICAgcmV0dXJuIG1ldGFkYXRhO1xuICB9O1xuICBnZXQgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gaGFzT3duKGl0LCBTVEFURSkgPyBpdFtTVEFURV0gOiB7fTtcbiAgfTtcbiAgaGFzID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGhhc093bihpdCwgU1RBVEUpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0OiBzZXQsXG4gIGdldDogZ2V0LFxuICBoYXM6IGhhcyxcbiAgZW5mb3JjZTogZW5mb3JjZSxcbiAgZ2V0dGVyRm9yOiBnZXR0ZXJGb3Jcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBDT05GSUdVUkFCTEVfRlVOQ1RJT05fTkFNRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1uYW1lJykuQ09ORklHVVJBQkxFO1xudmFyIGluc3BlY3RTb3VyY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG5cbnZhciBlbmZvcmNlSW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZW5mb3JjZTtcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXQ7XG52YXIgJFN0cmluZyA9IFN0cmluZztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIHN0cmluZ1NsaWNlID0gdW5jdXJyeVRoaXMoJycuc2xpY2UpO1xudmFyIHJlcGxhY2UgPSB1bmN1cnJ5VGhpcygnJy5yZXBsYWNlKTtcbnZhciBqb2luID0gdW5jdXJyeVRoaXMoW10uam9pbik7XG5cbnZhciBDT05GSUdVUkFCTEVfTEVOR1RIID0gREVTQ1JJUFRPUlMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgJ2xlbmd0aCcsIHsgdmFsdWU6IDggfSkubGVuZ3RoICE9PSA4O1xufSk7XG5cbnZhciBURU1QTEFURSA9IFN0cmluZyhTdHJpbmcpLnNwbGl0KCdTdHJpbmcnKTtcblxudmFyIG1ha2VCdWlsdEluID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodmFsdWUsIG5hbWUsIG9wdGlvbnMpIHtcbiAgaWYgKHN0cmluZ1NsaWNlKCRTdHJpbmcobmFtZSksIDAsIDcpID09PSAnU3ltYm9sKCcpIHtcbiAgICBuYW1lID0gJ1snICsgcmVwbGFjZSgkU3RyaW5nKG5hbWUpLCAvXlN5bWJvbFxcKChbXildKilcXCkuKiQvLCAnJDEnKSArICddJztcbiAgfVxuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmdldHRlcikgbmFtZSA9ICdnZXQgJyArIG5hbWU7XG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuc2V0dGVyKSBuYW1lID0gJ3NldCAnICsgbmFtZTtcbiAgaWYgKCFoYXNPd24odmFsdWUsICduYW1lJykgfHwgKENPTkZJR1VSQUJMRV9GVU5DVElPTl9OQU1FICYmIHZhbHVlLm5hbWUgIT09IG5hbWUpKSB7XG4gICAgaWYgKERFU0NSSVBUT1JTKSBkZWZpbmVQcm9wZXJ0eSh2YWx1ZSwgJ25hbWUnLCB7IHZhbHVlOiBuYW1lLCBjb25maWd1cmFibGU6IHRydWUgfSk7XG4gICAgZWxzZSB2YWx1ZS5uYW1lID0gbmFtZTtcbiAgfVxuICBpZiAoQ09ORklHVVJBQkxFX0xFTkdUSCAmJiBvcHRpb25zICYmIGhhc093bihvcHRpb25zLCAnYXJpdHknKSAmJiB2YWx1ZS5sZW5ndGggIT09IG9wdGlvbnMuYXJpdHkpIHtcbiAgICBkZWZpbmVQcm9wZXJ0eSh2YWx1ZSwgJ2xlbmd0aCcsIHsgdmFsdWU6IG9wdGlvbnMuYXJpdHkgfSk7XG4gIH1cbiAgdHJ5IHtcbiAgICBpZiAob3B0aW9ucyAmJiBoYXNPd24ob3B0aW9ucywgJ2NvbnN0cnVjdG9yJykgJiYgb3B0aW9ucy5jb25zdHJ1Y3Rvcikge1xuICAgICAgaWYgKERFU0NSSVBUT1JTKSBkZWZpbmVQcm9wZXJ0eSh2YWx1ZSwgJ3Byb3RvdHlwZScsIHsgd3JpdGFibGU6IGZhbHNlIH0pO1xuICAgIC8vIGluIFY4IH4gQ2hyb21lIDUzLCBwcm90b3R5cGVzIG9mIHNvbWUgbWV0aG9kcywgbGlrZSBgQXJyYXkucHJvdG90eXBlLnZhbHVlc2AsIGFyZSBub24td3JpdGFibGVcbiAgICB9IGVsc2UgaWYgKHZhbHVlLnByb3RvdHlwZSkgdmFsdWUucHJvdG90eXBlID0gdW5kZWZpbmVkO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIHZhciBzdGF0ZSA9IGVuZm9yY2VJbnRlcm5hbFN0YXRlKHZhbHVlKTtcbiAgaWYgKCFoYXNPd24oc3RhdGUsICdzb3VyY2UnKSkge1xuICAgIHN0YXRlLnNvdXJjZSA9IGpvaW4oVEVNUExBVEUsIHR5cGVvZiBuYW1lID09ICdzdHJpbmcnID8gbmFtZSA6ICcnKTtcbiAgfSByZXR1cm4gdmFsdWU7XG59O1xuXG4vLyBhZGQgZmFrZSBGdW5jdGlvbiN0b1N0cmluZyBmb3IgY29ycmVjdCB3b3JrIHdyYXBwZWQgbWV0aG9kcyAvIGNvbnN0cnVjdG9ycyB3aXRoIG1ldGhvZHMgbGlrZSBMb0Rhc2ggaXNOYXRpdmVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1leHRlbmQtbmF0aXZlIC0tIHJlcXVpcmVkXG5GdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBtYWtlQnVpbHRJbihmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuIGlzQ2FsbGFibGUodGhpcykgJiYgZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKS5zb3VyY2UgfHwgaW5zcGVjdFNvdXJjZSh0aGlzKTtcbn0sICd0b1N0cmluZycpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIG1ha2VCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL21ha2UtYnVpbHQtaW4nKTtcbnZhciBkZWZpbmVHbG9iYWxQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIGtleSwgdmFsdWUsIG9wdGlvbnMpIHtcbiAgaWYgKCFvcHRpb25zKSBvcHRpb25zID0ge307XG4gIHZhciBzaW1wbGUgPSBvcHRpb25zLmVudW1lcmFibGU7XG4gIHZhciBuYW1lID0gb3B0aW9ucy5uYW1lICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLm5hbWUgOiBrZXk7XG4gIGlmIChpc0NhbGxhYmxlKHZhbHVlKSkgbWFrZUJ1aWx0SW4odmFsdWUsIG5hbWUsIG9wdGlvbnMpO1xuICBpZiAob3B0aW9ucy5nbG9iYWwpIHtcbiAgICBpZiAoc2ltcGxlKSBPW2tleV0gPSB2YWx1ZTtcbiAgICBlbHNlIGRlZmluZUdsb2JhbFByb3BlcnR5KGtleSwgdmFsdWUpO1xuICB9IGVsc2Uge1xuICAgIHRyeSB7XG4gICAgICBpZiAoIW9wdGlvbnMudW5zYWZlKSBkZWxldGUgT1trZXldO1xuICAgICAgZWxzZSBpZiAoT1trZXldKSBzaW1wbGUgPSB0cnVlO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgICBpZiAoc2ltcGxlKSBPW2tleV0gPSB2YWx1ZTtcbiAgICBlbHNlIGRlZmluZVByb3BlcnR5TW9kdWxlLmYoTywga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogIW9wdGlvbnMubm9uQ29uZmlndXJhYmxlLFxuICAgICAgd3JpdGFibGU6ICFvcHRpb25zLm5vbldyaXRhYmxlXG4gICAgfSk7XG4gIH0gcmV0dXJuIE87XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjZWlsID0gTWF0aC5jZWlsO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcblxuLy8gYE1hdGgudHJ1bmNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXRoLnRydW5jXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tbWF0aC10cnVuYyAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGgudHJ1bmMgfHwgZnVuY3Rpb24gdHJ1bmMoeCkge1xuICB2YXIgbiA9ICt4O1xuICByZXR1cm4gKG4gPiAwID8gZmxvb3IgOiBjZWlsKShuKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRydW5jID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL21hdGgtdHJ1bmMnKTtcblxuLy8gYFRvSW50ZWdlck9ySW5maW5pdHlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b2ludGVnZXJvcmluZmluaXR5XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIgbnVtYmVyID0gK2FyZ3VtZW50O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICByZXR1cm4gbnVtYmVyICE9PSBudW1iZXIgfHwgbnVtYmVyID09PSAwID8gMCA6IHRydW5jKG51bWJlcik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcblxudmFyIG1heCA9IE1hdGgubWF4O1xudmFyIG1pbiA9IE1hdGgubWluO1xuXG4vLyBIZWxwZXIgZm9yIGEgcG9wdWxhciByZXBlYXRpbmcgY2FzZSBvZiB0aGUgc3BlYzpcbi8vIExldCBpbnRlZ2VyIGJlID8gVG9JbnRlZ2VyKGluZGV4KS5cbi8vIElmIGludGVnZXIgPCAwLCBsZXQgcmVzdWx0IGJlIG1heCgobGVuZ3RoICsgaW50ZWdlciksIDApOyBlbHNlIGxldCByZXN1bHQgYmUgbWluKGludGVnZXIsIGxlbmd0aCkuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbmRleCwgbGVuZ3RoKSB7XG4gIHZhciBpbnRlZ2VyID0gdG9JbnRlZ2VyT3JJbmZpbml0eShpbmRleCk7XG4gIHJldHVybiBpbnRlZ2VyIDwgMCA/IG1heChpbnRlZ2VyICsgbGVuZ3RoLCAwKSA6IG1pbihpbnRlZ2VyLCBsZW5ndGgpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG5cbnZhciBtaW4gPSBNYXRoLm1pbjtcblxuLy8gYFRvTGVuZ3RoYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9sZW5ndGhcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHZhciBsZW4gPSB0b0ludGVnZXJPckluZmluaXR5KGFyZ3VtZW50KTtcbiAgcmV0dXJuIGxlbiA+IDAgPyBtaW4obGVuLCAweDFGRkZGRkZGRkZGRkZGKSA6IDA7IC8vIDIgKiogNTMgLSAxID09IDkwMDcxOTkyNTQ3NDA5OTFcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCcpO1xuXG4vLyBgTGVuZ3RoT2ZBcnJheUxpa2VgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1sZW5ndGhvZmFycmF5bGlrZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiB0b0xlbmd0aChvYmoubGVuZ3RoKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUueyBpbmRleE9mLCBpbmNsdWRlcyB9YCBtZXRob2RzIGltcGxlbWVudGF0aW9uXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKElTX0lOQ0xVREVTKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGVsLCBmcm9tSW5kZXgpIHtcbiAgICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdCgkdGhpcyk7XG4gICAgdmFyIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICAgIGlmIChsZW5ndGggPT09IDApIHJldHVybiAhSVNfSU5DTFVERVMgJiYgLTE7XG4gICAgdmFyIGluZGV4ID0gdG9BYnNvbHV0ZUluZGV4KGZyb21JbmRleCwgbGVuZ3RoKTtcbiAgICB2YXIgdmFsdWU7XG4gICAgLy8gQXJyYXkjaW5jbHVkZXMgdXNlcyBTYW1lVmFsdWVaZXJvIGVxdWFsaXR5IGFsZ29yaXRobVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gICAgaWYgKElTX0lOQ0xVREVTICYmIGVsICE9PSBlbCkgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSB7XG4gICAgICB2YWx1ZSA9IE9baW5kZXgrK107XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICAgICAgaWYgKHZhbHVlICE9PSB2YWx1ZSkgcmV0dXJuIHRydWU7XG4gICAgLy8gQXJyYXkjaW5kZXhPZiBpZ25vcmVzIGhvbGVzLCBBcnJheSNpbmNsdWRlcyAtIG5vdFxuICAgIH0gZWxzZSBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgICAgaWYgKChJU19JTkNMVURFUyB8fCBpbmRleCBpbiBPKSAmJiBPW2luZGV4XSA9PT0gZWwpIHJldHVybiBJU19JTkNMVURFUyB8fCBpbmRleCB8fCAwO1xuICAgIH0gcmV0dXJuICFJU19JTkNMVURFUyAmJiAtMTtcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgQXJyYXkucHJvdG90eXBlLmluY2x1ZGVzYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuaW5jbHVkZXNcbiAgaW5jbHVkZXM6IGNyZWF0ZU1ldGhvZCh0cnVlKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5pbmRleE9mYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuaW5kZXhvZlxuICBpbmRleE9mOiBjcmVhdGVNZXRob2QoZmFsc2UpXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGluZGV4T2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaW5jbHVkZXMnKS5pbmRleE9mO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcblxudmFyIHB1c2ggPSB1bmN1cnJ5VGhpcyhbXS5wdXNoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBuYW1lcykge1xuICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdChvYmplY3QpO1xuICB2YXIgaSA9IDA7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGtleTtcbiAgZm9yIChrZXkgaW4gTykgIWhhc093bihoaWRkZW5LZXlzLCBrZXkpICYmIGhhc093bihPLCBrZXkpICYmIHB1c2gocmVzdWx0LCBrZXkpO1xuICAvLyBEb24ndCBlbnVtIGJ1ZyAmIGhpZGRlbiBrZXlzXG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSBpZiAoaGFzT3duKE8sIGtleSA9IG5hbWVzW2krK10pKSB7XG4gICAgfmluZGV4T2YocmVzdWx0LCBrZXkpIHx8IHB1c2gocmVzdWx0LCBrZXkpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIElFOC0gZG9uJ3QgZW51bSBidWcga2V5c1xubW9kdWxlLmV4cG9ydHMgPSBbXG4gICdjb25zdHJ1Y3RvcicsXG4gICdoYXNPd25Qcm9wZXJ0eScsXG4gICdpc1Byb3RvdHlwZU9mJyxcbiAgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJyxcbiAgJ3RvTG9jYWxlU3RyaW5nJyxcbiAgJ3RvU3RyaW5nJyxcbiAgJ3ZhbHVlT2YnXG5dO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpbnRlcm5hbE9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzJyk7XG5cbnZhciBoaWRkZW5LZXlzID0gZW51bUJ1Z0tleXMuY29uY2F0KCdsZW5ndGgnLCAncHJvdG90eXBlJyk7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eW5hbWVzXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5bmFtZXMgLS0gc2FmZVxuZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgfHwgZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhPKSB7XG4gIHJldHVybiBpbnRlcm5hbE9iamVjdEtleXMoTywgaGlkZGVuS2V5cyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlzeW1ib2xzIC0tIHNhZmVcbmV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG5cbnZhciBjb25jYXQgPSB1bmN1cnJ5VGhpcyhbXS5jb25jYXQpO1xuXG4vLyBhbGwgb2JqZWN0IGtleXMsIGluY2x1ZGVzIG5vbi1lbnVtZXJhYmxlIGFuZCBzeW1ib2xzXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW4oJ1JlZmxlY3QnLCAnb3duS2V5cycpIHx8IGZ1bmN0aW9uIG93bktleXMoaXQpIHtcbiAgdmFyIGtleXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlLmYoYW5PYmplY3QoaXQpKTtcbiAgdmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mO1xuICByZXR1cm4gZ2V0T3duUHJvcGVydHlTeW1ib2xzID8gY29uY2F0KGtleXMsIGdldE93blByb3BlcnR5U3ltYm9scyhpdCkpIDoga2V5cztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgb3duS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vd24ta2V5cycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSwgZXhjZXB0aW9ucykge1xuICB2YXIga2V5cyA9IG93bktleXMoc291cmNlKTtcbiAgdmFyIGRlZmluZVByb3BlcnR5ID0gZGVmaW5lUHJvcGVydHlNb2R1bGUuZjtcbiAgdmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZS5mO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICBpZiAoIWhhc093bih0YXJnZXQsIGtleSkgJiYgIShleGNlcHRpb25zICYmIGhhc093bihleGNlcHRpb25zLCBrZXkpKSkge1xuICAgICAgZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpO1xuICAgIH1cbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciByZXBsYWNlbWVudCA9IC8jfFxcLnByb3RvdHlwZVxcLi87XG5cbnZhciBpc0ZvcmNlZCA9IGZ1bmN0aW9uIChmZWF0dXJlLCBkZXRlY3Rpb24pIHtcbiAgdmFyIHZhbHVlID0gZGF0YVtub3JtYWxpemUoZmVhdHVyZSldO1xuICByZXR1cm4gdmFsdWUgPT09IFBPTFlGSUxMID8gdHJ1ZVxuICAgIDogdmFsdWUgPT09IE5BVElWRSA/IGZhbHNlXG4gICAgOiBpc0NhbGxhYmxlKGRldGVjdGlvbikgPyBmYWlscyhkZXRlY3Rpb24pXG4gICAgOiAhIWRldGVjdGlvbjtcbn07XG5cbnZhciBub3JtYWxpemUgPSBpc0ZvcmNlZC5ub3JtYWxpemUgPSBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gIHJldHVybiBTdHJpbmcoc3RyaW5nKS5yZXBsYWNlKHJlcGxhY2VtZW50LCAnLicpLnRvTG93ZXJDYXNlKCk7XG59O1xuXG52YXIgZGF0YSA9IGlzRm9yY2VkLmRhdGEgPSB7fTtcbnZhciBOQVRJVkUgPSBpc0ZvcmNlZC5OQVRJVkUgPSAnTic7XG52YXIgUE9MWUZJTEwgPSBpc0ZvcmNlZC5QT0xZRklMTCA9ICdQJztcblxubW9kdWxlLmV4cG9ydHMgPSBpc0ZvcmNlZDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJykuZjtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciBkZWZpbmVHbG9iYWxQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5Jyk7XG52YXIgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb3B5LWNvbnN0cnVjdG9yLXByb3BlcnRpZXMnKTtcbnZhciBpc0ZvcmNlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1mb3JjZWQnKTtcblxuLypcbiAgb3B0aW9ucy50YXJnZXQgICAgICAgICAtIG5hbWUgb2YgdGhlIHRhcmdldCBvYmplY3RcbiAgb3B0aW9ucy5nbG9iYWwgICAgICAgICAtIHRhcmdldCBpcyB0aGUgZ2xvYmFsIG9iamVjdFxuICBvcHRpb25zLnN0YXQgICAgICAgICAgIC0gZXhwb3J0IGFzIHN0YXRpYyBtZXRob2RzIG9mIHRhcmdldFxuICBvcHRpb25zLnByb3RvICAgICAgICAgIC0gZXhwb3J0IGFzIHByb3RvdHlwZSBtZXRob2RzIG9mIHRhcmdldFxuICBvcHRpb25zLnJlYWwgICAgICAgICAgIC0gcmVhbCBwcm90b3R5cGUgbWV0aG9kIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy5mb3JjZWQgICAgICAgICAtIGV4cG9ydCBldmVuIGlmIHRoZSBuYXRpdmUgZmVhdHVyZSBpcyBhdmFpbGFibGVcbiAgb3B0aW9ucy5iaW5kICAgICAgICAgICAtIGJpbmQgbWV0aG9kcyB0byB0aGUgdGFyZ2V0LCByZXF1aXJlZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMud3JhcCAgICAgICAgICAgLSB3cmFwIGNvbnN0cnVjdG9ycyB0byBwcmV2ZW50aW5nIGdsb2JhbCBwb2xsdXRpb24sIHJlcXVpcmVkIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy51bnNhZmUgICAgICAgICAtIHVzZSB0aGUgc2ltcGxlIGFzc2lnbm1lbnQgb2YgcHJvcGVydHkgaW5zdGVhZCBvZiBkZWxldGUgKyBkZWZpbmVQcm9wZXJ0eVxuICBvcHRpb25zLnNoYW0gICAgICAgICAgIC0gYWRkIGEgZmxhZyB0byBub3QgY29tcGxldGVseSBmdWxsIHBvbHlmaWxsc1xuICBvcHRpb25zLmVudW1lcmFibGUgICAgIC0gZXhwb3J0IGFzIGVudW1lcmFibGUgcHJvcGVydHlcbiAgb3B0aW9ucy5kb250Q2FsbEdldFNldCAtIHByZXZlbnQgY2FsbGluZyBhIGdldHRlciBvbiB0YXJnZXRcbiAgb3B0aW9ucy5uYW1lICAgICAgICAgICAtIHRoZSAubmFtZSBvZiB0aGUgZnVuY3Rpb24gaWYgaXQgZG9lcyBub3QgbWF0Y2ggdGhlIGtleVxuKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9wdGlvbnMsIHNvdXJjZSkge1xuICB2YXIgVEFSR0VUID0gb3B0aW9ucy50YXJnZXQ7XG4gIHZhciBHTE9CQUwgPSBvcHRpb25zLmdsb2JhbDtcbiAgdmFyIFNUQVRJQyA9IG9wdGlvbnMuc3RhdDtcbiAgdmFyIEZPUkNFRCwgdGFyZ2V0LCBrZXksIHRhcmdldFByb3BlcnR5LCBzb3VyY2VQcm9wZXJ0eSwgZGVzY3JpcHRvcjtcbiAgaWYgKEdMT0JBTCkge1xuICAgIHRhcmdldCA9IGdsb2JhbFRoaXM7XG4gIH0gZWxzZSBpZiAoU1RBVElDKSB7XG4gICAgdGFyZ2V0ID0gZ2xvYmFsVGhpc1tUQVJHRVRdIHx8IGRlZmluZUdsb2JhbFByb3BlcnR5KFRBUkdFVCwge30pO1xuICB9IGVsc2Uge1xuICAgIHRhcmdldCA9IGdsb2JhbFRoaXNbVEFSR0VUXSAmJiBnbG9iYWxUaGlzW1RBUkdFVF0ucHJvdG90eXBlO1xuICB9XG4gIGlmICh0YXJnZXQpIGZvciAoa2V5IGluIHNvdXJjZSkge1xuICAgIHNvdXJjZVByb3BlcnR5ID0gc291cmNlW2tleV07XG4gICAgaWYgKG9wdGlvbnMuZG9udENhbGxHZXRTZXQpIHtcbiAgICAgIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpO1xuICAgICAgdGFyZ2V0UHJvcGVydHkgPSBkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IudmFsdWU7XG4gICAgfSBlbHNlIHRhcmdldFByb3BlcnR5ID0gdGFyZ2V0W2tleV07XG4gICAgRk9SQ0VEID0gaXNGb3JjZWQoR0xPQkFMID8ga2V5IDogVEFSR0VUICsgKFNUQVRJQyA/ICcuJyA6ICcjJykgKyBrZXksIG9wdGlvbnMuZm9yY2VkKTtcbiAgICAvLyBjb250YWluZWQgaW4gdGFyZ2V0XG4gICAgaWYgKCFGT1JDRUQgJiYgdGFyZ2V0UHJvcGVydHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHR5cGVvZiBzb3VyY2VQcm9wZXJ0eSA9PSB0eXBlb2YgdGFyZ2V0UHJvcGVydHkpIGNvbnRpbnVlO1xuICAgICAgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyhzb3VyY2VQcm9wZXJ0eSwgdGFyZ2V0UHJvcGVydHkpO1xuICAgIH1cbiAgICAvLyBhZGQgYSBmbGFnIHRvIG5vdCBjb21wbGV0ZWx5IGZ1bGwgcG9seWZpbGxzXG4gICAgaWYgKG9wdGlvbnMuc2hhbSB8fCAodGFyZ2V0UHJvcGVydHkgJiYgdGFyZ2V0UHJvcGVydHkuc2hhbSkpIHtcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShzb3VyY2VQcm9wZXJ0eSwgJ3NoYW0nLCB0cnVlKTtcbiAgICB9XG4gICAgZGVmaW5lQnVpbHRJbih0YXJnZXQsIGtleSwgc291cmNlUHJvcGVydHksIG9wdGlvbnMpO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG52YXIgdGVzdCA9IHt9O1xuXG50ZXN0W1RPX1NUUklOR19UQUddID0gJ3onO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN0cmluZyh0ZXN0KSA9PT0gJ1tvYmplY3Qgel0nO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGNsYXNzb2ZSYXcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG52YXIgJE9iamVjdCA9IE9iamVjdDtcblxuLy8gRVMzIHdyb25nIGhlcmVcbnZhciBDT1JSRUNUX0FSR1VNRU5UUyA9IGNsYXNzb2ZSYXcoZnVuY3Rpb24gKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpID09PSAnQXJndW1lbnRzJztcblxuLy8gZmFsbGJhY2sgZm9yIElFMTEgU2NyaXB0IEFjY2VzcyBEZW5pZWQgZXJyb3JcbnZhciB0cnlHZXQgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICB0cnkge1xuICAgIHJldHVybiBpdFtrZXldO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG59O1xuXG4vLyBnZXR0aW5nIHRhZyBmcm9tIEVTNisgYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgXG5tb2R1bGUuZXhwb3J0cyA9IFRPX1NUUklOR19UQUdfU1VQUE9SVCA/IGNsYXNzb2ZSYXcgOiBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIE8sIHRhZywgcmVzdWx0O1xuICByZXR1cm4gaXQgPT09IHVuZGVmaW5lZCA/ICdVbmRlZmluZWQnIDogaXQgPT09IG51bGwgPyAnTnVsbCdcbiAgICAvLyBAQHRvU3RyaW5nVGFnIGNhc2VcbiAgICA6IHR5cGVvZiAodGFnID0gdHJ5R2V0KE8gPSAkT2JqZWN0KGl0KSwgVE9fU1RSSU5HX1RBRykpID09ICdzdHJpbmcnID8gdGFnXG4gICAgLy8gYnVpbHRpblRhZyBjYXNlXG4gICAgOiBDT1JSRUNUX0FSR1VNRU5UUyA/IGNsYXNzb2ZSYXcoTylcbiAgICAvLyBFUzMgYXJndW1lbnRzIGZhbGxiYWNrXG4gICAgOiAocmVzdWx0ID0gY2xhc3NvZlJhdyhPKSkgPT09ICdPYmplY3QnICYmIGlzQ2FsbGFibGUoTy5jYWxsZWUpID8gJ0FyZ3VtZW50cycgOiByZXN1bHQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcblxudmFyICRTdHJpbmcgPSBTdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmIChjbGFzc29mKGFyZ3VtZW50KSA9PT0gJ1N5bWJvbCcpIHRocm93IG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IGEgU3ltYm9sIHZhbHVlIHRvIGEgc3RyaW5nJyk7XG4gIHJldHVybiAkU3RyaW5nKGFyZ3VtZW50KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGludGVybmFsT2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cy1pbnRlcm5hbCcpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VudW0tYnVnLWtleXMnKTtcblxuLy8gYE9iamVjdC5rZXlzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmtleXNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3Qta2V5cyAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIGtleXMoTykge1xuICByZXR1cm4gaW50ZXJuYWxPYmplY3RLZXlzKE8sIGVudW1CdWdLZXlzKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdjgtcHJvdG90eXBlLWRlZmluZS1idWcnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgb2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cycpO1xuXG4vLyBgT2JqZWN0LmRlZmluZVByb3BlcnRpZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydGllc1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0aWVzIC0tIHNhZmVcbmV4cG9ydHMuZiA9IERFU0NSSVBUT1JTICYmICFWOF9QUk9UT1RZUEVfREVGSU5FX0JVRyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzIDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICB2YXIgcHJvcHMgPSB0b0luZGV4ZWRPYmplY3QoUHJvcGVydGllcyk7XG4gIHZhciBrZXlzID0gb2JqZWN0S2V5cyhQcm9wZXJ0aWVzKTtcbiAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICB2YXIgaW5kZXggPSAwO1xuICB2YXIga2V5O1xuICB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIGRlZmluZVByb3BlcnR5TW9kdWxlLmYoTywga2V5ID0ga2V5c1tpbmRleCsrXSwgcHJvcHNba2V5XSk7XG4gIHJldHVybiBPO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluKCdkb2N1bWVudCcsICdkb2N1bWVudEVsZW1lbnQnKTtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBnbG9iYWwgQWN0aXZlWE9iamVjdCAtLSBvbGQgSUUsIFdTSCAqL1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGRlZmluZVByb3BlcnRpZXNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW51bS1idWcta2V5cycpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcbnZhciBodG1sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2h0bWwnKTtcbnZhciBkb2N1bWVudENyZWF0ZUVsZW1lbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQnKTtcbnZhciBzaGFyZWRLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLWtleScpO1xuXG52YXIgR1QgPSAnPic7XG52YXIgTFQgPSAnPCc7XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG52YXIgU0NSSVBUID0gJ3NjcmlwdCc7XG52YXIgSUVfUFJPVE8gPSBzaGFyZWRLZXkoJ0lFX1BST1RPJyk7XG5cbnZhciBFbXB0eUNvbnN0cnVjdG9yID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xuXG52YXIgc2NyaXB0VGFnID0gZnVuY3Rpb24gKGNvbnRlbnQpIHtcbiAgcmV0dXJuIExUICsgU0NSSVBUICsgR1QgKyBjb250ZW50ICsgTFQgKyAnLycgKyBTQ1JJUFQgKyBHVDtcbn07XG5cbi8vIENyZWF0ZSBvYmplY3Qgd2l0aCBmYWtlIGBudWxsYCBwcm90b3R5cGU6IHVzZSBBY3RpdmVYIE9iamVjdCB3aXRoIGNsZWFyZWQgcHJvdG90eXBlXG52YXIgTnVsbFByb3RvT2JqZWN0VmlhQWN0aXZlWCA9IGZ1bmN0aW9uIChhY3RpdmVYRG9jdW1lbnQpIHtcbiAgYWN0aXZlWERvY3VtZW50LndyaXRlKHNjcmlwdFRhZygnJykpO1xuICBhY3RpdmVYRG9jdW1lbnQuY2xvc2UoKTtcbiAgdmFyIHRlbXAgPSBhY3RpdmVYRG9jdW1lbnQucGFyZW50V2luZG93Lk9iamVjdDtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtYXNzaWdubWVudCAtLSBhdm9pZCBtZW1vcnkgbGVha1xuICBhY3RpdmVYRG9jdW1lbnQgPSBudWxsO1xuICByZXR1cm4gdGVtcDtcbn07XG5cbi8vIENyZWF0ZSBvYmplY3Qgd2l0aCBmYWtlIGBudWxsYCBwcm90b3R5cGU6IHVzZSBpZnJhbWUgT2JqZWN0IHdpdGggY2xlYXJlZCBwcm90b3R5cGVcbnZhciBOdWxsUHJvdG9PYmplY3RWaWFJRnJhbWUgPSBmdW5jdGlvbiAoKSB7XG4gIC8vIFRocmFzaCwgd2FzdGUgYW5kIHNvZG9teTogSUUgR0MgYnVnXG4gIHZhciBpZnJhbWUgPSBkb2N1bWVudENyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpO1xuICB2YXIgSlMgPSAnamF2YScgKyBTQ1JJUFQgKyAnOic7XG4gIHZhciBpZnJhbWVEb2N1bWVudDtcbiAgaWZyYW1lLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gIGh0bWwuYXBwZW5kQ2hpbGQoaWZyYW1lKTtcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzQ3NVxuICBpZnJhbWUuc3JjID0gU3RyaW5nKEpTKTtcbiAgaWZyYW1lRG9jdW1lbnQgPSBpZnJhbWUuY29udGVudFdpbmRvdy5kb2N1bWVudDtcbiAgaWZyYW1lRG9jdW1lbnQub3BlbigpO1xuICBpZnJhbWVEb2N1bWVudC53cml0ZShzY3JpcHRUYWcoJ2RvY3VtZW50LkY9T2JqZWN0JykpO1xuICBpZnJhbWVEb2N1bWVudC5jbG9zZSgpO1xuICByZXR1cm4gaWZyYW1lRG9jdW1lbnQuRjtcbn07XG5cbi8vIENoZWNrIGZvciBkb2N1bWVudC5kb21haW4gYW5kIGFjdGl2ZSB4IHN1cHBvcnRcbi8vIE5vIG5lZWQgdG8gdXNlIGFjdGl2ZSB4IGFwcHJvYWNoIHdoZW4gZG9jdW1lbnQuZG9tYWluIGlzIG5vdCBzZXRcbi8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vZXMtc2hpbXMvZXM1LXNoaW0vaXNzdWVzLzE1MFxuLy8gdmFyaWF0aW9uIG9mIGh0dHBzOi8vZ2l0aHViLmNvbS9raXRjYW1icmlkZ2UvZXM1LXNoaW0vY29tbWl0LzRmNzM4YWMwNjYzNDZcbi8vIGF2b2lkIElFIEdDIGJ1Z1xudmFyIGFjdGl2ZVhEb2N1bWVudDtcbnZhciBOdWxsUHJvdG9PYmplY3QgPSBmdW5jdGlvbiAoKSB7XG4gIHRyeSB7XG4gICAgYWN0aXZlWERvY3VtZW50ID0gbmV3IEFjdGl2ZVhPYmplY3QoJ2h0bWxmaWxlJyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGlnbm9yZSAqLyB9XG4gIE51bGxQcm90b09iamVjdCA9IHR5cGVvZiBkb2N1bWVudCAhPSAndW5kZWZpbmVkJ1xuICAgID8gZG9jdW1lbnQuZG9tYWluICYmIGFjdGl2ZVhEb2N1bWVudFxuICAgICAgPyBOdWxsUHJvdG9PYmplY3RWaWFBY3RpdmVYKGFjdGl2ZVhEb2N1bWVudCkgLy8gb2xkIElFXG4gICAgICA6IE51bGxQcm90b09iamVjdFZpYUlGcmFtZSgpXG4gICAgOiBOdWxsUHJvdG9PYmplY3RWaWFBY3RpdmVYKGFjdGl2ZVhEb2N1bWVudCk7IC8vIFdTSFxuICB2YXIgbGVuZ3RoID0gZW51bUJ1Z0tleXMubGVuZ3RoO1xuICB3aGlsZSAobGVuZ3RoLS0pIGRlbGV0ZSBOdWxsUHJvdG9PYmplY3RbUFJPVE9UWVBFXVtlbnVtQnVnS2V5c1tsZW5ndGhdXTtcbiAgcmV0dXJuIE51bGxQcm90b09iamVjdCgpO1xufTtcblxuaGlkZGVuS2V5c1tJRV9QUk9UT10gPSB0cnVlO1xuXG4vLyBgT2JqZWN0LmNyZWF0ZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5jcmVhdGVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtY3JlYXRlIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmNyZWF0ZSB8fCBmdW5jdGlvbiBjcmVhdGUoTywgUHJvcGVydGllcykge1xuICB2YXIgcmVzdWx0O1xuICBpZiAoTyAhPT0gbnVsbCkge1xuICAgIEVtcHR5Q29uc3RydWN0b3JbUFJPVE9UWVBFXSA9IGFuT2JqZWN0KE8pO1xuICAgIHJlc3VsdCA9IG5ldyBFbXB0eUNvbnN0cnVjdG9yKCk7XG4gICAgRW1wdHlDb25zdHJ1Y3RvcltQUk9UT1RZUEVdID0gbnVsbDtcbiAgICAvLyBhZGQgXCJfX3Byb3RvX19cIiBmb3IgT2JqZWN0LmdldFByb3RvdHlwZU9mIHBvbHlmaWxsXG4gICAgcmVzdWx0W0lFX1BST1RPXSA9IE87XG4gIH0gZWxzZSByZXN1bHQgPSBOdWxsUHJvdG9PYmplY3QoKTtcbiAgcmV0dXJuIFByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCA/IHJlc3VsdCA6IGRlZmluZVByb3BlcnRpZXNNb2R1bGUuZihyZXN1bHQsIFByb3BlcnRpZXMpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gdW5jdXJyeVRoaXMoW10uc2xpY2UpO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eW5hbWVzIC0tIHNhZmUgKi9cbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgJGdldE93blByb3BlcnR5TmFtZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMnKS5mO1xudmFyIGFycmF5U2xpY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc2xpY2UnKTtcblxudmFyIHdpbmRvd05hbWVzID0gdHlwZW9mIHdpbmRvdyA9PSAnb2JqZWN0JyAmJiB3aW5kb3cgJiYgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNcbiAgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh3aW5kb3cpIDogW107XG5cbnZhciBnZXRXaW5kb3dOYW1lcyA9IGZ1bmN0aW9uIChpdCkge1xuICB0cnkge1xuICAgIHJldHVybiAkZ2V0T3duUHJvcGVydHlOYW1lcyhpdCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGFycmF5U2xpY2Uod2luZG93TmFtZXMpO1xuICB9XG59O1xuXG4vLyBmYWxsYmFjayBmb3IgSUUxMSBidWdneSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB3aXRoIGlmcmFtZSBhbmQgd2luZG93XG5tb2R1bGUuZXhwb3J0cy5mID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhpdCkge1xuICByZXR1cm4gd2luZG93TmFtZXMgJiYgY2xhc3NvZihpdCkgPT09ICdXaW5kb3cnXG4gICAgPyBnZXRXaW5kb3dOYW1lcyhpdClcbiAgICA6ICRnZXRPd25Qcm9wZXJ0eU5hbWVzKHRvSW5kZXhlZE9iamVjdChpdCkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgbWFrZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbWFrZS1idWlsdC1pbicpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBuYW1lLCBkZXNjcmlwdG9yKSB7XG4gIGlmIChkZXNjcmlwdG9yLmdldCkgbWFrZUJ1aWx0SW4oZGVzY3JpcHRvci5nZXQsIG5hbWUsIHsgZ2V0dGVyOiB0cnVlIH0pO1xuICBpZiAoZGVzY3JpcHRvci5zZXQpIG1ha2VCdWlsdEluKGRlc2NyaXB0b3Iuc2V0LCBuYW1lLCB7IHNldHRlcjogdHJ1ZSB9KTtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5LmYodGFyZ2V0LCBuYW1lLCBkZXNjcmlwdG9yKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG5leHBvcnRzLmYgPSB3ZWxsS25vd25TeW1ib2w7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnbG9iYWxUaGlzO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BhdGgnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHdyYXBwZWRXZWxsS25vd25TeW1ib2xNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtd3JhcHBlZCcpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChOQU1FKSB7XG4gIHZhciBTeW1ib2wgPSBwYXRoLlN5bWJvbCB8fCAocGF0aC5TeW1ib2wgPSB7fSk7XG4gIGlmICghaGFzT3duKFN5bWJvbCwgTkFNRSkpIGRlZmluZVByb3BlcnR5KFN5bWJvbCwgTkFNRSwge1xuICAgIHZhbHVlOiB3cmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlLmYoTkFNRSlcbiAgfSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgU3ltYm9sID0gZ2V0QnVpbHRJbignU3ltYm9sJyk7XG4gIHZhciBTeW1ib2xQcm90b3R5cGUgPSBTeW1ib2wgJiYgU3ltYm9sLnByb3RvdHlwZTtcbiAgdmFyIHZhbHVlT2YgPSBTeW1ib2xQcm90b3R5cGUgJiYgU3ltYm9sUHJvdG90eXBlLnZhbHVlT2Y7XG4gIHZhciBUT19QUklNSVRJVkUgPSB3ZWxsS25vd25TeW1ib2woJ3RvUHJpbWl0aXZlJyk7XG5cbiAgaWYgKFN5bWJvbFByb3RvdHlwZSAmJiAhU3ltYm9sUHJvdG90eXBlW1RPX1BSSU1JVElWRV0pIHtcbiAgICAvLyBgU3ltYm9sLnByb3RvdHlwZVtAQHRvUHJpbWl0aXZlXWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wucHJvdG90eXBlLUBAdG9wcmltaXRpdmVcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIC5sZW5ndGhcbiAgICBkZWZpbmVCdWlsdEluKFN5bWJvbFByb3RvdHlwZSwgVE9fUFJJTUlUSVZFLCBmdW5jdGlvbiAoaGludCkge1xuICAgICAgcmV0dXJuIGNhbGwodmFsdWVPZiwgdGhpcyk7XG4gICAgfSwgeyBhcml0eTogMSB9KTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRhcmdldCwgVEFHLCBTVEFUSUMpIHtcbiAgaWYgKHRhcmdldCAmJiAhU1RBVElDKSB0YXJnZXQgPSB0YXJnZXQucHJvdG90eXBlO1xuICBpZiAodGFyZ2V0ICYmICFoYXNPd24odGFyZ2V0LCBUT19TVFJJTkdfVEFHKSkge1xuICAgIGRlZmluZVByb3BlcnR5KHRhcmdldCwgVE9fU1RSSU5HX1RBRywgeyBjb25maWd1cmFibGU6IHRydWUsIHZhbHVlOiBUQUcgfSk7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNsYXNzb2ZSYXcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZm4pIHtcbiAgLy8gTmFzaG9ybiBidWc6XG4gIC8vICAgaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzExMjhcbiAgLy8gICBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMTEzMFxuICBpZiAoY2xhc3NvZlJhdyhmbikgPT09ICdGdW5jdGlvbicpIHJldHVybiB1bmN1cnJ5VGhpcyhmbik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMtY2xhdXNlJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBOQVRJVkVfQklORCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZScpO1xuXG52YXIgYmluZCA9IHVuY3VycnlUaGlzKHVuY3VycnlUaGlzLmJpbmQpO1xuXG4vLyBvcHRpb25hbCAvIHNpbXBsZSBjb250ZXh0IGJpbmRpbmdcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuLCB0aGF0KSB7XG4gIGFDYWxsYWJsZShmbik7XG4gIHJldHVybiB0aGF0ID09PSB1bmRlZmluZWQgPyBmbiA6IE5BVElWRV9CSU5EID8gYmluZChmbiwgdGhhdCkgOiBmdW5jdGlvbiAoLyogLi4uYXJncyAqLykge1xuICAgIHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmd1bWVudHMpO1xuICB9O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xuXG4vLyBgSXNBcnJheWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzYXJyYXlcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1hcnJheS1pc2FycmF5IC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBpc0FycmF5KGFyZ3VtZW50KSB7XG4gIHJldHVybiBjbGFzc29mKGFyZ3VtZW50KSA9PT0gJ0FycmF5Jztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgaW5zcGVjdFNvdXJjZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZScpO1xuXG52YXIgbm9vcCA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcbnZhciBjb25zdHJ1Y3QgPSBnZXRCdWlsdEluKCdSZWZsZWN0JywgJ2NvbnN0cnVjdCcpO1xudmFyIGNvbnN0cnVjdG9yUmVnRXhwID0gL15cXHMqKD86Y2xhc3N8ZnVuY3Rpb24pXFxiLztcbnZhciBleGVjID0gdW5jdXJyeVRoaXMoY29uc3RydWN0b3JSZWdFeHAuZXhlYyk7XG52YXIgSU5DT1JSRUNUX1RPX1NUUklORyA9ICFjb25zdHJ1Y3RvclJlZ0V4cC50ZXN0KG5vb3ApO1xuXG52YXIgaXNDb25zdHJ1Y3Rvck1vZGVybiA9IGZ1bmN0aW9uIGlzQ29uc3RydWN0b3IoYXJndW1lbnQpIHtcbiAgaWYgKCFpc0NhbGxhYmxlKGFyZ3VtZW50KSkgcmV0dXJuIGZhbHNlO1xuICB0cnkge1xuICAgIGNvbnN0cnVjdChub29wLCBbXSwgYXJndW1lbnQpO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcblxudmFyIGlzQ29uc3RydWN0b3JMZWdhY3kgPSBmdW5jdGlvbiBpc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSB7XG4gIGlmICghaXNDYWxsYWJsZShhcmd1bWVudCkpIHJldHVybiBmYWxzZTtcbiAgc3dpdGNoIChjbGFzc29mKGFyZ3VtZW50KSkge1xuICAgIGNhc2UgJ0FzeW5jRnVuY3Rpb24nOlxuICAgIGNhc2UgJ0dlbmVyYXRvckZ1bmN0aW9uJzpcbiAgICBjYXNlICdBc3luY0dlbmVyYXRvckZ1bmN0aW9uJzogcmV0dXJuIGZhbHNlO1xuICB9XG4gIHRyeSB7XG4gICAgLy8gd2UgY2FuJ3QgY2hlY2sgLnByb3RvdHlwZSBzaW5jZSBjb25zdHJ1Y3RvcnMgcHJvZHVjZWQgYnkgLmJpbmQgaGF2ZW4ndCBpdFxuICAgIC8vIGBGdW5jdGlvbiN0b1N0cmluZ2AgdGhyb3dzIG9uIHNvbWUgYnVpbHQtaXQgZnVuY3Rpb24gaW4gc29tZSBsZWdhY3kgZW5naW5lc1xuICAgIC8vIChmb3IgZXhhbXBsZSwgYERPTVF1YWRgIGFuZCBzaW1pbGFyIGluIEZGNDEtKVxuICAgIHJldHVybiBJTkNPUlJFQ1RfVE9fU1RSSU5HIHx8ICEhZXhlYyhjb25zdHJ1Y3RvclJlZ0V4cCwgaW5zcGVjdFNvdXJjZShhcmd1bWVudCkpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuXG5pc0NvbnN0cnVjdG9yTGVnYWN5LnNoYW0gPSB0cnVlO1xuXG4vLyBgSXNDb25zdHJ1Y3RvcmAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzY29uc3RydWN0b3Jcbm1vZHVsZS5leHBvcnRzID0gIWNvbnN0cnVjdCB8fCBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBjYWxsZWQ7XG4gIHJldHVybiBpc0NvbnN0cnVjdG9yTW9kZXJuKGlzQ29uc3RydWN0b3JNb2Rlcm4uY2FsbClcbiAgICB8fCAhaXNDb25zdHJ1Y3Rvck1vZGVybihPYmplY3QpXG4gICAgfHwgIWlzQ29uc3RydWN0b3JNb2Rlcm4oZnVuY3Rpb24gKCkgeyBjYWxsZWQgPSB0cnVlOyB9KVxuICAgIHx8IGNhbGxlZDtcbn0pID8gaXNDb25zdHJ1Y3RvckxlZ2FjeSA6IGlzQ29uc3RydWN0b3JNb2Rlcm47XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcbnZhciBpc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNvbnN0cnVjdG9yJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG52YXIgJEFycmF5ID0gQXJyYXk7XG5cbi8vIGEgcGFydCBvZiBgQXJyYXlTcGVjaWVzQ3JlYXRlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXlzcGVjaWVzY3JlYXRlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcmlnaW5hbEFycmF5KSB7XG4gIHZhciBDO1xuICBpZiAoaXNBcnJheShvcmlnaW5hbEFycmF5KSkge1xuICAgIEMgPSBvcmlnaW5hbEFycmF5LmNvbnN0cnVjdG9yO1xuICAgIC8vIGNyb3NzLXJlYWxtIGZhbGxiYWNrXG4gICAgaWYgKGlzQ29uc3RydWN0b3IoQykgJiYgKEMgPT09ICRBcnJheSB8fCBpc0FycmF5KEMucHJvdG90eXBlKSkpIEMgPSB1bmRlZmluZWQ7XG4gICAgZWxzZSBpZiAoaXNPYmplY3QoQykpIHtcbiAgICAgIEMgPSBDW1NQRUNJRVNdO1xuICAgICAgaWYgKEMgPT09IG51bGwpIEMgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9IHJldHVybiBDID09PSB1bmRlZmluZWQgPyAkQXJyYXkgOiBDO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYXJyYXlTcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xuXG4vLyBgQXJyYXlTcGVjaWVzQ3JlYXRlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXlzcGVjaWVzY3JlYXRlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcmlnaW5hbEFycmF5LCBsZW5ndGgpIHtcbiAgcmV0dXJuIG5ldyAoYXJyYXlTcGVjaWVzQ29uc3RydWN0b3Iob3JpZ2luYWxBcnJheSkpKGxlbmd0aCA9PT0gMCA/IDAgOiBsZW5ndGgpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBJbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBhcnJheVNwZWNpZXNDcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcblxudmFyIHB1c2ggPSB1bmN1cnJ5VGhpcyhbXS5wdXNoKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS57IGZvckVhY2gsIG1hcCwgZmlsdGVyLCBzb21lLCBldmVyeSwgZmluZCwgZmluZEluZGV4LCBmaWx0ZXJSZWplY3QgfWAgbWV0aG9kcyBpbXBsZW1lbnRhdGlvblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChUWVBFKSB7XG4gIHZhciBJU19NQVAgPSBUWVBFID09PSAxO1xuICB2YXIgSVNfRklMVEVSID0gVFlQRSA9PT0gMjtcbiAgdmFyIElTX1NPTUUgPSBUWVBFID09PSAzO1xuICB2YXIgSVNfRVZFUlkgPSBUWVBFID09PSA0O1xuICB2YXIgSVNfRklORF9JTkRFWCA9IFRZUEUgPT09IDY7XG4gIHZhciBJU19GSUxURVJfUkVKRUNUID0gVFlQRSA9PT0gNztcbiAgdmFyIE5PX0hPTEVTID0gVFlQRSA9PT0gNSB8fCBJU19GSU5EX0lOREVYO1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBjYWxsYmFja2ZuLCB0aGF0LCBzcGVjaWZpY0NyZWF0ZSkge1xuICAgIHZhciBPID0gdG9PYmplY3QoJHRoaXMpO1xuICAgIHZhciBzZWxmID0gSW5kZXhlZE9iamVjdChPKTtcbiAgICB2YXIgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2Uoc2VsZik7XG4gICAgdmFyIGJvdW5kRnVuY3Rpb24gPSBiaW5kKGNhbGxiYWNrZm4sIHRoYXQpO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGNyZWF0ZSA9IHNwZWNpZmljQ3JlYXRlIHx8IGFycmF5U3BlY2llc0NyZWF0ZTtcbiAgICB2YXIgdGFyZ2V0ID0gSVNfTUFQID8gY3JlYXRlKCR0aGlzLCBsZW5ndGgpIDogSVNfRklMVEVSIHx8IElTX0ZJTFRFUl9SRUpFQ1QgPyBjcmVhdGUoJHRoaXMsIDApIDogdW5kZWZpbmVkO1xuICAgIHZhciB2YWx1ZSwgcmVzdWx0O1xuICAgIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSBpZiAoTk9fSE9MRVMgfHwgaW5kZXggaW4gc2VsZikge1xuICAgICAgdmFsdWUgPSBzZWxmW2luZGV4XTtcbiAgICAgIHJlc3VsdCA9IGJvdW5kRnVuY3Rpb24odmFsdWUsIGluZGV4LCBPKTtcbiAgICAgIGlmIChUWVBFKSB7XG4gICAgICAgIGlmIChJU19NQVApIHRhcmdldFtpbmRleF0gPSByZXN1bHQ7IC8vIG1hcFxuICAgICAgICBlbHNlIGlmIChyZXN1bHQpIHN3aXRjaCAoVFlQRSkge1xuICAgICAgICAgIGNhc2UgMzogcmV0dXJuIHRydWU7ICAgICAgICAgICAgICAvLyBzb21lXG4gICAgICAgICAgY2FzZSA1OiByZXR1cm4gdmFsdWU7ICAgICAgICAgICAgIC8vIGZpbmRcbiAgICAgICAgICBjYXNlIDY6IHJldHVybiBpbmRleDsgICAgICAgICAgICAgLy8gZmluZEluZGV4XG4gICAgICAgICAgY2FzZSAyOiBwdXNoKHRhcmdldCwgdmFsdWUpOyAgICAgIC8vIGZpbHRlclxuICAgICAgICB9IGVsc2Ugc3dpdGNoIChUWVBFKSB7XG4gICAgICAgICAgY2FzZSA0OiByZXR1cm4gZmFsc2U7ICAgICAgICAgICAgIC8vIGV2ZXJ5XG4gICAgICAgICAgY2FzZSA3OiBwdXNoKHRhcmdldCwgdmFsdWUpOyAgICAgIC8vIGZpbHRlclJlamVjdFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBJU19GSU5EX0lOREVYID8gLTEgOiBJU19TT01FIHx8IElTX0VWRVJZID8gSVNfRVZFUlkgOiB0YXJnZXQ7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5mb3JFYWNoYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZm9yZWFjaFxuICBmb3JFYWNoOiBjcmVhdGVNZXRob2QoMCksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUubWFwYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUubWFwXG4gIG1hcDogY3JlYXRlTWV0aG9kKDEpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmZpbHRlcmAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZpbHRlclxuICBmaWx0ZXI6IGNyZWF0ZU1ldGhvZCgyKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5zb21lYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuc29tZVxuICBzb21lOiBjcmVhdGVNZXRob2QoMyksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZXZlcnlgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5ldmVyeVxuICBldmVyeTogY3JlYXRlTWV0aG9kKDQpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmZpbmRgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maW5kXG4gIGZpbmQ6IGNyZWF0ZU1ldGhvZCg1KSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5maW5kSW5kZXhgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maW5kSW5kZXhcbiAgZmluZEluZGV4OiBjcmVhdGVNZXRob2QoNiksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZmlsdGVyUmVqZWN0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtYXJyYXktZmlsdGVyaW5nXG4gIGZpbHRlclJlamVjdDogY3JlYXRlTWV0aG9kKDcpXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleScpO1xudmFyICR0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBuYXRpdmVPYmplY3RDcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIG9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lc0V4dGVybmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLWV4dGVybmFsJyk7XG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBkZWZpbmVQcm9wZXJ0aWVzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydGllcycpO1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1wcm9wZXJ0eS1pcy1lbnVtZXJhYmxlJyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciBkZWZpbmVCdWlsdEluQWNjZXNzb3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLWFjY2Vzc29yJyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciB3cmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLXdyYXBwZWQnKTtcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG52YXIgZGVmaW5lU3ltYm9sVG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWRlZmluZS10by1wcmltaXRpdmUnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcbnZhciAkZm9yRWFjaCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5mb3JFYWNoO1xuXG52YXIgSElEREVOID0gc2hhcmVkS2V5KCdoaWRkZW4nKTtcbnZhciBTWU1CT0wgPSAnU3ltYm9sJztcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcblxudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3IoU1lNQk9MKTtcblxudmFyIE9iamVjdFByb3RvdHlwZSA9IE9iamVjdFtQUk9UT1RZUEVdO1xudmFyICRTeW1ib2wgPSBnbG9iYWxUaGlzLlN5bWJvbDtcbnZhciBTeW1ib2xQcm90b3R5cGUgPSAkU3ltYm9sICYmICRTeW1ib2xbUFJPVE9UWVBFXTtcbnZhciBSYW5nZUVycm9yID0gZ2xvYmFsVGhpcy5SYW5nZUVycm9yO1xudmFyIFR5cGVFcnJvciA9IGdsb2JhbFRoaXMuVHlwZUVycm9yO1xudmFyIFFPYmplY3QgPSBnbG9iYWxUaGlzLlFPYmplY3Q7XG52YXIgbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlLmY7XG52YXIgbmF0aXZlRGVmaW5lUHJvcGVydHkgPSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mO1xudmFyIG5hdGl2ZUdldE93blByb3BlcnR5TmFtZXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzRXh0ZXJuYWwuZjtcbnZhciBuYXRpdmVQcm9wZXJ0eUlzRW51bWVyYWJsZSA9IHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlLmY7XG52YXIgcHVzaCA9IHVuY3VycnlUaGlzKFtdLnB1c2gpO1xuXG52YXIgQWxsU3ltYm9scyA9IHNoYXJlZCgnc3ltYm9scycpO1xudmFyIE9iamVjdFByb3RvdHlwZVN5bWJvbHMgPSBzaGFyZWQoJ29wLXN5bWJvbHMnKTtcbnZhciBXZWxsS25vd25TeW1ib2xzU3RvcmUgPSBzaGFyZWQoJ3drcycpO1xuXG4vLyBEb24ndCB1c2Ugc2V0dGVycyBpbiBRdCBTY3JpcHQsIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8xNzNcbnZhciBVU0VfU0VUVEVSID0gIVFPYmplY3QgfHwgIVFPYmplY3RbUFJPVE9UWVBFXSB8fCAhUU9iamVjdFtQUk9UT1RZUEVdLmZpbmRDaGlsZDtcblxuLy8gZmFsbGJhY2sgZm9yIG9sZCBBbmRyb2lkLCBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9Njg3XG52YXIgZmFsbGJhY2tEZWZpbmVQcm9wZXJ0eSA9IGZ1bmN0aW9uIChPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIHZhciBPYmplY3RQcm90b3R5cGVEZXNjcmlwdG9yID0gbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdFByb3RvdHlwZSwgUCk7XG4gIGlmIChPYmplY3RQcm90b3R5cGVEZXNjcmlwdG9yKSBkZWxldGUgT2JqZWN0UHJvdG90eXBlW1BdO1xuICBuYXRpdmVEZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKTtcbiAgaWYgKE9iamVjdFByb3RvdHlwZURlc2NyaXB0b3IgJiYgTyAhPT0gT2JqZWN0UHJvdG90eXBlKSB7XG4gICAgbmF0aXZlRGVmaW5lUHJvcGVydHkoT2JqZWN0UHJvdG90eXBlLCBQLCBPYmplY3RQcm90b3R5cGVEZXNjcmlwdG9yKTtcbiAgfVxufTtcblxudmFyIHNldFN5bWJvbERlc2NyaXB0b3IgPSBERVNDUklQVE9SUyAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBuYXRpdmVPYmplY3RDcmVhdGUobmF0aXZlRGVmaW5lUHJvcGVydHkoe30sICdhJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbmF0aXZlRGVmaW5lUHJvcGVydHkodGhpcywgJ2EnLCB7IHZhbHVlOiA3IH0pLmE7IH1cbiAgfSkpLmEgIT09IDc7XG59KSA/IGZhbGxiYWNrRGVmaW5lUHJvcGVydHkgOiBuYXRpdmVEZWZpbmVQcm9wZXJ0eTtcblxudmFyIHdyYXAgPSBmdW5jdGlvbiAodGFnLCBkZXNjcmlwdGlvbikge1xuICB2YXIgc3ltYm9sID0gQWxsU3ltYm9sc1t0YWddID0gbmF0aXZlT2JqZWN0Q3JlYXRlKFN5bWJvbFByb3RvdHlwZSk7XG4gIHNldEludGVybmFsU3RhdGUoc3ltYm9sLCB7XG4gICAgdHlwZTogU1lNQk9MLFxuICAgIHRhZzogdGFnLFxuICAgIGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvblxuICB9KTtcbiAgaWYgKCFERVNDUklQVE9SUykgc3ltYm9sLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247XG4gIHJldHVybiBzeW1ib2w7XG59O1xuXG52YXIgJGRlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcykge1xuICBpZiAoTyA9PT0gT2JqZWN0UHJvdG90eXBlKSAkZGVmaW5lUHJvcGVydHkoT2JqZWN0UHJvdG90eXBlU3ltYm9scywgUCwgQXR0cmlidXRlcyk7XG4gIGFuT2JqZWN0KE8pO1xuICB2YXIga2V5ID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmIChoYXNPd24oQWxsU3ltYm9scywga2V5KSkge1xuICAgIGlmICghQXR0cmlidXRlcy5lbnVtZXJhYmxlKSB7XG4gICAgICBpZiAoIWhhc093bihPLCBISURERU4pKSBuYXRpdmVEZWZpbmVQcm9wZXJ0eShPLCBISURERU4sIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCBuYXRpdmVPYmplY3RDcmVhdGUobnVsbCkpKTtcbiAgICAgIE9bSElEREVOXVtrZXldID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGhhc093bihPLCBISURERU4pICYmIE9bSElEREVOXVtrZXldKSBPW0hJRERFTl1ba2V5XSA9IGZhbHNlO1xuICAgICAgQXR0cmlidXRlcyA9IG5hdGl2ZU9iamVjdENyZWF0ZShBdHRyaWJ1dGVzLCB7IGVudW1lcmFibGU6IGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigwLCBmYWxzZSkgfSk7XG4gICAgfSByZXR1cm4gc2V0U3ltYm9sRGVzY3JpcHRvcihPLCBrZXksIEF0dHJpYnV0ZXMpO1xuICB9IHJldHVybiBuYXRpdmVEZWZpbmVQcm9wZXJ0eShPLCBrZXksIEF0dHJpYnV0ZXMpO1xufTtcblxudmFyICRkZWZpbmVQcm9wZXJ0aWVzID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICB2YXIgcHJvcGVydGllcyA9IHRvSW5kZXhlZE9iamVjdChQcm9wZXJ0aWVzKTtcbiAgdmFyIGtleXMgPSBvYmplY3RLZXlzKHByb3BlcnRpZXMpLmNvbmNhdCgkZ2V0T3duUHJvcGVydHlTeW1ib2xzKHByb3BlcnRpZXMpKTtcbiAgJGZvckVhY2goa2V5cywgZnVuY3Rpb24gKGtleSkge1xuICAgIGlmICghREVTQ1JJUFRPUlMgfHwgY2FsbCgkcHJvcGVydHlJc0VudW1lcmFibGUsIHByb3BlcnRpZXMsIGtleSkpICRkZWZpbmVQcm9wZXJ0eShPLCBrZXksIHByb3BlcnRpZXNba2V5XSk7XG4gIH0pO1xuICByZXR1cm4gTztcbn07XG5cbnZhciAkY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKE8sIFByb3BlcnRpZXMpIHtcbiAgcmV0dXJuIFByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCA/IG5hdGl2ZU9iamVjdENyZWF0ZShPKSA6ICRkZWZpbmVQcm9wZXJ0aWVzKG5hdGl2ZU9iamVjdENyZWF0ZShPKSwgUHJvcGVydGllcyk7XG59O1xuXG52YXIgJHByb3BlcnR5SXNFbnVtZXJhYmxlID0gZnVuY3Rpb24gcHJvcGVydHlJc0VudW1lcmFibGUoVikge1xuICB2YXIgUCA9IHRvUHJvcGVydHlLZXkoVik7XG4gIHZhciBlbnVtZXJhYmxlID0gY2FsbChuYXRpdmVQcm9wZXJ0eUlzRW51bWVyYWJsZSwgdGhpcywgUCk7XG4gIGlmICh0aGlzID09PSBPYmplY3RQcm90b3R5cGUgJiYgaGFzT3duKEFsbFN5bWJvbHMsIFApICYmICFoYXNPd24oT2JqZWN0UHJvdG90eXBlU3ltYm9scywgUCkpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIGVudW1lcmFibGUgfHwgIWhhc093bih0aGlzLCBQKSB8fCAhaGFzT3duKEFsbFN5bWJvbHMsIFApIHx8IGhhc093bih0aGlzLCBISURERU4pICYmIHRoaXNbSElEREVOXVtQXVxuICAgID8gZW51bWVyYWJsZSA6IHRydWU7XG59O1xuXG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKSB7XG4gIHZhciBpdCA9IHRvSW5kZXhlZE9iamVjdChPKTtcbiAgdmFyIGtleSA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGlmIChpdCA9PT0gT2JqZWN0UHJvdG90eXBlICYmIGhhc093bihBbGxTeW1ib2xzLCBrZXkpICYmICFoYXNPd24oT2JqZWN0UHJvdG90eXBlU3ltYm9scywga2V5KSkgcmV0dXJuO1xuICB2YXIgZGVzY3JpcHRvciA9IG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KTtcbiAgaWYgKGRlc2NyaXB0b3IgJiYgaGFzT3duKEFsbFN5bWJvbHMsIGtleSkgJiYgIShoYXNPd24oaXQsIEhJRERFTikgJiYgaXRbSElEREVOXVtrZXldKSkge1xuICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IHRydWU7XG4gIH1cbiAgcmV0dXJuIGRlc2NyaXB0b3I7XG59O1xuXG52YXIgJGdldE93blByb3BlcnR5TmFtZXMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKE8pIHtcbiAgdmFyIG5hbWVzID0gbmF0aXZlR2V0T3duUHJvcGVydHlOYW1lcyh0b0luZGV4ZWRPYmplY3QoTykpO1xuICB2YXIgcmVzdWx0ID0gW107XG4gICRmb3JFYWNoKG5hbWVzLCBmdW5jdGlvbiAoa2V5KSB7XG4gICAgaWYgKCFoYXNPd24oQWxsU3ltYm9scywga2V5KSAmJiAhaGFzT3duKGhpZGRlbktleXMsIGtleSkpIHB1c2gocmVzdWx0LCBrZXkpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbnZhciAkZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZnVuY3Rpb24gKE8pIHtcbiAgdmFyIElTX09CSkVDVF9QUk9UT1RZUEUgPSBPID09PSBPYmplY3RQcm90b3R5cGU7XG4gIHZhciBuYW1lcyA9IG5hdGl2ZUdldE93blByb3BlcnR5TmFtZXMoSVNfT0JKRUNUX1BST1RPVFlQRSA/IE9iamVjdFByb3RvdHlwZVN5bWJvbHMgOiB0b0luZGV4ZWRPYmplY3QoTykpO1xuICB2YXIgcmVzdWx0ID0gW107XG4gICRmb3JFYWNoKG5hbWVzLCBmdW5jdGlvbiAoa2V5KSB7XG4gICAgaWYgKGhhc093bihBbGxTeW1ib2xzLCBrZXkpICYmICghSVNfT0JKRUNUX1BST1RPVFlQRSB8fCBoYXNPd24oT2JqZWN0UHJvdG90eXBlLCBrZXkpKSkge1xuICAgICAgcHVzaChyZXN1bHQsIEFsbFN5bWJvbHNba2V5XSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8vIGBTeW1ib2xgIGNvbnN0cnVjdG9yXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC1jb25zdHJ1Y3RvclxuaWYgKCFOQVRJVkVfU1lNQk9MKSB7XG4gICRTeW1ib2wgPSBmdW5jdGlvbiBTeW1ib2woKSB7XG4gICAgaWYgKGlzUHJvdG90eXBlT2YoU3ltYm9sUHJvdG90eXBlLCB0aGlzKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignU3ltYm9sIGlzIG5vdCBhIGNvbnN0cnVjdG9yJyk7XG4gICAgdmFyIGRlc2NyaXB0aW9uID0gIWFyZ3VtZW50cy5sZW5ndGggfHwgYXJndW1lbnRzWzBdID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiAkdG9TdHJpbmcoYXJndW1lbnRzWzBdKTtcbiAgICB2YXIgdGFnID0gdWlkKGRlc2NyaXB0aW9uKTtcbiAgICB2YXIgc2V0dGVyID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICB2YXIgJHRoaXMgPSB0aGlzID09PSB1bmRlZmluZWQgPyBnbG9iYWxUaGlzIDogdGhpcztcbiAgICAgIGlmICgkdGhpcyA9PT0gT2JqZWN0UHJvdG90eXBlKSBjYWxsKHNldHRlciwgT2JqZWN0UHJvdG90eXBlU3ltYm9scywgdmFsdWUpO1xuICAgICAgaWYgKGhhc093bigkdGhpcywgSElEREVOKSAmJiBoYXNPd24oJHRoaXNbSElEREVOXSwgdGFnKSkgJHRoaXNbSElEREVOXVt0YWddID0gZmFsc2U7XG4gICAgICB2YXIgZGVzY3JpcHRvciA9IGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCB2YWx1ZSk7XG4gICAgICB0cnkge1xuICAgICAgICBzZXRTeW1ib2xEZXNjcmlwdG9yKCR0aGlzLCB0YWcsIGRlc2NyaXB0b3IpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKCEoZXJyb3IgaW5zdGFuY2VvZiBSYW5nZUVycm9yKSkgdGhyb3cgZXJyb3I7XG4gICAgICAgIGZhbGxiYWNrRGVmaW5lUHJvcGVydHkoJHRoaXMsIHRhZywgZGVzY3JpcHRvcik7XG4gICAgICB9XG4gICAgfTtcbiAgICBpZiAoREVTQ1JJUFRPUlMgJiYgVVNFX1NFVFRFUikgc2V0U3ltYm9sRGVzY3JpcHRvcihPYmplY3RQcm90b3R5cGUsIHRhZywgeyBjb25maWd1cmFibGU6IHRydWUsIHNldDogc2V0dGVyIH0pO1xuICAgIHJldHVybiB3cmFwKHRhZywgZGVzY3JpcHRpb24pO1xuICB9O1xuXG4gIFN5bWJvbFByb3RvdHlwZSA9ICRTeW1ib2xbUFJPVE9UWVBFXTtcblxuICBkZWZpbmVCdWlsdEluKFN5bWJvbFByb3RvdHlwZSwgJ3RvU3RyaW5nJywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIGdldEludGVybmFsU3RhdGUodGhpcykudGFnO1xuICB9KTtcblxuICBkZWZpbmVCdWlsdEluKCRTeW1ib2wsICd3aXRob3V0U2V0dGVyJywgZnVuY3Rpb24gKGRlc2NyaXB0aW9uKSB7XG4gICAgcmV0dXJuIHdyYXAodWlkKGRlc2NyaXB0aW9uKSwgZGVzY3JpcHRpb24pO1xuICB9KTtcblxuICBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZS5mID0gJHByb3BlcnR5SXNFbnVtZXJhYmxlO1xuICBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mID0gJGRlZmluZVByb3BlcnR5O1xuICBkZWZpbmVQcm9wZXJ0aWVzTW9kdWxlLmYgPSAkZGVmaW5lUHJvcGVydGllcztcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlLmYgPSAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuICBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlLmYgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzRXh0ZXJuYWwuZiA9ICRnZXRPd25Qcm9wZXJ0eU5hbWVzO1xuICBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUuZiA9ICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG5cbiAgd3JhcHBlZFdlbGxLbm93blN5bWJvbE1vZHVsZS5mID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICByZXR1cm4gd3JhcCh3ZWxsS25vd25TeW1ib2wobmFtZSksIG5hbWUpO1xuICB9O1xuXG4gIGlmIChERVNDUklQVE9SUykge1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLVN5bWJvbC1kZXNjcmlwdGlvblxuICAgIGRlZmluZUJ1aWx0SW5BY2Nlc3NvcihTeW1ib2xQcm90b3R5cGUsICdkZXNjcmlwdGlvbicsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24gZGVzY3JpcHRpb24oKSB7XG4gICAgICAgIHJldHVybiBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpLmRlc2NyaXB0aW9uO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmICghSVNfUFVSRSkge1xuICAgICAgZGVmaW5lQnVpbHRJbihPYmplY3RQcm90b3R5cGUsICdwcm9wZXJ0eUlzRW51bWVyYWJsZScsICRwcm9wZXJ0eUlzRW51bWVyYWJsZSwgeyB1bnNhZmU6IHRydWUgfSk7XG4gICAgfVxuICB9XG59XG5cbiQoeyBnbG9iYWw6IHRydWUsIGNvbnN0cnVjdG9yOiB0cnVlLCB3cmFwOiB0cnVlLCBmb3JjZWQ6ICFOQVRJVkVfU1lNQk9MLCBzaGFtOiAhTkFUSVZFX1NZTUJPTCB9LCB7XG4gIFN5bWJvbDogJFN5bWJvbFxufSk7XG5cbiRmb3JFYWNoKG9iamVjdEtleXMoV2VsbEtub3duU3ltYm9sc1N0b3JlKSwgZnVuY3Rpb24gKG5hbWUpIHtcbiAgZGVmaW5lV2VsbEtub3duU3ltYm9sKG5hbWUpO1xufSk7XG5cbiQoeyB0YXJnZXQ6IFNZTUJPTCwgc3RhdDogdHJ1ZSwgZm9yY2VkOiAhTkFUSVZFX1NZTUJPTCB9LCB7XG4gIHVzZVNldHRlcjogZnVuY3Rpb24gKCkgeyBVU0VfU0VUVEVSID0gdHJ1ZTsgfSxcbiAgdXNlU2ltcGxlOiBmdW5jdGlvbiAoKSB7IFVTRV9TRVRURVIgPSBmYWxzZTsgfVxufSk7XG5cbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6ICFOQVRJVkVfU1lNQk9MLCBzaGFtOiAhREVTQ1JJUFRPUlMgfSwge1xuICAvLyBgT2JqZWN0LmNyZWF0ZWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmNyZWF0ZVxuICBjcmVhdGU6ICRjcmVhdGUsXG4gIC8vIGBPYmplY3QuZGVmaW5lUHJvcGVydHlgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0eVxuICBkZWZpbmVQcm9wZXJ0eTogJGRlZmluZVByb3BlcnR5LFxuICAvLyBgT2JqZWN0LmRlZmluZVByb3BlcnRpZXNgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0aWVzXG4gIGRlZmluZVByb3BlcnRpZXM6ICRkZWZpbmVQcm9wZXJ0aWVzLFxuICAvLyBgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcmAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5ZGVzY3JpcHRvcnNcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yXG59KTtcblxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogIU5BVElWRV9TWU1CT0wgfSwge1xuICAvLyBgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eW5hbWVzXG4gIGdldE93blByb3BlcnR5TmFtZXM6ICRnZXRPd25Qcm9wZXJ0eU5hbWVzXG59KTtcblxuLy8gYFN5bWJvbC5wcm90b3R5cGVbQEB0b1ByaW1pdGl2ZV1gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wucHJvdG90eXBlLUBAdG9wcmltaXRpdmVcbmRlZmluZVN5bWJvbFRvUHJpbWl0aXZlKCk7XG5cbi8vIGBTeW1ib2wucHJvdG90eXBlW0BAdG9TdHJpbmdUYWddYCBwcm9wZXJ0eVxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wucHJvdG90eXBlLUBAdG9zdHJpbmd0YWdcbnNldFRvU3RyaW5nVGFnKCRTeW1ib2wsIFNZTUJPTCk7XG5cbmhpZGRlbktleXNbSElEREVOXSA9IHRydWU7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1zeW1ib2wgLS0gc2FmZSAqL1xubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfU1lNQk9MICYmICEhU3ltYm9sWydmb3InXSAmJiAhIVN5bWJvbC5rZXlGb3I7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBOQVRJVkVfU1lNQk9MX1JFR0lTVFJZID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1yZWdpc3RyeS1kZXRlY3Rpb24nKTtcblxudmFyIFN0cmluZ1RvU3ltYm9sUmVnaXN0cnkgPSBzaGFyZWQoJ3N0cmluZy10by1zeW1ib2wtcmVnaXN0cnknKTtcbnZhciBTeW1ib2xUb1N0cmluZ1JlZ2lzdHJ5ID0gc2hhcmVkKCdzeW1ib2wtdG8tc3RyaW5nLXJlZ2lzdHJ5Jyk7XG5cbi8vIGBTeW1ib2wuZm9yYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLmZvclxuJCh7IHRhcmdldDogJ1N5bWJvbCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogIU5BVElWRV9TWU1CT0xfUkVHSVNUUlkgfSwge1xuICAnZm9yJzogZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBzdHJpbmcgPSB0b1N0cmluZyhrZXkpO1xuICAgIGlmIChoYXNPd24oU3RyaW5nVG9TeW1ib2xSZWdpc3RyeSwgc3RyaW5nKSkgcmV0dXJuIFN0cmluZ1RvU3ltYm9sUmVnaXN0cnlbc3RyaW5nXTtcbiAgICB2YXIgc3ltYm9sID0gZ2V0QnVpbHRJbignU3ltYm9sJykoc3RyaW5nKTtcbiAgICBTdHJpbmdUb1N5bWJvbFJlZ2lzdHJ5W3N0cmluZ10gPSBzeW1ib2w7XG4gICAgU3ltYm9sVG9TdHJpbmdSZWdpc3RyeVtzeW1ib2xdID0gc3RyaW5nO1xuICAgIHJldHVybiBzeW1ib2w7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtc3ltYm9sJyk7XG52YXIgdHJ5VG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZycpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBOQVRJVkVfU1lNQk9MX1JFR0lTVFJZID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1yZWdpc3RyeS1kZXRlY3Rpb24nKTtcblxudmFyIFN5bWJvbFRvU3RyaW5nUmVnaXN0cnkgPSBzaGFyZWQoJ3N5bWJvbC10by1zdHJpbmctcmVnaXN0cnknKTtcblxuLy8gYFN5bWJvbC5rZXlGb3JgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wua2V5Zm9yXG4kKHsgdGFyZ2V0OiAnU3ltYm9sJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiAhTkFUSVZFX1NZTUJPTF9SRUdJU1RSWSB9LCB7XG4gIGtleUZvcjogZnVuY3Rpb24ga2V5Rm9yKHN5bSkge1xuICAgIGlmICghaXNTeW1ib2woc3ltKSkgdGhyb3cgbmV3IFR5cGVFcnJvcih0cnlUb1N0cmluZyhzeW0pICsgJyBpcyBub3QgYSBzeW1ib2wnKTtcbiAgICBpZiAoaGFzT3duKFN5bWJvbFRvU3RyaW5nUmVnaXN0cnksIHN5bSkpIHJldHVybiBTeW1ib2xUb1N0cmluZ1JlZ2lzdHJ5W3N5bV07XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfQklORCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZScpO1xuXG52YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG52YXIgYXBwbHkgPSBGdW5jdGlvblByb3RvdHlwZS5hcHBseTtcbnZhciBjYWxsID0gRnVuY3Rpb25Qcm90b3R5cGUuY2FsbDtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWZ1bmN0aW9uLXByb3RvdHlwZS1iaW5kLCBlcy9uby1yZWZsZWN0IC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gdHlwZW9mIFJlZmxlY3QgPT0gJ29iamVjdCcgJiYgUmVmbGVjdC5hcHBseSB8fCAoTkFUSVZFX0JJTkQgPyBjYWxsLmJpbmQoYXBwbHkpIDogZnVuY3Rpb24gKCkge1xuICByZXR1cm4gY2FsbC5hcHBseShhcHBseSwgYXJndW1lbnRzKTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcblxudmFyIHB1c2ggPSB1bmN1cnJ5VGhpcyhbXS5wdXNoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAocmVwbGFjZXIpIHtcbiAgaWYgKGlzQ2FsbGFibGUocmVwbGFjZXIpKSByZXR1cm4gcmVwbGFjZXI7XG4gIGlmICghaXNBcnJheShyZXBsYWNlcikpIHJldHVybjtcbiAgdmFyIHJhd0xlbmd0aCA9IHJlcGxhY2VyLmxlbmd0aDtcbiAgdmFyIGtleXMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCByYXdMZW5ndGg7IGkrKykge1xuICAgIHZhciBlbGVtZW50ID0gcmVwbGFjZXJbaV07XG4gICAgaWYgKHR5cGVvZiBlbGVtZW50ID09ICdzdHJpbmcnKSBwdXNoKGtleXMsIGVsZW1lbnQpO1xuICAgIGVsc2UgaWYgKHR5cGVvZiBlbGVtZW50ID09ICdudW1iZXInIHx8IGNsYXNzb2YoZWxlbWVudCkgPT09ICdOdW1iZXInIHx8IGNsYXNzb2YoZWxlbWVudCkgPT09ICdTdHJpbmcnKSBwdXNoKGtleXMsIHRvU3RyaW5nKGVsZW1lbnQpKTtcbiAgfVxuICB2YXIga2V5c0xlbmd0aCA9IGtleXMubGVuZ3RoO1xuICB2YXIgcm9vdCA9IHRydWU7XG4gIHJldHVybiBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgIGlmIChyb290KSB7XG4gICAgICByb290ID0gZmFsc2U7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGlmIChpc0FycmF5KHRoaXMpKSByZXR1cm4gdmFsdWU7XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBrZXlzTGVuZ3RoOyBqKyspIGlmIChrZXlzW2pdID09PSBrZXkpIHJldHVybiB2YWx1ZTtcbiAgfTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBhcHBseSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1hcHBseScpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCcpO1xudmFyIGFycmF5U2xpY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc2xpY2UnKTtcbnZhciBnZXRSZXBsYWNlckZ1bmN0aW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1qc29uLXJlcGxhY2VyLWZ1bmN0aW9uJyk7XG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG5cbnZhciAkU3RyaW5nID0gU3RyaW5nO1xudmFyICRzdHJpbmdpZnkgPSBnZXRCdWlsdEluKCdKU09OJywgJ3N0cmluZ2lmeScpO1xudmFyIGV4ZWMgPSB1bmN1cnJ5VGhpcygvLi8uZXhlYyk7XG52YXIgY2hhckF0ID0gdW5jdXJyeVRoaXMoJycuY2hhckF0KTtcbnZhciBjaGFyQ29kZUF0ID0gdW5jdXJyeVRoaXMoJycuY2hhckNvZGVBdCk7XG52YXIgcmVwbGFjZSA9IHVuY3VycnlUaGlzKCcnLnJlcGxhY2UpO1xudmFyIG51bWJlclRvU3RyaW5nID0gdW5jdXJyeVRoaXMoMS4wLnRvU3RyaW5nKTtcblxudmFyIHRlc3RlciA9IC9bXFx1RDgwMC1cXHVERkZGXS9nO1xudmFyIGxvdyA9IC9eW1xcdUQ4MDAtXFx1REJGRl0kLztcbnZhciBoaSA9IC9eW1xcdURDMDAtXFx1REZGRl0kLztcblxudmFyIFdST05HX1NZTUJPTFNfQ09OVkVSU0lPTiA9ICFOQVRJVkVfU1lNQk9MIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHN5bWJvbCA9IGdldEJ1aWx0SW4oJ1N5bWJvbCcpKCdzdHJpbmdpZnkgZGV0ZWN0aW9uJyk7XG4gIC8vIE1TIEVkZ2UgY29udmVydHMgc3ltYm9sIHZhbHVlcyB0byBKU09OIGFzIHt9XG4gIHJldHVybiAkc3RyaW5naWZ5KFtzeW1ib2xdKSAhPT0gJ1tudWxsXSdcbiAgICAvLyBXZWJLaXQgY29udmVydHMgc3ltYm9sIHZhbHVlcyB0byBKU09OIGFzIG51bGxcbiAgICB8fCAkc3RyaW5naWZ5KHsgYTogc3ltYm9sIH0pICE9PSAne30nXG4gICAgLy8gVjggdGhyb3dzIG9uIGJveGVkIHN5bWJvbHNcbiAgICB8fCAkc3RyaW5naWZ5KE9iamVjdChzeW1ib2wpKSAhPT0gJ3t9Jztcbn0pO1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC13ZWxsLWZvcm1lZC1zdHJpbmdpZnlcbnZhciBJTExfRk9STUVEX1VOSUNPREUgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAkc3RyaW5naWZ5KCdcXHVERjA2XFx1RDgzNCcpICE9PSAnXCJcXFxcdWRmMDZcXFxcdWQ4MzRcIidcbiAgICB8fCAkc3RyaW5naWZ5KCdcXHVERUFEJykgIT09ICdcIlxcXFx1ZGVhZFwiJztcbn0pO1xuXG52YXIgc3RyaW5naWZ5V2l0aFN5bWJvbHNGaXggPSBmdW5jdGlvbiAoaXQsIHJlcGxhY2VyKSB7XG4gIHZhciBhcmdzID0gYXJyYXlTbGljZShhcmd1bWVudHMpO1xuICB2YXIgJHJlcGxhY2VyID0gZ2V0UmVwbGFjZXJGdW5jdGlvbihyZXBsYWNlcik7XG4gIGlmICghaXNDYWxsYWJsZSgkcmVwbGFjZXIpICYmIChpdCA9PT0gdW5kZWZpbmVkIHx8IGlzU3ltYm9sKGl0KSkpIHJldHVybjsgLy8gSUU4IHJldHVybnMgc3RyaW5nIG9uIHVuZGVmaW5lZFxuICBhcmdzWzFdID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAvLyBzb21lIG9sZCBpbXBsZW1lbnRhdGlvbnMgKGxpa2UgV2ViS2l0KSBjb3VsZCBwYXNzIG51bWJlcnMgYXMga2V5c1xuICAgIGlmIChpc0NhbGxhYmxlKCRyZXBsYWNlcikpIHZhbHVlID0gY2FsbCgkcmVwbGFjZXIsIHRoaXMsICRTdHJpbmcoa2V5KSwgdmFsdWUpO1xuICAgIGlmICghaXNTeW1ib2wodmFsdWUpKSByZXR1cm4gdmFsdWU7XG4gIH07XG4gIHJldHVybiBhcHBseSgkc3RyaW5naWZ5LCBudWxsLCBhcmdzKTtcbn07XG5cbnZhciBmaXhJbGxGb3JtZWQgPSBmdW5jdGlvbiAobWF0Y2gsIG9mZnNldCwgc3RyaW5nKSB7XG4gIHZhciBwcmV2ID0gY2hhckF0KHN0cmluZywgb2Zmc2V0IC0gMSk7XG4gIHZhciBuZXh0ID0gY2hhckF0KHN0cmluZywgb2Zmc2V0ICsgMSk7XG4gIGlmICgoZXhlYyhsb3csIG1hdGNoKSAmJiAhZXhlYyhoaSwgbmV4dCkpIHx8IChleGVjKGhpLCBtYXRjaCkgJiYgIWV4ZWMobG93LCBwcmV2KSkpIHtcbiAgICByZXR1cm4gJ1xcXFx1JyArIG51bWJlclRvU3RyaW5nKGNoYXJDb2RlQXQobWF0Y2gsIDApLCAxNik7XG4gIH0gcmV0dXJuIG1hdGNoO1xufTtcblxuaWYgKCRzdHJpbmdpZnkpIHtcbiAgLy8gYEpTT04uc3RyaW5naWZ5YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1qc29uLnN0cmluZ2lmeVxuICAkKHsgdGFyZ2V0OiAnSlNPTicsIHN0YXQ6IHRydWUsIGFyaXR5OiAzLCBmb3JjZWQ6IFdST05HX1NZTUJPTFNfQ09OVkVSU0lPTiB8fCBJTExfRk9STUVEX1VOSUNPREUgfSwge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycyAtLSByZXF1aXJlZCBmb3IgYC5sZW5ndGhgXG4gICAgc3RyaW5naWZ5OiBmdW5jdGlvbiBzdHJpbmdpZnkoaXQsIHJlcGxhY2VyLCBzcGFjZSkge1xuICAgICAgdmFyIGFyZ3MgPSBhcnJheVNsaWNlKGFyZ3VtZW50cyk7XG4gICAgICB2YXIgcmVzdWx0ID0gYXBwbHkoV1JPTkdfU1lNQk9MU19DT05WRVJTSU9OID8gc3RyaW5naWZ5V2l0aFN5bWJvbHNGaXggOiAkc3RyaW5naWZ5LCBudWxsLCBhcmdzKTtcbiAgICAgIHJldHVybiBJTExfRk9STUVEX1VOSUNPREUgJiYgdHlwZW9mIHJlc3VsdCA9PSAnc3RyaW5nJyA/IHJlcGxhY2UocmVzdWx0LCB0ZXN0ZXIsIGZpeElsbEZvcm1lZCkgOiByZXN1bHQ7XG4gICAgfVxuICB9KTtcbn1cbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG5cbi8vIFY4IH4gQ2hyb21lIDM4IGFuZCAzOSBgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9sc2AgZmFpbHMgb24gcHJpbWl0aXZlc1xuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzQ0M1xudmFyIEZPUkNFRCA9ICFOQVRJVkVfU1lNQk9MIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHsgZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlLmYoMSk7IH0pO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9sc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eXN5bWJvbHNcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IEZPUkNFRCB9LCB7XG4gIGdldE93blByb3BlcnR5U3ltYm9sczogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlTeW1ib2xzKGl0KSB7XG4gICAgdmFyICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUuZjtcbiAgICByZXR1cm4gJGdldE93blByb3BlcnR5U3ltYm9scyA/ICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHModG9PYmplY3QoaXQpKSA6IFtdO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgdGhpcyBtb2R1bGUgZnJvbSBgY29yZS1qc0A0YCBzaW5jZSBpdCdzIHNwbGl0IHRvIG1vZHVsZXMgbGlzdGVkIGJlbG93XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLnN5bWJvbC5jb25zdHJ1Y3RvcicpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5zeW1ib2wuZm9yJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLnN5bWJvbC5rZXktZm9yJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLmpzb24uc3RyaW5naWZ5Jyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLm9iamVjdC5nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMnKTtcbiIsICIvLyBgU3ltYm9sLnByb3RvdHlwZS5kZXNjcmlwdGlvbmAgZ2V0dGVyXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5wcm90b3R5cGUuZGVzY3JpcHRpb25cbid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIGRlZmluZUJ1aWx0SW5BY2Nlc3NvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4tYWNjZXNzb3InKTtcbnZhciBjb3B5Q29uc3RydWN0b3JQcm9wZXJ0aWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvcHktY29uc3RydWN0b3ItcHJvcGVydGllcycpO1xuXG52YXIgTmF0aXZlU3ltYm9sID0gZ2xvYmFsVGhpcy5TeW1ib2w7XG52YXIgU3ltYm9sUHJvdG90eXBlID0gTmF0aXZlU3ltYm9sICYmIE5hdGl2ZVN5bWJvbC5wcm90b3R5cGU7XG5cbmlmIChERVNDUklQVE9SUyAmJiBpc0NhbGxhYmxlKE5hdGl2ZVN5bWJvbCkgJiYgKCEoJ2Rlc2NyaXB0aW9uJyBpbiBTeW1ib2xQcm90b3R5cGUpIHx8XG4gIC8vIFNhZmFyaSAxMiBidWdcbiAgTmF0aXZlU3ltYm9sKCkuZGVzY3JpcHRpb24gIT09IHVuZGVmaW5lZFxuKSkge1xuICB2YXIgRW1wdHlTdHJpbmdEZXNjcmlwdGlvblN0b3JlID0ge307XG4gIC8vIHdyYXAgU3ltYm9sIGNvbnN0cnVjdG9yIGZvciBjb3JyZWN0IHdvcmsgd2l0aCB1bmRlZmluZWQgZGVzY3JpcHRpb25cbiAgdmFyIFN5bWJvbFdyYXBwZXIgPSBmdW5jdGlvbiBTeW1ib2woKSB7XG4gICAgdmFyIGRlc2NyaXB0aW9uID0gYXJndW1lbnRzLmxlbmd0aCA8IDEgfHwgYXJndW1lbnRzWzBdID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiB0b1N0cmluZyhhcmd1bWVudHNbMF0pO1xuICAgIHZhciByZXN1bHQgPSBpc1Byb3RvdHlwZU9mKFN5bWJvbFByb3RvdHlwZSwgdGhpcylcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzb25hcmpzL2luY29uc2lzdGVudC1mdW5jdGlvbi1jYWxsIC0tIG9rXG4gICAgICA/IG5ldyBOYXRpdmVTeW1ib2woZGVzY3JpcHRpb24pXG4gICAgICAvLyBpbiBFZGdlIDEzLCBTdHJpbmcoU3ltYm9sKHVuZGVmaW5lZCkpID09PSAnU3ltYm9sKHVuZGVmaW5lZCknXG4gICAgICA6IGRlc2NyaXB0aW9uID09PSB1bmRlZmluZWQgPyBOYXRpdmVTeW1ib2woKSA6IE5hdGl2ZVN5bWJvbChkZXNjcmlwdGlvbik7XG4gICAgaWYgKGRlc2NyaXB0aW9uID09PSAnJykgRW1wdHlTdHJpbmdEZXNjcmlwdGlvblN0b3JlW3Jlc3VsdF0gPSB0cnVlO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyhTeW1ib2xXcmFwcGVyLCBOYXRpdmVTeW1ib2wpO1xuICBTeW1ib2xXcmFwcGVyLnByb3RvdHlwZSA9IFN5bWJvbFByb3RvdHlwZTtcbiAgU3ltYm9sUHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU3ltYm9sV3JhcHBlcjtcblxuICB2YXIgTkFUSVZFX1NZTUJPTCA9IFN0cmluZyhOYXRpdmVTeW1ib2woJ2Rlc2NyaXB0aW9uIGRldGVjdGlvbicpKSA9PT0gJ1N5bWJvbChkZXNjcmlwdGlvbiBkZXRlY3Rpb24pJztcbiAgdmFyIHRoaXNTeW1ib2xWYWx1ZSA9IHVuY3VycnlUaGlzKFN5bWJvbFByb3RvdHlwZS52YWx1ZU9mKTtcbiAgdmFyIHN5bWJvbERlc2NyaXB0aXZlU3RyaW5nID0gdW5jdXJyeVRoaXMoU3ltYm9sUHJvdG90eXBlLnRvU3RyaW5nKTtcbiAgdmFyIHJlZ2V4cCA9IC9eU3ltYm9sXFwoKC4qKVxcKVteKV0rJC87XG4gIHZhciByZXBsYWNlID0gdW5jdXJyeVRoaXMoJycucmVwbGFjZSk7XG4gIHZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcblxuICBkZWZpbmVCdWlsdEluQWNjZXNzb3IoU3ltYm9sUHJvdG90eXBlLCAnZGVzY3JpcHRpb24nLCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24gZGVzY3JpcHRpb24oKSB7XG4gICAgICB2YXIgc3ltYm9sID0gdGhpc1N5bWJvbFZhbHVlKHRoaXMpO1xuICAgICAgaWYgKGhhc093bihFbXB0eVN0cmluZ0Rlc2NyaXB0aW9uU3RvcmUsIHN5bWJvbCkpIHJldHVybiAnJztcbiAgICAgIHZhciBzdHJpbmcgPSBzeW1ib2xEZXNjcmlwdGl2ZVN0cmluZyhzeW1ib2wpO1xuICAgICAgdmFyIGRlc2MgPSBOQVRJVkVfU1lNQk9MID8gc3RyaW5nU2xpY2Uoc3RyaW5nLCA3LCAtMSkgOiByZXBsYWNlKHN0cmluZywgcmVnZXhwLCAnJDEnKTtcbiAgICAgIHJldHVybiBkZXNjID09PSAnJyA/IHVuZGVmaW5lZCA6IGRlc2M7XG4gICAgfVxuICB9KTtcblxuICAkKHsgZ2xvYmFsOiB0cnVlLCBjb25zdHJ1Y3RvcjogdHJ1ZSwgZm9yY2VkOiB0cnVlIH0sIHtcbiAgICBTeW1ib2w6IFN5bWJvbFdyYXBwZXJcbiAgfSk7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcbnZhciBkZWZpbmVTeW1ib2xUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtZGVmaW5lLXRvLXByaW1pdGl2ZScpO1xuXG4vLyBgU3ltYm9sLnRvUHJpbWl0aXZlYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wudG9wcmltaXRpdmVcbmRlZmluZVdlbGxLbm93blN5bWJvbCgndG9QcmltaXRpdmUnKTtcblxuLy8gYFN5bWJvbC5wcm90b3R5cGVbQEB0b1ByaW1pdGl2ZV1gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wucHJvdG90eXBlLUBAdG9wcmltaXRpdmVcbmRlZmluZVN5bWJvbFRvUHJpbWl0aXZlKCk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG4vLyBTYWZhcmkgPCAxMyBkb2VzIG5vdCB0aHJvdyBhbiBlcnJvciBpbiB0aGlzIGNhc2VcbnZhciBTSUxFTlRfT05fTk9OX1dSSVRBQkxFX0xFTkdUSF9TRVQgPSBERVNDUklQVE9SUyAmJiAhZnVuY3Rpb24gKCkge1xuICAvLyBtYWtlcyBubyBzZW5zZSB3aXRob3V0IHByb3BlciBzdHJpY3QgbW9kZSBzdXBwb3J0XG4gIGlmICh0aGlzICE9PSB1bmRlZmluZWQpIHJldHVybiB0cnVlO1xuICB0cnkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShbXSwgJ2xlbmd0aCcsIHsgd3JpdGFibGU6IGZhbHNlIH0pLmxlbmd0aCA9IDE7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGVycm9yIGluc3RhbmNlb2YgVHlwZUVycm9yO1xuICB9XG59KCk7XG5cbm1vZHVsZS5leHBvcnRzID0gU0lMRU5UX09OX05PTl9XUklUQUJMRV9MRU5HVEhfU0VUID8gZnVuY3Rpb24gKE8sIGxlbmd0aCkge1xuICBpZiAoaXNBcnJheShPKSAmJiAhZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sICdsZW5ndGgnKS53cml0YWJsZSkge1xuICAgIHRocm93IG5ldyAkVHlwZUVycm9yKCdDYW5ub3Qgc2V0IHJlYWQgb25seSAubGVuZ3RoJyk7XG4gIH0gcmV0dXJuIE8ubGVuZ3RoID0gbGVuZ3RoO1xufSA6IGZ1bmN0aW9uIChPLCBsZW5ndGgpIHtcbiAgcmV0dXJuIE8ubGVuZ3RoID0gbGVuZ3RoO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbnZhciBNQVhfU0FGRV9JTlRFR0VSID0gMHgxRkZGRkZGRkZGRkZGRjsgLy8gMiAqKiA1MyAtIDEgPT0gOTAwNzE5OTI1NDc0MDk5MVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXQgPiBNQVhfU0FGRV9JTlRFR0VSKSB0aHJvdyAkVHlwZUVycm9yKCdNYXhpbXVtIGFsbG93ZWQgaW5kZXggZXhjZWVkZWQnKTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIHNldEFycmF5TGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNldC1sZW5ndGgnKTtcbnZhciBkb2VzTm90RXhjZWVkU2FmZUludGVnZXIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9lcy1ub3QtZXhjZWVkLXNhZmUtaW50ZWdlcicpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbnZhciBJTkNPUlJFQ1RfVE9fTEVOR1RIID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gW10ucHVzaC5jYWxsKHsgbGVuZ3RoOiAweDEwMDAwMDAwMCB9LCAxKSAhPT0gNDI5NDk2NzI5Nztcbn0pO1xuXG4vLyBWOCA8PSAxMjEgYW5kIFNhZmFyaSA8PSAxNS40OyBGRiA8IDIzIHRocm93cyBJbnRlcm5hbEVycm9yXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0xMjY4MVxudmFyIHByb3BlckVycm9yT25Ob25Xcml0YWJsZUxlbmd0aCA9IGZ1bmN0aW9uICgpIHtcbiAgdHJ5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoW10sICdsZW5ndGgnLCB7IHdyaXRhYmxlOiBmYWxzZSB9KS5wdXNoKCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGVycm9yIGluc3RhbmNlb2YgVHlwZUVycm9yO1xuICB9XG59O1xuXG52YXIgRk9SQ0VEID0gSU5DT1JSRUNUX1RPX0xFTkdUSCB8fCAhcHJvcGVyRXJyb3JPbk5vbldyaXRhYmxlTGVuZ3RoKCk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUucHVzaGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5wdXNoXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgYXJpdHk6IDEsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciBgLmxlbmd0aGBcbiAgcHVzaDogZnVuY3Rpb24gcHVzaChpdGVtKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgbGVuID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgdmFyIGFyZ0NvdW50ID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICBkb2VzTm90RXhjZWVkU2FmZUludGVnZXIobGVuICsgYXJnQ291bnQpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJnQ291bnQ7IGkrKykge1xuICAgICAgT1tsZW5dID0gYXJndW1lbnRzW2ldO1xuICAgICAgbGVuKys7XG4gICAgfVxuICAgIHNldEFycmF5TGVuZ3RoKE8sIGxlbik7XG4gICAgcmV0dXJuIGxlbjtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIG9yZGluYXJ5VG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb3JkaW5hcnktdG8tcHJpbWl0aXZlJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgRGF0ZS5wcm90b3R5cGVbQEB0b1ByaW1pdGl2ZV0oaGludClgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1kYXRlLnByb3RvdHlwZS1AQHRvcHJpbWl0aXZlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChoaW50KSB7XG4gIGFuT2JqZWN0KHRoaXMpO1xuICBpZiAoaGludCA9PT0gJ3N0cmluZycgfHwgaGludCA9PT0gJ2RlZmF1bHQnKSBoaW50ID0gJ3N0cmluZyc7XG4gIGVsc2UgaWYgKGhpbnQgIT09ICdudW1iZXInKSB0aHJvdyBuZXcgJFR5cGVFcnJvcignSW5jb3JyZWN0IGhpbnQnKTtcbiAgcmV0dXJuIG9yZGluYXJ5VG9QcmltaXRpdmUodGhpcywgaGludCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG52YXIgZGF0ZVRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RhdGUtdG8tcHJpbWl0aXZlJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19QUklNSVRJVkUgPSB3ZWxsS25vd25TeW1ib2woJ3RvUHJpbWl0aXZlJyk7XG52YXIgRGF0ZVByb3RvdHlwZSA9IERhdGUucHJvdG90eXBlO1xuXG4vLyBgRGF0ZS5wcm90b3R5cGVbQEB0b1ByaW1pdGl2ZV1gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1kYXRlLnByb3RvdHlwZS1AQHRvcHJpbWl0aXZlXG5pZiAoIWhhc093bihEYXRlUHJvdG90eXBlLCBUT19QUklNSVRJVkUpKSB7XG4gIGRlZmluZUJ1aWx0SW4oRGF0ZVByb3RvdHlwZSwgVE9fUFJJTUlUSVZFLCBkYXRlVG9QcmltaXRpdmUpO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgbWV0aG9kKSB7XG4gIHRyeSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxuICAgIHJldHVybiB1bmN1cnJ5VGhpcyhhQ2FsbGFibGUoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIGtleSlbbWV0aG9kXSkpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIGlzT2JqZWN0KGFyZ3VtZW50KSB8fCBhcmd1bWVudCA9PT0gbnVsbDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUG9zc2libGVQcm90b3R5cGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcG9zc2libGUtcHJvdG90eXBlJyk7XG5cbnZhciAkU3RyaW5nID0gU3RyaW5nO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmIChpc1Bvc3NpYmxlUHJvdG90eXBlKGFyZ3VtZW50KSkgcmV0dXJuIGFyZ3VtZW50O1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IHNldCBcIiArICRTdHJpbmcoYXJndW1lbnQpICsgJyBhcyBhIHByb3RvdHlwZScpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90byAtLSBzYWZlICovXG52YXIgdW5jdXJyeVRoaXNBY2Nlc3NvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMtYWNjZXNzb3InKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xudmFyIGFQb3NzaWJsZVByb3RvdHlwZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLXBvc3NpYmxlLXByb3RvdHlwZScpO1xuXG4vLyBgT2JqZWN0LnNldFByb3RvdHlwZU9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LnNldHByb3RvdHlwZW9mXG4vLyBXb3JrcyB3aXRoIF9fcHJvdG9fXyBvbmx5LiBPbGQgdjggY2FuJ3Qgd29yayB3aXRoIG51bGwgcHJvdG8gb2JqZWN0cy5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3Qtc2V0cHJvdG90eXBlb2YgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgKCdfX3Byb3RvX18nIGluIHt9ID8gZnVuY3Rpb24gKCkge1xuICB2YXIgQ09SUkVDVF9TRVRURVIgPSBmYWxzZTtcbiAgdmFyIHRlc3QgPSB7fTtcbiAgdmFyIHNldHRlcjtcbiAgdHJ5IHtcbiAgICBzZXR0ZXIgPSB1bmN1cnJ5VGhpc0FjY2Vzc29yKE9iamVjdC5wcm90b3R5cGUsICdfX3Byb3RvX18nLCAnc2V0Jyk7XG4gICAgc2V0dGVyKHRlc3QsIFtdKTtcbiAgICBDT1JSRUNUX1NFVFRFUiA9IHRlc3QgaW5zdGFuY2VvZiBBcnJheTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gZnVuY3Rpb24gc2V0UHJvdG90eXBlT2YoTywgcHJvdG8pIHtcbiAgICByZXF1aXJlT2JqZWN0Q29lcmNpYmxlKE8pO1xuICAgIGFQb3NzaWJsZVByb3RvdHlwZShwcm90byk7XG4gICAgaWYgKCFpc09iamVjdChPKSkgcmV0dXJuIE87XG4gICAgaWYgKENPUlJFQ1RfU0VUVEVSKSBzZXR0ZXIoTywgcHJvdG8pO1xuICAgIGVsc2UgTy5fX3Byb3RvX18gPSBwcm90bztcbiAgICByZXR1cm4gTztcbiAgfTtcbn0oKSA6IHVuZGVmaW5lZCk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qtc2V0LXByb3RvdHlwZS1vZicpO1xuXG4vLyBtYWtlcyBzdWJjbGFzc2luZyB3b3JrIGNvcnJlY3QgZm9yIHdyYXBwZWQgYnVpbHQtaW5zXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgkdGhpcywgZHVtbXksIFdyYXBwZXIpIHtcbiAgdmFyIE5ld1RhcmdldCwgTmV3VGFyZ2V0UHJvdG90eXBlO1xuICBpZiAoXG4gICAgLy8gaXQgY2FuIHdvcmsgb25seSB3aXRoIG5hdGl2ZSBgc2V0UHJvdG90eXBlT2ZgXG4gICAgc2V0UHJvdG90eXBlT2YgJiZcbiAgICAvLyB3ZSBoYXZlbid0IGNvbXBsZXRlbHkgY29ycmVjdCBwcmUtRVM2IHdheSBmb3IgZ2V0dGluZyBgbmV3LnRhcmdldGAsIHNvIHVzZSB0aGlzXG4gICAgaXNDYWxsYWJsZShOZXdUYXJnZXQgPSBkdW1teS5jb25zdHJ1Y3RvcikgJiZcbiAgICBOZXdUYXJnZXQgIT09IFdyYXBwZXIgJiZcbiAgICBpc09iamVjdChOZXdUYXJnZXRQcm90b3R5cGUgPSBOZXdUYXJnZXQucHJvdG90eXBlKSAmJlxuICAgIE5ld1RhcmdldFByb3RvdHlwZSAhPT0gV3JhcHBlci5wcm90b3R5cGVcbiAgKSBzZXRQcm90b3R5cGVPZigkdGhpcywgTmV3VGFyZ2V0UHJvdG90eXBlKTtcbiAgcmV0dXJuICR0aGlzO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbi8vIGB0aGlzTnVtYmVyVmFsdWVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10aGlzbnVtYmVydmFsdWVcbm1vZHVsZS5leHBvcnRzID0gdW5jdXJyeVRoaXMoMS4wLnZhbHVlT2YpO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIGEgc3RyaW5nIG9mIGFsbCB2YWxpZCB1bmljb2RlIHdoaXRlc3BhY2VzXG5tb2R1bGUuZXhwb3J0cyA9ICdcXHUwMDA5XFx1MDAwQVxcdTAwMEJcXHUwMDBDXFx1MDAwRFxcdTAwMjBcXHUwMEEwXFx1MTY4MFxcdTIwMDBcXHUyMDAxXFx1MjAwMicgK1xuICAnXFx1MjAwM1xcdTIwMDRcXHUyMDA1XFx1MjAwNlxcdTIwMDdcXHUyMDA4XFx1MjAwOVxcdTIwMEFcXHUyMDJGXFx1MjA1RlxcdTMwMDBcXHUyMDI4XFx1MjAyOVxcdUZFRkYnO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIHdoaXRlc3BhY2VzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3doaXRlc3BhY2VzJyk7XG5cbnZhciByZXBsYWNlID0gdW5jdXJyeVRoaXMoJycucmVwbGFjZSk7XG52YXIgbHRyaW0gPSBSZWdFeHAoJ15bJyArIHdoaXRlc3BhY2VzICsgJ10rJyk7XG52YXIgcnRyaW0gPSBSZWdFeHAoJyhefFteJyArIHdoaXRlc3BhY2VzICsgJ10pWycgKyB3aGl0ZXNwYWNlcyArICddKyQnKTtcblxuLy8gYFN0cmluZy5wcm90b3R5cGUueyB0cmltLCB0cmltU3RhcnQsIHRyaW1FbmQsIHRyaW1MZWZ0LCB0cmltUmlnaHQgfWAgbWV0aG9kcyBpbXBsZW1lbnRhdGlvblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChUWVBFKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMpIHtcbiAgICB2YXIgc3RyaW5nID0gdG9TdHJpbmcocmVxdWlyZU9iamVjdENvZXJjaWJsZSgkdGhpcykpO1xuICAgIGlmIChUWVBFICYgMSkgc3RyaW5nID0gcmVwbGFjZShzdHJpbmcsIGx0cmltLCAnJyk7XG4gICAgaWYgKFRZUEUgJiAyKSBzdHJpbmcgPSByZXBsYWNlKHN0cmluZywgcnRyaW0sICckMScpO1xuICAgIHJldHVybiBzdHJpbmc7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYFN0cmluZy5wcm90b3R5cGUueyB0cmltTGVmdCwgdHJpbVN0YXJ0IH1gIG1ldGhvZHNcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnRyaW1zdGFydFxuICBzdGFydDogY3JlYXRlTWV0aG9kKDEpLFxuICAvLyBgU3RyaW5nLnByb3RvdHlwZS57IHRyaW1SaWdodCwgdHJpbUVuZCB9YCBtZXRob2RzXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS50cmltZW5kXG4gIGVuZDogY3JlYXRlTWV0aG9kKDIpLFxuICAvLyBgU3RyaW5nLnByb3RvdHlwZS50cmltYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnRyaW1cbiAgdHJpbTogY3JlYXRlTWV0aG9kKDMpXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGF0aCcpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGlzRm9yY2VkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWZvcmNlZCcpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaW5oZXJpdElmUmVxdWlyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5oZXJpdC1pZi1yZXF1aXJlZCcpO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByaW1pdGl2ZScpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpLmY7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKS5mO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xudmFyIHRoaXNOdW1iZXJWYWx1ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90aGlzLW51bWJlci12YWx1ZScpO1xudmFyIHRyaW0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3RyaW5nLXRyaW0nKS50cmltO1xuXG52YXIgTlVNQkVSID0gJ051bWJlcic7XG52YXIgTmF0aXZlTnVtYmVyID0gZ2xvYmFsVGhpc1tOVU1CRVJdO1xudmFyIFB1cmVOdW1iZXJOYW1lc3BhY2UgPSBwYXRoW05VTUJFUl07XG52YXIgTnVtYmVyUHJvdG90eXBlID0gTmF0aXZlTnVtYmVyLnByb3RvdHlwZTtcbnZhciBUeXBlRXJyb3IgPSBnbG9iYWxUaGlzLlR5cGVFcnJvcjtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcbnZhciBjaGFyQ29kZUF0ID0gdW5jdXJyeVRoaXMoJycuY2hhckNvZGVBdCk7XG5cbi8vIGBUb051bWVyaWNgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b251bWVyaWNcbnZhciB0b051bWVyaWMgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgdmFyIHByaW1WYWx1ZSA9IHRvUHJpbWl0aXZlKHZhbHVlLCAnbnVtYmVyJyk7XG4gIHJldHVybiB0eXBlb2YgcHJpbVZhbHVlID09ICdiaWdpbnQnID8gcHJpbVZhbHVlIDogdG9OdW1iZXIocHJpbVZhbHVlKTtcbn07XG5cbi8vIGBUb051bWJlcmAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvbnVtYmVyXG52YXIgdG9OdW1iZXIgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdmFyIGl0ID0gdG9QcmltaXRpdmUoYXJndW1lbnQsICdudW1iZXInKTtcbiAgdmFyIGZpcnN0LCB0aGlyZCwgcmFkaXgsIG1heENvZGUsIGRpZ2l0cywgbGVuZ3RoLCBpbmRleCwgY29kZTtcbiAgaWYgKGlzU3ltYm9sKGl0KSkgdGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IGNvbnZlcnQgYSBTeW1ib2wgdmFsdWUgdG8gYSBudW1iZXInKTtcbiAgaWYgKHR5cGVvZiBpdCA9PSAnc3RyaW5nJyAmJiBpdC5sZW5ndGggPiAyKSB7XG4gICAgaXQgPSB0cmltKGl0KTtcbiAgICBmaXJzdCA9IGNoYXJDb2RlQXQoaXQsIDApO1xuICAgIGlmIChmaXJzdCA9PT0gNDMgfHwgZmlyc3QgPT09IDQ1KSB7XG4gICAgICB0aGlyZCA9IGNoYXJDb2RlQXQoaXQsIDIpO1xuICAgICAgaWYgKHRoaXJkID09PSA4OCB8fCB0aGlyZCA9PT0gMTIwKSByZXR1cm4gTmFOOyAvLyBOdW1iZXIoJysweDEnKSBzaG91bGQgYmUgTmFOLCBvbGQgVjggZml4XG4gICAgfSBlbHNlIGlmIChmaXJzdCA9PT0gNDgpIHtcbiAgICAgIHN3aXRjaCAoY2hhckNvZGVBdChpdCwgMSkpIHtcbiAgICAgICAgLy8gZmFzdCBlcXVhbCBvZiAvXjBiWzAxXSskL2lcbiAgICAgICAgY2FzZSA2NjpcbiAgICAgICAgY2FzZSA5ODpcbiAgICAgICAgICByYWRpeCA9IDI7XG4gICAgICAgICAgbWF4Q29kZSA9IDQ5O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICAvLyBmYXN0IGVxdWFsIG9mIC9eMG9bMC03XSskL2lcbiAgICAgICAgY2FzZSA3OTpcbiAgICAgICAgY2FzZSAxMTE6XG4gICAgICAgICAgcmFkaXggPSA4O1xuICAgICAgICAgIG1heENvZGUgPSA1NTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gK2l0O1xuICAgICAgfVxuICAgICAgZGlnaXRzID0gc3RyaW5nU2xpY2UoaXQsIDIpO1xuICAgICAgbGVuZ3RoID0gZGlnaXRzLmxlbmd0aDtcbiAgICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICBjb2RlID0gY2hhckNvZGVBdChkaWdpdHMsIGluZGV4KTtcbiAgICAgICAgLy8gcGFyc2VJbnQgcGFyc2VzIGEgc3RyaW5nIHRvIGEgZmlyc3QgdW5hdmFpbGFibGUgc3ltYm9sXG4gICAgICAgIC8vIGJ1dCBUb051bWJlciBzaG91bGQgcmV0dXJuIE5hTiBpZiBhIHN0cmluZyBjb250YWlucyB1bmF2YWlsYWJsZSBzeW1ib2xzXG4gICAgICAgIGlmIChjb2RlIDwgNDggfHwgY29kZSA+IG1heENvZGUpIHJldHVybiBOYU47XG4gICAgICB9IHJldHVybiBwYXJzZUludChkaWdpdHMsIHJhZGl4KTtcbiAgICB9XG4gIH0gcmV0dXJuICtpdDtcbn07XG5cbnZhciBGT1JDRUQgPSBpc0ZvcmNlZChOVU1CRVIsICFOYXRpdmVOdW1iZXIoJyAwbzEnKSB8fCAhTmF0aXZlTnVtYmVyKCcwYjEnKSB8fCBOYXRpdmVOdW1iZXIoJysweDEnKSk7XG5cbnZhciBjYWxsZWRXaXRoTmV3ID0gZnVuY3Rpb24gKGR1bW15KSB7XG4gIC8vIGluY2x1ZGVzIGNoZWNrIG9uIDEuLmNvbnN0cnVjdG9yKGZvbykgY2FzZVxuICByZXR1cm4gaXNQcm90b3R5cGVPZihOdW1iZXJQcm90b3R5cGUsIGR1bW15KSAmJiBmYWlscyhmdW5jdGlvbiAoKSB7IHRoaXNOdW1iZXJWYWx1ZShkdW1teSk7IH0pO1xufTtcblxuLy8gYE51bWJlcmAgY29uc3RydWN0b3Jcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbnVtYmVyLWNvbnN0cnVjdG9yXG52YXIgTnVtYmVyV3JhcHBlciA9IGZ1bmN0aW9uIE51bWJlcih2YWx1ZSkge1xuICB2YXIgbiA9IGFyZ3VtZW50cy5sZW5ndGggPCAxID8gMCA6IE5hdGl2ZU51bWJlcih0b051bWVyaWModmFsdWUpKTtcbiAgcmV0dXJuIGNhbGxlZFdpdGhOZXcodGhpcykgPyBpbmhlcml0SWZSZXF1aXJlZChPYmplY3QobiksIHRoaXMsIE51bWJlcldyYXBwZXIpIDogbjtcbn07XG5cbk51bWJlcldyYXBwZXIucHJvdG90eXBlID0gTnVtYmVyUHJvdG90eXBlO1xuaWYgKEZPUkNFRCAmJiAhSVNfUFVSRSkgTnVtYmVyUHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTnVtYmVyV3JhcHBlcjtcblxuJCh7IGdsb2JhbDogdHJ1ZSwgY29uc3RydWN0b3I6IHRydWUsIHdyYXA6IHRydWUsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgTnVtYmVyOiBOdW1iZXJXcmFwcGVyXG59KTtcblxuLy8gVXNlIGBpbnRlcm5hbC9jb3B5LWNvbnN0cnVjdG9yLXByb3BlcnRpZXNgIGhlbHBlciBpbiBgY29yZS1qc0A0YFxudmFyIGNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMgPSBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHtcbiAgZm9yICh2YXIga2V5cyA9IERFU0NSSVBUT1JTID8gZ2V0T3duUHJvcGVydHlOYW1lcyhzb3VyY2UpIDogKFxuICAgIC8vIEVTMzpcbiAgICAnTUFYX1ZBTFVFLE1JTl9WQUxVRSxOYU4sTkVHQVRJVkVfSU5GSU5JVFksUE9TSVRJVkVfSU5GSU5JVFksJyArXG4gICAgLy8gRVMyMDE1IChpbiBjYXNlLCBpZiBtb2R1bGVzIHdpdGggRVMyMDE1IE51bWJlciBzdGF0aWNzIHJlcXVpcmVkIGJlZm9yZSk6XG4gICAgJ0VQU0lMT04sTUFYX1NBRkVfSU5URUdFUixNSU5fU0FGRV9JTlRFR0VSLGlzRmluaXRlLGlzSW50ZWdlcixpc05hTixpc1NhZmVJbnRlZ2VyLHBhcnNlRmxvYXQscGFyc2VJbnQsJyArXG4gICAgLy8gRVNOZXh0XG4gICAgJ2Zyb21TdHJpbmcscmFuZ2UnXG4gICkuc3BsaXQoJywnKSwgaiA9IDAsIGtleTsga2V5cy5sZW5ndGggPiBqOyBqKyspIHtcbiAgICBpZiAoaGFzT3duKHNvdXJjZSwga2V5ID0ga2V5c1tqXSkgJiYgIWhhc093bih0YXJnZXQsIGtleSkpIHtcbiAgICAgIGRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTtcbiAgICB9XG4gIH1cbn07XG5cbmlmIChJU19QVVJFICYmIFB1cmVOdW1iZXJOYW1lc3BhY2UpIGNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMocGF0aFtOVU1CRVJdLCBQdXJlTnVtYmVyTmFtZXNwYWNlKTtcbmlmIChGT1JDRUQgfHwgSVNfUFVSRSkgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyhwYXRoW05VTUJFUl0sIE5hdGl2ZU51bWJlcik7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xuXG4vLyBgUmVnRXhwLnByb3RvdHlwZS5mbGFnc2AgZ2V0dGVyIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWdldC1yZWdleHAucHJvdG90eXBlLmZsYWdzXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHRoYXQgPSBhbk9iamVjdCh0aGlzKTtcbiAgdmFyIHJlc3VsdCA9ICcnO1xuICBpZiAodGhhdC5oYXNJbmRpY2VzKSByZXN1bHQgKz0gJ2QnO1xuICBpZiAodGhhdC5nbG9iYWwpIHJlc3VsdCArPSAnZyc7XG4gIGlmICh0aGF0Lmlnbm9yZUNhc2UpIHJlc3VsdCArPSAnaSc7XG4gIGlmICh0aGF0Lm11bHRpbGluZSkgcmVzdWx0ICs9ICdtJztcbiAgaWYgKHRoYXQuZG90QWxsKSByZXN1bHQgKz0gJ3MnO1xuICBpZiAodGhhdC51bmljb2RlKSByZXN1bHQgKz0gJ3UnO1xuICBpZiAodGhhdC51bmljb2RlU2V0cykgcmVzdWx0ICs9ICd2JztcbiAgaWYgKHRoYXQuc3RpY2t5KSByZXN1bHQgKz0gJ3knO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciByZWdFeHBGbGFncyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtZmxhZ3MnKTtcblxudmFyIFJlZ0V4cFByb3RvdHlwZSA9IFJlZ0V4cC5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFIpIHtcbiAgdmFyIGZsYWdzID0gUi5mbGFncztcbiAgcmV0dXJuIGZsYWdzID09PSB1bmRlZmluZWQgJiYgISgnZmxhZ3MnIGluIFJlZ0V4cFByb3RvdHlwZSkgJiYgIWhhc093bihSLCAnZmxhZ3MnKSAmJiBpc1Byb3RvdHlwZU9mKFJlZ0V4cFByb3RvdHlwZSwgUilcbiAgICA/IGNhbGwocmVnRXhwRmxhZ3MsIFIpIDogZmxhZ3M7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBQUk9QRVJfRlVOQ1RJT05fTkFNRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1uYW1lJykuUFJPUEVSO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgJHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgZ2V0UmVnRXhwRmxhZ3MgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLWdldC1mbGFncycpO1xuXG52YXIgVE9fU1RSSU5HID0gJ3RvU3RyaW5nJztcbnZhciBSZWdFeHBQcm90b3R5cGUgPSBSZWdFeHAucHJvdG90eXBlO1xudmFyIG5hdGl2ZVRvU3RyaW5nID0gUmVnRXhwUHJvdG90eXBlW1RPX1NUUklOR107XG5cbnZhciBOT1RfR0VORVJJQyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5hdGl2ZVRvU3RyaW5nLmNhbGwoeyBzb3VyY2U6ICdhJywgZmxhZ3M6ICdiJyB9KSAhPT0gJy9hL2InOyB9KTtcbi8vIEZGNDQtIFJlZ0V4cCN0b1N0cmluZyBoYXMgYSB3cm9uZyBuYW1lXG52YXIgSU5DT1JSRUNUX05BTUUgPSBQUk9QRVJfRlVOQ1RJT05fTkFNRSAmJiBuYXRpdmVUb1N0cmluZy5uYW1lICE9PSBUT19TVFJJTkc7XG5cbi8vIGBSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVnZXhwLnByb3RvdHlwZS50b3N0cmluZ1xuaWYgKE5PVF9HRU5FUklDIHx8IElOQ09SUkVDVF9OQU1FKSB7XG4gIGRlZmluZUJ1aWx0SW4oUmVnRXhwUHJvdG90eXBlLCBUT19TVFJJTkcsIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHZhciBSID0gYW5PYmplY3QodGhpcyk7XG4gICAgdmFyIHBhdHRlcm4gPSAkdG9TdHJpbmcoUi5zb3VyY2UpO1xuICAgIHZhciBmbGFncyA9ICR0b1N0cmluZyhnZXRSZWdFeHBGbGFncyhSKSk7XG4gICAgcmV0dXJuICcvJyArIHBhdHRlcm4gKyAnLycgKyBmbGFncztcbiAgfSwgeyB1bnNhZmU6IHRydWUgfSk7XG59XG4iLCAiKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gbigpe2Z1bmN0aW9uIHYoKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiBsKGEpe3JldHVybiBhP1wib2JqZWN0XCI9PT10eXBlb2YgYXx8XCJmdW5jdGlvblwiPT09dHlwZW9mIGE6ITF9ZnVuY3Rpb24gcChhKXtpZihudWxsIT09YSYmIWwoYSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9iamVjdCBwcm90b3R5cGUgbWF5IG9ubHkgYmUgYW4gT2JqZWN0IG9yIG51bGw6IFwiK2EpO312YXIgcT1udWxsLGU9T2JqZWN0LHc9ISFlLmNyZWF0ZXx8ISh7X19wcm90b19fOm51bGx9aW5zdGFuY2VvZiBlKSxBPWUuY3JlYXRlfHwodz9mdW5jdGlvbihhKXtwKGEpO3JldHVybntfX3Byb3RvX186YX19OmZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGMoKXt9cChhKTtpZihudWxsPT09YSl0aHJvdyBuZXcgU3ludGF4RXJyb3IoXCJOYXRpdmUgT2JqZWN0LmNyZWF0ZSBpcyByZXF1aXJlZCB0byBjcmVhdGUgb2JqZWN0cyB3aXRoIG51bGwgcHJvdG90eXBlXCIpO2MucHJvdG90eXBlPWE7cmV0dXJuIG5ldyBjfSksXG5CPWUuZ2V0UHJvdG90eXBlT2Z8fChbXS5fX3Byb3RvX189PT1BcnJheS5wcm90b3R5cGU/ZnVuY3Rpb24oYSl7YT1hLl9fcHJvdG9fXztyZXR1cm4gbChhKT9hOm51bGx9OnYpO3ZhciBtPWZ1bmN0aW9uKGEsYyl7ZnVuY3Rpb24gaygpe31pZih2b2lkIDA9PT0odGhpcyYmdGhpcyBpbnN0YW5jZW9mIG0/dGhpcy5jb25zdHJ1Y3Rvcjp2b2lkIDApKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDb25zdHJ1Y3RvciBQcm94eSByZXF1aXJlcyAnbmV3J1wiKTtpZighbChhKXx8IWwoYykpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjcmVhdGUgcHJveHkgd2l0aCBhIG5vbi1vYmplY3QgYXMgdGFyZ2V0IG9yIGhhbmRsZXJcIik7cT1mdW5jdGlvbigpe2E9bnVsbDtrPWZ1bmN0aW9uKGIpe3Rocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgcGVyZm9ybSAnXCIrYitcIicgb24gYSBwcm94eSB0aGF0IGhhcyBiZWVuIHJldm9rZWRcIik7fX07c2V0VGltZW91dChmdW5jdGlvbigpe3E9bnVsbH0sMCk7dmFyIGc9XG5jO2M9e2dldDpudWxsLHNldDpudWxsLGFwcGx5Om51bGwsY29uc3RydWN0Om51bGx9O2Zvcih2YXIgaCBpbiBnKXtpZighKGggaW4gYykpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByb3h5IHBvbHlmaWxsIGRvZXMgbm90IHN1cHBvcnQgdHJhcCAnXCIraCtcIidcIik7Y1toXT1nW2hdfVwiZnVuY3Rpb25cIj09PXR5cGVvZiBnJiYoYy5hcHBseT1nLmFwcGx5LmJpbmQoZykpO2c9QihhKTt2YXIgcj0hMSx0PSExO2lmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiBhKXt2YXIgZj1mdW5jdGlvbigpe3ZhciBiPXRoaXMmJnRoaXMuY29uc3RydWN0b3I9PT1mLGQ9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtrKGI/XCJjb25zdHJ1Y3RcIjpcImFwcGx5XCIpO3JldHVybiBiJiZjLmNvbnN0cnVjdD9jLmNvbnN0cnVjdC5jYWxsKHRoaXMsYSxkKTohYiYmYy5hcHBseT9jLmFwcGx5KGEsdGhpcyxkKTpiPyhkLnVuc2hpZnQoYSksbmV3IChhLmJpbmQuYXBwbHkoYSxkKSkpOmEuYXBwbHkodGhpcyxcbmQpfTtyPSEwfWVsc2UgYSBpbnN0YW5jZW9mIEFycmF5PyhmPVtdLHQ9ITApOmY9d3x8bnVsbCE9PWc/QShnKTp7fTt2YXIgeD1jLmdldD9mdW5jdGlvbihiKXtrKFwiZ2V0XCIpO3JldHVybiBjLmdldCh0aGlzLGIsZil9OmZ1bmN0aW9uKGIpe2soXCJnZXRcIik7cmV0dXJuIHRoaXNbYl19LEM9Yy5zZXQ/ZnVuY3Rpb24oYixkKXtrKFwic2V0XCIpO2Muc2V0KHRoaXMsYixkLGYpfTpmdW5jdGlvbihiLGQpe2soXCJzZXRcIik7dGhpc1tiXT1kfSx5PXt9O2UuZ2V0T3duUHJvcGVydHlOYW1lcyhhKS5mb3JFYWNoKGZ1bmN0aW9uKGIpe2lmKCEoKHJ8fHQpJiZiIGluIGYpKXt2YXIgZD1lLmdldE93blByb3BlcnR5RGVzY3JpcHRvcihhLGIpO2UuZGVmaW5lUHJvcGVydHkoZixiLHtlbnVtZXJhYmxlOiEhZC5lbnVtZXJhYmxlLGdldDp4LmJpbmQoYSxiKSxzZXQ6Qy5iaW5kKGEsYil9KTt5W2JdPSEwfX0pO2g9ITA7aWYocnx8dCl7dmFyIEQ9ZS5zZXRQcm90b3R5cGVPZnx8KFtdLl9fcHJvdG9fXz09PVxuQXJyYXkucHJvdG90eXBlP2Z1bmN0aW9uKGIsZCl7cChkKTtiLl9fcHJvdG9fXz1kO3JldHVybiBifTp2KTtnJiZEKGYsZyl8fChoPSExKX1pZihjLmdldHx8IWgpZm9yKHZhciB1IGluIGEpeVt1XXx8ZS5kZWZpbmVQcm9wZXJ0eShmLHUse2dldDp4LmJpbmQoYSx1KX0pO2Uuc2VhbChhKTtlLnNlYWwoZik7cmV0dXJuIGZ9O20ucmV2b2NhYmxlPWZ1bmN0aW9uKGEsYyl7cmV0dXJue3Byb3h5Om5ldyBtKGEsYykscmV2b2tlOnF9fTtyZXR1cm4gbX07dmFyIHo9XCJ1bmRlZmluZWRcIiE9PXR5cGVvZiBwcm9jZXNzJiZcIltvYmplY3QgcHJvY2Vzc11cIj09PXt9LnRvU3RyaW5nLmNhbGwocHJvY2Vzcyl8fFwidW5kZWZpbmVkXCIhPT10eXBlb2YgbmF2aWdhdG9yJiZcIlJlYWN0TmF0aXZlXCI9PT1uYXZpZ2F0b3IucHJvZHVjdD9nbG9iYWw6c2VsZjt6LlByb3h5fHwoei5Qcm94eT1uKCksei5Qcm94eS5yZXZvY2FibGU9ei5Qcm94eS5yZXZvY2FibGUpO30pKCk7XG4iLCAiKGZ1bmN0aW9uKHVuZGVmaW5lZCkge1xuaWYgKCEoXCJmb3JFYWNoXCJpbiBOb2RlTGlzdC5wcm90b3R5cGVcbikpIHtcbi8vIE5vZGVMaXN0LnByb3RvdHlwZS5mb3JFYWNoXG5Ob2RlTGlzdC5wcm90b3R5cGUuZm9yRWFjaCA9IEFycmF5LnByb3RvdHlwZS5mb3JFYWNoO1xufX0pLmNhbGwoJ29iamVjdCcgPT09IHR5cGVvZiB3aW5kb3cgJiYgd2luZG93IHx8ICdvYmplY3QnID09PSB0eXBlb2Ygc2VsZiAmJiBzZWxmIHx8ICdvYmplY3QnID09PSB0eXBlb2YgZ2xvYmFsICYmIGdsb2JhbCB8fCB7fSk7XG4iLCAiXG4vLyBfSXRlcmF0b3Jcbi8qIGdsb2JhbCBTeW1ib2wgKi9cbi8vIEEgbW9kaWZpY2F0aW9uIG9mIGh0dHBzOi8vZ2l0aHViLmNvbS9tZWRpa29vL2VzNi1pdGVyYXRvclxuLy8gQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgTWFyaXVzeiBOb3dhayAod3d3Lm1lZGlrb28uY29tKVxuXG52YXIgSXRlcmF0b3IgPSAoZnVuY3Rpb24gKCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG5cdHZhciBjbGVhciA9IGZ1bmN0aW9uICgpIHtcblx0XHR0aGlzLmxlbmd0aCA9IDA7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH07XG5cdHZhciBjYWxsYWJsZSA9IGZ1bmN0aW9uIChmbikge1xuXHRcdGlmICh0eXBlb2YgZm4gIT09ICdmdW5jdGlvbicpIHRocm93IG5ldyBUeXBlRXJyb3IoZm4gKyBcIiBpcyBub3QgYSBmdW5jdGlvblwiKTtcblx0XHRyZXR1cm4gZm47XG5cdH07XG5cblx0dmFyIEl0ZXJhdG9yID0gZnVuY3Rpb24gKGxpc3QsIGNvbnRleHQpIHtcblx0XHRpZiAoISh0aGlzIGluc3RhbmNlb2YgSXRlcmF0b3IpKSB7XG5cdFx0XHRyZXR1cm4gbmV3IEl0ZXJhdG9yKGxpc3QsIGNvbnRleHQpO1xuXHRcdH1cblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0aGlzLCB7XG5cdFx0XHRfX2xpc3RfXzoge1xuXHRcdFx0XHR3cml0YWJsZTogdHJ1ZSxcblx0XHRcdFx0dmFsdWU6IGxpc3Rcblx0XHRcdH0sXG5cdFx0XHRfX2NvbnRleHRfXzoge1xuXHRcdFx0XHR3cml0YWJsZTogdHJ1ZSxcblx0XHRcdFx0dmFsdWU6IGNvbnRleHRcblx0XHRcdH0sXG5cdFx0XHRfX25leHRJbmRleF9fOiB7XG5cdFx0XHRcdHdyaXRhYmxlOiB0cnVlLFxuXHRcdFx0XHR2YWx1ZTogMFxuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdGlmICghY29udGV4dCkgcmV0dXJuO1xuXHRcdGNhbGxhYmxlKGNvbnRleHQub24pO1xuXHRcdGNvbnRleHQub24oJ19hZGQnLCB0aGlzLl9vbkFkZC5iaW5kKHRoaXMpKTtcblx0XHRjb250ZXh0Lm9uKCdfZGVsZXRlJywgdGhpcy5fb25EZWxldGUuYmluZCh0aGlzKSk7XG5cdFx0Y29udGV4dC5vbignX2NsZWFyJywgdGhpcy5fb25DbGVhci5iaW5kKHRoaXMpKTtcblx0fTtcblxuXHRPYmplY3QuZGVmaW5lUHJvcGVydGllcyhJdGVyYXRvci5wcm90b3R5cGUsIE9iamVjdC5hc3NpZ24oe1xuXHRcdGNvbnN0cnVjdG9yOiB7XG5cdFx0XHR2YWx1ZTogSXRlcmF0b3IsXG5cdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRlbnVtZXJhYmxlOiBmYWxzZSxcblx0XHRcdHdyaXRhYmxlOiB0cnVlXG5cdFx0fSxcblx0XHRfbmV4dDoge1xuXHRcdFx0dmFsdWU6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0dmFyIGk7XG5cdFx0XHRcdGlmICghdGhpcy5fX2xpc3RfXykgcmV0dXJuO1xuXHRcdFx0XHRpZiAodGhpcy5fX3JlZG9fXykge1xuXHRcdFx0XHRcdGkgPSB0aGlzLl9fcmVkb19fLnNoaWZ0KCk7XG5cdFx0XHRcdFx0aWYgKGkgIT09IHVuZGVmaW5lZCkgcmV0dXJuIGk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHRoaXMuX19uZXh0SW5kZXhfXyA8IHRoaXMuX19saXN0X18ubGVuZ3RoKSByZXR1cm4gdGhpcy5fX25leHRJbmRleF9fKys7XG5cdFx0XHRcdHRoaXMuX3VuQmluZCgpO1xuXHRcdFx0fSxcblx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdFx0d3JpdGFibGU6IHRydWVcblx0XHR9LFxuXHRcdG5leHQ6IHtcblx0XHRcdHZhbHVlOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLl9jcmVhdGVSZXN1bHQodGhpcy5fbmV4dCgpKTtcblx0XHRcdH0sXG5cdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRlbnVtZXJhYmxlOiBmYWxzZSxcblx0XHRcdHdyaXRhYmxlOiB0cnVlXG5cdFx0fSxcblx0XHRfY3JlYXRlUmVzdWx0OiB7XG5cdFx0XHR2YWx1ZTogZnVuY3Rpb24gKGkpIHtcblx0XHRcdFx0aWYgKGkgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHtcblx0XHRcdFx0XHRkb25lOiB0cnVlLFxuXHRcdFx0XHRcdHZhbHVlOiB1bmRlZmluZWRcblx0XHRcdFx0fTtcblx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRkb25lOiBmYWxzZSxcblx0XHRcdFx0XHR2YWx1ZTogdGhpcy5fcmVzb2x2ZShpKVxuXHRcdFx0XHR9O1xuXHRcdFx0fSxcblx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdFx0d3JpdGFibGU6IHRydWVcblx0XHR9LFxuXHRcdF9yZXNvbHZlOiB7XG5cdFx0XHR2YWx1ZTogZnVuY3Rpb24gKGkpIHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuX19saXN0X19baV07XG5cdFx0XHR9LFxuXHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0XHR3cml0YWJsZTogdHJ1ZVxuXHRcdH0sXG5cdFx0X3VuQmluZDoge1xuXHRcdFx0dmFsdWU6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0dGhpcy5fX2xpc3RfXyA9IG51bGw7XG5cdFx0XHRcdGRlbGV0ZSB0aGlzLl9fcmVkb19fO1xuXHRcdFx0XHRpZiAoIXRoaXMuX19jb250ZXh0X18pIHJldHVybjtcblx0XHRcdFx0dGhpcy5fX2NvbnRleHRfXy5vZmYoJ19hZGQnLCB0aGlzLl9vbkFkZC5iaW5kKHRoaXMpKTtcblx0XHRcdFx0dGhpcy5fX2NvbnRleHRfXy5vZmYoJ19kZWxldGUnLCB0aGlzLl9vbkRlbGV0ZS5iaW5kKHRoaXMpKTtcblx0XHRcdFx0dGhpcy5fX2NvbnRleHRfXy5vZmYoJ19jbGVhcicsIHRoaXMuX29uQ2xlYXIuYmluZCh0aGlzKSk7XG5cdFx0XHRcdHRoaXMuX19jb250ZXh0X18gPSBudWxsO1xuXHRcdFx0fSxcblx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdFx0d3JpdGFibGU6IHRydWVcblx0XHR9LFxuXHRcdHRvU3RyaW5nOiB7XG5cdFx0XHR2YWx1ZTogZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRyZXR1cm4gJ1tvYmplY3QgSXRlcmF0b3JdJztcblx0XHRcdH0sXG5cdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRlbnVtZXJhYmxlOiBmYWxzZSxcblx0XHRcdHdyaXRhYmxlOiB0cnVlXG5cdFx0fVxuXHR9LCB7XG5cdFx0X29uQWRkOiB7XG5cdFx0XHR2YWx1ZTogZnVuY3Rpb24gKGluZGV4KSB7XG5cdFx0XHRcdGlmIChpbmRleCA+PSB0aGlzLl9fbmV4dEluZGV4X18pIHJldHVybjtcblx0XHRcdFx0Kyt0aGlzLl9fbmV4dEluZGV4X187XG5cdFx0XHRcdGlmICghdGhpcy5fX3JlZG9fXykge1xuXHRcdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnX19yZWRvX18nLCB7XG5cdFx0XHRcdFx0XHR2YWx1ZTogW2luZGV4XSxcblx0XHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdFx0XHRcdFx0d3JpdGFibGU6IGZhbHNlXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuX19yZWRvX18uZm9yRWFjaChmdW5jdGlvbiAocmVkbywgaSkge1xuXHRcdFx0XHRcdGlmIChyZWRvID49IGluZGV4KSB0aGlzLl9fcmVkb19fW2ldID0gKytyZWRvO1xuXHRcdFx0XHR9LCB0aGlzKTtcblx0XHRcdFx0dGhpcy5fX3JlZG9fXy5wdXNoKGluZGV4KTtcblx0XHRcdH0sXG5cdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRlbnVtZXJhYmxlOiBmYWxzZSxcblx0XHRcdHdyaXRhYmxlOiB0cnVlXG5cdFx0fSxcblx0XHRfb25EZWxldGU6IHtcblx0XHRcdHZhbHVlOiBmdW5jdGlvbiAoaW5kZXgpIHtcblx0XHRcdFx0dmFyIGk7XG5cdFx0XHRcdGlmIChpbmRleCA+PSB0aGlzLl9fbmV4dEluZGV4X18pIHJldHVybjtcblx0XHRcdFx0LS10aGlzLl9fbmV4dEluZGV4X187XG5cdFx0XHRcdGlmICghdGhpcy5fX3JlZG9fXykgcmV0dXJuO1xuXHRcdFx0XHRpID0gdGhpcy5fX3JlZG9fXy5pbmRleE9mKGluZGV4KTtcblx0XHRcdFx0aWYgKGkgIT09IC0xKSB0aGlzLl9fcmVkb19fLnNwbGljZShpLCAxKTtcblx0XHRcdFx0dGhpcy5fX3JlZG9fXy5mb3JFYWNoKGZ1bmN0aW9uIChyZWRvLCBpKSB7XG5cdFx0XHRcdFx0aWYgKHJlZG8gPiBpbmRleCkgdGhpcy5fX3JlZG9fX1tpXSA9IC0tcmVkbztcblx0XHRcdFx0fSwgdGhpcyk7XG5cdFx0XHR9LFxuXHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0XHR3cml0YWJsZTogdHJ1ZVxuXHRcdH0sXG5cdFx0X29uQ2xlYXI6IHtcblx0XHRcdHZhbHVlOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdGlmICh0aGlzLl9fcmVkb19fKSBjbGVhci5jYWxsKHRoaXMuX19yZWRvX18pO1xuXHRcdFx0XHR0aGlzLl9fbmV4dEluZGV4X18gPSAwO1xuXHRcdFx0fSxcblx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdFx0d3JpdGFibGU6IHRydWVcblx0XHR9XG5cdH0pKTtcblxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoSXRlcmF0b3IucHJvdG90eXBlLCBTeW1ib2wuaXRlcmF0b3IsIHtcblx0XHR2YWx1ZTogZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fSxcblx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0d3JpdGFibGU6IHRydWVcblx0fSk7XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShJdGVyYXRvci5wcm90b3R5cGUsIFN5bWJvbC50b1N0cmluZ1RhZywge1xuXHRcdHZhbHVlOiAnSXRlcmF0b3InLFxuXHRcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXG5cdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0d3JpdGFibGU6IHRydWVcblx0fSk7XG5cblx0cmV0dXJuIEl0ZXJhdG9yO1xufSgpKTtcbmV4cG9ydCBkZWZhdWx0IEl0ZXJhdG9yO1xuIiwgImltcG9ydCBJdGVyYXRvciBmcm9tIFwiQG1yaGVucnkvY29yZS13ZWIvaGVscGVycy9fSXRlcmF0b3JcIjtcblxuLy8gX0FycmF5SXRlcmF0b3Jcbi8qIGdsb2JhbCBJdGVyYXRvciwgU3ltYm9sICovXG4vLyBBIG1vZGlmaWNhdGlvbiBvZiBodHRwczovL2dpdGh1Yi5jb20vbWVkaWtvby9lczYtaXRlcmF0b3Jcbi8vIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IE1hcml1c3ogTm93YWsgKHd3dy5tZWRpa29vLmNvbSlcblxudmFyIEFycmF5SXRlcmF0b3IgPSAoZnVuY3Rpb24oKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcblxuXHR2YXIgQXJyYXlJdGVyYXRvciA9IGZ1bmN0aW9uKGFyciwga2luZCkge1xuXHRcdGlmICghKHRoaXMgaW5zdGFuY2VvZiBBcnJheUl0ZXJhdG9yKSkgcmV0dXJuIG5ldyBBcnJheUl0ZXJhdG9yKGFyciwga2luZCk7XG5cdFx0SXRlcmF0b3IuY2FsbCh0aGlzLCBhcnIpO1xuXHRcdGlmICgha2luZCkga2luZCA9ICd2YWx1ZSc7XG5cdFx0ZWxzZSBpZiAoU3RyaW5nLnByb3RvdHlwZS5pbmNsdWRlcy5jYWxsKGtpbmQsICdrZXkrdmFsdWUnKSkga2luZCA9ICdrZXkrdmFsdWUnO1xuXHRcdGVsc2UgaWYgKFN0cmluZy5wcm90b3R5cGUuaW5jbHVkZXMuY2FsbChraW5kLCAna2V5JykpIGtpbmQgPSAna2V5Jztcblx0XHRlbHNlIGtpbmQgPSAndmFsdWUnO1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnX19raW5kX18nLCB7XG5cdFx0XHR2YWx1ZToga2luZCxcblx0XHRcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXG5cdFx0XHRlbnVtZXJhYmxlOiBmYWxzZSxcblx0XHRcdHdyaXRhYmxlOiBmYWxzZVxuXHRcdH0pO1xuXHR9O1xuXHRpZiAoT2JqZWN0LnNldFByb3RvdHlwZU9mKSBPYmplY3Quc2V0UHJvdG90eXBlT2YoQXJyYXlJdGVyYXRvciwgSXRlcmF0b3IucHJvdG90eXBlKTtcblxuXHRBcnJheUl0ZXJhdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoSXRlcmF0b3IucHJvdG90eXBlLCB7XG5cdFx0Y29uc3RydWN0b3I6IHtcblx0XHRcdHZhbHVlOiBBcnJheUl0ZXJhdG9yLFxuXHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0XHR3cml0YWJsZTogdHJ1ZVxuXHRcdH0sXG5cdFx0X3Jlc29sdmU6IHtcblx0XHRcdHZhbHVlOiBmdW5jdGlvbihpKSB7XG5cdFx0XHRcdGlmICh0aGlzLl9fa2luZF9fID09PSAndmFsdWUnKSByZXR1cm4gdGhpcy5fX2xpc3RfX1tpXTtcblx0XHRcdFx0aWYgKHRoaXMuX19raW5kX18gPT09ICdrZXkrdmFsdWUnKSByZXR1cm4gW2ksIHRoaXMuX19saXN0X19baV1dO1xuXHRcdFx0XHRyZXR1cm4gaTtcblx0XHRcdH0sXG5cdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRlbnVtZXJhYmxlOiBmYWxzZSxcblx0XHRcdHdyaXRhYmxlOiB0cnVlXG5cdFx0fSxcblx0XHR0b1N0cmluZzoge1xuXHRcdFx0dmFsdWU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gJ1tvYmplY3QgQXJyYXkgSXRlcmF0b3JdJztcblx0XHRcdH0sXG5cdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRlbnVtZXJhYmxlOiBmYWxzZSxcblx0XHRcdHdyaXRhYmxlOiB0cnVlXG5cdFx0fVxuXHR9KTtcblxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoQXJyYXlJdGVyYXRvci5wcm90b3R5cGUsIFN5bWJvbC50b1N0cmluZ1RhZywge1xuXHRcdHZhbHVlOiAnQXJyYXkgSXRlcmF0b3InLFxuXHRcdHdyaXRhYmxlOiBmYWxzZSxcblx0XHRlbnVtZXJhYmxlOiBmYWxzZSxcblx0XHRjb25maWd1cmFibGU6IHRydWVcblx0fSk7XG5cblx0cmV0dXJuIEFycmF5SXRlcmF0b3I7XG59KCkpO1xuZXhwb3J0IGRlZmF1bHQgQXJyYXlJdGVyYXRvcjtcbiIsICJpbXBvcnQgQXJyYXlJdGVyYXRvciBmcm9tIFwiQG1yaGVucnkvY29yZS13ZWIvaGVscGVycy9fQXJyYXlJdGVyYXRvclwiO1xuaW1wb3J0IEl0ZXJhdG9yIGZyb20gXCJAbXJoZW5yeS9jb3JlLXdlYi9oZWxwZXJzL19JdGVyYXRvclwiO1xuKGZ1bmN0aW9uKHVuZGVmaW5lZCkge1xuaWYgKCEoXCJTeW1ib2xcImluIHNlbGYmJlwiaXRlcmF0b3JcImluIHNlbGYuU3ltYm9sJiZmdW5jdGlvbigpe3ZhciBlPWRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKVxucmV0dXJuIGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSksISFlLmNoaWxkTm9kZXNbc2VsZi5TeW1ib2wuaXRlcmF0b3JdfSgpXG4pKSB7XG4vLyBOb2RlTGlzdC5wcm90b3R5cGUuQEBpdGVyYXRvclxuLyogZ2xvYmFsIFN5bWJvbCwgQXJyYXlJdGVyYXRvciovXG5Ob2RlTGlzdC5wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHtcblx0cmV0dXJuIG5ldyBBcnJheUl0ZXJhdG9yKHRoaXMpO1xufTtcbn19KS5jYWxsKCdvYmplY3QnID09PSB0eXBlb2Ygd2luZG93ICYmIHdpbmRvdyB8fCAnb2JqZWN0JyA9PT0gdHlwZW9mIHNlbGYgJiYgc2VsZiB8fCAnb2JqZWN0JyA9PT0gdHlwZW9mIGdsb2JhbCAmJiBnbG9iYWwgfHwge30pO1xuIiwgIihmdW5jdGlvbih1bmRlZmluZWQpIHtcbmlmICghKChmdW5jdGlvbigpe2lmKCEoXCJFdmVudFwiaW4gc2VsZikpcmV0dXJuITFcbnRyeXtyZXR1cm4gbmV3IEV2ZW50KFwiY2xpY2tcIiksITB9Y2F0Y2gobil7cmV0dXJuITF9fSkoKVxuKSkge1xuLy8gRXZlbnRcbihmdW5jdGlvbiAoKSB7XG5cdC8vIFRoaXMgcG9seWZpbGwgZGVwZW5kcyBvbiBhdmFpbGFiaWxpdHkgb2YgYGRvY3VtZW50YCBzbyB3aWxsIG5vdCBydW4gaW4gYSB3b3JrZXJcblx0Ly8gSG93ZXZlciwgd2UgYXNzc3VtZSB0aGVyZSBhcmUgbm8gYnJvd3NlcnMgd2l0aCB3b3JrZXIgc3VwcG9ydCB0aGF0IGxhY2sgcHJvcGVyXG5cdC8vIHN1cHBvcnQgZm9yIGBFdmVudGAgd2l0aGluIHRoZSB3b3JrZXJcblx0aWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcgfHwgdHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybjtcblxuXHR2YXIgZXhpc3RpbmdQcm90byA9ICh3aW5kb3cuRXZlbnQgJiYgd2luZG93LkV2ZW50LnByb3RvdHlwZSkgfHwgbnVsbDtcblx0ZnVuY3Rpb24gRXZlbnQodHlwZSwgZXZlbnRJbml0RGljdCkge1xuXHRcdGlmICghdHlwZSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdOb3QgZW5vdWdoIGFyZ3VtZW50cycpO1xuXHRcdH1cblxuXHRcdHZhciBldmVudDtcblx0XHQvLyBTaG9ydGN1dCBpZiBicm93c2VyIHN1cHBvcnRzIGNyZWF0ZUV2ZW50XG5cdFx0aWYgKCdjcmVhdGVFdmVudCcgaW4gZG9jdW1lbnQpIHtcblx0XHRcdGV2ZW50ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0V2ZW50Jyk7XG5cdFx0XHR2YXIgYnViYmxlcyA9IGV2ZW50SW5pdERpY3QgJiYgZXZlbnRJbml0RGljdC5idWJibGVzICE9PSB1bmRlZmluZWQgPyBldmVudEluaXREaWN0LmJ1YmJsZXMgOiBmYWxzZTtcblx0XHRcdHZhciBjYW5jZWxhYmxlID0gZXZlbnRJbml0RGljdCAmJiBldmVudEluaXREaWN0LmNhbmNlbGFibGUgIT09IHVuZGVmaW5lZCA/IGV2ZW50SW5pdERpY3QuY2FuY2VsYWJsZSA6IGZhbHNlO1xuXG5cdFx0XHRldmVudC5pbml0RXZlbnQodHlwZSwgYnViYmxlcywgY2FuY2VsYWJsZSk7XG5cblx0XHRcdHJldHVybiBldmVudDtcblx0XHR9XG5cblx0XHRldmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50T2JqZWN0KCk7XG5cblx0XHRldmVudC50eXBlID0gdHlwZTtcblx0XHRldmVudC5idWJibGVzID0gZXZlbnRJbml0RGljdCAmJiBldmVudEluaXREaWN0LmJ1YmJsZXMgIT09IHVuZGVmaW5lZCA/IGV2ZW50SW5pdERpY3QuYnViYmxlcyA6IGZhbHNlO1xuXHRcdGV2ZW50LmNhbmNlbGFibGUgPSBldmVudEluaXREaWN0ICYmIGV2ZW50SW5pdERpY3QuY2FuY2VsYWJsZSAhPT0gdW5kZWZpbmVkID8gZXZlbnRJbml0RGljdC5jYW5jZWxhYmxlIDogZmFsc2U7XG5cblx0XHRyZXR1cm4gZXZlbnQ7XG5cdH1cblx0RXZlbnQuTk9ORSA9IDA7XG5cdEV2ZW50LkNBUFRVUklOR19QSEFTRSA9IDE7XG5cdEV2ZW50LkFUX1RBUkdFVCA9IDI7XG5cdEV2ZW50LkJVQkJMSU5HX1BIQVNFID0gMztcblx0d2luZG93LkV2ZW50ID0gV2luZG93LnByb3RvdHlwZS5FdmVudCA9IEV2ZW50O1xuXHRpZiAoZXhpc3RpbmdQcm90bykge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3cuRXZlbnQsICdwcm90b3R5cGUnLCB7XG5cdFx0XHRjb25maWd1cmFibGU6IGZhbHNlLFxuXHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0XHR3cml0YWJsZTogdHJ1ZSxcblx0XHRcdHZhbHVlOiBleGlzdGluZ1Byb3RvXG5cdFx0fSk7XG5cdH1cblxuXHRpZiAoISgnY3JlYXRlRXZlbnQnIGluIGRvY3VtZW50KSkge1xuXHRcdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyID0gV2luZG93LnByb3RvdHlwZS5hZGRFdmVudExpc3RlbmVyID0gRG9jdW1lbnQucHJvdG90eXBlLmFkZEV2ZW50TGlzdGVuZXIgPSBFbGVtZW50LnByb3RvdHlwZS5hZGRFdmVudExpc3RlbmVyID0gZnVuY3Rpb24gYWRkRXZlbnRMaXN0ZW5lcigpIHtcblx0XHRcdHZhclxuXHRcdFx0ZWxlbWVudCA9IHRoaXMsXG5cdFx0XHR0eXBlID0gYXJndW1lbnRzWzBdLFxuXHRcdFx0bGlzdGVuZXIgPSBhcmd1bWVudHNbMV07XG5cblx0XHRcdGlmICghZWxlbWVudC5fZXZlbnRzKSB7XG5cdFx0XHRcdGVsZW1lbnQuX2V2ZW50cyA9IHt9O1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIWVsZW1lbnQuX2V2ZW50c1t0eXBlXSkge1xuXHRcdFx0XHRlbGVtZW50Ll9ldmVudHNbdHlwZV0gPSBmdW5jdGlvbiAoZXZlbnQpIHtcblx0XHRcdFx0XHR2YXJcblx0XHRcdFx0XHRsaXN0ID0gZWxlbWVudC5fZXZlbnRzW2V2ZW50LnR5cGVdLmxpc3QsXG5cdFx0XHRcdFx0ZXZlbnRzID0gbGlzdC5zbGljZSgpLFxuXHRcdFx0XHRcdGluZGV4ID0gLTEsXG5cdFx0XHRcdFx0bGVuZ3RoID0gZXZlbnRzLmxlbmd0aCxcblx0XHRcdFx0XHRldmVudEVsZW1lbnQ7XG5cblx0XHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCA9IGZ1bmN0aW9uIHByZXZlbnREZWZhdWx0KCkge1xuXHRcdFx0XHRcdFx0aWYgKGV2ZW50LmNhbmNlbGFibGUgIT09IGZhbHNlKSB7XG5cdFx0XHRcdFx0XHRcdGV2ZW50LnJldHVyblZhbHVlID0gZmFsc2U7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRcdGV2ZW50LnN0b3BQcm9wYWdhdGlvbiA9IGZ1bmN0aW9uIHN0b3BQcm9wYWdhdGlvbigpIHtcblx0XHRcdFx0XHRcdGV2ZW50LmNhbmNlbEJ1YmJsZSA9IHRydWU7XG5cdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRcdGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiA9IGZ1bmN0aW9uIHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpIHtcblx0XHRcdFx0XHRcdGV2ZW50LmNhbmNlbEJ1YmJsZSA9IHRydWU7XG5cdFx0XHRcdFx0XHRldmVudC5jYW5jZWxJbW1lZGlhdGUgPSB0cnVlO1xuXHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHRldmVudC5jdXJyZW50VGFyZ2V0ID0gZWxlbWVudDtcblx0XHRcdFx0XHRldmVudC5yZWxhdGVkVGFyZ2V0ID0gZXZlbnQuZnJvbUVsZW1lbnQgfHwgbnVsbDtcblx0XHRcdFx0XHRldmVudC50YXJnZXQgPSBldmVudC50YXJnZXQgfHwgZXZlbnQuc3JjRWxlbWVudCB8fCBlbGVtZW50O1xuXHRcdFx0XHRcdGV2ZW50LnRpbWVTdGFtcCA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuXG5cdFx0XHRcdFx0aWYgKGV2ZW50LmNsaWVudFgpIHtcblx0XHRcdFx0XHRcdGV2ZW50LnBhZ2VYID0gZXZlbnQuY2xpZW50WCArIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0O1xuXHRcdFx0XHRcdFx0ZXZlbnQucGFnZVkgPSBldmVudC5jbGllbnRZICsgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcDtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR3aGlsZSAoKytpbmRleCA8IGxlbmd0aCAmJiAhZXZlbnQuY2FuY2VsSW1tZWRpYXRlKSB7XG5cdFx0XHRcdFx0XHRpZiAoaW5kZXggaW4gZXZlbnRzKSB7XG5cdFx0XHRcdFx0XHRcdGV2ZW50RWxlbWVudCA9IGV2ZW50c1tpbmRleF07XG5cblx0XHRcdFx0XHRcdFx0aWYgKGxpc3QuaW5jbHVkZXMoZXZlbnRFbGVtZW50KSAmJiB0eXBlb2YgZXZlbnRFbGVtZW50ID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdFx0XHRcdFx0ZXZlbnRFbGVtZW50LmNhbGwoZWxlbWVudCwgZXZlbnQpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9O1xuXG5cdFx0XHRcdGVsZW1lbnQuX2V2ZW50c1t0eXBlXS5saXN0ID0gW107XG5cblx0XHRcdFx0aWYgKGVsZW1lbnQuYXR0YWNoRXZlbnQpIHtcblx0XHRcdFx0XHRlbGVtZW50LmF0dGFjaEV2ZW50KCdvbicgKyB0eXBlLCBlbGVtZW50Ll9ldmVudHNbdHlwZV0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGVsZW1lbnQuX2V2ZW50c1t0eXBlXS5saXN0LnB1c2gobGlzdGVuZXIpO1xuXHRcdH07XG5cblx0XHR3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lciA9IFdpbmRvdy5wcm90b3R5cGUucmVtb3ZlRXZlbnRMaXN0ZW5lciA9IERvY3VtZW50LnByb3RvdHlwZS5yZW1vdmVFdmVudExpc3RlbmVyID0gRWxlbWVudC5wcm90b3R5cGUucmVtb3ZlRXZlbnRMaXN0ZW5lciA9IGZ1bmN0aW9uIHJlbW92ZUV2ZW50TGlzdGVuZXIoKSB7XG5cdFx0XHR2YXJcblx0XHRcdGVsZW1lbnQgPSB0aGlzLFxuXHRcdFx0dHlwZSA9IGFyZ3VtZW50c1swXSxcblx0XHRcdGxpc3RlbmVyID0gYXJndW1lbnRzWzFdLFxuXHRcdFx0aW5kZXg7XG5cblx0XHRcdGlmIChlbGVtZW50Ll9ldmVudHMgJiYgZWxlbWVudC5fZXZlbnRzW3R5cGVdICYmIGVsZW1lbnQuX2V2ZW50c1t0eXBlXS5saXN0KSB7XG5cdFx0XHRcdGluZGV4ID0gZWxlbWVudC5fZXZlbnRzW3R5cGVdLmxpc3QuaW5kZXhPZihsaXN0ZW5lcik7XG5cblx0XHRcdFx0aWYgKGluZGV4ICE9PSAtMSkge1xuXHRcdFx0XHRcdGVsZW1lbnQuX2V2ZW50c1t0eXBlXS5saXN0LnNwbGljZShpbmRleCwgMSk7XG5cblx0XHRcdFx0XHRpZiAoIWVsZW1lbnQuX2V2ZW50c1t0eXBlXS5saXN0Lmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0aWYgKGVsZW1lbnQuZGV0YWNoRXZlbnQpIHtcblx0XHRcdFx0XHRcdFx0ZWxlbWVudC5kZXRhY2hFdmVudCgnb24nICsgdHlwZSwgZWxlbWVudC5fZXZlbnRzW3R5cGVdKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGRlbGV0ZSBlbGVtZW50Ll9ldmVudHNbdHlwZV07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdHdpbmRvdy5kaXNwYXRjaEV2ZW50ID0gV2luZG93LnByb3RvdHlwZS5kaXNwYXRjaEV2ZW50ID0gRG9jdW1lbnQucHJvdG90eXBlLmRpc3BhdGNoRXZlbnQgPSBFbGVtZW50LnByb3RvdHlwZS5kaXNwYXRjaEV2ZW50ID0gZnVuY3Rpb24gZGlzcGF0Y2hFdmVudChldmVudCkge1xuXHRcdFx0aWYgKCFhcmd1bWVudHMubGVuZ3RoKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcignTm90IGVub3VnaCBhcmd1bWVudHMnKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCFldmVudCB8fCB0eXBlb2YgZXZlbnQudHlwZSAhPT0gJ3N0cmluZycpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCdET00gRXZlbnRzIEV4Y2VwdGlvbiAwJyk7XG5cdFx0XHR9XG5cblx0XHRcdHZhciBlbGVtZW50ID0gdGhpcywgdHlwZSA9IGV2ZW50LnR5cGU7XG5cblx0XHRcdHRyeSB7XG5cdFx0XHRcdGlmICghZXZlbnQuYnViYmxlcykge1xuXHRcdFx0XHRcdGV2ZW50LmNhbmNlbEJ1YmJsZSA9IHRydWU7XG5cblx0XHRcdFx0XHR2YXIgY2FuY2VsQnViYmxlRXZlbnQgPSBmdW5jdGlvbiAoZXZlbnQpIHtcblx0XHRcdFx0XHRcdGV2ZW50LmNhbmNlbEJ1YmJsZSA9IHRydWU7XG5cblx0XHRcdFx0XHRcdChlbGVtZW50IHx8IHdpbmRvdykuZGV0YWNoRXZlbnQoJ29uJyArIHR5cGUsIGNhbmNlbEJ1YmJsZUV2ZW50KTtcblx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0dGhpcy5hdHRhY2hFdmVudCgnb24nICsgdHlwZSwgY2FuY2VsQnViYmxlRXZlbnQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhpcy5maXJlRXZlbnQoJ29uJyArIHR5cGUsIGV2ZW50KTtcblx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdGV2ZW50LnRhcmdldCA9IGVsZW1lbnQ7XG5cblx0XHRcdFx0ZG8ge1xuXHRcdFx0XHRcdGV2ZW50LmN1cnJlbnRUYXJnZXQgPSBlbGVtZW50O1xuXG5cdFx0XHRcdFx0aWYgKCdfZXZlbnRzJyBpbiBlbGVtZW50ICYmIHR5cGVvZiBlbGVtZW50Ll9ldmVudHNbdHlwZV0gPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0XHRcdGVsZW1lbnQuX2V2ZW50c1t0eXBlXS5jYWxsKGVsZW1lbnQsIGV2ZW50KTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAodHlwZW9mIGVsZW1lbnRbJ29uJyArIHR5cGVdID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdFx0XHRlbGVtZW50WydvbicgKyB0eXBlXS5jYWxsKGVsZW1lbnQsIGV2ZW50KTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRlbGVtZW50ID0gZWxlbWVudC5ub2RlVHlwZSA9PT0gOSA/IGVsZW1lbnQucGFyZW50V2luZG93IDogZWxlbWVudC5wYXJlbnROb2RlO1xuXHRcdFx0XHR9IHdoaWxlIChlbGVtZW50ICYmICFldmVudC5jYW5jZWxCdWJibGUpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9O1xuXG5cdFx0Ly8gQWRkIHRoZSBET01Db250ZW50TG9hZGVkIEV2ZW50XG5cdFx0ZG9jdW1lbnQuYXR0YWNoRXZlbnQoJ29ucmVhZHlzdGF0ZWNoYW5nZScsIGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgPT09ICdjb21wbGV0ZScpIHtcblx0XHRcdFx0ZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ0RPTUNvbnRlbnRMb2FkZWQnLCB7XG5cdFx0XHRcdFx0YnViYmxlczogdHJ1ZVxuXHRcdFx0XHR9KSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cbn0oKSk7XG59fSkuY2FsbCgnb2JqZWN0JyA9PT0gdHlwZW9mIHdpbmRvdyAmJiB3aW5kb3cgfHwgJ29iamVjdCcgPT09IHR5cGVvZiBzZWxmICYmIHNlbGYgfHwgJ29iamVjdCcgPT09IHR5cGVvZiBnbG9iYWwgJiYgZ2xvYmFsIHx8IHt9KTtcbiIsICIoZnVuY3Rpb24odW5kZWZpbmVkKSB7XG5pZiAoIShcIkN1c3RvbUV2ZW50XCJpbiBzZWxmJiYoXCJmdW5jdGlvblwiPT10eXBlb2Ygc2VsZi5DdXN0b21FdmVudHx8LTE8c2VsZi5DdXN0b21FdmVudC50b1N0cmluZygpLmluZGV4T2YoXCJDdXN0b21FdmVudENvbnN0cnVjdG9yXCIpKVxuKSkge1xuLy8gQ3VzdG9tRXZlbnRcbnNlbGYuQ3VzdG9tRXZlbnQgPSBmdW5jdGlvbiBDdXN0b21FdmVudCh0eXBlLCBldmVudEluaXREaWN0KSB7XG5cdGlmICghdHlwZSkge1xuXHRcdHRocm93IEVycm9yKCdUeXBlRXJyb3I6IEZhaWxlZCB0byBjb25zdHJ1Y3QgXCJDdXN0b21FdmVudFwiOiBBbiBldmVudCBuYW1lIG11c3QgYmUgcHJvdmlkZWQuJyk7XG5cdH1cblxuXHR2YXIgZXZlbnQ7XG5cdGV2ZW50SW5pdERpY3QgPSBldmVudEluaXREaWN0IHx8IHtidWJibGVzOiBmYWxzZSwgY2FuY2VsYWJsZTogZmFsc2UsIGRldGFpbDogbnVsbH07XG5cblx0dHJ5IHtcblx0XHRldmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdDdXN0b21FdmVudCcpO1xuXHRcdGV2ZW50LmluaXRDdXN0b21FdmVudCh0eXBlLCBldmVudEluaXREaWN0LmJ1YmJsZXMsIGV2ZW50SW5pdERpY3QuY2FuY2VsYWJsZSwgZXZlbnRJbml0RGljdC5kZXRhaWwpO1xuXHR9IGNhdGNoIChlcnJvcikge1xuXHRcdC8vIGZvciBicm93c2VycyB3aGljaCBkb24ndCBzdXBwb3J0IEN1c3RvbUV2ZW50IGF0IGFsbCwgd2UgdXNlIGEgcmVndWxhciBldmVudCBpbnN0ZWFkXG5cdFx0ZXZlbnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnRXZlbnQnKTtcblx0XHRldmVudC5pbml0RXZlbnQodHlwZSwgZXZlbnRJbml0RGljdC5idWJibGVzLCBldmVudEluaXREaWN0LmNhbmNlbGFibGUpO1xuXHRcdGV2ZW50LmRldGFpbCA9IGV2ZW50SW5pdERpY3QuZGV0YWlsO1xuXHR9XG5cdHJldHVybiBldmVudDtcbn07XG5cbkN1c3RvbUV2ZW50LnByb3RvdHlwZSA9IEV2ZW50LnByb3RvdHlwZTtcbn19KS5jYWxsKCdvYmplY3QnID09PSB0eXBlb2Ygd2luZG93ICYmIHdpbmRvdyB8fCAnb2JqZWN0JyA9PT0gdHlwZW9mIHNlbGYgJiYgc2VsZiB8fCAnb2JqZWN0JyA9PT0gdHlwZW9mIGdsb2JhbCAmJiBnbG9iYWwgfHwge30pO1xuIiwgIihmdW5jdGlvbih1bmRlZmluZWQpIHtcbmlmICghKFwiRG9jdW1lbnRGcmFnbWVudFwiaW4gc2VsZiYmZnVuY3Rpb24oKXt0cnl7cmV0dXJuIG5ldyBEb2N1bWVudEZyYWdtZW50LCEwfWNhdGNoKG4pe3JldHVybiExfX0oKVxuKSkge1xuLy8gRG9jdW1lbnRGcmFnbWVudFxuKGZ1bmN0aW9uIChnbG9iYWwpIHtcblx0Z2xvYmFsLkRvY3VtZW50RnJhZ21lbnQgPSBmdW5jdGlvbiBEb2N1bWVudEZyYWdtZW50KCkge1xuXHRcdHJldHVybiBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG5cdH07XG5cblx0dmFyIGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuXHRnbG9iYWwuRG9jdW1lbnRGcmFnbWVudC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGZyYWdtZW50LmNvbnN0cnVjdG9yLnByb3RvdHlwZSlcbn0oc2VsZikpO1xufX0pLmNhbGwoJ29iamVjdCcgPT09IHR5cGVvZiB3aW5kb3cgJiYgd2luZG93IHx8ICdvYmplY3QnID09PSB0eXBlb2Ygc2VsZiAmJiBzZWxmIHx8ICdvYmplY3QnID09PSB0eXBlb2YgZ2xvYmFsICYmIGdsb2JhbCB8fCB7fSk7XG4iLCAiKGZ1bmN0aW9uKHVuZGVmaW5lZCkge1xuaWYgKCEoXCJkb2N1bWVudFwiaW4gc2VsZiYmXCJtYXRjaGVzXCJpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRcbikpIHtcbi8vIEVsZW1lbnQucHJvdG90eXBlLm1hdGNoZXNcbkVsZW1lbnQucHJvdG90eXBlLm1hdGNoZXMgPSBFbGVtZW50LnByb3RvdHlwZS53ZWJraXRNYXRjaGVzU2VsZWN0b3IgfHwgRWxlbWVudC5wcm90b3R5cGUub01hdGNoZXNTZWxlY3RvciB8fCBFbGVtZW50LnByb3RvdHlwZS5tc01hdGNoZXNTZWxlY3RvciB8fCBFbGVtZW50LnByb3RvdHlwZS5tb3pNYXRjaGVzU2VsZWN0b3IgfHwgZnVuY3Rpb24gbWF0Y2hlcyhzZWxlY3Rvcikge1xuXG5cdHZhciBlbGVtZW50ID0gdGhpcztcblx0dmFyIGVsZW1lbnRzID0gKGVsZW1lbnQuZG9jdW1lbnQgfHwgZWxlbWVudC5vd25lckRvY3VtZW50KS5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKTtcblx0dmFyIGluZGV4ID0gMDtcblxuXHR3aGlsZSAoZWxlbWVudHNbaW5kZXhdICYmIGVsZW1lbnRzW2luZGV4XSAhPT0gZWxlbWVudCkge1xuXHRcdCsraW5kZXg7XG5cdH1cblxuXHRyZXR1cm4gISFlbGVtZW50c1tpbmRleF07XG59O1xufX0pLmNhbGwoJ29iamVjdCcgPT09IHR5cGVvZiB3aW5kb3cgJiYgd2luZG93IHx8ICdvYmplY3QnID09PSB0eXBlb2Ygc2VsZiAmJiBzZWxmIHx8ICdvYmplY3QnID09PSB0eXBlb2YgZ2xvYmFsICYmIGdsb2JhbCB8fCB7fSk7XG4iLCAiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IChjKSAyMDE2IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHRcbiAqIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0XG4gKiBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHRcbiAqIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvXG4gKiBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dFxuICovXG5cbi8vIG1pbmltYWwgdGVtcGxhdGUgcG9seWZpbGxcbihmdW5jdGlvbiAoKSB7XG4gICd1c2Ugc3RyaWN0JztcblxuICB2YXIgbmVlZHNUZW1wbGF0ZSA9IHR5cGVvZiBIVE1MVGVtcGxhdGVFbGVtZW50ID09PSAndW5kZWZpbmVkJztcbiAgdmFyIGJyb2tlbkRvY0ZyYWdtZW50ID0gIShcbiAgICBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkuY2xvbmVOb2RlKCkgaW5zdGFuY2VvZiBEb2N1bWVudEZyYWdtZW50XG4gICk7XG4gIHZhciBuZWVkc0RvY0ZyYWcgPSBmYWxzZTtcblxuICAvLyBOT1RFOiBSZXBsYWNlIERvY3VtZW50RnJhZ21lbnQgdG8gd29yayBhcm91bmQgSUUxMSBidWcgdGhhdFxuICAvLyBjYXVzZXMgY2hpbGRyZW4gb2YgYSBkb2N1bWVudCBmcmFnbWVudCBtb2RpZmllZCB3aGlsZVxuICAvLyB0aGVyZSBpcyBhIG11dGF0aW9uIG9ic2VydmVyIHRvIG5vdCBoYXZlIGEgcGFyZW50Tm9kZSwgb3JcbiAgLy8gaGF2ZSBhIGJyb2tlbiBwYXJlbnROb2RlICghPyEpXG4gIGlmICgvVHJpZGVudC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSkge1xuICAgIChmdW5jdGlvbiAoKSB7XG4gICAgICBuZWVkc0RvY0ZyYWcgPSB0cnVlO1xuXG4gICAgICB2YXIgb3JpZ0Nsb25lTm9kZSA9IE5vZGUucHJvdG90eXBlLmNsb25lTm9kZTtcbiAgICAgIE5vZGUucHJvdG90eXBlLmNsb25lTm9kZSA9IGZ1bmN0aW9uIGNsb25lTm9kZShkZWVwKSB7XG4gICAgICAgIHZhciBuZXdEb20gPSBvcmlnQ2xvbmVOb2RlLmNhbGwodGhpcywgZGVlcCk7XG4gICAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgRG9jdW1lbnRGcmFnbWVudCkge1xuICAgICAgICAgIG5ld0RvbS5fX3Byb3RvX18gPSBEb2N1bWVudEZyYWdtZW50LnByb3RvdHlwZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3RG9tO1xuICAgICAgfTtcblxuICAgICAgLy8gSUUncyBEb2N1bWVudEZyYWdtZW50IHF1ZXJ5U2VsZWN0b3IgY29kZSBkb2Vzbid0IHdvcmsgd2hlblxuICAgICAgLy8gY2FsbGVkIG9uIGFuIGVsZW1lbnQgaW5zdGFuY2VcbiAgICAgIERvY3VtZW50RnJhZ21lbnQucHJvdG90eXBlLnF1ZXJ5U2VsZWN0b3JBbGwgPVxuICAgICAgICBIVE1MRWxlbWVudC5wcm90b3R5cGUucXVlcnlTZWxlY3RvckFsbDtcbiAgICAgIERvY3VtZW50RnJhZ21lbnQucHJvdG90eXBlLnF1ZXJ5U2VsZWN0b3IgPVxuICAgICAgICBIVE1MRWxlbWVudC5wcm90b3R5cGUucXVlcnlTZWxlY3RvcjtcblxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRG9jdW1lbnRGcmFnbWVudC5wcm90b3R5cGUsIHtcbiAgICAgICAgJ25vZGVUeXBlJzoge1xuICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIE5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgfSxcblxuICAgICAgICAnbG9jYWxOYW1lJzoge1xuICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgfSxcblxuICAgICAgICAnbm9kZU5hbWUnOiB7XG4gICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gJyNkb2N1bWVudC1mcmFnbWVudCc7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgdmFyIG9yaWdJbnNlcnRCZWZvcmUgPSBOb2RlLnByb3RvdHlwZS5pbnNlcnRCZWZvcmU7XG4gICAgICBmdW5jdGlvbiBpbnNlcnRCZWZvcmUobmV3Tm9kZSwgcmVmTm9kZSkge1xuICAgICAgICBpZiAobmV3Tm9kZSBpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnQpIHtcbiAgICAgICAgICB2YXIgY2hpbGQ7XG4gICAgICAgICAgd2hpbGUgKChjaGlsZCA9IG5ld05vZGUuZmlyc3RDaGlsZCkpIHtcbiAgICAgICAgICAgIG9yaWdJbnNlcnRCZWZvcmUuY2FsbCh0aGlzLCBjaGlsZCwgcmVmTm9kZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9yaWdJbnNlcnRCZWZvcmUuY2FsbCh0aGlzLCBuZXdOb2RlLCByZWZOb2RlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3Tm9kZTtcbiAgICAgIH1cbiAgICAgIE5vZGUucHJvdG90eXBlLmluc2VydEJlZm9yZSA9IGluc2VydEJlZm9yZTtcblxuICAgICAgdmFyIG9yaWdBcHBlbmRDaGlsZCA9IE5vZGUucHJvdG90eXBlLmFwcGVuZENoaWxkO1xuICAgICAgTm9kZS5wcm90b3R5cGUuYXBwZW5kQ2hpbGQgPSBmdW5jdGlvbiBhcHBlbmRDaGlsZChjaGlsZCkge1xuICAgICAgICBpZiAoY2hpbGQgaW5zdGFuY2VvZiBEb2N1bWVudEZyYWdtZW50KSB7XG4gICAgICAgICAgaW5zZXJ0QmVmb3JlLmNhbGwodGhpcywgY2hpbGQsIG51bGwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9yaWdBcHBlbmRDaGlsZC5jYWxsKHRoaXMsIGNoaWxkKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2hpbGQ7XG4gICAgICB9O1xuXG4gICAgICB2YXIgb3JpZ1JlbW92ZUNoaWxkID0gTm9kZS5wcm90b3R5cGUucmVtb3ZlQ2hpbGQ7XG4gICAgICB2YXIgb3JpZ1JlcGxhY2VDaGlsZCA9IE5vZGUucHJvdG90eXBlLnJlcGxhY2VDaGlsZDtcbiAgICAgIE5vZGUucHJvdG90eXBlLnJlcGxhY2VDaGlsZCA9IGZ1bmN0aW9uIHJlcGxhY2VDaGlsZChuZXdDaGlsZCwgb2xkQ2hpbGQpIHtcbiAgICAgICAgaWYgKG5ld0NoaWxkIGluc3RhbmNlb2YgRG9jdW1lbnRGcmFnbWVudCkge1xuICAgICAgICAgIGluc2VydEJlZm9yZS5jYWxsKHRoaXMsIG5ld0NoaWxkLCBvbGRDaGlsZCk7XG4gICAgICAgICAgb3JpZ1JlbW92ZUNoaWxkLmNhbGwodGhpcywgb2xkQ2hpbGQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9yaWdSZXBsYWNlQ2hpbGQuY2FsbCh0aGlzLCBuZXdDaGlsZCwgb2xkQ2hpbGQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvbGRDaGlsZDtcbiAgICAgIH07XG5cbiAgICAgIERvY3VtZW50LnByb3RvdHlwZS5jcmVhdGVEb2N1bWVudEZyYWdtZW50ID0gZnVuY3Rpb24gY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpIHtcbiAgICAgICAgdmFyIGZyYWcgPSB0aGlzLmNyZWF0ZUVsZW1lbnQoJ2RmJyk7XG4gICAgICAgIGZyYWcuX19wcm90b19fID0gRG9jdW1lbnRGcmFnbWVudC5wcm90b3R5cGU7XG4gICAgICAgIHJldHVybiBmcmFnO1xuICAgICAgfTtcblxuICAgICAgdmFyIG9yaWdJbXBvcnROb2RlID0gRG9jdW1lbnQucHJvdG90eXBlLmltcG9ydE5vZGU7XG4gICAgICBEb2N1bWVudC5wcm90b3R5cGUuaW1wb3J0Tm9kZSA9IGZ1bmN0aW9uIGltcG9ydE5vZGUoaW1wTm9kZSwgZGVlcCkge1xuICAgICAgICBkZWVwID0gZGVlcCB8fCBmYWxzZTtcbiAgICAgICAgdmFyIG5ld05vZGUgPSBvcmlnSW1wb3J0Tm9kZS5jYWxsKHRoaXMsIGltcE5vZGUsIGRlZXApO1xuICAgICAgICBpZiAoaW1wTm9kZSBpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnQpIHtcbiAgICAgICAgICBuZXdOb2RlLl9fcHJvdG9fXyA9IERvY3VtZW50RnJhZ21lbnQucHJvdG90eXBlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXdOb2RlO1xuICAgICAgfTtcbiAgICB9KSgpO1xuICB9XG5cbiAgLy8gTk9URTogd2UgcmVseSBvbiB0aGlzIGNsb25lTm9kZSBub3QgY2F1c2luZyBlbGVtZW50IHVwZ3JhZGUuXG4gIC8vIFRoaXMgbWVhbnMgdGhpcyBwb2x5ZmlsbCBtdXN0IGxvYWQgYmVmb3JlIHRoZSBDRSBwb2x5ZmlsbCBhbmRcbiAgLy8gdGhpcyB3b3VsZCBuZWVkIHRvIGJlIHJlLXdvcmtlZCBpZiBhIGJyb3dzZXIgc3VwcG9ydHMgbmF0aXZlIENFXG4gIC8vIGJ1dCBub3QgPHRlbXBsYXRlPi5cbiAgdmFyIGNhcHR1cmVkQ2xvbmVOb2RlID0gTm9kZS5wcm90b3R5cGUuY2xvbmVOb2RlO1xuICB2YXIgY2FwdHVyZWRDcmVhdGVFbGVtZW50ID0gRG9jdW1lbnQucHJvdG90eXBlLmNyZWF0ZUVsZW1lbnQ7XG4gIHZhciBjYXB0dXJlZEltcG9ydE5vZGUgPSBEb2N1bWVudC5wcm90b3R5cGUuaW1wb3J0Tm9kZTtcbiAgdmFyIGNhcHR1cmVkUmVtb3ZlQ2hpbGQgPSBOb2RlLnByb3RvdHlwZS5yZW1vdmVDaGlsZDtcbiAgdmFyIGNhcHR1cmVkQXBwZW5kQ2hpbGQgPSBOb2RlLnByb3RvdHlwZS5hcHBlbmRDaGlsZDtcbiAgdmFyIGNhcHR1cmVkUmVwbGFjZUNoaWxkID0gTm9kZS5wcm90b3R5cGUucmVwbGFjZUNoaWxkO1xuICB2YXIgY2FwdHVyZWRQYXJzZUZyb21TdHJpbmcgPSBET01QYXJzZXIucHJvdG90eXBlLnBhcnNlRnJvbVN0cmluZztcbiAgdmFyIGNhcHR1cmVkSFRNTEVsZW1lbnRJbm5lckhUTUwgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFxuICAgIHdpbmRvdy5IVE1MRWxlbWVudC5wcm90b3R5cGUsXG4gICAgJ2lubmVySFRNTCdcbiAgKSB8fCB7XG4gICAgLyoqXG4gICAgICogQHRoaXMgeyFIVE1MRWxlbWVudH1cbiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAgICovXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gdGhpcy5pbm5lckhUTUw7XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBAdGhpcyB7IUhUTUxFbGVtZW50fVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfVxuICAgICAqL1xuICAgIHNldDogZnVuY3Rpb24gKHRleHQpIHtcbiAgICAgIHRoaXMuaW5uZXJIVE1MID0gdGV4dDtcbiAgICB9LFxuICB9O1xuICB2YXIgY2FwdHVyZWRDaGlsZE5vZGVzID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihcbiAgICB3aW5kb3cuTm9kZS5wcm90b3R5cGUsXG4gICAgJ2NoaWxkTm9kZXMnXG4gICkgfHwge1xuICAgIC8qKlxuICAgICAqIEB0aGlzIHshTm9kZX1cbiAgICAgKiBAcmV0dXJuIHshTm9kZUxpc3R9XG4gICAgICovXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jaGlsZE5vZGVzO1xuICAgIH0sXG4gIH07XG5cbiAgdmFyIGVsZW1lbnRRdWVyeVNlbGVjdG9yQWxsID0gRWxlbWVudC5wcm90b3R5cGUucXVlcnlTZWxlY3RvckFsbDtcbiAgdmFyIGRvY1F1ZXJ5U2VsZWN0b3JBbGwgPSBEb2N1bWVudC5wcm90b3R5cGUucXVlcnlTZWxlY3RvckFsbDtcbiAgdmFyIGZyYWdRdWVyeVNlbGVjdG9yQWxsID0gRG9jdW1lbnRGcmFnbWVudC5wcm90b3R5cGUucXVlcnlTZWxlY3RvckFsbDtcblxuICB2YXIgc2NyaXB0U2VsZWN0b3IgPVxuICAgICdzY3JpcHQ6bm90KFt0eXBlXSksc2NyaXB0W3R5cGU9XCJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0XCJdLHNjcmlwdFt0eXBlPVwidGV4dC9qYXZhc2NyaXB0XCJdJztcblxuICBmdW5jdGlvbiBRU0Eobm9kZSwgc2VsZWN0b3IpIHtcbiAgICAvLyBJRSAxMSB0aHJvd3MgYSBTeW50YXhFcnJvciB3aXRoIGBzY3JpcHRTZWxlY3RvcmAgaWYgdGhlIG5vZGUgaGFzIG5vIGNoaWxkcmVuIGR1ZSB0byB0aGUgYDpub3QoW3R5cGVdKWAgc3ludGF4XG4gICAgaWYgKCFub2RlLmNoaWxkTm9kZXMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIHN3aXRjaCAobm9kZS5ub2RlVHlwZSkge1xuICAgICAgY2FzZSBOb2RlLkRPQ1VNRU5UX05PREU6XG4gICAgICAgIHJldHVybiBkb2NRdWVyeVNlbGVjdG9yQWxsLmNhbGwobm9kZSwgc2VsZWN0b3IpO1xuICAgICAgY2FzZSBOb2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREU6XG4gICAgICAgIHJldHVybiBmcmFnUXVlcnlTZWxlY3RvckFsbC5jYWxsKG5vZGUsIHNlbGVjdG9yKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBlbGVtZW50UXVlcnlTZWxlY3RvckFsbC5jYWxsKG5vZGUsIHNlbGVjdG9yKTtcbiAgICB9XG4gIH1cblxuICAvLyByZXR1cm5zIHRydWUgaWYgbmVzdGVkIHRlbXBsYXRlcyBjYW5ub3QgYmUgY2xvbmVkICh0aGV5IGNhbm5vdCBiZSBvblxuICAvLyBzb21lIGltcGwncyBsaWtlIFNhZmFyaSA4IGFuZCBFZGdlKVxuICAvLyBPUiBpZiBjbG9uaW5nIGEgZG9jdW1lbnQgZnJhZ21lbnQgZG9lcyBub3QgcmVzdWx0IGluIGEgZG9jdW1lbnQgZnJhZ21lbnRcbiAgdmFyIG5lZWRzQ2xvbmluZyA9IChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFuZWVkc1RlbXBsYXRlKSB7XG4gICAgICB2YXIgdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RlbXBsYXRlJyk7XG4gICAgICB2YXIgdDIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZW1wbGF0ZScpO1xuICAgICAgdDIuY29udGVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSk7XG4gICAgICB0LmNvbnRlbnQuYXBwZW5kQ2hpbGQodDIpO1xuICAgICAgdmFyIGNsb25lID0gdC5jbG9uZU5vZGUodHJ1ZSk7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBjbG9uZS5jb250ZW50LmNoaWxkTm9kZXMubGVuZ3RoID09PSAwIHx8XG4gICAgICAgIGNsb25lLmNvbnRlbnQuZmlyc3RDaGlsZC5jb250ZW50LmNoaWxkTm9kZXMubGVuZ3RoID09PSAwIHx8XG4gICAgICAgIGJyb2tlbkRvY0ZyYWdtZW50XG4gICAgICApO1xuICAgIH1cbiAgfSkoKTtcblxuICB2YXIgVEVNUExBVEVfVEFHID0gJ3RlbXBsYXRlJztcbiAgdmFyIFBvbHlmaWxsZWRIVE1MVGVtcGxhdGVFbGVtZW50ID0gZnVuY3Rpb24gKCkge307XG5cbiAgaWYgKG5lZWRzVGVtcGxhdGUpIHtcbiAgICB2YXIgY29udGVudERvYyA9IGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCgndGVtcGxhdGUnKTtcbiAgICB2YXIgY2FuRGVjb3JhdGUgPSB0cnVlO1xuXG4gICAgdmFyIHRlbXBsYXRlU3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICAgIHRlbXBsYXRlU3R5bGUudGV4dENvbnRlbnQgPSBURU1QTEFURV9UQUcgKyAne2Rpc3BsYXk6bm9uZTt9JztcblxuICAgIHZhciBoZWFkID0gZG9jdW1lbnQuaGVhZDtcbiAgICBoZWFkLmluc2VydEJlZm9yZSh0ZW1wbGF0ZVN0eWxlLCBoZWFkLmZpcnN0RWxlbWVudENoaWxkKTtcblxuICAgIC8qKlxuICAgICAgUHJvdmlkZXMgYSBtaW5pbWFsIHNoaW0gZm9yIHRoZSA8dGVtcGxhdGU+IGVsZW1lbnQuXG4gICAgKi9cbiAgICBQb2x5ZmlsbGVkSFRNTFRlbXBsYXRlRWxlbWVudC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFxuICAgICAgSFRNTEVsZW1lbnQucHJvdG90eXBlXG4gICAgKTtcblxuICAgIC8vIGlmIGVsZW1lbnRzIGRvIG5vdCBoYXZlIGBpbm5lckhUTUxgIG9uIGluc3RhbmNlcywgdGhlblxuICAgIC8vIHRlbXBsYXRlcyBjYW4gYmUgcGF0Y2hlZCBieSBzd2l6emxpbmcgdGhlaXIgcHJvdG90eXBlcy5cbiAgICB2YXIgY2FuUHJvdG9QYXRjaCA9ICFkb2N1bWVudFxuICAgICAgLmNyZWF0ZUVsZW1lbnQoJ2RpdicpXG4gICAgICAuaGFzT3duUHJvcGVydHkoJ2lubmVySFRNTCcpO1xuXG4gICAgLyoqXG4gICAgICBUaGUgYGRlY29yYXRlYCBtZXRob2QgbW92ZXMgZWxlbWVudCBjaGlsZHJlbiB0byB0aGUgdGVtcGxhdGUncyBgY29udGVudGAuXG4gICAgICBOT1RFOiB0aGVyZSBpcyBubyBzdXBwb3J0IGZvciBkeW5hbWljYWxseSBhZGRpbmcgZWxlbWVudHMgdG8gdGVtcGxhdGVzLlxuICAgICovXG4gICAgUG9seWZpbGxlZEhUTUxUZW1wbGF0ZUVsZW1lbnQuZGVjb3JhdGUgPSBmdW5jdGlvbiAodGVtcGxhdGUpIHtcbiAgICAgIC8vIGlmIHRoZSB0ZW1wbGF0ZSBpcyBkZWNvcmF0ZWQgb3Igbm90IGluIEhUTUwgbmFtZXNwYWNlLCByZXR1cm4gZmFzdFxuICAgICAgaWYgKFxuICAgICAgICB0ZW1wbGF0ZS5jb250ZW50IHx8XG4gICAgICAgIHRlbXBsYXRlLm5hbWVzcGFjZVVSSSAhPT0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lm5hbWVzcGFjZVVSSVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRlbXBsYXRlLmNvbnRlbnQgPSBjb250ZW50RG9jLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcbiAgICAgIHZhciBjaGlsZDtcbiAgICAgIHdoaWxlICgoY2hpbGQgPSB0ZW1wbGF0ZS5maXJzdENoaWxkKSkge1xuICAgICAgICBjYXB0dXJlZEFwcGVuZENoaWxkLmNhbGwodGVtcGxhdGUuY29udGVudCwgY2hpbGQpO1xuICAgICAgfVxuICAgICAgLy8gTk9URTogcHJlZmVyIHByb3RvdHlwZSBwYXRjaGluZyBmb3IgcGVyZm9ybWFuY2UgYW5kXG4gICAgICAvLyBiZWNhdXNlIG9uIHNvbWUgYnJvd3NlcnMgKElFMTEpLCByZS1kZWZpbmluZyBgaW5uZXJIVE1MYFxuICAgICAgLy8gY2FuIHJlc3VsdCBpbiBpbnRlcm1pdHRlbnQgZXJyb3JzLlxuICAgICAgaWYgKGNhblByb3RvUGF0Y2gpIHtcbiAgICAgICAgdGVtcGxhdGUuX19wcm90b19fID0gUG9seWZpbGxlZEhUTUxUZW1wbGF0ZUVsZW1lbnQucHJvdG90eXBlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGVtcGxhdGUuY2xvbmVOb2RlID0gZnVuY3Rpb24gKGRlZXApIHtcbiAgICAgICAgICByZXR1cm4gUG9seWZpbGxlZEhUTUxUZW1wbGF0ZUVsZW1lbnQuX2Nsb25lTm9kZSh0aGlzLCBkZWVwKTtcbiAgICAgICAgfTtcbiAgICAgICAgLy8gYWRkIGlubmVySFRNTCB0byB0ZW1wbGF0ZSwgaWYgcG9zc2libGVcbiAgICAgICAgLy8gTm90ZTogdGhpcyB0aHJvd3Mgb24gU2FmYXJpIDdcbiAgICAgICAgaWYgKGNhbkRlY29yYXRlKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGRlZmluZUlubmVySFRNTCh0ZW1wbGF0ZSk7XG4gICAgICAgICAgICBkZWZpbmVPdXRlckhUTUwodGVtcGxhdGUpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgY2FuRGVjb3JhdGUgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIGJvb3RzdHJhcCByZWN1cnNpdmVseVxuICAgICAgUG9seWZpbGxlZEhUTUxUZW1wbGF0ZUVsZW1lbnQuYm9vdHN0cmFwKHRlbXBsYXRlLmNvbnRlbnQpO1xuICAgIH07XG5cbiAgICAvLyBUYWtlbiBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9qcXVlcnkvanF1ZXJ5L2Jsb2IvNzNkN2U2MjU5YzYzYWM0NWY0MmM2NTkzZGE4YzI3OTZjNmNlOTI4MS9zcmMvbWFuaXB1bGF0aW9uL3dyYXBNYXAuanNcbiAgICB2YXIgdG9wTGV2ZWxXcmFwcGluZ01hcCA9IHtcbiAgICAgICdvcHRpb24nOiBbJ3NlbGVjdCddLFxuICAgICAgJ3RoZWFkJzogWyd0YWJsZSddLFxuICAgICAgJ2NvbCc6IFsnY29sZ3JvdXAnLCAndGFibGUnXSxcbiAgICAgICd0cic6IFsndGJvZHknLCAndGFibGUnXSxcbiAgICAgICd0aCc6IFsndHInLCAndGJvZHknLCAndGFibGUnXSxcbiAgICAgICd0ZCc6IFsndHInLCAndGJvZHknLCAndGFibGUnXSxcbiAgICB9O1xuXG4gICAgdmFyIGdldFRhZ05hbWUgPSBmdW5jdGlvbiAodGV4dCkge1xuICAgICAgLy8gVGFrZW4gZnJvbSBodHRwczovL2dpdGh1Yi5jb20vanF1ZXJ5L2pxdWVyeS9ibG9iLzczZDdlNjI1OWM2M2FjNDVmNDJjNjU5M2RhOGMyNzk2YzZjZTkyODEvc3JjL21hbmlwdWxhdGlvbi92YXIvcnRhZ05hbWUuanNcbiAgICAgIHJldHVybiAoLzwoW2Etel1bXi9cXDA+XFx4MjBcXHRcXHJcXG5cXGZdKykvaS5leGVjKHRleHQpIHx8IFtcbiAgICAgICAgJycsXG4gICAgICAgICcnLFxuICAgICAgXSlbMV0udG9Mb3dlckNhc2UoKTtcbiAgICB9O1xuXG4gICAgdmFyIGRlZmluZUlubmVySFRNTCA9IGZ1bmN0aW9uIGRlZmluZUlubmVySFRNTChvYmopIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosICdpbm5lckhUTUwnLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBnZXRJbm5lckhUTUwodGhpcyk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHRleHQpIHtcbiAgICAgICAgICAvLyBGb3IgSUUxMSwgd3JhcCB0aGUgdGV4dCBpbiB0aGUgY29ycmVjdCAodGFibGUpIGNvbnRleHRcbiAgICAgICAgICB2YXIgd3JhcCA9IHRvcExldmVsV3JhcHBpbmdNYXBbZ2V0VGFnTmFtZSh0ZXh0KV07XG4gICAgICAgICAgaWYgKHdyYXApIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgd3JhcC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICB0ZXh0ID0gJzwnICsgd3JhcFtpXSArICc+JyArIHRleHQgKyAnPC8nICsgd3JhcFtpXSArICc+JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgY29udGVudERvYy5ib2R5LmlubmVySFRNTCA9IHRleHQ7XG4gICAgICAgICAgUG9seWZpbGxlZEhUTUxUZW1wbGF0ZUVsZW1lbnQuYm9vdHN0cmFwKGNvbnRlbnREb2MpO1xuICAgICAgICAgIHdoaWxlICh0aGlzLmNvbnRlbnQuZmlyc3RDaGlsZCkge1xuICAgICAgICAgICAgY2FwdHVyZWRSZW1vdmVDaGlsZC5jYWxsKHRoaXMuY29udGVudCwgdGhpcy5jb250ZW50LmZpcnN0Q2hpbGQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YXIgYm9keSA9IGNvbnRlbnREb2MuYm9keTtcbiAgICAgICAgICAvLyBJZiB3ZSBoYWQgd3JhcHBlZCwgZ2V0IGJhY2sgdG8gdGhlIG9yaWdpbmFsIG5vZGVcbiAgICAgICAgICBpZiAod3JhcCkge1xuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB3cmFwLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgIGJvZHkgPSBib2R5Lmxhc3RDaGlsZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgd2hpbGUgKGJvZHkuZmlyc3RDaGlsZCkge1xuICAgICAgICAgICAgY2FwdHVyZWRBcHBlbmRDaGlsZC5jYWxsKHRoaXMuY29udGVudCwgYm9keS5maXJzdENoaWxkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICB2YXIgZGVmaW5lT3V0ZXJIVE1MID0gZnVuY3Rpb24gZGVmaW5lT3V0ZXJIVE1MKG9iaikge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwgJ291dGVySFRNTCcsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIGA8JHtURU1QTEFURV9UQUd9PiR7dGhpcy5pbm5lckhUTUx9PC8ke1RFTVBMQVRFX1RBR30+YDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoaW5uZXJIVE1MKSB7XG4gICAgICAgICAgaWYgKHRoaXMucGFyZW50Tm9kZSkge1xuICAgICAgICAgICAgY29udGVudERvYy5ib2R5LmlubmVySFRNTCA9IGlubmVySFRNTDtcbiAgICAgICAgICAgIHZhciBkb2NGcmFnID0gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcbiAgICAgICAgICAgIHdoaWxlIChjb250ZW50RG9jLmJvZHkuZmlyc3RDaGlsZCkge1xuICAgICAgICAgICAgICBjYXB0dXJlZEFwcGVuZENoaWxkLmNhbGwoZG9jRnJhZywgY29udGVudERvYy5ib2R5LmZpcnN0Q2hpbGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FwdHVyZWRSZXBsYWNlQ2hpbGQuY2FsbCh0aGlzLnBhcmVudE5vZGUsIGRvY0ZyYWcsIHRoaXMpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgIFwiRmFpbGVkIHRvIHNldCB0aGUgJ291dGVySFRNTCcgcHJvcGVydHkgb24gJ0VsZW1lbnQnOiBUaGlzIGVsZW1lbnQgaGFzIG5vIHBhcmVudCBub2RlLlwiXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGRlZmluZUlubmVySFRNTChQb2x5ZmlsbGVkSFRNTFRlbXBsYXRlRWxlbWVudC5wcm90b3R5cGUpO1xuICAgIGRlZmluZU91dGVySFRNTChQb2x5ZmlsbGVkSFRNTFRlbXBsYXRlRWxlbWVudC5wcm90b3R5cGUpO1xuXG4gICAgLyoqXG4gICAgICBUaGUgYGJvb3RzdHJhcGAgbWV0aG9kIGlzIGNhbGxlZCBhdXRvbWF0aWNhbGx5IGFuZCBcImZpeGVzXCIgYWxsXG4gICAgICA8dGVtcGxhdGU+IGVsZW1lbnRzIGluIHRoZSBkb2N1bWVudCByZWZlcmVuY2VkIGJ5IHRoZSBgZG9jYCBhcmd1bWVudC5cbiAgICAqL1xuICAgIFBvbHlmaWxsZWRIVE1MVGVtcGxhdGVFbGVtZW50LmJvb3RzdHJhcCA9IGZ1bmN0aW9uIGJvb3RzdHJhcChkb2MpIHtcbiAgICAgIHZhciB0ZW1wbGF0ZXMgPSBRU0EoZG9jLCBURU1QTEFURV9UQUcpO1xuICAgICAgZm9yIChcbiAgICAgICAgdmFyIGkgPSAwLCBsID0gdGVtcGxhdGVzLmxlbmd0aCwgdDtcbiAgICAgICAgaSA8IGwgJiYgKHQgPSB0ZW1wbGF0ZXNbaV0pO1xuICAgICAgICBpKytcbiAgICAgICkge1xuICAgICAgICBQb2x5ZmlsbGVkSFRNTFRlbXBsYXRlRWxlbWVudC5kZWNvcmF0ZSh0KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gYXV0by1ib290c3RyYXBwaW5nIGZvciBtYWluIGRvY3VtZW50XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIFBvbHlmaWxsZWRIVE1MVGVtcGxhdGVFbGVtZW50LmJvb3RzdHJhcChkb2N1bWVudCk7XG4gICAgfSk7XG5cbiAgICAvLyBQYXRjaCBkb2N1bWVudC5jcmVhdGVFbGVtZW50IHRvIGVuc3VyZSBuZXdseSBjcmVhdGVkIHRlbXBsYXRlcyBoYXZlIGNvbnRlbnRcbiAgICBEb2N1bWVudC5wcm90b3R5cGUuY3JlYXRlRWxlbWVudCA9IGZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnQoKSB7XG4gICAgICB2YXIgZWwgPSBjYXB0dXJlZENyZWF0ZUVsZW1lbnQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIGlmIChlbC5sb2NhbE5hbWUgPT09ICd0ZW1wbGF0ZScpIHtcbiAgICAgICAgUG9seWZpbGxlZEhUTUxUZW1wbGF0ZUVsZW1lbnQuZGVjb3JhdGUoZWwpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGVsO1xuICAgIH07XG5cbiAgICBET01QYXJzZXIucHJvdG90eXBlLnBhcnNlRnJvbVN0cmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBlbCA9IGNhcHR1cmVkUGFyc2VGcm9tU3RyaW5nLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICBQb2x5ZmlsbGVkSFRNTFRlbXBsYXRlRWxlbWVudC5ib290c3RyYXAoZWwpO1xuICAgICAgcmV0dXJuIGVsO1xuICAgIH07XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTEVsZW1lbnQucHJvdG90eXBlLCAnaW5uZXJIVE1MJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBnZXRJbm5lckhUTUwodGhpcyk7XG4gICAgICB9LFxuICAgICAgc2V0OiBmdW5jdGlvbiAodGV4dCkge1xuICAgICAgICBjYXB0dXJlZEhUTUxFbGVtZW50SW5uZXJIVE1MLnNldC5jYWxsKHRoaXMsIHRleHQpO1xuICAgICAgICBQb2x5ZmlsbGVkSFRNTFRlbXBsYXRlRWxlbWVudC5ib290c3RyYXAodGhpcyk7XG4gICAgICB9LFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICB9KTtcblxuICAgIC8vIGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlL3RoZS1lbmQuaHRtbCNlc2NhcGluZ1N0cmluZ1xuICAgIHZhciBlc2NhcGVBdHRyUmVnRXhwID0gL1smXFx1MDBBMFwiXS9nO1xuICAgIHZhciBlc2NhcGVEYXRhUmVnRXhwID0gL1smXFx1MDBBMDw+XS9nO1xuXG4gICAgdmFyIGVzY2FwZVJlcGxhY2UgPSBmdW5jdGlvbiAoYykge1xuICAgICAgc3dpdGNoIChjKSB7XG4gICAgICAgIGNhc2UgJyYnOlxuICAgICAgICAgIHJldHVybiAnJmFtcDsnO1xuICAgICAgICBjYXNlICc8JzpcbiAgICAgICAgICByZXR1cm4gJyZsdDsnO1xuICAgICAgICBjYXNlICc+JzpcbiAgICAgICAgICByZXR1cm4gJyZndDsnO1xuICAgICAgICBjYXNlICdcIic6XG4gICAgICAgICAgcmV0dXJuICcmcXVvdDsnO1xuICAgICAgICBjYXNlICdcXHUwMEEwJzpcbiAgICAgICAgICByZXR1cm4gJyZuYnNwOyc7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHZhciBlc2NhcGVBdHRyID0gZnVuY3Rpb24gKHMpIHtcbiAgICAgIHJldHVybiBzLnJlcGxhY2UoZXNjYXBlQXR0clJlZ0V4cCwgZXNjYXBlUmVwbGFjZSk7XG4gICAgfTtcblxuICAgIHZhciBlc2NhcGVEYXRhID0gZnVuY3Rpb24gKHMpIHtcbiAgICAgIHJldHVybiBzLnJlcGxhY2UoZXNjYXBlRGF0YVJlZ0V4cCwgZXNjYXBlUmVwbGFjZSk7XG4gICAgfTtcblxuICAgIHZhciBtYWtlU2V0ID0gZnVuY3Rpb24gKGFycikge1xuICAgICAgdmFyIHNldCA9IHt9O1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgc2V0W2FycltpXV0gPSB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHNldDtcbiAgICB9O1xuXG4gICAgLy8gaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay8jdm9pZC1lbGVtZW50c1xuICAgIHZhciB2b2lkRWxlbWVudHMgPSBtYWtlU2V0KFtcbiAgICAgICdhcmVhJyxcbiAgICAgICdiYXNlJyxcbiAgICAgICdicicsXG4gICAgICAnY29sJyxcbiAgICAgICdjb21tYW5kJyxcbiAgICAgICdlbWJlZCcsXG4gICAgICAnaHInLFxuICAgICAgJ2ltZycsXG4gICAgICAnaW5wdXQnLFxuICAgICAgJ2tleWdlbicsXG4gICAgICAnbGluaycsXG4gICAgICAnbWV0YScsXG4gICAgICAncGFyYW0nLFxuICAgICAgJ3NvdXJjZScsXG4gICAgICAndHJhY2snLFxuICAgICAgJ3dicicsXG4gICAgXSk7XG5cbiAgICB2YXIgcGxhaW50ZXh0UGFyZW50cyA9IG1ha2VTZXQoW1xuICAgICAgJ3N0eWxlJyxcbiAgICAgICdzY3JpcHQnLFxuICAgICAgJ3htcCcsXG4gICAgICAnaWZyYW1lJyxcbiAgICAgICdub2VtYmVkJyxcbiAgICAgICdub2ZyYW1lcycsXG4gICAgICAncGxhaW50ZXh0JyxcbiAgICAgICdub3NjcmlwdCcsXG4gICAgXSk7XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAgICAgKiBAcGFyYW0ge05vZGV9IHBhcmVudE5vZGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gY2FsbGJhY2tcbiAgICAgKi9cbiAgICB2YXIgZ2V0T3V0ZXJIVE1MID0gZnVuY3Rpb24gKG5vZGUsIHBhcmVudE5vZGUsIGNhbGxiYWNrKSB7XG4gICAgICBzd2l0Y2ggKG5vZGUubm9kZVR5cGUpIHtcbiAgICAgICAgY2FzZSBOb2RlLkVMRU1FTlRfTk9ERToge1xuICAgICAgICAgIHZhciB0YWdOYW1lID0gbm9kZS5sb2NhbE5hbWU7XG4gICAgICAgICAgdmFyIHMgPSAnPCcgKyB0YWdOYW1lO1xuICAgICAgICAgIHZhciBhdHRycyA9IG5vZGUuYXR0cmlidXRlcztcbiAgICAgICAgICBmb3IgKHZhciBpID0gMCwgYXR0cjsgKGF0dHIgPSBhdHRyc1tpXSk7IGkrKykge1xuICAgICAgICAgICAgcyArPSAnICcgKyBhdHRyLm5hbWUgKyAnPVwiJyArIGVzY2FwZUF0dHIoYXR0ci52YWx1ZSkgKyAnXCInO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzICs9ICc+JztcbiAgICAgICAgICBpZiAodm9pZEVsZW1lbnRzW3RhZ05hbWVdKSB7XG4gICAgICAgICAgICByZXR1cm4gcztcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHMgKyBnZXRJbm5lckhUTUwobm9kZSwgY2FsbGJhY2spICsgJzwvJyArIHRhZ05hbWUgKyAnPic7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBOb2RlLlRFWFRfTk9ERToge1xuICAgICAgICAgIHZhciBkYXRhID0gLyoqIEB0eXBlIHtUZXh0fSAqLyAobm9kZSkuZGF0YTtcbiAgICAgICAgICBpZiAocGFyZW50Tm9kZSAmJiBwbGFpbnRleHRQYXJlbnRzW3BhcmVudE5vZGUubG9jYWxOYW1lXSkge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBlc2NhcGVEYXRhKGRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgTm9kZS5DT01NRU5UX05PREU6IHtcbiAgICAgICAgICByZXR1cm4gJzwhLS0nICsgLyoqIEB0eXBlIHtDb21tZW50fSAqLyAobm9kZSkuZGF0YSArICctLT4nO1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICB3aW5kb3cuY29uc29sZS5lcnJvcihub2RlKTtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ25vdCBpbXBsZW1lbnRlZCcpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb249fSBjYWxsYmFja1xuICAgICAqL1xuICAgIHZhciBnZXRJbm5lckhUTUwgPSBmdW5jdGlvbiAobm9kZSwgY2FsbGJhY2spIHtcbiAgICAgIGlmIChub2RlLmxvY2FsTmFtZSA9PT0gJ3RlbXBsYXRlJykge1xuICAgICAgICBub2RlID0gLyoqIEB0eXBlIHtIVE1MVGVtcGxhdGVFbGVtZW50fSAqLyAobm9kZSkuY29udGVudDtcbiAgICAgIH1cbiAgICAgIHZhciBzID0gJyc7XG4gICAgICB2YXIgYyQgPSBjYWxsYmFjayA/IGNhbGxiYWNrKG5vZGUpIDogY2FwdHVyZWRDaGlsZE5vZGVzLmdldC5jYWxsKG5vZGUpO1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBjJC5sZW5ndGgsIGNoaWxkOyBpIDwgbCAmJiAoY2hpbGQgPSBjJFtpXSk7IGkrKykge1xuICAgICAgICBzICs9IGdldE91dGVySFRNTChjaGlsZCwgbm9kZSwgY2FsbGJhY2spO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHM7XG4gICAgfTtcbiAgfVxuXG4gIC8vIG1ha2UgY2xvbmluZy9pbXBvcnRpbmcgd29yayFcbiAgaWYgKG5lZWRzVGVtcGxhdGUgfHwgbmVlZHNDbG9uaW5nKSB7XG4gICAgUG9seWZpbGxlZEhUTUxUZW1wbGF0ZUVsZW1lbnQuX2Nsb25lTm9kZSA9IGZ1bmN0aW9uIF9jbG9uZU5vZGUoXG4gICAgICB0ZW1wbGF0ZSxcbiAgICAgIGRlZXBcbiAgICApIHtcbiAgICAgIHZhciBjbG9uZSA9IGNhcHR1cmVkQ2xvbmVOb2RlLmNhbGwodGVtcGxhdGUsIGZhbHNlKTtcbiAgICAgIC8vIE5PVEU6IGRlY29yYXRlIGRvZXNuJ3QgYXV0by1maXggY2hpbGRyZW4gYmVjYXVzZSB0aGV5IGFyZSBhbHJlYWR5XG4gICAgICAvLyBkZWNvcmF0ZWQgc28gdGhleSBuZWVkIHNwZWNpYWwgY2xvbmUgZml4dXAuXG4gICAgICBpZiAodGhpcy5kZWNvcmF0ZSkge1xuICAgICAgICB0aGlzLmRlY29yYXRlKGNsb25lKTtcbiAgICAgIH1cbiAgICAgIGlmIChkZWVwKSB7XG4gICAgICAgIC8vIE5PVEU6IHVzZSBuYXRpdmUgY2xvbmUgbm9kZSB0byBtYWtlIHN1cmUgQ0UncyB3cmFwcGVkXG4gICAgICAgIC8vIGNsb25lTm9kZSBkb2VzIG5vdCBjYXVzZSBlbGVtZW50cyB0byB1cGdyYWRlLlxuICAgICAgICBjYXB0dXJlZEFwcGVuZENoaWxkLmNhbGwoXG4gICAgICAgICAgY2xvbmUuY29udGVudCxcbiAgICAgICAgICBjYXB0dXJlZENsb25lTm9kZS5jYWxsKHRlbXBsYXRlLmNvbnRlbnQsIHRydWUpXG4gICAgICAgICk7XG4gICAgICAgIC8vIG5vdyBlbnN1cmUgbmVzdGVkIHRlbXBsYXRlcyBhcmUgY2xvbmVkIGNvcnJlY3RseS5cbiAgICAgICAgZml4Q2xvbmVkRG9tKGNsb25lLmNvbnRlbnQsIHRlbXBsYXRlLmNvbnRlbnQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH07XG5cbiAgICAvLyBHaXZlbiBhIHNvdXJjZSBhbmQgY2xvbmVkIHN1YnRyZWUsIGZpbmQgPHRlbXBsYXRlPidzIGluIHRoZSBjbG9uZWRcbiAgICAvLyBzdWJ0cmVlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCBjbG9uZWQgPHRlbXBsYXRlPidzIGZyb20gc291cmNlLlxuICAgIC8vIFdlIG11c3QgZG8gdGhpcyBiZWNhdXNlIG9ubHkgdGhlIHNvdXJjZSB0ZW1wbGF0ZXMgaGF2ZSBwcm9wZXIgLmNvbnRlbnQuXG4gICAgdmFyIGZpeENsb25lZERvbSA9IGZ1bmN0aW9uIGZpeENsb25lZERvbShjbG9uZSwgc291cmNlKSB7XG4gICAgICAvLyBkbyBub3RoaW5nIGlmIGNsb25lZCBub2RlIGlzIG5vdCBhbiBlbGVtZW50XG4gICAgICBpZiAoIXNvdXJjZS5xdWVyeVNlbGVjdG9yQWxsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIC8vIHRoZXNlIHR3byBsaXN0cyBzaG91bGQgYmUgY29pbmNpZGVudFxuICAgICAgdmFyIHMkID0gUVNBKHNvdXJjZSwgVEVNUExBVEVfVEFHKTtcbiAgICAgIGlmIChzJC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdmFyIHQkID0gUVNBKGNsb25lLCBURU1QTEFURV9UQUcpO1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSB0JC5sZW5ndGgsIHQsIHM7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgcyA9IHMkW2ldO1xuICAgICAgICB0ID0gdCRbaV07XG4gICAgICAgIGlmIChcbiAgICAgICAgICBQb2x5ZmlsbGVkSFRNTFRlbXBsYXRlRWxlbWVudCAmJlxuICAgICAgICAgIFBvbHlmaWxsZWRIVE1MVGVtcGxhdGVFbGVtZW50LmRlY29yYXRlXG4gICAgICAgICkge1xuICAgICAgICAgIFBvbHlmaWxsZWRIVE1MVGVtcGxhdGVFbGVtZW50LmRlY29yYXRlKHMpO1xuICAgICAgICB9XG4gICAgICAgIGNhcHR1cmVkUmVwbGFjZUNoaWxkLmNhbGwodC5wYXJlbnROb2RlLCBjbG9uZU5vZGUuY2FsbChzLCB0cnVlKSwgdCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8vIG1ha2Ugc3VyZSBzY3JpcHRzIGluc2lkZSBvZiBhIGNsb25lZCB0ZW1wbGF0ZSBhcmUgZXhlY3V0YWJsZVxuICAgIHZhciBmaXhDbG9uZWRTY3JpcHRzID0gZnVuY3Rpb24gZml4Q2xvbmVkU2NyaXB0cyhmcmFnbWVudCkge1xuICAgICAgdmFyIHNjcmlwdHMgPSBRU0EoZnJhZ21lbnQsIHNjcmlwdFNlbGVjdG9yKTtcbiAgICAgIGZvciAodmFyIG5zLCBzLCBpID0gMDsgaSA8IHNjcmlwdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcyA9IHNjcmlwdHNbaV07XG4gICAgICAgIG5zID0gY2FwdHVyZWRDcmVhdGVFbGVtZW50LmNhbGwoZG9jdW1lbnQsICdzY3JpcHQnKTtcbiAgICAgICAgbnMudGV4dENvbnRlbnQgPSBzLnRleHRDb250ZW50O1xuICAgICAgICB2YXIgYXR0cnMgPSBzLmF0dHJpYnV0ZXM7XG4gICAgICAgIGZvciAodmFyIGFpID0gMCwgYTsgYWkgPCBhdHRycy5sZW5ndGg7IGFpKyspIHtcbiAgICAgICAgICBhID0gYXR0cnNbYWldO1xuICAgICAgICAgIG5zLnNldEF0dHJpYnV0ZShhLm5hbWUsIGEudmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGNhcHR1cmVkUmVwbGFjZUNoaWxkLmNhbGwocy5wYXJlbnROb2RlLCBucywgcyk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8vIG92ZXJyaWRlIGFsbCBjbG9uaW5nIHRvIGZpeCB0aGUgY2xvbmVkIHN1YnRyZWUgdG8gY29udGFpbiBwcm9wZXJseVxuICAgIC8vIGNsb25lZCB0ZW1wbGF0ZXMuXG4gICAgdmFyIGNsb25lTm9kZSA9IChOb2RlLnByb3RvdHlwZS5jbG9uZU5vZGUgPSBmdW5jdGlvbiBjbG9uZU5vZGUoZGVlcCkge1xuICAgICAgdmFyIGRvbTtcbiAgICAgIC8vIHdvcmthcm91bmQgZm9yIEVkZ2UgYnVnIGNsb25pbmcgZG9jdW1lbnRGcmFnbWVudHNcbiAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1pY3Jvc29mdC5jb20vZW4tdXMvbWljcm9zb2Z0LWVkZ2UvcGxhdGZvcm0vaXNzdWVzLzg2MTk2NDYvXG4gICAgICBpZiAoXG4gICAgICAgICFuZWVkc0RvY0ZyYWcgJiZcbiAgICAgICAgYnJva2VuRG9jRnJhZ21lbnQgJiZcbiAgICAgICAgdGhpcyBpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnRcbiAgICAgICkge1xuICAgICAgICBpZiAoIWRlZXApIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkb20gPSBpbXBvcnROb2RlLmNhbGwodGhpcy5vd25lckRvY3VtZW50LCB0aGlzLCB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgdGhpcy5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiZcbiAgICAgICAgdGhpcy5sb2NhbE5hbWUgPT09IFRFTVBMQVRFX1RBRyAmJlxuICAgICAgICB0aGlzLm5hbWVzcGFjZVVSSSA9PSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQubmFtZXNwYWNlVVJJXG4gICAgICApIHtcbiAgICAgICAgZG9tID0gUG9seWZpbGxlZEhUTUxUZW1wbGF0ZUVsZW1lbnQuX2Nsb25lTm9kZSh0aGlzLCBkZWVwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRvbSA9IGNhcHR1cmVkQ2xvbmVOb2RlLmNhbGwodGhpcywgZGVlcCk7XG4gICAgICB9XG4gICAgICAvLyB0ZW1wbGF0ZS5jb250ZW50IGlzIGNsb25lZCBpZmYgYGRlZXBgLlxuICAgICAgaWYgKGRlZXApIHtcbiAgICAgICAgZml4Q2xvbmVkRG9tKGRvbSwgdGhpcyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZG9tO1xuICAgIH0pO1xuXG4gICAgLy8gTk9URTogd2UgYXJlIGNsb25pbmcgaW5zdGVhZCBvZiBpbXBvcnRpbmcgPHRlbXBsYXRlPidzLlxuICAgIC8vIEhvd2V2ZXIsIHRoZSBvd25lckRvY3VtZW50IG9mIHRoZSBjbG9uZWQgdGVtcGxhdGUgd2lsbCBiZSBjb3JyZWN0IVxuICAgIC8vIFRoaXMgaXMgYmVjYXVzZSB0aGUgbmF0aXZlIGltcG9ydCBub2RlIGNyZWF0ZXMgdGhlIHJpZ2h0IGRvY3VtZW50IG93bmVkXG4gICAgLy8gc3VidHJlZSBhbmQgYGZpeENsb25lZERvbWAgaW5zZXJ0cyBjbG9uZWQgdGVtcGxhdGVzIGludG8gdGhpcyBzdWJ0cmVlLFxuICAgIC8vIHRodXMgdXBkYXRpbmcgdGhlIG93bmVyIGRvYy5cbiAgICB2YXIgaW1wb3J0Tm9kZSA9IChEb2N1bWVudC5wcm90b3R5cGUuaW1wb3J0Tm9kZSA9IGZ1bmN0aW9uIGltcG9ydE5vZGUoXG4gICAgICBlbGVtZW50LFxuICAgICAgZGVlcFxuICAgICkge1xuICAgICAgZGVlcCA9IGRlZXAgfHwgZmFsc2U7XG4gICAgICBpZiAoZWxlbWVudC5sb2NhbE5hbWUgPT09IFRFTVBMQVRFX1RBRykge1xuICAgICAgICByZXR1cm4gUG9seWZpbGxlZEhUTUxUZW1wbGF0ZUVsZW1lbnQuX2Nsb25lTm9kZShlbGVtZW50LCBkZWVwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBkb20gPSBjYXB0dXJlZEltcG9ydE5vZGUuY2FsbCh0aGlzLCBlbGVtZW50LCBkZWVwKTtcbiAgICAgICAgaWYgKGRlZXApIHtcbiAgICAgICAgICBmaXhDbG9uZWREb20oZG9tLCBlbGVtZW50KTtcbiAgICAgICAgICBmaXhDbG9uZWRTY3JpcHRzKGRvbSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRvbTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGlmIChuZWVkc1RlbXBsYXRlKSB7XG4gICAgd2luZG93LkhUTUxUZW1wbGF0ZUVsZW1lbnQgPSBQb2x5ZmlsbGVkSFRNTFRlbXBsYXRlRWxlbWVudDtcbiAgfVxufSkoKTtcbiIsICIoZnVuY3Rpb24odW5kZWZpbmVkKSB7XG5pZiAoIShcIk11dGF0aW9uT2JzZXJ2ZXJcImluIHNlbGZcbikpIHtcbi8vIE11dGF0aW9uT2JzZXJ2ZXJcbi8qIVxuICogU2hpbSBmb3IgTXV0YXRpb25PYnNlcnZlciBpbnRlcmZhY2VcbiAqIEF1dGhvcjogR3JhZW1lIFllYXRlcyAoZ2l0aHViLmNvbS9tZWdhd2FjKVxuICogUmVwb3NpdG9yeTogaHR0cHM6Ly9naXRodWIuY29tL21lZ2F3YWMvTXV0YXRpb25PYnNlcnZlci5qc1xuICogTGljZW5zZTogV1RGUEwgVjIsIDIwMDQgKHd0ZnBsLm5ldCkuXG4gKiBUaG91Z2ggY3JlZGl0IGFuZCBzdGFyaW5nIHRoZSByZXBvIHdpbGwgbWFrZSBtZSBmZWVsIHByZXR0eSwgeW91IGNhbiBtb2RpZnkgYW5kIHJlZGlzdHJpYnV0ZSBhcyB5b3UgcGxlYXNlLlxuICogQXR0ZW1wdHMgdG8gZm9sbG93IHNwZWMgKGh0dHBzOi8vd3d3LnczLm9yZy9UUi9kb20vI211dGF0aW9uLW9ic2VydmVycykgYXMgY2xvc2VseSBhcyBwb3NzaWJsZSBmb3IgbmF0aXZlIGphdmFzY3JpcHRcbiAqIFNlZSBodHRwczovL2dpdGh1Yi5jb20vV2ViS2l0L3dlYmtpdC9ibG9iL21hc3Rlci9Tb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25PYnNlcnZlci5jcHAgZm9yIGN1cnJlbnQgd2Via2l0IHNvdXJjZSBjKysgaW1wbGVtZW50YXRpb25cbiAqL1xuXG4vKipcbiAqIHByZWZpeCBidWdzOlxuICAgIC0gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg1MTYxXG4gICAgLSBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD03NDk5MjBcbiAqIERvbid0IHVzZSBXZWJLaXRNdXRhdGlvbk9ic2VydmVyIGFzIFNhZmFyaSAoNi4wLjUtNi4xKSB1c2UgYSBidWdneSBpbXBsZW1lbnRhdGlvblxuKi9cbmlmICghd2luZG93Lk11dGF0aW9uT2JzZXJ2ZXIpIHtcbiAgICB3aW5kb3cuTXV0YXRpb25PYnNlcnZlciA9IChmdW5jdGlvbiAodW5kZWZpbmVkKSB7XG4gICAgICAgIFwidXNlIHN0cmljdFwiO1xuICAgICAgICAvKipcbiAgICAgICAgICogQHBhcmFtIHtmdW5jdGlvbihBcnJheS48TXV0YXRpb25SZWNvcmQ+LCBNdXRhdGlvbk9ic2VydmVyKX0gbGlzdGVuZXJcbiAgICAgICAgICogQGNvbnN0cnVjdG9yXG4gICAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiBNdXRhdGlvbk9ic2VydmVyKGxpc3RlbmVyKSB7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIEB0eXBlIHtBcnJheS48T2JqZWN0Pn1cbiAgICAgICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHRoaXMuX3dhdGNoZWQgPSBbXTtcbiAgICAgICAgICAgIC8qKiBAcHJpdmF0ZSAqL1xuICAgICAgICAgICAgdGhpcy5fbGlzdGVuZXIgPSBsaXN0ZW5lcjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTdGFydCBhIHJlY3Vyc2l2ZSB0aW1lb3V0IGZ1bmN0aW9uIHRvIGNoZWNrIGFsbCBpdGVtcyBiZWluZyBvYnNlcnZlZCBmb3IgbXV0YXRpb25zXG4gICAgICAgICAqIEB0eXBlIHtNdXRhdGlvbk9ic2VydmVyfSBvYnNlcnZlclxuICAgICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICAgKi9cbiAgICAgICAgZnVuY3Rpb24gc3RhcnRNdXRhdGlvbkNoZWNrZXIob2JzZXJ2ZXIpIHtcbiAgICAgICAgICAgIChmdW5jdGlvbiBjaGVjaygpIHtcbiAgICAgICAgICAgICAgICB2YXIgbXV0YXRpb25zID0gb2JzZXJ2ZXIudGFrZVJlY29yZHMoKTtcblxuICAgICAgICAgICAgICAgIGlmIChtdXRhdGlvbnMubGVuZ3RoKSB7IC8vIGZpcmUgYXdheVxuICAgICAgICAgICAgICAgICAgICAvLyBjYWxsaW5nIHRoZSBsaXN0ZW5lciB3aXRoIGNvbnRleHQgaXMgbm90IHNwZWMgYnV0IGN1cnJlbnRseSBjb25zaXN0ZW50IHdpdGggRkYgYW5kIFdlYktpdFxuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5fbGlzdGVuZXIobXV0YXRpb25zLCBvYnNlcnZlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8qKiBAcHJpdmF0ZSAqL1xuICAgICAgICAgICAgICAgIG9ic2VydmVyLl90aW1lb3V0ID0gc2V0VGltZW91dChjaGVjaywgTXV0YXRpb25PYnNlcnZlci5fcGVyaW9kKTtcbiAgICAgICAgICAgIH0pKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogUGVyaW9kIHRvIGNoZWNrIGZvciBtdXRhdGlvbnMgKH4zMiB0aW1lcy9zZWMpXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICAgICAqIEBleHBvc2VcbiAgICAgICAgICovXG4gICAgICAgIE11dGF0aW9uT2JzZXJ2ZXIuX3BlcmlvZCA9IDMwIC8qbXMrcnVudGltZSovO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBFeHBvc2VkIEFQSVxuICAgICAgICAgKiBAZXhwb3NlXG4gICAgICAgICAqIEBmaW5hbFxuICAgICAgICAgKi9cbiAgICAgICAgTXV0YXRpb25PYnNlcnZlci5wcm90b3R5cGUgPSB7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIHNlZSBodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI2RvbS1tdXRhdGlvbm9ic2VydmVyLW9ic2VydmVcbiAgICAgICAgICAgICAqIG5vdCBnb2luZyB0byB0aHJvdyBoZXJlIGJ1dCBnb2luZyB0byBmb2xsb3cgdGhlIGN1cnJlbnQgc3BlYyBjb25maWcgc2V0c1xuICAgICAgICAgICAgICogQHBhcmFtIHtOb2RlfG51bGx9ICR0YXJnZXRcbiAgICAgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fG51bGx9IGNvbmZpZyA6IE11dGF0aW9uT2JzZXJ2ZXJJbml0IGNvbmZpZ3VyYXRpb24gZGljdGlvbmFyeVxuICAgICAgICAgICAgICogQGV4cG9zZVxuICAgICAgICAgICAgICogQHJldHVybiB1bmRlZmluZWRcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgb2JzZXJ2ZTogZnVuY3Rpb24gKCR0YXJnZXQsIGNvbmZpZykge1xuICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAqIFVzaW5nIHNsaWdodGx5IGRpZmZlcmVudCBuYW1lcyBzbyBjbG9zdXJlIGNhbiBnbyBoYW1cbiAgICAgICAgICAgICAgICAgKiBAdHlwZSB7IU9iamVjdH0gOiBBIGN1c3RvbSBtdXRhdGlvbiBjb25maWdcbiAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICB2YXIgc2V0dGluZ3MgPSB7XG4gICAgICAgICAgICAgICAgICAgIGF0dHI6ICEhKGNvbmZpZy5hdHRyaWJ1dGVzIHx8IGNvbmZpZy5hdHRyaWJ1dGVGaWx0ZXIgfHwgY29uZmlnLmF0dHJpYnV0ZU9sZFZhbHVlKSxcblxuICAgICAgICAgICAgICAgICAgICAvLyBzb21lIGJyb3dzZXJzIGVuZm9yY2UgdGhhdCBzdWJ0cmVlIG11c3QgYmUgc2V0IHdpdGggY2hpbGRMaXN0LCBhdHRyaWJ1dGVzIG9yIGNoYXJhY3RlckRhdGEuXG4gICAgICAgICAgICAgICAgICAgIC8vIFdlIGRvbid0IGNhcmUgYXMgc3BlYyBkb2Vzbid0IHNwZWNpZnkgdGhpcyBydWxlLlxuICAgICAgICAgICAgICAgICAgICBraWRzOiAhIWNvbmZpZy5jaGlsZExpc3QsXG4gICAgICAgICAgICAgICAgICAgIGRlc2NlbmRlbnRzOiAhIWNvbmZpZy5zdWJ0cmVlLFxuICAgICAgICAgICAgICAgICAgICBjaGFyRGF0YTogISEoY29uZmlnLmNoYXJhY3RlckRhdGEgfHwgY29uZmlnLmNoYXJhY3RlckRhdGFPbGRWYWx1ZSlcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgdmFyIHdhdGNoZWQgPSB0aGlzLl93YXRjaGVkO1xuXG4gICAgICAgICAgICAgICAgLy8gcmVtb3ZlIGFscmVhZHkgb2JzZXJ2ZWQgdGFyZ2V0IGVsZW1lbnQgZnJvbSBwb29sXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB3YXRjaGVkLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh3YXRjaGVkW2ldLnRhciA9PT0gJHRhcmdldCkgd2F0Y2hlZC5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGNvbmZpZy5hdHRyaWJ1dGVGaWx0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIGNvbnZlcnRzIHRvIGEge2tleTogdHJ1ZX0gZGljdCBmb3IgZmFzdGVyIGxvb2t1cFxuICAgICAgICAgICAgICAgICAgICAgKiBAdHlwZSB7T2JqZWN0LjxTdHJpbmcsQm9vbGVhbj59XG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBzZXR0aW5ncy5hZmlsdGVyID0gcmVkdWNlKGNvbmZpZy5hdHRyaWJ1dGVGaWx0ZXIsIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhW2JdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhO1xuICAgICAgICAgICAgICAgICAgICB9LCB7fSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgd2F0Y2hlZC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgdGFyOiAkdGFyZ2V0LFxuICAgICAgICAgICAgICAgICAgICBmbjogY3JlYXRlTXV0YXRpb25TZWFyY2hlcigkdGFyZ2V0LCBzZXR0aW5ncylcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIC8vIHJlY29ubmVjdCBpZiBub3QgY29ubmVjdGVkXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLl90aW1lb3V0KSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0TXV0YXRpb25DaGVja2VyKHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogRmluZHMgbXV0YXRpb25zIHNpbmNlIGxhc3QgY2hlY2sgYW5kIGVtcHRpZXMgdGhlIFwicmVjb3JkIHF1ZXVlXCIgaS5lLiBtdXRhdGlvbnMgd2lsbCBvbmx5IGJlIGZvdW5kIG9uY2VcbiAgICAgICAgICAgICAqIEBleHBvc2VcbiAgICAgICAgICAgICAqIEByZXR1cm4ge0FycmF5LjxNdXRhdGlvblJlY29yZD59XG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHRha2VSZWNvcmRzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIG11dGF0aW9ucyA9IFtdO1xuICAgICAgICAgICAgICAgIHZhciB3YXRjaGVkID0gdGhpcy5fd2F0Y2hlZDtcblxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgd2F0Y2hlZC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICB3YXRjaGVkW2ldLmZuKG11dGF0aW9ucyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG11dGF0aW9ucztcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogQGV4cG9zZVxuICAgICAgICAgICAgICogQHJldHVybiB1bmRlZmluZWRcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgZGlzY29ubmVjdDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3dhdGNoZWQgPSBbXTsgLy8gY2xlYXIgdGhlIHN0dWZmIGJlaW5nIG9ic2VydmVkXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXQpOyAvLyByZWFkeSBmb3IgZ2FyYmFnZSBjb2xsZWN0aW9uXG4gICAgICAgICAgICAgICAgLyoqIEBwcml2YXRlICovXG4gICAgICAgICAgICAgICAgdGhpcy5fdGltZW91dCA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNpbXBsZSBNdXRhdGlvblJlY29yZCBwc2V1ZG9jbGFzcy4gTm8gbG9uZ2VyIGV4cG9zaW5nIGFzIGl0cyBub3QgZnVsbHkgY29tcGxpYW50XG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhXG4gICAgICAgICAqIEByZXR1cm4ge09iamVjdH0gYSBNdXRhdGlvblJlY29yZFxuICAgICAgICAgKi9cbiAgICAgICAgZnVuY3Rpb24gTXV0YXRpb25SZWNvcmQoZGF0YSkge1xuICAgICAgICAgICAgdmFyIHNldHRpbmdzID0geyAvLyB0ZWNobmljYWxseSB0aGVzZSBzaG91bGQgYmUgb24gcHJvdG8gc28gaGFzT3duUHJvcGVydHkgd2lsbCByZXR1cm4gZmFsc2UgZm9yIG5vbiBleHBsaWNpdGx5IHByb3BzXG4gICAgICAgICAgICAgICAgdHlwZTogbnVsbCxcbiAgICAgICAgICAgICAgICB0YXJnZXQ6IG51bGwsXG4gICAgICAgICAgICAgICAgYWRkZWROb2RlczogW10sXG4gICAgICAgICAgICAgICAgcmVtb3ZlZE5vZGVzOiBbXSxcbiAgICAgICAgICAgICAgICBwcmV2aW91c1NpYmxpbmc6IG51bGwsXG4gICAgICAgICAgICAgICAgbmV4dFNpYmxpbmc6IG51bGwsXG4gICAgICAgICAgICAgICAgYXR0cmlidXRlTmFtZTogbnVsbCxcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVOYW1lc3BhY2U6IG51bGwsXG4gICAgICAgICAgICAgICAgb2xkVmFsdWU6IG51bGxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wIGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoaGFzKHNldHRpbmdzLCBwcm9wKSAmJiBkYXRhW3Byb3BdICE9PSB1bmRlZmluZWQpIHNldHRpbmdzW3Byb3BdID0gZGF0YVtwcm9wXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzZXR0aW5ncztcbiAgICAgICAgfVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDcmVhdGVzIGEgZnVuYyB0byBmaW5kIGFsbCB0aGUgbXV0YXRpb25zXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7Tm9kZX0gJHRhcmdldFxuICAgICAgICAgKiBAcGFyYW0geyFPYmplY3R9IGNvbmZpZyA6IEEgY3VzdG9tIG11dGF0aW9uIGNvbmZpZ1xuICAgICAgICAgKi9cbiAgICAgICAgZnVuY3Rpb24gY3JlYXRlTXV0YXRpb25TZWFyY2hlcigkdGFyZ2V0LCBjb25maWcpIHtcbiAgICAgICAgICAgIC8qKiB0eXBlIHtFbGVzdHVjdH0gKi9cbiAgICAgICAgICAgIHZhciAkb2xkc3RhdGUgPSBjbG9uZSgkdGFyZ2V0LCBjb25maWcpOyAvLyBjcmVhdGUgdGhlIGNsb25lZCBkYXRhc3RydWN0dXJlXG5cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogY29uc3VtZXMgYXJyYXkgb2YgbXV0YXRpb25zIHdlIGNhbiBwdXNoIHRvXG4gICAgICAgICAgICAgKlxuICAgICAgICAgICAgICogQHBhcmFtIHtBcnJheS48TXV0YXRpb25SZWNvcmQ+fSBtdXRhdGlvbnNcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChtdXRhdGlvbnMpIHtcbiAgICAgICAgICAgICAgICB2YXIgb2xlbiA9IG11dGF0aW9ucy5sZW5ndGgsIGRpcnR5O1xuXG4gICAgICAgICAgICAgICAgaWYgKGNvbmZpZy5jaGFyRGF0YSAmJiAkdGFyZ2V0Lm5vZGVUeXBlID09PSAzICYmICR0YXJnZXQubm9kZVZhbHVlICE9PSAkb2xkc3RhdGUuY2hhckRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgbXV0YXRpb25zLnB1c2gobmV3IE11dGF0aW9uUmVjb3JkKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiY2hhcmFjdGVyRGF0YVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0OiAkdGFyZ2V0LFxuICAgICAgICAgICAgICAgICAgICAgICAgb2xkVmFsdWU6ICRvbGRzdGF0ZS5jaGFyRGF0YVxuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gQWxyaWdodCB3ZSBjaGVjayBiYXNlIGxldmVsIGNoYW5nZXMgaW4gYXR0cmlidXRlcy4uLiBlYXN5XG4gICAgICAgICAgICAgICAgaWYgKGNvbmZpZy5hdHRyICYmICRvbGRzdGF0ZS5hdHRyKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpbmRBdHRyaWJ1dGVNdXRhdGlvbnMobXV0YXRpb25zLCAkdGFyZ2V0LCAkb2xkc3RhdGUuYXR0ciwgY29uZmlnLmFmaWx0ZXIpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIGNoZWNrIGNoaWxkbGlzdCBvciBzdWJ0cmVlIGZvciBtdXRhdGlvbnNcbiAgICAgICAgICAgICAgICBpZiAoY29uZmlnLmtpZHMgfHwgY29uZmlnLmRlc2NlbmRlbnRzKSB7XG4gICAgICAgICAgICAgICAgICAgIGRpcnR5ID0gc2VhcmNoU3VidHJlZShtdXRhdGlvbnMsICR0YXJnZXQsICRvbGRzdGF0ZSwgY29uZmlnKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyByZWNsb25lIGRhdGEgc3RydWN0dXJlIGlmIHRoZXJlcyBjaGFuZ2VzXG4gICAgICAgICAgICAgICAgaWYgKGRpcnR5IHx8IG11dGF0aW9ucy5sZW5ndGggIT09IG9sZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgLyoqIHR5cGUge0VsZXN0dWN0fSAqL1xuICAgICAgICAgICAgICAgICAgICAkb2xkc3RhdGUgPSBjbG9uZSgkdGFyZ2V0LCBjb25maWcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICAvKiBhdHRyaWJ1dGVzICsgYXR0cmlidXRlRmlsdGVyIGhlbHBlcnMgKi9cblxuICAgICAgICAvLyBDaGVjayBpZiB0aGUgZW52aXJvbm1lbnQgaGFzIHRoZSBhdHRyaWJ1dGUgYnVnICgjNCkgd2hpY2ggY2F1c2VcbiAgICAgICAgLy8gZWxlbWVudC5hdHRyaWJ1dGVzLnN0eWxlIHRvIGFsd2F5cyBiZSBudWxsLlxuICAgICAgICB2YXIgaGFzQXR0cmlidXRlQnVnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlcIik7XG4gICAgICAgIGhhc0F0dHJpYnV0ZUJ1Zy5zdHlsZS50b3AgPSAwO1xuICAgICAgICBoYXNBdHRyaWJ1dGVCdWcgPSBoYXNBdHRyaWJ1dGVCdWcuYXR0cmlidXRlcy5zdHlsZS52YWx1ZSAhPSBcIm51bGxcIjtcblxuICAgICAgICAvKipcbiAgICAgICAgICogR2V0cyBhbiBhdHRyaWJ1dGUgdmFsdWUgaW4gYW4gZW52aXJvbm1lbnQgd2l0aG91dCBhdHRyaWJ1dGUgYnVnXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7Tm9kZX0gZWxcbiAgICAgICAgICogQHBhcmFtIHtBdHRyfSBhdHRyXG4gICAgICAgICAqIEByZXR1cm4ge1N0cmluZ30gYW4gYXR0cmlidXRlIHZhbHVlXG4gICAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiBnZXRBdHRyaWJ1dGVTaW1wbGUoZWwsIGF0dHIpIHtcbiAgICAgICAgICAgIC8vIFRoZXJlIGlzIGEgcG90ZW50aWFsIGZvciBhIHdhcm5pbmcgdG8gb2NjdXIgaGVyZSBpZiB0aGUgYXR0cmlidXRlIGlzIGFcbiAgICAgICAgICAgIC8vIGN1c3RvbSBhdHRyaWJ1dGUgaW4gSUU8OSB3aXRoIGEgY3VzdG9tIC50b1N0cmluZygpIG1ldGhvZC4gVGhpcyBpc1xuICAgICAgICAgICAgLy8ganVzdCBhIHdhcm5pbmcgYW5kIGRvZXNuJ3QgYWZmZWN0IGV4ZWN1dGlvbiAoc2VlICMyMSlcbiAgICAgICAgICAgIHJldHVybiBhdHRyLnZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdldHMgYW4gYXR0cmlidXRlIHZhbHVlIHdpdGggc3BlY2lhbCBoYWNrIGZvciBzdHlsZSBhdHRyaWJ1dGUgKHNlZSAjNClcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtOb2RlfSBlbFxuICAgICAgICAgKiBAcGFyYW0ge0F0dHJ9IGF0dHJcbiAgICAgICAgICogQHJldHVybiB7U3RyaW5nfSBhbiBhdHRyaWJ1dGUgdmFsdWVcbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIGdldEF0dHJpYnV0ZVdpdGhTdHlsZUhhY2soZWwsIGF0dHIpIHtcbiAgICAgICAgICAgIC8vIEFzIHdpdGggZ2V0QXR0cmlidXRlU2ltcGxlIHRoZXJlIGlzIGEgcG90ZW50aWFsIHdhcm5pbmcgZm9yIGN1c3RvbSBhdHRyaWJ0dWVzIGluIElFNy5cbiAgICAgICAgICAgIHJldHVybiBhdHRyLm5hbWUgIT09IFwic3R5bGVcIiA/IGF0dHIudmFsdWUgOiBlbC5zdHlsZS5jc3NUZXh0O1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGdldEF0dHJpYnV0ZVZhbHVlID0gaGFzQXR0cmlidXRlQnVnID8gZ2V0QXR0cmlidXRlU2ltcGxlIDogZ2V0QXR0cmlidXRlV2l0aFN0eWxlSGFjaztcblxuICAgICAgICAvKipcbiAgICAgICAgICogZmFzdCBoZWxwZXIgdG8gY2hlY2sgdG8gc2VlIGlmIGF0dHJpYnV0ZXMgb2JqZWN0IG9mIGFuIGVsZW1lbnQgaGFzIGNoYW5nZWRcbiAgICAgICAgICogZG9lc250IGhhbmRsZSB0aGUgdGV4dG5vZGUgY2FzZVxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge0FycmF5LjxNdXRhdGlvblJlY29yZD59IG11dGF0aW9uc1xuICAgICAgICAgKiBAcGFyYW0ge05vZGV9ICR0YXJnZXRcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3QuPHN0cmluZywgc3RyaW5nPn0gJG9sZHN0YXRlIDogQ3VzdG9tIGF0dHJpYnV0ZSBjbG9uZSBkYXRhIHN0cnVjdHVyZSBmcm9tIGNsb25lXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBmaWx0ZXJcbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIGZpbmRBdHRyaWJ1dGVNdXRhdGlvbnMobXV0YXRpb25zLCAkdGFyZ2V0LCAkb2xkc3RhdGUsIGZpbHRlcikge1xuICAgICAgICAgICAgdmFyIGNoZWNrZWQgPSB7fTtcbiAgICAgICAgICAgIHZhciBhdHRyaWJ1dGVzID0gJHRhcmdldC5hdHRyaWJ1dGVzO1xuICAgICAgICAgICAgdmFyIGF0dHI7XG4gICAgICAgICAgICB2YXIgbmFtZTtcbiAgICAgICAgICAgIHZhciBpID0gYXR0cmlidXRlcy5sZW5ndGg7XG4gICAgICAgICAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgICAgICAgICAgYXR0ciA9IGF0dHJpYnV0ZXNbaV07XG4gICAgICAgICAgICAgICAgbmFtZSA9IGF0dHIubmFtZTtcbiAgICAgICAgICAgICAgICBpZiAoIWZpbHRlciB8fCBoYXMoZmlsdGVyLCBuYW1lKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZ2V0QXR0cmlidXRlVmFsdWUoJHRhcmdldCwgYXR0cikgIT09ICRvbGRzdGF0ZVtuYW1lXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHB1c2hpbmcgaXMgcmVkdW5kYW50IGJ1dCBnemlwcyB2ZXJ5IG5pY2VseVxuICAgICAgICAgICAgICAgICAgICAgICAgbXV0YXRpb25zLnB1c2goTXV0YXRpb25SZWNvcmQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiYXR0cmlidXRlc1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldDogJHRhcmdldCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVOYW1lOiBuYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZFZhbHVlOiAkb2xkc3RhdGVbbmFtZV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlTmFtZXNwYWNlOiBhdHRyLm5hbWVzcGFjZVVSSSAvLyBpbiBpZTw4IGl0IGluY29ycmVjdGx5IHdpbGwgcmV0dXJuIHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNoZWNrZWRbbmFtZV0gPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAobmFtZSBpbiAkb2xkc3RhdGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoIShjaGVja2VkW25hbWVdKSkge1xuICAgICAgICAgICAgICAgICAgICBtdXRhdGlvbnMucHVzaChNdXRhdGlvblJlY29yZCh7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6ICR0YXJnZXQsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImF0dHJpYnV0ZXNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZU5hbWU6IG5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBvbGRWYWx1ZTogJG9sZHN0YXRlW25hbWVdXG4gICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogc2VhcmNoU3VidHJlZTogYXJyYXkgb2YgbXV0YXRpb25zIHNvIGZhciwgZWxlbWVudCwgZWxlbWVudCBjbG9uZSwgYm9vbFxuICAgICAgICAgKiBzeW5jaHJvbm91cyBkZnMgY29tcGFyaXNpb24gb2YgdHdvIG5vZGVzXG4gICAgICAgICAqIFRoaXMgZnVuY3Rpb24gaXMgYXBwbGllZCB0byBhbnkgb2JzZXJ2ZWQgZWxlbWVudCB3aXRoIGNoaWxkTGlzdCBvciBzdWJ0cmVlIHNwZWNpZmllZFxuICAgICAgICAgKiBTb3JyeSB0aGlzIGlzIGtpbmQgb2YgY29uZnVzaW5nIGFzIHNoaXQsIHRyaWVkIHRvIGNvbW1lbnQgaXQgYSBiaXQuLi5cbiAgICAgICAgICogY29kZXJldmlldy5zdGFja2V4Y2hhbmdlLmNvbS9xdWVzdGlvbnMvMzgzNTEgZGlzY3Vzc2lvbiBvZiBhbiBlYXJsaWVyIHZlcnNpb24gb2YgdGhpcyBmdW5jXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IG11dGF0aW9uc1xuICAgICAgICAgKiBAcGFyYW0ge05vZGV9ICR0YXJnZXRcbiAgICAgICAgICogQHBhcmFtIHshT2JqZWN0fSAkb2xkc3RhdGUgOiBBIGN1c3RvbSBjbG9uZWQgbm9kZSBmcm9tIGNsb25lKClcbiAgICAgICAgICogQHBhcmFtIHshT2JqZWN0fSBjb25maWcgOiBBIGN1c3RvbSBtdXRhdGlvbiBjb25maWdcbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIHNlYXJjaFN1YnRyZWUobXV0YXRpb25zLCAkdGFyZ2V0LCAkb2xkc3RhdGUsIGNvbmZpZykge1xuICAgICAgICAgICAgLy8gVHJhY2sgaWYgdGhlIHRyZWUgaXMgZGlydHkgYW5kIGhhcyB0byBiZSByZWNvbXB1dGVkICgjMTQpLlxuICAgICAgICAgICAgdmFyIGRpcnR5O1xuICAgICAgICAgICAgLypcbiAgICAgICAgICAgICAqIEhlbHBlciB0byBpZGVudGlmeSBub2RlIHJlYXJyYW5nbWVudCBhbmQgc3R1ZmYuLi5cbiAgICAgICAgICAgICAqIFRoZXJlIGlzIG5vIGdhdXJlbnRlZSB0aGF0IHRoZSBzYW1lIG5vZGUgd2lsbCBiZSBpZGVudGlmaWVkIGZvciBib3RoIGFkZGVkIGFuZCByZW1vdmVkIG5vZGVzXG4gICAgICAgICAgICAgKiBpZiB0aGUgcG9zaXRpb25zIGhhdmUgYmVlbiBzaHVmZmxlZC5cbiAgICAgICAgICAgICAqIGNvbmZsaWN0cyBhcnJheSB3aWxsIGJlIGVtcHRpZWQgYnkgZW5kIG9mIG9wZXJhdGlvblxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBmdW5jdGlvbiByZXNvbHZlQ29uZmxpY3RzKGNvbmZsaWN0cywgbm9kZSwgJGtpZHMsICRvbGRraWRzLCBudW1BZGRlZE5vZGVzKSB7XG4gICAgICAgICAgICAgICAgLy8gdGhlIGRpc3RhbmNlIGJldHdlZW4gdGhlIGZpcnN0IGNvbmZsaWN0aW5nIG5vZGUgYW5kIHRoZSBsYXN0XG4gICAgICAgICAgICAgICAgdmFyIGRpc3RhbmNlID0gY29uZmxpY3RzLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICAgICAgLy8gcHJldmVudHMgc2FtZSBjb25mbGljdCBiZWluZyByZXNvbHZlZCB0d2ljZSBjb25zaWRlciB3aGVuIHR3byBub2RlcyBzd2l0Y2ggcGxhY2VzLlxuICAgICAgICAgICAgICAgIC8vIG9ubHkgb25lIHNob3VsZCBiZSBnaXZlbiBhIG11dGF0aW9uIGV2ZW50IChub3RlIC1+IGlzIHVzZWQgYXMgYSBtYXRoLmNlaWwgc2hvcnRoYW5kKVxuICAgICAgICAgICAgICAgIHZhciBjb3VudGVyID0gLX4oKGRpc3RhbmNlIC0gbnVtQWRkZWROb2RlcykgLyAyKTtcbiAgICAgICAgICAgICAgICB2YXIgJGN1cjtcbiAgICAgICAgICAgICAgICB2YXIgb2xkc3RydWN0O1xuICAgICAgICAgICAgICAgIHZhciBjb25mbGljdDtcbiAgICAgICAgICAgICAgICB3aGlsZSAoKGNvbmZsaWN0ID0gY29uZmxpY3RzLnBvcCgpKSkge1xuICAgICAgICAgICAgICAgICAgICAkY3VyID0gJGtpZHNbY29uZmxpY3QuaV07XG4gICAgICAgICAgICAgICAgICAgIG9sZHN0cnVjdCA9ICRvbGRraWRzW2NvbmZsaWN0LmpdO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIGF0dGVtcHQgdG8gZGV0ZXJtaW5lIGlmIHRoZXJlIHdhcyBub2RlIHJlYXJyYW5nZW1lbnQuLi4gd29uJ3QgZ2F1cmVudGVlIGFsbCBtYXRjaGVzXG4gICAgICAgICAgICAgICAgICAgIC8vIGFsc28gaGFuZGxlcyBjYXNlIHdoZXJlIGFkZGVkL3JlbW92ZWQgbm9kZXMgY2F1c2Ugbm9kZXMgdG8gYmUgaWRlbnRpZmllZCBhcyBjb25mbGljdHNcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbmZpZy5raWRzICYmIGNvdW50ZXIgJiYgTWF0aC5hYnMoY29uZmxpY3QuaSAtIGNvbmZsaWN0LmopID49IGRpc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtdXRhdGlvbnMucHVzaChNdXRhdGlvblJlY29yZCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJjaGlsZExpc3RcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6IG5vZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkZWROb2RlczogWyRjdXJdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZWROb2RlczogWyRjdXJdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhhaGEgZG9uJ3QgcmVseSBvbiB0aGlzIHBsZWFzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRTaWJsaW5nOiAkY3VyLm5leHRTaWJsaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzU2libGluZzogJGN1ci5wcmV2aW91c1NpYmxpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50ZXItLTsgLy8gZm91bmQgY29uZmxpY3RcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIEFscmlnaHQgd2UgZm91bmQgdGhlIHJlc29ydGVkIG5vZGVzIG5vdyBjaGVjayBmb3Igb3RoZXIgdHlwZXMgb2YgbXV0YXRpb25zXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb25maWcuYXR0ciAmJiBvbGRzdHJ1Y3QuYXR0cikgZmluZEF0dHJpYnV0ZU11dGF0aW9ucyhtdXRhdGlvbnMsICRjdXIsIG9sZHN0cnVjdC5hdHRyLCBjb25maWcuYWZpbHRlcik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb25maWcuY2hhckRhdGEgJiYgJGN1ci5ub2RlVHlwZSA9PT0gMyAmJiAkY3VyLm5vZGVWYWx1ZSAhPT0gb2xkc3RydWN0LmNoYXJEYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtdXRhdGlvbnMucHVzaChNdXRhdGlvblJlY29yZCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJjaGFyYWN0ZXJEYXRhXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0OiAkY3VyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZFZhbHVlOiBvbGRzdHJ1Y3QuY2hhckRhdGFcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBub3cgbG9vayBAIHN1YnRyZWVcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbmZpZy5kZXNjZW5kZW50cykgZmluZE11dGF0aW9ucygkY3VyLCBvbGRzdHJ1Y3QpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBNYWluIHdvcmtlci4gRmluZHMgYW5kIGFkZHMgbXV0YXRpb25zIGlmIHRoZXJlIGFyZSBhbnlcbiAgICAgICAgICAgICAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICAgICAgICAgICAgICogQHBhcmFtIHshT2JqZWN0fSBvbGQgOiBBIGNsb25lZCBkYXRhIHN0cnVjdHVyZSB1c2luZyBpbnRlcm5hbCBjbG9uZVxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBmdW5jdGlvbiBmaW5kTXV0YXRpb25zKG5vZGUsIG9sZCkge1xuICAgICAgICAgICAgICAgIHZhciAka2lkcyA9IG5vZGUuY2hpbGROb2RlcztcbiAgICAgICAgICAgICAgICB2YXIgJG9sZGtpZHMgPSBvbGQua2lkcztcbiAgICAgICAgICAgICAgICB2YXIga2xlbiA9ICRraWRzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAvLyAkb2xka2lkcyB3aWxsIGJlIHVuZGVmaW5lZCBmb3IgdGV4dCBhbmQgY29tbWVudCBub2Rlc1xuICAgICAgICAgICAgICAgIHZhciBvbGVuID0gJG9sZGtpZHMgPyAkb2xka2lkcy5sZW5ndGggOiAwO1xuICAgICAgICAgICAgICAgIC8vIGlmICghb2xlbiAmJiAha2xlbikgcmV0dXJuOyAvLyBib3RoIGVtcHR5OyBjbGVhcmx5IG5vIGNoYW5nZXNcblxuICAgICAgICAgICAgICAgIC8vIHdlIGRlbGF5IHRoZSBpbnRpYWxpemF0aW9uIG9mIHRoZXNlIGZvciBtYXJnaW5hbCBwZXJmb3JtYW5jZSBpbiB0aGUgZXhwZWN0ZWQgY2FzZSAoYWN0dWFsbHkgcXVpdGUgc2lnbmZpY2FudCBvbiBsYXJnZSBzdWJ0cmVlcyB3aGVuIHRoZXNlIHdvdWxkIGJlIG90aGVyd2lzZSB1bnVzZWQpXG4gICAgICAgICAgICAgICAgLy8gbWFwIG9mIGNoZWNrZWQgZWxlbWVudCBvZiBpZHMgdG8gcHJldmVudCByZWdpc3RlcmluZyB0aGUgc2FtZSBjb25mbGljdCB0d2ljZVxuICAgICAgICAgICAgICAgIHZhciBtYXA7XG4gICAgICAgICAgICAgICAgLy8gYXJyYXkgb2YgcG90ZW50aWFsIGNvbmZsaWN0cyAoaWUgbm9kZXMgdGhhdCBtYXkgaGF2ZSBiZWVuIHJlIGFycmFuZ2VkKVxuICAgICAgICAgICAgICAgIHZhciBjb25mbGljdHM7XG4gICAgICAgICAgICAgICAgdmFyIGlkOyAvLyBlbGVtZW50IGlkIGZyb20gZ2V0RWxlbWVudElkIGhlbHBlclxuICAgICAgICAgICAgICAgIHZhciBpZHg7IC8vIGluZGV4IG9mIGEgbW92ZWQgb3IgaW5zZXJ0ZWQgZWxlbWVudFxuXG4gICAgICAgICAgICAgICAgdmFyIG9sZHN0cnVjdDtcbiAgICAgICAgICAgICAgICAvLyBjdXJyZW50IGFuZCBvbGQgbm9kZXNcbiAgICAgICAgICAgICAgICB2YXIgJGN1cjtcbiAgICAgICAgICAgICAgICB2YXIgJG9sZDtcbiAgICAgICAgICAgICAgICAvLyB0cmFjayB0aGUgbnVtYmVyIG9mIGFkZGVkIG5vZGVzIHNvIHdlIGNhbiByZXNvbHZlIGNvbmZsaWN0cyBtb3JlIGFjY3VyYXRlbHlcbiAgICAgICAgICAgICAgICB2YXIgbnVtQWRkZWROb2RlcyA9IDA7XG5cbiAgICAgICAgICAgICAgICAvLyBpdGVyYXRlIG92ZXIgYm90aCBvbGQgYW5kIGN1cnJlbnQgY2hpbGQgbm9kZXMgYXQgdGhlIHNhbWUgdGltZVxuICAgICAgICAgICAgICAgIHZhciBpID0gMCwgaiA9IDA7XG4gICAgICAgICAgICAgICAgLy8gd2hpbGUgdGhlcmUgaXMgc3RpbGwgYW55dGhpbmcgbGVmdCBpbiAka2lkcyBvciAkb2xka2lkcyAoc2FtZSBhcyBpIDwgJGtpZHMubGVuZ3RoIHx8IGogPCAkb2xka2lkcy5sZW5ndGg7KVxuICAgICAgICAgICAgICAgIHdoaWxlIChpIDwga2xlbiB8fCBqIDwgb2xlbikge1xuICAgICAgICAgICAgICAgICAgICAvLyBjdXJyZW50IGFuZCBvbGQgbm9kZXMgYXQgdGhlIGluZGV4c1xuICAgICAgICAgICAgICAgICAgICAkY3VyID0gJGtpZHNbaV07XG4gICAgICAgICAgICAgICAgICAgIG9sZHN0cnVjdCA9ICRvbGRraWRzW2pdO1xuICAgICAgICAgICAgICAgICAgICAkb2xkID0gb2xkc3RydWN0ICYmIG9sZHN0cnVjdC5ub2RlO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICgkY3VyID09PSAkb2xkKSB7IC8vIGV4cGVjdGVkIGNhc2UgLSBvcHRpbWl6ZWQgZm9yIHRoaXMgY2FzZVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2hlY2sgYXR0cmlidXRlcyBhcyBzcGVjaWZpZWQgYnkgY29uZmlnXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uZmlnLmF0dHIgJiYgb2xkc3RydWN0LmF0dHIpIC8qIG9sZHN0cnVjdC5hdHRyIGluc3RlYWQgb2YgdGV4dG5vZGUgY2hlY2sgKi9maW5kQXR0cmlidXRlTXV0YXRpb25zKG11dGF0aW9ucywgJGN1ciwgb2xkc3RydWN0LmF0dHIsIGNvbmZpZy5hZmlsdGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNoZWNrIGNoYXJhY3RlciBkYXRhIGlmIG5vZGUgaXMgYSBjb21tZW50IG9yIHRleHROb2RlIGFuZCBpdCdzIGJlaW5nIG9ic2VydmVkXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uZmlnLmNoYXJEYXRhICYmIG9sZHN0cnVjdC5jaGFyRGF0YSAhPT0gdW5kZWZpbmVkICYmICRjdXIubm9kZVZhbHVlICE9PSBvbGRzdHJ1Y3QuY2hhckRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdXRhdGlvbnMucHVzaChNdXRhdGlvblJlY29yZCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiY2hhcmFjdGVyRGF0YVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6ICRjdXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZFZhbHVlOiBvbGRzdHJ1Y3QuY2hhckRhdGFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlc29sdmUgY29uZmxpY3RzOyBpdCB3aWxsIGJlIHVuZGVmaW5lZCBpZiB0aGVyZSBhcmUgbm8gY29uZmxpY3RzIC0gb3RoZXJ3aXNlIGFuIGFycmF5XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uZmxpY3RzKSByZXNvbHZlQ29uZmxpY3RzKGNvbmZsaWN0cywgbm9kZSwgJGtpZHMsICRvbGRraWRzLCBudW1BZGRlZE5vZGVzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVjdXJzZSBvbiBuZXh0IGxldmVsIG9mIGNoaWxkcmVuLiBBdm9pZHMgdGhlIHJlY3Vyc2l2ZSBjYWxsIHdoZW4gdGhlcmUgYXJlIG5vIGNoaWxkcmVuIGxlZnQgdG8gaXRlcmF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbmZpZy5kZXNjZW5kZW50cyAmJiAoJGN1ci5jaGlsZE5vZGVzLmxlbmd0aCB8fCBvbGRzdHJ1Y3Qua2lkcyAmJiBvbGRzdHJ1Y3Qua2lkcy5sZW5ndGgpKSBmaW5kTXV0YXRpb25zKCRjdXIsIG9sZHN0cnVjdCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIGorKztcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsgLy8gKHVuY29tbW9uIGNhc2UpIGxvb2thaGVhZCB1bnRpbCB0aGV5IGFyZSB0aGUgc2FtZSBhZ2FpbiBvciB0aGUgZW5kIG9mIGNoaWxkcmVuXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXJ0eSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1hcCkgeyAvLyBkZWxheWVkIGluaXRhbGl6YXRpb24gKGJpZyBwZXJmIGJlbmVmaXQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmxpY3RzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGN1cikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNoZWNrIGlkIGlzIGluIHRoZSBsb2NhdGlvbiBtYXAgb3RoZXJ3aXNlIGRvIGEgaW5kZXhPZiBzZWFyY2hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShtYXBbaWQgPSBnZXRFbGVtZW50SWQoJGN1cildKSkgeyAvLyB0byBwcmV2ZW50IGRvdWJsZSBjaGVja2luZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtYXJrIGlkIGFzIGZvdW5kXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcFtpZF0gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjdXN0b20gaW5kZXhPZiB1c2luZyBjb21wYXJpdG9yIGNoZWNraW5nIG9sZGtpZHNbaV0ubm9kZSA9PT0gJGN1clxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGlkeCA9IGluZGV4T2ZDdXN0b21Ob2RlKCRvbGRraWRzLCAkY3VyLCBqKSkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uZmlnLmtpZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdXRhdGlvbnMucHVzaChNdXRhdGlvblJlY29yZCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiY2hpbGRMaXN0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldDogbm9kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkZWROb2RlczogWyRjdXJdLCAvLyAkY3VyIGlzIGEgbmV3IG5vZGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dFNpYmxpbmc6ICRjdXIubmV4dFNpYmxpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzU2libGluZzogJGN1ci5wcmV2aW91c1NpYmxpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtQWRkZWROb2RlcysrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmxpY3RzLnB1c2goeyAvLyBhZGQgY29uZmxpY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpOiBpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGo6IGlkeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG9sZCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNwZWNpYWwgY2FzZTogdGhlIGNoYW5nZXMgbWF5IGhhdmUgYmVlbiByZXNvbHZlZDogaSBhbmQgaiBhcHBlYXIgY29uZ3VyZW50IHNvIHdlIGNhbiBjb250aW51ZSB1c2luZyB0aGUgZXhwZWN0ZWQgY2FzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvbGQgIT09ICRraWRzW2ldXG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShtYXBbaWQgPSBnZXRFbGVtZW50SWQoJG9sZCldKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBbaWRdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChpZHggPSBpbmRleE9mKCRraWRzLCAkb2xkLCBpKSkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uZmlnLmtpZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdXRhdGlvbnMucHVzaChNdXRhdGlvblJlY29yZCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiY2hpbGRMaXN0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldDogb2xkLm5vZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZWROb2RlczogWyRvbGRdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0U2libGluZzogJG9sZGtpZHNbaiArIDFdLCAvLyBwcmFpc2Ugbm8gaW5kZXhvdXRvZmJvdW5kcyBleGNlcHRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNTaWJsaW5nOiAkb2xka2lkc1tqIC0gMV1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtQWRkZWROb2Rlcy0tO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmxpY3RzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGk6IGlkeCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqOiBqXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqKys7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0vLyBlbmQgdW5jb21tb24gY2FzZVxuICAgICAgICAgICAgICAgIH0vLyBlbmQgbG9vcFxuXG4gICAgICAgICAgICAgICAgLy8gcmVzb2x2ZSBhbnkgcmVtYWluaW5nIGNvbmZsaWN0c1xuICAgICAgICAgICAgICAgIGlmIChjb25mbGljdHMpIHJlc29sdmVDb25mbGljdHMoY29uZmxpY3RzLCBub2RlLCAka2lkcywgJG9sZGtpZHMsIG51bUFkZGVkTm9kZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmluZE11dGF0aW9ucygkdGFyZ2V0LCAkb2xkc3RhdGUpO1xuICAgICAgICAgICAgcmV0dXJuIGRpcnR5O1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFV0aWxpdHlcbiAgICAgICAgICogQ29uZXMgYSBlbGVtZW50IGludG8gYSBjdXN0b20gZGF0YSBzdHJ1Y3R1cmUgZGVzaWduZWQgZm9yIGNvbXBhcmlzaW9uLiBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9tZWdhd2FjLzgyMDEwMTJcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtOb2RlfSAkdGFyZ2V0XG4gICAgICAgICAqIEBwYXJhbSB7IU9iamVjdH0gY29uZmlnIDogQSBjdXN0b20gbXV0YXRpb24gY29uZmlnXG4gICAgICAgICAqIEByZXR1cm4geyFPYmplY3R9IDogQ2xvbmVkIGRhdGEgc3RydWN0dXJlXG4gICAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiBjbG9uZSgkdGFyZ2V0LCBjb25maWcpIHtcbiAgICAgICAgICAgIHZhciByZWN1cnNlID0gdHJ1ZTsgLy8gc2V0IHRydWUgc28gY2hpbGRMaXN0IHdlJ2xsIGFsd2F5cyBjaGVjayB0aGUgZmlyc3QgbGV2ZWxcbiAgICAgICAgICAgIHJldHVybiAoZnVuY3Rpb24gY29weSgkdGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgdmFyIGVsZXN0cnVjdCA9IHtcbiAgICAgICAgICAgICAgICAgICAgLyoqIEB0eXBlIHtOb2RlfSAqL1xuICAgICAgICAgICAgICAgICAgICBub2RlOiAkdGFyZ2V0XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8vIFN0b3JlIGN1cnJlbnQgY2hhcmFjdGVyIGRhdGEgb2YgdGFyZ2V0IHRleHQgb3IgY29tbWVudCBub2RlIGlmIHRoZSBjb25maWcgcmVxdWVzdHNcbiAgICAgICAgICAgICAgICAvLyB0aG9zZSBwcm9wZXJ0aWVzIHRvIGJlIG9ic2VydmVkLlxuICAgICAgICAgICAgICAgIGlmIChjb25maWcuY2hhckRhdGEgJiYgKCR0YXJnZXQubm9kZVR5cGUgPT09IDMgfHwgJHRhcmdldC5ub2RlVHlwZSA9PT0gOCkpIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlc3RydWN0LmNoYXJEYXRhID0gJHRhcmdldC5ub2RlVmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIGl0cyBlaXRoZXIgYSBlbGVtZW50LCBjb21tZW50LCBkb2MgZnJhZyBvciBkb2N1bWVudCBub2RlXG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEFkZCBhdHRyIG9ubHkgaWYgc3VidHJlZSBpcyBzcGVjaWZpZWQgb3IgdG9wIGxldmVsIGFuZCBhdm9pZCBpZlxuICAgICAgICAgICAgICAgICAgICAvLyBhdHRyaWJ1dGVzIGlzIGEgZG9jdW1lbnQgb2JqZWN0ICgjMTMpLlxuICAgICAgICAgICAgICAgICAgICBpZiAoY29uZmlnLmF0dHIgJiYgcmVjdXJzZSAmJiAkdGFyZ2V0Lm5vZGVUeXBlID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIGNsb25lIGxpdmUgYXR0cmlidXRlIGxpc3QgdG8gYW4gb2JqZWN0IHN0cnVjdHVyZSB7bmFtZTogdmFsfVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHR5cGUge09iamVjdC48c3RyaW5nLCBzdHJpbmc+fVxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVzdHJ1Y3QuYXR0ciA9IHJlZHVjZSgkdGFyZ2V0LmF0dHJpYnV0ZXMsIGZ1bmN0aW9uIChtZW1vLCBhdHRyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjb25maWcuYWZpbHRlciB8fCBjb25maWcuYWZpbHRlclthdHRyLm5hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbW9bYXR0ci5uYW1lXSA9IGdldEF0dHJpYnV0ZVZhbHVlKCR0YXJnZXQsIGF0dHIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWVtbztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHt9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIHdoZXRoZXIgd2Ugc2hvdWxkIGl0ZXJhdGUgdGhlIGNoaWxkcmVuIG9mICR0YXJnZXQgbm9kZVxuICAgICAgICAgICAgICAgICAgICBpZiAocmVjdXJzZSAmJiAoKGNvbmZpZy5raWRzIHx8IGNvbmZpZy5jaGFyRGF0YSkgfHwgKGNvbmZpZy5hdHRyICYmIGNvbmZpZy5kZXNjZW5kZW50cykpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvKiogQHR5cGUge0FycmF5LjwhT2JqZWN0Pn0gOiBBcnJheSBvZiBjdXN0b20gY2xvbmUgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZXN0cnVjdC5raWRzID0gbWFwKCR0YXJnZXQuY2hpbGROb2RlcywgY29weSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZWN1cnNlID0gY29uZmlnLmRlc2NlbmRlbnRzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZWxlc3RydWN0O1xuICAgICAgICAgICAgfSkoJHRhcmdldCk7XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogaW5kZXhPZiBhbiBlbGVtZW50IGluIGEgY29sbGVjdGlvbiBvZiBjdXN0b20gbm9kZXNcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtOb2RlTGlzdH0gc2V0XG4gICAgICAgICAqIEBwYXJhbSB7IU9iamVjdH0gJG5vZGUgOiBBIGN1c3RvbSBjbG9uZWQgbm9kZVxuICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gaWR4IDogaW5kZXggdG8gc3RhcnQgdGhlIGxvb3BcbiAgICAgICAgICogQHJldHVybiB7bnVtYmVyfVxuICAgICAgICAgKi9cbiAgICAgICAgZnVuY3Rpb24gaW5kZXhPZkN1c3RvbU5vZGUoc2V0LCAkbm9kZSwgaWR4KSB7XG4gICAgICAgICAgICByZXR1cm4gaW5kZXhPZihzZXQsICRub2RlLCBpZHgsIEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoXCJub2RlXCIpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHVzaW5nIGEgbm9uIGlkIChlZyBvdXRlckhUTUwgb3Igbm9kZVZhbHVlKSBpcyBleHRyZW1lbHkgbmFpdmUgYW5kIHdpbGwgcnVuIGludG8gaXNzdWVzIHdpdGggbm9kZXMgdGhhdCBtYXkgYXBwZWFyIHRoZSBzYW1lIGxpa2UgPGxpPjwvbGk+XG4gICAgICAgIHZhciBjb3VudGVyID0gMTsgLy8gZG9uJ3QgdXNlIDAgYXMgaWQgKGZhbHN5KVxuICAgICAgICAvKiogQGNvbnN0ICovXG4gICAgICAgIHZhciBleHBhbmRvID0gXCJtb19pZFwiO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBdHRlbXB0IHRvIHVuaXF1ZWx5IGlkIGFuIGVsZW1lbnQgZm9yIGhhc2hpbmcuIFdlIGNvdWxkIG9wdGltaXplIHRoaXMgZm9yIGxlZ2FjeSBicm93c2VycyBidXQgaXQgaG9wZWZ1bGx5IHdvbnQgYmUgY2FsbGVkIGVub3VnaCB0byBiZSBhIGNvbmNlcm5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtOb2RlfSAkZWxlXG4gICAgICAgICAqIEByZXR1cm4geyhzdHJpbmd8bnVtYmVyKX1cbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIGdldEVsZW1lbnRJZCgkZWxlKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJldHVybiAkZWxlLmlkIHx8ICgkZWxlW2V4cGFuZG9dID0gJGVsZVtleHBhbmRvXSB8fCBjb3VudGVyKyspO1xuICAgICAgICAgICAgfSBjYXRjaCAob19PKSB7IC8vIGllIDw4IHdpbGwgdGhyb3cgaWYgeW91IHNldCBhbiB1bmtub3duIHByb3BlcnR5IG9uIGEgdGV4dCBub2RlXG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRlbGUubm9kZVZhbHVlOyAvLyBuYWl2ZVxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKHNoaXRpZSkgeyAvLyB3aGVuIHRleHQgbm9kZSBpcyByZW1vdmVkOiBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9tZWdhd2FjLzgzNTU5NzggOihcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvdW50ZXIrKztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogKiptYXAqKiBBcHBseSBhIG1hcHBpbmcgZnVuY3Rpb24gdG8gZWFjaCBpdGVtIG9mIGEgc2V0XG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl8Tm9kZUxpc3R9IHNldFxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRvclxuICAgICAgICAgKi9cbiAgICAgICAgZnVuY3Rpb24gbWFwKHNldCwgaXRlcmF0b3IpIHtcbiAgICAgICAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgc2V0Lmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgICAgICAgIHJlc3VsdHNbaW5kZXhdID0gaXRlcmF0b3Ioc2V0W2luZGV4XSwgaW5kZXgsIHNldCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICAgICAgfVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiAqKlJlZHVjZSoqIGJ1aWxkcyB1cCBhIHNpbmdsZSByZXN1bHQgZnJvbSBhIGxpc3Qgb2YgdmFsdWVzXG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl8Tm9kZUxpc3R8TmFtZWROb2RlTWFwfSBzZXRcbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0b3JcbiAgICAgICAgICogQHBhcmFtIHsqfSBbbWVtb10gSW5pdGlhbCB2YWx1ZSBvZiB0aGUgbWVtby5cbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIHJlZHVjZShzZXQsIGl0ZXJhdG9yLCBtZW1vKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgc2V0Lmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgICAgICAgIG1lbW8gPSBpdGVyYXRvcihtZW1vLCBzZXRbaW5kZXhdLCBpbmRleCwgc2V0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBtZW1vO1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqICoqaW5kZXhPZioqIGZpbmQgaW5kZXggb2YgaXRlbSBpbiBjb2xsZWN0aW9uLlxuICAgICAgICAgKiBAcGFyYW0ge0FycmF5fE5vZGVMaXN0fSBzZXRcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGl0ZW1cbiAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IGlkeFxuICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3Byb3BdIFByb3BlcnR5IG9uIHNldCBpdGVtIHRvIGNvbXBhcmUgdG8gaXRlbVxuICAgICAgICAgKi9cbiAgICAgICAgZnVuY3Rpb24gaW5kZXhPZihzZXQsIGl0ZW0sIGlkeCwgcHJvcCkge1xuICAgICAgICAgICAgZm9yICgvKmlkeCA9IH5+aWR4Ki87IGlkeCA8IHNldC5sZW5ndGg7IGlkeCsrKSB7Ly8gc3RhcnQgaWR4IGlzIGFsd2F5cyBnaXZlbiBhcyB0aGlzIGlzIGludGVybmFsXG4gICAgICAgICAgICAgICAgaWYgKChwcm9wID8gc2V0W2lkeF1bcHJvcF0gOiBzZXRbaWR4XSkgPT09IGl0ZW0pIHJldHVybiBpZHg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9ialxuICAgICAgICAgKiBAcGFyYW0geyhzdHJpbmd8bnVtYmVyKX0gcHJvcFxuICAgICAgICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgICAgICAgKi9cbiAgICAgICAgZnVuY3Rpb24gaGFzKG9iaiwgcHJvcCkge1xuICAgICAgICAgICAgcmV0dXJuIG9ialtwcm9wXSAhPT0gdW5kZWZpbmVkOyAvLyB3aWxsIGJlIG5pY2VseSBpbmxpbmVkIGJ5IGdjY1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gR0NDIGhhY2sgc2VlIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8yMzIwMjQzOC8xNTE3OTE5XG4gICAgICAgIGZ1bmN0aW9uIEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoYSkge1xuICAgICAgICAgICAgcmV0dXJuIGE7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gTXV0YXRpb25PYnNlcnZlcjtcbiAgICB9KSh2b2lkIDApO1xufVxufX0pLmNhbGwoJ29iamVjdCcgPT09IHR5cGVvZiB3aW5kb3cgJiYgd2luZG93IHx8ICdvYmplY3QnID09PSB0eXBlb2Ygc2VsZiAmJiBzZWxmIHx8ICdvYmplY3QnID09PSB0eXBlb2YgZ2xvYmFsICYmIGdsb2JhbCB8fCB7fSk7XG4iLCAiKGZ1bmN0aW9uKHVuZGVmaW5lZCkge1xuaWYgKCEoZG9jdW1lbnQuY29udGFpbnNcbikpIHtcbi8vIE5vZGUucHJvdG90eXBlLmNvbnRhaW5zXG4oZnVuY3Rpb24oKSB7XG5cblx0ZnVuY3Rpb24gY29udGFpbnMobm9kZSkge1xuXHRcdGlmICghKDAgaW4gYXJndW1lbnRzKSkge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignMSBhcmd1bWVudCBpcyByZXF1aXJlZCcpO1xuXHRcdH1cblxuXHRcdGRvIHtcblx0XHRcdGlmICh0aGlzID09PSBub2RlKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25kLWFzc2lnblxuXHRcdH0gd2hpbGUgKG5vZGUgPSBub2RlICYmIG5vZGUucGFyZW50Tm9kZSk7XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHQvLyBJRVxuXHRpZiAoJ0hUTUxFbGVtZW50JyBpbiBzZWxmICYmICdjb250YWlucycgaW4gSFRNTEVsZW1lbnQucHJvdG90eXBlKSB7XG5cdFx0dHJ5IHtcblx0XHRcdGRlbGV0ZSBIVE1MRWxlbWVudC5wcm90b3R5cGUuY29udGFpbnM7XG5cdFx0fSBjYXRjaCAoZSkge31cblx0fVxuXG5cdGlmICgnTm9kZScgaW4gc2VsZikge1xuXHRcdE5vZGUucHJvdG90eXBlLmNvbnRhaW5zID0gY29udGFpbnM7XG5cdH0gZWxzZSB7XG5cdFx0ZG9jdW1lbnQuY29udGFpbnMgPSBFbGVtZW50LnByb3RvdHlwZS5jb250YWlucyA9IGNvbnRhaW5zO1xuXHR9XG5cbn0oKSk7XG59fSkuY2FsbCgnb2JqZWN0JyA9PT0gdHlwZW9mIHdpbmRvdyAmJiB3aW5kb3cgfHwgJ29iamVjdCcgPT09IHR5cGVvZiBzZWxmICYmIHNlbGYgfHwgJ29iamVjdCcgPT09IHR5cGVvZiBnbG9iYWwgJiYgZ2xvYmFsIHx8IHt9KTtcbiIsICJcbjsoZnVuY3Rpb24oKXsgdHJ5IHsgd2luZG93WydTaGFkeURPTSddID0gd2luZG93WydTaGFkeURPTSddIHx8IHt9OyB3aW5kb3dbJ1NoYWR5RE9NJ11bJ3F1ZXJ5U2VsZWN0b3JJbXBsZW1lbnRhdGlvbiddID0gd2luZG93WydTaGFkeURPTSddWydxdWVyeVNlbGVjdG9ySW1wbGVtZW50YXRpb24nXSB8fCAnbmF0aXZlJzsgfSBjYXRjaChlcnIpIHt9IH0pKCk7XG4oZnVuY3Rpb24oKXsvKlxuXG5Db3B5cmlnaHQgKGMpIDIwMTYgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dFxuVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHRcblRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dFxuQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc29cbnN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0XG4qL1xuJ3VzZSBzdHJpY3QnO3ZhciBuO2Z1bmN0aW9uIGFhKGEpe3ZhciBiPTA7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGI8YS5sZW5ndGg/e2RvbmU6ITEsdmFsdWU6YVtiKytdfTp7ZG9uZTohMH19fWZ1bmN0aW9uIHAoYSl7dmFyIGI9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmU3ltYm9sLml0ZXJhdG9yJiZhW1N5bWJvbC5pdGVyYXRvcl07cmV0dXJuIGI/Yi5jYWxsKGEpOntuZXh0OmFhKGEpfX1mdW5jdGlvbiBxKGEpe2lmKCEoYSBpbnN0YW5jZW9mIEFycmF5KSl7YT1wKGEpO2Zvcih2YXIgYixjPVtdOyEoYj1hLm5leHQoKSkuZG9uZTspYy5wdXNoKGIudmFsdWUpO2E9Y31yZXR1cm4gYX1cbmZ1bmN0aW9uIGJhKGEpe2E9W1wib2JqZWN0XCI9PXR5cGVvZiBnbG9iYWxUaGlzJiZnbG9iYWxUaGlzLGEsXCJvYmplY3RcIj09dHlwZW9mIHdpbmRvdyYmd2luZG93LFwib2JqZWN0XCI9PXR5cGVvZiBzZWxmJiZzZWxmLFwib2JqZWN0XCI9PXR5cGVvZiBnbG9iYWwmJmdsb2JhbF07Zm9yKHZhciBiPTA7YjxhLmxlbmd0aDsrK2Ipe3ZhciBjPWFbYl07aWYoYyYmYy5NYXRoPT1NYXRoKXJldHVybiBjfXRocm93IEVycm9yKFwiQ2Fubm90IGZpbmQgZ2xvYmFsIG9iamVjdFwiKTt9dmFyIGNhPWJhKHRoaXMpO2Z1bmN0aW9uIGRhKCl7fWRhLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57fX07ZnVuY3Rpb24gdChhKXthLl9fc2hhZHl8fChhLl9fc2hhZHk9bmV3IGRhKTtyZXR1cm4gYS5fX3NoYWR5fWZ1bmN0aW9uIHUoYSl7cmV0dXJuIGEmJmEuX19zaGFkeX07dmFyIHY9d2luZG93LlNoYWR5RE9NfHx7fTt2LmRhPSEoIUVsZW1lbnQucHJvdG90eXBlLmF0dGFjaFNoYWRvd3x8IU5vZGUucHJvdG90eXBlLmdldFJvb3ROb2RlKTt2YXIgZWE9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihOb2RlLnByb3RvdHlwZSxcImZpcnN0Q2hpbGRcIik7di5pPSEhKGVhJiZlYS5jb25maWd1cmFibGUmJmVhLmdldCk7di5OPXYuZm9yY2V8fCF2LmRhO3YubD12Lm5vUGF0Y2h8fCExO3YuQz12LnByZWZlclBlcmZvcm1hbmNlO3YuTz1cIm9uLWRlbWFuZFwiPT09di5sO3ZhciBmYTt2YXIgaGE9di5xdWVyeVNlbGVjdG9ySW1wbGVtZW50YXRpb247ZmE9LTE8W1wibmF0aXZlXCIsXCJzZWxlY3RvckVuZ2luZVwiXS5pbmRleE9mKGhhKT9oYTp2b2lkIDA7di5nYT1mYTt2LlY9bmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaChcIlRyaWRlbnRcIik7XG5mdW5jdGlvbiBpYSgpe3JldHVybiBEb2N1bWVudC5wcm90b3R5cGUubXNFbGVtZW50c0Zyb21Qb2ludD9cIm1zRWxlbWVudHNGcm9tUG9pbnRcIjpcImVsZW1lbnRzRnJvbVBvaW50XCJ9ZnVuY3Rpb24gdyhhKXtyZXR1cm4oYT11KGEpKSYmdm9pZCAwIT09YS5maXJzdENoaWxkfWZ1bmN0aW9uIHgoYSl7cmV0dXJuIGEgaW5zdGFuY2VvZiBTaGFkb3dSb290fWZ1bmN0aW9uIGphKGEpe3JldHVybihhPShhPXUoYSkpJiZhLnJvb3QpJiZrYShhKX12YXIgeT1FbGVtZW50LnByb3RvdHlwZSxsYT15Lm1hdGNoZXN8fHkubWF0Y2hlc1NlbGVjdG9yfHx5Lm1vek1hdGNoZXNTZWxlY3Rvcnx8eS5tc01hdGNoZXNTZWxlY3Rvcnx8eS5vTWF0Y2hlc1NlbGVjdG9yfHx5LndlYmtpdE1hdGNoZXNTZWxlY3RvcixtYT1kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShcIlwiKSxuYT0wLG9hPVtdO1xuKG5ldyBNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uKCl7Zm9yKDtvYS5sZW5ndGg7KXRyeXtvYS5zaGlmdCgpKCl9Y2F0Y2goYSl7dGhyb3cgbWEudGV4dENvbnRlbnQ9bmErKyxhO319KSkub2JzZXJ2ZShtYSx7Y2hhcmFjdGVyRGF0YTohMH0pO2Z1bmN0aW9uIHBhKGEpe29hLnB1c2goYSk7bWEudGV4dENvbnRlbnQ9bmErK312YXIgcWE9ZG9jdW1lbnQuY29udGFpbnM/ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5fX3NoYWR5X25hdGl2ZV9jb250YWlucyhiKX06ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYT09PWJ8fGEuZG9jdW1lbnRFbGVtZW50JiZhLmRvY3VtZW50RWxlbWVudC5fX3NoYWR5X25hdGl2ZV9jb250YWlucyhiKX07ZnVuY3Rpb24gcmEoYSxiKXtmb3IoO2I7KXtpZihiPT1hKXJldHVybiEwO2I9Yi5fX3NoYWR5X3BhcmVudE5vZGV9cmV0dXJuITF9XG5mdW5jdGlvbiB6KGEpe2Zvcih2YXIgYj1hLmxlbmd0aC0xOzA8PWI7Yi0tKXt2YXIgYz1hW2JdLGQ9Yy5nZXRBdHRyaWJ1dGUoXCJpZFwiKXx8Yy5nZXRBdHRyaWJ1dGUoXCJuYW1lXCIpO2QmJlwibGVuZ3RoXCIhPT1kJiZpc05hTihkKSYmKGFbZF09Yyl9YS5pdGVtPWZ1bmN0aW9uKGUpe3JldHVybiBhW2VdfTthLm5hbWVkSXRlbT1mdW5jdGlvbihlKXtpZihcImxlbmd0aFwiIT09ZSYmaXNOYU4oZSkmJmFbZV0pcmV0dXJuIGFbZV07Zm9yKHZhciBmPXAoYSksZz1mLm5leHQoKTshZy5kb25lO2c9Zi5uZXh0KCkpaWYoZz1nLnZhbHVlLChnLmdldEF0dHJpYnV0ZShcImlkXCIpfHxnLmdldEF0dHJpYnV0ZShcIm5hbWVcIikpPT1lKXJldHVybiBnO3JldHVybiBudWxsfTtyZXR1cm4gYX1mdW5jdGlvbiBzYShhKXt2YXIgYj1bXTtmb3IoYT1hLl9fc2hhZHlfbmF0aXZlX2ZpcnN0Q2hpbGQ7YTthPWEuX19zaGFkeV9uYXRpdmVfbmV4dFNpYmxpbmcpYi5wdXNoKGEpO3JldHVybiBifVxuZnVuY3Rpb24gdGEoYSl7dmFyIGI9W107Zm9yKGE9YS5fX3NoYWR5X2ZpcnN0Q2hpbGQ7YTthPWEuX19zaGFkeV9uZXh0U2libGluZyliLnB1c2goYSk7cmV0dXJuIGJ9ZnVuY3Rpb24gdWEoYSxiLGMpe2MuY29uZmlndXJhYmxlPSEwO2lmKGMudmFsdWUpYVtiXT1jLnZhbHVlO2Vsc2UgdHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShhLGIsYyl9Y2F0Y2goZCl7fX1mdW5jdGlvbiBBKGEsYixjLGQpe2M9dm9pZCAwPT09Yz9cIlwiOmM7Zm9yKHZhciBlIGluIGIpZCYmMDw9ZC5pbmRleE9mKGUpfHx1YShhLGMrZSxiW2VdKX1mdW5jdGlvbiB2YShhLGIpe2Zvcih2YXIgYyBpbiBiKWMgaW4gYSYmdWEoYSxjLGJbY10pfWZ1bmN0aW9uIEIoYSl7dmFyIGI9e307T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYSkuZm9yRWFjaChmdW5jdGlvbihjKXtiW2NdPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYSxjKX0pO3JldHVybiBifVxuZnVuY3Rpb24gd2EoYSxiKXtmb3IodmFyIGM9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYiksZD0wLGU7ZDxjLmxlbmd0aDtkKyspZT1jW2RdLGFbZV09YltlXX1mdW5jdGlvbiB4YShhKXtyZXR1cm4gYSBpbnN0YW5jZW9mIE5vZGU/YTpkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShcIlwiK2EpfWZ1bmN0aW9uIEQoYSl7Zm9yKHZhciBiPVtdLGM9MDtjPGFyZ3VtZW50cy5sZW5ndGg7KytjKWJbY109YXJndW1lbnRzW2NdO2lmKDE9PT1iLmxlbmd0aClyZXR1cm4geGEoYlswXSk7Yz1kb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7Yj1wKGIpO2Zvcih2YXIgZD1iLm5leHQoKTshZC5kb25lO2Q9Yi5uZXh0KCkpYy5hcHBlbmRDaGlsZCh4YShkLnZhbHVlKSk7cmV0dXJuIGN9XG5mdW5jdGlvbiB5YShhKXt2YXIgYjtmb3IoYj12b2lkIDA9PT1iPzE6YjswPGI7Yi0tKWE9YS5yZWR1Y2UoZnVuY3Rpb24oYyxkKXtBcnJheS5pc0FycmF5KGQpP2MucHVzaC5hcHBseShjLHEoZCkpOmMucHVzaChkKTtyZXR1cm4gY30sW10pO3JldHVybiBhfWZ1bmN0aW9uIHphKGEpe3ZhciBiPVtdLGM9bmV3IFNldDthPXAoYSk7Zm9yKHZhciBkPWEubmV4dCgpOyFkLmRvbmU7ZD1hLm5leHQoKSlkPWQudmFsdWUsYy5oYXMoZCl8fChiLnB1c2goZCksYy5hZGQoZCkpO3JldHVybiBifTt2YXIgRT1bXSxBYTtmdW5jdGlvbiBCYShhKXtBYXx8KEFhPSEwLHBhKEYpKTtFLnB1c2goYSl9ZnVuY3Rpb24gRigpe0FhPSExO2Zvcih2YXIgYT0hIUUubGVuZ3RoO0UubGVuZ3RoOylFLnNoaWZ0KCkoKTtyZXR1cm4gYX1GLmxpc3Q9RTtmdW5jdGlvbiBDYSgpe3RoaXMuZz0hMTt0aGlzLmFkZGVkTm9kZXM9W107dGhpcy5yZW1vdmVkTm9kZXM9W107dGhpcy5IPW5ldyBTZXR9ZnVuY3Rpb24gRGEoYSl7YS5nfHwoYS5nPSEwLHBhKGZ1bmN0aW9uKCl7YS5mbHVzaCgpfSkpfUNhLnByb3RvdHlwZS5mbHVzaD1mdW5jdGlvbigpe2lmKHRoaXMuZyl7dGhpcy5nPSExO3ZhciBhPXRoaXMudGFrZVJlY29yZHMoKTthLmxlbmd0aCYmdGhpcy5ILmZvckVhY2goZnVuY3Rpb24oYil7YihhKX0pfX07Q2EucHJvdG90eXBlLnRha2VSZWNvcmRzPWZ1bmN0aW9uKCl7aWYodGhpcy5hZGRlZE5vZGVzLmxlbmd0aHx8dGhpcy5yZW1vdmVkTm9kZXMubGVuZ3RoKXt2YXIgYT1be2FkZGVkTm9kZXM6dGhpcy5hZGRlZE5vZGVzLHJlbW92ZWROb2Rlczp0aGlzLnJlbW92ZWROb2Rlc31dO3RoaXMuYWRkZWROb2Rlcz1bXTt0aGlzLnJlbW92ZWROb2Rlcz1bXTtyZXR1cm4gYX1yZXR1cm5bXX07XG5mdW5jdGlvbiBFYShhLGIpe3ZhciBjPXQoYSk7Yy5CfHwoYy5CPW5ldyBDYSk7Yy5CLkguYWRkKGIpO3ZhciBkPWMuQjtyZXR1cm57WjpiLGJhOmQsYWE6YSx0YWtlUmVjb3JkczpmdW5jdGlvbigpe3JldHVybiBkLnRha2VSZWNvcmRzKCl9fX1mdW5jdGlvbiBGYShhKXt2YXIgYj1hJiZhLmJhO2ImJihiLkguZGVsZXRlKGEuWiksYi5ILnNpemV8fCh0KGEuYWEpLkI9bnVsbCkpfVxuZnVuY3Rpb24gR2EoYSxiKXt2YXIgYz1iLmdldFJvb3ROb2RlKCk7cmV0dXJuIGEubWFwKGZ1bmN0aW9uKGQpe3ZhciBlPWM9PT1kLnRhcmdldC5nZXRSb290Tm9kZSgpO2lmKGUmJmQuYWRkZWROb2Rlcyl7aWYoZT1bXS5zbGljZS5jYWxsKGQuYWRkZWROb2RlcykuZmlsdGVyKGZ1bmN0aW9uKGYpe3JldHVybiBjPT09Zi5nZXRSb290Tm9kZSgpfSksZS5sZW5ndGgpcmV0dXJuIGQ9T2JqZWN0LmNyZWF0ZShkKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZCxcImFkZGVkTm9kZXNcIix7dmFsdWU6ZSxjb25maWd1cmFibGU6ITB9KSxkfWVsc2UgaWYoZSlyZXR1cm4gZH0pLmZpbHRlcihmdW5jdGlvbihkKXtyZXR1cm4gZH0pfTt2YXIgSGE9L1smXFx1MDBBMFwiXS9nLElhPS9bJlxcdTAwQTA8Pl0vZztmdW5jdGlvbiBKYShhKXtzd2l0Y2goYSl7Y2FzZSBcIiZcIjpyZXR1cm5cIiZhbXA7XCI7Y2FzZSBcIjxcIjpyZXR1cm5cIiZsdDtcIjtjYXNlIFwiPlwiOnJldHVyblwiJmd0O1wiO2Nhc2UgJ1wiJzpyZXR1cm5cIiZxdW90O1wiO2Nhc2UgXCJcXHUwMGEwXCI6cmV0dXJuXCImbmJzcDtcIn19ZnVuY3Rpb24gS2EoYSl7Zm9yKHZhciBiPXt9LGM9MDtjPGEubGVuZ3RoO2MrKyliW2FbY11dPSEwO3JldHVybiBifXZhciBMYT1LYShcImFyZWEgYmFzZSBiciBjb2wgY29tbWFuZCBlbWJlZCBociBpbWcgaW5wdXQga2V5Z2VuIGxpbmsgbWV0YSBwYXJhbSBzb3VyY2UgdHJhY2sgd2JyXCIuc3BsaXQoXCIgXCIpKSxNYT1LYShcInN0eWxlIHNjcmlwdCB4bXAgaWZyYW1lIG5vZW1iZWQgbm9mcmFtZXMgcGxhaW50ZXh0IG5vc2NyaXB0XCIuc3BsaXQoXCIgXCIpKTtcbmZ1bmN0aW9uIE5hKGEsYil7XCJ0ZW1wbGF0ZVwiPT09YS5sb2NhbE5hbWUmJihhPWEuY29udGVudCk7Zm9yKHZhciBjPVwiXCIsZD1iP2IoYSk6YS5jaGlsZE5vZGVzLGU9MCxmPWQubGVuZ3RoLGc9dm9pZCAwO2U8ZiYmKGc9ZFtlXSk7ZSsrKXthOnt2YXIgaD1nO3ZhciBrPWEsbD1iO3N3aXRjaChoLm5vZGVUeXBlKXtjYXNlIE5vZGUuRUxFTUVOVF9OT0RFOms9aC5sb2NhbE5hbWU7Zm9yKHZhciBtPVwiPFwiK2sscj1oLmF0dHJpYnV0ZXMsQz0wLFM7Uz1yW0NdO0MrKyltKz1cIiBcIitTLm5hbWUrJz1cIicrUy52YWx1ZS5yZXBsYWNlKEhhLEphKSsnXCInO20rPVwiPlwiO2g9TGFba10/bTptK05hKGgsbCkrXCI8L1wiK2srXCI+XCI7YnJlYWsgYTtjYXNlIE5vZGUuVEVYVF9OT0RFOmg9aC5kYXRhO2g9ayYmTWFbay5sb2NhbE5hbWVdP2g6aC5yZXBsYWNlKElhLEphKTticmVhayBhO2Nhc2UgTm9kZS5DT01NRU5UX05PREU6aD1cIlxceDNjIS0tXCIraC5kYXRhK1wiLS1cXHgzZVwiO2JyZWFrIGE7ZGVmYXVsdDp0aHJvdyB3aW5kb3cuY29uc29sZS5lcnJvcihoKSxcbkVycm9yKFwibm90IGltcGxlbWVudGVkXCIpO319Yys9aH1yZXR1cm4gY307dmFyIEc9di5pLE9hPXtxdWVyeVNlbGVjdG9yOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLl9fc2hhZHlfbmF0aXZlX3F1ZXJ5U2VsZWN0b3IoYSl9LHF1ZXJ5U2VsZWN0b3JBbGw6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuX19zaGFkeV9uYXRpdmVfcXVlcnlTZWxlY3RvckFsbChhKX19LFBhPXt9O2Z1bmN0aW9uIFFhKGEpe1BhW2FdPWZ1bmN0aW9uKGIpe3JldHVybiBiW1wiX19zaGFkeV9uYXRpdmVfXCIrYV19fWZ1bmN0aW9uIEgoYSxiKXtBKGEsYixcIl9fc2hhZHlfbmF0aXZlX1wiKTtmb3IodmFyIGMgaW4gYilRYShjKX1mdW5jdGlvbiBJKGEsYil7Yj12b2lkIDA9PT1iP1tdOmI7Zm9yKHZhciBjPTA7YzxiLmxlbmd0aDtjKyspe3ZhciBkPWJbY10sZT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGEsZCk7ZSYmKE9iamVjdC5kZWZpbmVQcm9wZXJ0eShhLFwiX19zaGFkeV9uYXRpdmVfXCIrZCxlKSxlLnZhbHVlP09hW2RdfHwoT2FbZF09ZS52YWx1ZSk6UWEoZCkpfX1cbnZhciBKPWRvY3VtZW50LmNyZWF0ZVRyZWVXYWxrZXIoZG9jdW1lbnQsTm9kZUZpbHRlci5TSE9XX0FMTCxudWxsLCExKSxLPWRvY3VtZW50LmNyZWF0ZVRyZWVXYWxrZXIoZG9jdW1lbnQsTm9kZUZpbHRlci5TSE9XX0VMRU1FTlQsbnVsbCwhMSksUmE9ZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KFwiaW5lcnRcIik7ZnVuY3Rpb24gU2EoYSl7Zm9yKHZhciBiO2I9YS5fX3NoYWR5X25hdGl2ZV9maXJzdENoaWxkOylhLl9fc2hhZHlfbmF0aXZlX3JlbW92ZUNoaWxkKGIpfXZhciBUYT1bXCJmaXJzdEVsZW1lbnRDaGlsZFwiLFwibGFzdEVsZW1lbnRDaGlsZFwiLFwiY2hpbGRyZW5cIixcImNoaWxkRWxlbWVudENvdW50XCJdLFVhPVtcInF1ZXJ5U2VsZWN0b3JcIixcInF1ZXJ5U2VsZWN0b3JBbGxcIixcImFwcGVuZFwiLFwicHJlcGVuZFwiLFwicmVwbGFjZUNoaWxkcmVuXCJdO1xuZnVuY3Rpb24gVmEoKXt2YXIgYT1bXCJkaXNwYXRjaEV2ZW50XCIsXCJhZGRFdmVudExpc3RlbmVyXCIsXCJyZW1vdmVFdmVudExpc3RlbmVyXCJdO3dpbmRvdy5FdmVudFRhcmdldD8oSSh3aW5kb3cuRXZlbnRUYXJnZXQucHJvdG90eXBlLGEpLHZvaWQgMD09PXdpbmRvdy5fX3NoYWR5X25hdGl2ZV9hZGRFdmVudExpc3RlbmVyJiZJKFdpbmRvdy5wcm90b3R5cGUsYSkpOihJKE5vZGUucHJvdG90eXBlLGEpLEkoV2luZG93LnByb3RvdHlwZSxhKSxJKFhNTEh0dHBSZXF1ZXN0LnByb3RvdHlwZSxhKSk7Rz9JKE5vZGUucHJvdG90eXBlLFwicGFyZW50Tm9kZSBmaXJzdENoaWxkIGxhc3RDaGlsZCBwcmV2aW91c1NpYmxpbmcgbmV4dFNpYmxpbmcgY2hpbGROb2RlcyBwYXJlbnRFbGVtZW50IHRleHRDb250ZW50XCIuc3BsaXQoXCIgXCIpKTpIKE5vZGUucHJvdG90eXBlLHtwYXJlbnROb2RlOntnZXQ6ZnVuY3Rpb24oKXtKLmN1cnJlbnROb2RlPXRoaXM7cmV0dXJuIEoucGFyZW50Tm9kZSgpfX0sZmlyc3RDaGlsZDp7Z2V0OmZ1bmN0aW9uKCl7Si5jdXJyZW50Tm9kZT1cbnRoaXM7cmV0dXJuIEouZmlyc3RDaGlsZCgpfX0sbGFzdENoaWxkOntnZXQ6ZnVuY3Rpb24oKXtKLmN1cnJlbnROb2RlPXRoaXM7cmV0dXJuIEoubGFzdENoaWxkKCl9fSxwcmV2aW91c1NpYmxpbmc6e2dldDpmdW5jdGlvbigpe0ouY3VycmVudE5vZGU9dGhpcztyZXR1cm4gSi5wcmV2aW91c1NpYmxpbmcoKX19LG5leHRTaWJsaW5nOntnZXQ6ZnVuY3Rpb24oKXtKLmN1cnJlbnROb2RlPXRoaXM7cmV0dXJuIEoubmV4dFNpYmxpbmcoKX19LGNoaWxkTm9kZXM6e2dldDpmdW5jdGlvbigpe3ZhciBiPVtdO0ouY3VycmVudE5vZGU9dGhpcztmb3IodmFyIGM9Si5maXJzdENoaWxkKCk7YzspYi5wdXNoKGMpLGM9Si5uZXh0U2libGluZygpO3JldHVybiBifX0scGFyZW50RWxlbWVudDp7Z2V0OmZ1bmN0aW9uKCl7Sy5jdXJyZW50Tm9kZT10aGlzO3JldHVybiBLLnBhcmVudE5vZGUoKX19LHRleHRDb250ZW50OntnZXQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5ub2RlVHlwZSl7Y2FzZSBOb2RlLkVMRU1FTlRfTk9ERTpjYXNlIE5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERTpmb3IodmFyIGI9XG5kb2N1bWVudC5jcmVhdGVUcmVlV2Fsa2VyKHRoaXMsTm9kZUZpbHRlci5TSE9XX1RFWFQsbnVsbCwhMSksYz1cIlwiLGQ7ZD1iLm5leHROb2RlKCk7KWMrPWQubm9kZVZhbHVlO3JldHVybiBjO2RlZmF1bHQ6cmV0dXJuIHRoaXMubm9kZVZhbHVlfX0sc2V0OmZ1bmN0aW9uKGIpe2lmKFwidW5kZWZpbmVkXCI9PT10eXBlb2YgYnx8bnVsbD09PWIpYj1cIlwiO3N3aXRjaCh0aGlzLm5vZGVUeXBlKXtjYXNlIE5vZGUuRUxFTUVOVF9OT0RFOmNhc2UgTm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFOlNhKHRoaXMpOygwPGIubGVuZ3RofHx0aGlzLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUpJiZ0aGlzLl9fc2hhZHlfbmF0aXZlX2luc2VydEJlZm9yZShkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShiKSx2b2lkIDApO2JyZWFrO2RlZmF1bHQ6dGhpcy5ub2RlVmFsdWU9Yn19fX0pO0koTm9kZS5wcm90b3R5cGUsXCJhcHBlbmRDaGlsZCBpbnNlcnRCZWZvcmUgcmVtb3ZlQ2hpbGQgcmVwbGFjZUNoaWxkIGNsb25lTm9kZSBjb250YWluc1wiLnNwbGl0KFwiIFwiKSk7XG5JKEhUTUxFbGVtZW50LnByb3RvdHlwZSxbXCJwYXJlbnRFbGVtZW50XCIsXCJjb250YWluc1wiXSk7YT17Zmlyc3RFbGVtZW50Q2hpbGQ6e2dldDpmdW5jdGlvbigpe0suY3VycmVudE5vZGU9dGhpcztyZXR1cm4gSy5maXJzdENoaWxkKCl9fSxsYXN0RWxlbWVudENoaWxkOntnZXQ6ZnVuY3Rpb24oKXtLLmN1cnJlbnROb2RlPXRoaXM7cmV0dXJuIEsubGFzdENoaWxkKCl9fSxjaGlsZHJlbjp7Z2V0OmZ1bmN0aW9uKCl7dmFyIGI9W107Sy5jdXJyZW50Tm9kZT10aGlzO2Zvcih2YXIgYz1LLmZpcnN0Q2hpbGQoKTtjOyliLnB1c2goYyksYz1LLm5leHRTaWJsaW5nKCk7cmV0dXJuIHooYil9fSxjaGlsZEVsZW1lbnRDb3VudDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2hpbGRyZW4/dGhpcy5jaGlsZHJlbi5sZW5ndGg6MH19fTtHPyhJKEVsZW1lbnQucHJvdG90eXBlLFRhKSxJKEVsZW1lbnQucHJvdG90eXBlLFtcInByZXZpb3VzRWxlbWVudFNpYmxpbmdcIixcIm5leHRFbGVtZW50U2libGluZ1wiLFxuXCJpbm5lckhUTUxcIixcImNsYXNzTmFtZVwiXSksSShIVE1MRWxlbWVudC5wcm90b3R5cGUsW1wiY2hpbGRyZW5cIixcImlubmVySFRNTFwiLFwiY2xhc3NOYW1lXCJdKSk6KEgoRWxlbWVudC5wcm90b3R5cGUsYSksSChFbGVtZW50LnByb3RvdHlwZSx7cHJldmlvdXNFbGVtZW50U2libGluZzp7Z2V0OmZ1bmN0aW9uKCl7Sy5jdXJyZW50Tm9kZT10aGlzO3JldHVybiBLLnByZXZpb3VzU2libGluZygpfX0sbmV4dEVsZW1lbnRTaWJsaW5nOntnZXQ6ZnVuY3Rpb24oKXtLLmN1cnJlbnROb2RlPXRoaXM7cmV0dXJuIEsubmV4dFNpYmxpbmcoKX19LGlubmVySFRNTDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIE5hKHRoaXMsc2EpfSxzZXQ6ZnVuY3Rpb24oYil7dmFyIGM9XCJ0ZW1wbGF0ZVwiPT09dGhpcy5sb2NhbE5hbWU/dGhpcy5jb250ZW50OnRoaXM7U2EoYyk7dmFyIGQ9dGhpcy5sb2NhbE5hbWV8fFwiZGl2XCI7ZD10aGlzLm5hbWVzcGFjZVVSSSYmdGhpcy5uYW1lc3BhY2VVUkkhPT1SYS5uYW1lc3BhY2VVUkk/XG5SYS5jcmVhdGVFbGVtZW50TlModGhpcy5uYW1lc3BhY2VVUkksZCk6UmEuY3JlYXRlRWxlbWVudChkKTtkLmlubmVySFRNTD1iO2ZvcihiPVwidGVtcGxhdGVcIj09PXRoaXMubG9jYWxOYW1lP2QuY29udGVudDpkO2Q9Yi5fX3NoYWR5X25hdGl2ZV9maXJzdENoaWxkOyljLl9fc2hhZHlfbmF0aXZlX2luc2VydEJlZm9yZShkLHZvaWQgMCl9fSxjbGFzc05hbWU6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldEF0dHJpYnV0ZShcImNsYXNzXCIpfHxcIlwifSxzZXQ6ZnVuY3Rpb24oYil7dGhpcy5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLGIpfX19KSk7SShFbGVtZW50LnByb3RvdHlwZSxcInNldEF0dHJpYnV0ZSBnZXRBdHRyaWJ1dGUgaGFzQXR0cmlidXRlIHJlbW92ZUF0dHJpYnV0ZSB0b2dnbGVBdHRyaWJ1dGUgZm9jdXMgYmx1clwiLnNwbGl0KFwiIFwiKSk7SShFbGVtZW50LnByb3RvdHlwZSxVYSk7SShIVE1MRWxlbWVudC5wcm90b3R5cGUsW1wiZm9jdXNcIixcImJsdXJcIl0pO3dpbmRvdy5IVE1MVGVtcGxhdGVFbGVtZW50JiZcbkkod2luZG93LkhUTUxUZW1wbGF0ZUVsZW1lbnQucHJvdG90eXBlLFtcImlubmVySFRNTFwiXSk7Rz9JKERvY3VtZW50RnJhZ21lbnQucHJvdG90eXBlLFRhKTpIKERvY3VtZW50RnJhZ21lbnQucHJvdG90eXBlLGEpO0koRG9jdW1lbnRGcmFnbWVudC5wcm90b3R5cGUsVWEpO0c/KEkoRG9jdW1lbnQucHJvdG90eXBlLFRhKSxJKERvY3VtZW50LnByb3RvdHlwZSxbXCJhY3RpdmVFbGVtZW50XCJdKSk6SChEb2N1bWVudC5wcm90b3R5cGUsYSk7SShEb2N1bWVudC5wcm90b3R5cGUsW1wiaW1wb3J0Tm9kZVwiLFwiZ2V0RWxlbWVudEJ5SWRcIixcImVsZW1lbnRGcm9tUG9pbnRcIixpYSgpXSk7SShEb2N1bWVudC5wcm90b3R5cGUsVWEpfTt2YXIgV2E9Qih7Z2V0IGNoaWxkTm9kZXMoKXtyZXR1cm4gdGhpcy5fX3NoYWR5X2NoaWxkTm9kZXN9LGdldCBmaXJzdENoaWxkKCl7cmV0dXJuIHRoaXMuX19zaGFkeV9maXJzdENoaWxkfSxnZXQgbGFzdENoaWxkKCl7cmV0dXJuIHRoaXMuX19zaGFkeV9sYXN0Q2hpbGR9LGdldCBjaGlsZEVsZW1lbnRDb3VudCgpe3JldHVybiB0aGlzLl9fc2hhZHlfY2hpbGRFbGVtZW50Q291bnR9LGdldCBjaGlsZHJlbigpe3JldHVybiB0aGlzLl9fc2hhZHlfY2hpbGRyZW59LGdldCBmaXJzdEVsZW1lbnRDaGlsZCgpe3JldHVybiB0aGlzLl9fc2hhZHlfZmlyc3RFbGVtZW50Q2hpbGR9LGdldCBsYXN0RWxlbWVudENoaWxkKCl7cmV0dXJuIHRoaXMuX19zaGFkeV9sYXN0RWxlbWVudENoaWxkfSxnZXQgc2hhZG93Um9vdCgpe3JldHVybiB0aGlzLl9fc2hhZHlfc2hhZG93Um9vdH19KSxYYT1CKHtnZXQgdGV4dENvbnRlbnQoKXtyZXR1cm4gdGhpcy5fX3NoYWR5X3RleHRDb250ZW50fSxzZXQgdGV4dENvbnRlbnQoYSl7dGhpcy5fX3NoYWR5X3RleHRDb250ZW50PVxuYX0sZ2V0IGlubmVySFRNTCgpe3JldHVybiB0aGlzLl9fc2hhZHlfaW5uZXJIVE1MfSxzZXQgaW5uZXJIVE1MKGEpe3RoaXMuX19zaGFkeV9pbm5lckhUTUw9YX19KSxZYT1CKHtnZXQgcGFyZW50RWxlbWVudCgpe3JldHVybiB0aGlzLl9fc2hhZHlfcGFyZW50RWxlbWVudH0sZ2V0IHBhcmVudE5vZGUoKXtyZXR1cm4gdGhpcy5fX3NoYWR5X3BhcmVudE5vZGV9LGdldCBuZXh0U2libGluZygpe3JldHVybiB0aGlzLl9fc2hhZHlfbmV4dFNpYmxpbmd9LGdldCBwcmV2aW91c1NpYmxpbmcoKXtyZXR1cm4gdGhpcy5fX3NoYWR5X3ByZXZpb3VzU2libGluZ30sZ2V0IG5leHRFbGVtZW50U2libGluZygpe3JldHVybiB0aGlzLl9fc2hhZHlfbmV4dEVsZW1lbnRTaWJsaW5nfSxnZXQgcHJldmlvdXNFbGVtZW50U2libGluZygpe3JldHVybiB0aGlzLl9fc2hhZHlfcHJldmlvdXNFbGVtZW50U2libGluZ30sZ2V0IGNsYXNzTmFtZSgpe3JldHVybiB0aGlzLl9fc2hhZHlfY2xhc3NOYW1lfSxzZXQgY2xhc3NOYW1lKGEpe3RoaXMuX19zaGFkeV9jbGFzc05hbWU9XG5hfX0pO2Z1bmN0aW9uIFphKGEpe2Zvcih2YXIgYiBpbiBhKXt2YXIgYz1hW2JdO2MmJihjLmVudW1lcmFibGU9ITEpfX1aYShXYSk7WmEoWGEpO1phKFlhKTt2YXIgJGE9di5pfHwhMD09PXYubCxhYj0kYT9mdW5jdGlvbigpe306ZnVuY3Rpb24oYSl7dmFyIGI9dChhKTtiLlh8fChiLlg9ITAsdmEoYSxZYSkpfSxiYj0kYT9mdW5jdGlvbigpe306ZnVuY3Rpb24oYSl7dmFyIGI9dChhKTtiLld8fChiLlc9ITAsdmEoYSxXYSksd2luZG93LmN1c3RvbUVsZW1lbnRzJiZ3aW5kb3cuY3VzdG9tRWxlbWVudHMucG9seWZpbGxXcmFwRmx1c2hDYWxsYmFjayYmIXYubHx8dmEoYSxYYSkpfTt2YXIgTD1cIl9fZXZlbnRXcmFwcGVyc1wiK0RhdGUubm93KCksY2I9ZnVuY3Rpb24oKXt2YXIgYT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEV2ZW50LnByb3RvdHlwZSxcImNvbXBvc2VkXCIpO3JldHVybiBhP2Z1bmN0aW9uKGIpe3JldHVybiBhLmdldC5jYWxsKGIpfTpudWxsfSgpLGRiPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYSgpe312YXIgYj0hMSxjPXtnZXQgY2FwdHVyZSgpe2I9ITA7cmV0dXJuITF9fTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInRlc3RcIixhLGMpO3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwidGVzdFwiLGEsYyk7cmV0dXJuIGJ9KCk7ZnVuY3Rpb24gZWIoYSl7aWYobnVsbD09PWF8fFwib2JqZWN0XCIhPT10eXBlb2YgYSYmXCJmdW5jdGlvblwiIT09dHlwZW9mIGEpe3ZhciBiPSEhYTt2YXIgYz0hMX1lbHNle2I9ISFhLmNhcHR1cmU7Yz0hIWEub25jZTt2YXIgZD1hLm99cmV0dXJue1U6ZCxjYXB0dXJlOmIsb25jZTpjLFQ6ZGI/YTpifX1cbnZhciBmYj17Ymx1cjohMCxmb2N1czohMCxmb2N1c2luOiEwLGZvY3Vzb3V0OiEwLGNsaWNrOiEwLGRibGNsaWNrOiEwLG1vdXNlZG93bjohMCxtb3VzZWVudGVyOiEwLG1vdXNlbGVhdmU6ITAsbW91c2Vtb3ZlOiEwLG1vdXNlb3V0OiEwLG1vdXNlb3ZlcjohMCxtb3VzZXVwOiEwLHdoZWVsOiEwLGJlZm9yZWlucHV0OiEwLGlucHV0OiEwLGtleWRvd246ITAsa2V5dXA6ITAsY29tcG9zaXRpb25zdGFydDohMCxjb21wb3NpdGlvbnVwZGF0ZTohMCxjb21wb3NpdGlvbmVuZDohMCx0b3VjaHN0YXJ0OiEwLHRvdWNoZW5kOiEwLHRvdWNobW92ZTohMCx0b3VjaGNhbmNlbDohMCxwb2ludGVyb3ZlcjohMCxwb2ludGVyZW50ZXI6ITAscG9pbnRlcmRvd246ITAscG9pbnRlcm1vdmU6ITAscG9pbnRlcnVwOiEwLHBvaW50ZXJjYW5jZWw6ITAscG9pbnRlcm91dDohMCxwb2ludGVybGVhdmU6ITAsZ290cG9pbnRlcmNhcHR1cmU6ITAsbG9zdHBvaW50ZXJjYXB0dXJlOiEwLGRyYWdzdGFydDohMCxcbmRyYWc6ITAsZHJhZ2VudGVyOiEwLGRyYWdsZWF2ZTohMCxkcmFnb3ZlcjohMCxkcm9wOiEwLGRyYWdlbmQ6ITAsRE9NQWN0aXZhdGU6ITAsRE9NRm9jdXNJbjohMCxET01Gb2N1c091dDohMCxrZXlwcmVzczohMH0sZ2I9e0RPTUF0dHJNb2RpZmllZDohMCxET01BdHRyaWJ1dGVOYW1lQ2hhbmdlZDohMCxET01DaGFyYWN0ZXJEYXRhTW9kaWZpZWQ6ITAsRE9NRWxlbWVudE5hbWVDaGFuZ2VkOiEwLERPTU5vZGVJbnNlcnRlZDohMCxET01Ob2RlSW5zZXJ0ZWRJbnRvRG9jdW1lbnQ6ITAsRE9NTm9kZVJlbW92ZWQ6ITAsRE9NTm9kZVJlbW92ZWRGcm9tRG9jdW1lbnQ6ITAsRE9NU3VidHJlZU1vZGlmaWVkOiEwfTtmdW5jdGlvbiBoYihhKXtyZXR1cm4gYSBpbnN0YW5jZW9mIE5vZGU/YS5fX3NoYWR5X2dldFJvb3ROb2RlKCk6YX1cbmZ1bmN0aW9uIE0oYSxiKXt2YXIgYz1bXSxkPWE7Zm9yKGE9aGIoYSk7ZDspYy5wdXNoKGQpLGQ9ZC5fX3NoYWR5X2Fzc2lnbmVkU2xvdD9kLl9fc2hhZHlfYXNzaWduZWRTbG90OmQubm9kZVR5cGU9PT1Ob2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUmJmQuaG9zdCYmKGJ8fGQhPT1hKT9kLmhvc3Q6ZC5fX3NoYWR5X3BhcmVudE5vZGU7Y1tjLmxlbmd0aC0xXT09PWRvY3VtZW50JiZjLnB1c2god2luZG93KTtyZXR1cm4gY31mdW5jdGlvbiBpYihhKXthLl9fY29tcG9zZWRQYXRofHwoYS5fX2NvbXBvc2VkUGF0aD1NKGEudGFyZ2V0LCEwKSk7cmV0dXJuIGEuX19jb21wb3NlZFBhdGh9ZnVuY3Rpb24gamIoYSxiKXtpZigheClyZXR1cm4gYTthPU0oYSwhMCk7Zm9yKHZhciBjPTAsZCxlPXZvaWQgMCxmLGc9dm9pZCAwO2M8Yi5sZW5ndGg7YysrKWlmKGQ9YltjXSxmPWhiKGQpLGYhPT1lJiYoZz1hLmluZGV4T2YoZiksZT1mKSwheChmKXx8LTE8ZylyZXR1cm4gZH1cbnZhciBrYj17Z2V0IGNvbXBvc2VkKCl7dm9pZCAwPT09dGhpcy5fX2NvbXBvc2VkJiYoY2I/dGhpcy5fX2NvbXBvc2VkPVwiZm9jdXNpblwiPT09dGhpcy50eXBlfHxcImZvY3Vzb3V0XCI9PT10aGlzLnR5cGV8fGNiKHRoaXMpOiExIT09dGhpcy5pc1RydXN0ZWQmJih0aGlzLl9fY29tcG9zZWQ9ZmJbdGhpcy50eXBlXSkpO3JldHVybiB0aGlzLl9fY29tcG9zZWR8fCExfSxjb21wb3NlZFBhdGg6ZnVuY3Rpb24oKXt0aGlzLl9fY29tcG9zZWRQYXRofHwodGhpcy5fX2NvbXBvc2VkUGF0aD1NKHRoaXMuX190YXJnZXQsdGhpcy5jb21wb3NlZCkpO3JldHVybiB0aGlzLl9fY29tcG9zZWRQYXRofSxnZXQgdGFyZ2V0KCl7cmV0dXJuIGpiKHRoaXMuY3VycmVudFRhcmdldHx8dGhpcy5fX3ByZXZpb3VzQ3VycmVudFRhcmdldCx0aGlzLmNvbXBvc2VkUGF0aCgpKX0sZ2V0IHJlbGF0ZWRUYXJnZXQoKXtpZighdGhpcy5fX3JlbGF0ZWRUYXJnZXQpcmV0dXJuIG51bGw7dGhpcy5fX3JlbGF0ZWRUYXJnZXRDb21wb3NlZFBhdGh8fFxuKHRoaXMuX19yZWxhdGVkVGFyZ2V0Q29tcG9zZWRQYXRoPU0odGhpcy5fX3JlbGF0ZWRUYXJnZXQsITApKTtyZXR1cm4gamIodGhpcy5jdXJyZW50VGFyZ2V0fHx0aGlzLl9fcHJldmlvdXNDdXJyZW50VGFyZ2V0LHRoaXMuX19yZWxhdGVkVGFyZ2V0Q29tcG9zZWRQYXRoKX0sc3RvcFByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7RXZlbnQucHJvdG90eXBlLnN0b3BQcm9wYWdhdGlvbi5jYWxsKHRoaXMpO3RoaXMuSz0hMH0sc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7RXZlbnQucHJvdG90eXBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbi5jYWxsKHRoaXMpO3RoaXMuSz10aGlzLl9faW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkPSEwfX0sbGI9di5pJiZPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEV2ZW50LnByb3RvdHlwZSxcImV2ZW50UGhhc2VcIik7XG5sYiYmKE9iamVjdC5kZWZpbmVQcm9wZXJ0eShrYixcImV2ZW50UGhhc2VcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudFRhcmdldD09PXRoaXMudGFyZ2V0P0V2ZW50LkFUX1RBUkdFVDp0aGlzLl9fc2hhZHlfbmF0aXZlX2V2ZW50UGhhc2V9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGtiLFwiX19zaGFkeV9uYXRpdmVfZXZlbnRQaGFzZVwiLGxiKSk7ZnVuY3Rpb24gbWIoYSl7ZnVuY3Rpb24gYihjLGQpe2M9bmV3IGEoYyxkKTtjLl9fY29tcG9zZWQ9ZCYmISFkLmNvbXBvc2VkO3JldHVybiBjfWIuX19wcm90b19fPWE7Yi5wcm90b3R5cGU9YS5wcm90b3R5cGU7cmV0dXJuIGJ9dmFyIG5iPXtmb2N1czohMCxibHVyOiEwfTtmdW5jdGlvbiBvYihhKXtyZXR1cm4gYS5fX3RhcmdldCE9PWEudGFyZ2V0fHxhLl9fcmVsYXRlZFRhcmdldCE9PWEucmVsYXRlZFRhcmdldH1cbmZ1bmN0aW9uIHBiKGEsYixjKXtpZihjPWIuX19oYW5kbGVycyYmYi5fX2hhbmRsZXJzW2EudHlwZV0mJmIuX19oYW5kbGVyc1thLnR5cGVdW2NdKWZvcih2YXIgZD0wLGU7KGU9Y1tkXSkmJighb2IoYSl8fGEudGFyZ2V0IT09YS5yZWxhdGVkVGFyZ2V0KSYmKGUuY2FsbChiLGEpLCFhLl9faW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKTtkKyspO312YXIgcWI9KG5ldyBFdmVudChcImVcIikpLmhhc093blByb3BlcnR5KFwiY3VycmVudFRhcmdldFwiKTtcbmZ1bmN0aW9uIHJiKGEpe2E9cWI/T2JqZWN0LmNyZWF0ZShhKTphO3ZhciBiPWEuY29tcG9zZWRQYXRoKCksYz1iLm1hcChmdW5jdGlvbihtKXtyZXR1cm4gamIobSxiKX0pLGQ9YS5idWJibGVzLGU9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihhLFwiY3VycmVudFRhcmdldFwiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoYSxcImN1cnJlbnRUYXJnZXRcIix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGt9fSk7dmFyIGY9RXZlbnQuQ0FQVFVSSU5HX1BIQVNFLGc9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihhLFwiZXZlbnRQaGFzZVwiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoYSxcImV2ZW50UGhhc2VcIix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGZ9fSk7dHJ5e2Zvcih2YXIgaD1iLmxlbmd0aC0xOzA8PWg7aC0tKXt2YXIgaz1iW2hdO2Y9az09PWNbaF0/RXZlbnQuQVRfVEFSR0VUOlxuRXZlbnQuQ0FQVFVSSU5HX1BIQVNFO3BiKGEsayxcImNhcHR1cmVcIik7aWYoYS5LKXJldHVybn1mb3IoaD0wO2g8Yi5sZW5ndGg7aCsrKXtrPWJbaF07dmFyIGw9az09PWNbaF07aWYobHx8ZClpZihmPWw/RXZlbnQuQVRfVEFSR0VUOkV2ZW50LkJVQkJMSU5HX1BIQVNFLHBiKGEsayxcImJ1YmJsZVwiKSxhLkspYnJlYWt9fWZpbmFsbHl7cWJ8fChlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShhLFwiY3VycmVudFRhcmdldFwiLGUpOmRlbGV0ZSBhLmN1cnJlbnRUYXJnZXQsZz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYSxcImV2ZW50UGhhc2VcIixnKTpkZWxldGUgYS5ldmVudFBoYXNlKX19ZnVuY3Rpb24gc2IoYSxiLGMsZCl7Zm9yKHZhciBlPTA7ZTxhLmxlbmd0aDtlKyspe3ZhciBmPWFbZV0sZz1mLnR5cGUsaD1mLmNhcHR1cmU7aWYoYj09PWYubm9kZSYmYz09PWcmJmQ9PT1oKXJldHVybiBlfXJldHVybi0xfVxuZnVuY3Rpb24gdGIoYSl7RigpO3JldHVybiF2LkMmJnRoaXMgaW5zdGFuY2VvZiBOb2RlJiYhcWEoZG9jdW1lbnQsdGhpcyk/KGEuX190YXJnZXR8fHViKGEsdGhpcykscmIoYSkpOnRoaXMuX19zaGFkeV9uYXRpdmVfZGlzcGF0Y2hFdmVudChhKX1cbmZ1bmN0aW9uIHZiKGEsYixjKXt2YXIgZD10aGlzLGU9ZWIoYyksZj1lLmNhcHR1cmUsZz1lLm9uY2UsaD1lLlU7ZT1lLlQ7aWYoYil7dmFyIGs9dHlwZW9mIGI7aWYoXCJmdW5jdGlvblwiPT09a3x8XCJvYmplY3RcIj09PWspaWYoXCJvYmplY3RcIiE9PWt8fGIuaGFuZGxlRXZlbnQmJlwiZnVuY3Rpb25cIj09PXR5cGVvZiBiLmhhbmRsZUV2ZW50KXtpZihnYlthXSlyZXR1cm4gdGhpcy5fX3NoYWR5X25hdGl2ZV9hZGRFdmVudExpc3RlbmVyKGEsYixlKTt2YXIgbD1ofHx0aGlzO2lmKGg9YltMXSl7aWYoLTE8c2IoaCxsLGEsZikpcmV0dXJufWVsc2UgYltMXT1bXTtoPWZ1bmN0aW9uKG0pe2cmJmQuX19zaGFkeV9yZW1vdmVFdmVudExpc3RlbmVyKGEsYixjKTttLl9fdGFyZ2V0fHx1YihtKTtpZihsIT09ZCl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLFwiY3VycmVudFRhcmdldFwiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkobSxcImN1cnJlbnRUYXJnZXRcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGx9LFxuY29uZmlndXJhYmxlOiEwfSk7dmFyIEM9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLFwiZXZlbnRQaGFzZVwiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkobSxcImV2ZW50UGhhc2VcIix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGY/RXZlbnQuQ0FQVFVSSU5HX1BIQVNFOkV2ZW50LkJVQkJMSU5HX1BIQVNFfX0pfW0uX19wcmV2aW91c0N1cnJlbnRUYXJnZXQ9bS5jdXJyZW50VGFyZ2V0O2lmKCF4KGwpJiZcInNsb3RcIiE9PWwubG9jYWxOYW1lfHwtMSE9bS5jb21wb3NlZFBhdGgoKS5pbmRleE9mKGwpKWlmKG0uY29tcG9zZWR8fC0xPG0uY29tcG9zZWRQYXRoKCkuaW5kZXhPZihsKSlpZihvYihtKSYmbS50YXJnZXQ9PT1tLnJlbGF0ZWRUYXJnZXQpbS5ldmVudFBoYXNlPT09RXZlbnQuQlVCQkxJTkdfUEhBU0UmJm0uc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7ZWxzZSBpZihtLmV2ZW50UGhhc2U9PT1FdmVudC5DQVBUVVJJTkdfUEhBU0V8fFxubS5idWJibGVzfHxtLnRhcmdldD09PWx8fGwgaW5zdGFuY2VvZiBXaW5kb3cpe3ZhciBTPVwiZnVuY3Rpb25cIj09PWs/Yi5jYWxsKGwsbSk6Yi5oYW5kbGVFdmVudCYmYi5oYW5kbGVFdmVudChtKTtsIT09ZCYmKHI/KE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtLFwiY3VycmVudFRhcmdldFwiLHIpLHI9bnVsbCk6ZGVsZXRlIG0uY3VycmVudFRhcmdldCxDPyhPYmplY3QuZGVmaW5lUHJvcGVydHkobSxcImV2ZW50UGhhc2VcIixDKSxDPW51bGwpOmRlbGV0ZSBtLmV2ZW50UGhhc2UpO3JldHVybiBTfX07YltMXS5wdXNoKHtub2RlOmwsdHlwZTphLGNhcHR1cmU6ZixmYTpofSk7dGhpcy5fX2hhbmRsZXJzPXRoaXMuX19oYW5kbGVyc3x8e307dGhpcy5fX2hhbmRsZXJzW2FdPXRoaXMuX19oYW5kbGVyc1thXXx8e2NhcHR1cmU6W10sYnViYmxlOltdfTt0aGlzLl9faGFuZGxlcnNbYV1bZj9cImNhcHR1cmVcIjpcImJ1YmJsZVwiXS5wdXNoKGgpO25iW2FdfHx0aGlzLl9fc2hhZHlfbmF0aXZlX2FkZEV2ZW50TGlzdGVuZXIoYSxcbmgsZSl9fX1mdW5jdGlvbiB3YihhLGIsYyl7aWYoYil7dmFyIGQ9ZWIoYyk7Yz1kLmNhcHR1cmU7dmFyIGU9ZC5VO2Q9ZC5UO2lmKGdiW2FdKXJldHVybiB0aGlzLl9fc2hhZHlfbmF0aXZlX3JlbW92ZUV2ZW50TGlzdGVuZXIoYSxiLGQpO3ZhciBmPWV8fHRoaXM7ZT12b2lkIDA7dmFyIGc9bnVsbDt0cnl7Zz1iW0xdfWNhdGNoKGgpe31nJiYoZj1zYihnLGYsYSxjKSwtMTxmJiYoZT1nLnNwbGljZShmLDEpWzBdLmZhLGcubGVuZ3RofHwoYltMXT12b2lkIDApKSk7dGhpcy5fX3NoYWR5X25hdGl2ZV9yZW1vdmVFdmVudExpc3RlbmVyKGEsZXx8YixkKTtlJiZ0aGlzLl9faGFuZGxlcnMmJnRoaXMuX19oYW5kbGVyc1thXSYmKGE9dGhpcy5fX2hhbmRsZXJzW2FdW2M/XCJjYXB0dXJlXCI6XCJidWJibGVcIl0sYj1hLmluZGV4T2YoZSksLTE8YiYmYS5zcGxpY2UoYiwxKSl9fVxuZnVuY3Rpb24geGIoKXtmb3IodmFyIGEgaW4gbmIpd2luZG93Ll9fc2hhZHlfbmF0aXZlX2FkZEV2ZW50TGlzdGVuZXIoYSxmdW5jdGlvbihiKXtiLl9fdGFyZ2V0fHwodWIoYikscmIoYikpfSwhMCl9dmFyIHliPUIoa2IpO2Z1bmN0aW9uIHViKGEsYil7Yj12b2lkIDA9PT1iP2EudGFyZ2V0OmI7YS5fX3RhcmdldD1iO2EuX19yZWxhdGVkVGFyZ2V0PWEucmVsYXRlZFRhcmdldDtpZih2Lmkpe2I9T2JqZWN0LmdldFByb3RvdHlwZU9mKGEpO2lmKCFiLmhhc093blByb3BlcnR5KFwiX19zaGFkeV9wYXRjaGVkUHJvdG9cIikpe3ZhciBjPU9iamVjdC5jcmVhdGUoYik7Yy5fX3NoYWR5X3NvdXJjZVByb3RvPWI7QShjLHliKTtiLl9fc2hhZHlfcGF0Y2hlZFByb3RvPWN9YS5fX3Byb3RvX189Yi5fX3NoYWR5X3BhdGNoZWRQcm90b31lbHNlIEEoYSx5Yil9dmFyIHpiPW1iKEV2ZW50KSxBYj1tYihDdXN0b21FdmVudCksQmI9bWIoTW91c2VFdmVudCk7XG5mdW5jdGlvbiBDYigpe2lmKCFjYiYmT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihFdmVudC5wcm90b3R5cGUsXCJpc1RydXN0ZWRcIikpe3ZhciBhPWZ1bmN0aW9uKCl7dmFyIGI9bmV3IE1vdXNlRXZlbnQoXCJjbGlja1wiLHtidWJibGVzOiEwLGNhbmNlbGFibGU6ITAsY29tcG9zZWQ6ITB9KTt0aGlzLl9fc2hhZHlfZGlzcGF0Y2hFdmVudChiKX07RWxlbWVudC5wcm90b3R5cGUuY2xpY2s/RWxlbWVudC5wcm90b3R5cGUuY2xpY2s9YTpIVE1MRWxlbWVudC5wcm90b3R5cGUuY2xpY2smJihIVE1MRWxlbWVudC5wcm90b3R5cGUuY2xpY2s9YSl9fVxudmFyIERiPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKEVsZW1lbnQucHJvdG90eXBlKS5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuXCJvblwiPT09YS5zdWJzdHJpbmcoMCwyKX0pLEViPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKEhUTUxFbGVtZW50LnByb3RvdHlwZSkuZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVyblwib25cIj09PWEuc3Vic3RyaW5nKDAsMil9KTtmdW5jdGlvbiBGYihhKXtyZXR1cm57c2V0OmZ1bmN0aW9uKGIpe3ZhciBjPXQodGhpcyksZD1hLnN1YnN0cmluZygyKTtjLm18fChjLm09e30pO2MubVthXSYmdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGQsYy5tW2FdKTt0aGlzLl9fc2hhZHlfYWRkRXZlbnRMaXN0ZW5lcihkLGIpO2MubVthXT1ifSxnZXQ6ZnVuY3Rpb24oKXt2YXIgYj11KHRoaXMpO3JldHVybiBiJiZiLm0mJmIubVthXX0sY29uZmlndXJhYmxlOiEwfX07ZnVuY3Rpb24gTihhLGIpe3JldHVybntpbmRleDphLEQ6W10sRzpifX1cbmZ1bmN0aW9uIEdiKGEsYixjLGQpe3ZhciBlPTAsZj0wLGc9MCxoPTAsaz1NYXRoLm1pbihiLWUsZC1mKTtpZigwPT1lJiYwPT1mKWE6e2ZvcihnPTA7ZzxrO2crKylpZihhW2ddIT09Y1tnXSlicmVhayBhO2c9a31pZihiPT1hLmxlbmd0aCYmZD09Yy5sZW5ndGgpe2g9YS5sZW5ndGg7Zm9yKHZhciBsPWMubGVuZ3RoLG09MDttPGstZyYmSGIoYVstLWhdLGNbLS1sXSk7KW0rKztoPW19ZSs9ZztmKz1nO2ItPWg7ZC09aDtpZigwPT1iLWUmJjA9PWQtZilyZXR1cm5bXTtpZihlPT1iKXtmb3IoYj1OKGUsMCk7ZjxkOyliLkQucHVzaChjW2YrK10pO3JldHVybltiXX1pZihmPT1kKXJldHVybltOKGUsYi1lKV07az1lO2c9ZjtkPWQtZysxO2g9Yi1rKzE7Yj1BcnJheShkKTtmb3IobD0wO2w8ZDtsKyspYltsXT1BcnJheShoKSxiW2xdWzBdPWw7Zm9yKGw9MDtsPGg7bCsrKWJbMF1bbF09bDtmb3IobD0xO2w8ZDtsKyspZm9yKG09MTttPGg7bSsrKWlmKGFbayttLTFdPT09Y1tnK2wtMV0pYltsXVttXT1cbmJbbC0xXVttLTFdO2Vsc2V7dmFyIHI9YltsLTFdW21dKzEsQz1iW2xdW20tMV0rMTtiW2xdW21dPXI8Qz9yOkN9az1iLmxlbmd0aC0xO2c9YlswXS5sZW5ndGgtMTtkPWJba11bZ107Zm9yKGE9W107MDxrfHwwPGc7KTA9PWs/KGEucHVzaCgyKSxnLS0pOjA9PWc/KGEucHVzaCgzKSxrLS0pOihoPWJbay0xXVtnLTFdLGw9YltrLTFdW2ddLG09YltrXVtnLTFdLHI9bDxtP2w8aD9sOmg6bTxoP206aCxyPT1oPyhoPT1kP2EucHVzaCgwKTooYS5wdXNoKDEpLGQ9aCksay0tLGctLSk6cj09bD8oYS5wdXNoKDMpLGstLSxkPWwpOihhLnB1c2goMiksZy0tLGQ9bSkpO2EucmV2ZXJzZSgpO2I9dm9pZCAwO2s9W107Zm9yKGc9MDtnPGEubGVuZ3RoO2crKylzd2l0Y2goYVtnXSl7Y2FzZSAwOmImJihrLnB1c2goYiksYj12b2lkIDApO2UrKztmKys7YnJlYWs7Y2FzZSAxOmJ8fChiPU4oZSwwKSk7Yi5HKys7ZSsrO2IuRC5wdXNoKGNbZl0pO2YrKzticmVhaztjYXNlIDI6Ynx8KGI9TihlLDApKTtcbmIuRysrO2UrKzticmVhaztjYXNlIDM6Ynx8KGI9TihlLDApKSxiLkQucHVzaChjW2ZdKSxmKyt9YiYmay5wdXNoKGIpO3JldHVybiBrfWZ1bmN0aW9uIEhiKGEsYil7cmV0dXJuIGE9PT1ifTt2YXIgSWI9Qih7ZGlzcGF0Y2hFdmVudDp0YixhZGRFdmVudExpc3RlbmVyOnZiLHJlbW92ZUV2ZW50TGlzdGVuZXI6d2J9KTt2YXIgSmI9bnVsbDtmdW5jdGlvbiBPKCl7SmJ8fChKYj13aW5kb3cuU2hhZHlDU1MmJndpbmRvdy5TaGFkeUNTUy5TY29waW5nU2hpbSk7cmV0dXJuIEpifHxudWxsfWZ1bmN0aW9uIEtiKGEsYixjKXt2YXIgZD1PKCk7cmV0dXJuIGQmJlwiY2xhc3NcIj09PWI/KGQuc2V0RWxlbWVudENsYXNzKGEsYyksITApOiExfWZ1bmN0aW9uIExiKGEsYil7dmFyIGM9TygpO2MmJmMudW5zY29wZU5vZGUoYSxiKX1mdW5jdGlvbiBNYihhLGIpe3ZhciBjPU8oKTtpZighYylyZXR1cm4hMDtpZihhLm5vZGVUeXBlPT09Tm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFKXtjPSEwO2ZvcihhPWEuX19zaGFkeV9maXJzdENoaWxkO2E7YT1hLl9fc2hhZHlfbmV4dFNpYmxpbmcpYz1jJiZNYihhLGIpO3JldHVybiBjfXJldHVybiBhLm5vZGVUeXBlIT09Tm9kZS5FTEVNRU5UX05PREU/ITA6Yy5jdXJyZW50U2NvcGVGb3JOb2RlKGEpPT09Yn1cbmZ1bmN0aW9uIE5iKGEpe2lmKGEubm9kZVR5cGUhPT1Ob2RlLkVMRU1FTlRfTk9ERSlyZXR1cm5cIlwiO3ZhciBiPU8oKTtyZXR1cm4gYj9iLmN1cnJlbnRTY29wZUZvck5vZGUoYSk6XCJcIn1mdW5jdGlvbiBPYihhLGIpe2lmKGEpZm9yKGEubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERSYmYihhKSxhPWEuX19zaGFkeV9maXJzdENoaWxkO2E7YT1hLl9fc2hhZHlfbmV4dFNpYmxpbmcpYS5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFJiZPYihhLGIpfTt2YXIgUGI9d2luZG93LmRvY3VtZW50LFFiPXYuQyxSYj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE5vZGUucHJvdG90eXBlLFwiaXNDb25uZWN0ZWRcIiksU2I9UmImJlJiLmdldDtmdW5jdGlvbiBUYihhKXtmb3IodmFyIGI7Yj1hLl9fc2hhZHlfZmlyc3RDaGlsZDspYS5fX3NoYWR5X3JlbW92ZUNoaWxkKGIpfWZ1bmN0aW9uIFViKGEpe3ZhciBiPXUoYSk7aWYoYiYmdm9pZCAwIT09Yi5KKWZvcihiPWEuX19zaGFkeV9maXJzdENoaWxkO2I7Yj1iLl9fc2hhZHlfbmV4dFNpYmxpbmcpVWIoYik7aWYoYT11KGEpKWEuSj12b2lkIDB9ZnVuY3Rpb24gVmIoYSl7dmFyIGI9YTtpZihhJiZcInNsb3RcIj09PWEubG9jYWxOYW1lKXt2YXIgYz11KGEpOyhjPWMmJmMudSkmJihiPWMubGVuZ3RoP2NbMF06VmIoYS5fX3NoYWR5X25leHRTaWJsaW5nKSl9cmV0dXJuIGJ9XG5mdW5jdGlvbiBXYihhLGIsYyl7aWYoYT0oYT11KGEpKSYmYS5CKXtpZihiKWlmKGIubm9kZVR5cGU9PT1Ob2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUpZm9yKHZhciBkPTAsZT1iLmNoaWxkTm9kZXMubGVuZ3RoO2Q8ZTtkKyspYS5hZGRlZE5vZGVzLnB1c2goYi5jaGlsZE5vZGVzW2RdKTtlbHNlIGEuYWRkZWROb2Rlcy5wdXNoKGIpO2MmJmEucmVtb3ZlZE5vZGVzLnB1c2goYyk7RGEoYSl9fVxudmFyIGFjPUIoe2dldCBwYXJlbnROb2RlKCl7dmFyIGE9dSh0aGlzKTthPWEmJmEucGFyZW50Tm9kZTtyZXR1cm4gdm9pZCAwIT09YT9hOnRoaXMuX19zaGFkeV9uYXRpdmVfcGFyZW50Tm9kZX0sZ2V0IGZpcnN0Q2hpbGQoKXt2YXIgYT11KHRoaXMpO2E9YSYmYS5maXJzdENoaWxkO3JldHVybiB2b2lkIDAhPT1hP2E6dGhpcy5fX3NoYWR5X25hdGl2ZV9maXJzdENoaWxkfSxnZXQgbGFzdENoaWxkKCl7dmFyIGE9dSh0aGlzKTthPWEmJmEubGFzdENoaWxkO3JldHVybiB2b2lkIDAhPT1hP2E6dGhpcy5fX3NoYWR5X25hdGl2ZV9sYXN0Q2hpbGR9LGdldCBuZXh0U2libGluZygpe3ZhciBhPXUodGhpcyk7YT1hJiZhLm5leHRTaWJsaW5nO3JldHVybiB2b2lkIDAhPT1hP2E6dGhpcy5fX3NoYWR5X25hdGl2ZV9uZXh0U2libGluZ30sZ2V0IHByZXZpb3VzU2libGluZygpe3ZhciBhPXUodGhpcyk7YT1hJiZhLnByZXZpb3VzU2libGluZztyZXR1cm4gdm9pZCAwIT09YT9hOnRoaXMuX19zaGFkeV9uYXRpdmVfcHJldmlvdXNTaWJsaW5nfSxcbmdldCBjaGlsZE5vZGVzKCl7aWYodyh0aGlzKSl7dmFyIGE9dSh0aGlzKTtpZighYS5jaGlsZE5vZGVzKXthLmNoaWxkTm9kZXM9W107Zm9yKHZhciBiPXRoaXMuX19zaGFkeV9maXJzdENoaWxkO2I7Yj1iLl9fc2hhZHlfbmV4dFNpYmxpbmcpYS5jaGlsZE5vZGVzLnB1c2goYil9dmFyIGM9YS5jaGlsZE5vZGVzfWVsc2UgYz10aGlzLl9fc2hhZHlfbmF0aXZlX2NoaWxkTm9kZXM7Yy5pdGVtPWZ1bmN0aW9uKGQpe3JldHVybiBjW2RdfTtyZXR1cm4gY30sZ2V0IHBhcmVudEVsZW1lbnQoKXt2YXIgYT11KHRoaXMpOyhhPWEmJmEucGFyZW50Tm9kZSkmJmEubm9kZVR5cGUhPT1Ob2RlLkVMRU1FTlRfTk9ERSYmKGE9bnVsbCk7cmV0dXJuIHZvaWQgMCE9PWE/YTp0aGlzLl9fc2hhZHlfbmF0aXZlX3BhcmVudEVsZW1lbnR9LGdldCBpc0Nvbm5lY3RlZCgpe2lmKFNiJiZTYi5jYWxsKHRoaXMpKXJldHVybiEwO2lmKHRoaXMubm9kZVR5cGU9PU5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERSlyZXR1cm4hMTtcbnZhciBhPXRoaXMub3duZXJEb2N1bWVudDtpZihudWxsPT09YXx8cWEoYSx0aGlzKSlyZXR1cm4hMDtmb3IoYT10aGlzO2EmJiEoYSBpbnN0YW5jZW9mIERvY3VtZW50KTspYT1hLl9fc2hhZHlfcGFyZW50Tm9kZXx8KHgoYSk/YS5ob3N0OnZvaWQgMCk7cmV0dXJuISEoYSYmYSBpbnN0YW5jZW9mIERvY3VtZW50KX0sZ2V0IHRleHRDb250ZW50KCl7aWYodyh0aGlzKSl7Zm9yKHZhciBhPVtdLGI9dGhpcy5fX3NoYWR5X2ZpcnN0Q2hpbGQ7YjtiPWIuX19zaGFkeV9uZXh0U2libGluZyliLm5vZGVUeXBlIT09Tm9kZS5DT01NRU5UX05PREUmJmEucHVzaChiLl9fc2hhZHlfdGV4dENvbnRlbnQpO3JldHVybiBhLmpvaW4oXCJcIil9cmV0dXJuIHRoaXMuX19zaGFkeV9uYXRpdmVfdGV4dENvbnRlbnR9LHNldCB0ZXh0Q29udGVudChhKXtpZihcInVuZGVmaW5lZFwiPT09dHlwZW9mIGF8fG51bGw9PT1hKWE9XCJcIjtzd2l0Y2godGhpcy5ub2RlVHlwZSl7Y2FzZSBOb2RlLkVMRU1FTlRfTk9ERTpjYXNlIE5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERTppZighdyh0aGlzKSYmXG52Lmkpe3ZhciBiPXRoaXMuX19zaGFkeV9maXJzdENoaWxkOyhiIT10aGlzLl9fc2hhZHlfbGFzdENoaWxkfHxiJiZiLm5vZGVUeXBlIT1Ob2RlLlRFWFRfTk9ERSkmJlRiKHRoaXMpO3RoaXMuX19zaGFkeV9uYXRpdmVfdGV4dENvbnRlbnQ9YX1lbHNlIFRiKHRoaXMpLCgwPGEubGVuZ3RofHx0aGlzLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUpJiZ0aGlzLl9fc2hhZHlfaW5zZXJ0QmVmb3JlKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGEpKTticmVhaztkZWZhdWx0OnRoaXMubm9kZVZhbHVlPWF9fSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24oYSxiKXtpZih0aGlzLm93bmVyRG9jdW1lbnQhPT1QYiYmYS5vd25lckRvY3VtZW50IT09UGIpcmV0dXJuIHRoaXMuX19zaGFkeV9uYXRpdmVfaW5zZXJ0QmVmb3JlKGEsYiksYTtpZihhPT09dGhpcyl0aHJvdyBFcnJvcihcIkZhaWxlZCB0byBleGVjdXRlICdhcHBlbmRDaGlsZCcgb24gJ05vZGUnOiBUaGUgbmV3IGNoaWxkIGVsZW1lbnQgY29udGFpbnMgdGhlIHBhcmVudC5cIik7XG5pZihiKXt2YXIgYz11KGIpO2M9YyYmYy5wYXJlbnROb2RlO2lmKHZvaWQgMCE9PWMmJmMhPT10aGlzfHx2b2lkIDA9PT1jJiZiLl9fc2hhZHlfbmF0aXZlX3BhcmVudE5vZGUhPT10aGlzKXRocm93IEVycm9yKFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ2luc2VydEJlZm9yZScgb24gJ05vZGUnOiBUaGUgbm9kZSBiZWZvcmUgd2hpY2ggdGhlIG5ldyBub2RlIGlzIHRvIGJlIGluc2VydGVkIGlzIG5vdCBhIGNoaWxkIG9mIHRoaXMgbm9kZS5cIik7fWlmKGI9PT1hKXJldHVybiBhO1diKHRoaXMsYSk7dmFyIGQ9W10sZT0oYz1QKHRoaXMpKT9jLmhvc3QubG9jYWxOYW1lOk5iKHRoaXMpLGY9YS5fX3NoYWR5X3BhcmVudE5vZGU7aWYoZil7dmFyIGc9TmIoYSk7dmFyIGg9ISFjfHwhUChhKXx8UWImJnZvaWQgMCE9PXRoaXMuX19ub0luc2VydGlvblBvaW50O2YuX19zaGFkeV9yZW1vdmVDaGlsZChhLGgpfWY9ITA7dmFyIGs9KCFRYnx8dm9pZCAwPT09YS5fX25vSW5zZXJ0aW9uUG9pbnQmJnZvaWQgMD09PVxudGhpcy5fX25vSW5zZXJ0aW9uUG9pbnQpJiYhTWIoYSxlKSxsPWMmJiFhLl9fbm9JbnNlcnRpb25Qb2ludCYmKCFRYnx8YS5ub2RlVHlwZT09PU5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERSk7aWYobHx8aylrJiYoZz1nfHxOYihhKSksT2IoYSxmdW5jdGlvbihtKXtsJiZcInNsb3RcIj09PW0ubG9jYWxOYW1lJiZkLnB1c2gobSk7aWYoayl7dmFyIHI9ZztPKCkmJihyJiZMYihtLHIpLChyPU8oKSkmJnIuc2NvcGVOb2RlKG0sZSkpfX0pO2QubGVuZ3RoJiYoWGIoYyksYy5qLnB1c2guYXBwbHkoYy5qLHEoZCkpLFEoYykpO3codGhpcykmJihZYihhLHRoaXMsYiksaD11KHRoaXMpLGgucm9vdD8oZj0hMSxqYSh0aGlzKSYmUShoLnJvb3QpKTpjJiZcInNsb3RcIj09PXRoaXMubG9jYWxOYW1lJiYoZj0hMSxRKGMpKSk7Zj8oYz14KHRoaXMpP3RoaXMuaG9zdDp0aGlzLGI/KGI9VmIoYiksYy5fX3NoYWR5X25hdGl2ZV9pbnNlcnRCZWZvcmUoYSxiKSk6Yy5fX3NoYWR5X25hdGl2ZV9hcHBlbmRDaGlsZChhKSk6XG5hLm93bmVyRG9jdW1lbnQhPT10aGlzLm93bmVyRG9jdW1lbnQmJnRoaXMub3duZXJEb2N1bWVudC5hZG9wdE5vZGUoYSk7cmV0dXJuIGF9LGFwcGVuZENoaWxkOmZ1bmN0aW9uKGEpe2lmKHRoaXMhPWF8fCF4KGEpKXJldHVybiB0aGlzLl9fc2hhZHlfaW5zZXJ0QmVmb3JlKGEpfSxyZW1vdmVDaGlsZDpmdW5jdGlvbihhLGIpe2I9dm9pZCAwPT09Yj8hMTpiO2lmKHRoaXMub3duZXJEb2N1bWVudCE9PVBiKXJldHVybiB0aGlzLl9fc2hhZHlfbmF0aXZlX3JlbW92ZUNoaWxkKGEpO2lmKGEuX19zaGFkeV9wYXJlbnROb2RlIT09dGhpcyl0aHJvdyBFcnJvcihcIlRoZSBub2RlIHRvIGJlIHJlbW92ZWQgaXMgbm90IGEgY2hpbGQgb2YgdGhpcyBub2RlOiBcIithKTtXYih0aGlzLG51bGwsYSk7dmFyIGM9UChhKSxkPWMmJlpiKGMsYSksZT11KHRoaXMpO2lmKHcodGhpcykmJigkYihhLHRoaXMpLGphKHRoaXMpKSl7UShlLnJvb3QpO3ZhciBmPSEwfWlmKE8oKSYmIWImJmMmJmEubm9kZVR5cGUhPT1cbk5vZGUuVEVYVF9OT0RFKXt2YXIgZz1OYihhKTtPYihhLGZ1bmN0aW9uKGgpe0xiKGgsZyl9KX1VYihhKTtjJiYoKGI9XCJzbG90XCI9PT10aGlzLmxvY2FsTmFtZSkmJihmPSEwKSwoZHx8YikmJlEoYykpO2Z8fChmPXgodGhpcyk/dGhpcy5ob3N0OnRoaXMsKCFlLnJvb3QmJlwic2xvdFwiIT09YS5sb2NhbE5hbWV8fGY9PT1hLl9fc2hhZHlfbmF0aXZlX3BhcmVudE5vZGUpJiZmLl9fc2hhZHlfbmF0aXZlX3JlbW92ZUNoaWxkKGEpKTtyZXR1cm4gYX0scmVwbGFjZUNoaWxkOmZ1bmN0aW9uKGEsYil7dGhpcy5fX3NoYWR5X2luc2VydEJlZm9yZShhLGIpO3RoaXMuX19zaGFkeV9yZW1vdmVDaGlsZChiKTtyZXR1cm4gYX0sY2xvbmVOb2RlOmZ1bmN0aW9uKGEpe2lmKFwidGVtcGxhdGVcIj09dGhpcy5sb2NhbE5hbWUpcmV0dXJuIHRoaXMuX19zaGFkeV9uYXRpdmVfY2xvbmVOb2RlKGEpO3ZhciBiPXRoaXMuX19zaGFkeV9uYXRpdmVfY2xvbmVOb2RlKCExKTtpZihhJiZiLm5vZGVUeXBlIT09Tm9kZS5BVFRSSUJVVEVfTk9ERSl7YT1cbnRoaXMuX19zaGFkeV9maXJzdENoaWxkO2Zvcih2YXIgYzthO2E9YS5fX3NoYWR5X25leHRTaWJsaW5nKWM9YS5fX3NoYWR5X2Nsb25lTm9kZSghMCksYi5fX3NoYWR5X2FwcGVuZENoaWxkKGMpfXJldHVybiBifSxnZXRSb290Tm9kZTpmdW5jdGlvbihhKXtpZih0aGlzJiZ0aGlzLm5vZGVUeXBlKXt2YXIgYj10KHRoaXMpLGM9Yi5KO3ZvaWQgMD09PWMmJih4KHRoaXMpPyhjPXRoaXMsYi5KPWMpOihjPShjPXRoaXMuX19zaGFkeV9wYXJlbnROb2RlKT9jLl9fc2hhZHlfZ2V0Um9vdE5vZGUoYSk6dGhpcyxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuX19zaGFkeV9uYXRpdmVfY29udGFpbnModGhpcykmJihiLko9YykpKTtyZXR1cm4gY319LGNvbnRhaW5zOmZ1bmN0aW9uKGEpe3JldHVybiByYSh0aGlzLGEpfX0pO3ZhciBSPUIoe2dldCBhc3NpZ25lZFNsb3QoKXt2YXIgYT10aGlzLl9fc2hhZHlfcGFyZW50Tm9kZTsoYT1hJiZhLl9fc2hhZHlfc2hhZG93Um9vdCkmJmJjKGEpO3JldHVybihhPXUodGhpcykpJiZhLmFzc2lnbmVkU2xvdHx8bnVsbH19KTsvKlxuXG4gQ29weXJpZ2h0IChjKSAyMDIyIFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9yc1xuIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2VcbiovXG52YXIgY2M9bmV3IE1hcDtbW1wiKFwiLHtlbmQ6XCIpXCIsSTohMH1dLFtcIltcIix7ZW5kOlwiXVwiLEk6ITB9XSxbJ1wiJyx7ZW5kOidcIicsSTohMX1dLFtcIidcIix7ZW5kOlwiJ1wiLEk6ITF9XV0uZm9yRWFjaChmdW5jdGlvbihhKXt2YXIgYj1wKGEpO2E9Yi5uZXh0KCkudmFsdWU7Yj1iLm5leHQoKS52YWx1ZTtjYy5zZXQoYSxiKX0pO2Z1bmN0aW9uIGRjKGEsYixjLGQpe2ZvcihkPXZvaWQgMD09PWQ/ITA6ZDtiPGEubGVuZ3RoO2IrKylpZihcIlxcXFxcIj09PWFbYl0mJmI8YS5sZW5ndGgtMSYmXCJcXG5cIiE9PWFbYisxXSliKys7ZWxzZXtpZigtMSE9PWMuaW5kZXhPZihhW2JdKSlyZXR1cm4gYjtpZihkJiZjYy5oYXMoYVtiXSkpe3ZhciBlPWNjLmdldChhW2JdKTtiPWRjKGEsYisxLFtlLmVuZF0sZS5JKX19cmV0dXJuIGEubGVuZ3RofVxuZnVuY3Rpb24gZWMoYSl7ZnVuY3Rpb24gYigpe2lmKDA8ZC5sZW5ndGgpe2Zvcig7XCIgXCI9PT1kW2QubGVuZ3RoLTFdOylkLnBvcCgpO2MucHVzaCh7UzpkLmZpbHRlcihmdW5jdGlvbihrLGwpe3JldHVybiAwPT09bCUyfSksY2E6ZC5maWx0ZXIoZnVuY3Rpb24oayxsKXtyZXR1cm4gMT09PWwlMn0pfSk7ZC5sZW5ndGg9MH19Zm9yKHZhciBjPVtdLGQ9W10sZT0wO2U8YS5sZW5ndGg7KXt2YXIgZj1kW2QubGVuZ3RoLTFdLGc9ZGMoYSxlLFtcIixcIixcIiBcIixcIj5cIixcIitcIixcIn5cIl0pLGg9Zz09PWU/YVtlXTphLnN1YnN0cmluZyhlLGcpO2lmKFwiLFwiPT09aCliKCk7ZWxzZSBpZigtMT09PVt2b2lkIDAsXCIgXCIsXCI+XCIsXCIrXCIsXCJ+XCJdLmluZGV4T2YoZil8fFwiIFwiIT09aClcIiBcIj09PWYmJi0xIT09W1wiPlwiLFwiK1wiLFwiflwiXS5pbmRleE9mKGgpP2RbZC5sZW5ndGgtMV09aDpkLnB1c2goaCk7ZT1nKyhnPT09ZT8xOjApfWIoKTtyZXR1cm4gY307ZnVuY3Rpb24gZmMoYSxiLGMpe3ZhciBkPVtdO2djKGEsYixjLGQpO3JldHVybiBkfWZ1bmN0aW9uIGdjKGEsYixjLGQpe2ZvcihhPWEuX19zaGFkeV9maXJzdENoaWxkO2E7YT1hLl9fc2hhZHlfbmV4dFNpYmxpbmcpe3ZhciBlO2lmKGU9YS5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFKXtlPWE7dmFyIGY9YixnPWMsaD1kLGs9ZihlKTtrJiZoLnB1c2goZSk7ZyYmZyhrKT9lPWs6KGdjKGUsZixnLGgpLGU9dm9pZCAwKX1pZihlKWJyZWFrfX1cbnZhciBoYz17Z2V0IGZpcnN0RWxlbWVudENoaWxkKCl7dmFyIGE9dSh0aGlzKTtpZihhJiZ2b2lkIDAhPT1hLmZpcnN0Q2hpbGQpe2ZvcihhPXRoaXMuX19zaGFkeV9maXJzdENoaWxkO2EmJmEubm9kZVR5cGUhPT1Ob2RlLkVMRU1FTlRfTk9ERTspYT1hLl9fc2hhZHlfbmV4dFNpYmxpbmc7cmV0dXJuIGF9cmV0dXJuIHRoaXMuX19zaGFkeV9uYXRpdmVfZmlyc3RFbGVtZW50Q2hpbGR9LGdldCBsYXN0RWxlbWVudENoaWxkKCl7dmFyIGE9dSh0aGlzKTtpZihhJiZ2b2lkIDAhPT1hLmxhc3RDaGlsZCl7Zm9yKGE9dGhpcy5fX3NoYWR5X2xhc3RDaGlsZDthJiZhLm5vZGVUeXBlIT09Tm9kZS5FTEVNRU5UX05PREU7KWE9YS5fX3NoYWR5X3ByZXZpb3VzU2libGluZztyZXR1cm4gYX1yZXR1cm4gdGhpcy5fX3NoYWR5X25hdGl2ZV9sYXN0RWxlbWVudENoaWxkfSxnZXQgY2hpbGRyZW4oKXtyZXR1cm4gdyh0aGlzKT96KEFycmF5LnByb3RvdHlwZS5maWx0ZXIuY2FsbCh0YSh0aGlzKSxmdW5jdGlvbihhKXtyZXR1cm4gYS5ub2RlVHlwZT09PVxuTm9kZS5FTEVNRU5UX05PREV9KSk6dGhpcy5fX3NoYWR5X25hdGl2ZV9jaGlsZHJlbn0sZ2V0IGNoaWxkRWxlbWVudENvdW50KCl7dmFyIGE9dGhpcy5fX3NoYWR5X2NoaWxkcmVuO3JldHVybiBhP2EubGVuZ3RoOjB9fSxUPUIoKGhjLmFwcGVuZD1mdW5jdGlvbihhKXtmb3IodmFyIGI9W10sYz0wO2M8YXJndW1lbnRzLmxlbmd0aDsrK2MpYltjXT1hcmd1bWVudHNbY107dGhpcy5fX3NoYWR5X2luc2VydEJlZm9yZShELmFwcGx5KG51bGwscShiKSksbnVsbCl9LGhjLnByZXBlbmQ9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPVtdLGM9MDtjPGFyZ3VtZW50cy5sZW5ndGg7KytjKWJbY109YXJndW1lbnRzW2NdO3RoaXMuX19zaGFkeV9pbnNlcnRCZWZvcmUoRC5hcHBseShudWxsLHEoYikpLHRoaXMuX19zaGFkeV9maXJzdENoaWxkKX0saGMucmVwbGFjZUNoaWxkcmVuPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1bXSxjPTA7Yzxhcmd1bWVudHMubGVuZ3RoOysrYyliW2NdPWFyZ3VtZW50c1tjXTtcbmZvcig7bnVsbCE9PShjPXRoaXMuX19zaGFkeV9maXJzdENoaWxkKTspdGhpcy5fX3NoYWR5X3JlbW92ZUNoaWxkKGMpO3RoaXMuX19zaGFkeV9pbnNlcnRCZWZvcmUoRC5hcHBseShudWxsLHEoYikpLG51bGwpfSxoYykpO1xuZnVuY3Rpb24gaWMoYSxiKXtmdW5jdGlvbiBjKGUsZil7cmV0dXJuKGU9PT1hfHwtMT09PWYuaW5kZXhPZihcIjpzY29wZVwiKSkmJmxhLmNhbGwoZSxmKX12YXIgZD1lYyhiKTtpZigxPmQubGVuZ3RoKXJldHVybltdO2ZvcihiPXlhKGZjKGEsZnVuY3Rpb24oKXtyZXR1cm4hMH0pLm1hcChmdW5jdGlvbihlKXtyZXR1cm4geWEoZC5tYXAoZnVuY3Rpb24oZil7dmFyIGc9Zi5TLGg9Zy5sZW5ndGgtMTtyZXR1cm4gYyhlLGdbaF0pP3t0YXJnZXQ6ZSx2OmYsQTplLGluZGV4Omh9OltdfSkpfSkpO2Iuc29tZShmdW5jdGlvbihlKXtyZXR1cm4gMDxlLmluZGV4fSk7KWI9eWEoYi5tYXAoZnVuY3Rpb24oZSl7aWYoMD49ZS5pbmRleClyZXR1cm4gZTt2YXIgZj1lLnRhcmdldCxnPWUuQSxoPWUudjtlPWUuaW5kZXgtMTt2YXIgaz1oLmNhW2VdLGw9aC5TW2VdO2lmKFwiIFwiPT09ayl7az1bXTtmb3IoZz1nLl9fc2hhZHlfcGFyZW50RWxlbWVudDtnO2c9Zy5fX3NoYWR5X3BhcmVudEVsZW1lbnQpYyhnLFxubCkmJmsucHVzaCh7dGFyZ2V0OmYsdjpoLEE6ZyxpbmRleDplfSk7cmV0dXJuIGt9aWYoXCI+XCI9PT1rKXJldHVybiBnPWcuX19zaGFkeV9wYXJlbnRFbGVtZW50LGMoZyxsKT97dGFyZ2V0OmYsdjpoLEE6ZyxpbmRleDplfTpbXTtpZihcIitcIj09PWspcmV0dXJuKGc9Zy5fX3NoYWR5X3ByZXZpb3VzRWxlbWVudFNpYmxpbmcpJiZjKGcsbCk/e3RhcmdldDpmLHY6aCxBOmcsaW5kZXg6ZX06W107aWYoXCJ+XCI9PT1rKXtrPVtdO2ZvcihnPWcuX19zaGFkeV9wcmV2aW91c0VsZW1lbnRTaWJsaW5nO2c7Zz1nLl9fc2hhZHlfcHJldmlvdXNFbGVtZW50U2libGluZyljKGcsbCkmJmsucHVzaCh7dGFyZ2V0OmYsdjpoLEE6ZyxpbmRleDplfSk7cmV0dXJuIGt9dGhyb3cgRXJyb3IoXCJVbnJlY29nbml6ZWQgY29tYmluYXRvcjogJ1wiK2srXCInLlwiKTt9KSk7cmV0dXJuIHphKGIubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLnRhcmdldH0pKX1cbnZhciBVPXYucXVlcnlTZWxlY3RvckltcGxlbWVudGF0aW9uLGpjPUIoe3F1ZXJ5U2VsZWN0b3I6ZnVuY3Rpb24oYSl7aWYoXCJuYXRpdmVcIj09PVUpe3ZhciBiPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKCh0aGlzIGluc3RhbmNlb2YgU2hhZG93Um9vdD90aGlzLmhvc3Q6dGhpcykuX19zaGFkeV9uYXRpdmVfcXVlcnlTZWxlY3RvckFsbChhKSksYz10aGlzLl9fc2hhZHlfZ2V0Um9vdE5vZGUoKTtiPXAoYik7Zm9yKHZhciBkPWIubmV4dCgpOyFkLmRvbmU7ZD1iLm5leHQoKSlpZihkPWQudmFsdWUsZC5fX3NoYWR5X2dldFJvb3ROb2RlKCk9PWMpcmV0dXJuIGQ7cmV0dXJuIG51bGx9aWYoXCJzZWxlY3RvckVuZ2luZVwiPT09VSlyZXR1cm4gaWModGhpcyxhKVswXXx8bnVsbDtpZih2b2lkIDA9PT1VKXJldHVybiBmYyh0aGlzLGZ1bmN0aW9uKGUpe3JldHVybiBsYS5jYWxsKGUsYSl9LGZ1bmN0aW9uKGUpe3JldHVybiEhZX0pWzBdfHxudWxsO3Rocm93IEVycm9yKFwiVW5yZWNvZ25pemVkIHZhbHVlIG9mIFNoYWR5RE9NLnF1ZXJ5U2VsZWN0b3JJbXBsZW1lbnRhdGlvbjogJ1wiK1xuKFUrXCInXCIpKTt9LHF1ZXJ5U2VsZWN0b3JBbGw6ZnVuY3Rpb24oYSxiKXtpZihifHxcIm5hdGl2ZVwiPT09VSl7Yj1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCgodGhpcyBpbnN0YW5jZW9mIFNoYWRvd1Jvb3Q/dGhpcy5ob3N0OnRoaXMpLl9fc2hhZHlfbmF0aXZlX3F1ZXJ5U2VsZWN0b3JBbGwoYSkpO3ZhciBjPXRoaXMuX19zaGFkeV9nZXRSb290Tm9kZSgpO3JldHVybiB6KGIuZmlsdGVyKGZ1bmN0aW9uKGQpe3JldHVybiBkLl9fc2hhZHlfZ2V0Um9vdE5vZGUoKT09Y30pKX1pZihcInNlbGVjdG9yRW5naW5lXCI9PT1VKXJldHVybiB6KGljKHRoaXMsYSkpO2lmKHZvaWQgMD09PVUpcmV0dXJuIHooZmModGhpcyxmdW5jdGlvbihkKXtyZXR1cm4gbGEuY2FsbChkLGEpfSkpO3Rocm93IEVycm9yKFwiVW5yZWNvZ25pemVkIHZhbHVlIG9mIFNoYWR5RE9NLnF1ZXJ5U2VsZWN0b3JJbXBsZW1lbnRhdGlvbjogJ1wiKyhVK1wiJ1wiKSk7fX0pLGtjPXYuQyYmIXYubD93YSh7fSxUKTpUO3dhKFQsamMpOy8qXG5cbkNvcHlyaWdodCAoYykgMjAyMCBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG5UaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0XG5UaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dFxuVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0XG5Db2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzb1xuc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHRcbiovXG52YXIgbGM9Qih7YWZ0ZXI6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPVtdLGM9MDtjPGFyZ3VtZW50cy5sZW5ndGg7KytjKWJbY109YXJndW1lbnRzW2NdO2M9dGhpcy5fX3NoYWR5X3BhcmVudE5vZGU7aWYobnVsbCE9PWMpe3ZhciBkPXRoaXMuX19zaGFkeV9uZXh0U2libGluZztjLl9fc2hhZHlfaW5zZXJ0QmVmb3JlKEQuYXBwbHkobnVsbCxxKGIpKSxkKX19LGJlZm9yZTpmdW5jdGlvbihhKXtmb3IodmFyIGI9W10sYz0wO2M8YXJndW1lbnRzLmxlbmd0aDsrK2MpYltjXT1hcmd1bWVudHNbY107Yz10aGlzLl9fc2hhZHlfcGFyZW50Tm9kZTtudWxsIT09YyYmYy5fX3NoYWR5X2luc2VydEJlZm9yZShELmFwcGx5KG51bGwscShiKSksdGhpcyl9LHJlbW92ZTpmdW5jdGlvbigpe3ZhciBhPXRoaXMuX19zaGFkeV9wYXJlbnROb2RlO251bGwhPT1hJiZhLl9fc2hhZHlfcmVtb3ZlQ2hpbGQodGhpcyl9LHJlcGxhY2VXaXRoOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1bXSxjPTA7Yzxhcmd1bWVudHMubGVuZ3RoOysrYyliW2NdPVxuYXJndW1lbnRzW2NdO2M9dGhpcy5fX3NoYWR5X3BhcmVudE5vZGU7aWYobnVsbCE9PWMpe3ZhciBkPXRoaXMuX19zaGFkeV9uZXh0U2libGluZztjLl9fc2hhZHlfcmVtb3ZlQ2hpbGQodGhpcyk7Yy5fX3NoYWR5X2luc2VydEJlZm9yZShELmFwcGx5KG51bGwscShiKSksZCl9fX0pO3ZhciBtYz13aW5kb3cuZG9jdW1lbnQ7ZnVuY3Rpb24gbmMoYSxiKXtpZihcInNsb3RcIj09PWIpYT1hLl9fc2hhZHlfcGFyZW50Tm9kZSxqYShhKSYmUSh1KGEpLnJvb3QpO2Vsc2UgaWYoXCJzbG90XCI9PT1hLmxvY2FsTmFtZSYmXCJuYW1lXCI9PT1iJiYoYj1QKGEpKSl7aWYoYi5nKXtvYyhiKTt2YXIgYz1hLlksZD1wYyhhKTtpZihkIT09Yyl7Yz1iLmhbY107dmFyIGU9Yy5pbmRleE9mKGEpOzA8PWUmJmMuc3BsaWNlKGUsMSk7Yz1iLmhbZF18fChiLmhbZF09W10pO2MucHVzaChhKTsxPGMubGVuZ3RoJiYoYi5oW2RdPXFjKGMpKX19UShiKX19XG52YXIgcmM9Qih7Z2V0IHByZXZpb3VzRWxlbWVudFNpYmxpbmcoKXt2YXIgYT11KHRoaXMpO2lmKGEmJnZvaWQgMCE9PWEucHJldmlvdXNTaWJsaW5nKXtmb3IoYT10aGlzLl9fc2hhZHlfcHJldmlvdXNTaWJsaW5nO2EmJmEubm9kZVR5cGUhPT1Ob2RlLkVMRU1FTlRfTk9ERTspYT1hLl9fc2hhZHlfcHJldmlvdXNTaWJsaW5nO3JldHVybiBhfXJldHVybiB0aGlzLl9fc2hhZHlfbmF0aXZlX3ByZXZpb3VzRWxlbWVudFNpYmxpbmd9LGdldCBuZXh0RWxlbWVudFNpYmxpbmcoKXt2YXIgYT11KHRoaXMpO2lmKGEmJnZvaWQgMCE9PWEubmV4dFNpYmxpbmcpe2ZvcihhPXRoaXMuX19zaGFkeV9uZXh0U2libGluZzthJiZhLm5vZGVUeXBlIT09Tm9kZS5FTEVNRU5UX05PREU7KWE9YS5fX3NoYWR5X25leHRTaWJsaW5nO3JldHVybiBhfXJldHVybiB0aGlzLl9fc2hhZHlfbmF0aXZlX25leHRFbGVtZW50U2libGluZ30sZ2V0IHNsb3QoKXtyZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGUoXCJzbG90XCIpfSxcbnNldCBzbG90KGEpe3RoaXMuX19zaGFkeV9zZXRBdHRyaWJ1dGUoXCJzbG90XCIsYSl9LGdldCBjbGFzc05hbWUoKXtyZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKXx8XCJcIn0sc2V0IGNsYXNzTmFtZShhKXt0aGlzLl9fc2hhZHlfc2V0QXR0cmlidXRlKFwiY2xhc3NcIixhKX0sc2V0QXR0cmlidXRlOmZ1bmN0aW9uKGEsYil7dGhpcy5vd25lckRvY3VtZW50IT09bWM/dGhpcy5fX3NoYWR5X25hdGl2ZV9zZXRBdHRyaWJ1dGUoYSxiKTpLYih0aGlzLGEsYil8fCh0aGlzLl9fc2hhZHlfbmF0aXZlX3NldEF0dHJpYnV0ZShhLGIpLG5jKHRoaXMsYSkpfSxyZW1vdmVBdHRyaWJ1dGU6ZnVuY3Rpb24oYSl7dGhpcy5vd25lckRvY3VtZW50IT09bWM/dGhpcy5fX3NoYWR5X25hdGl2ZV9yZW1vdmVBdHRyaWJ1dGUoYSk6S2IodGhpcyxhLFwiXCIpP1wiXCI9PT10aGlzLmdldEF0dHJpYnV0ZShhKSYmdGhpcy5fX3NoYWR5X25hdGl2ZV9yZW1vdmVBdHRyaWJ1dGUoYSk6KHRoaXMuX19zaGFkeV9uYXRpdmVfcmVtb3ZlQXR0cmlidXRlKGEpLFxubmModGhpcyxhKSl9LHRvZ2dsZUF0dHJpYnV0ZTpmdW5jdGlvbihhLGIpe2lmKHRoaXMub3duZXJEb2N1bWVudCE9PW1jKXJldHVybiB0aGlzLl9fc2hhZHlfbmF0aXZlX3RvZ2dsZUF0dHJpYnV0ZShhLGIpO2lmKCFLYih0aGlzLGEsXCJcIikpcmV0dXJuIGI9dGhpcy5fX3NoYWR5X25hdGl2ZV90b2dnbGVBdHRyaWJ1dGUoYSxiKSxuYyh0aGlzLGEpLGI7aWYoXCJcIj09PXRoaXMuZ2V0QXR0cmlidXRlKGEpJiYhYilyZXR1cm4gdGhpcy5fX3NoYWR5X25hdGl2ZV90b2dnbGVBdHRyaWJ1dGUoYSxiKX19KTt2LkN8fERiLmZvckVhY2goZnVuY3Rpb24oYSl7cmNbYV09RmIoYSl9KTtcbnZhciB3Yz1CKHthdHRhY2hTaGFkb3c6ZnVuY3Rpb24oYSl7aWYoIXRoaXMpdGhyb3cgRXJyb3IoXCJNdXN0IHByb3ZpZGUgYSBob3N0LlwiKTtpZighYSl0aHJvdyBFcnJvcihcIk5vdCBlbm91Z2ggYXJndW1lbnRzLlwiKTtpZihhLnNoYWR5VXBncmFkZUZyYWdtZW50JiYhdi5WKXt2YXIgYj1hLnNoYWR5VXBncmFkZUZyYWdtZW50O2IuX19wcm90b19fPVNoYWRvd1Jvb3QucHJvdG90eXBlO3NjKGIsdGhpcyxhKTt0YyhiLGIpO2E9Yi5fX25vSW5zZXJ0aW9uUG9pbnQ/bnVsbDpiLnF1ZXJ5U2VsZWN0b3JBbGwoXCJzbG90XCIpO2IuX19ub0luc2VydGlvblBvaW50PXZvaWQgMDtpZihhJiZhLmxlbmd0aCl7dmFyIGM9YjtYYihjKTtjLmoucHVzaC5hcHBseShjLmoscShhKSk7UShiKX1iLmhvc3QuX19zaGFkeV9uYXRpdmVfYXBwZW5kQ2hpbGQoYil9ZWxzZSBiPW5ldyB1Yyh2Yyx0aGlzLGEpO3JldHVybiB0aGlzLl9fQ0Vfc2hhZG93Um9vdD1ifSxnZXQgc2hhZG93Um9vdCgpe3ZhciBhPXUodGhpcyk7XG5yZXR1cm4gYSYmYS5lYXx8bnVsbH19KTt3YShyYyx3Yyk7dmFyIHhjPWRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudChcImluZXJ0XCIpLHljPUIoe2dldCBpbm5lckhUTUwoKXtyZXR1cm4gdyh0aGlzKT9OYShcInRlbXBsYXRlXCI9PT10aGlzLmxvY2FsTmFtZT90aGlzLmNvbnRlbnQ6dGhpcyx0YSk6dGhpcy5fX3NoYWR5X25hdGl2ZV9pbm5lckhUTUx9LHNldCBpbm5lckhUTUwoYSl7aWYoXCJ0ZW1wbGF0ZVwiPT09dGhpcy5sb2NhbE5hbWUpdGhpcy5fX3NoYWR5X25hdGl2ZV9pbm5lckhUTUw9YTtlbHNle1RiKHRoaXMpO3ZhciBiPXRoaXMubG9jYWxOYW1lfHxcImRpdlwiO2I9dGhpcy5uYW1lc3BhY2VVUkkmJnRoaXMubmFtZXNwYWNlVVJJIT09eGMubmFtZXNwYWNlVVJJP3hjLmNyZWF0ZUVsZW1lbnROUyh0aGlzLm5hbWVzcGFjZVVSSSxiKTp4Yy5jcmVhdGVFbGVtZW50KGIpO2Zvcih2Lmk/Yi5fX3NoYWR5X25hdGl2ZV9pbm5lckhUTUw9YTpiLmlubmVySFRNTD1hO2E9Yi5fX3NoYWR5X2ZpcnN0Q2hpbGQ7KXRoaXMuX19zaGFkeV9pbnNlcnRCZWZvcmUoYSl9fX0pO3ZhciB6Yz1CKHtibHVyOmZ1bmN0aW9uKCl7dmFyIGE9dSh0aGlzKTsoYT0oYT1hJiZhLnJvb3QpJiZhLmFjdGl2ZUVsZW1lbnQpP2EuX19zaGFkeV9ibHVyKCk6dGhpcy5fX3NoYWR5X25hdGl2ZV9ibHVyKCl9fSk7di5DfHxFYi5mb3JFYWNoKGZ1bmN0aW9uKGEpe3pjW2FdPUZiKGEpfSk7dmFyIEFjPUIoe2Fzc2lnbmVkTm9kZXM6ZnVuY3Rpb24oYSl7aWYoXCJzbG90XCI9PT10aGlzLmxvY2FsTmFtZSl7dmFyIGI9dGhpcy5fX3NoYWR5X2dldFJvb3ROb2RlKCk7YiYmeChiKSYmYmMoYik7cmV0dXJuKGI9dSh0aGlzKSk/KGEmJmEuZmxhdHRlbj9iLnU6Yi5hc3NpZ25lZE5vZGVzKXx8W106W119fSxhZGRFdmVudExpc3RlbmVyOmZ1bmN0aW9uKGEsYixjKXtpZihcInNsb3RcIiE9PXRoaXMubG9jYWxOYW1lfHxcInNsb3RjaGFuZ2VcIj09PWEpdmIuY2FsbCh0aGlzLGEsYixjKTtlbHNle1wib2JqZWN0XCIhPT10eXBlb2YgYyYmKGM9e2NhcHR1cmU6ISFjfSk7dmFyIGQ9dGhpcy5fX3NoYWR5X3BhcmVudE5vZGU7aWYoIWQpdGhyb3cgRXJyb3IoXCJTaGFkeURPTSBjYW5ub3QgYXR0YWNoIGV2ZW50IHRvIHNsb3QgdW5sZXNzIGl0IGhhcyBhIGBwYXJlbnROb2RlYFwiKTtjLm89dGhpcztkLl9fc2hhZHlfYWRkRXZlbnRMaXN0ZW5lcihhLGIsYyl9fSxyZW1vdmVFdmVudExpc3RlbmVyOmZ1bmN0aW9uKGEsXG5iLGMpe2lmKFwic2xvdFwiIT09dGhpcy5sb2NhbE5hbWV8fFwic2xvdGNoYW5nZVwiPT09YSl3Yi5jYWxsKHRoaXMsYSxiLGMpO2Vsc2V7XCJvYmplY3RcIiE9PXR5cGVvZiBjJiYoYz17Y2FwdHVyZTohIWN9KTt2YXIgZD10aGlzLl9fc2hhZHlfcGFyZW50Tm9kZTtpZighZCl0aHJvdyBFcnJvcihcIlNoYWR5RE9NIGNhbm5vdCBhdHRhY2ggZXZlbnQgdG8gc2xvdCB1bmxlc3MgaXQgaGFzIGEgYHBhcmVudE5vZGVgXCIpO2Mubz10aGlzO2QuX19zaGFkeV9yZW1vdmVFdmVudExpc3RlbmVyKGEsYixjKX19fSk7dmFyIEJjPUIoe2dldEVsZW1lbnRCeUlkOmZ1bmN0aW9uKGEpe3JldHVyblwiXCI9PT1hP251bGw6ZmModGhpcyxmdW5jdGlvbihiKXtyZXR1cm4gYi5pZD09YX0sZnVuY3Rpb24oYil7cmV0dXJuISFifSlbMF18fG51bGx9fSk7ZnVuY3Rpb24gQ2MoYSxiKXtmb3IodmFyIGM7YiYmIWEuaGFzKGM9Yi5fX3NoYWR5X2dldFJvb3ROb2RlKCkpOyliPWMuaG9zdDtyZXR1cm4gYn1mdW5jdGlvbiBEYyhhKXt2YXIgYj1uZXcgU2V0O2ZvcihiLmFkZChhKTt4KGEpJiZhLmhvc3Q7KWE9YS5ob3N0Ll9fc2hhZHlfZ2V0Um9vdE5vZGUoKSxiLmFkZChhKTtyZXR1cm4gYn1cbnZhciBFYz1cIl9fc2hhZHlfbmF0aXZlX1wiK2lhKCksRmM9Qih7Z2V0IGFjdGl2ZUVsZW1lbnQoKXt2YXIgYT12Lmk/ZG9jdW1lbnQuX19zaGFkeV9uYXRpdmVfYWN0aXZlRWxlbWVudDpkb2N1bWVudC5hY3RpdmVFbGVtZW50O2lmKCFhfHwhYS5ub2RlVHlwZSlyZXR1cm4gbnVsbDt2YXIgYj0hIXgodGhpcyk7aWYoISh0aGlzPT09ZG9jdW1lbnR8fGImJnRoaXMuaG9zdCE9PWEmJnRoaXMuaG9zdC5fX3NoYWR5X25hdGl2ZV9jb250YWlucyhhKSkpcmV0dXJuIG51bGw7Zm9yKGI9UChhKTtiJiZiIT09dGhpczspYT1iLmhvc3QsYj1QKGEpO3JldHVybiB0aGlzPT09ZG9jdW1lbnQ/Yj9udWxsOmE6Yj09PXRoaXM/YTpudWxsfSxlbGVtZW50c0Zyb21Qb2ludDpmdW5jdGlvbihhLGIpe2E9ZG9jdW1lbnRbRWNdKGEsYik7aWYodGhpcz09PWRvY3VtZW50JiZ2LnVzZU5hdGl2ZURvY3VtZW50RUZQKXJldHVybiBhO2E9W10uc2xpY2UuY2FsbChhKTtiPURjKHRoaXMpO2Zvcih2YXIgYz1uZXcgU2V0LFxuZD0wO2Q8YS5sZW5ndGg7ZCsrKWMuYWRkKENjKGIsYVtkXSkpO3ZhciBlPVtdO2MuZm9yRWFjaChmdW5jdGlvbihmKXtyZXR1cm4gZS5wdXNoKGYpfSk7cmV0dXJuIGV9LGVsZW1lbnRGcm9tUG9pbnQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcz09PWRvY3VtZW50JiZ2LnVzZU5hdGl2ZURvY3VtZW50RUZQP3RoaXMuX19zaGFkeV9uYXRpdmVfZWxlbWVudEZyb21Qb2ludChhLGIpOnRoaXMuX19zaGFkeV9lbGVtZW50c0Zyb21Qb2ludChhLGIpWzBdfHxudWxsfX0pO3ZhciBHYz13aW5kb3cuZG9jdW1lbnQsSGM9Qih7aW1wb3J0Tm9kZTpmdW5jdGlvbihhLGIpe2lmKGEub3duZXJEb2N1bWVudCE9PUdjfHxcInRlbXBsYXRlXCI9PT1hLmxvY2FsTmFtZSlyZXR1cm4gdGhpcy5fX3NoYWR5X25hdGl2ZV9pbXBvcnROb2RlKGEsYik7dmFyIGM9dGhpcy5fX3NoYWR5X25hdGl2ZV9pbXBvcnROb2RlKGEsITEpO2lmKGIpZm9yKGE9YS5fX3NoYWR5X2ZpcnN0Q2hpbGQ7YTthPWEuX19zaGFkeV9uZXh0U2libGluZyliPXRoaXMuX19zaGFkeV9pbXBvcnROb2RlKGEsITApLGMuX19zaGFkeV9hcHBlbmRDaGlsZChiKTtyZXR1cm4gY319KTt2YXIgSWM9Qih7ZGlzcGF0Y2hFdmVudDp0YixhZGRFdmVudExpc3RlbmVyOnZiLmJpbmQod2luZG93KSxyZW1vdmVFdmVudExpc3RlbmVyOndiLmJpbmQod2luZG93KX0pO3ZhciBWPXt9O09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSFRNTEVsZW1lbnQucHJvdG90eXBlLFwicGFyZW50RWxlbWVudFwiKSYmKFYucGFyZW50RWxlbWVudD1hYy5wYXJlbnRFbGVtZW50KTtPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEhUTUxFbGVtZW50LnByb3RvdHlwZSxcImNvbnRhaW5zXCIpJiYoVi5jb250YWlucz1hYy5jb250YWlucyk7T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihIVE1MRWxlbWVudC5wcm90b3R5cGUsXCJjaGlsZHJlblwiKSYmKFYuY2hpbGRyZW49VC5jaGlsZHJlbik7T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihIVE1MRWxlbWVudC5wcm90b3R5cGUsXCJpbm5lckhUTUxcIikmJihWLmlubmVySFRNTD15Yy5pbm5lckhUTUwpO09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSFRNTEVsZW1lbnQucHJvdG90eXBlLFwiY2xhc3NOYW1lXCIpJiYoVi5jbGFzc05hbWU9cmMuY2xhc3NOYW1lKTtcbnZhciBXPXtFdmVudFRhcmdldDpbSWJdLE5vZGU6W2FjLHdpbmRvdy5FdmVudFRhcmdldD9udWxsOkliXSxUZXh0OltSXSxDb21tZW50OltSXSxDREFUQVNlY3Rpb246W1JdLFByb2Nlc3NpbmdJbnN0cnVjdGlvbjpbUl0sRWxlbWVudDpbcmMsVCxsYyxSLCF2Lml8fFwiaW5uZXJIVE1MXCJpbiBFbGVtZW50LnByb3RvdHlwZT95YzpudWxsLHdpbmRvdy5IVE1MU2xvdEVsZW1lbnQ/bnVsbDpBY10sSFRNTEVsZW1lbnQ6W3pjLFZdLEhUTUxTbG90RWxlbWVudDpbQWNdLERvY3VtZW50RnJhZ21lbnQ6W2tjLEJjXSxEb2N1bWVudDpbSGMsa2MsQmMsRmNdLFdpbmRvdzpbSWNdLENoYXJhY3RlckRhdGE6W2xjXSxYTUxIdHRwUmVxdWVzdDpbd2luZG93LkV2ZW50VGFyZ2V0P251bGw6SWJdfSxKYz12Lmk/bnVsbDpbXCJpbm5lckhUTUxcIixcInRleHRDb250ZW50XCJdO2Z1bmN0aW9uIFgoYSxiLGMsZCl7Yi5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiBhJiZlJiZBKGEsZSxjLGQpfSl9XG5mdW5jdGlvbiBLYyhhKXt2YXIgYj1hP251bGw6SmMsYztmb3IoYyBpbiBXKVgod2luZG93W2NdJiZ3aW5kb3dbY10ucHJvdG90eXBlLFdbY10sYSxiKX1bXCJUZXh0XCIsXCJDb21tZW50XCIsXCJDREFUQVNlY3Rpb25cIixcIlByb2Nlc3NpbmdJbnN0cnVjdGlvblwiXS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBiPXdpbmRvd1thXSxjPU9iamVjdC5jcmVhdGUoYi5wcm90b3R5cGUpO2MuX19zaGFkeV9wcm90b0lzUGF0Y2hlZD0hMDtYKGMsVy5FdmVudFRhcmdldCk7WChjLFcuTm9kZSk7V1thXSYmWChjLFdbYV0pO2IucHJvdG90eXBlLl9fc2hhZHlfcGF0Y2hlZFByb3RvPWN9KTtmdW5jdGlvbiBMYyhhKXthLl9fc2hhZHlfcHJvdG9Jc1BhdGNoZWQ9ITA7WChhLFcuRXZlbnRUYXJnZXQpO1goYSxXLk5vZGUpO1goYSxXLkVsZW1lbnQpO1goYSxXLkhUTUxFbGVtZW50KTtYKGEsVy5IVE1MU2xvdEVsZW1lbnQpO3JldHVybiBhfTt2YXIgTWM9di5PLE5jPXYuaTtmdW5jdGlvbiBPYyhhLGIpe2lmKE1jJiYhYS5fX3NoYWR5X3Byb3RvSXNQYXRjaGVkJiYheChhKSl7dmFyIGM9T2JqZWN0LmdldFByb3RvdHlwZU9mKGEpLGQ9Yy5oYXNPd25Qcm9wZXJ0eShcIl9fc2hhZHlfcGF0Y2hlZFByb3RvXCIpJiZjLl9fc2hhZHlfcGF0Y2hlZFByb3RvO2R8fChkPU9iamVjdC5jcmVhdGUoYyksTGMoZCksYy5fX3NoYWR5X3BhdGNoZWRQcm90bz1kKTtPYmplY3Quc2V0UHJvdG90eXBlT2YoYSxkKX1OY3x8KDE9PT1iP2FiKGEpOjI9PT1iJiZiYihhKSl9XG5mdW5jdGlvbiBQYyhhLGIsYyxkKXtPYyhhLDEpO2Q9ZHx8bnVsbDt2YXIgZT10KGEpLGY9ZD90KGQpOm51bGw7ZS5wcmV2aW91c1NpYmxpbmc9ZD9mLnByZXZpb3VzU2libGluZzpiLl9fc2hhZHlfbGFzdENoaWxkO2lmKGY9dShlLnByZXZpb3VzU2libGluZykpZi5uZXh0U2libGluZz1hO2lmKGY9dShlLm5leHRTaWJsaW5nPWQpKWYucHJldmlvdXNTaWJsaW5nPWE7ZS5wYXJlbnROb2RlPWI7ZD9kPT09Yy5maXJzdENoaWxkJiYoYy5maXJzdENoaWxkPWEpOihjLmxhc3RDaGlsZD1hLGMuZmlyc3RDaGlsZHx8KGMuZmlyc3RDaGlsZD1hKSk7Yy5jaGlsZE5vZGVzPW51bGx9XG5mdW5jdGlvbiBZYihhLGIsYyl7T2MoYiwyKTt2YXIgZD10KGIpO3ZvaWQgMCE9PWQuZmlyc3RDaGlsZCYmKGQuY2hpbGROb2Rlcz1udWxsKTtpZihhLm5vZGVUeXBlPT09Tm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFKWZvcihhPWEuX19zaGFkeV9uYXRpdmVfZmlyc3RDaGlsZDthO2E9YS5fX3NoYWR5X25hdGl2ZV9uZXh0U2libGluZylQYyhhLGIsZCxjKTtlbHNlIFBjKGEsYixkLGMpfVxuZnVuY3Rpb24gJGIoYSxiKXt2YXIgYz10KGEpO2I9dChiKTthPT09Yi5maXJzdENoaWxkJiYoYi5maXJzdENoaWxkPWMubmV4dFNpYmxpbmcpO2E9PT1iLmxhc3RDaGlsZCYmKGIubGFzdENoaWxkPWMucHJldmlvdXNTaWJsaW5nKTthPWMucHJldmlvdXNTaWJsaW5nO3ZhciBkPWMubmV4dFNpYmxpbmc7YSYmKHQoYSkubmV4dFNpYmxpbmc9ZCk7ZCYmKHQoZCkucHJldmlvdXNTaWJsaW5nPWEpO2MucGFyZW50Tm9kZT1jLnByZXZpb3VzU2libGluZz1jLm5leHRTaWJsaW5nPXZvaWQgMDt2b2lkIDAhPT1iLmNoaWxkTm9kZXMmJihiLmNoaWxkTm9kZXM9bnVsbCl9XG5mdW5jdGlvbiB0YyhhLGIpe3ZhciBjPXQoYSk7aWYoYnx8dm9pZCAwPT09Yy5maXJzdENoaWxkKXtjLmNoaWxkTm9kZXM9bnVsbDt2YXIgZD1jLmZpcnN0Q2hpbGQ9YS5fX3NoYWR5X25hdGl2ZV9maXJzdENoaWxkO2MubGFzdENoaWxkPWEuX19zaGFkeV9uYXRpdmVfbGFzdENoaWxkO09jKGEsMik7Yz1kO2ZvcihkPXZvaWQgMDtjO2M9Yy5fX3NoYWR5X25hdGl2ZV9uZXh0U2libGluZyl7dmFyIGU9dChjKTtlLnBhcmVudE5vZGU9Ynx8YTtlLm5leHRTaWJsaW5nPWMuX19zaGFkeV9uYXRpdmVfbmV4dFNpYmxpbmc7ZS5wcmV2aW91c1NpYmxpbmc9ZHx8bnVsbDtkPWM7T2MoYywxKX19fTt2YXIgUWM9Qih7YWRkRXZlbnRMaXN0ZW5lcjpmdW5jdGlvbihhLGIsYyl7XCJvYmplY3RcIiE9PXR5cGVvZiBjJiYoYz17Y2FwdHVyZTohIWN9KTtjLm89Yy5vfHx0aGlzO3RoaXMuaG9zdC5fX3NoYWR5X2FkZEV2ZW50TGlzdGVuZXIoYSxiLGMpfSxyZW1vdmVFdmVudExpc3RlbmVyOmZ1bmN0aW9uKGEsYixjKXtcIm9iamVjdFwiIT09dHlwZW9mIGMmJihjPXtjYXB0dXJlOiEhY30pO2Mubz1jLm98fHRoaXM7dGhpcy5ob3N0Ll9fc2hhZHlfcmVtb3ZlRXZlbnRMaXN0ZW5lcihhLGIsYyl9fSk7ZnVuY3Rpb24gUmMoYSxiKXtBKGEsUWMsYik7QShhLEZjLGIpO0EoYSx5YyxiKTtBKGEsVCxiKTt2LmwmJiFiPyhBKGEsYWMsYiksQShhLEJjLGIpKTp2Lml8fChBKGEsWWEpLEEoYSxXYSksQShhLFhhKSl9O3ZhciB2Yz17fSxZPXYuZGVmZXJDb25uZWN0aW9uQ2FsbGJhY2tzJiZcImxvYWRpbmdcIj09PWRvY3VtZW50LnJlYWR5U3RhdGUsU2M7ZnVuY3Rpb24gVGMoYSl7dmFyIGI9W107ZG8gYi51bnNoaWZ0KGEpO3doaWxlKGE9YS5fX3NoYWR5X3BhcmVudE5vZGUpO3JldHVybiBifWZ1bmN0aW9uIHVjKGEsYixjKXtpZihhIT09dmMpdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgY29uc3RydWN0b3JcIik7dGhpcy5nPW51bGw7c2ModGhpcyxiLGMpfVxuZnVuY3Rpb24gc2MoYSxiLGMpe2EuaG9zdD1iO2EubW9kZT1jJiZjLm1vZGU7dGMoYS5ob3N0KTtiPXQoYS5ob3N0KTtiLnJvb3Q9YTtiLmVhPVwiY2xvc2VkXCIhPT1hLm1vZGU/YTpudWxsO2I9dChhKTtiLmZpcnN0Q2hpbGQ9Yi5sYXN0Q2hpbGQ9Yi5wYXJlbnROb2RlPWIubmV4dFNpYmxpbmc9Yi5wcmV2aW91c1NpYmxpbmc9bnVsbDtpZih2LnByZWZlclBlcmZvcm1hbmNlKWZvcig7Yj1hLmhvc3QuX19zaGFkeV9uYXRpdmVfZmlyc3RDaGlsZDspYS5ob3N0Ll9fc2hhZHlfbmF0aXZlX3JlbW92ZUNoaWxkKGIpO2Vsc2UgUShhKX1mdW5jdGlvbiBRKGEpe2Euc3x8KGEucz0hMCxCYShmdW5jdGlvbigpe3JldHVybiBiYyhhKX0pKX1cbmZ1bmN0aW9uIGJjKGEpe3ZhciBiO2lmKGI9YS5zKXtmb3IodmFyIGM7YTspYTp7YS5zJiYoYz1hKSxiPWE7YT1iLmhvc3QuX19zaGFkeV9nZXRSb290Tm9kZSgpO2lmKHgoYSkmJihiPXUoYi5ob3N0KSkmJjA8Yi5GKWJyZWFrIGE7YT12b2lkIDB9Yj1jfShjPWIpJiZjLl9yZW5kZXJTZWxmKCl9XG51Yy5wcm90b3R5cGUuX3JlbmRlclNlbGY9ZnVuY3Rpb24oKXt2YXIgYT1ZO1k9ITA7dGhpcy5zPSExO2lmKHRoaXMuZyl7b2ModGhpcyk7Zm9yKHZhciBiPTAsYztiPHRoaXMuZy5sZW5ndGg7YisrKXtjPXRoaXMuZ1tiXTt2YXIgZD11KGMpLGU9ZC5hc3NpZ25lZE5vZGVzO2QuYXNzaWduZWROb2Rlcz1bXTtkLnU9W107aWYoZC5SPWUpZm9yKGQ9MDtkPGUubGVuZ3RoO2QrKyl7dmFyIGY9dShlW2RdKTtmLkw9Zi5hc3NpZ25lZFNsb3Q7Zi5hc3NpZ25lZFNsb3Q9PT1jJiYoZi5hc3NpZ25lZFNsb3Q9bnVsbCl9fWZvcihiPXRoaXMuaG9zdC5fX3NoYWR5X2ZpcnN0Q2hpbGQ7YjtiPWIuX19zaGFkeV9uZXh0U2libGluZylVYyh0aGlzLGIpO2ZvcihiPTA7Yjx0aGlzLmcubGVuZ3RoO2IrKyl7Yz10aGlzLmdbYl07ZT11KGMpO2lmKCFlLmFzc2lnbmVkTm9kZXMubGVuZ3RoKWZvcihkPWMuX19zaGFkeV9maXJzdENoaWxkO2Q7ZD1kLl9fc2hhZHlfbmV4dFNpYmxpbmcpVWModGhpcyxkLGMpO1xuKGQ9KGQ9dShjLl9fc2hhZHlfcGFyZW50Tm9kZSkpJiZkLnJvb3QpJiYoa2EoZCl8fGQucykmJmQuX3JlbmRlclNlbGYoKTtWYyh0aGlzLGUudSxlLmFzc2lnbmVkTm9kZXMpO2lmKGQ9ZS5SKXtmb3IoZj0wO2Y8ZC5sZW5ndGg7ZisrKXUoZFtmXSkuTD1udWxsO2UuUj1udWxsO2QubGVuZ3RoPmUuYXNzaWduZWROb2Rlcy5sZW5ndGgmJihlLk09ITApfWUuTSYmKGUuTT0hMSxXYyh0aGlzLGMpKX1jPXRoaXMuZztiPVtdO2ZvcihlPTA7ZTxjLmxlbmd0aDtlKyspZD1jW2VdLl9fc2hhZHlfcGFyZW50Tm9kZSwoZj11KGQpKSYmZi5yb290fHwhKDA+Yi5pbmRleE9mKGQpKXx8Yi5wdXNoKGQpO2ZvcihjPTA7YzxiLmxlbmd0aDtjKyspe2Y9YltjXTtlPWY9PT10aGlzP3RoaXMuaG9zdDpmO2Q9W107Zm9yKGY9Zi5fX3NoYWR5X2ZpcnN0Q2hpbGQ7ZjtmPWYuX19zaGFkeV9uZXh0U2libGluZylpZihcInNsb3RcIj09Zi5sb2NhbE5hbWUpZm9yKHZhciBnPXUoZikudSxoPTA7aDxnLmxlbmd0aDtoKyspZC5wdXNoKGdbaF0pO1xuZWxzZSBkLnB1c2goZik7Zj1zYShlKTtnPUdiKGQsZC5sZW5ndGgsZixmLmxlbmd0aCk7Zm9yKHZhciBrPWg9MCxsPXZvaWQgMDtoPGcubGVuZ3RoJiYobD1nW2hdKTtoKyspe2Zvcih2YXIgbT0wLHI9dm9pZCAwO208bC5ELmxlbmd0aCYmKHI9bC5EW21dKTttKyspci5fX3NoYWR5X25hdGl2ZV9wYXJlbnROb2RlPT09ZSYmZS5fX3NoYWR5X25hdGl2ZV9yZW1vdmVDaGlsZChyKSxmLnNwbGljZShsLmluZGV4K2ssMSk7ay09bC5HfWs9MDtmb3IobD12b2lkIDA7azxnLmxlbmd0aCYmKGw9Z1trXSk7aysrKWZvcihoPWZbbC5pbmRleF0sbT1sLmluZGV4O208bC5pbmRleCtsLkc7bSsrKXI9ZFttXSxlLl9fc2hhZHlfbmF0aXZlX2luc2VydEJlZm9yZShyLGgpLGYuc3BsaWNlKG0sMCxyKX19aWYoIXYucHJlZmVyUGVyZm9ybWFuY2UmJiF0aGlzLlApZm9yKGI9dGhpcy5ob3N0Ll9fc2hhZHlfZmlyc3RDaGlsZDtiO2I9Yi5fX3NoYWR5X25leHRTaWJsaW5nKWM9dShiKSxiLl9fc2hhZHlfbmF0aXZlX3BhcmVudE5vZGUhPT1cbnRoaXMuaG9zdHx8XCJzbG90XCIhPT1iLmxvY2FsTmFtZSYmYy5hc3NpZ25lZFNsb3R8fHRoaXMuaG9zdC5fX3NoYWR5X25hdGl2ZV9yZW1vdmVDaGlsZChiKTt0aGlzLlA9ITA7WT1hO1NjJiZTYygpfTtmdW5jdGlvbiBVYyhhLGIsYyl7dmFyIGQ9dChiKSxlPWQuTDtkLkw9bnVsbDtjfHwoYz0oYT1hLmhbYi5fX3NoYWR5X3Nsb3R8fFwiX19jYXRjaGFsbFwiXSkmJmFbMF0pO2M/KHQoYykuYXNzaWduZWROb2Rlcy5wdXNoKGIpLGQuYXNzaWduZWRTbG90PWMpOmQuYXNzaWduZWRTbG90PXZvaWQgMDtlIT09ZC5hc3NpZ25lZFNsb3QmJmQuYXNzaWduZWRTbG90JiYodChkLmFzc2lnbmVkU2xvdCkuTT0hMCl9ZnVuY3Rpb24gVmMoYSxiLGMpe2Zvcih2YXIgZD0wLGU9dm9pZCAwO2Q8Yy5sZW5ndGgmJihlPWNbZF0pO2QrKylpZihcInNsb3RcIj09ZS5sb2NhbE5hbWUpe3ZhciBmPXUoZSkuYXNzaWduZWROb2RlcztmJiZmLmxlbmd0aCYmVmMoYSxiLGYpfWVsc2UgYi5wdXNoKGNbZF0pfVxuZnVuY3Rpb24gV2MoYSxiKXtiLl9fc2hhZHlfbmF0aXZlX2Rpc3BhdGNoRXZlbnQobmV3IEV2ZW50KFwic2xvdGNoYW5nZVwiKSk7Yj11KGIpO2IuYXNzaWduZWRTbG90JiZXYyhhLGIuYXNzaWduZWRTbG90KX1mdW5jdGlvbiBYYihhKXthLmo9YS5qfHxbXTthLmc9YS5nfHxbXTthLmg9YS5ofHx7fX1mdW5jdGlvbiBvYyhhKXtpZihhLmomJmEuai5sZW5ndGgpe2Zvcih2YXIgYj1hLmosYyxkPTA7ZDxiLmxlbmd0aDtkKyspe3ZhciBlPWJbZF07dGMoZSk7dmFyIGY9ZS5fX3NoYWR5X3BhcmVudE5vZGU7dGMoZik7Zj11KGYpO2YuRj0oZi5GfHwwKSsxO2Y9cGMoZSk7YS5oW2ZdPyhjPWN8fHt9LGNbZl09ITAsYS5oW2ZdLnB1c2goZSkpOmEuaFtmXT1bZV07YS5nLnB1c2goZSl9aWYoYylmb3IodmFyIGcgaW4gYylhLmhbZ109cWMoYS5oW2ddKTthLmo9W119fVxuZnVuY3Rpb24gcGMoYSl7dmFyIGI9YS5uYW1lfHxhLmdldEF0dHJpYnV0ZShcIm5hbWVcIil8fFwiX19jYXRjaGFsbFwiO3JldHVybiBhLlk9Yn1mdW5jdGlvbiBxYyhhKXtyZXR1cm4gYS5zb3J0KGZ1bmN0aW9uKGIsYyl7Yj1UYyhiKTtmb3IodmFyIGQ9VGMoYyksZT0wO2U8Yi5sZW5ndGg7ZSsrKXtjPWJbZV07dmFyIGY9ZFtlXTtpZihjIT09ZilyZXR1cm4gYj10YShjLl9fc2hhZHlfcGFyZW50Tm9kZSksYi5pbmRleE9mKGMpLWIuaW5kZXhPZihmKX19KX1cbmZ1bmN0aW9uIFpiKGEsYil7aWYoYS5nKXtvYyhhKTt2YXIgYz1hLmgsZDtmb3IoZCBpbiBjKWZvcih2YXIgZT1jW2RdLGY9MDtmPGUubGVuZ3RoO2YrKyl7dmFyIGc9ZVtmXTtpZihyYShiLGcpKXtlLnNwbGljZShmLDEpO3ZhciBoPWEuZy5pbmRleE9mKGcpOzA8PWgmJihhLmcuc3BsaWNlKGgsMSksKGg9dShnLl9fc2hhZHlfcGFyZW50Tm9kZSkpJiZoLkYmJmguRi0tKTtmLS07Zz11KGcpO2lmKGg9Zy51KWZvcih2YXIgaz0wO2s8aC5sZW5ndGg7aysrKXt2YXIgbD1oW2tdLG09bC5fX3NoYWR5X25hdGl2ZV9wYXJlbnROb2RlO20mJm0uX19zaGFkeV9uYXRpdmVfcmVtb3ZlQ2hpbGQobCl9Zy51PVtdO2cuYXNzaWduZWROb2Rlcz1bXTtoPSEwfX1yZXR1cm4gaH19ZnVuY3Rpb24ga2EoYSl7b2MoYSk7cmV0dXJuISghYS5nfHwhYS5nLmxlbmd0aCl9XG4oZnVuY3Rpb24oYSl7YS5fX3Byb3RvX189RG9jdW1lbnRGcmFnbWVudC5wcm90b3R5cGU7UmMoYSxcIl9fc2hhZHlfXCIpO1JjKGEpO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGEse25vZGVUeXBlOnt2YWx1ZTpOb2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUsY29uZmlndXJhYmxlOiEwfSxub2RlTmFtZTp7dmFsdWU6XCIjZG9jdW1lbnQtZnJhZ21lbnRcIixjb25maWd1cmFibGU6ITB9LG5vZGVWYWx1ZTp7dmFsdWU6bnVsbCxjb25maWd1cmFibGU6ITB9fSk7W1wibG9jYWxOYW1lXCIsXCJuYW1lc3BhY2VVUklcIixcInByZWZpeFwiXS5mb3JFYWNoKGZ1bmN0aW9uKGIpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShhLGIse3ZhbHVlOnZvaWQgMCxjb25maWd1cmFibGU6ITB9KX0pO1tcIm93bmVyRG9jdW1lbnRcIixcImJhc2VVUklcIixcImlzQ29ubmVjdGVkXCJdLmZvckVhY2goZnVuY3Rpb24oYil7T2JqZWN0LmRlZmluZVByb3BlcnR5KGEsYix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaG9zdFtiXX0sXG5jb25maWd1cmFibGU6ITB9KX0pfSkodWMucHJvdG90eXBlKTtcbmlmKHdpbmRvdy5jdXN0b21FbGVtZW50cyYmd2luZG93LmN1c3RvbUVsZW1lbnRzLmRlZmluZSYmdi5OJiYhdi5wcmVmZXJQZXJmb3JtYW5jZSl7dmFyIFhjPW5ldyBNYXA7U2M9ZnVuY3Rpb24oKXt2YXIgYT1bXTtYYy5mb3JFYWNoKGZ1bmN0aW9uKGQsZSl7YS5wdXNoKFtlLGRdKX0pO1hjLmNsZWFyKCk7Zm9yKHZhciBiPTA7YjxhLmxlbmd0aDtiKyspe3ZhciBjPWFbYl1bMF07YVtiXVsxXT9jLl9fc2hhZHlkb21fY29ubmVjdGVkQ2FsbGJhY2soKTpjLl9fc2hhZHlkb21fZGlzY29ubmVjdGVkQ2FsbGJhY2soKX19O1kmJmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJyZWFkeXN0YXRlY2hhbmdlXCIsZnVuY3Rpb24oKXtZPSExO1NjKCl9LHtvbmNlOiEwfSk7dmFyIFljPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD0wLGU9XCJfX2lzQ29ubmVjdGVkXCIrZCsrO2lmKGJ8fGMpYS5wcm90b3R5cGUuY29ubmVjdGVkQ2FsbGJhY2s9YS5wcm90b3R5cGUuX19zaGFkeWRvbV9jb25uZWN0ZWRDYWxsYmFjaz1cbmZ1bmN0aW9uKCl7WT9YYy5zZXQodGhpcywhMCk6dGhpc1tlXXx8KHRoaXNbZV09ITAsYiYmYi5jYWxsKHRoaXMpKX0sYS5wcm90b3R5cGUuZGlzY29ubmVjdGVkQ2FsbGJhY2s9YS5wcm90b3R5cGUuX19zaGFkeWRvbV9kaXNjb25uZWN0ZWRDYWxsYmFjaz1mdW5jdGlvbigpe1k/dGhpcy5pc0Nvbm5lY3RlZHx8WGMuc2V0KHRoaXMsITEpOnRoaXNbZV0mJih0aGlzW2VdPSExLGMmJmMuY2FsbCh0aGlzKSl9O3JldHVybiBhfSxaYz13aW5kb3cuY3VzdG9tRWxlbWVudHMuZGVmaW5lLCRjPWZ1bmN0aW9uKGEsYil7dmFyIGM9Yi5wcm90b3R5cGUuY29ubmVjdGVkQ2FsbGJhY2ssZD1iLnByb3RvdHlwZS5kaXNjb25uZWN0ZWRDYWxsYmFjaztaYy5jYWxsKHdpbmRvdy5jdXN0b21FbGVtZW50cyxhLFljKGIsYyxkKSk7Yi5wcm90b3R5cGUuY29ubmVjdGVkQ2FsbGJhY2s9YztiLnByb3RvdHlwZS5kaXNjb25uZWN0ZWRDYWxsYmFjaz1kfTt3aW5kb3cuY3VzdG9tRWxlbWVudHMuZGVmaW5lPVxuJGM7T2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdy5DdXN0b21FbGVtZW50UmVnaXN0cnkucHJvdG90eXBlLFwiZGVmaW5lXCIse3ZhbHVlOiRjLGNvbmZpZ3VyYWJsZTohMH0pfWZ1bmN0aW9uIFAoYSl7YT1hLl9fc2hhZHlfZ2V0Um9vdE5vZGUoKTtpZih4KGEpKXJldHVybiBhfTtmdW5jdGlvbiBaKGEpe3RoaXMubm9kZT1hfW49Wi5wcm90b3R5cGU7bi5hZGRFdmVudExpc3RlbmVyPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfYWRkRXZlbnRMaXN0ZW5lcihhLGIsYyl9O24ucmVtb3ZlRXZlbnRMaXN0ZW5lcj1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X3JlbW92ZUV2ZW50TGlzdGVuZXIoYSxiLGMpfTtuLmFwcGVuZENoaWxkPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV9hcHBlbmRDaGlsZChhKX07bi5pbnNlcnRCZWZvcmU9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfaW5zZXJ0QmVmb3JlKGEsYil9O24ucmVtb3ZlQ2hpbGQ9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X3JlbW92ZUNoaWxkKGEpfTtuLnJlcGxhY2VDaGlsZD1mdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV9yZXBsYWNlQ2hpbGQoYSxiKX07XG5uLmNsb25lTm9kZT1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfY2xvbmVOb2RlKGEpfTtuLmdldFJvb3ROb2RlPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV9nZXRSb290Tm9kZShhKX07bi5jb250YWlucz1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfY29udGFpbnMoYSl9O24uZGlzcGF0Y2hFdmVudD1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfZGlzcGF0Y2hFdmVudChhKX07bi5zZXRBdHRyaWJ1dGU9ZnVuY3Rpb24oYSxiKXt0aGlzLm5vZGUuX19zaGFkeV9zZXRBdHRyaWJ1dGUoYSxiKX07bi5nZXRBdHRyaWJ1dGU9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X25hdGl2ZV9nZXRBdHRyaWJ1dGUoYSl9O24ucmVtb3ZlQXR0cmlidXRlPWZ1bmN0aW9uKGEpe3RoaXMubm9kZS5fX3NoYWR5X3JlbW92ZUF0dHJpYnV0ZShhKX07XG5uLnRvZ2dsZUF0dHJpYnV0ZT1mdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV90b2dnbGVBdHRyaWJ1dGUoYSxiKX07bi5hdHRhY2hTaGFkb3c9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X2F0dGFjaFNoYWRvdyhhKX07bi5mb2N1cz1mdW5jdGlvbigpe3RoaXMubm9kZS5fX3NoYWR5X25hdGl2ZV9mb2N1cygpfTtuLmJsdXI9ZnVuY3Rpb24oKXt0aGlzLm5vZGUuX19zaGFkeV9ibHVyKCl9O24uaW1wb3J0Tm9kZT1mdW5jdGlvbihhLGIpe2lmKHRoaXMubm9kZS5ub2RlVHlwZT09PU5vZGUuRE9DVU1FTlRfTk9ERSlyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfaW1wb3J0Tm9kZShhLGIpfTtuLmdldEVsZW1lbnRCeUlkPWZ1bmN0aW9uKGEpe2lmKHRoaXMubm9kZS5ub2RlVHlwZT09PU5vZGUuRE9DVU1FTlRfTk9ERSlyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfZ2V0RWxlbWVudEJ5SWQoYSl9O1xubi5lbGVtZW50c0Zyb21Qb2ludD1mdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV9lbGVtZW50c0Zyb21Qb2ludChhLGIpfTtuLmVsZW1lbnRGcm9tUG9pbnQ9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfZWxlbWVudEZyb21Qb2ludChhLGIpfTtuLnF1ZXJ5U2VsZWN0b3I9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X3F1ZXJ5U2VsZWN0b3IoYSl9O24ucXVlcnlTZWxlY3RvckFsbD1mdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV9xdWVyeVNlbGVjdG9yQWxsKGEsYil9O24uYXNzaWduZWROb2Rlcz1mdW5jdGlvbihhKXtpZihcInNsb3RcIj09PXRoaXMubm9kZS5sb2NhbE5hbWUpcmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X2Fzc2lnbmVkTm9kZXMoYSl9O1xubi5hcHBlbmQ9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPVtdLGM9MDtjPGFyZ3VtZW50cy5sZW5ndGg7KytjKWJbY109YXJndW1lbnRzW2NdO3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV9hcHBlbmQuYXBwbHkodGhpcy5ub2RlLHEoYikpfTtuLnByZXBlbmQ9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPVtdLGM9MDtjPGFyZ3VtZW50cy5sZW5ndGg7KytjKWJbY109YXJndW1lbnRzW2NdO3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV9wcmVwZW5kLmFwcGx5KHRoaXMubm9kZSxxKGIpKX07bi5hZnRlcj1mdW5jdGlvbihhKXtmb3IodmFyIGI9W10sYz0wO2M8YXJndW1lbnRzLmxlbmd0aDsrK2MpYltjXT1hcmd1bWVudHNbY107cmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X2FmdGVyLmFwcGx5KHRoaXMubm9kZSxxKGIpKX07XG5uLmJlZm9yZT1mdW5jdGlvbihhKXtmb3IodmFyIGI9W10sYz0wO2M8YXJndW1lbnRzLmxlbmd0aDsrK2MpYltjXT1hcmd1bWVudHNbY107cmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X2JlZm9yZS5hcHBseSh0aGlzLm5vZGUscShiKSl9O24ucmVtb3ZlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X3JlbW92ZSgpfTtuLnJlcGxhY2VXaXRoPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1bXSxjPTA7Yzxhcmd1bWVudHMubGVuZ3RoOysrYyliW2NdPWFyZ3VtZW50c1tjXTtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfcmVwbGFjZVdpdGguYXBwbHkodGhpcy5ub2RlLHEoYikpfTtcbmNhLk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFoucHJvdG90eXBlLHthY3RpdmVFbGVtZW50Ontjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtpZih4KHRoaXMubm9kZSl8fHRoaXMubm9kZS5ub2RlVHlwZT09PU5vZGUuRE9DVU1FTlRfTk9ERSlyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfYWN0aXZlRWxlbWVudH19LF9hY3RpdmVFbGVtZW50Ontjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hY3RpdmVFbGVtZW50fX0saG9zdDp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7aWYoeCh0aGlzLm5vZGUpKXJldHVybiB0aGlzLm5vZGUuaG9zdH19LHBhcmVudE5vZGU6e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV9wYXJlbnROb2RlfX0sZmlyc3RDaGlsZDp7Y29uZmlndXJhYmxlOiEwLFxuZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfZmlyc3RDaGlsZH19LGxhc3RDaGlsZDp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X2xhc3RDaGlsZH19LG5leHRTaWJsaW5nOntjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfbmV4dFNpYmxpbmd9fSxwcmV2aW91c1NpYmxpbmc6e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV9wcmV2aW91c1NpYmxpbmd9fSxjaGlsZE5vZGVzOntjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfY2hpbGROb2Rlc319LHBhcmVudEVsZW1lbnQ6e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLFxuZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X3BhcmVudEVsZW1lbnR9fSxmaXJzdEVsZW1lbnRDaGlsZDp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X2ZpcnN0RWxlbWVudENoaWxkfX0sbGFzdEVsZW1lbnRDaGlsZDp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X2xhc3RFbGVtZW50Q2hpbGR9fSxuZXh0RWxlbWVudFNpYmxpbmc6e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV9uZXh0RWxlbWVudFNpYmxpbmd9fSxwcmV2aW91c0VsZW1lbnRTaWJsaW5nOntjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfcHJldmlvdXNFbGVtZW50U2libGluZ319LFxuY2hpbGRyZW46e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV9jaGlsZHJlbn19LGNoaWxkRWxlbWVudENvdW50Ontjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfY2hpbGRFbGVtZW50Q291bnR9fSxzaGFkb3dSb290Ontjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfc2hhZG93Um9vdH19LGFzc2lnbmVkU2xvdDp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X2Fzc2lnbmVkU2xvdH19LGlzQ29ubmVjdGVkOntjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfaXNDb25uZWN0ZWR9fSxpbm5lckhUTUw6e2NvbmZpZ3VyYWJsZTohMCxcbmVudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X2lubmVySFRNTH0sc2V0OmZ1bmN0aW9uKGEpe3RoaXMubm9kZS5fX3NoYWR5X2lubmVySFRNTD1hfX0sdGV4dENvbnRlbnQ6e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV90ZXh0Q29udGVudH0sc2V0OmZ1bmN0aW9uKGEpe3RoaXMubm9kZS5fX3NoYWR5X3RleHRDb250ZW50PWF9fSxzbG90Ontjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfc2xvdH0sc2V0OmZ1bmN0aW9uKGEpe3RoaXMubm9kZS5fX3NoYWR5X3Nsb3Q9YX19LGNsYXNzTmFtZTp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X2NsYXNzTmFtZX0sc2V0OmZ1bmN0aW9uKGEpe3RoaXMubm9kZS5fX3NoYWR5X2NsYXNzTmFtZT1cbmF9fX0pO2Z1bmN0aW9uIGFkKGEpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShaLnByb3RvdHlwZSxhLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlW1wiX19zaGFkeV9cIithXX0sc2V0OmZ1bmN0aW9uKGIpe3RoaXMubm9kZVtcIl9fc2hhZHlfXCIrYV09Yn0sY29uZmlndXJhYmxlOiEwfSl9RGIuZm9yRWFjaChmdW5jdGlvbihhKXtyZXR1cm4gYWQoYSl9KTtFYi5mb3JFYWNoKGZ1bmN0aW9uKGEpe3JldHVybiBhZChhKX0pO3ZhciBiZD1uZXcgV2Vha01hcDtmdW5jdGlvbiBjZChhKXtpZih4KGEpfHxhIGluc3RhbmNlb2YgWilyZXR1cm4gYTt2YXIgYj1iZC5nZXQoYSk7Ynx8KGI9bmV3IFooYSksYmQuc2V0KGEsYikpO3JldHVybiBifTtpZih2Lk4pe3ZhciBkZD12Lmk/ZnVuY3Rpb24oYSl7cmV0dXJuIGF9OmZ1bmN0aW9uKGEpe2JiKGEpO2FiKGEpO3JldHVybiBhfTt3aW5kb3cuU2hhZHlET009e2luVXNlOnYuTixwYXRjaDpkZCxpc1NoYWR5Um9vdDp4LGVucXVldWU6QmEsZmx1c2g6RixmbHVzaEluaXRpYWw6ZnVuY3Rpb24oYSl7IWEuUCYmYS5zJiZiYyhhKX0sc2V0dGluZ3M6dixmaWx0ZXJNdXRhdGlvbnM6R2Esb2JzZXJ2ZUNoaWxkcmVuOkVhLHVub2JzZXJ2ZUNoaWxkcmVuOkZhLGRlZmVyQ29ubmVjdGlvbkNhbGxiYWNrczp2LmRlZmVyQ29ubmVjdGlvbkNhbGxiYWNrcyxwcmVmZXJQZXJmb3JtYW5jZTp2LnByZWZlclBlcmZvcm1hbmNlLGhhbmRsZXNEeW5hbWljU2NvcGluZzohMCx3cmFwOnYubD9jZDpkZCx3cmFwSWZOZWVkZWQ6ITA9PT12Lmw/Y2Q6ZnVuY3Rpb24oYSl7cmV0dXJuIGF9LFdyYXBwZXI6Wixjb21wb3NlZFBhdGg6aWIsbm9QYXRjaDp2LmwscGF0Y2hPbkRlbWFuZDp2Lk8sbmF0aXZlTWV0aG9kczpPYSxcbm5hdGl2ZVRyZWU6UGEscGF0Y2hFbGVtZW50UHJvdG86TGMscXVlcnlTZWxlY3RvckltcGxlbWVudGF0aW9uOnYucXVlcnlTZWxlY3RvckltcGxlbWVudGF0aW9ufTtWYSgpO0tjKFwiX19zaGFkeV9cIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KGRvY3VtZW50LFwiX2FjdGl2ZUVsZW1lbnRcIixGYy5hY3RpdmVFbGVtZW50KTtBKFdpbmRvdy5wcm90b3R5cGUsSWMsXCJfX3NoYWR5X1wiKTt2Lmw/di5PJiZBKEVsZW1lbnQucHJvdG90eXBlLHdjKTooS2MoKSxDYigpKTt4YigpO3dpbmRvdy5FdmVudD16Yjt3aW5kb3cuQ3VzdG9tRXZlbnQ9QWI7d2luZG93Lk1vdXNlRXZlbnQ9QmI7d2luZG93LlNoYWRvd1Jvb3Q9dWN9O30pLmNhbGwodGhpcyk7XG5cbiIsICJcbi8vIF9ET01Ub2tlbkxpc3Rcbi8qXG5Db3B5cmlnaHQgKGMpIDIwMTYsIEpvaG4gR2FyZG5lclxuXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXG4qL1xudmFyIF9ET01Ub2tlbkxpc3QgPSAoZnVuY3Rpb24oKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcblx0dmFyIGRwU3VwcG9ydCA9IHRydWU7XG5cdHZhciBkZWZpbmVHZXR0ZXIgPSBmdW5jdGlvbiAob2JqZWN0LCBuYW1lLCBmbiwgY29uZmlndXJhYmxlKSB7XG5cdFx0aWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSlcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmplY3QsIG5hbWUsIHtcblx0XHRcdFx0Y29uZmlndXJhYmxlOiBmYWxzZSA9PT0gZHBTdXBwb3J0ID8gdHJ1ZSA6ICEhY29uZmlndXJhYmxlLFxuXHRcdFx0XHRnZXQ6IGZuXG5cdFx0XHR9KTtcblxuXHRcdGVsc2Ugb2JqZWN0Ll9fZGVmaW5lR2V0dGVyX18obmFtZSwgZm4pO1xuXHR9O1xuXG5cdC8qKiBFbnN1cmUgdGhlIGJyb3dzZXIgYWxsb3dzIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSB0byBiZSB1c2VkIG9uIG5hdGl2ZSBKYXZhU2NyaXB0IG9iamVjdHMuICovXG5cdHRyeSB7XG5cdFx0ZGVmaW5lR2V0dGVyKHt9LCBcInN1cHBvcnRcIik7XG5cdH1cblx0Y2F0Y2ggKGUpIHtcblx0XHRkcFN1cHBvcnQgPSBmYWxzZTtcblx0fVxuXG5cblx0dmFyIF9ET01Ub2tlbkxpc3QgPSBmdW5jdGlvbiAoZWwsIHByb3ApIHtcblx0XHR2YXIgdGhhdCA9IHRoaXM7XG5cdFx0dmFyIHRva2VucyA9IFtdO1xuXHRcdHZhciB0b2tlbk1hcCA9IHt9O1xuXHRcdHZhciBsZW5ndGggPSAwO1xuXHRcdHZhciBtYXhMZW5ndGggPSAwO1xuXHRcdHZhciBhZGRJbmRleEdldHRlciA9IGZ1bmN0aW9uIChpKSB7XG5cdFx0XHRkZWZpbmVHZXR0ZXIodGhhdCwgaSwgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRwcmVvcCgpO1xuXHRcdFx0XHRyZXR1cm4gdG9rZW5zW2ldO1xuXHRcdFx0fSwgZmFsc2UpO1xuXG5cdFx0fTtcblx0XHR2YXIgcmVpbmRleCA9IGZ1bmN0aW9uICgpIHtcblxuXHRcdFx0LyoqIERlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBhcnJheS1saWtlIGFjY2VzcyB0byB0aGUgdG9rZW5MaXN0J3MgY29udGVudHMuICovXG5cdFx0XHRpZiAobGVuZ3RoID49IG1heExlbmd0aClcblx0XHRcdFx0Zm9yICg7IG1heExlbmd0aCA8IGxlbmd0aDsgKyttYXhMZW5ndGgpIHtcblx0XHRcdFx0XHRhZGRJbmRleEdldHRlcihtYXhMZW5ndGgpO1xuXHRcdFx0XHR9XG5cdFx0fTtcblxuXHRcdC8qKiBIZWxwZXIgZnVuY3Rpb24gY2FsbGVkIGF0IHRoZSBzdGFydCBvZiBlYWNoIGNsYXNzIG1ldGhvZC4gSW50ZXJuYWwgdXNlIG9ubHkuICovXG5cdFx0dmFyIHByZW9wID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0dmFyIGVycm9yO1xuXHRcdFx0dmFyIGk7XG5cdFx0XHR2YXIgYXJncyA9IGFyZ3VtZW50cztcblx0XHRcdHZhciByU3BhY2UgPSAvXFxzKy87XG5cblx0XHRcdC8qKiBWYWxpZGF0ZSB0aGUgdG9rZW4vcyBwYXNzZWQgdG8gYW4gaW5zdGFuY2UgbWV0aG9kLCBpZiBhbnkuICovXG5cdFx0XHRpZiAoYXJncy5sZW5ndGgpXG5cdFx0XHRcdGZvciAoaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgKytpKVxuXHRcdFx0XHRcdGlmIChyU3BhY2UudGVzdChhcmdzW2ldKSkge1xuXHRcdFx0XHRcdFx0ZXJyb3IgPSBuZXcgU3ludGF4RXJyb3IoJ1N0cmluZyBcIicgKyBhcmdzW2ldICsgJ1wiICcgKyBcImNvbnRhaW5zXCIgKyAnIGFuIGludmFsaWQgY2hhcmFjdGVyJyk7XG5cdFx0XHRcdFx0XHRlcnJvci5jb2RlID0gNTtcblx0XHRcdFx0XHRcdGVycm9yLm5hbWUgPSBcIkludmFsaWRDaGFyYWN0ZXJFcnJvclwiO1xuXHRcdFx0XHRcdFx0dGhyb3cgZXJyb3I7XG5cdFx0XHRcdFx0fVxuXG5cblx0XHRcdC8qKiBTcGxpdCB0aGUgbmV3IHZhbHVlIGFwYXJ0IGJ5IHdoaXRlc3BhY2UqL1xuXHRcdFx0aWYgKHR5cGVvZiBlbFtwcm9wXSA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHR0b2tlbnMgPSAoXCJcIiArIGVsW3Byb3BdLmJhc2VWYWwpLnJlcGxhY2UoL15cXHMrfFxccyskL2csIFwiXCIpLnNwbGl0KHJTcGFjZSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0b2tlbnMgPSAoXCJcIiArIGVsW3Byb3BdKS5yZXBsYWNlKC9eXFxzK3xcXHMrJC9nLCBcIlwiKS5zcGxpdChyU3BhY2UpO1xuXHRcdFx0fVxuXG5cdFx0XHQvKiogQXZvaWQgdHJlYXRpbmcgYmxhbmsgc3RyaW5ncyBhcyBzaW5nbGUtaXRlbSB0b2tlbiBsaXN0cyAqL1xuXHRcdFx0aWYgKFwiXCIgPT09IHRva2Vuc1swXSkgdG9rZW5zID0gW107XG5cblx0XHRcdC8qKiBSZXBvcHVsYXRlIHRoZSBpbnRlcm5hbCB0b2tlbiBsaXN0cyAqL1xuXHRcdFx0dG9rZW5NYXAgPSB7fTtcblx0XHRcdGZvciAoaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyArK2kpXG5cdFx0XHRcdHRva2VuTWFwW3Rva2Vuc1tpXV0gPSB0cnVlO1xuXHRcdFx0bGVuZ3RoID0gdG9rZW5zLmxlbmd0aDtcblx0XHRcdHJlaW5kZXgoKTtcblx0XHR9O1xuXG5cdFx0LyoqIFBvcHVsYXRlIG91ciBpbnRlcm5hbCB0b2tlbiBsaXN0IGlmIHRoZSB0YXJnZXRlZCBhdHRyaWJ1dGUgb2YgdGhlIHN1YmplY3QgZWxlbWVudCBpc24ndCBlbXB0eS4gKi9cblx0XHRwcmVvcCgpO1xuXG5cdFx0LyoqIFJldHVybiB0aGUgbnVtYmVyIG9mIHRva2VucyBpbiB0aGUgdW5kZXJseWluZyBzdHJpbmcuIFJlYWQtb25seS4gKi9cblx0XHRkZWZpbmVHZXR0ZXIodGhhdCwgXCJsZW5ndGhcIiwgZnVuY3Rpb24gKCkge1xuXHRcdFx0cHJlb3AoKTtcblx0XHRcdHJldHVybiBsZW5ndGg7XG5cdFx0fSk7XG5cblx0XHQvKiogT3ZlcnJpZGUgdGhlIGRlZmF1bHQgdG9TdHJpbmcvdG9Mb2NhbGVTdHJpbmcgbWV0aG9kcyB0byByZXR1cm4gYSBzcGFjZS1kZWxpbWl0ZWQgbGlzdCBvZiB0b2tlbnMgd2hlbiB0eXBlY2FzdC4gKi9cblx0XHR0aGF0LnRvTG9jYWxlU3RyaW5nID1cblx0XHRcdHRoYXQudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHByZW9wKCk7XG5cdFx0XHRcdHJldHVybiB0b2tlbnMuam9pbihcIiBcIik7XG5cdFx0XHR9O1xuXG5cdFx0dGhhdC5pdGVtID0gZnVuY3Rpb24gKGlkeCkge1xuXHRcdFx0cHJlb3AoKTtcblx0XHRcdHJldHVybiB0b2tlbnNbaWR4XTtcblx0XHR9O1xuXG5cdFx0dGhhdC5jb250YWlucyA9IGZ1bmN0aW9uICh0b2tlbikge1xuXHRcdFx0cHJlb3AoKTtcblx0XHRcdHJldHVybiAhIXRva2VuTWFwW3Rva2VuXTtcblx0XHR9O1xuXG5cdFx0dGhhdC5hZGQgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRwcmVvcC5hcHBseSh0aGF0LCBhcmdzID0gYXJndW1lbnRzKTtcblxuXHRcdFx0Zm9yICh2YXIgYXJncywgdG9rZW4sIGkgPSAwLCBsID0gYXJncy5sZW5ndGg7IGkgPCBsOyArK2kpIHtcblx0XHRcdFx0dG9rZW4gPSBhcmdzW2ldO1xuXHRcdFx0XHRpZiAoIXRva2VuTWFwW3Rva2VuXSkge1xuXHRcdFx0XHRcdHRva2Vucy5wdXNoKHRva2VuKTtcblx0XHRcdFx0XHR0b2tlbk1hcFt0b2tlbl0gPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8qKiBVcGRhdGUgdGhlIHRhcmdldGVkIGF0dHJpYnV0ZSBvZiB0aGUgYXR0YWNoZWQgZWxlbWVudCBpZiB0aGUgdG9rZW4gbGlzdCdzIGNoYW5nZWQuICovXG5cdFx0XHRpZiAobGVuZ3RoICE9PSB0b2tlbnMubGVuZ3RoKSB7XG5cdFx0XHRcdGxlbmd0aCA9IHRva2Vucy5sZW5ndGggPj4+IDA7XG5cdFx0XHRcdGlmICh0eXBlb2YgZWxbcHJvcF0gPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdFx0XHRlbFtwcm9wXS5iYXNlVmFsID0gdG9rZW5zLmpvaW4oXCIgXCIpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGVsW3Byb3BdID0gdG9rZW5zLmpvaW4oXCIgXCIpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJlaW5kZXgoKTtcblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0dGhhdC5yZW1vdmUgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRwcmVvcC5hcHBseSh0aGF0LCBhcmdzID0gYXJndW1lbnRzKTtcblxuXHRcdFx0LyoqIEJ1aWxkIGEgaGFzaCBvZiB0b2tlbiBuYW1lcyB0byBjb21wYXJlIGFnYWluc3Qgd2hlbiByZWNvbGxlY3Rpbmcgb3VyIHRva2VuIGxpc3QuICovXG5cdFx0XHRmb3IgKHZhciBhcmdzLCBpZ25vcmUgPSB7fSwgaSA9IDAsIHQgPSBbXTsgaSA8IGFyZ3MubGVuZ3RoOyArK2kpIHtcblx0XHRcdFx0aWdub3JlW2FyZ3NbaV1dID0gdHJ1ZTtcblx0XHRcdFx0ZGVsZXRlIHRva2VuTWFwW2FyZ3NbaV1dO1xuXHRcdFx0fVxuXG5cdFx0XHQvKiogUnVuIHRocm91Z2ggb3VyIHRva2VucyBsaXN0IGFuZCByZWFzc2lnbiBvbmx5IHRob3NlIHRoYXQgYXJlbid0IGRlZmluZWQgaW4gdGhlIGhhc2ggZGVjbGFyZWQgYWJvdmUuICovXG5cdFx0XHRmb3IgKGkgPSAwOyBpIDwgdG9rZW5zLmxlbmd0aDsgKytpKVxuXHRcdFx0XHRpZiAoIWlnbm9yZVt0b2tlbnNbaV1dKSB0LnB1c2godG9rZW5zW2ldKTtcblxuXHRcdFx0dG9rZW5zID0gdDtcblx0XHRcdGxlbmd0aCA9IHQubGVuZ3RoID4+PiAwO1xuXG5cdFx0XHQvKiogVXBkYXRlIHRoZSB0YXJnZXRlZCBhdHRyaWJ1dGUgb2YgdGhlIGF0dGFjaGVkIGVsZW1lbnQuICovXG5cdFx0XHRpZiAodHlwZW9mIGVsW3Byb3BdID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRcdGVsW3Byb3BdLmJhc2VWYWwgPSB0b2tlbnMuam9pbihcIiBcIik7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRlbFtwcm9wXSA9IHRva2Vucy5qb2luKFwiIFwiKTtcblx0XHRcdH1cblx0XHRcdHJlaW5kZXgoKTtcblx0XHR9O1xuXG5cdFx0dGhhdC50b2dnbGUgPSBmdW5jdGlvbiAodG9rZW4sIGZvcmNlKSB7XG5cdFx0XHRwcmVvcC5hcHBseSh0aGF0LCBbdG9rZW5dKTtcblxuXHRcdFx0LyoqIFRva2VuIHN0YXRlJ3MgYmVpbmcgZm9yY2VkLiAqL1xuXHRcdFx0aWYgKHVuZGVmaW5lZCAhPT0gZm9yY2UpIHtcblx0XHRcdFx0aWYgKGZvcmNlKSB7XG5cdFx0XHRcdFx0dGhhdC5hZGQodG9rZW4pO1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRoYXQucmVtb3ZlKHRva2VuKTtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0LyoqIFRva2VuIGFscmVhZHkgZXhpc3RzIGluIHRva2VuTGlzdC4gUmVtb3ZlIGl0LCBhbmQgcmV0dXJuIEZBTFNFLiAqL1xuXHRcdFx0aWYgKHRva2VuTWFwW3Rva2VuXSkge1xuXHRcdFx0XHR0aGF0LnJlbW92ZSh0b2tlbik7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblxuXHRcdFx0LyoqIE90aGVyd2lzZSwgYWRkIHRoZSB0b2tlbiBhbmQgcmV0dXJuIFRSVUUuICovXG5cdFx0XHR0aGF0LmFkZCh0b2tlbik7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9O1xuXG5cdFx0dGhhdC5mb3JFYWNoID0gQXJyYXkucHJvdG90eXBlLmZvckVhY2g7XG5cblx0XHRyZXR1cm4gdGhhdDtcblx0fTtcblxuXHRyZXR1cm4gX0RPTVRva2VuTGlzdDtcbn0oKSk7XG5leHBvcnQgZGVmYXVsdCBfRE9NVG9rZW5MaXN0O1xuIiwgImltcG9ydCBfRE9NVG9rZW5MaXN0IGZyb20gXCJAbXJoZW5yeS9jb3JlLXdlYi9oZWxwZXJzL19ET01Ub2tlbkxpc3RcIjtcbihmdW5jdGlvbih1bmRlZmluZWQpIHtcbmlmICghKFwiRE9NVG9rZW5MaXN0XCJpbiBzZWxmJiZmdW5jdGlvbihlKXtyZXR1cm4hKFwiY2xhc3NMaXN0XCJpbiBlKXx8IWUuY2xhc3NMaXN0LnRvZ2dsZShcInhcIiwhMSkmJiFlLmNsYXNzTmFtZX0oZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInhcIikpXG4pKSB7XG4vLyBET01Ub2tlbkxpc3Rcbi8qIGdsb2JhbCBfRE9NVG9rZW5MaXN0ICovXG4oZnVuY3Rpb24gKGdsb2JhbCkge1xuXHR2YXIgbmF0aXZlSW1wbCA9IFwiRE9NVG9rZW5MaXN0XCIgaW4gZ2xvYmFsICYmIGdsb2JhbC5ET01Ub2tlbkxpc3Q7XG5cblx0aWYgKFxuXHRcdFx0IW5hdGl2ZUltcGwgfHxcblx0XHRcdChcblx0XHRcdFx0ISFkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMgJiZcblx0XHRcdFx0ISFkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ3N2ZycpICYmXG5cdFx0XHRcdCEoZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgXCJzdmdcIikuY2xhc3NMaXN0IGluc3RhbmNlb2YgRE9NVG9rZW5MaXN0KVxuXHRcdFx0KVxuXHRcdCkge1xuXHRcdGdsb2JhbC5ET01Ub2tlbkxpc3QgPSBfRE9NVG9rZW5MaXN0O1xuXHR9XG5cblx0Ly8gQWRkIHNlY29uZCBhcmd1bWVudCB0byBuYXRpdmUgRE9NVG9rZW5MaXN0LnRvZ2dsZSgpIGlmIG5lY2Vzc2FyeVxuXHQoZnVuY3Rpb24gKCkge1xuXHRcdHZhciBlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuXHRcdGlmICghKCdjbGFzc0xpc3QnIGluIGUpKSByZXR1cm47XG5cdFx0ZS5jbGFzc0xpc3QudG9nZ2xlKCd4JywgZmFsc2UpO1xuXHRcdGlmICghZS5jbGFzc0xpc3QuY29udGFpbnMoJ3gnKSkgcmV0dXJuO1xuXHRcdGUuY2xhc3NMaXN0LmNvbnN0cnVjdG9yLnByb3RvdHlwZS50b2dnbGUgPSBmdW5jdGlvbiB0b2dnbGUodG9rZW4gLyosIGZvcmNlKi8pIHtcblx0XHRcdHZhciBmb3JjZSA9IGFyZ3VtZW50c1sxXTtcblx0XHRcdGlmIChmb3JjZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHZhciBhZGQgPSAhdGhpcy5jb250YWlucyh0b2tlbik7XG5cdFx0XHRcdHRoaXNbYWRkID8gJ2FkZCcgOiAncmVtb3ZlJ10odG9rZW4pO1xuXHRcdFx0XHRyZXR1cm4gYWRkO1xuXHRcdFx0fVxuXHRcdFx0Zm9yY2UgPSAhIWZvcmNlO1xuXHRcdFx0dGhpc1tmb3JjZSA/ICdhZGQnIDogJ3JlbW92ZSddKHRva2VuKTtcblx0XHRcdHJldHVybiBmb3JjZTtcblx0XHR9O1xuXHR9KCkpO1xuXG5cdC8vIEFkZCBtdWx0aXBsZSBhcmd1bWVudHMgdG8gbmF0aXZlIERPTVRva2VuTGlzdC5hZGQoKSBpZiBuZWNlc3Nhcnlcblx0KGZ1bmN0aW9uICgpIHtcblx0XHR2YXIgZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcblx0XHRpZiAoISgnY2xhc3NMaXN0JyBpbiBlKSkgcmV0dXJuO1xuXHRcdGUuY2xhc3NMaXN0LmFkZCgnYScsICdiJyk7XG5cdFx0aWYgKGUuY2xhc3NMaXN0LmNvbnRhaW5zKCdiJykpIHJldHVybjtcblx0XHR2YXIgbmF0aXZlID0gZS5jbGFzc0xpc3QuY29uc3RydWN0b3IucHJvdG90eXBlLmFkZDtcblx0XHRlLmNsYXNzTGlzdC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0dmFyIGFyZ3MgPSBhcmd1bWVudHM7XG5cdFx0XHR2YXIgbCA9IGFyZ3VtZW50cy5sZW5ndGg7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGw7IGkrKykge1xuXHRcdFx0XHRuYXRpdmUuY2FsbCh0aGlzLCBhcmdzW2ldKTtcblx0XHRcdH1cblx0XHR9O1xuXHR9KCkpO1xuXG5cdC8vIEFkZCBtdWx0aXBsZSBhcmd1bWVudHMgdG8gbmF0aXZlIERPTVRva2VuTGlzdC5yZW1vdmUoKSBpZiBuZWNlc3Nhcnlcblx0KGZ1bmN0aW9uICgpIHtcblx0XHR2YXIgZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcblx0XHRpZiAoISgnY2xhc3NMaXN0JyBpbiBlKSkgcmV0dXJuO1xuXHRcdGUuY2xhc3NMaXN0LmFkZCgnYScpO1xuXHRcdGUuY2xhc3NMaXN0LmFkZCgnYicpO1xuXHRcdGUuY2xhc3NMaXN0LnJlbW92ZSgnYScsICdiJyk7XG5cdFx0aWYgKCFlLmNsYXNzTGlzdC5jb250YWlucygnYicpKSByZXR1cm47XG5cdFx0dmFyIG5hdGl2ZSA9IGUuY2xhc3NMaXN0LmNvbnN0cnVjdG9yLnByb3RvdHlwZS5yZW1vdmU7XG5cdFx0ZS5jbGFzc0xpc3QuY29uc3RydWN0b3IucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdHZhciBhcmdzID0gYXJndW1lbnRzO1xuXHRcdFx0dmFyIGwgPSBhcmd1bWVudHMubGVuZ3RoO1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBsOyBpKyspIHtcblx0XHRcdFx0bmF0aXZlLmNhbGwodGhpcywgYXJnc1tpXSk7XG5cdFx0XHR9XG5cdFx0fTtcblx0fSgpKTtcblxufShzZWxmKSk7XG59fSkuY2FsbCgnb2JqZWN0JyA9PT0gdHlwZW9mIHdpbmRvdyAmJiB3aW5kb3cgfHwgJ29iamVjdCcgPT09IHR5cGVvZiBzZWxmICYmIHNlbGYgfHwgJ29iamVjdCcgPT09IHR5cGVvZiBnbG9iYWwgJiYgZ2xvYmFsIHx8IHt9KTtcbiIsICJpbXBvcnQgX0RPTVRva2VuTGlzdCBmcm9tIFwiQG1yaGVucnkvY29yZS13ZWIvaGVscGVycy9fRE9NVG9rZW5MaXN0XCI7XG4oZnVuY3Rpb24odW5kZWZpbmVkKSB7XG5pZiAoIShcInJlcGxhY2VcImluKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikuY2xhc3NMaXN0fHx7fSlcbikpIHtcbi8vIERPTVRva2VuTGlzdC5wcm90b3R5cGUucmVwbGFjZVxuKGZ1bmN0aW9uICgpIHtcblx0dmFyIGNsYXNzTGlzdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLmNsYXNzTGlzdDtcblx0Y2xhc3NMaXN0ICYmIChjbGFzc0xpc3QuY29uc3RydWN0b3IucHJvdG90eXBlLnJlcGxhY2UgPVxuXHRcdGZ1bmN0aW9uICh0b2tlbiwgbmV3VG9rZW4pIHtcblx0XHRcdHZhciB0b2tlblN0cmluZyA9ICcnICsgdG9rZW4sIG5ld1Rva2VuU3RyaW5nID0gJycgKyBuZXdUb2tlbjtcblxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0bmV3IERPTUV4Y2VwdGlvbigpO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRzZWxmLkRPTUV4Y2VwdGlvbiA9IGZ1bmN0aW9uIChtZXNzYWdlLCBuYW1lKSB7XG5cdFx0XHRcdFx0aWYgKCEodGhpcyBpbnN0YW5jZW9mIERPTUV4Y2VwdGlvbikpIHJldHVybiBuZXcgRE9NRXhjZXB0aW9uKG1lc3NhZ2UsIG5hbWUpO1xuXHRcdFx0XHRcdHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG5cdFx0XHRcdFx0dGhpcy5uYW1lID0gbmFtZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHR2YXIgZXJyb3I7XG5cdFx0XHRpZiAoISh0b2tlblN0cmluZyAmJiBuZXdUb2tlblN0cmluZykpIGVycm9yID0gJ1N5bnRheEVycm9yJztcblx0XHRcdGlmICghZXJyb3IgJiYgKC9cXHMvLnRlc3QodG9rZW5TdHJpbmcpIHx8IC9cXHMvLnRlc3QobmV3VG9rZW5TdHJpbmcpKSkgZXJyb3IgPSAnSW52YWxpZENoYXJhY3RlckVycm9yJztcblx0XHRcdGlmIChlcnJvcikgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbignRE9NVG9rZW5MaXN0LnJlcGxhY2Ugd2FzIHByb3ZpZGVkIHRva2VucyBcXCcnICsgdG9rZW5TdHJpbmcgKyAnXFwnIGFuZCBcXCcnICsgbmV3VG9rZW5TdHJpbmcgKyAnXFwnJywgZXJyb3IpO1xuXG5cdFx0XHRpZiAoIXRoaXMuY29udGFpbnModG9rZW5TdHJpbmcpKSByZXR1cm4gZmFsc2U7XG5cblx0XHRcdC8vIHRva2Vuc1RvYmVNb3ZlZCBhcmUgXCJ0b2tlblN0cmluZ1wiIGFuZCBhbGwgdG9rZW5zIGZvdW5kIGFmdGVyIGl0XG5cdFx0XHR2YXIgdG9rZW5zVG9iZU1vdmVkID0gW107XG5cdFx0XHR2YXIgbmV3VG9rZW5Gb3VuZCA9IGZhbHNlO1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgKytpKVxuXHRcdFx0XHRpZiAobmV3VG9rZW5TdHJpbmcgPT09IHRoaXMuaXRlbShpKSkgbmV3VG9rZW5Gb3VuZCA9IHRydWU7XG5cdFx0XHRcdGVsc2UgaWYgKHRva2VuU3RyaW5nID09PSB0aGlzLml0ZW0oaSkpIGJyZWFrO1xuXHRcdFx0Zm9yICg7IGkgPCB0aGlzLmxlbmd0aDsgKytpKSB0b2tlbnNUb2JlTW92ZWQucHVzaCh0aGlzLml0ZW0oaSkpO1xuXHRcdFx0Zm9yIChpID0gMDsgaSA8IHRva2Vuc1RvYmVNb3ZlZC5sZW5ndGg7ICsraSkge1xuXHRcdFx0XHR2YXIgY3VycmVudFRva2VuID0gdG9rZW5zVG9iZU1vdmVkW2ldO1xuXHRcdFx0XHRjdXJyZW50VG9rZW4gIT09IG5ld1Rva2VuU3RyaW5nICYmIHRoaXMucmVtb3ZlKGN1cnJlbnRUb2tlbik7XG5cdFx0XHRcdGN1cnJlbnRUb2tlbiAhPT0gdG9rZW5TdHJpbmcgJiYgdGhpcy5hZGQoY3VycmVudFRva2VuKTtcblx0XHRcdFx0Y3VycmVudFRva2VuID09PSB0b2tlblN0cmluZyAmJiAhbmV3VG9rZW5Gb3VuZCAmJiAodGhpcy5yZW1vdmUobmV3VG9rZW5TdHJpbmcpLCB0aGlzLmFkZChuZXdUb2tlblN0cmluZykpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHQpO1xufSkoKTtcbn19KS5jYWxsKCdvYmplY3QnID09PSB0eXBlb2Ygd2luZG93ICYmIHdpbmRvdyB8fCAnb2JqZWN0JyA9PT0gdHlwZW9mIHNlbGYgJiYgc2VsZiB8fCAnb2JqZWN0JyA9PT0gdHlwZW9mIGdsb2JhbCAmJiBnbG9iYWwgfHwge30pO1xuIiwgImltcG9ydCBfRE9NVG9rZW5MaXN0IGZyb20gXCJAbXJoZW5yeS9jb3JlLXdlYi9oZWxwZXJzL19ET01Ub2tlbkxpc3RcIjtcbihmdW5jdGlvbih1bmRlZmluZWQpIHtcbmlmICghKFwiRE9NVG9rZW5MaXN0XCJpbiBzZWxmJiZcImZvckVhY2hcImluIHNlbGYuRE9NVG9rZW5MaXN0LnByb3RvdHlwZVxuKSkge1xuLy8gRE9NVG9rZW5MaXN0LnByb3RvdHlwZS5mb3JFYWNoXG4oZnVuY3Rpb24gKGdsb2JhbCkge1xuXHRnbG9iYWwuRE9NVG9rZW5MaXN0LnByb3RvdHlwZS5mb3JFYWNoID0gZ2xvYmFsLkFycmF5LnByb3RvdHlwZS5mb3JFYWNoO1xuXG5cdHZhciBlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuXHRpZiAoXG5cdFx0ZS5jbGFzc0xpc3QgJiZcblx0XHRlLmNsYXNzTGlzdC5jb25zdHJ1Y3RvciAmJlxuXHRcdGUuY2xhc3NMaXN0LmNvbnN0cnVjdG9yLnByb3RvdHlwZSAmJlxuXHRcdCFlLmNsYXNzTGlzdC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUuZm9yRWFjaFxuXHQpIHtcblx0XHRlLmNsYXNzTGlzdC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUuZm9yRWFjaCA9IGdsb2JhbC5BcnJheS5wcm90b3R5cGUuZm9yRWFjaDtcblx0fVxufShzZWxmKSk7XG59fSkuY2FsbCgnb2JqZWN0JyA9PT0gdHlwZW9mIHdpbmRvdyAmJiB3aW5kb3cgfHwgJ29iamVjdCcgPT09IHR5cGVvZiBzZWxmICYmIHNlbGYgfHwgJ29iamVjdCcgPT09IHR5cGVvZiBnbG9iYWwgJiYgZ2xvYmFsIHx8IHt9KTtcbiIsICJpbXBvcnQgQXJyYXlJdGVyYXRvciBmcm9tIFwiQG1yaGVucnkvY29yZS13ZWIvaGVscGVycy9fQXJyYXlJdGVyYXRvclwiO1xuaW1wb3J0IEl0ZXJhdG9yIGZyb20gXCJAbXJoZW5yeS9jb3JlLXdlYi9oZWxwZXJzL19JdGVyYXRvclwiO1xuaW1wb3J0IF9ET01Ub2tlbkxpc3QgZnJvbSBcIkBtcmhlbnJ5L2NvcmUtd2ViL2hlbHBlcnMvX0RPTVRva2VuTGlzdFwiO1xuKGZ1bmN0aW9uKHVuZGVmaW5lZCkge1xuaWYgKCEoXCJTeW1ib2xcImluIHNlbGYmJlwiaXRlcmF0b3JcImluIHNlbGYuU3ltYm9sJiZmdW5jdGlvbigpe3RyeXt2YXIgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpXG5yZXR1cm4hKCF0LmNsYXNzTGlzdHx8IXQuY2xhc3NMaXN0W3NlbGYuU3ltYm9sLml0ZXJhdG9yXSl9Y2F0Y2godCl7cmV0dXJuITF9fSgpXG4pKSB7XG4vLyBET01Ub2tlbkxpc3QucHJvdG90eXBlLkBAaXRlcmF0b3Jcbi8qIGdsb2JhbCBBcnJheUl0ZXJhdG9yICovXG4oZnVuY3Rpb24gKGdsb2JhbCkge1xuXHRnbG9iYWwuRE9NVG9rZW5MaXN0LnByb3RvdHlwZVtnbG9iYWwuU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHtcblx0XHRyZXR1cm4gbmV3IEFycmF5SXRlcmF0b3IodGhpcyk7XG5cdH07XG5cblx0dmFyIGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG5cdGlmIChcblx0XHRlLmNsYXNzTGlzdCAmJlxuXHRcdGUuY2xhc3NMaXN0LmNvbnN0cnVjdG9yICYmXG5cdFx0ZS5jbGFzc0xpc3QuY29uc3RydWN0b3IucHJvdG90eXBlICYmXG5cdFx0IWUuY2xhc3NMaXN0LmNvbnN0cnVjdG9yLnByb3RvdHlwZVtnbG9iYWwuU3ltYm9sLml0ZXJhdG9yXVxuXHQpIHtcblx0XHRlLmNsYXNzTGlzdC5jb25zdHJ1Y3Rvci5wcm90b3R5cGVbZ2xvYmFsLlN5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRyZXR1cm4gbmV3IEFycmF5SXRlcmF0b3IodGhpcyk7XG5cdFx0fVxuXHR9XG59KHNlbGYpKTtcbn19KS5jYWxsKCdvYmplY3QnID09PSB0eXBlb2Ygd2luZG93ICYmIHdpbmRvdyB8fCAnb2JqZWN0JyA9PT0gdHlwZW9mIHNlbGYgJiYgc2VsZiB8fCAnb2JqZWN0JyA9PT0gdHlwZW9mIGdsb2JhbCAmJiBnbG9iYWwgfHwge30pO1xuIiwgIlxuLy8gX211dGF0aW9uXG52YXIgX211dGF0aW9uID0gKGZ1bmN0aW9uICgpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuXG5cdGZ1bmN0aW9uIGlzTm9kZShvYmplY3QpIHtcblx0XHQvLyBET00sIExldmVsMlxuXHRcdGlmICh0eXBlb2YgTm9kZSA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0cmV0dXJuIG9iamVjdCBpbnN0YW5jZW9mIE5vZGU7XG5cdFx0fVxuXHRcdC8vIE9sZGVyIGJyb3dzZXJzLCBjaGVjayBpZiBpdCBsb29rcyBsaWtlIGEgTm9kZSBpbnN0YW5jZSlcblx0XHRyZXR1cm4gb2JqZWN0ICYmXG5cdFx0XHR0eXBlb2Ygb2JqZWN0ID09PSBcIm9iamVjdFwiICYmXG5cdFx0XHRvYmplY3Qubm9kZU5hbWUgJiZcblx0XHRcdG9iamVjdC5ub2RlVHlwZSA+PSAxICYmXG5cdFx0XHRvYmplY3Qubm9kZVR5cGUgPD0gMTI7XG5cdH1cblxuXHQvLyBodHRwOi8vZG9tLnNwZWMud2hhdHdnLm9yZy8jbXV0YXRpb24tbWV0aG9kLW1hY3JvXG5cdHJldHVybiBmdW5jdGlvbiBtdXRhdGlvbihub2Rlcykge1xuXHRcdGlmIChub2Rlcy5sZW5ndGggPT09IDEpIHtcblx0XHRcdHJldHVybiBpc05vZGUobm9kZXNbMF0pID8gbm9kZXNbMF0gOiBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShub2Rlc1swXSArICcnKTtcblx0XHR9XG5cblx0XHR2YXIgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0ZnJhZ21lbnQuYXBwZW5kQ2hpbGQoaXNOb2RlKG5vZGVzW2ldKSA/IG5vZGVzW2ldIDogZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobm9kZXNbaV0gKyAnJykpO1xuXG5cdFx0fVxuXHRcdHJldHVybiBmcmFnbWVudDtcblx0fTtcbn0oKSk7XG5leHBvcnQgZGVmYXVsdCBfbXV0YXRpb247XG4iLCAiaW1wb3J0IF9tdXRhdGlvbiBmcm9tIFwiQG1yaGVucnkvY29yZS13ZWIvaGVscGVycy9fbXV0YXRpb25cIjtcbihmdW5jdGlvbih1bmRlZmluZWQpIHtcbmlmICghKFwiRWxlbWVudFwiaW4gc2VsZiYmXCJyZW1vdmVcImluIEVsZW1lbnQucHJvdG90eXBlXG4pKSB7XG4vLyBFbGVtZW50LnByb3RvdHlwZS5yZW1vdmVcbkRvY3VtZW50LnByb3RvdHlwZS5yZW1vdmUgPSBFbGVtZW50LnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiByZW1vdmUoKSB7XG5cdGlmICh0aGlzLnBhcmVudE5vZGUpIHtcblx0XHR0aGlzLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcyk7XG5cdH1cbn07XG5cbi8vIE5vdCBhbGwgVUFzIHN1cHBvcnQgdGhlIFRleHQgY29uc3RydWN0b3IuICBQb2x5ZmlsbCBvbiB0aGUgVGV4dCBjb25zdHJ1Y3RvciBvbmx5IHdoZXJlIGl0IGV4aXN0c1xuLy8gVE9ETzogQWRkIGEgcG9seWZpbGwgZm9yIHRoZSBUZXh0IGNvbnN0cnVjdG9yLCBhbmQgbWFrZSBpdCBhIGRlcGVuZGVuY3kgb2YgdGhpcyBwb2x5ZmlsbC5cbmlmIChcIlRleHRcIiBpbiBzZWxmKSB7XG5cdFRleHQucHJvdG90eXBlLnJlbW92ZSA9IEVsZW1lbnQucHJvdG90eXBlLnJlbW92ZTtcbn1cblxuKGZ1bmN0aW9uICgpIHtcblx0dmFyIG9yaWdpbmFsUmVtb3ZlID0gSFRNTFNlbGVjdEVsZW1lbnQucHJvdG90eXBlLnJlbW92ZTtcblxuXHRIVE1MU2VsZWN0RWxlbWVudC5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gcmVtb3ZlKGluZGV4KSB7XG5cdFx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcblx0XHRcdHJldHVybiBFbGVtZW50LnByb3RvdHlwZS5yZW1vdmUuY2FsbCh0aGlzKTtcblx0XHR9XG5cdFx0cmV0dXJuIG9yaWdpbmFsUmVtb3ZlLmNhbGwodGhpcywgaW5kZXgpO1xuXHR9O1xufSkoKTtcbn19KS5jYWxsKCdvYmplY3QnID09PSB0eXBlb2Ygd2luZG93ICYmIHdpbmRvdyB8fCAnb2JqZWN0JyA9PT0gdHlwZW9mIHNlbGYgJiYgc2VsZiB8fCAnb2JqZWN0JyA9PT0gdHlwZW9mIGdsb2JhbCAmJiBnbG9iYWwgfHwge30pO1xuIiwgImltcG9ydCBfbXV0YXRpb24gZnJvbSBcIkBtcmhlbnJ5L2NvcmUtd2ViL2hlbHBlcnMvX211dGF0aW9uXCI7XG4oZnVuY3Rpb24odW5kZWZpbmVkKSB7XG5pZiAoIShcInJlbW92ZVwiaW4gQ2hhcmFjdGVyRGF0YS5wcm90b3R5cGVcbikpIHtcbi8vIENoYXJhY3RlckRhdGEucHJvdG90eXBlLnJlbW92ZVxuQ2hhcmFjdGVyRGF0YS5wcm90b3R5cGUucmVtb3ZlID0gRWxlbWVudC5wcm90b3R5cGUucmVtb3ZlXG59fSkuY2FsbCgnb2JqZWN0JyA9PT0gdHlwZW9mIHdpbmRvdyAmJiB3aW5kb3cgfHwgJ29iamVjdCcgPT09IHR5cGVvZiBzZWxmICYmIHNlbGYgfHwgJ29iamVjdCcgPT09IHR5cGVvZiBnbG9iYWwgJiYgZ2xvYmFsIHx8IHt9KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLml0ZXJhdG9yYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wuaXRlcmF0b3JcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFRhcmdldCwgU291cmNlLCBrZXkpIHtcbiAga2V5IGluIFRhcmdldCB8fCBkZWZpbmVQcm9wZXJ0eShUYXJnZXQsIGtleSwge1xuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFNvdXJjZVtrZXldOyB9LFxuICAgIHNldDogZnVuY3Rpb24gKGl0KSB7IFNvdXJjZVtrZXldID0gaXQ7IH1cbiAgfSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQsICRkZWZhdWx0KSB7XG4gIHJldHVybiBhcmd1bWVudCA9PT0gdW5kZWZpbmVkID8gYXJndW1lbnRzLmxlbmd0aCA8IDIgPyAnJyA6ICRkZWZhdWx0IDogdG9TdHJpbmcoYXJndW1lbnQpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xuXG4vLyBgSW5zdGFsbEVycm9yQ2F1c2VgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLWVycm9yLWNhdXNlLyNzZWMtZXJyb3JvYmplY3RzLWluc3RhbGwtZXJyb3ItY2F1c2Vcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIG9wdGlvbnMpIHtcbiAgaWYgKGlzT2JqZWN0KG9wdGlvbnMpICYmICdjYXVzZScgaW4gb3B0aW9ucykge1xuICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShPLCAnY2F1c2UnLCBvcHRpb25zLmNhdXNlKTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbnZhciAkRXJyb3IgPSBFcnJvcjtcbnZhciByZXBsYWNlID0gdW5jdXJyeVRoaXMoJycucmVwbGFjZSk7XG5cbnZhciBURVNUID0gKGZ1bmN0aW9uIChhcmcpIHsgcmV0dXJuIFN0cmluZyhuZXcgJEVycm9yKGFyZykuc3RhY2spOyB9KSgnenhjYXNkJyk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVkb3Mvbm8tdnVsbmVyYWJsZSwgc29uYXJqcy9zbG93LXJlZ2V4IC0tIHNhZmVcbnZhciBWOF9PUl9DSEFLUkFfU1RBQ0tfRU5UUlkgPSAvXFxuXFxzKmF0IFteOl0qOlteXFxuXSovO1xudmFyIElTX1Y4X09SX0NIQUtSQV9TVEFDSyA9IFY4X09SX0NIQUtSQV9TVEFDS19FTlRSWS50ZXN0KFRFU1QpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChzdGFjaywgZHJvcEVudHJpZXMpIHtcbiAgaWYgKElTX1Y4X09SX0NIQUtSQV9TVEFDSyAmJiB0eXBlb2Ygc3RhY2sgPT0gJ3N0cmluZycgJiYgISRFcnJvci5wcmVwYXJlU3RhY2tUcmFjZSkge1xuICAgIHdoaWxlIChkcm9wRW50cmllcy0tKSBzdGFjayA9IHJlcGxhY2Uoc3RhY2ssIFY4X09SX0NIQUtSQV9TVEFDS19FTlRSWSwgJycpO1xuICB9IHJldHVybiBzdGFjaztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIGVycm9yID0gbmV3IEVycm9yKCdhJyk7XG4gIGlmICghKCdzdGFjaycgaW4gZXJyb3IpKSByZXR1cm4gdHJ1ZTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlcnJvciwgJ3N0YWNrJywgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsIDcpKTtcbiAgcmV0dXJuIGVycm9yLnN0YWNrICE9PSA3O1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBjbGVhckVycm9yU3RhY2sgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXJyb3Itc3RhY2stY2xlYXInKTtcbnZhciBFUlJPUl9TVEFDS19JTlNUQUxMQUJMRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lcnJvci1zdGFjay1pbnN0YWxsYWJsZScpO1xuXG4vLyBub24tc3RhbmRhcmQgVjhcbnZhciBjYXB0dXJlU3RhY2tUcmFjZSA9IEVycm9yLmNhcHR1cmVTdGFja1RyYWNlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChlcnJvciwgQywgc3RhY2ssIGRyb3BFbnRyaWVzKSB7XG4gIGlmIChFUlJPUl9TVEFDS19JTlNUQUxMQUJMRSkge1xuICAgIGlmIChjYXB0dXJlU3RhY2tUcmFjZSkgY2FwdHVyZVN0YWNrVHJhY2UoZXJyb3IsIEMpO1xuICAgIGVsc2UgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KGVycm9yLCAnc3RhY2snLCBjbGVhckVycm9yU3RhY2soc3RhY2ssIGRyb3BFbnRyaWVzKSk7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXNldC1wcm90b3R5cGUtb2YnKTtcbnZhciBjb3B5Q29uc3RydWN0b3JQcm9wZXJ0aWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvcHktY29uc3RydWN0b3ItcHJvcGVydGllcycpO1xudmFyIHByb3h5QWNjZXNzb3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJveHktYWNjZXNzb3InKTtcbnZhciBpbmhlcml0SWZSZXF1aXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbmhlcml0LWlmLXJlcXVpcmVkJyk7XG52YXIgbm9ybWFsaXplU3RyaW5nQXJndW1lbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbm9ybWFsaXplLXN0cmluZy1hcmd1bWVudCcpO1xudmFyIGluc3RhbGxFcnJvckNhdXNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luc3RhbGwtZXJyb3ItY2F1c2UnKTtcbnZhciBpbnN0YWxsRXJyb3JTdGFjayA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lcnJvci1zdGFjay1pbnN0YWxsJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoRlVMTF9OQU1FLCB3cmFwcGVyLCBGT1JDRUQsIElTX0FHR1JFR0FURV9FUlJPUikge1xuICB2YXIgU1RBQ0tfVFJBQ0VfTElNSVQgPSAnc3RhY2tUcmFjZUxpbWl0JztcbiAgdmFyIE9QVElPTlNfUE9TSVRJT04gPSBJU19BR0dSRUdBVEVfRVJST1IgPyAyIDogMTtcbiAgdmFyIHBhdGggPSBGVUxMX05BTUUuc3BsaXQoJy4nKTtcbiAgdmFyIEVSUk9SX05BTUUgPSBwYXRoW3BhdGgubGVuZ3RoIC0gMV07XG4gIHZhciBPcmlnaW5hbEVycm9yID0gZ2V0QnVpbHRJbi5hcHBseShudWxsLCBwYXRoKTtcblxuICBpZiAoIU9yaWdpbmFsRXJyb3IpIHJldHVybjtcblxuICB2YXIgT3JpZ2luYWxFcnJvclByb3RvdHlwZSA9IE9yaWdpbmFsRXJyb3IucHJvdG90eXBlO1xuXG4gIC8vIFY4IDkuMy0gYnVnIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTEyMDA2XG4gIGlmICghSVNfUFVSRSAmJiBoYXNPd24oT3JpZ2luYWxFcnJvclByb3RvdHlwZSwgJ2NhdXNlJykpIGRlbGV0ZSBPcmlnaW5hbEVycm9yUHJvdG90eXBlLmNhdXNlO1xuXG4gIGlmICghRk9SQ0VEKSByZXR1cm4gT3JpZ2luYWxFcnJvcjtcblxuICB2YXIgQmFzZUVycm9yID0gZ2V0QnVpbHRJbignRXJyb3InKTtcblxuICB2YXIgV3JhcHBlZEVycm9yID0gd3JhcHBlcihmdW5jdGlvbiAoYSwgYikge1xuICAgIHZhciBtZXNzYWdlID0gbm9ybWFsaXplU3RyaW5nQXJndW1lbnQoSVNfQUdHUkVHQVRFX0VSUk9SID8gYiA6IGEsIHVuZGVmaW5lZCk7XG4gICAgdmFyIHJlc3VsdCA9IElTX0FHR1JFR0FURV9FUlJPUiA/IG5ldyBPcmlnaW5hbEVycm9yKGEpIDogbmV3IE9yaWdpbmFsRXJyb3IoKTtcbiAgICBpZiAobWVzc2FnZSAhPT0gdW5kZWZpbmVkKSBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkocmVzdWx0LCAnbWVzc2FnZScsIG1lc3NhZ2UpO1xuICAgIGluc3RhbGxFcnJvclN0YWNrKHJlc3VsdCwgV3JhcHBlZEVycm9yLCByZXN1bHQuc3RhY2ssIDIpO1xuICAgIGlmICh0aGlzICYmIGlzUHJvdG90eXBlT2YoT3JpZ2luYWxFcnJvclByb3RvdHlwZSwgdGhpcykpIGluaGVyaXRJZlJlcXVpcmVkKHJlc3VsdCwgdGhpcywgV3JhcHBlZEVycm9yKTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IE9QVElPTlNfUE9TSVRJT04pIGluc3RhbGxFcnJvckNhdXNlKHJlc3VsdCwgYXJndW1lbnRzW09QVElPTlNfUE9TSVRJT05dKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9KTtcblxuICBXcmFwcGVkRXJyb3IucHJvdG90eXBlID0gT3JpZ2luYWxFcnJvclByb3RvdHlwZTtcblxuICBpZiAoRVJST1JfTkFNRSAhPT0gJ0Vycm9yJykge1xuICAgIGlmIChzZXRQcm90b3R5cGVPZikgc2V0UHJvdG90eXBlT2YoV3JhcHBlZEVycm9yLCBCYXNlRXJyb3IpO1xuICAgIGVsc2UgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyhXcmFwcGVkRXJyb3IsIEJhc2VFcnJvciwgeyBuYW1lOiB0cnVlIH0pO1xuICB9IGVsc2UgaWYgKERFU0NSSVBUT1JTICYmIFNUQUNLX1RSQUNFX0xJTUlUIGluIE9yaWdpbmFsRXJyb3IpIHtcbiAgICBwcm94eUFjY2Vzc29yKFdyYXBwZWRFcnJvciwgT3JpZ2luYWxFcnJvciwgU1RBQ0tfVFJBQ0VfTElNSVQpO1xuICAgIHByb3h5QWNjZXNzb3IoV3JhcHBlZEVycm9yLCBPcmlnaW5hbEVycm9yLCAncHJlcGFyZVN0YWNrVHJhY2UnKTtcbiAgfVxuXG4gIGNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMoV3JhcHBlZEVycm9yLCBPcmlnaW5hbEVycm9yKTtcblxuICBpZiAoIUlTX1BVUkUpIHRyeSB7XG4gICAgLy8gU2FmYXJpIDEzLSBidWc6IFdlYkFzc2VtYmx5IGVycm9ycyBkb2VzIG5vdCBoYXZlIGEgcHJvcGVyIGAubmFtZWBcbiAgICBpZiAoT3JpZ2luYWxFcnJvclByb3RvdHlwZS5uYW1lICE9PSBFUlJPUl9OQU1FKSB7XG4gICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoT3JpZ2luYWxFcnJvclByb3RvdHlwZSwgJ25hbWUnLCBFUlJPUl9OQU1FKTtcbiAgICB9XG4gICAgT3JpZ2luYWxFcnJvclByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFdyYXBwZWRFcnJvcjtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuXG4gIHJldHVybiBXcmFwcGVkRXJyb3I7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciBmdW5jdGlvbnMgYC5sZW5ndGhgICovXG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgYXBwbHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYXBwbHknKTtcbnZhciB3cmFwRXJyb3JDb25zdHJ1Y3RvcldpdGhDYXVzZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93cmFwLWVycm9yLWNvbnN0cnVjdG9yLXdpdGgtY2F1c2UnKTtcblxudmFyIFdFQl9BU1NFTUJMWSA9ICdXZWJBc3NlbWJseSc7XG52YXIgV2ViQXNzZW1ibHkgPSBnbG9iYWxUaGlzW1dFQl9BU1NFTUJMWV07XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1lcnJvci1jYXVzZSAtLSBmZWF0dXJlIGRldGVjdGlvblxudmFyIEZPUkNFRCA9IG5ldyBFcnJvcignZScsIHsgY2F1c2U6IDcgfSkuY2F1c2UgIT09IDc7XG5cbnZhciBleHBvcnRHbG9iYWxFcnJvckNhdXNlV3JhcHBlciA9IGZ1bmN0aW9uIChFUlJPUl9OQU1FLCB3cmFwcGVyKSB7XG4gIHZhciBPID0ge307XG4gIE9bRVJST1JfTkFNRV0gPSB3cmFwRXJyb3JDb25zdHJ1Y3RvcldpdGhDYXVzZShFUlJPUl9OQU1FLCB3cmFwcGVyLCBGT1JDRUQpO1xuICAkKHsgZ2xvYmFsOiB0cnVlLCBjb25zdHJ1Y3RvcjogdHJ1ZSwgYXJpdHk6IDEsIGZvcmNlZDogRk9SQ0VEIH0sIE8pO1xufTtcblxudmFyIGV4cG9ydFdlYkFzc2VtYmx5RXJyb3JDYXVzZVdyYXBwZXIgPSBmdW5jdGlvbiAoRVJST1JfTkFNRSwgd3JhcHBlcikge1xuICBpZiAoV2ViQXNzZW1ibHkgJiYgV2ViQXNzZW1ibHlbRVJST1JfTkFNRV0pIHtcbiAgICB2YXIgTyA9IHt9O1xuICAgIE9bRVJST1JfTkFNRV0gPSB3cmFwRXJyb3JDb25zdHJ1Y3RvcldpdGhDYXVzZShXRUJfQVNTRU1CTFkgKyAnLicgKyBFUlJPUl9OQU1FLCB3cmFwcGVyLCBGT1JDRUQpO1xuICAgICQoeyB0YXJnZXQ6IFdFQl9BU1NFTUJMWSwgc3RhdDogdHJ1ZSwgY29uc3RydWN0b3I6IHRydWUsIGFyaXR5OiAxLCBmb3JjZWQ6IEZPUkNFRCB9LCBPKTtcbiAgfVxufTtcblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1uYXRpdmVlcnJvclxuZXhwb3J0R2xvYmFsRXJyb3JDYXVzZVdyYXBwZXIoJ0Vycm9yJywgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIEVycm9yKG1lc3NhZ2UpIHsgcmV0dXJuIGFwcGx5KGluaXQsIHRoaXMsIGFyZ3VtZW50cyk7IH07XG59KTtcbmV4cG9ydEdsb2JhbEVycm9yQ2F1c2VXcmFwcGVyKCdFdmFsRXJyb3InLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gRXZhbEVycm9yKG1lc3NhZ2UpIHsgcmV0dXJuIGFwcGx5KGluaXQsIHRoaXMsIGFyZ3VtZW50cyk7IH07XG59KTtcbmV4cG9ydEdsb2JhbEVycm9yQ2F1c2VXcmFwcGVyKCdSYW5nZUVycm9yJywgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFJhbmdlRXJyb3IobWVzc2FnZSkgeyByZXR1cm4gYXBwbHkoaW5pdCwgdGhpcywgYXJndW1lbnRzKTsgfTtcbn0pO1xuZXhwb3J0R2xvYmFsRXJyb3JDYXVzZVdyYXBwZXIoJ1JlZmVyZW5jZUVycm9yJywgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFJlZmVyZW5jZUVycm9yKG1lc3NhZ2UpIHsgcmV0dXJuIGFwcGx5KGluaXQsIHRoaXMsIGFyZ3VtZW50cyk7IH07XG59KTtcbmV4cG9ydEdsb2JhbEVycm9yQ2F1c2VXcmFwcGVyKCdTeW50YXhFcnJvcicsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBTeW50YXhFcnJvcihtZXNzYWdlKSB7IHJldHVybiBhcHBseShpbml0LCB0aGlzLCBhcmd1bWVudHMpOyB9O1xufSk7XG5leHBvcnRHbG9iYWxFcnJvckNhdXNlV3JhcHBlcignVHlwZUVycm9yJywgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFR5cGVFcnJvcihtZXNzYWdlKSB7IHJldHVybiBhcHBseShpbml0LCB0aGlzLCBhcmd1bWVudHMpOyB9O1xufSk7XG5leHBvcnRHbG9iYWxFcnJvckNhdXNlV3JhcHBlcignVVJJRXJyb3InLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gVVJJRXJyb3IobWVzc2FnZSkgeyByZXR1cm4gYXBwbHkoaW5pdCwgdGhpcywgYXJndW1lbnRzKTsgfTtcbn0pO1xuZXhwb3J0V2ViQXNzZW1ibHlFcnJvckNhdXNlV3JhcHBlcignQ29tcGlsZUVycm9yJywgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIENvbXBpbGVFcnJvcihtZXNzYWdlKSB7IHJldHVybiBhcHBseShpbml0LCB0aGlzLCBhcmd1bWVudHMpOyB9O1xufSk7XG5leHBvcnRXZWJBc3NlbWJseUVycm9yQ2F1c2VXcmFwcGVyKCdMaW5rRXJyb3InLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gTGlua0Vycm9yKG1lc3NhZ2UpIHsgcmV0dXJuIGFwcGx5KGluaXQsIHRoaXMsIGFyZ3VtZW50cyk7IH07XG59KTtcbmV4cG9ydFdlYkFzc2VtYmx5RXJyb3JDYXVzZVdyYXBwZXIoJ1J1bnRpbWVFcnJvcicsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBSdW50aW1lRXJyb3IobWVzc2FnZSkgeyByZXR1cm4gYXBwbHkoaW5pdCwgdGhpcywgYXJndW1lbnRzKTsgfTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgbm9ybWFsaXplU3RyaW5nQXJndW1lbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbm9ybWFsaXplLXN0cmluZy1hcmd1bWVudCcpO1xuXG52YXIgbmF0aXZlRXJyb3JUb1N0cmluZyA9IEVycm9yLnByb3RvdHlwZS50b1N0cmluZztcblxudmFyIElOQ09SUkVDVF9UT19TVFJJTkcgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIGlmIChERVNDUklQVE9SUykge1xuICAgIC8vIENocm9tZSAzMi0gaW5jb3JyZWN0bHkgY2FsbCBhY2Nlc3NvclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtY3JlYXRlLCBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxuICAgIHZhciBvYmplY3QgPSBPYmplY3QuY3JlYXRlKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgJ25hbWUnLCB7IGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHRoaXMgPT09IG9iamVjdDtcbiAgICB9IH0pKTtcbiAgICBpZiAobmF0aXZlRXJyb3JUb1N0cmluZy5jYWxsKG9iamVjdCkgIT09ICd0cnVlJykgcmV0dXJuIHRydWU7XG4gIH1cbiAgLy8gRkYxMC0gZG9lcyBub3QgcHJvcGVybHkgaGFuZGxlIG5vbi1zdHJpbmdzXG4gIHJldHVybiBuYXRpdmVFcnJvclRvU3RyaW5nLmNhbGwoeyBtZXNzYWdlOiAxLCBuYW1lOiAyIH0pICE9PSAnMjogMSdcbiAgICAvLyBJRTggZG9lcyBub3QgcHJvcGVybHkgaGFuZGxlIGRlZmF1bHRzXG4gICAgfHwgbmF0aXZlRXJyb3JUb1N0cmluZy5jYWxsKHt9KSAhPT0gJ0Vycm9yJztcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IElOQ09SUkVDVF9UT19TVFJJTkcgPyBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgdmFyIE8gPSBhbk9iamVjdCh0aGlzKTtcbiAgdmFyIG5hbWUgPSBub3JtYWxpemVTdHJpbmdBcmd1bWVudChPLm5hbWUsICdFcnJvcicpO1xuICB2YXIgbWVzc2FnZSA9IG5vcm1hbGl6ZVN0cmluZ0FyZ3VtZW50KE8ubWVzc2FnZSk7XG4gIHJldHVybiAhbmFtZSA/IG1lc3NhZ2UgOiAhbWVzc2FnZSA/IG5hbWUgOiBuYW1lICsgJzogJyArIG1lc3NhZ2U7XG59IDogbmF0aXZlRXJyb3JUb1N0cmluZztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciBlcnJvclRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vycm9yLXRvLXN0cmluZycpO1xuXG52YXIgRXJyb3JQcm90b3R5cGUgPSBFcnJvci5wcm90b3R5cGU7XG5cbi8vIGBFcnJvci5wcm90b3R5cGUudG9TdHJpbmdgIG1ldGhvZCBmaXhcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZXJyb3IucHJvdG90eXBlLnRvc3RyaW5nXG5pZiAoRXJyb3JQcm90b3R5cGUudG9TdHJpbmcgIT09IGVycm9yVG9TdHJpbmcpIHtcbiAgZGVmaW5lQnVpbHRJbihFcnJvclByb3RvdHlwZSwgJ3RvU3RyaW5nJywgZXJyb3JUb1N0cmluZyk7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgVjhfVkVSU0lPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC12OC12ZXJzaW9uJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE1FVEhPRF9OQU1FKSB7XG4gIC8vIFdlIGNhbid0IHVzZSB0aGlzIGZlYXR1cmUgZGV0ZWN0aW9uIGluIFY4IHNpbmNlIGl0IGNhdXNlc1xuICAvLyBkZW9wdGltaXphdGlvbiBhbmQgc2VyaW91cyBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvblxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNjc3XG4gIHJldHVybiBWOF9WRVJTSU9OID49IDUxIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGFycmF5ID0gW107XG4gICAgdmFyIGNvbnN0cnVjdG9yID0gYXJyYXkuY29uc3RydWN0b3IgPSB7fTtcbiAgICBjb25zdHJ1Y3RvcltTUEVDSUVTXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB7IGZvbzogMSB9O1xuICAgIH07XG4gICAgcmV0dXJuIGFycmF5W01FVEhPRF9OQU1FXShCb29sZWFuKS5mb28gIT09IDE7XG4gIH0pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciAkZmlsdGVyID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbicpLmZpbHRlcjtcbnZhciBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1oYXMtc3BlY2llcy1zdXBwb3J0Jyk7XG5cbnZhciBIQVNfU1BFQ0lFU19TVVBQT1JUID0gYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCgnZmlsdGVyJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZmlsdGVyYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZpbHRlclxuLy8gd2l0aCBhZGRpbmcgc3VwcG9ydCBvZiBAQHNwZWNpZXNcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6ICFIQVNfU1BFQ0lFU19TVVBQT1JUIH0sIHtcbiAgZmlsdGVyOiBmdW5jdGlvbiBmaWx0ZXIoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJGZpbHRlcih0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChNRVRIT0RfTkFNRSwgYXJndW1lbnQpIHtcbiAgdmFyIG1ldGhvZCA9IFtdW01FVEhPRF9OQU1FXTtcbiAgcmV0dXJuICEhbWV0aG9kICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlbGVzcy1jYWxsIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gICAgbWV0aG9kLmNhbGwobnVsbCwgYXJndW1lbnQgfHwgZnVuY3Rpb24gKCkgeyByZXR1cm4gMTsgfSwgMSk7XG4gIH0pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJGZvckVhY2ggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJykuZm9yRWFjaDtcbnZhciBhcnJheU1ldGhvZElzU3RyaWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1pcy1zdHJpY3QnKTtcblxudmFyIFNUUklDVF9NRVRIT0QgPSBhcnJheU1ldGhvZElzU3RyaWN0KCdmb3JFYWNoJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZm9yRWFjaGAgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5mb3JlYWNoXG5tb2R1bGUuZXhwb3J0cyA9ICFTVFJJQ1RfTUVUSE9EID8gZnVuY3Rpb24gZm9yRWFjaChjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICByZXR1cm4gJGZvckVhY2godGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWFycmF5LXByb3RvdHlwZS1mb3JlYWNoIC0tIHNhZmVcbn0gOiBbXS5mb3JFYWNoO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGZvckVhY2ggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktZm9yLWVhY2gnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5mb3JFYWNoYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZvcmVhY2hcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1hcnJheS1wcm90b3R5cGUtZm9yZWFjaCAtLSBzYWZlXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBbXS5mb3JFYWNoICE9PSBmb3JFYWNoIH0sIHtcbiAgZm9yRWFjaDogZm9yRWFjaFxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGdldE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCBraW5kLCB2YWx1ZSkge1xuICB2YXIgaW5uZXJSZXN1bHQsIGlubmVyRXJyb3I7XG4gIGFuT2JqZWN0KGl0ZXJhdG9yKTtcbiAgdHJ5IHtcbiAgICBpbm5lclJlc3VsdCA9IGdldE1ldGhvZChpdGVyYXRvciwgJ3JldHVybicpO1xuICAgIGlmICghaW5uZXJSZXN1bHQpIHtcbiAgICAgIGlmIChraW5kID09PSAndGhyb3cnKSB0aHJvdyB2YWx1ZTtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgaW5uZXJSZXN1bHQgPSBjYWxsKGlubmVyUmVzdWx0LCBpdGVyYXRvcik7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaW5uZXJFcnJvciA9IHRydWU7XG4gICAgaW5uZXJSZXN1bHQgPSBlcnJvcjtcbiAgfVxuICBpZiAoa2luZCA9PT0gJ3Rocm93JykgdGhyb3cgdmFsdWU7XG4gIGlmIChpbm5lckVycm9yKSB0aHJvdyBpbm5lclJlc3VsdDtcbiAgYW5PYmplY3QoaW5uZXJSZXN1bHQpO1xuICByZXR1cm4gdmFsdWU7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBpdGVyYXRvckNsb3NlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWNsb3NlJyk7XG5cbi8vIGNhbGwgc29tZXRoaW5nIG9uIGl0ZXJhdG9yIHN0ZXAgd2l0aCBzYWZlIGNsb3Npbmcgb24gZXJyb3Jcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCBmbiwgdmFsdWUsIEVOVFJJRVMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gRU5UUklFUyA/IGZuKGFuT2JqZWN0KHZhbHVlKVswXSwgdmFsdWVbMV0pIDogZm4odmFsdWUpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IsICd0aHJvdycsIGVycm9yKTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxuLy8gY2hlY2sgb24gZGVmYXVsdCBBcnJheSBpdGVyYXRvclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ICE9PSB1bmRlZmluZWQgJiYgKEl0ZXJhdG9ycy5BcnJheSA9PT0gaXQgfHwgQXJyYXlQcm90b3R5cGVbSVRFUkFUT1JdID09PSBpdCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIGlmIChERVNDUklQVE9SUykgZGVmaW5lUHJvcGVydHlNb2R1bGUuZihvYmplY3QsIGtleSwgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDAsIHZhbHVlKSk7XG4gIGVsc2Ugb2JqZWN0W2tleV0gPSB2YWx1ZTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xudmFyIGdldE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtbWV0aG9kJyk7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKCFpc051bGxPclVuZGVmaW5lZChpdCkpIHJldHVybiBnZXRNZXRob2QoaXQsIElURVJBVE9SKVxuICAgIHx8IGdldE1ldGhvZChpdCwgJ0BAaXRlcmF0b3InKVxuICAgIHx8IEl0ZXJhdG9yc1tjbGFzc29mKGl0KV07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRyeVRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmcnKTtcbnZhciBnZXRJdGVyYXRvck1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCwgdXNpbmdJdGVyYXRvcikge1xuICB2YXIgaXRlcmF0b3JNZXRob2QgPSBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IGdldEl0ZXJhdG9yTWV0aG9kKGFyZ3VtZW50KSA6IHVzaW5nSXRlcmF0b3I7XG4gIGlmIChhQ2FsbGFibGUoaXRlcmF0b3JNZXRob2QpKSByZXR1cm4gYW5PYmplY3QoY2FsbChpdGVyYXRvck1ldGhvZCwgYXJndW1lbnQpKTtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IodHJ5VG9TdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgaXRlcmFibGUnKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgY2FsbFdpdGhTYWZlSXRlcmF0aW9uQ2xvc2luZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jYWxsLXdpdGgtc2FmZS1pdGVyYXRpb24tY2xvc2luZycpO1xudmFyIGlzQXJyYXlJdGVyYXRvck1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheS1pdGVyYXRvci1tZXRob2QnKTtcbnZhciBpc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNvbnN0cnVjdG9yJyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHknKTtcbnZhciBnZXRJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3InKTtcbnZhciBnZXRJdGVyYXRvck1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG5cbnZhciAkQXJyYXkgPSBBcnJheTtcblxuLy8gYEFycmF5LmZyb21gIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5mcm9tXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGZyb20oYXJyYXlMaWtlIC8qICwgbWFwZm4gPSB1bmRlZmluZWQsIHRoaXNBcmcgPSB1bmRlZmluZWQgKi8pIHtcbiAgdmFyIE8gPSB0b09iamVjdChhcnJheUxpa2UpO1xuICB2YXIgSVNfQ09OU1RSVUNUT1IgPSBpc0NvbnN0cnVjdG9yKHRoaXMpO1xuICB2YXIgYXJndW1lbnRzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgdmFyIG1hcGZuID0gYXJndW1lbnRzTGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgdmFyIG1hcHBpbmcgPSBtYXBmbiAhPT0gdW5kZWZpbmVkO1xuICBpZiAobWFwcGluZykgbWFwZm4gPSBiaW5kKG1hcGZuLCBhcmd1bWVudHNMZW5ndGggPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkKTtcbiAgdmFyIGl0ZXJhdG9yTWV0aG9kID0gZ2V0SXRlcmF0b3JNZXRob2QoTyk7XG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciBsZW5ndGgsIHJlc3VsdCwgc3RlcCwgaXRlcmF0b3IsIG5leHQsIHZhbHVlO1xuICAvLyBpZiB0aGUgdGFyZ2V0IGlzIG5vdCBpdGVyYWJsZSBvciBpdCdzIGFuIGFycmF5IHdpdGggdGhlIGRlZmF1bHQgaXRlcmF0b3IgLSB1c2UgYSBzaW1wbGUgY2FzZVxuICBpZiAoaXRlcmF0b3JNZXRob2QgJiYgISh0aGlzID09PSAkQXJyYXkgJiYgaXNBcnJheUl0ZXJhdG9yTWV0aG9kKGl0ZXJhdG9yTWV0aG9kKSkpIHtcbiAgICByZXN1bHQgPSBJU19DT05TVFJVQ1RPUiA/IG5ldyB0aGlzKCkgOiBbXTtcbiAgICBpdGVyYXRvciA9IGdldEl0ZXJhdG9yKE8sIGl0ZXJhdG9yTWV0aG9kKTtcbiAgICBuZXh0ID0gaXRlcmF0b3IubmV4dDtcbiAgICBmb3IgKDshKHN0ZXAgPSBjYWxsKG5leHQsIGl0ZXJhdG9yKSkuZG9uZTsgaW5kZXgrKykge1xuICAgICAgdmFsdWUgPSBtYXBwaW5nID8gY2FsbFdpdGhTYWZlSXRlcmF0aW9uQ2xvc2luZyhpdGVyYXRvciwgbWFwZm4sIFtzdGVwLnZhbHVlLCBpbmRleF0sIHRydWUpIDogc3RlcC52YWx1ZTtcbiAgICAgIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgaW5kZXgsIHZhbHVlKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgcmVzdWx0ID0gSVNfQ09OU1RSVUNUT1IgPyBuZXcgdGhpcyhsZW5ndGgpIDogJEFycmF5KGxlbmd0aCk7XG4gICAgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICAgIHZhbHVlID0gbWFwcGluZyA/IG1hcGZuKE9baW5kZXhdLCBpbmRleCkgOiBPW2luZGV4XTtcbiAgICAgIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgaW5kZXgsIHZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcmVzdWx0Lmxlbmd0aCA9IGluZGV4O1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbnZhciBTQUZFX0NMT1NJTkcgPSBmYWxzZTtcblxudHJ5IHtcbiAgdmFyIGNhbGxlZCA9IDA7XG4gIHZhciBpdGVyYXRvcldpdGhSZXR1cm4gPSB7XG4gICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHsgZG9uZTogISFjYWxsZWQrKyB9O1xuICAgIH0sXG4gICAgJ3JldHVybic6IGZ1bmN0aW9uICgpIHtcbiAgICAgIFNBRkVfQ0xPU0lORyA9IHRydWU7XG4gICAgfVxuICB9O1xuICBpdGVyYXRvcldpdGhSZXR1cm5bSVRFUkFUT1JdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktZnJvbSwgbm8tdGhyb3ctbGl0ZXJhbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICBBcnJheS5mcm9tKGl0ZXJhdG9yV2l0aFJldHVybiwgZnVuY3Rpb24gKCkgeyB0aHJvdyAyOyB9KTtcbn0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYywgU0tJUF9DTE9TSU5HKSB7XG4gIHRyeSB7XG4gICAgaWYgKCFTS0lQX0NMT1NJTkcgJiYgIVNBRkVfQ0xPU0lORykgcmV0dXJuIGZhbHNlO1xuICB9IGNhdGNoIChlcnJvcikgeyByZXR1cm4gZmFsc2U7IH0gLy8gd29ya2Fyb3VuZCBvZiBvbGQgV2ViS2l0ICsgYGV2YWxgIGJ1Z1xuICB2YXIgSVRFUkFUSU9OX1NVUFBPUlQgPSBmYWxzZTtcbiAgdHJ5IHtcbiAgICB2YXIgb2JqZWN0ID0ge307XG4gICAgb2JqZWN0W0lURVJBVE9SXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4geyBkb25lOiBJVEVSQVRJT05fU1VQUE9SVCA9IHRydWUgfTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9O1xuICAgIGV4ZWMob2JqZWN0KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gSVRFUkFUSU9OX1NVUFBPUlQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGZyb20gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktZnJvbScpO1xudmFyIGNoZWNrQ29ycmVjdG5lc3NPZkl0ZXJhdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jaGVjay1jb3JyZWN0bmVzcy1vZi1pdGVyYXRpb24nKTtcblxudmFyIElOQ09SUkVDVF9JVEVSQVRJT04gPSAhY2hlY2tDb3JyZWN0bmVzc09mSXRlcmF0aW9uKGZ1bmN0aW9uIChpdGVyYWJsZSkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktZnJvbSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICBBcnJheS5mcm9tKGl0ZXJhYmxlKTtcbn0pO1xuXG4vLyBgQXJyYXkuZnJvbWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LmZyb21cbiQoeyB0YXJnZXQ6ICdBcnJheScsIHN0YXQ6IHRydWUsIGZvcmNlZDogSU5DT1JSRUNUX0lURVJBVElPTiB9LCB7XG4gIGZyb206IGZyb21cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xuXG52YXIgVU5TQ09QQUJMRVMgPSB3ZWxsS25vd25TeW1ib2woJ3Vuc2NvcGFibGVzJyk7XG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbi8vIEFycmF5LnByb3RvdHlwZVtAQHVuc2NvcGFibGVzXVxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUtQEB1bnNjb3BhYmxlc1xuaWYgKEFycmF5UHJvdG90eXBlW1VOU0NPUEFCTEVTXSA9PT0gdW5kZWZpbmVkKSB7XG4gIGRlZmluZVByb3BlcnR5KEFycmF5UHJvdG90eXBlLCBVTlNDT1BBQkxFUywge1xuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICB2YWx1ZTogY3JlYXRlKG51bGwpXG4gIH0pO1xufVxuXG4vLyBhZGQgYSBrZXkgdG8gQXJyYXkucHJvdG90eXBlW0BAdW5zY29wYWJsZXNdXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgQXJyYXlQcm90b3R5cGVbVU5TQ09QQUJMRVNdW2tleV0gPSB0cnVlO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciAkaW5jbHVkZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaW5jbHVkZXMnKS5pbmNsdWRlcztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGFkZFRvVW5zY29wYWJsZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYWRkLXRvLXVuc2NvcGFibGVzJyk7XG5cbi8vIEZGOTkrIGJ1Z1xudmFyIEJST0tFTl9PTl9TUEFSU0UgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1hcnJheS1wcm90b3R5cGUtaW5jbHVkZXMgLS0gZGV0ZWN0aW9uXG4gIHJldHVybiAhQXJyYXkoMSkuaW5jbHVkZXMoKTtcbn0pO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmluY2x1ZGVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmluY2x1ZGVzXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBCUk9LRU5fT05fU1BBUlNFIH0sIHtcbiAgaW5jbHVkZXM6IGZ1bmN0aW9uIGluY2x1ZGVzKGVsIC8qICwgZnJvbUluZGV4ID0gMCAqLykge1xuICAgIHJldHVybiAkaW5jbHVkZXModGhpcywgZWwsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG5cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLUBAdW5zY29wYWJsZXNcbmFkZFRvVW5zY29wYWJsZXMoJ2luY2x1ZGVzJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tYXJyYXktcHJvdG90eXBlLWluZGV4b2YgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmcgKi9cbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy1jbGF1c2UnKTtcbnZhciAkaW5kZXhPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pbmNsdWRlcycpLmluZGV4T2Y7XG52YXIgYXJyYXlNZXRob2RJc1N0cmljdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaXMtc3RyaWN0Jyk7XG5cbnZhciBuYXRpdmVJbmRleE9mID0gdW5jdXJyeVRoaXMoW10uaW5kZXhPZik7XG5cbnZhciBORUdBVElWRV9aRVJPID0gISFuYXRpdmVJbmRleE9mICYmIDEgLyBuYXRpdmVJbmRleE9mKFsxXSwgMSwgLTApIDwgMDtcbnZhciBGT1JDRUQgPSBORUdBVElWRV9aRVJPIHx8ICFhcnJheU1ldGhvZElzU3RyaWN0KCdpbmRleE9mJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuaW5kZXhPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5pbmRleG9mXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICBpbmRleE9mOiBmdW5jdGlvbiBpbmRleE9mKHNlYXJjaEVsZW1lbnQgLyogLCBmcm9tSW5kZXggPSAwICovKSB7XG4gICAgdmFyIGZyb21JbmRleCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuICAgIHJldHVybiBORUdBVElWRV9aRVJPXG4gICAgICAvLyBjb252ZXJ0IC0wIHRvICswXG4gICAgICA/IG5hdGl2ZUluZGV4T2YodGhpcywgc2VhcmNoRWxlbWVudCwgZnJvbUluZGV4KSB8fCAwXG4gICAgICA6ICRpbmRleE9mKHRoaXMsIHNlYXJjaEVsZW1lbnQsIGZyb21JbmRleCk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEYoKSB7IC8qIGVtcHR5ICovIH1cbiAgRi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBudWxsO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldHByb3RvdHlwZW9mIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2YobmV3IEYoKSkgIT09IEYucHJvdG90eXBlO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG52YXIgQ09SUkVDVF9QUk9UT1RZUEVfR0VUVEVSID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvcnJlY3QtcHJvdG90eXBlLWdldHRlcicpO1xuXG52YXIgSUVfUFJPVE8gPSBzaGFyZWRLZXkoJ0lFX1BST1RPJyk7XG52YXIgJE9iamVjdCA9IE9iamVjdDtcbnZhciBPYmplY3RQcm90b3R5cGUgPSAkT2JqZWN0LnByb3RvdHlwZTtcblxuLy8gYE9iamVjdC5nZXRQcm90b3R5cGVPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRwcm90b3R5cGVvZlxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRwcm90b3R5cGVvZiAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IENPUlJFQ1RfUFJPVE9UWVBFX0dFVFRFUiA/ICRPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiAoTykge1xuICB2YXIgb2JqZWN0ID0gdG9PYmplY3QoTyk7XG4gIGlmIChoYXNPd24ob2JqZWN0LCBJRV9QUk9UTykpIHJldHVybiBvYmplY3RbSUVfUFJPVE9dO1xuICB2YXIgY29uc3RydWN0b3IgPSBvYmplY3QuY29uc3RydWN0b3I7XG4gIGlmIChpc0NhbGxhYmxlKGNvbnN0cnVjdG9yKSAmJiBvYmplY3QgaW5zdGFuY2VvZiBjb25zdHJ1Y3Rvcikge1xuICAgIHJldHVybiBjb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gIH0gcmV0dXJuIG9iamVjdCBpbnN0YW5jZW9mICRPYmplY3QgPyBPYmplY3RQcm90b3R5cGUgOiBudWxsO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZicpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbnZhciBCVUdHWV9TQUZBUklfSVRFUkFUT1JTID0gZmFsc2U7XG5cbi8vIGAlSXRlcmF0b3JQcm90b3R5cGUlYCBvYmplY3Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJWl0ZXJhdG9ycHJvdG90eXBlJS1vYmplY3RcbnZhciBJdGVyYXRvclByb3RvdHlwZSwgUHJvdG90eXBlT2ZBcnJheUl0ZXJhdG9yUHJvdG90eXBlLCBhcnJheUl0ZXJhdG9yO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1hcnJheS1wcm90b3R5cGUta2V5cyAtLSBzYWZlICovXG5pZiAoW10ua2V5cykge1xuICBhcnJheUl0ZXJhdG9yID0gW10ua2V5cygpO1xuICAvLyBTYWZhcmkgOCBoYXMgYnVnZ3kgaXRlcmF0b3JzIHcvbyBgbmV4dGBcbiAgaWYgKCEoJ25leHQnIGluIGFycmF5SXRlcmF0b3IpKSBCVUdHWV9TQUZBUklfSVRFUkFUT1JTID0gdHJ1ZTtcbiAgZWxzZSB7XG4gICAgUHJvdG90eXBlT2ZBcnJheUl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YoZ2V0UHJvdG90eXBlT2YoYXJyYXlJdGVyYXRvcikpO1xuICAgIGlmIChQcm90b3R5cGVPZkFycmF5SXRlcmF0b3JQcm90b3R5cGUgIT09IE9iamVjdC5wcm90b3R5cGUpIEl0ZXJhdG9yUHJvdG90eXBlID0gUHJvdG90eXBlT2ZBcnJheUl0ZXJhdG9yUHJvdG90eXBlO1xuICB9XG59XG5cbnZhciBORVdfSVRFUkFUT1JfUFJPVE9UWVBFID0gIWlzT2JqZWN0KEl0ZXJhdG9yUHJvdG90eXBlKSB8fCBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciB0ZXN0ID0ge307XG4gIC8vIEZGNDQtIGxlZ2FjeSBpdGVyYXRvcnMgY2FzZVxuICByZXR1cm4gSXRlcmF0b3JQcm90b3R5cGVbSVRFUkFUT1JdLmNhbGwodGVzdCkgIT09IHRlc3Q7XG59KTtcblxuaWYgKE5FV19JVEVSQVRPUl9QUk9UT1RZUEUpIEl0ZXJhdG9yUHJvdG90eXBlID0ge307XG5lbHNlIGlmIChJU19QVVJFKSBJdGVyYXRvclByb3RvdHlwZSA9IGNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSk7XG5cbi8vIGAlSXRlcmF0b3JQcm90b3R5cGUlW0BAaXRlcmF0b3JdKClgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0laXRlcmF0b3Jwcm90b3R5cGUlLUBAaXRlcmF0b3JcbmlmICghaXNDYWxsYWJsZShJdGVyYXRvclByb3RvdHlwZVtJVEVSQVRPUl0pKSB7XG4gIGRlZmluZUJ1aWx0SW4oSXRlcmF0b3JQcm90b3R5cGUsIElURVJBVE9SLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgSXRlcmF0b3JQcm90b3R5cGU6IEl0ZXJhdG9yUHJvdG90eXBlLFxuICBCVUdHWV9TQUZBUklfSVRFUkFUT1JTOiBCVUdHWV9TQUZBUklfSVRFUkFUT1JTXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBJdGVyYXRvclByb3RvdHlwZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMtY29yZScpLkl0ZXJhdG9yUHJvdG90eXBlO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG5cbnZhciByZXR1cm5UaGlzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoSXRlcmF0b3JDb25zdHJ1Y3RvciwgTkFNRSwgbmV4dCwgRU5VTUVSQUJMRV9ORVhUKSB7XG4gIHZhciBUT19TVFJJTkdfVEFHID0gTkFNRSArICcgSXRlcmF0b3InO1xuICBJdGVyYXRvckNvbnN0cnVjdG9yLnByb3RvdHlwZSA9IGNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSwgeyBuZXh0OiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoKyFFTlVNRVJBQkxFX05FWFQsIG5leHQpIH0pO1xuICBzZXRUb1N0cmluZ1RhZyhJdGVyYXRvckNvbnN0cnVjdG9yLCBUT19TVFJJTkdfVEFHLCBmYWxzZSwgdHJ1ZSk7XG4gIEl0ZXJhdG9yc1tUT19TVFJJTkdfVEFHXSA9IHJldHVyblRoaXM7XG4gIHJldHVybiBJdGVyYXRvckNvbnN0cnVjdG9yO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBGdW5jdGlvbk5hbWUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tbmFtZScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBjcmVhdGVJdGVyYXRvckNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWNyZWF0ZS1jb25zdHJ1Y3RvcicpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXNldC1wcm90b3R5cGUtb2YnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcbnZhciBJdGVyYXRvcnNDb3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycy1jb3JlJyk7XG5cbnZhciBQUk9QRVJfRlVOQ1RJT05fTkFNRSA9IEZ1bmN0aW9uTmFtZS5QUk9QRVI7XG52YXIgQ09ORklHVVJBQkxFX0ZVTkNUSU9OX05BTUUgPSBGdW5jdGlvbk5hbWUuQ09ORklHVVJBQkxFO1xudmFyIEl0ZXJhdG9yUHJvdG90eXBlID0gSXRlcmF0b3JzQ29yZS5JdGVyYXRvclByb3RvdHlwZTtcbnZhciBCVUdHWV9TQUZBUklfSVRFUkFUT1JTID0gSXRlcmF0b3JzQ29yZS5CVUdHWV9TQUZBUklfSVRFUkFUT1JTO1xudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xudmFyIEtFWVMgPSAna2V5cyc7XG52YXIgVkFMVUVTID0gJ3ZhbHVlcyc7XG52YXIgRU5UUklFUyA9ICdlbnRyaWVzJztcblxudmFyIHJldHVyblRoaXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChJdGVyYWJsZSwgTkFNRSwgSXRlcmF0b3JDb25zdHJ1Y3RvciwgbmV4dCwgREVGQVVMVCwgSVNfU0VULCBGT1JDRUQpIHtcbiAgY3JlYXRlSXRlcmF0b3JDb25zdHJ1Y3RvcihJdGVyYXRvckNvbnN0cnVjdG9yLCBOQU1FLCBuZXh0KTtcblxuICB2YXIgZ2V0SXRlcmF0aW9uTWV0aG9kID0gZnVuY3Rpb24gKEtJTkQpIHtcbiAgICBpZiAoS0lORCA9PT0gREVGQVVMVCAmJiBkZWZhdWx0SXRlcmF0b3IpIHJldHVybiBkZWZhdWx0SXRlcmF0b3I7XG4gICAgaWYgKCFCVUdHWV9TQUZBUklfSVRFUkFUT1JTICYmIEtJTkQgJiYgS0lORCBpbiBJdGVyYWJsZVByb3RvdHlwZSkgcmV0dXJuIEl0ZXJhYmxlUHJvdG90eXBlW0tJTkRdO1xuXG4gICAgc3dpdGNoIChLSU5EKSB7XG4gICAgICBjYXNlIEtFWVM6IHJldHVybiBmdW5jdGlvbiBrZXlzKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yQ29uc3RydWN0b3IodGhpcywgS0lORCk7IH07XG4gICAgICBjYXNlIFZBTFVFUzogcmV0dXJuIGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuIG5ldyBJdGVyYXRvckNvbnN0cnVjdG9yKHRoaXMsIEtJTkQpOyB9O1xuICAgICAgY2FzZSBFTlRSSUVTOiByZXR1cm4gZnVuY3Rpb24gZW50cmllcygpIHsgcmV0dXJuIG5ldyBJdGVyYXRvckNvbnN0cnVjdG9yKHRoaXMsIEtJTkQpOyB9O1xuICAgIH1cblxuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgSXRlcmF0b3JDb25zdHJ1Y3Rvcih0aGlzKTsgfTtcbiAgfTtcblxuICB2YXIgVE9fU1RSSU5HX1RBRyA9IE5BTUUgKyAnIEl0ZXJhdG9yJztcbiAgdmFyIElOQ09SUkVDVF9WQUxVRVNfTkFNRSA9IGZhbHNlO1xuICB2YXIgSXRlcmFibGVQcm90b3R5cGUgPSBJdGVyYWJsZS5wcm90b3R5cGU7XG4gIHZhciBuYXRpdmVJdGVyYXRvciA9IEl0ZXJhYmxlUHJvdG90eXBlW0lURVJBVE9SXVxuICAgIHx8IEl0ZXJhYmxlUHJvdG90eXBlWydAQGl0ZXJhdG9yJ11cbiAgICB8fCBERUZBVUxUICYmIEl0ZXJhYmxlUHJvdG90eXBlW0RFRkFVTFRdO1xuICB2YXIgZGVmYXVsdEl0ZXJhdG9yID0gIUJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgJiYgbmF0aXZlSXRlcmF0b3IgfHwgZ2V0SXRlcmF0aW9uTWV0aG9kKERFRkFVTFQpO1xuICB2YXIgYW55TmF0aXZlSXRlcmF0b3IgPSBOQU1FID09PSAnQXJyYXknID8gSXRlcmFibGVQcm90b3R5cGUuZW50cmllcyB8fCBuYXRpdmVJdGVyYXRvciA6IG5hdGl2ZUl0ZXJhdG9yO1xuICB2YXIgQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLCBtZXRob2RzLCBLRVk7XG5cbiAgLy8gZml4IG5hdGl2ZVxuICBpZiAoYW55TmF0aXZlSXRlcmF0b3IpIHtcbiAgICBDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZihhbnlOYXRpdmVJdGVyYXRvci5jYWxsKG5ldyBJdGVyYWJsZSgpKSk7XG4gICAgaWYgKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSAmJiBDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUubmV4dCkge1xuICAgICAgaWYgKCFJU19QVVJFICYmIGdldFByb3RvdHlwZU9mKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSkgIT09IEl0ZXJhdG9yUHJvdG90eXBlKSB7XG4gICAgICAgIGlmIChzZXRQcm90b3R5cGVPZikge1xuICAgICAgICAgIHNldFByb3RvdHlwZU9mKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSwgSXRlcmF0b3JQcm90b3R5cGUpO1xuICAgICAgICB9IGVsc2UgaWYgKCFpc0NhbGxhYmxlKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZVtJVEVSQVRPUl0pKSB7XG4gICAgICAgICAgZGVmaW5lQnVpbHRJbihDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUsIElURVJBVE9SLCByZXR1cm5UaGlzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gU2V0IEBAdG9TdHJpbmdUYWcgdG8gbmF0aXZlIGl0ZXJhdG9yc1xuICAgICAgc2V0VG9TdHJpbmdUYWcoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLCBUT19TVFJJTkdfVEFHLCB0cnVlLCB0cnVlKTtcbiAgICAgIGlmIChJU19QVVJFKSBJdGVyYXRvcnNbVE9fU1RSSU5HX1RBR10gPSByZXR1cm5UaGlzO1xuICAgIH1cbiAgfVxuXG4gIC8vIGZpeCBBcnJheS5wcm90b3R5cGUueyB2YWx1ZXMsIEBAaXRlcmF0b3IgfS5uYW1lIGluIFY4IC8gRkZcbiAgaWYgKFBST1BFUl9GVU5DVElPTl9OQU1FICYmIERFRkFVTFQgPT09IFZBTFVFUyAmJiBuYXRpdmVJdGVyYXRvciAmJiBuYXRpdmVJdGVyYXRvci5uYW1lICE9PSBWQUxVRVMpIHtcbiAgICBpZiAoIUlTX1BVUkUgJiYgQ09ORklHVVJBQkxFX0ZVTkNUSU9OX05BTUUpIHtcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShJdGVyYWJsZVByb3RvdHlwZSwgJ25hbWUnLCBWQUxVRVMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBJTkNPUlJFQ1RfVkFMVUVTX05BTUUgPSB0cnVlO1xuICAgICAgZGVmYXVsdEl0ZXJhdG9yID0gZnVuY3Rpb24gdmFsdWVzKCkgeyByZXR1cm4gY2FsbChuYXRpdmVJdGVyYXRvciwgdGhpcyk7IH07XG4gICAgfVxuICB9XG5cbiAgLy8gZXhwb3J0IGFkZGl0aW9uYWwgbWV0aG9kc1xuICBpZiAoREVGQVVMVCkge1xuICAgIG1ldGhvZHMgPSB7XG4gICAgICB2YWx1ZXM6IGdldEl0ZXJhdGlvbk1ldGhvZChWQUxVRVMpLFxuICAgICAga2V5czogSVNfU0VUID8gZGVmYXVsdEl0ZXJhdG9yIDogZ2V0SXRlcmF0aW9uTWV0aG9kKEtFWVMpLFxuICAgICAgZW50cmllczogZ2V0SXRlcmF0aW9uTWV0aG9kKEVOVFJJRVMpXG4gICAgfTtcbiAgICBpZiAoRk9SQ0VEKSBmb3IgKEtFWSBpbiBtZXRob2RzKSB7XG4gICAgICBpZiAoQlVHR1lfU0FGQVJJX0lURVJBVE9SUyB8fCBJTkNPUlJFQ1RfVkFMVUVTX05BTUUgfHwgIShLRVkgaW4gSXRlcmFibGVQcm90b3R5cGUpKSB7XG4gICAgICAgIGRlZmluZUJ1aWx0SW4oSXRlcmFibGVQcm90b3R5cGUsIEtFWSwgbWV0aG9kc1tLRVldKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgJCh7IHRhcmdldDogTkFNRSwgcHJvdG86IHRydWUsIGZvcmNlZDogQlVHR1lfU0FGQVJJX0lURVJBVE9SUyB8fCBJTkNPUlJFQ1RfVkFMVUVTX05BTUUgfSwgbWV0aG9kcyk7XG4gIH1cblxuICAvLyBkZWZpbmUgaXRlcmF0b3JcbiAgaWYgKCghSVNfUFVSRSB8fCBGT1JDRUQpICYmIEl0ZXJhYmxlUHJvdG90eXBlW0lURVJBVE9SXSAhPT0gZGVmYXVsdEl0ZXJhdG9yKSB7XG4gICAgZGVmaW5lQnVpbHRJbihJdGVyYWJsZVByb3RvdHlwZSwgSVRFUkFUT1IsIGRlZmF1bHRJdGVyYXRvciwgeyBuYW1lOiBERUZBVUxUIH0pO1xuICB9XG4gIEl0ZXJhdG9yc1tOQU1FXSA9IGRlZmF1bHRJdGVyYXRvcjtcblxuICByZXR1cm4gbWV0aG9kcztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gYENyZWF0ZUl0ZXJSZXN1bHRPYmplY3RgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1jcmVhdGVpdGVycmVzdWx0b2JqZWN0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh2YWx1ZSwgZG9uZSkge1xuICByZXR1cm4geyB2YWx1ZTogdmFsdWUsIGRvbmU6IGRvbmUgfTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGFkZFRvVW5zY29wYWJsZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYWRkLXRvLXVuc2NvcGFibGVzJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcbnZhciBkZWZpbmVJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1kZWZpbmUnKTtcbnZhciBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1pdGVyLXJlc3VsdC1vYmplY3QnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xuXG52YXIgQVJSQVlfSVRFUkFUT1IgPSAnQXJyYXkgSXRlcmF0b3InO1xudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3IoQVJSQVlfSVRFUkFUT1IpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmVudHJpZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZW50cmllc1xuLy8gYEFycmF5LnByb3RvdHlwZS5rZXlzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmtleXNcbi8vIGBBcnJheS5wcm90b3R5cGUudmFsdWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnZhbHVlc1xuLy8gYEFycmF5LnByb3RvdHlwZVtAQGl0ZXJhdG9yXWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS1AQGl0ZXJhdG9yXG4vLyBgQ3JlYXRlQXJyYXlJdGVyYXRvcmAgaW50ZXJuYWwgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWNyZWF0ZWFycmF5aXRlcmF0b3Jcbm1vZHVsZS5leHBvcnRzID0gZGVmaW5lSXRlcmF0b3IoQXJyYXksICdBcnJheScsIGZ1bmN0aW9uIChpdGVyYXRlZCwga2luZCkge1xuICBzZXRJbnRlcm5hbFN0YXRlKHRoaXMsIHtcbiAgICB0eXBlOiBBUlJBWV9JVEVSQVRPUixcbiAgICB0YXJnZXQ6IHRvSW5kZXhlZE9iamVjdChpdGVyYXRlZCksIC8vIHRhcmdldFxuICAgIGluZGV4OiAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbmV4dCBpbmRleFxuICAgIGtpbmQ6IGtpbmQgICAgICAgICAgICAgICAgICAgICAgICAgLy8ga2luZFxuICB9KTtcbi8vIGAlQXJyYXlJdGVyYXRvclByb3RvdHlwZSUubmV4dGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSVhcnJheWl0ZXJhdG9ycHJvdG90eXBlJS5uZXh0XG59LCBmdW5jdGlvbiAoKSB7XG4gIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhpcyk7XG4gIHZhciB0YXJnZXQgPSBzdGF0ZS50YXJnZXQ7XG4gIHZhciBpbmRleCA9IHN0YXRlLmluZGV4Kys7XG4gIGlmICghdGFyZ2V0IHx8IGluZGV4ID49IHRhcmdldC5sZW5ndGgpIHtcbiAgICBzdGF0ZS50YXJnZXQgPSBudWxsO1xuICAgIHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KHVuZGVmaW5lZCwgdHJ1ZSk7XG4gIH1cbiAgc3dpdGNoIChzdGF0ZS5raW5kKSB7XG4gICAgY2FzZSAna2V5cyc6IHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KGluZGV4LCBmYWxzZSk7XG4gICAgY2FzZSAndmFsdWVzJzogcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodGFyZ2V0W2luZGV4XSwgZmFsc2UpO1xuICB9IHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KFtpbmRleCwgdGFyZ2V0W2luZGV4XV0sIGZhbHNlKTtcbn0sICd2YWx1ZXMnKTtcblxuLy8gYXJndW1lbnRzTGlzdFtAQGl0ZXJhdG9yXSBpcyAlQXJyYXlQcm90b192YWx1ZXMlXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWNyZWF0ZXVubWFwcGVkYXJndW1lbnRzb2JqZWN0XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWNyZWF0ZW1hcHBlZGFyZ3VtZW50c29iamVjdFxudmFyIHZhbHVlcyA9IEl0ZXJhdG9ycy5Bcmd1bWVudHMgPSBJdGVyYXRvcnMuQXJyYXk7XG5cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLUBAdW5zY29wYWJsZXNcbmFkZFRvVW5zY29wYWJsZXMoJ2tleXMnKTtcbmFkZFRvVW5zY29wYWJsZXMoJ3ZhbHVlcycpO1xuYWRkVG9VbnNjb3BhYmxlcygnZW50cmllcycpO1xuXG4vLyBWOCB+IENocm9tZSA0NS0gYnVnXG5pZiAoIUlTX1BVUkUgJiYgREVTQ1JJUFRPUlMgJiYgdmFsdWVzLm5hbWUgIT09ICd2YWx1ZXMnKSB0cnkge1xuICBkZWZpbmVQcm9wZXJ0eSh2YWx1ZXMsICduYW1lJywgeyB2YWx1ZTogJ3ZhbHVlcycgfSk7XG59IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGFycmF5TWV0aG9kSXNTdHJpY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWlzLXN0cmljdCcpO1xuXG52YXIgbmF0aXZlSm9pbiA9IHVuY3VycnlUaGlzKFtdLmpvaW4pO1xuXG52YXIgRVMzX1NUUklOR1MgPSBJbmRleGVkT2JqZWN0ICE9PSBPYmplY3Q7XG52YXIgRk9SQ0VEID0gRVMzX1NUUklOR1MgfHwgIWFycmF5TWV0aG9kSXNTdHJpY3QoJ2pvaW4nLCAnLCcpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmpvaW5gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuam9pblxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgam9pbjogZnVuY3Rpb24gam9pbihzZXBhcmF0b3IpIHtcbiAgICByZXR1cm4gbmF0aXZlSm9pbih0b0luZGV4ZWRPYmplY3QodGhpcyksIHNlcGFyYXRvciA9PT0gdW5kZWZpbmVkID8gJywnIDogc2VwYXJhdG9yKTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJG1hcCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5tYXA7XG52YXIgYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaGFzLXNwZWNpZXMtc3VwcG9ydCcpO1xuXG52YXIgSEFTX1NQRUNJRVNfU1VQUE9SVCA9IGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQoJ21hcCcpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLm1hcGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5tYXBcbi8vIHdpdGggYWRkaW5nIHN1cHBvcnQgb2YgQEBzcGVjaWVzXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAhSEFTX1NQRUNJRVNfU1VQUE9SVCB9LCB7XG4gIG1hcDogZnVuY3Rpb24gbWFwKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRtYXAodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBJbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbnZhciBSRURVQ0VfRU1QVFkgPSAnUmVkdWNlIG9mIGVtcHR5IGFycmF5IHdpdGggbm8gaW5pdGlhbCB2YWx1ZSc7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUueyByZWR1Y2UsIHJlZHVjZVJpZ2h0IH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoSVNfUklHSFQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh0aGF0LCBjYWxsYmFja2ZuLCBhcmd1bWVudHNMZW5ndGgsIG1lbW8pIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoYXQpO1xuICAgIHZhciBzZWxmID0gSW5kZXhlZE9iamVjdChPKTtcbiAgICB2YXIgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgYUNhbGxhYmxlKGNhbGxiYWNrZm4pO1xuICAgIGlmIChsZW5ndGggPT09IDAgJiYgYXJndW1lbnRzTGVuZ3RoIDwgMikgdGhyb3cgbmV3ICRUeXBlRXJyb3IoUkVEVUNFX0VNUFRZKTtcbiAgICB2YXIgaW5kZXggPSBJU19SSUdIVCA/IGxlbmd0aCAtIDEgOiAwO1xuICAgIHZhciBpID0gSVNfUklHSFQgPyAtMSA6IDE7XG4gICAgaWYgKGFyZ3VtZW50c0xlbmd0aCA8IDIpIHdoaWxlICh0cnVlKSB7XG4gICAgICBpZiAoaW5kZXggaW4gc2VsZikge1xuICAgICAgICBtZW1vID0gc2VsZltpbmRleF07XG4gICAgICAgIGluZGV4ICs9IGk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgaW5kZXggKz0gaTtcbiAgICAgIGlmIChJU19SSUdIVCA/IGluZGV4IDwgMCA6IGxlbmd0aCA8PSBpbmRleCkge1xuICAgICAgICB0aHJvdyBuZXcgJFR5cGVFcnJvcihSRURVQ0VfRU1QVFkpO1xuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKDtJU19SSUdIVCA/IGluZGV4ID49IDAgOiBsZW5ndGggPiBpbmRleDsgaW5kZXggKz0gaSkgaWYgKGluZGV4IGluIHNlbGYpIHtcbiAgICAgIG1lbW8gPSBjYWxsYmFja2ZuKG1lbW8sIHNlbGZbaW5kZXhdLCBpbmRleCwgTyk7XG4gICAgfVxuICAgIHJldHVybiBtZW1vO1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBBcnJheS5wcm90b3R5cGUucmVkdWNlYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUucmVkdWNlXG4gIGxlZnQ6IGNyZWF0ZU1ldGhvZChmYWxzZSksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUucmVkdWNlUmlnaHRgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5yZWR1Y2VyaWdodFxuICByaWdodDogY3JlYXRlTWV0aG9kKHRydWUpXG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8qIGdsb2JhbCBCdW4sIERlbm8gLS0gZGV0ZWN0aW9uICovXG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC11c2VyLWFnZW50Jyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xuXG52YXIgdXNlckFnZW50U3RhcnRzV2l0aCA9IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgcmV0dXJuIHVzZXJBZ2VudC5zbGljZSgwLCBzdHJpbmcubGVuZ3RoKSA9PT0gc3RyaW5nO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSAoZnVuY3Rpb24gKCkge1xuICBpZiAodXNlckFnZW50U3RhcnRzV2l0aCgnQnVuLycpKSByZXR1cm4gJ0JVTic7XG4gIGlmICh1c2VyQWdlbnRTdGFydHNXaXRoKCdDbG91ZGZsYXJlLVdvcmtlcnMnKSkgcmV0dXJuICdDTE9VREZMQVJFJztcbiAgaWYgKHVzZXJBZ2VudFN0YXJ0c1dpdGgoJ0Rlbm8vJykpIHJldHVybiAnREVOTyc7XG4gIGlmICh1c2VyQWdlbnRTdGFydHNXaXRoKCdOb2RlLmpzLycpKSByZXR1cm4gJ05PREUnO1xuICBpZiAoZ2xvYmFsVGhpcy5CdW4gJiYgdHlwZW9mIEJ1bi52ZXJzaW9uID09ICdzdHJpbmcnKSByZXR1cm4gJ0JVTic7XG4gIGlmIChnbG9iYWxUaGlzLkRlbm8gJiYgdHlwZW9mIERlbm8udmVyc2lvbiA9PSAnb2JqZWN0JykgcmV0dXJuICdERU5PJztcbiAgaWYgKGNsYXNzb2YoZ2xvYmFsVGhpcy5wcm9jZXNzKSA9PT0gJ3Byb2Nlc3MnKSByZXR1cm4gJ05PREUnO1xuICBpZiAoZ2xvYmFsVGhpcy53aW5kb3cgJiYgZ2xvYmFsVGhpcy5kb2N1bWVudCkgcmV0dXJuICdCUk9XU0VSJztcbiAgcmV0dXJuICdSRVNUJztcbn0pKCk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIEVOVklST05NRU5UID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vudmlyb25tZW50Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gRU5WSVJPTk1FTlQgPT09ICdOT0RFJztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciAkcmVkdWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXJlZHVjZScpLmxlZnQ7XG52YXIgYXJyYXlNZXRob2RJc1N0cmljdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaXMtc3RyaWN0Jyk7XG52YXIgQ0hST01FX1ZFUlNJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdjgtdmVyc2lvbicpO1xudmFyIElTX05PREUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW52aXJvbm1lbnQtaXMtbm9kZScpO1xuXG4vLyBDaHJvbWUgODAtODIgaGFzIGEgY3JpdGljYWwgYnVnXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0xMDQ5OTgyXG52YXIgQ0hST01FX0JVRyA9ICFJU19OT0RFICYmIENIUk9NRV9WRVJTSU9OID4gNzkgJiYgQ0hST01FX1ZFUlNJT04gPCA4MztcbnZhciBGT1JDRUQgPSBDSFJPTUVfQlVHIHx8ICFhcnJheU1ldGhvZElzU3RyaWN0KCdyZWR1Y2UnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5yZWR1Y2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUucmVkdWNlXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICByZWR1Y2U6IGZ1bmN0aW9uIHJlZHVjZShjYWxsYmFja2ZuIC8qICwgaW5pdGlhbFZhbHVlICovKSB7XG4gICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgcmV0dXJuICRyZWR1Y2UodGhpcywgY2FsbGJhY2tmbiwgbGVuZ3RoLCBsZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xudmFyIGlzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY29uc3RydWN0b3InKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eScpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWhhcy1zcGVjaWVzLXN1cHBvcnQnKTtcbnZhciBuYXRpdmVTbGljZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zbGljZScpO1xuXG52YXIgSEFTX1NQRUNJRVNfU1VQUE9SVCA9IGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQoJ3NsaWNlJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG52YXIgJEFycmF5ID0gQXJyYXk7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuc2xpY2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuc2xpY2Vcbi8vIGZhbGxiYWNrIGZvciBub3QgYXJyYXktbGlrZSBFUzMgc3RyaW5ncyBhbmQgRE9NIG9iamVjdHNcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6ICFIQVNfU1BFQ0lFU19TVVBQT1JUIH0sIHtcbiAgc2xpY2U6IGZ1bmN0aW9uIHNsaWNlKHN0YXJ0LCBlbmQpIHtcbiAgICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdCh0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgdmFyIGsgPSB0b0Fic29sdXRlSW5kZXgoc3RhcnQsIGxlbmd0aCk7XG4gICAgdmFyIGZpbiA9IHRvQWJzb2x1dGVJbmRleChlbmQgPT09IHVuZGVmaW5lZCA/IGxlbmd0aCA6IGVuZCwgbGVuZ3RoKTtcbiAgICAvLyBpbmxpbmUgYEFycmF5U3BlY2llc0NyZWF0ZWAgZm9yIHVzYWdlIG5hdGl2ZSBgQXJyYXkjc2xpY2VgIHdoZXJlIGl0J3MgcG9zc2libGVcbiAgICB2YXIgQ29uc3RydWN0b3IsIHJlc3VsdCwgbjtcbiAgICBpZiAoaXNBcnJheShPKSkge1xuICAgICAgQ29uc3RydWN0b3IgPSBPLmNvbnN0cnVjdG9yO1xuICAgICAgLy8gY3Jvc3MtcmVhbG0gZmFsbGJhY2tcbiAgICAgIGlmIChpc0NvbnN0cnVjdG9yKENvbnN0cnVjdG9yKSAmJiAoQ29uc3RydWN0b3IgPT09ICRBcnJheSB8fCBpc0FycmF5KENvbnN0cnVjdG9yLnByb3RvdHlwZSkpKSB7XG4gICAgICAgIENvbnN0cnVjdG9yID0gdW5kZWZpbmVkO1xuICAgICAgfSBlbHNlIGlmIChpc09iamVjdChDb25zdHJ1Y3RvcikpIHtcbiAgICAgICAgQ29uc3RydWN0b3IgPSBDb25zdHJ1Y3RvcltTUEVDSUVTXTtcbiAgICAgICAgaWYgKENvbnN0cnVjdG9yID09PSBudWxsKSBDb25zdHJ1Y3RvciA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGlmIChDb25zdHJ1Y3RvciA9PT0gJEFycmF5IHx8IENvbnN0cnVjdG9yID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIG5hdGl2ZVNsaWNlKE8sIGssIGZpbik7XG4gICAgICB9XG4gICAgfVxuICAgIHJlc3VsdCA9IG5ldyAoQ29uc3RydWN0b3IgPT09IHVuZGVmaW5lZCA/ICRBcnJheSA6IENvbnN0cnVjdG9yKShtYXgoZmluIC0gaywgMCkpO1xuICAgIGZvciAobiA9IDA7IGsgPCBmaW47IGsrKywgbisrKSBpZiAoayBpbiBPKSBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIG4sIE9ba10pO1xuICAgIHJlc3VsdC5sZW5ndGggPSBuO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBQKSB7XG4gIGlmICghZGVsZXRlIE9bUF0pIHRocm93IG5ldyAkVHlwZUVycm9yKCdDYW5ub3QgZGVsZXRlIHByb3BlcnR5ICcgKyB0cnlUb1N0cmluZyhQKSArICcgb2YgJyArIHRyeVRvU3RyaW5nKE8pKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBzZXRBcnJheUxlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zZXQtbGVuZ3RoJyk7XG52YXIgZGVsZXRlUHJvcGVydHlPclRocm93ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlbGV0ZS1wcm9wZXJ0eS1vci10aHJvdycpO1xudmFyIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2VzLW5vdC1leGNlZWQtc2FmZS1pbnRlZ2VyJyk7XG5cbi8vIElFOC1cbnZhciBJTkNPUlJFQ1RfUkVTVUxUID0gW10udW5zaGlmdCgwKSAhPT0gMTtcblxuLy8gVjggfiBDaHJvbWUgPCA3MSBhbmQgU2FmYXJpIDw9IDE1LjQsIEZGIDwgMjMgdGhyb3dzIEludGVybmFsRXJyb3JcbnZhciBwcm9wZXJFcnJvck9uTm9uV3JpdGFibGVMZW5ndGggPSBmdW5jdGlvbiAoKSB7XG4gIHRyeSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFtdLCAnbGVuZ3RoJywgeyB3cml0YWJsZTogZmFsc2UgfSkudW5zaGlmdCgpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBlcnJvciBpbnN0YW5jZW9mIFR5cGVFcnJvcjtcbiAgfVxufTtcblxudmFyIEZPUkNFRCA9IElOQ09SUkVDVF9SRVNVTFQgfHwgIXByb3BlckVycm9yT25Ob25Xcml0YWJsZUxlbmd0aCgpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnVuc2hpZnRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUudW5zaGlmdFxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGFyaXR5OiAxLCBmb3JjZWQ6IEZPUkNFRCB9LCB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycyAtLSByZXF1aXJlZCBmb3IgYC5sZW5ndGhgXG4gIHVuc2hpZnQ6IGZ1bmN0aW9uIHVuc2hpZnQoaXRlbSkge1xuICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgdmFyIGxlbiA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICAgIHZhciBhcmdDb3VudCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgaWYgKGFyZ0NvdW50KSB7XG4gICAgICBkb2VzTm90RXhjZWVkU2FmZUludGVnZXIobGVuICsgYXJnQ291bnQpO1xuICAgICAgdmFyIGsgPSBsZW47XG4gICAgICB3aGlsZSAoay0tKSB7XG4gICAgICAgIHZhciB0byA9IGsgKyBhcmdDb3VudDtcbiAgICAgICAgaWYgKGsgaW4gTykgT1t0b10gPSBPW2tdO1xuICAgICAgICBlbHNlIGRlbGV0ZVByb3BlcnR5T3JUaHJvdyhPLCB0byk7XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGFyZ0NvdW50OyBqKyspIHtcbiAgICAgICAgT1tqXSA9IGFyZ3VtZW50c1tqXTtcbiAgICAgIH1cbiAgICB9IHJldHVybiBzZXRBcnJheUxlbmd0aChPLCBsZW4gKyBhcmdDb3VudCk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBQcm90b3R5cGUpIHtcbiAgaWYgKGlzUHJvdG90eXBlT2YoUHJvdG90eXBlLCBpdCkpIHJldHVybiBpdDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0luY29ycmVjdCBpbnZvY2F0aW9uJyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLWluc3RhbmNlJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgZGVmaW5lQnVpbHRJbkFjY2Vzc29yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi1hY2Nlc3NvcicpO1xudmFyIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eScpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBJdGVyYXRvclByb3RvdHlwZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMtY29yZScpLkl0ZXJhdG9yUHJvdG90eXBlO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG5cbnZhciBDT05TVFJVQ1RPUiA9ICdjb25zdHJ1Y3Rvcic7XG52YXIgSVRFUkFUT1IgPSAnSXRlcmF0b3InO1xudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xudmFyIE5hdGl2ZUl0ZXJhdG9yID0gZ2xvYmFsVGhpc1tJVEVSQVRPUl07XG5cbi8vIEZGNTYtIGhhdmUgbm9uLXN0YW5kYXJkIGdsb2JhbCBoZWxwZXIgYEl0ZXJhdG9yYFxudmFyIEZPUkNFRCA9IElTX1BVUkVcbiAgfHwgIWlzQ2FsbGFibGUoTmF0aXZlSXRlcmF0b3IpXG4gIHx8IE5hdGl2ZUl0ZXJhdG9yLnByb3RvdHlwZSAhPT0gSXRlcmF0b3JQcm90b3R5cGVcbiAgLy8gRkY0NC0gbm9uLXN0YW5kYXJkIGBJdGVyYXRvcmAgcGFzc2VzIHByZXZpb3VzIHRlc3RzXG4gIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7IE5hdGl2ZUl0ZXJhdG9yKHt9KTsgfSk7XG5cbnZhciBJdGVyYXRvckNvbnN0cnVjdG9yID0gZnVuY3Rpb24gSXRlcmF0b3IoKSB7XG4gIGFuSW5zdGFuY2UodGhpcywgSXRlcmF0b3JQcm90b3R5cGUpO1xuICBpZiAoZ2V0UHJvdG90eXBlT2YodGhpcykgPT09IEl0ZXJhdG9yUHJvdG90eXBlKSB0aHJvdyBuZXcgJFR5cGVFcnJvcignQWJzdHJhY3QgY2xhc3MgSXRlcmF0b3Igbm90IGRpcmVjdGx5IGNvbnN0cnVjdGFibGUnKTtcbn07XG5cbnZhciBkZWZpbmVJdGVyYXRvclByb3RvdHlwZUFjY2Vzc29yID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgaWYgKERFU0NSSVBUT1JTKSB7XG4gICAgZGVmaW5lQnVpbHRJbkFjY2Vzc29yKEl0ZXJhdG9yUHJvdG90eXBlLCBrZXksIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9LFxuICAgICAgc2V0OiBmdW5jdGlvbiAocmVwbGFjZW1lbnQpIHtcbiAgICAgICAgYW5PYmplY3QodGhpcyk7XG4gICAgICAgIGlmICh0aGlzID09PSBJdGVyYXRvclByb3RvdHlwZSkgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJZb3UgY2FuJ3QgcmVkZWZpbmUgdGhpcyBwcm9wZXJ0eVwiKTtcbiAgICAgICAgaWYgKGhhc093bih0aGlzLCBrZXkpKSB0aGlzW2tleV0gPSByZXBsYWNlbWVudDtcbiAgICAgICAgZWxzZSBjcmVhdGVQcm9wZXJ0eSh0aGlzLCBrZXksIHJlcGxhY2VtZW50KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSBlbHNlIEl0ZXJhdG9yUHJvdG90eXBlW2tleV0gPSB2YWx1ZTtcbn07XG5cbmlmICghaGFzT3duKEl0ZXJhdG9yUHJvdG90eXBlLCBUT19TVFJJTkdfVEFHKSkgZGVmaW5lSXRlcmF0b3JQcm90b3R5cGVBY2Nlc3NvcihUT19TVFJJTkdfVEFHLCBJVEVSQVRPUik7XG5cbmlmIChGT1JDRUQgfHwgIWhhc093bihJdGVyYXRvclByb3RvdHlwZSwgQ09OU1RSVUNUT1IpIHx8IEl0ZXJhdG9yUHJvdG90eXBlW0NPTlNUUlVDVE9SXSA9PT0gT2JqZWN0KSB7XG4gIGRlZmluZUl0ZXJhdG9yUHJvdG90eXBlQWNjZXNzb3IoQ09OU1RSVUNUT1IsIEl0ZXJhdG9yQ29uc3RydWN0b3IpO1xufVxuXG5JdGVyYXRvckNvbnN0cnVjdG9yLnByb3RvdHlwZSA9IEl0ZXJhdG9yUHJvdG90eXBlO1xuXG4vLyBgSXRlcmF0b3JgIGNvbnN0cnVjdG9yXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWl0ZXJhdG9yXG4kKHsgZ2xvYmFsOiB0cnVlLCBjb25zdHJ1Y3RvcjogdHJ1ZSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICBJdGVyYXRvcjogSXRlcmF0b3JDb25zdHJ1Y3RvclxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gYEdldEl0ZXJhdG9yRGlyZWN0KG9iailgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLWl0ZXJhdG9yLWhlbHBlcnMvI3NlYy1nZXRpdGVyYXRvcmRpcmVjdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiB7XG4gICAgaXRlcmF0b3I6IG9iaixcbiAgICBuZXh0OiBvYmoubmV4dCxcbiAgICBkb25lOiBmYWxzZVxuICB9O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBzcmMsIG9wdGlvbnMpIHtcbiAgZm9yICh2YXIga2V5IGluIHNyYykgZGVmaW5lQnVpbHRJbih0YXJnZXQsIGtleSwgc3JjW2tleV0sIG9wdGlvbnMpO1xuICByZXR1cm4gdGFyZ2V0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgZGVmaW5lQnVpbHRJbnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWlucycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcbnZhciBnZXRNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LW1ldGhvZCcpO1xudmFyIEl0ZXJhdG9yUHJvdG90eXBlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycy1jb3JlJykuSXRlcmF0b3JQcm90b3R5cGU7XG52YXIgY3JlYXRlSXRlclJlc3VsdE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtaXRlci1yZXN1bHQtb2JqZWN0Jyk7XG52YXIgaXRlcmF0b3JDbG9zZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1jbG9zZScpO1xuXG52YXIgVE9fU1RSSU5HX1RBRyA9IHdlbGxLbm93blN5bWJvbCgndG9TdHJpbmdUYWcnKTtcbnZhciBJVEVSQVRPUl9IRUxQRVIgPSAnSXRlcmF0b3JIZWxwZXInO1xudmFyIFdSQVBfRk9SX1ZBTElEX0lURVJBVE9SID0gJ1dyYXBGb3JWYWxpZEl0ZXJhdG9yJztcbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG5cbnZhciBjcmVhdGVJdGVyYXRvclByb3h5UHJvdG90eXBlID0gZnVuY3Rpb24gKElTX0lURVJBVE9SKSB7XG4gIHZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3IoSVNfSVRFUkFUT1IgPyBXUkFQX0ZPUl9WQUxJRF9JVEVSQVRPUiA6IElURVJBVE9SX0hFTFBFUik7XG5cbiAgcmV0dXJuIGRlZmluZUJ1aWx0SW5zKGNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSksIHtcbiAgICBuZXh0OiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKTtcbiAgICAgIC8vIGZvciBzaW1wbGlmaWNhdGlvbjpcbiAgICAgIC8vICAgZm9yIGAlV3JhcEZvclZhbGlkSXRlcmF0b3JQcm90b3R5cGUlLm5leHRgIG9yIHdpdGggYHN0YXRlLnJldHVybkhhbmRsZXJSZXN1bHRgIG91ciBgbmV4dEhhbmRsZXJgIHJldHVybnMgYEl0ZXJSZXN1bHRPYmplY3RgXG4gICAgICAvLyAgIGZvciBgJUl0ZXJhdG9ySGVscGVyUHJvdG90eXBlJS5uZXh0YCAtIGp1c3QgYSB2YWx1ZVxuICAgICAgaWYgKElTX0lURVJBVE9SKSByZXR1cm4gc3RhdGUubmV4dEhhbmRsZXIoKTtcbiAgICAgIGlmIChzdGF0ZS5kb25lKSByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdCh1bmRlZmluZWQsIHRydWUpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHN0YXRlLm5leHRIYW5kbGVyKCk7XG4gICAgICAgIHJldHVybiBzdGF0ZS5yZXR1cm5IYW5kbGVyUmVzdWx0ID8gcmVzdWx0IDogY3JlYXRlSXRlclJlc3VsdE9iamVjdChyZXN1bHQsIHN0YXRlLmRvbmUpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgc3RhdGUuZG9uZSA9IHRydWU7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH0sXG4gICAgJ3JldHVybic6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhpcyk7XG4gICAgICB2YXIgaXRlcmF0b3IgPSBzdGF0ZS5pdGVyYXRvcjtcbiAgICAgIHN0YXRlLmRvbmUgPSB0cnVlO1xuICAgICAgaWYgKElTX0lURVJBVE9SKSB7XG4gICAgICAgIHZhciByZXR1cm5NZXRob2QgPSBnZXRNZXRob2QoaXRlcmF0b3IsICdyZXR1cm4nKTtcbiAgICAgICAgcmV0dXJuIHJldHVybk1ldGhvZCA/IGNhbGwocmV0dXJuTWV0aG9kLCBpdGVyYXRvcikgOiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KHVuZGVmaW5lZCwgdHJ1ZSk7XG4gICAgICB9XG4gICAgICBpZiAoc3RhdGUuaW5uZXIpIHRyeSB7XG4gICAgICAgIGl0ZXJhdG9yQ2xvc2Uoc3RhdGUuaW5uZXIuaXRlcmF0b3IsICdub3JtYWwnKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHJldHVybiBpdGVyYXRvckNsb3NlKGl0ZXJhdG9yLCAndGhyb3cnLCBlcnJvcik7XG4gICAgICB9XG4gICAgICBpZiAoaXRlcmF0b3IpIGl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IsICdub3JtYWwnKTtcbiAgICAgIHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KHVuZGVmaW5lZCwgdHJ1ZSk7XG4gICAgfVxuICB9KTtcbn07XG5cbnZhciBXcmFwRm9yVmFsaWRJdGVyYXRvclByb3RvdHlwZSA9IGNyZWF0ZUl0ZXJhdG9yUHJveHlQcm90b3R5cGUodHJ1ZSk7XG52YXIgSXRlcmF0b3JIZWxwZXJQcm90b3R5cGUgPSBjcmVhdGVJdGVyYXRvclByb3h5UHJvdG90eXBlKGZhbHNlKTtcblxuY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KEl0ZXJhdG9ySGVscGVyUHJvdG90eXBlLCBUT19TVFJJTkdfVEFHLCAnSXRlcmF0b3IgSGVscGVyJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5leHRIYW5kbGVyLCBJU19JVEVSQVRPUiwgUkVUVVJOX0hBTkRMRVJfUkVTVUxUKSB7XG4gIHZhciBJdGVyYXRvclByb3h5ID0gZnVuY3Rpb24gSXRlcmF0b3IocmVjb3JkLCBzdGF0ZSkge1xuICAgIGlmIChzdGF0ZSkge1xuICAgICAgc3RhdGUuaXRlcmF0b3IgPSByZWNvcmQuaXRlcmF0b3I7XG4gICAgICBzdGF0ZS5uZXh0ID0gcmVjb3JkLm5leHQ7XG4gICAgfSBlbHNlIHN0YXRlID0gcmVjb3JkO1xuICAgIHN0YXRlLnR5cGUgPSBJU19JVEVSQVRPUiA/IFdSQVBfRk9SX1ZBTElEX0lURVJBVE9SIDogSVRFUkFUT1JfSEVMUEVSO1xuICAgIHN0YXRlLnJldHVybkhhbmRsZXJSZXN1bHQgPSAhIVJFVFVSTl9IQU5ETEVSX1JFU1VMVDtcbiAgICBzdGF0ZS5uZXh0SGFuZGxlciA9IG5leHRIYW5kbGVyO1xuICAgIHN0YXRlLmNvdW50ZXIgPSAwO1xuICAgIHN0YXRlLmRvbmUgPSBmYWxzZTtcbiAgICBzZXRJbnRlcm5hbFN0YXRlKHRoaXMsIHN0YXRlKTtcbiAgfTtcblxuICBJdGVyYXRvclByb3h5LnByb3RvdHlwZSA9IElTX0lURVJBVE9SID8gV3JhcEZvclZhbGlkSXRlcmF0b3JQcm90b3R5cGUgOiBJdGVyYXRvckhlbHBlclByb3RvdHlwZTtcblxuICByZXR1cm4gSXRlcmF0b3JQcm94eTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBnZXRJdGVyYXRvckRpcmVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3ItZGlyZWN0Jyk7XG52YXIgY3JlYXRlSXRlcmF0b3JQcm94eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1jcmVhdGUtcHJveHknKTtcbnZhciBjYWxsV2l0aFNhZmVJdGVyYXRpb25DbG9zaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NhbGwtd2l0aC1zYWZlLWl0ZXJhdGlvbi1jbG9zaW5nJyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG5cbnZhciBJdGVyYXRvclByb3h5ID0gY3JlYXRlSXRlcmF0b3JQcm94eShmdW5jdGlvbiAoKSB7XG4gIHZhciBpdGVyYXRvciA9IHRoaXMuaXRlcmF0b3I7XG4gIHZhciBwcmVkaWNhdGUgPSB0aGlzLnByZWRpY2F0ZTtcbiAgdmFyIG5leHQgPSB0aGlzLm5leHQ7XG4gIHZhciByZXN1bHQsIGRvbmUsIHZhbHVlO1xuICB3aGlsZSAodHJ1ZSkge1xuICAgIHJlc3VsdCA9IGFuT2JqZWN0KGNhbGwobmV4dCwgaXRlcmF0b3IpKTtcbiAgICBkb25lID0gdGhpcy5kb25lID0gISFyZXN1bHQuZG9uZTtcbiAgICBpZiAoZG9uZSkgcmV0dXJuO1xuICAgIHZhbHVlID0gcmVzdWx0LnZhbHVlO1xuICAgIGlmIChjYWxsV2l0aFNhZmVJdGVyYXRpb25DbG9zaW5nKGl0ZXJhdG9yLCBwcmVkaWNhdGUsIFt2YWx1ZSwgdGhpcy5jb3VudGVyKytdLCB0cnVlKSkgcmV0dXJuIHZhbHVlO1xuICB9XG59KTtcblxuLy8gYEl0ZXJhdG9yLnByb3RvdHlwZS5maWx0ZXJgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pdGVyYXRvci5wcm90b3R5cGUuZmlsdGVyXG4kKHsgdGFyZ2V0OiAnSXRlcmF0b3InLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSwgZm9yY2VkOiBJU19QVVJFIH0sIHtcbiAgZmlsdGVyOiBmdW5jdGlvbiBmaWx0ZXIocHJlZGljYXRlKSB7XG4gICAgYW5PYmplY3QodGhpcyk7XG4gICAgYUNhbGxhYmxlKHByZWRpY2F0ZSk7XG4gICAgcmV0dXJuIG5ldyBJdGVyYXRvclByb3h5KGdldEl0ZXJhdG9yRGlyZWN0KHRoaXMpLCB7XG4gICAgICBwcmVkaWNhdGU6IHByZWRpY2F0ZVxuICAgIH0pO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG52YXIgaXNBcnJheUl0ZXJhdG9yTWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5LWl0ZXJhdG9yLW1ldGhvZCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgZ2V0SXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yJyk7XG52YXIgZ2V0SXRlcmF0b3JNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xudmFyIGl0ZXJhdG9yQ2xvc2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItY2xvc2UnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbnZhciBSZXN1bHQgPSBmdW5jdGlvbiAoc3RvcHBlZCwgcmVzdWx0KSB7XG4gIHRoaXMuc3RvcHBlZCA9IHN0b3BwZWQ7XG4gIHRoaXMucmVzdWx0ID0gcmVzdWx0O1xufTtcblxudmFyIFJlc3VsdFByb3RvdHlwZSA9IFJlc3VsdC5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhYmxlLCB1bmJvdW5kRnVuY3Rpb24sIG9wdGlvbnMpIHtcbiAgdmFyIHRoYXQgPSBvcHRpb25zICYmIG9wdGlvbnMudGhhdDtcbiAgdmFyIEFTX0VOVFJJRVMgPSAhIShvcHRpb25zICYmIG9wdGlvbnMuQVNfRU5UUklFUyk7XG4gIHZhciBJU19SRUNPUkQgPSAhIShvcHRpb25zICYmIG9wdGlvbnMuSVNfUkVDT1JEKTtcbiAgdmFyIElTX0lURVJBVE9SID0gISEob3B0aW9ucyAmJiBvcHRpb25zLklTX0lURVJBVE9SKTtcbiAgdmFyIElOVEVSUlVQVEVEID0gISEob3B0aW9ucyAmJiBvcHRpb25zLklOVEVSUlVQVEVEKTtcbiAgdmFyIGZuID0gYmluZCh1bmJvdW5kRnVuY3Rpb24sIHRoYXQpO1xuICB2YXIgaXRlcmF0b3IsIGl0ZXJGbiwgaW5kZXgsIGxlbmd0aCwgcmVzdWx0LCBuZXh0LCBzdGVwO1xuXG4gIHZhciBzdG9wID0gZnVuY3Rpb24gKGNvbmRpdGlvbikge1xuICAgIGlmIChpdGVyYXRvcikgaXRlcmF0b3JDbG9zZShpdGVyYXRvciwgJ25vcm1hbCcsIGNvbmRpdGlvbik7XG4gICAgcmV0dXJuIG5ldyBSZXN1bHQodHJ1ZSwgY29uZGl0aW9uKTtcbiAgfTtcblxuICB2YXIgY2FsbEZuID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgaWYgKEFTX0VOVFJJRVMpIHtcbiAgICAgIGFuT2JqZWN0KHZhbHVlKTtcbiAgICAgIHJldHVybiBJTlRFUlJVUFRFRCA/IGZuKHZhbHVlWzBdLCB2YWx1ZVsxXSwgc3RvcCkgOiBmbih2YWx1ZVswXSwgdmFsdWVbMV0pO1xuICAgIH0gcmV0dXJuIElOVEVSUlVQVEVEID8gZm4odmFsdWUsIHN0b3ApIDogZm4odmFsdWUpO1xuICB9O1xuXG4gIGlmIChJU19SRUNPUkQpIHtcbiAgICBpdGVyYXRvciA9IGl0ZXJhYmxlLml0ZXJhdG9yO1xuICB9IGVsc2UgaWYgKElTX0lURVJBVE9SKSB7XG4gICAgaXRlcmF0b3IgPSBpdGVyYWJsZTtcbiAgfSBlbHNlIHtcbiAgICBpdGVyRm4gPSBnZXRJdGVyYXRvck1ldGhvZChpdGVyYWJsZSk7XG4gICAgaWYgKCFpdGVyRm4pIHRocm93IG5ldyAkVHlwZUVycm9yKHRyeVRvU3RyaW5nKGl0ZXJhYmxlKSArICcgaXMgbm90IGl0ZXJhYmxlJyk7XG4gICAgLy8gb3B0aW1pc2F0aW9uIGZvciBhcnJheSBpdGVyYXRvcnNcbiAgICBpZiAoaXNBcnJheUl0ZXJhdG9yTWV0aG9kKGl0ZXJGbikpIHtcbiAgICAgIGZvciAoaW5kZXggPSAwLCBsZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShpdGVyYWJsZSk7IGxlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgICAgIHJlc3VsdCA9IGNhbGxGbihpdGVyYWJsZVtpbmRleF0pO1xuICAgICAgICBpZiAocmVzdWx0ICYmIGlzUHJvdG90eXBlT2YoUmVzdWx0UHJvdG90eXBlLCByZXN1bHQpKSByZXR1cm4gcmVzdWx0O1xuICAgICAgfSByZXR1cm4gbmV3IFJlc3VsdChmYWxzZSk7XG4gICAgfVxuICAgIGl0ZXJhdG9yID0gZ2V0SXRlcmF0b3IoaXRlcmFibGUsIGl0ZXJGbik7XG4gIH1cblxuICBuZXh0ID0gSVNfUkVDT1JEID8gaXRlcmFibGUubmV4dCA6IGl0ZXJhdG9yLm5leHQ7XG4gIHdoaWxlICghKHN0ZXAgPSBjYWxsKG5leHQsIGl0ZXJhdG9yKSkuZG9uZSkge1xuICAgIHRyeSB7XG4gICAgICByZXN1bHQgPSBjYWxsRm4oc3RlcC52YWx1ZSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IsICd0aHJvdycsIGVycm9yKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiByZXN1bHQgPT0gJ29iamVjdCcgJiYgcmVzdWx0ICYmIGlzUHJvdG90eXBlT2YoUmVzdWx0UHJvdG90eXBlLCByZXN1bHQpKSByZXR1cm4gcmVzdWx0O1xuICB9IHJldHVybiBuZXcgUmVzdWx0KGZhbHNlKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBnZXRJdGVyYXRvckRpcmVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3ItZGlyZWN0Jyk7XG5cbi8vIGBJdGVyYXRvci5wcm90b3R5cGUuZm9yRWFjaGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWl0ZXJhdG9yLnByb3RvdHlwZS5mb3JlYWNoXG4kKHsgdGFyZ2V0OiAnSXRlcmF0b3InLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSB9LCB7XG4gIGZvckVhY2g6IGZ1bmN0aW9uIGZvckVhY2goZm4pIHtcbiAgICBhbk9iamVjdCh0aGlzKTtcbiAgICBhQ2FsbGFibGUoZm4pO1xuICAgIHZhciByZWNvcmQgPSBnZXRJdGVyYXRvckRpcmVjdCh0aGlzKTtcbiAgICB2YXIgY291bnRlciA9IDA7XG4gICAgaXRlcmF0ZShyZWNvcmQsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgZm4odmFsdWUsIGNvdW50ZXIrKyk7XG4gICAgfSwgeyBJU19SRUNPUkQ6IHRydWUgfSk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGdldEl0ZXJhdG9yRGlyZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvci1kaXJlY3QnKTtcbnZhciBjcmVhdGVJdGVyYXRvclByb3h5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWNyZWF0ZS1wcm94eScpO1xudmFyIGNhbGxXaXRoU2FmZUl0ZXJhdGlvbkNsb3NpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2FsbC13aXRoLXNhZmUtaXRlcmF0aW9uLWNsb3NpbmcnKTtcblxudmFyIEl0ZXJhdG9yUHJveHkgPSBjcmVhdGVJdGVyYXRvclByb3h5KGZ1bmN0aW9uICgpIHtcbiAgdmFyIGl0ZXJhdG9yID0gdGhpcy5pdGVyYXRvcjtcbiAgdmFyIHJlc3VsdCA9IGFuT2JqZWN0KGNhbGwodGhpcy5uZXh0LCBpdGVyYXRvcikpO1xuICB2YXIgZG9uZSA9IHRoaXMuZG9uZSA9ICEhcmVzdWx0LmRvbmU7XG4gIGlmICghZG9uZSkgcmV0dXJuIGNhbGxXaXRoU2FmZUl0ZXJhdGlvbkNsb3NpbmcoaXRlcmF0b3IsIHRoaXMubWFwcGVyLCBbcmVzdWx0LnZhbHVlLCB0aGlzLmNvdW50ZXIrK10sIHRydWUpO1xufSk7XG5cbi8vIGBJdGVyYXRvci5wcm90b3R5cGUubWFwYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWl0ZXJhdG9yLWhlbHBlcnNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gbWFwKG1hcHBlcikge1xuICBhbk9iamVjdCh0aGlzKTtcbiAgYUNhbGxhYmxlKG1hcHBlcik7XG4gIHJldHVybiBuZXcgSXRlcmF0b3JQcm94eShnZXRJdGVyYXRvckRpcmVjdCh0aGlzKSwge1xuICAgIG1hcHBlcjogbWFwcGVyXG4gIH0pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBtYXAgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItbWFwJyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG5cbi8vIGBJdGVyYXRvci5wcm90b3R5cGUubWFwYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaXRlcmF0b3IucHJvdG90eXBlLm1hcFxuJCh7IHRhcmdldDogJ0l0ZXJhdG9yJywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIGZvcmNlZDogSVNfUFVSRSB9LCB7XG4gIG1hcDogbWFwXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGdldEl0ZXJhdG9yRGlyZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvci1kaXJlY3QnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBJdGVyYXRvci5wcm90b3R5cGUucmVkdWNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaXRlcmF0b3IucHJvdG90eXBlLnJlZHVjZVxuJCh7IHRhcmdldDogJ0l0ZXJhdG9yJywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUgfSwge1xuICByZWR1Y2U6IGZ1bmN0aW9uIHJlZHVjZShyZWR1Y2VyIC8qICwgaW5pdGlhbFZhbHVlICovKSB7XG4gICAgYW5PYmplY3QodGhpcyk7XG4gICAgYUNhbGxhYmxlKHJlZHVjZXIpO1xuICAgIHZhciByZWNvcmQgPSBnZXRJdGVyYXRvckRpcmVjdCh0aGlzKTtcbiAgICB2YXIgbm9Jbml0aWFsID0gYXJndW1lbnRzLmxlbmd0aCA8IDI7XG4gICAgdmFyIGFjY3VtdWxhdG9yID0gbm9Jbml0aWFsID8gdW5kZWZpbmVkIDogYXJndW1lbnRzWzFdO1xuICAgIHZhciBjb3VudGVyID0gMDtcbiAgICBpdGVyYXRlKHJlY29yZCwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBpZiAobm9Jbml0aWFsKSB7XG4gICAgICAgIG5vSW5pdGlhbCA9IGZhbHNlO1xuICAgICAgICBhY2N1bXVsYXRvciA9IHZhbHVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWNjdW11bGF0b3IgPSByZWR1Y2VyKGFjY3VtdWxhdG9yLCB2YWx1ZSwgY291bnRlcik7XG4gICAgICB9XG4gICAgICBjb3VudGVyKys7XG4gICAgfSwgeyBJU19SRUNPUkQ6IHRydWUgfSk7XG4gICAgaWYgKG5vSW5pdGlhbCkgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1JlZHVjZSBvZiBlbXB0eSBpdGVyYXRvciB3aXRoIG5vIGluaXRpYWwgdmFsdWUnKTtcbiAgICByZXR1cm4gYWNjdW11bGF0b3I7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIEZGMjYtIGJ1ZzogQXJyYXlCdWZmZXJzIGFyZSBub24tZXh0ZW5zaWJsZSwgYnV0IE9iamVjdC5pc0V4dGVuc2libGUgZG9lcyBub3QgcmVwb3J0IGl0XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIGlmICh0eXBlb2YgQXJyYXlCdWZmZXIgPT0gJ2Z1bmN0aW9uJykge1xuICAgIHZhciBidWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIoOCk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1pc2V4dGVuc2libGUsIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG4gICAgaWYgKE9iamVjdC5pc0V4dGVuc2libGUoYnVmZmVyKSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KGJ1ZmZlciwgJ2EnLCB7IHZhbHVlOiA4IH0pO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgQVJSQVlfQlVGRkVSX05PTl9FWFRFTlNJQkxFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWJ1ZmZlci1ub24tZXh0ZW5zaWJsZScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWlzZXh0ZW5zaWJsZSAtLSBzYWZlXG52YXIgJGlzRXh0ZW5zaWJsZSA9IE9iamVjdC5pc0V4dGVuc2libGU7XG52YXIgRkFJTFNfT05fUFJJTUlUSVZFUyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgJGlzRXh0ZW5zaWJsZSgxKTsgfSk7XG5cbi8vIGBPYmplY3QuaXNFeHRlbnNpYmxlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmlzZXh0ZW5zaWJsZVxubW9kdWxlLmV4cG9ydHMgPSAoRkFJTFNfT05fUFJJTUlUSVZFUyB8fCBBUlJBWV9CVUZGRVJfTk9OX0VYVEVOU0lCTEUpID8gZnVuY3Rpb24gaXNFeHRlbnNpYmxlKGl0KSB7XG4gIGlmICghaXNPYmplY3QoaXQpKSByZXR1cm4gZmFsc2U7XG4gIGlmIChBUlJBWV9CVUZGRVJfTk9OX0VYVEVOU0lCTEUgJiYgY2xhc3NvZihpdCkgPT09ICdBcnJheUJ1ZmZlcicpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuICRpc0V4dGVuc2libGUgPyAkaXNFeHRlbnNpYmxlKGl0KSA6IHRydWU7XG59IDogJGlzRXh0ZW5zaWJsZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWlzZXh0ZW5zaWJsZSwgZXMvbm8tb2JqZWN0LXByZXZlbnRleHRlbnNpb25zIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuaXNFeHRlbnNpYmxlKE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh7fSkpO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpO1xudmFyIGdldE93blByb3BlcnR5TmFtZXNFeHRlcm5hbE1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcy1leHRlcm5hbCcpO1xudmFyIGlzRXh0ZW5zaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtZXh0ZW5zaWJsZScpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcbnZhciBGUkVFWklORyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mcmVlemluZycpO1xuXG52YXIgUkVRVUlSRUQgPSBmYWxzZTtcbnZhciBNRVRBREFUQSA9IHVpZCgnbWV0YScpO1xudmFyIGlkID0gMDtcblxudmFyIHNldE1ldGFkYXRhID0gZnVuY3Rpb24gKGl0KSB7XG4gIGRlZmluZVByb3BlcnR5KGl0LCBNRVRBREFUQSwgeyB2YWx1ZToge1xuICAgIG9iamVjdElEOiAnTycgKyBpZCsrLCAvLyBvYmplY3QgSURcbiAgICB3ZWFrRGF0YToge30gICAgICAgICAgLy8gd2VhayBjb2xsZWN0aW9ucyBJRHNcbiAgfSB9KTtcbn07XG5cbnZhciBmYXN0S2V5ID0gZnVuY3Rpb24gKGl0LCBjcmVhdGUpIHtcbiAgLy8gcmV0dXJuIGEgcHJpbWl0aXZlIHdpdGggcHJlZml4XG4gIGlmICghaXNPYmplY3QoaXQpKSByZXR1cm4gdHlwZW9mIGl0ID09ICdzeW1ib2wnID8gaXQgOiAodHlwZW9mIGl0ID09ICdzdHJpbmcnID8gJ1MnIDogJ1AnKSArIGl0O1xuICBpZiAoIWhhc093bihpdCwgTUVUQURBVEEpKSB7XG4gICAgLy8gY2FuJ3Qgc2V0IG1ldGFkYXRhIHRvIHVuY2F1Z2h0IGZyb3plbiBvYmplY3RcbiAgICBpZiAoIWlzRXh0ZW5zaWJsZShpdCkpIHJldHVybiAnRic7XG4gICAgLy8gbm90IG5lY2Vzc2FyeSB0byBhZGQgbWV0YWRhdGFcbiAgICBpZiAoIWNyZWF0ZSkgcmV0dXJuICdFJztcbiAgICAvLyBhZGQgbWlzc2luZyBtZXRhZGF0YVxuICAgIHNldE1ldGFkYXRhKGl0KTtcbiAgLy8gcmV0dXJuIG9iamVjdCBJRFxuICB9IHJldHVybiBpdFtNRVRBREFUQV0ub2JqZWN0SUQ7XG59O1xuXG52YXIgZ2V0V2Vha0RhdGEgPSBmdW5jdGlvbiAoaXQsIGNyZWF0ZSkge1xuICBpZiAoIWhhc093bihpdCwgTUVUQURBVEEpKSB7XG4gICAgLy8gY2FuJ3Qgc2V0IG1ldGFkYXRhIHRvIHVuY2F1Z2h0IGZyb3plbiBvYmplY3RcbiAgICBpZiAoIWlzRXh0ZW5zaWJsZShpdCkpIHJldHVybiB0cnVlO1xuICAgIC8vIG5vdCBuZWNlc3NhcnkgdG8gYWRkIG1ldGFkYXRhXG4gICAgaWYgKCFjcmVhdGUpIHJldHVybiBmYWxzZTtcbiAgICAvLyBhZGQgbWlzc2luZyBtZXRhZGF0YVxuICAgIHNldE1ldGFkYXRhKGl0KTtcbiAgLy8gcmV0dXJuIHRoZSBzdG9yZSBvZiB3ZWFrIGNvbGxlY3Rpb25zIElEc1xuICB9IHJldHVybiBpdFtNRVRBREFUQV0ud2Vha0RhdGE7XG59O1xuXG4vLyBhZGQgbWV0YWRhdGEgb24gZnJlZXplLWZhbWlseSBtZXRob2RzIGNhbGxpbmdcbnZhciBvbkZyZWV6ZSA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoRlJFRVpJTkcgJiYgUkVRVUlSRUQgJiYgaXNFeHRlbnNpYmxlKGl0KSAmJiAhaGFzT3duKGl0LCBNRVRBREFUQSkpIHNldE1ldGFkYXRhKGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcblxudmFyIGVuYWJsZSA9IGZ1bmN0aW9uICgpIHtcbiAgbWV0YS5lbmFibGUgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG4gIFJFUVVJUkVEID0gdHJ1ZTtcbiAgdmFyIGdldE93blByb3BlcnR5TmFtZXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlLmY7XG4gIHZhciBzcGxpY2UgPSB1bmN1cnJ5VGhpcyhbXS5zcGxpY2UpO1xuICB2YXIgdGVzdCA9IHt9O1xuICB0ZXN0W01FVEFEQVRBXSA9IDE7XG5cbiAgLy8gcHJldmVudCBleHBvc2luZyBvZiBtZXRhZGF0YSBrZXlcbiAgaWYgKGdldE93blByb3BlcnR5TmFtZXModGVzdCkubGVuZ3RoKSB7XG4gICAgZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZS5mID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgICB2YXIgcmVzdWx0ID0gZ2V0T3duUHJvcGVydHlOYW1lcyhpdCk7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gcmVzdWx0Lmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChyZXN1bHRbaV0gPT09IE1FVEFEQVRBKSB7XG4gICAgICAgICAgc3BsaWNlKHJlc3VsdCwgaSwgMSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH0gcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuXG4gICAgJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogdHJ1ZSB9LCB7XG4gICAgICBnZXRPd25Qcm9wZXJ0eU5hbWVzOiBnZXRPd25Qcm9wZXJ0eU5hbWVzRXh0ZXJuYWxNb2R1bGUuZlxuICAgIH0pO1xuICB9XG59O1xuXG52YXIgbWV0YSA9IG1vZHVsZS5leHBvcnRzID0ge1xuICBlbmFibGU6IGVuYWJsZSxcbiAgZmFzdEtleTogZmFzdEtleSxcbiAgZ2V0V2Vha0RhdGE6IGdldFdlYWtEYXRhLFxuICBvbkZyZWV6ZTogb25GcmVlemVcbn07XG5cbmhpZGRlbktleXNbTUVUQURBVEFdID0gdHJ1ZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaXNGb3JjZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtZm9yY2VkJyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciBJbnRlcm5hbE1ldGFkYXRhTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLW1ldGFkYXRhJyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlJyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1pbnN0YW5jZScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgY2hlY2tDb3JyZWN0bmVzc09mSXRlcmF0aW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NoZWNrLWNvcnJlY3RuZXNzLW9mLWl0ZXJhdGlvbicpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgaW5oZXJpdElmUmVxdWlyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5oZXJpdC1pZi1yZXF1aXJlZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDT05TVFJVQ1RPUl9OQU1FLCB3cmFwcGVyLCBjb21tb24pIHtcbiAgdmFyIElTX01BUCA9IENPTlNUUlVDVE9SX05BTUUuaW5kZXhPZignTWFwJykgIT09IC0xO1xuICB2YXIgSVNfV0VBSyA9IENPTlNUUlVDVE9SX05BTUUuaW5kZXhPZignV2VhaycpICE9PSAtMTtcbiAgdmFyIEFEREVSID0gSVNfTUFQID8gJ3NldCcgOiAnYWRkJztcbiAgdmFyIE5hdGl2ZUNvbnN0cnVjdG9yID0gZ2xvYmFsVGhpc1tDT05TVFJVQ1RPUl9OQU1FXTtcbiAgdmFyIE5hdGl2ZVByb3RvdHlwZSA9IE5hdGl2ZUNvbnN0cnVjdG9yICYmIE5hdGl2ZUNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbiAgdmFyIENvbnN0cnVjdG9yID0gTmF0aXZlQ29uc3RydWN0b3I7XG4gIHZhciBleHBvcnRlZCA9IHt9O1xuXG4gIHZhciBmaXhNZXRob2QgPSBmdW5jdGlvbiAoS0VZKSB7XG4gICAgdmFyIHVuY3VycmllZE5hdGl2ZU1ldGhvZCA9IHVuY3VycnlUaGlzKE5hdGl2ZVByb3RvdHlwZVtLRVldKTtcbiAgICBkZWZpbmVCdWlsdEluKE5hdGl2ZVByb3RvdHlwZSwgS0VZLFxuICAgICAgS0VZID09PSAnYWRkJyA/IGZ1bmN0aW9uIGFkZCh2YWx1ZSkge1xuICAgICAgICB1bmN1cnJpZWROYXRpdmVNZXRob2QodGhpcywgdmFsdWUgPT09IDAgPyAwIDogdmFsdWUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH0gOiBLRVkgPT09ICdkZWxldGUnID8gZnVuY3Rpb24gKGtleSkge1xuICAgICAgICByZXR1cm4gSVNfV0VBSyAmJiAhaXNPYmplY3Qoa2V5KSA/IGZhbHNlIDogdW5jdXJyaWVkTmF0aXZlTWV0aG9kKHRoaXMsIGtleSA9PT0gMCA/IDAgOiBrZXkpO1xuICAgICAgfSA6IEtFWSA9PT0gJ2dldCcgPyBmdW5jdGlvbiBnZXQoa2V5KSB7XG4gICAgICAgIHJldHVybiBJU19XRUFLICYmICFpc09iamVjdChrZXkpID8gdW5kZWZpbmVkIDogdW5jdXJyaWVkTmF0aXZlTWV0aG9kKHRoaXMsIGtleSA9PT0gMCA/IDAgOiBrZXkpO1xuICAgICAgfSA6IEtFWSA9PT0gJ2hhcycgPyBmdW5jdGlvbiBoYXMoa2V5KSB7XG4gICAgICAgIHJldHVybiBJU19XRUFLICYmICFpc09iamVjdChrZXkpID8gZmFsc2UgOiB1bmN1cnJpZWROYXRpdmVNZXRob2QodGhpcywga2V5ID09PSAwID8gMCA6IGtleSk7XG4gICAgICB9IDogZnVuY3Rpb24gc2V0KGtleSwgdmFsdWUpIHtcbiAgICAgICAgdW5jdXJyaWVkTmF0aXZlTWV0aG9kKHRoaXMsIGtleSA9PT0gMCA/IDAgOiBrZXksIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG4gICAgKTtcbiAgfTtcblxuICB2YXIgUkVQTEFDRSA9IGlzRm9yY2VkKFxuICAgIENPTlNUUlVDVE9SX05BTUUsXG4gICAgIWlzQ2FsbGFibGUoTmF0aXZlQ29uc3RydWN0b3IpIHx8ICEoSVNfV0VBSyB8fCBOYXRpdmVQcm90b3R5cGUuZm9yRWFjaCAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgbmV3IE5hdGl2ZUNvbnN0cnVjdG9yKCkuZW50cmllcygpLm5leHQoKTtcbiAgICB9KSlcbiAgKTtcblxuICBpZiAoUkVQTEFDRSkge1xuICAgIC8vIGNyZWF0ZSBjb2xsZWN0aW9uIGNvbnN0cnVjdG9yXG4gICAgQ29uc3RydWN0b3IgPSBjb21tb24uZ2V0Q29uc3RydWN0b3Iod3JhcHBlciwgQ09OU1RSVUNUT1JfTkFNRSwgSVNfTUFQLCBBRERFUik7XG4gICAgSW50ZXJuYWxNZXRhZGF0YU1vZHVsZS5lbmFibGUoKTtcbiAgfSBlbHNlIGlmIChpc0ZvcmNlZChDT05TVFJVQ1RPUl9OQU1FLCB0cnVlKSkge1xuICAgIHZhciBpbnN0YW5jZSA9IG5ldyBDb25zdHJ1Y3RvcigpO1xuICAgIC8vIGVhcmx5IGltcGxlbWVudGF0aW9ucyBub3Qgc3VwcG9ydHMgY2hhaW5pbmdcbiAgICB2YXIgSEFTTlRfQ0hBSU5JTkcgPSBpbnN0YW5jZVtBRERFUl0oSVNfV0VBSyA/IHt9IDogLTAsIDEpICE9PSBpbnN0YW5jZTtcbiAgICAvLyBWOCB+IENocm9taXVtIDQwLSB3ZWFrLWNvbGxlY3Rpb25zIHRocm93cyBvbiBwcmltaXRpdmVzLCBidXQgc2hvdWxkIHJldHVybiBmYWxzZVxuICAgIHZhciBUSFJPV1NfT05fUFJJTUlUSVZFUyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgaW5zdGFuY2UuaGFzKDEpOyB9KTtcbiAgICAvLyBtb3N0IGVhcmx5IGltcGxlbWVudGF0aW9ucyBkb2Vzbid0IHN1cHBvcnRzIGl0ZXJhYmxlcywgbW9zdCBtb2Rlcm4gLSBub3QgY2xvc2UgaXQgY29ycmVjdGx5XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldyAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICAgIHZhciBBQ0NFUFRfSVRFUkFCTEVTID0gY2hlY2tDb3JyZWN0bmVzc09mSXRlcmF0aW9uKGZ1bmN0aW9uIChpdGVyYWJsZSkgeyBuZXcgTmF0aXZlQ29uc3RydWN0b3IoaXRlcmFibGUpOyB9KTtcbiAgICAvLyBmb3IgZWFybHkgaW1wbGVtZW50YXRpb25zIC0wIGFuZCArMCBub3QgdGhlIHNhbWVcbiAgICB2YXIgQlVHR1lfWkVSTyA9ICFJU19XRUFLICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFY4IH4gQ2hyb21pdW0gNDItIGZhaWxzIG9ubHkgd2l0aCA1KyBlbGVtZW50c1xuICAgICAgdmFyICRpbnN0YW5jZSA9IG5ldyBOYXRpdmVDb25zdHJ1Y3RvcigpO1xuICAgICAgdmFyIGluZGV4ID0gNTtcbiAgICAgIHdoaWxlIChpbmRleC0tKSAkaW5zdGFuY2VbQURERVJdKGluZGV4LCBpbmRleCk7XG4gICAgICByZXR1cm4gISRpbnN0YW5jZS5oYXMoLTApO1xuICAgIH0pO1xuXG4gICAgaWYgKCFBQ0NFUFRfSVRFUkFCTEVTKSB7XG4gICAgICBDb25zdHJ1Y3RvciA9IHdyYXBwZXIoZnVuY3Rpb24gKGR1bW15LCBpdGVyYWJsZSkge1xuICAgICAgICBhbkluc3RhbmNlKGR1bW15LCBOYXRpdmVQcm90b3R5cGUpO1xuICAgICAgICB2YXIgdGhhdCA9IGluaGVyaXRJZlJlcXVpcmVkKG5ldyBOYXRpdmVDb25zdHJ1Y3RvcigpLCBkdW1teSwgQ29uc3RydWN0b3IpO1xuICAgICAgICBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKGl0ZXJhYmxlKSkgaXRlcmF0ZShpdGVyYWJsZSwgdGhhdFtBRERFUl0sIHsgdGhhdDogdGhhdCwgQVNfRU5UUklFUzogSVNfTUFQIH0pO1xuICAgICAgICByZXR1cm4gdGhhdDtcbiAgICAgIH0pO1xuICAgICAgQ29uc3RydWN0b3IucHJvdG90eXBlID0gTmF0aXZlUHJvdG90eXBlO1xuICAgICAgTmF0aXZlUHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ29uc3RydWN0b3I7XG4gICAgfVxuXG4gICAgaWYgKFRIUk9XU19PTl9QUklNSVRJVkVTIHx8IEJVR0dZX1pFUk8pIHtcbiAgICAgIGZpeE1ldGhvZCgnZGVsZXRlJyk7XG4gICAgICBmaXhNZXRob2QoJ2hhcycpO1xuICAgICAgSVNfTUFQICYmIGZpeE1ldGhvZCgnZ2V0Jyk7XG4gICAgfVxuXG4gICAgaWYgKEJVR0dZX1pFUk8gfHwgSEFTTlRfQ0hBSU5JTkcpIGZpeE1ldGhvZChBRERFUik7XG5cbiAgICAvLyB3ZWFrIGNvbGxlY3Rpb25zIHNob3VsZCBub3QgY29udGFpbnMgLmNsZWFyIG1ldGhvZFxuICAgIGlmIChJU19XRUFLICYmIE5hdGl2ZVByb3RvdHlwZS5jbGVhcikgZGVsZXRlIE5hdGl2ZVByb3RvdHlwZS5jbGVhcjtcbiAgfVxuXG4gIGV4cG9ydGVkW0NPTlNUUlVDVE9SX05BTUVdID0gQ29uc3RydWN0b3I7XG4gICQoeyBnbG9iYWw6IHRydWUsIGNvbnN0cnVjdG9yOiB0cnVlLCBmb3JjZWQ6IENvbnN0cnVjdG9yICE9PSBOYXRpdmVDb25zdHJ1Y3RvciB9LCBleHBvcnRlZCk7XG5cbiAgc2V0VG9TdHJpbmdUYWcoQ29uc3RydWN0b3IsIENPTlNUUlVDVE9SX05BTUUpO1xuXG4gIGlmICghSVNfV0VBSykgY29tbW9uLnNldFN0cm9uZyhDb25zdHJ1Y3RvciwgQ09OU1RSVUNUT1JfTkFNRSwgSVNfTUFQKTtcblxuICByZXR1cm4gQ29uc3RydWN0b3I7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGRlZmluZUJ1aWx0SW5BY2Nlc3NvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4tYWNjZXNzb3InKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDT05TVFJVQ1RPUl9OQU1FKSB7XG4gIHZhciBDb25zdHJ1Y3RvciA9IGdldEJ1aWx0SW4oQ09OU1RSVUNUT1JfTkFNRSk7XG5cbiAgaWYgKERFU0NSSVBUT1JTICYmIENvbnN0cnVjdG9yICYmICFDb25zdHJ1Y3RvcltTUEVDSUVTXSkge1xuICAgIGRlZmluZUJ1aWx0SW5BY2Nlc3NvcihDb25zdHJ1Y3RvciwgU1BFQ0lFUywge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9XG4gICAgfSk7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG52YXIgZGVmaW5lQnVpbHRJbkFjY2Vzc29yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi1hY2Nlc3NvcicpO1xudmFyIGRlZmluZUJ1aWx0SW5zID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbnMnKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4taW5zdGFuY2UnKTtcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xudmFyIGRlZmluZUl0ZXJhdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWRlZmluZScpO1xudmFyIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLWl0ZXItcmVzdWx0LW9iamVjdCcpO1xudmFyIHNldFNwZWNpZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXNwZWNpZXMnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhc3RLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtbWV0YWRhdGEnKS5mYXN0S2V5O1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcblxudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBpbnRlcm5hbFN0YXRlR2V0dGVyRm9yID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3I7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBnZXRDb25zdHJ1Y3RvcjogZnVuY3Rpb24gKHdyYXBwZXIsIENPTlNUUlVDVE9SX05BTUUsIElTX01BUCwgQURERVIpIHtcbiAgICB2YXIgQ29uc3RydWN0b3IgPSB3cmFwcGVyKGZ1bmN0aW9uICh0aGF0LCBpdGVyYWJsZSkge1xuICAgICAgYW5JbnN0YW5jZSh0aGF0LCBQcm90b3R5cGUpO1xuICAgICAgc2V0SW50ZXJuYWxTdGF0ZSh0aGF0LCB7XG4gICAgICAgIHR5cGU6IENPTlNUUlVDVE9SX05BTUUsXG4gICAgICAgIGluZGV4OiBjcmVhdGUobnVsbCksXG4gICAgICAgIGZpcnN0OiBudWxsLFxuICAgICAgICBsYXN0OiBudWxsLFxuICAgICAgICBzaXplOiAwXG4gICAgICB9KTtcbiAgICAgIGlmICghREVTQ1JJUFRPUlMpIHRoYXQuc2l6ZSA9IDA7XG4gICAgICBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKGl0ZXJhYmxlKSkgaXRlcmF0ZShpdGVyYWJsZSwgdGhhdFtBRERFUl0sIHsgdGhhdDogdGhhdCwgQVNfRU5UUklFUzogSVNfTUFQIH0pO1xuICAgIH0pO1xuXG4gICAgdmFyIFByb3RvdHlwZSA9IENvbnN0cnVjdG9yLnByb3RvdHlwZTtcblxuICAgIHZhciBnZXRJbnRlcm5hbFN0YXRlID0gaW50ZXJuYWxTdGF0ZUdldHRlckZvcihDT05TVFJVQ1RPUl9OQU1FKTtcblxuICAgIHZhciBkZWZpbmUgPSBmdW5jdGlvbiAodGhhdCwga2V5LCB2YWx1ZSkge1xuICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGF0KTtcbiAgICAgIHZhciBlbnRyeSA9IGdldEVudHJ5KHRoYXQsIGtleSk7XG4gICAgICB2YXIgcHJldmlvdXMsIGluZGV4O1xuICAgICAgLy8gY2hhbmdlIGV4aXN0aW5nIGVudHJ5XG4gICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgZW50cnkudmFsdWUgPSB2YWx1ZTtcbiAgICAgIC8vIGNyZWF0ZSBuZXcgZW50cnlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXRlLmxhc3QgPSBlbnRyeSA9IHtcbiAgICAgICAgICBpbmRleDogaW5kZXggPSBmYXN0S2V5KGtleSwgdHJ1ZSksXG4gICAgICAgICAga2V5OiBrZXksXG4gICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgIHByZXZpb3VzOiBwcmV2aW91cyA9IHN0YXRlLmxhc3QsXG4gICAgICAgICAgbmV4dDogbnVsbCxcbiAgICAgICAgICByZW1vdmVkOiBmYWxzZVxuICAgICAgICB9O1xuICAgICAgICBpZiAoIXN0YXRlLmZpcnN0KSBzdGF0ZS5maXJzdCA9IGVudHJ5O1xuICAgICAgICBpZiAocHJldmlvdXMpIHByZXZpb3VzLm5leHQgPSBlbnRyeTtcbiAgICAgICAgaWYgKERFU0NSSVBUT1JTKSBzdGF0ZS5zaXplKys7XG4gICAgICAgIGVsc2UgdGhhdC5zaXplKys7XG4gICAgICAgIC8vIGFkZCB0byBpbmRleFxuICAgICAgICBpZiAoaW5kZXggIT09ICdGJykgc3RhdGUuaW5kZXhbaW5kZXhdID0gZW50cnk7XG4gICAgICB9IHJldHVybiB0aGF0O1xuICAgIH07XG5cbiAgICB2YXIgZ2V0RW50cnkgPSBmdW5jdGlvbiAodGhhdCwga2V5KSB7XG4gICAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoYXQpO1xuICAgICAgLy8gZmFzdCBjYXNlXG4gICAgICB2YXIgaW5kZXggPSBmYXN0S2V5KGtleSk7XG4gICAgICB2YXIgZW50cnk7XG4gICAgICBpZiAoaW5kZXggIT09ICdGJykgcmV0dXJuIHN0YXRlLmluZGV4W2luZGV4XTtcbiAgICAgIC8vIGZyb3plbiBvYmplY3QgY2FzZVxuICAgICAgZm9yIChlbnRyeSA9IHN0YXRlLmZpcnN0OyBlbnRyeTsgZW50cnkgPSBlbnRyeS5uZXh0KSB7XG4gICAgICAgIGlmIChlbnRyeS5rZXkgPT09IGtleSkgcmV0dXJuIGVudHJ5O1xuICAgICAgfVxuICAgIH07XG5cbiAgICBkZWZpbmVCdWlsdElucyhQcm90b3R5cGUsIHtcbiAgICAgIC8vIGB7IE1hcCwgU2V0IH0ucHJvdG90eXBlLmNsZWFyKClgIG1ldGhvZHNcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5jbGVhclxuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQucHJvdG90eXBlLmNsZWFyXG4gICAgICBjbGVhcjogZnVuY3Rpb24gY2xlYXIoKSB7XG4gICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGF0KTtcbiAgICAgICAgdmFyIGVudHJ5ID0gc3RhdGUuZmlyc3Q7XG4gICAgICAgIHdoaWxlIChlbnRyeSkge1xuICAgICAgICAgIGVudHJ5LnJlbW92ZWQgPSB0cnVlO1xuICAgICAgICAgIGlmIChlbnRyeS5wcmV2aW91cykgZW50cnkucHJldmlvdXMgPSBlbnRyeS5wcmV2aW91cy5uZXh0ID0gbnVsbDtcbiAgICAgICAgICBlbnRyeSA9IGVudHJ5Lm5leHQ7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGUuZmlyc3QgPSBzdGF0ZS5sYXN0ID0gbnVsbDtcbiAgICAgICAgc3RhdGUuaW5kZXggPSBjcmVhdGUobnVsbCk7XG4gICAgICAgIGlmIChERVNDUklQVE9SUykgc3RhdGUuc2l6ZSA9IDA7XG4gICAgICAgIGVsc2UgdGhhdC5zaXplID0gMDtcbiAgICAgIH0sXG4gICAgICAvLyBgeyBNYXAsIFNldCB9LnByb3RvdHlwZS5kZWxldGUoa2V5KWAgbWV0aG9kc1xuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLmRlbGV0ZVxuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQucHJvdG90eXBlLmRlbGV0ZVxuICAgICAgJ2RlbGV0ZSc6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoYXQpO1xuICAgICAgICB2YXIgZW50cnkgPSBnZXRFbnRyeSh0aGF0LCBrZXkpO1xuICAgICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgICB2YXIgbmV4dCA9IGVudHJ5Lm5leHQ7XG4gICAgICAgICAgdmFyIHByZXYgPSBlbnRyeS5wcmV2aW91cztcbiAgICAgICAgICBkZWxldGUgc3RhdGUuaW5kZXhbZW50cnkuaW5kZXhdO1xuICAgICAgICAgIGVudHJ5LnJlbW92ZWQgPSB0cnVlO1xuICAgICAgICAgIGlmIChwcmV2KSBwcmV2Lm5leHQgPSBuZXh0O1xuICAgICAgICAgIGlmIChuZXh0KSBuZXh0LnByZXZpb3VzID0gcHJldjtcbiAgICAgICAgICBpZiAoc3RhdGUuZmlyc3QgPT09IGVudHJ5KSBzdGF0ZS5maXJzdCA9IG5leHQ7XG4gICAgICAgICAgaWYgKHN0YXRlLmxhc3QgPT09IGVudHJ5KSBzdGF0ZS5sYXN0ID0gcHJldjtcbiAgICAgICAgICBpZiAoREVTQ1JJUFRPUlMpIHN0YXRlLnNpemUtLTtcbiAgICAgICAgICBlbHNlIHRoYXQuc2l6ZS0tO1xuICAgICAgICB9IHJldHVybiAhIWVudHJ5O1xuICAgICAgfSxcbiAgICAgIC8vIGB7IE1hcCwgU2V0IH0ucHJvdG90eXBlLmZvckVhY2goY2FsbGJhY2tmbiwgdGhpc0FyZyA9IHVuZGVmaW5lZClgIG1ldGhvZHNcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5mb3JlYWNoXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUuZm9yZWFjaFxuICAgICAgZm9yRWFjaDogZnVuY3Rpb24gZm9yRWFjaChjYWxsYmFja2ZuIC8qICwgdGhhdCA9IHVuZGVmaW5lZCAqLykge1xuICAgICAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpO1xuICAgICAgICB2YXIgYm91bmRGdW5jdGlvbiA9IGJpbmQoY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgICAgICB2YXIgZW50cnk7XG4gICAgICAgIHdoaWxlIChlbnRyeSA9IGVudHJ5ID8gZW50cnkubmV4dCA6IHN0YXRlLmZpcnN0KSB7XG4gICAgICAgICAgYm91bmRGdW5jdGlvbihlbnRyeS52YWx1ZSwgZW50cnkua2V5LCB0aGlzKTtcbiAgICAgICAgICAvLyByZXZlcnQgdG8gdGhlIGxhc3QgZXhpc3RpbmcgZW50cnlcbiAgICAgICAgICB3aGlsZSAoZW50cnkgJiYgZW50cnkucmVtb3ZlZCkgZW50cnkgPSBlbnRyeS5wcmV2aW91cztcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIC8vIGB7IE1hcCwgU2V0fS5wcm90b3R5cGUuaGFzKGtleSlgIG1ldGhvZHNcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5oYXNcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS5oYXNcbiAgICAgIGhhczogZnVuY3Rpb24gaGFzKGtleSkge1xuICAgICAgICByZXR1cm4gISFnZXRFbnRyeSh0aGlzLCBrZXkpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgZGVmaW5lQnVpbHRJbnMoUHJvdG90eXBlLCBJU19NQVAgPyB7XG4gICAgICAvLyBgTWFwLnByb3RvdHlwZS5nZXQoa2V5KWAgbWV0aG9kXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUuZ2V0XG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldChrZXkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gZ2V0RW50cnkodGhpcywga2V5KTtcbiAgICAgICAgcmV0dXJuIGVudHJ5ICYmIGVudHJ5LnZhbHVlO1xuICAgICAgfSxcbiAgICAgIC8vIGBNYXAucHJvdG90eXBlLnNldChrZXksIHZhbHVlKWAgbWV0aG9kXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUuc2V0XG4gICAgICBzZXQ6IGZ1bmN0aW9uIHNldChrZXksIHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBkZWZpbmUodGhpcywga2V5ID09PSAwID8gMCA6IGtleSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH0gOiB7XG4gICAgICAvLyBgU2V0LnByb3RvdHlwZS5hZGQodmFsdWUpYCBtZXRob2RcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS5hZGRcbiAgICAgIGFkZDogZnVuY3Rpb24gYWRkKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBkZWZpbmUodGhpcywgdmFsdWUgPSB2YWx1ZSA9PT0gMCA/IDAgOiB2YWx1ZSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChERVNDUklQVE9SUykgZGVmaW5lQnVpbHRJbkFjY2Vzc29yKFByb3RvdHlwZSwgJ3NpemUnLCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGdldEludGVybmFsU3RhdGUodGhpcykuc2l6ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gQ29uc3RydWN0b3I7XG4gIH0sXG4gIHNldFN0cm9uZzogZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBDT05TVFJVQ1RPUl9OQU1FLCBJU19NQVApIHtcbiAgICB2YXIgSVRFUkFUT1JfTkFNRSA9IENPTlNUUlVDVE9SX05BTUUgKyAnIEl0ZXJhdG9yJztcbiAgICB2YXIgZ2V0SW50ZXJuYWxDb2xsZWN0aW9uU3RhdGUgPSBpbnRlcm5hbFN0YXRlR2V0dGVyRm9yKENPTlNUUlVDVE9SX05BTUUpO1xuICAgIHZhciBnZXRJbnRlcm5hbEl0ZXJhdG9yU3RhdGUgPSBpbnRlcm5hbFN0YXRlR2V0dGVyRm9yKElURVJBVE9SX05BTUUpO1xuICAgIC8vIGB7IE1hcCwgU2V0IH0ucHJvdG90eXBlLnsga2V5cywgdmFsdWVzLCBlbnRyaWVzLCBAQGl0ZXJhdG9yIH0oKWAgbWV0aG9kc1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5lbnRyaWVzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLmtleXNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUudmFsdWVzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLUBAaXRlcmF0b3JcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUuZW50cmllc1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS5rZXlzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQucHJvdG90eXBlLnZhbHVlc1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS1AQGl0ZXJhdG9yXG4gICAgZGVmaW5lSXRlcmF0b3IoQ29uc3RydWN0b3IsIENPTlNUUlVDVE9SX05BTUUsIGZ1bmN0aW9uIChpdGVyYXRlZCwga2luZCkge1xuICAgICAgc2V0SW50ZXJuYWxTdGF0ZSh0aGlzLCB7XG4gICAgICAgIHR5cGU6IElURVJBVE9SX05BTUUsXG4gICAgICAgIHRhcmdldDogaXRlcmF0ZWQsXG4gICAgICAgIHN0YXRlOiBnZXRJbnRlcm5hbENvbGxlY3Rpb25TdGF0ZShpdGVyYXRlZCksXG4gICAgICAgIGtpbmQ6IGtpbmQsXG4gICAgICAgIGxhc3Q6IG51bGxcbiAgICAgIH0pO1xuICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsSXRlcmF0b3JTdGF0ZSh0aGlzKTtcbiAgICAgIHZhciBraW5kID0gc3RhdGUua2luZDtcbiAgICAgIHZhciBlbnRyeSA9IHN0YXRlLmxhc3Q7XG4gICAgICAvLyByZXZlcnQgdG8gdGhlIGxhc3QgZXhpc3RpbmcgZW50cnlcbiAgICAgIHdoaWxlIChlbnRyeSAmJiBlbnRyeS5yZW1vdmVkKSBlbnRyeSA9IGVudHJ5LnByZXZpb3VzO1xuICAgICAgLy8gZ2V0IG5leHQgZW50cnlcbiAgICAgIGlmICghc3RhdGUudGFyZ2V0IHx8ICEoc3RhdGUubGFzdCA9IGVudHJ5ID0gZW50cnkgPyBlbnRyeS5uZXh0IDogc3RhdGUuc3RhdGUuZmlyc3QpKSB7XG4gICAgICAgIC8vIG9yIGZpbmlzaCB0aGUgaXRlcmF0aW9uXG4gICAgICAgIHN0YXRlLnRhcmdldCA9IG51bGw7XG4gICAgICAgIHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KHVuZGVmaW5lZCwgdHJ1ZSk7XG4gICAgICB9XG4gICAgICAvLyByZXR1cm4gc3RlcCBieSBraW5kXG4gICAgICBpZiAoa2luZCA9PT0gJ2tleXMnKSByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdChlbnRyeS5rZXksIGZhbHNlKTtcbiAgICAgIGlmIChraW5kID09PSAndmFsdWVzJykgcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QoZW50cnkudmFsdWUsIGZhbHNlKTtcbiAgICAgIHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KFtlbnRyeS5rZXksIGVudHJ5LnZhbHVlXSwgZmFsc2UpO1xuICAgIH0sIElTX01BUCA/ICdlbnRyaWVzJyA6ICd2YWx1ZXMnLCAhSVNfTUFQLCB0cnVlKTtcblxuICAgIC8vIGB7IE1hcCwgU2V0IH0ucHJvdG90eXBlW0BAc3BlY2llc11gIGFjY2Vzc29yc1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZ2V0LW1hcC1AQHNwZWNpZXNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWdldC1zZXQtQEBzcGVjaWVzXG4gICAgc2V0U3BlY2llcyhDT05TVFJVQ1RPUl9OQU1FKTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY29sbGVjdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb2xsZWN0aW9uJyk7XG52YXIgY29sbGVjdGlvblN0cm9uZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb2xsZWN0aW9uLXN0cm9uZycpO1xuXG4vLyBgTWFwYCBjb25zdHJ1Y3RvclxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAtb2JqZWN0c1xuY29sbGVjdGlvbignTWFwJywgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIE1hcCgpIHsgcmV0dXJuIGluaXQodGhpcywgYXJndW1lbnRzLmxlbmd0aCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZCk7IH07XG59LCBjb2xsZWN0aW9uU3Ryb25nKTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgdGhpcyBtb2R1bGUgZnJvbSBgY29yZS1qc0A0YCBzaW5jZSBpdCdzIHJlcGxhY2VkIHRvIG1vZHVsZSBiZWxvd1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5tYXAuY29uc3RydWN0b3InKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGRlZmluZVByb3BlcnRpZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0aWVzJykuZjtcblxuLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmRlZmluZXByb3BlcnRpZXNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydGllcyAtLSBzYWZlXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBPYmplY3QuZGVmaW5lUHJvcGVydGllcyAhPT0gZGVmaW5lUHJvcGVydGllcywgc2hhbTogIURFU0NSSVBUT1JTIH0sIHtcbiAgZGVmaW5lUHJvcGVydGllczogZGVmaW5lUHJvcGVydGllc1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcblxuLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0eWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0eVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBPYmplY3QuZGVmaW5lUHJvcGVydHkgIT09IGRlZmluZVByb3BlcnR5LCBzaGFtOiAhREVTQ1JJUFRPUlMgfSwge1xuICBkZWZpbmVQcm9wZXJ0eTogZGVmaW5lUHJvcGVydHlcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKS5mO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG5cbnZhciBGT1JDRUQgPSAhREVTQ1JJUFRPUlMgfHwgZmFpbHMoZnVuY3Rpb24gKCkgeyBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoMSk7IH0pO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3JcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IEZPUkNFRCwgc2hhbTogIURFU0NSSVBUT1JTIH0sIHtcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaXQsIGtleSkge1xuICAgIHJldHVybiBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodG9JbmRleGVkT2JqZWN0KGl0KSwga2V5KTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBvd25LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL293bi1rZXlzJyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHknKTtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5ZGVzY3JpcHRvcnNcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBzaGFtOiAhREVTQ1JJUFRPUlMgfSwge1xuICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCkge1xuICAgIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KG9iamVjdCk7XG4gICAgdmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZS5mO1xuICAgIHZhciBrZXlzID0gb3duS2V5cyhPKTtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIga2V5LCBkZXNjcmlwdG9yO1xuICAgIHdoaWxlIChrZXlzLmxlbmd0aCA+IGluZGV4KSB7XG4gICAgICBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIGtleSA9IGtleXNbaW5kZXgrK10pO1xuICAgICAgaWYgKGRlc2NyaXB0b3IgIT09IHVuZGVmaW5lZCkgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBrZXksIGRlc2NyaXB0b3IpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGdldE93blByb3BlcnR5TmFtZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMtZXh0ZXJuYWwnKS5mO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5bmFtZXMgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbnZhciBGQUlMU19PTl9QUklNSVRJVkVTID0gZmFpbHMoZnVuY3Rpb24gKCkgeyByZXR1cm4gIU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKDEpOyB9KTtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5bmFtZXNcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IEZBSUxTX09OX1BSSU1JVElWRVMgfSwge1xuICBnZXRPd25Qcm9wZXJ0eU5hbWVzOiBnZXRPd25Qcm9wZXJ0eU5hbWVzXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBuYXRpdmVLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxudmFyIEZBSUxTX09OX1BSSU1JVElWRVMgPSBmYWlscyhmdW5jdGlvbiAoKSB7IG5hdGl2ZUtleXMoMSk7IH0pO1xuXG4vLyBgT2JqZWN0LmtleXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3Qua2V5c1xuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogRkFJTFNfT05fUFJJTUlUSVZFUyB9LCB7XG4gIGtleXM6IGZ1bmN0aW9uIGtleXMoaXQpIHtcbiAgICByZXR1cm4gbmF0aXZlS2V5cyh0b09iamVjdChpdCkpO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBvbkZyZWV6ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1tZXRhZGF0YScpLm9uRnJlZXplO1xudmFyIEZSRUVaSU5HID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZyZWV6aW5nJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1zZWFsIC0tIHNhZmVcbnZhciAkc2VhbCA9IE9iamVjdC5zZWFsO1xudmFyIEZBSUxTX09OX1BSSU1JVElWRVMgPSBmYWlscyhmdW5jdGlvbiAoKSB7ICRzZWFsKDEpOyB9KTtcblxuLy8gYE9iamVjdC5zZWFsYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LnNlYWxcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IEZBSUxTX09OX1BSSU1JVElWRVMsIHNoYW06ICFGUkVFWklORyB9LCB7XG4gIHNlYWw6IGZ1bmN0aW9uIHNlYWwoaXQpIHtcbiAgICByZXR1cm4gJHNlYWwgJiYgaXNPYmplY3QoaXQpID8gJHNlYWwob25GcmVlemUoaXQpKSA6IGl0O1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgVE9fU1RSSU5HX1RBR19TVVBQT1JUID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZy10YWctc3VwcG9ydCcpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xuXG4vLyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmdcbm1vZHVsZS5leHBvcnRzID0gVE9fU1RSSU5HX1RBR19TVVBQT1JUID8ge30udG9TdHJpbmcgOiBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuICdbb2JqZWN0ICcgKyBjbGFzc29mKHRoaXMpICsgJ10nO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgVE9fU1RSSU5HX1RBR19TVVBQT1JUID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZy10YWctc3VwcG9ydCcpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXRvLXN0cmluZycpO1xuXG4vLyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmdcbmlmICghVE9fU1RSSU5HX1RBR19TVVBQT1JUKSB7XG4gIGRlZmluZUJ1aWx0SW4oT2JqZWN0LnByb3RvdHlwZSwgJ3RvU3RyaW5nJywgdG9TdHJpbmcsIHsgdW5zYWZlOiB0cnVlIH0pO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcblxuLy8gYmFiZWwtbWluaWZ5IGFuZCBDbG9zdXJlIENvbXBpbGVyIHRyYW5zcGlsZXMgUmVnRXhwKCdhJywgJ3knKSAtPiAvYS95IGFuZCBpdCBjYXVzZXMgU3ludGF4RXJyb3JcbnZhciAkUmVnRXhwID0gZ2xvYmFsVGhpcy5SZWdFeHA7XG5cbnZhciBVTlNVUFBPUlRFRF9ZID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgcmUgPSAkUmVnRXhwKCdhJywgJ3knKTtcbiAgcmUubGFzdEluZGV4ID0gMjtcbiAgcmV0dXJuIHJlLmV4ZWMoJ2FiY2QnKSAhPT0gbnVsbDtcbn0pO1xuXG4vLyBVQyBCcm93c2VyIGJ1Z1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzEwMDhcbnZhciBNSVNTRURfU1RJQ0tZID0gVU5TVVBQT1JURURfWSB8fCBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAhJFJlZ0V4cCgnYScsICd5Jykuc3RpY2t5O1xufSk7XG5cbnZhciBCUk9LRU5fQ0FSRVQgPSBVTlNVUFBPUlRFRF9ZIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzczNjg3XG4gIHZhciByZSA9ICRSZWdFeHAoJ15yJywgJ2d5Jyk7XG4gIHJlLmxhc3RJbmRleCA9IDI7XG4gIHJldHVybiByZS5leGVjKCdzdHInKSAhPT0gbnVsbDtcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgQlJPS0VOX0NBUkVUOiBCUk9LRU5fQ0FSRVQsXG4gIE1JU1NFRF9TVElDS1k6IE1JU1NFRF9TVElDS1ksXG4gIFVOU1VQUE9SVEVEX1k6IFVOU1VQUE9SVEVEX1lcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xuXG4vLyBiYWJlbC1taW5pZnkgYW5kIENsb3N1cmUgQ29tcGlsZXIgdHJhbnNwaWxlcyBSZWdFeHAoJy4nLCAncycpIC0+IC8uL3MgYW5kIGl0IGNhdXNlcyBTeW50YXhFcnJvclxudmFyICRSZWdFeHAgPSBnbG9iYWxUaGlzLlJlZ0V4cDtcblxubW9kdWxlLmV4cG9ydHMgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciByZSA9ICRSZWdFeHAoJy4nLCAncycpO1xuICByZXR1cm4gIShyZS5kb3RBbGwgJiYgcmUudGVzdCgnXFxuJykgJiYgcmUuZmxhZ3MgPT09ICdzJyk7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG5cbi8vIGJhYmVsLW1pbmlmeSBhbmQgQ2xvc3VyZSBDb21waWxlciB0cmFuc3BpbGVzIFJlZ0V4cCgnKD88YT5iKScsICdnJykgLT4gLyg/PGE+YikvZyBhbmQgaXQgY2F1c2VzIFN5bnRheEVycm9yXG52YXIgJFJlZ0V4cCA9IGdsb2JhbFRoaXMuUmVnRXhwO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHJlID0gJFJlZ0V4cCgnKD88YT5iKScsICdnJyk7XG4gIHJldHVybiByZS5leGVjKCdiJykuZ3JvdXBzLmEgIT09ICdiJyB8fFxuICAgICdiJy5yZXBsYWNlKHJlLCAnJDxhPmMnKSAhPT0gJ2JjJztcbn0pO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIHJlZ2V4cC9uby1lbXB0eS1jYXB0dXJpbmctZ3JvdXAsIHJlZ2V4cC9uby1lbXB0eS1ncm91cCwgcmVnZXhwL25vLWxhenktZW5kcyAtLSB0ZXN0aW5nICovXG4vKiBlc2xpbnQtZGlzYWJsZSByZWdleHAvbm8tdXNlbGVzcy1xdWFudGlmaWVyIC0tIHRlc3RpbmcgKi9cbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciByZWdleHBGbGFncyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtZmxhZ3MnKTtcbnZhciBzdGlja3lIZWxwZXJzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1zdGlja3ktaGVscGVycycpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIGdldEludGVybmFsU3RhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKS5nZXQ7XG52YXIgVU5TVVBQT1JURURfRE9UX0FMTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtdW5zdXBwb3J0ZWQtZG90LWFsbCcpO1xudmFyIFVOU1VQUE9SVEVEX05DRyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtdW5zdXBwb3J0ZWQtbmNnJyk7XG5cbnZhciBuYXRpdmVSZXBsYWNlID0gc2hhcmVkKCduYXRpdmUtc3RyaW5nLXJlcGxhY2UnLCBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2UpO1xudmFyIG5hdGl2ZUV4ZWMgPSBSZWdFeHAucHJvdG90eXBlLmV4ZWM7XG52YXIgcGF0Y2hlZEV4ZWMgPSBuYXRpdmVFeGVjO1xudmFyIGNoYXJBdCA9IHVuY3VycnlUaGlzKCcnLmNoYXJBdCk7XG52YXIgaW5kZXhPZiA9IHVuY3VycnlUaGlzKCcnLmluZGV4T2YpO1xudmFyIHJlcGxhY2UgPSB1bmN1cnJ5VGhpcygnJy5yZXBsYWNlKTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcblxudmFyIFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyA9IChmdW5jdGlvbiAoKSB7XG4gIHZhciByZTEgPSAvYS87XG4gIHZhciByZTIgPSAvYiovZztcbiAgY2FsbChuYXRpdmVFeGVjLCByZTEsICdhJyk7XG4gIGNhbGwobmF0aXZlRXhlYywgcmUyLCAnYScpO1xuICByZXR1cm4gcmUxLmxhc3RJbmRleCAhPT0gMCB8fCByZTIubGFzdEluZGV4ICE9PSAwO1xufSkoKTtcblxudmFyIFVOU1VQUE9SVEVEX1kgPSBzdGlja3lIZWxwZXJzLkJST0tFTl9DQVJFVDtcblxuLy8gbm9ucGFydGljaXBhdGluZyBjYXB0dXJpbmcgZ3JvdXAsIGNvcGllZCBmcm9tIGVzNS1zaGltJ3MgU3RyaW5nI3NwbGl0IHBhdGNoLlxudmFyIE5QQ0dfSU5DTFVERUQgPSAvKCk/Py8uZXhlYygnJylbMV0gIT09IHVuZGVmaW5lZDtcblxudmFyIFBBVENIID0gVVBEQVRFU19MQVNUX0lOREVYX1dST05HIHx8IE5QQ0dfSU5DTFVERUQgfHwgVU5TVVBQT1JURURfWSB8fCBVTlNVUFBPUlRFRF9ET1RfQUxMIHx8IFVOU1VQUE9SVEVEX05DRztcblxuaWYgKFBBVENIKSB7XG4gIHBhdGNoZWRFeGVjID0gZnVuY3Rpb24gZXhlYyhzdHJpbmcpIHtcbiAgICB2YXIgcmUgPSB0aGlzO1xuICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUocmUpO1xuICAgIHZhciBzdHIgPSB0b1N0cmluZyhzdHJpbmcpO1xuICAgIHZhciByYXcgPSBzdGF0ZS5yYXc7XG4gICAgdmFyIHJlc3VsdCwgcmVDb3B5LCBsYXN0SW5kZXgsIG1hdGNoLCBpLCBvYmplY3QsIGdyb3VwO1xuXG4gICAgaWYgKHJhdykge1xuICAgICAgcmF3Lmxhc3RJbmRleCA9IHJlLmxhc3RJbmRleDtcbiAgICAgIHJlc3VsdCA9IGNhbGwocGF0Y2hlZEV4ZWMsIHJhdywgc3RyKTtcbiAgICAgIHJlLmxhc3RJbmRleCA9IHJhdy5sYXN0SW5kZXg7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHZhciBncm91cHMgPSBzdGF0ZS5ncm91cHM7XG4gICAgdmFyIHN0aWNreSA9IFVOU1VQUE9SVEVEX1kgJiYgcmUuc3RpY2t5O1xuICAgIHZhciBmbGFncyA9IGNhbGwocmVnZXhwRmxhZ3MsIHJlKTtcbiAgICB2YXIgc291cmNlID0gcmUuc291cmNlO1xuICAgIHZhciBjaGFyc0FkZGVkID0gMDtcbiAgICB2YXIgc3RyQ29weSA9IHN0cjtcblxuICAgIGlmIChzdGlja3kpIHtcbiAgICAgIGZsYWdzID0gcmVwbGFjZShmbGFncywgJ3knLCAnJyk7XG4gICAgICBpZiAoaW5kZXhPZihmbGFncywgJ2cnKSA9PT0gLTEpIHtcbiAgICAgICAgZmxhZ3MgKz0gJ2cnO1xuICAgICAgfVxuXG4gICAgICBzdHJDb3B5ID0gc3RyaW5nU2xpY2Uoc3RyLCByZS5sYXN0SW5kZXgpO1xuICAgICAgLy8gU3VwcG9ydCBhbmNob3JlZCBzdGlja3kgYmVoYXZpb3IuXG4gICAgICBpZiAocmUubGFzdEluZGV4ID4gMCAmJiAoIXJlLm11bHRpbGluZSB8fCByZS5tdWx0aWxpbmUgJiYgY2hhckF0KHN0ciwgcmUubGFzdEluZGV4IC0gMSkgIT09ICdcXG4nKSkge1xuICAgICAgICBzb3VyY2UgPSAnKD86ICcgKyBzb3VyY2UgKyAnKSc7XG4gICAgICAgIHN0ckNvcHkgPSAnICcgKyBzdHJDb3B5O1xuICAgICAgICBjaGFyc0FkZGVkKys7XG4gICAgICB9XG4gICAgICAvLyBeKD8gKyByeCArICkgaXMgbmVlZGVkLCBpbiBjb21iaW5hdGlvbiB3aXRoIHNvbWUgc3RyIHNsaWNpbmcsIHRvXG4gICAgICAvLyBzaW11bGF0ZSB0aGUgJ3knIGZsYWcuXG4gICAgICByZUNvcHkgPSBuZXcgUmVnRXhwKCdeKD86JyArIHNvdXJjZSArICcpJywgZmxhZ3MpO1xuICAgIH1cblxuICAgIGlmIChOUENHX0lOQ0xVREVEKSB7XG4gICAgICByZUNvcHkgPSBuZXcgUmVnRXhwKCdeJyArIHNvdXJjZSArICckKD8hXFxcXHMpJywgZmxhZ3MpO1xuICAgIH1cbiAgICBpZiAoVVBEQVRFU19MQVNUX0lOREVYX1dST05HKSBsYXN0SW5kZXggPSByZS5sYXN0SW5kZXg7XG5cbiAgICBtYXRjaCA9IGNhbGwobmF0aXZlRXhlYywgc3RpY2t5ID8gcmVDb3B5IDogcmUsIHN0ckNvcHkpO1xuXG4gICAgaWYgKHN0aWNreSkge1xuICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgIG1hdGNoLmlucHV0ID0gc3RyaW5nU2xpY2UobWF0Y2guaW5wdXQsIGNoYXJzQWRkZWQpO1xuICAgICAgICBtYXRjaFswXSA9IHN0cmluZ1NsaWNlKG1hdGNoWzBdLCBjaGFyc0FkZGVkKTtcbiAgICAgICAgbWF0Y2guaW5kZXggPSByZS5sYXN0SW5kZXg7XG4gICAgICAgIHJlLmxhc3RJbmRleCArPSBtYXRjaFswXS5sZW5ndGg7XG4gICAgICB9IGVsc2UgcmUubGFzdEluZGV4ID0gMDtcbiAgICB9IGVsc2UgaWYgKFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyAmJiBtYXRjaCkge1xuICAgICAgcmUubGFzdEluZGV4ID0gcmUuZ2xvYmFsID8gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGggOiBsYXN0SW5kZXg7XG4gICAgfVxuICAgIGlmIChOUENHX0lOQ0xVREVEICYmIG1hdGNoICYmIG1hdGNoLmxlbmd0aCA+IDEpIHtcbiAgICAgIC8vIEZpeCBicm93c2VycyB3aG9zZSBgZXhlY2AgbWV0aG9kcyBkb24ndCBjb25zaXN0ZW50bHkgcmV0dXJuIGB1bmRlZmluZWRgXG4gICAgICAvLyBmb3IgTlBDRywgbGlrZSBJRTguIE5PVEU6IFRoaXMgZG9lc24ndCB3b3JrIGZvciAvKC4/KT8vXG4gICAgICBjYWxsKG5hdGl2ZVJlcGxhY2UsIG1hdGNoWzBdLCByZUNvcHksIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZm9yIChpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGggLSAyOyBpKyspIHtcbiAgICAgICAgICBpZiAoYXJndW1lbnRzW2ldID09PSB1bmRlZmluZWQpIG1hdGNoW2ldID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAobWF0Y2ggJiYgZ3JvdXBzKSB7XG4gICAgICBtYXRjaC5ncm91cHMgPSBvYmplY3QgPSBjcmVhdGUobnVsbCk7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgZ3JvdXBzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGdyb3VwID0gZ3JvdXBzW2ldO1xuICAgICAgICBvYmplY3RbZ3JvdXBbMF1dID0gbWF0Y2hbZ3JvdXBbMV1dO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtYXRjaDtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBwYXRjaGVkRXhlYztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBleGVjID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1leGVjJyk7XG5cbi8vIGBSZWdFeHAucHJvdG90eXBlLmV4ZWNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLmV4ZWNcbiQoeyB0YXJnZXQ6ICdSZWdFeHAnLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAvLi8uZXhlYyAhPT0gZXhlYyB9LCB7XG4gIGV4ZWM6IGV4ZWNcbn0pO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IFJlbW92ZSBmcm9tIGBjb3JlLWpzQDRgIHNpbmNlIGl0J3MgbW92ZWQgdG8gZW50cnkgcG9pbnRzXG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLnJlZ2V4cC5leGVjJyk7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG5cbnZhciBERUxFR0FURVNfVE9fRVhFQyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGV4ZWNDYWxsZWQgPSBmYWxzZTtcbiAgdmFyIHJlID0gL1thY10vO1xuICByZS5leGVjID0gZnVuY3Rpb24gKCkge1xuICAgIGV4ZWNDYWxsZWQgPSB0cnVlO1xuICAgIHJldHVybiAvLi8uZXhlYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9O1xuICByZXR1cm4gcmUudGVzdCgnYWJjJykgPT09IHRydWUgJiYgZXhlY0NhbGxlZDtcbn0oKTtcblxudmFyIG5hdGl2ZVRlc3QgPSAvLi8udGVzdDtcblxuLy8gYFJlZ0V4cC5wcm90b3R5cGUudGVzdGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUudGVzdFxuJCh7IHRhcmdldDogJ1JlZ0V4cCcsIHByb3RvOiB0cnVlLCBmb3JjZWQ6ICFERUxFR0FURVNfVE9fRVhFQyB9LCB7XG4gIHRlc3Q6IGZ1bmN0aW9uIChTKSB7XG4gICAgdmFyIFIgPSBhbk9iamVjdCh0aGlzKTtcbiAgICB2YXIgc3RyaW5nID0gdG9TdHJpbmcoUyk7XG4gICAgdmFyIGV4ZWMgPSBSLmV4ZWM7XG4gICAgaWYgKCFpc0NhbGxhYmxlKGV4ZWMpKSByZXR1cm4gY2FsbChuYXRpdmVUZXN0LCBSLCBzdHJpbmcpO1xuICAgIHZhciByZXN1bHQgPSBjYWxsKGV4ZWMsIFIsIHN0cmluZyk7XG4gICAgaWYgKHJlc3VsdCA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuICAgIGFuT2JqZWN0KHJlc3VsdCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBNQVRDSCA9IHdlbGxLbm93blN5bWJvbCgnbWF0Y2gnKTtcblxuLy8gYElzUmVnRXhwYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaXNyZWdleHBcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBpc1JlZ0V4cDtcbiAgcmV0dXJuIGlzT2JqZWN0KGl0KSAmJiAoKGlzUmVnRXhwID0gaXRbTUFUQ0hdKSAhPT0gdW5kZWZpbmVkID8gISFpc1JlZ0V4cCA6IGNsYXNzb2YoaXQpID09PSAnUmVnRXhwJyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1JlZ0V4cCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1yZWdleHAnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpc1JlZ0V4cChpdCkpIHtcbiAgICB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIlRoZSBtZXRob2QgZG9lc24ndCBhY2NlcHQgcmVndWxhciBleHByZXNzaW9uc1wiKTtcbiAgfSByZXR1cm4gaXQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIE1BVENIID0gd2VsbEtub3duU3ltYm9sKCdtYXRjaCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChNRVRIT0RfTkFNRSkge1xuICB2YXIgcmVnZXhwID0gLy4vO1xuICB0cnkge1xuICAgICcvLi8nW01FVEhPRF9OQU1FXShyZWdleHApO1xuICB9IGNhdGNoIChlcnJvcjEpIHtcbiAgICB0cnkge1xuICAgICAgcmVnZXhwW01BVENIXSA9IGZhbHNlO1xuICAgICAgcmV0dXJuICcvLi8nW01FVEhPRF9OQU1FXShyZWdleHApO1xuICAgIH0gY2F0Y2ggKGVycm9yMikgeyAvKiBlbXB0eSAqLyB9XG4gIH0gcmV0dXJuIGZhbHNlO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMtY2xhdXNlJyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKS5mO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCcpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIG5vdEFSZWdFeHAgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbm90LWEtcmVnZXhwJyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcbnZhciBjb3JyZWN0SXNSZWdFeHBMb2dpYyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb3JyZWN0LWlzLXJlZ2V4cC1sb2dpYycpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xuXG52YXIgc2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG52YXIgbWluID0gTWF0aC5taW47XG5cbnZhciBDT1JSRUNUX0lTX1JFR0VYUF9MT0dJQyA9IGNvcnJlY3RJc1JlZ0V4cExvZ2ljKCdlbmRzV2l0aCcpO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvcHVsbC83MDJcbnZhciBNRE5fUE9MWUZJTExfQlVHID0gIUlTX1BVUkUgJiYgIUNPUlJFQ1RfSVNfUkVHRVhQX0xPR0lDICYmICEhZnVuY3Rpb24gKCkge1xuICB2YXIgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihTdHJpbmcucHJvdG90eXBlLCAnZW5kc1dpdGgnKTtcbiAgcmV0dXJuIGRlc2NyaXB0b3IgJiYgIWRlc2NyaXB0b3Iud3JpdGFibGU7XG59KCk7XG5cbi8vIGBTdHJpbmcucHJvdG90eXBlLmVuZHNXaXRoYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5lbmRzd2l0aFxuJCh7IHRhcmdldDogJ1N0cmluZycsIHByb3RvOiB0cnVlLCBmb3JjZWQ6ICFNRE5fUE9MWUZJTExfQlVHICYmICFDT1JSRUNUX0lTX1JFR0VYUF9MT0dJQyB9LCB7XG4gIGVuZHNXaXRoOiBmdW5jdGlvbiBlbmRzV2l0aChzZWFyY2hTdHJpbmcgLyogLCBlbmRQb3NpdGlvbiA9IEBsZW5ndGggKi8pIHtcbiAgICB2YXIgdGhhdCA9IHRvU3RyaW5nKHJlcXVpcmVPYmplY3RDb2VyY2libGUodGhpcykpO1xuICAgIG5vdEFSZWdFeHAoc2VhcmNoU3RyaW5nKTtcbiAgICB2YXIgZW5kUG9zaXRpb24gPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgbGVuID0gdGhhdC5sZW5ndGg7XG4gICAgdmFyIGVuZCA9IGVuZFBvc2l0aW9uID09PSB1bmRlZmluZWQgPyBsZW4gOiBtaW4odG9MZW5ndGgoZW5kUG9zaXRpb24pLCBsZW4pO1xuICAgIHZhciBzZWFyY2ggPSB0b1N0cmluZyhzZWFyY2hTdHJpbmcpO1xuICAgIHJldHVybiBzbGljZSh0aGF0LCBlbmQgLSBzZWFyY2gubGVuZ3RoLCBlbmQpID09PSBzZWFyY2g7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIG5vdEFSZWdFeHAgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbm90LWEtcmVnZXhwJyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciBjb3JyZWN0SXNSZWdFeHBMb2dpYyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb3JyZWN0LWlzLXJlZ2V4cC1sb2dpYycpO1xuXG52YXIgc3RyaW5nSW5kZXhPZiA9IHVuY3VycnlUaGlzKCcnLmluZGV4T2YpO1xuXG4vLyBgU3RyaW5nLnByb3RvdHlwZS5pbmNsdWRlc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUuaW5jbHVkZXNcbiQoeyB0YXJnZXQ6ICdTdHJpbmcnLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAhY29ycmVjdElzUmVnRXhwTG9naWMoJ2luY2x1ZGVzJykgfSwge1xuICBpbmNsdWRlczogZnVuY3Rpb24gaW5jbHVkZXMoc2VhcmNoU3RyaW5nIC8qICwgcG9zaXRpb24gPSAwICovKSB7XG4gICAgcmV0dXJuICEhfnN0cmluZ0luZGV4T2YoXG4gICAgICB0b1N0cmluZyhyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKHRoaXMpKSxcbiAgICAgIHRvU3RyaW5nKG5vdEFSZWdFeHAoc2VhcmNoU3RyaW5nKSksXG4gICAgICBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZFxuICAgICk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG52YXIgY2hhckF0ID0gdW5jdXJyeVRoaXMoJycuY2hhckF0KTtcbnZhciBjaGFyQ29kZUF0ID0gdW5jdXJyeVRoaXMoJycuY2hhckNvZGVBdCk7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG5cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoQ09OVkVSVF9UT19TVFJJTkcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgcG9zKSB7XG4gICAgdmFyIFMgPSB0b1N0cmluZyhyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKCR0aGlzKSk7XG4gICAgdmFyIHBvc2l0aW9uID0gdG9JbnRlZ2VyT3JJbmZpbml0eShwb3MpO1xuICAgIHZhciBzaXplID0gUy5sZW5ndGg7XG4gICAgdmFyIGZpcnN0LCBzZWNvbmQ7XG4gICAgaWYgKHBvc2l0aW9uIDwgMCB8fCBwb3NpdGlvbiA+PSBzaXplKSByZXR1cm4gQ09OVkVSVF9UT19TVFJJTkcgPyAnJyA6IHVuZGVmaW5lZDtcbiAgICBmaXJzdCA9IGNoYXJDb2RlQXQoUywgcG9zaXRpb24pO1xuICAgIHJldHVybiBmaXJzdCA8IDB4RDgwMCB8fCBmaXJzdCA+IDB4REJGRiB8fCBwb3NpdGlvbiArIDEgPT09IHNpemVcbiAgICAgIHx8IChzZWNvbmQgPSBjaGFyQ29kZUF0KFMsIHBvc2l0aW9uICsgMSkpIDwgMHhEQzAwIHx8IHNlY29uZCA+IDB4REZGRlxuICAgICAgICA/IENPTlZFUlRfVE9fU1RSSU5HXG4gICAgICAgICAgPyBjaGFyQXQoUywgcG9zaXRpb24pXG4gICAgICAgICAgOiBmaXJzdFxuICAgICAgICA6IENPTlZFUlRfVE9fU1RSSU5HXG4gICAgICAgICAgPyBzdHJpbmdTbGljZShTLCBwb3NpdGlvbiwgcG9zaXRpb24gKyAyKVxuICAgICAgICAgIDogKGZpcnN0IC0gMHhEODAwIDw8IDEwKSArIChzZWNvbmQgLSAweERDMDApICsgMHgxMDAwMDtcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgU3RyaW5nLnByb3RvdHlwZS5jb2RlUG9pbnRBdGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5jb2RlcG9pbnRhdFxuICBjb2RlQXQ6IGNyZWF0ZU1ldGhvZChmYWxzZSksXG4gIC8vIGBTdHJpbmcucHJvdG90eXBlLmF0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21hdGhpYXNieW5lbnMvU3RyaW5nLnByb3RvdHlwZS5hdFxuICBjaGFyQXQ6IGNyZWF0ZU1ldGhvZCh0cnVlKVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2hhckF0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N0cmluZy1tdWx0aWJ5dGUnKS5jaGFyQXQ7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xudmFyIGRlZmluZUl0ZXJhdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWRlZmluZScpO1xudmFyIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLWl0ZXItcmVzdWx0LW9iamVjdCcpO1xuXG52YXIgU1RSSU5HX0lURVJBVE9SID0gJ1N0cmluZyBJdGVyYXRvcic7XG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcihTVFJJTkdfSVRFUkFUT1IpO1xuXG4vLyBgU3RyaW5nLnByb3RvdHlwZVtAQGl0ZXJhdG9yXWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUtQEBpdGVyYXRvclxuZGVmaW5lSXRlcmF0b3IoU3RyaW5nLCAnU3RyaW5nJywgZnVuY3Rpb24gKGl0ZXJhdGVkKSB7XG4gIHNldEludGVybmFsU3RhdGUodGhpcywge1xuICAgIHR5cGU6IFNUUklOR19JVEVSQVRPUixcbiAgICBzdHJpbmc6IHRvU3RyaW5nKGl0ZXJhdGVkKSxcbiAgICBpbmRleDogMFxuICB9KTtcbi8vIGAlU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUlLm5leHRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0lc3RyaW5naXRlcmF0b3Jwcm90b3R5cGUlLm5leHRcbn0sIGZ1bmN0aW9uIG5leHQoKSB7XG4gIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhpcyk7XG4gIHZhciBzdHJpbmcgPSBzdGF0ZS5zdHJpbmc7XG4gIHZhciBpbmRleCA9IHN0YXRlLmluZGV4O1xuICB2YXIgcG9pbnQ7XG4gIGlmIChpbmRleCA+PSBzdHJpbmcubGVuZ3RoKSByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdCh1bmRlZmluZWQsIHRydWUpO1xuICBwb2ludCA9IGNoYXJBdChzdHJpbmcsIGluZGV4KTtcbiAgc3RhdGUuaW5kZXggKz0gcG9pbnQubGVuZ3RoO1xuICByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdChwb2ludCwgZmFsc2UpO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogUmVtb3ZlIGZyb20gYGNvcmUtanNANGAgc2luY2UgaXQncyBtb3ZlZCB0byBlbnRyeSBwb2ludHNcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMucmVnZXhwLmV4ZWMnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xudmFyIHJlZ2V4cEV4ZWMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLWV4ZWMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcbnZhciBSZWdFeHBQcm90b3R5cGUgPSBSZWdFeHAucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChLRVksIGV4ZWMsIEZPUkNFRCwgU0hBTSkge1xuICB2YXIgU1lNQk9MID0gd2VsbEtub3duU3ltYm9sKEtFWSk7XG5cbiAgdmFyIERFTEVHQVRFU19UT19TWU1CT0wgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIFN0cmluZyBtZXRob2RzIGNhbGwgc3ltYm9sLW5hbWVkIFJlZ0V4cCBtZXRob2RzXG4gICAgdmFyIE8gPSB7fTtcbiAgICBPW1NZTUJPTF0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9O1xuICAgIHJldHVybiAnJ1tLRVldKE8pICE9PSA3O1xuICB9KTtcblxuICB2YXIgREVMRUdBVEVTX1RPX0VYRUMgPSBERUxFR0FURVNfVE9fU1lNQk9MICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgLy8gU3ltYm9sLW5hbWVkIFJlZ0V4cCBtZXRob2RzIGNhbGwgLmV4ZWNcbiAgICB2YXIgZXhlY0NhbGxlZCA9IGZhbHNlO1xuICAgIHZhciByZSA9IC9hLztcblxuICAgIGlmIChLRVkgPT09ICdzcGxpdCcpIHtcbiAgICAgIC8vIFdlIGNhbid0IHVzZSByZWFsIHJlZ2V4IGhlcmUgc2luY2UgaXQgY2F1c2VzIGRlb3B0aW1pemF0aW9uXG4gICAgICAvLyBhbmQgc2VyaW91cyBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvbiBpbiBWOFxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzMwNlxuICAgICAgcmUgPSB7fTtcbiAgICAgIC8vIFJlZ0V4cFtAQHNwbGl0XSBkb2Vzbid0IGNhbGwgdGhlIHJlZ2V4J3MgZXhlYyBtZXRob2QsIGJ1dCBmaXJzdCBjcmVhdGVzXG4gICAgICAvLyBhIG5ldyBvbmUuIFdlIG5lZWQgdG8gcmV0dXJuIHRoZSBwYXRjaGVkIHJlZ2V4IHdoZW4gY3JlYXRpbmcgdGhlIG5ldyBvbmUuXG4gICAgICByZS5jb25zdHJ1Y3RvciA9IHt9O1xuICAgICAgcmUuY29uc3RydWN0b3JbU1BFQ0lFU10gPSBmdW5jdGlvbiAoKSB7IHJldHVybiByZTsgfTtcbiAgICAgIHJlLmZsYWdzID0gJyc7XG4gICAgICByZVtTWU1CT0xdID0gLy4vW1NZTUJPTF07XG4gICAgfVxuXG4gICAgcmUuZXhlYyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGV4ZWNDYWxsZWQgPSB0cnVlO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcblxuICAgIHJlW1NZTUJPTF0oJycpO1xuICAgIHJldHVybiAhZXhlY0NhbGxlZDtcbiAgfSk7XG5cbiAgaWYgKFxuICAgICFERUxFR0FURVNfVE9fU1lNQk9MIHx8XG4gICAgIURFTEVHQVRFU19UT19FWEVDIHx8XG4gICAgRk9SQ0VEXG4gICkge1xuICAgIHZhciBuYXRpdmVSZWdFeHBNZXRob2QgPSAvLi9bU1lNQk9MXTtcbiAgICB2YXIgbWV0aG9kcyA9IGV4ZWMoU1lNQk9MLCAnJ1tLRVldLCBmdW5jdGlvbiAobmF0aXZlTWV0aG9kLCByZWdleHAsIHN0ciwgYXJnMiwgZm9yY2VTdHJpbmdNZXRob2QpIHtcbiAgICAgIHZhciAkZXhlYyA9IHJlZ2V4cC5leGVjO1xuICAgICAgaWYgKCRleGVjID09PSByZWdleHBFeGVjIHx8ICRleGVjID09PSBSZWdFeHBQcm90b3R5cGUuZXhlYykge1xuICAgICAgICBpZiAoREVMRUdBVEVTX1RPX1NZTUJPTCAmJiAhZm9yY2VTdHJpbmdNZXRob2QpIHtcbiAgICAgICAgICAvLyBUaGUgbmF0aXZlIFN0cmluZyBtZXRob2QgYWxyZWFkeSBkZWxlZ2F0ZXMgdG8gQEBtZXRob2QgKHRoaXNcbiAgICAgICAgICAvLyBwb2x5ZmlsbGVkIGZ1bmN0aW9uKSwgbGVhc2luZyB0byBpbmZpbml0ZSByZWN1cnNpb24uXG4gICAgICAgICAgLy8gV2UgYXZvaWQgaXQgYnkgZGlyZWN0bHkgY2FsbGluZyB0aGUgbmF0aXZlIEBAbWV0aG9kIG1ldGhvZC5cbiAgICAgICAgICByZXR1cm4geyBkb25lOiB0cnVlLCB2YWx1ZTogY2FsbChuYXRpdmVSZWdFeHBNZXRob2QsIHJlZ2V4cCwgc3RyLCBhcmcyKSB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IGRvbmU6IHRydWUsIHZhbHVlOiBjYWxsKG5hdGl2ZU1ldGhvZCwgc3RyLCByZWdleHAsIGFyZzIpIH07XG4gICAgICB9XG4gICAgICByZXR1cm4geyBkb25lOiBmYWxzZSB9O1xuICAgIH0pO1xuXG4gICAgZGVmaW5lQnVpbHRJbihTdHJpbmcucHJvdG90eXBlLCBLRVksIG1ldGhvZHNbMF0pO1xuICAgIGRlZmluZUJ1aWx0SW4oUmVnRXhwUHJvdG90eXBlLCBTWU1CT0wsIG1ldGhvZHNbMV0pO1xuICB9XG5cbiAgaWYgKFNIQU0pIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShSZWdFeHBQcm90b3R5cGVbU1lNQk9MXSwgJ3NoYW0nLCB0cnVlKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNoYXJBdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zdHJpbmctbXVsdGlieXRlJykuY2hhckF0O1xuXG4vLyBgQWR2YW5jZVN0cmluZ0luZGV4YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYWR2YW5jZXN0cmluZ2luZGV4XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChTLCBpbmRleCwgdW5pY29kZSkge1xuICByZXR1cm4gaW5kZXggKyAodW5pY29kZSA/IGNoYXJBdChTLCBpbmRleCkubGVuZ3RoIDogMSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcblxudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcbnZhciBjaGFyQXQgPSB1bmN1cnJ5VGhpcygnJy5jaGFyQXQpO1xudmFyIHJlcGxhY2UgPSB1bmN1cnJ5VGhpcygnJy5yZXBsYWNlKTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWRvcy9uby12dWxuZXJhYmxlIC0tIHNhZmVcbnZhciBTVUJTVElUVVRJT05fU1lNQk9MUyA9IC9cXCQoWyQmJ2BdfFxcZHsxLDJ9fDxbXj5dKj4pL2c7XG52YXIgU1VCU1RJVFVUSU9OX1NZTUJPTFNfTk9fTkFNRUQgPSAvXFwkKFskJidgXXxcXGR7MSwyfSkvZztcblxuLy8gYEdldFN1YnN0aXR1dGlvbmAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWdldHN1YnN0aXR1dGlvblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobWF0Y2hlZCwgc3RyLCBwb3NpdGlvbiwgY2FwdHVyZXMsIG5hbWVkQ2FwdHVyZXMsIHJlcGxhY2VtZW50KSB7XG4gIHZhciB0YWlsUG9zID0gcG9zaXRpb24gKyBtYXRjaGVkLmxlbmd0aDtcbiAgdmFyIG0gPSBjYXB0dXJlcy5sZW5ndGg7XG4gIHZhciBzeW1ib2xzID0gU1VCU1RJVFVUSU9OX1NZTUJPTFNfTk9fTkFNRUQ7XG4gIGlmIChuYW1lZENhcHR1cmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICBuYW1lZENhcHR1cmVzID0gdG9PYmplY3QobmFtZWRDYXB0dXJlcyk7XG4gICAgc3ltYm9scyA9IFNVQlNUSVRVVElPTl9TWU1CT0xTO1xuICB9XG4gIHJldHVybiByZXBsYWNlKHJlcGxhY2VtZW50LCBzeW1ib2xzLCBmdW5jdGlvbiAobWF0Y2gsIGNoKSB7XG4gICAgdmFyIGNhcHR1cmU7XG4gICAgc3dpdGNoIChjaGFyQXQoY2gsIDApKSB7XG4gICAgICBjYXNlICckJzogcmV0dXJuICckJztcbiAgICAgIGNhc2UgJyYnOiByZXR1cm4gbWF0Y2hlZDtcbiAgICAgIGNhc2UgJ2AnOiByZXR1cm4gc3RyaW5nU2xpY2Uoc3RyLCAwLCBwb3NpdGlvbik7XG4gICAgICBjYXNlIFwiJ1wiOiByZXR1cm4gc3RyaW5nU2xpY2Uoc3RyLCB0YWlsUG9zKTtcbiAgICAgIGNhc2UgJzwnOlxuICAgICAgICBjYXB0dXJlID0gbmFtZWRDYXB0dXJlc1tzdHJpbmdTbGljZShjaCwgMSwgLTEpXTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OiAvLyBcXGRcXGQ/XG4gICAgICAgIHZhciBuID0gK2NoO1xuICAgICAgICBpZiAobiA9PT0gMCkgcmV0dXJuIG1hdGNoO1xuICAgICAgICBpZiAobiA+IG0pIHtcbiAgICAgICAgICB2YXIgZiA9IGZsb29yKG4gLyAxMCk7XG4gICAgICAgICAgaWYgKGYgPT09IDApIHJldHVybiBtYXRjaDtcbiAgICAgICAgICBpZiAoZiA8PSBtKSByZXR1cm4gY2FwdHVyZXNbZiAtIDFdID09PSB1bmRlZmluZWQgPyBjaGFyQXQoY2gsIDEpIDogY2FwdHVyZXNbZiAtIDFdICsgY2hhckF0KGNoLCAxKTtcbiAgICAgICAgICByZXR1cm4gbWF0Y2g7XG4gICAgICAgIH1cbiAgICAgICAgY2FwdHVyZSA9IGNhcHR1cmVzW24gLSAxXTtcbiAgICB9XG4gICAgcmV0dXJuIGNhcHR1cmUgPT09IHVuZGVmaW5lZCA/ICcnIDogY2FwdHVyZTtcbiAgfSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xudmFyIHJlZ2V4cEV4ZWMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLWV4ZWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBSZWdFeHBFeGVjYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVnZXhwZXhlY1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoUiwgUykge1xuICB2YXIgZXhlYyA9IFIuZXhlYztcbiAgaWYgKGlzQ2FsbGFibGUoZXhlYykpIHtcbiAgICB2YXIgcmVzdWx0ID0gY2FsbChleGVjLCBSLCBTKTtcbiAgICBpZiAocmVzdWx0ICE9PSBudWxsKSBhbk9iamVjdChyZXN1bHQpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgaWYgKGNsYXNzb2YoUikgPT09ICdSZWdFeHAnKSByZXR1cm4gY2FsbChyZWdleHBFeGVjLCBSLCBTKTtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1JlZ0V4cCNleGVjIGNhbGxlZCBvbiBpbmNvbXBhdGlibGUgcmVjZWl2ZXInKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFwcGx5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWFwcGx5Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZml4UmVnRXhwV2VsbEtub3duU3ltYm9sTG9naWMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZml4LXJlZ2V4cC13ZWxsLWtub3duLXN5bWJvbC1sb2dpYycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tbGVuZ3RoJyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcbnZhciBhZHZhbmNlU3RyaW5nSW5kZXggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYWR2YW5jZS1zdHJpbmctaW5kZXgnKTtcbnZhciBnZXRNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LW1ldGhvZCcpO1xudmFyIGdldFN1YnN0aXR1dGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtc3Vic3RpdHV0aW9uJyk7XG52YXIgcmVnRXhwRXhlYyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtZXhlYy1hYnN0cmFjdCcpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgUkVQTEFDRSA9IHdlbGxLbm93blN5bWJvbCgncmVwbGFjZScpO1xudmFyIG1heCA9IE1hdGgubWF4O1xudmFyIG1pbiA9IE1hdGgubWluO1xudmFyIGNvbmNhdCA9IHVuY3VycnlUaGlzKFtdLmNvbmNhdCk7XG52YXIgcHVzaCA9IHVuY3VycnlUaGlzKFtdLnB1c2gpO1xudmFyIHN0cmluZ0luZGV4T2YgPSB1bmN1cnJ5VGhpcygnJy5pbmRleE9mKTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcblxudmFyIG1heWJlVG9TdHJpbmcgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ID09PSB1bmRlZmluZWQgPyBpdCA6IFN0cmluZyhpdCk7XG59O1xuXG4vLyBJRSA8PSAxMSByZXBsYWNlcyAkMCB3aXRoIHRoZSB3aG9sZSBtYXRjaCwgYXMgaWYgaXQgd2FzICQmXG4vLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy82MDI0NjY2L2dldHRpbmctaWUtdG8tcmVwbGFjZS1hLXJlZ2V4LXdpdGgtdGhlLWxpdGVyYWwtc3RyaW5nLTBcbnZhciBSRVBMQUNFX0tFRVBTXyQwID0gKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlZ2V4cC9wcmVmZXItZXNjYXBlLXJlcGxhY2VtZW50LWRvbGxhci1jaGFyIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiAnYScucmVwbGFjZSgvLi8sICckMCcpID09PSAnJDAnO1xufSkoKTtcblxuLy8gU2FmYXJpIDw9IDEzLjAuMyg/KSBzdWJzdGl0dXRlcyBudGggY2FwdHVyZSB3aGVyZSBuPm0gd2l0aCBhbiBlbXB0eSBzdHJpbmdcbnZhciBSRUdFWFBfUkVQTEFDRV9TVUJTVElUVVRFU19VTkRFRklORURfQ0FQVFVSRSA9IChmdW5jdGlvbiAoKSB7XG4gIGlmICgvLi9bUkVQTEFDRV0pIHtcbiAgICByZXR1cm4gLy4vW1JFUExBQ0VdKCdhJywgJyQwJykgPT09ICcnO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn0pKCk7XG5cbnZhciBSRVBMQUNFX1NVUFBPUlRTX05BTUVEX0dST1VQUyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciByZSA9IC8uLztcbiAgcmUuZXhlYyA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgcmVzdWx0Lmdyb3VwcyA9IHsgYTogJzcnIH07XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlZ2V4cC9uby11c2VsZXNzLWRvbGxhci1yZXBsYWNlbWVudHMgLS0gZmFsc2UgcG9zaXRpdmVcbiAgcmV0dXJuICcnLnJlcGxhY2UocmUsICckPGE+JykgIT09ICc3Jztcbn0pO1xuXG4vLyBAQHJlcGxhY2UgbG9naWNcbmZpeFJlZ0V4cFdlbGxLbm93blN5bWJvbExvZ2ljKCdyZXBsYWNlJywgZnVuY3Rpb24gKF8sIG5hdGl2ZVJlcGxhY2UsIG1heWJlQ2FsbE5hdGl2ZSkge1xuICB2YXIgVU5TQUZFX1NVQlNUSVRVVEUgPSBSRUdFWFBfUkVQTEFDRV9TVUJTVElUVVRFU19VTkRFRklORURfQ0FQVFVSRSA/ICckJyA6ICckMCc7XG5cbiAgcmV0dXJuIFtcbiAgICAvLyBgU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUucmVwbGFjZVxuICAgIGZ1bmN0aW9uIHJlcGxhY2Uoc2VhcmNoVmFsdWUsIHJlcGxhY2VWYWx1ZSkge1xuICAgICAgdmFyIE8gPSByZXF1aXJlT2JqZWN0Q29lcmNpYmxlKHRoaXMpO1xuICAgICAgdmFyIHJlcGxhY2VyID0gaXNOdWxsT3JVbmRlZmluZWQoc2VhcmNoVmFsdWUpID8gdW5kZWZpbmVkIDogZ2V0TWV0aG9kKHNlYXJjaFZhbHVlLCBSRVBMQUNFKTtcbiAgICAgIHJldHVybiByZXBsYWNlclxuICAgICAgICA/IGNhbGwocmVwbGFjZXIsIHNlYXJjaFZhbHVlLCBPLCByZXBsYWNlVmFsdWUpXG4gICAgICAgIDogY2FsbChuYXRpdmVSZXBsYWNlLCB0b1N0cmluZyhPKSwgc2VhcmNoVmFsdWUsIHJlcGxhY2VWYWx1ZSk7XG4gICAgfSxcbiAgICAvLyBgUmVnRXhwLnByb3RvdHlwZVtAQHJlcGxhY2VdYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUtQEByZXBsYWNlXG4gICAgZnVuY3Rpb24gKHN0cmluZywgcmVwbGFjZVZhbHVlKSB7XG4gICAgICB2YXIgcnggPSBhbk9iamVjdCh0aGlzKTtcbiAgICAgIHZhciBTID0gdG9TdHJpbmcoc3RyaW5nKTtcblxuICAgICAgaWYgKFxuICAgICAgICB0eXBlb2YgcmVwbGFjZVZhbHVlID09ICdzdHJpbmcnICYmXG4gICAgICAgIHN0cmluZ0luZGV4T2YocmVwbGFjZVZhbHVlLCBVTlNBRkVfU1VCU1RJVFVURSkgPT09IC0xICYmXG4gICAgICAgIHN0cmluZ0luZGV4T2YocmVwbGFjZVZhbHVlLCAnJDwnKSA9PT0gLTFcbiAgICAgICkge1xuICAgICAgICB2YXIgcmVzID0gbWF5YmVDYWxsTmF0aXZlKG5hdGl2ZVJlcGxhY2UsIHJ4LCBTLCByZXBsYWNlVmFsdWUpO1xuICAgICAgICBpZiAocmVzLmRvbmUpIHJldHVybiByZXMudmFsdWU7XG4gICAgICB9XG5cbiAgICAgIHZhciBmdW5jdGlvbmFsUmVwbGFjZSA9IGlzQ2FsbGFibGUocmVwbGFjZVZhbHVlKTtcbiAgICAgIGlmICghZnVuY3Rpb25hbFJlcGxhY2UpIHJlcGxhY2VWYWx1ZSA9IHRvU3RyaW5nKHJlcGxhY2VWYWx1ZSk7XG5cbiAgICAgIHZhciBnbG9iYWwgPSByeC5nbG9iYWw7XG4gICAgICB2YXIgZnVsbFVuaWNvZGU7XG4gICAgICBpZiAoZ2xvYmFsKSB7XG4gICAgICAgIGZ1bGxVbmljb2RlID0gcngudW5pY29kZTtcbiAgICAgICAgcngubGFzdEluZGV4ID0gMDtcbiAgICAgIH1cblxuICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgIHZhciByZXN1bHQ7XG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICByZXN1bHQgPSByZWdFeHBFeGVjKHJ4LCBTKTtcbiAgICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCkgYnJlYWs7XG5cbiAgICAgICAgcHVzaChyZXN1bHRzLCByZXN1bHQpO1xuICAgICAgICBpZiAoIWdsb2JhbCkgYnJlYWs7XG5cbiAgICAgICAgdmFyIG1hdGNoU3RyID0gdG9TdHJpbmcocmVzdWx0WzBdKTtcbiAgICAgICAgaWYgKG1hdGNoU3RyID09PSAnJykgcngubGFzdEluZGV4ID0gYWR2YW5jZVN0cmluZ0luZGV4KFMsIHRvTGVuZ3RoKHJ4Lmxhc3RJbmRleCksIGZ1bGxVbmljb2RlKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGFjY3VtdWxhdGVkUmVzdWx0ID0gJyc7XG4gICAgICB2YXIgbmV4dFNvdXJjZVBvc2l0aW9uID0gMDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdWx0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICByZXN1bHQgPSByZXN1bHRzW2ldO1xuXG4gICAgICAgIHZhciBtYXRjaGVkID0gdG9TdHJpbmcocmVzdWx0WzBdKTtcbiAgICAgICAgdmFyIHBvc2l0aW9uID0gbWF4KG1pbih0b0ludGVnZXJPckluZmluaXR5KHJlc3VsdC5pbmRleCksIFMubGVuZ3RoKSwgMCk7XG4gICAgICAgIHZhciBjYXB0dXJlcyA9IFtdO1xuICAgICAgICB2YXIgcmVwbGFjZW1lbnQ7XG4gICAgICAgIC8vIE5PVEU6IFRoaXMgaXMgZXF1aXZhbGVudCB0b1xuICAgICAgICAvLyAgIGNhcHR1cmVzID0gcmVzdWx0LnNsaWNlKDEpLm1hcChtYXliZVRvU3RyaW5nKVxuICAgICAgICAvLyBidXQgZm9yIHNvbWUgcmVhc29uIGBuYXRpdmVTbGljZS5jYWxsKHJlc3VsdCwgMSwgcmVzdWx0Lmxlbmd0aClgIChjYWxsZWQgaW5cbiAgICAgICAgLy8gdGhlIHNsaWNlIHBvbHlmaWxsIHdoZW4gc2xpY2luZyBuYXRpdmUgYXJyYXlzKSBcImRvZXNuJ3Qgd29ya1wiIGluIHNhZmFyaSA5IGFuZFxuICAgICAgICAvLyBjYXVzZXMgYSBjcmFzaCAoaHR0cHM6Ly9wYXN0ZWJpbi5jb20vTjIxUXplUUEpIHdoZW4gdHJ5aW5nIHRvIGRlYnVnIGl0LlxuICAgICAgICBmb3IgKHZhciBqID0gMTsgaiA8IHJlc3VsdC5sZW5ndGg7IGorKykgcHVzaChjYXB0dXJlcywgbWF5YmVUb1N0cmluZyhyZXN1bHRbal0pKTtcbiAgICAgICAgdmFyIG5hbWVkQ2FwdHVyZXMgPSByZXN1bHQuZ3JvdXBzO1xuICAgICAgICBpZiAoZnVuY3Rpb25hbFJlcGxhY2UpIHtcbiAgICAgICAgICB2YXIgcmVwbGFjZXJBcmdzID0gY29uY2F0KFttYXRjaGVkXSwgY2FwdHVyZXMsIHBvc2l0aW9uLCBTKTtcbiAgICAgICAgICBpZiAobmFtZWRDYXB0dXJlcyAhPT0gdW5kZWZpbmVkKSBwdXNoKHJlcGxhY2VyQXJncywgbmFtZWRDYXB0dXJlcyk7XG4gICAgICAgICAgcmVwbGFjZW1lbnQgPSB0b1N0cmluZyhhcHBseShyZXBsYWNlVmFsdWUsIHVuZGVmaW5lZCwgcmVwbGFjZXJBcmdzKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVwbGFjZW1lbnQgPSBnZXRTdWJzdGl0dXRpb24obWF0Y2hlZCwgUywgcG9zaXRpb24sIGNhcHR1cmVzLCBuYW1lZENhcHR1cmVzLCByZXBsYWNlVmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwb3NpdGlvbiA+PSBuZXh0U291cmNlUG9zaXRpb24pIHtcbiAgICAgICAgICBhY2N1bXVsYXRlZFJlc3VsdCArPSBzdHJpbmdTbGljZShTLCBuZXh0U291cmNlUG9zaXRpb24sIHBvc2l0aW9uKSArIHJlcGxhY2VtZW50O1xuICAgICAgICAgIG5leHRTb3VyY2VQb3NpdGlvbiA9IHBvc2l0aW9uICsgbWF0Y2hlZC5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFjY3VtdWxhdGVkUmVzdWx0ICsgc3RyaW5nU2xpY2UoUywgbmV4dFNvdXJjZVBvc2l0aW9uKTtcbiAgICB9XG4gIF07XG59LCAhUkVQTEFDRV9TVVBQT1JUU19OQU1FRF9HUk9VUFMgfHwgIVJFUExBQ0VfS0VFUFNfJDAgfHwgUkVHRVhQX1JFUExBQ0VfU1VCU1RJVFVURVNfVU5ERUZJTkVEX0NBUFRVUkUpO1xuIiwgIi8vIOWmguaenOS9v+eUqCBqc3gtZG9t77yM5YiZ5Y+W5raI5rOo6YeK5Lul5LiL6KGMIC8gVG8gVXNlIGpzeC1kb20sIHVuY29tbWVudCB0aGUgZm9sbG93aW5nIGxpbmVcbmV4cG9ydCAqIGZyb20gJ2pzeC1kb20nO1xuIiwgIi8qIGVzbGludC1kaXNhYmxlICovXG5jb25zdCBrZXlzID0gT2JqZWN0LmtleXM7XG5mdW5jdGlvbiBpZGVudGl0eSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWU7XG59XG5mdW5jdGlvbiBpc0Jvb2xlYW4odmFsKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsID09PSBcImJvb2xlYW5cIjtcbn1cbmZ1bmN0aW9uIGlzRWxlbWVudCh2YWwpIHtcbiAgcmV0dXJuIHZhbCAmJiB0eXBlb2YgdmFsLm5vZGVUeXBlID09PSBcIm51bWJlclwiO1xufVxuZnVuY3Rpb24gaXNTdHJpbmcodmFsKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsID09PSBcInN0cmluZ1wiO1xufVxuZnVuY3Rpb24gaXNOdW1iZXIodmFsKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsID09PSBcIm51bWJlclwiO1xufVxuZnVuY3Rpb24gaXNPYmplY3QodmFsKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsID09PSBcIm9iamVjdFwiID8gdmFsICE9PSBudWxsIDogaXNGdW5jdGlvbih2YWwpO1xufVxuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWwpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWwgPT09IFwiZnVuY3Rpb25cIjtcbn1cbmZ1bmN0aW9uIGlzQ29tcG9uZW50Q2xhc3MoQ29tcG9uZW50KSB7XG4gIHJldHVybiAhIShDb21wb25lbnQgJiYgQ29tcG9uZW50LmlzQ29tcG9uZW50KTtcbn1cbmZ1bmN0aW9uIGlzQXJyYXlMaWtlKG9iaikge1xuICByZXR1cm4gKFxuICAgIGlzT2JqZWN0KG9iaikgJiZcbiAgICB0eXBlb2Ygb2JqLmxlbmd0aCA9PT0gXCJudW1iZXJcIiAmJlxuICAgIHR5cGVvZiBvYmoubm9kZVR5cGUgIT09IFwibnVtYmVyXCJcbiAgKTtcbn1cbmZ1bmN0aW9uIGZvckVhY2godmFsdWUsIGZuKSB7XG4gIGlmICghdmFsdWUpIHJldHVybjtcbiAgZm9yIChjb25zdCBrZXkgb2Yga2V5cyh2YWx1ZSkpIHtcbiAgICBmbih2YWx1ZVtrZXldLCBrZXkpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVJlZigpIHtcbiAgcmV0dXJuIE9iamVjdC5zZWFsKHtcbiAgICBjdXJyZW50OiBudWxsLFxuICB9KTtcbn1cbmZ1bmN0aW9uIGlzUmVmKG1heWJlUmVmKSB7XG4gIHJldHVybiBpc09iamVjdChtYXliZVJlZikgJiYgXCJjdXJyZW50XCIgaW4gbWF5YmVSZWY7XG59XG5cbi8qKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgb25cbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9ibG9iL2I4N2FhYmRmZTFiNzQ2MWU3MzMxYWJiMzYwMWQ5ZTZiYjI3NTQ0YmMvTElDRU5TRVxuICovXG5cbi8qKlxuICogQ1NTIHByb3BlcnRpZXMgd2hpY2ggYWNjZXB0IG51bWJlcnMgYnV0IGFyZSBub3QgaW4gdW5pdHMgb2YgXCJweFwiLlxuICovXG5jb25zdCBpc1VuaXRsZXNzTnVtYmVyID0ge1xuICBhbmltYXRpb25JdGVyYXRpb25Db3VudDogMCxcbiAgYm9yZGVySW1hZ2VPdXRzZXQ6IDAsXG4gIGJvcmRlckltYWdlU2xpY2U6IDAsXG4gIGJvcmRlckltYWdlV2lkdGg6IDAsXG4gIGJveEZsZXg6IDAsXG4gIGJveEZsZXhHcm91cDogMCxcbiAgYm94T3JkaW5hbEdyb3VwOiAwLFxuICBjb2x1bW5Db3VudDogMCxcbiAgY29sdW1uczogMCxcbiAgZmxleDogMCxcbiAgZmxleEdyb3c6IDAsXG4gIGZsZXhQb3NpdGl2ZTogMCxcbiAgZmxleFNocmluazogMCxcbiAgZmxleE5lZ2F0aXZlOiAwLFxuICBmbGV4T3JkZXI6IDAsXG4gIGdyaWRBcmVhOiAwLFxuICBncmlkUm93OiAwLFxuICBncmlkUm93RW5kOiAwLFxuICBncmlkUm93U3BhbjogMCxcbiAgZ3JpZFJvd1N0YXJ0OiAwLFxuICBncmlkQ29sdW1uOiAwLFxuICBncmlkQ29sdW1uRW5kOiAwLFxuICBncmlkQ29sdW1uU3BhbjogMCxcbiAgZ3JpZENvbHVtblN0YXJ0OiAwLFxuICBmb250V2VpZ2h0OiAwLFxuICBsaW5lQ2xhbXA6IDAsXG4gIGxpbmVIZWlnaHQ6IDAsXG4gIG9wYWNpdHk6IDAsXG4gIG9yZGVyOiAwLFxuICBvcnBoYW5zOiAwLFxuICB0YWJTaXplOiAwLFxuICB3aWRvd3M6IDAsXG4gIHpJbmRleDogMCxcbiAgem9vbTogMCxcbiAgLy8gU1ZHLXJlbGF0ZWQgcHJvcGVydGllc1xuICBmaWxsT3BhY2l0eTogMCxcbiAgZmxvb2RPcGFjaXR5OiAwLFxuICBzdG9wT3BhY2l0eTogMCxcbiAgc3Ryb2tlRGFzaGFycmF5OiAwLFxuICBzdHJva2VEYXNob2Zmc2V0OiAwLFxuICBzdHJva2VNaXRlcmxpbWl0OiAwLFxuICBzdHJva2VPcGFjaXR5OiAwLFxuICBzdHJva2VXaWR0aDogMCxcbn07XG5cbi8qKlxuICogQHBhcmFtIHByZWZpeCB2ZW5kb3Itc3BlY2lmaWMgcHJlZml4LCBlZzogV2Via2l0XG4gKiBAcGFyYW0ga2V5IHN0eWxlIG5hbWUsIGVnOiB0cmFuc2l0aW9uRHVyYXRpb25cbiAqIEByZXR1cm4gc3R5bGUgbmFtZSBwcmVmaXhlZCB3aXRoIGBwcmVmaXhgLCBwcm9wZXJseSBjYW1lbENhc2VkLCBlZzpcbiAqIFdlYmtpdFRyYW5zaXRpb25EdXJhdGlvblxuICovXG5mdW5jdGlvbiBwcmVmaXhLZXkocHJlZml4LCBrZXkpIHtcbiAgcmV0dXJuIHByZWZpeCArIGtleS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIGtleS5zdWJzdHJpbmcoMSk7XG59XG5cbi8qKlxuICogU3VwcG9ydCBzdHlsZSBuYW1lcyB0aGF0IG1heSBjb21lIHBhc3NlZCBpbiBwcmVmaXhlZCBieSBhZGRpbmcgcGVybXV0YXRpb25zXG4gKiBvZiB2ZW5kb3IgcHJlZml4ZXMuXG4gKi9cbmNvbnN0IHByZWZpeGVzID0gW1wiV2Via2l0XCIsIFwibXNcIiwgXCJNb3pcIiwgXCJPXCJdO1xuLy8gVXNpbmcgT2JqZWN0LmtleXMgaGVyZSwgb3IgZWxzZSB0aGUgdmFuaWxsYSBmb3ItaW4gbG9vcCBtYWtlcyBJRTggZ28gaW50byBhblxuLy8gaW5maW5pdGUgbG9vcCwgYmVjYXVzZSBpdCBpdGVyYXRlcyBvdmVyIHRoZSBuZXdseSBhZGRlZCBwcm9wcyB0b28uXG5rZXlzKGlzVW5pdGxlc3NOdW1iZXIpLmZvckVhY2goKHByb3ApID0+IHtcbiAgcHJlZml4ZXMuZm9yRWFjaCgocHJlZml4KSA9PiB7XG4gICAgaXNVbml0bGVzc051bWJlcltwcmVmaXhLZXkocHJlZml4LCBwcm9wKV0gPSAwOyAvLyBpc1VuaXRsZXNzTnVtYmVyW3Byb3BdXG4gIH0pO1xufSk7XG5cbmNvbnN0IGpzeERvbVR5cGUgPSBTeW1ib2wuZm9yKFwianN4LWRvbTp0eXBlXCIpO1xudmFyIEpzeERvbVR5cGUgPSAvKiNfX1BVUkVfXyovIChmdW5jdGlvbiAoSnN4RG9tVHlwZSkge1xuICBKc3hEb21UeXBlW1wiU2hhZG93Um9vdFwiXSA9IFwiU2hhZG93Um9vdFwiO1xuICByZXR1cm4gSnN4RG9tVHlwZTtcbn0pKEpzeERvbVR5cGUgfHwge30pO1xuZnVuY3Rpb24gU2hhZG93Um9vdChfcmVmKSB7XG4gIGxldCB7IGNoaWxkcmVuLCByZWYsIC4uLmF0dHIgfSA9IF9yZWY7XG4gIHJldHVybiB7XG4gICAgW2pzeERvbVR5cGVdOiBKc3hEb21UeXBlLlNoYWRvd1Jvb3QsXG4gICAgcmVmLFxuICAgIGF0dHIsXG4gICAgY2hpbGRyZW4sXG4gIH07XG59XG5mdW5jdGlvbiBpc1NoYWRvd1Jvb3QoZWwpIHtcbiAgcmV0dXJuIGVsICE9IG51bGwgJiYgZWxbanN4RG9tVHlwZV0gPT09IEpzeERvbVR5cGUuU2hhZG93Um9vdDtcbn1cblxuY29uc3QgU1ZHTmFtZXNwYWNlID0gXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiO1xuY29uc3QgWExpbmtOYW1lc3BhY2UgPSBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIjtcbmNvbnN0IFhNTE5hbWVzcGFjZSA9IFwiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlXCI7XG5cbi8vIGh0dHBzOi8vZmFjZWJvb2suZ2l0aHViLmlvL3JlYWN0L2RvY3MvanN4LWluLWRlcHRoLmh0bWwjYm9vbGVhbnMtbnVsbC1hbmQtdW5kZWZpbmVkLWFyZS1pZ25vcmVkXG4vLyBFbXVsYXRlIEpTWCBFeHByZXNzaW9uIGxvZ2ljIHRvIGlnbm9yZSBjZXJ0YWluIHR5cGUgb2YgY2hpbGRyZW4gb3IgY2xhc3NOYW1lLlxuZnVuY3Rpb24gaXNWaXNpYmxlQ2hpbGQodmFsdWUpIHtcbiAgcmV0dXJuICFpc0Jvb2xlYW4odmFsdWUpICYmIHZhbHVlICE9IG51bGw7XG59XG5cbi8qKlxuICogQ29udmVydCBhIGB2YWx1ZWAgdG8gYSBjbGFzc05hbWUgc3RyaW5nLlxuICogYHZhbHVlYCBjYW4gYmUgYSBzdHJpbmcsIGFuIGFycmF5IG9yIGEgYERpY3Rpb25hcnk8Ym9vbGVhbj5gLlxuICovXG5mdW5jdGlvbiBjbGFzc05hbWUodmFsdWUpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlLm1hcChjbGFzc05hbWUpLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKTtcbiAgfSBlbHNlIGlmIChpc09iamVjdCh2YWx1ZSkpIHtcbiAgICBpZiAoU3ltYm9sLml0ZXJhdG9yIGluIHZhbHVlKSB7XG4gICAgICByZXR1cm4gY2xhc3NOYW1lKEFycmF5LmZyb20odmFsdWUpKTtcbiAgICB9XG4gICAgcmV0dXJuIGtleXModmFsdWUpXG4gICAgICAuZmlsdGVyKChrKSA9PiB2YWx1ZVtrXSlcbiAgICAgIC5qb2luKFwiIFwiKTtcbiAgfSBlbHNlIGlmIChpc1Zpc2libGVDaGlsZCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gXCJcIiArIHZhbHVlO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBcIlwiO1xuICB9XG59XG5jb25zdCBzdmcgPSB7XG4gIGFuaW1hdGU6IDAsXG4gIGNpcmNsZTogMCxcbiAgY2xpcFBhdGg6IDAsXG4gIGRlZnM6IDAsXG4gIGRlc2M6IDAsXG4gIGVsbGlwc2U6IDAsXG4gIGZlQmxlbmQ6IDAsXG4gIGZlQ29sb3JNYXRyaXg6IDAsXG4gIGZlQ29tcG9uZW50VHJhbnNmZXI6IDAsXG4gIGZlQ29tcG9zaXRlOiAwLFxuICBmZUNvbnZvbHZlTWF0cml4OiAwLFxuICBmZURpZmZ1c2VMaWdodGluZzogMCxcbiAgZmVEaXNwbGFjZW1lbnRNYXA6IDAsXG4gIGZlRGlzdGFudExpZ2h0OiAwLFxuICBmZUZsb29kOiAwLFxuICBmZUZ1bmNBOiAwLFxuICBmZUZ1bmNCOiAwLFxuICBmZUZ1bmNHOiAwLFxuICBmZUZ1bmNSOiAwLFxuICBmZUdhdXNzaWFuQmx1cjogMCxcbiAgZmVJbWFnZTogMCxcbiAgZmVNZXJnZTogMCxcbiAgZmVNZXJnZU5vZGU6IDAsXG4gIGZlTW9ycGhvbG9neTogMCxcbiAgZmVPZmZzZXQ6IDAsXG4gIGZlUG9pbnRMaWdodDogMCxcbiAgZmVTcGVjdWxhckxpZ2h0aW5nOiAwLFxuICBmZVNwb3RMaWdodDogMCxcbiAgZmVUaWxlOiAwLFxuICBmZVR1cmJ1bGVuY2U6IDAsXG4gIGZpbHRlcjogMCxcbiAgZm9yZWlnbk9iamVjdDogMCxcbiAgZzogMCxcbiAgaW1hZ2U6IDAsXG4gIGxpbmU6IDAsXG4gIGxpbmVhckdyYWRpZW50OiAwLFxuICBtYXJrZXI6IDAsXG4gIG1hc2s6IDAsXG4gIG1ldGFkYXRhOiAwLFxuICBwYXRoOiAwLFxuICBwYXR0ZXJuOiAwLFxuICBwb2x5Z29uOiAwLFxuICBwb2x5bGluZTogMCxcbiAgcmFkaWFsR3JhZGllbnQ6IDAsXG4gIHJlY3Q6IDAsXG4gIHN0b3A6IDAsXG4gIHN2ZzogMCxcbiAgc3dpdGNoOiAwLFxuICBzeW1ib2w6IDAsXG4gIHRleHQ6IDAsXG4gIHRleHRQYXRoOiAwLFxuICB0c3BhbjogMCxcbiAgdXNlOiAwLFxuICB2aWV3OiAwLFxufTtcbmNvbnN0IG5vblByZXNlbnRhdGlvblNWR0F0dHJpYnV0ZXMgPVxuICAvXihhKGxsfHR8dSl8YmFzZVtGUF18YyhhbHxsaXBQYXRoVXxvbil8ZGl8ZWR8ZXh8ZmlsdGVyW1JVXXxnKGx5cGhSfHIpfGtlfGwoZW58aW0pfG1hKHJrZXJbSFVXXXxzKXxufHBhdHxwcnxwb2ludFteZV18cmVbXm5dfHNbcHV5XXxzdFteb3JdfHRhfHRleHRMfHZpfHhDfHl8eikvO1xuZnVuY3Rpb24gY3JlYXRlRmFjdG9yeSh0YWcpIHtcbiAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQuYmluZChudWxsLCB0YWcpO1xufVxuZnVuY3Rpb24gRnJhZ21lbnQoYXR0cikge1xuICBjb25zdCBmcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcbiAgYXBwZW5kQ2hpbGQoYXR0ci5jaGlsZHJlbiwgZnJhZ21lbnQpO1xuICByZXR1cm4gZnJhZ21lbnQ7XG59XG5jbGFzcyBDb21wb25lbnQge1xuICBzdGF0aWMgaXNDb21wb25lbnQgPSB0cnVlO1xuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHRoaXMucHJvcHMgPSBwcm9wcztcbiAgfVxuICByZW5kZXIoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cbmZ1bmN0aW9uIGluaXRDb21wb25lbnRDbGFzcyhDbGFzcywgYXR0ciwgY2hpbGRyZW4pIHtcbiAgYXR0ciA9IHtcbiAgICAuLi5hdHRyLFxuICAgIGNoaWxkcmVuLFxuICB9O1xuICBjb25zdCBpbnN0YW5jZSA9IG5ldyBDbGFzcyhhdHRyKTtcbiAgY29uc3Qgbm9kZSA9IGluc3RhbmNlLnJlbmRlcigpO1xuICBpZiAoXCJyZWZcIiBpbiBhdHRyKSB7XG4gICAgYXR0YWNoUmVmKGF0dHIucmVmLCBpbnN0YW5jZSk7XG4gIH1cbiAgcmV0dXJuIG5vZGU7XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbmZ1bmN0aW9uIGpzeCh0YWcsIF9yZWYpIHtcbiAgbGV0IHsgY2hpbGRyZW4sIC4uLmF0dHIgfSA9IF9yZWY7XG4gIGlmICghYXR0ci5uYW1lc3BhY2VVUkkgJiYgc3ZnW3RhZ10gPT09IDApIHtcbiAgICBhdHRyID0ge1xuICAgICAgLi4uYXR0cixcbiAgICAgIG5hbWVzcGFjZVVSSTogU1ZHTmFtZXNwYWNlLFxuICAgIH07XG4gIH1cbiAgbGV0IG5vZGU7XG4gIGlmIChpc1N0cmluZyh0YWcpKSB7XG4gICAgbm9kZSA9IGF0dHIubmFtZXNwYWNlVVJJXG4gICAgICA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhhdHRyLm5hbWVzcGFjZVVSSSwgdGFnKVxuICAgICAgOiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZyk7XG4gICAgYXR0cmlidXRlcyhhdHRyLCBub2RlKTtcbiAgICBhcHBlbmRDaGlsZChjaGlsZHJlbiwgbm9kZSk7XG5cbiAgICAvLyBTZWxlY3QgYG9wdGlvbmAgZWxlbWVudHMgaW4gYHNlbGVjdGBcbiAgICBpZiAobm9kZSBpbnN0YW5jZW9mIHdpbmRvdy5IVE1MU2VsZWN0RWxlbWVudCAmJiBhdHRyLnZhbHVlICE9IG51bGwpIHtcbiAgICAgIGlmIChhdHRyLm11bHRpcGxlID09PSB0cnVlICYmIEFycmF5LmlzQXJyYXkoYXR0ci52YWx1ZSkpIHtcbiAgICAgICAgY29uc3QgdmFsdWVzID0gYXR0ci52YWx1ZS5tYXAoKHZhbHVlKSA9PiBTdHJpbmcodmFsdWUpKTtcbiAgICAgICAgbm9kZVxuICAgICAgICAgIC5xdWVyeVNlbGVjdG9yQWxsKFwib3B0aW9uXCIpXG4gICAgICAgICAgLmZvckVhY2goXG4gICAgICAgICAgICAob3B0aW9uKSA9PiAob3B0aW9uLnNlbGVjdGVkID0gdmFsdWVzLmluY2x1ZGVzKG9wdGlvbi52YWx1ZSkpLFxuICAgICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub2RlLnZhbHVlID0gYXR0ci52YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgYXR0YWNoUmVmKGF0dHIucmVmLCBub2RlKTtcbiAgfSBlbHNlIGlmIChpc0Z1bmN0aW9uKHRhZykpIHtcbiAgICAvLyBDdXN0b20gZWxlbWVudHMuXG4gICAgaWYgKGlzT2JqZWN0KHRhZy5kZWZhdWx0UHJvcHMpKSB7XG4gICAgICBhdHRyID0ge1xuICAgICAgICAuLi50YWcuZGVmYXVsdFByb3BzLFxuICAgICAgICAuLi5hdHRyLFxuICAgICAgfTtcbiAgICB9XG4gICAgbm9kZSA9IGlzQ29tcG9uZW50Q2xhc3ModGFnKVxuICAgICAgPyBpbml0Q29tcG9uZW50Q2xhc3ModGFnLCBhdHRyLCBjaGlsZHJlbilcbiAgICAgIDogdGFnKHtcbiAgICAgICAgICAuLi5hdHRyLFxuICAgICAgICAgIGNoaWxkcmVuLFxuICAgICAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBJbnZhbGlkIEpTWCBlbGVtZW50IHR5cGU6ICR7dGFnfWApO1xuICB9XG4gIHJldHVybiBub2RlO1xufVxuZnVuY3Rpb24gY3JlYXRlRWxlbWVudCh0YWcsIGF0dHIpIHtcbiAgZm9yIChcbiAgICB2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsXG4gICAgICBjaGlsZHJlbiA9IG5ldyBBcnJheShfbGVuID4gMiA/IF9sZW4gLSAyIDogMCksXG4gICAgICBfa2V5MiA9IDI7XG4gICAgX2tleTIgPCBfbGVuO1xuICAgIF9rZXkyKytcbiAgKSB7XG4gICAgY2hpbGRyZW5bX2tleTIgLSAyXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gIH1cbiAgaWYgKGlzU3RyaW5nKGF0dHIpIHx8IEFycmF5LmlzQXJyYXkoYXR0cikpIHtcbiAgICBjaGlsZHJlbi51bnNoaWZ0KGF0dHIpO1xuICAgIGF0dHIgPSB7fTtcbiAgfVxuICBhdHRyID0gYXR0ciB8fCB7fTtcbiAgaWYgKGF0dHIuY2hpbGRyZW4gIT0gbnVsbCAmJiAhY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgKHsgY2hpbGRyZW4sIC4uLmF0dHIgfSA9IGF0dHIpO1xuICB9XG4gIHJldHVybiBqc3goXG4gICAgdGFnLFxuICAgIHtcbiAgICAgIC4uLmF0dHIsXG4gICAgICBjaGlsZHJlbixcbiAgICB9LFxuICAgIGF0dHIua2V5LFxuICApO1xufVxuZnVuY3Rpb24gYXR0YWNoUmVmKHJlZiwgbm9kZSkge1xuICBpZiAoaXNSZWYocmVmKSkge1xuICAgIHJlZi5jdXJyZW50ID0gbm9kZTtcbiAgfSBlbHNlIGlmIChpc0Z1bmN0aW9uKHJlZikpIHtcbiAgICByZWYobm9kZSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGFwcGVuZENoaWxkKGNoaWxkLCBub2RlKSB7XG4gIGlmIChpc0FycmF5TGlrZShjaGlsZCkpIHtcbiAgICBhcHBlbmRDaGlsZHJlbihjaGlsZCwgbm9kZSk7XG4gIH0gZWxzZSBpZiAoaXNTdHJpbmcoY2hpbGQpIHx8IGlzTnVtYmVyKGNoaWxkKSkge1xuICAgIGFwcGVuZENoaWxkVG9Ob2RlKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNoaWxkKSwgbm9kZSk7XG4gIH0gZWxzZSBpZiAoY2hpbGQgPT09IG51bGwpIHtcbiAgICBhcHBlbmRDaGlsZFRvTm9kZShkb2N1bWVudC5jcmVhdGVDb21tZW50KFwiXCIpLCBub2RlKTtcbiAgfSBlbHNlIGlmIChpc0VsZW1lbnQoY2hpbGQpKSB7XG4gICAgYXBwZW5kQ2hpbGRUb05vZGUoY2hpbGQsIG5vZGUpO1xuICB9IGVsc2UgaWYgKGlzU2hhZG93Um9vdChjaGlsZCkpIHtcbiAgICBjb25zdCBzaGFkb3dSb290ID0gbm9kZS5hdHRhY2hTaGFkb3coY2hpbGQuYXR0cik7XG4gICAgYXBwZW5kQ2hpbGQoY2hpbGQuY2hpbGRyZW4sIHNoYWRvd1Jvb3QpO1xuICAgIGF0dGFjaFJlZihjaGlsZC5yZWYsIHNoYWRvd1Jvb3QpO1xuICB9XG59XG5mdW5jdGlvbiBhcHBlbmRDaGlsZHJlbihjaGlsZHJlbiwgbm9kZSkge1xuICBmb3IgKGNvbnN0IGNoaWxkIG9mIFsuLi5jaGlsZHJlbl0pIHtcbiAgICBhcHBlbmRDaGlsZChjaGlsZCwgbm9kZSk7XG4gIH1cbiAgcmV0dXJuIG5vZGU7XG59XG5mdW5jdGlvbiBhcHBlbmRDaGlsZFRvTm9kZShjaGlsZCwgbm9kZSkge1xuICBpZiAobm9kZSBpbnN0YW5jZW9mIHdpbmRvdy5IVE1MVGVtcGxhdGVFbGVtZW50KSB7XG4gICAgbm9kZS5jb250ZW50LmFwcGVuZENoaWxkKGNoaWxkKTtcbiAgfSBlbHNlIHtcbiAgICBub2RlLmFwcGVuZENoaWxkKGNoaWxkKTtcbiAgfVxufVxuZnVuY3Rpb24gbm9ybWFsaXplQXR0cmlidXRlKHMsIHNlcGFyYXRvcikge1xuICByZXR1cm4gcy5yZXBsYWNlKC9bQS1aXS9nLCAobWF0Y2gpID0+IHNlcGFyYXRvciArIG1hdGNoLnRvTG93ZXJDYXNlKCkpO1xufVxuZnVuY3Rpb24gc3R5bGUobm9kZSwgdmFsdWUpIHtcbiAgaWYgKHZhbHVlID09IG51bGwgfHwgdmFsdWUgPT09IGZhbHNlKTtcbiAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICB2YWx1ZS5mb3JFYWNoKCh2KSA9PiBzdHlsZShub2RlLCB2KSk7XG4gIH0gZWxzZSBpZiAoaXNTdHJpbmcodmFsdWUpKSB7XG4gICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJzdHlsZVwiLCB2YWx1ZSk7XG4gIH0gZWxzZSBpZiAoaXNPYmplY3QodmFsdWUpKSB7XG4gICAgZm9yRWFjaCh2YWx1ZSwgKHZhbCwga2V5KSA9PiB7XG4gICAgICBpZiAoa2V5LmluZGV4T2YoXCItXCIpID09PSAwKSB7XG4gICAgICAgIC8vIENTUyBjdXN0b20gcHJvcGVydGllcyAodmFyaWFibGVzKSBzdGFydCB3aXRoIGAtYCAoZS5nLiBgLS1teS12YXJpYWJsZWApXG4gICAgICAgIC8vIGFuZCBtdXN0IGJlIGFzc2lnbmVkIHZpYSBgc2V0UHJvcGVydHlgLlxuICAgICAgICBub2RlLnN0eWxlLnNldFByb3BlcnR5KGtleSwgdmFsKTtcbiAgICAgIH0gZWxzZSBpZiAoaXNOdW1iZXIodmFsKSAmJiBpc1VuaXRsZXNzTnVtYmVyW2tleV0gIT09IDApIHtcbiAgICAgICAgbm9kZS5zdHlsZVtrZXldID0gdmFsICsgXCJweFwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm9kZS5zdHlsZVtrZXldID0gdmFsO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5mdW5jdGlvbiBhdHRyaWJ1dGUoa2V5LCB2YWx1ZSwgbm9kZSkge1xuICBzd2l0Y2ggKGtleSkge1xuICAgIGNhc2UgXCJ4bGlua0FjdHVhdGVcIjpcbiAgICBjYXNlIFwieGxpbmtBcmNyb2xlXCI6XG4gICAgY2FzZSBcInhsaW5rSHJlZlwiOlxuICAgIGNhc2UgXCJ4bGlua1JvbGVcIjpcbiAgICBjYXNlIFwieGxpbmtTaG93XCI6XG4gICAgY2FzZSBcInhsaW5rVGl0bGVcIjpcbiAgICBjYXNlIFwieGxpbmtUeXBlXCI6XG4gICAgICBhdHRyTlMobm9kZSwgWExpbmtOYW1lc3BhY2UsIG5vcm1hbGl6ZUF0dHJpYnV0ZShrZXksIFwiOlwiKSwgdmFsdWUpO1xuICAgICAgcmV0dXJuO1xuICAgIGNhc2UgXCJ4bWxuc1hsaW5rXCI6XG4gICAgICBhdHRyKG5vZGUsIG5vcm1hbGl6ZUF0dHJpYnV0ZShrZXksIFwiOlwiKSwgdmFsdWUpO1xuICAgICAgcmV0dXJuO1xuICAgIGNhc2UgXCJ4bWxCYXNlXCI6XG4gICAgY2FzZSBcInhtbExhbmdcIjpcbiAgICBjYXNlIFwieG1sU3BhY2VcIjpcbiAgICAgIGF0dHJOUyhub2RlLCBYTUxOYW1lc3BhY2UsIG5vcm1hbGl6ZUF0dHJpYnV0ZShrZXksIFwiOlwiKSwgdmFsdWUpO1xuICAgICAgcmV0dXJuO1xuICB9XG4gIHN3aXRjaCAoa2V5KSB7XG4gICAgY2FzZSBcImh0bWxGb3JcIjpcbiAgICAgIGF0dHIobm9kZSwgXCJmb3JcIiwgdmFsdWUpO1xuICAgICAgcmV0dXJuO1xuICAgIGNhc2UgXCJkYXRhc2V0XCI6XG4gICAgICBmb3JFYWNoKHZhbHVlLCAoZGF0YVZhbHVlLCBkYXRhS2V5KSA9PiB7XG4gICAgICAgIGlmIChkYXRhVmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgIG5vZGUuZGF0YXNldFtkYXRhS2V5XSA9IGRhdGFWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgY2FzZSBcImlubmVySFRNTFwiOlxuICAgIGNhc2UgXCJpbm5lclRleHRcIjpcbiAgICBjYXNlIFwidGV4dENvbnRlbnRcIjpcbiAgICAgIGlmIChpc1Zpc2libGVDaGlsZCh2YWx1ZSkpIHtcbiAgICAgICAgbm9kZVtrZXldID0gdmFsdWU7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgY2FzZSBcImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MXCI6XG4gICAgICBpZiAoaXNPYmplY3QodmFsdWUpKSB7XG4gICAgICAgIG5vZGUuaW5uZXJIVE1MID0gdmFsdWVbXCJfX2h0bWxcIl07XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgY2FzZSBcInZhbHVlXCI6XG4gICAgICBpZiAodmFsdWUgPT0gbnVsbCB8fCBub2RlIGluc3RhbmNlb2Ygd2luZG93LkhUTUxTZWxlY3RFbGVtZW50KSB7XG4gICAgICAgIC8vIHNraXAgbnVsbGlzaCB2YWx1ZXNcbiAgICAgICAgLy8gZm9yIGA8c2VsZWN0PmAgYXBwbHkgdmFsdWUgYWZ0ZXIgYXBwZW5kaW5nIGA8b3B0aW9uPmAgZWxlbWVudHNcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSBlbHNlIGlmIChub2RlIGluc3RhbmNlb2Ygd2luZG93LkhUTUxUZXh0QXJlYUVsZW1lbnQpIHtcbiAgICAgICAgbm9kZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAvLyB1c2UgYXR0cmlidXRlIGZvciBvdGhlciBlbGVtZW50c1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcInNwZWxsQ2hlY2tcIjpcbiAgICAgIG5vZGUuc3BlbGxjaGVjayA9IHZhbHVlO1xuICAgICAgcmV0dXJuO1xuICAgIGNhc2UgXCJjbGFzc1wiOlxuICAgIGNhc2UgXCJjbGFzc05hbWVcIjpcbiAgICAgIGlmIChpc0Z1bmN0aW9uKHZhbHVlKSkge1xuICAgICAgICB2YWx1ZShub2RlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGF0dHIobm9kZSwgXCJjbGFzc1wiLCBjbGFzc05hbWUodmFsdWUpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICBjYXNlIFwicmVmXCI6XG4gICAgY2FzZSBcIm5hbWVzcGFjZVVSSVwiOlxuICAgICAgcmV0dXJuO1xuICAgIGNhc2UgXCJzdHlsZVwiOlxuICAgICAgc3R5bGUobm9kZSwgdmFsdWUpO1xuICAgICAgcmV0dXJuO1xuICAgIGNhc2UgXCJvblwiOlxuICAgIGNhc2UgXCJvbkNhcHR1cmVcIjpcbiAgICAgIGZvckVhY2godmFsdWUsIChldmVudEhhbmRsZXIsIGV2ZW50TmFtZSkgPT4ge1xuICAgICAgICBub2RlLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBldmVudEhhbmRsZXIsIGtleSA9PT0gXCJvbkNhcHR1cmVcIik7XG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICAvLyBmYWxsdGhyb3VnaFxuICB9XG4gIGlmIChpc0Z1bmN0aW9uKHZhbHVlKSkge1xuICAgIGlmIChrZXlbMF0gPT09IFwib1wiICYmIGtleVsxXSA9PT0gXCJuXCIpIHtcbiAgICAgIGxldCBhdHRyaWJ1dGUgPSBrZXkudG9Mb3dlckNhc2UoKTtcbiAgICAgIGNvbnN0IHVzZUNhcHR1cmUgPSBhdHRyaWJ1dGUuZW5kc1dpdGgoXCJjYXB0dXJlXCIpO1xuICAgICAgaWYgKGF0dHJpYnV0ZSA9PT0gXCJvbmRvdWJsZWNsaWNrXCIpIHtcbiAgICAgICAgYXR0cmlidXRlID0gXCJvbmRibGNsaWNrXCI7XG4gICAgICB9IGVsc2UgaWYgKHVzZUNhcHR1cmUgJiYgYXR0cmlidXRlID09PSBcIm9uZG91YmxlY2xpY2tjYXB0dXJlXCIpIHtcbiAgICAgICAgYXR0cmlidXRlID0gXCJvbmRibGNsaWNrY2FwdHVyZVwiO1xuICAgICAgfVxuICAgICAgaWYgKCF1c2VDYXB0dXJlICYmIG5vZGVbYXR0cmlidXRlXSA9PT0gbnVsbCkge1xuICAgICAgICAvLyB1c2UgcHJvcGVydHkgd2hlbiBwb3NzaWJsZSBQUiAjMTdcbiAgICAgICAgbm9kZVthdHRyaWJ1dGVdID0gdmFsdWU7XG4gICAgICB9IGVsc2UgaWYgKHVzZUNhcHR1cmUpIHtcbiAgICAgICAgbm9kZS5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICAgIGF0dHJpYnV0ZS5zdWJzdHJpbmcoMiwgYXR0cmlidXRlLmxlbmd0aCAtIDcpLFxuICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgIHRydWUsXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgZXZlbnROYW1lO1xuICAgICAgICBpZiAoYXR0cmlidXRlIGluIHdpbmRvdykge1xuICAgICAgICAgIC8vIHN0YW5kYXJkIGV2ZW50XG4gICAgICAgICAgLy8gdGhlIEpTWCBhdHRyaWJ1dGUgY291bGQgaGF2ZSBiZWVuIFwib25Nb3VzZU92ZXJcIiBhbmQgdGhlXG4gICAgICAgICAgLy8gbWVtYmVyIG5hbWUgXCJvbm1vdXNlb3ZlclwiIGlzIG9uIHRoZSB3aW5kb3cncyBwcm90b3R5cGVcbiAgICAgICAgICAvLyBzbyBsZXQncyBhZGQgdGhlIGxpc3RlbmVyIFwibW91c2VvdmVyXCIsIHdoaWNoIGlzIGFsbCBsb3dlcmNhc2VkXG4gICAgICAgICAgY29uc3Qgc3RhbmRhcmRFdmVudE5hbWUgPSBhdHRyaWJ1dGUuc3Vic3RyaW5nKDIpO1xuICAgICAgICAgIGV2ZW50TmFtZSA9IHN0YW5kYXJkRXZlbnROYW1lO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIGN1c3RvbSBldmVudFxuICAgICAgICAgIC8vIHRoZSBKU1ggYXR0cmlidXRlIGNvdWxkIGhhdmUgYmVlbiBcIm9uTXlDdXN0b21FdmVudFwiXG4gICAgICAgICAgLy8gc28gbGV0J3MgdHJpbSBvZmYgdGhlIFwib25cIiBwcmVmaXggYW5kIGxvd2VyY2FzZSB0aGUgZmlyc3QgY2hhcmFjdGVyXG4gICAgICAgICAgLy8gYW5kIGFkZCB0aGUgbGlzdGVuZXIgXCJteUN1c3RvbUV2ZW50XCJcbiAgICAgICAgICAvLyBleGNlcHQgZm9yIHRoZSBmaXJzdCBjaGFyYWN0ZXIsIHdlIGtlZXAgdGhlIGV2ZW50IG5hbWUgY2FzZVxuICAgICAgICAgIGNvbnN0IGN1c3RvbUV2ZW50TmFtZSA9IGF0dHJpYnV0ZVsyXSArIGtleS5zbGljZSgzKTtcbiAgICAgICAgICBldmVudE5hbWUgPSBjdXN0b21FdmVudE5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgbm9kZS5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmIChpc09iamVjdCh2YWx1ZSkpIHtcbiAgICBub2RlW2tleV0gPSB2YWx1ZTtcbiAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gdHJ1ZSkge1xuICAgIGF0dHIobm9kZSwga2V5LCBcIlwiKTtcbiAgfSBlbHNlIGlmICh2YWx1ZSAhPT0gZmFsc2UgJiYgdmFsdWUgIT0gbnVsbCkge1xuICAgIGlmIChub2RlIGluc3RhbmNlb2YgU1ZHRWxlbWVudCAmJiAhbm9uUHJlc2VudGF0aW9uU1ZHQXR0cmlidXRlcy50ZXN0KGtleSkpIHtcbiAgICAgIGF0dHIobm9kZSwgbm9ybWFsaXplQXR0cmlidXRlKGtleSwgXCItXCIpLCB2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF0dHIobm9kZSwga2V5LCB2YWx1ZSk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBhdHRyKG5vZGUsIGtleSwgdmFsdWUpIHtcbiAgbm9kZS5zZXRBdHRyaWJ1dGUoa2V5LCB2YWx1ZSk7XG59XG5mdW5jdGlvbiBhdHRyTlMobm9kZSwgbmFtZXNwYWNlLCBrZXksIHZhbHVlKSB7XG4gIG5vZGUuc2V0QXR0cmlidXRlTlMobmFtZXNwYWNlLCBrZXksIHZhbHVlKTtcbn1cbmZ1bmN0aW9uIGF0dHJpYnV0ZXMoYXR0ciwgbm9kZSkge1xuICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKGF0dHIpKSB7XG4gICAgYXR0cmlidXRlKGtleSwgYXR0cltrZXldLCBub2RlKTtcbiAgfVxuICByZXR1cm4gbm9kZTtcbn1cblxuZnVuY3Rpb24gdXNlVGV4dChpbml0aWFsVmFsdWUpIHtcbiAgY29uc3QgdGV4dCA9IG5ldyBUZXh0KCk7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0ZXh0LCBcInRvU3RyaW5nXCIsIHtcbiAgICB2YWx1ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnRleHRDb250ZW50O1xuICAgIH0sXG4gIH0pO1xuICBmdW5jdGlvbiBzZXRUZXh0KHZhbHVlKSB7XG4gICAgdGV4dC50ZXh0Q29udGVudCA9IHZhbHVlO1xuICB9XG4gIGlmIChpbml0aWFsVmFsdWUgIT0gbnVsbCkge1xuICAgIHNldFRleHQoaW5pdGlhbFZhbHVlKTtcbiAgfVxuICByZXR1cm4gW3RleHQsIHNldFRleHRdO1xufVxuZnVuY3Rpb24gdXNlQ2xhc3NMaXN0KGluaXRpYWxWYWx1ZSkge1xuICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICBpZiAoaW5pdGlhbFZhbHVlICE9IG51bGwpIHtcbiAgICBkaXYuY2xhc3NOYW1lID0gY2xhc3NOYW1lKGluaXRpYWxWYWx1ZSk7XG4gIH1cbiAgbGV0IGxpc3QgPSBkaXYuY2xhc3NMaXN0O1xuICBmdW5jdGlvbiBDbGFzc0xpc3QodmFsdWUpIHtcbiAgICB2YWx1ZS5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBsaXN0LnZhbHVlKTtcbiAgICBsaXN0ID0gdmFsdWUuY2xhc3NMaXN0O1xuICB9XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFxuICAgIENsYXNzTGlzdCxcbiAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh7XG4gICAgICBnZXQgc2l6ZSgpIHtcbiAgICAgICAgcmV0dXJuIGxpc3QubGVuZ3RoO1xuICAgICAgfSxcbiAgICAgIGdldCB2YWx1ZSgpIHtcbiAgICAgICAgcmV0dXJuIGxpc3QudmFsdWU7XG4gICAgICB9LFxuICAgICAgYWRkKCkge1xuICAgICAgICBsaXN0LmFkZCguLi5hcmd1bWVudHMpO1xuICAgICAgfSxcbiAgICAgIHJlbW92ZSgpIHtcbiAgICAgICAgbGlzdC5yZW1vdmUoLi4uYXJndW1lbnRzKTtcbiAgICAgIH0sXG4gICAgICB0b2dnbGUodG9rZW4sIGZvcmNlKSB7XG4gICAgICAgIGxpc3QudG9nZ2xlKHRva2VuLCBmb3JjZSk7XG4gICAgICB9LFxuICAgICAgY29udGFpbnModG9rZW4pIHtcbiAgICAgICAgcmV0dXJuIGxpc3QuY29udGFpbnModG9rZW4pO1xuICAgICAgfSxcbiAgICB9KSxcbiAgKTtcbiAgcmV0dXJuIENsYXNzTGlzdDtcbn1cblxuZnVuY3Rpb24gdXNlTWVtbyhmYWN0b3J5KSB7XG4gIHJldHVybiBmYWN0b3J5KCk7XG59XG5mdW5jdGlvbiBmb3J3YXJkUmVmKHJlbmRlcikge1xuICByZXR1cm4gKF9yZWYpID0+IHtcbiAgICBsZXQgeyByZWYsIC4uLnByb3BzIH0gPSBfcmVmO1xuICAgIHJldHVybiByZW5kZXIocHJvcHMsIHJlZiA/PyBjcmVhdGVSZWYoKSk7XG4gIH07XG59XG5mdW5jdGlvbiB1c2VJbXBlcmF0aXZlSGFuZGxlKHJlZiwgaW5pdCkge1xuICBhdHRhY2hSZWYocmVmLCBpbml0KCkpO1xufVxuXG5jb25zdCBjYWNoZSA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5jb25zdCBjcmVhdGVTdHlsZWRDb21wb25lbnQgPSAobmFtZSkgPT5cbiAgZnVuY3Rpb24gKGxpc3QpIHtcbiAgICBmb3IgKFxuICAgICAgdmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLFxuICAgICAgICBpbnRlcnBvbGF0aW9ucyA9IG5ldyBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksXG4gICAgICAgIF9rZXkgPSAxO1xuICAgICAgX2tleSA8IF9sZW47XG4gICAgICBfa2V5KytcbiAgICApIHtcbiAgICAgIGludGVycG9sYXRpb25zW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG4gICAgcmV0dXJuIChfcmVmKSA9PiB7XG4gICAgICBsZXQgeyBzdHlsZSwgLi4ucHJvcHMgfSA9IF9yZWY7XG4gICAgICBjb25zdCBsYXN0SW5kZXggPSBsaXN0Lmxlbmd0aCAtIDE7XG4gICAgICBjb25zdCBjc3MgPVxuICAgICAgICBsaXN0LnNsaWNlKDAsIGxhc3RJbmRleCkucmVkdWNlKChwLCBzLCBpKSA9PiB7XG4gICAgICAgICAgY29uc3QgaW50ZXJwb2xhdGlvbiA9IGludGVycG9sYXRpb25zW2ldO1xuICAgICAgICAgIGNvbnN0IGN1cnJlbnQgPVxuICAgICAgICAgICAgdHlwZW9mIGludGVycG9sYXRpb24gPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgICAgICA/IGludGVycG9sYXRpb24ocHJvcHMpXG4gICAgICAgICAgICAgIDogaW50ZXJwb2xhdGlvbjtcbiAgICAgICAgICByZXR1cm4gcCArIHMgKyBjdXJyZW50O1xuICAgICAgICB9LCBcIlwiKSArIGxpc3RbbGFzdEluZGV4XTtcbiAgICAgIHJldHVybiBjcmVhdGVFbGVtZW50KG5hbWUsIHtcbiAgICAgICAgc3R5bGU6IFtjc3MsIHN0eWxlXSxcbiAgICAgICAgLi4ucHJvcHMsXG4gICAgICB9KTtcbiAgICB9O1xuICB9O1xuY29uc3QgYmFzZVN0eWxlZCA9IChjdXN0b21Db21wb25lbnQpID0+IGNyZWF0ZVN0eWxlZENvbXBvbmVudChjdXN0b21Db21wb25lbnQpO1xuY29uc3Qgc3R5bGVkID0gLyogQF9fUFVSRV9fICovIG5ldyBQcm94eShiYXNlU3R5bGVkLCB7XG4gIGdldChfLCBuYW1lKSB7XG4gICAgcmV0dXJuIHNldElmQWJzZW50KGNhY2hlLCBuYW1lLCAoKSA9PiBjcmVhdGVTdHlsZWRDb21wb25lbnQobmFtZSkpO1xuICB9LFxufSk7XG5mdW5jdGlvbiBzZXRJZkFic2VudChtYXAsIGtleSwgZ2V0VmFsdWUpIHtcbiAgaWYgKG1hcC5oYXMoa2V5KSkge1xuICAgIHJldHVybiBtYXAuZ2V0KGtleSk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgdmFsdWUgPSBnZXRWYWx1ZShrZXkpO1xuICAgIG1hcC5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG59XG5cbnZhciBpbmRleCA9IHtcbiAgQ29tcG9uZW50LFxuICBQdXJlQ29tcG9uZW50OiBDb21wb25lbnQsXG4gIGNyZWF0ZUVsZW1lbnQsXG4gIEZyYWdtZW50LFxuICBTaGFkb3dSb290LFxufTtcbmZ1bmN0aW9uIHByZXZlbnREZWZhdWx0KGV2ZW50KSB7XG4gIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIHJldHVybiBldmVudDtcbn1cbmZ1bmN0aW9uIHN0b3BQcm9wYWdhdGlvbihldmVudCkge1xuICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgcmV0dXJuIGV2ZW50O1xufVxuXG5leHBvcnQge1xuICBDb21wb25lbnQsXG4gIEZyYWdtZW50LFxuICBDb21wb25lbnQgYXMgUHVyZUNvbXBvbmVudCxcbiAgU1ZHTmFtZXNwYWNlLFxuICBTaGFkb3dSb290LFxuICBGcmFnbWVudCBhcyBTdHJpY3RNb2RlLFxuICBjbGFzc05hbWUsXG4gIGNyZWF0ZUVsZW1lbnQsXG4gIGNyZWF0ZUZhY3RvcnksXG4gIGNyZWF0ZVJlZixcbiAgaW5kZXggYXMgZGVmYXVsdCxcbiAgZm9yd2FyZFJlZixcbiAgY3JlYXRlRWxlbWVudCBhcyBoLFxuICBpc1JlZixcbiAganN4LFxuICBqc3ggYXMganN4cyxcbiAgaWRlbnRpdHkgYXMgbWVtbyxcbiAgcHJldmVudERlZmF1bHQsXG4gIHN0b3BQcm9wYWdhdGlvbixcbiAgc3R5bGVkLFxuICBpZGVudGl0eSBhcyB1c2VDYWxsYmFjayxcbiAgdXNlQ2xhc3NMaXN0LFxuICB1c2VJbXBlcmF0aXZlSGFuZGxlLFxuICB1c2VNZW1vLFxuICBjcmVhdGVSZWYgYXMgdXNlUmVmLFxuICB1c2VUZXh0LFxufTtcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQSxvRkFBQUEsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxRQUFRLFNBQVUsSUFBSTtBQUN4QixhQUFPLE1BQU0sR0FBRyxTQUFTLFFBQVE7QUFBQSxJQUNuQztBQUdBLElBQUFBLFFBQU87QUFBQSxJQUVMLE1BQU0sT0FBTyxjQUFjLFlBQVksVUFBVSxLQUNqRCxNQUFNLE9BQU8sVUFBVSxZQUFZLE1BQU07QUFBQSxJQUV6QyxNQUFNLE9BQU8sUUFBUSxZQUFZLElBQUksS0FDckMsTUFBTSxPQUFPLFVBQVUsWUFBWSxNQUFNLEtBQ3pDLE1BQU0sT0FBT0QsWUFBUSxZQUFZQSxRQUFJO0FBQUEsSUFFcEMsMkJBQVk7QUFBRSxhQUFPO0FBQUEsSUFBTSxFQUFHLEtBQUssU0FBUyxhQUFhLEVBQUU7QUFBQTtBQUFBOzs7QUNmOUQ7QUFBQSw4RUFBQUUsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsSUFBQUEsUUFBTyxVQUFVLFNBQVUsTUFBTTtBQUMvQixVQUFJO0FBQ0YsZUFBTyxDQUFDLENBQUMsS0FBSztBQUFBLE1BQ2hCLFNBQVMsT0FBTztBQUNkLGVBQU87QUFBQSxNQUNUO0FBQUEsSUFDRjtBQUFBO0FBQUE7OztBQ1BBO0FBQUEsb0ZBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksUUFBUTtBQUdaLElBQUFBLFFBQU8sVUFBVSxDQUFDLE1BQU0sV0FBWTtBQUVsQyxhQUFPLE9BQU8sZUFBZSxDQUFDLEdBQUcsR0FBRyxFQUFFLEtBQUssV0FBWTtBQUFFLGVBQU87QUFBQSxNQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsTUFBTTtBQUFBLElBQ2pGLENBQUM7QUFBQTtBQUFBOzs7QUNQRDtBQUFBLDZGQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLFFBQVE7QUFFWixJQUFBQSxRQUFPLFVBQVUsQ0FBQyxNQUFNLFdBQVk7QUFFbEMsVUFBSSxPQUFRLFdBQVk7QUFBQSxNQUFjLEVBQUcsS0FBSztBQUU5QyxhQUFPLE9BQU8sUUFBUSxjQUFjLEtBQUssZUFBZSxXQUFXO0FBQUEsSUFDckUsQ0FBQztBQUFBO0FBQUE7OztBQ1JEO0FBQUEsc0ZBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksY0FBYztBQUVsQixRQUFJLE9BQU8sU0FBUyxVQUFVO0FBRTlCLElBQUFBLFFBQU8sVUFBVSxjQUFjLEtBQUssS0FBSyxJQUFJLElBQUksV0FBWTtBQUMzRCxhQUFPLEtBQUssTUFBTSxNQUFNLFNBQVM7QUFBQSxJQUNuQztBQUFBO0FBQUE7OztBQ1BBO0FBQUEsc0dBQUFDLFVBQUE7QUFBQTtBQUNBLFFBQUksd0JBQXdCLENBQUMsRUFBRTtBQUUvQixRQUFJLDJCQUEyQixPQUFPO0FBR3RDLFFBQUksY0FBYyw0QkFBNEIsQ0FBQyxzQkFBc0IsS0FBSyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7QUFJckYsSUFBQUEsU0FBUSxJQUFJLGNBQWMsU0FBUyxxQkFBcUIsR0FBRztBQUN6RCxVQUFJLGFBQWEseUJBQXlCLE1BQU0sQ0FBQztBQUNqRCxhQUFPLENBQUMsQ0FBQyxjQUFjLFdBQVc7QUFBQSxJQUNwQyxJQUFJO0FBQUE7QUFBQTs7O0FDYko7QUFBQSxtR0FBQUMsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsSUFBQUEsUUFBTyxVQUFVLFNBQVUsUUFBUSxPQUFPO0FBQ3hDLGFBQU87QUFBQSxRQUNMLFlBQVksRUFBRSxTQUFTO0FBQUEsUUFDdkIsY0FBYyxFQUFFLFNBQVM7QUFBQSxRQUN6QixVQUFVLEVBQUUsU0FBUztBQUFBLFFBQ3JCO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQTtBQUFBOzs7QUNSQTtBQUFBLDhGQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLGNBQWM7QUFFbEIsUUFBSSxvQkFBb0IsU0FBUztBQUNqQyxRQUFJLE9BQU8sa0JBQWtCO0FBRTdCLFFBQUksc0JBQXNCLGVBQWUsa0JBQWtCLEtBQUssS0FBSyxNQUFNLElBQUk7QUFFL0UsSUFBQUEsUUFBTyxVQUFVLGNBQWMsc0JBQXNCLFNBQVUsSUFBSTtBQUNqRSxhQUFPLFdBQVk7QUFDakIsZUFBTyxLQUFLLE1BQU0sSUFBSSxTQUFTO0FBQUEsTUFDakM7QUFBQSxJQUNGO0FBQUE7QUFBQTs7O0FDWkE7QUFBQSxvRkFBQUMsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxjQUFjO0FBRWxCLFFBQUksV0FBVyxZQUFZLENBQUMsRUFBRSxRQUFRO0FBQ3RDLFFBQUksY0FBYyxZQUFZLEdBQUcsS0FBSztBQUV0QyxJQUFBQSxRQUFPLFVBQVUsU0FBVSxJQUFJO0FBQzdCLGFBQU8sWUFBWSxTQUFTLEVBQUUsR0FBRyxHQUFHLEVBQUU7QUFBQSxJQUN4QztBQUFBO0FBQUE7OztBQ1JBO0FBQUEsdUZBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksY0FBYztBQUNsQixRQUFJLFFBQVE7QUFDWixRQUFJLFVBQVU7QUFFZCxRQUFJLFVBQVU7QUFDZCxRQUFJLFFBQVEsWUFBWSxHQUFHLEtBQUs7QUFHaEMsSUFBQUEsUUFBTyxVQUFVLE1BQU0sV0FBWTtBQUdqQyxhQUFPLENBQUMsUUFBUSxHQUFHLEVBQUUscUJBQXFCLENBQUM7QUFBQSxJQUM3QyxDQUFDLElBQUksU0FBVSxJQUFJO0FBQ2pCLGFBQU8sUUFBUSxFQUFFLE1BQU0sV0FBVyxNQUFNLElBQUksRUFBRSxJQUFJLFFBQVEsRUFBRTtBQUFBLElBQzlELElBQUk7QUFBQTtBQUFBOzs7QUNmSjtBQUFBLDZGQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFHQSxJQUFBQSxRQUFPLFVBQVUsU0FBVSxJQUFJO0FBQzdCLGFBQU8sT0FBTyxRQUFRLE9BQU87QUFBQSxJQUMvQjtBQUFBO0FBQUE7OztBQ0xBO0FBQUEsaUdBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksb0JBQW9CO0FBRXhCLFFBQUksYUFBYTtBQUlqQixJQUFBQSxRQUFPLFVBQVUsU0FBVSxJQUFJO0FBQzdCLFVBQUksa0JBQWtCLEVBQUUsRUFBRyxPQUFNLElBQUksV0FBVywwQkFBMEIsRUFBRTtBQUM1RSxhQUFPO0FBQUEsSUFDVDtBQUFBO0FBQUE7OztBQ1ZBO0FBQUEsMEZBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUVBLFFBQUksZ0JBQWdCO0FBQ3BCLFFBQUkseUJBQXlCO0FBRTdCLElBQUFBLFFBQU8sVUFBVSxTQUFVLElBQUk7QUFDN0IsYUFBTyxjQUFjLHVCQUF1QixFQUFFLENBQUM7QUFBQSxJQUNqRDtBQUFBO0FBQUE7OztBQ1BBO0FBQUEsb0ZBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUVBLFFBQUksY0FBYyxPQUFPLFlBQVksWUFBWSxTQUFTO0FBSzFELElBQUFBLFFBQU8sVUFBVSxPQUFPLGVBQWUsZUFBZSxnQkFBZ0IsU0FBWSxTQUFVLFVBQVU7QUFDcEcsYUFBTyxPQUFPLFlBQVksY0FBYyxhQUFhO0FBQUEsSUFDdkQsSUFBSSxTQUFVLFVBQVU7QUFDdEIsYUFBTyxPQUFPLFlBQVk7QUFBQSxJQUM1QjtBQUFBO0FBQUE7OztBQ1hBO0FBQUEsa0ZBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksYUFBYTtBQUVqQixJQUFBQSxRQUFPLFVBQVUsU0FBVSxJQUFJO0FBQzdCLGFBQU8sT0FBTyxNQUFNLFdBQVcsT0FBTyxPQUFPLFdBQVcsRUFBRTtBQUFBLElBQzVEO0FBQUE7QUFBQTs7O0FDTEE7QUFBQSxxRkFBQUMsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSUMsY0FBYTtBQUNqQixRQUFJLGFBQWE7QUFFakIsUUFBSSxZQUFZLFNBQVUsVUFBVTtBQUNsQyxhQUFPLFdBQVcsUUFBUSxJQUFJLFdBQVc7QUFBQSxJQUMzQztBQUVBLElBQUFELFFBQU8sVUFBVSxTQUFVLFdBQVcsUUFBUTtBQUM1QyxhQUFPLFVBQVUsU0FBUyxJQUFJLFVBQVVDLFlBQVcsU0FBUyxDQUFDLElBQUlBLFlBQVcsU0FBUyxLQUFLQSxZQUFXLFNBQVMsRUFBRSxNQUFNO0FBQUEsSUFDeEg7QUFBQTtBQUFBOzs7QUNWQTtBQUFBLCtGQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLGNBQWM7QUFFbEIsSUFBQUEsUUFBTyxVQUFVLFlBQVksQ0FBQyxFQUFFLGFBQWE7QUFBQTtBQUFBOzs7QUNIN0M7QUFBQSwrRkFBQUMsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSUMsY0FBYTtBQUVqQixRQUFJQyxhQUFZRCxZQUFXO0FBQzNCLFFBQUksWUFBWUMsY0FBYUEsV0FBVTtBQUV2QyxJQUFBRixRQUFPLFVBQVUsWUFBWSxPQUFPLFNBQVMsSUFBSTtBQUFBO0FBQUE7OztBQ05qRDtBQUFBLCtGQUFBRyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJQyxjQUFhO0FBQ2pCLFFBQUksWUFBWTtBQUVoQixRQUFJQyxXQUFVRCxZQUFXO0FBQ3pCLFFBQUlFLFFBQU9GLFlBQVc7QUFDdEIsUUFBSSxXQUFXQyxZQUFXQSxTQUFRLFlBQVlDLFNBQVFBLE1BQUs7QUFDM0QsUUFBSSxLQUFLLFlBQVksU0FBUztBQUM5QixRQUFJO0FBQUosUUFBVztBQUVYLFFBQUksSUFBSTtBQUNOLGNBQVEsR0FBRyxNQUFNLEdBQUc7QUFHcEIsZ0JBQVUsTUFBTSxDQUFDLElBQUksS0FBSyxNQUFNLENBQUMsSUFBSSxJQUFJLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxNQUFNLENBQUM7QUFBQSxJQUNuRTtBQUlBLFFBQUksQ0FBQyxXQUFXLFdBQVc7QUFDekIsY0FBUSxVQUFVLE1BQU0sYUFBYTtBQUNyQyxVQUFJLENBQUMsU0FBUyxNQUFNLENBQUMsS0FBSyxJQUFJO0FBQzVCLGdCQUFRLFVBQVUsTUFBTSxlQUFlO0FBQ3ZDLFlBQUksTUFBTyxXQUFVLENBQUMsTUFBTSxDQUFDO0FBQUEsTUFDL0I7QUFBQSxJQUNGO0FBRUEsSUFBQUgsUUFBTyxVQUFVO0FBQUE7QUFBQTs7O0FDM0JqQjtBQUFBLHFHQUFBSSxVQUFBQyxTQUFBO0FBQUE7QUFFQSxRQUFJLGFBQWE7QUFDakIsUUFBSSxRQUFRO0FBQ1osUUFBSUMsY0FBYTtBQUVqQixRQUFJLFVBQVVBLFlBQVc7QUFHekIsSUFBQUQsUUFBTyxVQUFVLENBQUMsQ0FBQyxPQUFPLHlCQUF5QixDQUFDLE1BQU0sV0FBWTtBQUNwRSxVQUFJLFNBQVMsT0FBTyxrQkFBa0I7QUFLdEMsYUFBTyxDQUFDLFFBQVEsTUFBTSxLQUFLLEVBQUUsT0FBTyxNQUFNLGFBQWE7QUFBQSxNQUVyRCxDQUFDLE9BQU8sUUFBUSxjQUFjLGFBQWE7QUFBQSxJQUMvQyxDQUFDO0FBQUE7QUFBQTs7O0FDbEJEO0FBQUEsMEZBQUFFLFVBQUFDLFNBQUE7QUFBQTtBQUVBLFFBQUksZ0JBQWdCO0FBRXBCLElBQUFBLFFBQU8sVUFBVSxpQkFDZixDQUFDLE9BQU8sUUFDUixPQUFPLE9BQU8sWUFBWTtBQUFBO0FBQUE7OztBQ041QjtBQUFBLGtGQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLGFBQWE7QUFDakIsUUFBSSxhQUFhO0FBQ2pCLFFBQUksZ0JBQWdCO0FBQ3BCLFFBQUksb0JBQW9CO0FBRXhCLFFBQUksVUFBVTtBQUVkLElBQUFBLFFBQU8sVUFBVSxvQkFBb0IsU0FBVSxJQUFJO0FBQ2pELGFBQU8sT0FBTyxNQUFNO0FBQUEsSUFDdEIsSUFBSSxTQUFVLElBQUk7QUFDaEIsVUFBSSxVQUFVLFdBQVcsUUFBUTtBQUNqQyxhQUFPLFdBQVcsT0FBTyxLQUFLLGNBQWMsUUFBUSxXQUFXLFFBQVEsRUFBRSxDQUFDO0FBQUEsSUFDNUU7QUFBQTtBQUFBOzs7QUNiQTtBQUFBLHNGQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLFVBQVU7QUFFZCxJQUFBQSxRQUFPLFVBQVUsU0FBVSxVQUFVO0FBQ25DLFVBQUk7QUFDRixlQUFPLFFBQVEsUUFBUTtBQUFBLE1BQ3pCLFNBQVMsT0FBTztBQUNkLGVBQU87QUFBQSxNQUNUO0FBQUEsSUFDRjtBQUFBO0FBQUE7OztBQ1RBO0FBQUEsbUZBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksYUFBYTtBQUNqQixRQUFJLGNBQWM7QUFFbEIsUUFBSSxhQUFhO0FBR2pCLElBQUFBLFFBQU8sVUFBVSxTQUFVLFVBQVU7QUFDbkMsVUFBSSxXQUFXLFFBQVEsRUFBRyxRQUFPO0FBQ2pDLFlBQU0sSUFBSSxXQUFXLFlBQVksUUFBUSxJQUFJLG9CQUFvQjtBQUFBLElBQ25FO0FBQUE7QUFBQTs7O0FDVkE7QUFBQSxtRkFBQUMsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxZQUFZO0FBQ2hCLFFBQUksb0JBQW9CO0FBSXhCLElBQUFBLFFBQU8sVUFBVSxTQUFVLEdBQUcsR0FBRztBQUMvQixVQUFJLE9BQU8sRUFBRSxDQUFDO0FBQ2QsYUFBTyxrQkFBa0IsSUFBSSxJQUFJLFNBQVksVUFBVSxJQUFJO0FBQUEsSUFDN0Q7QUFBQTtBQUFBOzs7QUNUQTtBQUFBLDhGQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLE9BQU87QUFDWCxRQUFJLGFBQWE7QUFDakIsUUFBSUMsWUFBVztBQUVmLFFBQUksYUFBYTtBQUlqQixJQUFBRCxRQUFPLFVBQVUsU0FBVSxPQUFPLE1BQU07QUFDdEMsVUFBSSxJQUFJO0FBQ1IsVUFBSSxTQUFTLFlBQVksV0FBVyxLQUFLLE1BQU0sUUFBUSxLQUFLLENBQUNDLFVBQVMsTUFBTSxLQUFLLElBQUksS0FBSyxDQUFDLEVBQUcsUUFBTztBQUNyRyxVQUFJLFdBQVcsS0FBSyxNQUFNLE9BQU8sS0FBSyxDQUFDQSxVQUFTLE1BQU0sS0FBSyxJQUFJLEtBQUssQ0FBQyxFQUFHLFFBQU87QUFDL0UsVUFBSSxTQUFTLFlBQVksV0FBVyxLQUFLLE1BQU0sUUFBUSxLQUFLLENBQUNBLFVBQVMsTUFBTSxLQUFLLElBQUksS0FBSyxDQUFDLEVBQUcsUUFBTztBQUNyRyxZQUFNLElBQUksV0FBVyx5Q0FBeUM7QUFBQSxJQUNoRTtBQUFBO0FBQUE7OztBQ2ZBO0FBQUEsZ0ZBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUNBLElBQUFBLFFBQU8sVUFBVTtBQUFBO0FBQUE7OztBQ0RqQjtBQUFBLCtGQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJQyxjQUFhO0FBR2pCLFFBQUksaUJBQWlCLE9BQU87QUFFNUIsSUFBQUQsUUFBTyxVQUFVLFNBQVUsS0FBSyxPQUFPO0FBQ3JDLFVBQUk7QUFDRix1QkFBZUMsYUFBWSxLQUFLLEVBQUUsT0FBYyxjQUFjLE1BQU0sVUFBVSxLQUFLLENBQUM7QUFBQSxNQUN0RixTQUFTLE9BQU87QUFDZCxRQUFBQSxZQUFXLEdBQUcsSUFBSTtBQUFBLE1BQ3BCO0FBQUUsYUFBTztBQUFBLElBQ1g7QUFBQTtBQUFBOzs7QUNaQTtBQUFBLHFGQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLFVBQVU7QUFDZCxRQUFJQyxjQUFhO0FBQ2pCLFFBQUksdUJBQXVCO0FBRTNCLFFBQUksU0FBUztBQUNiLFFBQUksUUFBUUQsUUFBTyxVQUFVQyxZQUFXLE1BQU0sS0FBSyxxQkFBcUIsUUFBUSxDQUFDLENBQUM7QUFFbEYsS0FBQyxNQUFNLGFBQWEsTUFBTSxXQUFXLENBQUMsSUFBSSxLQUFLO0FBQUEsTUFDN0MsU0FBUztBQUFBLE1BQ1QsTUFBTSxVQUFVLFNBQVM7QUFBQSxNQUN6QixXQUFXO0FBQUEsTUFDWCxTQUFTO0FBQUEsTUFDVCxRQUFRO0FBQUEsSUFDVixDQUFDO0FBQUE7QUFBQTs7O0FDZEQ7QUFBQSwrRUFBQUMsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxRQUFRO0FBRVosSUFBQUEsUUFBTyxVQUFVLFNBQVUsS0FBSyxPQUFPO0FBQ3JDLGFBQU8sTUFBTSxHQUFHLE1BQU0sTUFBTSxHQUFHLElBQUksU0FBUyxDQUFDO0FBQUEsSUFDL0M7QUFBQTtBQUFBOzs7QUNMQTtBQUFBLGtGQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLHlCQUF5QjtBQUU3QixRQUFJLFVBQVU7QUFJZCxJQUFBQSxRQUFPLFVBQVUsU0FBVSxVQUFVO0FBQ25DLGFBQU8sUUFBUSx1QkFBdUIsUUFBUSxDQUFDO0FBQUEsSUFDakQ7QUFBQTtBQUFBOzs7QUNUQTtBQUFBLHlGQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLGNBQWM7QUFDbEIsUUFBSSxXQUFXO0FBRWYsUUFBSSxpQkFBaUIsWUFBWSxDQUFDLEVBQUUsY0FBYztBQUtsRCxJQUFBQSxRQUFPLFVBQVUsT0FBTyxVQUFVLFNBQVMsT0FBTyxJQUFJLEtBQUs7QUFDekQsYUFBTyxlQUFlLFNBQVMsRUFBRSxHQUFHLEdBQUc7QUFBQSxJQUN6QztBQUFBO0FBQUE7OztBQ1hBO0FBQUEsNEVBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksY0FBYztBQUVsQixRQUFJLEtBQUs7QUFDVCxRQUFJLFVBQVUsS0FBSyxPQUFPO0FBQzFCLFFBQUksV0FBVyxZQUFZLEdBQUksUUFBUTtBQUV2QyxJQUFBQSxRQUFPLFVBQVUsU0FBVSxLQUFLO0FBQzlCLGFBQU8sYUFBYSxRQUFRLFNBQVksS0FBSyxPQUFPLE9BQU8sU0FBUyxFQUFFLEtBQUssU0FBUyxFQUFFO0FBQUEsSUFDeEY7QUFBQTtBQUFBOzs7QUNUQTtBQUFBLDBGQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJQyxjQUFhO0FBQ2pCLFFBQUksU0FBUztBQUNiLFFBQUksU0FBUztBQUNiLFFBQUksTUFBTTtBQUNWLFFBQUksZ0JBQWdCO0FBQ3BCLFFBQUksb0JBQW9CO0FBRXhCLFFBQUlDLFVBQVNELFlBQVc7QUFDeEIsUUFBSSx3QkFBd0IsT0FBTyxLQUFLO0FBQ3hDLFFBQUksd0JBQXdCLG9CQUFvQkMsUUFBTyxLQUFLLEtBQUtBLFVBQVNBLFdBQVVBLFFBQU8saUJBQWlCO0FBRTVHLElBQUFGLFFBQU8sVUFBVSxTQUFVLE1BQU07QUFDL0IsVUFBSSxDQUFDLE9BQU8sdUJBQXVCLElBQUksR0FBRztBQUN4Qyw4QkFBc0IsSUFBSSxJQUFJLGlCQUFpQixPQUFPRSxTQUFRLElBQUksSUFDOURBLFFBQU8sSUFBSSxJQUNYLHNCQUFzQixZQUFZLElBQUk7QUFBQSxNQUM1QztBQUFFLGFBQU8sc0JBQXNCLElBQUk7QUFBQSxJQUNyQztBQUFBO0FBQUE7OztBQ2xCQTtBQUFBLHFGQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLE9BQU87QUFDWCxRQUFJQyxZQUFXO0FBQ2YsUUFBSSxXQUFXO0FBQ2YsUUFBSSxZQUFZO0FBQ2hCLFFBQUksc0JBQXNCO0FBQzFCLFFBQUksa0JBQWtCO0FBRXRCLFFBQUksYUFBYTtBQUNqQixRQUFJLGVBQWUsZ0JBQWdCLGFBQWE7QUFJaEQsSUFBQUQsUUFBTyxVQUFVLFNBQVUsT0FBTyxNQUFNO0FBQ3RDLFVBQUksQ0FBQ0MsVUFBUyxLQUFLLEtBQUssU0FBUyxLQUFLLEVBQUcsUUFBTztBQUNoRCxVQUFJLGVBQWUsVUFBVSxPQUFPLFlBQVk7QUFDaEQsVUFBSTtBQUNKLFVBQUksY0FBYztBQUNoQixZQUFJLFNBQVMsT0FBVyxRQUFPO0FBQy9CLGlCQUFTLEtBQUssY0FBYyxPQUFPLElBQUk7QUFDdkMsWUFBSSxDQUFDQSxVQUFTLE1BQU0sS0FBSyxTQUFTLE1BQU0sRUFBRyxRQUFPO0FBQ2xELGNBQU0sSUFBSSxXQUFXLHlDQUF5QztBQUFBLE1BQ2hFO0FBQ0EsVUFBSSxTQUFTLE9BQVcsUUFBTztBQUMvQixhQUFPLG9CQUFvQixPQUFPLElBQUk7QUFBQSxJQUN4QztBQUFBO0FBQUE7OztBQ3pCQTtBQUFBLHdGQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLGNBQWM7QUFDbEIsUUFBSSxXQUFXO0FBSWYsSUFBQUEsUUFBTyxVQUFVLFNBQVUsVUFBVTtBQUNuQyxVQUFJLE1BQU0sWUFBWSxVQUFVLFFBQVE7QUFDeEMsYUFBTyxTQUFTLEdBQUcsSUFBSSxNQUFNLE1BQU07QUFBQSxJQUNyQztBQUFBO0FBQUE7OztBQ1RBO0FBQUEsZ0dBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUlDLGNBQWE7QUFDakIsUUFBSUMsWUFBVztBQUVmLFFBQUlDLFlBQVdGLFlBQVc7QUFFMUIsUUFBSSxTQUFTQyxVQUFTQyxTQUFRLEtBQUtELFVBQVNDLFVBQVMsYUFBYTtBQUVsRSxJQUFBSCxRQUFPLFVBQVUsU0FBVSxJQUFJO0FBQzdCLGFBQU8sU0FBU0csVUFBUyxjQUFjLEVBQUUsSUFBSSxDQUFDO0FBQUEsSUFDaEQ7QUFBQTtBQUFBOzs7QUNWQTtBQUFBLHVGQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLGNBQWM7QUFDbEIsUUFBSSxRQUFRO0FBQ1osUUFBSUMsaUJBQWdCO0FBR3BCLElBQUFELFFBQU8sVUFBVSxDQUFDLGVBQWUsQ0FBQyxNQUFNLFdBQVk7QUFFbEQsYUFBTyxPQUFPLGVBQWVDLGVBQWMsS0FBSyxHQUFHLEtBQUs7QUFBQSxRQUN0RCxLQUFLLFdBQVk7QUFBRSxpQkFBTztBQUFBLFFBQUc7QUFBQSxNQUMvQixDQUFDLEVBQUUsTUFBTTtBQUFBLElBQ1gsQ0FBQztBQUFBO0FBQUE7OztBQ1hEO0FBQUEsMkdBQUFDLFVBQUE7QUFBQTtBQUNBLFFBQUksY0FBYztBQUNsQixRQUFJLE9BQU87QUFDWCxRQUFJLDZCQUE2QjtBQUNqQyxRQUFJLDJCQUEyQjtBQUMvQixRQUFJLGtCQUFrQjtBQUN0QixRQUFJLGdCQUFnQjtBQUNwQixRQUFJLFNBQVM7QUFDYixRQUFJLGlCQUFpQjtBQUdyQixRQUFJLDRCQUE0QixPQUFPO0FBSXZDLElBQUFBLFNBQVEsSUFBSSxjQUFjLDRCQUE0QixTQUFTLHlCQUF5QixHQUFHLEdBQUc7QUFDNUYsVUFBSSxnQkFBZ0IsQ0FBQztBQUNyQixVQUFJLGNBQWMsQ0FBQztBQUNuQixVQUFJLGVBQWdCLEtBQUk7QUFDdEIsZUFBTywwQkFBMEIsR0FBRyxDQUFDO0FBQUEsTUFDdkMsU0FBUyxPQUFPO0FBQUEsTUFBYztBQUM5QixVQUFJLE9BQU8sR0FBRyxDQUFDLEVBQUcsUUFBTyx5QkFBeUIsQ0FBQyxLQUFLLDJCQUEyQixHQUFHLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQUEsSUFDbkc7QUFBQTtBQUFBOzs7QUN0QkE7QUFBQSxnR0FBQUMsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxjQUFjO0FBQ2xCLFFBQUksUUFBUTtBQUlaLElBQUFBLFFBQU8sVUFBVSxlQUFlLE1BQU0sV0FBWTtBQUVoRCxhQUFPLE9BQU8sZUFBZSxXQUFZO0FBQUEsTUFBYyxHQUFHLGFBQWE7QUFBQSxRQUNyRSxPQUFPO0FBQUEsUUFDUCxVQUFVO0FBQUEsTUFDWixDQUFDLEVBQUUsY0FBYztBQUFBLElBQ25CLENBQUM7QUFBQTtBQUFBOzs7QUNaRDtBQUFBLGtGQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJQyxZQUFXO0FBRWYsUUFBSSxVQUFVO0FBQ2QsUUFBSSxhQUFhO0FBR2pCLElBQUFELFFBQU8sVUFBVSxTQUFVLFVBQVU7QUFDbkMsVUFBSUMsVUFBUyxRQUFRLEVBQUcsUUFBTztBQUMvQixZQUFNLElBQUksV0FBVyxRQUFRLFFBQVEsSUFBSSxtQkFBbUI7QUFBQSxJQUM5RDtBQUFBO0FBQUE7OztBQ1ZBO0FBQUEsK0ZBQUFDLFVBQUE7QUFBQTtBQUNBLFFBQUksY0FBYztBQUNsQixRQUFJLGlCQUFpQjtBQUNyQixRQUFJLDBCQUEwQjtBQUM5QixRQUFJLFdBQVc7QUFDZixRQUFJLGdCQUFnQjtBQUVwQixRQUFJLGFBQWE7QUFFakIsUUFBSSxrQkFBa0IsT0FBTztBQUU3QixRQUFJLDRCQUE0QixPQUFPO0FBQ3ZDLFFBQUksYUFBYTtBQUNqQixRQUFJLGVBQWU7QUFDbkIsUUFBSSxXQUFXO0FBSWYsSUFBQUEsU0FBUSxJQUFJLGNBQWMsMEJBQTBCLFNBQVMsZUFBZSxHQUFHLEdBQUcsWUFBWTtBQUM1RixlQUFTLENBQUM7QUFDVixVQUFJLGNBQWMsQ0FBQztBQUNuQixlQUFTLFVBQVU7QUFDbkIsVUFBSSxPQUFPLE1BQU0sY0FBYyxNQUFNLGVBQWUsV0FBVyxjQUFjLFlBQVksY0FBYyxDQUFDLFdBQVcsUUFBUSxHQUFHO0FBQzVILFlBQUksVUFBVSwwQkFBMEIsR0FBRyxDQUFDO0FBQzVDLFlBQUksV0FBVyxRQUFRLFFBQVEsR0FBRztBQUNoQyxZQUFFLENBQUMsSUFBSSxXQUFXO0FBQ2xCLHVCQUFhO0FBQUEsWUFDWCxjQUFjLGdCQUFnQixhQUFhLFdBQVcsWUFBWSxJQUFJLFFBQVEsWUFBWTtBQUFBLFlBQzFGLFlBQVksY0FBYyxhQUFhLFdBQVcsVUFBVSxJQUFJLFFBQVEsVUFBVTtBQUFBLFlBQ2xGLFVBQVU7QUFBQSxVQUNaO0FBQUEsUUFDRjtBQUFBLE1BQ0Y7QUFBRSxhQUFPLGdCQUFnQixHQUFHLEdBQUcsVUFBVTtBQUFBLElBQzNDLElBQUksa0JBQWtCLFNBQVMsZUFBZSxHQUFHLEdBQUcsWUFBWTtBQUM5RCxlQUFTLENBQUM7QUFDVixVQUFJLGNBQWMsQ0FBQztBQUNuQixlQUFTLFVBQVU7QUFDbkIsVUFBSSxlQUFnQixLQUFJO0FBQ3RCLGVBQU8sZ0JBQWdCLEdBQUcsR0FBRyxVQUFVO0FBQUEsTUFDekMsU0FBUyxPQUFPO0FBQUEsTUFBYztBQUM5QixVQUFJLFNBQVMsY0FBYyxTQUFTLFdBQVksT0FBTSxJQUFJLFdBQVcseUJBQXlCO0FBQzlGLFVBQUksV0FBVyxXQUFZLEdBQUUsQ0FBQyxJQUFJLFdBQVc7QUFDN0MsYUFBTztBQUFBLElBQ1Q7QUFBQTtBQUFBOzs7QUMzQ0E7QUFBQSx1R0FBQUMsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxjQUFjO0FBQ2xCLFFBQUksdUJBQXVCO0FBQzNCLFFBQUksMkJBQTJCO0FBRS9CLElBQUFBLFFBQU8sVUFBVSxjQUFjLFNBQVUsUUFBUSxLQUFLLE9BQU87QUFDM0QsYUFBTyxxQkFBcUIsRUFBRSxRQUFRLEtBQUsseUJBQXlCLEdBQUcsS0FBSyxDQUFDO0FBQUEsSUFDL0UsSUFBSSxTQUFVLFFBQVEsS0FBSyxPQUFPO0FBQ2hDLGFBQU8sR0FBRyxJQUFJO0FBQ2QsYUFBTztBQUFBLElBQ1Q7QUFBQTtBQUFBOzs7QUNWQTtBQUFBLHNGQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLGNBQWM7QUFDbEIsUUFBSSxTQUFTO0FBRWIsUUFBSSxvQkFBb0IsU0FBUztBQUVqQyxRQUFJLGdCQUFnQixlQUFlLE9BQU87QUFFMUMsUUFBSSxTQUFTLE9BQU8sbUJBQW1CLE1BQU07QUFFN0MsUUFBSSxTQUFTLFVBQVcsU0FBUyxZQUFZO0FBQUEsSUFBYyxFQUFHLFNBQVM7QUFDdkUsUUFBSSxlQUFlLFdBQVcsQ0FBQyxlQUFnQixlQUFlLGNBQWMsbUJBQW1CLE1BQU0sRUFBRTtBQUV2RyxJQUFBQSxRQUFPLFVBQVU7QUFBQSxNQUNmO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxJQUNGO0FBQUE7QUFBQTs7O0FDakJBO0FBQUEsdUZBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksY0FBYztBQUNsQixRQUFJLGFBQWE7QUFDakIsUUFBSSxRQUFRO0FBRVosUUFBSSxtQkFBbUIsWUFBWSxTQUFTLFFBQVE7QUFHcEQsUUFBSSxDQUFDLFdBQVcsTUFBTSxhQUFhLEdBQUc7QUFDcEMsWUFBTSxnQkFBZ0IsU0FBVSxJQUFJO0FBQ2xDLGVBQU8saUJBQWlCLEVBQUU7QUFBQSxNQUM1QjtBQUFBLElBQ0Y7QUFFQSxJQUFBQSxRQUFPLFVBQVUsTUFBTTtBQUFBO0FBQUE7OztBQ2R2QjtBQUFBLGlHQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJQyxjQUFhO0FBQ2pCLFFBQUksYUFBYTtBQUVqQixRQUFJQyxXQUFVRCxZQUFXO0FBRXpCLElBQUFELFFBQU8sVUFBVSxXQUFXRSxRQUFPLEtBQUssY0FBYyxLQUFLLE9BQU9BLFFBQU8sQ0FBQztBQUFBO0FBQUE7OztBQ04xRTtBQUFBLG1GQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLFNBQVM7QUFDYixRQUFJLE1BQU07QUFFVixRQUFJQyxRQUFPLE9BQU8sTUFBTTtBQUV4QixJQUFBRCxRQUFPLFVBQVUsU0FBVSxLQUFLO0FBQzlCLGFBQU9DLE1BQUssR0FBRyxNQUFNQSxNQUFLLEdBQUcsSUFBSSxJQUFJLEdBQUc7QUFBQSxJQUMxQztBQUFBO0FBQUE7OztBQ1JBO0FBQUEsb0ZBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUNBLElBQUFBLFFBQU8sVUFBVSxDQUFDO0FBQUE7QUFBQTs7O0FDRGxCO0FBQUEsdUZBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksa0JBQWtCO0FBQ3RCLFFBQUlDLGNBQWE7QUFDakIsUUFBSUMsWUFBVztBQUNmLFFBQUksOEJBQThCO0FBQ2xDLFFBQUksU0FBUztBQUNiLFFBQUksU0FBUztBQUNiLFFBQUksWUFBWTtBQUNoQixRQUFJLGFBQWE7QUFFakIsUUFBSSw2QkFBNkI7QUFDakMsUUFBSUMsYUFBWUYsWUFBVztBQUMzQixRQUFJRyxXQUFVSCxZQUFXO0FBQ3pCLFFBQUk7QUFBSixRQUFTSTtBQUFULFFBQWM7QUFFZCxRQUFJLFVBQVUsU0FBVSxJQUFJO0FBQzFCLGFBQU8sSUFBSSxFQUFFLElBQUlBLEtBQUksRUFBRSxJQUFJLElBQUksSUFBSSxDQUFDLENBQUM7QUFBQSxJQUN2QztBQUVBLFFBQUksWUFBWSxTQUFVLE1BQU07QUFDOUIsYUFBTyxTQUFVLElBQUk7QUFDbkIsWUFBSTtBQUNKLFlBQUksQ0FBQ0gsVUFBUyxFQUFFLE1BQU0sUUFBUUcsS0FBSSxFQUFFLEdBQUcsU0FBUyxNQUFNO0FBQ3BELGdCQUFNLElBQUlGLFdBQVUsNEJBQTRCLE9BQU8sV0FBVztBQUFBLFFBQ3BFO0FBQUUsZUFBTztBQUFBLE1BQ1g7QUFBQSxJQUNGO0FBRUEsUUFBSSxtQkFBbUIsT0FBTyxPQUFPO0FBQy9CLGNBQVEsT0FBTyxVQUFVLE9BQU8sUUFBUSxJQUFJQyxTQUFRO0FBRXhELFlBQU0sTUFBTSxNQUFNO0FBQ2xCLFlBQU0sTUFBTSxNQUFNO0FBQ2xCLFlBQU0sTUFBTSxNQUFNO0FBRWxCLFlBQU0sU0FBVSxJQUFJLFVBQVU7QUFDNUIsWUFBSSxNQUFNLElBQUksRUFBRSxFQUFHLE9BQU0sSUFBSUQsV0FBVSwwQkFBMEI7QUFDakUsaUJBQVMsU0FBUztBQUNsQixjQUFNLElBQUksSUFBSSxRQUFRO0FBQ3RCLGVBQU87QUFBQSxNQUNUO0FBQ0EsTUFBQUUsT0FBTSxTQUFVLElBQUk7QUFDbEIsZUFBTyxNQUFNLElBQUksRUFBRSxLQUFLLENBQUM7QUFBQSxNQUMzQjtBQUNBLFlBQU0sU0FBVSxJQUFJO0FBQ2xCLGVBQU8sTUFBTSxJQUFJLEVBQUU7QUFBQSxNQUNyQjtBQUFBLElBQ0YsT0FBTztBQUNELGNBQVEsVUFBVSxPQUFPO0FBQzdCLGlCQUFXLEtBQUssSUFBSTtBQUNwQixZQUFNLFNBQVUsSUFBSSxVQUFVO0FBQzVCLFlBQUksT0FBTyxJQUFJLEtBQUssRUFBRyxPQUFNLElBQUlGLFdBQVUsMEJBQTBCO0FBQ3JFLGlCQUFTLFNBQVM7QUFDbEIsb0NBQTRCLElBQUksT0FBTyxRQUFRO0FBQy9DLGVBQU87QUFBQSxNQUNUO0FBQ0EsTUFBQUUsT0FBTSxTQUFVLElBQUk7QUFDbEIsZUFBTyxPQUFPLElBQUksS0FBSyxJQUFJLEdBQUcsS0FBSyxJQUFJLENBQUM7QUFBQSxNQUMxQztBQUNBLFlBQU0sU0FBVSxJQUFJO0FBQ2xCLGVBQU8sT0FBTyxJQUFJLEtBQUs7QUFBQSxNQUN6QjtBQUFBLElBQ0Y7QUFqQ007QUFtQkE7QUFnQk4sSUFBQUwsUUFBTyxVQUFVO0FBQUEsTUFDZjtBQUFBLE1BQ0EsS0FBS0s7QUFBQSxNQUNMO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxJQUNGO0FBQUE7QUFBQTs7O0FDdEVBO0FBQUEsc0ZBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksY0FBYztBQUNsQixRQUFJLFFBQVE7QUFDWixRQUFJLGFBQWE7QUFDakIsUUFBSSxTQUFTO0FBQ2IsUUFBSSxjQUFjO0FBQ2xCLFFBQUksNkJBQTZCLHdCQUFzQztBQUN2RSxRQUFJLGdCQUFnQjtBQUNwQixRQUFJLHNCQUFzQjtBQUUxQixRQUFJLHVCQUF1QixvQkFBb0I7QUFDL0MsUUFBSSxtQkFBbUIsb0JBQW9CO0FBQzNDLFFBQUksVUFBVTtBQUVkLFFBQUksaUJBQWlCLE9BQU87QUFDNUIsUUFBSSxjQUFjLFlBQVksR0FBRyxLQUFLO0FBQ3RDLFFBQUksVUFBVSxZQUFZLEdBQUcsT0FBTztBQUNwQyxRQUFJLE9BQU8sWUFBWSxDQUFDLEVBQUUsSUFBSTtBQUU5QixRQUFJLHNCQUFzQixlQUFlLENBQUMsTUFBTSxXQUFZO0FBQzFELGFBQU8sZUFBZSxXQUFZO0FBQUEsTUFBYyxHQUFHLFVBQVUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLFdBQVc7QUFBQSxJQUN4RixDQUFDO0FBRUQsUUFBSSxXQUFXLE9BQU8sTUFBTSxFQUFFLE1BQU0sUUFBUTtBQUU1QyxRQUFJLGNBQWNBLFFBQU8sVUFBVSxTQUFVLE9BQU8sTUFBTSxTQUFTO0FBQ2pFLFVBQUksWUFBWSxRQUFRLElBQUksR0FBRyxHQUFHLENBQUMsTUFBTSxXQUFXO0FBQ2xELGVBQU8sTUFBTSxRQUFRLFFBQVEsSUFBSSxHQUFHLHlCQUF5QixJQUFJLElBQUk7QUFBQSxNQUN2RTtBQUNBLFVBQUksV0FBVyxRQUFRLE9BQVEsUUFBTyxTQUFTO0FBQy9DLFVBQUksV0FBVyxRQUFRLE9BQVEsUUFBTyxTQUFTO0FBQy9DLFVBQUksQ0FBQyxPQUFPLE9BQU8sTUFBTSxLQUFNLDhCQUE4QixNQUFNLFNBQVMsTUFBTztBQUNqRixZQUFJLFlBQWEsZ0JBQWUsT0FBTyxRQUFRLEVBQUUsT0FBTyxNQUFNLGNBQWMsS0FBSyxDQUFDO0FBQUEsWUFDN0UsT0FBTSxPQUFPO0FBQUEsTUFDcEI7QUFDQSxVQUFJLHVCQUF1QixXQUFXLE9BQU8sU0FBUyxPQUFPLEtBQUssTUFBTSxXQUFXLFFBQVEsT0FBTztBQUNoRyx1QkFBZSxPQUFPLFVBQVUsRUFBRSxPQUFPLFFBQVEsTUFBTSxDQUFDO0FBQUEsTUFDMUQ7QUFDQSxVQUFJO0FBQ0YsWUFBSSxXQUFXLE9BQU8sU0FBUyxhQUFhLEtBQUssUUFBUSxhQUFhO0FBQ3BFLGNBQUksWUFBYSxnQkFBZSxPQUFPLGFBQWEsRUFBRSxVQUFVLE1BQU0sQ0FBQztBQUFBLFFBRXpFLFdBQVcsTUFBTSxVQUFXLE9BQU0sWUFBWTtBQUFBLE1BQ2hELFNBQVMsT0FBTztBQUFBLE1BQWM7QUFDOUIsVUFBSSxRQUFRLHFCQUFxQixLQUFLO0FBQ3RDLFVBQUksQ0FBQyxPQUFPLE9BQU8sUUFBUSxHQUFHO0FBQzVCLGNBQU0sU0FBUyxLQUFLLFVBQVUsT0FBTyxRQUFRLFdBQVcsT0FBTyxFQUFFO0FBQUEsTUFDbkU7QUFBRSxhQUFPO0FBQUEsSUFDWDtBQUlBLGFBQVMsVUFBVSxXQUFXLFlBQVksU0FBUyxXQUFXO0FBQzVELGFBQU8sV0FBVyxJQUFJLEtBQUssaUJBQWlCLElBQUksRUFBRSxVQUFVLGNBQWMsSUFBSTtBQUFBLElBQ2hGLEdBQUcsVUFBVTtBQUFBO0FBQUE7OztBQ3REYjtBQUFBLHdGQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLGFBQWE7QUFDakIsUUFBSSx1QkFBdUI7QUFDM0IsUUFBSSxjQUFjO0FBQ2xCLFFBQUksdUJBQXVCO0FBRTNCLElBQUFBLFFBQU8sVUFBVSxTQUFVLEdBQUcsS0FBSyxPQUFPLFNBQVM7QUFDakQsVUFBSSxDQUFDLFFBQVMsV0FBVSxDQUFDO0FBQ3pCLFVBQUksU0FBUyxRQUFRO0FBQ3JCLFVBQUksT0FBTyxRQUFRLFNBQVMsU0FBWSxRQUFRLE9BQU87QUFDdkQsVUFBSSxXQUFXLEtBQUssRUFBRyxhQUFZLE9BQU8sTUFBTSxPQUFPO0FBQ3ZELFVBQUksUUFBUSxRQUFRO0FBQ2xCLFlBQUksT0FBUSxHQUFFLEdBQUcsSUFBSTtBQUFBLFlBQ2hCLHNCQUFxQixLQUFLLEtBQUs7QUFBQSxNQUN0QyxPQUFPO0FBQ0wsWUFBSTtBQUNGLGNBQUksQ0FBQyxRQUFRLE9BQVEsUUFBTyxFQUFFLEdBQUc7QUFBQSxtQkFDeEIsRUFBRSxHQUFHLEVBQUcsVUFBUztBQUFBLFFBQzVCLFNBQVMsT0FBTztBQUFBLFFBQWM7QUFDOUIsWUFBSSxPQUFRLEdBQUUsR0FBRyxJQUFJO0FBQUEsWUFDaEIsc0JBQXFCLEVBQUUsR0FBRyxLQUFLO0FBQUEsVUFDbEM7QUFBQSxVQUNBLFlBQVk7QUFBQSxVQUNaLGNBQWMsQ0FBQyxRQUFRO0FBQUEsVUFDdkIsVUFBVSxDQUFDLFFBQVE7QUFBQSxRQUNyQixDQUFDO0FBQUEsTUFDSDtBQUFFLGFBQU87QUFBQSxJQUNYO0FBQUE7QUFBQTs7O0FDM0JBO0FBQUEsbUZBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksT0FBTyxLQUFLO0FBQ2hCLFFBQUksUUFBUSxLQUFLO0FBS2pCLElBQUFBLFFBQU8sVUFBVSxLQUFLLFNBQVMsU0FBUyxNQUFNLEdBQUc7QUFDL0MsVUFBSSxJQUFJLENBQUM7QUFDVCxjQUFRLElBQUksSUFBSSxRQUFRLE1BQU0sQ0FBQztBQUFBLElBQ2pDO0FBQUE7QUFBQTs7O0FDVkE7QUFBQSwrRkFBQUMsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxRQUFRO0FBSVosSUFBQUEsUUFBTyxVQUFVLFNBQVUsVUFBVTtBQUNuQyxVQUFJLFNBQVMsQ0FBQztBQUVkLGFBQU8sV0FBVyxVQUFVLFdBQVcsSUFBSSxJQUFJLE1BQU0sTUFBTTtBQUFBLElBQzdEO0FBQUE7QUFBQTs7O0FDVEE7QUFBQSwwRkFBQUMsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxzQkFBc0I7QUFFMUIsUUFBSSxNQUFNLEtBQUs7QUFDZixRQUFJLE1BQU0sS0FBSztBQUtmLElBQUFBLFFBQU8sVUFBVSxTQUFVLE9BQU8sUUFBUTtBQUN4QyxVQUFJLFVBQVUsb0JBQW9CLEtBQUs7QUFDdkMsYUFBTyxVQUFVLElBQUksSUFBSSxVQUFVLFFBQVEsQ0FBQyxJQUFJLElBQUksU0FBUyxNQUFNO0FBQUEsSUFDckU7QUFBQTtBQUFBOzs7QUNaQTtBQUFBLGtGQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLHNCQUFzQjtBQUUxQixRQUFJLE1BQU0sS0FBSztBQUlmLElBQUFBLFFBQU8sVUFBVSxTQUFVLFVBQVU7QUFDbkMsVUFBSSxNQUFNLG9CQUFvQixRQUFRO0FBQ3RDLGFBQU8sTUFBTSxJQUFJLElBQUksS0FBSyxnQkFBZ0IsSUFBSTtBQUFBLElBQ2hEO0FBQUE7QUFBQTs7O0FDVkE7QUFBQSw2RkFBQUMsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxXQUFXO0FBSWYsSUFBQUEsUUFBTyxVQUFVLFNBQVUsS0FBSztBQUM5QixhQUFPLFNBQVMsSUFBSSxNQUFNO0FBQUEsSUFDNUI7QUFBQTtBQUFBOzs7QUNQQTtBQUFBLHVGQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLGtCQUFrQjtBQUN0QixRQUFJLGtCQUFrQjtBQUN0QixRQUFJLG9CQUFvQjtBQUd4QixRQUFJLGVBQWUsU0FBVSxhQUFhO0FBQ3hDLGFBQU8sU0FBVSxPQUFPLElBQUksV0FBVztBQUNyQyxZQUFJLElBQUksZ0JBQWdCLEtBQUs7QUFDN0IsWUFBSSxTQUFTLGtCQUFrQixDQUFDO0FBQ2hDLFlBQUksV0FBVyxFQUFHLFFBQU8sQ0FBQyxlQUFlO0FBQ3pDLFlBQUksUUFBUSxnQkFBZ0IsV0FBVyxNQUFNO0FBQzdDLFlBQUk7QUFHSixZQUFJLGVBQWUsT0FBTyxHQUFJLFFBQU8sU0FBUyxPQUFPO0FBQ25ELGtCQUFRLEVBQUUsT0FBTztBQUVqQixjQUFJLFVBQVUsTUFBTyxRQUFPO0FBQUEsUUFFOUI7QUFBQSxZQUFPLFFBQU0sU0FBUyxPQUFPLFNBQVM7QUFDcEMsZUFBSyxlQUFlLFNBQVMsTUFBTSxFQUFFLEtBQUssTUFBTSxHQUFJLFFBQU8sZUFBZSxTQUFTO0FBQUEsUUFDckY7QUFBRSxlQUFPLENBQUMsZUFBZTtBQUFBLE1BQzNCO0FBQUEsSUFDRjtBQUVBLElBQUFBLFFBQU8sVUFBVTtBQUFBO0FBQUE7QUFBQSxNQUdmLFVBQVUsYUFBYSxJQUFJO0FBQUE7QUFBQTtBQUFBLE1BRzNCLFNBQVMsYUFBYSxLQUFLO0FBQUEsSUFDN0I7QUFBQTtBQUFBOzs7QUNqQ0E7QUFBQSw2RkFBQUMsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxjQUFjO0FBQ2xCLFFBQUksU0FBUztBQUNiLFFBQUksa0JBQWtCO0FBQ3RCLFFBQUksVUFBVSx5QkFBdUM7QUFDckQsUUFBSSxhQUFhO0FBRWpCLFFBQUksT0FBTyxZQUFZLENBQUMsRUFBRSxJQUFJO0FBRTlCLElBQUFBLFFBQU8sVUFBVSxTQUFVLFFBQVEsT0FBTztBQUN4QyxVQUFJLElBQUksZ0JBQWdCLE1BQU07QUFDOUIsVUFBSSxJQUFJO0FBQ1IsVUFBSSxTQUFTLENBQUM7QUFDZCxVQUFJO0FBQ0osV0FBSyxPQUFPLEVBQUcsRUFBQyxPQUFPLFlBQVksR0FBRyxLQUFLLE9BQU8sR0FBRyxHQUFHLEtBQUssS0FBSyxRQUFRLEdBQUc7QUFFN0UsYUFBTyxNQUFNLFNBQVMsRUFBRyxLQUFJLE9BQU8sR0FBRyxNQUFNLE1BQU0sR0FBRyxDQUFDLEdBQUc7QUFDeEQsU0FBQyxRQUFRLFFBQVEsR0FBRyxLQUFLLEtBQUssUUFBUSxHQUFHO0FBQUEsTUFDM0M7QUFDQSxhQUFPO0FBQUEsSUFDVDtBQUFBO0FBQUE7OztBQ3BCQTtBQUFBLHNGQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFFQSxJQUFBQSxRQUFPLFVBQVU7QUFBQSxNQUNmO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsSUFDRjtBQUFBO0FBQUE7OztBQ1ZBO0FBQUEsc0dBQUFDLFVBQUE7QUFBQTtBQUNBLFFBQUkscUJBQXFCO0FBQ3pCLFFBQUksY0FBYztBQUVsQixRQUFJLGFBQWEsWUFBWSxPQUFPLFVBQVUsV0FBVztBQUt6RCxJQUFBQSxTQUFRLElBQUksT0FBTyx1QkFBdUIsU0FBUyxvQkFBb0IsR0FBRztBQUN4RSxhQUFPLG1CQUFtQixHQUFHLFVBQVU7QUFBQSxJQUN6QztBQUFBO0FBQUE7OztBQ1hBO0FBQUEsd0dBQUFDLFVBQUE7QUFBQTtBQUVBLElBQUFBLFNBQVEsSUFBSSxPQUFPO0FBQUE7QUFBQTs7O0FDRm5CO0FBQUEsaUZBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksYUFBYTtBQUNqQixRQUFJLGNBQWM7QUFDbEIsUUFBSSw0QkFBNEI7QUFDaEMsUUFBSSw4QkFBOEI7QUFDbEMsUUFBSSxXQUFXO0FBRWYsUUFBSSxTQUFTLFlBQVksQ0FBQyxFQUFFLE1BQU07QUFHbEMsSUFBQUEsUUFBTyxVQUFVLFdBQVcsV0FBVyxTQUFTLEtBQUssU0FBU0MsU0FBUSxJQUFJO0FBQ3hFLFVBQUlDLFFBQU8sMEJBQTBCLEVBQUUsU0FBUyxFQUFFLENBQUM7QUFDbkQsVUFBSSx3QkFBd0IsNEJBQTRCO0FBQ3hELGFBQU8sd0JBQXdCLE9BQU9BLE9BQU0sc0JBQXNCLEVBQUUsQ0FBQyxJQUFJQTtBQUFBLElBQzNFO0FBQUE7QUFBQTs7O0FDZEE7QUFBQSxvR0FBQUMsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxTQUFTO0FBQ2IsUUFBSUMsV0FBVTtBQUNkLFFBQUksaUNBQWlDO0FBQ3JDLFFBQUksdUJBQXVCO0FBRTNCLElBQUFELFFBQU8sVUFBVSxTQUFVLFFBQVEsUUFBUSxZQUFZO0FBQ3JELFVBQUlFLFFBQU9ELFNBQVEsTUFBTTtBQUN6QixVQUFJLGlCQUFpQixxQkFBcUI7QUFDMUMsVUFBSSwyQkFBMkIsK0JBQStCO0FBQzlELGVBQVMsSUFBSSxHQUFHLElBQUlDLE1BQUssUUFBUSxLQUFLO0FBQ3BDLFlBQUksTUFBTUEsTUFBSyxDQUFDO0FBQ2hCLFlBQUksQ0FBQyxPQUFPLFFBQVEsR0FBRyxLQUFLLEVBQUUsY0FBYyxPQUFPLFlBQVksR0FBRyxJQUFJO0FBQ3BFLHlCQUFlLFFBQVEsS0FBSyx5QkFBeUIsUUFBUSxHQUFHLENBQUM7QUFBQSxRQUNuRTtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBQUE7QUFBQTs7O0FDaEJBO0FBQUEsa0ZBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksUUFBUTtBQUNaLFFBQUksYUFBYTtBQUVqQixRQUFJLGNBQWM7QUFFbEIsUUFBSSxXQUFXLFNBQVUsU0FBUyxXQUFXO0FBQzNDLFVBQUksUUFBUSxLQUFLLFVBQVUsT0FBTyxDQUFDO0FBQ25DLGFBQU8sVUFBVSxXQUFXLE9BQ3hCLFVBQVUsU0FBUyxRQUNuQixXQUFXLFNBQVMsSUFBSSxNQUFNLFNBQVMsSUFDdkMsQ0FBQyxDQUFDO0FBQUEsSUFDUjtBQUVBLFFBQUksWUFBWSxTQUFTLFlBQVksU0FBVSxRQUFRO0FBQ3JELGFBQU8sT0FBTyxNQUFNLEVBQUUsUUFBUSxhQUFhLEdBQUcsRUFBRSxZQUFZO0FBQUEsSUFDOUQ7QUFFQSxRQUFJLE9BQU8sU0FBUyxPQUFPLENBQUM7QUFDNUIsUUFBSSxTQUFTLFNBQVMsU0FBUztBQUMvQixRQUFJLFdBQVcsU0FBUyxXQUFXO0FBRW5DLElBQUFBLFFBQU8sVUFBVTtBQUFBO0FBQUE7OztBQ3RCakI7QUFBQSwrRUFBQUMsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSUMsY0FBYTtBQUNqQixRQUFJLDJCQUEyQiw2Q0FBMkQ7QUFDMUYsUUFBSSw4QkFBOEI7QUFDbEMsUUFBSSxnQkFBZ0I7QUFDcEIsUUFBSSx1QkFBdUI7QUFDM0IsUUFBSSw0QkFBNEI7QUFDaEMsUUFBSSxXQUFXO0FBaUJmLElBQUFELFFBQU8sVUFBVSxTQUFVLFNBQVMsUUFBUTtBQUMxQyxVQUFJLFNBQVMsUUFBUTtBQUNyQixVQUFJLFNBQVMsUUFBUTtBQUNyQixVQUFJLFNBQVMsUUFBUTtBQUNyQixVQUFJLFFBQVEsUUFBUSxLQUFLLGdCQUFnQixnQkFBZ0I7QUFDekQsVUFBSSxRQUFRO0FBQ1YsaUJBQVNDO0FBQUEsTUFDWCxXQUFXLFFBQVE7QUFDakIsaUJBQVNBLFlBQVcsTUFBTSxLQUFLLHFCQUFxQixRQUFRLENBQUMsQ0FBQztBQUFBLE1BQ2hFLE9BQU87QUFDTCxpQkFBU0EsWUFBVyxNQUFNLEtBQUtBLFlBQVcsTUFBTSxFQUFFO0FBQUEsTUFDcEQ7QUFDQSxVQUFJLE9BQVEsTUFBSyxPQUFPLFFBQVE7QUFDOUIseUJBQWlCLE9BQU8sR0FBRztBQUMzQixZQUFJLFFBQVEsZ0JBQWdCO0FBQzFCLHVCQUFhLHlCQUF5QixRQUFRLEdBQUc7QUFDakQsMkJBQWlCLGNBQWMsV0FBVztBQUFBLFFBQzVDLE1BQU8sa0JBQWlCLE9BQU8sR0FBRztBQUNsQyxpQkFBUyxTQUFTLFNBQVMsTUFBTSxVQUFVLFNBQVMsTUFBTSxPQUFPLEtBQUssUUFBUSxNQUFNO0FBRXBGLFlBQUksQ0FBQyxVQUFVLG1CQUFtQixRQUFXO0FBQzNDLGNBQUksT0FBTyxrQkFBa0IsT0FBTyxlQUFnQjtBQUNwRCxvQ0FBMEIsZ0JBQWdCLGNBQWM7QUFBQSxRQUMxRDtBQUVBLFlBQUksUUFBUSxRQUFTLGtCQUFrQixlQUFlLE1BQU87QUFDM0Qsc0NBQTRCLGdCQUFnQixRQUFRLElBQUk7QUFBQSxRQUMxRDtBQUNBLHNCQUFjLFFBQVEsS0FBSyxnQkFBZ0IsT0FBTztBQUFBLE1BQ3BEO0FBQUEsSUFDRjtBQUFBO0FBQUE7OztBQ3REQTtBQUFBLDhGQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLGtCQUFrQjtBQUV0QixRQUFJLGdCQUFnQixnQkFBZ0IsYUFBYTtBQUNqRCxRQUFJLE9BQU8sQ0FBQztBQUVaLFNBQUssYUFBYSxJQUFJO0FBRXRCLElBQUFBLFFBQU8sVUFBVSxPQUFPLElBQUksTUFBTTtBQUFBO0FBQUE7OztBQ1JsQztBQUFBLGdGQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLHdCQUF3QjtBQUM1QixRQUFJLGFBQWE7QUFDakIsUUFBSSxhQUFhO0FBQ2pCLFFBQUksa0JBQWtCO0FBRXRCLFFBQUksZ0JBQWdCLGdCQUFnQixhQUFhO0FBQ2pELFFBQUksVUFBVTtBQUdkLFFBQUksb0JBQW9CLFdBQVcsMkJBQVk7QUFBRSxhQUFPO0FBQUEsSUFBVyxFQUFFLENBQUMsTUFBTTtBQUc1RSxRQUFJLFNBQVMsU0FBVSxJQUFJLEtBQUs7QUFDOUIsVUFBSTtBQUNGLGVBQU8sR0FBRyxHQUFHO0FBQUEsTUFDZixTQUFTLE9BQU87QUFBQSxNQUFjO0FBQUEsSUFDaEM7QUFHQSxJQUFBQSxRQUFPLFVBQVUsd0JBQXdCLGFBQWEsU0FBVSxJQUFJO0FBQ2xFLFVBQUksR0FBRyxLQUFLO0FBQ1osYUFBTyxPQUFPLFNBQVksY0FBYyxPQUFPLE9BQU8sU0FFbEQsUUFBUSxNQUFNLE9BQU8sSUFBSSxRQUFRLEVBQUUsR0FBRyxhQUFhLE1BQU0sV0FBVyxNQUVwRSxvQkFBb0IsV0FBVyxDQUFDLEtBRS9CLFNBQVMsV0FBVyxDQUFDLE9BQU8sWUFBWSxXQUFXLEVBQUUsTUFBTSxJQUFJLGNBQWM7QUFBQSxJQUNwRjtBQUFBO0FBQUE7OztBQzdCQTtBQUFBLGtGQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLFVBQVU7QUFFZCxRQUFJLFVBQVU7QUFFZCxJQUFBQSxRQUFPLFVBQVUsU0FBVSxVQUFVO0FBQ25DLFVBQUksUUFBUSxRQUFRLE1BQU0sU0FBVSxPQUFNLElBQUksVUFBVSwyQ0FBMkM7QUFDbkcsYUFBTyxRQUFRLFFBQVE7QUFBQSxJQUN6QjtBQUFBO0FBQUE7OztBQ1JBO0FBQUEsb0ZBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUkscUJBQXFCO0FBQ3pCLFFBQUksY0FBYztBQUtsQixJQUFBQSxRQUFPLFVBQVUsT0FBTyxRQUFRLFNBQVNDLE1BQUssR0FBRztBQUMvQyxhQUFPLG1CQUFtQixHQUFHLFdBQVc7QUFBQSxJQUMxQztBQUFBO0FBQUE7OztBQ1RBO0FBQUEsaUdBQUFDLFVBQUE7QUFBQTtBQUNBLFFBQUksY0FBYztBQUNsQixRQUFJLDBCQUEwQjtBQUM5QixRQUFJLHVCQUF1QjtBQUMzQixRQUFJLFdBQVc7QUFDZixRQUFJLGtCQUFrQjtBQUN0QixRQUFJLGFBQWE7QUFLakIsSUFBQUEsU0FBUSxJQUFJLGVBQWUsQ0FBQywwQkFBMEIsT0FBTyxtQkFBbUIsU0FBUyxpQkFBaUIsR0FBRyxZQUFZO0FBQ3ZILGVBQVMsQ0FBQztBQUNWLFVBQUksUUFBUSxnQkFBZ0IsVUFBVTtBQUN0QyxVQUFJQyxRQUFPLFdBQVcsVUFBVTtBQUNoQyxVQUFJLFNBQVNBLE1BQUs7QUFDbEIsVUFBSSxRQUFRO0FBQ1osVUFBSTtBQUNKLGFBQU8sU0FBUyxNQUFPLHNCQUFxQixFQUFFLEdBQUcsTUFBTUEsTUFBSyxPQUFPLEdBQUcsTUFBTSxHQUFHLENBQUM7QUFDaEYsYUFBTztBQUFBLElBQ1Q7QUFBQTtBQUFBOzs7QUNwQkE7QUFBQSw2RUFBQUMsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxhQUFhO0FBRWpCLElBQUFBLFFBQU8sVUFBVSxXQUFXLFlBQVksaUJBQWlCO0FBQUE7QUFBQTs7O0FDSHpEO0FBQUEsc0ZBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUVBLFFBQUksV0FBVztBQUNmLFFBQUkseUJBQXlCO0FBQzdCLFFBQUksY0FBYztBQUNsQixRQUFJLGFBQWE7QUFDakIsUUFBSSxPQUFPO0FBQ1gsUUFBSSx3QkFBd0I7QUFDNUIsUUFBSSxZQUFZO0FBRWhCLFFBQUksS0FBSztBQUNULFFBQUksS0FBSztBQUNULFFBQUksWUFBWTtBQUNoQixRQUFJLFNBQVM7QUFDYixRQUFJLFdBQVcsVUFBVSxVQUFVO0FBRW5DLFFBQUksbUJBQW1CLFdBQVk7QUFBQSxJQUFjO0FBRWpELFFBQUksWUFBWSxTQUFVLFNBQVM7QUFDakMsYUFBTyxLQUFLLFNBQVMsS0FBSyxVQUFVLEtBQUssTUFBTSxTQUFTO0FBQUEsSUFDMUQ7QUFHQSxRQUFJLDRCQUE0QixTQUFVQyxrQkFBaUI7QUFDekQsTUFBQUEsaUJBQWdCLE1BQU0sVUFBVSxFQUFFLENBQUM7QUFDbkMsTUFBQUEsaUJBQWdCLE1BQU07QUFDdEIsVUFBSSxPQUFPQSxpQkFBZ0IsYUFBYTtBQUV4QyxNQUFBQSxtQkFBa0I7QUFDbEIsYUFBTztBQUFBLElBQ1Q7QUFHQSxRQUFJLDJCQUEyQixXQUFZO0FBRXpDLFVBQUksU0FBUyxzQkFBc0IsUUFBUTtBQUMzQyxVQUFJLEtBQUssU0FBUyxTQUFTO0FBQzNCLFVBQUk7QUFDSixhQUFPLE1BQU0sVUFBVTtBQUN2QixXQUFLLFlBQVksTUFBTTtBQUV2QixhQUFPLE1BQU0sT0FBTyxFQUFFO0FBQ3RCLHVCQUFpQixPQUFPLGNBQWM7QUFDdEMscUJBQWUsS0FBSztBQUNwQixxQkFBZSxNQUFNLFVBQVUsbUJBQW1CLENBQUM7QUFDbkQscUJBQWUsTUFBTTtBQUNyQixhQUFPLGVBQWU7QUFBQSxJQUN4QjtBQU9BLFFBQUk7QUFDSixRQUFJLGtCQUFrQixXQUFZO0FBQ2hDLFVBQUk7QUFDRiwwQkFBa0IsSUFBSSxjQUFjLFVBQVU7QUFBQSxNQUNoRCxTQUFTLE9BQU87QUFBQSxNQUFlO0FBQy9CLHdCQUFrQixPQUFPLFlBQVksY0FDakMsU0FBUyxVQUFVLGtCQUNqQiwwQkFBMEIsZUFBZSxJQUN6Qyx5QkFBeUIsSUFDM0IsMEJBQTBCLGVBQWU7QUFDN0MsVUFBSSxTQUFTLFlBQVk7QUFDekIsYUFBTyxTQUFVLFFBQU8sZ0JBQWdCLFNBQVMsRUFBRSxZQUFZLE1BQU0sQ0FBQztBQUN0RSxhQUFPLGdCQUFnQjtBQUFBLElBQ3pCO0FBRUEsZUFBVyxRQUFRLElBQUk7QUFLdkIsSUFBQUQsUUFBTyxVQUFVLE9BQU8sVUFBVSxTQUFTLE9BQU8sR0FBRyxZQUFZO0FBQy9ELFVBQUk7QUFDSixVQUFJLE1BQU0sTUFBTTtBQUNkLHlCQUFpQixTQUFTLElBQUksU0FBUyxDQUFDO0FBQ3hDLGlCQUFTLElBQUksaUJBQWlCO0FBQzlCLHlCQUFpQixTQUFTLElBQUk7QUFFOUIsZUFBTyxRQUFRLElBQUk7QUFBQSxNQUNyQixNQUFPLFVBQVMsZ0JBQWdCO0FBQ2hDLGFBQU8sZUFBZSxTQUFZLFNBQVMsdUJBQXVCLEVBQUUsUUFBUSxVQUFVO0FBQUEsSUFDeEY7QUFBQTtBQUFBOzs7QUNwRkE7QUFBQSxvRkFBQUUsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxjQUFjO0FBRWxCLElBQUFBLFFBQU8sVUFBVSxZQUFZLENBQUMsRUFBRSxLQUFLO0FBQUE7QUFBQTs7O0FDSHJDO0FBQUEsK0dBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUVBLFFBQUksVUFBVTtBQUNkLFFBQUksa0JBQWtCO0FBQ3RCLFFBQUksdUJBQXVCLHdDQUFzRDtBQUNqRixRQUFJLGFBQWE7QUFFakIsUUFBSSxjQUFjLE9BQU8sVUFBVSxZQUFZLFVBQVUsT0FBTyxzQkFDNUQsT0FBTyxvQkFBb0IsTUFBTSxJQUFJLENBQUM7QUFFMUMsUUFBSSxpQkFBaUIsU0FBVSxJQUFJO0FBQ2pDLFVBQUk7QUFDRixlQUFPLHFCQUFxQixFQUFFO0FBQUEsTUFDaEMsU0FBUyxPQUFPO0FBQ2QsZUFBTyxXQUFXLFdBQVc7QUFBQSxNQUMvQjtBQUFBLElBQ0Y7QUFHQSxJQUFBQSxRQUFPLFFBQVEsSUFBSSxTQUFTLG9CQUFvQixJQUFJO0FBQ2xELGFBQU8sZUFBZSxRQUFRLEVBQUUsTUFBTSxXQUNsQyxlQUFlLEVBQUUsSUFDakIscUJBQXFCLGdCQUFnQixFQUFFLENBQUM7QUFBQSxJQUM5QztBQUFBO0FBQUE7OztBQ3ZCQTtBQUFBLGlHQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLGNBQWM7QUFDbEIsUUFBSSxpQkFBaUI7QUFFckIsSUFBQUEsUUFBTyxVQUFVLFNBQVUsUUFBUSxNQUFNLFlBQVk7QUFDbkQsVUFBSSxXQUFXLElBQUssYUFBWSxXQUFXLEtBQUssTUFBTSxFQUFFLFFBQVEsS0FBSyxDQUFDO0FBQ3RFLFVBQUksV0FBVyxJQUFLLGFBQVksV0FBVyxLQUFLLE1BQU0sRUFBRSxRQUFRLEtBQUssQ0FBQztBQUN0RSxhQUFPLGVBQWUsRUFBRSxRQUFRLE1BQU0sVUFBVTtBQUFBLElBQ2xEO0FBQUE7QUFBQTs7O0FDUkE7QUFBQSxrR0FBQUMsVUFBQTtBQUFBO0FBQ0EsUUFBSSxrQkFBa0I7QUFFdEIsSUFBQUEsU0FBUSxJQUFJO0FBQUE7QUFBQTs7O0FDSFo7QUFBQSw2RUFBQUMsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSUMsY0FBYTtBQUVqQixJQUFBRCxRQUFPLFVBQVVDO0FBQUE7QUFBQTs7O0FDSGpCO0FBQUEsaUdBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksT0FBTztBQUNYLFFBQUksU0FBUztBQUNiLFFBQUksK0JBQStCO0FBQ25DLFFBQUksaUJBQWlCLGlDQUErQztBQUVwRSxJQUFBQSxRQUFPLFVBQVUsU0FBVSxNQUFNO0FBQy9CLFVBQUlDLFVBQVMsS0FBSyxXQUFXLEtBQUssU0FBUyxDQUFDO0FBQzVDLFVBQUksQ0FBQyxPQUFPQSxTQUFRLElBQUksRUFBRyxnQkFBZUEsU0FBUSxNQUFNO0FBQUEsUUFDdEQsT0FBTyw2QkFBNkIsRUFBRSxJQUFJO0FBQUEsTUFDNUMsQ0FBQztBQUFBLElBQ0g7QUFBQTtBQUFBOzs7QUNYQTtBQUFBLG1HQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLE9BQU87QUFDWCxRQUFJLGFBQWE7QUFDakIsUUFBSSxrQkFBa0I7QUFDdEIsUUFBSSxnQkFBZ0I7QUFFcEIsSUFBQUEsUUFBTyxVQUFVLFdBQVk7QUFDM0IsVUFBSUMsVUFBUyxXQUFXLFFBQVE7QUFDaEMsVUFBSSxrQkFBa0JBLFdBQVVBLFFBQU87QUFDdkMsVUFBSSxVQUFVLG1CQUFtQixnQkFBZ0I7QUFDakQsVUFBSSxlQUFlLGdCQUFnQixhQUFhO0FBRWhELFVBQUksbUJBQW1CLENBQUMsZ0JBQWdCLFlBQVksR0FBRztBQUlyRCxzQkFBYyxpQkFBaUIsY0FBYyxTQUFVLE1BQU07QUFDM0QsaUJBQU8sS0FBSyxTQUFTLElBQUk7QUFBQSxRQUMzQixHQUFHLEVBQUUsT0FBTyxFQUFFLENBQUM7QUFBQSxNQUNqQjtBQUFBLElBQ0Y7QUFBQTtBQUFBOzs7QUNwQkE7QUFBQSwwRkFBQUMsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxpQkFBaUIsaUNBQStDO0FBQ3BFLFFBQUksU0FBUztBQUNiLFFBQUksa0JBQWtCO0FBRXRCLFFBQUksZ0JBQWdCLGdCQUFnQixhQUFhO0FBRWpELElBQUFBLFFBQU8sVUFBVSxTQUFVLFFBQVEsS0FBSyxRQUFRO0FBQzlDLFVBQUksVUFBVSxDQUFDLE9BQVEsVUFBUyxPQUFPO0FBQ3ZDLFVBQUksVUFBVSxDQUFDLE9BQU8sUUFBUSxhQUFhLEdBQUc7QUFDNUMsdUJBQWUsUUFBUSxlQUFlLEVBQUUsY0FBYyxNQUFNLE9BQU8sSUFBSSxDQUFDO0FBQUEsTUFDMUU7QUFBQSxJQUNGO0FBQUE7QUFBQTs7O0FDWkE7QUFBQSxxR0FBQUMsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxhQUFhO0FBQ2pCLFFBQUksY0FBYztBQUVsQixJQUFBQSxRQUFPLFVBQVUsU0FBVSxJQUFJO0FBSTdCLFVBQUksV0FBVyxFQUFFLE1BQU0sV0FBWSxRQUFPLFlBQVksRUFBRTtBQUFBLElBQzFEO0FBQUE7QUFBQTs7O0FDVEE7QUFBQSw4RkFBQUMsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxjQUFjO0FBQ2xCLFFBQUksWUFBWTtBQUNoQixRQUFJLGNBQWM7QUFFbEIsUUFBSSxPQUFPLFlBQVksWUFBWSxJQUFJO0FBR3ZDLElBQUFBLFFBQU8sVUFBVSxTQUFVLElBQUksTUFBTTtBQUNuQyxnQkFBVSxFQUFFO0FBQ1osYUFBTyxTQUFTLFNBQVksS0FBSyxjQUFjLEtBQUssSUFBSSxJQUFJLElBQUksV0FBeUI7QUFDdkYsZUFBTyxHQUFHLE1BQU0sTUFBTSxTQUFTO0FBQUEsTUFDakM7QUFBQSxJQUNGO0FBQUE7QUFBQTs7O0FDYkE7QUFBQSxpRkFBQUMsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxVQUFVO0FBS2QsSUFBQUEsUUFBTyxVQUFVLE1BQU0sV0FBVyxTQUFTLFFBQVEsVUFBVTtBQUMzRCxhQUFPLFFBQVEsUUFBUSxNQUFNO0FBQUEsSUFDL0I7QUFBQTtBQUFBOzs7QUNSQTtBQUFBLHVGQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLGNBQWM7QUFDbEIsUUFBSSxRQUFRO0FBQ1osUUFBSSxhQUFhO0FBQ2pCLFFBQUksVUFBVTtBQUNkLFFBQUksYUFBYTtBQUNqQixRQUFJLGdCQUFnQjtBQUVwQixRQUFJLE9BQU8sV0FBWTtBQUFBLElBQWM7QUFDckMsUUFBSSxZQUFZLFdBQVcsV0FBVyxXQUFXO0FBQ2pELFFBQUksb0JBQW9CO0FBQ3hCLFFBQUksT0FBTyxZQUFZLGtCQUFrQixJQUFJO0FBQzdDLFFBQUksc0JBQXNCLENBQUMsa0JBQWtCLEtBQUssSUFBSTtBQUV0RCxRQUFJLHNCQUFzQixTQUFTLGNBQWMsVUFBVTtBQUN6RCxVQUFJLENBQUMsV0FBVyxRQUFRLEVBQUcsUUFBTztBQUNsQyxVQUFJO0FBQ0Ysa0JBQVUsTUFBTSxDQUFDLEdBQUcsUUFBUTtBQUM1QixlQUFPO0FBQUEsTUFDVCxTQUFTLE9BQU87QUFDZCxlQUFPO0FBQUEsTUFDVDtBQUFBLElBQ0Y7QUFFQSxRQUFJLHNCQUFzQixTQUFTLGNBQWMsVUFBVTtBQUN6RCxVQUFJLENBQUMsV0FBVyxRQUFRLEVBQUcsUUFBTztBQUNsQyxjQUFRLFFBQVEsUUFBUSxHQUFHO0FBQUEsUUFDekIsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUEwQixpQkFBTztBQUFBLE1BQ3hDO0FBQ0EsVUFBSTtBQUlGLGVBQU8sdUJBQXVCLENBQUMsQ0FBQyxLQUFLLG1CQUFtQixjQUFjLFFBQVEsQ0FBQztBQUFBLE1BQ2pGLFNBQVMsT0FBTztBQUNkLGVBQU87QUFBQSxNQUNUO0FBQUEsSUFDRjtBQUVBLHdCQUFvQixPQUFPO0FBSTNCLElBQUFBLFFBQU8sVUFBVSxDQUFDLGFBQWEsTUFBTSxXQUFZO0FBQy9DLFVBQUk7QUFDSixhQUFPLG9CQUFvQixvQkFBb0IsSUFBSSxLQUM5QyxDQUFDLG9CQUFvQixNQUFNLEtBQzNCLENBQUMsb0JBQW9CLFdBQVk7QUFBRSxpQkFBUztBQUFBLE1BQU0sQ0FBQyxLQUNuRDtBQUFBLElBQ1AsQ0FBQyxJQUFJLHNCQUFzQjtBQUFBO0FBQUE7OztBQ25EM0I7QUFBQSxrR0FBQUMsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxVQUFVO0FBQ2QsUUFBSSxnQkFBZ0I7QUFDcEIsUUFBSUMsWUFBVztBQUNmLFFBQUksa0JBQWtCO0FBRXRCLFFBQUksVUFBVSxnQkFBZ0IsU0FBUztBQUN2QyxRQUFJLFNBQVM7QUFJYixJQUFBRCxRQUFPLFVBQVUsU0FBVSxlQUFlO0FBQ3hDLFVBQUk7QUFDSixVQUFJLFFBQVEsYUFBYSxHQUFHO0FBQzFCLFlBQUksY0FBYztBQUVsQixZQUFJLGNBQWMsQ0FBQyxNQUFNLE1BQU0sVUFBVSxRQUFRLEVBQUUsU0FBUyxHQUFJLEtBQUk7QUFBQSxpQkFDM0RDLFVBQVMsQ0FBQyxHQUFHO0FBQ3BCLGNBQUksRUFBRSxPQUFPO0FBQ2IsY0FBSSxNQUFNLEtBQU0sS0FBSTtBQUFBLFFBQ3RCO0FBQUEsTUFDRjtBQUFFLGFBQU8sTUFBTSxTQUFZLFNBQVM7QUFBQSxJQUN0QztBQUFBO0FBQUE7OztBQ3RCQTtBQUFBLDZGQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLDBCQUEwQjtBQUk5QixJQUFBQSxRQUFPLFVBQVUsU0FBVSxlQUFlLFFBQVE7QUFDaEQsYUFBTyxLQUFLLHdCQUF3QixhQUFhLEdBQUcsV0FBVyxJQUFJLElBQUksTUFBTTtBQUFBLElBQy9FO0FBQUE7QUFBQTs7O0FDUEE7QUFBQSx3RkFBQUMsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxPQUFPO0FBQ1gsUUFBSSxjQUFjO0FBQ2xCLFFBQUksZ0JBQWdCO0FBQ3BCLFFBQUksV0FBVztBQUNmLFFBQUksb0JBQW9CO0FBQ3hCLFFBQUkscUJBQXFCO0FBRXpCLFFBQUksT0FBTyxZQUFZLENBQUMsRUFBRSxJQUFJO0FBRzlCLFFBQUksZUFBZSxTQUFVLE1BQU07QUFDakMsVUFBSSxTQUFTLFNBQVM7QUFDdEIsVUFBSSxZQUFZLFNBQVM7QUFDekIsVUFBSSxVQUFVLFNBQVM7QUFDdkIsVUFBSSxXQUFXLFNBQVM7QUFDeEIsVUFBSSxnQkFBZ0IsU0FBUztBQUM3QixVQUFJLG1CQUFtQixTQUFTO0FBQ2hDLFVBQUksV0FBVyxTQUFTLEtBQUs7QUFDN0IsYUFBTyxTQUFVLE9BQU8sWUFBWSxNQUFNLGdCQUFnQjtBQUN4RCxZQUFJLElBQUksU0FBUyxLQUFLO0FBQ3RCLFlBQUlDLFFBQU8sY0FBYyxDQUFDO0FBQzFCLFlBQUksU0FBUyxrQkFBa0JBLEtBQUk7QUFDbkMsWUFBSSxnQkFBZ0IsS0FBSyxZQUFZLElBQUk7QUFDekMsWUFBSSxRQUFRO0FBQ1osWUFBSSxTQUFTLGtCQUFrQjtBQUMvQixZQUFJLFNBQVMsU0FBUyxPQUFPLE9BQU8sTUFBTSxJQUFJLGFBQWEsbUJBQW1CLE9BQU8sT0FBTyxDQUFDLElBQUk7QUFDakcsWUFBSSxPQUFPO0FBQ1gsZUFBTSxTQUFTLE9BQU8sUUFBUyxLQUFJLFlBQVksU0FBU0EsT0FBTTtBQUM1RCxrQkFBUUEsTUFBSyxLQUFLO0FBQ2xCLG1CQUFTLGNBQWMsT0FBTyxPQUFPLENBQUM7QUFDdEMsY0FBSSxNQUFNO0FBQ1IsZ0JBQUksT0FBUSxRQUFPLEtBQUssSUFBSTtBQUFBLHFCQUNuQixPQUFRLFNBQVEsTUFBTTtBQUFBLGNBQzdCLEtBQUs7QUFBRyx1QkFBTztBQUFBO0FBQUEsY0FDZixLQUFLO0FBQUcsdUJBQU87QUFBQTtBQUFBLGNBQ2YsS0FBSztBQUFHLHVCQUFPO0FBQUE7QUFBQSxjQUNmLEtBQUs7QUFBRyxxQkFBSyxRQUFRLEtBQUs7QUFBQSxZQUM1QjtBQUFBLGdCQUFPLFNBQVEsTUFBTTtBQUFBLGNBQ25CLEtBQUs7QUFBRyx1QkFBTztBQUFBO0FBQUEsY0FDZixLQUFLO0FBQUcscUJBQUssUUFBUSxLQUFLO0FBQUEsWUFDNUI7QUFBQSxVQUNGO0FBQUEsUUFDRjtBQUNBLGVBQU8sZ0JBQWdCLEtBQUssV0FBVyxXQUFXLFdBQVc7QUFBQSxNQUMvRDtBQUFBLElBQ0Y7QUFFQSxJQUFBRCxRQUFPLFVBQVU7QUFBQTtBQUFBO0FBQUEsTUFHZixTQUFTLGFBQWEsQ0FBQztBQUFBO0FBQUE7QUFBQSxNQUd2QixLQUFLLGFBQWEsQ0FBQztBQUFBO0FBQUE7QUFBQSxNQUduQixRQUFRLGFBQWEsQ0FBQztBQUFBO0FBQUE7QUFBQSxNQUd0QixNQUFNLGFBQWEsQ0FBQztBQUFBO0FBQUE7QUFBQSxNQUdwQixPQUFPLGFBQWEsQ0FBQztBQUFBO0FBQUE7QUFBQSxNQUdyQixNQUFNLGFBQWEsQ0FBQztBQUFBO0FBQUE7QUFBQSxNQUdwQixXQUFXLGFBQWEsQ0FBQztBQUFBO0FBQUE7QUFBQSxNQUd6QixjQUFjLGFBQWEsQ0FBQztBQUFBLElBQzlCO0FBQUE7QUFBQTs7O0FDekVBO0FBQUE7QUFBQTtBQUNBLFFBQUksSUFBSTtBQUNSLFFBQUlFLGNBQWE7QUFDakIsUUFBSSxPQUFPO0FBQ1gsUUFBSSxjQUFjO0FBQ2xCLFFBQUksVUFBVTtBQUNkLFFBQUksY0FBYztBQUNsQixRQUFJLGdCQUFnQjtBQUNwQixRQUFJLFFBQVE7QUFDWixRQUFJLFNBQVM7QUFDYixRQUFJLGdCQUFnQjtBQUNwQixRQUFJLFdBQVc7QUFDZixRQUFJLGtCQUFrQjtBQUN0QixRQUFJLGdCQUFnQjtBQUNwQixRQUFJLFlBQVk7QUFDaEIsUUFBSSwyQkFBMkI7QUFDL0IsUUFBSSxxQkFBcUI7QUFDekIsUUFBSSxhQUFhO0FBQ2pCLFFBQUksNEJBQTRCO0FBQ2hDLFFBQUksOEJBQThCO0FBQ2xDLFFBQUksOEJBQThCO0FBQ2xDLFFBQUksaUNBQWlDO0FBQ3JDLFFBQUksdUJBQXVCO0FBQzNCLFFBQUkseUJBQXlCO0FBQzdCLFFBQUksNkJBQTZCO0FBQ2pDLFFBQUksZ0JBQWdCO0FBQ3BCLFFBQUksd0JBQXdCO0FBQzVCLFFBQUksU0FBUztBQUNiLFFBQUksWUFBWTtBQUNoQixRQUFJLGFBQWE7QUFDakIsUUFBSSxNQUFNO0FBQ1YsUUFBSSxrQkFBa0I7QUFDdEIsUUFBSSwrQkFBK0I7QUFDbkMsUUFBSSx3QkFBd0I7QUFDNUIsUUFBSSwwQkFBMEI7QUFDOUIsUUFBSSxpQkFBaUI7QUFDckIsUUFBSSxzQkFBc0I7QUFDMUIsUUFBSSxXQUFXLDBCQUF3QztBQUV2RCxRQUFJLFNBQVMsVUFBVSxRQUFRO0FBQy9CLFFBQUksU0FBUztBQUNiLFFBQUksWUFBWTtBQUVoQixRQUFJLG1CQUFtQixvQkFBb0I7QUFDM0MsUUFBSSxtQkFBbUIsb0JBQW9CLFVBQVUsTUFBTTtBQUUzRCxRQUFJLGtCQUFrQixPQUFPLFNBQVM7QUFDdEMsUUFBSSxVQUFVQSxZQUFXO0FBQ3pCLFFBQUksa0JBQWtCLFdBQVcsUUFBUSxTQUFTO0FBQ2xELFFBQUksYUFBYUEsWUFBVztBQUM1QixRQUFJQyxhQUFZRCxZQUFXO0FBQzNCLFFBQUksVUFBVUEsWUFBVztBQUN6QixRQUFJLGlDQUFpQywrQkFBK0I7QUFDcEUsUUFBSSx1QkFBdUIscUJBQXFCO0FBQ2hELFFBQUksNEJBQTRCLDRCQUE0QjtBQUM1RCxRQUFJLDZCQUE2QiwyQkFBMkI7QUFDNUQsUUFBSSxPQUFPLFlBQVksQ0FBQyxFQUFFLElBQUk7QUFFOUIsUUFBSSxhQUFhLE9BQU8sU0FBUztBQUNqQyxRQUFJLHlCQUF5QixPQUFPLFlBQVk7QUFDaEQsUUFBSSx3QkFBd0IsT0FBTyxLQUFLO0FBR3hDLFFBQUksYUFBYSxDQUFDLFdBQVcsQ0FBQyxRQUFRLFNBQVMsS0FBSyxDQUFDLFFBQVEsU0FBUyxFQUFFO0FBR3hFLFFBQUkseUJBQXlCLFNBQVUsR0FBRyxHQUFHLFlBQVk7QUFDdkQsVUFBSSw0QkFBNEIsK0JBQStCLGlCQUFpQixDQUFDO0FBQ2pGLFVBQUksMEJBQTJCLFFBQU8sZ0JBQWdCLENBQUM7QUFDdkQsMkJBQXFCLEdBQUcsR0FBRyxVQUFVO0FBQ3JDLFVBQUksNkJBQTZCLE1BQU0saUJBQWlCO0FBQ3RELDZCQUFxQixpQkFBaUIsR0FBRyx5QkFBeUI7QUFBQSxNQUNwRTtBQUFBLElBQ0Y7QUFFQSxRQUFJLHNCQUFzQixlQUFlLE1BQU0sV0FBWTtBQUN6RCxhQUFPLG1CQUFtQixxQkFBcUIsQ0FBQyxHQUFHLEtBQUs7QUFBQSxRQUN0RCxLQUFLLFdBQVk7QUFBRSxpQkFBTyxxQkFBcUIsTUFBTSxLQUFLLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRTtBQUFBLFFBQUc7QUFBQSxNQUM3RSxDQUFDLENBQUMsRUFBRSxNQUFNO0FBQUEsSUFDWixDQUFDLElBQUkseUJBQXlCO0FBRTlCLFFBQUksT0FBTyxTQUFVLEtBQUssYUFBYTtBQUNyQyxVQUFJLFNBQVMsV0FBVyxHQUFHLElBQUksbUJBQW1CLGVBQWU7QUFDakUsdUJBQWlCLFFBQVE7QUFBQSxRQUN2QixNQUFNO0FBQUEsUUFDTjtBQUFBLFFBQ0E7QUFBQSxNQUNGLENBQUM7QUFDRCxVQUFJLENBQUMsWUFBYSxRQUFPLGNBQWM7QUFDdkMsYUFBTztBQUFBLElBQ1Q7QUFFQSxRQUFJLGtCQUFrQixTQUFTLGVBQWUsR0FBRyxHQUFHLFlBQVk7QUFDOUQsVUFBSSxNQUFNLGdCQUFpQixpQkFBZ0Isd0JBQXdCLEdBQUcsVUFBVTtBQUNoRixlQUFTLENBQUM7QUFDVixVQUFJLE1BQU0sY0FBYyxDQUFDO0FBQ3pCLGVBQVMsVUFBVTtBQUNuQixVQUFJLE9BQU8sWUFBWSxHQUFHLEdBQUc7QUFDM0IsWUFBSSxDQUFDLFdBQVcsWUFBWTtBQUMxQixjQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sRUFBRyxzQkFBcUIsR0FBRyxRQUFRLHlCQUF5QixHQUFHLG1CQUFtQixJQUFJLENBQUMsQ0FBQztBQUM3RyxZQUFFLE1BQU0sRUFBRSxHQUFHLElBQUk7QUFBQSxRQUNuQixPQUFPO0FBQ0wsY0FBSSxPQUFPLEdBQUcsTUFBTSxLQUFLLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRyxHQUFFLE1BQU0sRUFBRSxHQUFHLElBQUk7QUFDMUQsdUJBQWEsbUJBQW1CLFlBQVksRUFBRSxZQUFZLHlCQUF5QixHQUFHLEtBQUssRUFBRSxDQUFDO0FBQUEsUUFDaEc7QUFBRSxlQUFPLG9CQUFvQixHQUFHLEtBQUssVUFBVTtBQUFBLE1BQ2pEO0FBQUUsYUFBTyxxQkFBcUIsR0FBRyxLQUFLLFVBQVU7QUFBQSxJQUNsRDtBQUVBLFFBQUksb0JBQW9CLFNBQVMsaUJBQWlCLEdBQUcsWUFBWTtBQUMvRCxlQUFTLENBQUM7QUFDVixVQUFJLGFBQWEsZ0JBQWdCLFVBQVU7QUFDM0MsVUFBSUUsUUFBTyxXQUFXLFVBQVUsRUFBRSxPQUFPLHVCQUF1QixVQUFVLENBQUM7QUFDM0UsZUFBU0EsT0FBTSxTQUFVLEtBQUs7QUFDNUIsWUFBSSxDQUFDLGVBQWUsS0FBSyx1QkFBdUIsWUFBWSxHQUFHLEVBQUcsaUJBQWdCLEdBQUcsS0FBSyxXQUFXLEdBQUcsQ0FBQztBQUFBLE1BQzNHLENBQUM7QUFDRCxhQUFPO0FBQUEsSUFDVDtBQUVBLFFBQUksVUFBVSxTQUFTLE9BQU8sR0FBRyxZQUFZO0FBQzNDLGFBQU8sZUFBZSxTQUFZLG1CQUFtQixDQUFDLElBQUksa0JBQWtCLG1CQUFtQixDQUFDLEdBQUcsVUFBVTtBQUFBLElBQy9HO0FBRUEsUUFBSSx3QkFBd0IsU0FBUyxxQkFBcUIsR0FBRztBQUMzRCxVQUFJLElBQUksY0FBYyxDQUFDO0FBQ3ZCLFVBQUksYUFBYSxLQUFLLDRCQUE0QixNQUFNLENBQUM7QUFDekQsVUFBSSxTQUFTLG1CQUFtQixPQUFPLFlBQVksQ0FBQyxLQUFLLENBQUMsT0FBTyx3QkFBd0IsQ0FBQyxFQUFHLFFBQU87QUFDcEcsYUFBTyxjQUFjLENBQUMsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sWUFBWSxDQUFDLEtBQUssT0FBTyxNQUFNLE1BQU0sS0FBSyxLQUFLLE1BQU0sRUFBRSxDQUFDLElBQ3JHLGFBQWE7QUFBQSxJQUNuQjtBQUVBLFFBQUksNEJBQTRCLFNBQVMseUJBQXlCLEdBQUcsR0FBRztBQUN0RSxVQUFJLEtBQUssZ0JBQWdCLENBQUM7QUFDMUIsVUFBSSxNQUFNLGNBQWMsQ0FBQztBQUN6QixVQUFJLE9BQU8sbUJBQW1CLE9BQU8sWUFBWSxHQUFHLEtBQUssQ0FBQyxPQUFPLHdCQUF3QixHQUFHLEVBQUc7QUFDL0YsVUFBSSxhQUFhLCtCQUErQixJQUFJLEdBQUc7QUFDdkQsVUFBSSxjQUFjLE9BQU8sWUFBWSxHQUFHLEtBQUssRUFBRSxPQUFPLElBQUksTUFBTSxLQUFLLEdBQUcsTUFBTSxFQUFFLEdBQUcsSUFBSTtBQUNyRixtQkFBVyxhQUFhO0FBQUEsTUFDMUI7QUFDQSxhQUFPO0FBQUEsSUFDVDtBQUVBLFFBQUksdUJBQXVCLFNBQVMsb0JBQW9CLEdBQUc7QUFDekQsVUFBSSxRQUFRLDBCQUEwQixnQkFBZ0IsQ0FBQyxDQUFDO0FBQ3hELFVBQUksU0FBUyxDQUFDO0FBQ2QsZUFBUyxPQUFPLFNBQVUsS0FBSztBQUM3QixZQUFJLENBQUMsT0FBTyxZQUFZLEdBQUcsS0FBSyxDQUFDLE9BQU8sWUFBWSxHQUFHLEVBQUcsTUFBSyxRQUFRLEdBQUc7QUFBQSxNQUM1RSxDQUFDO0FBQ0QsYUFBTztBQUFBLElBQ1Q7QUFFQSxRQUFJLHlCQUF5QixTQUFVLEdBQUc7QUFDeEMsVUFBSSxzQkFBc0IsTUFBTTtBQUNoQyxVQUFJLFFBQVEsMEJBQTBCLHNCQUFzQix5QkFBeUIsZ0JBQWdCLENBQUMsQ0FBQztBQUN2RyxVQUFJLFNBQVMsQ0FBQztBQUNkLGVBQVMsT0FBTyxTQUFVLEtBQUs7QUFDN0IsWUFBSSxPQUFPLFlBQVksR0FBRyxNQUFNLENBQUMsdUJBQXVCLE9BQU8saUJBQWlCLEdBQUcsSUFBSTtBQUNyRixlQUFLLFFBQVEsV0FBVyxHQUFHLENBQUM7QUFBQSxRQUM5QjtBQUFBLE1BQ0YsQ0FBQztBQUNELGFBQU87QUFBQSxJQUNUO0FBSUEsUUFBSSxDQUFDLGVBQWU7QUFDbEIsZ0JBQVUsU0FBU0MsVUFBUztBQUMxQixZQUFJLGNBQWMsaUJBQWlCLElBQUksRUFBRyxPQUFNLElBQUlGLFdBQVUsNkJBQTZCO0FBQzNGLFlBQUksY0FBYyxDQUFDLFVBQVUsVUFBVSxVQUFVLENBQUMsTUFBTSxTQUFZLFNBQVksVUFBVSxVQUFVLENBQUMsQ0FBQztBQUN0RyxZQUFJLE1BQU0sSUFBSSxXQUFXO0FBQ3pCLFlBQUksU0FBUyxTQUFVLE9BQU87QUFDNUIsY0FBSSxRQUFRLFNBQVMsU0FBWUQsY0FBYTtBQUM5QyxjQUFJLFVBQVUsZ0JBQWlCLE1BQUssUUFBUSx3QkFBd0IsS0FBSztBQUN6RSxjQUFJLE9BQU8sT0FBTyxNQUFNLEtBQUssT0FBTyxNQUFNLE1BQU0sR0FBRyxHQUFHLEVBQUcsT0FBTSxNQUFNLEVBQUUsR0FBRyxJQUFJO0FBQzlFLGNBQUksYUFBYSx5QkFBeUIsR0FBRyxLQUFLO0FBQ2xELGNBQUk7QUFDRixnQ0FBb0IsT0FBTyxLQUFLLFVBQVU7QUFBQSxVQUM1QyxTQUFTLE9BQU87QUFDZCxnQkFBSSxFQUFFLGlCQUFpQixZQUFhLE9BQU07QUFDMUMsbUNBQXVCLE9BQU8sS0FBSyxVQUFVO0FBQUEsVUFDL0M7QUFBQSxRQUNGO0FBQ0EsWUFBSSxlQUFlLFdBQVkscUJBQW9CLGlCQUFpQixLQUFLLEVBQUUsY0FBYyxNQUFNLEtBQUssT0FBTyxDQUFDO0FBQzVHLGVBQU8sS0FBSyxLQUFLLFdBQVc7QUFBQSxNQUM5QjtBQUVBLHdCQUFrQixRQUFRLFNBQVM7QUFFbkMsb0JBQWMsaUJBQWlCLFlBQVksU0FBUyxXQUFXO0FBQzdELGVBQU8saUJBQWlCLElBQUksRUFBRTtBQUFBLE1BQ2hDLENBQUM7QUFFRCxvQkFBYyxTQUFTLGlCQUFpQixTQUFVLGFBQWE7QUFDN0QsZUFBTyxLQUFLLElBQUksV0FBVyxHQUFHLFdBQVc7QUFBQSxNQUMzQyxDQUFDO0FBRUQsaUNBQTJCLElBQUk7QUFDL0IsMkJBQXFCLElBQUk7QUFDekIsNkJBQXVCLElBQUk7QUFDM0IscUNBQStCLElBQUk7QUFDbkMsZ0NBQTBCLElBQUksNEJBQTRCLElBQUk7QUFDOUQsa0NBQTRCLElBQUk7QUFFaEMsbUNBQTZCLElBQUksU0FBVSxNQUFNO0FBQy9DLGVBQU8sS0FBSyxnQkFBZ0IsSUFBSSxHQUFHLElBQUk7QUFBQSxNQUN6QztBQUVBLFVBQUksYUFBYTtBQUVmLDhCQUFzQixpQkFBaUIsZUFBZTtBQUFBLFVBQ3BELGNBQWM7QUFBQSxVQUNkLEtBQUssU0FBUyxjQUFjO0FBQzFCLG1CQUFPLGlCQUFpQixJQUFJLEVBQUU7QUFBQSxVQUNoQztBQUFBLFFBQ0YsQ0FBQztBQUNELFlBQUksQ0FBQyxTQUFTO0FBQ1osd0JBQWMsaUJBQWlCLHdCQUF3Qix1QkFBdUIsRUFBRSxRQUFRLEtBQUssQ0FBQztBQUFBLFFBQ2hHO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFFQSxNQUFFLEVBQUUsUUFBUSxNQUFNLGFBQWEsTUFBTSxNQUFNLE1BQU0sUUFBUSxDQUFDLGVBQWUsTUFBTSxDQUFDLGNBQWMsR0FBRztBQUFBLE1BQy9GLFFBQVE7QUFBQSxJQUNWLENBQUM7QUFFRCxhQUFTLFdBQVcscUJBQXFCLEdBQUcsU0FBVSxNQUFNO0FBQzFELDRCQUFzQixJQUFJO0FBQUEsSUFDNUIsQ0FBQztBQUVELE1BQUUsRUFBRSxRQUFRLFFBQVEsTUFBTSxNQUFNLFFBQVEsQ0FBQyxjQUFjLEdBQUc7QUFBQSxNQUN4RCxXQUFXLFdBQVk7QUFBRSxxQkFBYTtBQUFBLE1BQU07QUFBQSxNQUM1QyxXQUFXLFdBQVk7QUFBRSxxQkFBYTtBQUFBLE1BQU87QUFBQSxJQUMvQyxDQUFDO0FBRUQsTUFBRSxFQUFFLFFBQVEsVUFBVSxNQUFNLE1BQU0sUUFBUSxDQUFDLGVBQWUsTUFBTSxDQUFDLFlBQVksR0FBRztBQUFBO0FBQUE7QUFBQSxNQUc5RSxRQUFRO0FBQUE7QUFBQTtBQUFBLE1BR1IsZ0JBQWdCO0FBQUE7QUFBQTtBQUFBLE1BR2hCLGtCQUFrQjtBQUFBO0FBQUE7QUFBQSxNQUdsQiwwQkFBMEI7QUFBQSxJQUM1QixDQUFDO0FBRUQsTUFBRSxFQUFFLFFBQVEsVUFBVSxNQUFNLE1BQU0sUUFBUSxDQUFDLGNBQWMsR0FBRztBQUFBO0FBQUE7QUFBQSxNQUcxRCxxQkFBcUI7QUFBQSxJQUN2QixDQUFDO0FBSUQsNEJBQXdCO0FBSXhCLG1CQUFlLFNBQVMsTUFBTTtBQUU5QixlQUFXLE1BQU0sSUFBSTtBQUFBO0FBQUE7OztBQ3RRckI7QUFBQSxrR0FBQUksVUFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxnQkFBZ0I7QUFHcEIsSUFBQUEsUUFBTyxVQUFVLGlCQUFpQixDQUFDLENBQUMsT0FBTyxLQUFLLEtBQUssQ0FBQyxDQUFDLE9BQU87QUFBQTtBQUFBOzs7QUNKOUQ7QUFBQTtBQUFBO0FBQ0EsUUFBSSxJQUFJO0FBQ1IsUUFBSSxhQUFhO0FBQ2pCLFFBQUksU0FBUztBQUNiLFFBQUksV0FBVztBQUNmLFFBQUksU0FBUztBQUNiLFFBQUkseUJBQXlCO0FBRTdCLFFBQUkseUJBQXlCLE9BQU8sMkJBQTJCO0FBQy9ELFFBQUkseUJBQXlCLE9BQU8sMkJBQTJCO0FBSS9ELE1BQUUsRUFBRSxRQUFRLFVBQVUsTUFBTSxNQUFNLFFBQVEsQ0FBQyx1QkFBdUIsR0FBRztBQUFBLE1BQ25FLE9BQU8sU0FBVSxLQUFLO0FBQ3BCLFlBQUksU0FBUyxTQUFTLEdBQUc7QUFDekIsWUFBSSxPQUFPLHdCQUF3QixNQUFNLEVBQUcsUUFBTyx1QkFBdUIsTUFBTTtBQUNoRixZQUFJLFNBQVMsV0FBVyxRQUFRLEVBQUUsTUFBTTtBQUN4QywrQkFBdUIsTUFBTSxJQUFJO0FBQ2pDLCtCQUF1QixNQUFNLElBQUk7QUFDakMsZUFBTztBQUFBLE1BQ1Q7QUFBQSxJQUNGLENBQUM7QUFBQTtBQUFBOzs7QUN0QkQ7QUFBQTtBQUFBO0FBQ0EsUUFBSSxJQUFJO0FBQ1IsUUFBSSxTQUFTO0FBQ2IsUUFBSSxXQUFXO0FBQ2YsUUFBSSxjQUFjO0FBQ2xCLFFBQUksU0FBUztBQUNiLFFBQUkseUJBQXlCO0FBRTdCLFFBQUkseUJBQXlCLE9BQU8sMkJBQTJCO0FBSS9ELE1BQUUsRUFBRSxRQUFRLFVBQVUsTUFBTSxNQUFNLFFBQVEsQ0FBQyx1QkFBdUIsR0FBRztBQUFBLE1BQ25FLFFBQVEsU0FBUyxPQUFPLEtBQUs7QUFDM0IsWUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFHLE9BQU0sSUFBSSxVQUFVLFlBQVksR0FBRyxJQUFJLGtCQUFrQjtBQUM3RSxZQUFJLE9BQU8sd0JBQXdCLEdBQUcsRUFBRyxRQUFPLHVCQUF1QixHQUFHO0FBQUEsTUFDNUU7QUFBQSxJQUNGLENBQUM7QUFBQTtBQUFBOzs7QUNqQkQ7QUFBQSx1RkFBQUMsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxjQUFjO0FBRWxCLFFBQUksb0JBQW9CLFNBQVM7QUFDakMsUUFBSSxRQUFRLGtCQUFrQjtBQUM5QixRQUFJLE9BQU8sa0JBQWtCO0FBRzdCLElBQUFBLFFBQU8sVUFBVSxPQUFPLFdBQVcsWUFBWSxRQUFRLFVBQVUsY0FBYyxLQUFLLEtBQUssS0FBSyxJQUFJLFdBQVk7QUFDNUcsYUFBTyxLQUFLLE1BQU0sT0FBTyxTQUFTO0FBQUEsSUFDcEM7QUFBQTtBQUFBOzs7QUNWQTtBQUFBLG1HQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLGNBQWM7QUFDbEIsUUFBSSxVQUFVO0FBQ2QsUUFBSSxhQUFhO0FBQ2pCLFFBQUksVUFBVTtBQUNkLFFBQUksV0FBVztBQUVmLFFBQUksT0FBTyxZQUFZLENBQUMsRUFBRSxJQUFJO0FBRTlCLElBQUFBLFFBQU8sVUFBVSxTQUFVLFVBQVU7QUFDbkMsVUFBSSxXQUFXLFFBQVEsRUFBRyxRQUFPO0FBQ2pDLFVBQUksQ0FBQyxRQUFRLFFBQVEsRUFBRztBQUN4QixVQUFJLFlBQVksU0FBUztBQUN6QixVQUFJQyxRQUFPLENBQUM7QUFDWixlQUFTLElBQUksR0FBRyxJQUFJLFdBQVcsS0FBSztBQUNsQyxZQUFJLFVBQVUsU0FBUyxDQUFDO0FBQ3hCLFlBQUksT0FBTyxXQUFXLFNBQVUsTUFBS0EsT0FBTSxPQUFPO0FBQUEsaUJBQ3pDLE9BQU8sV0FBVyxZQUFZLFFBQVEsT0FBTyxNQUFNLFlBQVksUUFBUSxPQUFPLE1BQU0sU0FBVSxNQUFLQSxPQUFNLFNBQVMsT0FBTyxDQUFDO0FBQUEsTUFDckk7QUFDQSxVQUFJLGFBQWFBLE1BQUs7QUFDdEIsVUFBSSxPQUFPO0FBQ1gsYUFBTyxTQUFVLEtBQUssT0FBTztBQUMzQixZQUFJLE1BQU07QUFDUixpQkFBTztBQUNQLGlCQUFPO0FBQUEsUUFDVDtBQUNBLFlBQUksUUFBUSxJQUFJLEVBQUcsUUFBTztBQUMxQixpQkFBUyxJQUFJLEdBQUcsSUFBSSxZQUFZLElBQUssS0FBSUEsTUFBSyxDQUFDLE1BQU0sSUFBSyxRQUFPO0FBQUEsTUFDbkU7QUFBQSxJQUNGO0FBQUE7QUFBQTs7O0FDN0JBO0FBQUE7QUFBQTtBQUNBLFFBQUksSUFBSTtBQUNSLFFBQUksYUFBYTtBQUNqQixRQUFJLFFBQVE7QUFDWixRQUFJLE9BQU87QUFDWCxRQUFJLGNBQWM7QUFDbEIsUUFBSSxRQUFRO0FBQ1osUUFBSSxhQUFhO0FBQ2pCLFFBQUksV0FBVztBQUNmLFFBQUksYUFBYTtBQUNqQixRQUFJLHNCQUFzQjtBQUMxQixRQUFJLGdCQUFnQjtBQUVwQixRQUFJLFVBQVU7QUFDZCxRQUFJLGFBQWEsV0FBVyxRQUFRLFdBQVc7QUFDL0MsUUFBSSxPQUFPLFlBQVksSUFBSSxJQUFJO0FBQy9CLFFBQUksU0FBUyxZQUFZLEdBQUcsTUFBTTtBQUNsQyxRQUFJLGFBQWEsWUFBWSxHQUFHLFVBQVU7QUFDMUMsUUFBSSxVQUFVLFlBQVksR0FBRyxPQUFPO0FBQ3BDLFFBQUksaUJBQWlCLFlBQVksR0FBSSxRQUFRO0FBRTdDLFFBQUksU0FBUztBQUNiLFFBQUksTUFBTTtBQUNWLFFBQUksS0FBSztBQUVULFFBQUksMkJBQTJCLENBQUMsaUJBQWlCLE1BQU0sV0FBWTtBQUNqRSxVQUFJLFNBQVMsV0FBVyxRQUFRLEVBQUUscUJBQXFCO0FBRXZELGFBQU8sV0FBVyxDQUFDLE1BQU0sQ0FBQyxNQUFNLFlBRTNCLFdBQVcsRUFBRSxHQUFHLE9BQU8sQ0FBQyxNQUFNLFFBRTlCLFdBQVcsT0FBTyxNQUFNLENBQUMsTUFBTTtBQUFBLElBQ3RDLENBQUM7QUFHRCxRQUFJLHFCQUFxQixNQUFNLFdBQVk7QUFDekMsYUFBTyxXQUFXLGNBQWMsTUFBTSxzQkFDakMsV0FBVyxRQUFRLE1BQU07QUFBQSxJQUNoQyxDQUFDO0FBRUQsUUFBSSwwQkFBMEIsU0FBVSxJQUFJLFVBQVU7QUFDcEQsVUFBSSxPQUFPLFdBQVcsU0FBUztBQUMvQixVQUFJLFlBQVksb0JBQW9CLFFBQVE7QUFDNUMsVUFBSSxDQUFDLFdBQVcsU0FBUyxNQUFNLE9BQU8sVUFBYSxTQUFTLEVBQUUsR0FBSTtBQUNsRSxXQUFLLENBQUMsSUFBSSxTQUFVLEtBQUssT0FBTztBQUU5QixZQUFJLFdBQVcsU0FBUyxFQUFHLFNBQVEsS0FBSyxXQUFXLE1BQU0sUUFBUSxHQUFHLEdBQUcsS0FBSztBQUM1RSxZQUFJLENBQUMsU0FBUyxLQUFLLEVBQUcsUUFBTztBQUFBLE1BQy9CO0FBQ0EsYUFBTyxNQUFNLFlBQVksTUFBTSxJQUFJO0FBQUEsSUFDckM7QUFFQSxRQUFJLGVBQWUsU0FBVSxPQUFPLFFBQVEsUUFBUTtBQUNsRCxVQUFJLE9BQU8sT0FBTyxRQUFRLFNBQVMsQ0FBQztBQUNwQyxVQUFJLE9BQU8sT0FBTyxRQUFRLFNBQVMsQ0FBQztBQUNwQyxVQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssQ0FBQyxLQUFLLElBQUksSUFBSSxLQUFPLEtBQUssSUFBSSxLQUFLLEtBQUssQ0FBQyxLQUFLLEtBQUssSUFBSSxHQUFJO0FBQ2xGLGVBQU8sUUFBUSxlQUFlLFdBQVcsT0FBTyxDQUFDLEdBQUcsRUFBRTtBQUFBLE1BQ3hEO0FBQUUsYUFBTztBQUFBLElBQ1g7QUFFQSxRQUFJLFlBQVk7QUFHZCxRQUFFLEVBQUUsUUFBUSxRQUFRLE1BQU0sTUFBTSxPQUFPLEdBQUcsUUFBUSw0QkFBNEIsbUJBQW1CLEdBQUc7QUFBQTtBQUFBLFFBRWxHLFdBQVcsU0FBUyxVQUFVLElBQUksVUFBVSxPQUFPO0FBQ2pELGNBQUksT0FBTyxXQUFXLFNBQVM7QUFDL0IsY0FBSSxTQUFTLE1BQU0sMkJBQTJCLDBCQUEwQixZQUFZLE1BQU0sSUFBSTtBQUM5RixpQkFBTyxzQkFBc0IsT0FBTyxVQUFVLFdBQVcsUUFBUSxRQUFRLFFBQVEsWUFBWSxJQUFJO0FBQUEsUUFDbkc7QUFBQSxNQUNGLENBQUM7QUFBQSxJQUNIO0FBQUE7QUFBQTs7O0FDeEVBO0FBQUE7QUFBQTtBQUNBLFFBQUksSUFBSTtBQUNSLFFBQUksZ0JBQWdCO0FBQ3BCLFFBQUksUUFBUTtBQUNaLFFBQUksOEJBQThCO0FBQ2xDLFFBQUksV0FBVztBQUlmLFFBQUksU0FBUyxDQUFDLGlCQUFpQixNQUFNLFdBQVk7QUFBRSxrQ0FBNEIsRUFBRSxDQUFDO0FBQUEsSUFBRyxDQUFDO0FBSXRGLE1BQUUsRUFBRSxRQUFRLFVBQVUsTUFBTSxNQUFNLFFBQVEsT0FBTyxHQUFHO0FBQUEsTUFDbEQsdUJBQXVCLFNBQVMsc0JBQXNCLElBQUk7QUFDeEQsWUFBSSx5QkFBeUIsNEJBQTRCO0FBQ3pELGVBQU8seUJBQXlCLHVCQUF1QixTQUFTLEVBQUUsQ0FBQyxJQUFJLENBQUM7QUFBQSxNQUMxRTtBQUFBLElBQ0YsQ0FBQztBQUFBO0FBQUE7OztBQ2xCRDtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTs7O0FDTkE7QUFBQTtBQUFBO0FBR0EsUUFBSSxJQUFJO0FBQ1IsUUFBSSxjQUFjO0FBQ2xCLFFBQUlDLGNBQWE7QUFDakIsUUFBSSxjQUFjO0FBQ2xCLFFBQUksU0FBUztBQUNiLFFBQUksYUFBYTtBQUNqQixRQUFJLGdCQUFnQjtBQUNwQixRQUFJLFdBQVc7QUFDZixRQUFJLHdCQUF3QjtBQUM1QixRQUFJLDRCQUE0QjtBQUVoQyxRQUFJLGVBQWVBLFlBQVc7QUFDOUIsUUFBSSxrQkFBa0IsZ0JBQWdCLGFBQWE7QUFFbkQsUUFBSSxlQUFlLFdBQVcsWUFBWSxNQUFNLEVBQUUsaUJBQWlCO0FBQUEsSUFFakUsYUFBYSxFQUFFLGdCQUFnQixTQUM5QjtBQUNHLG9DQUE4QixDQUFDO0FBRS9CLHNCQUFnQixTQUFTQyxVQUFTO0FBQ3BDLFlBQUksY0FBYyxVQUFVLFNBQVMsS0FBSyxVQUFVLENBQUMsTUFBTSxTQUFZLFNBQVksU0FBUyxVQUFVLENBQUMsQ0FBQztBQUN4RyxZQUFJLFNBQVMsY0FBYyxpQkFBaUIsSUFBSSxJQUU1QyxJQUFJLGFBQWEsV0FBVyxJQUU1QixnQkFBZ0IsU0FBWSxhQUFhLElBQUksYUFBYSxXQUFXO0FBQ3pFLFlBQUksZ0JBQWdCLEdBQUksNkJBQTRCLE1BQU0sSUFBSTtBQUM5RCxlQUFPO0FBQUEsTUFDVDtBQUVBLGdDQUEwQixlQUFlLFlBQVk7QUFDckQsb0JBQWMsWUFBWTtBQUMxQixzQkFBZ0IsY0FBYztBQUUxQixzQkFBZ0IsT0FBTyxhQUFhLHVCQUF1QixDQUFDLE1BQU07QUFDbEUsd0JBQWtCLFlBQVksZ0JBQWdCLE9BQU87QUFDckQsZ0NBQTBCLFlBQVksZ0JBQWdCLFFBQVE7QUFDOUQsZUFBUztBQUNULGdCQUFVLFlBQVksR0FBRyxPQUFPO0FBQ2hDLG9CQUFjLFlBQVksR0FBRyxLQUFLO0FBRXRDLDRCQUFzQixpQkFBaUIsZUFBZTtBQUFBLFFBQ3BELGNBQWM7QUFBQSxRQUNkLEtBQUssU0FBUyxjQUFjO0FBQzFCLGNBQUksU0FBUyxnQkFBZ0IsSUFBSTtBQUNqQyxjQUFJLE9BQU8sNkJBQTZCLE1BQU0sRUFBRyxRQUFPO0FBQ3hELGNBQUksU0FBUyx3QkFBd0IsTUFBTTtBQUMzQyxjQUFJLE9BQU8sZ0JBQWdCLFlBQVksUUFBUSxHQUFHLEVBQUUsSUFBSSxRQUFRLFFBQVEsUUFBUSxJQUFJO0FBQ3BGLGlCQUFPLFNBQVMsS0FBSyxTQUFZO0FBQUEsUUFDbkM7QUFBQSxNQUNGLENBQUM7QUFFRCxRQUFFLEVBQUUsUUFBUSxNQUFNLGFBQWEsTUFBTSxRQUFRLEtBQUssR0FBRztBQUFBLFFBQ25ELFFBQVE7QUFBQSxNQUNWLENBQUM7QUFBQSxJQUNIO0FBdENNO0FBRUE7QUFlQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBOzs7QUMzQ047QUFBQTtBQUFBO0FBQ0EsUUFBSSx3QkFBd0I7QUFDNUIsUUFBSSwwQkFBMEI7QUFJOUIsMEJBQXNCLGFBQWE7QUFJbkMsNEJBQXdCO0FBQUE7QUFBQTs7O0FDVnhCO0FBQUEseUZBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksY0FBYztBQUNsQixRQUFJLFVBQVU7QUFFZCxRQUFJLGFBQWE7QUFFakIsUUFBSSwyQkFBMkIsT0FBTztBQUd0QyxRQUFJLG9DQUFvQyxlQUFlLENBQUMsV0FBWTtBQUVsRSxVQUFJLFNBQVMsT0FBVyxRQUFPO0FBQy9CLFVBQUk7QUFFRixlQUFPLGVBQWUsQ0FBQyxHQUFHLFVBQVUsRUFBRSxVQUFVLE1BQU0sQ0FBQyxFQUFFLFNBQVM7QUFBQSxNQUNwRSxTQUFTLE9BQU87QUFDZCxlQUFPLGlCQUFpQjtBQUFBLE1BQzFCO0FBQUEsSUFDRixFQUFFO0FBRUYsSUFBQUEsUUFBTyxVQUFVLG9DQUFvQyxTQUFVLEdBQUcsUUFBUTtBQUN4RSxVQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMseUJBQXlCLEdBQUcsUUFBUSxFQUFFLFVBQVU7QUFDakUsY0FBTSxJQUFJLFdBQVcsOEJBQThCO0FBQUEsTUFDckQ7QUFBRSxhQUFPLEVBQUUsU0FBUztBQUFBLElBQ3RCLElBQUksU0FBVSxHQUFHLFFBQVE7QUFDdkIsYUFBTyxFQUFFLFNBQVM7QUFBQSxJQUNwQjtBQUFBO0FBQUE7OztBQzFCQTtBQUFBLHFHQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLGFBQWE7QUFDakIsUUFBSSxtQkFBbUI7QUFFdkIsSUFBQUEsUUFBTyxVQUFVLFNBQVUsSUFBSTtBQUM3QixVQUFJLEtBQUssaUJBQWtCLE9BQU0sV0FBVyxnQ0FBZ0M7QUFDNUUsYUFBTztBQUFBLElBQ1Q7QUFBQTtBQUFBOzs7QUNQQTtBQUFBO0FBQUE7QUFDQSxRQUFJLElBQUk7QUFDUixRQUFJLFdBQVc7QUFDZixRQUFJLG9CQUFvQjtBQUN4QixRQUFJLGlCQUFpQjtBQUNyQixRQUFJLDJCQUEyQjtBQUMvQixRQUFJLFFBQVE7QUFFWixRQUFJLHNCQUFzQixNQUFNLFdBQVk7QUFDMUMsYUFBTyxDQUFDLEVBQUUsS0FBSyxLQUFLLEVBQUUsUUFBUSxXQUFZLEdBQUcsQ0FBQyxNQUFNO0FBQUEsSUFDdEQsQ0FBQztBQUlELFFBQUksaUNBQWlDLFdBQVk7QUFDL0MsVUFBSTtBQUVGLGVBQU8sZUFBZSxDQUFDLEdBQUcsVUFBVSxFQUFFLFVBQVUsTUFBTSxDQUFDLEVBQUUsS0FBSztBQUFBLE1BQ2hFLFNBQVMsT0FBTztBQUNkLGVBQU8saUJBQWlCO0FBQUEsTUFDMUI7QUFBQSxJQUNGO0FBRUEsUUFBSSxTQUFTLHVCQUF1QixDQUFDLCtCQUErQjtBQUlwRSxNQUFFLEVBQUUsUUFBUSxTQUFTLE9BQU8sTUFBTSxPQUFPLEdBQUcsUUFBUSxPQUFPLEdBQUc7QUFBQTtBQUFBLE1BRTVELE1BQU0sU0FBUyxLQUFLLE1BQU07QUFDeEIsWUFBSSxJQUFJLFNBQVMsSUFBSTtBQUNyQixZQUFJLE1BQU0sa0JBQWtCLENBQUM7QUFDN0IsWUFBSSxXQUFXLFVBQVU7QUFDekIsaUNBQXlCLE1BQU0sUUFBUTtBQUN2QyxpQkFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLEtBQUs7QUFDakMsWUFBRSxHQUFHLElBQUksVUFBVSxDQUFDO0FBQ3BCO0FBQUEsUUFDRjtBQUNBLHVCQUFlLEdBQUcsR0FBRztBQUNyQixlQUFPO0FBQUEsTUFDVDtBQUFBLElBQ0YsQ0FBQztBQUFBO0FBQUE7OztBQ3pDRDtBQUFBLDBGQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLFdBQVc7QUFDZixRQUFJLHNCQUFzQjtBQUUxQixRQUFJLGFBQWE7QUFJakIsSUFBQUEsUUFBTyxVQUFVLFNBQVUsTUFBTTtBQUMvQixlQUFTLElBQUk7QUFDYixVQUFJLFNBQVMsWUFBWSxTQUFTLFVBQVcsUUFBTztBQUFBLGVBQzNDLFNBQVMsU0FBVSxPQUFNLElBQUksV0FBVyxnQkFBZ0I7QUFDakUsYUFBTyxvQkFBb0IsTUFBTSxJQUFJO0FBQUEsSUFDdkM7QUFBQTtBQUFBOzs7QUNiQTtBQUFBO0FBQUE7QUFDQSxRQUFJLFNBQVM7QUFDYixRQUFJLGdCQUFnQjtBQUNwQixRQUFJLGtCQUFrQjtBQUN0QixRQUFJLGtCQUFrQjtBQUV0QixRQUFJLGVBQWUsZ0JBQWdCLGFBQWE7QUFDaEQsUUFBSSxnQkFBZ0IsS0FBSztBQUl6QixRQUFJLENBQUMsT0FBTyxlQUFlLFlBQVksR0FBRztBQUN4QyxvQkFBYyxlQUFlLGNBQWMsZUFBZTtBQUFBLElBQzVEO0FBQUE7QUFBQTs7O0FDYkE7QUFBQSx1R0FBQUMsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxjQUFjO0FBQ2xCLFFBQUksWUFBWTtBQUVoQixJQUFBQSxRQUFPLFVBQVUsU0FBVSxRQUFRLEtBQUssUUFBUTtBQUM5QyxVQUFJO0FBRUYsZUFBTyxZQUFZLFVBQVUsT0FBTyx5QkFBeUIsUUFBUSxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFBQSxNQUNwRixTQUFTLE9BQU87QUFBQSxNQUFjO0FBQUEsSUFDaEM7QUFBQTtBQUFBOzs7QUNUQTtBQUFBLDhGQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJQyxZQUFXO0FBRWYsSUFBQUQsUUFBTyxVQUFVLFNBQVUsVUFBVTtBQUNuQyxhQUFPQyxVQUFTLFFBQVEsS0FBSyxhQUFhO0FBQUEsSUFDNUM7QUFBQTtBQUFBOzs7QUNMQTtBQUFBLDZGQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLHNCQUFzQjtBQUUxQixRQUFJLFVBQVU7QUFDZCxRQUFJLGFBQWE7QUFFakIsSUFBQUEsUUFBTyxVQUFVLFNBQVUsVUFBVTtBQUNuQyxVQUFJLG9CQUFvQixRQUFRLEVBQUcsUUFBTztBQUMxQyxZQUFNLElBQUksV0FBVyxlQUFlLFFBQVEsUUFBUSxJQUFJLGlCQUFpQjtBQUFBLElBQzNFO0FBQUE7QUFBQTs7O0FDVEE7QUFBQSxnR0FBQUMsVUFBQUMsU0FBQTtBQUFBO0FBRUEsUUFBSSxzQkFBc0I7QUFDMUIsUUFBSUMsWUFBVztBQUNmLFFBQUkseUJBQXlCO0FBQzdCLFFBQUkscUJBQXFCO0FBTXpCLElBQUFELFFBQU8sVUFBVSxPQUFPLG1CQUFtQixlQUFlLENBQUMsSUFBSSxXQUFZO0FBQ3pFLFVBQUksaUJBQWlCO0FBQ3JCLFVBQUksT0FBTyxDQUFDO0FBQ1osVUFBSTtBQUNKLFVBQUk7QUFDRixpQkFBUyxvQkFBb0IsT0FBTyxXQUFXLGFBQWEsS0FBSztBQUNqRSxlQUFPLE1BQU0sQ0FBQyxDQUFDO0FBQ2YseUJBQWlCLGdCQUFnQjtBQUFBLE1BQ25DLFNBQVMsT0FBTztBQUFBLE1BQWM7QUFDOUIsYUFBTyxTQUFTLGVBQWUsR0FBRyxPQUFPO0FBQ3ZDLCtCQUF1QixDQUFDO0FBQ3hCLDJCQUFtQixLQUFLO0FBQ3hCLFlBQUksQ0FBQ0MsVUFBUyxDQUFDLEVBQUcsUUFBTztBQUN6QixZQUFJLGVBQWdCLFFBQU8sR0FBRyxLQUFLO0FBQUEsWUFDOUIsR0FBRSxZQUFZO0FBQ25CLGVBQU87QUFBQSxNQUNUO0FBQUEsSUFDRixFQUFFLElBQUk7QUFBQTtBQUFBOzs7QUM1Qk47QUFBQSw0RkFBQUMsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxhQUFhO0FBQ2pCLFFBQUlDLFlBQVc7QUFDZixRQUFJLGlCQUFpQjtBQUdyQixJQUFBRCxRQUFPLFVBQVUsU0FBVSxPQUFPLE9BQU8sU0FBUztBQUNoRCxVQUFJLFdBQVc7QUFDZjtBQUFBO0FBQUEsUUFFRTtBQUFBLFFBRUEsV0FBVyxZQUFZLE1BQU0sV0FBVyxLQUN4QyxjQUFjLFdBQ2RDLFVBQVMscUJBQXFCLFVBQVUsU0FBUyxLQUNqRCx1QkFBdUIsUUFBUTtBQUFBLE9BQy9CLGdCQUFlLE9BQU8sa0JBQWtCO0FBQzFDLGFBQU87QUFBQSxJQUNUO0FBQUE7QUFBQTs7O0FDbEJBO0FBQUEsMEZBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksY0FBYztBQUlsQixJQUFBQSxRQUFPLFVBQVUsWUFBWSxHQUFJLE9BQU87QUFBQTtBQUFBOzs7QUNMeEM7QUFBQSxvRkFBQUMsVUFBQUMsU0FBQTtBQUFBO0FBRUEsSUFBQUEsUUFBTyxVQUFVO0FBQUE7QUFBQTs7O0FDRmpCO0FBQUEsb0ZBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksY0FBYztBQUNsQixRQUFJLHlCQUF5QjtBQUM3QixRQUFJLFdBQVc7QUFDZixRQUFJLGNBQWM7QUFFbEIsUUFBSSxVQUFVLFlBQVksR0FBRyxPQUFPO0FBQ3BDLFFBQUksUUFBUSxPQUFPLE9BQU8sY0FBYyxJQUFJO0FBQzVDLFFBQUksUUFBUSxPQUFPLFVBQVUsY0FBYyxRQUFRLGNBQWMsS0FBSztBQUd0RSxRQUFJLGVBQWUsU0FBVSxNQUFNO0FBQ2pDLGFBQU8sU0FBVSxPQUFPO0FBQ3RCLFlBQUksU0FBUyxTQUFTLHVCQUF1QixLQUFLLENBQUM7QUFDbkQsWUFBSSxPQUFPLEVBQUcsVUFBUyxRQUFRLFFBQVEsT0FBTyxFQUFFO0FBQ2hELFlBQUksT0FBTyxFQUFHLFVBQVMsUUFBUSxRQUFRLE9BQU8sSUFBSTtBQUNsRCxlQUFPO0FBQUEsTUFDVDtBQUFBLElBQ0Y7QUFFQSxJQUFBQSxRQUFPLFVBQVU7QUFBQTtBQUFBO0FBQUEsTUFHZixPQUFPLGFBQWEsQ0FBQztBQUFBO0FBQUE7QUFBQSxNQUdyQixLQUFLLGFBQWEsQ0FBQztBQUFBO0FBQUE7QUFBQSxNQUduQixNQUFNLGFBQWEsQ0FBQztBQUFBLElBQ3RCO0FBQUE7QUFBQTs7O0FDOUJBO0FBQUE7QUFBQTtBQUNBLFFBQUksSUFBSTtBQUNSLFFBQUksVUFBVTtBQUNkLFFBQUksY0FBYztBQUNsQixRQUFJQyxjQUFhO0FBQ2pCLFFBQUksT0FBTztBQUNYLFFBQUksY0FBYztBQUNsQixRQUFJLFdBQVc7QUFDZixRQUFJLFNBQVM7QUFDYixRQUFJLG9CQUFvQjtBQUN4QixRQUFJLGdCQUFnQjtBQUNwQixRQUFJLFdBQVc7QUFDZixRQUFJLGNBQWM7QUFDbEIsUUFBSSxRQUFRO0FBQ1osUUFBSSxzQkFBc0Isd0NBQXNEO0FBQ2hGLFFBQUksMkJBQTJCLDZDQUEyRDtBQUMxRixRQUFJLGlCQUFpQixpQ0FBK0M7QUFDcEUsUUFBSSxrQkFBa0I7QUFDdEIsUUFBSSxPQUFPLHNCQUFvQztBQUUvQyxRQUFJLFNBQVM7QUFDYixRQUFJLGVBQWVBLFlBQVcsTUFBTTtBQUNwQyxRQUFJLHNCQUFzQixLQUFLLE1BQU07QUFDckMsUUFBSSxrQkFBa0IsYUFBYTtBQUNuQyxRQUFJQyxhQUFZRCxZQUFXO0FBQzNCLFFBQUksY0FBYyxZQUFZLEdBQUcsS0FBSztBQUN0QyxRQUFJLGFBQWEsWUFBWSxHQUFHLFVBQVU7QUFJMUMsUUFBSSxZQUFZLFNBQVUsT0FBTztBQUMvQixVQUFJLFlBQVksWUFBWSxPQUFPLFFBQVE7QUFDM0MsYUFBTyxPQUFPLGFBQWEsV0FBVyxZQUFZLFNBQVMsU0FBUztBQUFBLElBQ3RFO0FBSUEsUUFBSSxXQUFXLFNBQVUsVUFBVTtBQUNqQyxVQUFJLEtBQUssWUFBWSxVQUFVLFFBQVE7QUFDdkMsVUFBSSxPQUFPLE9BQU8sT0FBTyxTQUFTLFFBQVEsUUFBUSxPQUFPO0FBQ3pELFVBQUksU0FBUyxFQUFFLEVBQUcsT0FBTSxJQUFJQyxXQUFVLDJDQUEyQztBQUNqRixVQUFJLE9BQU8sTUFBTSxZQUFZLEdBQUcsU0FBUyxHQUFHO0FBQzFDLGFBQUssS0FBSyxFQUFFO0FBQ1osZ0JBQVEsV0FBVyxJQUFJLENBQUM7QUFDeEIsWUFBSSxVQUFVLE1BQU0sVUFBVSxJQUFJO0FBQ2hDLGtCQUFRLFdBQVcsSUFBSSxDQUFDO0FBQ3hCLGNBQUksVUFBVSxNQUFNLFVBQVUsSUFBSyxRQUFPO0FBQUEsUUFDNUMsV0FBVyxVQUFVLElBQUk7QUFDdkIsa0JBQVEsV0FBVyxJQUFJLENBQUMsR0FBRztBQUFBO0FBQUEsWUFFekIsS0FBSztBQUFBLFlBQ0wsS0FBSztBQUNILHNCQUFRO0FBQ1Isd0JBQVU7QUFDVjtBQUFBO0FBQUEsWUFFRixLQUFLO0FBQUEsWUFDTCxLQUFLO0FBQ0gsc0JBQVE7QUFDUix3QkFBVTtBQUNWO0FBQUEsWUFDRjtBQUNFLHFCQUFPLENBQUM7QUFBQSxVQUNaO0FBQ0EsbUJBQVMsWUFBWSxJQUFJLENBQUM7QUFDMUIsbUJBQVMsT0FBTztBQUNoQixlQUFLLFFBQVEsR0FBRyxRQUFRLFFBQVEsU0FBUztBQUN2QyxtQkFBTyxXQUFXLFFBQVEsS0FBSztBQUcvQixnQkFBSSxPQUFPLE1BQU0sT0FBTyxRQUFTLFFBQU87QUFBQSxVQUMxQztBQUFFLGlCQUFPLFNBQVMsUUFBUSxLQUFLO0FBQUEsUUFDakM7QUFBQSxNQUNGO0FBQUUsYUFBTyxDQUFDO0FBQUEsSUFDWjtBQUVBLFFBQUksU0FBUyxTQUFTLFFBQVEsQ0FBQyxhQUFhLE1BQU0sS0FBSyxDQUFDLGFBQWEsS0FBSyxLQUFLLGFBQWEsTUFBTSxDQUFDO0FBRW5HLFFBQUksZ0JBQWdCLFNBQVUsT0FBTztBQUVuQyxhQUFPLGNBQWMsaUJBQWlCLEtBQUssS0FBSyxNQUFNLFdBQVk7QUFBRSx3QkFBZ0IsS0FBSztBQUFBLE1BQUcsQ0FBQztBQUFBLElBQy9GO0FBSUEsUUFBSSxnQkFBZ0IsU0FBU0MsUUFBTyxPQUFPO0FBQ3pDLFVBQUksSUFBSSxVQUFVLFNBQVMsSUFBSSxJQUFJLGFBQWEsVUFBVSxLQUFLLENBQUM7QUFDaEUsYUFBTyxjQUFjLElBQUksSUFBSSxrQkFBa0IsT0FBTyxDQUFDLEdBQUcsTUFBTSxhQUFhLElBQUk7QUFBQSxJQUNuRjtBQUVBLGtCQUFjLFlBQVk7QUFDMUIsUUFBSSxVQUFVLENBQUMsUUFBUyxpQkFBZ0IsY0FBYztBQUV0RCxNQUFFLEVBQUUsUUFBUSxNQUFNLGFBQWEsTUFBTSxNQUFNLE1BQU0sUUFBUSxPQUFPLEdBQUc7QUFBQSxNQUNqRSxRQUFRO0FBQUEsSUFDVixDQUFDO0FBR0QsUUFBSSw0QkFBNEIsU0FBVSxRQUFRLFFBQVE7QUFDeEQsZUFBU0MsUUFBTyxjQUFjLG9CQUFvQixNQUFNO0FBQUE7QUFBQSxRQUV0RCxvTEFLQSxNQUFNLEdBQUc7QUFBQSxTQUFHLElBQUksR0FBRyxLQUFLQSxNQUFLLFNBQVMsR0FBRyxLQUFLO0FBQzlDLFlBQUksT0FBTyxRQUFRLE1BQU1BLE1BQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLFFBQVEsR0FBRyxHQUFHO0FBQ3pELHlCQUFlLFFBQVEsS0FBSyx5QkFBeUIsUUFBUSxHQUFHLENBQUM7QUFBQSxRQUNuRTtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBRUEsUUFBSSxXQUFXLG9CQUFxQiwyQkFBMEIsS0FBSyxNQUFNLEdBQUcsbUJBQW1CO0FBQy9GLFFBQUksVUFBVSxRQUFTLDJCQUEwQixLQUFLLE1BQU0sR0FBRyxZQUFZO0FBQUE7QUFBQTs7O0FDbEgzRTtBQUFBLHFGQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLFdBQVc7QUFJZixJQUFBQSxRQUFPLFVBQVUsV0FBWTtBQUMzQixVQUFJLE9BQU8sU0FBUyxJQUFJO0FBQ3hCLFVBQUksU0FBUztBQUNiLFVBQUksS0FBSyxXQUFZLFdBQVU7QUFDL0IsVUFBSSxLQUFLLE9BQVEsV0FBVTtBQUMzQixVQUFJLEtBQUssV0FBWSxXQUFVO0FBQy9CLFVBQUksS0FBSyxVQUFXLFdBQVU7QUFDOUIsVUFBSSxLQUFLLE9BQVEsV0FBVTtBQUMzQixVQUFJLEtBQUssUUFBUyxXQUFVO0FBQzVCLFVBQUksS0FBSyxZQUFhLFdBQVU7QUFDaEMsVUFBSSxLQUFLLE9BQVEsV0FBVTtBQUMzQixhQUFPO0FBQUEsSUFDVDtBQUFBO0FBQUE7OztBQ2pCQTtBQUFBLHlGQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLE9BQU87QUFDWCxRQUFJLFNBQVM7QUFDYixRQUFJLGdCQUFnQjtBQUNwQixRQUFJLGNBQWM7QUFFbEIsUUFBSSxrQkFBa0IsT0FBTztBQUU3QixJQUFBQSxRQUFPLFVBQVUsU0FBVSxHQUFHO0FBQzVCLFVBQUksUUFBUSxFQUFFO0FBQ2QsYUFBTyxVQUFVLFVBQWEsRUFBRSxXQUFXLG9CQUFvQixDQUFDLE9BQU8sR0FBRyxPQUFPLEtBQUssY0FBYyxpQkFBaUIsQ0FBQyxJQUNsSCxLQUFLLGFBQWEsQ0FBQyxJQUFJO0FBQUEsSUFDN0I7QUFBQTtBQUFBOzs7QUNaQTtBQUFBO0FBQUE7QUFDQSxRQUFJLHVCQUF1Qix3QkFBc0M7QUFDakUsUUFBSSxnQkFBZ0I7QUFDcEIsUUFBSSxXQUFXO0FBQ2YsUUFBSSxZQUFZO0FBQ2hCLFFBQUksUUFBUTtBQUNaLFFBQUksaUJBQWlCO0FBRXJCLFFBQUksWUFBWTtBQUNoQixRQUFJLGtCQUFrQixPQUFPO0FBQzdCLFFBQUksaUJBQWlCLGdCQUFnQixTQUFTO0FBRTlDLFFBQUksY0FBYyxNQUFNLFdBQVk7QUFBRSxhQUFPLGVBQWUsS0FBSyxFQUFFLFFBQVEsS0FBSyxPQUFPLElBQUksQ0FBQyxNQUFNO0FBQUEsSUFBUSxDQUFDO0FBRTNHLFFBQUksaUJBQWlCLHdCQUF3QixlQUFlLFNBQVM7QUFJckUsUUFBSSxlQUFlLGdCQUFnQjtBQUNqQyxvQkFBYyxpQkFBaUIsV0FBVyxTQUFTLFdBQVc7QUFDNUQsWUFBSSxJQUFJLFNBQVMsSUFBSTtBQUNyQixZQUFJLFVBQVUsVUFBVSxFQUFFLE1BQU07QUFDaEMsWUFBSSxRQUFRLFVBQVUsZUFBZSxDQUFDLENBQUM7QUFDdkMsZUFBTyxNQUFNLFVBQVUsTUFBTTtBQUFBLE1BQy9CLEdBQUcsRUFBRSxRQUFRLEtBQUssQ0FBQztBQUFBLElBQ3JCO0FBQUE7QUFBQTs7O0FDekJBO0FBQUE7QUFBQSxLQUFDLFdBQVU7QUFBQyxlQUFTLElBQUc7QUFBQyxpQkFBUyxJQUFHO0FBQUMsaUJBQU87QUFBQSxRQUFJO0FBQUMsaUJBQVMsRUFBRSxHQUFFO0FBQUMsaUJBQU8sSUFBRSxhQUFXLE9BQU8sS0FBRyxlQUFhLE9BQU8sSUFBRTtBQUFBLFFBQUU7QUFBQyxpQkFBUyxFQUFFLEdBQUU7QUFBQyxjQUFHLFNBQU8sS0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU0sSUFBSSxVQUFVLHFEQUFtRCxDQUFDO0FBQUEsUUFBRTtBQUFDLFlBQUksSUFBRSxNQUFLLElBQUUsUUFBTyxJQUFFLENBQUMsQ0FBQyxFQUFFLFVBQVEsRUFBRSxFQUFDLFdBQVUsS0FBSSxhQUFZLElBQUcsSUFBRSxFQUFFLFdBQVMsSUFBRSxTQUFTLEdBQUU7QUFBQyxZQUFFLENBQUM7QUFBRSxpQkFBTSxFQUFDLFdBQVUsRUFBQztBQUFBLFFBQUMsSUFBRSxTQUFTLEdBQUU7QUFBQyxtQkFBUyxJQUFHO0FBQUEsVUFBQztBQUFDLFlBQUUsQ0FBQztBQUFFLGNBQUcsU0FBTyxFQUFFLE9BQU0sSUFBSSxZQUFZLHdFQUF3RTtBQUFFLFlBQUUsWUFBVTtBQUFFLGlCQUFPLElBQUk7QUFBQSxRQUFDLElBQy9mLElBQUUsRUFBRSxtQkFBaUIsQ0FBQyxFQUFFLGNBQVksTUFBTSxZQUFVLFNBQVMsR0FBRTtBQUFDLGNBQUUsRUFBRTtBQUFVLGlCQUFPLEVBQUUsQ0FBQyxJQUFFLElBQUU7QUFBQSxRQUFJLElBQUU7QUFBRyxZQUFJLElBQUUsU0FBUyxHQUFFLEdBQUU7QUFBQyxtQkFBUyxJQUFHO0FBQUEsVUFBQztBQUFDLGNBQUcsWUFBVSxRQUFNLGdCQUFnQixJQUFFLEtBQUssY0FBWSxRQUFRLE9BQU0sSUFBSSxVQUFVLGtDQUFrQztBQUFFLGNBQUcsQ0FBQyxFQUFFLENBQUMsS0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU0sSUFBSSxVQUFVLDREQUE0RDtBQUFFLGNBQUUsV0FBVTtBQUFDLGdCQUFFO0FBQUssZ0JBQUUsU0FBUyxHQUFFO0FBQUMsb0JBQU0sSUFBSSxVQUFVLHFCQUFtQixJQUFFLG9DQUFvQztBQUFBLFlBQUU7QUFBQSxVQUFDO0FBQUUscUJBQVcsV0FBVTtBQUFDLGdCQUFFO0FBQUEsVUFBSSxHQUFFLENBQUM7QUFBRSxjQUFJLElBQ3hmO0FBQUUsY0FBRSxFQUFDLEtBQUksTUFBSyxLQUFJLE1BQUssT0FBTSxNQUFLLFdBQVUsS0FBSTtBQUFFLG1CQUFRQyxNQUFLLEdBQUU7QUFBQyxnQkFBRyxFQUFFQSxNQUFLLEdBQUcsT0FBTSxJQUFJLFVBQVUsMkNBQXlDQSxLQUFFLEdBQUc7QUFBRSxjQUFFQSxFQUFDLElBQUUsRUFBRUEsRUFBQztBQUFBLFVBQUM7QUFBQyx5QkFBYSxPQUFPLE1BQUksRUFBRSxRQUFNLEVBQUUsTUFBTSxLQUFLLENBQUM7QUFBRyxjQUFFLEVBQUUsQ0FBQztBQUFFLGNBQUksSUFBRSxPQUFHLElBQUU7QUFBRyxjQUFHLGVBQWEsT0FBTyxHQUFFO0FBQUMsZ0JBQUksSUFBRSxXQUFVO0FBQUMsa0JBQUksSUFBRSxRQUFNLEtBQUssZ0JBQWMsR0FBRSxJQUFFLE1BQU0sVUFBVSxNQUFNLEtBQUssU0FBUztBQUFFLGdCQUFFLElBQUUsY0FBWSxPQUFPO0FBQUUscUJBQU8sS0FBRyxFQUFFLFlBQVUsRUFBRSxVQUFVLEtBQUssTUFBSyxHQUFFLENBQUMsSUFBRSxDQUFDLEtBQUcsRUFBRSxRQUFNLEVBQUUsTUFBTSxHQUFFLE1BQUssQ0FBQyxJQUFFLEtBQUcsRUFBRSxRQUFRLENBQUMsR0FBRSxLQUFLLEVBQUUsS0FBSyxNQUFNLEdBQUUsQ0FBQyxRQUFJLEVBQUU7QUFBQSxnQkFBTTtBQUFBLGdCQUNoZjtBQUFBLGNBQUM7QUFBQSxZQUFDO0FBQUUsZ0JBQUU7QUFBQSxVQUFFLE1BQU0sY0FBYSxTQUFPLElBQUUsQ0FBQyxHQUFFLElBQUUsUUFBSSxJQUFFLEtBQUcsU0FBTyxJQUFFLEVBQUUsQ0FBQyxJQUFFLENBQUM7QUFBRSxjQUFJLElBQUUsRUFBRSxNQUFJLFNBQVMsR0FBRTtBQUFDLGNBQUUsS0FBSztBQUFFLG1CQUFPLEVBQUUsSUFBSSxNQUFLLEdBQUUsQ0FBQztBQUFBLFVBQUMsSUFBRSxTQUFTLEdBQUU7QUFBQyxjQUFFLEtBQUs7QUFBRSxtQkFBTyxLQUFLLENBQUM7QUFBQSxVQUFDLEdBQUUsSUFBRSxFQUFFLE1BQUksU0FBUyxHQUFFLEdBQUU7QUFBQyxjQUFFLEtBQUs7QUFBRSxjQUFFLElBQUksTUFBSyxHQUFFLEdBQUUsQ0FBQztBQUFBLFVBQUMsSUFBRSxTQUFTLEdBQUUsR0FBRTtBQUFDLGNBQUUsS0FBSztBQUFFLGlCQUFLLENBQUMsSUFBRTtBQUFBLFVBQUMsR0FBRSxJQUFFLENBQUM7QUFBRSxZQUFFLG9CQUFvQixDQUFDLEVBQUUsUUFBUSxTQUFTLEdBQUU7QUFBQyxnQkFBRyxHQUFHLEtBQUcsTUFBSSxLQUFLLElBQUc7QUFBQyxrQkFBSSxJQUFFLEVBQUUseUJBQXlCLEdBQUUsQ0FBQztBQUFFLGdCQUFFLGVBQWUsR0FBRSxHQUFFLEVBQUMsWUFBVyxDQUFDLENBQUMsRUFBRSxZQUFXLEtBQUksRUFBRSxLQUFLLEdBQUUsQ0FBQyxHQUFFLEtBQUksRUFBRSxLQUFLLEdBQUUsQ0FBQyxFQUFDLENBQUM7QUFBRSxnQkFBRSxDQUFDLElBQUU7QUFBQSxZQUFFO0FBQUEsVUFBQyxDQUFDO0FBQUUsVUFBQUEsS0FBRTtBQUFHLGNBQUcsS0FBRyxHQUFFO0FBQUMsZ0JBQUksSUFBRSxFQUFFLG1CQUFpQixDQUFDLEVBQUUsY0FDMWUsTUFBTSxZQUFVLFNBQVMsR0FBRSxHQUFFO0FBQUMsZ0JBQUUsQ0FBQztBQUFFLGdCQUFFLFlBQVU7QUFBRSxxQkFBTztBQUFBLFlBQUMsSUFBRTtBQUFHLGlCQUFHLEVBQUUsR0FBRSxDQUFDLE1BQUlBLEtBQUU7QUFBQSxVQUFHO0FBQUMsY0FBRyxFQUFFLE9BQUssQ0FBQ0EsR0FBRSxVQUFRLEtBQUssRUFBRSxHQUFFLENBQUMsS0FBRyxFQUFFLGVBQWUsR0FBRSxHQUFFLEVBQUMsS0FBSSxFQUFFLEtBQUssR0FBRSxDQUFDLEVBQUMsQ0FBQztBQUFFLFlBQUUsS0FBSyxDQUFDO0FBQUUsWUFBRSxLQUFLLENBQUM7QUFBRSxpQkFBTztBQUFBLFFBQUM7QUFBRSxVQUFFLFlBQVUsU0FBUyxHQUFFLEdBQUU7QUFBQyxpQkFBTSxFQUFDLE9BQU0sSUFBSSxFQUFFLEdBQUUsQ0FBQyxHQUFFLFFBQU8sRUFBQztBQUFBLFFBQUM7QUFBRSxlQUFPO0FBQUEsTUFBQztBQUFDO0FBQUMsVUFBSSxJQUFFLGdCQUFjLE9BQU8sV0FBUyx1QkFBcUIsQ0FBQyxFQUFFLFNBQVMsS0FBSyxPQUFPLEtBQUcsZ0JBQWMsT0FBTyxhQUFXLGtCQUFnQixVQUFVLFVBQVEsU0FBTztBQUFLLFFBQUUsVUFBUSxFQUFFLFFBQU0sRUFBRSxHQUFFLEVBQUUsTUFBTSxZQUFVLEVBQUUsTUFBTTtBQUFBLElBQVcsR0FBRztBQUFBO0FBQUE7OztBQ0ovZDtBQUFBO0FBQUEsS0FBQyxTQUFTQyxZQUFXO0FBQ3JCLFVBQUksRUFBRSxhQUFZLFNBQVMsWUFDeEI7QUFFSCxpQkFBUyxVQUFVLFVBQVUsTUFBTSxVQUFVO0FBQUEsTUFDN0M7QUFBQSxJQUFDLEdBQUcsS0FBSyxhQUFhLE9BQU8sVUFBVSxVQUFVLGFBQWEsT0FBTyxRQUFRLFFBQVEsYUFBYSxPQUFPLFVBQVUsVUFBVSxDQUFDLENBQUM7QUFBQTtBQUFBOzs7QUNML0gsSUFNSSxVQWlMRztBQXZMUDtBQUFBO0FBTUEsSUFBSSxXQUFZLFdBQVk7QUFDM0IsVUFBSSxRQUFRLFdBQVk7QUFDdkIsYUFBSyxTQUFTO0FBQ2QsZUFBTztBQUFBLE1BQ1I7QUFDQSxVQUFJLFdBQVcsU0FBVSxJQUFJO0FBQzVCLFlBQUksT0FBTyxPQUFPLFdBQVksT0FBTSxJQUFJLFVBQVUsS0FBSyxvQkFBb0I7QUFDM0UsZUFBTztBQUFBLE1BQ1I7QUFFQSxVQUFJQyxZQUFXLFNBQVUsTUFBTSxTQUFTO0FBQ3ZDLFlBQUksRUFBRSxnQkFBZ0JBLFlBQVc7QUFDaEMsaUJBQU8sSUFBSUEsVUFBUyxNQUFNLE9BQU87QUFBQSxRQUNsQztBQUNBLGVBQU8saUJBQWlCLE1BQU07QUFBQSxVQUM3QixVQUFVO0FBQUEsWUFDVCxVQUFVO0FBQUEsWUFDVixPQUFPO0FBQUEsVUFDUjtBQUFBLFVBQ0EsYUFBYTtBQUFBLFlBQ1osVUFBVTtBQUFBLFlBQ1YsT0FBTztBQUFBLFVBQ1I7QUFBQSxVQUNBLGVBQWU7QUFBQSxZQUNkLFVBQVU7QUFBQSxZQUNWLE9BQU87QUFBQSxVQUNSO0FBQUEsUUFDRCxDQUFDO0FBQ0QsWUFBSSxDQUFDLFFBQVM7QUFDZCxpQkFBUyxRQUFRLEVBQUU7QUFDbkIsZ0JBQVEsR0FBRyxRQUFRLEtBQUssT0FBTyxLQUFLLElBQUksQ0FBQztBQUN6QyxnQkFBUSxHQUFHLFdBQVcsS0FBSyxVQUFVLEtBQUssSUFBSSxDQUFDO0FBQy9DLGdCQUFRLEdBQUcsVUFBVSxLQUFLLFNBQVMsS0FBSyxJQUFJLENBQUM7QUFBQSxNQUM5QztBQUVBLGFBQU8saUJBQWlCQSxVQUFTLFdBQVcsT0FBTyxPQUFPO0FBQUEsUUFDekQsYUFBYTtBQUFBLFVBQ1osT0FBT0E7QUFBQSxVQUNQLGNBQWM7QUFBQSxVQUNkLFlBQVk7QUFBQSxVQUNaLFVBQVU7QUFBQSxRQUNYO0FBQUEsUUFDQSxPQUFPO0FBQUEsVUFDTixPQUFPLFdBQVk7QUFDbEIsZ0JBQUk7QUFDSixnQkFBSSxDQUFDLEtBQUssU0FBVTtBQUNwQixnQkFBSSxLQUFLLFVBQVU7QUFDbEIsa0JBQUksS0FBSyxTQUFTLE1BQU07QUFDeEIsa0JBQUksTUFBTSxPQUFXLFFBQU87QUFBQSxZQUM3QjtBQUNBLGdCQUFJLEtBQUssZ0JBQWdCLEtBQUssU0FBUyxPQUFRLFFBQU8sS0FBSztBQUMzRCxpQkFBSyxRQUFRO0FBQUEsVUFDZDtBQUFBLFVBQ0EsY0FBYztBQUFBLFVBQ2QsWUFBWTtBQUFBLFVBQ1osVUFBVTtBQUFBLFFBQ1g7QUFBQSxRQUNBLE1BQU07QUFBQSxVQUNMLE9BQU8sV0FBWTtBQUNsQixtQkFBTyxLQUFLLGNBQWMsS0FBSyxNQUFNLENBQUM7QUFBQSxVQUN2QztBQUFBLFVBQ0EsY0FBYztBQUFBLFVBQ2QsWUFBWTtBQUFBLFVBQ1osVUFBVTtBQUFBLFFBQ1g7QUFBQSxRQUNBLGVBQWU7QUFBQSxVQUNkLE9BQU8sU0FBVSxHQUFHO0FBQ25CLGdCQUFJLE1BQU0sT0FBVyxRQUFPO0FBQUEsY0FDM0IsTUFBTTtBQUFBLGNBQ04sT0FBTztBQUFBLFlBQ1I7QUFDQSxtQkFBTztBQUFBLGNBQ04sTUFBTTtBQUFBLGNBQ04sT0FBTyxLQUFLLFNBQVMsQ0FBQztBQUFBLFlBQ3ZCO0FBQUEsVUFDRDtBQUFBLFVBQ0EsY0FBYztBQUFBLFVBQ2QsWUFBWTtBQUFBLFVBQ1osVUFBVTtBQUFBLFFBQ1g7QUFBQSxRQUNBLFVBQVU7QUFBQSxVQUNULE9BQU8sU0FBVSxHQUFHO0FBQ25CLG1CQUFPLEtBQUssU0FBUyxDQUFDO0FBQUEsVUFDdkI7QUFBQSxVQUNBLGNBQWM7QUFBQSxVQUNkLFlBQVk7QUFBQSxVQUNaLFVBQVU7QUFBQSxRQUNYO0FBQUEsUUFDQSxTQUFTO0FBQUEsVUFDUixPQUFPLFdBQVk7QUFDbEIsaUJBQUssV0FBVztBQUNoQixtQkFBTyxLQUFLO0FBQ1osZ0JBQUksQ0FBQyxLQUFLLFlBQWE7QUFDdkIsaUJBQUssWUFBWSxJQUFJLFFBQVEsS0FBSyxPQUFPLEtBQUssSUFBSSxDQUFDO0FBQ25ELGlCQUFLLFlBQVksSUFBSSxXQUFXLEtBQUssVUFBVSxLQUFLLElBQUksQ0FBQztBQUN6RCxpQkFBSyxZQUFZLElBQUksVUFBVSxLQUFLLFNBQVMsS0FBSyxJQUFJLENBQUM7QUFDdkQsaUJBQUssY0FBYztBQUFBLFVBQ3BCO0FBQUEsVUFDQSxjQUFjO0FBQUEsVUFDZCxZQUFZO0FBQUEsVUFDWixVQUFVO0FBQUEsUUFDWDtBQUFBLFFBQ0EsVUFBVTtBQUFBLFVBQ1QsT0FBTyxXQUFZO0FBQ2xCLG1CQUFPO0FBQUEsVUFDUjtBQUFBLFVBQ0EsY0FBYztBQUFBLFVBQ2QsWUFBWTtBQUFBLFVBQ1osVUFBVTtBQUFBLFFBQ1g7QUFBQSxNQUNELEdBQUc7QUFBQSxRQUNGLFFBQVE7QUFBQSxVQUNQLE9BQU8sU0FBVSxPQUFPO0FBQ3ZCLGdCQUFJLFNBQVMsS0FBSyxjQUFlO0FBQ2pDLGNBQUUsS0FBSztBQUNQLGdCQUFJLENBQUMsS0FBSyxVQUFVO0FBQ25CLHFCQUFPLGVBQWUsTUFBTSxZQUFZO0FBQUEsZ0JBQ3ZDLE9BQU8sQ0FBQyxLQUFLO0FBQUEsZ0JBQ2IsY0FBYztBQUFBLGdCQUNkLFlBQVk7QUFBQSxnQkFDWixVQUFVO0FBQUEsY0FDWCxDQUFDO0FBQ0Q7QUFBQSxZQUNEO0FBQ0EsaUJBQUssU0FBUyxRQUFRLFNBQVUsTUFBTSxHQUFHO0FBQ3hDLGtCQUFJLFFBQVEsTUFBTyxNQUFLLFNBQVMsQ0FBQyxJQUFJLEVBQUU7QUFBQSxZQUN6QyxHQUFHLElBQUk7QUFDUCxpQkFBSyxTQUFTLEtBQUssS0FBSztBQUFBLFVBQ3pCO0FBQUEsVUFDQSxjQUFjO0FBQUEsVUFDZCxZQUFZO0FBQUEsVUFDWixVQUFVO0FBQUEsUUFDWDtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1YsT0FBTyxTQUFVLE9BQU87QUFDdkIsZ0JBQUk7QUFDSixnQkFBSSxTQUFTLEtBQUssY0FBZTtBQUNqQyxjQUFFLEtBQUs7QUFDUCxnQkFBSSxDQUFDLEtBQUssU0FBVTtBQUNwQixnQkFBSSxLQUFLLFNBQVMsUUFBUSxLQUFLO0FBQy9CLGdCQUFJLE1BQU0sR0FBSSxNQUFLLFNBQVMsT0FBTyxHQUFHLENBQUM7QUFDdkMsaUJBQUssU0FBUyxRQUFRLFNBQVUsTUFBTUMsSUFBRztBQUN4QyxrQkFBSSxPQUFPLE1BQU8sTUFBSyxTQUFTQSxFQUFDLElBQUksRUFBRTtBQUFBLFlBQ3hDLEdBQUcsSUFBSTtBQUFBLFVBQ1I7QUFBQSxVQUNBLGNBQWM7QUFBQSxVQUNkLFlBQVk7QUFBQSxVQUNaLFVBQVU7QUFBQSxRQUNYO0FBQUEsUUFDQSxVQUFVO0FBQUEsVUFDVCxPQUFPLFdBQVk7QUFDbEIsZ0JBQUksS0FBSyxTQUFVLE9BQU0sS0FBSyxLQUFLLFFBQVE7QUFDM0MsaUJBQUssZ0JBQWdCO0FBQUEsVUFDdEI7QUFBQSxVQUNBLGNBQWM7QUFBQSxVQUNkLFlBQVk7QUFBQSxVQUNaLFVBQVU7QUFBQSxRQUNYO0FBQUEsTUFDRCxDQUFDLENBQUM7QUFFRixhQUFPLGVBQWVELFVBQVMsV0FBVyxPQUFPLFVBQVU7QUFBQSxRQUMxRCxPQUFPLFdBQVk7QUFDbEIsaUJBQU87QUFBQSxRQUNSO0FBQUEsUUFDQSxjQUFjO0FBQUEsUUFDZCxZQUFZO0FBQUEsUUFDWixVQUFVO0FBQUEsTUFDWCxDQUFDO0FBQ0QsYUFBTyxlQUFlQSxVQUFTLFdBQVcsT0FBTyxhQUFhO0FBQUEsUUFDN0QsT0FBTztBQUFBLFFBQ1AsY0FBYztBQUFBLFFBQ2QsWUFBWTtBQUFBLFFBQ1osVUFBVTtBQUFBLE1BQ1gsQ0FBQztBQUVELGFBQU9BO0FBQUEsSUFDUixFQUFFO0FBQ0YsSUFBTyxtQkFBUTtBQUFBO0FBQUE7OztBQ3ZMZixJQU9JLGVBc0RHO0FBN0RQO0FBQUE7QUFBQTtBQU9BLElBQUksZ0JBQWlCLFdBQVc7QUFFL0IsVUFBSUUsaUJBQWdCLFNBQVMsS0FBSyxNQUFNO0FBQ3ZDLFlBQUksRUFBRSxnQkFBZ0JBLGdCQUFnQixRQUFPLElBQUlBLGVBQWMsS0FBSyxJQUFJO0FBQ3hFLHlCQUFTLEtBQUssTUFBTSxHQUFHO0FBQ3ZCLFlBQUksQ0FBQyxLQUFNLFFBQU87QUFBQSxpQkFDVCxPQUFPLFVBQVUsU0FBUyxLQUFLLE1BQU0sV0FBVyxFQUFHLFFBQU87QUFBQSxpQkFDMUQsT0FBTyxVQUFVLFNBQVMsS0FBSyxNQUFNLEtBQUssRUFBRyxRQUFPO0FBQUEsWUFDeEQsUUFBTztBQUNaLGVBQU8sZUFBZSxNQUFNLFlBQVk7QUFBQSxVQUN2QyxPQUFPO0FBQUEsVUFDUCxjQUFjO0FBQUEsVUFDZCxZQUFZO0FBQUEsVUFDWixVQUFVO0FBQUEsUUFDWCxDQUFDO0FBQUEsTUFDRjtBQUNBLFVBQUksT0FBTyxlQUFnQixRQUFPLGVBQWVBLGdCQUFlLGlCQUFTLFNBQVM7QUFFbEYsTUFBQUEsZUFBYyxZQUFZLE9BQU8sT0FBTyxpQkFBUyxXQUFXO0FBQUEsUUFDM0QsYUFBYTtBQUFBLFVBQ1osT0FBT0E7QUFBQSxVQUNQLGNBQWM7QUFBQSxVQUNkLFlBQVk7QUFBQSxVQUNaLFVBQVU7QUFBQSxRQUNYO0FBQUEsUUFDQSxVQUFVO0FBQUEsVUFDVCxPQUFPLFNBQVMsR0FBRztBQUNsQixnQkFBSSxLQUFLLGFBQWEsUUFBUyxRQUFPLEtBQUssU0FBUyxDQUFDO0FBQ3JELGdCQUFJLEtBQUssYUFBYSxZQUFhLFFBQU8sQ0FBQyxHQUFHLEtBQUssU0FBUyxDQUFDLENBQUM7QUFDOUQsbUJBQU87QUFBQSxVQUNSO0FBQUEsVUFDQSxjQUFjO0FBQUEsVUFDZCxZQUFZO0FBQUEsVUFDWixVQUFVO0FBQUEsUUFDWDtBQUFBLFFBQ0EsVUFBVTtBQUFBLFVBQ1QsT0FBTyxXQUFXO0FBQ2pCLG1CQUFPO0FBQUEsVUFDUjtBQUFBLFVBQ0EsY0FBYztBQUFBLFVBQ2QsWUFBWTtBQUFBLFVBQ1osVUFBVTtBQUFBLFFBQ1g7QUFBQSxNQUNELENBQUM7QUFFRCxhQUFPLGVBQWVBLGVBQWMsV0FBVyxPQUFPLGFBQWE7QUFBQSxRQUNsRSxPQUFPO0FBQUEsUUFDUCxVQUFVO0FBQUEsUUFDVixZQUFZO0FBQUEsUUFDWixjQUFjO0FBQUEsTUFDZixDQUFDO0FBRUQsYUFBT0E7QUFBQSxJQUNSLEVBQUU7QUFDRixJQUFPLHdCQUFRO0FBQUE7QUFBQTs7O0FDN0RmO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQSxLQUFDLFNBQVNDLFlBQVc7QUFDckIsVUFBSSxFQUFFLFlBQVcsUUFBTSxjQUFhLEtBQUssVUFBUSxXQUFVO0FBQUMsWUFBSSxJQUFFLFNBQVMsdUJBQXVCO0FBQ2xHLGVBQU8sRUFBRSxZQUFZLFNBQVMsY0FBYyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsRUFBRSxXQUFXLEtBQUssT0FBTyxRQUFRO0FBQUEsTUFBQyxFQUFFLElBQ3ZGO0FBR0gsaUJBQVMsVUFBVSxPQUFPLFFBQVEsSUFBSSxXQUFZO0FBQ2pELGlCQUFPLElBQUksc0JBQWMsSUFBSTtBQUFBLFFBQzlCO0FBQUEsTUFDQTtBQUFBLElBQUMsR0FBRyxLQUFLLGFBQWEsT0FBTyxVQUFVLFVBQVUsYUFBYSxPQUFPLFFBQVEsUUFBUSxhQUFhLE9BQU8sVUFBVSxVQUFVLENBQUMsQ0FBQztBQUFBO0FBQUE7OztBQ1gvSDtBQUFBO0FBQUEsS0FBQyxTQUFTQyxZQUFXO0FBQ3JCLFVBQUksQ0FBRyxXQUFVO0FBQUMsWUFBRyxFQUFFLFdBQVUsTUFBTSxRQUFNO0FBQzdDLFlBQUc7QUFBQyxpQkFBTyxJQUFJLE1BQU0sT0FBTyxHQUFFO0FBQUEsUUFBRSxTQUFPLEdBQUU7QUFBQyxpQkFBTTtBQUFBLFFBQUU7QUFBQSxNQUFDLEVBQUcsR0FDbkQ7QUFFSCxTQUFDLFdBQVk7QUFJWixjQUFJLE9BQU8sYUFBYSxlQUFlLE9BQU8sV0FBVyxZQUFhO0FBRXRFLGNBQUksZ0JBQWlCLE9BQU8sU0FBUyxPQUFPLE1BQU0sYUFBYztBQUNoRSxtQkFBU0MsT0FBTSxNQUFNLGVBQWU7QUFDbkMsZ0JBQUksQ0FBQyxNQUFNO0FBQ1Ysb0JBQU0sSUFBSSxNQUFNLHNCQUFzQjtBQUFBLFlBQ3ZDO0FBRUEsZ0JBQUk7QUFFSixnQkFBSSxpQkFBaUIsVUFBVTtBQUM5QixzQkFBUSxTQUFTLFlBQVksT0FBTztBQUNwQyxrQkFBSSxVQUFVLGlCQUFpQixjQUFjLFlBQVlELGFBQVksY0FBYyxVQUFVO0FBQzdGLGtCQUFJLGFBQWEsaUJBQWlCLGNBQWMsZUFBZUEsYUFBWSxjQUFjLGFBQWE7QUFFdEcsb0JBQU0sVUFBVSxNQUFNLFNBQVMsVUFBVTtBQUV6QyxxQkFBTztBQUFBLFlBQ1I7QUFFQSxvQkFBUSxTQUFTLGtCQUFrQjtBQUVuQyxrQkFBTSxPQUFPO0FBQ2Isa0JBQU0sVUFBVSxpQkFBaUIsY0FBYyxZQUFZQSxhQUFZLGNBQWMsVUFBVTtBQUMvRixrQkFBTSxhQUFhLGlCQUFpQixjQUFjLGVBQWVBLGFBQVksY0FBYyxhQUFhO0FBRXhHLG1CQUFPO0FBQUEsVUFDUjtBQUNBLFVBQUFDLE9BQU0sT0FBTztBQUNiLFVBQUFBLE9BQU0sa0JBQWtCO0FBQ3hCLFVBQUFBLE9BQU0sWUFBWTtBQUNsQixVQUFBQSxPQUFNLGlCQUFpQjtBQUN2QixpQkFBTyxRQUFRLE9BQU8sVUFBVSxRQUFRQTtBQUN4QyxjQUFJLGVBQWU7QUFDbEIsbUJBQU8sZUFBZSxPQUFPLE9BQU8sYUFBYTtBQUFBLGNBQ2hELGNBQWM7QUFBQSxjQUNkLFlBQVk7QUFBQSxjQUNaLFVBQVU7QUFBQSxjQUNWLE9BQU87QUFBQSxZQUNSLENBQUM7QUFBQSxVQUNGO0FBRUEsY0FBSSxFQUFFLGlCQUFpQixXQUFXO0FBQ2pDLG1CQUFPLG1CQUFtQixPQUFPLFVBQVUsbUJBQW1CLFNBQVMsVUFBVSxtQkFBbUIsUUFBUSxVQUFVLG1CQUFtQixTQUFTLG1CQUFtQjtBQUNwSyxrQkFDQSxVQUFVLE1BQ1YsT0FBTyxVQUFVLENBQUMsR0FDbEIsV0FBVyxVQUFVLENBQUM7QUFFdEIsa0JBQUksQ0FBQyxRQUFRLFNBQVM7QUFDckIsd0JBQVEsVUFBVSxDQUFDO0FBQUEsY0FDcEI7QUFFQSxrQkFBSSxDQUFDLFFBQVEsUUFBUSxJQUFJLEdBQUc7QUFDM0Isd0JBQVEsUUFBUSxJQUFJLElBQUksU0FBVSxPQUFPO0FBQ3hDLHNCQUNBLE9BQU8sUUFBUSxRQUFRLE1BQU0sSUFBSSxFQUFFLE1BQ25DLFNBQVMsS0FBSyxNQUFNLEdBQ3BCLFFBQVEsSUFDUixTQUFTLE9BQU8sUUFDaEI7QUFFQSx3QkFBTSxpQkFBaUIsU0FBU0Msa0JBQWlCO0FBQ2hELHdCQUFJLE1BQU0sZUFBZSxPQUFPO0FBQy9CLDRCQUFNLGNBQWM7QUFBQSxvQkFDckI7QUFBQSxrQkFDRDtBQUVBLHdCQUFNLGtCQUFrQixTQUFTQyxtQkFBa0I7QUFDbEQsMEJBQU0sZUFBZTtBQUFBLGtCQUN0QjtBQUVBLHdCQUFNLDJCQUEyQixTQUFTLDJCQUEyQjtBQUNwRSwwQkFBTSxlQUFlO0FBQ3JCLDBCQUFNLGtCQUFrQjtBQUFBLGtCQUN6QjtBQUVBLHdCQUFNLGdCQUFnQjtBQUN0Qix3QkFBTSxnQkFBZ0IsTUFBTSxlQUFlO0FBQzNDLHdCQUFNLFNBQVMsTUFBTSxVQUFVLE1BQU0sY0FBYztBQUNuRCx3QkFBTSxhQUFZLG9CQUFJLEtBQUssR0FBRSxRQUFRO0FBRXJDLHNCQUFJLE1BQU0sU0FBUztBQUNsQiwwQkFBTSxRQUFRLE1BQU0sVUFBVSxTQUFTLGdCQUFnQjtBQUN2RCwwQkFBTSxRQUFRLE1BQU0sVUFBVSxTQUFTLGdCQUFnQjtBQUFBLGtCQUN4RDtBQUVBLHlCQUFPLEVBQUUsUUFBUSxVQUFVLENBQUMsTUFBTSxpQkFBaUI7QUFDbEQsd0JBQUksU0FBUyxRQUFRO0FBQ3BCLHFDQUFlLE9BQU8sS0FBSztBQUUzQiwwQkFBSSxLQUFLLFNBQVMsWUFBWSxLQUFLLE9BQU8saUJBQWlCLFlBQVk7QUFDdEUscUNBQWEsS0FBSyxTQUFTLEtBQUs7QUFBQSxzQkFDakM7QUFBQSxvQkFDRDtBQUFBLGtCQUNEO0FBQUEsZ0JBQ0Q7QUFFQSx3QkFBUSxRQUFRLElBQUksRUFBRSxPQUFPLENBQUM7QUFFOUIsb0JBQUksUUFBUSxhQUFhO0FBQ3hCLDBCQUFRLFlBQVksT0FBTyxNQUFNLFFBQVEsUUFBUSxJQUFJLENBQUM7QUFBQSxnQkFDdkQ7QUFBQSxjQUNEO0FBRUEsc0JBQVEsUUFBUSxJQUFJLEVBQUUsS0FBSyxLQUFLLFFBQVE7QUFBQSxZQUN6QztBQUVBLG1CQUFPLHNCQUFzQixPQUFPLFVBQVUsc0JBQXNCLFNBQVMsVUFBVSxzQkFBc0IsUUFBUSxVQUFVLHNCQUFzQixTQUFTLHNCQUFzQjtBQUNuTCxrQkFDQSxVQUFVLE1BQ1YsT0FBTyxVQUFVLENBQUMsR0FDbEIsV0FBVyxVQUFVLENBQUMsR0FDdEI7QUFFQSxrQkFBSSxRQUFRLFdBQVcsUUFBUSxRQUFRLElBQUksS0FBSyxRQUFRLFFBQVEsSUFBSSxFQUFFLE1BQU07QUFDM0Usd0JBQVEsUUFBUSxRQUFRLElBQUksRUFBRSxLQUFLLFFBQVEsUUFBUTtBQUVuRCxvQkFBSSxVQUFVLElBQUk7QUFDakIsMEJBQVEsUUFBUSxJQUFJLEVBQUUsS0FBSyxPQUFPLE9BQU8sQ0FBQztBQUUxQyxzQkFBSSxDQUFDLFFBQVEsUUFBUSxJQUFJLEVBQUUsS0FBSyxRQUFRO0FBQ3ZDLHdCQUFJLFFBQVEsYUFBYTtBQUN4Qiw4QkFBUSxZQUFZLE9BQU8sTUFBTSxRQUFRLFFBQVEsSUFBSSxDQUFDO0FBQUEsb0JBQ3ZEO0FBQ0EsMkJBQU8sUUFBUSxRQUFRLElBQUk7QUFBQSxrQkFDNUI7QUFBQSxnQkFDRDtBQUFBLGNBQ0Q7QUFBQSxZQUNEO0FBRUEsbUJBQU8sZ0JBQWdCLE9BQU8sVUFBVSxnQkFBZ0IsU0FBUyxVQUFVLGdCQUFnQixRQUFRLFVBQVUsZ0JBQWdCLFNBQVMsY0FBYyxPQUFPO0FBQzFKLGtCQUFJLENBQUMsVUFBVSxRQUFRO0FBQ3RCLHNCQUFNLElBQUksTUFBTSxzQkFBc0I7QUFBQSxjQUN2QztBQUVBLGtCQUFJLENBQUMsU0FBUyxPQUFPLE1BQU0sU0FBUyxVQUFVO0FBQzdDLHNCQUFNLElBQUksTUFBTSx3QkFBd0I7QUFBQSxjQUN6QztBQUVBLGtCQUFJLFVBQVUsTUFBTSxPQUFPLE1BQU07QUFFakMsa0JBQUk7QUFDSCxvQkFBSSxDQUFDLE1BQU0sU0FBUztBQUNuQix3QkFBTSxlQUFlO0FBRXJCLHNCQUFJLG9CQUFvQixTQUFVQyxRQUFPO0FBQ3hDLG9CQUFBQSxPQUFNLGVBQWU7QUFFckIscUJBQUMsV0FBVyxRQUFRLFlBQVksT0FBTyxNQUFNLGlCQUFpQjtBQUFBLGtCQUMvRDtBQUVBLHVCQUFLLFlBQVksT0FBTyxNQUFNLGlCQUFpQjtBQUFBLGdCQUNoRDtBQUVBLHFCQUFLLFVBQVUsT0FBTyxNQUFNLEtBQUs7QUFBQSxjQUNsQyxTQUFTLE9BQU87QUFDZixzQkFBTSxTQUFTO0FBRWYsbUJBQUc7QUFDRix3QkFBTSxnQkFBZ0I7QUFFdEIsc0JBQUksYUFBYSxXQUFXLE9BQU8sUUFBUSxRQUFRLElBQUksTUFBTSxZQUFZO0FBQ3hFLDRCQUFRLFFBQVEsSUFBSSxFQUFFLEtBQUssU0FBUyxLQUFLO0FBQUEsa0JBQzFDO0FBRUEsc0JBQUksT0FBTyxRQUFRLE9BQU8sSUFBSSxNQUFNLFlBQVk7QUFDL0MsNEJBQVEsT0FBTyxJQUFJLEVBQUUsS0FBSyxTQUFTLEtBQUs7QUFBQSxrQkFDekM7QUFFQSw0QkFBVSxRQUFRLGFBQWEsSUFBSSxRQUFRLGVBQWUsUUFBUTtBQUFBLGdCQUNuRSxTQUFTLFdBQVcsQ0FBQyxNQUFNO0FBQUEsY0FDNUI7QUFFQSxxQkFBTztBQUFBLFlBQ1I7QUFHQSxxQkFBUyxZQUFZLHNCQUFzQixXQUFXO0FBQ3JELGtCQUFJLFNBQVMsZUFBZSxZQUFZO0FBQ3ZDLHlCQUFTLGNBQWMsSUFBSUgsT0FBTSxvQkFBb0I7QUFBQSxrQkFDcEQsU0FBUztBQUFBLGdCQUNWLENBQUMsQ0FBQztBQUFBLGNBQ0g7QUFBQSxZQUNELENBQUM7QUFBQSxVQUNGO0FBQUEsUUFDRCxHQUFFO0FBQUEsTUFDRjtBQUFBLElBQUMsR0FBRyxLQUFLLGFBQWEsT0FBTyxVQUFVLFVBQVUsYUFBYSxPQUFPLFFBQVEsUUFBUSxhQUFhLE9BQU8sVUFBVSxVQUFVLENBQUMsQ0FBQztBQUFBO0FBQUE7OztBQ3BNL0g7QUFBQTtBQUFBLEtBQUMsU0FBU0ksWUFBVztBQUNyQixVQUFJLEVBQUUsaUJBQWdCLFNBQU8sY0FBWSxPQUFPLEtBQUssZUFBYSxLQUFHLEtBQUssWUFBWSxTQUFTLEVBQUUsUUFBUSx3QkFBd0IsS0FDOUg7QUFFSCxhQUFLLGNBQWMsU0FBU0MsYUFBWSxNQUFNLGVBQWU7QUFDNUQsY0FBSSxDQUFDLE1BQU07QUFDVixrQkFBTSxNQUFNLCtFQUErRTtBQUFBLFVBQzVGO0FBRUEsY0FBSTtBQUNKLDBCQUFnQixpQkFBaUIsRUFBQyxTQUFTLE9BQU8sWUFBWSxPQUFPLFFBQVEsS0FBSTtBQUVqRixjQUFJO0FBQ0gsb0JBQVEsU0FBUyxZQUFZLGFBQWE7QUFDMUMsa0JBQU0sZ0JBQWdCLE1BQU0sY0FBYyxTQUFTLGNBQWMsWUFBWSxjQUFjLE1BQU07QUFBQSxVQUNsRyxTQUFTLE9BQU87QUFFZixvQkFBUSxTQUFTLFlBQVksT0FBTztBQUNwQyxrQkFBTSxVQUFVLE1BQU0sY0FBYyxTQUFTLGNBQWMsVUFBVTtBQUNyRSxrQkFBTSxTQUFTLGNBQWM7QUFBQSxVQUM5QjtBQUNBLGlCQUFPO0FBQUEsUUFDUjtBQUVBLG9CQUFZLFlBQVksTUFBTTtBQUFBLE1BQzlCO0FBQUEsSUFBQyxHQUFHLEtBQUssYUFBYSxPQUFPLFVBQVUsVUFBVSxhQUFhLE9BQU8sUUFBUSxRQUFRLGFBQWEsT0FBTyxVQUFVLFVBQVUsQ0FBQyxDQUFDO0FBQUE7QUFBQTs7O0FDekIvSDtBQUFBO0FBQUEsS0FBQyxTQUFTQyxZQUFXO0FBQ3JCLFVBQUksRUFBRSxzQkFBcUIsUUFBTSxXQUFVO0FBQUMsWUFBRztBQUFDLGlCQUFPLElBQUksb0JBQWlCO0FBQUEsUUFBRSxTQUFPLEdBQUU7QUFBQyxpQkFBTTtBQUFBLFFBQUU7QUFBQSxNQUFDLEVBQUUsSUFDaEc7QUFFSCxTQUFDLFNBQVVDLFNBQVE7QUFDbEIsVUFBQUEsUUFBTyxtQkFBbUIsU0FBU0Msb0JBQW1CO0FBQ3JELG1CQUFPLFNBQVMsdUJBQXVCO0FBQUEsVUFDeEM7QUFFQSxjQUFJLFdBQVcsU0FBUyx1QkFBdUI7QUFDL0MsVUFBQUQsUUFBTyxpQkFBaUIsWUFBWSxPQUFPLE9BQU8sU0FBUyxZQUFZLFNBQVM7QUFBQSxRQUNqRixHQUFFLElBQUk7QUFBQSxNQUNOO0FBQUEsSUFBQyxHQUFHLEtBQUssYUFBYSxPQUFPLFVBQVUsVUFBVSxhQUFhLE9BQU8sUUFBUSxRQUFRLGFBQWEsT0FBTyxVQUFVLFVBQVUsQ0FBQyxDQUFDO0FBQUE7QUFBQTs7O0FDWi9IO0FBQUE7QUFBQSxLQUFDLFNBQVNFLFlBQVc7QUFDckIsVUFBSSxFQUFFLGNBQWEsUUFBTSxhQUFZLFNBQVMsa0JBQzNDO0FBRUgsZ0JBQVEsVUFBVSxVQUFVLFFBQVEsVUFBVSx5QkFBeUIsUUFBUSxVQUFVLG9CQUFvQixRQUFRLFVBQVUscUJBQXFCLFFBQVEsVUFBVSxzQkFBc0IsU0FBUyxRQUFRLFVBQVU7QUFFdE4sY0FBSSxVQUFVO0FBQ2QsY0FBSSxZQUFZLFFBQVEsWUFBWSxRQUFRLGVBQWUsaUJBQWlCLFFBQVE7QUFDcEYsY0FBSSxRQUFRO0FBRVosaUJBQU8sU0FBUyxLQUFLLEtBQUssU0FBUyxLQUFLLE1BQU0sU0FBUztBQUN0RCxjQUFFO0FBQUEsVUFDSDtBQUVBLGlCQUFPLENBQUMsQ0FBQyxTQUFTLEtBQUs7QUFBQSxRQUN4QjtBQUFBLE1BQ0E7QUFBQSxJQUFDLEdBQUcsS0FBSyxhQUFhLE9BQU8sVUFBVSxVQUFVLGFBQWEsT0FBTyxRQUFRLFFBQVEsYUFBYSxPQUFPLFVBQVUsVUFBVSxDQUFDLENBQUM7QUFBQTtBQUFBOzs7QUNoQi9IO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFXQSxLQUFDLFdBQVk7QUFDWDtBQUVBLFVBQUksZ0JBQWdCLE9BQU8sd0JBQXdCO0FBQ25ELFVBQUksb0JBQW9CLEVBQ3RCLFNBQVMsdUJBQXVCLEVBQUUsVUFBVSxhQUFhO0FBRTNELFVBQUksZUFBZTtBQU1uQixVQUFJLFVBQVUsS0FBSyxVQUFVLFNBQVMsR0FBRztBQUN2QyxTQUFDLFdBQVk7QUFDWCx5QkFBZTtBQUVmLGNBQUksZ0JBQWdCLEtBQUssVUFBVTtBQUNuQyxlQUFLLFVBQVUsWUFBWSxTQUFTQyxXQUFVLE1BQU07QUFDbEQsZ0JBQUksU0FBUyxjQUFjLEtBQUssTUFBTSxJQUFJO0FBQzFDLGdCQUFJLGdCQUFnQixrQkFBa0I7QUFDcEMscUJBQU8sWUFBWSxpQkFBaUI7QUFBQSxZQUN0QztBQUNBLG1CQUFPO0FBQUEsVUFDVDtBQUlBLDJCQUFpQixVQUFVLG1CQUN6QixZQUFZLFVBQVU7QUFDeEIsMkJBQWlCLFVBQVUsZ0JBQ3pCLFlBQVksVUFBVTtBQUV4QixpQkFBTyxpQkFBaUIsaUJBQWlCLFdBQVc7QUFBQSxZQUNsRCxZQUFZO0FBQUEsY0FDVixLQUFLLFdBQVk7QUFDZix1QkFBTyxLQUFLO0FBQUEsY0FDZDtBQUFBLGNBQ0EsY0FBYztBQUFBLFlBQ2hCO0FBQUEsWUFFQSxhQUFhO0FBQUEsY0FDWCxLQUFLLFdBQVk7QUFDZix1QkFBTztBQUFBLGNBQ1Q7QUFBQSxjQUNBLGNBQWM7QUFBQSxZQUNoQjtBQUFBLFlBRUEsWUFBWTtBQUFBLGNBQ1YsS0FBSyxXQUFZO0FBQ2YsdUJBQU87QUFBQSxjQUNUO0FBQUEsY0FDQSxjQUFjO0FBQUEsWUFDaEI7QUFBQSxVQUNGLENBQUM7QUFFRCxjQUFJLG1CQUFtQixLQUFLLFVBQVU7QUFDdEMsbUJBQVMsYUFBYSxTQUFTLFNBQVM7QUFDdEMsZ0JBQUksbUJBQW1CLGtCQUFrQjtBQUN2QyxrQkFBSTtBQUNKLHFCQUFRLFFBQVEsUUFBUSxZQUFhO0FBQ25DLGlDQUFpQixLQUFLLE1BQU0sT0FBTyxPQUFPO0FBQUEsY0FDNUM7QUFBQSxZQUNGLE9BQU87QUFDTCwrQkFBaUIsS0FBSyxNQUFNLFNBQVMsT0FBTztBQUFBLFlBQzlDO0FBQ0EsbUJBQU87QUFBQSxVQUNUO0FBQ0EsZUFBSyxVQUFVLGVBQWU7QUFFOUIsY0FBSSxrQkFBa0IsS0FBSyxVQUFVO0FBQ3JDLGVBQUssVUFBVSxjQUFjLFNBQVNDLGFBQVksT0FBTztBQUN2RCxnQkFBSSxpQkFBaUIsa0JBQWtCO0FBQ3JDLDJCQUFhLEtBQUssTUFBTSxPQUFPLElBQUk7QUFBQSxZQUNyQyxPQUFPO0FBQ0wsOEJBQWdCLEtBQUssTUFBTSxLQUFLO0FBQUEsWUFDbEM7QUFDQSxtQkFBTztBQUFBLFVBQ1Q7QUFFQSxjQUFJLGtCQUFrQixLQUFLLFVBQVU7QUFDckMsY0FBSSxtQkFBbUIsS0FBSyxVQUFVO0FBQ3RDLGVBQUssVUFBVSxlQUFlLFNBQVMsYUFBYSxVQUFVLFVBQVU7QUFDdEUsZ0JBQUksb0JBQW9CLGtCQUFrQjtBQUN4QywyQkFBYSxLQUFLLE1BQU0sVUFBVSxRQUFRO0FBQzFDLDhCQUFnQixLQUFLLE1BQU0sUUFBUTtBQUFBLFlBQ3JDLE9BQU87QUFDTCwrQkFBaUIsS0FBSyxNQUFNLFVBQVUsUUFBUTtBQUFBLFlBQ2hEO0FBQ0EsbUJBQU87QUFBQSxVQUNUO0FBRUEsbUJBQVMsVUFBVSx5QkFBeUIsU0FBUyx5QkFBeUI7QUFDNUUsZ0JBQUksT0FBTyxLQUFLLGNBQWMsSUFBSTtBQUNsQyxpQkFBSyxZQUFZLGlCQUFpQjtBQUNsQyxtQkFBTztBQUFBLFVBQ1Q7QUFFQSxjQUFJLGlCQUFpQixTQUFTLFVBQVU7QUFDeEMsbUJBQVMsVUFBVSxhQUFhLFNBQVNDLFlBQVcsU0FBUyxNQUFNO0FBQ2pFLG1CQUFPLFFBQVE7QUFDZixnQkFBSSxVQUFVLGVBQWUsS0FBSyxNQUFNLFNBQVMsSUFBSTtBQUNyRCxnQkFBSSxtQkFBbUIsa0JBQWtCO0FBQ3ZDLHNCQUFRLFlBQVksaUJBQWlCO0FBQUEsWUFDdkM7QUFDQSxtQkFBTztBQUFBLFVBQ1Q7QUFBQSxRQUNGLEdBQUc7QUFBQSxNQUNMO0FBTUEsVUFBSSxvQkFBb0IsS0FBSyxVQUFVO0FBQ3ZDLFVBQUksd0JBQXdCLFNBQVMsVUFBVTtBQUMvQyxVQUFJLHFCQUFxQixTQUFTLFVBQVU7QUFDNUMsVUFBSSxzQkFBc0IsS0FBSyxVQUFVO0FBQ3pDLFVBQUksc0JBQXNCLEtBQUssVUFBVTtBQUN6QyxVQUFJLHVCQUF1QixLQUFLLFVBQVU7QUFDMUMsVUFBSSwwQkFBMEIsVUFBVSxVQUFVO0FBQ2xELFVBQUksK0JBQStCLE9BQU87QUFBQSxRQUN4QyxPQUFPLFlBQVk7QUFBQSxRQUNuQjtBQUFBLE1BQ0YsS0FBSztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFLSCxLQUFLLFdBQVk7QUFDZixpQkFBTyxLQUFLO0FBQUEsUUFDZDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFLQSxLQUFLLFNBQVUsTUFBTTtBQUNuQixlQUFLLFlBQVk7QUFBQSxRQUNuQjtBQUFBLE1BQ0Y7QUFDQSxVQUFJLHFCQUFxQixPQUFPO0FBQUEsUUFDOUIsT0FBTyxLQUFLO0FBQUEsUUFDWjtBQUFBLE1BQ0YsS0FBSztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFLSCxLQUFLLFdBQVk7QUFDZixpQkFBTyxLQUFLO0FBQUEsUUFDZDtBQUFBLE1BQ0Y7QUFFQSxVQUFJLDBCQUEwQixRQUFRLFVBQVU7QUFDaEQsVUFBSSxzQkFBc0IsU0FBUyxVQUFVO0FBQzdDLFVBQUksdUJBQXVCLGlCQUFpQixVQUFVO0FBRXRELFVBQUksaUJBQ0Y7QUFFRixlQUFTLElBQUksTUFBTSxVQUFVO0FBRTNCLFlBQUksQ0FBQyxLQUFLLFdBQVcsUUFBUTtBQUMzQixpQkFBTyxDQUFDO0FBQUEsUUFDVjtBQUNBLGdCQUFRLEtBQUssVUFBVTtBQUFBLFVBQ3JCLEtBQUssS0FBSztBQUNSLG1CQUFPLG9CQUFvQixLQUFLLE1BQU0sUUFBUTtBQUFBLFVBQ2hELEtBQUssS0FBSztBQUNSLG1CQUFPLHFCQUFxQixLQUFLLE1BQU0sUUFBUTtBQUFBLFVBQ2pEO0FBQ0UsbUJBQU8sd0JBQXdCLEtBQUssTUFBTSxRQUFRO0FBQUEsUUFDdEQ7QUFBQSxNQUNGO0FBS0EsVUFBSSxlQUFnQixXQUFZO0FBQzlCLFlBQUksQ0FBQyxlQUFlO0FBQ2xCLGNBQUksSUFBSSxTQUFTLGNBQWMsVUFBVTtBQUN6QyxjQUFJLEtBQUssU0FBUyxjQUFjLFVBQVU7QUFDMUMsYUFBRyxRQUFRLFlBQVksU0FBUyxjQUFjLEtBQUssQ0FBQztBQUNwRCxZQUFFLFFBQVEsWUFBWSxFQUFFO0FBQ3hCLGNBQUksUUFBUSxFQUFFLFVBQVUsSUFBSTtBQUM1QixpQkFDRSxNQUFNLFFBQVEsV0FBVyxXQUFXLEtBQ3BDLE1BQU0sUUFBUSxXQUFXLFFBQVEsV0FBVyxXQUFXLEtBQ3ZEO0FBQUEsUUFFSjtBQUFBLE1BQ0YsRUFBRztBQUVILFVBQUksZUFBZTtBQUNuQixVQUFJLGdDQUFnQyxXQUFZO0FBQUEsTUFBQztBQUVqRCxVQUFJLGVBQWU7QUFDakIsWUFBSSxhQUFhLFNBQVMsZUFBZSxtQkFBbUIsVUFBVTtBQUN0RSxZQUFJLGNBQWM7QUFFbEIsWUFBSSxnQkFBZ0IsU0FBUyxjQUFjLE9BQU87QUFDbEQsc0JBQWMsY0FBYyxlQUFlO0FBRTNDLFlBQUksT0FBTyxTQUFTO0FBQ3BCLGFBQUssYUFBYSxlQUFlLEtBQUssaUJBQWlCO0FBS3ZELHNDQUE4QixZQUFZLE9BQU87QUFBQSxVQUMvQyxZQUFZO0FBQUEsUUFDZDtBQUlBLFlBQUksZ0JBQWdCLENBQUMsU0FDbEIsY0FBYyxLQUFLLEVBQ25CLGVBQWUsV0FBVztBQU03QixzQ0FBOEIsV0FBVyxTQUFVLFVBQVU7QUFFM0QsY0FDRSxTQUFTLFdBQ1QsU0FBUyxpQkFBaUIsU0FBUyxnQkFBZ0IsY0FDbkQ7QUFDQTtBQUFBLFVBQ0Y7QUFDQSxtQkFBUyxVQUFVLFdBQVcsdUJBQXVCO0FBQ3JELGNBQUk7QUFDSixpQkFBUSxRQUFRLFNBQVMsWUFBYTtBQUNwQyxnQ0FBb0IsS0FBSyxTQUFTLFNBQVMsS0FBSztBQUFBLFVBQ2xEO0FBSUEsY0FBSSxlQUFlO0FBQ2pCLHFCQUFTLFlBQVksOEJBQThCO0FBQUEsVUFDckQsT0FBTztBQUNMLHFCQUFTLFlBQVksU0FBVSxNQUFNO0FBQ25DLHFCQUFPLDhCQUE4QixXQUFXLE1BQU0sSUFBSTtBQUFBLFlBQzVEO0FBR0EsZ0JBQUksYUFBYTtBQUNmLGtCQUFJO0FBQ0YsZ0NBQWdCLFFBQVE7QUFDeEIsZ0NBQWdCLFFBQVE7QUFBQSxjQUMxQixTQUFTLEtBQUs7QUFDWiw4QkFBYztBQUFBLGNBQ2hCO0FBQUEsWUFDRjtBQUFBLFVBQ0Y7QUFFQSx3Q0FBOEIsVUFBVSxTQUFTLE9BQU87QUFBQSxRQUMxRDtBQUdBLFlBQUksc0JBQXNCO0FBQUEsVUFDeEIsVUFBVSxDQUFDLFFBQVE7QUFBQSxVQUNuQixTQUFTLENBQUMsT0FBTztBQUFBLFVBQ2pCLE9BQU8sQ0FBQyxZQUFZLE9BQU87QUFBQSxVQUMzQixNQUFNLENBQUMsU0FBUyxPQUFPO0FBQUEsVUFDdkIsTUFBTSxDQUFDLE1BQU0sU0FBUyxPQUFPO0FBQUEsVUFDN0IsTUFBTSxDQUFDLE1BQU0sU0FBUyxPQUFPO0FBQUEsUUFDL0I7QUFFQSxZQUFJLGFBQWEsU0FBVSxNQUFNO0FBRS9CLGtCQUFRLGdDQUFnQyxLQUFLLElBQUksS0FBSztBQUFBLFlBQ3BEO0FBQUEsWUFDQTtBQUFBLFVBQ0YsR0FBRyxDQUFDLEVBQUUsWUFBWTtBQUFBLFFBQ3BCO0FBRUEsWUFBSSxrQkFBa0IsU0FBU0MsaUJBQWdCLEtBQUs7QUFDbEQsaUJBQU8sZUFBZSxLQUFLLGFBQWE7QUFBQSxZQUN0QyxLQUFLLFdBQVk7QUFDZixxQkFBTyxhQUFhLElBQUk7QUFBQSxZQUMxQjtBQUFBLFlBQ0EsS0FBSyxTQUFVLE1BQU07QUFFbkIsa0JBQUksT0FBTyxvQkFBb0IsV0FBVyxJQUFJLENBQUM7QUFDL0Msa0JBQUksTUFBTTtBQUNSLHlCQUFTLElBQUksR0FBRyxJQUFJLEtBQUssUUFBUSxLQUFLO0FBQ3BDLHlCQUFPLE1BQU0sS0FBSyxDQUFDLElBQUksTUFBTSxPQUFPLE9BQU8sS0FBSyxDQUFDLElBQUk7QUFBQSxnQkFDdkQ7QUFBQSxjQUNGO0FBQ0EseUJBQVcsS0FBSyxZQUFZO0FBQzVCLDRDQUE4QixVQUFVLFVBQVU7QUFDbEQscUJBQU8sS0FBSyxRQUFRLFlBQVk7QUFDOUIsb0NBQW9CLEtBQUssS0FBSyxTQUFTLEtBQUssUUFBUSxVQUFVO0FBQUEsY0FDaEU7QUFDQSxrQkFBSSxPQUFPLFdBQVc7QUFFdEIsa0JBQUksTUFBTTtBQUNSLHlCQUFTLElBQUksR0FBRyxJQUFJLEtBQUssUUFBUSxLQUFLO0FBQ3BDLHlCQUFPLEtBQUs7QUFBQSxnQkFDZDtBQUFBLGNBQ0Y7QUFDQSxxQkFBTyxLQUFLLFlBQVk7QUFDdEIsb0NBQW9CLEtBQUssS0FBSyxTQUFTLEtBQUssVUFBVTtBQUFBLGNBQ3hEO0FBQUEsWUFDRjtBQUFBLFlBQ0EsY0FBYztBQUFBLFVBQ2hCLENBQUM7QUFBQSxRQUNIO0FBRUEsWUFBSSxrQkFBa0IsU0FBU0MsaUJBQWdCLEtBQUs7QUFDbEQsaUJBQU8sZUFBZSxLQUFLLGFBQWE7QUFBQSxZQUN0QyxLQUFLLFdBQVk7QUFDZixxQkFBTyxJQUFJLFlBQVksSUFBSSxLQUFLLFNBQVMsS0FBSyxZQUFZO0FBQUEsWUFDNUQ7QUFBQSxZQUNBLEtBQUssU0FBVSxXQUFXO0FBQ3hCLGtCQUFJLEtBQUssWUFBWTtBQUNuQiwyQkFBVyxLQUFLLFlBQVk7QUFDNUIsb0JBQUksVUFBVSxLQUFLLGNBQWMsdUJBQXVCO0FBQ3hELHVCQUFPLFdBQVcsS0FBSyxZQUFZO0FBQ2pDLHNDQUFvQixLQUFLLFNBQVMsV0FBVyxLQUFLLFVBQVU7QUFBQSxnQkFDOUQ7QUFDQSxxQ0FBcUIsS0FBSyxLQUFLLFlBQVksU0FBUyxJQUFJO0FBQUEsY0FDMUQsT0FBTztBQUNMLHNCQUFNLElBQUk7QUFBQSxrQkFDUjtBQUFBLGdCQUNGO0FBQUEsY0FDRjtBQUFBLFlBQ0Y7QUFBQSxZQUNBLGNBQWM7QUFBQSxVQUNoQixDQUFDO0FBQUEsUUFDSDtBQUVBLHdCQUFnQiw4QkFBOEIsU0FBUztBQUN2RCx3QkFBZ0IsOEJBQThCLFNBQVM7QUFNdkQsc0NBQThCLFlBQVksU0FBUyxVQUFVLEtBQUs7QUFDaEUsY0FBSSxZQUFZLElBQUksS0FBSyxZQUFZO0FBQ3JDLG1CQUNNLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxHQUNqQyxJQUFJLE1BQU0sSUFBSSxVQUFVLENBQUMsSUFDekIsS0FDQTtBQUNBLDBDQUE4QixTQUFTLENBQUM7QUFBQSxVQUMxQztBQUFBLFFBQ0Y7QUFHQSxpQkFBUyxpQkFBaUIsb0JBQW9CLFdBQVk7QUFDeEQsd0NBQThCLFVBQVUsUUFBUTtBQUFBLFFBQ2xELENBQUM7QUFHRCxpQkFBUyxVQUFVLGdCQUFnQixTQUFTQyxpQkFBZ0I7QUFDMUQsY0FBSSxLQUFLLHNCQUFzQixNQUFNLE1BQU0sU0FBUztBQUNwRCxjQUFJLEdBQUcsY0FBYyxZQUFZO0FBQy9CLDBDQUE4QixTQUFTLEVBQUU7QUFBQSxVQUMzQztBQUNBLGlCQUFPO0FBQUEsUUFDVDtBQUVBLGtCQUFVLFVBQVUsa0JBQWtCLFdBQVk7QUFDaEQsY0FBSSxLQUFLLHdCQUF3QixNQUFNLE1BQU0sU0FBUztBQUN0RCx3Q0FBOEIsVUFBVSxFQUFFO0FBQzFDLGlCQUFPO0FBQUEsUUFDVDtBQUVBLGVBQU8sZUFBZSxZQUFZLFdBQVcsYUFBYTtBQUFBLFVBQ3hELEtBQUssV0FBWTtBQUNmLG1CQUFPLGFBQWEsSUFBSTtBQUFBLFVBQzFCO0FBQUEsVUFDQSxLQUFLLFNBQVUsTUFBTTtBQUNuQix5Q0FBNkIsSUFBSSxLQUFLLE1BQU0sSUFBSTtBQUNoRCwwQ0FBOEIsVUFBVSxJQUFJO0FBQUEsVUFDOUM7QUFBQSxVQUNBLGNBQWM7QUFBQSxVQUNkLFlBQVk7QUFBQSxRQUNkLENBQUM7QUFHRCxZQUFJLG1CQUFtQjtBQUN2QixZQUFJLG1CQUFtQjtBQUV2QixZQUFJLGdCQUFnQixTQUFVLEdBQUc7QUFDL0Isa0JBQVEsR0FBRztBQUFBLFlBQ1QsS0FBSztBQUNILHFCQUFPO0FBQUEsWUFDVCxLQUFLO0FBQ0gscUJBQU87QUFBQSxZQUNULEtBQUs7QUFDSCxxQkFBTztBQUFBLFlBQ1QsS0FBSztBQUNILHFCQUFPO0FBQUEsWUFDVCxLQUFLO0FBQ0gscUJBQU87QUFBQSxVQUNYO0FBQUEsUUFDRjtBQUVBLFlBQUksYUFBYSxTQUFVLEdBQUc7QUFDNUIsaUJBQU8sRUFBRSxRQUFRLGtCQUFrQixhQUFhO0FBQUEsUUFDbEQ7QUFFQSxZQUFJLGFBQWEsU0FBVSxHQUFHO0FBQzVCLGlCQUFPLEVBQUUsUUFBUSxrQkFBa0IsYUFBYTtBQUFBLFFBQ2xEO0FBRUEsWUFBSSxVQUFVLFNBQVUsS0FBSztBQUMzQixjQUFJLE1BQU0sQ0FBQztBQUNYLG1CQUFTLElBQUksR0FBRyxJQUFJLElBQUksUUFBUSxLQUFLO0FBQ25DLGdCQUFJLElBQUksQ0FBQyxDQUFDLElBQUk7QUFBQSxVQUNoQjtBQUNBLGlCQUFPO0FBQUEsUUFDVDtBQUdBLFlBQUksZUFBZSxRQUFRO0FBQUEsVUFDekI7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNGLENBQUM7QUFFRCxZQUFJLG1CQUFtQixRQUFRO0FBQUEsVUFDN0I7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRixDQUFDO0FBT0QsWUFBSSxlQUFlLFNBQVUsTUFBTSxZQUFZLFVBQVU7QUFDdkQsa0JBQVEsS0FBSyxVQUFVO0FBQUEsWUFDckIsS0FBSyxLQUFLLGNBQWM7QUFDdEIsa0JBQUksVUFBVSxLQUFLO0FBQ25CLGtCQUFJLElBQUksTUFBTTtBQUNkLGtCQUFJLFFBQVEsS0FBSztBQUNqQix1QkFBUyxJQUFJLEdBQUdDLE9BQU9BLFFBQU8sTUFBTSxDQUFDLEdBQUksS0FBSztBQUM1QyxxQkFBSyxNQUFNQSxNQUFLLE9BQU8sT0FBTyxXQUFXQSxNQUFLLEtBQUssSUFBSTtBQUFBLGNBQ3pEO0FBQ0EsbUJBQUs7QUFDTCxrQkFBSSxhQUFhLE9BQU8sR0FBRztBQUN6Qix1QkFBTztBQUFBLGNBQ1Q7QUFDQSxxQkFBTyxJQUFJLGFBQWEsTUFBTSxRQUFRLElBQUksT0FBTyxVQUFVO0FBQUEsWUFDN0Q7QUFBQSxZQUNBLEtBQUssS0FBSyxXQUFXO0FBQ25CLGtCQUFJO0FBQUE7QUFBQSxnQkFBNEIsS0FBTTtBQUFBO0FBQ3RDLGtCQUFJLGNBQWMsaUJBQWlCLFdBQVcsU0FBUyxHQUFHO0FBQ3hELHVCQUFPO0FBQUEsY0FDVDtBQUNBLHFCQUFPLFdBQVcsSUFBSTtBQUFBLFlBQ3hCO0FBQUEsWUFDQSxLQUFLLEtBQUssY0FBYztBQUN0QixxQkFBTztBQUFBLGNBQWlDLEtBQU0sT0FBTztBQUFBLFlBQ3ZEO0FBQUEsWUFDQSxTQUFTO0FBQ1AscUJBQU8sUUFBUSxNQUFNLElBQUk7QUFDekIsb0JBQU0sSUFBSSxNQUFNLGlCQUFpQjtBQUFBLFlBQ25DO0FBQUEsVUFDRjtBQUFBLFFBQ0Y7QUFNQSxZQUFJLGVBQWUsU0FBVSxNQUFNLFVBQVU7QUFDM0MsY0FBSSxLQUFLLGNBQWMsWUFBWTtBQUNqQztBQUFBLFlBQTJDLEtBQU07QUFBQSxVQUNuRDtBQUNBLGNBQUksSUFBSTtBQUNSLGNBQUksS0FBSyxXQUFXLFNBQVMsSUFBSSxJQUFJLG1CQUFtQixJQUFJLEtBQUssSUFBSTtBQUNyRSxtQkFBUyxJQUFJLEdBQUcsSUFBSSxHQUFHLFFBQVEsT0FBTyxJQUFJLE1BQU0sUUFBUSxHQUFHLENBQUMsSUFBSSxLQUFLO0FBQ25FLGlCQUFLLGFBQWEsT0FBTyxNQUFNLFFBQVE7QUFBQSxVQUN6QztBQUNBLGlCQUFPO0FBQUEsUUFDVDtBQUFBLE1BQ0Y7QUFHQSxVQUFJLGlCQUFpQixjQUFjO0FBQ2pDLHNDQUE4QixhQUFhLFNBQVMsV0FDbEQsVUFDQSxNQUNBO0FBQ0EsY0FBSSxRQUFRLGtCQUFrQixLQUFLLFVBQVUsS0FBSztBQUdsRCxjQUFJLEtBQUssVUFBVTtBQUNqQixpQkFBSyxTQUFTLEtBQUs7QUFBQSxVQUNyQjtBQUNBLGNBQUksTUFBTTtBQUdSLGdDQUFvQjtBQUFBLGNBQ2xCLE1BQU07QUFBQSxjQUNOLGtCQUFrQixLQUFLLFNBQVMsU0FBUyxJQUFJO0FBQUEsWUFDL0M7QUFFQSx5QkFBYSxNQUFNLFNBQVMsU0FBUyxPQUFPO0FBQUEsVUFDOUM7QUFDQSxpQkFBTztBQUFBLFFBQ1Q7QUFLQSxZQUFJLGVBQWUsU0FBU0MsY0FBYSxPQUFPLFFBQVE7QUFFdEQsY0FBSSxDQUFDLE9BQU8sa0JBQWtCO0FBQzVCO0FBQUEsVUFDRjtBQUVBLGNBQUksS0FBSyxJQUFJLFFBQVEsWUFBWTtBQUNqQyxjQUFJLEdBQUcsV0FBVyxHQUFHO0FBQ25CO0FBQUEsVUFDRjtBQUNBLGNBQUksS0FBSyxJQUFJLE9BQU8sWUFBWTtBQUNoQyxtQkFBUyxJQUFJLEdBQUcsSUFBSSxHQUFHLFFBQVEsR0FBRyxHQUFHLElBQUksR0FBRyxLQUFLO0FBQy9DLGdCQUFJLEdBQUcsQ0FBQztBQUNSLGdCQUFJLEdBQUcsQ0FBQztBQUNSLGdCQUNFLGlDQUNBLDhCQUE4QixVQUM5QjtBQUNBLDRDQUE4QixTQUFTLENBQUM7QUFBQSxZQUMxQztBQUNBLGlDQUFxQixLQUFLLEVBQUUsWUFBWSxVQUFVLEtBQUssR0FBRyxJQUFJLEdBQUcsQ0FBQztBQUFBLFVBQ3BFO0FBQUEsUUFDRjtBQUdBLFlBQUksbUJBQW1CLFNBQVNDLGtCQUFpQixVQUFVO0FBQ3pELGNBQUksVUFBVSxJQUFJLFVBQVUsY0FBYztBQUMxQyxtQkFBUyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksUUFBUSxRQUFRLEtBQUs7QUFDOUMsZ0JBQUksUUFBUSxDQUFDO0FBQ2IsaUJBQUssc0JBQXNCLEtBQUssVUFBVSxRQUFRO0FBQ2xELGVBQUcsY0FBYyxFQUFFO0FBQ25CLGdCQUFJLFFBQVEsRUFBRTtBQUNkLHFCQUFTLEtBQUssR0FBRyxHQUFHLEtBQUssTUFBTSxRQUFRLE1BQU07QUFDM0Msa0JBQUksTUFBTSxFQUFFO0FBQ1osaUJBQUcsYUFBYSxFQUFFLE1BQU0sRUFBRSxLQUFLO0FBQUEsWUFDakM7QUFDQSxpQ0FBcUIsS0FBSyxFQUFFLFlBQVksSUFBSSxDQUFDO0FBQUEsVUFDL0M7QUFBQSxRQUNGO0FBSUEsWUFBSSxZQUFhLEtBQUssVUFBVSxZQUFZLFNBQVNSLFdBQVUsTUFBTTtBQUNuRSxjQUFJO0FBR0osY0FDRSxDQUFDLGdCQUNELHFCQUNBLGdCQUFnQixrQkFDaEI7QUFDQSxnQkFBSSxDQUFDLE1BQU07QUFDVCxxQkFBTyxLQUFLLGNBQWMsdUJBQXVCO0FBQUEsWUFDbkQsT0FBTztBQUNMLG9CQUFNLFdBQVcsS0FBSyxLQUFLLGVBQWUsTUFBTSxJQUFJO0FBQUEsWUFDdEQ7QUFBQSxVQUNGLFdBQ0UsS0FBSyxhQUFhLEtBQUssZ0JBQ3ZCLEtBQUssY0FBYyxnQkFDbkIsS0FBSyxnQkFBZ0IsU0FBUyxnQkFBZ0IsY0FDOUM7QUFDQSxrQkFBTSw4QkFBOEIsV0FBVyxNQUFNLElBQUk7QUFBQSxVQUMzRCxPQUFPO0FBQ0wsa0JBQU0sa0JBQWtCLEtBQUssTUFBTSxJQUFJO0FBQUEsVUFDekM7QUFFQSxjQUFJLE1BQU07QUFDUix5QkFBYSxLQUFLLElBQUk7QUFBQSxVQUN4QjtBQUNBLGlCQUFPO0FBQUEsUUFDVDtBQU9BLFlBQUksYUFBYyxTQUFTLFVBQVUsYUFBYSxTQUFTRSxZQUN6RCxTQUNBLE1BQ0E7QUFDQSxpQkFBTyxRQUFRO0FBQ2YsY0FBSSxRQUFRLGNBQWMsY0FBYztBQUN0QyxtQkFBTyw4QkFBOEIsV0FBVyxTQUFTLElBQUk7QUFBQSxVQUMvRCxPQUFPO0FBQ0wsZ0JBQUksTUFBTSxtQkFBbUIsS0FBSyxNQUFNLFNBQVMsSUFBSTtBQUNyRCxnQkFBSSxNQUFNO0FBQ1IsMkJBQWEsS0FBSyxPQUFPO0FBQ3pCLCtCQUFpQixHQUFHO0FBQUEsWUFDdEI7QUFDQSxtQkFBTztBQUFBLFVBQ1Q7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUVBLFVBQUksZUFBZTtBQUNqQixlQUFPLHNCQUFzQjtBQUFBLE1BQy9CO0FBQUEsSUFDRixHQUFHO0FBQUE7QUFBQTs7O0FDam9CSDtBQUFBO0FBQUEsS0FBQyxTQUFTTyxZQUFXO0FBQ3JCLFVBQUksRUFBRSxzQkFBcUIsT0FDeEI7QUFBQSxRQUVIO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWdCQSxZQUFJLENBQUMsT0FBTyxrQkFBa0I7QUFDMUIsaUJBQU8sbUJBQW9CLFNBQVVBLFlBQVc7QUFDNUM7QUFLQSxxQkFBU0Msa0JBQWlCLFVBQVU7QUFLaEMsbUJBQUssV0FBVyxDQUFDO0FBRWpCLG1CQUFLLFlBQVk7QUFBQSxZQUNyQjtBQU9BLHFCQUFTLHFCQUFxQixVQUFVO0FBQ3BDLGVBQUMsU0FBUyxRQUFRO0FBQ2Qsb0JBQUksWUFBWSxTQUFTLFlBQVk7QUFFckMsb0JBQUksVUFBVSxRQUFRO0FBRWxCLDJCQUFTLFVBQVUsV0FBVyxRQUFRO0FBQUEsZ0JBQzFDO0FBRUEseUJBQVMsV0FBVyxXQUFXLE9BQU9BLGtCQUFpQixPQUFPO0FBQUEsY0FDbEUsR0FBRztBQUFBLFlBQ1A7QUFPQSxZQUFBQSxrQkFBaUIsVUFBVTtBQU8zQixZQUFBQSxrQkFBaUIsWUFBWTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxjQVN6QixTQUFTLFNBQVUsU0FBUyxRQUFRO0FBS2hDLG9CQUFJLFdBQVc7QUFBQSxrQkFDWCxNQUFNLENBQUMsRUFBRSxPQUFPLGNBQWMsT0FBTyxtQkFBbUIsT0FBTztBQUFBO0FBQUE7QUFBQSxrQkFJL0QsTUFBTSxDQUFDLENBQUMsT0FBTztBQUFBLGtCQUNmLGFBQWEsQ0FBQyxDQUFDLE9BQU87QUFBQSxrQkFDdEIsVUFBVSxDQUFDLEVBQUUsT0FBTyxpQkFBaUIsT0FBTztBQUFBLGdCQUNoRDtBQUVBLG9CQUFJLFVBQVUsS0FBSztBQUduQix5QkFBUyxJQUFJLEdBQUcsSUFBSSxRQUFRLFFBQVEsS0FBSztBQUNyQyxzQkFBSSxRQUFRLENBQUMsRUFBRSxRQUFRLFFBQVMsU0FBUSxPQUFPLEdBQUcsQ0FBQztBQUFBLGdCQUN2RDtBQUVBLG9CQUFJLE9BQU8saUJBQWlCO0FBS3hCLDJCQUFTLFVBQVUsT0FBTyxPQUFPLGlCQUFpQixTQUFVLEdBQUcsR0FBRztBQUM5RCxzQkFBRSxDQUFDLElBQUk7QUFDUCwyQkFBTztBQUFBLGtCQUNYLEdBQUcsQ0FBQyxDQUFDO0FBQUEsZ0JBQ1Q7QUFFQSx3QkFBUSxLQUFLO0FBQUEsa0JBQ1QsS0FBSztBQUFBLGtCQUNMLElBQUksdUJBQXVCLFNBQVMsUUFBUTtBQUFBLGdCQUNoRCxDQUFDO0FBR0Qsb0JBQUksQ0FBQyxLQUFLLFVBQVU7QUFDaEIsdUNBQXFCLElBQUk7QUFBQSxnQkFDN0I7QUFBQSxjQUNKO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLGNBT0EsYUFBYSxXQUFZO0FBQ3JCLG9CQUFJLFlBQVksQ0FBQztBQUNqQixvQkFBSSxVQUFVLEtBQUs7QUFFbkIseUJBQVMsSUFBSSxHQUFHLElBQUksUUFBUSxRQUFRLEtBQUs7QUFDckMsMEJBQVEsQ0FBQyxFQUFFLEdBQUcsU0FBUztBQUFBLGdCQUMzQjtBQUVBLHVCQUFPO0FBQUEsY0FDWDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsY0FNQSxZQUFZLFdBQVk7QUFDcEIscUJBQUssV0FBVyxDQUFDO0FBQ2pCLDZCQUFhLEtBQUssUUFBUTtBQUUxQixxQkFBSyxXQUFXO0FBQUEsY0FDcEI7QUFBQSxZQUNKO0FBT0EscUJBQVMsZUFBZSxNQUFNO0FBQzFCLGtCQUFJLFdBQVc7QUFBQTtBQUFBLGdCQUNYLE1BQU07QUFBQSxnQkFDTixRQUFRO0FBQUEsZ0JBQ1IsWUFBWSxDQUFDO0FBQUEsZ0JBQ2IsY0FBYyxDQUFDO0FBQUEsZ0JBQ2YsaUJBQWlCO0FBQUEsZ0JBQ2pCLGFBQWE7QUFBQSxnQkFDYixlQUFlO0FBQUEsZ0JBQ2Ysb0JBQW9CO0FBQUEsZ0JBQ3BCLFVBQVU7QUFBQSxjQUNkO0FBQ0EsdUJBQVMsUUFBUSxNQUFNO0FBQ25CLG9CQUFJLElBQUksVUFBVSxJQUFJLEtBQUssS0FBSyxJQUFJLE1BQU1ELFdBQVcsVUFBUyxJQUFJLElBQUksS0FBSyxJQUFJO0FBQUEsY0FDbkY7QUFDQSxxQkFBTztBQUFBLFlBQ1g7QUFRQSxxQkFBUyx1QkFBdUIsU0FBUyxRQUFRO0FBRTdDLGtCQUFJLFlBQVksTUFBTSxTQUFTLE1BQU07QUFPckMscUJBQU8sU0FBVSxXQUFXO0FBQ3hCLG9CQUFJLE9BQU8sVUFBVSxRQUFRO0FBRTdCLG9CQUFJLE9BQU8sWUFBWSxRQUFRLGFBQWEsS0FBSyxRQUFRLGNBQWMsVUFBVSxVQUFVO0FBQ3ZGLDRCQUFVLEtBQUssSUFBSSxlQUFlO0FBQUEsb0JBQzlCLE1BQU07QUFBQSxvQkFDTixRQUFRO0FBQUEsb0JBQ1IsVUFBVSxVQUFVO0FBQUEsa0JBQ3hCLENBQUMsQ0FBQztBQUFBLGdCQUNOO0FBR0Esb0JBQUksT0FBTyxRQUFRLFVBQVUsTUFBTTtBQUMvQix5Q0FBdUIsV0FBVyxTQUFTLFVBQVUsTUFBTSxPQUFPLE9BQU87QUFBQSxnQkFDN0U7QUFHQSxvQkFBSSxPQUFPLFFBQVEsT0FBTyxhQUFhO0FBQ25DLDBCQUFRLGNBQWMsV0FBVyxTQUFTLFdBQVcsTUFBTTtBQUFBLGdCQUMvRDtBQUdBLG9CQUFJLFNBQVMsVUFBVSxXQUFXLE1BQU07QUFFcEMsOEJBQVksTUFBTSxTQUFTLE1BQU07QUFBQSxnQkFDckM7QUFBQSxjQUNKO0FBQUEsWUFDSjtBQU1BLGdCQUFJLGtCQUFrQixTQUFTLGNBQWMsR0FBRztBQUNoRCw0QkFBZ0IsTUFBTSxNQUFNO0FBQzVCLDhCQUFrQixnQkFBZ0IsV0FBVyxNQUFNLFNBQVM7QUFTNUQscUJBQVMsbUJBQW1CLElBQUlFLE9BQU07QUFJbEMscUJBQU9BLE1BQUs7QUFBQSxZQUNoQjtBQVNBLHFCQUFTLDBCQUEwQixJQUFJQSxPQUFNO0FBRXpDLHFCQUFPQSxNQUFLLFNBQVMsVUFBVUEsTUFBSyxRQUFRLEdBQUcsTUFBTTtBQUFBLFlBQ3pEO0FBRUEsZ0JBQUksb0JBQW9CLGtCQUFrQixxQkFBcUI7QUFXL0QscUJBQVMsdUJBQXVCLFdBQVcsU0FBUyxXQUFXLFFBQVE7QUFDbkUsa0JBQUksVUFBVSxDQUFDO0FBQ2Ysa0JBQUlDLGNBQWEsUUFBUTtBQUN6QixrQkFBSUQ7QUFDSixrQkFBSTtBQUNKLGtCQUFJLElBQUlDLFlBQVc7QUFDbkIscUJBQU8sS0FBSztBQUNSLGdCQUFBRCxRQUFPQyxZQUFXLENBQUM7QUFDbkIsdUJBQU9ELE1BQUs7QUFDWixvQkFBSSxDQUFDLFVBQVUsSUFBSSxRQUFRLElBQUksR0FBRztBQUM5QixzQkFBSSxrQkFBa0IsU0FBU0EsS0FBSSxNQUFNLFVBQVUsSUFBSSxHQUFHO0FBRXRELDhCQUFVLEtBQUssZUFBZTtBQUFBLHNCQUMxQixNQUFNO0FBQUEsc0JBQ04sUUFBUTtBQUFBLHNCQUNSLGVBQWU7QUFBQSxzQkFDZixVQUFVLFVBQVUsSUFBSTtBQUFBLHNCQUN4QixvQkFBb0JBLE1BQUs7QUFBQTtBQUFBLG9CQUM3QixDQUFDLENBQUM7QUFBQSxrQkFDTjtBQUNBLDBCQUFRLElBQUksSUFBSTtBQUFBLGdCQUNwQjtBQUFBLGNBQ0o7QUFDQSxtQkFBSyxRQUFRLFdBQVc7QUFDcEIsb0JBQUksQ0FBRSxRQUFRLElBQUksR0FBSTtBQUNsQiw0QkFBVSxLQUFLLGVBQWU7QUFBQSxvQkFDMUIsUUFBUTtBQUFBLG9CQUNSLE1BQU07QUFBQSxvQkFDTixlQUFlO0FBQUEsb0JBQ2YsVUFBVSxVQUFVLElBQUk7QUFBQSxrQkFDNUIsQ0FBQyxDQUFDO0FBQUEsZ0JBQ047QUFBQSxjQUNKO0FBQUEsWUFDSjtBQWNBLHFCQUFTLGNBQWMsV0FBVyxTQUFTLFdBQVcsUUFBUTtBQUUxRCxrQkFBSTtBQU9KLHVCQUFTLGlCQUFpQixXQUFXLE1BQU0sT0FBTyxVQUFVLGVBQWU7QUFFdkUsb0JBQUksV0FBVyxVQUFVLFNBQVM7QUFHbEMsb0JBQUlFLFdBQVUsQ0FBQyxHQUFHLFdBQVcsaUJBQWlCO0FBQzlDLG9CQUFJO0FBQ0osb0JBQUk7QUFDSixvQkFBSTtBQUNKLHVCQUFRLFdBQVcsVUFBVSxJQUFJLEdBQUk7QUFDakMseUJBQU8sTUFBTSxTQUFTLENBQUM7QUFDdkIsOEJBQVksU0FBUyxTQUFTLENBQUM7QUFJL0Isc0JBQUksT0FBTyxRQUFRQSxZQUFXLEtBQUssSUFBSSxTQUFTLElBQUksU0FBUyxDQUFDLEtBQUssVUFBVTtBQUN6RSw4QkFBVSxLQUFLLGVBQWU7QUFBQSxzQkFDMUIsTUFBTTtBQUFBLHNCQUNOLFFBQVE7QUFBQSxzQkFDUixZQUFZLENBQUMsSUFBSTtBQUFBLHNCQUNqQixjQUFjLENBQUMsSUFBSTtBQUFBO0FBQUEsc0JBRW5CLGFBQWEsS0FBSztBQUFBLHNCQUNsQixpQkFBaUIsS0FBSztBQUFBLG9CQUMxQixDQUFDLENBQUM7QUFDRixvQkFBQUE7QUFBQSxrQkFDSjtBQUdBLHNCQUFJLE9BQU8sUUFBUSxVQUFVLEtBQU0sd0JBQXVCLFdBQVcsTUFBTSxVQUFVLE1BQU0sT0FBTyxPQUFPO0FBQ3pHLHNCQUFJLE9BQU8sWUFBWSxLQUFLLGFBQWEsS0FBSyxLQUFLLGNBQWMsVUFBVSxVQUFVO0FBQ2pGLDhCQUFVLEtBQUssZUFBZTtBQUFBLHNCQUMxQixNQUFNO0FBQUEsc0JBQ04sUUFBUTtBQUFBLHNCQUNSLFVBQVUsVUFBVTtBQUFBLG9CQUN4QixDQUFDLENBQUM7QUFBQSxrQkFDTjtBQUVBLHNCQUFJLE9BQU8sWUFBYSxlQUFjLE1BQU0sU0FBUztBQUFBLGdCQUN6RDtBQUFBLGNBQ0o7QUFPQSx1QkFBUyxjQUFjLE1BQU0sS0FBSztBQUM5QixvQkFBSSxRQUFRLEtBQUs7QUFDakIsb0JBQUksV0FBVyxJQUFJO0FBQ25CLG9CQUFJLE9BQU8sTUFBTTtBQUVqQixvQkFBSSxPQUFPLFdBQVcsU0FBUyxTQUFTO0FBS3hDLG9CQUFJQztBQUVKLG9CQUFJO0FBQ0osb0JBQUk7QUFDSixvQkFBSTtBQUVKLG9CQUFJO0FBRUosb0JBQUk7QUFDSixvQkFBSTtBQUVKLG9CQUFJLGdCQUFnQjtBQUdwQixvQkFBSSxJQUFJLEdBQUcsSUFBSTtBQUVmLHVCQUFPLElBQUksUUFBUSxJQUFJLE1BQU07QUFFekIseUJBQU8sTUFBTSxDQUFDO0FBQ2QsOEJBQVksU0FBUyxDQUFDO0FBQ3RCLHlCQUFPLGFBQWEsVUFBVTtBQUU5QixzQkFBSSxTQUFTLE1BQU07QUFFZix3QkFBSSxPQUFPLFFBQVEsVUFBVSxLQUFvRCx3QkFBdUIsV0FBVyxNQUFNLFVBQVUsTUFBTSxPQUFPLE9BQU87QUFFdkosd0JBQUksT0FBTyxZQUFZLFVBQVUsYUFBYUwsY0FBYSxLQUFLLGNBQWMsVUFBVSxVQUFVO0FBQzlGLGdDQUFVLEtBQUssZUFBZTtBQUFBLHdCQUMxQixNQUFNO0FBQUEsd0JBQ04sUUFBUTtBQUFBLHdCQUNSLFVBQVUsVUFBVTtBQUFBLHNCQUN4QixDQUFDLENBQUM7QUFBQSxvQkFDTjtBQUdBLHdCQUFJLFVBQVcsa0JBQWlCLFdBQVcsTUFBTSxPQUFPLFVBQVUsYUFBYTtBQUcvRSx3QkFBSSxPQUFPLGdCQUFnQixLQUFLLFdBQVcsVUFBVSxVQUFVLFFBQVEsVUFBVSxLQUFLLFFBQVMsZUFBYyxNQUFNLFNBQVM7QUFFNUg7QUFDQTtBQUFBLGtCQUNKLE9BQU87QUFDSCw0QkFBUTtBQUNSLHdCQUFJLENBQUNLLE1BQUs7QUFDTixzQkFBQUEsT0FBTSxDQUFDO0FBQ1Asa0NBQVksQ0FBQztBQUFBLG9CQUNqQjtBQUNBLHdCQUFJLE1BQU07QUFFTiwwQkFBSSxDQUFFQSxLQUFJLEtBQUssYUFBYSxJQUFJLENBQUMsR0FBSTtBQUVqQyx3QkFBQUEsS0FBSSxFQUFFLElBQUk7QUFFViw2QkFBSyxNQUFNLGtCQUFrQixVQUFVLE1BQU0sQ0FBQyxPQUFPLElBQUk7QUFDckQsOEJBQUksT0FBTyxNQUFNO0FBQ2Isc0NBQVUsS0FBSyxlQUFlO0FBQUEsOEJBQzFCLE1BQU07QUFBQSw4QkFDTixRQUFRO0FBQUEsOEJBQ1IsWUFBWSxDQUFDLElBQUk7QUFBQTtBQUFBLDhCQUNqQixhQUFhLEtBQUs7QUFBQSw4QkFDbEIsaUJBQWlCLEtBQUs7QUFBQSw0QkFDMUIsQ0FBQyxDQUFDO0FBQ0Y7QUFBQSwwQkFDSjtBQUFBLHdCQUNKLE9BQU87QUFDSCxvQ0FBVSxLQUFLO0FBQUE7QUFBQSw0QkFDWDtBQUFBLDRCQUNBLEdBQUc7QUFBQSwwQkFDUCxDQUFDO0FBQUEsd0JBQ0w7QUFBQSxzQkFDSjtBQUNBO0FBQUEsb0JBQ0o7QUFFQSx3QkFBSTtBQUFBLG9CQUVBLFNBQVMsTUFBTSxDQUFDLEdBQ2xCO0FBQ0UsMEJBQUksQ0FBRUEsS0FBSSxLQUFLLGFBQWEsSUFBSSxDQUFDLEdBQUk7QUFDakMsd0JBQUFBLEtBQUksRUFBRSxJQUFJO0FBQ1YsNkJBQUssTUFBTSxRQUFRLE9BQU8sTUFBTSxDQUFDLE9BQU8sSUFBSTtBQUN4Qyw4QkFBSSxPQUFPLE1BQU07QUFDYixzQ0FBVSxLQUFLLGVBQWU7QUFBQSw4QkFDMUIsTUFBTTtBQUFBLDhCQUNOLFFBQVEsSUFBSTtBQUFBLDhCQUNaLGNBQWMsQ0FBQyxJQUFJO0FBQUEsOEJBQ25CLGFBQWEsU0FBUyxJQUFJLENBQUM7QUFBQTtBQUFBLDhCQUMzQixpQkFBaUIsU0FBUyxJQUFJLENBQUM7QUFBQSw0QkFDbkMsQ0FBQyxDQUFDO0FBQ0Y7QUFBQSwwQkFDSjtBQUFBLHdCQUNKLE9BQU87QUFDSCxvQ0FBVSxLQUFLO0FBQUEsNEJBQ1gsR0FBRztBQUFBLDRCQUNIO0FBQUEsMEJBQ0osQ0FBQztBQUFBLHdCQUNMO0FBQUEsc0JBQ0o7QUFDQTtBQUFBLG9CQUNKO0FBQUEsa0JBQ0o7QUFBQSxnQkFDSjtBQUdBLG9CQUFJLFVBQVcsa0JBQWlCLFdBQVcsTUFBTSxPQUFPLFVBQVUsYUFBYTtBQUFBLGNBQ25GO0FBQ0EsNEJBQWMsU0FBUyxTQUFTO0FBQ2hDLHFCQUFPO0FBQUEsWUFDWDtBQVVBLHFCQUFTLE1BQU0sU0FBUyxRQUFRO0FBQzVCLGtCQUFJLFVBQVU7QUFDZCxxQkFBUSxTQUFTLEtBQUtDLFVBQVM7QUFDM0Isb0JBQUksWUFBWTtBQUFBO0FBQUEsa0JBRVosTUFBTUE7QUFBQSxnQkFDVjtBQUlBLG9CQUFJLE9BQU8sYUFBYUEsU0FBUSxhQUFhLEtBQUtBLFNBQVEsYUFBYSxJQUFJO0FBQ3ZFLDRCQUFVLFdBQVdBLFNBQVE7QUFBQSxnQkFDakMsT0FFSztBQUdELHNCQUFJLE9BQU8sUUFBUSxXQUFXQSxTQUFRLGFBQWEsR0FBRztBQUtsRCw4QkFBVSxPQUFPLE9BQU9BLFNBQVEsWUFBWSxTQUFVQyxPQUFNTCxPQUFNO0FBQzlELDBCQUFJLENBQUMsT0FBTyxXQUFXLE9BQU8sUUFBUUEsTUFBSyxJQUFJLEdBQUc7QUFDOUMsd0JBQUFLLE1BQUtMLE1BQUssSUFBSSxJQUFJLGtCQUFrQkksVUFBU0osS0FBSTtBQUFBLHNCQUNyRDtBQUNBLDZCQUFPSztBQUFBLG9CQUNYLEdBQUcsQ0FBQyxDQUFDO0FBQUEsa0JBQ1Q7QUFHQSxzQkFBSSxZQUFhLE9BQU8sUUFBUSxPQUFPLFlBQWMsT0FBTyxRQUFRLE9BQU8sY0FBZTtBQUV0Riw4QkFBVSxPQUFPLElBQUlELFNBQVEsWUFBWSxJQUFJO0FBQUEsa0JBQ2pEO0FBRUEsNEJBQVUsT0FBTztBQUFBLGdCQUNyQjtBQUNBLHVCQUFPO0FBQUEsY0FDWCxFQUFHLE9BQU87QUFBQSxZQUNkO0FBVUEscUJBQVMsa0JBQWtCLEtBQUssT0FBTyxLQUFLO0FBQ3hDLHFCQUFPLFFBQVEsS0FBSyxPQUFPLEtBQUssMEJBQTBCLE1BQU0sQ0FBQztBQUFBLFlBQ3JFO0FBR0EsZ0JBQUksVUFBVTtBQUVkLGdCQUFJLFVBQVU7QUFRZCxxQkFBUyxhQUFhLE1BQU07QUFDeEIsa0JBQUk7QUFDQSx1QkFBTyxLQUFLLE9BQU8sS0FBSyxPQUFPLElBQUksS0FBSyxPQUFPLEtBQUs7QUFBQSxjQUN4RCxTQUFTLEtBQUs7QUFDVixvQkFBSTtBQUNBLHlCQUFPLEtBQUs7QUFBQSxnQkFDaEIsU0FBUyxRQUFRO0FBQ2IseUJBQU87QUFBQSxnQkFDWDtBQUFBLGNBQ0o7QUFBQSxZQUNKO0FBT0EscUJBQVMsSUFBSSxLQUFLLFVBQVU7QUFDeEIsa0JBQUksVUFBVSxDQUFDO0FBQ2YsdUJBQVMsUUFBUSxHQUFHLFFBQVEsSUFBSSxRQUFRLFNBQVM7QUFDN0Msd0JBQVEsS0FBSyxJQUFJLFNBQVMsSUFBSSxLQUFLLEdBQUcsT0FBTyxHQUFHO0FBQUEsY0FDcEQ7QUFDQSxxQkFBTztBQUFBLFlBQ1g7QUFRQSxxQkFBUyxPQUFPLEtBQUssVUFBVUMsT0FBTTtBQUNqQyx1QkFBUyxRQUFRLEdBQUcsUUFBUSxJQUFJLFFBQVEsU0FBUztBQUM3QyxnQkFBQUEsUUFBTyxTQUFTQSxPQUFNLElBQUksS0FBSyxHQUFHLE9BQU8sR0FBRztBQUFBLGNBQ2hEO0FBQ0EscUJBQU9BO0FBQUEsWUFDWDtBQVNBLHFCQUFTLFFBQVEsS0FBSyxNQUFNLEtBQUssTUFBTTtBQUNuQyxxQkFBc0IsTUFBTSxJQUFJLFFBQVEsT0FBTztBQUMzQyxxQkFBSyxPQUFPLElBQUksR0FBRyxFQUFFLElBQUksSUFBSSxJQUFJLEdBQUcsT0FBTyxLQUFNLFFBQU87QUFBQSxjQUM1RDtBQUNBLHFCQUFPO0FBQUEsWUFDWDtBQU9BLHFCQUFTLElBQUksS0FBSyxNQUFNO0FBQ3BCLHFCQUFPLElBQUksSUFBSSxNQUFNUDtBQUFBLFlBQ3pCO0FBR0EscUJBQVMsMEJBQTBCLEdBQUc7QUFDbEMscUJBQU87QUFBQSxZQUNYO0FBRUEsbUJBQU9DO0FBQUEsVUFDWCxFQUFHLE1BQU07QUFBQSxRQUNiO0FBQUEsTUFDQTtBQUFBLElBQUMsR0FBRyxLQUFLLGFBQWEsT0FBTyxVQUFVLFVBQVUsYUFBYSxPQUFPLFFBQVEsUUFBUSxhQUFhLE9BQU8sVUFBVSxVQUFVLENBQUMsQ0FBQztBQUFBO0FBQUE7OztBQ2xuQi9IO0FBQUE7QUFBQSxLQUFDLFNBQVNPLFlBQVc7QUFDckIsVUFBSSxDQUFFLFNBQVMsVUFDWjtBQUVILFNBQUMsV0FBVztBQUVYLG1CQUFTLFNBQVMsTUFBTTtBQUN2QixnQkFBSSxFQUFFLEtBQUssWUFBWTtBQUN0QixvQkFBTSxJQUFJLFVBQVUsd0JBQXdCO0FBQUEsWUFDN0M7QUFFQSxlQUFHO0FBQ0Ysa0JBQUksU0FBUyxNQUFNO0FBQ2xCLHVCQUFPO0FBQUEsY0FDUjtBQUFBLFlBRUQsU0FBUyxPQUFPLFFBQVEsS0FBSztBQUU3QixtQkFBTztBQUFBLFVBQ1I7QUFHQSxjQUFJLGlCQUFpQixRQUFRLGNBQWMsWUFBWSxXQUFXO0FBQ2pFLGdCQUFJO0FBQ0gscUJBQU8sWUFBWSxVQUFVO0FBQUEsWUFDOUIsU0FBUyxHQUFHO0FBQUEsWUFBQztBQUFBLFVBQ2Q7QUFFQSxjQUFJLFVBQVUsTUFBTTtBQUNuQixpQkFBSyxVQUFVLFdBQVc7QUFBQSxVQUMzQixPQUFPO0FBQ04scUJBQVMsV0FBVyxRQUFRLFVBQVUsV0FBVztBQUFBLFVBQ2xEO0FBQUEsUUFFRCxHQUFFO0FBQUEsTUFDRjtBQUFBLElBQUMsR0FBRyxLQUFLLGFBQWEsT0FBTyxVQUFVLFVBQVUsYUFBYSxPQUFPLFFBQVEsUUFBUSxhQUFhLE9BQU8sVUFBVSxVQUFVLENBQUMsQ0FBQztBQUFBO0FBQUE7OztBQ25DL0g7QUFBQSxtR0FBQUMsVUFBQTtBQUNDLEtBQUMsV0FBVTtBQUFFLFVBQUk7QUFBRSxlQUFPLFVBQVUsSUFBSSxPQUFPLFVBQVUsS0FBSyxDQUFDO0FBQUcsZUFBTyxVQUFVLEVBQUUsNkJBQTZCLElBQUksT0FBTyxVQUFVLEVBQUUsNkJBQTZCLEtBQUs7QUFBQSxNQUFVLFNBQVEsS0FBSztBQUFBLE1BQUM7QUFBQSxJQUFFLEdBQUc7QUFDek0sS0FBQyxXQUFVO0FBU1g7QUFBYSxVQUFJO0FBQUUsZUFBUyxHQUFHLEdBQUU7QUFBQyxZQUFJLElBQUU7QUFBRSxlQUFPLFdBQVU7QUFBQyxpQkFBTyxJQUFFLEVBQUUsU0FBTyxFQUFDLE1BQUssT0FBRyxPQUFNLEVBQUUsR0FBRyxFQUFDLElBQUUsRUFBQyxNQUFLLEtBQUU7QUFBQSxRQUFDO0FBQUEsTUFBQztBQUFDLGVBQVMsRUFBRSxHQUFFO0FBQUMsWUFBSSxJQUFFLGVBQWEsT0FBTyxVQUFRLE9BQU8sWUFBVSxFQUFFLE9BQU8sUUFBUTtBQUFFLGVBQU8sSUFBRSxFQUFFLEtBQUssQ0FBQyxJQUFFLEVBQUMsTUFBSyxHQUFHLENBQUMsRUFBQztBQUFBLE1BQUM7QUFBQyxlQUFTLEVBQUUsR0FBRTtBQUFDLFlBQUcsRUFBRSxhQUFhLFFBQU87QUFBQyxjQUFFLEVBQUUsQ0FBQztBQUFFLG1CQUFRLEdBQUUsSUFBRSxDQUFDLEdBQUUsRUFBRSxJQUFFLEVBQUUsS0FBSyxHQUFHLE9BQU0sR0FBRSxLQUFLLEVBQUUsS0FBSztBQUFFLGNBQUU7QUFBQSxRQUFDO0FBQUMsZUFBTztBQUFBLE1BQUM7QUFDbFYsZUFBUyxHQUFHLEdBQUU7QUFBQyxZQUFFLENBQUMsWUFBVSxPQUFPLGNBQVksWUFBVyxHQUFFLFlBQVUsT0FBTyxVQUFRLFFBQU8sWUFBVSxPQUFPLFFBQU0sTUFBSyxZQUFVLE9BQU8sVUFBUSxNQUFNO0FBQUUsaUJBQVEsSUFBRSxHQUFFLElBQUUsRUFBRSxRQUFPLEVBQUUsR0FBRTtBQUFDLGNBQUksSUFBRSxFQUFFLENBQUM7QUFBRSxjQUFHLEtBQUcsRUFBRSxRQUFNLEtBQUssUUFBTztBQUFBLFFBQUM7QUFBQyxjQUFNLE1BQU0sMkJBQTJCO0FBQUEsTUFBRTtBQUFDLFVBQUksS0FBRyxHQUFHLElBQUk7QUFBRSxlQUFTLEtBQUk7QUFBQSxNQUFDO0FBQUMsU0FBRyxVQUFVLFNBQU8sV0FBVTtBQUFDLGVBQU0sQ0FBQztBQUFBLE1BQUM7QUFBRSxlQUFTLEVBQUUsR0FBRTtBQUFDLFVBQUUsWUFBVSxFQUFFLFVBQVEsSUFBSTtBQUFJLGVBQU8sRUFBRTtBQUFBLE1BQU87QUFBQyxlQUFTLEVBQUUsR0FBRTtBQUFDLGVBQU8sS0FBRyxFQUFFO0FBQUEsTUFBTztBQUFDO0FBQUMsVUFBSSxJQUFFLE9BQU8sWUFBVSxDQUFDO0FBQUUsUUFBRSxLQUFHLEVBQUUsQ0FBQyxRQUFRLFVBQVUsZ0JBQWMsQ0FBQyxLQUFLLFVBQVU7QUFBYSxVQUFJLEtBQUcsT0FBTyx5QkFBeUIsS0FBSyxXQUFVLFlBQVk7QUFBRSxRQUFFLElBQUUsQ0FBQyxFQUFFLE1BQUksR0FBRyxnQkFBYyxHQUFHO0FBQUssUUFBRSxJQUFFLEVBQUUsU0FBTyxDQUFDLEVBQUU7QUFBRyxRQUFFLElBQUUsRUFBRSxXQUFTO0FBQUcsUUFBRSxJQUFFLEVBQUU7QUFBa0IsUUFBRSxJQUFFLGdCQUFjLEVBQUU7QUFBRSxVQUFJO0FBQUcsVUFBSSxLQUFHLEVBQUU7QUFBNEIsV0FBRyxLQUFHLENBQUMsVUFBUyxnQkFBZ0IsRUFBRSxRQUFRLEVBQUUsSUFBRSxLQUFHO0FBQU8sUUFBRSxLQUFHO0FBQUcsUUFBRSxJQUFFLFVBQVUsVUFBVSxNQUFNLFNBQVM7QUFDMzFCLGVBQVMsS0FBSTtBQUFDLGVBQU8sU0FBUyxVQUFVLHNCQUFvQix3QkFBc0I7QUFBQSxNQUFtQjtBQUFDLGVBQVMsRUFBRSxHQUFFO0FBQUMsZ0JBQU8sSUFBRSxFQUFFLENBQUMsTUFBSSxXQUFTLEVBQUU7QUFBQSxNQUFVO0FBQUMsZUFBUyxFQUFFLEdBQUU7QUFBQyxlQUFPLGFBQWE7QUFBQSxNQUFVO0FBQUMsZUFBUyxHQUFHLEdBQUU7QUFBQyxnQkFBTyxLQUFHLElBQUUsRUFBRSxDQUFDLE1BQUksRUFBRSxTQUFPLEdBQUcsQ0FBQztBQUFBLE1BQUM7QUFBQyxVQUFJLElBQUUsUUFBUSxXQUFVLEtBQUcsRUFBRSxXQUFTLEVBQUUsbUJBQWlCLEVBQUUsc0JBQW9CLEVBQUUscUJBQW1CLEVBQUUsb0JBQWtCLEVBQUUsdUJBQXNCLEtBQUcsU0FBUyxlQUFlLEVBQUUsR0FBRSxLQUFHLEdBQUUsS0FBRyxDQUFDO0FBQ2hiLE1BQUMsSUFBSSxpQkFBaUIsV0FBVTtBQUFDLGVBQUssR0FBRyxTQUFRLEtBQUc7QUFBQyxhQUFHLE1BQU0sRUFBRTtBQUFBLFFBQUMsU0FBTyxHQUFFO0FBQUMsZ0JBQU0sR0FBRyxjQUFZLE1BQUs7QUFBQSxRQUFFO0FBQUEsTUFBQyxDQUFDLEVBQUcsUUFBUSxJQUFHLEVBQUMsZUFBYyxLQUFFLENBQUM7QUFBRSxlQUFTLEdBQUcsR0FBRTtBQUFDLFdBQUcsS0FBSyxDQUFDO0FBQUUsV0FBRyxjQUFZO0FBQUEsTUFBSTtBQUFDLFVBQUksS0FBRyxTQUFTLFdBQVMsU0FBUyxHQUFFLEdBQUU7QUFBQyxlQUFPLEVBQUUsd0JBQXdCLENBQUM7QUFBQSxNQUFDLElBQUUsU0FBUyxHQUFFLEdBQUU7QUFBQyxlQUFPLE1BQUksS0FBRyxFQUFFLG1CQUFpQixFQUFFLGdCQUFnQix3QkFBd0IsQ0FBQztBQUFBLE1BQUM7QUFBRSxlQUFTLEdBQUcsR0FBRSxHQUFFO0FBQUMsZUFBSyxLQUFHO0FBQUMsY0FBRyxLQUFHLEVBQUUsUUFBTTtBQUFHLGNBQUUsRUFBRTtBQUFBLFFBQWtCO0FBQUMsZUFBTTtBQUFBLE1BQUU7QUFDNWEsZUFBUyxFQUFFLEdBQUU7QUFBQyxpQkFBUSxJQUFFLEVBQUUsU0FBTyxHQUFFLEtBQUcsR0FBRSxLQUFJO0FBQUMsY0FBSSxJQUFFLEVBQUUsQ0FBQyxHQUFFLElBQUUsRUFBRSxhQUFhLElBQUksS0FBRyxFQUFFLGFBQWEsTUFBTTtBQUFFLGVBQUcsYUFBVyxLQUFHLE1BQU0sQ0FBQyxNQUFJLEVBQUUsQ0FBQyxJQUFFO0FBQUEsUUFBRTtBQUFDLFVBQUUsT0FBSyxTQUFTLEdBQUU7QUFBQyxpQkFBTyxFQUFFLENBQUM7QUFBQSxRQUFDO0FBQUUsVUFBRSxZQUFVLFNBQVMsR0FBRTtBQUFDLGNBQUcsYUFBVyxLQUFHLE1BQU0sQ0FBQyxLQUFHLEVBQUUsQ0FBQyxFQUFFLFFBQU8sRUFBRSxDQUFDO0FBQUUsbUJBQVEsSUFBRSxFQUFFLENBQUMsR0FBRSxJQUFFLEVBQUUsS0FBSyxHQUFFLENBQUMsRUFBRSxNQUFLLElBQUUsRUFBRSxLQUFLLEVBQUUsS0FBRyxJQUFFLEVBQUUsUUFBTyxFQUFFLGFBQWEsSUFBSSxLQUFHLEVBQUUsYUFBYSxNQUFNLE1BQUksRUFBRSxRQUFPO0FBQUUsaUJBQU87QUFBQSxRQUFJO0FBQUUsZUFBTztBQUFBLE1BQUM7QUFBQyxlQUFTLEdBQUcsR0FBRTtBQUFDLFlBQUksSUFBRSxDQUFDO0FBQUUsYUFBSSxJQUFFLEVBQUUsMkJBQTBCLEdBQUUsSUFBRSxFQUFFLDJCQUEyQixHQUFFLEtBQUssQ0FBQztBQUFFLGVBQU87QUFBQSxNQUFDO0FBQ3ZlLGVBQVMsR0FBRyxHQUFFO0FBQUMsWUFBSSxJQUFFLENBQUM7QUFBRSxhQUFJLElBQUUsRUFBRSxvQkFBbUIsR0FBRSxJQUFFLEVBQUUsb0JBQW9CLEdBQUUsS0FBSyxDQUFDO0FBQUUsZUFBTztBQUFBLE1BQUM7QUFBQyxlQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUU7QUFBQyxVQUFFLGVBQWE7QUFBRyxZQUFHLEVBQUUsTUFBTSxHQUFFLENBQUMsSUFBRSxFQUFFO0FBQUEsWUFBVyxLQUFHO0FBQUMsaUJBQU8sZUFBZSxHQUFFLEdBQUUsQ0FBQztBQUFBLFFBQUMsU0FBTyxHQUFFO0FBQUEsUUFBQztBQUFBLE1BQUM7QUFBQyxlQUFTLEVBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRTtBQUFDLFlBQUUsV0FBUyxJQUFFLEtBQUc7QUFBRSxpQkFBUSxLQUFLLEVBQUUsTUFBRyxLQUFHLEVBQUUsUUFBUSxDQUFDLEtBQUcsR0FBRyxHQUFFLElBQUUsR0FBRSxFQUFFLENBQUMsQ0FBQztBQUFBLE1BQUM7QUFBQyxlQUFTLEdBQUcsR0FBRSxHQUFFO0FBQUMsaUJBQVEsS0FBSyxFQUFFLE1BQUssS0FBRyxHQUFHLEdBQUUsR0FBRSxFQUFFLENBQUMsQ0FBQztBQUFBLE1BQUM7QUFBQyxlQUFTLEVBQUUsR0FBRTtBQUFDLFlBQUksSUFBRSxDQUFDO0FBQUUsZUFBTyxvQkFBb0IsQ0FBQyxFQUFFLFFBQVEsU0FBUyxHQUFFO0FBQUMsWUFBRSxDQUFDLElBQUUsT0FBTyx5QkFBeUIsR0FBRSxDQUFDO0FBQUEsUUFBQyxDQUFDO0FBQUUsZUFBTztBQUFBLE1BQUM7QUFDeGQsZUFBUyxHQUFHLEdBQUUsR0FBRTtBQUFDLGlCQUFRLElBQUUsT0FBTyxvQkFBb0IsQ0FBQyxHQUFFLElBQUUsR0FBRSxHQUFFLElBQUUsRUFBRSxRQUFPLElBQUksS0FBRSxFQUFFLENBQUMsR0FBRSxFQUFFLENBQUMsSUFBRSxFQUFFLENBQUM7QUFBQSxNQUFDO0FBQUMsZUFBUyxHQUFHLEdBQUU7QUFBQyxlQUFPLGFBQWEsT0FBSyxJQUFFLFNBQVMsZUFBZSxLQUFHLENBQUM7QUFBQSxNQUFDO0FBQUMsZUFBUyxFQUFFLEdBQUU7QUFBQyxpQkFBUSxJQUFFLENBQUMsR0FBRSxJQUFFLEdBQUUsSUFBRSxVQUFVLFFBQU8sRUFBRSxFQUFFLEdBQUUsQ0FBQyxJQUFFLFVBQVUsQ0FBQztBQUFFLFlBQUcsTUFBSSxFQUFFLE9BQU8sUUFBTyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQUUsWUFBRSxTQUFTLHVCQUF1QjtBQUFFLFlBQUUsRUFBRSxDQUFDO0FBQUUsaUJBQVEsSUFBRSxFQUFFLEtBQUssR0FBRSxDQUFDLEVBQUUsTUFBSyxJQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUUsWUFBWSxHQUFHLEVBQUUsS0FBSyxDQUFDO0FBQUUsZUFBTztBQUFBLE1BQUM7QUFDblksZUFBUyxHQUFHLEdBQUU7QUFBQyxZQUFJO0FBQUUsYUFBSSxJQUFFLFdBQVMsSUFBRSxJQUFFLEdBQUUsSUFBRSxHQUFFLElBQUksS0FBRSxFQUFFLE9BQU8sU0FBUyxHQUFFLEdBQUU7QUFBQyxnQkFBTSxRQUFRLENBQUMsSUFBRSxFQUFFLEtBQUssTUFBTSxHQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUUsRUFBRSxLQUFLLENBQUM7QUFBRSxpQkFBTztBQUFBLFFBQUMsR0FBRSxDQUFDLENBQUM7QUFBRSxlQUFPO0FBQUEsTUFBQztBQUFDLGVBQVMsR0FBRyxHQUFFO0FBQUMsWUFBSSxJQUFFLENBQUMsR0FBRSxJQUFFLG9CQUFJO0FBQUksWUFBRSxFQUFFLENBQUM7QUFBRSxpQkFBUSxJQUFFLEVBQUUsS0FBSyxHQUFFLENBQUMsRUFBRSxNQUFLLElBQUUsRUFBRSxLQUFLLEVBQUUsS0FBRSxFQUFFLE9BQU0sRUFBRSxJQUFJLENBQUMsTUFBSSxFQUFFLEtBQUssQ0FBQyxHQUFFLEVBQUUsSUFBSSxDQUFDO0FBQUcsZUFBTztBQUFBLE1BQUM7QUFBQztBQUFDLFVBQUksSUFBRSxDQUFDLEdBQUU7QUFBRyxlQUFTLEdBQUcsR0FBRTtBQUFDLGVBQUssS0FBRyxNQUFHLEdBQUcsQ0FBQztBQUFHLFVBQUUsS0FBSyxDQUFDO0FBQUEsTUFBQztBQUFDLGVBQVMsSUFBRztBQUFDLGFBQUc7QUFBRyxpQkFBUSxJQUFFLENBQUMsQ0FBQyxFQUFFLFFBQU8sRUFBRSxTQUFRLEdBQUUsTUFBTSxFQUFFO0FBQUUsZUFBTztBQUFBLE1BQUM7QUFBQyxRQUFFLE9BQUs7QUFBRSxlQUFTLEtBQUk7QUFBQyxhQUFLLElBQUU7QUFBRyxhQUFLLGFBQVcsQ0FBQztBQUFFLGFBQUssZUFBYSxDQUFDO0FBQUUsYUFBSyxJQUFFLG9CQUFJO0FBQUEsTUFBRztBQUFDLGVBQVMsR0FBRyxHQUFFO0FBQUMsVUFBRSxNQUFJLEVBQUUsSUFBRSxNQUFHLEdBQUcsV0FBVTtBQUFDLFlBQUUsTUFBTTtBQUFBLFFBQUMsQ0FBQztBQUFBLE1BQUU7QUFBQyxTQUFHLFVBQVUsUUFBTSxXQUFVO0FBQUMsWUFBRyxLQUFLLEdBQUU7QUFBQyxlQUFLLElBQUU7QUFBRyxjQUFJLElBQUUsS0FBSyxZQUFZO0FBQUUsWUFBRSxVQUFRLEtBQUssRUFBRSxRQUFRLFNBQVMsR0FBRTtBQUFDLGNBQUUsQ0FBQztBQUFBLFVBQUMsQ0FBQztBQUFBLFFBQUM7QUFBQSxNQUFDO0FBQUUsU0FBRyxVQUFVLGNBQVksV0FBVTtBQUFDLFlBQUcsS0FBSyxXQUFXLFVBQVEsS0FBSyxhQUFhLFFBQU87QUFBQyxjQUFJLElBQUUsQ0FBQyxFQUFDLFlBQVcsS0FBSyxZQUFXLGNBQWEsS0FBSyxhQUFZLENBQUM7QUFBRSxlQUFLLGFBQVcsQ0FBQztBQUFFLGVBQUssZUFBYSxDQUFDO0FBQUUsaUJBQU87QUFBQSxRQUFDO0FBQUMsZUFBTSxDQUFDO0FBQUEsTUFBQztBQUNqM0IsZUFBUyxHQUFHLEdBQUUsR0FBRTtBQUFDLFlBQUksSUFBRSxFQUFFLENBQUM7QUFBRSxVQUFFLE1BQUksRUFBRSxJQUFFLElBQUk7QUFBSSxVQUFFLEVBQUUsRUFBRSxJQUFJLENBQUM7QUFBRSxZQUFJLElBQUUsRUFBRTtBQUFFLGVBQU0sRUFBQyxHQUFFLEdBQUUsSUFBRyxHQUFFLElBQUcsR0FBRSxhQUFZLFdBQVU7QUFBQyxpQkFBTyxFQUFFLFlBQVk7QUFBQSxRQUFDLEVBQUM7QUFBQSxNQUFDO0FBQUMsZUFBUyxHQUFHLEdBQUU7QUFBQyxZQUFJLElBQUUsS0FBRyxFQUFFO0FBQUcsY0FBSSxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsR0FBRSxFQUFFLEVBQUUsU0FBTyxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUU7QUFBQSxNQUFNO0FBQ3ROLGVBQVMsR0FBRyxHQUFFLEdBQUU7QUFBQyxZQUFJLElBQUUsRUFBRSxZQUFZO0FBQUUsZUFBTyxFQUFFLElBQUksU0FBUyxHQUFFO0FBQUMsY0FBSSxJQUFFLE1BQUksRUFBRSxPQUFPLFlBQVk7QUFBRSxjQUFHLEtBQUcsRUFBRSxZQUFXO0FBQUMsZ0JBQUcsSUFBRSxDQUFDLEVBQUUsTUFBTSxLQUFLLEVBQUUsVUFBVSxFQUFFLE9BQU8sU0FBUyxHQUFFO0FBQUMscUJBQU8sTUFBSSxFQUFFLFlBQVk7QUFBQSxZQUFDLENBQUMsR0FBRSxFQUFFLE9BQU8sUUFBTyxJQUFFLE9BQU8sT0FBTyxDQUFDLEdBQUUsT0FBTyxlQUFlLEdBQUUsY0FBYSxFQUFDLE9BQU0sR0FBRSxjQUFhLEtBQUUsQ0FBQyxHQUFFO0FBQUEsVUFBQyxXQUFTLEVBQUUsUUFBTztBQUFBLFFBQUMsQ0FBQyxFQUFFLE9BQU8sU0FBUyxHQUFFO0FBQUMsaUJBQU87QUFBQSxRQUFDLENBQUM7QUFBQSxNQUFDO0FBQUM7QUFBQyxVQUFJLEtBQUcsZUFBYyxLQUFHO0FBQWUsZUFBUyxHQUFHLEdBQUU7QUFBQyxnQkFBTyxHQUFFO0FBQUEsVUFBQyxLQUFLO0FBQUksbUJBQU07QUFBQSxVQUFRLEtBQUs7QUFBSSxtQkFBTTtBQUFBLFVBQU8sS0FBSztBQUFJLG1CQUFNO0FBQUEsVUFBTyxLQUFLO0FBQUksbUJBQU07QUFBQSxVQUFTLEtBQUs7QUFBUyxtQkFBTTtBQUFBLFFBQVE7QUFBQSxNQUFDO0FBQUMsZUFBUyxHQUFHLEdBQUU7QUFBQyxpQkFBUSxJQUFFLENBQUMsR0FBRSxJQUFFLEdBQUUsSUFBRSxFQUFFLFFBQU8sSUFBSSxHQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUU7QUFBRyxlQUFPO0FBQUEsTUFBQztBQUFDLFVBQUksS0FBRyxHQUFHLHNGQUFzRixNQUFNLEdBQUcsQ0FBQyxHQUFFLEtBQUcsR0FBRyw4REFBOEQsTUFBTSxHQUFHLENBQUM7QUFDcnhCLGVBQVMsR0FBRyxHQUFFLEdBQUU7QUFBQyx1QkFBYSxFQUFFLGNBQVksSUFBRSxFQUFFO0FBQVMsaUJBQVEsSUFBRSxJQUFHLElBQUUsSUFBRSxFQUFFLENBQUMsSUFBRSxFQUFFLFlBQVcsSUFBRSxHQUFFLElBQUUsRUFBRSxRQUFPLElBQUUsUUFBTyxJQUFFLE1BQUksSUFBRSxFQUFFLENBQUMsSUFBRyxLQUFJO0FBQUMsYUFBRTtBQUFDLGdCQUFJQyxLQUFFO0FBQUUsZ0JBQUksSUFBRSxHQUFFLElBQUU7QUFBRSxvQkFBT0EsR0FBRSxVQUFTO0FBQUEsY0FBQyxLQUFLLEtBQUs7QUFBYSxvQkFBRUEsR0FBRTtBQUFVLHlCQUFRLElBQUUsTUFBSSxHQUFFLElBQUVBLEdBQUUsWUFBVyxJQUFFLEdBQUUsR0FBRSxJQUFFLEVBQUUsQ0FBQyxHQUFFLElBQUksTUFBRyxNQUFJLEVBQUUsT0FBSyxPQUFLLEVBQUUsTUFBTSxRQUFRLElBQUcsRUFBRSxJQUFFO0FBQUkscUJBQUc7QUFBSSxnQkFBQUEsS0FBRSxHQUFHLENBQUMsSUFBRSxJQUFFLElBQUUsR0FBR0EsSUFBRSxDQUFDLElBQUUsT0FBSyxJQUFFO0FBQUksc0JBQU07QUFBQSxjQUFFLEtBQUssS0FBSztBQUFVLGdCQUFBQSxLQUFFQSxHQUFFO0FBQUssZ0JBQUFBLEtBQUUsS0FBRyxHQUFHLEVBQUUsU0FBUyxJQUFFQSxLQUFFQSxHQUFFLFFBQVEsSUFBRyxFQUFFO0FBQUUsc0JBQU07QUFBQSxjQUFFLEtBQUssS0FBSztBQUFhLGdCQUFBQSxLQUFFLFNBQVVBLEdBQUUsT0FBSztBQUFTLHNCQUFNO0FBQUEsY0FBRTtBQUFRLHNCQUFNLE9BQU8sUUFBUSxNQUFNQSxFQUFDLEdBQzlnQixNQUFNLGlCQUFpQjtBQUFBLFlBQUU7QUFBQSxVQUFDO0FBQUMsZUFBR0E7QUFBQSxRQUFDO0FBQUMsZUFBTztBQUFBLE1BQUM7QUFBQztBQUFDLFVBQUksSUFBRSxFQUFFLEdBQUUsS0FBRyxFQUFDLGVBQWMsU0FBUyxHQUFFO0FBQUMsZUFBTyxLQUFLLDZCQUE2QixDQUFDO0FBQUEsTUFBQyxHQUFFLGtCQUFpQixTQUFTLEdBQUU7QUFBQyxlQUFPLEtBQUssZ0NBQWdDLENBQUM7QUFBQSxNQUFDLEVBQUMsR0FBRSxLQUFHLENBQUM7QUFBRSxlQUFTLEdBQUcsR0FBRTtBQUFDLFdBQUcsQ0FBQyxJQUFFLFNBQVMsR0FBRTtBQUFDLGlCQUFPLEVBQUUsb0JBQWtCLENBQUM7QUFBQSxRQUFDO0FBQUEsTUFBQztBQUFDLGVBQVMsRUFBRSxHQUFFLEdBQUU7QUFBQyxVQUFFLEdBQUUsR0FBRSxpQkFBaUI7QUFBRSxpQkFBUSxLQUFLLEVBQUUsSUFBRyxDQUFDO0FBQUEsTUFBQztBQUFDLGVBQVMsRUFBRSxHQUFFLEdBQUU7QUFBQyxZQUFFLFdBQVMsSUFBRSxDQUFDLElBQUU7QUFBRSxpQkFBUSxJQUFFLEdBQUUsSUFBRSxFQUFFLFFBQU8sS0FBSTtBQUFDLGNBQUksSUFBRSxFQUFFLENBQUMsR0FBRSxJQUFFLE9BQU8seUJBQXlCLEdBQUUsQ0FBQztBQUFFLGdCQUFJLE9BQU8sZUFBZSxHQUFFLG9CQUFrQixHQUFFLENBQUMsR0FBRSxFQUFFLFFBQU0sR0FBRyxDQUFDLE1BQUksR0FBRyxDQUFDLElBQUUsRUFBRSxTQUFPLEdBQUcsQ0FBQztBQUFBLFFBQUU7QUFBQSxNQUFDO0FBQzFoQixVQUFJLElBQUUsU0FBUyxpQkFBaUIsVUFBUyxXQUFXLFVBQVMsTUFBSyxLQUFFLEdBQUUsSUFBRSxTQUFTLGlCQUFpQixVQUFTLFdBQVcsY0FBYSxNQUFLLEtBQUUsR0FBRSxLQUFHLFNBQVMsZUFBZSxtQkFBbUIsT0FBTztBQUFFLGVBQVMsR0FBRyxHQUFFO0FBQUMsaUJBQVEsR0FBRSxJQUFFLEVBQUUsNEJBQTJCLEdBQUUsMkJBQTJCLENBQUM7QUFBQSxNQUFDO0FBQUMsVUFBSSxLQUFHLENBQUMscUJBQW9CLG9CQUFtQixZQUFXLG1CQUFtQixHQUFFLEtBQUcsQ0FBQyxpQkFBZ0Isb0JBQW1CLFVBQVMsV0FBVSxpQkFBaUI7QUFDcmIsZUFBUyxLQUFJO0FBQUMsWUFBSSxJQUFFLENBQUMsaUJBQWdCLG9CQUFtQixxQkFBcUI7QUFBRSxlQUFPLGVBQWEsRUFBRSxPQUFPLFlBQVksV0FBVSxDQUFDLEdBQUUsV0FBUyxPQUFPLG1DQUFpQyxFQUFFLE9BQU8sV0FBVSxDQUFDLE1BQUksRUFBRSxLQUFLLFdBQVUsQ0FBQyxHQUFFLEVBQUUsT0FBTyxXQUFVLENBQUMsR0FBRSxFQUFFLGVBQWUsV0FBVSxDQUFDO0FBQUcsWUFBRSxFQUFFLEtBQUssV0FBVSxtR0FBbUcsTUFBTSxHQUFHLENBQUMsSUFBRSxFQUFFLEtBQUssV0FBVSxFQUFDLFlBQVcsRUFBQyxLQUFJLFdBQVU7QUFBQyxZQUFFLGNBQVk7QUFBSyxpQkFBTyxFQUFFLFdBQVc7QUFBQSxRQUFDLEVBQUMsR0FBRSxZQUFXLEVBQUMsS0FBSSxXQUFVO0FBQUMsWUFBRSxjQUM5Z0I7QUFBSyxpQkFBTyxFQUFFLFdBQVc7QUFBQSxRQUFDLEVBQUMsR0FBRSxXQUFVLEVBQUMsS0FBSSxXQUFVO0FBQUMsWUFBRSxjQUFZO0FBQUssaUJBQU8sRUFBRSxVQUFVO0FBQUEsUUFBQyxFQUFDLEdBQUUsaUJBQWdCLEVBQUMsS0FBSSxXQUFVO0FBQUMsWUFBRSxjQUFZO0FBQUssaUJBQU8sRUFBRSxnQkFBZ0I7QUFBQSxRQUFDLEVBQUMsR0FBRSxhQUFZLEVBQUMsS0FBSSxXQUFVO0FBQUMsWUFBRSxjQUFZO0FBQUssaUJBQU8sRUFBRSxZQUFZO0FBQUEsUUFBQyxFQUFDLEdBQUUsWUFBVyxFQUFDLEtBQUksV0FBVTtBQUFDLGNBQUksSUFBRSxDQUFDO0FBQUUsWUFBRSxjQUFZO0FBQUssbUJBQVEsSUFBRSxFQUFFLFdBQVcsR0FBRSxJQUFHLEdBQUUsS0FBSyxDQUFDLEdBQUUsSUFBRSxFQUFFLFlBQVk7QUFBRSxpQkFBTztBQUFBLFFBQUMsRUFBQyxHQUFFLGVBQWMsRUFBQyxLQUFJLFdBQVU7QUFBQyxZQUFFLGNBQVk7QUFBSyxpQkFBTyxFQUFFLFdBQVc7QUFBQSxRQUFDLEVBQUMsR0FBRSxhQUFZLEVBQUMsS0FBSSxXQUFVO0FBQUMsa0JBQU8sS0FBSyxVQUFTO0FBQUEsWUFBQyxLQUFLLEtBQUs7QUFBQSxZQUFhLEtBQUssS0FBSztBQUF1Qix1QkFBUSxJQUM5aUIsU0FBUyxpQkFBaUIsTUFBSyxXQUFXLFdBQVUsTUFBSyxLQUFFLEdBQUUsSUFBRSxJQUFHLEdBQUUsSUFBRSxFQUFFLFNBQVMsSUFBRyxNQUFHLEVBQUU7QUFBVSxxQkFBTztBQUFBLFlBQUU7QUFBUSxxQkFBTyxLQUFLO0FBQUEsVUFBUztBQUFBLFFBQUMsR0FBRSxLQUFJLFNBQVMsR0FBRTtBQUFDLGNBQUcsZ0JBQWMsT0FBTyxLQUFHLFNBQU8sRUFBRSxLQUFFO0FBQUcsa0JBQU8sS0FBSyxVQUFTO0FBQUEsWUFBQyxLQUFLLEtBQUs7QUFBQSxZQUFhLEtBQUssS0FBSztBQUF1QixpQkFBRyxJQUFJO0FBQUUsZUFBQyxJQUFFLEVBQUUsVUFBUSxLQUFLLGFBQVcsS0FBSyxpQkFBZSxLQUFLLDRCQUE0QixTQUFTLGVBQWUsQ0FBQyxHQUFFLE1BQU07QUFBRTtBQUFBLFlBQU07QUFBUSxtQkFBSyxZQUFVO0FBQUEsVUFBQztBQUFBLFFBQUMsRUFBQyxFQUFDLENBQUM7QUFBRSxVQUFFLEtBQUssV0FBVSx1RUFBdUUsTUFBTSxHQUFHLENBQUM7QUFDdmhCLFVBQUUsWUFBWSxXQUFVLENBQUMsaUJBQWdCLFVBQVUsQ0FBQztBQUFFLFlBQUUsRUFBQyxtQkFBa0IsRUFBQyxLQUFJLFdBQVU7QUFBQyxZQUFFLGNBQVk7QUFBSyxpQkFBTyxFQUFFLFdBQVc7QUFBQSxRQUFDLEVBQUMsR0FBRSxrQkFBaUIsRUFBQyxLQUFJLFdBQVU7QUFBQyxZQUFFLGNBQVk7QUFBSyxpQkFBTyxFQUFFLFVBQVU7QUFBQSxRQUFDLEVBQUMsR0FBRSxVQUFTLEVBQUMsS0FBSSxXQUFVO0FBQUMsY0FBSSxJQUFFLENBQUM7QUFBRSxZQUFFLGNBQVk7QUFBSyxtQkFBUSxJQUFFLEVBQUUsV0FBVyxHQUFFLElBQUcsR0FBRSxLQUFLLENBQUMsR0FBRSxJQUFFLEVBQUUsWUFBWTtBQUFFLGlCQUFPLEVBQUUsQ0FBQztBQUFBLFFBQUMsRUFBQyxHQUFFLG1CQUFrQixFQUFDLEtBQUksV0FBVTtBQUFDLGlCQUFPLEtBQUssV0FBUyxLQUFLLFNBQVMsU0FBTztBQUFBLFFBQUMsRUFBQyxFQUFDO0FBQUUsYUFBRyxFQUFFLFFBQVEsV0FBVSxFQUFFLEdBQUUsRUFBRSxRQUFRLFdBQVU7QUFBQSxVQUFDO0FBQUEsVUFBeUI7QUFBQSxVQUN0ZTtBQUFBLFVBQVk7QUFBQSxRQUFXLENBQUMsR0FBRSxFQUFFLFlBQVksV0FBVSxDQUFDLFlBQVcsYUFBWSxXQUFXLENBQUMsTUFBSSxFQUFFLFFBQVEsV0FBVSxDQUFDLEdBQUUsRUFBRSxRQUFRLFdBQVUsRUFBQyx3QkFBdUIsRUFBQyxLQUFJLFdBQVU7QUFBQyxZQUFFLGNBQVk7QUFBSyxpQkFBTyxFQUFFLGdCQUFnQjtBQUFBLFFBQUMsRUFBQyxHQUFFLG9CQUFtQixFQUFDLEtBQUksV0FBVTtBQUFDLFlBQUUsY0FBWTtBQUFLLGlCQUFPLEVBQUUsWUFBWTtBQUFBLFFBQUMsRUFBQyxHQUFFLFdBQVUsRUFBQyxLQUFJLFdBQVU7QUFBQyxpQkFBTyxHQUFHLE1BQUssRUFBRTtBQUFBLFFBQUMsR0FBRSxLQUFJLFNBQVMsR0FBRTtBQUFDLGNBQUksSUFBRSxlQUFhLEtBQUssWUFBVSxLQUFLLFVBQVE7QUFBSyxhQUFHLENBQUM7QUFBRSxjQUFJLElBQUUsS0FBSyxhQUFXO0FBQU0sY0FBRSxLQUFLLGdCQUFjLEtBQUssaUJBQWUsR0FBRyxlQUM1ZSxHQUFHLGdCQUFnQixLQUFLLGNBQWEsQ0FBQyxJQUFFLEdBQUcsY0FBYyxDQUFDO0FBQUUsWUFBRSxZQUFVO0FBQUUsZUFBSSxJQUFFLGVBQWEsS0FBSyxZQUFVLEVBQUUsVUFBUSxHQUFFLElBQUUsRUFBRSw0QkFBMkIsR0FBRSw0QkFBNEIsR0FBRSxNQUFNO0FBQUEsUUFBQyxFQUFDLEdBQUUsV0FBVSxFQUFDLEtBQUksV0FBVTtBQUFDLGlCQUFPLEtBQUssYUFBYSxPQUFPLEtBQUc7QUFBQSxRQUFFLEdBQUUsS0FBSSxTQUFTLEdBQUU7QUFBQyxlQUFLLGFBQWEsU0FBUSxDQUFDO0FBQUEsUUFBQyxFQUFDLEVBQUMsQ0FBQztBQUFHLFVBQUUsUUFBUSxXQUFVLG9GQUFvRixNQUFNLEdBQUcsQ0FBQztBQUFFLFVBQUUsUUFBUSxXQUFVLEVBQUU7QUFBRSxVQUFFLFlBQVksV0FBVSxDQUFDLFNBQVEsTUFBTSxDQUFDO0FBQUUsZUFBTyx1QkFDamYsRUFBRSxPQUFPLG9CQUFvQixXQUFVLENBQUMsV0FBVyxDQUFDO0FBQUUsWUFBRSxFQUFFLGlCQUFpQixXQUFVLEVBQUUsSUFBRSxFQUFFLGlCQUFpQixXQUFVLENBQUM7QUFBRSxVQUFFLGlCQUFpQixXQUFVLEVBQUU7QUFBRSxhQUFHLEVBQUUsU0FBUyxXQUFVLEVBQUUsR0FBRSxFQUFFLFNBQVMsV0FBVSxDQUFDLGVBQWUsQ0FBQyxLQUFHLEVBQUUsU0FBUyxXQUFVLENBQUM7QUFBRSxVQUFFLFNBQVMsV0FBVSxDQUFDLGNBQWEsa0JBQWlCLG9CQUFtQixHQUFHLENBQUMsQ0FBQztBQUFFLFVBQUUsU0FBUyxXQUFVLEVBQUU7QUFBQSxNQUFDO0FBQUM7QUFBQyxVQUFJLEtBQUcsRUFBRSxFQUFDLElBQUksYUFBWTtBQUFDLGVBQU8sS0FBSztBQUFBLE1BQWtCLEdBQUUsSUFBSSxhQUFZO0FBQUMsZUFBTyxLQUFLO0FBQUEsTUFBa0IsR0FBRSxJQUFJLFlBQVc7QUFBQyxlQUFPLEtBQUs7QUFBQSxNQUFpQixHQUFFLElBQUksb0JBQW1CO0FBQUMsZUFBTyxLQUFLO0FBQUEsTUFBeUIsR0FBRSxJQUFJLFdBQVU7QUFBQyxlQUFPLEtBQUs7QUFBQSxNQUFnQixHQUFFLElBQUksb0JBQW1CO0FBQUMsZUFBTyxLQUFLO0FBQUEsTUFBeUIsR0FBRSxJQUFJLG1CQUFrQjtBQUFDLGVBQU8sS0FBSztBQUFBLE1BQXdCLEdBQUUsSUFBSSxhQUFZO0FBQUMsZUFBTyxLQUFLO0FBQUEsTUFBa0IsRUFBQyxDQUFDLEdBQUUsS0FBRyxFQUFFLEVBQUMsSUFBSSxjQUFhO0FBQUMsZUFBTyxLQUFLO0FBQUEsTUFBbUIsR0FBRSxJQUFJLFlBQVksR0FBRTtBQUFDLGFBQUssc0JBQ3QyQjtBQUFBLE1BQUMsR0FBRSxJQUFJLFlBQVc7QUFBQyxlQUFPLEtBQUs7QUFBQSxNQUFpQixHQUFFLElBQUksVUFBVSxHQUFFO0FBQUMsYUFBSyxvQkFBa0I7QUFBQSxNQUFDLEVBQUMsQ0FBQyxHQUFFLEtBQUcsRUFBRSxFQUFDLElBQUksZ0JBQWU7QUFBQyxlQUFPLEtBQUs7QUFBQSxNQUFxQixHQUFFLElBQUksYUFBWTtBQUFDLGVBQU8sS0FBSztBQUFBLE1BQWtCLEdBQUUsSUFBSSxjQUFhO0FBQUMsZUFBTyxLQUFLO0FBQUEsTUFBbUIsR0FBRSxJQUFJLGtCQUFpQjtBQUFDLGVBQU8sS0FBSztBQUFBLE1BQXVCLEdBQUUsSUFBSSxxQkFBb0I7QUFBQyxlQUFPLEtBQUs7QUFBQSxNQUEwQixHQUFFLElBQUkseUJBQXdCO0FBQUMsZUFBTyxLQUFLO0FBQUEsTUFBOEIsR0FBRSxJQUFJLFlBQVc7QUFBQyxlQUFPLEtBQUs7QUFBQSxNQUFpQixHQUFFLElBQUksVUFBVSxHQUFFO0FBQUMsYUFBSyxvQkFDMWdCO0FBQUEsTUFBQyxFQUFDLENBQUM7QUFBRSxlQUFTLEdBQUcsR0FBRTtBQUFDLGlCQUFRLEtBQUssR0FBRTtBQUFDLGNBQUksSUFBRSxFQUFFLENBQUM7QUFBRSxnQkFBSSxFQUFFLGFBQVc7QUFBQSxRQUFHO0FBQUEsTUFBQztBQUFDLFNBQUcsRUFBRTtBQUFFLFNBQUcsRUFBRTtBQUFFLFNBQUcsRUFBRTtBQUFFLFVBQUksS0FBRyxFQUFFLEtBQUcsU0FBSyxFQUFFLEdBQUUsS0FBRyxLQUFHLFdBQVU7QUFBQSxNQUFDLElBQUUsU0FBUyxHQUFFO0FBQUMsWUFBSSxJQUFFLEVBQUUsQ0FBQztBQUFFLFVBQUUsTUFBSSxFQUFFLElBQUUsTUFBRyxHQUFHLEdBQUUsRUFBRTtBQUFBLE1BQUUsR0FBRSxLQUFHLEtBQUcsV0FBVTtBQUFBLE1BQUMsSUFBRSxTQUFTLEdBQUU7QUFBQyxZQUFJLElBQUUsRUFBRSxDQUFDO0FBQUUsVUFBRSxNQUFJLEVBQUUsSUFBRSxNQUFHLEdBQUcsR0FBRSxFQUFFLEdBQUUsT0FBTyxrQkFBZ0IsT0FBTyxlQUFlLDZCQUEyQixDQUFDLEVBQUUsS0FBRyxHQUFHLEdBQUUsRUFBRTtBQUFBLE1BQUU7QUFBRSxVQUFJLElBQUUsb0JBQWtCLEtBQUssSUFBSSxHQUFFLEtBQUcsV0FBVTtBQUFDLFlBQUksSUFBRSxPQUFPLHlCQUF5QixNQUFNLFdBQVUsVUFBVTtBQUFFLGVBQU8sSUFBRSxTQUFTLEdBQUU7QUFBQyxpQkFBTyxFQUFFLElBQUksS0FBSyxDQUFDO0FBQUEsUUFBQyxJQUFFO0FBQUEsTUFBSSxFQUFFLEdBQUUsS0FBRyxXQUFVO0FBQUMsaUJBQVMsSUFBRztBQUFBLFFBQUM7QUFBQyxZQUFJLElBQUUsT0FBRyxJQUFFLEVBQUMsSUFBSSxVQUFTO0FBQUMsY0FBRTtBQUFHLGlCQUFNO0FBQUEsUUFBRSxFQUFDO0FBQUUsZUFBTyxpQkFBaUIsUUFBTyxHQUFFLENBQUM7QUFBRSxlQUFPLG9CQUFvQixRQUFPLEdBQUUsQ0FBQztBQUFFLGVBQU87QUFBQSxNQUFDLEVBQUU7QUFBRSxlQUFTLEdBQUcsR0FBRTtBQUFDLFlBQUcsU0FBTyxLQUFHLGFBQVcsT0FBTyxLQUFHLGVBQWEsT0FBTyxHQUFFO0FBQUMsY0FBSSxJQUFFLENBQUMsQ0FBQztBQUFFLGNBQUksSUFBRTtBQUFBLFFBQUUsT0FBSztBQUFDLGNBQUUsQ0FBQyxDQUFDLEVBQUU7QUFBUSxjQUFFLENBQUMsQ0FBQyxFQUFFO0FBQUssY0FBSSxJQUFFLEVBQUU7QUFBQSxRQUFDO0FBQUMsZUFBTSxFQUFDLEdBQUUsR0FBRSxTQUFRLEdBQUUsTUFBSyxHQUFFLEdBQUUsS0FBRyxJQUFFLEVBQUM7QUFBQSxNQUFDO0FBQ3J6QixVQUFJLEtBQUc7QUFBQSxRQUFDLE1BQUs7QUFBQSxRQUFHLE9BQU07QUFBQSxRQUFHLFNBQVE7QUFBQSxRQUFHLFVBQVM7QUFBQSxRQUFHLE9BQU07QUFBQSxRQUFHLFVBQVM7QUFBQSxRQUFHLFdBQVU7QUFBQSxRQUFHLFlBQVc7QUFBQSxRQUFHLFlBQVc7QUFBQSxRQUFHLFdBQVU7QUFBQSxRQUFHLFVBQVM7QUFBQSxRQUFHLFdBQVU7QUFBQSxRQUFHLFNBQVE7QUFBQSxRQUFHLE9BQU07QUFBQSxRQUFHLGFBQVk7QUFBQSxRQUFHLE9BQU07QUFBQSxRQUFHLFNBQVE7QUFBQSxRQUFHLE9BQU07QUFBQSxRQUFHLGtCQUFpQjtBQUFBLFFBQUcsbUJBQWtCO0FBQUEsUUFBRyxnQkFBZTtBQUFBLFFBQUcsWUFBVztBQUFBLFFBQUcsVUFBUztBQUFBLFFBQUcsV0FBVTtBQUFBLFFBQUcsYUFBWTtBQUFBLFFBQUcsYUFBWTtBQUFBLFFBQUcsY0FBYTtBQUFBLFFBQUcsYUFBWTtBQUFBLFFBQUcsYUFBWTtBQUFBLFFBQUcsV0FBVTtBQUFBLFFBQUcsZUFBYztBQUFBLFFBQUcsWUFBVztBQUFBLFFBQUcsY0FBYTtBQUFBLFFBQUcsbUJBQWtCO0FBQUEsUUFBRyxvQkFBbUI7QUFBQSxRQUFHLFdBQVU7QUFBQSxRQUNuZixNQUFLO0FBQUEsUUFBRyxXQUFVO0FBQUEsUUFBRyxXQUFVO0FBQUEsUUFBRyxVQUFTO0FBQUEsUUFBRyxNQUFLO0FBQUEsUUFBRyxTQUFRO0FBQUEsUUFBRyxhQUFZO0FBQUEsUUFBRyxZQUFXO0FBQUEsUUFBRyxhQUFZO0FBQUEsUUFBRyxVQUFTO0FBQUEsTUFBRSxHQUFFLEtBQUcsRUFBQyxpQkFBZ0IsTUFBRyx5QkFBd0IsTUFBRywwQkFBeUIsTUFBRyx1QkFBc0IsTUFBRyxpQkFBZ0IsTUFBRyw2QkFBNEIsTUFBRyxnQkFBZSxNQUFHLDRCQUEyQixNQUFHLG9CQUFtQixLQUFFO0FBQUUsZUFBUyxHQUFHLEdBQUU7QUFBQyxlQUFPLGFBQWEsT0FBSyxFQUFFLG9CQUFvQixJQUFFO0FBQUEsTUFBQztBQUMzWixlQUFTLEVBQUUsR0FBRSxHQUFFO0FBQUMsWUFBSSxJQUFFLENBQUMsR0FBRSxJQUFFO0FBQUUsYUFBSSxJQUFFLEdBQUcsQ0FBQyxHQUFFLElBQUcsR0FBRSxLQUFLLENBQUMsR0FBRSxJQUFFLEVBQUUsdUJBQXFCLEVBQUUsdUJBQXFCLEVBQUUsYUFBVyxLQUFLLDBCQUF3QixFQUFFLFNBQU8sS0FBRyxNQUFJLEtBQUcsRUFBRSxPQUFLLEVBQUU7QUFBbUIsVUFBRSxFQUFFLFNBQU8sQ0FBQyxNQUFJLFlBQVUsRUFBRSxLQUFLLE1BQU07QUFBRSxlQUFPO0FBQUEsTUFBQztBQUFDLGVBQVMsR0FBRyxHQUFFO0FBQUMsVUFBRSxtQkFBaUIsRUFBRSxpQkFBZSxFQUFFLEVBQUUsUUFBTyxJQUFFO0FBQUcsZUFBTyxFQUFFO0FBQUEsTUFBYztBQUFDLGVBQVMsR0FBRyxHQUFFLEdBQUU7QUFBQyxZQUFHLENBQUMsRUFBRSxRQUFPO0FBQUUsWUFBRSxFQUFFLEdBQUUsSUFBRTtBQUFFLGlCQUFRLElBQUUsR0FBRSxHQUFFLElBQUUsUUFBTyxHQUFFLElBQUUsUUFBTyxJQUFFLEVBQUUsUUFBTyxJQUFJLEtBQUcsSUFBRSxFQUFFLENBQUMsR0FBRSxJQUFFLEdBQUcsQ0FBQyxHQUFFLE1BQUksTUFBSSxJQUFFLEVBQUUsUUFBUSxDQUFDLEdBQUUsSUFBRSxJQUFHLENBQUMsRUFBRSxDQUFDLEtBQUcsS0FBRyxFQUFFLFFBQU87QUFBQSxNQUFDO0FBQ3plLFVBQUksS0FBRyxFQUFDLElBQUksV0FBVTtBQUFDLG1CQUFTLEtBQUssZUFBYSxLQUFHLEtBQUssYUFBVyxjQUFZLEtBQUssUUFBTSxlQUFhLEtBQUssUUFBTSxHQUFHLElBQUksSUFBRSxVQUFLLEtBQUssY0FBWSxLQUFLLGFBQVcsR0FBRyxLQUFLLElBQUk7QUFBSSxlQUFPLEtBQUssY0FBWTtBQUFBLE1BQUUsR0FBRSxjQUFhLFdBQVU7QUFBQyxhQUFLLG1CQUFpQixLQUFLLGlCQUFlLEVBQUUsS0FBSyxVQUFTLEtBQUssUUFBUTtBQUFHLGVBQU8sS0FBSztBQUFBLE1BQWMsR0FBRSxJQUFJLFNBQVE7QUFBQyxlQUFPLEdBQUcsS0FBSyxpQkFBZSxLQUFLLHlCQUF3QixLQUFLLGFBQWEsQ0FBQztBQUFBLE1BQUMsR0FBRSxJQUFJLGdCQUFlO0FBQUMsWUFBRyxDQUFDLEtBQUssZ0JBQWdCLFFBQU87QUFBSyxhQUFLLGdDQUN4ZSxLQUFLLDhCQUE0QixFQUFFLEtBQUssaUJBQWdCLElBQUU7QUFBRyxlQUFPLEdBQUcsS0FBSyxpQkFBZSxLQUFLLHlCQUF3QixLQUFLLDJCQUEyQjtBQUFBLE1BQUMsR0FBRSxpQkFBZ0IsV0FBVTtBQUFDLGNBQU0sVUFBVSxnQkFBZ0IsS0FBSyxJQUFJO0FBQUUsYUFBSyxJQUFFO0FBQUEsTUFBRSxHQUFFLDBCQUF5QixXQUFVO0FBQUMsY0FBTSxVQUFVLHlCQUF5QixLQUFLLElBQUk7QUFBRSxhQUFLLElBQUUsS0FBSyxnQ0FBOEI7QUFBQSxNQUFFLEVBQUMsR0FBRSxLQUFHLEVBQUUsS0FBRyxPQUFPLHlCQUF5QixNQUFNLFdBQVUsWUFBWTtBQUN4YixhQUFLLE9BQU8sZUFBZSxJQUFHLGNBQWEsRUFBQyxLQUFJLFdBQVU7QUFBQyxlQUFPLEtBQUssa0JBQWdCLEtBQUssU0FBTyxNQUFNLFlBQVUsS0FBSztBQUFBLE1BQXlCLEdBQUUsWUFBVyxNQUFHLGNBQWEsS0FBRSxDQUFDLEdBQUUsT0FBTyxlQUFlLElBQUcsNkJBQTRCLEVBQUU7QUFBRyxlQUFTLEdBQUcsR0FBRTtBQUFDLGlCQUFTLEVBQUUsR0FBRSxHQUFFO0FBQUMsY0FBRSxJQUFJLEVBQUUsR0FBRSxDQUFDO0FBQUUsWUFBRSxhQUFXLEtBQUcsQ0FBQyxDQUFDLEVBQUU7QUFBUyxpQkFBTztBQUFBLFFBQUM7QUFBQyxVQUFFLFlBQVU7QUFBRSxVQUFFLFlBQVUsRUFBRTtBQUFVLGVBQU87QUFBQSxNQUFDO0FBQUMsVUFBSSxLQUFHLEVBQUMsT0FBTSxNQUFHLE1BQUssS0FBRTtBQUFFLGVBQVMsR0FBRyxHQUFFO0FBQUMsZUFBTyxFQUFFLGFBQVcsRUFBRSxVQUFRLEVBQUUsb0JBQWtCLEVBQUU7QUFBQSxNQUFhO0FBQ3hkLGVBQVMsR0FBRyxHQUFFLEdBQUUsR0FBRTtBQUFDLFlBQUcsSUFBRSxFQUFFLGNBQVksRUFBRSxXQUFXLEVBQUUsSUFBSSxLQUFHLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsVUFBUSxJQUFFLEdBQUUsSUFBRyxJQUFFLEVBQUUsQ0FBQyxPQUFLLENBQUMsR0FBRyxDQUFDLEtBQUcsRUFBRSxXQUFTLEVBQUUsbUJBQWlCLEVBQUUsS0FBSyxHQUFFLENBQUMsR0FBRSxDQUFDLEVBQUUsZ0NBQStCLElBQUk7QUFBQSxNQUFDO0FBQUMsVUFBSSxLQUFJLElBQUksTUFBTSxHQUFHLEVBQUcsZUFBZSxlQUFlO0FBQzdQLGVBQVMsR0FBRyxHQUFFO0FBQUMsWUFBRSxLQUFHLE9BQU8sT0FBTyxDQUFDLElBQUU7QUFBRSxZQUFJLElBQUUsRUFBRSxhQUFhLEdBQUUsSUFBRSxFQUFFLElBQUksU0FBUyxHQUFFO0FBQUMsaUJBQU8sR0FBRyxHQUFFLENBQUM7QUFBQSxRQUFDLENBQUMsR0FBRSxJQUFFLEVBQUUsU0FBUSxJQUFFLE9BQU8seUJBQXlCLEdBQUUsZUFBZTtBQUFFLGVBQU8sZUFBZSxHQUFFLGlCQUFnQixFQUFDLGNBQWEsTUFBRyxZQUFXLE1BQUcsS0FBSSxXQUFVO0FBQUMsaUJBQU87QUFBQSxRQUFDLEVBQUMsQ0FBQztBQUFFLFlBQUksSUFBRSxNQUFNLGlCQUFnQixJQUFFLE9BQU8seUJBQXlCLEdBQUUsWUFBWTtBQUFFLGVBQU8sZUFBZSxHQUFFLGNBQWEsRUFBQyxjQUFhLE1BQUcsWUFBVyxNQUFHLEtBQUksV0FBVTtBQUFDLGlCQUFPO0FBQUEsUUFBQyxFQUFDLENBQUM7QUFBRSxZQUFHO0FBQUMsbUJBQVFBLEtBQUUsRUFBRSxTQUFPLEdBQUUsS0FBR0EsSUFBRUEsTUFBSTtBQUFDLGdCQUFJLElBQUUsRUFBRUEsRUFBQztBQUFFLGdCQUFFLE1BQUksRUFBRUEsRUFBQyxJQUFFLE1BQU0sWUFDbGYsTUFBTTtBQUFnQixlQUFHLEdBQUUsR0FBRSxTQUFTO0FBQUUsZ0JBQUcsRUFBRSxFQUFFO0FBQUEsVUFBTTtBQUFDLGVBQUlBLEtBQUUsR0FBRUEsS0FBRSxFQUFFLFFBQU9BLE1BQUk7QUFBQyxnQkFBRSxFQUFFQSxFQUFDO0FBQUUsZ0JBQUksSUFBRSxNQUFJLEVBQUVBLEVBQUM7QUFBRSxnQkFBRyxLQUFHO0FBQUUsa0JBQUcsSUFBRSxJQUFFLE1BQU0sWUFBVSxNQUFNLGdCQUFlLEdBQUcsR0FBRSxHQUFFLFFBQVEsR0FBRSxFQUFFLEVBQUU7QUFBQTtBQUFBLFVBQUs7QUFBQSxRQUFDLFVBQUM7QUFBUSxpQkFBSyxJQUFFLE9BQU8sZUFBZSxHQUFFLGlCQUFnQixDQUFDLElBQUUsT0FBTyxFQUFFLGVBQWMsSUFBRSxPQUFPLGVBQWUsR0FBRSxjQUFhLENBQUMsSUFBRSxPQUFPLEVBQUU7QUFBQSxRQUFXO0FBQUEsTUFBQztBQUFDLGVBQVMsR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUMsaUJBQVEsSUFBRSxHQUFFLElBQUUsRUFBRSxRQUFPLEtBQUk7QUFBQyxjQUFJLElBQUUsRUFBRSxDQUFDLEdBQUUsSUFBRSxFQUFFLE1BQUtBLEtBQUUsRUFBRTtBQUFRLGNBQUcsTUFBSSxFQUFFLFFBQU0sTUFBSSxLQUFHLE1BQUlBLEdBQUUsUUFBTztBQUFBLFFBQUM7QUFBQyxlQUFNO0FBQUEsTUFBRTtBQUNuYyxlQUFTLEdBQUcsR0FBRTtBQUFDLFVBQUU7QUFBRSxlQUFNLENBQUMsRUFBRSxLQUFHLGdCQUFnQixRQUFNLENBQUMsR0FBRyxVQUFTLElBQUksS0FBRyxFQUFFLFlBQVUsR0FBRyxHQUFFLElBQUksR0FBRSxHQUFHLENBQUMsS0FBRyxLQUFLLDZCQUE2QixDQUFDO0FBQUEsTUFBQztBQUMzSSxlQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUU7QUFBQyxZQUFJLElBQUUsTUFBSyxJQUFFLEdBQUcsQ0FBQyxHQUFFLElBQUUsRUFBRSxTQUFRLElBQUUsRUFBRSxNQUFLQSxLQUFFLEVBQUU7QUFBRSxZQUFFLEVBQUU7QUFBRSxZQUFHLEdBQUU7QUFBQyxjQUFJLElBQUUsT0FBTztBQUFFLGNBQUcsZUFBYSxLQUFHLGFBQVc7QUFBRSxnQkFBRyxhQUFXLEtBQUcsRUFBRSxlQUFhLGVBQWEsT0FBTyxFQUFFLGFBQVk7QUFBQyxrQkFBRyxHQUFHLENBQUMsRUFBRSxRQUFPLEtBQUssZ0NBQWdDLEdBQUUsR0FBRSxDQUFDO0FBQUUsa0JBQUksSUFBRUEsTUFBRztBQUFLLGtCQUFHQSxLQUFFLEVBQUUsQ0FBQyxHQUFFO0FBQUMsb0JBQUcsS0FBRyxHQUFHQSxJQUFFLEdBQUUsR0FBRSxDQUFDLEVBQUU7QUFBQSxjQUFNLE1BQU0sR0FBRSxDQUFDLElBQUUsQ0FBQztBQUFFLGNBQUFBLEtBQUUsU0FBUyxHQUFFO0FBQUMscUJBQUcsRUFBRSw0QkFBNEIsR0FBRSxHQUFFLENBQUM7QUFBRSxrQkFBRSxZQUFVLEdBQUcsQ0FBQztBQUFFLG9CQUFHLE1BQUksR0FBRTtBQUFDLHNCQUFJLElBQUUsT0FBTyx5QkFBeUIsR0FBRSxlQUFlO0FBQUUseUJBQU8sZUFBZSxHQUFFLGlCQUFnQjtBQUFBLG9CQUFDLEtBQUksV0FBVTtBQUFDLDZCQUFPO0FBQUEsb0JBQUM7QUFBQSxvQkFDcmdCLGNBQWE7QUFBQSxrQkFBRSxDQUFDO0FBQUUsc0JBQUksSUFBRSxPQUFPLHlCQUF5QixHQUFFLFlBQVk7QUFBRSx5QkFBTyxlQUFlLEdBQUUsY0FBYSxFQUFDLGNBQWEsTUFBRyxZQUFXLE1BQUcsS0FBSSxXQUFVO0FBQUMsMkJBQU8sSUFBRSxNQUFNLGtCQUFnQixNQUFNO0FBQUEsa0JBQWMsRUFBQyxDQUFDO0FBQUEsZ0JBQUM7QUFBQyxrQkFBRSwwQkFBd0IsRUFBRTtBQUFjLG9CQUFHLENBQUMsRUFBRSxDQUFDLEtBQUcsV0FBUyxFQUFFLGFBQVcsTUFBSSxFQUFFLGFBQWEsRUFBRSxRQUFRLENBQUM7QUFBRSxzQkFBRyxFQUFFLFlBQVUsS0FBRyxFQUFFLGFBQWEsRUFBRSxRQUFRLENBQUM7QUFBRSx3QkFBRyxHQUFHLENBQUMsS0FBRyxFQUFFLFdBQVMsRUFBRSxjQUFjLEdBQUUsZUFBYSxNQUFNLGtCQUFnQixFQUFFLHlCQUF5QjtBQUFBLDZCQUFVLEVBQUUsZUFBYSxNQUFNLG1CQUM5ZSxFQUFFLFdBQVMsRUFBRSxXQUFTLEtBQUcsYUFBYSxRQUFPO0FBQUMsMEJBQUksSUFBRSxlQUFhLElBQUUsRUFBRSxLQUFLLEdBQUUsQ0FBQyxJQUFFLEVBQUUsZUFBYSxFQUFFLFlBQVksQ0FBQztBQUFFLDRCQUFJLE1BQUksS0FBRyxPQUFPLGVBQWUsR0FBRSxpQkFBZ0IsQ0FBQyxHQUFFLElBQUUsUUFBTSxPQUFPLEVBQUUsZUFBYyxLQUFHLE9BQU8sZUFBZSxHQUFFLGNBQWEsQ0FBQyxHQUFFLElBQUUsUUFBTSxPQUFPLEVBQUU7QUFBWSw2QkFBTztBQUFBLG9CQUFDO0FBQUE7QUFBQTtBQUFBLGNBQUM7QUFBRSxnQkFBRSxDQUFDLEVBQUUsS0FBSyxFQUFDLE1BQUssR0FBRSxNQUFLLEdBQUUsU0FBUSxHQUFFLElBQUdBLEdBQUMsQ0FBQztBQUFFLG1CQUFLLGFBQVcsS0FBSyxjQUFZLENBQUM7QUFBRSxtQkFBSyxXQUFXLENBQUMsSUFBRSxLQUFLLFdBQVcsQ0FBQyxLQUFHLEVBQUMsU0FBUSxDQUFDLEdBQUUsUUFBTyxDQUFDLEVBQUM7QUFBRSxtQkFBSyxXQUFXLENBQUMsRUFBRSxJQUFFLFlBQVUsUUFBUSxFQUFFLEtBQUtBLEVBQUM7QUFBRSxpQkFBRyxDQUFDLEtBQUcsS0FBSztBQUFBLGdCQUFnQztBQUFBLGdCQUNoZ0JBO0FBQUEsZ0JBQUU7QUFBQSxjQUFDO0FBQUEsWUFBQztBQUFBO0FBQUEsUUFBQztBQUFBLE1BQUM7QUFBQyxlQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUU7QUFBQyxZQUFHLEdBQUU7QUFBQyxjQUFJLElBQUUsR0FBRyxDQUFDO0FBQUUsY0FBRSxFQUFFO0FBQVEsY0FBSSxJQUFFLEVBQUU7QUFBRSxjQUFFLEVBQUU7QUFBRSxjQUFHLEdBQUcsQ0FBQyxFQUFFLFFBQU8sS0FBSyxtQ0FBbUMsR0FBRSxHQUFFLENBQUM7QUFBRSxjQUFJLElBQUUsS0FBRztBQUFLLGNBQUU7QUFBTyxjQUFJLElBQUU7QUFBSyxjQUFHO0FBQUMsZ0JBQUUsRUFBRSxDQUFDO0FBQUEsVUFBQyxTQUFPQSxJQUFFO0FBQUEsVUFBQztBQUFDLGdCQUFJLElBQUUsR0FBRyxHQUFFLEdBQUUsR0FBRSxDQUFDLEdBQUUsS0FBRyxNQUFJLElBQUUsRUFBRSxPQUFPLEdBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFHLEVBQUUsV0FBUyxFQUFFLENBQUMsSUFBRTtBQUFVLGVBQUssbUNBQW1DLEdBQUUsS0FBRyxHQUFFLENBQUM7QUFBRSxlQUFHLEtBQUssY0FBWSxLQUFLLFdBQVcsQ0FBQyxNQUFJLElBQUUsS0FBSyxXQUFXLENBQUMsRUFBRSxJQUFFLFlBQVUsUUFBUSxHQUFFLElBQUUsRUFBRSxRQUFRLENBQUMsR0FBRSxLQUFHLEtBQUcsRUFBRSxPQUFPLEdBQUUsQ0FBQztBQUFBLFFBQUU7QUFBQSxNQUFDO0FBQ2piLGVBQVMsS0FBSTtBQUFDLGlCQUFRLEtBQUssR0FBRyxRQUFPLGdDQUFnQyxHQUFFLFNBQVMsR0FBRTtBQUFDLFlBQUUsYUFBVyxHQUFHLENBQUMsR0FBRSxHQUFHLENBQUM7QUFBQSxRQUFFLEdBQUUsSUFBRTtBQUFBLE1BQUM7QUFBQyxVQUFJLEtBQUcsRUFBRSxFQUFFO0FBQUUsZUFBUyxHQUFHLEdBQUUsR0FBRTtBQUFDLFlBQUUsV0FBUyxJQUFFLEVBQUUsU0FBTztBQUFFLFVBQUUsV0FBUztBQUFFLFVBQUUsa0JBQWdCLEVBQUU7QUFBYyxZQUFHLEVBQUUsR0FBRTtBQUFDLGNBQUUsT0FBTyxlQUFlLENBQUM7QUFBRSxjQUFHLENBQUMsRUFBRSxlQUFlLHNCQUFzQixHQUFFO0FBQUMsZ0JBQUksSUFBRSxPQUFPLE9BQU8sQ0FBQztBQUFFLGNBQUUsc0JBQW9CO0FBQUUsY0FBRSxHQUFFLEVBQUU7QUFBRSxjQUFFLHVCQUFxQjtBQUFBLFVBQUM7QUFBQyxZQUFFLFlBQVUsRUFBRTtBQUFBLFFBQW9CLE1BQU0sR0FBRSxHQUFFLEVBQUU7QUFBQSxNQUFDO0FBQUMsVUFBSSxLQUFHLEdBQUcsS0FBSyxHQUFFLEtBQUcsR0FBRyxXQUFXLEdBQUUsS0FBRyxHQUFHLFVBQVU7QUFDNWQsZUFBUyxLQUFJO0FBQUMsWUFBRyxDQUFDLE1BQUksT0FBTyx5QkFBeUIsTUFBTSxXQUFVLFdBQVcsR0FBRTtBQUFDLGNBQUksSUFBRSxXQUFVO0FBQUMsZ0JBQUksSUFBRSxJQUFJLFdBQVcsU0FBUSxFQUFDLFNBQVEsTUFBRyxZQUFXLE1BQUcsVUFBUyxLQUFFLENBQUM7QUFBRSxpQkFBSyxzQkFBc0IsQ0FBQztBQUFBLFVBQUM7QUFBRSxrQkFBUSxVQUFVLFFBQU0sUUFBUSxVQUFVLFFBQU0sSUFBRSxZQUFZLFVBQVUsVUFBUSxZQUFZLFVBQVUsUUFBTTtBQUFBLFFBQUU7QUFBQSxNQUFDO0FBQ3hULFVBQUksS0FBRyxPQUFPLG9CQUFvQixRQUFRLFNBQVMsRUFBRSxPQUFPLFNBQVMsR0FBRTtBQUFDLGVBQU0sU0FBTyxFQUFFLFVBQVUsR0FBRSxDQUFDO0FBQUEsTUFBQyxDQUFDLEdBQUUsS0FBRyxPQUFPLG9CQUFvQixZQUFZLFNBQVMsRUFBRSxPQUFPLFNBQVMsR0FBRTtBQUFDLGVBQU0sU0FBTyxFQUFFLFVBQVUsR0FBRSxDQUFDO0FBQUEsTUFBQyxDQUFDO0FBQUUsZUFBUyxHQUFHLEdBQUU7QUFBQyxlQUFNLEVBQUMsS0FBSSxTQUFTLEdBQUU7QUFBQyxjQUFJLElBQUUsRUFBRSxJQUFJLEdBQUUsSUFBRSxFQUFFLFVBQVUsQ0FBQztBQUFFLFlBQUUsTUFBSSxFQUFFLElBQUUsQ0FBQztBQUFHLFlBQUUsRUFBRSxDQUFDLEtBQUcsS0FBSyxvQkFBb0IsR0FBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQUUsZUFBSyx5QkFBeUIsR0FBRSxDQUFDO0FBQUUsWUFBRSxFQUFFLENBQUMsSUFBRTtBQUFBLFFBQUMsR0FBRSxLQUFJLFdBQVU7QUFBQyxjQUFJLElBQUUsRUFBRSxJQUFJO0FBQUUsaUJBQU8sS0FBRyxFQUFFLEtBQUcsRUFBRSxFQUFFLENBQUM7QUFBQSxRQUFDLEdBQUUsY0FBYSxLQUFFO0FBQUEsTUFBQztBQUFDO0FBQUMsZUFBUyxFQUFFLEdBQUUsR0FBRTtBQUFDLGVBQU0sRUFBQyxPQUFNLEdBQUUsR0FBRSxDQUFDLEdBQUUsR0FBRSxFQUFDO0FBQUEsTUFBQztBQUN6ZSxlQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRTtBQUFDLFlBQUksSUFBRSxHQUFFLElBQUUsR0FBRSxJQUFFLEdBQUVBLEtBQUUsR0FBRSxJQUFFLEtBQUssSUFBSSxJQUFFLEdBQUUsSUFBRSxDQUFDO0FBQUUsWUFBRyxLQUFHLEtBQUcsS0FBRyxFQUFFLElBQUU7QUFBQyxlQUFJLElBQUUsR0FBRSxJQUFFLEdBQUUsSUFBSSxLQUFHLEVBQUUsQ0FBQyxNQUFJLEVBQUUsQ0FBQyxFQUFFLE9BQU07QUFBRSxjQUFFO0FBQUEsUUFBQztBQUFDLFlBQUcsS0FBRyxFQUFFLFVBQVEsS0FBRyxFQUFFLFFBQU87QUFBQyxVQUFBQSxLQUFFLEVBQUU7QUFBTyxtQkFBUSxJQUFFLEVBQUUsUUFBTyxJQUFFLEdBQUUsSUFBRSxJQUFFLEtBQUcsR0FBRyxFQUFFLEVBQUVBLEVBQUMsR0FBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUc7QUFBSSxVQUFBQSxLQUFFO0FBQUEsUUFBQztBQUFDLGFBQUc7QUFBRSxhQUFHO0FBQUUsYUFBR0E7QUFBRSxhQUFHQTtBQUFFLFlBQUcsS0FBRyxJQUFFLEtBQUcsS0FBRyxJQUFFLEVBQUUsUUFBTSxDQUFDO0FBQUUsWUFBRyxLQUFHLEdBQUU7QUFBQyxlQUFJLElBQUUsRUFBRSxHQUFFLENBQUMsR0FBRSxJQUFFLElBQUcsR0FBRSxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUM7QUFBRSxpQkFBTSxDQUFDLENBQUM7QUFBQSxRQUFDO0FBQUMsWUFBRyxLQUFHLEVBQUUsUUFBTSxDQUFDLEVBQUUsR0FBRSxJQUFFLENBQUMsQ0FBQztBQUFFLFlBQUU7QUFBRSxZQUFFO0FBQUUsWUFBRSxJQUFFLElBQUU7QUFBRSxRQUFBQSxLQUFFLElBQUUsSUFBRTtBQUFFLFlBQUUsTUFBTSxDQUFDO0FBQUUsYUFBSSxJQUFFLEdBQUUsSUFBRSxHQUFFLElBQUksR0FBRSxDQUFDLElBQUUsTUFBTUEsRUFBQyxHQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBRTtBQUFFLGFBQUksSUFBRSxHQUFFLElBQUVBLElBQUUsSUFBSSxHQUFFLENBQUMsRUFBRSxDQUFDLElBQUU7QUFBRSxhQUFJLElBQUUsR0FBRSxJQUFFLEdBQUUsSUFBSSxNQUFJLElBQUUsR0FBRSxJQUFFQSxJQUFFLElBQUksS0FBRyxFQUFFLElBQUUsSUFBRSxDQUFDLE1BQUksRUFBRSxJQUFFLElBQUUsQ0FBQyxFQUFFLEdBQUUsQ0FBQyxFQUFFLENBQUMsSUFDMWYsRUFBRSxJQUFFLENBQUMsRUFBRSxJQUFFLENBQUM7QUFBQSxhQUFNO0FBQUMsY0FBSSxJQUFFLEVBQUUsSUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFFLEdBQUUsSUFBRSxFQUFFLENBQUMsRUFBRSxJQUFFLENBQUMsSUFBRTtBQUFFLFlBQUUsQ0FBQyxFQUFFLENBQUMsSUFBRSxJQUFFLElBQUUsSUFBRTtBQUFBLFFBQUM7QUFBQyxZQUFFLEVBQUUsU0FBTztBQUFFLFlBQUUsRUFBRSxDQUFDLEVBQUUsU0FBTztBQUFFLFlBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUFFLGFBQUksSUFBRSxDQUFDLEdBQUUsSUFBRSxLQUFHLElBQUUsSUFBRyxNQUFHLEtBQUcsRUFBRSxLQUFLLENBQUMsR0FBRSxPQUFLLEtBQUcsS0FBRyxFQUFFLEtBQUssQ0FBQyxHQUFFLFFBQU1BLEtBQUUsRUFBRSxJQUFFLENBQUMsRUFBRSxJQUFFLENBQUMsR0FBRSxJQUFFLEVBQUUsSUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFFLElBQUUsRUFBRSxDQUFDLEVBQUUsSUFBRSxDQUFDLEdBQUUsSUFBRSxJQUFFLElBQUUsSUFBRUEsS0FBRSxJQUFFQSxLQUFFLElBQUVBLEtBQUUsSUFBRUEsSUFBRSxLQUFHQSxNQUFHQSxNQUFHLElBQUUsRUFBRSxLQUFLLENBQUMsS0FBRyxFQUFFLEtBQUssQ0FBQyxHQUFFLElBQUVBLEtBQUcsS0FBSSxPQUFLLEtBQUcsS0FBRyxFQUFFLEtBQUssQ0FBQyxHQUFFLEtBQUksSUFBRSxNQUFJLEVBQUUsS0FBSyxDQUFDLEdBQUUsS0FBSSxJQUFFO0FBQUksVUFBRSxRQUFRO0FBQUUsWUFBRTtBQUFPLFlBQUUsQ0FBQztBQUFFLGFBQUksSUFBRSxHQUFFLElBQUUsRUFBRSxRQUFPLElBQUksU0FBTyxFQUFFLENBQUMsR0FBRTtBQUFBLFVBQUMsS0FBSztBQUFFLGtCQUFJLEVBQUUsS0FBSyxDQUFDLEdBQUUsSUFBRTtBQUFRO0FBQUk7QUFBSTtBQUFBLFVBQU0sS0FBSztBQUFFLGtCQUFJLElBQUUsRUFBRSxHQUFFLENBQUM7QUFBRyxjQUFFO0FBQUk7QUFBSSxjQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztBQUFFO0FBQUk7QUFBQSxVQUFNLEtBQUs7QUFBRSxrQkFBSSxJQUFFLEVBQUUsR0FBRSxDQUFDO0FBQ25mLGNBQUU7QUFBSTtBQUFJO0FBQUEsVUFBTSxLQUFLO0FBQUUsa0JBQUksSUFBRSxFQUFFLEdBQUUsQ0FBQyxJQUFHLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEdBQUU7QUFBQSxRQUFHO0FBQUMsYUFBRyxFQUFFLEtBQUssQ0FBQztBQUFFLGVB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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzdJdEcsSUFBQUMsY0FBQSxDQUFBO0FBQUFDLFNBQUFELGFBQUE7RUFBQUUsV0FBQSxTQUFBQSxZQUFBO0FBQUEsV0FBQUE7RUFBQTtFQUFBQyxVQUFBLFNBQUFBLFdBQUE7QUFBQSxXQUFBQTtFQUFBO0VBQUFDLGVBQUEsU0FBQUEsZ0JBQUE7QUFBQSxXQUFBRjtFQUFBO0VBQUFHLGNBQUEsU0FBQUEsZUFBQTtBQUFBLFdBQUFBO0VBQUE7RUFBQUMsWUFBQSxTQUFBQSxjQUFBO0FBQUEsV0FBQUE7RUFBQTtFQUFBQyxZQUFBLFNBQUFBLGFBQUE7QUFBQSxXQUFBSjtFQUFBO0VBQUFLLFdBQUEsU0FBQUEsWUFBQTtBQUFBLFdBQUFBO0VBQUE7RUFBQUMsZUFBQSxTQUFBQSxnQkFBQTtBQUFBLFdBQUFBO0VBQUE7RUFBQUMsZUFBQSxTQUFBQSxnQkFBQTtBQUFBLFdBQUFBO0VBQUE7RUFBQUMsV0FBQSxTQUFBQSxZQUFBO0FBQUEsV0FBQUE7RUFBQTtFQUFBQyxZQUFBLFNBQUFBLGFBQUE7QUFBQSxXQUFBQTtFQUFBO0VBQUFDLEdBQUEsU0FBQUEsSUFBQTtBQUFBLFdBQUFKO0VBQUE7RUFBQUssT0FBQSxTQUFBQSxRQUFBO0FBQUEsV0FBQUE7RUFBQTtFQUFBQyxLQUFBLFNBQUFBLE1BQUE7QUFBQSxXQUFBQTtFQUFBO0VBQUFDLE1BQUEsU0FBQUEsT0FBQTtBQUFBLFdBQUFEO0VBQUE7RUFBQUUsTUFBQSxTQUFBQSxPQUFBO0FBQUEsV0FBQUM7RUFBQTtFQUFBQyxnQkFBQSxTQUFBQSxpQkFBQTtBQUFBLFdBQUFBO0VBQUE7RUFBQUMsaUJBQUEsU0FBQUEsa0JBQUE7QUFBQSxXQUFBQTtFQUFBO0VBQUFDLFFBQUEsU0FBQUEsU0FBQTtBQUFBLFdBQUFBO0VBQUE7RUFBQUMsYUFBQSxTQUFBQSxjQUFBO0FBQUEsV0FBQUo7RUFBQTtFQUFBSyxjQUFBLFNBQUFBLGVBQUE7QUFBQSxXQUFBQTtF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LEtBQUt4QixLQUFLO0FBQ2xCLFdBQU9BO0VBQ1Q7QUFDRjtBQVNBLFNBQVNkLGdCQUFlb1QsT0FBTztBQUM3QkEsUUFBTXBULGVBQWU7QUFDckIsU0FBT29UO0FBQ1Q7QUFDQSxTQUFTblQsaUJBQWdCbVQsT0FBTztBQUM5QkEsUUFBTW5ULGdCQUFnQjtBQUN0QixTQUFPbVQ7QUFDVDsiLAogICJuYW1lcyI6IFsiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAibmF2aWdhdG9yIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAicHJvY2VzcyIsICJEZW5vIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiaXNPYmplY3QiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAiU3ltYm9sIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImlzT2JqZWN0IiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAiaXNPYmplY3QiLCAiZG9jdW1lbnQiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiY3JlYXRlRWxlbWVudCIsICJleHBvcnRzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImlzT2JqZWN0IiwgImV4cG9ydHMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJXZWFrTWFwIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImtleXMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJpc09iamVjdCIsICJUeXBlRXJyb3IiLCAiV2Vha01hcCIsICJnZXQiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJleHBvcnRzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIm93bktleXMiLCAia2V5cyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJvd25LZXlzIiwgImtleXMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJrZXlzIiwgImV4cG9ydHMiLCAia2V5cyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJhY3RpdmVYRG9jdW1lbnQiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIlN5bWJvbCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJTeW1ib2wiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiaXNPYmplY3QiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAic2VsZiIsICJnbG9iYWxUaGlzIiwgIlR5cGVFcnJvciIsICJrZXlzIiwgIlN5bWJvbCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJrZXlzIiwgImdsb2JhbFRoaXMiLCAiU3ltYm9sIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImlzT2JqZWN0IiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImlzT2JqZWN0IiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImlzT2JqZWN0IiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAiVHlwZUVycm9yIiwgIk51bWJlciIsICJrZXlzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImgiLCAidW5kZWZpbmVkIiwgIkl0ZXJhdG9yIiwgImkiLCAiQXJyYXlJdGVyYXRvciIsICJ1bmRlZmluZWQiLCAidW5kZWZpbmVkIiwgIkV2ZW50IiwgInByZXZlbnREZWZhdWx0IiwgInN0b3BQcm9wYWdhdGlvbiIsICJldmVudCIsICJ1bmRlZmluZWQiLCAiQ3VzdG9tRXZlbnQiLCAidW5kZWZpbmVkIiwgImdsb2JhbCIsICJEb2N1bWVudEZyYWdtZW50IiwgInVuZGVmaW5lZCIsICJjbG9uZU5vZGUiLCAiYXBwZW5kQ2hpbGQiLCAiaW1wb3J0Tm9kZSIsICJkZWZpbmVJbm5lckhUTUwiLCAiZGVmaW5lT3V0ZXJIVE1MIiwgImNyZWF0ZUVsZW1lbnQiLCAiYXR0ciIsICJmaXhDbG9uZWREb20iLCAiZml4Q2xvbmVkU2NyaXB0cyIsICJ1bmRlZmluZWQiLCAiTXV0YXRpb25PYnNlcnZlciIsICJhdHRyIiwgImF0dHJpYnV0ZXMiLCAiY291bnRlciIsICJtYXAiLCAiJHRhcmdldCIsICJtZW1vIiwgInVuZGVmaW5lZCIsICJleHBvcnRzIiwgImgiLCAiX0RPTVRva2VuTGlzdCIsICJpbml0X0RPTVRva2VuTGlzdCIsICJ1bmRlZmluZWQiLCAiZ2xvYmFsIiwgInVuZGVmaW5lZCIsICJ1bmRlZmluZWQiLCAiZ2xvYmFsIiwgInVuZGVmaW5lZCIsICJ0IiwgImdsb2JhbCIsICJ1bmRlZmluZWQiLCAidW5kZWZpbmVkIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImlzT2JqZWN0IiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAiRXJyb3IiLCAiUmVmZXJlbmNlRXJyb3IiLCAiU3ludGF4RXJyb3IiLCAiVHlwZUVycm9yIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImZvckVhY2giLCAiZm9yRWFjaCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJpc09iamVjdCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJrZXlzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIm1lbW8iLCAic2VsZiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImlzT2JqZWN0IiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAiSXRlcmF0b3IiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiSXRlcmF0b3IiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZm9yRWFjaCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJpc09iamVjdCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJpc09iamVjdCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgImlzT2JqZWN0IiwgImdldCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJmb3JFYWNoIiwgImdldCIsICJNYXAiLCAib3duS2V5cyIsICJrZXlzIiwgImtleXMiLCAiaXNPYmplY3QiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiaXNPYmplY3QiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZ2xvYmFsIiwgIkpTWF9leHBvcnRzIiwgIl9fZXhwb3J0IiwgIkNvbXBvbmVudCIsICJGcmFnbWVudCIsICJQdXJlQ29tcG9uZW50IiwgIlNWR05hbWVzcGFjZSIsICJTaGFkb3dSb290IiwgIlN0cmljdE1vZGUiLCAiY2xhc3NOYW1lIiwgImNyZWF0ZUVsZW1lbnQiLCAiY3JlYXRlRmFjdG9yeSIsICJjcmVhdGVSZWYiLCAiZm9yd2FyZFJlZiIsICJoIiwgImlzUmVmIiwgImpzeCIsICJqc3hzIiwgIm1lbW8iLCAiaWRlbnRpdHkiLCAicHJldmVudERlZmF1bHQiLCAic3RvcFByb3BhZ2F0aW9uIiwgInN0eWxlZCIsICJ1c2VDYWxsYmFjayIsICJ1c2VDbGFzc0xpc3QiLCAidXNlSW1wZXJhdGl2ZUhhbmRsZSIsICJ1c2VNZW1vIiwgInVzZVJlZiIsICJ1c2VUZXh0IiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIl9fdG9Db21tb25KUyIsICJrZXlzIiwgIk9iamVjdCIsICJ2YWx1ZSIsICJpc0Jvb2xlYW4iLCAidmFsIiwgImlzRWxlbWVudCIsICJub2RlVHlwZSIsICJpc1N0cmluZyIsICJpc051bWJlciIsICJpc09iamVjdCIsICJfdHlwZW9mIiwgImlzRnVuY3Rpb24iLCAiaXNDb21wb25lbnRDbGFzcyIsICJDb21wb25lbnQyIiwgImlzQ29tcG9uZW50IiwgImlzQXJyYXlMaWtlIiwgIm9iaiIsICJsZW5ndGgiLCAiZm9yRWFjaCIsICJmbiIsICJfaXRlcmF0b3IyIiwgIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwgIl9zdGVwMiIsICJzIiwgIm4iLCAiZG9uZSIsICJrZXkiLCAiZXJyIiwgImUiLCAiZiIsICJzZWFsIiwgImN1cnJlbnQiLCAibWF5YmVSZWYiLCAiaXNVbml0bGVzc051bWJlciIsICJhbmltYXRpb25JdGVyYXRpb25Db3VudCIsICJib3JkZXJJbWFnZU91dHNldCIsICJib3JkZXJJbWFnZVNsaWNlIiwgImJvcmRlckltYWdlV2lkdGgiLCAiYm94RmxleCIsICJib3hGbGV4R3JvdXAiLCAiYm94T3JkaW5hbEdyb3VwIiwgImNvbHVtbkNvdW50IiwgImNvbHVtbnMiLCAiZmxleCIsICJmbGV4R3JvdyIsICJmbGV4UG9zaXRpdmUiLCAiZmxleFNocmluayIsICJmbGV4TmVnYXRpdmUiLCAiZmxleE9yZGVyIiwgImdyaWRBcmVhIiwgImdyaWRSb3ciLCAiZ3JpZFJvd0VuZCIsICJncmlkUm93U3BhbiIsICJncmlkUm93U3RhcnQiLCAiZ3JpZENvbHVtbiIsICJncmlkQ29sdW1uRW5kIiwgImdyaWRDb2x1bW5TcGFuIiwgImdyaWRDb2x1bW5TdGFydCIsICJmb250V2VpZ2h0IiwgImxpbmVDbGFtcCIsICJsaW5lSGVpZ2h0IiwgIm9wYWNpdHkiLCAib3JkZXIiLCAib3JwaGFucyIsICJ0YWJTaXplIiwgIndpZG93cyIsICJ6SW5kZXgiLCAiem9vbSIsICJmaWxsT3BhY2l0eSIsICJmbG9vZE9wYWNpdHkiLCAic3RvcE9wYWNpdHkiLCAic3Ryb2tlRGFzaGFycmF5IiwgInN0cm9rZURhc2hvZmZzZXQiLCAic3Ryb2tlTWl0ZXJsaW1pdCIsICJzdHJva2VPcGFjaXR5IiwgInN0cm9rZVdpZHRoIiwgInByZWZpeEtleSIsICJwcmVmaXgiLCAiY2hhckF0IiwgInRvVXBwZXJDYXNlIiwgInN1YnN0cmluZyIsICJwcmVmaXhlcyIsICJwcm9wIiwgImpzeERvbVR5cGUiLCAiU3ltYm9sIiwgImZvciIsICJKc3hEb21UeXBlIiwgIkpzeERvbVR5cGUyIiwgIl9yZWYiLCAiY2hpbGRyZW4iLCAicmVmIiwgImF0dHIyIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfZXhjbHVkZWQiLCAiX2RlZmluZVByb3BlcnR5IiwgImlzU2hhZG93Um9vdCIsICJlbCIsICJYTGlua05hbWVzcGFjZSIsICJYTUxOYW1lc3BhY2UiLCAiaXNWaXNpYmxlQ2hpbGQiLCAiQXJyYXkiLCAiaXNBcnJheSIsICJtYXAiLCAiZmlsdGVyIiwgIkJvb2xlYW4iLCAiam9pbiIsICJpdGVyYXRvciIsICJmcm9tIiwgImsiLCAic3ZnIiwgImFuaW1hdGUiLCAiY2lyY2xlIiwgImNsaXBQYXRoIiwgImRlZnMiLCAiZGVzYyIsICJlbGxpcHNlIiwgImZlQmxlbmQiLCAiZmVDb2xvck1hdHJpeCIsICJmZUNvbXBvbmVudFRyYW5zZmVyIiwgImZlQ29tcG9zaXRlIiwgImZlQ29udm9sdmVNYXRyaXgiLCAiZmVEaWZmdXNlTGlnaHRpbmciLCAiZmVEaXNwbGFjZW1lbnRNYXAiLCAiZmVEaXN0YW50TGlnaHQiLCAiZmVGbG9vZCIsICJmZUZ1bmNBIiwgImZlRnVuY0IiLCAiZmVGdW5jRyIsICJmZUZ1bmNSIiwgImZlR2F1c3NpYW5CbHVyIiwgImZlSW1hZ2UiLCAiZmVNZXJnZSIsICJmZU1lcmdlTm9kZSIsICJmZU1vcnBob2xvZ3kiLCAiZmVPZmZzZXQiLCAiZmVQb2ludExpZ2h0IiwgImZlU3BlY3VsYXJMaWdodGluZyIsICJmZVNwb3RMaWdodCIsICJmZVRpbGUiLCAiZmVUdXJidWxlbmNlIiwgImZvcmVpZ25PYmplY3QiLCAiZyIsICJpbWFnZSIsICJsaW5lIiwgImxpbmVhckdyYWRpZW50IiwgIm1hcmtlciIsICJtYXNrIiwgIm1ldGFkYXRhIiwgInBhdGgiLCAicGF0dGVybiIsICJwb2x5Z29uIiwgInBvbHlsaW5lIiwgInJhZGlhbEdyYWRpZW50IiwgInJlY3QiLCAic3RvcCIsICJzd2l0Y2giLCAic3ltYm9sIiwgInRleHQiLCAidGV4dFBhdGgiLCAidHNwYW4iLCAidXNlIiwgInZpZXciLCAibm9uUHJlc2VudGF0aW9uU1ZHQXR0cmlidXRlcyIsICJ0YWciLCAiYmluZCIsICJmcmFnbWVudCIsICJkb2N1bWVudCIsICJjcmVhdGVEb2N1bWVudEZyYWdtZW50IiwgImFwcGVuZENoaWxkIiwgIl9DbGFzcyIsICJfQ29tcG9uZW50IiwgInByb3BzIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfY3JlYXRlQ2xhc3MiLCAicmVuZGVyIiwgImluaXRDb21wb25lbnRDbGFzcyIsICJDbGFzcyIsICJfb2JqZWN0U3ByZWFkIiwgImluc3RhbmNlIiwgIm5vZGUiLCAiYXR0YWNoUmVmIiwgIl9leGNsdWRlZDIiLCAibmFtZXNwYWNlVVJJIiwgImNyZWF0ZUVsZW1lbnROUyIsICJhdHRyaWJ1dGVzIiwgIndpbmRvdyIsICJIVE1MU2VsZWN0RWxlbWVudCIsICJtdWx0aXBsZSIsICJ2YWx1ZXMiLCAiU3RyaW5nIiwgInF1ZXJ5U2VsZWN0b3JBbGwiLCAib3B0aW9uIiwgInNlbGVjdGVkIiwgImluY2x1ZGVzIiwgImRlZmF1bHRQcm9wcyIsICJUeXBlRXJyb3IiLCAiY29uY2F0IiwgIl9sZW4iLCAiYXJndW1lbnRzIiwgIl9rZXkyIiwgInVuc2hpZnQiLCAiX2F0dHIiLCAiX2V4Y2x1ZGVkMyIsICJjaGlsZCIsICJhcHBlbmRDaGlsZHJlbiIsICJhcHBlbmRDaGlsZFRvTm9kZSIsICJjcmVhdGVUZXh0Tm9kZSIsICJjcmVhdGVDb21tZW50IiwgInNoYWRvd1Jvb3QiLCAiYXR0YWNoU2hhZG93IiwgImF0dHIiLCAiX2kiLCAiX2FyciIsICJfdG9Db25zdW1hYmxlQXJyYXkiLCAiSFRNTFRlbXBsYXRlRWxlbWVudCIsICJjb250ZW50IiwgIm5vcm1hbGl6ZUF0dHJpYnV0ZSIsICJzZXBhcmF0b3IiLCAicmVwbGFjZSIsICJtYXRjaCIsICJ0b0xvd2VyQ2FzZSIsICJzdHlsZSIsICJ2IiwgInNldEF0dHJpYnV0ZSIsICJpbmRleE9mIiwgInNldFByb3BlcnR5IiwgImF0dHJpYnV0ZSIsICJhdHRyTlMiLCAiZGF0YVZhbHVlIiwgImRhdGFLZXkiLCAiZGF0YXNldCIsICJpbm5lckhUTUwiLCAiSFRNTFRleHRBcmVhRWxlbWVudCIsICJzcGVsbGNoZWNrIiwgImV2ZW50SGFuZGxlciIsICJldmVudE5hbWUiLCAiYWRkRXZlbnRMaXN0ZW5lciIsICJhdHRyaWJ1dGUyIiwgInVzZUNhcHR1cmUiLCAiZW5kc1dpdGgiLCAic3RhbmRhcmRFdmVudE5hbWUiLCAiY3VzdG9tRXZlbnROYW1lIiwgInNsaWNlIiwgIlNWR0VsZW1lbnQiLCAidGVzdCIsICJuYW1lc3BhY2UiLCAic2V0QXR0cmlidXRlTlMiLCAiX2l0ZXJhdG9yMyIsICJfc3RlcDMiLCAiaW5pdGlhbFZhbHVlIiwgIlRleHQiLCAiZGVmaW5lUHJvcGVydHkiLCAidGV4dENvbnRlbnQiLCAic2V0VGV4dCIsICJkaXYiLCAibGlzdCIsICJjbGFzc0xpc3QiLCAiQ2xhc3NMaXN0IiwgImRlZmluZVByb3BlcnRpZXMiLCAiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsICJzaXplIiwgImFkZCIsICJfbGlzdCIsICJhcHBseSIsICJyZW1vdmUiLCAiX2xpc3QyIiwgInRvZ2dsZSIsICJ0b2tlbiIsICJmb3JjZSIsICJjb250YWlucyIsICJmYWN0b3J5IiwgIl9leGNsdWRlZDQiLCAiaW5pdCIsICJjYWNoZSIsICJNYXAiLCAiY3JlYXRlU3R5bGVkQ29tcG9uZW50IiwgIm5hbWUiLCAiaW50ZXJwb2xhdGlvbnMiLCAiX2tleSIsICJzdHlsZTIiLCAiX2V4Y2x1ZGVkNSIsICJsYXN0SW5kZXgiLCAiY3NzIiwgInJlZHVjZSIsICJwIiwgImkiLCAiaW50ZXJwb2xhdGlvbiIsICJiYXNlU3R5bGVkIiwgImN1c3RvbUNvbXBvbmVudCIsICJQcm94eSIsICJnZXQiLCAiXyIsICJzZXRJZkFic2VudCIsICJnZXRWYWx1ZSIsICJoYXMiLCAic2V0IiwgImV2ZW50Il0KfQo=