/******/ (function(modules) { // webpackBootstrap /******/ // The module cache /******/ var installedModules = {}; /******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ /******/ // Check if module is in cache /******/ if(installedModules[moduleId]) { /******/ return installedModules[moduleId].exports; /******/ } /******/ // Create a new module (and put it into the cache) /******/ var module = installedModules[moduleId] = { /******/ i: moduleId, /******/ l: false, /******/ exports: {} /******/ }; /******/ /******/ // Execute the module function /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); /******/ /******/ // Flag the module as loaded /******/ module.l = true; /******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ /******/ /******/ // expose the modules object (__webpack_modules__) /******/ __webpack_require__.m = modules; /******/ /******/ // expose the module cache /******/ __webpack_require__.c = installedModules; /******/ /******/ // define getter function for harmony exports /******/ __webpack_require__.d = function(exports, name, getter) { /******/ if(!__webpack_require__.o(exports, name)) { /******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); /******/ } /******/ }; /******/ /******/ // define __esModule on exports /******/ __webpack_require__.r = function(exports) { /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); /******/ } /******/ Object.defineProperty(exports, '__esModule', { value: true }); /******/ }; /******/ /******/ // create a fake namespace object /******/ // mode & 1: value is a module id, require it /******/ // mode & 2: merge all properties of value into the ns /******/ // mode & 4: return value when already ns object /******/ // mode & 8|1: behave like require /******/ __webpack_require__.t = function(value, mode) { /******/ if(mode & 1) value = __webpack_require__(value); /******/ if(mode & 8) return value; /******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; /******/ var ns = Object.create(null); /******/ __webpack_require__.r(ns); /******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); /******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); /******/ return ns; /******/ }; /******/ /******/ // getDefaultExport function for compatibility with non-harmony modules /******/ __webpack_require__.n = function(module) { /******/ var getter = module && module.__esModule ? /******/ function getDefault() { return module['default']; } : /******/ function getModuleExports() { return module; }; /******/ __webpack_require__.d(getter, 'a', getter); /******/ return getter; /******/ }; /******/ /******/ // Object.prototype.hasOwnProperty.call /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; /******/ /******/ // __webpack_public_path__ /******/ __webpack_require__.p = ""; /******/ /******/ /******/ // Load entry module and return exports /******/ return __webpack_require__(__webpack_require__.s = 0); /******/ }) /************************************************************************/ /******/ ({ /***/ "./node_modules/core-js/internals/a-function.js": /*!******************************************************!*\ !*** ./node_modules/core-js/internals/a-function.js ***! \******************************************************/ /*! no static exports found */ /***/ (function(module, exports) { module.exports = function (it) { if (typeof it != 'function') { throw TypeError(String(it) + ' is not a function'); } return it; }; /***/ }), /***/ "./node_modules/core-js/internals/advance-string-index.js": /*!****************************************************************!*\ !*** ./node_modules/core-js/internals/advance-string-index.js ***! \****************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var charAt = __webpack_require__(/*! ../internals/string-multibyte */ "./node_modules/core-js/internals/string-multibyte.js").charAt; // `AdvanceStringIndex` abstract operation // https://tc39.github.io/ecma262/#sec-advancestringindex module.exports = function (S, index, unicode) { return index + (unicode ? charAt(S, index).length : 1); }; /***/ }), /***/ "./node_modules/core-js/internals/an-instance.js": /*!*******************************************************!*\ !*** ./node_modules/core-js/internals/an-instance.js ***! \*******************************************************/ /*! no static exports found */ /***/ (function(module, exports) { module.exports = function (it, Constructor, name) { if (!(it instanceof Constructor)) { throw TypeError('Incorrect ' + (name ? name + ' ' : '') + 'invocation'); } return it; }; /***/ }), /***/ "./node_modules/core-js/internals/an-object.js": /*!*****************************************************!*\ !*** ./node_modules/core-js/internals/an-object.js ***! \*****************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var isObject = __webpack_require__(/*! ../internals/is-object */ "./node_modules/core-js/internals/is-object.js"); module.exports = function (it) { if (!isObject(it)) { throw TypeError(String(it) + ' is not an object'); } return it; }; /***/ }), /***/ "./node_modules/core-js/internals/array-for-each.js": /*!**********************************************************!*\ !*** ./node_modules/core-js/internals/array-for-each.js ***! \**********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var $forEach = __webpack_require__(/*! ../internals/array-iteration */ "./node_modules/core-js/internals/array-iteration.js").forEach; var arrayMethodIsStrict = __webpack_require__(/*! ../internals/array-method-is-strict */ "./node_modules/core-js/internals/array-method-is-strict.js"); var arrayMethodUsesToLength = __webpack_require__(/*! ../internals/array-method-uses-to-length */ "./node_modules/core-js/internals/array-method-uses-to-length.js"); var STRICT_METHOD = arrayMethodIsStrict('forEach'); var USES_TO_LENGTH = arrayMethodUsesToLength('forEach'); // `Array.prototype.forEach` method implementation // https://tc39.github.io/ecma262/#sec-array.prototype.foreach module.exports = !STRICT_METHOD || !USES_TO_LENGTH ? function forEach(callbackfn /* , thisArg */ ) { return $forEach(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); } : [].forEach; /***/ }), /***/ "./node_modules/core-js/internals/array-includes.js": /*!**********************************************************!*\ !*** ./node_modules/core-js/internals/array-includes.js ***! \**********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ "./node_modules/core-js/internals/to-indexed-object.js"); var toLength = __webpack_require__(/*! ../internals/to-length */ "./node_modules/core-js/internals/to-length.js"); var toAbsoluteIndex = __webpack_require__(/*! ../internals/to-absolute-index */ "./node_modules/core-js/internals/to-absolute-index.js"); // `Array.prototype.{ indexOf, includes }` methods implementation var createMethod = function (IS_INCLUDES) { return function ($this, el, fromIndex) { var O = toIndexedObject($this); var length = toLength(O.length); var index = toAbsoluteIndex(fromIndex, length); var value; // Array#includes uses SameValueZero equality algorithm // eslint-disable-next-line no-self-compare if (IS_INCLUDES && el != el) while (length > index) { value = O[index++]; // eslint-disable-next-line no-self-compare if (value != value) return true; // Array#indexOf ignores holes, Array#includes - not } else for (; length > index; index++) { if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0; } return !IS_INCLUDES && -1; }; }; module.exports = { // `Array.prototype.includes` method // https://tc39.github.io/ecma262/#sec-array.prototype.includes includes: createMethod(true), // `Array.prototype.indexOf` method // https://tc39.github.io/ecma262/#sec-array.prototype.indexof indexOf: createMethod(false) }; /***/ }), /***/ "./node_modules/core-js/internals/array-iteration.js": /*!***********************************************************!*\ !*** ./node_modules/core-js/internals/array-iteration.js ***! \***********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var bind = __webpack_require__(/*! ../internals/function-bind-context */ "./node_modules/core-js/internals/function-bind-context.js"); var IndexedObject = __webpack_require__(/*! ../internals/indexed-object */ "./node_modules/core-js/internals/indexed-object.js"); var toObject = __webpack_require__(/*! ../internals/to-object */ "./node_modules/core-js/internals/to-object.js"); var toLength = __webpack_require__(/*! ../internals/to-length */ "./node_modules/core-js/internals/to-length.js"); var arraySpeciesCreate = __webpack_require__(/*! ../internals/array-species-create */ "./node_modules/core-js/internals/array-species-create.js"); var push = [].push; // `Array.prototype.{ forEach, map, filter, some, every, find, findIndex }` methods implementation 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 NO_HOLES = TYPE == 5 || IS_FIND_INDEX; return function ($this, callbackfn, that, specificCreate) { var O = toObject($this); var self = IndexedObject(O); var boundFunction = bind(callbackfn, that, 3); var length = toLength(self.length); var index = 0; var create = specificCreate || arraySpeciesCreate; var target = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined; var value, result; for (; length > index; index++) if (NO_HOLES || index in self) { value = self[index]; result = boundFunction(value, index, O); if (TYPE) { if (IS_MAP) target[index] = result; // map else if (result) switch (TYPE) { case 3: return true; // some case 5: return value; // find case 6: return index; // findIndex case 2: push.call(target, value); // filter } else if (IS_EVERY) return false; // every } } return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : target; }; }; module.exports = { // `Array.prototype.forEach` method // https://tc39.github.io/ecma262/#sec-array.prototype.foreach forEach: createMethod(0), // `Array.prototype.map` method // https://tc39.github.io/ecma262/#sec-array.prototype.map map: createMethod(1), // `Array.prototype.filter` method // https://tc39.github.io/ecma262/#sec-array.prototype.filter filter: createMethod(2), // `Array.prototype.some` method // https://tc39.github.io/ecma262/#sec-array.prototype.some some: createMethod(3), // `Array.prototype.every` method // https://tc39.github.io/ecma262/#sec-array.prototype.every every: createMethod(4), // `Array.prototype.find` method // https://tc39.github.io/ecma262/#sec-array.prototype.find find: createMethod(5), // `Array.prototype.findIndex` method // https://tc39.github.io/ecma262/#sec-array.prototype.findIndex findIndex: createMethod(6) }; /***/ }), /***/ "./node_modules/core-js/internals/array-method-has-species-support.js": /*!****************************************************************************!*\ !*** ./node_modules/core-js/internals/array-method-has-species-support.js ***! \****************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var fails = __webpack_require__(/*! ../internals/fails */ "./node_modules/core-js/internals/fails.js"); var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "./node_modules/core-js/internals/well-known-symbol.js"); var V8_VERSION = __webpack_require__(/*! ../internals/engine-v8-version */ "./node_modules/core-js/internals/engine-v8-version.js"); var SPECIES = wellKnownSymbol('species'); module.exports = function (METHOD_NAME) { // We can't use this feature detection in V8 since it causes // deoptimization and serious performance degradation // https://github.com/zloirock/core-js/issues/677 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/core-js/internals/array-method-is-strict.js": /*!******************************************************************!*\ !*** ./node_modules/core-js/internals/array-method-is-strict.js ***! \******************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var fails = __webpack_require__(/*! ../internals/fails */ "./node_modules/core-js/internals/fails.js"); module.exports = function (METHOD_NAME, argument) { var method = [][METHOD_NAME]; return !!method && fails(function () { // eslint-disable-next-line no-useless-call,no-throw-literal method.call(null, argument || function () { throw 1; }, 1); }); }; /***/ }), /***/ "./node_modules/core-js/internals/array-method-uses-to-length.js": /*!***********************************************************************!*\ !*** ./node_modules/core-js/internals/array-method-uses-to-length.js ***! \***********************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ "./node_modules/core-js/internals/descriptors.js"); var fails = __webpack_require__(/*! ../internals/fails */ "./node_modules/core-js/internals/fails.js"); var has = __webpack_require__(/*! ../internals/has */ "./node_modules/core-js/internals/has.js"); var defineProperty = Object.defineProperty; var cache = {}; var thrower = function (it) { throw it; }; module.exports = function (METHOD_NAME, options) { if (has(cache, METHOD_NAME)) return cache[METHOD_NAME]; if (!options) options = {}; var method = [][METHOD_NAME]; var ACCESSORS = has(options, 'ACCESSORS') ? options.ACCESSORS : false; var argument0 = has(options, 0) ? options[0] : thrower; var argument1 = has(options, 1) ? options[1] : undefined; return cache[METHOD_NAME] = !!method && !fails(function () { if (ACCESSORS && !DESCRIPTORS) return true; var O = { length: -1 }; if (ACCESSORS) defineProperty(O, 1, { enumerable: true, get: thrower });else O[1] = 1; method.call(O, argument0, argument1); }); }; /***/ }), /***/ "./node_modules/core-js/internals/array-species-create.js": /*!****************************************************************!*\ !*** ./node_modules/core-js/internals/array-species-create.js ***! \****************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var isObject = __webpack_require__(/*! ../internals/is-object */ "./node_modules/core-js/internals/is-object.js"); var isArray = __webpack_require__(/*! ../internals/is-array */ "./node_modules/core-js/internals/is-array.js"); var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "./node_modules/core-js/internals/well-known-symbol.js"); var SPECIES = wellKnownSymbol('species'); // `ArraySpeciesCreate` abstract operation // https://tc39.github.io/ecma262/#sec-arrayspeciescreate module.exports = function (originalArray, length) { var C; if (isArray(originalArray)) { C = originalArray.constructor; // cross-realm fallback if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;else if (isObject(C)) { C = C[SPECIES]; if (C === null) C = undefined; } } return new (C === undefined ? Array : C)(length === 0 ? 0 : length); }; /***/ }), /***/ "./node_modules/core-js/internals/call-with-safe-iteration-closing.js": /*!****************************************************************************!*\ !*** ./node_modules/core-js/internals/call-with-safe-iteration-closing.js ***! \****************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var anObject = __webpack_require__(/*! ../internals/an-object */ "./node_modules/core-js/internals/an-object.js"); // call something on iterator step with safe closing on error module.exports = function (iterator, fn, value, ENTRIES) { try { return ENTRIES ? fn(anObject(value)[0], value[1]) : fn(value); // 7.4.6 IteratorClose(iterator, completion) } catch (error) { var returnMethod = iterator['return']; if (returnMethod !== undefined) anObject(returnMethod.call(iterator)); throw error; } }; /***/ }), /***/ "./node_modules/core-js/internals/check-correctness-of-iteration.js": /*!**************************************************************************!*\ !*** ./node_modules/core-js/internals/check-correctness-of-iteration.js ***! \**************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "./node_modules/core-js/internals/well-known-symbol.js"); var ITERATOR = wellKnownSymbol('iterator'); var SAFE_CLOSING = false; try { var called = 0; var iteratorWithReturn = { next: function () { return { done: !!called++ }; }, 'return': function () { SAFE_CLOSING = true; } }; iteratorWithReturn[ITERATOR] = function () { return this; }; // eslint-disable-next-line no-throw-literal Array.from(iteratorWithReturn, function () { throw 2; }); } catch (error) { /* empty */ } module.exports = function (exec, SKIP_CLOSING) { if (!SKIP_CLOSING && !SAFE_CLOSING) return false; var ITERATION_SUPPORT = false; try { var object = {}; object[ITERATOR] = function () { return { next: function () { return { done: ITERATION_SUPPORT = true }; } }; }; exec(object); } catch (error) { /* empty */ } return ITERATION_SUPPORT; }; /***/ }), /***/ "./node_modules/core-js/internals/classof-raw.js": /*!*******************************************************!*\ !*** ./node_modules/core-js/internals/classof-raw.js ***! \*******************************************************/ /*! no static exports found */ /***/ (function(module, exports) { var toString = {}.toString; module.exports = function (it) { return toString.call(it).slice(8, -1); }; /***/ }), /***/ "./node_modules/core-js/internals/classof.js": /*!***************************************************!*\ !*** ./node_modules/core-js/internals/classof.js ***! \***************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var TO_STRING_TAG_SUPPORT = __webpack_require__(/*! ../internals/to-string-tag-support */ "./node_modules/core-js/internals/to-string-tag-support.js"); var classofRaw = __webpack_require__(/*! ../internals/classof-raw */ "./node_modules/core-js/internals/classof-raw.js"); var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "./node_modules/core-js/internals/well-known-symbol.js"); var TO_STRING_TAG = wellKnownSymbol('toStringTag'); // ES3 wrong here var CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) == 'Arguments'; // fallback for IE11 Script Access Denied error var tryGet = function (it, key) { try { return it[key]; } catch (error) { /* empty */ } }; // getting tag from ES6+ `Object.prototype.toString` module.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) { var O, tag, result; return it === undefined ? 'Undefined' : it === null ? 'Null' // @@toStringTag case : typeof (tag = tryGet(O = Object(it), TO_STRING_TAG)) == 'string' ? tag // builtinTag case : CORRECT_ARGUMENTS ? classofRaw(O) // ES3 arguments fallback : (result = classofRaw(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : result; }; /***/ }), /***/ "./node_modules/core-js/internals/copy-constructor-properties.js": /*!***********************************************************************!*\ !*** ./node_modules/core-js/internals/copy-constructor-properties.js ***! \***********************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var has = __webpack_require__(/*! ../internals/has */ "./node_modules/core-js/internals/has.js"); var ownKeys = __webpack_require__(/*! ../internals/own-keys */ "./node_modules/core-js/internals/own-keys.js"); var getOwnPropertyDescriptorModule = __webpack_require__(/*! ../internals/object-get-own-property-descriptor */ "./node_modules/core-js/internals/object-get-own-property-descriptor.js"); var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ "./node_modules/core-js/internals/object-define-property.js"); module.exports = function (target, source) { var keys = ownKeys(source); var defineProperty = definePropertyModule.f; var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f; for (var i = 0; i < keys.length; i++) { var key = keys[i]; if (!has(target, key)) defineProperty(target, key, getOwnPropertyDescriptor(source, key)); } }; /***/ }), /***/ "./node_modules/core-js/internals/create-non-enumerable-property.js": /*!**************************************************************************!*\ !*** ./node_modules/core-js/internals/create-non-enumerable-property.js ***! \**************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ "./node_modules/core-js/internals/descriptors.js"); var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ "./node_modules/core-js/internals/object-define-property.js"); var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ "./node_modules/core-js/internals/create-property-descriptor.js"); module.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/core-js/internals/create-property-descriptor.js": /*!**********************************************************************!*\ !*** ./node_modules/core-js/internals/create-property-descriptor.js ***! \**********************************************************************/ /*! no static exports found */ /***/ (function(module, exports) { module.exports = function (bitmap, value) { return { enumerable: !(bitmap & 1), configurable: !(bitmap & 2), writable: !(bitmap & 4), value: value }; }; /***/ }), /***/ "./node_modules/core-js/internals/create-property.js": /*!***********************************************************!*\ !*** ./node_modules/core-js/internals/create-property.js ***! \***********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var toPrimitive = __webpack_require__(/*! ../internals/to-primitive */ "./node_modules/core-js/internals/to-primitive.js"); var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ "./node_modules/core-js/internals/object-define-property.js"); var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ "./node_modules/core-js/internals/create-property-descriptor.js"); module.exports = function (object, key, value) { var propertyKey = toPrimitive(key); if (propertyKey in object) definePropertyModule.f(object, propertyKey, createPropertyDescriptor(0, value));else object[propertyKey] = value; }; /***/ }), /***/ "./node_modules/core-js/internals/define-well-known-symbol.js": /*!********************************************************************!*\ !*** ./node_modules/core-js/internals/define-well-known-symbol.js ***! \********************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var path = __webpack_require__(/*! ../internals/path */ "./node_modules/core-js/internals/path.js"); var has = __webpack_require__(/*! ../internals/has */ "./node_modules/core-js/internals/has.js"); var wrappedWellKnownSymbolModule = __webpack_require__(/*! ../internals/well-known-symbol-wrapped */ "./node_modules/core-js/internals/well-known-symbol-wrapped.js"); var defineProperty = __webpack_require__(/*! ../internals/object-define-property */ "./node_modules/core-js/internals/object-define-property.js").f; module.exports = function (NAME) { var Symbol = path.Symbol || (path.Symbol = {}); if (!has(Symbol, NAME)) defineProperty(Symbol, NAME, { value: wrappedWellKnownSymbolModule.f(NAME) }); }; /***/ }), /***/ "./node_modules/core-js/internals/descriptors.js": /*!*******************************************************!*\ !*** ./node_modules/core-js/internals/descriptors.js ***! \*******************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var fails = __webpack_require__(/*! ../internals/fails */ "./node_modules/core-js/internals/fails.js"); // Thank's IE8 for his funny defineProperty module.exports = !fails(function () { return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] != 7; }); /***/ }), /***/ "./node_modules/core-js/internals/document-create-element.js": /*!*******************************************************************!*\ !*** ./node_modules/core-js/internals/document-create-element.js ***! \*******************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var global = __webpack_require__(/*! ../internals/global */ "./node_modules/core-js/internals/global.js"); var isObject = __webpack_require__(/*! ../internals/is-object */ "./node_modules/core-js/internals/is-object.js"); var document = global.document; // typeof document.createElement is 'object' in old IE var EXISTS = isObject(document) && isObject(document.createElement); module.exports = function (it) { return EXISTS ? document.createElement(it) : {}; }; /***/ }), /***/ "./node_modules/core-js/internals/dom-iterables.js": /*!*********************************************************!*\ !*** ./node_modules/core-js/internals/dom-iterables.js ***! \*********************************************************/ /*! no static exports found */ /***/ (function(module, exports) { // iterable DOM collections // flag - `iterable` interface - 'entries', 'keys', 'values', 'forEach' methods module.exports = { CSSRuleList: 0, CSSStyleDeclaration: 0, CSSValueList: 0, ClientRectList: 0, DOMRectList: 0, DOMStringList: 0, DOMTokenList: 1, DataTransferItemList: 0, FileList: 0, HTMLAllCollection: 0, HTMLCollection: 0, HTMLFormElement: 0, HTMLSelectElement: 0, MediaList: 0, MimeTypeArray: 0, NamedNodeMap: 0, NodeList: 1, PaintRequestList: 0, Plugin: 0, PluginArray: 0, SVGLengthList: 0, SVGNumberList: 0, SVGPathSegList: 0, SVGPointList: 0, SVGStringList: 0, SVGTransformList: 0, SourceBufferList: 0, StyleSheetList: 0, TextTrackCueList: 0, TextTrackList: 0, TouchList: 0 }; /***/ }), /***/ "./node_modules/core-js/internals/engine-is-ios.js": /*!*********************************************************!*\ !*** ./node_modules/core-js/internals/engine-is-ios.js ***! \*********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var userAgent = __webpack_require__(/*! ../internals/engine-user-agent */ "./node_modules/core-js/internals/engine-user-agent.js"); module.exports = /(iphone|ipod|ipad).*applewebkit/i.test(userAgent); /***/ }), /***/ "./node_modules/core-js/internals/engine-user-agent.js": /*!*************************************************************!*\ !*** ./node_modules/core-js/internals/engine-user-agent.js ***! \*************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ "./node_modules/core-js/internals/get-built-in.js"); module.exports = getBuiltIn('navigator', 'userAgent') || ''; /***/ }), /***/ "./node_modules/core-js/internals/engine-v8-version.js": /*!*************************************************************!*\ !*** ./node_modules/core-js/internals/engine-v8-version.js ***! \*************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var global = __webpack_require__(/*! ../internals/global */ "./node_modules/core-js/internals/global.js"); var userAgent = __webpack_require__(/*! ../internals/engine-user-agent */ "./node_modules/core-js/internals/engine-user-agent.js"); var process = global.process; var versions = process && process.versions; var v8 = versions && versions.v8; var match, version; if (v8) { match = v8.split('.'); version = match[0] + match[1]; } else if (userAgent) { match = userAgent.match(/Edge\/(\d+)/); if (!match || match[1] >= 74) { match = userAgent.match(/Chrome\/(\d+)/); if (match) version = match[1]; } } module.exports = version && +version; /***/ }), /***/ "./node_modules/core-js/internals/enum-bug-keys.js": /*!*********************************************************!*\ !*** ./node_modules/core-js/internals/enum-bug-keys.js ***! \*********************************************************/ /*! no static exports found */ /***/ (function(module, exports) { // IE8- don't enum bug keys module.exports = ['constructor', 'hasOwnProperty', 'isPrototypeOf', 'propertyIsEnumerable', 'toLocaleString', 'toString', 'valueOf']; /***/ }), /***/ "./node_modules/core-js/internals/export.js": /*!**************************************************!*\ !*** ./node_modules/core-js/internals/export.js ***! \**************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var global = __webpack_require__(/*! ../internals/global */ "./node_modules/core-js/internals/global.js"); var getOwnPropertyDescriptor = __webpack_require__(/*! ../internals/object-get-own-property-descriptor */ "./node_modules/core-js/internals/object-get-own-property-descriptor.js").f; var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ "./node_modules/core-js/internals/create-non-enumerable-property.js"); var redefine = __webpack_require__(/*! ../internals/redefine */ "./node_modules/core-js/internals/redefine.js"); var setGlobal = __webpack_require__(/*! ../internals/set-global */ "./node_modules/core-js/internals/set-global.js"); var copyConstructorProperties = __webpack_require__(/*! ../internals/copy-constructor-properties */ "./node_modules/core-js/internals/copy-constructor-properties.js"); var isForced = __webpack_require__(/*! ../internals/is-forced */ "./node_modules/core-js/internals/is-forced.js"); /* options.target - name of the target object options.global - target is the global object options.stat - export as static methods of target options.proto - export as prototype methods of target options.real - real prototype method for the `pure` version options.forced - export even if the native feature is available options.bind - bind methods to the target, required for the `pure` version options.wrap - wrap constructors to preventing global pollution, required for the `pure` version options.unsafe - use the simple assignment of property instead of delete + defineProperty options.sham - add a flag to not completely full polyfills options.enumerable - export as enumerable property options.noTargetGet - prevent calling a getter on target */ module.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 = global; } else if (STATIC) { target = global[TARGET] || setGlobal(TARGET, {}); } else { target = (global[TARGET] || {}).prototype; } if (target) for (key in source) { sourceProperty = source[key]; if (options.noTargetGet) { descriptor = getOwnPropertyDescriptor(target, key); targetProperty = descriptor && descriptor.value; } else targetProperty = target[key]; FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced); // contained in target if (!FORCED && targetProperty !== undefined) { if (typeof sourceProperty === typeof targetProperty) continue; copyConstructorProperties(sourceProperty, targetProperty); } // add a flag to not completely full polyfills if (options.sham || targetProperty && targetProperty.sham) { createNonEnumerableProperty(sourceProperty, 'sham', true); } // extend global redefine(target, key, sourceProperty, options); } }; /***/ }), /***/ "./node_modules/core-js/internals/fails.js": /*!*************************************************!*\ !*** ./node_modules/core-js/internals/fails.js ***! \*************************************************/ /*! no static exports found */ /***/ (function(module, exports) { module.exports = function (exec) { try { return !!exec(); } catch (error) { return true; } }; /***/ }), /***/ "./node_modules/core-js/internals/fix-regexp-well-known-symbol-logic.js": /*!******************************************************************************!*\ !*** ./node_modules/core-js/internals/fix-regexp-well-known-symbol-logic.js ***! \******************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; // TODO: Remove from `core-js@4` since it's moved to entry points __webpack_require__(/*! ../modules/es.regexp.exec */ "./node_modules/core-js/modules/es.regexp.exec.js"); var redefine = __webpack_require__(/*! ../internals/redefine */ "./node_modules/core-js/internals/redefine.js"); var fails = __webpack_require__(/*! ../internals/fails */ "./node_modules/core-js/internals/fails.js"); var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "./node_modules/core-js/internals/well-known-symbol.js"); var regexpExec = __webpack_require__(/*! ../internals/regexp-exec */ "./node_modules/core-js/internals/regexp-exec.js"); var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ "./node_modules/core-js/internals/create-non-enumerable-property.js"); var SPECIES = wellKnownSymbol('species'); var REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () { // #replace needs built-in support for named groups. // #match works fine because it just return the exec results, even if it has // a "grops" property. var re = /./; re.exec = function () { var result = []; result.groups = { a: '7' }; return result; }; return ''.replace(re, '$') !== '7'; }); // IE <= 11 replaces $0 with the whole match, as if it was $& // https://stackoverflow.com/questions/6024666/getting-ie-to-replace-a-regex-with-the-literal-string-0 var REPLACE_KEEPS_$0 = function () { return 'a'.replace(/./, '$0') === '$0'; }(); var REPLACE = wellKnownSymbol('replace'); // Safari <= 13.0.3(?) substitutes nth capture where n>m with an empty string var REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE = function () { if (/./[REPLACE]) { return /./[REPLACE]('a', '$0') === ''; } return false; }(); // Chrome 51 has a buggy "split" implementation when RegExp#exec !== nativeExec // Weex JS has frozen built-in prototypes, so use try / catch wrapper var SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = !fails(function () { var re = /(?:)/; var originalExec = re.exec; re.exec = function () { return originalExec.apply(this, arguments); }; var result = 'ab'.split(re); return result.length !== 2 || result[0] !== 'a' || result[1] !== 'b'; }); module.exports = function (KEY, length, exec, sham) { var SYMBOL = wellKnownSymbol(KEY); var DELEGATES_TO_SYMBOL = !fails(function () { // String methods call symbol-named RegEp methods var O = {}; O[SYMBOL] = function () { return 7; }; return ''[KEY](O) != 7; }); var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL && !fails(function () { // Symbol-named RegExp methods call .exec var execCalled = false; var re = /a/; if (KEY === 'split') { // We can't use real regex here since it causes deoptimization // and serious performance degradation in V8 // https://github.com/zloirock/core-js/issues/306 re = {}; // RegExp[@@split] doesn't call the regex's exec method, but first creates // a new one. We need to return the patched regex when creating the new one. 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 || KEY === 'replace' && !(REPLACE_SUPPORTS_NAMED_GROUPS && REPLACE_KEEPS_$0 && !REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE) || KEY === 'split' && !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC) { var nativeRegExpMethod = /./[SYMBOL]; var methods = exec(SYMBOL, ''[KEY], function (nativeMethod, regexp, str, arg2, forceStringMethod) { if (regexp.exec === regexpExec) { if (DELEGATES_TO_SYMBOL && !forceStringMethod) { // The native String method already delegates to @@method (this // polyfilled function), leasing to infinite recursion. // We avoid it by directly calling the native @@method method. return { done: true, value: nativeRegExpMethod.call(regexp, str, arg2) }; } return { done: true, value: nativeMethod.call(str, regexp, arg2) }; } return { done: false }; }, { REPLACE_KEEPS_$0: REPLACE_KEEPS_$0, REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE: REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE }); var stringMethod = methods[0]; var regexMethod = methods[1]; redefine(String.prototype, KEY, stringMethod); redefine(RegExp.prototype, SYMBOL, length == 2 // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue) // 21.2.5.11 RegExp.prototype[@@split](string, limit) ? function (string, arg) { return regexMethod.call(string, this, arg); } // 21.2.5.6 RegExp.prototype[@@match](string) // 21.2.5.9 RegExp.prototype[@@search](string) : function (string) { return regexMethod.call(string, this); }); } if (sham) createNonEnumerableProperty(RegExp.prototype[SYMBOL], 'sham', true); }; /***/ }), /***/ "./node_modules/core-js/internals/function-bind-context.js": /*!*****************************************************************!*\ !*** ./node_modules/core-js/internals/function-bind-context.js ***! \*****************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var aFunction = __webpack_require__(/*! ../internals/a-function */ "./node_modules/core-js/internals/a-function.js"); // optional / simple context binding module.exports = function (fn, that, length) { aFunction(fn); if (that === undefined) return fn; switch (length) { case 0: return function () { return fn.call(that); }; case 1: return function (a) { return fn.call(that, a); }; case 2: return function (a, b) { return fn.call(that, a, b); }; case 3: return function (a, b, c) { return fn.call(that, a, b, c); }; } return function () /* ...args */ { return fn.apply(that, arguments); }; }; /***/ }), /***/ "./node_modules/core-js/internals/get-built-in.js": /*!********************************************************!*\ !*** ./node_modules/core-js/internals/get-built-in.js ***! \********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var path = __webpack_require__(/*! ../internals/path */ "./node_modules/core-js/internals/path.js"); var global = __webpack_require__(/*! ../internals/global */ "./node_modules/core-js/internals/global.js"); var aFunction = function (variable) { return typeof variable == 'function' ? variable : undefined; }; module.exports = function (namespace, method) { return arguments.length < 2 ? aFunction(path[namespace]) || aFunction(global[namespace]) : path[namespace] && path[namespace][method] || global[namespace] && global[namespace][method]; }; /***/ }), /***/ "./node_modules/core-js/internals/get-iterator-method.js": /*!***************************************************************!*\ !*** ./node_modules/core-js/internals/get-iterator-method.js ***! \***************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var classof = __webpack_require__(/*! ../internals/classof */ "./node_modules/core-js/internals/classof.js"); var Iterators = __webpack_require__(/*! ../internals/iterators */ "./node_modules/core-js/internals/iterators.js"); var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "./node_modules/core-js/internals/well-known-symbol.js"); var ITERATOR = wellKnownSymbol('iterator'); module.exports = function (it) { if (it != undefined) return it[ITERATOR] || it['@@iterator'] || Iterators[classof(it)]; }; /***/ }), /***/ "./node_modules/core-js/internals/global.js": /*!**************************************************!*\ !*** ./node_modules/core-js/internals/global.js ***! \**************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(global) {var check = function (it) { return it && it.Math == Math && it; }; // https://github.com/zloirock/core-js/issues/86#issuecomment-115759028 module.exports = // eslint-disable-next-line no-undef check(typeof globalThis == 'object' && globalThis) || check(typeof window == 'object' && window) || check(typeof self == 'object' && self) || check(typeof global == 'object' && global) || // eslint-disable-next-line no-new-func Function('return this')(); /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../webpack/buildin/global.js */ "./node_modules/webpack/buildin/global.js"))) /***/ }), /***/ "./node_modules/core-js/internals/has.js": /*!***********************************************!*\ !*** ./node_modules/core-js/internals/has.js ***! \***********************************************/ /*! no static exports found */ /***/ (function(module, exports) { var hasOwnProperty = {}.hasOwnProperty; module.exports = function (it, key) { return hasOwnProperty.call(it, key); }; /***/ }), /***/ "./node_modules/core-js/internals/hidden-keys.js": /*!*******************************************************!*\ !*** ./node_modules/core-js/internals/hidden-keys.js ***! \*******************************************************/ /*! no static exports found */ /***/ (function(module, exports) { module.exports = {}; /***/ }), /***/ "./node_modules/core-js/internals/host-report-errors.js": /*!**************************************************************!*\ !*** ./node_modules/core-js/internals/host-report-errors.js ***! \**************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var global = __webpack_require__(/*! ../internals/global */ "./node_modules/core-js/internals/global.js"); module.exports = function (a, b) { var console = global.console; if (console && console.error) { arguments.length === 1 ? console.error(a) : console.error(a, b); } }; /***/ }), /***/ "./node_modules/core-js/internals/html.js": /*!************************************************!*\ !*** ./node_modules/core-js/internals/html.js ***! \************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ "./node_modules/core-js/internals/get-built-in.js"); module.exports = getBuiltIn('document', 'documentElement'); /***/ }), /***/ "./node_modules/core-js/internals/ie8-dom-define.js": /*!**********************************************************!*\ !*** ./node_modules/core-js/internals/ie8-dom-define.js ***! \**********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ "./node_modules/core-js/internals/descriptors.js"); var fails = __webpack_require__(/*! ../internals/fails */ "./node_modules/core-js/internals/fails.js"); var createElement = __webpack_require__(/*! ../internals/document-create-element */ "./node_modules/core-js/internals/document-create-element.js"); // Thank's IE8 for his funny defineProperty module.exports = !DESCRIPTORS && !fails(function () { return Object.defineProperty(createElement('div'), 'a', { get: function () { return 7; } }).a != 7; }); /***/ }), /***/ "./node_modules/core-js/internals/indexed-object.js": /*!**********************************************************!*\ !*** ./node_modules/core-js/internals/indexed-object.js ***! \**********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var fails = __webpack_require__(/*! ../internals/fails */ "./node_modules/core-js/internals/fails.js"); var classof = __webpack_require__(/*! ../internals/classof-raw */ "./node_modules/core-js/internals/classof-raw.js"); var split = ''.split; // fallback for non-array-like ES3 and non-enumerable old V8 strings module.exports = fails(function () { // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346 // eslint-disable-next-line no-prototype-builtins return !Object('z').propertyIsEnumerable(0); }) ? function (it) { return classof(it) == 'String' ? split.call(it, '') : Object(it); } : Object; /***/ }), /***/ "./node_modules/core-js/internals/inspect-source.js": /*!**********************************************************!*\ !*** ./node_modules/core-js/internals/inspect-source.js ***! \**********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var store = __webpack_require__(/*! ../internals/shared-store */ "./node_modules/core-js/internals/shared-store.js"); var functionToString = Function.toString; // this helper broken in `3.4.1-3.4.4`, so we can't use `shared` helper if (typeof store.inspectSource != 'function') { store.inspectSource = function (it) { return functionToString.call(it); }; } module.exports = store.inspectSource; /***/ }), /***/ "./node_modules/core-js/internals/internal-state.js": /*!**********************************************************!*\ !*** ./node_modules/core-js/internals/internal-state.js ***! \**********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var NATIVE_WEAK_MAP = __webpack_require__(/*! ../internals/native-weak-map */ "./node_modules/core-js/internals/native-weak-map.js"); var global = __webpack_require__(/*! ../internals/global */ "./node_modules/core-js/internals/global.js"); var isObject = __webpack_require__(/*! ../internals/is-object */ "./node_modules/core-js/internals/is-object.js"); var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ "./node_modules/core-js/internals/create-non-enumerable-property.js"); var objectHas = __webpack_require__(/*! ../internals/has */ "./node_modules/core-js/internals/has.js"); var sharedKey = __webpack_require__(/*! ../internals/shared-key */ "./node_modules/core-js/internals/shared-key.js"); var hiddenKeys = __webpack_require__(/*! ../internals/hidden-keys */ "./node_modules/core-js/internals/hidden-keys.js"); var WeakMap = global.WeakMap; var set, get, has; var enforce = function (it) { return has(it) ? get(it) : set(it, {}); }; var getterFor = function (TYPE) { return function (it) { var state; if (!isObject(it) || (state = get(it)).type !== TYPE) { throw TypeError('Incompatible receiver, ' + TYPE + ' required'); } return state; }; }; if (NATIVE_WEAK_MAP) { var store = new WeakMap(); var wmget = store.get; var wmhas = store.has; var wmset = store.set; set = function (it, metadata) { wmset.call(store, it, metadata); return metadata; }; get = function (it) { return wmget.call(store, it) || {}; }; has = function (it) { return wmhas.call(store, it); }; } else { var STATE = sharedKey('state'); hiddenKeys[STATE] = true; set = function (it, metadata) { createNonEnumerableProperty(it, STATE, metadata); return metadata; }; get = function (it) { return objectHas(it, STATE) ? it[STATE] : {}; }; has = function (it) { return objectHas(it, STATE); }; } module.exports = { set: set, get: get, has: has, enforce: enforce, getterFor: getterFor }; /***/ }), /***/ "./node_modules/core-js/internals/is-array-iterator-method.js": /*!********************************************************************!*\ !*** ./node_modules/core-js/internals/is-array-iterator-method.js ***! \********************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "./node_modules/core-js/internals/well-known-symbol.js"); var Iterators = __webpack_require__(/*! ../internals/iterators */ "./node_modules/core-js/internals/iterators.js"); var ITERATOR = wellKnownSymbol('iterator'); var ArrayPrototype = Array.prototype; // check on default Array iterator module.exports = function (it) { return it !== undefined && (Iterators.Array === it || ArrayPrototype[ITERATOR] === it); }; /***/ }), /***/ "./node_modules/core-js/internals/is-array.js": /*!****************************************************!*\ !*** ./node_modules/core-js/internals/is-array.js ***! \****************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var classof = __webpack_require__(/*! ../internals/classof-raw */ "./node_modules/core-js/internals/classof-raw.js"); // `IsArray` abstract operation // https://tc39.github.io/ecma262/#sec-isarray module.exports = Array.isArray || function isArray(arg) { return classof(arg) == 'Array'; }; /***/ }), /***/ "./node_modules/core-js/internals/is-forced.js": /*!*****************************************************!*\ !*** ./node_modules/core-js/internals/is-forced.js ***! \*****************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var fails = __webpack_require__(/*! ../internals/fails */ "./node_modules/core-js/internals/fails.js"); var replacement = /#|\.prototype\./; var isForced = function (feature, detection) { var value = data[normalize(feature)]; return value == POLYFILL ? true : value == NATIVE ? false : typeof detection == 'function' ? 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'; module.exports = isForced; /***/ }), /***/ "./node_modules/core-js/internals/is-object.js": /*!*****************************************************!*\ !*** ./node_modules/core-js/internals/is-object.js ***! \*****************************************************/ /*! no static exports found */ /***/ (function(module, exports) { module.exports = function (it) { return typeof it === 'object' ? it !== null : typeof it === 'function'; }; /***/ }), /***/ "./node_modules/core-js/internals/is-pure.js": /*!***************************************************!*\ !*** ./node_modules/core-js/internals/is-pure.js ***! \***************************************************/ /*! no static exports found */ /***/ (function(module, exports) { module.exports = false; /***/ }), /***/ "./node_modules/core-js/internals/is-regexp.js": /*!*****************************************************!*\ !*** ./node_modules/core-js/internals/is-regexp.js ***! \*****************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var isObject = __webpack_require__(/*! ../internals/is-object */ "./node_modules/core-js/internals/is-object.js"); var classof = __webpack_require__(/*! ../internals/classof-raw */ "./node_modules/core-js/internals/classof-raw.js"); var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "./node_modules/core-js/internals/well-known-symbol.js"); var MATCH = wellKnownSymbol('match'); // `IsRegExp` abstract operation // https://tc39.github.io/ecma262/#sec-isregexp module.exports = function (it) { var isRegExp; return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : classof(it) == 'RegExp'); }; /***/ }), /***/ "./node_modules/core-js/internals/iterate.js": /*!***************************************************!*\ !*** ./node_modules/core-js/internals/iterate.js ***! \***************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var anObject = __webpack_require__(/*! ../internals/an-object */ "./node_modules/core-js/internals/an-object.js"); var isArrayIteratorMethod = __webpack_require__(/*! ../internals/is-array-iterator-method */ "./node_modules/core-js/internals/is-array-iterator-method.js"); var toLength = __webpack_require__(/*! ../internals/to-length */ "./node_modules/core-js/internals/to-length.js"); var bind = __webpack_require__(/*! ../internals/function-bind-context */ "./node_modules/core-js/internals/function-bind-context.js"); var getIteratorMethod = __webpack_require__(/*! ../internals/get-iterator-method */ "./node_modules/core-js/internals/get-iterator-method.js"); var callWithSafeIterationClosing = __webpack_require__(/*! ../internals/call-with-safe-iteration-closing */ "./node_modules/core-js/internals/call-with-safe-iteration-closing.js"); var Result = function (stopped, result) { this.stopped = stopped; this.result = result; }; var iterate = module.exports = function (iterable, fn, that, AS_ENTRIES, IS_ITERATOR) { var boundFunction = bind(fn, that, AS_ENTRIES ? 2 : 1); var iterator, iterFn, index, length, result, next, step; if (IS_ITERATOR) { iterator = iterable; } else { iterFn = getIteratorMethod(iterable); if (typeof iterFn != 'function') throw TypeError('Target is not iterable'); // optimisation for array iterators if (isArrayIteratorMethod(iterFn)) { for (index = 0, length = toLength(iterable.length); length > index; index++) { result = AS_ENTRIES ? boundFunction(anObject(step = iterable[index])[0], step[1]) : boundFunction(iterable[index]); if (result && result instanceof Result) return result; } return new Result(false); } iterator = iterFn.call(iterable); } next = iterator.next; while (!(step = next.call(iterator)).done) { result = callWithSafeIterationClosing(iterator, boundFunction, step.value, AS_ENTRIES); if (typeof result == 'object' && result && result instanceof Result) return result; } return new Result(false); }; iterate.stop = function (result) { return new Result(true, result); }; /***/ }), /***/ "./node_modules/core-js/internals/iterators.js": /*!*****************************************************!*\ !*** ./node_modules/core-js/internals/iterators.js ***! \*****************************************************/ /*! no static exports found */ /***/ (function(module, exports) { module.exports = {}; /***/ }), /***/ "./node_modules/core-js/internals/microtask.js": /*!*****************************************************!*\ !*** ./node_modules/core-js/internals/microtask.js ***! \*****************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var global = __webpack_require__(/*! ../internals/global */ "./node_modules/core-js/internals/global.js"); var getOwnPropertyDescriptor = __webpack_require__(/*! ../internals/object-get-own-property-descriptor */ "./node_modules/core-js/internals/object-get-own-property-descriptor.js").f; var classof = __webpack_require__(/*! ../internals/classof-raw */ "./node_modules/core-js/internals/classof-raw.js"); var macrotask = __webpack_require__(/*! ../internals/task */ "./node_modules/core-js/internals/task.js").set; var IS_IOS = __webpack_require__(/*! ../internals/engine-is-ios */ "./node_modules/core-js/internals/engine-is-ios.js"); var MutationObserver = global.MutationObserver || global.WebKitMutationObserver; var process = global.process; var Promise = global.Promise; var IS_NODE = classof(process) == 'process'; // Node.js 11 shows ExperimentalWarning on getting `queueMicrotask` var queueMicrotaskDescriptor = getOwnPropertyDescriptor(global, 'queueMicrotask'); var queueMicrotask = queueMicrotaskDescriptor && queueMicrotaskDescriptor.value; var flush, head, last, notify, toggle, node, promise, then; // modern engines have queueMicrotask method if (!queueMicrotask) { flush = function () { var parent, fn; if (IS_NODE && (parent = process.domain)) parent.exit(); while (head) { fn = head.fn; head = head.next; try { fn(); } catch (error) { if (head) notify();else last = undefined; throw error; } } last = undefined; if (parent) parent.enter(); }; // Node.js if (IS_NODE) { notify = function () { process.nextTick(flush); }; // browsers with MutationObserver, except iOS - https://github.com/zloirock/core-js/issues/339 } else if (MutationObserver && !IS_IOS) { toggle = true; node = document.createTextNode(''); new MutationObserver(flush).observe(node, { characterData: true }); notify = function () { node.data = toggle = !toggle; }; // environments with maybe non-completely correct, but existent Promise } else if (Promise && Promise.resolve) { // Promise.resolve without an argument throws an error in LG WebOS 2 promise = Promise.resolve(undefined); then = promise.then; notify = function () { then.call(promise, flush); }; // for other environments - macrotask based on: // - setImmediate // - MessageChannel // - window.postMessag // - onreadystatechange // - setTimeout } else { notify = function () { // strange IE + webpack dev server bug - use .call(global) macrotask.call(global, flush); }; } } module.exports = queueMicrotask || function (fn) { var task = { fn: fn, next: undefined }; if (last) last.next = task; if (!head) { head = task; notify(); } last = task; }; /***/ }), /***/ "./node_modules/core-js/internals/native-promise-constructor.js": /*!**********************************************************************!*\ !*** ./node_modules/core-js/internals/native-promise-constructor.js ***! \**********************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var global = __webpack_require__(/*! ../internals/global */ "./node_modules/core-js/internals/global.js"); module.exports = global.Promise; /***/ }), /***/ "./node_modules/core-js/internals/native-symbol.js": /*!*********************************************************!*\ !*** ./node_modules/core-js/internals/native-symbol.js ***! \*********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var fails = __webpack_require__(/*! ../internals/fails */ "./node_modules/core-js/internals/fails.js"); module.exports = !!Object.getOwnPropertySymbols && !fails(function () { // Chrome 38 Symbol has incorrect toString conversion // eslint-disable-next-line no-undef return !String(Symbol()); }); /***/ }), /***/ "./node_modules/core-js/internals/native-weak-map.js": /*!***********************************************************!*\ !*** ./node_modules/core-js/internals/native-weak-map.js ***! \***********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var global = __webpack_require__(/*! ../internals/global */ "./node_modules/core-js/internals/global.js"); var inspectSource = __webpack_require__(/*! ../internals/inspect-source */ "./node_modules/core-js/internals/inspect-source.js"); var WeakMap = global.WeakMap; module.exports = typeof WeakMap === 'function' && /native code/.test(inspectSource(WeakMap)); /***/ }), /***/ "./node_modules/core-js/internals/new-promise-capability.js": /*!******************************************************************!*\ !*** ./node_modules/core-js/internals/new-promise-capability.js ***! \******************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var aFunction = __webpack_require__(/*! ../internals/a-function */ "./node_modules/core-js/internals/a-function.js"); var PromiseCapability = function (C) { var resolve, reject; this.promise = new C(function ($$resolve, $$reject) { if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor'); resolve = $$resolve; reject = $$reject; }); this.resolve = aFunction(resolve); this.reject = aFunction(reject); }; // 25.4.1.5 NewPromiseCapability(C) module.exports.f = function (C) { return new PromiseCapability(C); }; /***/ }), /***/ "./node_modules/core-js/internals/object-create.js": /*!*********************************************************!*\ !*** ./node_modules/core-js/internals/object-create.js ***! \*********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var anObject = __webpack_require__(/*! ../internals/an-object */ "./node_modules/core-js/internals/an-object.js"); var defineProperties = __webpack_require__(/*! ../internals/object-define-properties */ "./node_modules/core-js/internals/object-define-properties.js"); var enumBugKeys = __webpack_require__(/*! ../internals/enum-bug-keys */ "./node_modules/core-js/internals/enum-bug-keys.js"); var hiddenKeys = __webpack_require__(/*! ../internals/hidden-keys */ "./node_modules/core-js/internals/hidden-keys.js"); var html = __webpack_require__(/*! ../internals/html */ "./node_modules/core-js/internals/html.js"); var documentCreateElement = __webpack_require__(/*! ../internals/document-create-element */ "./node_modules/core-js/internals/document-create-element.js"); var sharedKey = __webpack_require__(/*! ../internals/shared-key */ "./node_modules/core-js/internals/shared-key.js"); var GT = '>'; var LT = '<'; var PROTOTYPE = 'prototype'; var SCRIPT = 'script'; var IE_PROTO = sharedKey('IE_PROTO'); var EmptyConstructor = function () { /* empty */ }; var scriptTag = function (content) { return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT; }; // Create object with fake `null` prototype: use ActiveX Object with cleared prototype var NullProtoObjectViaActiveX = function (activeXDocument) { activeXDocument.write(scriptTag('')); activeXDocument.close(); var temp = activeXDocument.parentWindow.Object; activeXDocument = null; // avoid memory leak return temp; }; // Create object with fake `null` prototype: use iframe Object with cleared prototype var NullProtoObjectViaIFrame = function () { // Thrash, waste and sodomy: IE GC bug var iframe = documentCreateElement('iframe'); var JS = 'java' + SCRIPT + ':'; var iframeDocument; iframe.style.display = 'none'; html.appendChild(iframe); // https://github.com/zloirock/core-js/issues/475 iframe.src = String(JS); iframeDocument = iframe.contentWindow.document; iframeDocument.open(); iframeDocument.write(scriptTag('document.F=Object')); iframeDocument.close(); return iframeDocument.F; }; // Check for document.domain and active x support // No need to use active x approach when document.domain is not set // see https://github.com/es-shims/es5-shim/issues/150 // variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346 // avoid IE GC bug var activeXDocument; var NullProtoObject = function () { try { /* global ActiveXObject */ activeXDocument = document.domain && new ActiveXObject('htmlfile'); } catch (error) { /* ignore */ } NullProtoObject = activeXDocument ? NullProtoObjectViaActiveX(activeXDocument) : NullProtoObjectViaIFrame(); var length = enumBugKeys.length; while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]]; return NullProtoObject(); }; hiddenKeys[IE_PROTO] = true; // `Object.create` method // https://tc39.github.io/ecma262/#sec-object.create module.exports = Object.create || function create(O, Properties) { var result; if (O !== null) { EmptyConstructor[PROTOTYPE] = anObject(O); result = new EmptyConstructor(); EmptyConstructor[PROTOTYPE] = null; // add "__proto__" for Object.getPrototypeOf polyfill result[IE_PROTO] = O; } else result = NullProtoObject(); return Properties === undefined ? result : defineProperties(result, Properties); }; /***/ }), /***/ "./node_modules/core-js/internals/object-define-properties.js": /*!********************************************************************!*\ !*** ./node_modules/core-js/internals/object-define-properties.js ***! \********************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ "./node_modules/core-js/internals/descriptors.js"); var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ "./node_modules/core-js/internals/object-define-property.js"); var anObject = __webpack_require__(/*! ../internals/an-object */ "./node_modules/core-js/internals/an-object.js"); var objectKeys = __webpack_require__(/*! ../internals/object-keys */ "./node_modules/core-js/internals/object-keys.js"); // `Object.defineProperties` method // https://tc39.github.io/ecma262/#sec-object.defineproperties module.exports = DESCRIPTORS ? Object.defineProperties : function defineProperties(O, Properties) { anObject(O); var keys = objectKeys(Properties); var length = keys.length; var index = 0; var key; while (length > index) definePropertyModule.f(O, key = keys[index++], Properties[key]); return O; }; /***/ }), /***/ "./node_modules/core-js/internals/object-define-property.js": /*!******************************************************************!*\ !*** ./node_modules/core-js/internals/object-define-property.js ***! \******************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ "./node_modules/core-js/internals/descriptors.js"); var IE8_DOM_DEFINE = __webpack_require__(/*! ../internals/ie8-dom-define */ "./node_modules/core-js/internals/ie8-dom-define.js"); var anObject = __webpack_require__(/*! ../internals/an-object */ "./node_modules/core-js/internals/an-object.js"); var toPrimitive = __webpack_require__(/*! ../internals/to-primitive */ "./node_modules/core-js/internals/to-primitive.js"); var nativeDefineProperty = Object.defineProperty; // `Object.defineProperty` method // https://tc39.github.io/ecma262/#sec-object.defineproperty exports.f = DESCRIPTORS ? nativeDefineProperty : function defineProperty(O, P, Attributes) { anObject(O); P = toPrimitive(P, true); anObject(Attributes); if (IE8_DOM_DEFINE) try { return nativeDefineProperty(O, P, Attributes); } catch (error) { /* empty */ } if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported'); if ('value' in Attributes) O[P] = Attributes.value; return O; }; /***/ }), /***/ "./node_modules/core-js/internals/object-get-own-property-descriptor.js": /*!******************************************************************************!*\ !*** ./node_modules/core-js/internals/object-get-own-property-descriptor.js ***! \******************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ "./node_modules/core-js/internals/descriptors.js"); var propertyIsEnumerableModule = __webpack_require__(/*! ../internals/object-property-is-enumerable */ "./node_modules/core-js/internals/object-property-is-enumerable.js"); var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ "./node_modules/core-js/internals/create-property-descriptor.js"); var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ "./node_modules/core-js/internals/to-indexed-object.js"); var toPrimitive = __webpack_require__(/*! ../internals/to-primitive */ "./node_modules/core-js/internals/to-primitive.js"); var has = __webpack_require__(/*! ../internals/has */ "./node_modules/core-js/internals/has.js"); var IE8_DOM_DEFINE = __webpack_require__(/*! ../internals/ie8-dom-define */ "./node_modules/core-js/internals/ie8-dom-define.js"); var nativeGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; // `Object.getOwnPropertyDescriptor` method // https://tc39.github.io/ecma262/#sec-object.getownpropertydescriptor exports.f = DESCRIPTORS ? nativeGetOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) { O = toIndexedObject(O); P = toPrimitive(P, true); if (IE8_DOM_DEFINE) try { return nativeGetOwnPropertyDescriptor(O, P); } catch (error) { /* empty */ } if (has(O, P)) return createPropertyDescriptor(!propertyIsEnumerableModule.f.call(O, P), O[P]); }; /***/ }), /***/ "./node_modules/core-js/internals/object-get-own-property-names-external.js": /*!**********************************************************************************!*\ !*** ./node_modules/core-js/internals/object-get-own-property-names-external.js ***! \**********************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ "./node_modules/core-js/internals/to-indexed-object.js"); var nativeGetOwnPropertyNames = __webpack_require__(/*! ../internals/object-get-own-property-names */ "./node_modules/core-js/internals/object-get-own-property-names.js").f; var toString = {}.toString; var windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames ? Object.getOwnPropertyNames(window) : []; var getWindowNames = function (it) { try { return nativeGetOwnPropertyNames(it); } catch (error) { return windowNames.slice(); } }; // fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window module.exports.f = function getOwnPropertyNames(it) { return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : nativeGetOwnPropertyNames(toIndexedObject(it)); }; /***/ }), /***/ "./node_modules/core-js/internals/object-get-own-property-names.js": /*!*************************************************************************!*\ !*** ./node_modules/core-js/internals/object-get-own-property-names.js ***! \*************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var internalObjectKeys = __webpack_require__(/*! ../internals/object-keys-internal */ "./node_modules/core-js/internals/object-keys-internal.js"); var enumBugKeys = __webpack_require__(/*! ../internals/enum-bug-keys */ "./node_modules/core-js/internals/enum-bug-keys.js"); var hiddenKeys = enumBugKeys.concat('length', 'prototype'); // `Object.getOwnPropertyNames` method // https://tc39.github.io/ecma262/#sec-object.getownpropertynames exports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) { return internalObjectKeys(O, hiddenKeys); }; /***/ }), /***/ "./node_modules/core-js/internals/object-get-own-property-symbols.js": /*!***************************************************************************!*\ !*** ./node_modules/core-js/internals/object-get-own-property-symbols.js ***! \***************************************************************************/ /*! no static exports found */ /***/ (function(module, exports) { exports.f = Object.getOwnPropertySymbols; /***/ }), /***/ "./node_modules/core-js/internals/object-keys-internal.js": /*!****************************************************************!*\ !*** ./node_modules/core-js/internals/object-keys-internal.js ***! \****************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var has = __webpack_require__(/*! ../internals/has */ "./node_modules/core-js/internals/has.js"); var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ "./node_modules/core-js/internals/to-indexed-object.js"); var indexOf = __webpack_require__(/*! ../internals/array-includes */ "./node_modules/core-js/internals/array-includes.js").indexOf; var hiddenKeys = __webpack_require__(/*! ../internals/hidden-keys */ "./node_modules/core-js/internals/hidden-keys.js"); module.exports = function (object, names) { var O = toIndexedObject(object); var i = 0; var result = []; var key; for (key in O) !has(hiddenKeys, key) && has(O, key) && result.push(key); // Don't enum bug & hidden keys while (names.length > i) if (has(O, key = names[i++])) { ~indexOf(result, key) || result.push(key); } return result; }; /***/ }), /***/ "./node_modules/core-js/internals/object-keys.js": /*!*******************************************************!*\ !*** ./node_modules/core-js/internals/object-keys.js ***! \*******************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var internalObjectKeys = __webpack_require__(/*! ../internals/object-keys-internal */ "./node_modules/core-js/internals/object-keys-internal.js"); var enumBugKeys = __webpack_require__(/*! ../internals/enum-bug-keys */ "./node_modules/core-js/internals/enum-bug-keys.js"); // `Object.keys` method // https://tc39.github.io/ecma262/#sec-object.keys module.exports = Object.keys || function keys(O) { return internalObjectKeys(O, enumBugKeys); }; /***/ }), /***/ "./node_modules/core-js/internals/object-property-is-enumerable.js": /*!*************************************************************************!*\ !*** ./node_modules/core-js/internals/object-property-is-enumerable.js ***! \*************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var nativePropertyIsEnumerable = {}.propertyIsEnumerable; var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; // Nashorn ~ JDK8 bug var NASHORN_BUG = getOwnPropertyDescriptor && !nativePropertyIsEnumerable.call({ 1: 2 }, 1); // `Object.prototype.propertyIsEnumerable` method implementation // https://tc39.github.io/ecma262/#sec-object.prototype.propertyisenumerable exports.f = NASHORN_BUG ? function propertyIsEnumerable(V) { var descriptor = getOwnPropertyDescriptor(this, V); return !!descriptor && descriptor.enumerable; } : nativePropertyIsEnumerable; /***/ }), /***/ "./node_modules/core-js/internals/object-to-string.js": /*!************************************************************!*\ !*** ./node_modules/core-js/internals/object-to-string.js ***! \************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var TO_STRING_TAG_SUPPORT = __webpack_require__(/*! ../internals/to-string-tag-support */ "./node_modules/core-js/internals/to-string-tag-support.js"); var classof = __webpack_require__(/*! ../internals/classof */ "./node_modules/core-js/internals/classof.js"); // `Object.prototype.toString` method implementation // https://tc39.github.io/ecma262/#sec-object.prototype.tostring module.exports = TO_STRING_TAG_SUPPORT ? {}.toString : function toString() { return '[object ' + classof(this) + ']'; }; /***/ }), /***/ "./node_modules/core-js/internals/own-keys.js": /*!****************************************************!*\ !*** ./node_modules/core-js/internals/own-keys.js ***! \****************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ "./node_modules/core-js/internals/get-built-in.js"); var getOwnPropertyNamesModule = __webpack_require__(/*! ../internals/object-get-own-property-names */ "./node_modules/core-js/internals/object-get-own-property-names.js"); var getOwnPropertySymbolsModule = __webpack_require__(/*! ../internals/object-get-own-property-symbols */ "./node_modules/core-js/internals/object-get-own-property-symbols.js"); var anObject = __webpack_require__(/*! ../internals/an-object */ "./node_modules/core-js/internals/an-object.js"); // all object keys, includes non-enumerable and symbols module.exports = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) { var keys = getOwnPropertyNamesModule.f(anObject(it)); var getOwnPropertySymbols = getOwnPropertySymbolsModule.f; return getOwnPropertySymbols ? keys.concat(getOwnPropertySymbols(it)) : keys; }; /***/ }), /***/ "./node_modules/core-js/internals/path.js": /*!************************************************!*\ !*** ./node_modules/core-js/internals/path.js ***! \************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var global = __webpack_require__(/*! ../internals/global */ "./node_modules/core-js/internals/global.js"); module.exports = global; /***/ }), /***/ "./node_modules/core-js/internals/perform.js": /*!***************************************************!*\ !*** ./node_modules/core-js/internals/perform.js ***! \***************************************************/ /*! no static exports found */ /***/ (function(module, exports) { module.exports = function (exec) { try { return { error: false, value: exec() }; } catch (error) { return { error: true, value: error }; } }; /***/ }), /***/ "./node_modules/core-js/internals/promise-resolve.js": /*!***********************************************************!*\ !*** ./node_modules/core-js/internals/promise-resolve.js ***! \***********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var anObject = __webpack_require__(/*! ../internals/an-object */ "./node_modules/core-js/internals/an-object.js"); var isObject = __webpack_require__(/*! ../internals/is-object */ "./node_modules/core-js/internals/is-object.js"); var newPromiseCapability = __webpack_require__(/*! ../internals/new-promise-capability */ "./node_modules/core-js/internals/new-promise-capability.js"); module.exports = function (C, x) { anObject(C); if (isObject(x) && x.constructor === C) return x; var promiseCapability = newPromiseCapability.f(C); var resolve = promiseCapability.resolve; resolve(x); return promiseCapability.promise; }; /***/ }), /***/ "./node_modules/core-js/internals/redefine-all.js": /*!********************************************************!*\ !*** ./node_modules/core-js/internals/redefine-all.js ***! \********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var redefine = __webpack_require__(/*! ../internals/redefine */ "./node_modules/core-js/internals/redefine.js"); module.exports = function (target, src, options) { for (var key in src) redefine(target, key, src[key], options); return target; }; /***/ }), /***/ "./node_modules/core-js/internals/redefine.js": /*!****************************************************!*\ !*** ./node_modules/core-js/internals/redefine.js ***! \****************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var global = __webpack_require__(/*! ../internals/global */ "./node_modules/core-js/internals/global.js"); var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ "./node_modules/core-js/internals/create-non-enumerable-property.js"); var has = __webpack_require__(/*! ../internals/has */ "./node_modules/core-js/internals/has.js"); var setGlobal = __webpack_require__(/*! ../internals/set-global */ "./node_modules/core-js/internals/set-global.js"); var inspectSource = __webpack_require__(/*! ../internals/inspect-source */ "./node_modules/core-js/internals/inspect-source.js"); var InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ "./node_modules/core-js/internals/internal-state.js"); var getInternalState = InternalStateModule.get; var enforceInternalState = InternalStateModule.enforce; var TEMPLATE = String(String).split('String'); (module.exports = function (O, key, value, options) { var unsafe = options ? !!options.unsafe : false; var simple = options ? !!options.enumerable : false; var noTargetGet = options ? !!options.noTargetGet : false; if (typeof value == 'function') { if (typeof key == 'string' && !has(value, 'name')) createNonEnumerableProperty(value, 'name', key); enforceInternalState(value).source = TEMPLATE.join(typeof key == 'string' ? key : ''); } if (O === global) { if (simple) O[key] = value;else setGlobal(key, value); return; } else if (!unsafe) { delete O[key]; } else if (!noTargetGet && O[key]) { simple = true; } if (simple) O[key] = value;else createNonEnumerableProperty(O, key, value); // add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative })(Function.prototype, 'toString', function toString() { return typeof this == 'function' && getInternalState(this).source || inspectSource(this); }); /***/ }), /***/ "./node_modules/core-js/internals/regexp-exec-abstract.js": /*!****************************************************************!*\ !*** ./node_modules/core-js/internals/regexp-exec-abstract.js ***! \****************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var classof = __webpack_require__(/*! ./classof-raw */ "./node_modules/core-js/internals/classof-raw.js"); var regexpExec = __webpack_require__(/*! ./regexp-exec */ "./node_modules/core-js/internals/regexp-exec.js"); // `RegExpExec` abstract operation // https://tc39.github.io/ecma262/#sec-regexpexec module.exports = function (R, S) { var exec = R.exec; if (typeof exec === 'function') { var result = exec.call(R, S); if (typeof result !== 'object') { throw TypeError('RegExp exec method returned something other than an Object or null'); } return result; } if (classof(R) !== 'RegExp') { throw TypeError('RegExp#exec called on incompatible receiver'); } return regexpExec.call(R, S); }; /***/ }), /***/ "./node_modules/core-js/internals/regexp-exec.js": /*!*******************************************************!*\ !*** ./node_modules/core-js/internals/regexp-exec.js ***! \*******************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var regexpFlags = __webpack_require__(/*! ./regexp-flags */ "./node_modules/core-js/internals/regexp-flags.js"); var stickyHelpers = __webpack_require__(/*! ./regexp-sticky-helpers */ "./node_modules/core-js/internals/regexp-sticky-helpers.js"); var nativeExec = RegExp.prototype.exec; // This always refers to the native implementation, because the // String#replace polyfill uses ./fix-regexp-well-known-symbol-logic.js, // which loads this file before patching the method. var nativeReplace = String.prototype.replace; var patchedExec = nativeExec; var UPDATES_LAST_INDEX_WRONG = function () { var re1 = /a/; var re2 = /b*/g; nativeExec.call(re1, 'a'); nativeExec.call(re2, 'a'); return re1.lastIndex !== 0 || re2.lastIndex !== 0; }(); var UNSUPPORTED_Y = stickyHelpers.UNSUPPORTED_Y || stickyHelpers.BROKEN_CARET; // nonparticipating capturing group, copied from es5-shim's String#split patch. var NPCG_INCLUDED = /()??/.exec('')[1] !== undefined; var PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED || UNSUPPORTED_Y; if (PATCH) { patchedExec = function exec(str) { var re = this; var lastIndex, reCopy, match, i; var sticky = UNSUPPORTED_Y && re.sticky; var flags = regexpFlags.call(re); var source = re.source; var charsAdded = 0; var strCopy = str; if (sticky) { flags = flags.replace('y', ''); if (flags.indexOf('g') === -1) { flags += 'g'; } strCopy = String(str).slice(re.lastIndex); // Support anchored sticky behavior. if (re.lastIndex > 0 && (!re.multiline || re.multiline && str[re.lastIndex - 1] !== '\n')) { source = '(?: ' + source + ')'; strCopy = ' ' + strCopy; charsAdded++; } // ^(? + rx + ) is needed, in combination with some str slicing, to // simulate the 'y' flag. reCopy = new RegExp('^(?:' + source + ')', flags); } if (NPCG_INCLUDED) { reCopy = new RegExp('^' + source + '$(?!\\s)', flags); } if (UPDATES_LAST_INDEX_WRONG) lastIndex = re.lastIndex; match = nativeExec.call(sticky ? reCopy : re, strCopy); if (sticky) { if (match) { match.input = match.input.slice(charsAdded); match[0] = match[0].slice(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) { // Fix browsers whose `exec` methods don't consistently return `undefined` // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/ nativeReplace.call(match[0], reCopy, function () { for (i = 1; i < arguments.length - 2; i++) { if (arguments[i] === undefined) match[i] = undefined; } }); } return match; }; } module.exports = patchedExec; /***/ }), /***/ "./node_modules/core-js/internals/regexp-flags.js": /*!********************************************************!*\ !*** ./node_modules/core-js/internals/regexp-flags.js ***! \********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var anObject = __webpack_require__(/*! ../internals/an-object */ "./node_modules/core-js/internals/an-object.js"); // `RegExp.prototype.flags` getter implementation // https://tc39.github.io/ecma262/#sec-get-regexp.prototype.flags module.exports = function () { var that = anObject(this); var result = ''; 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.sticky) result += 'y'; return result; }; /***/ }), /***/ "./node_modules/core-js/internals/regexp-sticky-helpers.js": /*!*****************************************************************!*\ !*** ./node_modules/core-js/internals/regexp-sticky-helpers.js ***! \*****************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var fails = __webpack_require__(/*! ./fails */ "./node_modules/core-js/internals/fails.js"); // babel-minify transpiles RegExp('a', 'y') -> /a/y and it causes SyntaxError, // so we use an intermediate function. function RE(s, f) { return RegExp(s, f); } exports.UNSUPPORTED_Y = fails(function () { // babel-minify transpiles RegExp('a', 'y') -> /a/y and it causes SyntaxError var re = RE('a', 'y'); re.lastIndex = 2; return re.exec('abcd') != null; }); exports.BROKEN_CARET = fails(function () { // https://bugzilla.mozilla.org/show_bug.cgi?id=773687 var re = RE('^r', 'gy'); re.lastIndex = 2; return re.exec('str') != null; }); /***/ }), /***/ "./node_modules/core-js/internals/require-object-coercible.js": /*!********************************************************************!*\ !*** ./node_modules/core-js/internals/require-object-coercible.js ***! \********************************************************************/ /*! no static exports found */ /***/ (function(module, exports) { // `RequireObjectCoercible` abstract operation // https://tc39.github.io/ecma262/#sec-requireobjectcoercible module.exports = function (it) { if (it == undefined) throw TypeError("Can't call method on " + it); return it; }; /***/ }), /***/ "./node_modules/core-js/internals/set-global.js": /*!******************************************************!*\ !*** ./node_modules/core-js/internals/set-global.js ***! \******************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var global = __webpack_require__(/*! ../internals/global */ "./node_modules/core-js/internals/global.js"); var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ "./node_modules/core-js/internals/create-non-enumerable-property.js"); module.exports = function (key, value) { try { createNonEnumerableProperty(global, key, value); } catch (error) { global[key] = value; } return value; }; /***/ }), /***/ "./node_modules/core-js/internals/set-species.js": /*!*******************************************************!*\ !*** ./node_modules/core-js/internals/set-species.js ***! \*******************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ "./node_modules/core-js/internals/get-built-in.js"); var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ "./node_modules/core-js/internals/object-define-property.js"); var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "./node_modules/core-js/internals/well-known-symbol.js"); var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ "./node_modules/core-js/internals/descriptors.js"); var SPECIES = wellKnownSymbol('species'); module.exports = function (CONSTRUCTOR_NAME) { var Constructor = getBuiltIn(CONSTRUCTOR_NAME); var defineProperty = definePropertyModule.f; if (DESCRIPTORS && Constructor && !Constructor[SPECIES]) { defineProperty(Constructor, SPECIES, { configurable: true, get: function () { return this; } }); } }; /***/ }), /***/ "./node_modules/core-js/internals/set-to-string-tag.js": /*!*************************************************************!*\ !*** ./node_modules/core-js/internals/set-to-string-tag.js ***! \*************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var defineProperty = __webpack_require__(/*! ../internals/object-define-property */ "./node_modules/core-js/internals/object-define-property.js").f; var has = __webpack_require__(/*! ../internals/has */ "./node_modules/core-js/internals/has.js"); var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "./node_modules/core-js/internals/well-known-symbol.js"); var TO_STRING_TAG = wellKnownSymbol('toStringTag'); module.exports = function (it, TAG, STATIC) { if (it && !has(it = STATIC ? it : it.prototype, TO_STRING_TAG)) { defineProperty(it, TO_STRING_TAG, { configurable: true, value: TAG }); } }; /***/ }), /***/ "./node_modules/core-js/internals/shared-key.js": /*!******************************************************!*\ !*** ./node_modules/core-js/internals/shared-key.js ***! \******************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var shared = __webpack_require__(/*! ../internals/shared */ "./node_modules/core-js/internals/shared.js"); var uid = __webpack_require__(/*! ../internals/uid */ "./node_modules/core-js/internals/uid.js"); var keys = shared('keys'); module.exports = function (key) { return keys[key] || (keys[key] = uid(key)); }; /***/ }), /***/ "./node_modules/core-js/internals/shared-store.js": /*!********************************************************!*\ !*** ./node_modules/core-js/internals/shared-store.js ***! \********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var global = __webpack_require__(/*! ../internals/global */ "./node_modules/core-js/internals/global.js"); var setGlobal = __webpack_require__(/*! ../internals/set-global */ "./node_modules/core-js/internals/set-global.js"); var SHARED = '__core-js_shared__'; var store = global[SHARED] || setGlobal(SHARED, {}); module.exports = store; /***/ }), /***/ "./node_modules/core-js/internals/shared.js": /*!**************************************************!*\ !*** ./node_modules/core-js/internals/shared.js ***! \**************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ "./node_modules/core-js/internals/is-pure.js"); var store = __webpack_require__(/*! ../internals/shared-store */ "./node_modules/core-js/internals/shared-store.js"); (module.exports = function (key, value) { return store[key] || (store[key] = value !== undefined ? value : {}); })('versions', []).push({ version: '3.6.5', mode: IS_PURE ? 'pure' : 'global', copyright: '© 2020 Denis Pushkarev (zloirock.ru)' }); /***/ }), /***/ "./node_modules/core-js/internals/species-constructor.js": /*!***************************************************************!*\ !*** ./node_modules/core-js/internals/species-constructor.js ***! \***************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var anObject = __webpack_require__(/*! ../internals/an-object */ "./node_modules/core-js/internals/an-object.js"); var aFunction = __webpack_require__(/*! ../internals/a-function */ "./node_modules/core-js/internals/a-function.js"); var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "./node_modules/core-js/internals/well-known-symbol.js"); var SPECIES = wellKnownSymbol('species'); // `SpeciesConstructor` abstract operation // https://tc39.github.io/ecma262/#sec-speciesconstructor module.exports = function (O, defaultConstructor) { var C = anObject(O).constructor; var S; return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? defaultConstructor : aFunction(S); }; /***/ }), /***/ "./node_modules/core-js/internals/string-multibyte.js": /*!************************************************************!*\ !*** ./node_modules/core-js/internals/string-multibyte.js ***! \************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var toInteger = __webpack_require__(/*! ../internals/to-integer */ "./node_modules/core-js/internals/to-integer.js"); var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ "./node_modules/core-js/internals/require-object-coercible.js"); // `String.prototype.{ codePointAt, at }` methods implementation var createMethod = function (CONVERT_TO_STRING) { return function ($this, pos) { var S = String(requireObjectCoercible($this)); var position = toInteger(pos); var size = S.length; var first, second; if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined; first = S.charCodeAt(position); return first < 0xD800 || first > 0xDBFF || position + 1 === size || (second = S.charCodeAt(position + 1)) < 0xDC00 || second > 0xDFFF ? CONVERT_TO_STRING ? S.charAt(position) : first : CONVERT_TO_STRING ? S.slice(position, position + 2) : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000; }; }; module.exports = { // `String.prototype.codePointAt` method // https://tc39.github.io/ecma262/#sec-string.prototype.codepointat codeAt: createMethod(false), // `String.prototype.at` method // https://github.com/mathiasbynens/String.prototype.at charAt: createMethod(true) }; /***/ }), /***/ "./node_modules/core-js/internals/task.js": /*!************************************************!*\ !*** ./node_modules/core-js/internals/task.js ***! \************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var global = __webpack_require__(/*! ../internals/global */ "./node_modules/core-js/internals/global.js"); var fails = __webpack_require__(/*! ../internals/fails */ "./node_modules/core-js/internals/fails.js"); var classof = __webpack_require__(/*! ../internals/classof-raw */ "./node_modules/core-js/internals/classof-raw.js"); var bind = __webpack_require__(/*! ../internals/function-bind-context */ "./node_modules/core-js/internals/function-bind-context.js"); var html = __webpack_require__(/*! ../internals/html */ "./node_modules/core-js/internals/html.js"); var createElement = __webpack_require__(/*! ../internals/document-create-element */ "./node_modules/core-js/internals/document-create-element.js"); var IS_IOS = __webpack_require__(/*! ../internals/engine-is-ios */ "./node_modules/core-js/internals/engine-is-ios.js"); var location = global.location; var set = global.setImmediate; var clear = global.clearImmediate; var process = global.process; var MessageChannel = global.MessageChannel; var Dispatch = global.Dispatch; var counter = 0; var queue = {}; var ONREADYSTATECHANGE = 'onreadystatechange'; var defer, channel, port; var run = function (id) { // eslint-disable-next-line no-prototype-builtins if (queue.hasOwnProperty(id)) { var fn = queue[id]; delete queue[id]; fn(); } }; var runner = function (id) { return function () { run(id); }; }; var listener = function (event) { run(event.data); }; var post = function (id) { // old engines have not location.origin global.postMessage(id + '', location.protocol + '//' + location.host); }; // Node.js 0.9+ & IE10+ has setImmediate, otherwise: if (!set || !clear) { set = function setImmediate(fn) { var args = []; var i = 1; while (arguments.length > i) args.push(arguments[i++]); queue[++counter] = function () { // eslint-disable-next-line no-new-func (typeof fn == 'function' ? fn : Function(fn)).apply(undefined, args); }; defer(counter); return counter; }; clear = function clearImmediate(id) { delete queue[id]; }; // Node.js 0.8- if (classof(process) == 'process') { defer = function (id) { process.nextTick(runner(id)); }; // Sphere (JS game engine) Dispatch API } else if (Dispatch && Dispatch.now) { defer = function (id) { Dispatch.now(runner(id)); }; // Browsers with MessageChannel, includes WebWorkers // except iOS - https://github.com/zloirock/core-js/issues/624 } else if (MessageChannel && !IS_IOS) { channel = new MessageChannel(); port = channel.port2; channel.port1.onmessage = listener; defer = bind(port.postMessage, port, 1); // Browsers with postMessage, skip WebWorkers // IE8 has postMessage, but it's sync & typeof its postMessage is 'object' } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts && !fails(post) && location.protocol !== 'file:') { defer = post; global.addEventListener('message', listener, false); // IE8- } else if (ONREADYSTATECHANGE in createElement('script')) { defer = function (id) { html.appendChild(createElement('script'))[ONREADYSTATECHANGE] = function () { html.removeChild(this); run(id); }; }; // Rest old browsers } else { defer = function (id) { setTimeout(runner(id), 0); }; } } module.exports = { set: set, clear: clear }; /***/ }), /***/ "./node_modules/core-js/internals/to-absolute-index.js": /*!*************************************************************!*\ !*** ./node_modules/core-js/internals/to-absolute-index.js ***! \*************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var toInteger = __webpack_require__(/*! ../internals/to-integer */ "./node_modules/core-js/internals/to-integer.js"); var max = Math.max; var min = Math.min; // Helper for a popular repeating case of the spec: // Let integer be ? ToInteger(index). // If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length). module.exports = function (index, length) { var integer = toInteger(index); return integer < 0 ? max(integer + length, 0) : min(integer, length); }; /***/ }), /***/ "./node_modules/core-js/internals/to-indexed-object.js": /*!*************************************************************!*\ !*** ./node_modules/core-js/internals/to-indexed-object.js ***! \*************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // toObject with fallback for non-array-like ES3 strings var IndexedObject = __webpack_require__(/*! ../internals/indexed-object */ "./node_modules/core-js/internals/indexed-object.js"); var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ "./node_modules/core-js/internals/require-object-coercible.js"); module.exports = function (it) { return IndexedObject(requireObjectCoercible(it)); }; /***/ }), /***/ "./node_modules/core-js/internals/to-integer.js": /*!******************************************************!*\ !*** ./node_modules/core-js/internals/to-integer.js ***! \******************************************************/ /*! no static exports found */ /***/ (function(module, exports) { var ceil = Math.ceil; var floor = Math.floor; // `ToInteger` abstract operation // https://tc39.github.io/ecma262/#sec-tointeger module.exports = function (argument) { return isNaN(argument = +argument) ? 0 : (argument > 0 ? floor : ceil)(argument); }; /***/ }), /***/ "./node_modules/core-js/internals/to-length.js": /*!*****************************************************!*\ !*** ./node_modules/core-js/internals/to-length.js ***! \*****************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var toInteger = __webpack_require__(/*! ../internals/to-integer */ "./node_modules/core-js/internals/to-integer.js"); var min = Math.min; // `ToLength` abstract operation // https://tc39.github.io/ecma262/#sec-tolength module.exports = function (argument) { return argument > 0 ? min(toInteger(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991 }; /***/ }), /***/ "./node_modules/core-js/internals/to-object.js": /*!*****************************************************!*\ !*** ./node_modules/core-js/internals/to-object.js ***! \*****************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ "./node_modules/core-js/internals/require-object-coercible.js"); // `ToObject` abstract operation // https://tc39.github.io/ecma262/#sec-toobject module.exports = function (argument) { return Object(requireObjectCoercible(argument)); }; /***/ }), /***/ "./node_modules/core-js/internals/to-primitive.js": /*!********************************************************!*\ !*** ./node_modules/core-js/internals/to-primitive.js ***! \********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var isObject = __webpack_require__(/*! ../internals/is-object */ "./node_modules/core-js/internals/is-object.js"); // `ToPrimitive` abstract operation // https://tc39.github.io/ecma262/#sec-toprimitive // instead of the ES6 spec version, we didn't implement @@toPrimitive case // and the second argument - flag - preferred type is a string module.exports = function (input, PREFERRED_STRING) { if (!isObject(input)) return input; var fn, val; if (PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val; if (typeof (fn = input.valueOf) == 'function' && !isObject(val = fn.call(input))) return val; if (!PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val; throw TypeError("Can't convert object to primitive value"); }; /***/ }), /***/ "./node_modules/core-js/internals/to-string-tag-support.js": /*!*****************************************************************!*\ !*** ./node_modules/core-js/internals/to-string-tag-support.js ***! \*****************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "./node_modules/core-js/internals/well-known-symbol.js"); var TO_STRING_TAG = wellKnownSymbol('toStringTag'); var test = {}; test[TO_STRING_TAG] = 'z'; module.exports = String(test) === '[object z]'; /***/ }), /***/ "./node_modules/core-js/internals/uid.js": /*!***********************************************!*\ !*** ./node_modules/core-js/internals/uid.js ***! \***********************************************/ /*! no static exports found */ /***/ (function(module, exports) { var id = 0; var postfix = Math.random(); module.exports = function (key) { return 'Symbol(' + String(key === undefined ? '' : key) + ')_' + (++id + postfix).toString(36); }; /***/ }), /***/ "./node_modules/core-js/internals/use-symbol-as-uid.js": /*!*************************************************************!*\ !*** ./node_modules/core-js/internals/use-symbol-as-uid.js ***! \*************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var NATIVE_SYMBOL = __webpack_require__(/*! ../internals/native-symbol */ "./node_modules/core-js/internals/native-symbol.js"); module.exports = NATIVE_SYMBOL // eslint-disable-next-line no-undef && !Symbol.sham // eslint-disable-next-line no-undef && typeof Symbol.iterator == 'symbol'; /***/ }), /***/ "./node_modules/core-js/internals/well-known-symbol-wrapped.js": /*!*********************************************************************!*\ !*** ./node_modules/core-js/internals/well-known-symbol-wrapped.js ***! \*********************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "./node_modules/core-js/internals/well-known-symbol.js"); exports.f = wellKnownSymbol; /***/ }), /***/ "./node_modules/core-js/internals/well-known-symbol.js": /*!*************************************************************!*\ !*** ./node_modules/core-js/internals/well-known-symbol.js ***! \*************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var global = __webpack_require__(/*! ../internals/global */ "./node_modules/core-js/internals/global.js"); var shared = __webpack_require__(/*! ../internals/shared */ "./node_modules/core-js/internals/shared.js"); var has = __webpack_require__(/*! ../internals/has */ "./node_modules/core-js/internals/has.js"); var uid = __webpack_require__(/*! ../internals/uid */ "./node_modules/core-js/internals/uid.js"); var NATIVE_SYMBOL = __webpack_require__(/*! ../internals/native-symbol */ "./node_modules/core-js/internals/native-symbol.js"); var USE_SYMBOL_AS_UID = __webpack_require__(/*! ../internals/use-symbol-as-uid */ "./node_modules/core-js/internals/use-symbol-as-uid.js"); var WellKnownSymbolsStore = shared('wks'); var Symbol = global.Symbol; var createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol : Symbol && Symbol.withoutSetter || uid; module.exports = function (name) { if (!has(WellKnownSymbolsStore, name)) { if (NATIVE_SYMBOL && has(Symbol, name)) WellKnownSymbolsStore[name] = Symbol[name];else WellKnownSymbolsStore[name] = createWellKnownSymbol('Symbol.' + name); } return WellKnownSymbolsStore[name]; }; /***/ }), /***/ "./node_modules/core-js/modules/es.array.filter.js": /*!*********************************************************!*\ !*** ./node_modules/core-js/modules/es.array.filter.js ***! \*********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js/internals/export.js"); var $filter = __webpack_require__(/*! ../internals/array-iteration */ "./node_modules/core-js/internals/array-iteration.js").filter; var arrayMethodHasSpeciesSupport = __webpack_require__(/*! ../internals/array-method-has-species-support */ "./node_modules/core-js/internals/array-method-has-species-support.js"); var arrayMethodUsesToLength = __webpack_require__(/*! ../internals/array-method-uses-to-length */ "./node_modules/core-js/internals/array-method-uses-to-length.js"); var HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('filter'); // Edge 14- issue var USES_TO_LENGTH = arrayMethodUsesToLength('filter'); // `Array.prototype.filter` method // https://tc39.github.io/ecma262/#sec-array.prototype.filter // with adding support of @@species $({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT || !USES_TO_LENGTH }, { filter: function filter(callbackfn /* , thisArg */ ) { return $filter(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); } }); /***/ }), /***/ "./node_modules/core-js/modules/es.array.for-each.js": /*!***********************************************************!*\ !*** ./node_modules/core-js/modules/es.array.for-each.js ***! \***********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js/internals/export.js"); var forEach = __webpack_require__(/*! ../internals/array-for-each */ "./node_modules/core-js/internals/array-for-each.js"); // `Array.prototype.forEach` method // https://tc39.github.io/ecma262/#sec-array.prototype.foreach $({ target: 'Array', proto: true, forced: [].forEach != forEach }, { forEach: forEach }); /***/ }), /***/ "./node_modules/core-js/modules/es.array.join.js": /*!*******************************************************!*\ !*** ./node_modules/core-js/modules/es.array.join.js ***! \*******************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js/internals/export.js"); var IndexedObject = __webpack_require__(/*! ../internals/indexed-object */ "./node_modules/core-js/internals/indexed-object.js"); var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ "./node_modules/core-js/internals/to-indexed-object.js"); var arrayMethodIsStrict = __webpack_require__(/*! ../internals/array-method-is-strict */ "./node_modules/core-js/internals/array-method-is-strict.js"); var nativeJoin = [].join; var ES3_STRINGS = IndexedObject != Object; var STRICT_METHOD = arrayMethodIsStrict('join', ','); // `Array.prototype.join` method // https://tc39.github.io/ecma262/#sec-array.prototype.join $({ target: 'Array', proto: true, forced: ES3_STRINGS || !STRICT_METHOD }, { join: function join(separator) { return nativeJoin.call(toIndexedObject(this), separator === undefined ? ',' : separator); } }); /***/ }), /***/ "./node_modules/core-js/modules/es.array.reverse.js": /*!**********************************************************!*\ !*** ./node_modules/core-js/modules/es.array.reverse.js ***! \**********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js/internals/export.js"); var isArray = __webpack_require__(/*! ../internals/is-array */ "./node_modules/core-js/internals/is-array.js"); var nativeReverse = [].reverse; var test = [1, 2]; // `Array.prototype.reverse` method // https://tc39.github.io/ecma262/#sec-array.prototype.reverse // fix for Safari 12.0 bug // https://bugs.webkit.org/show_bug.cgi?id=188794 $({ target: 'Array', proto: true, forced: String(test) === String(test.reverse()) }, { reverse: function reverse() { // eslint-disable-next-line no-self-assign if (isArray(this)) this.length = this.length; return nativeReverse.call(this); } }); /***/ }), /***/ "./node_modules/core-js/modules/es.array.slice.js": /*!********************************************************!*\ !*** ./node_modules/core-js/modules/es.array.slice.js ***! \********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js/internals/export.js"); var isObject = __webpack_require__(/*! ../internals/is-object */ "./node_modules/core-js/internals/is-object.js"); var isArray = __webpack_require__(/*! ../internals/is-array */ "./node_modules/core-js/internals/is-array.js"); var toAbsoluteIndex = __webpack_require__(/*! ../internals/to-absolute-index */ "./node_modules/core-js/internals/to-absolute-index.js"); var toLength = __webpack_require__(/*! ../internals/to-length */ "./node_modules/core-js/internals/to-length.js"); var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ "./node_modules/core-js/internals/to-indexed-object.js"); var createProperty = __webpack_require__(/*! ../internals/create-property */ "./node_modules/core-js/internals/create-property.js"); var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "./node_modules/core-js/internals/well-known-symbol.js"); var arrayMethodHasSpeciesSupport = __webpack_require__(/*! ../internals/array-method-has-species-support */ "./node_modules/core-js/internals/array-method-has-species-support.js"); var arrayMethodUsesToLength = __webpack_require__(/*! ../internals/array-method-uses-to-length */ "./node_modules/core-js/internals/array-method-uses-to-length.js"); var HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('slice'); var USES_TO_LENGTH = arrayMethodUsesToLength('slice', { ACCESSORS: true, 0: 0, 1: 2 }); var SPECIES = wellKnownSymbol('species'); var nativeSlice = [].slice; var max = Math.max; // `Array.prototype.slice` method // https://tc39.github.io/ecma262/#sec-array.prototype.slice // fallback for not array-like ES3 strings and DOM objects $({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT || !USES_TO_LENGTH }, { slice: function slice(start, end) { var O = toIndexedObject(this); var length = toLength(O.length); var k = toAbsoluteIndex(start, length); var fin = toAbsoluteIndex(end === undefined ? length : end, length); // inline `ArraySpeciesCreate` for usage native `Array#slice` where it's possible var Constructor, result, n; if (isArray(O)) { Constructor = O.constructor; // cross-realm fallback if (typeof Constructor == 'function' && (Constructor === Array || isArray(Constructor.prototype))) { Constructor = undefined; } else if (isObject(Constructor)) { Constructor = Constructor[SPECIES]; if (Constructor === null) Constructor = undefined; } if (Constructor === Array || Constructor === undefined) { return nativeSlice.call(O, k, fin); } } result = new (Constructor === undefined ? 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/core-js/modules/es.date.to-string.js": /*!***********************************************************!*\ !*** ./node_modules/core-js/modules/es.date.to-string.js ***! \***********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var redefine = __webpack_require__(/*! ../internals/redefine */ "./node_modules/core-js/internals/redefine.js"); var DatePrototype = Date.prototype; var INVALID_DATE = 'Invalid Date'; var TO_STRING = 'toString'; var nativeDateToString = DatePrototype[TO_STRING]; var getTime = DatePrototype.getTime; // `Date.prototype.toString` method // https://tc39.github.io/ecma262/#sec-date.prototype.tostring if (new Date(NaN) + '' != INVALID_DATE) { redefine(DatePrototype, TO_STRING, function toString() { var value = getTime.call(this); // eslint-disable-next-line no-self-compare return value === value ? nativeDateToString.call(this) : INVALID_DATE; }); } /***/ }), /***/ "./node_modules/core-js/modules/es.object.define-properties.js": /*!*********************************************************************!*\ !*** ./node_modules/core-js/modules/es.object.define-properties.js ***! \*********************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js/internals/export.js"); var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ "./node_modules/core-js/internals/descriptors.js"); var defineProperties = __webpack_require__(/*! ../internals/object-define-properties */ "./node_modules/core-js/internals/object-define-properties.js"); // `Object.defineProperties` method // https://tc39.github.io/ecma262/#sec-object.defineproperties $({ target: 'Object', stat: true, forced: !DESCRIPTORS, sham: !DESCRIPTORS }, { defineProperties: defineProperties }); /***/ }), /***/ "./node_modules/core-js/modules/es.object.define-property.js": /*!*******************************************************************!*\ !*** ./node_modules/core-js/modules/es.object.define-property.js ***! \*******************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js/internals/export.js"); var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ "./node_modules/core-js/internals/descriptors.js"); var objectDefinePropertyModile = __webpack_require__(/*! ../internals/object-define-property */ "./node_modules/core-js/internals/object-define-property.js"); // `Object.defineProperty` method // https://tc39.github.io/ecma262/#sec-object.defineproperty $({ target: 'Object', stat: true, forced: !DESCRIPTORS, sham: !DESCRIPTORS }, { defineProperty: objectDefinePropertyModile.f }); /***/ }), /***/ "./node_modules/core-js/modules/es.object.get-own-property-descriptor.js": /*!*******************************************************************************!*\ !*** ./node_modules/core-js/modules/es.object.get-own-property-descriptor.js ***! \*******************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js/internals/export.js"); var fails = __webpack_require__(/*! ../internals/fails */ "./node_modules/core-js/internals/fails.js"); var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ "./node_modules/core-js/internals/to-indexed-object.js"); var nativeGetOwnPropertyDescriptor = __webpack_require__(/*! ../internals/object-get-own-property-descriptor */ "./node_modules/core-js/internals/object-get-own-property-descriptor.js").f; var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ "./node_modules/core-js/internals/descriptors.js"); var FAILS_ON_PRIMITIVES = fails(function () { nativeGetOwnPropertyDescriptor(1); }); var FORCED = !DESCRIPTORS || FAILS_ON_PRIMITIVES; // `Object.getOwnPropertyDescriptor` method // https://tc39.github.io/ecma262/#sec-object.getownpropertydescriptor $({ target: 'Object', stat: true, forced: FORCED, sham: !DESCRIPTORS }, { getOwnPropertyDescriptor: function getOwnPropertyDescriptor(it, key) { return nativeGetOwnPropertyDescriptor(toIndexedObject(it), key); } }); /***/ }), /***/ "./node_modules/core-js/modules/es.object.get-own-property-descriptors.js": /*!********************************************************************************!*\ !*** ./node_modules/core-js/modules/es.object.get-own-property-descriptors.js ***! \********************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js/internals/export.js"); var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ "./node_modules/core-js/internals/descriptors.js"); var ownKeys = __webpack_require__(/*! ../internals/own-keys */ "./node_modules/core-js/internals/own-keys.js"); var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ "./node_modules/core-js/internals/to-indexed-object.js"); var getOwnPropertyDescriptorModule = __webpack_require__(/*! ../internals/object-get-own-property-descriptor */ "./node_modules/core-js/internals/object-get-own-property-descriptor.js"); var createProperty = __webpack_require__(/*! ../internals/create-property */ "./node_modules/core-js/internals/create-property.js"); // `Object.getOwnPropertyDescriptors` method // https://tc39.github.io/ecma262/#sec-object.getownpropertydescriptors $({ target: 'Object', stat: true, sham: !DESCRIPTORS }, { getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) { var O = toIndexedObject(object); var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f; var keys = ownKeys(O); var result = {}; var index = 0; var key, descriptor; while (keys.length > index) { descriptor = getOwnPropertyDescriptor(O, key = keys[index++]); if (descriptor !== undefined) createProperty(result, key, descriptor); } return result; } }); /***/ }), /***/ "./node_modules/core-js/modules/es.object.keys.js": /*!********************************************************!*\ !*** ./node_modules/core-js/modules/es.object.keys.js ***! \********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js/internals/export.js"); var toObject = __webpack_require__(/*! ../internals/to-object */ "./node_modules/core-js/internals/to-object.js"); var nativeKeys = __webpack_require__(/*! ../internals/object-keys */ "./node_modules/core-js/internals/object-keys.js"); var fails = __webpack_require__(/*! ../internals/fails */ "./node_modules/core-js/internals/fails.js"); var FAILS_ON_PRIMITIVES = fails(function () { nativeKeys(1); }); // `Object.keys` method // https://tc39.github.io/ecma262/#sec-object.keys $({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES }, { keys: function keys(it) { return nativeKeys(toObject(it)); } }); /***/ }), /***/ "./node_modules/core-js/modules/es.object.to-string.js": /*!*************************************************************!*\ !*** ./node_modules/core-js/modules/es.object.to-string.js ***! \*************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var TO_STRING_TAG_SUPPORT = __webpack_require__(/*! ../internals/to-string-tag-support */ "./node_modules/core-js/internals/to-string-tag-support.js"); var redefine = __webpack_require__(/*! ../internals/redefine */ "./node_modules/core-js/internals/redefine.js"); var toString = __webpack_require__(/*! ../internals/object-to-string */ "./node_modules/core-js/internals/object-to-string.js"); // `Object.prototype.toString` method // https://tc39.github.io/ecma262/#sec-object.prototype.tostring if (!TO_STRING_TAG_SUPPORT) { redefine(Object.prototype, 'toString', toString, { unsafe: true }); } /***/ }), /***/ "./node_modules/core-js/modules/es.promise.js": /*!****************************************************!*\ !*** ./node_modules/core-js/modules/es.promise.js ***! \****************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js/internals/export.js"); var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ "./node_modules/core-js/internals/is-pure.js"); var global = __webpack_require__(/*! ../internals/global */ "./node_modules/core-js/internals/global.js"); var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ "./node_modules/core-js/internals/get-built-in.js"); var NativePromise = __webpack_require__(/*! ../internals/native-promise-constructor */ "./node_modules/core-js/internals/native-promise-constructor.js"); var redefine = __webpack_require__(/*! ../internals/redefine */ "./node_modules/core-js/internals/redefine.js"); var redefineAll = __webpack_require__(/*! ../internals/redefine-all */ "./node_modules/core-js/internals/redefine-all.js"); var setToStringTag = __webpack_require__(/*! ../internals/set-to-string-tag */ "./node_modules/core-js/internals/set-to-string-tag.js"); var setSpecies = __webpack_require__(/*! ../internals/set-species */ "./node_modules/core-js/internals/set-species.js"); var isObject = __webpack_require__(/*! ../internals/is-object */ "./node_modules/core-js/internals/is-object.js"); var aFunction = __webpack_require__(/*! ../internals/a-function */ "./node_modules/core-js/internals/a-function.js"); var anInstance = __webpack_require__(/*! ../internals/an-instance */ "./node_modules/core-js/internals/an-instance.js"); var classof = __webpack_require__(/*! ../internals/classof-raw */ "./node_modules/core-js/internals/classof-raw.js"); var inspectSource = __webpack_require__(/*! ../internals/inspect-source */ "./node_modules/core-js/internals/inspect-source.js"); var iterate = __webpack_require__(/*! ../internals/iterate */ "./node_modules/core-js/internals/iterate.js"); var checkCorrectnessOfIteration = __webpack_require__(/*! ../internals/check-correctness-of-iteration */ "./node_modules/core-js/internals/check-correctness-of-iteration.js"); var speciesConstructor = __webpack_require__(/*! ../internals/species-constructor */ "./node_modules/core-js/internals/species-constructor.js"); var task = __webpack_require__(/*! ../internals/task */ "./node_modules/core-js/internals/task.js").set; var microtask = __webpack_require__(/*! ../internals/microtask */ "./node_modules/core-js/internals/microtask.js"); var promiseResolve = __webpack_require__(/*! ../internals/promise-resolve */ "./node_modules/core-js/internals/promise-resolve.js"); var hostReportErrors = __webpack_require__(/*! ../internals/host-report-errors */ "./node_modules/core-js/internals/host-report-errors.js"); var newPromiseCapabilityModule = __webpack_require__(/*! ../internals/new-promise-capability */ "./node_modules/core-js/internals/new-promise-capability.js"); var perform = __webpack_require__(/*! ../internals/perform */ "./node_modules/core-js/internals/perform.js"); var InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ "./node_modules/core-js/internals/internal-state.js"); var isForced = __webpack_require__(/*! ../internals/is-forced */ "./node_modules/core-js/internals/is-forced.js"); var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "./node_modules/core-js/internals/well-known-symbol.js"); var V8_VERSION = __webpack_require__(/*! ../internals/engine-v8-version */ "./node_modules/core-js/internals/engine-v8-version.js"); var SPECIES = wellKnownSymbol('species'); var PROMISE = 'Promise'; var getInternalState = InternalStateModule.get; var setInternalState = InternalStateModule.set; var getInternalPromiseState = InternalStateModule.getterFor(PROMISE); var PromiseConstructor = NativePromise; var TypeError = global.TypeError; var document = global.document; var process = global.process; var $fetch = getBuiltIn('fetch'); var newPromiseCapability = newPromiseCapabilityModule.f; var newGenericPromiseCapability = newPromiseCapability; var IS_NODE = classof(process) == 'process'; var DISPATCH_EVENT = !!(document && document.createEvent && global.dispatchEvent); var UNHANDLED_REJECTION = 'unhandledrejection'; var REJECTION_HANDLED = 'rejectionhandled'; var PENDING = 0; var FULFILLED = 1; var REJECTED = 2; var HANDLED = 1; var UNHANDLED = 2; var Internal, OwnPromiseCapability, PromiseWrapper, nativeThen; var FORCED = isForced(PROMISE, function () { var GLOBAL_CORE_JS_PROMISE = inspectSource(PromiseConstructor) !== String(PromiseConstructor); if (!GLOBAL_CORE_JS_PROMISE) { // V8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables // https://bugs.chromium.org/p/chromium/issues/detail?id=830565 // We can't detect it synchronously, so just check versions if (V8_VERSION === 66) return true; // Unhandled rejections tracking support, NodeJS Promise without it fails @@species test if (!IS_NODE && typeof PromiseRejectionEvent != 'function') return true; } // We need Promise#finally in the pure version for preventing prototype pollution if (IS_PURE && !PromiseConstructor.prototype['finally']) return true; // We can't use @@species feature detection in V8 since it causes // deoptimization and performance degradation // https://github.com/zloirock/core-js/issues/679 if (V8_VERSION >= 51 && /native code/.test(PromiseConstructor)) return false; // Detect correctness of subclassing with @@species support var promise = PromiseConstructor.resolve(1); var FakePromise = function (exec) { exec(function () { /* empty */ }, function () { /* empty */ }); }; var constructor = promise.constructor = {}; constructor[SPECIES] = FakePromise; return !(promise.then(function () { /* empty */ }) instanceof FakePromise); }); var INCORRECT_ITERATION = FORCED || !checkCorrectnessOfIteration(function (iterable) { PromiseConstructor.all(iterable)['catch'](function () { /* empty */ }); }); // helpers var isThenable = function (it) { var then; return isObject(it) && typeof (then = it.then) == 'function' ? then : false; }; var notify = function (promise, state, isReject) { if (state.notified) return; state.notified = true; var chain = state.reactions; microtask(function () { var value = state.value; var ok = state.state == FULFILLED; var index = 0; // variable length - can't use forEach while (chain.length > index) { var reaction = chain[index++]; var handler = ok ? reaction.ok : reaction.fail; var resolve = reaction.resolve; var reject = reaction.reject; var domain = reaction.domain; var result, then, exited; try { if (handler) { if (!ok) { if (state.rejection === UNHANDLED) onHandleUnhandled(promise, state); state.rejection = HANDLED; } if (handler === true) result = value;else { if (domain) domain.enter(); result = handler(value); // can throw if (domain) { domain.exit(); exited = true; } } if (result === reaction.promise) { reject(TypeError('Promise-chain cycle')); } else if (then = isThenable(result)) { then.call(result, resolve, reject); } else resolve(result); } else reject(value); } catch (error) { if (domain && !exited) domain.exit(); reject(error); } } state.reactions = []; state.notified = false; if (isReject && !state.rejection) onUnhandled(promise, state); }); }; var dispatchEvent = function (name, promise, reason) { var event, handler; if (DISPATCH_EVENT) { event = document.createEvent('Event'); event.promise = promise; event.reason = reason; event.initEvent(name, false, true); global.dispatchEvent(event); } else event = { promise: promise, reason: reason }; if (handler = global['on' + name]) handler(event);else if (name === UNHANDLED_REJECTION) hostReportErrors('Unhandled promise rejection', reason); }; var onUnhandled = function (promise, state) { task.call(global, function () { var value = state.value; var IS_UNHANDLED = isUnhandled(state); var result; if (IS_UNHANDLED) { result = perform(function () { if (IS_NODE) { process.emit('unhandledRejection', value, promise); } else dispatchEvent(UNHANDLED_REJECTION, promise, value); }); // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should state.rejection = IS_NODE || isUnhandled(state) ? UNHANDLED : HANDLED; if (result.error) throw result.value; } }); }; var isUnhandled = function (state) { return state.rejection !== HANDLED && !state.parent; }; var onHandleUnhandled = function (promise, state) { task.call(global, function () { if (IS_NODE) { process.emit('rejectionHandled', promise); } else dispatchEvent(REJECTION_HANDLED, promise, state.value); }); }; var bind = function (fn, promise, state, unwrap) { return function (value) { fn(promise, state, value, unwrap); }; }; var internalReject = function (promise, state, value, unwrap) { if (state.done) return; state.done = true; if (unwrap) state = unwrap; state.value = value; state.state = REJECTED; notify(promise, state, true); }; var internalResolve = function (promise, state, value, unwrap) { if (state.done) return; state.done = true; if (unwrap) state = unwrap; try { if (promise === value) throw TypeError("Promise can't be resolved itself"); var then = isThenable(value); if (then) { microtask(function () { var wrapper = { done: false }; try { then.call(value, bind(internalResolve, promise, wrapper, state), bind(internalReject, promise, wrapper, state)); } catch (error) { internalReject(promise, wrapper, error, state); } }); } else { state.value = value; state.state = FULFILLED; notify(promise, state, false); } } catch (error) { internalReject(promise, { done: false }, error, state); } }; // constructor polyfill if (FORCED) { // 25.4.3.1 Promise(executor) PromiseConstructor = function Promise(executor) { anInstance(this, PromiseConstructor, PROMISE); aFunction(executor); Internal.call(this); var state = getInternalState(this); try { executor(bind(internalResolve, this, state), bind(internalReject, this, state)); } catch (error) { internalReject(this, state, error); } }; // eslint-disable-next-line no-unused-vars Internal = function Promise(executor) { setInternalState(this, { type: PROMISE, done: false, notified: false, parent: false, reactions: [], rejection: false, state: PENDING, value: undefined }); }; Internal.prototype = redefineAll(PromiseConstructor.prototype, { // `Promise.prototype.then` method // https://tc39.github.io/ecma262/#sec-promise.prototype.then then: function then(onFulfilled, onRejected) { var state = getInternalPromiseState(this); var reaction = newPromiseCapability(speciesConstructor(this, PromiseConstructor)); reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true; reaction.fail = typeof onRejected == 'function' && onRejected; reaction.domain = IS_NODE ? process.domain : undefined; state.parent = true; state.reactions.push(reaction); if (state.state != PENDING) notify(this, state, false); return reaction.promise; }, // `Promise.prototype.catch` method // https://tc39.github.io/ecma262/#sec-promise.prototype.catch 'catch': function (onRejected) { return this.then(undefined, onRejected); } }); OwnPromiseCapability = function () { var promise = new Internal(); var state = getInternalState(promise); this.promise = promise; this.resolve = bind(internalResolve, promise, state); this.reject = bind(internalReject, promise, state); }; newPromiseCapabilityModule.f = newPromiseCapability = function (C) { return C === PromiseConstructor || C === PromiseWrapper ? new OwnPromiseCapability(C) : newGenericPromiseCapability(C); }; if (!IS_PURE && typeof NativePromise == 'function') { nativeThen = NativePromise.prototype.then; // wrap native Promise#then for native async functions redefine(NativePromise.prototype, 'then', function then(onFulfilled, onRejected) { var that = this; return new PromiseConstructor(function (resolve, reject) { nativeThen.call(that, resolve, reject); }).then(onFulfilled, onRejected); // https://github.com/zloirock/core-js/issues/640 }, { unsafe: true }); // wrap fetch result if (typeof $fetch == 'function') $({ global: true, enumerable: true, forced: true }, { // eslint-disable-next-line no-unused-vars fetch: function fetch(input /* , init */ ) { return promiseResolve(PromiseConstructor, $fetch.apply(global, arguments)); } }); } } $({ global: true, wrap: true, forced: FORCED }, { Promise: PromiseConstructor }); setToStringTag(PromiseConstructor, PROMISE, false, true); setSpecies(PROMISE); PromiseWrapper = getBuiltIn(PROMISE); // statics $({ target: PROMISE, stat: true, forced: FORCED }, { // `Promise.reject` method // https://tc39.github.io/ecma262/#sec-promise.reject reject: function reject(r) { var capability = newPromiseCapability(this); capability.reject.call(undefined, r); return capability.promise; } }); $({ target: PROMISE, stat: true, forced: IS_PURE || FORCED }, { // `Promise.resolve` method // https://tc39.github.io/ecma262/#sec-promise.resolve resolve: function resolve(x) { return promiseResolve(IS_PURE && this === PromiseWrapper ? PromiseConstructor : this, x); } }); $({ target: PROMISE, stat: true, forced: INCORRECT_ITERATION }, { // `Promise.all` method // https://tc39.github.io/ecma262/#sec-promise.all all: function all(iterable) { var C = this; var capability = newPromiseCapability(C); var resolve = capability.resolve; var reject = capability.reject; var result = perform(function () { var $promiseResolve = aFunction(C.resolve); var values = []; var counter = 0; var remaining = 1; iterate(iterable, function (promise) { var index = counter++; var alreadyCalled = false; values.push(undefined); remaining++; $promiseResolve.call(C, promise).then(function (value) { if (alreadyCalled) return; alreadyCalled = true; values[index] = value; --remaining || resolve(values); }, reject); }); --remaining || resolve(values); }); if (result.error) reject(result.value); return capability.promise; }, // `Promise.race` method // https://tc39.github.io/ecma262/#sec-promise.race race: function race(iterable) { var C = this; var capability = newPromiseCapability(C); var reject = capability.reject; var result = perform(function () { var $promiseResolve = aFunction(C.resolve); iterate(iterable, function (promise) { $promiseResolve.call(C, promise).then(capability.resolve, reject); }); }); if (result.error) reject(result.value); return capability.promise; } }); /***/ }), /***/ "./node_modules/core-js/modules/es.regexp.exec.js": /*!********************************************************!*\ !*** ./node_modules/core-js/modules/es.regexp.exec.js ***! \********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js/internals/export.js"); var exec = __webpack_require__(/*! ../internals/regexp-exec */ "./node_modules/core-js/internals/regexp-exec.js"); $({ target: 'RegExp', proto: true, forced: /./.exec !== exec }, { exec: exec }); /***/ }), /***/ "./node_modules/core-js/modules/es.string.split.js": /*!*********************************************************!*\ !*** ./node_modules/core-js/modules/es.string.split.js ***! \*********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var fixRegExpWellKnownSymbolLogic = __webpack_require__(/*! ../internals/fix-regexp-well-known-symbol-logic */ "./node_modules/core-js/internals/fix-regexp-well-known-symbol-logic.js"); var isRegExp = __webpack_require__(/*! ../internals/is-regexp */ "./node_modules/core-js/internals/is-regexp.js"); var anObject = __webpack_require__(/*! ../internals/an-object */ "./node_modules/core-js/internals/an-object.js"); var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ "./node_modules/core-js/internals/require-object-coercible.js"); var speciesConstructor = __webpack_require__(/*! ../internals/species-constructor */ "./node_modules/core-js/internals/species-constructor.js"); var advanceStringIndex = __webpack_require__(/*! ../internals/advance-string-index */ "./node_modules/core-js/internals/advance-string-index.js"); var toLength = __webpack_require__(/*! ../internals/to-length */ "./node_modules/core-js/internals/to-length.js"); var callRegExpExec = __webpack_require__(/*! ../internals/regexp-exec-abstract */ "./node_modules/core-js/internals/regexp-exec-abstract.js"); var regexpExec = __webpack_require__(/*! ../internals/regexp-exec */ "./node_modules/core-js/internals/regexp-exec.js"); var fails = __webpack_require__(/*! ../internals/fails */ "./node_modules/core-js/internals/fails.js"); var arrayPush = [].push; var min = Math.min; var MAX_UINT32 = 0xFFFFFFFF; // babel-minify transpiles RegExp('x', 'y') -> /x/y and it causes SyntaxError var SUPPORTS_Y = !fails(function () { return !RegExp(MAX_UINT32, 'y'); }); // @@split logic fixRegExpWellKnownSymbolLogic('split', 2, function (SPLIT, nativeSplit, maybeCallNative) { var internalSplit; if ('abbc'.split(/(b)*/)[1] == 'c' || 'test'.split(/(?:)/, -1).length != 4 || 'ab'.split(/(?:ab)*/).length != 2 || '.'.split(/(.?)(.?)/).length != 4 || '.'.split(/()()/).length > 1 || ''.split(/.?/).length) { // based on es5-shim implementation, need to rework it internalSplit = function (separator, limit) { var string = String(requireObjectCoercible(this)); var lim = limit === undefined ? MAX_UINT32 : limit >>> 0; if (lim === 0) return []; if (separator === undefined) return [string]; // If `separator` is not a regex, use native split if (!isRegExp(separator)) { return nativeSplit.call(string, separator, lim); } var output = []; var flags = (separator.ignoreCase ? 'i' : '') + (separator.multiline ? 'm' : '') + (separator.unicode ? 'u' : '') + (separator.sticky ? 'y' : ''); var lastLastIndex = 0; // Make `global` and avoid `lastIndex` issues by working with a copy var separatorCopy = new RegExp(separator.source, flags + 'g'); var match, lastIndex, lastLength; while (match = regexpExec.call(separatorCopy, string)) { lastIndex = separatorCopy.lastIndex; if (lastIndex > lastLastIndex) { output.push(string.slice(lastLastIndex, match.index)); if (match.length > 1 && match.index < string.length) arrayPush.apply(output, match.slice(1)); lastLength = match[0].length; lastLastIndex = lastIndex; if (output.length >= lim) break; } if (separatorCopy.lastIndex === match.index) separatorCopy.lastIndex++; // Avoid an infinite loop } if (lastLastIndex === string.length) { if (lastLength || !separatorCopy.test('')) output.push(''); } else output.push(string.slice(lastLastIndex)); return output.length > lim ? output.slice(0, lim) : output; }; // Chakra, V8 } else if ('0'.split(undefined, 0).length) { internalSplit = function (separator, limit) { return separator === undefined && limit === 0 ? [] : nativeSplit.call(this, separator, limit); }; } else internalSplit = nativeSplit; return [// `String.prototype.split` method // https://tc39.github.io/ecma262/#sec-string.prototype.split function split(separator, limit) { var O = requireObjectCoercible(this); var splitter = separator == undefined ? undefined : separator[SPLIT]; return splitter !== undefined ? splitter.call(separator, O, limit) : internalSplit.call(String(O), separator, limit); }, // `RegExp.prototype[@@split]` method // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@split // // NOTE: This cannot be properly polyfilled in engines that don't support // the 'y' flag. function (regexp, limit) { var res = maybeCallNative(internalSplit, regexp, this, limit, internalSplit !== nativeSplit); if (res.done) return res.value; var rx = anObject(regexp); var S = String(this); var C = speciesConstructor(rx, RegExp); var unicodeMatching = rx.unicode; var flags = (rx.ignoreCase ? 'i' : '') + (rx.multiline ? 'm' : '') + (rx.unicode ? 'u' : '') + (SUPPORTS_Y ? 'y' : 'g'); // ^(? + rx + ) is needed, in combination with some S slicing, to // simulate the 'y' flag. var splitter = new C(SUPPORTS_Y ? rx : '^(?:' + rx.source + ')', flags); var lim = limit === undefined ? MAX_UINT32 : limit >>> 0; if (lim === 0) return []; if (S.length === 0) return callRegExpExec(splitter, S) === null ? [S] : []; var p = 0; var q = 0; var A = []; while (q < S.length) { splitter.lastIndex = SUPPORTS_Y ? q : 0; var z = callRegExpExec(splitter, SUPPORTS_Y ? S : S.slice(q)); var e; if (z === null || (e = min(toLength(splitter.lastIndex + (SUPPORTS_Y ? 0 : q)), S.length)) === p) { q = advanceStringIndex(S, q, unicodeMatching); } else { A.push(S.slice(p, q)); if (A.length === lim) return A; for (var i = 1; i <= z.length - 1; i++) { A.push(z[i]); if (A.length === lim) return A; } q = p = e; } } A.push(S.slice(p)); return A; }]; }, !SUPPORTS_Y); /***/ }), /***/ "./node_modules/core-js/modules/es.symbol.js": /*!***************************************************!*\ !*** ./node_modules/core-js/modules/es.symbol.js ***! \***************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js/internals/export.js"); var global = __webpack_require__(/*! ../internals/global */ "./node_modules/core-js/internals/global.js"); var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ "./node_modules/core-js/internals/get-built-in.js"); var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ "./node_modules/core-js/internals/is-pure.js"); var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ "./node_modules/core-js/internals/descriptors.js"); var NATIVE_SYMBOL = __webpack_require__(/*! ../internals/native-symbol */ "./node_modules/core-js/internals/native-symbol.js"); var USE_SYMBOL_AS_UID = __webpack_require__(/*! ../internals/use-symbol-as-uid */ "./node_modules/core-js/internals/use-symbol-as-uid.js"); var fails = __webpack_require__(/*! ../internals/fails */ "./node_modules/core-js/internals/fails.js"); var has = __webpack_require__(/*! ../internals/has */ "./node_modules/core-js/internals/has.js"); var isArray = __webpack_require__(/*! ../internals/is-array */ "./node_modules/core-js/internals/is-array.js"); var isObject = __webpack_require__(/*! ../internals/is-object */ "./node_modules/core-js/internals/is-object.js"); var anObject = __webpack_require__(/*! ../internals/an-object */ "./node_modules/core-js/internals/an-object.js"); var toObject = __webpack_require__(/*! ../internals/to-object */ "./node_modules/core-js/internals/to-object.js"); var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ "./node_modules/core-js/internals/to-indexed-object.js"); var toPrimitive = __webpack_require__(/*! ../internals/to-primitive */ "./node_modules/core-js/internals/to-primitive.js"); var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ "./node_modules/core-js/internals/create-property-descriptor.js"); var nativeObjectCreate = __webpack_require__(/*! ../internals/object-create */ "./node_modules/core-js/internals/object-create.js"); var objectKeys = __webpack_require__(/*! ../internals/object-keys */ "./node_modules/core-js/internals/object-keys.js"); var getOwnPropertyNamesModule = __webpack_require__(/*! ../internals/object-get-own-property-names */ "./node_modules/core-js/internals/object-get-own-property-names.js"); var getOwnPropertyNamesExternal = __webpack_require__(/*! ../internals/object-get-own-property-names-external */ "./node_modules/core-js/internals/object-get-own-property-names-external.js"); var getOwnPropertySymbolsModule = __webpack_require__(/*! ../internals/object-get-own-property-symbols */ "./node_modules/core-js/internals/object-get-own-property-symbols.js"); var getOwnPropertyDescriptorModule = __webpack_require__(/*! ../internals/object-get-own-property-descriptor */ "./node_modules/core-js/internals/object-get-own-property-descriptor.js"); var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ "./node_modules/core-js/internals/object-define-property.js"); var propertyIsEnumerableModule = __webpack_require__(/*! ../internals/object-property-is-enumerable */ "./node_modules/core-js/internals/object-property-is-enumerable.js"); var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ "./node_modules/core-js/internals/create-non-enumerable-property.js"); var redefine = __webpack_require__(/*! ../internals/redefine */ "./node_modules/core-js/internals/redefine.js"); var shared = __webpack_require__(/*! ../internals/shared */ "./node_modules/core-js/internals/shared.js"); var sharedKey = __webpack_require__(/*! ../internals/shared-key */ "./node_modules/core-js/internals/shared-key.js"); var hiddenKeys = __webpack_require__(/*! ../internals/hidden-keys */ "./node_modules/core-js/internals/hidden-keys.js"); var uid = __webpack_require__(/*! ../internals/uid */ "./node_modules/core-js/internals/uid.js"); var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "./node_modules/core-js/internals/well-known-symbol.js"); var wrappedWellKnownSymbolModule = __webpack_require__(/*! ../internals/well-known-symbol-wrapped */ "./node_modules/core-js/internals/well-known-symbol-wrapped.js"); var defineWellKnownSymbol = __webpack_require__(/*! ../internals/define-well-known-symbol */ "./node_modules/core-js/internals/define-well-known-symbol.js"); var setToStringTag = __webpack_require__(/*! ../internals/set-to-string-tag */ "./node_modules/core-js/internals/set-to-string-tag.js"); var InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ "./node_modules/core-js/internals/internal-state.js"); var $forEach = __webpack_require__(/*! ../internals/array-iteration */ "./node_modules/core-js/internals/array-iteration.js").forEach; var HIDDEN = sharedKey('hidden'); var SYMBOL = 'Symbol'; var PROTOTYPE = 'prototype'; var TO_PRIMITIVE = wellKnownSymbol('toPrimitive'); var setInternalState = InternalStateModule.set; var getInternalState = InternalStateModule.getterFor(SYMBOL); var ObjectPrototype = Object[PROTOTYPE]; var $Symbol = global.Symbol; var $stringify = getBuiltIn('JSON', 'stringify'); var nativeGetOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f; var nativeDefineProperty = definePropertyModule.f; var nativeGetOwnPropertyNames = getOwnPropertyNamesExternal.f; var nativePropertyIsEnumerable = propertyIsEnumerableModule.f; var AllSymbols = shared('symbols'); var ObjectPrototypeSymbols = shared('op-symbols'); var StringToSymbolRegistry = shared('string-to-symbol-registry'); var SymbolToStringRegistry = shared('symbol-to-string-registry'); var WellKnownSymbolsStore = shared('wks'); var QObject = global.QObject; // Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173 var USE_SETTER = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild; // fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687 var setSymbolDescriptor = DESCRIPTORS && fails(function () { return nativeObjectCreate(nativeDefineProperty({}, 'a', { get: function () { return nativeDefineProperty(this, 'a', { value: 7 }).a; } })).a != 7; }) ? 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); } } : nativeDefineProperty; var wrap = function (tag, description) { var symbol = AllSymbols[tag] = nativeObjectCreate($Symbol[PROTOTYPE]); setInternalState(symbol, { type: SYMBOL, tag: tag, description: description }); if (!DESCRIPTORS) symbol.description = description; return symbol; }; var isSymbol = USE_SYMBOL_AS_UID ? function (it) { return typeof it == 'symbol'; } : function (it) { return Object(it) instanceof $Symbol; }; var $defineProperty = function defineProperty(O, P, Attributes) { if (O === ObjectPrototype) $defineProperty(ObjectPrototypeSymbols, P, Attributes); anObject(O); var key = toPrimitive(P, true); anObject(Attributes); if (has(AllSymbols, key)) { if (!Attributes.enumerable) { if (!has(O, HIDDEN)) nativeDefineProperty(O, HIDDEN, createPropertyDescriptor(1, {})); O[HIDDEN][key] = true; } else { if (has(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 keys = objectKeys(properties).concat($getOwnPropertySymbols(properties)); $forEach(keys, function (key) { if (!DESCRIPTORS || $propertyIsEnumerable.call(properties, key)) $defineProperty(O, key, properties[key]); }); return O; }; var $create = function create(O, Properties) { return Properties === undefined ? nativeObjectCreate(O) : $defineProperties(nativeObjectCreate(O), Properties); }; var $propertyIsEnumerable = function propertyIsEnumerable(V) { var P = toPrimitive(V, true); var enumerable = nativePropertyIsEnumerable.call(this, P); if (this === ObjectPrototype && has(AllSymbols, P) && !has(ObjectPrototypeSymbols, P)) return false; return enumerable || !has(this, P) || !has(AllSymbols, P) || has(this, HIDDEN) && this[HIDDEN][P] ? enumerable : true; }; var $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(O, P) { var it = toIndexedObject(O); var key = toPrimitive(P, true); if (it === ObjectPrototype && has(AllSymbols, key) && !has(ObjectPrototypeSymbols, key)) return; var descriptor = nativeGetOwnPropertyDescriptor(it, key); if (descriptor && has(AllSymbols, key) && !(has(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 (!has(AllSymbols, key) && !has(hiddenKeys, key)) result.push(key); }); return result; }; var $getOwnPropertySymbols = function getOwnPropertySymbols(O) { var IS_OBJECT_PROTOTYPE = O === ObjectPrototype; var names = nativeGetOwnPropertyNames(IS_OBJECT_PROTOTYPE ? ObjectPrototypeSymbols : toIndexedObject(O)); var result = []; $forEach(names, function (key) { if (has(AllSymbols, key) && (!IS_OBJECT_PROTOTYPE || has(ObjectPrototype, key))) { result.push(AllSymbols[key]); } }); return result; }; // `Symbol` constructor // https://tc39.github.io/ecma262/#sec-symbol-constructor if (!NATIVE_SYMBOL) { $Symbol = function Symbol() { if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor'); var description = !arguments.length || arguments[0] === undefined ? undefined : String(arguments[0]); var tag = uid(description); var setter = function (value) { if (this === ObjectPrototype) setter.call(ObjectPrototypeSymbols, value); if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false; setSymbolDescriptor(this, tag, createPropertyDescriptor(1, value)); }; if (DESCRIPTORS && USE_SETTER) setSymbolDescriptor(ObjectPrototype, tag, { configurable: true, set: setter }); return wrap(tag, description); }; redefine($Symbol[PROTOTYPE], 'toString', function toString() { return getInternalState(this).tag; }); redefine($Symbol, 'withoutSetter', function (description) { return wrap(uid(description), description); }); propertyIsEnumerableModule.f = $propertyIsEnumerable; definePropertyModule.f = $defineProperty; getOwnPropertyDescriptorModule.f = $getOwnPropertyDescriptor; getOwnPropertyNamesModule.f = getOwnPropertyNamesExternal.f = $getOwnPropertyNames; getOwnPropertySymbolsModule.f = $getOwnPropertySymbols; wrappedWellKnownSymbolModule.f = function (name) { return wrap(wellKnownSymbol(name), name); }; if (DESCRIPTORS) { // https://github.com/tc39/proposal-Symbol-description nativeDefineProperty($Symbol[PROTOTYPE], 'description', { configurable: true, get: function description() { return getInternalState(this).description; } }); if (!IS_PURE) { redefine(ObjectPrototype, 'propertyIsEnumerable', $propertyIsEnumerable, { unsafe: true }); } } } $({ global: 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 }, { // `Symbol.for` method // https://tc39.github.io/ecma262/#sec-symbol.for 'for': function (key) { var string = String(key); if (has(StringToSymbolRegistry, string)) return StringToSymbolRegistry[string]; var symbol = $Symbol(string); StringToSymbolRegistry[string] = symbol; SymbolToStringRegistry[symbol] = string; return symbol; }, // `Symbol.keyFor` method // https://tc39.github.io/ecma262/#sec-symbol.keyfor keyFor: function keyFor(sym) { if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol'); if (has(SymbolToStringRegistry, sym)) return SymbolToStringRegistry[sym]; }, useSetter: function () { USE_SETTER = true; }, useSimple: function () { USE_SETTER = false; } }); $({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL, sham: !DESCRIPTORS }, { // `Object.create` method // https://tc39.github.io/ecma262/#sec-object.create create: $create, // `Object.defineProperty` method // https://tc39.github.io/ecma262/#sec-object.defineproperty defineProperty: $defineProperty, // `Object.defineProperties` method // https://tc39.github.io/ecma262/#sec-object.defineproperties defineProperties: $defineProperties, // `Object.getOwnPropertyDescriptor` method // https://tc39.github.io/ecma262/#sec-object.getownpropertydescriptors getOwnPropertyDescriptor: $getOwnPropertyDescriptor }); $({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL }, { // `Object.getOwnPropertyNames` method // https://tc39.github.io/ecma262/#sec-object.getownpropertynames getOwnPropertyNames: $getOwnPropertyNames, // `Object.getOwnPropertySymbols` method // https://tc39.github.io/ecma262/#sec-object.getownpropertysymbols getOwnPropertySymbols: $getOwnPropertySymbols }); // Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives // https://bugs.chromium.org/p/v8/issues/detail?id=3443 $({ target: 'Object', stat: true, forced: fails(function () { getOwnPropertySymbolsModule.f(1); }) }, { getOwnPropertySymbols: function getOwnPropertySymbols(it) { return getOwnPropertySymbolsModule.f(toObject(it)); } }); // `JSON.stringify` method behavior with symbols // https://tc39.github.io/ecma262/#sec-json.stringify if ($stringify) { var FORCED_JSON_STRINGIFY = !NATIVE_SYMBOL || fails(function () { var symbol = $Symbol(); // MS Edge converts symbol values to JSON as {} return $stringify([symbol]) != '[null]' // WebKit converts symbol values to JSON as null || $stringify({ a: symbol }) != '{}' // V8 throws on boxed symbols || $stringify(Object(symbol)) != '{}'; }); $({ target: 'JSON', stat: true, forced: FORCED_JSON_STRINGIFY }, { // eslint-disable-next-line no-unused-vars stringify: function stringify(it, replacer, space) { var args = [it]; var index = 1; var $replacer; while (arguments.length > index) args.push(arguments[index++]); $replacer = replacer; if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined if (!isArray(replacer)) replacer = function (key, value) { if (typeof $replacer == 'function') value = $replacer.call(this, key, value); if (!isSymbol(value)) return value; }; args[1] = replacer; return $stringify.apply(null, args); } }); } // `Symbol.prototype[@@toPrimitive]` method // https://tc39.github.io/ecma262/#sec-symbol.prototype-@@toprimitive if (!$Symbol[PROTOTYPE][TO_PRIMITIVE]) { createNonEnumerableProperty($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf); } // `Symbol.prototype[@@toStringTag]` property // https://tc39.github.io/ecma262/#sec-symbol.prototype-@@tostringtag setToStringTag($Symbol, SYMBOL); hiddenKeys[HIDDEN] = true; /***/ }), /***/ "./node_modules/core-js/modules/web.dom-collections.for-each.js": /*!**********************************************************************!*\ !*** ./node_modules/core-js/modules/web.dom-collections.for-each.js ***! \**********************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var global = __webpack_require__(/*! ../internals/global */ "./node_modules/core-js/internals/global.js"); var DOMIterables = __webpack_require__(/*! ../internals/dom-iterables */ "./node_modules/core-js/internals/dom-iterables.js"); var forEach = __webpack_require__(/*! ../internals/array-for-each */ "./node_modules/core-js/internals/array-for-each.js"); var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ "./node_modules/core-js/internals/create-non-enumerable-property.js"); for (var COLLECTION_NAME in DOMIterables) { var Collection = global[COLLECTION_NAME]; var CollectionPrototype = Collection && Collection.prototype; // some Chrome versions have non-configurable methods on DOMTokenList if (CollectionPrototype && CollectionPrototype.forEach !== forEach) try { createNonEnumerableProperty(CollectionPrototype, 'forEach', forEach); } catch (error) { CollectionPrototype.forEach = forEach; } } /***/ }), /***/ "./node_modules/core-js/modules/web.timers.js": /*!****************************************************!*\ !*** ./node_modules/core-js/modules/web.timers.js ***! \****************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js/internals/export.js"); var global = __webpack_require__(/*! ../internals/global */ "./node_modules/core-js/internals/global.js"); var userAgent = __webpack_require__(/*! ../internals/engine-user-agent */ "./node_modules/core-js/internals/engine-user-agent.js"); var slice = [].slice; var MSIE = /MSIE .\./.test(userAgent); // <- dirty ie9- check var wrap = function (scheduler) { return function (handler, timeout /* , ...arguments */ ) { var boundArgs = arguments.length > 2; var args = boundArgs ? slice.call(arguments, 2) : undefined; return scheduler(boundArgs ? function () { // eslint-disable-next-line no-new-func (typeof handler == 'function' ? handler : Function(handler)).apply(this, args); } : handler, timeout); }; }; // ie9- setTimeout & setInterval additional parameters fix // https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#timers $({ global: true, bind: true, forced: MSIE }, { // `setTimeout` method // https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#dom-settimeout setTimeout: wrap(global.setTimeout), // `setInterval` method // https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#dom-setinterval setInterval: wrap(global.setInterval) }); /***/ }), /***/ "./node_modules/webpack/buildin/global.js": /*!***********************************!*\ !*** (webpack)/buildin/global.js ***! \***********************************/ /*! no static exports found */ /***/ (function(module, exports) { var g; // This works in non-strict mode g = function () { return this; }(); try { // This works if eval is allowed (see CSP) g = g || new Function("return this")(); } catch (e) { // This works if the window reference is available if (typeof window === "object") g = window; } // g can still be undefined, but nothing to do about it... // We return undefined, instead of nothing here, so it's // easier to handle this case. if(!global) { ...} module.exports = g; /***/ }), /***/ "./scripts/HttpRequest.js": /*!********************************!*\ !*** ./scripts/HttpRequest.js ***! \********************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var core_js_modules_es_array_for_each__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.for-each */ "./node_modules/core-js/modules/es.array.for-each.js"); /* harmony import */ var core_js_modules_es_array_for_each__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_for_each__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var core_js_modules_es_date_to_string__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.date.to-string */ "./node_modules/core-js/modules/es.date.to-string.js"); /* harmony import */ var core_js_modules_es_date_to_string__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_date_to_string__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var core_js_modules_es_object_define_property__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.object.define-property */ "./node_modules/core-js/modules/es.object.define-property.js"); /* harmony import */ var core_js_modules_es_object_define_property__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_define_property__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.object.to-string */ "./node_modules/core-js/modules/es.object.to-string.js"); /* harmony import */ var core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var core_js_modules_es_promise__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/es.promise */ "./node_modules/core-js/modules/es.promise.js"); /* harmony import */ var core_js_modules_es_promise__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_promise__WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var core_js_modules_web_dom_collections_for_each__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! core-js/modules/web.dom-collections.for-each */ "./node_modules/core-js/modules/web.dom-collections.for-each.js"); /* harmony import */ var core_js_modules_web_dom_collections_for_each__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_collections_for_each__WEBPACK_IMPORTED_MODULE_5__); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } var HttpRequest = /*#__PURE__*/function () { function HttpRequest(method, uri, contentType, headers) { var _this = this; _classCallCheck(this, HttpRequest); this._fetchingPromise = null; this.xhr = new XMLHttpRequest(); this.xhr.withCredentials = true; if (!!method && !!uri) { this.xhr.open(method, uri); } if (contentType) { this.xhr.setRequestHeader('Content-Type', contentType); } if (headers && headers.length) { headers.forEach(function (h) { _this.xhr.setRequestHeader(h.header, h.value); }); } } _createClass(HttpRequest, [{ key: "open", value: function open(method, uri) { if (!!method && !!uri) { this.xhr.open(method, uri); } } }, { key: "setRequestHeader", value: function setRequestHeader(header, value) { if (!!header && !!value) { this.xhr.setRequestHeader(header, value); } } }, { key: "getAllResponseHeaders", value: function getAllResponseHeaders() { return this.headers; } }, { key: "fetchFromServer", value: function fetchFromServer(payload) { var _this2 = this; var ret = null; ret = new Promise(function (resolve, reject) { _this2.xhr.onload = function () { if (_this2.readyState === _this2.HEADERS_RECEIVED) { _this2.headers = _this2.xhr.getAllResponseHeaders(); } if (_this2.xhr.status === 200) { var d = null; //try { d = JSON.parse(_this2.xhr.responseText, function (k, v) { if (!!v && (k === 'createdon' || k === 'updatedon' || k === 'askedon' || k === 'publishedon' || k === 'lastUpdated') && Date.parse(v)) { return new Date(v); } if (!!v && k === 'json' && typeof v == "string") { return JSON.parse(v); } return v; }); //} catch (e) { // alert(e); //} resolve({ json: d, headers: _this2.headers }); } else { reject(_this2.xhr.statusText); } _this2._fetchingPromise = null; }; _this2.xhr.onerror = function (e) { reject(e.target.status); _this2._fetchingPromise = null; }; if (payload instanceof FormData) { _this2.xhr.send(payload); } else { _this2.xhr.send(JSON.stringify(payload)); } //this.xhr.send(JSON.stringify(payload)); //this.xhr.onreadystatechange = function () { // if (this.readyState == this.HEADERS_RECEIVED) { // console.log("headers", request.getAllResponseHeaders()); // } //} }); return ret; } }, { key: "send", value: function send(payload) { if (!this._fetchingPromise) { this._fetchingPromise = this.fetchFromServer(payload); } else {// } return this._fetchingPromise; } }]); return HttpRequest; }(); /* harmony default export */ __webpack_exports__["default"] = (HttpRequest); /***/ }), /***/ "./scripts/widget/index.js": /*!*********************************!*\ !*** ./scripts/widget/index.js ***! \*********************************/ /*! no exports provided */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var core_js_modules_es_symbol__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.symbol */ "./node_modules/core-js/modules/es.symbol.js"); /* harmony import */ var core_js_modules_es_symbol__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var core_js_modules_es_array_filter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.array.filter */ "./node_modules/core-js/modules/es.array.filter.js"); /* harmony import */ var core_js_modules_es_array_filter__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_filter__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var core_js_modules_es_array_for_each__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.array.for-each */ "./node_modules/core-js/modules/es.array.for-each.js"); /* harmony import */ var core_js_modules_es_array_for_each__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_for_each__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.array.join */ "./node_modules/core-js/modules/es.array.join.js"); /* harmony import */ var core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var core_js_modules_es_array_reverse__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/es.array.reverse */ "./node_modules/core-js/modules/es.array.reverse.js"); /* harmony import */ var core_js_modules_es_array_reverse__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_reverse__WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var core_js_modules_es_array_slice__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! core-js/modules/es.array.slice */ "./node_modules/core-js/modules/es.array.slice.js"); /* harmony import */ var core_js_modules_es_array_slice__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_slice__WEBPACK_IMPORTED_MODULE_5__); /* harmony import */ var core_js_modules_es_object_define_properties__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! core-js/modules/es.object.define-properties */ "./node_modules/core-js/modules/es.object.define-properties.js"); /* harmony import */ var core_js_modules_es_object_define_properties__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_define_properties__WEBPACK_IMPORTED_MODULE_6__); /* harmony import */ var core_js_modules_es_object_define_property__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! core-js/modules/es.object.define-property */ "./node_modules/core-js/modules/es.object.define-property.js"); /* harmony import */ var core_js_modules_es_object_define_property__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_define_property__WEBPACK_IMPORTED_MODULE_7__); /* harmony import */ var core_js_modules_es_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! core-js/modules/es.object.get-own-property-descriptor */ "./node_modules/core-js/modules/es.object.get-own-property-descriptor.js"); /* harmony import */ var core_js_modules_es_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_8__); /* harmony import */ var core_js_modules_es_object_get_own_property_descriptors__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! core-js/modules/es.object.get-own-property-descriptors */ "./node_modules/core-js/modules/es.object.get-own-property-descriptors.js"); /* harmony import */ var core_js_modules_es_object_get_own_property_descriptors__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_get_own_property_descriptors__WEBPACK_IMPORTED_MODULE_9__); /* harmony import */ var core_js_modules_es_object_keys__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! core-js/modules/es.object.keys */ "./node_modules/core-js/modules/es.object.keys.js"); /* harmony import */ var core_js_modules_es_object_keys__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_keys__WEBPACK_IMPORTED_MODULE_10__); /* harmony import */ var core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! core-js/modules/es.regexp.exec */ "./node_modules/core-js/modules/es.regexp.exec.js"); /* harmony import */ var core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_11__); /* harmony import */ var core_js_modules_es_string_split__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! core-js/modules/es.string.split */ "./node_modules/core-js/modules/es.string.split.js"); /* harmony import */ var core_js_modules_es_string_split__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_split__WEBPACK_IMPORTED_MODULE_12__); /* harmony import */ var core_js_modules_web_dom_collections_for_each__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! core-js/modules/web.dom-collections.for-each */ "./node_modules/core-js/modules/web.dom-collections.for-each.js"); /* harmony import */ var core_js_modules_web_dom_collections_for_each__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_collections_for_each__WEBPACK_IMPORTED_MODULE_13__); /* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! core-js/modules/web.timers */ "./node_modules/core-js/modules/web.timers.js"); /* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_14___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_14__); /* harmony import */ var _HttpRequest_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../HttpRequest.js */ "./scripts/HttpRequest.js"); function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } var timeoutid = window.setTimeout(function () { //console.log("wageni", "timeout triggered"); ping(); }, 500); console.log("wageni", "created timeoutid", timeoutid); var hostname = function hostname(url) { var ret = ""; if (url) { var a = document.createElement('a'); a.href = url; ret = a.hostname; } return ret; }; var domain = hostname(document.location.href).split('.').reverse().slice(0, 2).reverse().join("."); var referrer = hostname(document.referrer); referrer = referrer != domain ? referrer : ""; //get utm_source, utm_medium, utm_campaign var _wageni = []; if (window.wageni && window.wageni.q) { _wageni = window.wageni.q; } window.wageni = function (method, props) { //console.log("wageni", method, " called with ===>>>", props) switch (method) { case "ping": if (timeoutid) { window.clearTimeout(timeoutid); //console.log("wageni", "cleared timeoutid", timeoutid); timeoutid = window.setTimeout(function () { ping(props); }, 250); } break; } //console.log("wageni", "push is ready"); //return { // "push": (data) => { // ping(data); // console.log("wageni", "pushed", data); // } //} }; Object.defineProperty(window.wageni, 'push', { value: function value(payload) { ping(payload); } }); _wageni.forEach(function (w) { wageni(w[0], w[1]); }); function ping(props) { timeoutid = null; var clientId = ""; if (!(typeof ga === "undefined") && ga.getAll) { try { var tracker = ga.getAll()[0]; clientId = tracker.get('clientId'); console.log("wageni", "clientId", clientId); } catch (error) { console.log("wageni", "ga is not available"); } //ga(function () { // var tracker = ga.getAll()[0]; // var clientId = tracker.get('clientId'); //} } //var payload = { // domain: domain, // clientId: clientId, // location: document.location, // referrer: referrer, // current: document.location.href, // previous: document.referrer, // width: window.screen.width, // userAgent: navigator.userAgent, // adIdViewed: (props || {}).adIdViewed, // adIdClicked: (props || {}).adIdClicked //} var payload = _objectSpread({ domain: domain, clientId: clientId, location: document.location, referrer: referrer, current: document.location.href, previous: document.referrer, width: window.screen.width, userAgent: navigator.userAgent }, props); //console.log("wageni!!!"); //console.log("posting HttpRequest payload", payload); //console.log("wageni!!!"); var url = "https://wageni.gomme-auto.it:" + "/ping"; var headers = []; var xhr = new _HttpRequest_js__WEBPACK_IMPORTED_MODULE_15__["default"]("POST", url); //, "application/json", headers); return xhr.send(payload).then(function (response) { var json = response.json; //if (json.message || json.exception) { // alert(json.message || json.exception); //} else { //} console.log("wageni!!!"); console.log("HttpRequest response", response); console.log("wageni!!!"); return json; })["catch"](function (e) {}); //console.log("wageni!!!"); //console.log("posted HttpRequest payload", payload); //console.log("wageni!!!"); } /***/ }), /***/ 0: /*!***************************************!*\ !*** multi ./scripts/widget/index.js ***! \***************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__(/*! ./scripts/widget/index.js */"./scripts/widget/index.js"); /***/ }) /******/ }); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2EtZnVuY3Rpb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FkdmFuY2Utc3RyaW5nLWluZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hbi1pbnN0YW5jZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYW4tb2JqZWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1mb3ItZWFjaC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktaW5jbHVkZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWhhcy1zcGVjaWVzLXN1cHBvcnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1pcy1zdHJpY3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LW1ldGhvZC11c2VzLXRvLWxlbmd0aC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jcmVhdGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NhbGwtd2l0aC1zYWZlLWl0ZXJhdGlvbi1jbG9zaW5nLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jaGVjay1jb3JyZWN0bmVzcy1vZi1pdGVyYXRpb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NsYXNzb2YtcmF3LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jbGFzc29mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jb3B5LWNvbnN0cnVjdG9yLXByb3BlcnRpZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVmaW5lLXdlbGwta25vd24tc3ltYm9sLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZXNjcmlwdG9ycy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2RvbS1pdGVyYWJsZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2VuZ2luZS1pcy1pb3MuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbmdpbmUtdjgtdmVyc2lvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW51bS1idWcta2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZXhwb3J0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mYWlscy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZml4LXJlZ2V4cC13ZWxsLWtub3duLXN5bWJvbC1sb2dpYy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtYnVpbHQtaW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1pdGVyYXRvci1tZXRob2QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dsb2JhbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGFzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9oaWRkZW4ta2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaG9zdC1yZXBvcnQtZXJyb3JzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9odG1sLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pZTgtZG9tLWRlZmluZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2luc3BlY3Qtc291cmNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtYXJyYXktaXRlcmF0b3ItbWV0aG9kLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1hcnJheS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtZm9yY2VkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXB1cmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXJlZ2V4cC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXRlcmF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXRlcmF0b3JzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9taWNyb3Rhc2suanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL25hdGl2ZS1wcm9taXNlLWNvbnN0cnVjdG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9uYXRpdmUtc3ltYm9sLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9uYXRpdmUtd2Vhay1tYXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1jcmVhdGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydGllcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMtZXh0ZXJuYWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3Qta2V5cy1pbnRlcm5hbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWtleXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1wcm9wZXJ0eS1pcy1lbnVtZXJhYmxlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtdG8tc3RyaW5nLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vd24ta2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcGF0aC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcGVyZm9ybS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcHJvbWlzZS1yZXNvbHZlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZWRlZmluZS1hbGwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZGVmaW5lLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZWdleHAtZXhlYy1hYnN0cmFjdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVnZXhwLWV4ZWMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZ2V4cC1mbGFncy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVnZXhwLXN0aWNreS1oZWxwZXJzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NldC1nbG9iYWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NldC1zcGVjaWVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLWtleS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zaGFyZWQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NwZWNpZXMtY29uc3RydWN0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3N0cmluZy1tdWx0aWJ5dGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3Rhc2suanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW50ZWdlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tbGVuZ3RoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLXByaW1pdGl2ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy91aWQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3VzZS1zeW1ib2wtYXMtdWlkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC13cmFwcGVkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmZpbHRlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmZvci1lYWNoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuam9pbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnJldmVyc2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5zbGljZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmRhdGUudG8tc3RyaW5nLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LmRlZmluZS1wcm9wZXJ0aWVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LmRlZmluZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9ycy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC5rZXlzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LnRvLXN0cmluZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnByb21pc2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5yZWdleHAuZXhlYy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5zcGxpdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN5bWJvbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuZm9yLWVhY2guanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy93ZWIudGltZXJzLmpzIiwid2VicGFjazovLy8od2VicGFjaykvYnVpbGRpbi9nbG9iYWwuanMiLCJ3ZWJwYWNrOi8vLy4vc2NyaXB0cy9IdHRwUmVxdWVzdC5qcyIsIndlYnBhY2s6Ly8vLi9zY3JpcHRzL3dpZGdldC9pbmRleC5qcyJdLCJuYW1lcyI6WyJtb2R1bGUiLCJleHBvcnRzIiwiaXQiLCJUeXBlRXJyb3IiLCJTdHJpbmciLCJjaGFyQXQiLCJyZXF1aXJlIiwiUyIsImluZGV4IiwidW5pY29kZSIsImxlbmd0aCIsIkNvbnN0cnVjdG9yIiwibmFtZSIsImlzT2JqZWN0IiwiJGZvckVhY2giLCJmb3JFYWNoIiwiYXJyYXlNZXRob2RJc1N0cmljdCIsImFycmF5TWV0aG9kVXNlc1RvTGVuZ3RoIiwiU1RSSUNUX01FVEhPRCIsIlVTRVNfVE9fTEVOR1RIIiwiY2FsbGJhY2tmbiIsImFyZ3VtZW50cyIsInVuZGVmaW5lZCIsInRvSW5kZXhlZE9iamVjdCIsInRvTGVuZ3RoIiwidG9BYnNvbHV0ZUluZGV4IiwiY3JlYXRlTWV0aG9kIiwiSVNfSU5DTFVERVMiLCIkdGhpcyIsImVsIiwiZnJvbUluZGV4IiwiTyIsInZhbHVlIiwiaW5jbHVkZXMiLCJpbmRleE9mIiwiYmluZCIsIkluZGV4ZWRPYmplY3QiLCJ0b09iamVjdCIsImFycmF5U3BlY2llc0NyZWF0ZSIsInB1c2giLCJUWVBFIiwiSVNfTUFQIiwiSVNfRklMVEVSIiwiSVNfU09NRSIsIklTX0VWRVJZIiwiSVNfRklORF9JTkRFWCIsIk5PX0hPTEVTIiwidGhhdCIsInNwZWNpZmljQ3JlYXRlIiwic2VsZiIsImJvdW5kRnVuY3Rpb24iLCJjcmVhdGUiLCJ0YXJnZXQiLCJyZXN1bHQiLCJjYWxsIiwibWFwIiwiZmlsdGVyIiwic29tZSIsImV2ZXJ5IiwiZmluZCIsImZpbmRJbmRleCIsImZhaWxzIiwid2VsbEtub3duU3ltYm9sIiwiVjhfVkVSU0lPTiIsIlNQRUNJRVMiLCJNRVRIT0RfTkFNRSIsImFycmF5IiwiY29uc3RydWN0b3IiLCJmb28iLCJCb29sZWFuIiwiYXJndW1lbnQiLCJtZXRob2QiLCJERVNDUklQVE9SUyIsImhhcyIsImRlZmluZVByb3BlcnR5IiwiT2JqZWN0IiwiY2FjaGUiLCJ0aHJvd2VyIiwib3B0aW9ucyIsIkFDQ0VTU09SUyIsImFyZ3VtZW50MCIsImFyZ3VtZW50MSIsImVudW1lcmFibGUiLCJnZXQiLCJpc0FycmF5Iiwib3JpZ2luYWxBcnJheSIsIkMiLCJBcnJheSIsInByb3RvdHlwZSIsImFuT2JqZWN0IiwiaXRlcmF0b3IiLCJmbiIsIkVOVFJJRVMiLCJlcnJvciIsInJldHVybk1ldGhvZCIsIklURVJBVE9SIiwiU0FGRV9DTE9TSU5HIiwiY2FsbGVkIiwiaXRlcmF0b3JXaXRoUmV0dXJuIiwibmV4dCIsImRvbmUiLCJmcm9tIiwiZXhlYyIsIlNLSVBfQ0xPU0lORyIsIklURVJBVElPTl9TVVBQT1JUIiwib2JqZWN0IiwidG9TdHJpbmciLCJzbGljZSIsIlRPX1NUUklOR19UQUdfU1VQUE9SVCIsImNsYXNzb2ZSYXciLCJUT19TVFJJTkdfVEFHIiwiQ09SUkVDVF9BUkdVTUVOVFMiLCJ0cnlHZXQiLCJrZXkiLCJ0YWciLCJjYWxsZWUiLCJvd25LZXlzIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlIiwiZGVmaW5lUHJvcGVydHlNb2R1bGUiLCJzb3VyY2UiLCJrZXlzIiwiZiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImkiLCJjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IiLCJiaXRtYXAiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsInRvUHJpbWl0aXZlIiwicHJvcGVydHlLZXkiLCJwYXRoIiwid3JhcHBlZFdlbGxLbm93blN5bWJvbE1vZHVsZSIsIk5BTUUiLCJTeW1ib2wiLCJnbG9iYWwiLCJkb2N1bWVudCIsIkVYSVNUUyIsImNyZWF0ZUVsZW1lbnQiLCJDU1NSdWxlTGlzdCIsIkNTU1N0eWxlRGVjbGFyYXRpb24iLCJDU1NWYWx1ZUxpc3QiLCJDbGllbnRSZWN0TGlzdCIsIkRPTVJlY3RMaXN0IiwiRE9NU3RyaW5nTGlzdCIsIkRPTVRva2VuTGlzdCIsIkRhdGFUcmFuc2Zlckl0ZW1MaXN0IiwiRmlsZUxpc3QiLCJIVE1MQWxsQ29sbGVjdGlvbiIsIkhUTUxDb2xsZWN0aW9uIiwiSFRNTEZvcm1FbGVtZW50IiwiSFRNTFNlbGVjdEVsZW1lbnQiLCJNZWRpYUxpc3QiLCJNaW1lVHlwZUFycmF5IiwiTmFtZWROb2RlTWFwIiwiTm9kZUxpc3QiLCJQYWludFJlcXVlc3RMaXN0IiwiUGx1Z2luIiwiUGx1Z2luQXJyYXkiLCJTVkdMZW5ndGhMaXN0IiwiU1ZHTnVtYmVyTGlzdCIsIlNWR1BhdGhTZWdMaXN0IiwiU1ZHUG9pbnRMaXN0IiwiU1ZHU3RyaW5nTGlzdCIsIlNWR1RyYW5zZm9ybUxpc3QiLCJTb3VyY2VCdWZmZXJMaXN0IiwiU3R5bGVTaGVldExpc3QiLCJUZXh0VHJhY2tDdWVMaXN0IiwiVGV4dFRyYWNrTGlzdCIsIlRvdWNoTGlzdCIsInVzZXJBZ2VudCIsInRlc3QiLCJnZXRCdWlsdEluIiwicHJvY2VzcyIsInZlcnNpb25zIiwidjgiLCJtYXRjaCIsInZlcnNpb24iLCJzcGxpdCIsImNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSIsInJlZGVmaW5lIiwic2V0R2xvYmFsIiwiY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyIsImlzRm9yY2VkIiwiVEFSR0VUIiwiR0xPQkFMIiwiU1RBVElDIiwic3RhdCIsIkZPUkNFRCIsInRhcmdldFByb3BlcnR5Iiwic291cmNlUHJvcGVydHkiLCJkZXNjcmlwdG9yIiwibm9UYXJnZXRHZXQiLCJmb3JjZWQiLCJzaGFtIiwicmVnZXhwRXhlYyIsIlJFUExBQ0VfU1VQUE9SVFNfTkFNRURfR1JPVVBTIiwicmUiLCJncm91cHMiLCJhIiwicmVwbGFjZSIsIlJFUExBQ0VfS0VFUFNfJDAiLCJSRVBMQUNFIiwiUkVHRVhQX1JFUExBQ0VfU1VCU1RJVFVURVNfVU5ERUZJTkVEX0NBUFRVUkUiLCJTUExJVF9XT1JLU19XSVRIX09WRVJXUklUVEVOX0VYRUMiLCJvcmlnaW5hbEV4ZWMiLCJhcHBseSIsIktFWSIsIlNZTUJPTCIsIkRFTEVHQVRFU19UT19TWU1CT0wiLCJERUxFR0FURVNfVE9fRVhFQyIsImV4ZWNDYWxsZWQiLCJmbGFncyIsIm5hdGl2ZVJlZ0V4cE1ldGhvZCIsIm1ldGhvZHMiLCJuYXRpdmVNZXRob2QiLCJyZWdleHAiLCJzdHIiLCJhcmcyIiwiZm9yY2VTdHJpbmdNZXRob2QiLCJzdHJpbmdNZXRob2QiLCJyZWdleE1ldGhvZCIsIlJlZ0V4cCIsInN0cmluZyIsImFyZyIsImFGdW5jdGlvbiIsImIiLCJjIiwidmFyaWFibGUiLCJuYW1lc3BhY2UiLCJjbGFzc29mIiwiSXRlcmF0b3JzIiwiY2hlY2siLCJNYXRoIiwiZ2xvYmFsVGhpcyIsIndpbmRvdyIsIkZ1bmN0aW9uIiwiaGFzT3duUHJvcGVydHkiLCJjb25zb2xlIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJzdG9yZSIsImZ1bmN0aW9uVG9TdHJpbmciLCJpbnNwZWN0U291cmNlIiwiTkFUSVZFX1dFQUtfTUFQIiwib2JqZWN0SGFzIiwic2hhcmVkS2V5IiwiaGlkZGVuS2V5cyIsIldlYWtNYXAiLCJzZXQiLCJlbmZvcmNlIiwiZ2V0dGVyRm9yIiwic3RhdGUiLCJ0eXBlIiwid21nZXQiLCJ3bWhhcyIsIndtc2V0IiwibWV0YWRhdGEiLCJTVEFURSIsIkFycmF5UHJvdG90eXBlIiwicmVwbGFjZW1lbnQiLCJmZWF0dXJlIiwiZGV0ZWN0aW9uIiwiZGF0YSIsIm5vcm1hbGl6ZSIsIlBPTFlGSUxMIiwiTkFUSVZFIiwidG9Mb3dlckNhc2UiLCJNQVRDSCIsImlzUmVnRXhwIiwiaXNBcnJheUl0ZXJhdG9yTWV0aG9kIiwiZ2V0SXRlcmF0b3JNZXRob2QiLCJjYWxsV2l0aFNhZmVJdGVyYXRpb25DbG9zaW5nIiwiUmVzdWx0Iiwic3RvcHBlZCIsIml0ZXJhdGUiLCJpdGVyYWJsZSIsIkFTX0VOVFJJRVMiLCJJU19JVEVSQVRPUiIsIml0ZXJGbiIsInN0ZXAiLCJzdG9wIiwibWFjcm90YXNrIiwiSVNfSU9TIiwiTXV0YXRpb25PYnNlcnZlciIsIldlYktpdE11dGF0aW9uT2JzZXJ2ZXIiLCJQcm9taXNlIiwiSVNfTk9ERSIsInF1ZXVlTWljcm90YXNrRGVzY3JpcHRvciIsInF1ZXVlTWljcm90YXNrIiwiZmx1c2giLCJoZWFkIiwibGFzdCIsIm5vdGlmeSIsInRvZ2dsZSIsIm5vZGUiLCJwcm9taXNlIiwidGhlbiIsInBhcmVudCIsImRvbWFpbiIsImV4aXQiLCJlbnRlciIsIm5leHRUaWNrIiwiY3JlYXRlVGV4dE5vZGUiLCJvYnNlcnZlIiwiY2hhcmFjdGVyRGF0YSIsInJlc29sdmUiLCJ0YXNrIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiUHJvbWlzZUNhcGFiaWxpdHkiLCJyZWplY3QiLCIkJHJlc29sdmUiLCIkJHJlamVjdCIsImRlZmluZVByb3BlcnRpZXMiLCJlbnVtQnVnS2V5cyIsImh0bWwiLCJkb2N1bWVudENyZWF0ZUVsZW1lbnQiLCJHVCIsIkxUIiwiUFJPVE9UWVBFIiwiU0NSSVBUIiwiSUVfUFJPVE8iLCJFbXB0eUNvbnN0cnVjdG9yIiwic2NyaXB0VGFnIiwiY29udGVudCIsIk51bGxQcm90b09iamVjdFZpYUFjdGl2ZVgiLCJhY3RpdmVYRG9jdW1lbnQiLCJ3cml0ZSIsImNsb3NlIiwidGVtcCIsInBhcmVudFdpbmRvdyIsIk51bGxQcm90b09iamVjdFZpYUlGcmFtZSIsImlmcmFtZSIsIkpTIiwiaWZyYW1lRG9jdW1lbnQiLCJzdHlsZSIsImRpc3BsYXkiLCJhcHBlbmRDaGlsZCIsInNyYyIsImNvbnRlbnRXaW5kb3ciLCJvcGVuIiwiRiIsIk51bGxQcm90b09iamVjdCIsIkFjdGl2ZVhPYmplY3QiLCJQcm9wZXJ0aWVzIiwib2JqZWN0S2V5cyIsIklFOF9ET01fREVGSU5FIiwibmF0aXZlRGVmaW5lUHJvcGVydHkiLCJQIiwiQXR0cmlidXRlcyIsInByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlIiwibmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwibmF0aXZlR2V0T3duUHJvcGVydHlOYW1lcyIsIndpbmRvd05hbWVzIiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsImdldFdpbmRvd05hbWVzIiwiaW50ZXJuYWxPYmplY3RLZXlzIiwiY29uY2F0IiwibmFtZXMiLCJuYXRpdmVQcm9wZXJ0eUlzRW51bWVyYWJsZSIsIk5BU0hPUk5fQlVHIiwiViIsImdldE93blByb3BlcnR5TmFtZXNNb2R1bGUiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUiLCJuZXdQcm9taXNlQ2FwYWJpbGl0eSIsIngiLCJwcm9taXNlQ2FwYWJpbGl0eSIsIkludGVybmFsU3RhdGVNb2R1bGUiLCJnZXRJbnRlcm5hbFN0YXRlIiwiZW5mb3JjZUludGVybmFsU3RhdGUiLCJURU1QTEFURSIsInVuc2FmZSIsInNpbXBsZSIsImpvaW4iLCJSIiwicmVnZXhwRmxhZ3MiLCJzdGlja3lIZWxwZXJzIiwibmF0aXZlRXhlYyIsIm5hdGl2ZVJlcGxhY2UiLCJwYXRjaGVkRXhlYyIsIlVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyIsInJlMSIsInJlMiIsImxhc3RJbmRleCIsIlVOU1VQUE9SVEVEX1kiLCJCUk9LRU5fQ0FSRVQiLCJOUENHX0lOQ0xVREVEIiwiUEFUQ0giLCJyZUNvcHkiLCJzdGlja3kiLCJjaGFyc0FkZGVkIiwic3RyQ29weSIsIm11bHRpbGluZSIsImlucHV0IiwiaWdub3JlQ2FzZSIsImRvdEFsbCIsIlJFIiwicyIsIkNPTlNUUlVDVE9SX05BTUUiLCJUQUciLCJzaGFyZWQiLCJ1aWQiLCJTSEFSRUQiLCJJU19QVVJFIiwibW9kZSIsImNvcHlyaWdodCIsImRlZmF1bHRDb25zdHJ1Y3RvciIsInRvSW50ZWdlciIsInJlcXVpcmVPYmplY3RDb2VyY2libGUiLCJDT05WRVJUX1RPX1NUUklORyIsInBvcyIsInBvc2l0aW9uIiwic2l6ZSIsImZpcnN0Iiwic2Vjb25kIiwiY2hhckNvZGVBdCIsImNvZGVBdCIsImxvY2F0aW9uIiwic2V0SW1tZWRpYXRlIiwiY2xlYXIiLCJjbGVhckltbWVkaWF0ZSIsIk1lc3NhZ2VDaGFubmVsIiwiRGlzcGF0Y2giLCJjb3VudGVyIiwicXVldWUiLCJPTlJFQURZU1RBVEVDSEFOR0UiLCJkZWZlciIsImNoYW5uZWwiLCJwb3J0IiwicnVuIiwiaWQiLCJydW5uZXIiLCJsaXN0ZW5lciIsImV2ZW50IiwicG9zdCIsInBvc3RNZXNzYWdlIiwicHJvdG9jb2wiLCJob3N0IiwiYXJncyIsIm5vdyIsInBvcnQyIiwicG9ydDEiLCJvbm1lc3NhZ2UiLCJhZGRFdmVudExpc3RlbmVyIiwiaW1wb3J0U2NyaXB0cyIsInJlbW92ZUNoaWxkIiwic2V0VGltZW91dCIsIm1heCIsIm1pbiIsImludGVnZXIiLCJjZWlsIiwiZmxvb3IiLCJpc05hTiIsIlBSRUZFUlJFRF9TVFJJTkciLCJ2YWwiLCJ2YWx1ZU9mIiwicG9zdGZpeCIsInJhbmRvbSIsIk5BVElWRV9TWU1CT0wiLCJVU0VfU1lNQk9MX0FTX1VJRCIsIldlbGxLbm93blN5bWJvbHNTdG9yZSIsImNyZWF0ZVdlbGxLbm93blN5bWJvbCIsIndpdGhvdXRTZXR0ZXIiLCIkIiwiJGZpbHRlciIsImFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQiLCJIQVNfU1BFQ0lFU19TVVBQT1JUIiwicHJvdG8iLCJuYXRpdmVKb2luIiwiRVMzX1NUUklOR1MiLCJzZXBhcmF0b3IiLCJuYXRpdmVSZXZlcnNlIiwicmV2ZXJzZSIsImNyZWF0ZVByb3BlcnR5IiwibmF0aXZlU2xpY2UiLCJzdGFydCIsImVuZCIsImsiLCJmaW4iLCJuIiwiRGF0ZVByb3RvdHlwZSIsIkRhdGUiLCJJTlZBTElEX0RBVEUiLCJUT19TVFJJTkciLCJuYXRpdmVEYXRlVG9TdHJpbmciLCJnZXRUaW1lIiwiTmFOIiwib2JqZWN0RGVmaW5lUHJvcGVydHlNb2RpbGUiLCJGQUlMU19PTl9QUklNSVRJVkVTIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsIm5hdGl2ZUtleXMiLCJOYXRpdmVQcm9taXNlIiwicmVkZWZpbmVBbGwiLCJzZXRUb1N0cmluZ1RhZyIsInNldFNwZWNpZXMiLCJhbkluc3RhbmNlIiwiY2hlY2tDb3JyZWN0bmVzc09mSXRlcmF0aW9uIiwic3BlY2llc0NvbnN0cnVjdG9yIiwibWljcm90YXNrIiwicHJvbWlzZVJlc29sdmUiLCJob3N0UmVwb3J0RXJyb3JzIiwibmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUiLCJwZXJmb3JtIiwiUFJPTUlTRSIsInNldEludGVybmFsU3RhdGUiLCJnZXRJbnRlcm5hbFByb21pc2VTdGF0ZSIsIlByb21pc2VDb25zdHJ1Y3RvciIsIiRmZXRjaCIsIm5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eSIsIkRJU1BBVENIX0VWRU5UIiwiY3JlYXRlRXZlbnQiLCJkaXNwYXRjaEV2ZW50IiwiVU5IQU5ETEVEX1JFSkVDVElPTiIsIlJFSkVDVElPTl9IQU5ETEVEIiwiUEVORElORyIsIkZVTEZJTExFRCIsIlJFSkVDVEVEIiwiSEFORExFRCIsIlVOSEFORExFRCIsIkludGVybmFsIiwiT3duUHJvbWlzZUNhcGFiaWxpdHkiLCJQcm9taXNlV3JhcHBlciIsIm5hdGl2ZVRoZW4iLCJHTE9CQUxfQ09SRV9KU19QUk9NSVNFIiwiUHJvbWlzZVJlamVjdGlvbkV2ZW50IiwiRmFrZVByb21pc2UiLCJJTkNPUlJFQ1RfSVRFUkFUSU9OIiwiYWxsIiwiaXNUaGVuYWJsZSIsImlzUmVqZWN0Iiwibm90aWZpZWQiLCJjaGFpbiIsInJlYWN0aW9ucyIsIm9rIiwicmVhY3Rpb24iLCJoYW5kbGVyIiwiZmFpbCIsImV4aXRlZCIsInJlamVjdGlvbiIsIm9uSGFuZGxlVW5oYW5kbGVkIiwib25VbmhhbmRsZWQiLCJyZWFzb24iLCJpbml0RXZlbnQiLCJJU19VTkhBTkRMRUQiLCJpc1VuaGFuZGxlZCIsImVtaXQiLCJ1bndyYXAiLCJpbnRlcm5hbFJlamVjdCIsImludGVybmFsUmVzb2x2ZSIsIndyYXBwZXIiLCJleGVjdXRvciIsIm9uRnVsZmlsbGVkIiwib25SZWplY3RlZCIsImZldGNoIiwid3JhcCIsInIiLCJjYXBhYmlsaXR5IiwiJHByb21pc2VSZXNvbHZlIiwidmFsdWVzIiwicmVtYWluaW5nIiwiYWxyZWFkeUNhbGxlZCIsInJhY2UiLCJmaXhSZWdFeHBXZWxsS25vd25TeW1ib2xMb2dpYyIsImFkdmFuY2VTdHJpbmdJbmRleCIsImNhbGxSZWdFeHBFeGVjIiwiYXJyYXlQdXNoIiwiTUFYX1VJTlQzMiIsIlNVUFBPUlRTX1kiLCJTUExJVCIsIm5hdGl2ZVNwbGl0IiwibWF5YmVDYWxsTmF0aXZlIiwiaW50ZXJuYWxTcGxpdCIsImxpbWl0IiwibGltIiwib3V0cHV0IiwibGFzdExhc3RJbmRleCIsInNlcGFyYXRvckNvcHkiLCJsYXN0TGVuZ3RoIiwic3BsaXR0ZXIiLCJyZXMiLCJyeCIsInVuaWNvZGVNYXRjaGluZyIsInAiLCJxIiwiQSIsInoiLCJlIiwibmF0aXZlT2JqZWN0Q3JlYXRlIiwiZ2V0T3duUHJvcGVydHlOYW1lc0V4dGVybmFsIiwiZGVmaW5lV2VsbEtub3duU3ltYm9sIiwiSElEREVOIiwiVE9fUFJJTUlUSVZFIiwiT2JqZWN0UHJvdG90eXBlIiwiJFN5bWJvbCIsIiRzdHJpbmdpZnkiLCJBbGxTeW1ib2xzIiwiT2JqZWN0UHJvdG90eXBlU3ltYm9scyIsIlN0cmluZ1RvU3ltYm9sUmVnaXN0cnkiLCJTeW1ib2xUb1N0cmluZ1JlZ2lzdHJ5IiwiUU9iamVjdCIsIlVTRV9TRVRURVIiLCJmaW5kQ2hpbGQiLCJzZXRTeW1ib2xEZXNjcmlwdG9yIiwiT2JqZWN0UHJvdG90eXBlRGVzY3JpcHRvciIsImRlc2NyaXB0aW9uIiwic3ltYm9sIiwiaXNTeW1ib2wiLCIkZGVmaW5lUHJvcGVydHkiLCIkZGVmaW5lUHJvcGVydGllcyIsInByb3BlcnRpZXMiLCIkZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiJHByb3BlcnR5SXNFbnVtZXJhYmxlIiwiJGNyZWF0ZSIsIiRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCIkZ2V0T3duUHJvcGVydHlOYW1lcyIsIklTX09CSkVDVF9QUk9UT1RZUEUiLCJzZXR0ZXIiLCJrZXlGb3IiLCJzeW0iLCJ1c2VTZXR0ZXIiLCJ1c2VTaW1wbGUiLCJGT1JDRURfSlNPTl9TVFJJTkdJRlkiLCJzdHJpbmdpZnkiLCJyZXBsYWNlciIsInNwYWNlIiwiJHJlcGxhY2VyIiwiRE9NSXRlcmFibGVzIiwiQ09MTEVDVElPTl9OQU1FIiwiQ29sbGVjdGlvbiIsIkNvbGxlY3Rpb25Qcm90b3R5cGUiLCJNU0lFIiwic2NoZWR1bGVyIiwidGltZW91dCIsImJvdW5kQXJncyIsInNldEludGVydmFsIiwiZyIsIkh0dHBSZXF1ZXN0IiwidXJpIiwiY29udGVudFR5cGUiLCJoZWFkZXJzIiwiX2ZldGNoaW5nUHJvbWlzZSIsInhociIsIlhNTEh0dHBSZXF1ZXN0Iiwid2l0aENyZWRlbnRpYWxzIiwic2V0UmVxdWVzdEhlYWRlciIsImgiLCJoZWFkZXIiLCJwYXlsb2FkIiwicmV0Iiwib25sb2FkIiwicmVhZHlTdGF0ZSIsIkhFQURFUlNfUkVDRUlWRUQiLCJnZXRBbGxSZXNwb25zZUhlYWRlcnMiLCJzdGF0dXMiLCJkIiwiSlNPTiIsInBhcnNlIiwicmVzcG9uc2VUZXh0IiwidiIsImpzb24iLCJzdGF0dXNUZXh0Iiwib25lcnJvciIsIkZvcm1EYXRhIiwic2VuZCIsImZldGNoRnJvbVNlcnZlciIsInRpbWVvdXRpZCIsInBpbmciLCJsb2ciLCJob3N0bmFtZSIsInVybCIsImhyZWYiLCJyZWZlcnJlciIsIl93YWdlbmkiLCJ3YWdlbmkiLCJwcm9wcyIsImNsZWFyVGltZW91dCIsInciLCJjbGllbnRJZCIsImdhIiwiZ2V0QWxsIiwidHJhY2tlciIsImN1cnJlbnQiLCJwcmV2aW91cyIsIndpZHRoIiwic2NyZWVuIiwibmF2aWdhdG9yIiwicmVzcG9uc2UiXSwibWFwcGluZ3MiOiI7UUFBQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTs7O1FBR0E7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLDBDQUEwQyxnQ0FBZ0M7UUFDMUU7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSx3REFBd0Qsa0JBQWtCO1FBQzFFO1FBQ0EsaURBQWlELGNBQWM7UUFDL0Q7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBLHlDQUF5QyxpQ0FBaUM7UUFDMUUsZ0hBQWdILG1CQUFtQixFQUFFO1FBQ3JJO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0EsMkJBQTJCLDBCQUEwQixFQUFFO1FBQ3ZELGlDQUFpQyxlQUFlO1FBQ2hEO1FBQ0E7UUFDQTs7UUFFQTtRQUNBLHNEQUFzRCwrREFBK0Q7O1FBRXJIO1FBQ0E7OztRQUdBO1FBQ0E7Ozs7Ozs7Ozs7OztBQ2xGQUEsTUFBTSxDQUFDQyxPQUFQLEdBQWlCLFVBQVVDLEVBQVYsRUFBYztBQUM3QixNQUFJLE9BQU9BLEVBQVAsSUFBYSxVQUFqQixFQUE2QjtBQUMzQixVQUFN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QUFDNGEsR0FBUixDQUFZLFdBQVo7QUFDQTVhLFdBQU8sQ0FBQzRhLEdBQVIsQ0FBWSxzQkFBWixFQUFvQ21CLFFBQXBDO0FBQ0EvYixXQUFPLENBQUM0YSxHQUFSLENBQVksV0FBWjtBQUVBLFdBQU9SLElBQVA7QUFDRCxHQWJNLFdBYUUsVUFBQ3pFLENBQUQsRUFBTyxDQUNmLENBZE0sQ0FBUCxDQTVEbUIsQ0E0RW5CO0FBQ0E7QUFDQTtBQUVELEMiLCJmaWxlIjoid2FnZW5pLmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDApO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKHR5cGVvZiBpdCAhPSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKFN0cmluZyhpdCkgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG4gIH0gcmV0dXJuIGl0O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjaGFyQXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3RyaW5nLW11bHRpYnl0ZScpLmNoYXJBdDtcblxuLy8gYEFkdmFuY2VTdHJpbmdJbmRleGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hZHZhbmNlc3RyaW5naW5kZXhcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFMsIGluZGV4LCB1bmljb2RlKSB7XG4gIHJldHVybiBpbmRleCArICh1bmljb2RlID8gY2hhckF0KFMsIGluZGV4KS5sZW5ndGggOiAxKTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgQ29uc3RydWN0b3IsIG5hbWUpIHtcbiAgaWYgKCEoaXQgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICB0aHJvdyBUeXBlRXJyb3IoJ0luY29ycmVjdCAnICsgKG5hbWUgPyBuYW1lICsgJyAnIDogJycpICsgJ2ludm9jYXRpb24nKTtcbiAgfSByZXR1cm4gaXQ7XG59O1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoIWlzT2JqZWN0KGl0KSkge1xuICAgIHRocm93IFR5cGVFcnJvcihTdHJpbmcoaXQpICsgJyBpcyBub3QgYW4gb2JqZWN0Jyk7XG4gIH0gcmV0dXJuIGl0O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZm9yRWFjaCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5mb3JFYWNoO1xudmFyIGFycmF5TWV0aG9kSXNTdHJpY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWlzLXN0cmljdCcpO1xudmFyIGFycmF5TWV0aG9kVXNlc1RvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC11c2VzLXRvLWxlbmd0aCcpO1xuXG52YXIgU1RSSUNUX01FVEhPRCA9IGFycmF5TWV0aG9kSXNTdHJpY3QoJ2ZvckVhY2gnKTtcbnZhciBVU0VTX1RPX0xFTkdUSCA9IGFycmF5TWV0aG9kVXNlc1RvTGVuZ3RoKCdmb3JFYWNoJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZm9yRWFjaGAgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZm9yZWFjaFxubW9kdWxlLmV4cG9ydHMgPSAoIVNUUklDVF9NRVRIT0QgfHwgIVVTRVNfVE9fTEVOR1RIKSA/IGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgcmV0dXJuICRmb3JFYWNoKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbn0gOiBbXS5mb3JFYWNoO1xuIiwidmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleCcpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnsgaW5kZXhPZiwgaW5jbHVkZXMgfWAgbWV0aG9kcyBpbXBsZW1lbnRhdGlvblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChJU19JTkNMVURFUykge1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBlbCwgZnJvbUluZGV4KSB7XG4gICAgdmFyIE8gPSB0b0luZGV4ZWRPYmplY3QoJHRoaXMpO1xuICAgIHZhciBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gICAgdmFyIGluZGV4ID0gdG9BYnNvbHV0ZUluZGV4KGZyb21JbmRleCwgbGVuZ3RoKTtcbiAgICB2YXIgdmFsdWU7XG4gICAgLy8gQXJyYXkjaW5jbHVkZXMgdXNlcyBTYW1lVmFsdWVaZXJvIGVxdWFsaXR5IGFsZ29yaXRobVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICBpZiAoSVNfSU5DTFVERVMgJiYgZWwgIT0gZWwpIHdoaWxlIChsZW5ndGggPiBpbmRleCkge1xuICAgICAgdmFsdWUgPSBPW2luZGV4KytdO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgICAgaWYgKHZhbHVlICE9IHZhbHVlKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBBcnJheSNpbmRleE9mIGlnbm9yZXMgaG9sZXMsIEFycmF5I2luY2x1ZGVzIC0gbm90XG4gICAgfSBlbHNlIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgICBpZiAoKElTX0lOQ0xVREVTIHx8IGluZGV4IGluIE8pICYmIE9baW5kZXhdID09PSBlbCkgcmV0dXJuIElTX0lOQ0xVREVTIHx8IGluZGV4IHx8IDA7XG4gICAgfSByZXR1cm4gIUlTX0lOQ0xVREVTICYmIC0xO1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBBcnJheS5wcm90b3R5cGUuaW5jbHVkZXNgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuaW5jbHVkZXNcbiAgaW5jbHVkZXM6IGNyZWF0ZU1ldGhvZCh0cnVlKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5pbmRleE9mYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmluZGV4b2ZcbiAgaW5kZXhPZjogY3JlYXRlTWV0aG9kKGZhbHNlKVxufTtcbiIsInZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIEluZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1sZW5ndGgnKTtcbnZhciBhcnJheVNwZWNpZXNDcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcblxudmFyIHB1c2ggPSBbXS5wdXNoO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnsgZm9yRWFjaCwgbWFwLCBmaWx0ZXIsIHNvbWUsIGV2ZXJ5LCBmaW5kLCBmaW5kSW5kZXggfWAgbWV0aG9kcyBpbXBsZW1lbnRhdGlvblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChUWVBFKSB7XG4gIHZhciBJU19NQVAgPSBUWVBFID09IDE7XG4gIHZhciBJU19GSUxURVIgPSBUWVBFID09IDI7XG4gIHZhciBJU19TT01FID0gVFlQRSA9PSAzO1xuICB2YXIgSVNfRVZFUlkgPSBUWVBFID09IDQ7XG4gIHZhciBJU19GSU5EX0lOREVYID0gVFlQRSA9PSA2O1xuICB2YXIgTk9fSE9MRVMgPSBUWVBFID09IDUgfHwgSVNfRklORF9JTkRFWDtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgY2FsbGJhY2tmbiwgdGhhdCwgc3BlY2lmaWNDcmVhdGUpIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgc2VsZiA9IEluZGV4ZWRPYmplY3QoTyk7XG4gICAgdmFyIGJvdW5kRnVuY3Rpb24gPSBiaW5kKGNhbGxiYWNrZm4sIHRoYXQsIDMpO1xuICAgIHZhciBsZW5ndGggPSB0b0xlbmd0aChzZWxmLmxlbmd0aCk7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgY3JlYXRlID0gc3BlY2lmaWNDcmVhdGUgfHwgYXJyYXlTcGVjaWVzQ3JlYXRlO1xuICAgIHZhciB0YXJnZXQgPSBJU19NQVAgPyBjcmVhdGUoJHRoaXMsIGxlbmd0aCkgOiBJU19GSUxURVIgPyBjcmVhdGUoJHRoaXMsIDApIDogdW5kZWZpbmVkO1xuICAgIHZhciB2YWx1ZSwgcmVzdWx0O1xuICAgIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSBpZiAoTk9fSE9MRVMgfHwgaW5kZXggaW4gc2VsZikge1xuICAgICAgdmFsdWUgPSBzZWxmW2luZGV4XTtcbiAgICAgIHJlc3VsdCA9IGJvdW5kRnVuY3Rpb24odmFsdWUsIGluZGV4LCBPKTtcbiAgICAgIGlmIChUWVBFKSB7XG4gICAgICAgIGlmIChJU19NQVApIHRhcmdldFtpbmRleF0gPSByZXN1bHQ7IC8vIG1hcFxuICAgICAgICBlbHNlIGlmIChyZXN1bHQpIHN3aXRjaCAoVFlQRSkge1xuICAgICAgICAgIGNhc2UgMzogcmV0dXJuIHRydWU7ICAgICAgICAgICAgICAvLyBzb21lXG4gICAgICAgICAgY2FzZSA1OiByZXR1cm4gdmFsdWU7ICAgICAgICAgICAgIC8vIGZpbmRcbiAgICAgICAgICBjYXNlIDY6IHJldHVybiBpbmRleDsgICAgICAgICAgICAgLy8gZmluZEluZGV4XG4gICAgICAgICAgY2FzZSAyOiBwdXNoLmNhbGwodGFyZ2V0LCB2YWx1ZSk7IC8vIGZpbHRlclxuICAgICAgICB9IGVsc2UgaWYgKElTX0VWRVJZKSByZXR1cm4gZmFsc2U7ICAvLyBldmVyeVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gSVNfRklORF9JTkRFWCA/IC0xIDogSVNfU09NRSB8fCBJU19FVkVSWSA/IElTX0VWRVJZIDogdGFyZ2V0O1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZm9yRWFjaGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5mb3JlYWNoXG4gIGZvckVhY2g6IGNyZWF0ZU1ldGhvZCgwKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5tYXBgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUubWFwXG4gIG1hcDogY3JlYXRlTWV0aG9kKDEpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmZpbHRlcmAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maWx0ZXJcbiAgZmlsdGVyOiBjcmVhdGVNZXRob2QoMiksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuc29tZWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5zb21lXG4gIHNvbWU6IGNyZWF0ZU1ldGhvZCgzKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5ldmVyeWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5ldmVyeVxuICBldmVyeTogY3JlYXRlTWV0aG9kKDQpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmZpbmRgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmluZFxuICBmaW5kOiBjcmVhdGVNZXRob2QoNSksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZmluZEluZGV4YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZpbmRJbmRleFxuICBmaW5kSW5kZXg6IGNyZWF0ZU1ldGhvZCg2KVxufTtcbiIsInZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIFY4X1ZFUlNJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXY4LXZlcnNpb24nKTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTUVUSE9EX05BTUUpIHtcbiAgLy8gV2UgY2FuJ3QgdXNlIHRoaXMgZmVhdHVyZSBkZXRlY3Rpb24gaW4gVjggc2luY2UgaXQgY2F1c2VzXG4gIC8vIGRlb3B0aW1pemF0aW9uIGFuZCBzZXJpb3VzIHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy82NzdcbiAgcmV0dXJuIFY4X1ZFUlNJT04gPj0gNTEgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgYXJyYXkgPSBbXTtcbiAgICB2YXIgY29uc3RydWN0b3IgPSBhcnJheS5jb25zdHJ1Y3RvciA9IHt9O1xuICAgIGNvbnN0cnVjdG9yW1NQRUNJRVNdID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHsgZm9vOiAxIH07XG4gICAgfTtcbiAgICByZXR1cm4gYXJyYXlbTUVUSE9EX05BTUVdKEJvb2xlYW4pLmZvbyAhPT0gMTtcbiAgfSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE1FVEhPRF9OQU1FLCBhcmd1bWVudCkge1xuICB2YXIgbWV0aG9kID0gW11bTUVUSE9EX05BTUVdO1xuICByZXR1cm4gISFtZXRob2QgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2VsZXNzLWNhbGwsbm8tdGhyb3ctbGl0ZXJhbFxuICAgIG1ldGhvZC5jYWxsKG51bGwsIGFyZ3VtZW50IHx8IGZ1bmN0aW9uICgpIHsgdGhyb3cgMTsgfSwgMSk7XG4gIH0pO1xufTtcbiIsInZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcycpO1xuXG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgY2FjaGUgPSB7fTtcblxudmFyIHRocm93ZXIgPSBmdW5jdGlvbiAoaXQpIHsgdGhyb3cgaXQ7IH07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE1FVEhPRF9OQU1FLCBvcHRpb25zKSB7XG4gIGlmIChoYXMoY2FjaGUsIE1FVEhPRF9OQU1FKSkgcmV0dXJuIGNhY2hlW01FVEhPRF9OQU1FXTtcbiAgaWYgKCFvcHRpb25zKSBvcHRpb25zID0ge307XG4gIHZhciBtZXRob2QgPSBbXVtNRVRIT0RfTkFNRV07XG4gIHZhciBBQ0NFU1NPUlMgPSBoYXMob3B0aW9ucywgJ0FDQ0VTU09SUycpID8gb3B0aW9ucy5BQ0NFU1NPUlMgOiBmYWxzZTtcbiAgdmFyIGFyZ3VtZW50MCA9IGhhcyhvcHRpb25zLCAwKSA/IG9wdGlvbnNbMF0gOiB0aHJvd2VyO1xuICB2YXIgYXJndW1lbnQxID0gaGFzKG9wdGlvbnMsIDEpID8gb3B0aW9uc1sxXSA6IHVuZGVmaW5lZDtcblxuICByZXR1cm4gY2FjaGVbTUVUSE9EX05BTUVdID0gISFtZXRob2QgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoQUNDRVNTT1JTICYmICFERVNDUklQVE9SUykgcmV0dXJuIHRydWU7XG4gICAgdmFyIE8gPSB7IGxlbmd0aDogLTEgfTtcblxuICAgIGlmIChBQ0NFU1NPUlMpIGRlZmluZVByb3BlcnR5KE8sIDEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiB0aHJvd2VyIH0pO1xuICAgIGVsc2UgT1sxXSA9IDE7XG5cbiAgICBtZXRob2QuY2FsbChPLCBhcmd1bWVudDAsIGFyZ3VtZW50MSk7XG4gIH0pO1xufTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG5cbi8vIGBBcnJheVNwZWNpZXNDcmVhdGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYXJyYXlzcGVjaWVzY3JlYXRlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcmlnaW5hbEFycmF5LCBsZW5ndGgpIHtcbiAgdmFyIEM7XG4gIGlmIChpc0FycmF5KG9yaWdpbmFsQXJyYXkpKSB7XG4gICAgQyA9IG9yaWdpbmFsQXJyYXkuY29uc3RydWN0b3I7XG4gICAgLy8gY3Jvc3MtcmVhbG0gZmFsbGJhY2tcbiAgICBpZiAodHlwZW9mIEMgPT0gJ2Z1bmN0aW9uJyAmJiAoQyA9PT0gQXJyYXkgfHwgaXNBcnJheShDLnByb3RvdHlwZSkpKSBDID0gdW5kZWZpbmVkO1xuICAgIGVsc2UgaWYgKGlzT2JqZWN0KEMpKSB7XG4gICAgICBDID0gQ1tTUEVDSUVTXTtcbiAgICAgIGlmIChDID09PSBudWxsKSBDID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfSByZXR1cm4gbmV3IChDID09PSB1bmRlZmluZWQgPyBBcnJheSA6IEMpKGxlbmd0aCA9PT0gMCA/IDAgOiBsZW5ndGgpO1xufTtcbiIsInZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcblxuLy8gY2FsbCBzb21ldGhpbmcgb24gaXRlcmF0b3Igc3RlcCB3aXRoIHNhZmUgY2xvc2luZyBvbiBlcnJvclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIGZuLCB2YWx1ZSwgRU5UUklFUykge1xuICB0cnkge1xuICAgIHJldHVybiBFTlRSSUVTID8gZm4oYW5PYmplY3QodmFsdWUpWzBdLCB2YWx1ZVsxXSkgOiBmbih2YWx1ZSk7XG4gIC8vIDcuNC42IEl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IsIGNvbXBsZXRpb24pXG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgdmFyIHJldHVybk1ldGhvZCA9IGl0ZXJhdG9yWydyZXR1cm4nXTtcbiAgICBpZiAocmV0dXJuTWV0aG9kICE9PSB1bmRlZmluZWQpIGFuT2JqZWN0KHJldHVybk1ldGhvZC5jYWxsKGl0ZXJhdG9yKSk7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn07XG4iLCJ2YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbnZhciBTQUZFX0NMT1NJTkcgPSBmYWxzZTtcblxudHJ5IHtcbiAgdmFyIGNhbGxlZCA9IDA7XG4gIHZhciBpdGVyYXRvcldpdGhSZXR1cm4gPSB7XG4gICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHsgZG9uZTogISFjYWxsZWQrKyB9O1xuICAgIH0sXG4gICAgJ3JldHVybic6IGZ1bmN0aW9uICgpIHtcbiAgICAgIFNBRkVfQ0xPU0lORyA9IHRydWU7XG4gICAgfVxuICB9O1xuICBpdGVyYXRvcldpdGhSZXR1cm5bSVRFUkFUT1JdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdGhyb3ctbGl0ZXJhbFxuICBBcnJheS5mcm9tKGl0ZXJhdG9yV2l0aFJldHVybiwgZnVuY3Rpb24gKCkgeyB0aHJvdyAyOyB9KTtcbn0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYywgU0tJUF9DTE9TSU5HKSB7XG4gIGlmICghU0tJUF9DTE9TSU5HICYmICFTQUZFX0NMT1NJTkcpIHJldHVybiBmYWxzZTtcbiAgdmFyIElURVJBVElPTl9TVVBQT1JUID0gZmFsc2U7XG4gIHRyeSB7XG4gICAgdmFyIG9iamVjdCA9IHt9O1xuICAgIG9iamVjdFtJVEVSQVRPUl0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIHsgZG9uZTogSVRFUkFUSU9OX1NVUFBPUlQgPSB0cnVlIH07XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfTtcbiAgICBleGVjKG9iamVjdCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuIElURVJBVElPTl9TVVBQT1JUO1xufTtcbiIsInZhciB0b1N0cmluZyA9IHt9LnRvU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbChpdCkuc2xpY2UoOCwgLTEpO1xufTtcbiIsInZhciBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0Jyk7XG52YXIgY2xhc3NvZlJhdyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgVE9fU1RSSU5HX1RBRyA9IHdlbGxLbm93blN5bWJvbCgndG9TdHJpbmdUYWcnKTtcbi8vIEVTMyB3cm9uZyBoZXJlXG52YXIgQ09SUkVDVF9BUkdVTUVOVFMgPSBjbGFzc29mUmF3KGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA9PSAnQXJndW1lbnRzJztcblxuLy8gZmFsbGJhY2sgZm9yIElFMTEgU2NyaXB0IEFjY2VzcyBEZW5pZWQgZXJyb3JcbnZhciB0cnlHZXQgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICB0cnkge1xuICAgIHJldHVybiBpdFtrZXldO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG59O1xuXG4vLyBnZXR0aW5nIHRhZyBmcm9tIEVTNisgYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgXG5tb2R1bGUuZXhwb3J0cyA9IFRPX1NUUklOR19UQUdfU1VQUE9SVCA/IGNsYXNzb2ZSYXcgOiBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIE8sIHRhZywgcmVzdWx0O1xuICByZXR1cm4gaXQgPT09IHVuZGVmaW5lZCA/ICdVbmRlZmluZWQnIDogaXQgPT09IG51bGwgPyAnTnVsbCdcbiAgICAvLyBAQHRvU3RyaW5nVGFnIGNhc2VcbiAgICA6IHR5cGVvZiAodGFnID0gdHJ5R2V0KE8gPSBPYmplY3QoaXQpLCBUT19TVFJJTkdfVEFHKSkgPT0gJ3N0cmluZycgPyB0YWdcbiAgICAvLyBidWlsdGluVGFnIGNhc2VcbiAgICA6IENPUlJFQ1RfQVJHVU1FTlRTID8gY2xhc3NvZlJhdyhPKVxuICAgIC8vIEVTMyBhcmd1bWVudHMgZmFsbGJhY2tcbiAgICA6IChyZXN1bHQgPSBjbGFzc29mUmF3KE8pKSA9PSAnT2JqZWN0JyAmJiB0eXBlb2YgTy5jYWxsZWUgPT0gJ2Z1bmN0aW9uJyA/ICdBcmd1bWVudHMnIDogcmVzdWx0O1xufTtcbiIsInZhciBoYXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzJyk7XG52YXIgb3duS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vd24ta2V5cycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSkge1xuICB2YXIga2V5cyA9IG93bktleXMoc291cmNlKTtcbiAgdmFyIGRlZmluZVByb3BlcnR5ID0gZGVmaW5lUHJvcGVydHlNb2R1bGUuZjtcbiAgdmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZS5mO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICBpZiAoIWhhcyh0YXJnZXQsIGtleSkpIGRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTtcbiAgfVxufTtcbiIsInZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBERVNDUklQVE9SUyA/IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5TW9kdWxlLmYob2JqZWN0LCBrZXksIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCB2YWx1ZSkpO1xufSA6IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgcmV0dXJuIG9iamVjdDtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChiaXRtYXAsIHZhbHVlKSB7XG4gIHJldHVybiB7XG4gICAgZW51bWVyYWJsZTogIShiaXRtYXAgJiAxKSxcbiAgICBjb25maWd1cmFibGU6ICEoYml0bWFwICYgMiksXG4gICAgd3JpdGFibGU6ICEoYml0bWFwICYgNCksXG4gICAgdmFsdWU6IHZhbHVlXG4gIH07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByaW1pdGl2ZScpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIHZhciBwcm9wZXJ0eUtleSA9IHRvUHJpbWl0aXZlKGtleSk7XG4gIGlmIChwcm9wZXJ0eUtleSBpbiBvYmplY3QpIGRlZmluZVByb3BlcnR5TW9kdWxlLmYob2JqZWN0LCBwcm9wZXJ0eUtleSwgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDAsIHZhbHVlKSk7XG4gIGVsc2Ugb2JqZWN0W3Byb3BlcnR5S2V5XSA9IHZhbHVlO1xufTtcbiIsInZhciBwYXRoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BhdGgnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzJyk7XG52YXIgd3JhcHBlZFdlbGxLbm93blN5bWJvbE1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC13cmFwcGVkJyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE5BTUUpIHtcbiAgdmFyIFN5bWJvbCA9IHBhdGguU3ltYm9sIHx8IChwYXRoLlN5bWJvbCA9IHt9KTtcbiAgaWYgKCFoYXMoU3ltYm9sLCBOQU1FKSkgZGVmaW5lUHJvcGVydHkoU3ltYm9sLCBOQU1FLCB7XG4gICAgdmFsdWU6IHdyYXBwZWRXZWxsS25vd25TeW1ib2xNb2R1bGUuZihOQU1FKVxuICB9KTtcbn07XG4iLCJ2YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxuLy8gVGhhbmsncyBJRTggZm9yIGhpcyBmdW5ueSBkZWZpbmVQcm9wZXJ0eVxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAxLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KVsxXSAhPSA3O1xufSk7XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgZG9jdW1lbnQgPSBnbG9iYWwuZG9jdW1lbnQ7XG4vLyB0eXBlb2YgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCBpcyAnb2JqZWN0JyBpbiBvbGQgSUVcbnZhciBFWElTVFMgPSBpc09iamVjdChkb2N1bWVudCkgJiYgaXNPYmplY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBFWElTVFMgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGl0KSA6IHt9O1xufTtcbiIsIi8vIGl0ZXJhYmxlIERPTSBjb2xsZWN0aW9uc1xuLy8gZmxhZyAtIGBpdGVyYWJsZWAgaW50ZXJmYWNlIC0gJ2VudHJpZXMnLCAna2V5cycsICd2YWx1ZXMnLCAnZm9yRWFjaCcgbWV0aG9kc1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gIENTU1J1bGVMaXN0OiAwLFxuICBDU1NTdHlsZURlY2xhcmF0aW9uOiAwLFxuICBDU1NWYWx1ZUxpc3Q6IDAsXG4gIENsaWVudFJlY3RMaXN0OiAwLFxuICBET01SZWN0TGlzdDogMCxcbiAgRE9NU3RyaW5nTGlzdDogMCxcbiAgRE9NVG9rZW5MaXN0OiAxLFxuICBEYXRhVHJhbnNmZXJJdGVtTGlzdDogMCxcbiAgRmlsZUxpc3Q6IDAsXG4gIEhUTUxBbGxDb2xsZWN0aW9uOiAwLFxuICBIVE1MQ29sbGVjdGlvbjogMCxcbiAgSFRNTEZvcm1FbGVtZW50OiAwLFxuICBIVE1MU2VsZWN0RWxlbWVudDogMCxcbiAgTWVkaWFMaXN0OiAwLFxuICBNaW1lVHlwZUFycmF5OiAwLFxuICBOYW1lZE5vZGVNYXA6IDAsXG4gIE5vZGVMaXN0OiAxLFxuICBQYWludFJlcXVlc3RMaXN0OiAwLFxuICBQbHVnaW46IDAsXG4gIFBsdWdpbkFycmF5OiAwLFxuICBTVkdMZW5ndGhMaXN0OiAwLFxuICBTVkdOdW1iZXJMaXN0OiAwLFxuICBTVkdQYXRoU2VnTGlzdDogMCxcbiAgU1ZHUG9pbnRMaXN0OiAwLFxuICBTVkdTdHJpbmdMaXN0OiAwLFxuICBTVkdUcmFuc2Zvcm1MaXN0OiAwLFxuICBTb3VyY2VCdWZmZXJMaXN0OiAwLFxuICBTdHlsZVNoZWV0TGlzdDogMCxcbiAgVGV4dFRyYWNrQ3VlTGlzdDogMCxcbiAgVGV4dFRyYWNrTGlzdDogMCxcbiAgVG91Y2hMaXN0OiAwXG59O1xuIiwidmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IC8oaXBob25lfGlwb2R8aXBhZCkuKmFwcGxld2Via2l0L2kudGVzdCh1c2VyQWdlbnQpO1xuIiwidmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJbignbmF2aWdhdG9yJywgJ3VzZXJBZ2VudCcpIHx8ICcnO1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQnKTtcblxudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbnZhciB2ZXJzaW9ucyA9IHByb2Nlc3MgJiYgcHJvY2Vzcy52ZXJzaW9ucztcbnZhciB2OCA9IHZlcnNpb25zICYmIHZlcnNpb25zLnY4O1xudmFyIG1hdGNoLCB2ZXJzaW9uO1xuXG5pZiAodjgpIHtcbiAgbWF0Y2ggPSB2OC5zcGxpdCgnLicpO1xuICB2ZXJzaW9uID0gbWF0Y2hbMF0gKyBtYXRjaFsxXTtcbn0gZWxzZSBpZiAodXNlckFnZW50KSB7XG4gIG1hdGNoID0gdXNlckFnZW50Lm1hdGNoKC9FZGdlXFwvKFxcZCspLyk7XG4gIGlmICghbWF0Y2ggfHwgbWF0Y2hbMV0gPj0gNzQpIHtcbiAgICBtYXRjaCA9IHVzZXJBZ2VudC5tYXRjaCgvQ2hyb21lXFwvKFxcZCspLyk7XG4gICAgaWYgKG1hdGNoKSB2ZXJzaW9uID0gbWF0Y2hbMV07XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB2ZXJzaW9uICYmICt2ZXJzaW9uO1xuIiwiLy8gSUU4LSBkb24ndCBlbnVtIGJ1ZyBrZXlzXG5tb2R1bGUuZXhwb3J0cyA9IFtcbiAgJ2NvbnN0cnVjdG9yJyxcbiAgJ2hhc093blByb3BlcnR5JyxcbiAgJ2lzUHJvdG90eXBlT2YnLFxuICAncHJvcGVydHlJc0VudW1lcmFibGUnLFxuICAndG9Mb2NhbGVTdHJpbmcnLFxuICAndG9TdHJpbmcnLFxuICAndmFsdWVPZidcbl07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJykuZjtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVkZWZpbmUnKTtcbnZhciBzZXRHbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWdsb2JhbCcpO1xudmFyIGNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzJyk7XG52YXIgaXNGb3JjZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtZm9yY2VkJyk7XG5cbi8qXG4gIG9wdGlvbnMudGFyZ2V0ICAgICAgLSBuYW1lIG9mIHRoZSB0YXJnZXQgb2JqZWN0XG4gIG9wdGlvbnMuZ2xvYmFsICAgICAgLSB0YXJnZXQgaXMgdGhlIGdsb2JhbCBvYmplY3RcbiAgb3B0aW9ucy5zdGF0ICAgICAgICAtIGV4cG9ydCBhcyBzdGF0aWMgbWV0aG9kcyBvZiB0YXJnZXRcbiAgb3B0aW9ucy5wcm90byAgICAgICAtIGV4cG9ydCBhcyBwcm90b3R5cGUgbWV0aG9kcyBvZiB0YXJnZXRcbiAgb3B0aW9ucy5yZWFsICAgICAgICAtIHJlYWwgcHJvdG90eXBlIG1ldGhvZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMuZm9yY2VkICAgICAgLSBleHBvcnQgZXZlbiBpZiB0aGUgbmF0aXZlIGZlYXR1cmUgaXMgYXZhaWxhYmxlXG4gIG9wdGlvbnMuYmluZCAgICAgICAgLSBiaW5kIG1ldGhvZHMgdG8gdGhlIHRhcmdldCwgcmVxdWlyZWQgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLndyYXAgICAgICAgIC0gd3JhcCBjb25zdHJ1Y3RvcnMgdG8gcHJldmVudGluZyBnbG9iYWwgcG9sbHV0aW9uLCByZXF1aXJlZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMudW5zYWZlICAgICAgLSB1c2UgdGhlIHNpbXBsZSBhc3NpZ25tZW50IG9mIHByb3BlcnR5IGluc3RlYWQgb2YgZGVsZXRlICsgZGVmaW5lUHJvcGVydHlcbiAgb3B0aW9ucy5zaGFtICAgICAgICAtIGFkZCBhIGZsYWcgdG8gbm90IGNvbXBsZXRlbHkgZnVsbCBwb2x5ZmlsbHNcbiAgb3B0aW9ucy5lbnVtZXJhYmxlICAtIGV4cG9ydCBhcyBlbnVtZXJhYmxlIHByb3BlcnR5XG4gIG9wdGlvbnMubm9UYXJnZXRHZXQgLSBwcmV2ZW50IGNhbGxpbmcgYSBnZXR0ZXIgb24gdGFyZ2V0XG4qL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3B0aW9ucywgc291cmNlKSB7XG4gIHZhciBUQVJHRVQgPSBvcHRpb25zLnRhcmdldDtcbiAgdmFyIEdMT0JBTCA9IG9wdGlvbnMuZ2xvYmFsO1xuICB2YXIgU1RBVElDID0gb3B0aW9ucy5zdGF0O1xuICB2YXIgRk9SQ0VELCB0YXJnZXQsIGtleSwgdGFyZ2V0UHJvcGVydHksIHNvdXJjZVByb3BlcnR5LCBkZXNjcmlwdG9yO1xuICBpZiAoR0xPQkFMKSB7XG4gICAgdGFyZ2V0ID0gZ2xvYmFsO1xuICB9IGVsc2UgaWYgKFNUQVRJQykge1xuICAgIHRhcmdldCA9IGdsb2JhbFtUQVJHRVRdIHx8IHNldEdsb2JhbChUQVJHRVQsIHt9KTtcbiAgfSBlbHNlIHtcbiAgICB0YXJnZXQgPSAoZ2xvYmFsW1RBUkdFVF0gfHwge30pLnByb3RvdHlwZTtcbiAgfVxuICBpZiAodGFyZ2V0KSBmb3IgKGtleSBpbiBzb3VyY2UpIHtcbiAgICBzb3VyY2VQcm9wZXJ0eSA9IHNvdXJjZVtrZXldO1xuICAgIGlmIChvcHRpb25zLm5vVGFyZ2V0R2V0KSB7XG4gICAgICBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KTtcbiAgICAgIHRhcmdldFByb3BlcnR5ID0gZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLnZhbHVlO1xuICAgIH0gZWxzZSB0YXJnZXRQcm9wZXJ0eSA9IHRhcmdldFtrZXldO1xuICAgIEZPUkNFRCA9IGlzRm9yY2VkKEdMT0JBTCA/IGtleSA6IFRBUkdFVCArIChTVEFUSUMgPyAnLicgOiAnIycpICsga2V5LCBvcHRpb25zLmZvcmNlZCk7XG4gICAgLy8gY29udGFpbmVkIGluIHRhcmdldFxuICAgIGlmICghRk9SQ0VEICYmIHRhcmdldFByb3BlcnR5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh0eXBlb2Ygc291cmNlUHJvcGVydHkgPT09IHR5cGVvZiB0YXJnZXRQcm9wZXJ0eSkgY29udGludWU7XG4gICAgICBjb3B5Q29uc3RydWN0b3JQcm9wZXJ0aWVzKHNvdXJjZVByb3BlcnR5LCB0YXJnZXRQcm9wZXJ0eSk7XG4gICAgfVxuICAgIC8vIGFkZCBhIGZsYWcgdG8gbm90IGNvbXBsZXRlbHkgZnVsbCBwb2x5ZmlsbHNcbiAgICBpZiAob3B0aW9ucy5zaGFtIHx8ICh0YXJnZXRQcm9wZXJ0eSAmJiB0YXJnZXRQcm9wZXJ0eS5zaGFtKSkge1xuICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHNvdXJjZVByb3BlcnR5LCAnc2hhbScsIHRydWUpO1xuICAgIH1cbiAgICAvLyBleHRlbmQgZ2xvYmFsXG4gICAgcmVkZWZpbmUodGFyZ2V0LCBrZXksIHNvdXJjZVByb3BlcnR5LCBvcHRpb25zKTtcbiAgfVxufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gISFleGVjKCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YCBzaW5jZSBpdCdzIG1vdmVkIHRvIGVudHJ5IHBvaW50c1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5yZWdleHAuZXhlYycpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZGVmaW5lJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciByZWdleHBFeGVjID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1leGVjJyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xuXG52YXIgUkVQTEFDRV9TVVBQT1JUU19OQU1FRF9HUk9VUFMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyAjcmVwbGFjZSBuZWVkcyBidWlsdC1pbiBzdXBwb3J0IGZvciBuYW1lZCBncm91cHMuXG4gIC8vICNtYXRjaCB3b3JrcyBmaW5lIGJlY2F1c2UgaXQganVzdCByZXR1cm4gdGhlIGV4ZWMgcmVzdWx0cywgZXZlbiBpZiBpdCBoYXNcbiAgLy8gYSBcImdyb3BzXCIgcHJvcGVydHkuXG4gIHZhciByZSA9IC8uLztcbiAgcmUuZXhlYyA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgcmVzdWx0Lmdyb3VwcyA9IHsgYTogJzcnIH07XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbiAgcmV0dXJuICcnLnJlcGxhY2UocmUsICckPGE+JykgIT09ICc3Jztcbn0pO1xuXG4vLyBJRSA8PSAxMSByZXBsYWNlcyAkMCB3aXRoIHRoZSB3aG9sZSBtYXRjaCwgYXMgaWYgaXQgd2FzICQmXG4vLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy82MDI0NjY2L2dldHRpbmctaWUtdG8tcmVwbGFjZS1hLXJlZ2V4LXdpdGgtdGhlLWxpdGVyYWwtc3RyaW5nLTBcbnZhciBSRVBMQUNFX0tFRVBTXyQwID0gKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICdhJy5yZXBsYWNlKC8uLywgJyQwJykgPT09ICckMCc7XG59KSgpO1xuXG52YXIgUkVQTEFDRSA9IHdlbGxLbm93blN5bWJvbCgncmVwbGFjZScpO1xuLy8gU2FmYXJpIDw9IDEzLjAuMyg/KSBzdWJzdGl0dXRlcyBudGggY2FwdHVyZSB3aGVyZSBuPm0gd2l0aCBhbiBlbXB0eSBzdHJpbmdcbnZhciBSRUdFWFBfUkVQTEFDRV9TVUJTVElUVVRFU19VTkRFRklORURfQ0FQVFVSRSA9IChmdW5jdGlvbiAoKSB7XG4gIGlmICgvLi9bUkVQTEFDRV0pIHtcbiAgICByZXR1cm4gLy4vW1JFUExBQ0VdKCdhJywgJyQwJykgPT09ICcnO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn0pKCk7XG5cbi8vIENocm9tZSA1MSBoYXMgYSBidWdneSBcInNwbGl0XCIgaW1wbGVtZW50YXRpb24gd2hlbiBSZWdFeHAjZXhlYyAhPT0gbmF0aXZlRXhlY1xuLy8gV2VleCBKUyBoYXMgZnJvemVuIGJ1aWx0LWluIHByb3RvdHlwZXMsIHNvIHVzZSB0cnkgLyBjYXRjaCB3cmFwcGVyXG52YXIgU1BMSVRfV09SS1NfV0lUSF9PVkVSV1JJVFRFTl9FWEVDID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHJlID0gLyg/OikvO1xuICB2YXIgb3JpZ2luYWxFeGVjID0gcmUuZXhlYztcbiAgcmUuZXhlYyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG9yaWdpbmFsRXhlYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9O1xuICB2YXIgcmVzdWx0ID0gJ2FiJy5zcGxpdChyZSk7XG4gIHJldHVybiByZXN1bHQubGVuZ3RoICE9PSAyIHx8IHJlc3VsdFswXSAhPT0gJ2EnIHx8IHJlc3VsdFsxXSAhPT0gJ2InO1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEtFWSwgbGVuZ3RoLCBleGVjLCBzaGFtKSB7XG4gIHZhciBTWU1CT0wgPSB3ZWxsS25vd25TeW1ib2woS0VZKTtcblxuICB2YXIgREVMRUdBVEVTX1RPX1NZTUJPTCA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgLy8gU3RyaW5nIG1ldGhvZHMgY2FsbCBzeW1ib2wtbmFtZWQgUmVnRXAgbWV0aG9kc1xuICAgIHZhciBPID0ge307XG4gICAgT1tTWU1CT0xdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfTtcbiAgICByZXR1cm4gJydbS0VZXShPKSAhPSA3O1xuICB9KTtcblxuICB2YXIgREVMRUdBVEVTX1RPX0VYRUMgPSBERUxFR0FURVNfVE9fU1lNQk9MICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgLy8gU3ltYm9sLW5hbWVkIFJlZ0V4cCBtZXRob2RzIGNhbGwgLmV4ZWNcbiAgICB2YXIgZXhlY0NhbGxlZCA9IGZhbHNlO1xuICAgIHZhciByZSA9IC9hLztcblxuICAgIGlmIChLRVkgPT09ICdzcGxpdCcpIHtcbiAgICAgIC8vIFdlIGNhbid0IHVzZSByZWFsIHJlZ2V4IGhlcmUgc2luY2UgaXQgY2F1c2VzIGRlb3B0aW1pemF0aW9uXG4gICAgICAvLyBhbmQgc2VyaW91cyBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvbiBpbiBWOFxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzMwNlxuICAgICAgcmUgPSB7fTtcbiAgICAgIC8vIFJlZ0V4cFtAQHNwbGl0XSBkb2Vzbid0IGNhbGwgdGhlIHJlZ2V4J3MgZXhlYyBtZXRob2QsIGJ1dCBmaXJzdCBjcmVhdGVzXG4gICAgICAvLyBhIG5ldyBvbmUuIFdlIG5lZWQgdG8gcmV0dXJuIHRoZSBwYXRjaGVkIHJlZ2V4IHdoZW4gY3JlYXRpbmcgdGhlIG5ldyBvbmUuXG4gICAgICByZS5jb25zdHJ1Y3RvciA9IHt9O1xuICAgICAgcmUuY29uc3RydWN0b3JbU1BFQ0lFU10gPSBmdW5jdGlvbiAoKSB7IHJldHVybiByZTsgfTtcbiAgICAgIHJlLmZsYWdzID0gJyc7XG4gICAgICByZVtTWU1CT0xdID0gLy4vW1NZTUJPTF07XG4gICAgfVxuXG4gICAgcmUuZXhlYyA9IGZ1bmN0aW9uICgpIHsgZXhlY0NhbGxlZCA9IHRydWU7IHJldHVybiBudWxsOyB9O1xuXG4gICAgcmVbU1lNQk9MXSgnJyk7XG4gICAgcmV0dXJuICFleGVjQ2FsbGVkO1xuICB9KTtcblxuICBpZiAoXG4gICAgIURFTEVHQVRFU19UT19TWU1CT0wgfHxcbiAgICAhREVMRUdBVEVTX1RPX0VYRUMgfHxcbiAgICAoS0VZID09PSAncmVwbGFjZScgJiYgIShcbiAgICAgIFJFUExBQ0VfU1VQUE9SVFNfTkFNRURfR1JPVVBTICYmXG4gICAgICBSRVBMQUNFX0tFRVBTXyQwICYmXG4gICAgICAhUkVHRVhQX1JFUExBQ0VfU1VCU1RJVFVURVNfVU5ERUZJTkVEX0NBUFRVUkVcbiAgICApKSB8fFxuICAgIChLRVkgPT09ICdzcGxpdCcgJiYgIVNQTElUX1dPUktTX1dJVEhfT1ZFUldSSVRURU5fRVhFQylcbiAgKSB7XG4gICAgdmFyIG5hdGl2ZVJlZ0V4cE1ldGhvZCA9IC8uL1tTWU1CT0xdO1xuICAgIHZhciBtZXRob2RzID0gZXhlYyhTWU1CT0wsICcnW0tFWV0sIGZ1bmN0aW9uIChuYXRpdmVNZXRob2QsIHJlZ2V4cCwgc3RyLCBhcmcyLCBmb3JjZVN0cmluZ01ldGhvZCkge1xuICAgICAgaWYgKHJlZ2V4cC5leGVjID09PSByZWdleHBFeGVjKSB7XG4gICAgICAgIGlmIChERUxFR0FURVNfVE9fU1lNQk9MICYmICFmb3JjZVN0cmluZ01ldGhvZCkge1xuICAgICAgICAgIC8vIFRoZSBuYXRpdmUgU3RyaW5nIG1ldGhvZCBhbHJlYWR5IGRlbGVnYXRlcyB0byBAQG1ldGhvZCAodGhpc1xuICAgICAgICAgIC8vIHBvbHlmaWxsZWQgZnVuY3Rpb24pLCBsZWFzaW5nIHRvIGluZmluaXRlIHJlY3Vyc2lvbi5cbiAgICAgICAgICAvLyBXZSBhdm9pZCBpdCBieSBkaXJlY3RseSBjYWxsaW5nIHRoZSBuYXRpdmUgQEBtZXRob2QgbWV0aG9kLlxuICAgICAgICAgIHJldHVybiB7IGRvbmU6IHRydWUsIHZhbHVlOiBuYXRpdmVSZWdFeHBNZXRob2QuY2FsbChyZWdleHAsIHN0ciwgYXJnMikgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBkb25lOiB0cnVlLCB2YWx1ZTogbmF0aXZlTWV0aG9kLmNhbGwoc3RyLCByZWdleHAsIGFyZzIpIH07XG4gICAgICB9XG4gICAgICByZXR1cm4geyBkb25lOiBmYWxzZSB9O1xuICAgIH0sIHtcbiAgICAgIFJFUExBQ0VfS0VFUFNfJDA6IFJFUExBQ0VfS0VFUFNfJDAsXG4gICAgICBSRUdFWFBfUkVQTEFDRV9TVUJTVElUVVRFU19VTkRFRklORURfQ0FQVFVSRTogUkVHRVhQX1JFUExBQ0VfU1VCU1RJVFVURVNfVU5ERUZJTkVEX0NBUFRVUkVcbiAgICB9KTtcbiAgICB2YXIgc3RyaW5nTWV0aG9kID0gbWV0aG9kc1swXTtcbiAgICB2YXIgcmVnZXhNZXRob2QgPSBtZXRob2RzWzFdO1xuXG4gICAgcmVkZWZpbmUoU3RyaW5nLnByb3RvdHlwZSwgS0VZLCBzdHJpbmdNZXRob2QpO1xuICAgIHJlZGVmaW5lKFJlZ0V4cC5wcm90b3R5cGUsIFNZTUJPTCwgbGVuZ3RoID09IDJcbiAgICAgIC8vIDIxLjIuNS44IFJlZ0V4cC5wcm90b3R5cGVbQEByZXBsYWNlXShzdHJpbmcsIHJlcGxhY2VWYWx1ZSlcbiAgICAgIC8vIDIxLjIuNS4xMSBSZWdFeHAucHJvdG90eXBlW0BAc3BsaXRdKHN0cmluZywgbGltaXQpXG4gICAgICA/IGZ1bmN0aW9uIChzdHJpbmcsIGFyZykgeyByZXR1cm4gcmVnZXhNZXRob2QuY2FsbChzdHJpbmcsIHRoaXMsIGFyZyk7IH1cbiAgICAgIC8vIDIxLjIuNS42IFJlZ0V4cC5wcm90b3R5cGVbQEBtYXRjaF0oc3RyaW5nKVxuICAgICAgLy8gMjEuMi41LjkgUmVnRXhwLnByb3RvdHlwZVtAQHNlYXJjaF0oc3RyaW5nKVxuICAgICAgOiBmdW5jdGlvbiAoc3RyaW5nKSB7IHJldHVybiByZWdleE1ldGhvZC5jYWxsKHN0cmluZywgdGhpcyk7IH1cbiAgICApO1xuICB9XG5cbiAgaWYgKHNoYW0pIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShSZWdFeHAucHJvdG90eXBlW1NZTUJPTF0sICdzaGFtJywgdHJ1ZSk7XG59O1xuIiwidmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWZ1bmN0aW9uJyk7XG5cbi8vIG9wdGlvbmFsIC8gc2ltcGxlIGNvbnRleHQgYmluZGluZ1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZm4sIHRoYXQsIGxlbmd0aCkge1xuICBhRnVuY3Rpb24oZm4pO1xuICBpZiAodGhhdCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZm47XG4gIHN3aXRjaCAobGVuZ3RoKSB7XG4gICAgY2FzZSAwOiByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCk7XG4gICAgfTtcbiAgICBjYXNlIDE6IHJldHVybiBmdW5jdGlvbiAoYSkge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSk7XG4gICAgfTtcbiAgICBjYXNlIDI6IHJldHVybiBmdW5jdGlvbiAoYSwgYikge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSwgYik7XG4gICAgfTtcbiAgICBjYXNlIDM6IHJldHVybiBmdW5jdGlvbiAoYSwgYiwgYykge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSwgYiwgYyk7XG4gICAgfTtcbiAgfVxuICByZXR1cm4gZnVuY3Rpb24gKC8qIC4uLmFyZ3MgKi8pIHtcbiAgICByZXR1cm4gZm4uYXBwbHkodGhhdCwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG4iLCJ2YXIgcGF0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wYXRoJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xuXG52YXIgYUZ1bmN0aW9uID0gZnVuY3Rpb24gKHZhcmlhYmxlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFyaWFibGUgPT0gJ2Z1bmN0aW9uJyA/IHZhcmlhYmxlIDogdW5kZWZpbmVkO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZXNwYWNlLCBtZXRob2QpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPCAyID8gYUZ1bmN0aW9uKHBhdGhbbmFtZXNwYWNlXSkgfHwgYUZ1bmN0aW9uKGdsb2JhbFtuYW1lc3BhY2VdKVxuICAgIDogcGF0aFtuYW1lc3BhY2VdICYmIHBhdGhbbmFtZXNwYWNlXVttZXRob2RdIHx8IGdsb2JhbFtuYW1lc3BhY2VdICYmIGdsb2JhbFtuYW1lc3BhY2VdW21ldGhvZF07XG59O1xuIiwidmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXQgIT0gdW5kZWZpbmVkKSByZXR1cm4gaXRbSVRFUkFUT1JdXG4gICAgfHwgaXRbJ0BAaXRlcmF0b3InXVxuICAgIHx8IEl0ZXJhdG9yc1tjbGFzc29mKGl0KV07XG59O1xuIiwidmFyIGNoZWNrID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCAmJiBpdC5NYXRoID09IE1hdGggJiYgaXQ7XG59O1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvODYjaXNzdWVjb21tZW50LTExNTc1OTAyOFxubW9kdWxlLmV4cG9ydHMgPVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgY2hlY2sodHlwZW9mIGdsb2JhbFRoaXMgPT0gJ29iamVjdCcgJiYgZ2xvYmFsVGhpcykgfHxcbiAgY2hlY2sodHlwZW9mIHdpbmRvdyA9PSAnb2JqZWN0JyAmJiB3aW5kb3cpIHx8XG4gIGNoZWNrKHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIHNlbGYpIHx8XG4gIGNoZWNrKHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsKSB8fFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbiIsInZhciBoYXNPd25Qcm9wZXJ0eSA9IHt9Lmhhc093blByb3BlcnR5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwga2V5KSB7XG4gIHJldHVybiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGl0LCBrZXkpO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0ge307XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhLCBiKSB7XG4gIHZhciBjb25zb2xlID0gZ2xvYmFsLmNvbnNvbGU7XG4gIGlmIChjb25zb2xlICYmIGNvbnNvbGUuZXJyb3IpIHtcbiAgICBhcmd1bWVudHMubGVuZ3RoID09PSAxID8gY29uc29sZS5lcnJvcihhKSA6IGNvbnNvbGUuZXJyb3IoYSwgYik7XG4gIH1cbn07XG4iLCJ2YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluKCdkb2N1bWVudCcsICdkb2N1bWVudEVsZW1lbnQnKTtcbiIsInZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgY3JlYXRlRWxlbWVudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudCcpO1xuXG4vLyBUaGFuaydzIElFOCBmb3IgaGlzIGZ1bm55IGRlZmluZVByb3BlcnR5XG5tb2R1bGUuZXhwb3J0cyA9ICFERVNDUklQVE9SUyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGNyZWF0ZUVsZW1lbnQoJ2RpdicpLCAnYScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH1cbiAgfSkuYSAhPSA3O1xufSk7XG4iLCJ2YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG5cbnZhciBzcGxpdCA9ICcnLnNwbGl0O1xuXG4vLyBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIGFuZCBub24tZW51bWVyYWJsZSBvbGQgVjggc3RyaW5nc1xubW9kdWxlLmV4cG9ydHMgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIHRocm93cyBhbiBlcnJvciBpbiByaGlubywgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL3JoaW5vL2lzc3Vlcy8zNDZcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICByZXR1cm4gIU9iamVjdCgneicpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApO1xufSkgPyBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGNsYXNzb2YoaXQpID09ICdTdHJpbmcnID8gc3BsaXQuY2FsbChpdCwgJycpIDogT2JqZWN0KGl0KTtcbn0gOiBPYmplY3Q7XG4iLCJ2YXIgc3RvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG5cbnZhciBmdW5jdGlvblRvU3RyaW5nID0gRnVuY3Rpb24udG9TdHJpbmc7XG5cbi8vIHRoaXMgaGVscGVyIGJyb2tlbiBpbiBgMy40LjEtMy40LjRgLCBzbyB3ZSBjYW4ndCB1c2UgYHNoYXJlZGAgaGVscGVyXG5pZiAodHlwZW9mIHN0b3JlLmluc3BlY3RTb3VyY2UgIT0gJ2Z1bmN0aW9uJykge1xuICBzdG9yZS5pbnNwZWN0U291cmNlID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uVG9TdHJpbmcuY2FsbChpdCk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RvcmUuaW5zcGVjdFNvdXJjZTtcbiIsInZhciBOQVRJVkVfV0VBS19NQVAgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmF0aXZlLXdlYWstbWFwJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBvYmplY3RIYXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzJyk7XG52YXIgc2hhcmVkS2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1rZXknKTtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG5cbnZhciBXZWFrTWFwID0gZ2xvYmFsLldlYWtNYXA7XG52YXIgc2V0LCBnZXQsIGhhcztcblxudmFyIGVuZm9yY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGhhcyhpdCkgPyBnZXQoaXQpIDogc2V0KGl0LCB7fSk7XG59O1xuXG52YXIgZ2V0dGVyRm9yID0gZnVuY3Rpb24gKFRZUEUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChpdCkge1xuICAgIHZhciBzdGF0ZTtcbiAgICBpZiAoIWlzT2JqZWN0KGl0KSB8fCAoc3RhdGUgPSBnZXQoaXQpKS50eXBlICE9PSBUWVBFKSB7XG4gICAgICB0aHJvdyBUeXBlRXJyb3IoJ0luY29tcGF0aWJsZSByZWNlaXZlciwgJyArIFRZUEUgKyAnIHJlcXVpcmVkJyk7XG4gICAgfSByZXR1cm4gc3RhdGU7XG4gIH07XG59O1xuXG5pZiAoTkFUSVZFX1dFQUtfTUFQKSB7XG4gIHZhciBzdG9yZSA9IG5ldyBXZWFrTWFwKCk7XG4gIHZhciB3bWdldCA9IHN0b3JlLmdldDtcbiAgdmFyIHdtaGFzID0gc3RvcmUuaGFzO1xuICB2YXIgd21zZXQgPSBzdG9yZS5zZXQ7XG4gIHNldCA9IGZ1bmN0aW9uIChpdCwgbWV0YWRhdGEpIHtcbiAgICB3bXNldC5jYWxsKHN0b3JlLCBpdCwgbWV0YWRhdGEpO1xuICAgIHJldHVybiBtZXRhZGF0YTtcbiAgfTtcbiAgZ2V0ID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIHdtZ2V0LmNhbGwoc3RvcmUsIGl0KSB8fCB7fTtcbiAgfTtcbiAgaGFzID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIHdtaGFzLmNhbGwoc3RvcmUsIGl0KTtcbiAgfTtcbn0gZWxzZSB7XG4gIHZhciBTVEFURSA9IHNoYXJlZEtleSgnc3RhdGUnKTtcbiAgaGlkZGVuS2V5c1tTVEFURV0gPSB0cnVlO1xuICBzZXQgPSBmdW5jdGlvbiAoaXQsIG1ldGFkYXRhKSB7XG4gICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KGl0LCBTVEFURSwgbWV0YWRhdGEpO1xuICAgIHJldHVybiBtZXRhZGF0YTtcbiAgfTtcbiAgZ2V0ID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIG9iamVjdEhhcyhpdCwgU1RBVEUpID8gaXRbU1RBVEVdIDoge307XG4gIH07XG4gIGhhcyA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBvYmplY3RIYXMoaXQsIFNUQVRFKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldDogc2V0LFxuICBnZXQ6IGdldCxcbiAgaGFzOiBoYXMsXG4gIGVuZm9yY2U6IGVuZm9yY2UsXG4gIGdldHRlckZvcjogZ2V0dGVyRm9yXG59O1xuIiwidmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcblxudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG4vLyBjaGVjayBvbiBkZWZhdWx0IEFycmF5IGl0ZXJhdG9yXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgIT09IHVuZGVmaW5lZCAmJiAoSXRlcmF0b3JzLkFycmF5ID09PSBpdCB8fCBBcnJheVByb3RvdHlwZVtJVEVSQVRPUl0gPT09IGl0KTtcbn07XG4iLCJ2YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xuXG4vLyBgSXNBcnJheWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1pc2FycmF5XG5tb2R1bGUuZXhwb3J0cyA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gaXNBcnJheShhcmcpIHtcbiAgcmV0dXJuIGNsYXNzb2YoYXJnKSA9PSAnQXJyYXknO1xufTtcbiIsInZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG52YXIgcmVwbGFjZW1lbnQgPSAvI3xcXC5wcm90b3R5cGVcXC4vO1xuXG52YXIgaXNGb3JjZWQgPSBmdW5jdGlvbiAoZmVhdHVyZSwgZGV0ZWN0aW9uKSB7XG4gIHZhciB2YWx1ZSA9IGRhdGFbbm9ybWFsaXplKGZlYXR1cmUpXTtcbiAgcmV0dXJuIHZhbHVlID09IFBPTFlGSUxMID8gdHJ1ZVxuICAgIDogdmFsdWUgPT0gTkFUSVZFID8gZmFsc2VcbiAgICA6IHR5cGVvZiBkZXRlY3Rpb24gPT0gJ2Z1bmN0aW9uJyA/IGZhaWxzKGRldGVjdGlvbilcbiAgICA6ICEhZGV0ZWN0aW9uO1xufTtcblxudmFyIG5vcm1hbGl6ZSA9IGlzRm9yY2VkLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgcmV0dXJuIFN0cmluZyhzdHJpbmcpLnJlcGxhY2UocmVwbGFjZW1lbnQsICcuJykudG9Mb3dlckNhc2UoKTtcbn07XG5cbnZhciBkYXRhID0gaXNGb3JjZWQuZGF0YSA9IHt9O1xudmFyIE5BVElWRSA9IGlzRm9yY2VkLk5BVElWRSA9ICdOJztcbnZhciBQT0xZRklMTCA9IGlzRm9yY2VkLlBPTFlGSUxMID0gJ1AnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzRm9yY2VkO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PT0gJ29iamVjdCcgPyBpdCAhPT0gbnVsbCA6IHR5cGVvZiBpdCA9PT0gJ2Z1bmN0aW9uJztcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZhbHNlO1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIE1BVENIID0gd2VsbEtub3duU3ltYm9sKCdtYXRjaCcpO1xuXG4vLyBgSXNSZWdFeHBgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtaXNyZWdleHBcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBpc1JlZ0V4cDtcbiAgcmV0dXJuIGlzT2JqZWN0KGl0KSAmJiAoKGlzUmVnRXhwID0gaXRbTUFUQ0hdKSAhPT0gdW5kZWZpbmVkID8gISFpc1JlZ0V4cCA6IGNsYXNzb2YoaXQpID09ICdSZWdFeHAnKTtcbn07XG4iLCJ2YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgaXNBcnJheUl0ZXJhdG9yTWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5LWl0ZXJhdG9yLW1ldGhvZCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCcpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgZ2V0SXRlcmF0b3JNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xudmFyIGNhbGxXaXRoU2FmZUl0ZXJhdGlvbkNsb3NpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2FsbC13aXRoLXNhZmUtaXRlcmF0aW9uLWNsb3NpbmcnKTtcblxudmFyIFJlc3VsdCA9IGZ1bmN0aW9uIChzdG9wcGVkLCByZXN1bHQpIHtcbiAgdGhpcy5zdG9wcGVkID0gc3RvcHBlZDtcbiAgdGhpcy5yZXN1bHQgPSByZXN1bHQ7XG59O1xuXG52YXIgaXRlcmF0ZSA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhYmxlLCBmbiwgdGhhdCwgQVNfRU5UUklFUywgSVNfSVRFUkFUT1IpIHtcbiAgdmFyIGJvdW5kRnVuY3Rpb24gPSBiaW5kKGZuLCB0aGF0LCBBU19FTlRSSUVTID8gMiA6IDEpO1xuICB2YXIgaXRlcmF0b3IsIGl0ZXJGbiwgaW5kZXgsIGxlbmd0aCwgcmVzdWx0LCBuZXh0LCBzdGVwO1xuXG4gIGlmIChJU19JVEVSQVRPUikge1xuICAgIGl0ZXJhdG9yID0gaXRlcmFibGU7XG4gIH0gZWxzZSB7XG4gICAgaXRlckZuID0gZ2V0SXRlcmF0b3JNZXRob2QoaXRlcmFibGUpO1xuICAgIGlmICh0eXBlb2YgaXRlckZuICE9ICdmdW5jdGlvbicpIHRocm93IFR5cGVFcnJvcignVGFyZ2V0IGlzIG5vdCBpdGVyYWJsZScpO1xuICAgIC8vIG9wdGltaXNhdGlvbiBmb3IgYXJyYXkgaXRlcmF0b3JzXG4gICAgaWYgKGlzQXJyYXlJdGVyYXRvck1ldGhvZChpdGVyRm4pKSB7XG4gICAgICBmb3IgKGluZGV4ID0gMCwgbGVuZ3RoID0gdG9MZW5ndGgoaXRlcmFibGUubGVuZ3RoKTsgbGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICAgICAgcmVzdWx0ID0gQVNfRU5UUklFU1xuICAgICAgICAgID8gYm91bmRGdW5jdGlvbihhbk9iamVjdChzdGVwID0gaXRlcmFibGVbaW5kZXhdKVswXSwgc3RlcFsxXSlcbiAgICAgICAgICA6IGJvdW5kRnVuY3Rpb24oaXRlcmFibGVbaW5kZXhdKTtcbiAgICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQgaW5zdGFuY2VvZiBSZXN1bHQpIHJldHVybiByZXN1bHQ7XG4gICAgICB9IHJldHVybiBuZXcgUmVzdWx0KGZhbHNlKTtcbiAgICB9XG4gICAgaXRlcmF0b3IgPSBpdGVyRm4uY2FsbChpdGVyYWJsZSk7XG4gIH1cblxuICBuZXh0ID0gaXRlcmF0b3IubmV4dDtcbiAgd2hpbGUgKCEoc3RlcCA9IG5leHQuY2FsbChpdGVyYXRvcikpLmRvbmUpIHtcbiAgICByZXN1bHQgPSBjYWxsV2l0aFNhZmVJdGVyYXRpb25DbG9zaW5nKGl0ZXJhdG9yLCBib3VuZEZ1bmN0aW9uLCBzdGVwLnZhbHVlLCBBU19FTlRSSUVTKTtcbiAgICBpZiAodHlwZW9mIHJlc3VsdCA9PSAnb2JqZWN0JyAmJiByZXN1bHQgJiYgcmVzdWx0IGluc3RhbmNlb2YgUmVzdWx0KSByZXR1cm4gcmVzdWx0O1xuICB9IHJldHVybiBuZXcgUmVzdWx0KGZhbHNlKTtcbn07XG5cbml0ZXJhdGUuc3RvcCA9IGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgcmV0dXJuIG5ldyBSZXN1bHQodHJ1ZSwgcmVzdWx0KTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpLmY7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xudmFyIG1hY3JvdGFzayA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90YXNrJykuc2V0O1xudmFyIElTX0lPUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtaW9zJyk7XG5cbnZhciBNdXRhdGlvbk9ic2VydmVyID0gZ2xvYmFsLk11dGF0aW9uT2JzZXJ2ZXIgfHwgZ2xvYmFsLldlYktpdE11dGF0aW9uT2JzZXJ2ZXI7XG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyIFByb21pc2UgPSBnbG9iYWwuUHJvbWlzZTtcbnZhciBJU19OT0RFID0gY2xhc3NvZihwcm9jZXNzKSA9PSAncHJvY2Vzcyc7XG4vLyBOb2RlLmpzIDExIHNob3dzIEV4cGVyaW1lbnRhbFdhcm5pbmcgb24gZ2V0dGluZyBgcXVldWVNaWNyb3Rhc2tgXG52YXIgcXVldWVNaWNyb3Rhc2tEZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ3F1ZXVlTWljcm90YXNrJyk7XG52YXIgcXVldWVNaWNyb3Rhc2sgPSBxdWV1ZU1pY3JvdGFza0Rlc2NyaXB0b3IgJiYgcXVldWVNaWNyb3Rhc2tEZXNjcmlwdG9yLnZhbHVlO1xuXG52YXIgZmx1c2gsIGhlYWQsIGxhc3QsIG5vdGlmeSwgdG9nZ2xlLCBub2RlLCBwcm9taXNlLCB0aGVuO1xuXG4vLyBtb2Rlcm4gZW5naW5lcyBoYXZlIHF1ZXVlTWljcm90YXNrIG1ldGhvZFxuaWYgKCFxdWV1ZU1pY3JvdGFzaykge1xuICBmbHVzaCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcGFyZW50LCBmbjtcbiAgICBpZiAoSVNfTk9ERSAmJiAocGFyZW50ID0gcHJvY2Vzcy5kb21haW4pKSBwYXJlbnQuZXhpdCgpO1xuICAgIHdoaWxlIChoZWFkKSB7XG4gICAgICBmbiA9IGhlYWQuZm47XG4gICAgICBoZWFkID0gaGVhZC5uZXh0O1xuICAgICAgdHJ5IHtcbiAgICAgICAgZm4oKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmIChoZWFkKSBub3RpZnkoKTtcbiAgICAgICAgZWxzZSBsYXN0ID0gdW5kZWZpbmVkO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICB9IGxhc3QgPSB1bmRlZmluZWQ7XG4gICAgaWYgKHBhcmVudCkgcGFyZW50LmVudGVyKCk7XG4gIH07XG5cbiAgLy8gTm9kZS5qc1xuICBpZiAoSVNfTk9ERSkge1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soZmx1c2gpO1xuICAgIH07XG4gIC8vIGJyb3dzZXJzIHdpdGggTXV0YXRpb25PYnNlcnZlciwgZXhjZXB0IGlPUyAtIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8zMzlcbiAgfSBlbHNlIGlmIChNdXRhdGlvbk9ic2VydmVyICYmICFJU19JT1MpIHtcbiAgICB0b2dnbGUgPSB0cnVlO1xuICAgIG5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnJyk7XG4gICAgbmV3IE11dGF0aW9uT2JzZXJ2ZXIoZmx1c2gpLm9ic2VydmUobm9kZSwgeyBjaGFyYWN0ZXJEYXRhOiB0cnVlIH0pO1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG5vZGUuZGF0YSA9IHRvZ2dsZSA9ICF0b2dnbGU7XG4gICAgfTtcbiAgLy8gZW52aXJvbm1lbnRzIHdpdGggbWF5YmUgbm9uLWNvbXBsZXRlbHkgY29ycmVjdCwgYnV0IGV4aXN0ZW50IFByb21pc2VcbiAgfSBlbHNlIGlmIChQcm9taXNlICYmIFByb21pc2UucmVzb2x2ZSkge1xuICAgIC8vIFByb21pc2UucmVzb2x2ZSB3aXRob3V0IGFuIGFyZ3VtZW50IHRocm93cyBhbiBlcnJvciBpbiBMRyBXZWJPUyAyXG4gICAgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgIHRoZW4gPSBwcm9taXNlLnRoZW47XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgdGhlbi5jYWxsKHByb21pc2UsIGZsdXNoKTtcbiAgICB9O1xuICAvLyBmb3Igb3RoZXIgZW52aXJvbm1lbnRzIC0gbWFjcm90YXNrIGJhc2VkIG9uOlxuICAvLyAtIHNldEltbWVkaWF0ZVxuICAvLyAtIE1lc3NhZ2VDaGFubmVsXG4gIC8vIC0gd2luZG93LnBvc3RNZXNzYWdcbiAgLy8gLSBvbnJlYWR5c3RhdGVjaGFuZ2VcbiAgLy8gLSBzZXRUaW1lb3V0XG4gIH0gZWxzZSB7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gc3RyYW5nZSBJRSArIHdlYnBhY2sgZGV2IHNlcnZlciBidWcgLSB1c2UgLmNhbGwoZ2xvYmFsKVxuICAgICAgbWFjcm90YXNrLmNhbGwoZ2xvYmFsLCBmbHVzaCk7XG4gICAgfTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHF1ZXVlTWljcm90YXNrIHx8IGZ1bmN0aW9uIChmbikge1xuICB2YXIgdGFzayA9IHsgZm46IGZuLCBuZXh0OiB1bmRlZmluZWQgfTtcbiAgaWYgKGxhc3QpIGxhc3QubmV4dCA9IHRhc2s7XG4gIGlmICghaGVhZCkge1xuICAgIGhlYWQgPSB0YXNrO1xuICAgIG5vdGlmeSgpO1xuICB9IGxhc3QgPSB0YXNrO1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2xvYmFsLlByb21pc2U7XG4iLCJ2YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhIU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gQ2hyb21lIDM4IFN5bWJvbCBoYXMgaW5jb3JyZWN0IHRvU3RyaW5nIGNvbnZlcnNpb25cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gIHJldHVybiAhU3RyaW5nKFN5bWJvbCgpKTtcbn0pO1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBpbnNwZWN0U291cmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luc3BlY3Qtc291cmNlJyk7XG5cbnZhciBXZWFrTWFwID0gZ2xvYmFsLldlYWtNYXA7XG5cbm1vZHVsZS5leHBvcnRzID0gdHlwZW9mIFdlYWtNYXAgPT09ICdmdW5jdGlvbicgJiYgL25hdGl2ZSBjb2RlLy50ZXN0KGluc3BlY3RTb3VyY2UoV2Vha01hcCkpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWZ1bmN0aW9uJyk7XG5cbnZhciBQcm9taXNlQ2FwYWJpbGl0eSA9IGZ1bmN0aW9uIChDKSB7XG4gIHZhciByZXNvbHZlLCByZWplY3Q7XG4gIHRoaXMucHJvbWlzZSA9IG5ldyBDKGZ1bmN0aW9uICgkJHJlc29sdmUsICQkcmVqZWN0KSB7XG4gICAgaWYgKHJlc29sdmUgIT09IHVuZGVmaW5lZCB8fCByZWplY3QgIT09IHVuZGVmaW5lZCkgdGhyb3cgVHlwZUVycm9yKCdCYWQgUHJvbWlzZSBjb25zdHJ1Y3RvcicpO1xuICAgIHJlc29sdmUgPSAkJHJlc29sdmU7XG4gICAgcmVqZWN0ID0gJCRyZWplY3Q7XG4gIH0pO1xuICB0aGlzLnJlc29sdmUgPSBhRnVuY3Rpb24ocmVzb2x2ZSk7XG4gIHRoaXMucmVqZWN0ID0gYUZ1bmN0aW9uKHJlamVjdCk7XG59O1xuXG4vLyAyNS40LjEuNSBOZXdQcm9taXNlQ2FwYWJpbGl0eShDKVxubW9kdWxlLmV4cG9ydHMuZiA9IGZ1bmN0aW9uIChDKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZUNhcGFiaWxpdHkoQyk7XG59O1xuIiwidmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGRlZmluZVByb3BlcnRpZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW51bS1idWcta2V5cycpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcbnZhciBodG1sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2h0bWwnKTtcbnZhciBkb2N1bWVudENyZWF0ZUVsZW1lbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQnKTtcbnZhciBzaGFyZWRLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLWtleScpO1xuXG52YXIgR1QgPSAnPic7XG52YXIgTFQgPSAnPCc7XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG52YXIgU0NSSVBUID0gJ3NjcmlwdCc7XG52YXIgSUVfUFJPVE8gPSBzaGFyZWRLZXkoJ0lFX1BST1RPJyk7XG5cbnZhciBFbXB0eUNvbnN0cnVjdG9yID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xuXG52YXIgc2NyaXB0VGFnID0gZnVuY3Rpb24gKGNvbnRlbnQpIHtcbiAgcmV0dXJuIExUICsgU0NSSVBUICsgR1QgKyBjb250ZW50ICsgTFQgKyAnLycgKyBTQ1JJUFQgKyBHVDtcbn07XG5cbi8vIENyZWF0ZSBvYmplY3Qgd2l0aCBmYWtlIGBudWxsYCBwcm90b3R5cGU6IHVzZSBBY3RpdmVYIE9iamVjdCB3aXRoIGNsZWFyZWQgcHJvdG90eXBlXG52YXIgTnVsbFByb3RvT2JqZWN0VmlhQWN0aXZlWCA9IGZ1bmN0aW9uIChhY3RpdmVYRG9jdW1lbnQpIHtcbiAgYWN0aXZlWERvY3VtZW50LndyaXRlKHNjcmlwdFRhZygnJykpO1xuICBhY3RpdmVYRG9jdW1lbnQuY2xvc2UoKTtcbiAgdmFyIHRlbXAgPSBhY3RpdmVYRG9jdW1lbnQucGFyZW50V2luZG93Lk9iamVjdDtcbiAgYWN0aXZlWERvY3VtZW50ID0gbnVsbDsgLy8gYXZvaWQgbWVtb3J5IGxlYWtcbiAgcmV0dXJuIHRlbXA7XG59O1xuXG4vLyBDcmVhdGUgb2JqZWN0IHdpdGggZmFrZSBgbnVsbGAgcHJvdG90eXBlOiB1c2UgaWZyYW1lIE9iamVjdCB3aXRoIGNsZWFyZWQgcHJvdG90eXBlXG52YXIgTnVsbFByb3RvT2JqZWN0VmlhSUZyYW1lID0gZnVuY3Rpb24gKCkge1xuICAvLyBUaHJhc2gsIHdhc3RlIGFuZCBzb2RvbXk6IElFIEdDIGJ1Z1xuICB2YXIgaWZyYW1lID0gZG9jdW1lbnRDcmVhdGVFbGVtZW50KCdpZnJhbWUnKTtcbiAgdmFyIEpTID0gJ2phdmEnICsgU0NSSVBUICsgJzonO1xuICB2YXIgaWZyYW1lRG9jdW1lbnQ7XG4gIGlmcmFtZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICBodG1sLmFwcGVuZENoaWxkKGlmcmFtZSk7XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy80NzVcbiAgaWZyYW1lLnNyYyA9IFN0cmluZyhKUyk7XG4gIGlmcmFtZURvY3VtZW50ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQ7XG4gIGlmcmFtZURvY3VtZW50Lm9wZW4oKTtcbiAgaWZyYW1lRG9jdW1lbnQud3JpdGUoc2NyaXB0VGFnKCdkb2N1bWVudC5GPU9iamVjdCcpKTtcbiAgaWZyYW1lRG9jdW1lbnQuY2xvc2UoKTtcbiAgcmV0dXJuIGlmcmFtZURvY3VtZW50LkY7XG59O1xuXG4vLyBDaGVjayBmb3IgZG9jdW1lbnQuZG9tYWluIGFuZCBhY3RpdmUgeCBzdXBwb3J0XG4vLyBObyBuZWVkIHRvIHVzZSBhY3RpdmUgeCBhcHByb2FjaCB3aGVuIGRvY3VtZW50LmRvbWFpbiBpcyBub3Qgc2V0XG4vLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2VzLXNoaW1zL2VzNS1zaGltL2lzc3Vlcy8xNTBcbi8vIHZhcmlhdGlvbiBvZiBodHRwczovL2dpdGh1Yi5jb20va2l0Y2FtYnJpZGdlL2VzNS1zaGltL2NvbW1pdC80ZjczOGFjMDY2MzQ2XG4vLyBhdm9pZCBJRSBHQyBidWdcbnZhciBhY3RpdmVYRG9jdW1lbnQ7XG52YXIgTnVsbFByb3RvT2JqZWN0ID0gZnVuY3Rpb24gKCkge1xuICB0cnkge1xuICAgIC8qIGdsb2JhbCBBY3RpdmVYT2JqZWN0ICovXG4gICAgYWN0aXZlWERvY3VtZW50ID0gZG9jdW1lbnQuZG9tYWluICYmIG5ldyBBY3RpdmVYT2JqZWN0KCdodG1sZmlsZScpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBpZ25vcmUgKi8gfVxuICBOdWxsUHJvdG9PYmplY3QgPSBhY3RpdmVYRG9jdW1lbnQgPyBOdWxsUHJvdG9PYmplY3RWaWFBY3RpdmVYKGFjdGl2ZVhEb2N1bWVudCkgOiBOdWxsUHJvdG9PYmplY3RWaWFJRnJhbWUoKTtcbiAgdmFyIGxlbmd0aCA9IGVudW1CdWdLZXlzLmxlbmd0aDtcbiAgd2hpbGUgKGxlbmd0aC0tKSBkZWxldGUgTnVsbFByb3RvT2JqZWN0W1BST1RPVFlQRV1bZW51bUJ1Z0tleXNbbGVuZ3RoXV07XG4gIHJldHVybiBOdWxsUHJvdG9PYmplY3QoKTtcbn07XG5cbmhpZGRlbktleXNbSUVfUFJPVE9dID0gdHJ1ZTtcblxuLy8gYE9iamVjdC5jcmVhdGVgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtb2JqZWN0LmNyZWF0ZVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuY3JlYXRlIHx8IGZ1bmN0aW9uIGNyZWF0ZShPLCBQcm9wZXJ0aWVzKSB7XG4gIHZhciByZXN1bHQ7XG4gIGlmIChPICE9PSBudWxsKSB7XG4gICAgRW1wdHlDb25zdHJ1Y3RvcltQUk9UT1RZUEVdID0gYW5PYmplY3QoTyk7XG4gICAgcmVzdWx0ID0gbmV3IEVtcHR5Q29uc3RydWN0b3IoKTtcbiAgICBFbXB0eUNvbnN0cnVjdG9yW1BST1RPVFlQRV0gPSBudWxsO1xuICAgIC8vIGFkZCBcIl9fcHJvdG9fX1wiIGZvciBPYmplY3QuZ2V0UHJvdG90eXBlT2YgcG9seWZpbGxcbiAgICByZXN1bHRbSUVfUFJPVE9dID0gTztcbiAgfSBlbHNlIHJlc3VsdCA9IE51bGxQcm90b09iamVjdCgpO1xuICByZXR1cm4gUHJvcGVydGllcyA9PT0gdW5kZWZpbmVkID8gcmVzdWx0IDogZGVmaW5lUHJvcGVydGllcyhyZXN1bHQsIFByb3BlcnRpZXMpO1xufTtcbiIsInZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBvYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzJyk7XG5cbi8vIGBPYmplY3QuZGVmaW5lUHJvcGVydGllc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydGllc1xubW9kdWxlLmV4cG9ydHMgPSBERVNDUklQVE9SUyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzIDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICB2YXIga2V5cyA9IG9iamVjdEtleXMoUHJvcGVydGllcyk7XG4gIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIGtleTtcbiAgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKE8sIGtleSA9IGtleXNbaW5kZXgrK10sIFByb3BlcnRpZXNba2V5XSk7XG4gIHJldHVybiBPO1xufTtcbiIsInZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlJyk7XG5cbnZhciBuYXRpdmVEZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcblxuLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0eWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydHlcbmV4cG9ydHMuZiA9IERFU0NSSVBUT1JTID8gbmF0aXZlRGVmaW5lUHJvcGVydHkgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gIGFuT2JqZWN0KEF0dHJpYnV0ZXMpO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuIG5hdGl2ZURlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIGlmICgnZ2V0JyBpbiBBdHRyaWJ1dGVzIHx8ICdzZXQnIGluIEF0dHJpYnV0ZXMpIHRocm93IFR5cGVFcnJvcignQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQnKTtcbiAgaWYgKCd2YWx1ZScgaW4gQXR0cmlidXRlcykgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gIHJldHVybiBPO1xufTtcbiIsInZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1wcm9wZXJ0eS1pcy1lbnVtZXJhYmxlJyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcycpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lJyk7XG5cbnZhciBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yXG5leHBvcnRzLmYgPSBERVNDUklQVE9SUyA/IG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvciA6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKSB7XG4gIE8gPSB0b0luZGV4ZWRPYmplY3QoTyk7XG4gIFAgPSB0b1ByaW1pdGl2ZShQLCB0cnVlKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKGhhcyhPLCBQKSkgcmV0dXJuIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcighcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUuZi5jYWxsKE8sIFApLCBPW1BdKTtcbn07XG4iLCJ2YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgbmF0aXZlR2V0T3duUHJvcGVydHlOYW1lcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpLmY7XG5cbnZhciB0b1N0cmluZyA9IHt9LnRvU3RyaW5nO1xuXG52YXIgd2luZG93TmFtZXMgPSB0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnICYmIHdpbmRvdyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc1xuICA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHdpbmRvdykgOiBbXTtcblxudmFyIGdldFdpbmRvd05hbWVzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIG5hdGl2ZUdldE93blByb3BlcnR5TmFtZXMoaXQpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiB3aW5kb3dOYW1lcy5zbGljZSgpO1xuICB9XG59O1xuXG4vLyBmYWxsYmFjayBmb3IgSUUxMSBidWdneSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB3aXRoIGlmcmFtZSBhbmQgd2luZG93XG5tb2R1bGUuZXhwb3J0cy5mID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhpdCkge1xuICByZXR1cm4gd2luZG93TmFtZXMgJiYgdG9TdHJpbmcuY2FsbChpdCkgPT0gJ1tvYmplY3QgV2luZG93XSdcbiAgICA/IGdldFdpbmRvd05hbWVzKGl0KVxuICAgIDogbmF0aXZlR2V0T3duUHJvcGVydHlOYW1lcyh0b0luZGV4ZWRPYmplY3QoaXQpKTtcbn07XG4iLCJ2YXIgaW50ZXJuYWxPYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW51bS1idWcta2V5cycpO1xuXG52YXIgaGlkZGVuS2V5cyA9IGVudW1CdWdLZXlzLmNvbmNhdCgnbGVuZ3RoJywgJ3Byb3RvdHlwZScpO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5bmFtZXNcbmV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHx8IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoTykge1xuICByZXR1cm4gaW50ZXJuYWxPYmplY3RLZXlzKE8sIGhpZGRlbktleXMpO1xufTtcbiIsImV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG4iLCJ2YXIgaGFzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcycpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGluZGV4T2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaW5jbHVkZXMnKS5pbmRleE9mO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBuYW1lcykge1xuICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdChvYmplY3QpO1xuICB2YXIgaSA9IDA7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGtleTtcbiAgZm9yIChrZXkgaW4gTykgIWhhcyhoaWRkZW5LZXlzLCBrZXkpICYmIGhhcyhPLCBrZXkpICYmIHJlc3VsdC5wdXNoKGtleSk7XG4gIC8vIERvbid0IGVudW0gYnVnICYgaGlkZGVuIGtleXNcbiAgd2hpbGUgKG5hbWVzLmxlbmd0aCA+IGkpIGlmIChoYXMoTywga2V5ID0gbmFtZXNbaSsrXSkpIHtcbiAgICB+aW5kZXhPZihyZXN1bHQsIGtleSkgfHwgcmVzdWx0LnB1c2goa2V5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsInZhciBpbnRlcm5hbE9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzJyk7XG5cbi8vIGBPYmplY3Qua2V5c2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1vYmplY3Qua2V5c1xubW9kdWxlLmV4cG9ydHMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiBrZXlzKE8pIHtcbiAgcmV0dXJuIGludGVybmFsT2JqZWN0S2V5cyhPLCBlbnVtQnVnS2V5cyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIG5hdGl2ZVByb3BlcnR5SXNFbnVtZXJhYmxlID0ge30ucHJvcGVydHlJc0VudW1lcmFibGU7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuLy8gTmFzaG9ybiB+IEpESzggYnVnXG52YXIgTkFTSE9STl9CVUcgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgJiYgIW5hdGl2ZVByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoeyAxOiAyIH0sIDEpO1xuXG4vLyBgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZWAgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1vYmplY3QucHJvdG90eXBlLnByb3BlcnR5aXNlbnVtZXJhYmxlXG5leHBvcnRzLmYgPSBOQVNIT1JOX0JVRyA/IGZ1bmN0aW9uIHByb3BlcnR5SXNFbnVtZXJhYmxlKFYpIHtcbiAgdmFyIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpcywgVik7XG4gIHJldHVybiAhIWRlc2NyaXB0b3IgJiYgZGVzY3JpcHRvci5lbnVtZXJhYmxlO1xufSA6IG5hdGl2ZVByb3BlcnR5SXNFbnVtZXJhYmxlO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIFRPX1NUUklOR19UQUdfU1VQUE9SVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmctdGFnLXN1cHBvcnQnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcblxuLy8gYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZ1xubW9kdWxlLmV4cG9ydHMgPSBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPyB7fS50b1N0cmluZyA6IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICByZXR1cm4gJ1tvYmplY3QgJyArIGNsYXNzb2YodGhpcykgKyAnXSc7XG59O1xuIiwidmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG5cbi8vIGFsbCBvYmplY3Qga2V5cywgaW5jbHVkZXMgbm9uLWVudW1lcmFibGUgYW5kIHN5bWJvbHNcbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJbignUmVmbGVjdCcsICdvd25LZXlzJykgfHwgZnVuY3Rpb24gb3duS2V5cyhpdCkge1xuICB2YXIga2V5cyA9IGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUuZihhbk9iamVjdChpdCkpO1xuICB2YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlLmY7XG4gIHJldHVybiBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPyBrZXlzLmNvbmNhdChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoaXQpKSA6IGtleXM7XG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnbG9iYWw7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHsgZXJyb3I6IGZhbHNlLCB2YWx1ZTogZXhlYygpIH07XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIHsgZXJyb3I6IHRydWUsIHZhbHVlOiBlcnJvciB9O1xuICB9XG59O1xuIiwidmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQywgeCkge1xuICBhbk9iamVjdChDKTtcbiAgaWYgKGlzT2JqZWN0KHgpICYmIHguY29uc3RydWN0b3IgPT09IEMpIHJldHVybiB4O1xuICB2YXIgcHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eS5mKEMpO1xuICB2YXIgcmVzb2x2ZSA9IHByb21pc2VDYXBhYmlsaXR5LnJlc29sdmU7XG4gIHJlc29sdmUoeCk7XG4gIHJldHVybiBwcm9taXNlQ2FwYWJpbGl0eS5wcm9taXNlO1xufTtcbiIsInZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWRlZmluZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIHNyYywgb3B0aW9ucykge1xuICBmb3IgKHZhciBrZXkgaW4gc3JjKSByZWRlZmluZSh0YXJnZXQsIGtleSwgc3JjW2tleV0sIG9wdGlvbnMpO1xuICByZXR1cm4gdGFyZ2V0O1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMnKTtcbnZhciBzZXRHbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWdsb2JhbCcpO1xudmFyIGluc3BlY3RTb3VyY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG5cbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXQ7XG52YXIgZW5mb3JjZUludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmVuZm9yY2U7XG52YXIgVEVNUExBVEUgPSBTdHJpbmcoU3RyaW5nKS5zcGxpdCgnU3RyaW5nJyk7XG5cbihtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBrZXksIHZhbHVlLCBvcHRpb25zKSB7XG4gIHZhciB1bnNhZmUgPSBvcHRpb25zID8gISFvcHRpb25zLnVuc2FmZSA6IGZhbHNlO1xuICB2YXIgc2ltcGxlID0gb3B0aW9ucyA/ICEhb3B0aW9ucy5lbnVtZXJhYmxlIDogZmFsc2U7XG4gIHZhciBub1RhcmdldEdldCA9IG9wdGlvbnMgPyAhIW9wdGlvbnMubm9UYXJnZXRHZXQgOiBmYWxzZTtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnZnVuY3Rpb24nKSB7XG4gICAgaWYgKHR5cGVvZiBrZXkgPT0gJ3N0cmluZycgJiYgIWhhcyh2YWx1ZSwgJ25hbWUnKSkgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHZhbHVlLCAnbmFtZScsIGtleSk7XG4gICAgZW5mb3JjZUludGVybmFsU3RhdGUodmFsdWUpLnNvdXJjZSA9IFRFTVBMQVRFLmpvaW4odHlwZW9mIGtleSA9PSAnc3RyaW5nJyA/IGtleSA6ICcnKTtcbiAgfVxuICBpZiAoTyA9PT0gZ2xvYmFsKSB7XG4gICAgaWYgKHNpbXBsZSkgT1trZXldID0gdmFsdWU7XG4gICAgZWxzZSBzZXRHbG9iYWwoa2V5LCB2YWx1ZSk7XG4gICAgcmV0dXJuO1xuICB9IGVsc2UgaWYgKCF1bnNhZmUpIHtcbiAgICBkZWxldGUgT1trZXldO1xuICB9IGVsc2UgaWYgKCFub1RhcmdldEdldCAmJiBPW2tleV0pIHtcbiAgICBzaW1wbGUgPSB0cnVlO1xuICB9XG4gIGlmIChzaW1wbGUpIE9ba2V5XSA9IHZhbHVlO1xuICBlbHNlIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShPLCBrZXksIHZhbHVlKTtcbi8vIGFkZCBmYWtlIEZ1bmN0aW9uI3RvU3RyaW5nIGZvciBjb3JyZWN0IHdvcmsgd3JhcHBlZCBtZXRob2RzIC8gY29uc3RydWN0b3JzIHdpdGggbWV0aG9kcyBsaWtlIExvRGFzaCBpc05hdGl2ZVxufSkoRnVuY3Rpb24ucHJvdG90eXBlLCAndG9TdHJpbmcnLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuIHR5cGVvZiB0aGlzID09ICdmdW5jdGlvbicgJiYgZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKS5zb3VyY2UgfHwgaW5zcGVjdFNvdXJjZSh0aGlzKTtcbn0pO1xuIiwidmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuL2NsYXNzb2YtcmF3Jyk7XG52YXIgcmVnZXhwRXhlYyA9IHJlcXVpcmUoJy4vcmVnZXhwLWV4ZWMnKTtcblxuLy8gYFJlZ0V4cEV4ZWNgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcmVnZXhwZXhlY1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoUiwgUykge1xuICB2YXIgZXhlYyA9IFIuZXhlYztcbiAgaWYgKHR5cGVvZiBleGVjID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdmFyIHJlc3VsdCA9IGV4ZWMuY2FsbChSLCBTKTtcbiAgICBpZiAodHlwZW9mIHJlc3VsdCAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IFR5cGVFcnJvcignUmVnRXhwIGV4ZWMgbWV0aG9kIHJldHVybmVkIHNvbWV0aGluZyBvdGhlciB0aGFuIGFuIE9iamVjdCBvciBudWxsJyk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBpZiAoY2xhc3NvZihSKSAhPT0gJ1JlZ0V4cCcpIHtcbiAgICB0aHJvdyBUeXBlRXJyb3IoJ1JlZ0V4cCNleGVjIGNhbGxlZCBvbiBpbmNvbXBhdGlibGUgcmVjZWl2ZXInKTtcbiAgfVxuXG4gIHJldHVybiByZWdleHBFeGVjLmNhbGwoUiwgUyk7XG59O1xuXG4iLCIndXNlIHN0cmljdCc7XG52YXIgcmVnZXhwRmxhZ3MgPSByZXF1aXJlKCcuL3JlZ2V4cC1mbGFncycpO1xudmFyIHN0aWNreUhlbHBlcnMgPSByZXF1aXJlKCcuL3JlZ2V4cC1zdGlja3ktaGVscGVycycpO1xuXG52YXIgbmF0aXZlRXhlYyA9IFJlZ0V4cC5wcm90b3R5cGUuZXhlYztcbi8vIFRoaXMgYWx3YXlzIHJlZmVycyB0byB0aGUgbmF0aXZlIGltcGxlbWVudGF0aW9uLCBiZWNhdXNlIHRoZVxuLy8gU3RyaW5nI3JlcGxhY2UgcG9seWZpbGwgdXNlcyAuL2ZpeC1yZWdleHAtd2VsbC1rbm93bi1zeW1ib2wtbG9naWMuanMsXG4vLyB3aGljaCBsb2FkcyB0aGlzIGZpbGUgYmVmb3JlIHBhdGNoaW5nIHRoZSBtZXRob2QuXG52YXIgbmF0aXZlUmVwbGFjZSA9IFN0cmluZy5wcm90b3R5cGUucmVwbGFjZTtcblxudmFyIHBhdGNoZWRFeGVjID0gbmF0aXZlRXhlYztcblxudmFyIFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyA9IChmdW5jdGlvbiAoKSB7XG4gIHZhciByZTEgPSAvYS87XG4gIHZhciByZTIgPSAvYiovZztcbiAgbmF0aXZlRXhlYy5jYWxsKHJlMSwgJ2EnKTtcbiAgbmF0aXZlRXhlYy5jYWxsKHJlMiwgJ2EnKTtcbiAgcmV0dXJuIHJlMS5sYXN0SW5kZXggIT09IDAgfHwgcmUyLmxhc3RJbmRleCAhPT0gMDtcbn0pKCk7XG5cbnZhciBVTlNVUFBPUlRFRF9ZID0gc3RpY2t5SGVscGVycy5VTlNVUFBPUlRFRF9ZIHx8IHN0aWNreUhlbHBlcnMuQlJPS0VOX0NBUkVUO1xuXG4vLyBub25wYXJ0aWNpcGF0aW5nIGNhcHR1cmluZyBncm91cCwgY29waWVkIGZyb20gZXM1LXNoaW0ncyBTdHJpbmcjc3BsaXQgcGF0Y2guXG52YXIgTlBDR19JTkNMVURFRCA9IC8oKT8/Ly5leGVjKCcnKVsxXSAhPT0gdW5kZWZpbmVkO1xuXG52YXIgUEFUQ0ggPSBVUERBVEVTX0xBU1RfSU5ERVhfV1JPTkcgfHwgTlBDR19JTkNMVURFRCB8fCBVTlNVUFBPUlRFRF9ZO1xuXG5pZiAoUEFUQ0gpIHtcbiAgcGF0Y2hlZEV4ZWMgPSBmdW5jdGlvbiBleGVjKHN0cikge1xuICAgIHZhciByZSA9IHRoaXM7XG4gICAgdmFyIGxhc3RJbmRleCwgcmVDb3B5LCBtYXRjaCwgaTtcbiAgICB2YXIgc3RpY2t5ID0gVU5TVVBQT1JURURfWSAmJiByZS5zdGlja3k7XG4gICAgdmFyIGZsYWdzID0gcmVnZXhwRmxhZ3MuY2FsbChyZSk7XG4gICAgdmFyIHNvdXJjZSA9IHJlLnNvdXJjZTtcbiAgICB2YXIgY2hhcnNBZGRlZCA9IDA7XG4gICAgdmFyIHN0ckNvcHkgPSBzdHI7XG5cbiAgICBpZiAoc3RpY2t5KSB7XG4gICAgICBmbGFncyA9IGZsYWdzLnJlcGxhY2UoJ3knLCAnJyk7XG4gICAgICBpZiAoZmxhZ3MuaW5kZXhPZignZycpID09PSAtMSkge1xuICAgICAgICBmbGFncyArPSAnZyc7XG4gICAgICB9XG5cbiAgICAgIHN0ckNvcHkgPSBTdHJpbmcoc3RyKS5zbGljZShyZS5sYXN0SW5kZXgpO1xuICAgICAgLy8gU3VwcG9ydCBhbmNob3JlZCBzdGlja3kgYmVoYXZpb3IuXG4gICAgICBpZiAocmUubGFzdEluZGV4ID4gMCAmJiAoIXJlLm11bHRpbGluZSB8fCByZS5tdWx0aWxpbmUgJiYgc3RyW3JlLmxhc3RJbmRleCAtIDFdICE9PSAnXFxuJykpIHtcbiAgICAgICAgc291cmNlID0gJyg/OiAnICsgc291cmNlICsgJyknO1xuICAgICAgICBzdHJDb3B5ID0gJyAnICsgc3RyQ29weTtcbiAgICAgICAgY2hhcnNBZGRlZCsrO1xuICAgICAgfVxuICAgICAgLy8gXig/ICsgcnggKyApIGlzIG5lZWRlZCwgaW4gY29tYmluYXRpb24gd2l0aCBzb21lIHN0ciBzbGljaW5nLCB0b1xuICAgICAgLy8gc2ltdWxhdGUgdGhlICd5JyBmbGFnLlxuICAgICAgcmVDb3B5ID0gbmV3IFJlZ0V4cCgnXig/OicgKyBzb3VyY2UgKyAnKScsIGZsYWdzKTtcbiAgICB9XG5cbiAgICBpZiAoTlBDR19JTkNMVURFRCkge1xuICAgICAgcmVDb3B5ID0gbmV3IFJlZ0V4cCgnXicgKyBzb3VyY2UgKyAnJCg/IVxcXFxzKScsIGZsYWdzKTtcbiAgICB9XG4gICAgaWYgKFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORykgbGFzdEluZGV4ID0gcmUubGFzdEluZGV4O1xuXG4gICAgbWF0Y2ggPSBuYXRpdmVFeGVjLmNhbGwoc3RpY2t5ID8gcmVDb3B5IDogcmUsIHN0ckNvcHkpO1xuXG4gICAgaWYgKHN0aWNreSkge1xuICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgIG1hdGNoLmlucHV0ID0gbWF0Y2guaW5wdXQuc2xpY2UoY2hhcnNBZGRlZCk7XG4gICAgICAgIG1hdGNoWzBdID0gbWF0Y2hbMF0uc2xpY2UoY2hhcnNBZGRlZCk7XG4gICAgICAgIG1hdGNoLmluZGV4ID0gcmUubGFzdEluZGV4O1xuICAgICAgICByZS5sYXN0SW5kZXggKz0gbWF0Y2hbMF0ubGVuZ3RoO1xuICAgICAgfSBlbHNlIHJlLmxhc3RJbmRleCA9IDA7XG4gICAgfSBlbHNlIGlmIChVUERBVEVTX0xBU1RfSU5ERVhfV1JPTkcgJiYgbWF0Y2gpIHtcbiAgICAgIHJlLmxhc3RJbmRleCA9IHJlLmdsb2JhbCA/IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoIDogbGFzdEluZGV4O1xuICAgIH1cbiAgICBpZiAoTlBDR19JTkNMVURFRCAmJiBtYXRjaCAmJiBtYXRjaC5sZW5ndGggPiAxKSB7XG4gICAgICAvLyBGaXggYnJvd3NlcnMgd2hvc2UgYGV4ZWNgIG1ldGhvZHMgZG9uJ3QgY29uc2lzdGVudGx5IHJldHVybiBgdW5kZWZpbmVkYFxuICAgICAgLy8gZm9yIE5QQ0csIGxpa2UgSUU4LiBOT1RFOiBUaGlzIGRvZXNuJyB3b3JrIGZvciAvKC4/KT8vXG4gICAgICBuYXRpdmVSZXBsYWNlLmNhbGwobWF0Y2hbMF0sIHJlQ29weSwgZnVuY3Rpb24gKCkge1xuICAgICAgICBmb3IgKGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAtIDI7IGkrKykge1xuICAgICAgICAgIGlmIChhcmd1bWVudHNbaV0gPT09IHVuZGVmaW5lZCkgbWF0Y2hbaV0gPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBtYXRjaDtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBwYXRjaGVkRXhlYztcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcblxuLy8gYFJlZ0V4cC5wcm90b3R5cGUuZmxhZ3NgIGdldHRlciBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtZ2V0LXJlZ2V4cC5wcm90b3R5cGUuZmxhZ3Ncbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgdGhhdCA9IGFuT2JqZWN0KHRoaXMpO1xuICB2YXIgcmVzdWx0ID0gJyc7XG4gIGlmICh0aGF0Lmdsb2JhbCkgcmVzdWx0ICs9ICdnJztcbiAgaWYgKHRoYXQuaWdub3JlQ2FzZSkgcmVzdWx0ICs9ICdpJztcbiAgaWYgKHRoYXQubXVsdGlsaW5lKSByZXN1bHQgKz0gJ20nO1xuICBpZiAodGhhdC5kb3RBbGwpIHJlc3VsdCArPSAncyc7XG4gIGlmICh0aGF0LnVuaWNvZGUpIHJlc3VsdCArPSAndSc7XG4gIGlmICh0aGF0LnN0aWNreSkgcmVzdWx0ICs9ICd5JztcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vZmFpbHMnKTtcblxuLy8gYmFiZWwtbWluaWZ5IHRyYW5zcGlsZXMgUmVnRXhwKCdhJywgJ3knKSAtPiAvYS95IGFuZCBpdCBjYXVzZXMgU3ludGF4RXJyb3IsXG4vLyBzbyB3ZSB1c2UgYW4gaW50ZXJtZWRpYXRlIGZ1bmN0aW9uLlxuZnVuY3Rpb24gUkUocywgZikge1xuICByZXR1cm4gUmVnRXhwKHMsIGYpO1xufVxuXG5leHBvcnRzLlVOU1VQUE9SVEVEX1kgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGJhYmVsLW1pbmlmeSB0cmFuc3BpbGVzIFJlZ0V4cCgnYScsICd5JykgLT4gL2EveSBhbmQgaXQgY2F1c2VzIFN5bnRheEVycm9yXG4gIHZhciByZSA9IFJFKCdhJywgJ3knKTtcbiAgcmUubGFzdEluZGV4ID0gMjtcbiAgcmV0dXJuIHJlLmV4ZWMoJ2FiY2QnKSAhPSBudWxsO1xufSk7XG5cbmV4cG9ydHMuQlJPS0VOX0NBUkVUID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD03NzM2ODdcbiAgdmFyIHJlID0gUkUoJ15yJywgJ2d5Jyk7XG4gIHJlLmxhc3RJbmRleCA9IDI7XG4gIHJldHVybiByZS5leGVjKCdzdHInKSAhPSBudWxsO1xufSk7XG4iLCIvLyBgUmVxdWlyZU9iamVjdENvZXJjaWJsZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZXF1aXJlb2JqZWN0Y29lcmNpYmxlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXQgPT0gdW5kZWZpbmVkKSB0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjYWxsIG1ldGhvZCBvbiBcIiArIGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHRyeSB7XG4gICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KGdsb2JhbCwga2V5LCB2YWx1ZSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgZ2xvYmFsW2tleV0gPSB2YWx1ZTtcbiAgfSByZXR1cm4gdmFsdWU7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENPTlNUUlVDVE9SX05BTUUpIHtcbiAgdmFyIENvbnN0cnVjdG9yID0gZ2V0QnVpbHRJbihDT05TVFJVQ1RPUl9OQU1FKTtcbiAgdmFyIGRlZmluZVByb3BlcnR5ID0gZGVmaW5lUHJvcGVydHlNb2R1bGUuZjtcblxuICBpZiAoREVTQ1JJUFRPUlMgJiYgQ29uc3RydWN0b3IgJiYgIUNvbnN0cnVjdG9yW1NQRUNJRVNdKSB7XG4gICAgZGVmaW5lUHJvcGVydHkoQ29uc3RydWN0b3IsIFNQRUNJRVMsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfVxuICAgIH0pO1xuICB9XG59O1xuIiwidmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBUQUcsIFNUQVRJQykge1xuICBpZiAoaXQgJiYgIWhhcyhpdCA9IFNUQVRJQyA/IGl0IDogaXQucHJvdG90eXBlLCBUT19TVFJJTkdfVEFHKSkge1xuICAgIGRlZmluZVByb3BlcnR5KGl0LCBUT19TVFJJTkdfVEFHLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgdmFsdWU6IFRBRyB9KTtcbiAgfVxufTtcbiIsInZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VpZCcpO1xuXG52YXIga2V5cyA9IHNoYXJlZCgna2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuIGtleXNba2V5XSB8fCAoa2V5c1trZXldID0gdWlkKGtleSkpO1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgc2V0R2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1nbG9iYWwnKTtcblxudmFyIFNIQVJFRCA9ICdfX2NvcmUtanNfc2hhcmVkX18nO1xudmFyIHN0b3JlID0gZ2xvYmFsW1NIQVJFRF0gfHwgc2V0R2xvYmFsKFNIQVJFRCwge30pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHN0b3JlO1xuIiwidmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIHN0b3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xuXG4obW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICByZXR1cm4gc3RvcmVba2V5XSB8fCAoc3RvcmVba2V5XSA9IHZhbHVlICE9PSB1bmRlZmluZWQgPyB2YWx1ZSA6IHt9KTtcbn0pKCd2ZXJzaW9ucycsIFtdKS5wdXNoKHtcbiAgdmVyc2lvbjogJzMuNi41JyxcbiAgbW9kZTogSVNfUFVSRSA/ICdwdXJlJyA6ICdnbG9iYWwnLFxuICBjb3B5cmlnaHQ6ICfCqSAyMDIwIERlbmlzIFB1c2hrYXJldiAoemxvaXJvY2sucnUpJ1xufSk7XG4iLCJ2YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtZnVuY3Rpb24nKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcblxuLy8gYFNwZWNpZXNDb25zdHJ1Y3RvcmAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1zcGVjaWVzY29uc3RydWN0b3Jcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIGRlZmF1bHRDb25zdHJ1Y3Rvcikge1xuICB2YXIgQyA9IGFuT2JqZWN0KE8pLmNvbnN0cnVjdG9yO1xuICB2YXIgUztcbiAgcmV0dXJuIEMgPT09IHVuZGVmaW5lZCB8fCAoUyA9IGFuT2JqZWN0KEMpW1NQRUNJRVNdKSA9PSB1bmRlZmluZWQgPyBkZWZhdWx0Q29uc3RydWN0b3IgOiBhRnVuY3Rpb24oUyk7XG59O1xuIiwidmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyJyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcblxuLy8gYFN0cmluZy5wcm90b3R5cGUueyBjb2RlUG9pbnRBdCwgYXQgfWAgbWV0aG9kcyBpbXBsZW1lbnRhdGlvblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChDT05WRVJUX1RPX1NUUklORykge1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBwb3MpIHtcbiAgICB2YXIgUyA9IFN0cmluZyhyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKCR0aGlzKSk7XG4gICAgdmFyIHBvc2l0aW9uID0gdG9JbnRlZ2VyKHBvcyk7XG4gICAgdmFyIHNpemUgPSBTLmxlbmd0aDtcbiAgICB2YXIgZmlyc3QsIHNlY29uZDtcbiAgICBpZiAocG9zaXRpb24gPCAwIHx8IHBvc2l0aW9uID49IHNpemUpIHJldHVybiBDT05WRVJUX1RPX1NUUklORyA/ICcnIDogdW5kZWZpbmVkO1xuICAgIGZpcnN0ID0gUy5jaGFyQ29kZUF0KHBvc2l0aW9uKTtcbiAgICByZXR1cm4gZmlyc3QgPCAweEQ4MDAgfHwgZmlyc3QgPiAweERCRkYgfHwgcG9zaXRpb24gKyAxID09PSBzaXplXG4gICAgICB8fCAoc2Vjb25kID0gUy5jaGFyQ29kZUF0KHBvc2l0aW9uICsgMSkpIDwgMHhEQzAwIHx8IHNlY29uZCA+IDB4REZGRlxuICAgICAgICA/IENPTlZFUlRfVE9fU1RSSU5HID8gUy5jaGFyQXQocG9zaXRpb24pIDogZmlyc3RcbiAgICAgICAgOiBDT05WRVJUX1RPX1NUUklORyA/IFMuc2xpY2UocG9zaXRpb24sIHBvc2l0aW9uICsgMikgOiAoZmlyc3QgLSAweEQ4MDAgPDwgMTApICsgKHNlY29uZCAtIDB4REMwMCkgKyAweDEwMDAwO1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBTdHJpbmcucHJvdG90eXBlLmNvZGVQb2ludEF0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5jb2RlcG9pbnRhdFxuICBjb2RlQXQ6IGNyZWF0ZU1ldGhvZChmYWxzZSksXG4gIC8vIGBTdHJpbmcucHJvdG90eXBlLmF0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21hdGhpYXNieW5lbnMvU3RyaW5nLnByb3RvdHlwZS5hdFxuICBjaGFyQXQ6IGNyZWF0ZU1ldGhvZCh0cnVlKVxufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBodG1sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2h0bWwnKTtcbnZhciBjcmVhdGVFbGVtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50Jyk7XG52YXIgSVNfSU9TID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy1pb3MnKTtcblxudmFyIGxvY2F0aW9uID0gZ2xvYmFsLmxvY2F0aW9uO1xudmFyIHNldCA9IGdsb2JhbC5zZXRJbW1lZGlhdGU7XG52YXIgY2xlYXIgPSBnbG9iYWwuY2xlYXJJbW1lZGlhdGU7XG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyIE1lc3NhZ2VDaGFubmVsID0gZ2xvYmFsLk1lc3NhZ2VDaGFubmVsO1xudmFyIERpc3BhdGNoID0gZ2xvYmFsLkRpc3BhdGNoO1xudmFyIGNvdW50ZXIgPSAwO1xudmFyIHF1ZXVlID0ge307XG52YXIgT05SRUFEWVNUQVRFQ0hBTkdFID0gJ29ucmVhZHlzdGF0ZWNoYW5nZSc7XG52YXIgZGVmZXIsIGNoYW5uZWwsIHBvcnQ7XG5cbnZhciBydW4gPSBmdW5jdGlvbiAoaWQpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICBpZiAocXVldWUuaGFzT3duUHJvcGVydHkoaWQpKSB7XG4gICAgdmFyIGZuID0gcXVldWVbaWRdO1xuICAgIGRlbGV0ZSBxdWV1ZVtpZF07XG4gICAgZm4oKTtcbiAgfVxufTtcblxudmFyIHJ1bm5lciA9IGZ1bmN0aW9uIChpZCkge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHJ1bihpZCk7XG4gIH07XG59O1xuXG52YXIgbGlzdGVuZXIgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgcnVuKGV2ZW50LmRhdGEpO1xufTtcblxudmFyIHBvc3QgPSBmdW5jdGlvbiAoaWQpIHtcbiAgLy8gb2xkIGVuZ2luZXMgaGF2ZSBub3QgbG9jYXRpb24ub3JpZ2luXG4gIGdsb2JhbC5wb3N0TWVzc2FnZShpZCArICcnLCBsb2NhdGlvbi5wcm90b2NvbCArICcvLycgKyBsb2NhdGlvbi5ob3N0KTtcbn07XG5cbi8vIE5vZGUuanMgMC45KyAmIElFMTArIGhhcyBzZXRJbW1lZGlhdGUsIG90aGVyd2lzZTpcbmlmICghc2V0IHx8ICFjbGVhcikge1xuICBzZXQgPSBmdW5jdGlvbiBzZXRJbW1lZGlhdGUoZm4pIHtcbiAgICB2YXIgYXJncyA9IFtdO1xuICAgIHZhciBpID0gMTtcbiAgICB3aGlsZSAoYXJndW1lbnRzLmxlbmd0aCA+IGkpIGFyZ3MucHVzaChhcmd1bWVudHNbaSsrXSk7XG4gICAgcXVldWVbKytjb3VudGVyXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuY1xuICAgICAgKHR5cGVvZiBmbiA9PSAnZnVuY3Rpb24nID8gZm4gOiBGdW5jdGlvbihmbikpLmFwcGx5KHVuZGVmaW5lZCwgYXJncyk7XG4gICAgfTtcbiAgICBkZWZlcihjb3VudGVyKTtcbiAgICByZXR1cm4gY291bnRlcjtcbiAgfTtcbiAgY2xlYXIgPSBmdW5jdGlvbiBjbGVhckltbWVkaWF0ZShpZCkge1xuICAgIGRlbGV0ZSBxdWV1ZVtpZF07XG4gIH07XG4gIC8vIE5vZGUuanMgMC44LVxuICBpZiAoY2xhc3NvZihwcm9jZXNzKSA9PSAncHJvY2VzcycpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhydW5uZXIoaWQpKTtcbiAgICB9O1xuICAvLyBTcGhlcmUgKEpTIGdhbWUgZW5naW5lKSBEaXNwYXRjaCBBUElcbiAgfSBlbHNlIGlmIChEaXNwYXRjaCAmJiBEaXNwYXRjaC5ub3cpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgRGlzcGF0Y2gubm93KHJ1bm5lcihpZCkpO1xuICAgIH07XG4gIC8vIEJyb3dzZXJzIHdpdGggTWVzc2FnZUNoYW5uZWwsIGluY2x1ZGVzIFdlYldvcmtlcnNcbiAgLy8gZXhjZXB0IGlPUyAtIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy82MjRcbiAgfSBlbHNlIGlmIChNZXNzYWdlQ2hhbm5lbCAmJiAhSVNfSU9TKSB7XG4gICAgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpO1xuICAgIHBvcnQgPSBjaGFubmVsLnBvcnQyO1xuICAgIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gbGlzdGVuZXI7XG4gICAgZGVmZXIgPSBiaW5kKHBvcnQucG9zdE1lc3NhZ2UsIHBvcnQsIDEpO1xuICAvLyBCcm93c2VycyB3aXRoIHBvc3RNZXNzYWdlLCBza2lwIFdlYldvcmtlcnNcbiAgLy8gSUU4IGhhcyBwb3N0TWVzc2FnZSwgYnV0IGl0J3Mgc3luYyAmIHR5cGVvZiBpdHMgcG9zdE1lc3NhZ2UgaXMgJ29iamVjdCdcbiAgfSBlbHNlIGlmIChcbiAgICBnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lciAmJlxuICAgIHR5cGVvZiBwb3N0TWVzc2FnZSA9PSAnZnVuY3Rpb24nICYmXG4gICAgIWdsb2JhbC5pbXBvcnRTY3JpcHRzICYmXG4gICAgIWZhaWxzKHBvc3QpICYmXG4gICAgbG9jYXRpb24ucHJvdG9jb2wgIT09ICdmaWxlOidcbiAgKSB7XG4gICAgZGVmZXIgPSBwb3N0O1xuICAgIGdsb2JhbC5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgbGlzdGVuZXIsIGZhbHNlKTtcbiAgLy8gSUU4LVxuICB9IGVsc2UgaWYgKE9OUkVBRFlTVEFURUNIQU5HRSBpbiBjcmVhdGVFbGVtZW50KCdzY3JpcHQnKSkge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBodG1sLmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpKVtPTlJFQURZU1RBVEVDSEFOR0VdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBodG1sLnJlbW92ZUNoaWxkKHRoaXMpO1xuICAgICAgICBydW4oaWQpO1xuICAgICAgfTtcbiAgICB9O1xuICAvLyBSZXN0IG9sZCBicm93c2Vyc1xuICB9IGVsc2Uge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBzZXRUaW1lb3V0KHJ1bm5lcihpZCksIDApO1xuICAgIH07XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldDogc2V0LFxuICBjbGVhcjogY2xlYXJcbn07XG4iLCJ2YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXInKTtcblxudmFyIG1heCA9IE1hdGgubWF4O1xudmFyIG1pbiA9IE1hdGgubWluO1xuXG4vLyBIZWxwZXIgZm9yIGEgcG9wdWxhciByZXBlYXRpbmcgY2FzZSBvZiB0aGUgc3BlYzpcbi8vIExldCBpbnRlZ2VyIGJlID8gVG9JbnRlZ2VyKGluZGV4KS5cbi8vIElmIGludGVnZXIgPCAwLCBsZXQgcmVzdWx0IGJlIG1heCgobGVuZ3RoICsgaW50ZWdlciksIDApOyBlbHNlIGxldCByZXN1bHQgYmUgbWluKGludGVnZXIsIGxlbmd0aCkuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbmRleCwgbGVuZ3RoKSB7XG4gIHZhciBpbnRlZ2VyID0gdG9JbnRlZ2VyKGluZGV4KTtcbiAgcmV0dXJuIGludGVnZXIgPCAwID8gbWF4KGludGVnZXIgKyBsZW5ndGgsIDApIDogbWluKGludGVnZXIsIGxlbmd0aCk7XG59O1xuIiwiLy8gdG9PYmplY3Qgd2l0aCBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIHN0cmluZ3NcbnZhciBJbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0Jyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIEluZGV4ZWRPYmplY3QocmVxdWlyZU9iamVjdENvZXJjaWJsZShpdCkpO1xufTtcbiIsInZhciBjZWlsID0gTWF0aC5jZWlsO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcblxuLy8gYFRvSW50ZWdlcmAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy10b2ludGVnZXJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiBpc05hTihhcmd1bWVudCA9ICthcmd1bWVudCkgPyAwIDogKGFyZ3VtZW50ID4gMCA/IGZsb29yIDogY2VpbCkoYXJndW1lbnQpO1xufTtcbiIsInZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlcicpO1xuXG52YXIgbWluID0gTWF0aC5taW47XG5cbi8vIGBUb0xlbmd0aGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy10b2xlbmd0aFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIGFyZ3VtZW50ID4gMCA/IG1pbih0b0ludGVnZXIoYXJndW1lbnQpLCAweDFGRkZGRkZGRkZGRkZGKSA6IDA7IC8vIDIgKiogNTMgLSAxID09IDkwMDcxOTkyNTQ3NDA5OTFcbn07XG4iLCJ2YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcblxuLy8gYFRvT2JqZWN0YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXRvb2JqZWN0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gT2JqZWN0KHJlcXVpcmVPYmplY3RDb2VyY2libGUoYXJndW1lbnQpKTtcbn07XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbi8vIGBUb1ByaW1pdGl2ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy10b3ByaW1pdGl2ZVxuLy8gaW5zdGVhZCBvZiB0aGUgRVM2IHNwZWMgdmVyc2lvbiwgd2UgZGlkbid0IGltcGxlbWVudCBAQHRvUHJpbWl0aXZlIGNhc2Vcbi8vIGFuZCB0aGUgc2Vjb25kIGFyZ3VtZW50IC0gZmxhZyAtIHByZWZlcnJlZCB0eXBlIGlzIGEgc3RyaW5nXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbnB1dCwgUFJFRkVSUkVEX1NUUklORykge1xuICBpZiAoIWlzT2JqZWN0KGlucHV0KSkgcmV0dXJuIGlucHV0O1xuICB2YXIgZm4sIHZhbDtcbiAgaWYgKFBSRUZFUlJFRF9TVFJJTkcgJiYgdHlwZW9mIChmbiA9IGlucHV0LnRvU3RyaW5nKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGlucHV0KSkpIHJldHVybiB2YWw7XG4gIGlmICh0eXBlb2YgKGZuID0gaW5wdXQudmFsdWVPZikgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpbnB1dCkpKSByZXR1cm4gdmFsO1xuICBpZiAoIVBSRUZFUlJFRF9TVFJJTkcgJiYgdHlwZW9mIChmbiA9IGlucHV0LnRvU3RyaW5nKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGlucHV0KSkpIHJldHVybiB2YWw7XG4gIHRocm93IFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbn07XG4iLCJ2YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xudmFyIHRlc3QgPSB7fTtcblxudGVzdFtUT19TVFJJTkdfVEFHXSA9ICd6JztcblxubW9kdWxlLmV4cG9ydHMgPSBTdHJpbmcodGVzdCkgPT09ICdbb2JqZWN0IHpdJztcbiIsInZhciBpZCA9IDA7XG52YXIgcG9zdGZpeCA9IE1hdGgucmFuZG9tKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4gJ1N5bWJvbCgnICsgU3RyaW5nKGtleSA9PT0gdW5kZWZpbmVkID8gJycgOiBrZXkpICsgJylfJyArICgrK2lkICsgcG9zdGZpeCkudG9TdHJpbmcoMzYpO1xufTtcbiIsInZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25hdGl2ZS1zeW1ib2wnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfU1lNQk9MXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICAmJiAhU3ltYm9sLnNoYW1cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT0gJ3N5bWJvbCc7XG4iLCJ2YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbmV4cG9ydHMuZiA9IHdlbGxLbm93blN5bWJvbDtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uYXRpdmUtc3ltYm9sJyk7XG52YXIgVVNFX1NZTUJPTF9BU19VSUQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQnKTtcblxudmFyIFdlbGxLbm93blN5bWJvbHNTdG9yZSA9IHNoYXJlZCgnd2tzJyk7XG52YXIgU3ltYm9sID0gZ2xvYmFsLlN5bWJvbDtcbnZhciBjcmVhdGVXZWxsS25vd25TeW1ib2wgPSBVU0VfU1lNQk9MX0FTX1VJRCA/IFN5bWJvbCA6IFN5bWJvbCAmJiBTeW1ib2wud2l0aG91dFNldHRlciB8fCB1aWQ7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgaWYgKCFoYXMoV2VsbEtub3duU3ltYm9sc1N0b3JlLCBuYW1lKSkge1xuICAgIGlmIChOQVRJVkVfU1lNQk9MICYmIGhhcyhTeW1ib2wsIG5hbWUpKSBXZWxsS25vd25TeW1ib2xzU3RvcmVbbmFtZV0gPSBTeW1ib2xbbmFtZV07XG4gICAgZWxzZSBXZWxsS25vd25TeW1ib2xzU3RvcmVbbmFtZV0gPSBjcmVhdGVXZWxsS25vd25TeW1ib2woJ1N5bWJvbC4nICsgbmFtZSk7XG4gIH0gcmV0dXJuIFdlbGxLbm93blN5bWJvbHNTdG9yZVtuYW1lXTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciAkZmlsdGVyID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbicpLmZpbHRlcjtcbnZhciBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1oYXMtc3BlY2llcy1zdXBwb3J0Jyk7XG52YXIgYXJyYXlNZXRob2RVc2VzVG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLXVzZXMtdG8tbGVuZ3RoJyk7XG5cbnZhciBIQVNfU1BFQ0lFU19TVVBQT1JUID0gYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCgnZmlsdGVyJyk7XG4vLyBFZGdlIDE0LSBpc3N1ZVxudmFyIFVTRVNfVE9fTEVOR1RIID0gYXJyYXlNZXRob2RVc2VzVG9MZW5ndGgoJ2ZpbHRlcicpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmZpbHRlcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmlsdGVyXG4vLyB3aXRoIGFkZGluZyBzdXBwb3J0IG9mIEBAc3BlY2llc1xuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogIUhBU19TUEVDSUVTX1NVUFBPUlQgfHwgIVVTRVNfVE9fTEVOR1RIIH0sIHtcbiAgZmlsdGVyOiBmdW5jdGlvbiBmaWx0ZXIoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJGZpbHRlcih0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZm9yRWFjaCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1mb3ItZWFjaCcpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmZvckVhY2hgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZvcmVhY2hcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IFtdLmZvckVhY2ggIT0gZm9yRWFjaCB9LCB7XG4gIGZvckVhY2g6IGZvckVhY2hcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGFycmF5TWV0aG9kSXNTdHJpY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWlzLXN0cmljdCcpO1xuXG52YXIgbmF0aXZlSm9pbiA9IFtdLmpvaW47XG5cbnZhciBFUzNfU1RSSU5HUyA9IEluZGV4ZWRPYmplY3QgIT0gT2JqZWN0O1xudmFyIFNUUklDVF9NRVRIT0QgPSBhcnJheU1ldGhvZElzU3RyaWN0KCdqb2luJywgJywnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5qb2luYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5qb2luXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBFUzNfU1RSSU5HUyB8fCAhU1RSSUNUX01FVEhPRCB9LCB7XG4gIGpvaW46IGZ1bmN0aW9uIGpvaW4oc2VwYXJhdG9yKSB7XG4gICAgcmV0dXJuIG5hdGl2ZUpvaW4uY2FsbCh0b0luZGV4ZWRPYmplY3QodGhpcyksIHNlcGFyYXRvciA9PT0gdW5kZWZpbmVkID8gJywnIDogc2VwYXJhdG9yKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG5cbnZhciBuYXRpdmVSZXZlcnNlID0gW10ucmV2ZXJzZTtcbnZhciB0ZXN0ID0gWzEsIDJdO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnJldmVyc2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnJldmVyc2Vcbi8vIGZpeCBmb3IgU2FmYXJpIDEyLjAgYnVnXG4vLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg4Nzk0XG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBTdHJpbmcodGVzdCkgPT09IFN0cmluZyh0ZXN0LnJldmVyc2UoKSkgfSwge1xuICByZXZlcnNlOiBmdW5jdGlvbiByZXZlcnNlKCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWFzc2lnblxuICAgIGlmIChpc0FycmF5KHRoaXMpKSB0aGlzLmxlbmd0aCA9IHRoaXMubGVuZ3RoO1xuICAgIHJldHVybiBuYXRpdmVSZXZlcnNlLmNhbGwodGhpcyk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCcpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eScpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWhhcy1zcGVjaWVzLXN1cHBvcnQnKTtcbnZhciBhcnJheU1ldGhvZFVzZXNUb0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtdXNlcy10by1sZW5ndGgnKTtcblxudmFyIEhBU19TUEVDSUVTX1NVUFBPUlQgPSBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0KCdzbGljZScpO1xudmFyIFVTRVNfVE9fTEVOR1RIID0gYXJyYXlNZXRob2RVc2VzVG9MZW5ndGgoJ3NsaWNlJywgeyBBQ0NFU1NPUlM6IHRydWUsIDA6IDAsIDE6IDIgfSk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG52YXIgbmF0aXZlU2xpY2UgPSBbXS5zbGljZTtcbnZhciBtYXggPSBNYXRoLm1heDtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5zbGljZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuc2xpY2Vcbi8vIGZhbGxiYWNrIGZvciBub3QgYXJyYXktbGlrZSBFUzMgc3RyaW5ncyBhbmQgRE9NIG9iamVjdHNcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6ICFIQVNfU1BFQ0lFU19TVVBQT1JUIHx8ICFVU0VTX1RPX0xFTkdUSCB9LCB7XG4gIHNsaWNlOiBmdW5jdGlvbiBzbGljZShzdGFydCwgZW5kKSB7XG4gICAgdmFyIE8gPSB0b0luZGV4ZWRPYmplY3QodGhpcyk7XG4gICAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgICB2YXIgayA9IHRvQWJzb2x1dGVJbmRleChzdGFydCwgbGVuZ3RoKTtcbiAgICB2YXIgZmluID0gdG9BYnNvbHV0ZUluZGV4KGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuZ3RoIDogZW5kLCBsZW5ndGgpO1xuICAgIC8vIGlubGluZSBgQXJyYXlTcGVjaWVzQ3JlYXRlYCBmb3IgdXNhZ2UgbmF0aXZlIGBBcnJheSNzbGljZWAgd2hlcmUgaXQncyBwb3NzaWJsZVxuICAgIHZhciBDb25zdHJ1Y3RvciwgcmVzdWx0LCBuO1xuICAgIGlmIChpc0FycmF5KE8pKSB7XG4gICAgICBDb25zdHJ1Y3RvciA9IE8uY29uc3RydWN0b3I7XG4gICAgICAvLyBjcm9zcy1yZWFsbSBmYWxsYmFja1xuICAgICAgaWYgKHR5cGVvZiBDb25zdHJ1Y3RvciA9PSAnZnVuY3Rpb24nICYmIChDb25zdHJ1Y3RvciA9PT0gQXJyYXkgfHwgaXNBcnJheShDb25zdHJ1Y3Rvci5wcm90b3R5cGUpKSkge1xuICAgICAgICBDb25zdHJ1Y3RvciA9IHVuZGVmaW5lZDtcbiAgICAgIH0gZWxzZSBpZiAoaXNPYmplY3QoQ29uc3RydWN0b3IpKSB7XG4gICAgICAgIENvbnN0cnVjdG9yID0gQ29uc3RydWN0b3JbU1BFQ0lFU107XG4gICAgICAgIGlmIChDb25zdHJ1Y3RvciA9PT0gbnVsbCkgQ29uc3RydWN0b3IgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBpZiAoQ29uc3RydWN0b3IgPT09IEFycmF5IHx8IENvbnN0cnVjdG9yID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIG5hdGl2ZVNsaWNlLmNhbGwoTywgaywgZmluKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmVzdWx0ID0gbmV3IChDb25zdHJ1Y3RvciA9PT0gdW5kZWZpbmVkID8gQXJyYXkgOiBDb25zdHJ1Y3RvcikobWF4KGZpbiAtIGssIDApKTtcbiAgICBmb3IgKG4gPSAwOyBrIDwgZmluOyBrKyssIG4rKykgaWYgKGsgaW4gTykgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBuLCBPW2tdKTtcbiAgICByZXN1bHQubGVuZ3RoID0gbjtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcbiIsInZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWRlZmluZScpO1xuXG52YXIgRGF0ZVByb3RvdHlwZSA9IERhdGUucHJvdG90eXBlO1xudmFyIElOVkFMSURfREFURSA9ICdJbnZhbGlkIERhdGUnO1xudmFyIFRPX1NUUklORyA9ICd0b1N0cmluZyc7XG52YXIgbmF0aXZlRGF0ZVRvU3RyaW5nID0gRGF0ZVByb3RvdHlwZVtUT19TVFJJTkddO1xudmFyIGdldFRpbWUgPSBEYXRlUHJvdG90eXBlLmdldFRpbWU7XG5cbi8vIGBEYXRlLnByb3RvdHlwZS50b1N0cmluZ2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1kYXRlLnByb3RvdHlwZS50b3N0cmluZ1xuaWYgKG5ldyBEYXRlKE5hTikgKyAnJyAhPSBJTlZBTElEX0RBVEUpIHtcbiAgcmVkZWZpbmUoRGF0ZVByb3RvdHlwZSwgVE9fU1RSSU5HLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICB2YXIgdmFsdWUgPSBnZXRUaW1lLmNhbGwodGhpcyk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgIHJldHVybiB2YWx1ZSA9PT0gdmFsdWUgPyBuYXRpdmVEYXRlVG9TdHJpbmcuY2FsbCh0aGlzKSA6IElOVkFMSURfREFURTtcbiAgfSk7XG59XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGRlZmluZVByb3BlcnRpZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0aWVzJyk7XG5cbi8vIGBPYmplY3QuZGVmaW5lUHJvcGVydGllc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydGllc1xuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogIURFU0NSSVBUT1JTLCBzaGFtOiAhREVTQ1JJUFRPUlMgfSwge1xuICBkZWZpbmVQcm9wZXJ0aWVzOiBkZWZpbmVQcm9wZXJ0aWVzXG59KTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgb2JqZWN0RGVmaW5lUHJvcGVydHlNb2RpbGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xuXG4vLyBgT2JqZWN0LmRlZmluZVByb3BlcnR5YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0eVxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogIURFU0NSSVBUT1JTLCBzaGFtOiAhREVTQ1JJUFRPUlMgfSwge1xuICBkZWZpbmVQcm9wZXJ0eTogb2JqZWN0RGVmaW5lUHJvcGVydHlNb2RpbGUuZlxufSk7XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJykuZjtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xuXG52YXIgRkFJTFNfT05fUFJJTUlUSVZFUyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKDEpOyB9KTtcbnZhciBGT1JDRUQgPSAhREVTQ1JJUFRPUlMgfHwgRkFJTFNfT05fUFJJTUlUSVZFUztcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5ZGVzY3JpcHRvclxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogRk9SQ0VELCBzaGFtOiAhREVTQ1JJUFRPUlMgfSwge1xuICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KSB7XG4gICAgcmV0dXJuIG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvcih0b0luZGV4ZWRPYmplY3QoaXQpLCBrZXkpO1xuICB9XG59KTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgb3duS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vd24ta2V5cycpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5Jyk7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yc1xuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIHNoYW06ICFERVNDUklQVE9SUyB9LCB7XG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcnM6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KSB7XG4gICAgdmFyIE8gPSB0b0luZGV4ZWRPYmplY3Qob2JqZWN0KTtcbiAgICB2YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlLmY7XG4gICAgdmFyIGtleXMgPSBvd25LZXlzKE8pO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBrZXksIGRlc2NyaXB0b3I7XG4gICAgd2hpbGUgKGtleXMubGVuZ3RoID4gaW5kZXgpIHtcbiAgICAgIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywga2V5ID0ga2V5c1tpbmRleCsrXSk7XG4gICAgICBpZiAoZGVzY3JpcHRvciAhPT0gdW5kZWZpbmVkKSBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGtleSwgZGVzY3JpcHRvcik7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn0pO1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgbmF0aXZlS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbnZhciBGQUlMU19PTl9QUklNSVRJVkVTID0gZmFpbHMoZnVuY3Rpb24gKCkgeyBuYXRpdmVLZXlzKDEpOyB9KTtcblxuLy8gYE9iamVjdC5rZXlzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLW9iamVjdC5rZXlzXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGQUlMU19PTl9QUklNSVRJVkVTIH0sIHtcbiAga2V5czogZnVuY3Rpb24ga2V5cyhpdCkge1xuICAgIHJldHVybiBuYXRpdmVLZXlzKHRvT2JqZWN0KGl0KSk7XG4gIH1cbn0pO1xuIiwidmFyIFRPX1NUUklOR19UQUdfU1VQUE9SVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmctdGFnLXN1cHBvcnQnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWRlZmluZScpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC10by1zdHJpbmcnKTtcblxuLy8gYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZ1xuaWYgKCFUT19TVFJJTkdfVEFHX1NVUFBPUlQpIHtcbiAgcmVkZWZpbmUoT2JqZWN0LnByb3RvdHlwZSwgJ3RvU3RyaW5nJywgdG9TdHJpbmcsIHsgdW5zYWZlOiB0cnVlIH0pO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgTmF0aXZlUHJvbWlzZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uYXRpdmUtcHJvbWlzZS1jb25zdHJ1Y3RvcicpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZGVmaW5lJyk7XG52YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVkZWZpbmUtYWxsJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBzZXRTcGVjaWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1zcGVjaWVzJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtZnVuY3Rpb24nKTtcbnZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLWluc3RhbmNlJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xudmFyIGluc3BlY3RTb3VyY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UnKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcbnZhciBjaGVja0NvcnJlY3RuZXNzT2ZJdGVyYXRpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2hlY2stY29ycmVjdG5lc3Mtb2YtaXRlcmF0aW9uJyk7XG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NwZWNpZXMtY29uc3RydWN0b3InKTtcbnZhciB0YXNrID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Rhc2snKS5zZXQ7XG52YXIgbWljcm90YXNrID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL21pY3JvdGFzaycpO1xudmFyIHByb21pc2VSZXNvbHZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtcmVzb2x2ZScpO1xudmFyIGhvc3RSZXBvcnRFcnJvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaG9zdC1yZXBvcnQtZXJyb3JzJyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xudmFyIHBlcmZvcm0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGVyZm9ybScpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcbnZhciBpc0ZvcmNlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1mb3JjZWQnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBWOF9WRVJTSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS12OC12ZXJzaW9uJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG52YXIgUFJPTUlTRSA9ICdQcm9taXNlJztcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXQ7XG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIGdldEludGVybmFsUHJvbWlzZVN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3IoUFJPTUlTRSk7XG52YXIgUHJvbWlzZUNvbnN0cnVjdG9yID0gTmF0aXZlUHJvbWlzZTtcbnZhciBUeXBlRXJyb3IgPSBnbG9iYWwuVHlwZUVycm9yO1xudmFyIGRvY3VtZW50ID0gZ2xvYmFsLmRvY3VtZW50O1xudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbnZhciAkZmV0Y2ggPSBnZXRCdWlsdEluKCdmZXRjaCcpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUuZjtcbnZhciBuZXdHZW5lcmljUHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eTtcbnZhciBJU19OT0RFID0gY2xhc3NvZihwcm9jZXNzKSA9PSAncHJvY2Vzcyc7XG52YXIgRElTUEFUQ0hfRVZFTlQgPSAhIShkb2N1bWVudCAmJiBkb2N1bWVudC5jcmVhdGVFdmVudCAmJiBnbG9iYWwuZGlzcGF0Y2hFdmVudCk7XG52YXIgVU5IQU5ETEVEX1JFSkVDVElPTiA9ICd1bmhhbmRsZWRyZWplY3Rpb24nO1xudmFyIFJFSkVDVElPTl9IQU5ETEVEID0gJ3JlamVjdGlvbmhhbmRsZWQnO1xudmFyIFBFTkRJTkcgPSAwO1xudmFyIEZVTEZJTExFRCA9IDE7XG52YXIgUkVKRUNURUQgPSAyO1xudmFyIEhBTkRMRUQgPSAxO1xudmFyIFVOSEFORExFRCA9IDI7XG52YXIgSW50ZXJuYWwsIE93blByb21pc2VDYXBhYmlsaXR5LCBQcm9taXNlV3JhcHBlciwgbmF0aXZlVGhlbjtcblxudmFyIEZPUkNFRCA9IGlzRm9yY2VkKFBST01JU0UsIGZ1bmN0aW9uICgpIHtcbiAgdmFyIEdMT0JBTF9DT1JFX0pTX1BST01JU0UgPSBpbnNwZWN0U291cmNlKFByb21pc2VDb25zdHJ1Y3RvcikgIT09IFN0cmluZyhQcm9taXNlQ29uc3RydWN0b3IpO1xuICBpZiAoIUdMT0JBTF9DT1JFX0pTX1BST01JU0UpIHtcbiAgICAvLyBWOCA2LjYgKE5vZGUgMTAgYW5kIENocm9tZSA2NikgaGF2ZSBhIGJ1ZyB3aXRoIHJlc29sdmluZyBjdXN0b20gdGhlbmFibGVzXG4gICAgLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9ODMwNTY1XG4gICAgLy8gV2UgY2FuJ3QgZGV0ZWN0IGl0IHN5bmNocm9ub3VzbHksIHNvIGp1c3QgY2hlY2sgdmVyc2lvbnNcbiAgICBpZiAoVjhfVkVSU0lPTiA9PT0gNjYpIHJldHVybiB0cnVlO1xuICAgIC8vIFVuaGFuZGxlZCByZWplY3Rpb25zIHRyYWNraW5nIHN1cHBvcnQsIE5vZGVKUyBQcm9taXNlIHdpdGhvdXQgaXQgZmFpbHMgQEBzcGVjaWVzIHRlc3RcbiAgICBpZiAoIUlTX05PREUgJiYgdHlwZW9mIFByb21pc2VSZWplY3Rpb25FdmVudCAhPSAnZnVuY3Rpb24nKSByZXR1cm4gdHJ1ZTtcbiAgfVxuICAvLyBXZSBuZWVkIFByb21pc2UjZmluYWxseSBpbiB0aGUgcHVyZSB2ZXJzaW9uIGZvciBwcmV2ZW50aW5nIHByb3RvdHlwZSBwb2xsdXRpb25cbiAgaWYgKElTX1BVUkUgJiYgIVByb21pc2VDb25zdHJ1Y3Rvci5wcm90b3R5cGVbJ2ZpbmFsbHknXSkgcmV0dXJuIHRydWU7XG4gIC8vIFdlIGNhbid0IHVzZSBAQHNwZWNpZXMgZmVhdHVyZSBkZXRlY3Rpb24gaW4gVjggc2luY2UgaXQgY2F1c2VzXG4gIC8vIGRlb3B0aW1pemF0aW9uIGFuZCBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvblxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNjc5XG4gIGlmIChWOF9WRVJTSU9OID49IDUxICYmIC9uYXRpdmUgY29kZS8udGVzdChQcm9taXNlQ29uc3RydWN0b3IpKSByZXR1cm4gZmFsc2U7XG4gIC8vIERldGVjdCBjb3JyZWN0bmVzcyBvZiBzdWJjbGFzc2luZyB3aXRoIEBAc3BlY2llcyBzdXBwb3J0XG4gIHZhciBwcm9taXNlID0gUHJvbWlzZUNvbnN0cnVjdG9yLnJlc29sdmUoMSk7XG4gIHZhciBGYWtlUHJvbWlzZSA9IGZ1bmN0aW9uIChleGVjKSB7XG4gICAgZXhlYyhmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0sIGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSk7XG4gIH07XG4gIHZhciBjb25zdHJ1Y3RvciA9IHByb21pc2UuY29uc3RydWN0b3IgPSB7fTtcbiAgY29uc3RydWN0b3JbU1BFQ0lFU10gPSBGYWtlUHJvbWlzZTtcbiAgcmV0dXJuICEocHJvbWlzZS50aGVuKGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSkgaW5zdGFuY2VvZiBGYWtlUHJvbWlzZSk7XG59KTtcblxudmFyIElOQ09SUkVDVF9JVEVSQVRJT04gPSBGT1JDRUQgfHwgIWNoZWNrQ29ycmVjdG5lc3NPZkl0ZXJhdGlvbihmdW5jdGlvbiAoaXRlcmFibGUpIHtcbiAgUHJvbWlzZUNvbnN0cnVjdG9yLmFsbChpdGVyYWJsZSlbJ2NhdGNoJ10oZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KTtcbn0pO1xuXG4vLyBoZWxwZXJzXG52YXIgaXNUaGVuYWJsZSA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgdGhlbjtcbiAgcmV0dXJuIGlzT2JqZWN0KGl0KSAmJiB0eXBlb2YgKHRoZW4gPSBpdC50aGVuKSA9PSAnZnVuY3Rpb24nID8gdGhlbiA6IGZhbHNlO1xufTtcblxudmFyIG5vdGlmeSA9IGZ1bmN0aW9uIChwcm9taXNlLCBzdGF0ZSwgaXNSZWplY3QpIHtcbiAgaWYgKHN0YXRlLm5vdGlmaWVkKSByZXR1cm47XG4gIHN0YXRlLm5vdGlmaWVkID0gdHJ1ZTtcbiAgdmFyIGNoYWluID0gc3RhdGUucmVhY3Rpb25zO1xuICBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgIHZhciB2YWx1ZSA9IHN0YXRlLnZhbHVlO1xuICAgIHZhciBvayA9IHN0YXRlLnN0YXRlID09IEZVTEZJTExFRDtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIC8vIHZhcmlhYmxlIGxlbmd0aCAtIGNhbid0IHVzZSBmb3JFYWNoXG4gICAgd2hpbGUgKGNoYWluLmxlbmd0aCA+IGluZGV4KSB7XG4gICAgICB2YXIgcmVhY3Rpb24gPSBjaGFpbltpbmRleCsrXTtcbiAgICAgIHZhciBoYW5kbGVyID0gb2sgPyByZWFjdGlvbi5vayA6IHJlYWN0aW9uLmZhaWw7XG4gICAgICB2YXIgcmVzb2x2ZSA9IHJlYWN0aW9uLnJlc29sdmU7XG4gICAgICB2YXIgcmVqZWN0ID0gcmVhY3Rpb24ucmVqZWN0O1xuICAgICAgdmFyIGRvbWFpbiA9IHJlYWN0aW9uLmRvbWFpbjtcbiAgICAgIHZhciByZXN1bHQsIHRoZW4sIGV4aXRlZDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChoYW5kbGVyKSB7XG4gICAgICAgICAgaWYgKCFvaykge1xuICAgICAgICAgICAgaWYgKHN0YXRlLnJlamVjdGlvbiA9PT0gVU5IQU5ETEVEKSBvbkhhbmRsZVVuaGFuZGxlZChwcm9taXNlLCBzdGF0ZSk7XG4gICAgICAgICAgICBzdGF0ZS5yZWplY3Rpb24gPSBIQU5ETEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaGFuZGxlciA9PT0gdHJ1ZSkgcmVzdWx0ID0gdmFsdWU7XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoZG9tYWluKSBkb21haW4uZW50ZXIoKTtcbiAgICAgICAgICAgIHJlc3VsdCA9IGhhbmRsZXIodmFsdWUpOyAvLyBjYW4gdGhyb3dcbiAgICAgICAgICAgIGlmIChkb21haW4pIHtcbiAgICAgICAgICAgICAgZG9tYWluLmV4aXQoKTtcbiAgICAgICAgICAgICAgZXhpdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHJlc3VsdCA9PT0gcmVhY3Rpb24ucHJvbWlzZSkge1xuICAgICAgICAgICAgcmVqZWN0KFR5cGVFcnJvcignUHJvbWlzZS1jaGFpbiBjeWNsZScpKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoZW4gPSBpc1RoZW5hYmxlKHJlc3VsdCkpIHtcbiAgICAgICAgICAgIHRoZW4uY2FsbChyZXN1bHQsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSBlbHNlIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfSBlbHNlIHJlamVjdCh2YWx1ZSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoZG9tYWluICYmICFleGl0ZWQpIGRvbWFpbi5leGl0KCk7XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICB9XG4gICAgfVxuICAgIHN0YXRlLnJlYWN0aW9ucyA9IFtdO1xuICAgIHN0YXRlLm5vdGlmaWVkID0gZmFsc2U7XG4gICAgaWYgKGlzUmVqZWN0ICYmICFzdGF0ZS5yZWplY3Rpb24pIG9uVW5oYW5kbGVkKHByb21pc2UsIHN0YXRlKTtcbiAgfSk7XG59O1xuXG52YXIgZGlzcGF0Y2hFdmVudCA9IGZ1bmN0aW9uIChuYW1lLCBwcm9taXNlLCByZWFzb24pIHtcbiAgdmFyIGV2ZW50LCBoYW5kbGVyO1xuICBpZiAoRElTUEFUQ0hfRVZFTlQpIHtcbiAgICBldmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdFdmVudCcpO1xuICAgIGV2ZW50LnByb21pc2UgPSBwcm9taXNlO1xuICAgIGV2ZW50LnJlYXNvbiA9IHJlYXNvbjtcbiAgICBldmVudC5pbml0RXZlbnQobmFtZSwgZmFsc2UsIHRydWUpO1xuICAgIGdsb2JhbC5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcbiAgfSBlbHNlIGV2ZW50ID0geyBwcm9taXNlOiBwcm9taXNlLCByZWFzb246IHJlYXNvbiB9O1xuICBpZiAoaGFuZGxlciA9IGdsb2JhbFsnb24nICsgbmFtZV0pIGhhbmRsZXIoZXZlbnQpO1xuICBlbHNlIGlmIChuYW1lID09PSBVTkhBTkRMRURfUkVKRUNUSU9OKSBob3N0UmVwb3J0RXJyb3JzKCdVbmhhbmRsZWQgcHJvbWlzZSByZWplY3Rpb24nLCByZWFzb24pO1xufTtcblxudmFyIG9uVW5oYW5kbGVkID0gZnVuY3Rpb24gKHByb21pc2UsIHN0YXRlKSB7XG4gIHRhc2suY2FsbChnbG9iYWwsIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdmFsdWUgPSBzdGF0ZS52YWx1ZTtcbiAgICB2YXIgSVNfVU5IQU5ETEVEID0gaXNVbmhhbmRsZWQoc3RhdGUpO1xuICAgIHZhciByZXN1bHQ7XG4gICAgaWYgKElTX1VOSEFORExFRCkge1xuICAgICAgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChJU19OT0RFKSB7XG4gICAgICAgICAgcHJvY2Vzcy5lbWl0KCd1bmhhbmRsZWRSZWplY3Rpb24nLCB2YWx1ZSwgcHJvbWlzZSk7XG4gICAgICAgIH0gZWxzZSBkaXNwYXRjaEV2ZW50KFVOSEFORExFRF9SRUpFQ1RJT04sIHByb21pc2UsIHZhbHVlKTtcbiAgICAgIH0pO1xuICAgICAgLy8gQnJvd3NlcnMgc2hvdWxkIG5vdCB0cmlnZ2VyIGByZWplY3Rpb25IYW5kbGVkYCBldmVudCBpZiBpdCB3YXMgaGFuZGxlZCBoZXJlLCBOb2RlSlMgLSBzaG91bGRcbiAgICAgIHN0YXRlLnJlamVjdGlvbiA9IElTX05PREUgfHwgaXNVbmhhbmRsZWQoc3RhdGUpID8gVU5IQU5ETEVEIDogSEFORExFRDtcbiAgICAgIGlmIChyZXN1bHQuZXJyb3IpIHRocm93IHJlc3VsdC52YWx1ZTtcbiAgICB9XG4gIH0pO1xufTtcblxudmFyIGlzVW5oYW5kbGVkID0gZnVuY3Rpb24gKHN0YXRlKSB7XG4gIHJldHVybiBzdGF0ZS5yZWplY3Rpb24gIT09IEhBTkRMRUQgJiYgIXN0YXRlLnBhcmVudDtcbn07XG5cbnZhciBvbkhhbmRsZVVuaGFuZGxlZCA9IGZ1bmN0aW9uIChwcm9taXNlLCBzdGF0ZSkge1xuICB0YXNrLmNhbGwoZ2xvYmFsLCBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKElTX05PREUpIHtcbiAgICAgIHByb2Nlc3MuZW1pdCgncmVqZWN0aW9uSGFuZGxlZCcsIHByb21pc2UpO1xuICAgIH0gZWxzZSBkaXNwYXRjaEV2ZW50KFJFSkVDVElPTl9IQU5ETEVELCBwcm9taXNlLCBzdGF0ZS52YWx1ZSk7XG4gIH0pO1xufTtcblxudmFyIGJpbmQgPSBmdW5jdGlvbiAoZm4sIHByb21pc2UsIHN0YXRlLCB1bndyYXApIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIGZuKHByb21pc2UsIHN0YXRlLCB2YWx1ZSwgdW53cmFwKTtcbiAgfTtcbn07XG5cbnZhciBpbnRlcm5hbFJlamVjdCA9IGZ1bmN0aW9uIChwcm9taXNlLCBzdGF0ZSwgdmFsdWUsIHVud3JhcCkge1xuICBpZiAoc3RhdGUuZG9uZSkgcmV0dXJuO1xuICBzdGF0ZS5kb25lID0gdHJ1ZTtcbiAgaWYgKHVud3JhcCkgc3RhdGUgPSB1bndyYXA7XG4gIHN0YXRlLnZhbHVlID0gdmFsdWU7XG4gIHN0YXRlLnN0YXRlID0gUkVKRUNURUQ7XG4gIG5vdGlmeShwcm9taXNlLCBzdGF0ZSwgdHJ1ZSk7XG59O1xuXG52YXIgaW50ZXJuYWxSZXNvbHZlID0gZnVuY3Rpb24gKHByb21pc2UsIHN0YXRlLCB2YWx1ZSwgdW53cmFwKSB7XG4gIGlmIChzdGF0ZS5kb25lKSByZXR1cm47XG4gIHN0YXRlLmRvbmUgPSB0cnVlO1xuICBpZiAodW53cmFwKSBzdGF0ZSA9IHVud3JhcDtcbiAgdHJ5IHtcbiAgICBpZiAocHJvbWlzZSA9PT0gdmFsdWUpIHRocm93IFR5cGVFcnJvcihcIlByb21pc2UgY2FuJ3QgYmUgcmVzb2x2ZWQgaXRzZWxmXCIpO1xuICAgIHZhciB0aGVuID0gaXNUaGVuYWJsZSh2YWx1ZSk7XG4gICAgaWYgKHRoZW4pIHtcbiAgICAgIG1pY3JvdGFzayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB3cmFwcGVyID0geyBkb25lOiBmYWxzZSB9O1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHRoZW4uY2FsbCh2YWx1ZSxcbiAgICAgICAgICAgIGJpbmQoaW50ZXJuYWxSZXNvbHZlLCBwcm9taXNlLCB3cmFwcGVyLCBzdGF0ZSksXG4gICAgICAgICAgICBiaW5kKGludGVybmFsUmVqZWN0LCBwcm9taXNlLCB3cmFwcGVyLCBzdGF0ZSlcbiAgICAgICAgICApO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGludGVybmFsUmVqZWN0KHByb21pc2UsIHdyYXBwZXIsIGVycm9yLCBzdGF0ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgc3RhdGUuc3RhdGUgPSBGVUxGSUxMRUQ7XG4gICAgICBub3RpZnkocHJvbWlzZSwgc3RhdGUsIGZhbHNlKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaW50ZXJuYWxSZWplY3QocHJvbWlzZSwgeyBkb25lOiBmYWxzZSB9LCBlcnJvciwgc3RhdGUpO1xuICB9XG59O1xuXG4vLyBjb25zdHJ1Y3RvciBwb2x5ZmlsbFxuaWYgKEZPUkNFRCkge1xuICAvLyAyNS40LjMuMSBQcm9taXNlKGV4ZWN1dG9yKVxuICBQcm9taXNlQ29uc3RydWN0b3IgPSBmdW5jdGlvbiBQcm9taXNlKGV4ZWN1dG9yKSB7XG4gICAgYW5JbnN0YW5jZSh0aGlzLCBQcm9taXNlQ29uc3RydWN0b3IsIFBST01JU0UpO1xuICAgIGFGdW5jdGlvbihleGVjdXRvcik7XG4gICAgSW50ZXJuYWwuY2FsbCh0aGlzKTtcbiAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpO1xuICAgIHRyeSB7XG4gICAgICBleGVjdXRvcihiaW5kKGludGVybmFsUmVzb2x2ZSwgdGhpcywgc3RhdGUpLCBiaW5kKGludGVybmFsUmVqZWN0LCB0aGlzLCBzdGF0ZSkpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpbnRlcm5hbFJlamVjdCh0aGlzLCBzdGF0ZSwgZXJyb3IpO1xuICAgIH1cbiAgfTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gIEludGVybmFsID0gZnVuY3Rpb24gUHJvbWlzZShleGVjdXRvcikge1xuICAgIHNldEludGVybmFsU3RhdGUodGhpcywge1xuICAgICAgdHlwZTogUFJPTUlTRSxcbiAgICAgIGRvbmU6IGZhbHNlLFxuICAgICAgbm90aWZpZWQ6IGZhbHNlLFxuICAgICAgcGFyZW50OiBmYWxzZSxcbiAgICAgIHJlYWN0aW9uczogW10sXG4gICAgICByZWplY3Rpb246IGZhbHNlLFxuICAgICAgc3RhdGU6IFBFTkRJTkcsXG4gICAgICB2YWx1ZTogdW5kZWZpbmVkXG4gICAgfSk7XG4gIH07XG4gIEludGVybmFsLnByb3RvdHlwZSA9IHJlZGVmaW5lQWxsKFByb21pc2VDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHtcbiAgICAvLyBgUHJvbWlzZS5wcm90b3R5cGUudGhlbmAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcHJvbWlzZS5wcm90b3R5cGUudGhlblxuICAgIHRoZW46IGZ1bmN0aW9uIHRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpIHtcbiAgICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsUHJvbWlzZVN0YXRlKHRoaXMpO1xuICAgICAgdmFyIHJlYWN0aW9uID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkoc3BlY2llc0NvbnN0cnVjdG9yKHRoaXMsIFByb21pc2VDb25zdHJ1Y3RvcikpO1xuICAgICAgcmVhY3Rpb24ub2sgPSB0eXBlb2Ygb25GdWxmaWxsZWQgPT0gJ2Z1bmN0aW9uJyA/IG9uRnVsZmlsbGVkIDogdHJ1ZTtcbiAgICAgIHJlYWN0aW9uLmZhaWwgPSB0eXBlb2Ygb25SZWplY3RlZCA9PSAnZnVuY3Rpb24nICYmIG9uUmVqZWN0ZWQ7XG4gICAgICByZWFjdGlvbi5kb21haW4gPSBJU19OT0RFID8gcHJvY2Vzcy5kb21haW4gOiB1bmRlZmluZWQ7XG4gICAgICBzdGF0ZS5wYXJlbnQgPSB0cnVlO1xuICAgICAgc3RhdGUucmVhY3Rpb25zLnB1c2gocmVhY3Rpb24pO1xuICAgICAgaWYgKHN0YXRlLnN0YXRlICE9IFBFTkRJTkcpIG5vdGlmeSh0aGlzLCBzdGF0ZSwgZmFsc2UpO1xuICAgICAgcmV0dXJuIHJlYWN0aW9uLnByb21pc2U7XG4gICAgfSxcbiAgICAvLyBgUHJvbWlzZS5wcm90b3R5cGUuY2F0Y2hgIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXByb21pc2UucHJvdG90eXBlLmNhdGNoXG4gICAgJ2NhdGNoJzogZnVuY3Rpb24gKG9uUmVqZWN0ZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLnRoZW4odW5kZWZpbmVkLCBvblJlamVjdGVkKTtcbiAgICB9XG4gIH0pO1xuICBPd25Qcm9taXNlQ2FwYWJpbGl0eSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcHJvbWlzZSA9IG5ldyBJbnRlcm5hbCgpO1xuICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUocHJvbWlzZSk7XG4gICAgdGhpcy5wcm9taXNlID0gcHJvbWlzZTtcbiAgICB0aGlzLnJlc29sdmUgPSBiaW5kKGludGVybmFsUmVzb2x2ZSwgcHJvbWlzZSwgc3RhdGUpO1xuICAgIHRoaXMucmVqZWN0ID0gYmluZChpbnRlcm5hbFJlamVjdCwgcHJvbWlzZSwgc3RhdGUpO1xuICB9O1xuICBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSBmdW5jdGlvbiAoQykge1xuICAgIHJldHVybiBDID09PSBQcm9taXNlQ29uc3RydWN0b3IgfHwgQyA9PT0gUHJvbWlzZVdyYXBwZXJcbiAgICAgID8gbmV3IE93blByb21pc2VDYXBhYmlsaXR5KEMpXG4gICAgICA6IG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgfTtcblxuICBpZiAoIUlTX1BVUkUgJiYgdHlwZW9mIE5hdGl2ZVByb21pc2UgPT0gJ2Z1bmN0aW9uJykge1xuICAgIG5hdGl2ZVRoZW4gPSBOYXRpdmVQcm9taXNlLnByb3RvdHlwZS50aGVuO1xuXG4gICAgLy8gd3JhcCBuYXRpdmUgUHJvbWlzZSN0aGVuIGZvciBuYXRpdmUgYXN5bmMgZnVuY3Rpb25zXG4gICAgcmVkZWZpbmUoTmF0aXZlUHJvbWlzZS5wcm90b3R5cGUsICd0aGVuJywgZnVuY3Rpb24gdGhlbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCkge1xuICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlQ29uc3RydWN0b3IoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBuYXRpdmVUaGVuLmNhbGwodGhhdCwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgIH0pLnRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpO1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy82NDBcbiAgICB9LCB7IHVuc2FmZTogdHJ1ZSB9KTtcblxuICAgIC8vIHdyYXAgZmV0Y2ggcmVzdWx0XG4gICAgaWYgKHR5cGVvZiAkZmV0Y2ggPT0gJ2Z1bmN0aW9uJykgJCh7IGdsb2JhbDogdHJ1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgZm9yY2VkOiB0cnVlIH0sIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICAgICAgZmV0Y2g6IGZ1bmN0aW9uIGZldGNoKGlucHV0IC8qICwgaW5pdCAqLykge1xuICAgICAgICByZXR1cm4gcHJvbWlzZVJlc29sdmUoUHJvbWlzZUNvbnN0cnVjdG9yLCAkZmV0Y2guYXBwbHkoZ2xvYmFsLCBhcmd1bWVudHMpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuXG4kKHsgZ2xvYmFsOiB0cnVlLCB3cmFwOiB0cnVlLCBmb3JjZWQ6IEZPUkNFRCB9LCB7XG4gIFByb21pc2U6IFByb21pc2VDb25zdHJ1Y3RvclxufSk7XG5cbnNldFRvU3RyaW5nVGFnKFByb21pc2VDb25zdHJ1Y3RvciwgUFJPTUlTRSwgZmFsc2UsIHRydWUpO1xuc2V0U3BlY2llcyhQUk9NSVNFKTtcblxuUHJvbWlzZVdyYXBwZXIgPSBnZXRCdWlsdEluKFBST01JU0UpO1xuXG4vLyBzdGF0aWNzXG4kKHsgdGFyZ2V0OiBQUk9NSVNFLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IEZPUkNFRCB9LCB7XG4gIC8vIGBQcm9taXNlLnJlamVjdGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXByb21pc2UucmVqZWN0XG4gIHJlamVjdDogZnVuY3Rpb24gcmVqZWN0KHIpIHtcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KHRoaXMpO1xuICAgIGNhcGFiaWxpdHkucmVqZWN0LmNhbGwodW5kZWZpbmVkLCByKTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9XG59KTtcblxuJCh7IHRhcmdldDogUFJPTUlTRSwgc3RhdDogdHJ1ZSwgZm9yY2VkOiBJU19QVVJFIHx8IEZPUkNFRCB9LCB7XG4gIC8vIGBQcm9taXNlLnJlc29sdmVgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1wcm9taXNlLnJlc29sdmVcbiAgcmVzb2x2ZTogZnVuY3Rpb24gcmVzb2x2ZSh4KSB7XG4gICAgcmV0dXJuIHByb21pc2VSZXNvbHZlKElTX1BVUkUgJiYgdGhpcyA9PT0gUHJvbWlzZVdyYXBwZXIgPyBQcm9taXNlQ29uc3RydWN0b3IgOiB0aGlzLCB4KTtcbiAgfVxufSk7XG5cbiQoeyB0YXJnZXQ6IFBST01JU0UsIHN0YXQ6IHRydWUsIGZvcmNlZDogSU5DT1JSRUNUX0lURVJBVElPTiB9LCB7XG4gIC8vIGBQcm9taXNlLmFsbGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXByb21pc2UuYWxsXG4gIGFsbDogZnVuY3Rpb24gYWxsKGl0ZXJhYmxlKSB7XG4gICAgdmFyIEMgPSB0aGlzO1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkoQyk7XG4gICAgdmFyIHJlc29sdmUgPSBjYXBhYmlsaXR5LnJlc29sdmU7XG4gICAgdmFyIHJlamVjdCA9IGNhcGFiaWxpdHkucmVqZWN0O1xuICAgIHZhciByZXN1bHQgPSBwZXJmb3JtKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciAkcHJvbWlzZVJlc29sdmUgPSBhRnVuY3Rpb24oQy5yZXNvbHZlKTtcbiAgICAgIHZhciB2YWx1ZXMgPSBbXTtcbiAgICAgIHZhciBjb3VudGVyID0gMDtcbiAgICAgIHZhciByZW1haW5pbmcgPSAxO1xuICAgICAgaXRlcmF0ZShpdGVyYWJsZSwgZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gY291bnRlcisrO1xuICAgICAgICB2YXIgYWxyZWFkeUNhbGxlZCA9IGZhbHNlO1xuICAgICAgICB2YWx1ZXMucHVzaCh1bmRlZmluZWQpO1xuICAgICAgICByZW1haW5pbmcrKztcbiAgICAgICAgJHByb21pc2VSZXNvbHZlLmNhbGwoQywgcHJvbWlzZSkudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICBpZiAoYWxyZWFkeUNhbGxlZCkgcmV0dXJuO1xuICAgICAgICAgIGFscmVhZHlDYWxsZWQgPSB0cnVlO1xuICAgICAgICAgIHZhbHVlc1tpbmRleF0gPSB2YWx1ZTtcbiAgICAgICAgICAtLXJlbWFpbmluZyB8fCByZXNvbHZlKHZhbHVlcyk7XG4gICAgICAgIH0sIHJlamVjdCk7XG4gICAgICB9KTtcbiAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICB9KTtcbiAgICBpZiAocmVzdWx0LmVycm9yKSByZWplY3QocmVzdWx0LnZhbHVlKTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9LFxuICAvLyBgUHJvbWlzZS5yYWNlYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcHJvbWlzZS5yYWNlXG4gIHJhY2U6IGZ1bmN0aW9uIHJhY2UoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgICB2YXIgcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgdmFyICRwcm9taXNlUmVzb2x2ZSA9IGFGdW5jdGlvbihDLnJlc29sdmUpO1xuICAgICAgaXRlcmF0ZShpdGVyYWJsZSwgZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgICAgICAgJHByb21pc2VSZXNvbHZlLmNhbGwoQywgcHJvbWlzZSkudGhlbihjYXBhYmlsaXR5LnJlc29sdmUsIHJlamVjdCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBpZiAocmVzdWx0LmVycm9yKSByZWplY3QocmVzdWx0LnZhbHVlKTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGV4ZWMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLWV4ZWMnKTtcblxuJCh7IHRhcmdldDogJ1JlZ0V4cCcsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IC8uLy5leGVjICE9PSBleGVjIH0sIHtcbiAgZXhlYzogZXhlY1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZml4UmVnRXhwV2VsbEtub3duU3ltYm9sTG9naWMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZml4LXJlZ2V4cC13ZWxsLWtub3duLXN5bWJvbC1sb2dpYycpO1xudmFyIGlzUmVnRXhwID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXJlZ2V4cCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NwZWNpZXMtY29uc3RydWN0b3InKTtcbnZhciBhZHZhbmNlU3RyaW5nSW5kZXggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYWR2YW5jZS1zdHJpbmctaW5kZXgnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1sZW5ndGgnKTtcbnZhciBjYWxsUmVnRXhwRXhlYyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtZXhlYy1hYnN0cmFjdCcpO1xudmFyIHJlZ2V4cEV4ZWMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLWV4ZWMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG52YXIgYXJyYXlQdXNoID0gW10ucHVzaDtcbnZhciBtaW4gPSBNYXRoLm1pbjtcbnZhciBNQVhfVUlOVDMyID0gMHhGRkZGRkZGRjtcblxuLy8gYmFiZWwtbWluaWZ5IHRyYW5zcGlsZXMgUmVnRXhwKCd4JywgJ3knKSAtPiAveC95IGFuZCBpdCBjYXVzZXMgU3ludGF4RXJyb3JcbnZhciBTVVBQT1JUU19ZID0gIWZhaWxzKGZ1bmN0aW9uICgpIHsgcmV0dXJuICFSZWdFeHAoTUFYX1VJTlQzMiwgJ3knKTsgfSk7XG5cbi8vIEBAc3BsaXQgbG9naWNcbmZpeFJlZ0V4cFdlbGxLbm93blN5bWJvbExvZ2ljKCdzcGxpdCcsIDIsIGZ1bmN0aW9uIChTUExJVCwgbmF0aXZlU3BsaXQsIG1heWJlQ2FsbE5hdGl2ZSkge1xuICB2YXIgaW50ZXJuYWxTcGxpdDtcbiAgaWYgKFxuICAgICdhYmJjJy5zcGxpdCgvKGIpKi8pWzFdID09ICdjJyB8fFxuICAgICd0ZXN0Jy5zcGxpdCgvKD86KS8sIC0xKS5sZW5ndGggIT0gNCB8fFxuICAgICdhYicuc3BsaXQoLyg/OmFiKSovKS5sZW5ndGggIT0gMiB8fFxuICAgICcuJy5zcGxpdCgvKC4/KSguPykvKS5sZW5ndGggIT0gNCB8fFxuICAgICcuJy5zcGxpdCgvKCkoKS8pLmxlbmd0aCA+IDEgfHxcbiAgICAnJy5zcGxpdCgvLj8vKS5sZW5ndGhcbiAgKSB7XG4gICAgLy8gYmFzZWQgb24gZXM1LXNoaW0gaW1wbGVtZW50YXRpb24sIG5lZWQgdG8gcmV3b3JrIGl0XG4gICAgaW50ZXJuYWxTcGxpdCA9IGZ1bmN0aW9uIChzZXBhcmF0b3IsIGxpbWl0KSB7XG4gICAgICB2YXIgc3RyaW5nID0gU3RyaW5nKHJlcXVpcmVPYmplY3RDb2VyY2libGUodGhpcykpO1xuICAgICAgdmFyIGxpbSA9IGxpbWl0ID09PSB1bmRlZmluZWQgPyBNQVhfVUlOVDMyIDogbGltaXQgPj4+IDA7XG4gICAgICBpZiAobGltID09PSAwKSByZXR1cm4gW107XG4gICAgICBpZiAoc2VwYXJhdG9yID09PSB1bmRlZmluZWQpIHJldHVybiBbc3RyaW5nXTtcbiAgICAgIC8vIElmIGBzZXBhcmF0b3JgIGlzIG5vdCBhIHJlZ2V4LCB1c2UgbmF0aXZlIHNwbGl0XG4gICAgICBpZiAoIWlzUmVnRXhwKHNlcGFyYXRvcikpIHtcbiAgICAgICAgcmV0dXJuIG5hdGl2ZVNwbGl0LmNhbGwoc3RyaW5nLCBzZXBhcmF0b3IsIGxpbSk7XG4gICAgICB9XG4gICAgICB2YXIgb3V0cHV0ID0gW107XG4gICAgICB2YXIgZmxhZ3MgPSAoc2VwYXJhdG9yLmlnbm9yZUNhc2UgPyAnaScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHNlcGFyYXRvci5tdWx0aWxpbmUgPyAnbScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHNlcGFyYXRvci51bmljb2RlID8gJ3UnIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChzZXBhcmF0b3Iuc3RpY2t5ID8gJ3knIDogJycpO1xuICAgICAgdmFyIGxhc3RMYXN0SW5kZXggPSAwO1xuICAgICAgLy8gTWFrZSBgZ2xvYmFsYCBhbmQgYXZvaWQgYGxhc3RJbmRleGAgaXNzdWVzIGJ5IHdvcmtpbmcgd2l0aCBhIGNvcHlcbiAgICAgIHZhciBzZXBhcmF0b3JDb3B5ID0gbmV3IFJlZ0V4cChzZXBhcmF0b3Iuc291cmNlLCBmbGFncyArICdnJyk7XG4gICAgICB2YXIgbWF0Y2gsIGxhc3RJbmRleCwgbGFzdExlbmd0aDtcbiAgICAgIHdoaWxlIChtYXRjaCA9IHJlZ2V4cEV4ZWMuY2FsbChzZXBhcmF0b3JDb3B5LCBzdHJpbmcpKSB7XG4gICAgICAgIGxhc3RJbmRleCA9IHNlcGFyYXRvckNvcHkubGFzdEluZGV4O1xuICAgICAgICBpZiAobGFzdEluZGV4ID4gbGFzdExhc3RJbmRleCkge1xuICAgICAgICAgIG91dHB1dC5wdXNoKHN0cmluZy5zbGljZShsYXN0TGFzdEluZGV4LCBtYXRjaC5pbmRleCkpO1xuICAgICAgICAgIGlmIChtYXRjaC5sZW5ndGggPiAxICYmIG1hdGNoLmluZGV4IDwgc3RyaW5nLmxlbmd0aCkgYXJyYXlQdXNoLmFwcGx5KG91dHB1dCwgbWF0Y2guc2xpY2UoMSkpO1xuICAgICAgICAgIGxhc3RMZW5ndGggPSBtYXRjaFswXS5sZW5ndGg7XG4gICAgICAgICAgbGFzdExhc3RJbmRleCA9IGxhc3RJbmRleDtcbiAgICAgICAgICBpZiAob3V0cHV0Lmxlbmd0aCA+PSBsaW0pIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZXBhcmF0b3JDb3B5Lmxhc3RJbmRleCA9PT0gbWF0Y2guaW5kZXgpIHNlcGFyYXRvckNvcHkubGFzdEluZGV4Kys7IC8vIEF2b2lkIGFuIGluZmluaXRlIGxvb3BcbiAgICAgIH1cbiAgICAgIGlmIChsYXN0TGFzdEluZGV4ID09PSBzdHJpbmcubGVuZ3RoKSB7XG4gICAgICAgIGlmIChsYXN0TGVuZ3RoIHx8ICFzZXBhcmF0b3JDb3B5LnRlc3QoJycpKSBvdXRwdXQucHVzaCgnJyk7XG4gICAgICB9IGVsc2Ugb3V0cHV0LnB1c2goc3RyaW5nLnNsaWNlKGxhc3RMYXN0SW5kZXgpKTtcbiAgICAgIHJldHVybiBvdXRwdXQubGVuZ3RoID4gbGltID8gb3V0cHV0LnNsaWNlKDAsIGxpbSkgOiBvdXRwdXQ7XG4gICAgfTtcbiAgLy8gQ2hha3JhLCBWOFxuICB9IGVsc2UgaWYgKCcwJy5zcGxpdCh1bmRlZmluZWQsIDApLmxlbmd0aCkge1xuICAgIGludGVybmFsU3BsaXQgPSBmdW5jdGlvbiAoc2VwYXJhdG9yLCBsaW1pdCkge1xuICAgICAgcmV0dXJuIHNlcGFyYXRvciA9PT0gdW5kZWZpbmVkICYmIGxpbWl0ID09PSAwID8gW10gOiBuYXRpdmVTcGxpdC5jYWxsKHRoaXMsIHNlcGFyYXRvciwgbGltaXQpO1xuICAgIH07XG4gIH0gZWxzZSBpbnRlcm5hbFNwbGl0ID0gbmF0aXZlU3BsaXQ7XG5cbiAgcmV0dXJuIFtcbiAgICAvLyBgU3RyaW5nLnByb3RvdHlwZS5zcGxpdGAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5zcGxpdFxuICAgIGZ1bmN0aW9uIHNwbGl0KHNlcGFyYXRvciwgbGltaXQpIHtcbiAgICAgIHZhciBPID0gcmVxdWlyZU9iamVjdENvZXJjaWJsZSh0aGlzKTtcbiAgICAgIHZhciBzcGxpdHRlciA9IHNlcGFyYXRvciA9PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBzZXBhcmF0b3JbU1BMSVRdO1xuICAgICAgcmV0dXJuIHNwbGl0dGVyICE9PSB1bmRlZmluZWRcbiAgICAgICAgPyBzcGxpdHRlci5jYWxsKHNlcGFyYXRvciwgTywgbGltaXQpXG4gICAgICAgIDogaW50ZXJuYWxTcGxpdC5jYWxsKFN0cmluZyhPKSwgc2VwYXJhdG9yLCBsaW1pdCk7XG4gICAgfSxcbiAgICAvLyBgUmVnRXhwLnByb3RvdHlwZVtAQHNwbGl0XWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcmVnZXhwLnByb3RvdHlwZS1AQHNwbGl0XG4gICAgLy9cbiAgICAvLyBOT1RFOiBUaGlzIGNhbm5vdCBiZSBwcm9wZXJseSBwb2x5ZmlsbGVkIGluIGVuZ2luZXMgdGhhdCBkb24ndCBzdXBwb3J0XG4gICAgLy8gdGhlICd5JyBmbGFnLlxuICAgIGZ1bmN0aW9uIChyZWdleHAsIGxpbWl0KSB7XG4gICAgICB2YXIgcmVzID0gbWF5YmVDYWxsTmF0aXZlKGludGVybmFsU3BsaXQsIHJlZ2V4cCwgdGhpcywgbGltaXQsIGludGVybmFsU3BsaXQgIT09IG5hdGl2ZVNwbGl0KTtcbiAgICAgIGlmIChyZXMuZG9uZSkgcmV0dXJuIHJlcy52YWx1ZTtcblxuICAgICAgdmFyIHJ4ID0gYW5PYmplY3QocmVnZXhwKTtcbiAgICAgIHZhciBTID0gU3RyaW5nKHRoaXMpO1xuICAgICAgdmFyIEMgPSBzcGVjaWVzQ29uc3RydWN0b3IocngsIFJlZ0V4cCk7XG5cbiAgICAgIHZhciB1bmljb2RlTWF0Y2hpbmcgPSByeC51bmljb2RlO1xuICAgICAgdmFyIGZsYWdzID0gKHJ4Lmlnbm9yZUNhc2UgPyAnaScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHJ4Lm11bHRpbGluZSA/ICdtJyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAocngudW5pY29kZSA/ICd1JyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAoU1VQUE9SVFNfWSA/ICd5JyA6ICdnJyk7XG5cbiAgICAgIC8vIF4oPyArIHJ4ICsgKSBpcyBuZWVkZWQsIGluIGNvbWJpbmF0aW9uIHdpdGggc29tZSBTIHNsaWNpbmcsIHRvXG4gICAgICAvLyBzaW11bGF0ZSB0aGUgJ3knIGZsYWcuXG4gICAgICB2YXIgc3BsaXR0ZXIgPSBuZXcgQyhTVVBQT1JUU19ZID8gcnggOiAnXig/OicgKyByeC5zb3VyY2UgKyAnKScsIGZsYWdzKTtcbiAgICAgIHZhciBsaW0gPSBsaW1pdCA9PT0gdW5kZWZpbmVkID8gTUFYX1VJTlQzMiA6IGxpbWl0ID4+PiAwO1xuICAgICAgaWYgKGxpbSA9PT0gMCkgcmV0dXJuIFtdO1xuICAgICAgaWYgKFMubGVuZ3RoID09PSAwKSByZXR1cm4gY2FsbFJlZ0V4cEV4ZWMoc3BsaXR0ZXIsIFMpID09PSBudWxsID8gW1NdIDogW107XG4gICAgICB2YXIgcCA9IDA7XG4gICAgICB2YXIgcSA9IDA7XG4gICAgICB2YXIgQSA9IFtdO1xuICAgICAgd2hpbGUgKHEgPCBTLmxlbmd0aCkge1xuICAgICAgICBzcGxpdHRlci5sYXN0SW5kZXggPSBTVVBQT1JUU19ZID8gcSA6IDA7XG4gICAgICAgIHZhciB6ID0gY2FsbFJlZ0V4cEV4ZWMoc3BsaXR0ZXIsIFNVUFBPUlRTX1kgPyBTIDogUy5zbGljZShxKSk7XG4gICAgICAgIHZhciBlO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgeiA9PT0gbnVsbCB8fFxuICAgICAgICAgIChlID0gbWluKHRvTGVuZ3RoKHNwbGl0dGVyLmxhc3RJbmRleCArIChTVVBQT1JUU19ZID8gMCA6IHEpKSwgUy5sZW5ndGgpKSA9PT0gcFxuICAgICAgICApIHtcbiAgICAgICAgICBxID0gYWR2YW5jZVN0cmluZ0luZGV4KFMsIHEsIHVuaWNvZGVNYXRjaGluZyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgQS5wdXNoKFMuc2xpY2UocCwgcSkpO1xuICAgICAgICAgIGlmIChBLmxlbmd0aCA9PT0gbGltKSByZXR1cm4gQTtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8PSB6Lmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICAgICAgQS5wdXNoKHpbaV0pO1xuICAgICAgICAgICAgaWYgKEEubGVuZ3RoID09PSBsaW0pIHJldHVybiBBO1xuICAgICAgICAgIH1cbiAgICAgICAgICBxID0gcCA9IGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIEEucHVzaChTLnNsaWNlKHApKTtcbiAgICAgIHJldHVybiBBO1xuICAgIH1cbiAgXTtcbn0sICFTVVBQT1JUU19ZKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uYXRpdmUtc3ltYm9sJyk7XG52YXIgVVNFX1NZTUJPTF9BU19VSUQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlJyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgbmF0aXZlT2JqZWN0Q3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBvYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpO1xudmFyIGdldE93blByb3BlcnR5TmFtZXNFeHRlcm5hbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcy1leHRlcm5hbCcpO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGUnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVkZWZpbmUnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgc2hhcmVkS2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1rZXknKTtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VpZCcpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIHdyYXBwZWRXZWxsS25vd25TeW1ib2xNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtd3JhcHBlZCcpO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcbnZhciAkZm9yRWFjaCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5mb3JFYWNoO1xuXG52YXIgSElEREVOID0gc2hhcmVkS2V5KCdoaWRkZW4nKTtcbnZhciBTWU1CT0wgPSAnU3ltYm9sJztcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcbnZhciBUT19QUklNSVRJVkUgPSB3ZWxsS25vd25TeW1ib2woJ3RvUHJpbWl0aXZlJyk7XG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcihTWU1CT0wpO1xudmFyIE9iamVjdFByb3RvdHlwZSA9IE9iamVjdFtQUk9UT1RZUEVdO1xudmFyICRTeW1ib2wgPSBnbG9iYWwuU3ltYm9sO1xudmFyICRzdHJpbmdpZnkgPSBnZXRCdWlsdEluKCdKU09OJywgJ3N0cmluZ2lmeScpO1xudmFyIG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZS5mO1xudmFyIG5hdGl2ZURlZmluZVByb3BlcnR5ID0gZGVmaW5lUHJvcGVydHlNb2R1bGUuZjtcbnZhciBuYXRpdmVHZXRPd25Qcm9wZXJ0eU5hbWVzID0gZ2V0T3duUHJvcGVydHlOYW1lc0V4dGVybmFsLmY7XG52YXIgbmF0aXZlUHJvcGVydHlJc0VudW1lcmFibGUgPSBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZS5mO1xudmFyIEFsbFN5bWJvbHMgPSBzaGFyZWQoJ3N5bWJvbHMnKTtcbnZhciBPYmplY3RQcm90b3R5cGVTeW1ib2xzID0gc2hhcmVkKCdvcC1zeW1ib2xzJyk7XG52YXIgU3RyaW5nVG9TeW1ib2xSZWdpc3RyeSA9IHNoYXJlZCgnc3RyaW5nLXRvLXN5bWJvbC1yZWdpc3RyeScpO1xudmFyIFN5bWJvbFRvU3RyaW5nUmVnaXN0cnkgPSBzaGFyZWQoJ3N5bWJvbC10by1zdHJpbmctcmVnaXN0cnknKTtcbnZhciBXZWxsS25vd25TeW1ib2xzU3RvcmUgPSBzaGFyZWQoJ3drcycpO1xudmFyIFFPYmplY3QgPSBnbG9iYWwuUU9iamVjdDtcbi8vIERvbid0IHVzZSBzZXR0ZXJzIGluIFF0IFNjcmlwdCwgaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzE3M1xudmFyIFVTRV9TRVRURVIgPSAhUU9iamVjdCB8fCAhUU9iamVjdFtQUk9UT1RZUEVdIHx8ICFRT2JqZWN0W1BST1RPVFlQRV0uZmluZENoaWxkO1xuXG4vLyBmYWxsYmFjayBmb3Igb2xkIEFuZHJvaWQsIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvdjgvaXNzdWVzL2RldGFpbD9pZD02ODdcbnZhciBzZXRTeW1ib2xEZXNjcmlwdG9yID0gREVTQ1JJUFRPUlMgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gbmF0aXZlT2JqZWN0Q3JlYXRlKG5hdGl2ZURlZmluZVByb3BlcnR5KHt9LCAnYScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5hdGl2ZURlZmluZVByb3BlcnR5KHRoaXMsICdhJywgeyB2YWx1ZTogNyB9KS5hOyB9XG4gIH0pKS5hICE9IDc7XG59KSA/IGZ1bmN0aW9uIChPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIHZhciBPYmplY3RQcm90b3R5cGVEZXNjcmlwdG9yID0gbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdFByb3RvdHlwZSwgUCk7XG4gIGlmIChPYmplY3RQcm90b3R5cGVEZXNjcmlwdG9yKSBkZWxldGUgT2JqZWN0UHJvdG90eXBlW1BdO1xuICBuYXRpdmVEZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKTtcbiAgaWYgKE9iamVjdFByb3RvdHlwZURlc2NyaXB0b3IgJiYgTyAhPT0gT2JqZWN0UHJvdG90eXBlKSB7XG4gICAgbmF0aXZlRGVmaW5lUHJvcGVydHkoT2JqZWN0UHJvdG90eXBlLCBQLCBPYmplY3RQcm90b3R5cGVEZXNjcmlwdG9yKTtcbiAgfVxufSA6IG5hdGl2ZURlZmluZVByb3BlcnR5O1xuXG52YXIgd3JhcCA9IGZ1bmN0aW9uICh0YWcsIGRlc2NyaXB0aW9uKSB7XG4gIHZhciBzeW1ib2wgPSBBbGxTeW1ib2xzW3RhZ10gPSBuYXRpdmVPYmplY3RDcmVhdGUoJFN5bWJvbFtQUk9UT1RZUEVdKTtcbiAgc2V0SW50ZXJuYWxTdGF0ZShzeW1ib2wsIHtcbiAgICB0eXBlOiBTWU1CT0wsXG4gICAgdGFnOiB0YWcsXG4gICAgZGVzY3JpcHRpb246IGRlc2NyaXB0aW9uXG4gIH0pO1xuICBpZiAoIURFU0NSSVBUT1JTKSBzeW1ib2wuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjtcbiAgcmV0dXJuIHN5bWJvbDtcbn07XG5cbnZhciBpc1N5bWJvbCA9IFVTRV9TWU1CT0xfQVNfVUlEID8gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT0gJ3N5bWJvbCc7XG59IDogZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBPYmplY3QoaXQpIGluc3RhbmNlb2YgJFN5bWJvbDtcbn07XG5cbnZhciAkZGVmaW5lUHJvcGVydHkgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGlmIChPID09PSBPYmplY3RQcm90b3R5cGUpICRkZWZpbmVQcm9wZXJ0eShPYmplY3RQcm90b3R5cGVTeW1ib2xzLCBQLCBBdHRyaWJ1dGVzKTtcbiAgYW5PYmplY3QoTyk7XG4gIHZhciBrZXkgPSB0b1ByaW1pdGl2ZShQLCB0cnVlKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmIChoYXMoQWxsU3ltYm9scywga2V5KSkge1xuICAgIGlmICghQXR0cmlidXRlcy5lbnVtZXJhYmxlKSB7XG4gICAgICBpZiAoIWhhcyhPLCBISURERU4pKSBuYXRpdmVEZWZpbmVQcm9wZXJ0eShPLCBISURERU4sIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCB7fSkpO1xuICAgICAgT1tISURERU5dW2tleV0gPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoaGFzKE8sIEhJRERFTikgJiYgT1tISURERU5dW2tleV0pIE9bSElEREVOXVtrZXldID0gZmFsc2U7XG4gICAgICBBdHRyaWJ1dGVzID0gbmF0aXZlT2JqZWN0Q3JlYXRlKEF0dHJpYnV0ZXMsIHsgZW51bWVyYWJsZTogY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDAsIGZhbHNlKSB9KTtcbiAgICB9IHJldHVybiBzZXRTeW1ib2xEZXNjcmlwdG9yKE8sIGtleSwgQXR0cmlidXRlcyk7XG4gIH0gcmV0dXJuIG5hdGl2ZURlZmluZVByb3BlcnR5KE8sIGtleSwgQXR0cmlidXRlcyk7XG59O1xuXG52YXIgJGRlZmluZVByb3BlcnRpZXMgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKE8sIFByb3BlcnRpZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIHZhciBwcm9wZXJ0aWVzID0gdG9JbmRleGVkT2JqZWN0KFByb3BlcnRpZXMpO1xuICB2YXIga2V5cyA9IG9iamVjdEtleXMocHJvcGVydGllcykuY29uY2F0KCRnZXRPd25Qcm9wZXJ0eVN5bWJvbHMocHJvcGVydGllcykpO1xuICAkZm9yRWFjaChrZXlzLCBmdW5jdGlvbiAoa2V5KSB7XG4gICAgaWYgKCFERVNDUklQVE9SUyB8fCAkcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChwcm9wZXJ0aWVzLCBrZXkpKSAkZGVmaW5lUHJvcGVydHkoTywga2V5LCBwcm9wZXJ0aWVzW2tleV0pO1xuICB9KTtcbiAgcmV0dXJuIE87XG59O1xuXG52YXIgJGNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShPLCBQcm9wZXJ0aWVzKSB7XG4gIHJldHVybiBQcm9wZXJ0aWVzID09PSB1bmRlZmluZWQgPyBuYXRpdmVPYmplY3RDcmVhdGUoTykgOiAkZGVmaW5lUHJvcGVydGllcyhuYXRpdmVPYmplY3RDcmVhdGUoTyksIFByb3BlcnRpZXMpO1xufTtcblxudmFyICRwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IGZ1bmN0aW9uIHByb3BlcnR5SXNFbnVtZXJhYmxlKFYpIHtcbiAgdmFyIFAgPSB0b1ByaW1pdGl2ZShWLCB0cnVlKTtcbiAgdmFyIGVudW1lcmFibGUgPSBuYXRpdmVQcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHRoaXMsIFApO1xuICBpZiAodGhpcyA9PT0gT2JqZWN0UHJvdG90eXBlICYmIGhhcyhBbGxTeW1ib2xzLCBQKSAmJiAhaGFzKE9iamVjdFByb3RvdHlwZVN5bWJvbHMsIFApKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBlbnVtZXJhYmxlIHx8ICFoYXModGhpcywgUCkgfHwgIWhhcyhBbGxTeW1ib2xzLCBQKSB8fCBoYXModGhpcywgSElEREVOKSAmJiB0aGlzW0hJRERFTl1bUF0gPyBlbnVtZXJhYmxlIDogdHJ1ZTtcbn07XG5cbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApIHtcbiAgdmFyIGl0ID0gdG9JbmRleGVkT2JqZWN0KE8pO1xuICB2YXIga2V5ID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gIGlmIChpdCA9PT0gT2JqZWN0UHJvdG90eXBlICYmIGhhcyhBbGxTeW1ib2xzLCBrZXkpICYmICFoYXMoT2JqZWN0UHJvdG90eXBlU3ltYm9scywga2V5KSkgcmV0dXJuO1xuICB2YXIgZGVzY3JpcHRvciA9IG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KTtcbiAgaWYgKGRlc2NyaXB0b3IgJiYgaGFzKEFsbFN5bWJvbHMsIGtleSkgJiYgIShoYXMoaXQsIEhJRERFTikgJiYgaXRbSElEREVOXVtrZXldKSkge1xuICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IHRydWU7XG4gIH1cbiAgcmV0dXJuIGRlc2NyaXB0b3I7XG59O1xuXG52YXIgJGdldE93blByb3BlcnR5TmFtZXMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKE8pIHtcbiAgdmFyIG5hbWVzID0gbmF0aXZlR2V0T3duUHJvcGVydHlOYW1lcyh0b0luZGV4ZWRPYmplY3QoTykpO1xuICB2YXIgcmVzdWx0ID0gW107XG4gICRmb3JFYWNoKG5hbWVzLCBmdW5jdGlvbiAoa2V5KSB7XG4gICAgaWYgKCFoYXMoQWxsU3ltYm9scywga2V5KSAmJiAhaGFzKGhpZGRlbktleXMsIGtleSkpIHJlc3VsdC5wdXNoKGtleSk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufTtcblxudmFyICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoTykge1xuICB2YXIgSVNfT0JKRUNUX1BST1RPVFlQRSA9IE8gPT09IE9iamVjdFByb3RvdHlwZTtcbiAgdmFyIG5hbWVzID0gbmF0aXZlR2V0T3duUHJvcGVydHlOYW1lcyhJU19PQkpFQ1RfUFJPVE9UWVBFID8gT2JqZWN0UHJvdG90eXBlU3ltYm9scyA6IHRvSW5kZXhlZE9iamVjdChPKSk7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgJGZvckVhY2gobmFtZXMsIGZ1bmN0aW9uIChrZXkpIHtcbiAgICBpZiAoaGFzKEFsbFN5bWJvbHMsIGtleSkgJiYgKCFJU19PQkpFQ1RfUFJPVE9UWVBFIHx8IGhhcyhPYmplY3RQcm90b3R5cGUsIGtleSkpKSB7XG4gICAgICByZXN1bHQucHVzaChBbGxTeW1ib2xzW2tleV0pO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG4vLyBgU3ltYm9sYCBjb25zdHJ1Y3RvclxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3ltYm9sLWNvbnN0cnVjdG9yXG5pZiAoIU5BVElWRV9TWU1CT0wpIHtcbiAgJFN5bWJvbCA9IGZ1bmN0aW9uIFN5bWJvbCgpIHtcbiAgICBpZiAodGhpcyBpbnN0YW5jZW9mICRTeW1ib2wpIHRocm93IFR5cGVFcnJvcignU3ltYm9sIGlzIG5vdCBhIGNvbnN0cnVjdG9yJyk7XG4gICAgdmFyIGRlc2NyaXB0aW9uID0gIWFyZ3VtZW50cy5sZW5ndGggfHwgYXJndW1lbnRzWzBdID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBTdHJpbmcoYXJndW1lbnRzWzBdKTtcbiAgICB2YXIgdGFnID0gdWlkKGRlc2NyaXB0aW9uKTtcbiAgICB2YXIgc2V0dGVyID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBpZiAodGhpcyA9PT0gT2JqZWN0UHJvdG90eXBlKSBzZXR0ZXIuY2FsbChPYmplY3RQcm90b3R5cGVTeW1ib2xzLCB2YWx1ZSk7XG4gICAgICBpZiAoaGFzKHRoaXMsIEhJRERFTikgJiYgaGFzKHRoaXNbSElEREVOXSwgdGFnKSkgdGhpc1tISURERU5dW3RhZ10gPSBmYWxzZTtcbiAgICAgIHNldFN5bWJvbERlc2NyaXB0b3IodGhpcywgdGFnLCBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMSwgdmFsdWUpKTtcbiAgICB9O1xuICAgIGlmIChERVNDUklQVE9SUyAmJiBVU0VfU0VUVEVSKSBzZXRTeW1ib2xEZXNjcmlwdG9yKE9iamVjdFByb3RvdHlwZSwgdGFnLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgc2V0OiBzZXR0ZXIgfSk7XG4gICAgcmV0dXJuIHdyYXAodGFnLCBkZXNjcmlwdGlvbik7XG4gIH07XG5cbiAgcmVkZWZpbmUoJFN5bWJvbFtQUk9UT1RZUEVdLCAndG9TdHJpbmcnLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKS50YWc7XG4gIH0pO1xuXG4gIHJlZGVmaW5lKCRTeW1ib2wsICd3aXRob3V0U2V0dGVyJywgZnVuY3Rpb24gKGRlc2NyaXB0aW9uKSB7XG4gICAgcmV0dXJuIHdyYXAodWlkKGRlc2NyaXB0aW9uKSwgZGVzY3JpcHRpb24pO1xuICB9KTtcblxuICBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZS5mID0gJHByb3BlcnR5SXNFbnVtZXJhYmxlO1xuICBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mID0gJGRlZmluZVByb3BlcnR5O1xuICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUuZiA9ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG4gIGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUuZiA9IGdldE93blByb3BlcnR5TmFtZXNFeHRlcm5hbC5mID0gJGdldE93blByb3BlcnR5TmFtZXM7XG4gIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mID0gJGdldE93blByb3BlcnR5U3ltYm9scztcblxuICB3cmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlLmYgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHJldHVybiB3cmFwKHdlbGxLbm93blN5bWJvbChuYW1lKSwgbmFtZSk7XG4gIH07XG5cbiAgaWYgKERFU0NSSVBUT1JTKSB7XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtU3ltYm9sLWRlc2NyaXB0aW9uXG4gICAgbmF0aXZlRGVmaW5lUHJvcGVydHkoJFN5bWJvbFtQUk9UT1RZUEVdLCAnZGVzY3JpcHRpb24nLCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGRlc2NyaXB0aW9uKCkge1xuICAgICAgICByZXR1cm4gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKS5kZXNjcmlwdGlvbjtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoIUlTX1BVUkUpIHtcbiAgICAgIHJlZGVmaW5lKE9iamVjdFByb3RvdHlwZSwgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJywgJHByb3BlcnR5SXNFbnVtZXJhYmxlLCB7IHVuc2FmZTogdHJ1ZSB9KTtcbiAgICB9XG4gIH1cbn1cblxuJCh7IGdsb2JhbDogdHJ1ZSwgd3JhcDogdHJ1ZSwgZm9yY2VkOiAhTkFUSVZFX1NZTUJPTCwgc2hhbTogIU5BVElWRV9TWU1CT0wgfSwge1xuICBTeW1ib2w6ICRTeW1ib2xcbn0pO1xuXG4kZm9yRWFjaChvYmplY3RLZXlzKFdlbGxLbm93blN5bWJvbHNTdG9yZSksIGZ1bmN0aW9uIChuYW1lKSB7XG4gIGRlZmluZVdlbGxLbm93blN5bWJvbChuYW1lKTtcbn0pO1xuXG4kKHsgdGFyZ2V0OiBTWU1CT0wsIHN0YXQ6IHRydWUsIGZvcmNlZDogIU5BVElWRV9TWU1CT0wgfSwge1xuICAvLyBgU3ltYm9sLmZvcmAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXN5bWJvbC5mb3JcbiAgJ2Zvcic6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgc3RyaW5nID0gU3RyaW5nKGtleSk7XG4gICAgaWYgKGhhcyhTdHJpbmdUb1N5bWJvbFJlZ2lzdHJ5LCBzdHJpbmcpKSByZXR1cm4gU3RyaW5nVG9TeW1ib2xSZWdpc3RyeVtzdHJpbmddO1xuICAgIHZhciBzeW1ib2wgPSAkU3ltYm9sKHN0cmluZyk7XG4gICAgU3RyaW5nVG9TeW1ib2xSZWdpc3RyeVtzdHJpbmddID0gc3ltYm9sO1xuICAgIFN5bWJvbFRvU3RyaW5nUmVnaXN0cnlbc3ltYm9sXSA9IHN0cmluZztcbiAgICByZXR1cm4gc3ltYm9sO1xuICB9LFxuICAvLyBgU3ltYm9sLmtleUZvcmAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXN5bWJvbC5rZXlmb3JcbiAga2V5Rm9yOiBmdW5jdGlvbiBrZXlGb3Ioc3ltKSB7XG4gICAgaWYgKCFpc1N5bWJvbChzeW0pKSB0aHJvdyBUeXBlRXJyb3Ioc3ltICsgJyBpcyBub3QgYSBzeW1ib2wnKTtcbiAgICBpZiAoaGFzKFN5bWJvbFRvU3RyaW5nUmVnaXN0cnksIHN5bSkpIHJldHVybiBTeW1ib2xUb1N0cmluZ1JlZ2lzdHJ5W3N5bV07XG4gIH0sXG4gIHVzZVNldHRlcjogZnVuY3Rpb24gKCkgeyBVU0VfU0VUVEVSID0gdHJ1ZTsgfSxcbiAgdXNlU2ltcGxlOiBmdW5jdGlvbiAoKSB7IFVTRV9TRVRURVIgPSBmYWxzZTsgfVxufSk7XG5cbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6ICFOQVRJVkVfU1lNQk9MLCBzaGFtOiAhREVTQ1JJUFRPUlMgfSwge1xuICAvLyBgT2JqZWN0LmNyZWF0ZWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLW9iamVjdC5jcmVhdGVcbiAgY3JlYXRlOiAkY3JlYXRlLFxuICAvLyBgT2JqZWN0LmRlZmluZVByb3BlcnR5YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtb2JqZWN0LmRlZmluZXByb3BlcnR5XG4gIGRlZmluZVByb3BlcnR5OiAkZGVmaW5lUHJvcGVydHksXG4gIC8vIGBPYmplY3QuZGVmaW5lUHJvcGVydGllc2AgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0aWVzXG4gIGRlZmluZVByb3BlcnRpZXM6ICRkZWZpbmVQcm9wZXJ0aWVzLFxuICAvLyBgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcmAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3JzXG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogJGdldE93blByb3BlcnR5RGVzY3JpcHRvclxufSk7XG5cbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6ICFOQVRJVkVfU1lNQk9MIH0sIHtcbiAgLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5bmFtZXNcbiAgZ2V0T3duUHJvcGVydHlOYW1lczogJGdldE93blByb3BlcnR5TmFtZXMsXG4gIC8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5c3ltYm9sc1xuICBnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6ICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHNcbn0pO1xuXG4vLyBDaHJvbWUgMzggYW5kIDM5IGBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzYCBmYWlscyBvbiBwcmltaXRpdmVzXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zNDQzXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBmYWlscyhmdW5jdGlvbiAoKSB7IGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mKDEpOyB9KSB9LCB7XG4gIGdldE93blByb3BlcnR5U3ltYm9sczogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlTeW1ib2xzKGl0KSB7XG4gICAgcmV0dXJuIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mKHRvT2JqZWN0KGl0KSk7XG4gIH1cbn0pO1xuXG4vLyBgSlNPTi5zdHJpbmdpZnlgIG1ldGhvZCBiZWhhdmlvciB3aXRoIHN5bWJvbHNcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWpzb24uc3RyaW5naWZ5XG5pZiAoJHN0cmluZ2lmeSkge1xuICB2YXIgRk9SQ0VEX0pTT05fU1RSSU5HSUZZID0gIU5BVElWRV9TWU1CT0wgfHwgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIHZhciBzeW1ib2wgPSAkU3ltYm9sKCk7XG4gICAgLy8gTVMgRWRnZSBjb252ZXJ0cyBzeW1ib2wgdmFsdWVzIHRvIEpTT04gYXMge31cbiAgICByZXR1cm4gJHN0cmluZ2lmeShbc3ltYm9sXSkgIT0gJ1tudWxsXSdcbiAgICAgIC8vIFdlYktpdCBjb252ZXJ0cyBzeW1ib2wgdmFsdWVzIHRvIEpTT04gYXMgbnVsbFxuICAgICAgfHwgJHN0cmluZ2lmeSh7IGE6IHN5bWJvbCB9KSAhPSAne30nXG4gICAgICAvLyBWOCB0aHJvd3Mgb24gYm94ZWQgc3ltYm9sc1xuICAgICAgfHwgJHN0cmluZ2lmeShPYmplY3Qoc3ltYm9sKSkgIT0gJ3t9JztcbiAgfSk7XG5cbiAgJCh7IHRhcmdldDogJ0pTT04nLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IEZPUkNFRF9KU09OX1NUUklOR0lGWSB9LCB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgc3RyaW5naWZ5OiBmdW5jdGlvbiBzdHJpbmdpZnkoaXQsIHJlcGxhY2VyLCBzcGFjZSkge1xuICAgICAgdmFyIGFyZ3MgPSBbaXRdO1xuICAgICAgdmFyIGluZGV4ID0gMTtcbiAgICAgIHZhciAkcmVwbGFjZXI7XG4gICAgICB3aGlsZSAoYXJndW1lbnRzLmxlbmd0aCA+IGluZGV4KSBhcmdzLnB1c2goYXJndW1lbnRzW2luZGV4KytdKTtcbiAgICAgICRyZXBsYWNlciA9IHJlcGxhY2VyO1xuICAgICAgaWYgKCFpc09iamVjdChyZXBsYWNlcikgJiYgaXQgPT09IHVuZGVmaW5lZCB8fCBpc1N5bWJvbChpdCkpIHJldHVybjsgLy8gSUU4IHJldHVybnMgc3RyaW5nIG9uIHVuZGVmaW5lZFxuICAgICAgaWYgKCFpc0FycmF5KHJlcGxhY2VyKSkgcmVwbGFjZXIgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgICBpZiAodHlwZW9mICRyZXBsYWNlciA9PSAnZnVuY3Rpb24nKSB2YWx1ZSA9ICRyZXBsYWNlci5jYWxsKHRoaXMsIGtleSwgdmFsdWUpO1xuICAgICAgICBpZiAoIWlzU3ltYm9sKHZhbHVlKSkgcmV0dXJuIHZhbHVlO1xuICAgICAgfTtcbiAgICAgIGFyZ3NbMV0gPSByZXBsYWNlcjtcbiAgICAgIHJldHVybiAkc3RyaW5naWZ5LmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgIH1cbiAgfSk7XG59XG5cbi8vIGBTeW1ib2wucHJvdG90eXBlW0BAdG9QcmltaXRpdmVdYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXN5bWJvbC5wcm90b3R5cGUtQEB0b3ByaW1pdGl2ZVxuaWYgKCEkU3ltYm9sW1BST1RPVFlQRV1bVE9fUFJJTUlUSVZFXSkge1xuICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoJFN5bWJvbFtQUk9UT1RZUEVdLCBUT19QUklNSVRJVkUsICRTeW1ib2xbUFJPVE9UWVBFXS52YWx1ZU9mKTtcbn1cbi8vIGBTeW1ib2wucHJvdG90eXBlW0BAdG9TdHJpbmdUYWddYCBwcm9wZXJ0eVxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3ltYm9sLnByb3RvdHlwZS1AQHRvc3RyaW5ndGFnXG5zZXRUb1N0cmluZ1RhZygkU3ltYm9sLCBTWU1CT0wpO1xuXG5oaWRkZW5LZXlzW0hJRERFTl0gPSB0cnVlO1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBET01JdGVyYWJsZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9tLWl0ZXJhYmxlcycpO1xudmFyIGZvckVhY2ggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktZm9yLWVhY2gnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG5cbmZvciAodmFyIENPTExFQ1RJT05fTkFNRSBpbiBET01JdGVyYWJsZXMpIHtcbiAgdmFyIENvbGxlY3Rpb24gPSBnbG9iYWxbQ09MTEVDVElPTl9OQU1FXTtcbiAgdmFyIENvbGxlY3Rpb25Qcm90b3R5cGUgPSBDb2xsZWN0aW9uICYmIENvbGxlY3Rpb24ucHJvdG90eXBlO1xuICAvLyBzb21lIENocm9tZSB2ZXJzaW9ucyBoYXZlIG5vbi1jb25maWd1cmFibGUgbWV0aG9kcyBvbiBET01Ub2tlbkxpc3RcbiAgaWYgKENvbGxlY3Rpb25Qcm90b3R5cGUgJiYgQ29sbGVjdGlvblByb3RvdHlwZS5mb3JFYWNoICE9PSBmb3JFYWNoKSB0cnkge1xuICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShDb2xsZWN0aW9uUHJvdG90eXBlLCAnZm9yRWFjaCcsIGZvckVhY2gpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIENvbGxlY3Rpb25Qcm90b3R5cGUuZm9yRWFjaCA9IGZvckVhY2g7XG4gIH1cbn1cbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQnKTtcblxudmFyIHNsaWNlID0gW10uc2xpY2U7XG52YXIgTVNJRSA9IC9NU0lFIC5cXC4vLnRlc3QodXNlckFnZW50KTsgLy8gPC0gZGlydHkgaWU5LSBjaGVja1xuXG52YXIgd3JhcCA9IGZ1bmN0aW9uIChzY2hlZHVsZXIpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChoYW5kbGVyLCB0aW1lb3V0IC8qICwgLi4uYXJndW1lbnRzICovKSB7XG4gICAgdmFyIGJvdW5kQXJncyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyO1xuICAgIHZhciBhcmdzID0gYm91bmRBcmdzID8gc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpIDogdW5kZWZpbmVkO1xuICAgIHJldHVybiBzY2hlZHVsZXIoYm91bmRBcmdzID8gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG4gICAgICAodHlwZW9mIGhhbmRsZXIgPT0gJ2Z1bmN0aW9uJyA/IGhhbmRsZXIgOiBGdW5jdGlvbihoYW5kbGVyKSkuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfSA6IGhhbmRsZXIsIHRpbWVvdXQpO1xuICB9O1xufTtcblxuLy8gaWU5LSBzZXRUaW1lb3V0ICYgc2V0SW50ZXJ2YWwgYWRkaXRpb25hbCBwYXJhbWV0ZXJzIGZpeFxuLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvdGltZXJzLWFuZC11c2VyLXByb21wdHMuaHRtbCN0aW1lcnNcbiQoeyBnbG9iYWw6IHRydWUsIGJpbmQ6IHRydWUsIGZvcmNlZDogTVNJRSB9LCB7XG4gIC8vIGBzZXRUaW1lb3V0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvdGltZXJzLWFuZC11c2VyLXByb21wdHMuaHRtbCNkb20tc2V0dGltZW91dFxuICBzZXRUaW1lb3V0OiB3cmFwKGdsb2JhbC5zZXRUaW1lb3V0KSxcbiAgLy8gYHNldEludGVydmFsYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvdGltZXJzLWFuZC11c2VyLXByb21wdHMuaHRtbCNkb20tc2V0aW50ZXJ2YWxcbiAgc2V0SW50ZXJ2YWw6IHdyYXAoZ2xvYmFsLnNldEludGVydmFsKVxufSk7XG4iLCJ2YXIgZztcblxuLy8gVGhpcyB3b3JrcyBpbiBub24tc3RyaWN0IG1vZGVcbmcgPSAoZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzO1xufSkoKTtcblxudHJ5IHtcblx0Ly8gVGhpcyB3b3JrcyBpZiBldmFsIGlzIGFsbG93ZWQgKHNlZSBDU1ApXG5cdGcgPSBnIHx8IG5ldyBGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCk7XG59IGNhdGNoIChlKSB7XG5cdC8vIFRoaXMgd29ya3MgaWYgdGhlIHdpbmRvdyByZWZlcmVuY2UgaXMgYXZhaWxhYmxlXG5cdGlmICh0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiKSBnID0gd2luZG93O1xufVxuXG4vLyBnIGNhbiBzdGlsbCBiZSB1bmRlZmluZWQsIGJ1dCBub3RoaW5nIHRvIGRvIGFib3V0IGl0Li4uXG4vLyBXZSByZXR1cm4gdW5kZWZpbmVkLCBpbnN0ZWFkIG9mIG5vdGhpbmcgaGVyZSwgc28gaXQnc1xuLy8gZWFzaWVyIHRvIGhhbmRsZSB0aGlzIGNhc2UuIGlmKCFnbG9iYWwpIHsgLi4ufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGc7XG4iLCJjbGFzcyBIdHRwUmVxdWVzdCB7XHJcbiAgY29uc3RydWN0b3IobWV0aG9kLCB1cmksIGNvbnRlbnRUeXBlLCBoZWFkZXJzKSB7XHJcbiAgICB0aGlzLl9mZXRjaGluZ1Byb21pc2UgPSBudWxsO1xyXG4gICAgdGhpcy54aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcclxuXHJcbiAgICB0aGlzLnhoci53aXRoQ3JlZGVudGlhbHMgPSB0cnVlO1xyXG5cclxuICAgIGlmICghIW1ldGhvZCAmJiAhIXVyaSkge1xyXG4gICAgICB0aGlzLnhoci5vcGVuKG1ldGhvZCwgdXJpKTtcclxuICAgIH1cclxuICAgIGlmIChjb250ZW50VHlwZSkge1xyXG4gICAgICB0aGlzLnhoci5zZXRSZXF1ZXN0SGVhZGVyKCdDb250ZW50LVR5cGUnLCBjb250ZW50VHlwZSk7XHJcbiAgICB9IFxyXG4gICAgaWYgKGhlYWRlcnMgJiYgaGVhZGVycy5sZW5ndGgpIHtcclxuICAgICAgaGVhZGVycy5mb3JFYWNoKGggPT4ge1xyXG4gICAgICAgIHRoaXMueGhyLnNldFJlcXVlc3RIZWFkZXIoaC5oZWFkZXIsIGgudmFsdWUpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9wZW4obWV0aG9kLCB1cmkpIHtcclxuICAgIGlmICghIW1ldGhvZCAmJiAhIXVyaSkge1xyXG4gICAgICB0aGlzLnhoci5vcGVuKG1ldGhvZCwgdXJpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldFJlcXVlc3RIZWFkZXIoaGVhZGVyLCB2YWx1ZSkge1xyXG4gICAgaWYgKCEhaGVhZGVyICYmICEhdmFsdWUpIHtcclxuICAgICAgdGhpcy54aHIuc2V0UmVxdWVzdEhlYWRlcihoZWFkZXIsIHZhbHVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldEFsbFJlc3BvbnNlSGVhZGVycygpIHtcclxuICAgIHJldHVybiB0aGlzLmhlYWRlcnM7XHJcbiAgfVxyXG5cclxuICBmZXRjaEZyb21TZXJ2ZXIocGF5bG9hZCkge1xyXG4gICAgdmFyIHJldCA9IG51bGw7XHJcblxyXG4gICAgcmV0ID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG5cclxuICAgICAgdGhpcy54aHIub25sb2FkID0gKCkgPT4ge1xyXG5cclxuICAgICAgICBpZiAodGhpcy5yZWFkeVN0YXRlID09PSB0aGlzLkhFQURFUlNfUkVDRUlWRUQpIHtcclxuICAgICAgICAgIHRoaXMuaGVhZGVycyA9IHRoaXMueGhyLmdldEFsbFJlc3BvbnNlSGVhZGVycygpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMueGhyLnN0YXR1cyA9PT0gMjAwKSB7XHJcbiAgICAgICAgICB2YXIgZCA9IG51bGw7XHJcbiAgICAgICAgICAvL3RyeSB7XHJcbiAgICAgICAgICAgIGQgPSBKU09OLnBhcnNlKHRoaXMueGhyLnJlc3BvbnNlVGV4dCwgKGssIHYpID0+IHtcclxuICAgICAgICAgICAgICBpZiAoISF2ICYmIChrID09PSAnY3JlYXRlZG9uJyB8fCBrID09PSAndXBkYXRlZG9uJyB8fCBrID09PSAnYXNrZWRvbicgfHwgayA9PT0gJ3B1Ymxpc2hlZG9uJyB8fCBrID09PSAnbGFzdFVwZGF0ZWQnKSAmJiBEYXRlLnBhcnNlKHYpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IERhdGUodik7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmICghIXYgJiYgKGsgPT09ICdqc29uJykgJiYgdHlwZW9mIHYgPT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2Uodik7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHJldHVybiB2O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIC8vfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgLy8gIGFsZXJ0KGUpO1xyXG4gICAgICAgICAgLy99XHJcbiAgICAgICAgICByZXNvbHZlKFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAganNvbjogZCxcclxuICAgICAgICAgICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnNcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZWplY3QodGhpcy54aHIuc3RhdHVzVGV4dCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2ZldGNoaW5nUHJvbWlzZSA9IG51bGw7XHJcbiAgICAgIH07XHJcblxyXG4gICAgICB0aGlzLnhoci5vbmVycm9yID0gKGUpID0+IHtcclxuICAgICAgICByZWplY3QoZS50YXJnZXQuc3RhdHVzKTtcclxuICAgICAgICB0aGlzLl9mZXRjaGluZ1Byb21pc2UgPSBudWxsO1xyXG4gICAgICB9O1xyXG5cclxuICAgICAgaWYgKHBheWxvYWQgaW5zdGFuY2VvZiBGb3JtRGF0YSkge1xyXG4gICAgICAgIHRoaXMueGhyLnNlbmQocGF5bG9hZCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy54aHIuc2VuZChKU09OLnN0cmluZ2lmeShwYXlsb2FkKSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vdGhpcy54aHIuc2VuZChKU09OLnN0cmluZ2lmeShwYXlsb2FkKSk7XHJcblxyXG4gICAgICAvL3RoaXMueGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgLy8gIGlmICh0aGlzLnJlYWR5U3RhdGUgPT0gdGhpcy5IRUFERVJTX1JFQ0VJVkVEKSB7XHJcbiAgICAgIC8vICAgIGNvbnNvbGUubG9nKFwiaGVhZGVyc1wiLCByZXF1ZXN0LmdldEFsbFJlc3BvbnNlSGVhZGVycygpKTtcclxuICAgICAgLy8gIH1cclxuICAgICAgLy99XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gcmV0O1xyXG4gIH1cclxuXHJcbiAgc2VuZChwYXlsb2FkKSB7XHJcbiAgICBpZiAoIXRoaXMuX2ZldGNoaW5nUHJvbWlzZSkge1xyXG4gICAgICB0aGlzLl9mZXRjaGluZ1Byb21pc2UgPSB0aGlzLmZldGNoRnJvbVNlcnZlcihwYXlsb2FkKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuX2ZldGNoaW5nUHJvbWlzZTtcclxuICB9XHJcblxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBIdHRwUmVxdWVzdCA7IiwiaW1wb3J0IEh0dHBSZXF1ZXN0IGZyb20gXCIuLi9IdHRwUmVxdWVzdC5qc1wiO1xyXG5cclxudmFyIHRpbWVvdXRpZCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcclxuICAvL2NvbnNvbGUubG9nKFwid2FnZW5pXCIsIFwidGltZW91dCB0cmlnZ2VyZWRcIik7XHJcbiAgcGluZygpO1xyXG59LCA1MDApO1xyXG5cclxuY29uc29sZS5sb2coXCJ3YWdlbmlcIiwgXCJjcmVhdGVkIHRpbWVvdXRpZFwiLCB0aW1lb3V0aWQpO1xyXG5cclxudmFyIGhvc3RuYW1lID0gKHVybCkgPT4ge1xyXG4gIHZhciByZXQgPSBcIlwiO1xyXG4gIGlmICh1cmwpIHtcclxuICAgIHZhciBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xyXG4gICAgYS5ocmVmID0gdXJsO1xyXG4gICAgcmV0ID0gYS5ob3N0bmFtZTtcclxuICB9XHJcblxyXG4gIHJldHVybiByZXQ7XHJcbn07XHJcblxyXG52YXIgZG9tYWluID0gaG9zdG5hbWUoZG9jdW1lbnQubG9jYXRpb24uaHJlZikuc3BsaXQoJy4nKS5yZXZlcnNlKCkuc2xpY2UoMCwgMikucmV2ZXJzZSgpLmpvaW4oXCIuXCIpO1xyXG52YXIgcmVmZXJyZXIgPSBob3N0bmFtZShkb2N1bWVudC5yZWZlcnJlcik7XHJcbnJlZmVycmVyID0gcmVmZXJyZXIgIT0gZG9tYWluID8gcmVmZXJyZXIgOiBcIlwiO1xyXG4gXHJcbi8vZ2V0IHV0bV9zb3VyY2UsIHV0bV9tZWRpdW0sIHV0bV9jYW1wYWlnblxyXG52YXIgX3dhZ2VuaSA9IFtdO1xyXG5pZiAod2luZG93LndhZ2VuaSAmJiB3aW5kb3cud2FnZW5pLnEpIHtcclxuICBfd2FnZW5pID0gd2luZG93LndhZ2VuaS5xO1xyXG59XHJcblxyXG53aW5kb3cud2FnZW5pID0gKG1ldGhvZCwgcHJvcHMpID0+IHtcclxuICAvL2NvbnNvbGUubG9nKFwid2FnZW5pXCIsIG1ldGhvZCwgXCIgY2FsbGVkIHdpdGggPT09Pj4+XCIsIHByb3BzKVxyXG4gIHN3aXRjaCAobWV0aG9kKSB7XHJcbiAgICBjYXNlIFwicGluZ1wiOlxyXG4gICAgICBpZiAodGltZW91dGlkKSB7XHJcbiAgICAgICAgd2luZG93LmNsZWFyVGltZW91dCh0aW1lb3V0aWQpO1xyXG4gICAgICAgIC8vY29uc29sZS5sb2coXCJ3YWdlbmlcIiwgXCJjbGVhcmVkIHRpbWVvdXRpZFwiLCB0aW1lb3V0aWQpO1xyXG4gICAgICAgIHRpbWVvdXRpZCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgIHBpbmcocHJvcHMpO1xyXG4gICAgICAgIH0sIDI1MCk7XHJcbiAgICAgIH1cclxuICAgICAgYnJlYWs7XHJcbiAgfVxyXG5cclxuICAvL2NvbnNvbGUubG9nKFwid2FnZW5pXCIsIFwicHVzaCBpcyByZWFkeVwiKTtcclxuXHJcbiAgLy9yZXR1cm4ge1xyXG4gIC8vICBcInB1c2hcIjogKGRhdGEpID0+IHtcclxuICAvLyAgICBwaW5nKGRhdGEpO1xyXG4gIC8vICAgIGNvbnNvbGUubG9nKFwid2FnZW5pXCIsIFwicHVzaGVkXCIsIGRhdGEpO1xyXG4gIC8vICB9XHJcbiAgLy99XHJcbn1cclxuXHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3cud2FnZW5pLCAncHVzaCcsIHtcclxuICB2YWx1ZTogZnVuY3Rpb24gKHBheWxvYWQpIHtcclxuICAgIHBpbmcocGF5bG9hZCk7XHJcbiAgfVxyXG59KTtcclxuXHJcbl93YWdlbmkuZm9yRWFjaCh3ID0+IHtcclxuICB3YWdlbmkod1swXSwgd1sxXSk7XHJcbn0pO1xyXG5cclxuZnVuY3Rpb24gcGluZyhwcm9wcykge1xyXG4gIHRpbWVvdXRpZCA9IG51bGw7XHJcbiAgdmFyIGNsaWVudElkID0gXCJcIjtcclxuICBpZiAoISh0eXBlb2YgZ2EgPT09IFwidW5kZWZpbmVkXCIpICYmIGdhLmdldEFsbCkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgdmFyIHRyYWNrZXIgPSBnYS5nZXRBbGwoKVswXTtcclxuXHJcbiAgICAgIGNsaWVudElkID0gdHJhY2tlci5nZXQoJ2NsaWVudElkJyk7XHJcbiAgICAgIGNvbnNvbGUubG9nKFwid2FnZW5pXCIsIFwiY2xpZW50SWRcIiwgY2xpZW50SWQpO1xyXG4gICAgfSBjYXRjaCAoZXJyb3Ipe1xyXG4gICAgICBjb25zb2xlLmxvZyhcIndhZ2VuaVwiLCBcImdhIGlzIG5vdCBhdmFpbGFibGVcIik7XHJcbiAgICB9XHJcbiAgICAvL2dhKGZ1bmN0aW9uICgpIHtcclxuICAgIC8vICB2YXIgdHJhY2tlciA9IGdhLmdldEFsbCgpWzBdO1xyXG5cclxuICAgIC8vICB2YXIgY2xpZW50SWQgPSB0cmFja2VyLmdldCgnY2xpZW50SWQnKTtcclxuICAgIC8vfSBcclxuICB9XHJcblxyXG4gIC8vdmFyIHBheWxvYWQgPSB7XHJcbiAgLy8gIGRvbWFpbjogZG9tYWluLFxyXG4gIC8vICBjbGllbnRJZDogY2xpZW50SWQsXHJcblxyXG4gIC8vICBsb2NhdGlvbjogZG9jdW1lbnQubG9jYXRpb24sXHJcblxyXG4gIC8vICByZWZlcnJlcjogcmVmZXJyZXIsXHJcbiAgLy8gIGN1cnJlbnQ6IGRvY3VtZW50LmxvY2F0aW9uLmhyZWYsXHJcbiAgLy8gIHByZXZpb3VzOiBkb2N1bWVudC5yZWZlcnJlcixcclxuXHJcbiAgLy8gIHdpZHRoOiB3aW5kb3cuc2NyZWVuLndpZHRoLFxyXG4gIC8vICB1c2VyQWdlbnQ6IG5hdmlnYXRvci51c2VyQWdlbnQsXHJcblxyXG4gIC8vICBhZElkVmlld2VkOiAocHJvcHMgfHwge30pLmFkSWRWaWV3ZWQsXHJcbiAgLy8gIGFkSWRDbGlja2VkOiAocHJvcHMgfHwge30pLmFkSWRDbGlja2VkXHJcbiAgLy99XHJcblxyXG4gIHZhciBwYXlsb2FkID0ge1xyXG4gICAgZG9tYWluOiBkb21haW4sXHJcbiAgICBjbGllbnRJZDogY2xpZW50SWQsXHJcblxyXG4gICAgbG9jYXRpb246IGRvY3VtZW50LmxvY2F0aW9uLFxyXG5cclxuICAgIHJlZmVycmVyOiByZWZlcnJlcixcclxuICAgIGN1cnJlbnQ6IGRvY3VtZW50LmxvY2F0aW9uLmhyZWYsXHJcbiAgICBwcmV2aW91czogZG9jdW1lbnQucmVmZXJyZXIsXHJcblxyXG4gICAgd2lkdGg6IHdpbmRvdy5zY3JlZW4ud2lkdGgsXHJcbiAgICB1c2VyQWdlbnQ6IG5hdmlnYXRvci51c2VyQWdlbnQsXHJcblxyXG4gICAgLi4ucHJvcHNcclxuICB9XHJcblxyXG4gIC8vY29uc29sZS5sb2coXCJ3YWdlbmkhISFcIik7XHJcbiAgLy9jb25zb2xlLmxvZyhcInBvc3RpbmcgSHR0cFJlcXVlc3QgcGF5bG9hZFwiLCBwYXlsb2FkKTtcclxuICAvL2NvbnNvbGUubG9nKFwid2FnZW5pISEhXCIpO1xyXG5cclxuICB2YXIgdXJsID0gXCJ7LS13YWdlbmktaG9zdC0tfVwiICsgXCIvcGluZ1wiO1xyXG5cclxuICB2YXIgaGVhZGVycyA9IFtdO1xyXG4gIHZhciB4aHIgPSBuZXcgSHR0cFJlcXVlc3QoXCJQT1NUXCIsIHVybCk7Ly8sIFwiYXBwbGljYXRpb24vanNvblwiLCBoZWFkZXJzKTtcclxuICByZXR1cm4geGhyLnNlbmQocGF5bG9hZCkudGhlbigocmVzcG9uc2UpID0+IHtcclxuICAgIHZhciBqc29uID0gcmVzcG9uc2UuanNvbjtcclxuXHJcbiAgICAvL2lmIChqc29uLm1lc3NhZ2UgfHwganNvbi5leGNlcHRpb24pIHtcclxuICAgIC8vICBhbGVydChqc29uLm1lc3NhZ2UgfHwganNvbi5leGNlcHRpb24pO1xyXG4gICAgLy99IGVsc2Uge1xyXG4gICAgLy99XHJcblxyXG4gICAgY29uc29sZS5sb2coXCJ3YWdlbmkhISFcIik7XHJcbiAgICBjb25zb2xlLmxvZyhcIkh0dHBSZXF1ZXN0IHJlc3BvbnNlXCIsIHJlc3BvbnNlKTtcclxuICAgIGNvbnNvbGUubG9nKFwid2FnZW5pISEhXCIpO1xyXG5cclxuICAgIHJldHVybiBqc29uO1xyXG4gIH0pLmNhdGNoKChlKSA9PiB7XHJcbiAgfSk7XHJcblxyXG4gIC8vY29uc29sZS5sb2coXCJ3YWdlbmkhISFcIik7XHJcbiAgLy9jb25zb2xlLmxvZyhcInBvc3RlZCBIdHRwUmVxdWVzdCBwYXlsb2FkXCIsIHBheWxvYWQpO1xyXG4gIC8vY29uc29sZS5sb2coXCJ3YWdlbmkhISFcIik7XHJcblxyXG59XHJcblxyXG5cclxuXHJcbiJdLCJzb3VyY2VSb290IjoiIn0=